ogrebattle64/src/rom_copy.c

29 lines
727 B
C

#include "common.h"
extern OSPiHandle* carthandle;
/* 1A4F0 8008A0F0 */
void romCopy(u32 devAddr, void* dramAddr, u32 size, s32 direction) {
OSIoMesg dmaIoMesgBuf;
OSMesgQueue dmaMessageQ;
void* dummyMesg;
osCreateMesgQueue(&dmaMessageQ, &dummyMesg, 1);
dmaIoMesgBuf.hdr.pri = OS_MESG_PRI_NORMAL;
dmaIoMesgBuf.hdr.retQueue = &dmaMessageQ;
dmaIoMesgBuf.dramAddr = dramAddr;
dmaIoMesgBuf.devAddr = devAddr;
dmaIoMesgBuf.size = size;
if (direction == OS_READ) {
osInvalDCache(dramAddr, size);
} else {
osWritebackDCache(dramAddr, size);
}
osEPiStartDma(carthandle, &dmaIoMesgBuf, direction);
osRecvMesg(&dmaMessageQ, &dummyMesg, OS_MESG_BLOCK);
}