orbital/tools/dumper/source/gpu_dumper.c

66 lines
1.4 KiB
C

/**
* (c) 2017-2019 Alexandro Sanchez Bach.
* Released under MIT license. Read LICENSE for more details.
*
* Based in previous tools and research by: fail0verflow, flatz.
*/
#ifdef VERSION_500
#include "gpu_dumper.h"
#include "debug.h"
#include "ksdk.h"
typedef struct gpu_dump_ih_info_t {
/* gpu information */
uint32_t rb_rptr;
uint32_t rb_wptr;
/* cpu information */
void *rb_base;
/* ih ringbuffer */
uint8_t rb[0x1000];
} gpu_dump_ih_info_t;
/* kernel */
typedef struct gpu_kdump_ih_args_t {
gpu_dump_ih_info_t *uinfo;
} gpu_kdump_ih_args_t;
typedef struct gpu_kmethod_uap_t {
void *kmethod;
void *args;
} gpu_kmethod_uap_t;
int gpu_kdump_ih(
struct thread *td, struct gpu_kmethod_uap_t *uap)
{
int ret;
gpu_kdump_ih_args_t *args = uap->args;
gpu_dump_ih_info_t info;
ret = 0;
info.rb_wptr = 0x4567;
info.rb_base = g_ih_mgr->rb_base;
memcpy(&info.rb, g_ih_mgr->rb_base, 0x1000);
memcpy(args->uinfo, &info, sizeof(info));
return ret;
}
int gpu_dump_ih()
{
gpu_dump_ih_info_t info;
gpu_kdump_ih_args_t args;
args.uinfo = &info;
info.rb_rptr = 0x1234;
syscall(11, gpu_kdump_ih, &args);
dprintf("rb_rptr %X\n", info.rb_rptr);
dprintf("rb_wptr %X\n", info.rb_wptr);
dprintf("rb_base %p\n", info.rb_base);
hexdump("rb", &info.rb, 0x1000);
return 0;
}
#endif