diff --git a/include/ipc_handler.h b/include/ipc_handler.h index ee5ace8..b34d7d9 100644 --- a/include/ipc_handler.h +++ b/include/ipc_handler.h @@ -69,6 +69,12 @@ #undef CMD_OUT_BUFS #undef CMD_PARAMS +typedef struct +{ + void *ptr; + u32 size; +} IpcBuffer; -u32 IPC_handleCmd(u8 cmdId, u8 inBufs, u8 outBufs, const u32 *buf); + +u32 IPC_handleCmd(u8 cmdId, u8 inBufs, u8 outBufs, const u32 *const buf); diff --git a/source/ipc_handler.c b/source/ipc_handler.c index 3e5983f..fbd4087 100644 --- a/source/ipc_handler.c +++ b/source/ipc_handler.c @@ -34,13 +34,19 @@ #ifdef ARM9 -u32 IPC_handleCmd(u8 cmdId, u8 inBufs, u8 outBufs, const u32 *buf) +u32 IPC_handleCmd(u8 cmdId, u8 inBufs, u8 outBufs, const u32 *const buf) { for(u32 i = 0; i < inBufs; i++) - invalidateDCacheRange((void*)buf[i * 2], buf[i * 2 + 1]); + { + const IpcBuffer *const inBuf = (IpcBuffer*)&buf[i * sizeof(IpcBuffer)]; + invalidateDCacheRange(inBuf->ptr, inBuf->size); + } for(u32 i = inBufs; i < inBufs + outBufs; i++) - flushDCacheRange((void*)buf[i * 2], buf[i * 2 + 1]); + { + const IpcBuffer *const outBuf = (IpcBuffer*)&buf[i * sizeof(IpcBuffer)]; + flushDCacheRange(outBuf->ptr, outBuf->size); + } u32 result = 0; switch(cmdId) @@ -100,13 +106,19 @@ #elif ARM11 -u32 IPC_handleCmd(u8 cmdId, u8 inBufs, u8 outBufs, UNUSED const u32 *buf) +u32 IPC_handleCmd(u8 cmdId, u8 inBufs, u8 outBufs, UNUSED const u32 *const buf) { for(u32 i = 0; i < inBufs; i++) - invalidateDCacheRange((void*)buf[i * 2], buf[i * 2 + 1]); + { + const IpcBuffer *const inBuf = (IpcBuffer*)&buf[i * sizeof(IpcBuffer)]; + invalidateDCacheRange(inBuf->ptr, inBuf->size); + } for(u32 i = inBufs; i < inBufs + outBufs; i++) - flushDCacheRange((void*)buf[i * 2], buf[i * 2 + 1]); + { + const IpcBuffer *const outBuf = (IpcBuffer*)&buf[i * sizeof(IpcBuffer)]; + flushDCacheRange(outBuf->ptr, outBuf->size); + } u32 result = 0; switch(cmdId)