blob: b46cbfde0ffe74c331119a2e3e1760369fab258b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#include "libultra_internal.h"
extern OSMgrArgs __osPiDevMgr;
s32 osPiStartDma(OSIoMesg* mb, s32 priority, s32 direction, uintptr_t devAddr, void* vAddr, size_t nbytes,
OSMesgQueue* mq) {
register s32 result;
register OSMesgQueue* cmdQueue;
if (!__osPiDevMgr.initialized) {
return -1;
}
//! @todo name magic constants
if (direction == OS_READ) {
mb->hdr.type = 11;
} else {
mb->hdr.type = 12;
}
mb->hdr.pri = priority;
mb->hdr.retQueue = mq;
mb->dramAddr = vAddr;
mb->devAddr = devAddr;
mb->size = nbytes;
mb->piHandle = NULL;
if (priority == OS_MESG_PRI_HIGH) {
cmdQueue = osPiGetCmdQueue();
result = osJamMesg(cmdQueue, mb, OS_MESG_NOBLOCK);
} else {
cmdQueue = osPiGetCmdQueue();
result = osSendMesg(cmdQueue, mb, OS_MESG_NOBLOCK);
}
return result;
}
|