osPiRawStartDma.c (606B)
1 #include "libultra_internal.h" 2 #include "PR/rcp.h" 3 #include "piint.h" 4 5 s32 osPiRawStartDma(s32 dir, u32 cart_addr, void *dram_addr, size_t size) { 6 register u32 status; 7 8 WAIT_ON_IO_BUSY(status); 9 10 IO_WRITE(PI_DRAM_ADDR_REG, osVirtualToPhysical(dram_addr)); 11 12 IO_WRITE(PI_CART_ADDR_REG, K1_TO_PHYS((uintptr_t) osRomBase | cart_addr)); 13 14 switch (dir) { 15 case OS_READ: 16 IO_WRITE(PI_WR_LEN_REG, size - 1); 17 break; 18 case OS_WRITE: 19 IO_WRITE(PI_RD_LEN_REG, size - 1); 20 break; 21 default: 22 return -1; 23 } 24 return 0; 25 }