38 lines
1.2 KiB
C
38 lines
1.2 KiB
C
|
#include "libultra_internal.h"
|
||
|
|
||
|
void __osDevMgrMain(void *args) {
|
||
|
OSIoMesg *sp34;
|
||
|
OSMesg sp30;
|
||
|
OSMesg sp2c;
|
||
|
s32 sp28;
|
||
|
OSMgrArgs *sp24;
|
||
|
sp34 = NULL;
|
||
|
sp28 = 0;
|
||
|
sp24 = (OSMgrArgs *) args;
|
||
|
while (1) {
|
||
|
osRecvMesg(sp24->unk08, (OSMesg) &sp34, OS_MESG_BLOCK);
|
||
|
switch (sp34->hdr.type) {
|
||
|
case 11:
|
||
|
osRecvMesg(sp24->unk10, &sp2c, OS_MESG_BLOCK);
|
||
|
sp28 = sp24->dma_func(OS_READ, sp34->devAddr, sp34->dramAddr, sp34->size);
|
||
|
break;
|
||
|
case 12:
|
||
|
osRecvMesg(sp24->unk10, &sp2c, OS_MESG_BLOCK);
|
||
|
sp28 = sp24->dma_func(OS_WRITE, sp34->devAddr, sp34->dramAddr, sp34->size);
|
||
|
break;
|
||
|
case 10:
|
||
|
osSendMesg(sp34->hdr.retQueue, sp34, OS_MESG_NOBLOCK);
|
||
|
sp28 = -1;
|
||
|
break;
|
||
|
default:
|
||
|
sp28 = -1;
|
||
|
break;
|
||
|
}
|
||
|
if (sp28 == 0) {
|
||
|
osRecvMesg(sp24->unk0c, &sp30, OS_MESG_BLOCK);
|
||
|
osSendMesg(sp34->hdr.retQueue, sp34, OS_MESG_NOBLOCK);
|
||
|
osSendMesg(sp24->unk10, NULL, OS_MESG_NOBLOCK);
|
||
|
}
|
||
|
}
|
||
|
}
|