From db2a32154f6ae29477812692a286481e059e92cb Mon Sep 17 00:00:00 2001 From: Lucas Fryzek Date: Wed, 7 Aug 2024 21:45:24 +0100 Subject: drv: Add ccb buffer and pds data Data still needs to be patched at runtime to point to the correct addresses. --- src/wrap.c | 69 ++++++++------------------------------------------------------ 1 file changed, 9 insertions(+), 60 deletions(-) (limited to 'src/wrap.c') diff --git a/src/wrap.c b/src/wrap.c index 2801211..0d350eb 100644 --- a/src/wrap.c +++ b/src/wrap.c @@ -48,60 +48,7 @@ #define DRM_COMMAND_BASE 0x40 -typedef struct __attribute__((__packed__)) Register { - unsigned int addr; - unsigned int val; -} Register; - -//XXX: this is probably wrong -typedef struct __attribute__((__packed__)) CCBEntry -{ - uint32_t length; - uint32_t unk0; - uint32_t unk1; // Indirect points to 0x67 PDSPixelCodeData with 0xdcxxxx0 - uint32_t unk2; - uint32_t unk3; // Indirect points to 0x67 PDSPixelCodeData with 0xdcxxxx0 offset by 4 - uint32_t unk4; - uint32_t unk5; - uint32_t unk6; - uint32_t frame_number; - IMG_DEV_VIRTADDR dev_addr_0; - uint32_t unk7; - uint32_t unk8; - uint32_t unk9; - uint32_t unk10; - uint32_t unk11; - uint32_t unk12; - uint32_t unk13; - IMG_DEV_VIRTADDR dev_addr_1; - uint32_t unk14; - IMG_DEV_VIRTADDR dev_addr_2; - IMG_DEV_VIRTADDR dev_addr_3; - IMG_DEV_VIRTADDR dev_addr_4; - IMG_DEV_VIRTADDR dev_addr_5; - IMG_DEV_VIRTADDR dev_addr_6; - uint32_t num_regs; - SGXMKIF_CMDTA_SHARED shared_data; - uint32_t unk15; - uint32_t unk16; - uint32_t unk17; - uint32_t unk18; - uint32_t unk19; - uint32_t unk20; - uint32_t vdm_command_stream; - uint32_t unk21; - IMG_DEV_VIRTADDR dev_addr_ta_0; // points to 0x95 TAData buffer, size is 0xc00 and all zeros - IMG_DEV_VIRTADDR dev_addr_ta_1; // points to 0x8d TAData buffer, size is 0x400 and not all zeros - uint32_t unk24; - uint32_t unk25; - uint32_t unk26; - uint32_t unk27; - uint32_t unk28; - IMG_DEV_VIRTADDR dev_addr_per3d_0; // points to 0x12 PerContext3DParameters, size is 0x3dd000 and all zeros - uint32_t unk30; - //this is probably variable length - Register r[1]; -} CCBEntry; +#include "ccb.h" #define DEBUG_SYSCALL(msg) write(-1, (msg), sizeof(msg)) @@ -658,6 +605,7 @@ static void pvrsrv_ioctl_post(int fd, PVRSRV_BRIDGE_PACKAGE *bridge_package, int { PVRSRV_BRIDGE_IN_MAP_DEV_MEMORY *in = bridge_package->pvParamIn; PVRSRV_BRIDGE_OUT_MAP_DEV_MEMORY *out_data = bridge_package->pvParamOut; + //out_data->sDstClientMemInfo.hKernelMemInfo = (void*)0xdeadbeef; track_buffer(&out_data->sDstClientMemInfo, MEM_TYPE_MAP); printf("Map dev mem %p\n", out_data->sDstClientMemInfo.hKernelMemInfo); printf("Mapping %p %p\n", in->hKernelMemInfo, in->hDstDevMemHeap); @@ -729,12 +677,13 @@ static bool pvrsrv_ioctl(int fd, PVRSRV_BRIDGE_PACKAGE *bridge_package) { printf("Created buffer to offset\n"); } #endif -#if 0 + /* Before buffer is allocated, allocate an identical buffer so addresses will be offset */ - create_buffer(fd, bridge_package, mem_data->hDevCookie, (uintptr_t)mem_data->hDevMemHeap, - mem_data->uSize, mem_data->ui32Attribs, mem_data->uAlignment); + char *realloc = getenv("REALLOC"); + if (realloc && strcmp(realloc, "1") == 0) + create_buffer(fd, bridge_package, mem_data->hDevCookie, (uintptr_t)mem_data->hDevMemHeap, + mem_data->uSize, mem_data->ui32Attribs, mem_data->uAlignment); -#endif #if 0 if (current_alloc == 5) { @@ -864,9 +813,9 @@ static bool pvrsrv_ioctl(int fd, PVRSRV_BRIDGE_PACKAGE *bridge_package) { printf("Num Regs is %d\n", entry->num_regs); DPRI(entry->length); DPRI(entry->unk0); - DPRI(entry->unk1); + DPRI(entry->pds_pixel_code_data_0.uiAddr); DPRI(entry->unk2); - DPRI(entry->unk3); + DPRI(entry->pds_pixel_code_data_0_4.uiAddr); DPRI(entry->unk4); DPRI(entry->unk5); DPRI(entry->unk6); -- cgit