|
| 1 | +#ifndef _DOLPHIN_AR_H_ |
| 2 | +#define _DOLPHIN_AR_H_ |
| 3 | + |
| 4 | +#ifdef __cplusplus |
| 5 | +extern "C" { |
| 6 | +#endif |
| 7 | + |
| 8 | +typedef void (*ARQCallback)(u32 pointerToARQRequest); |
| 9 | + |
| 10 | +struct ARQRequest { |
| 11 | + /* 0x00 */ struct ARQRequest *next; |
| 12 | + /* 0x04 */ u32 owner; |
| 13 | + /* 0x08 */ u32 type; |
| 14 | + /* 0x0C */ u32 priority; |
| 15 | + /* 0x10 */ u32 source; |
| 16 | + /* 0x14 */ u32 dest; |
| 17 | + /* 0x18 */ u32 length; |
| 18 | + /* 0x1C */ ARQCallback callback; |
| 19 | +}; |
| 20 | + |
| 21 | +#define ARQ_DMA_ALIGNMENT 32 |
| 22 | + |
| 23 | +#define ARAM_DIR_MRAM_TO_ARAM 0x00 |
| 24 | +#define ARAM_DIR_ARAM_TO_MRAM 0x01 |
| 25 | + |
| 26 | +#define ARStartDMARead(mmem, aram, len) \ |
| 27 | + ARStartDMA(ARAM_DIR_ARAM_TO_MRAM, mmem, aram, len) |
| 28 | +#define ARStartDMAWrite(mmem, aram, len) \ |
| 29 | + ARStartDMA(ARAM_DIR_MRAM_TO_ARAM, mmem, aram, len) |
| 30 | + |
| 31 | +typedef struct ARQRequest ARQRequest; |
| 32 | + |
| 33 | +#define ARQ_TYPE_MRAM_TO_ARAM ARAM_DIR_MRAM_TO_ARAM |
| 34 | +#define ARQ_TYPE_ARAM_TO_MRAM ARAM_DIR_ARAM_TO_MRAM |
| 35 | + |
| 36 | +#define ARQ_PRIORITY_LOW 0 |
| 37 | +#define ARQ_PRIORITY_HIGH 1 |
| 38 | + |
| 39 | +// AR |
| 40 | +ARQCallback ARRegisterDMACallback(ARQCallback callback); |
| 41 | +u32 ARGetDMAStatus(void); |
| 42 | +void ARStartDMA(u32 type, u32 mainmem_addr, u32 aram_addr, u32 length); |
| 43 | +u32 ARAlloc(u32 length); |
| 44 | +u32 ARFree(u32* length); |
| 45 | +BOOL ARCheckInit(void); |
| 46 | +u32 ARInit(u32* stack_index_addr, u32 num_entries); |
| 47 | +void ARReset(void); |
| 48 | +void ARSetSize(void); |
| 49 | +u32 ARGetBaseAddress(void); |
| 50 | +u32 ARGetSize(void); |
| 51 | +u32 ARGetInternalSize(void); |
| 52 | +void ARClear(u32 flag); |
| 53 | + |
| 54 | +// ARQ |
| 55 | +void ARQInit(void); |
| 56 | +void ARQReset(void); |
| 57 | +void ARQPostRequest(ARQRequest* request, u32 owner, u32 type, u32 priority, u32 source, u32 dest, u32 length, ARQCallback callback); |
| 58 | +void ARQRemoveRequest(ARQRequest* request); |
| 59 | +void ARQRemoveOwnerRequest(u32 owner); |
| 60 | +void ARQFlushQueue(void); |
| 61 | +void ARQSetChunkSize(u32 size); |
| 62 | +u32 ARQGetChunkSize(void); |
| 63 | +BOOL ARQCheckInit(void); |
| 64 | + |
| 65 | +#ifdef __cplusplus |
| 66 | +} |
| 67 | +#endif |
| 68 | + |
| 69 | +#endif |
0 commit comments