Merge pull request #438 from s4Ys369/revert-434-patch-1
[sm64pc.git] / include / PR / os_pi.h
blob50e807f3bddabffbd39fddc25d64f9d8c83aade7
1 #ifndef _ULTRA64_PI_H_
2 #define _ULTRA64_PI_H_
4 /* Ultra64 Parallel Interface */
6 /* Types */
8 typedef struct {
9 #if !defined(VERSION_EU) && !defined(VERSION_SH)
10 u32 errStatus;
11 #endif
12 void *dramAddr;
13 void *C2Addr;
14 u32 sectorSize;
15 u32 C1ErrNum;
16 u32 C1ErrSector[4];
17 } __OSBlockInfo;
19 typedef struct {
20 u32 cmdType; // 0
21 u16 transferMode; // 4
22 u16 blockNum; // 6
23 s32 sectorNum; // 8
24 uintptr_t devAddr; // c
25 #if defined(VERSION_EU) || defined(VERSION_SH)
26 u32 unk10; //error status added moved to blockinfo
27 #endif
28 u32 bmCtlShadow; // 10
29 u32 seqCtlShadow; // 14
30 __OSBlockInfo block[2]; // 18
31 } __OSTranxInfo;
33 typedef struct OSPiHandle_s {
34 struct OSPiHandle_s *next;
35 u8 type;
36 u8 latency;
37 u8 pageSize;
38 u8 relDuration;
39 u8 pulse;
40 u8 domain;
41 u32 baseAddress;
42 u32 speed;
43 __OSTranxInfo transferInfo;
44 } OSPiHandle;
46 typedef struct {
47 u8 type;
48 uintptr_t address;
49 } OSPiInfo;
51 typedef struct {
52 u16 type;
53 u8 pri;
54 u8 status;
55 OSMesgQueue *retQueue;
56 } OSIoMesgHdr;
58 typedef struct {
59 /*0x00*/ OSIoMesgHdr hdr;
60 /*0x08*/ void *dramAddr;
61 /*0x0C*/ uintptr_t devAddr;
62 /*0x10*/ size_t size;
63 #if defined(VERSION_EU) || defined(VERSION_SH)
64 OSPiHandle *piHandle; // from the official definition
65 #endif
66 } OSIoMesg;
68 /* Definitions */
70 #define OS_READ 0 // device -> RDRAM
71 #define OS_WRITE 1 // device <- RDRAM
73 #define OS_MESG_PRI_NORMAL 0
74 #define OS_MESG_PRI_HIGH 1
76 /* Functions */
78 s32 osPiStartDma(OSIoMesg *mb, s32 priority, s32 direction, uintptr_t devAddr, void *vAddr,
79 size_t nbytes, OSMesgQueue *mq);
80 void osCreatePiManager(OSPri pri, OSMesgQueue *cmdQ, OSMesg *cmdBuf, s32 cmdMsgCnt);
81 OSMesgQueue *osPiGetCmdQueue(void);
82 s32 osPiWriteIo(uintptr_t devAddr, u32 data);
83 s32 osPiReadIo(uintptr_t devAddr, u32 *data);
84 #endif