c: osPiRawStartDma

This commit is contained in:
Mittenshugg
2020-08-04 19:38:58 -05:00
parent 361b12c500
commit 2134cfe8df
11 changed files with 137 additions and 209 deletions
+8 -8
View File
@@ -8,26 +8,26 @@
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/func_800D2470.s")
#define PI_Q_BUF_LEN 1
extern u32 D_800E4800;//__osPiAccessQueueEnabled
extern u32 __osPiAccessQueueEnabled;//__osPiAccessQueueEnabled
extern OSMesg D_8012D1E0[PI_Q_BUF_LEN];//piAccessBuf
extern OSMesgQueue D_8012D1E8; //__osPiAccessQueue
extern OSMesgQueue piAccessQueue; //__osPiAccessQueue
void __osPiCreateAccessQueue(void)
{
D_800E4800 = 1;
osCreateMesgQueue(&D_8012D1E8, D_8012D1E0, PI_Q_BUF_LEN);
osSendMesg(&D_8012D1E8, NULL, OS_MESG_NOBLOCK);
__osPiAccessQueueEnabled = 1;
osCreateMesgQueue(&piAccessQueue, D_8012D1E0, PI_Q_BUF_LEN);
osSendMesg(&piAccessQueue, NULL, OS_MESG_NOBLOCK);
}
void __osPiGetAccess(void)
{
OSMesg dummyMesg;
if (!D_800E4800)
if (!__osPiAccessQueueEnabled)
__osPiCreateAccessQueue();
osRecvMesg(&D_8012D1E8, &dummyMesg, OS_MESG_BLOCK);
osRecvMesg(&piAccessQueue, &dummyMesg, OS_MESG_BLOCK);
}
void __osPiRelAccess(void)
{
osSendMesg(&D_8012D1E8, NULL, OS_MESG_NOBLOCK);
osSendMesg(&piAccessQueue, NULL, OS_MESG_NOBLOCK);
}
+30 -3
View File
@@ -4,12 +4,39 @@
#include "types.h"
#include "macros.h"
#include "libultra_internal.h"
#include "hardware.h"
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osDisableInt.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osRestoreInt.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/D_800D25A0.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/D_800D2680.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/D_800D2760.s")
s32 osPiRawStartDma(s32 direction, u32 devAddr, void *dramAddr, u32 size)
{
register int status;
status = HW_REG(PI_STATUS_REG, u32);
while (status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY | PI_STATUS_ERROR)) {
status = HW_REG(PI_STATUS_REG, u32);
}
HW_REG(PI_DRAM_ADDR_REG, void *) = (void *) osVirtualToPhysical(dramAddr);
HW_REG(PI_CART_ADDR_REG, void *) = (void *) (((uintptr_t) osRomBase | devAddr) & 0x1fffffff);
switch (direction) {
case OS_READ:
HW_REG(PI_WR_LEN_REG, u32) = size - 1;
break;
case OS_WRITE:
HW_REG(PI_RD_LEN_REG, u32) = size - 1;
break;
default:
return -1;
break;
}
return 0;
}
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/osEPiRawStartDma.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osDevMgrMain.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osViInit.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/func_800D2C60.s")