librfu through 0x81E2C40

This commit is contained in:
jiangzhengwenjz
2019-12-31 06:42:18 +08:00
parent 973cb394b2
commit 6cbce0b966
3 changed files with 1139 additions and 3286 deletions
-3255
View File
File diff suppressed because it is too large Load Diff
+46 -29
View File
@@ -3,6 +3,12 @@
#include "main.h" #include "main.h"
/* TODOs:
* - documentation
* - check if any field needs to be volatile
* - decompile librfu_intr.s once arm support is back again
*/
enum enum
{ {
RFU_RESET = 0x10, RFU_RESET = 0x10,
@@ -134,16 +140,25 @@ struct RfuIntrStruct
struct RfuSlotStatusUNI struct RfuSlotStatusUNI
{ {
u16 sendState; struct
u8 dataReadyFlag; {
u8 bmSlot; struct UNISend
u16 payloadSize; {
void *src; // TODO: is it correct? u16 state;
u16 recvState; u8 dataReadyFlag;
u16 errorCode; u8 bmSlot;
u16 dataSize; u16 payloadSize;
u8 newDataFlag; const void *src;
u8 dataBlockFlag; } send;
struct UNIRecv
{
u16 state;
u16 errorCode;
u16 dataSize;
u8 newDataFlag;
u8 dataBlockFlag;
} recv;
} sub;
void *recvBuffer; void *recvBuffer;
u32 recvBufferSize; u32 recvBufferSize;
}; };
@@ -152,16 +167,15 @@ struct NIComm
{ {
u16 state; u16 state;
u16 failCounter; u16 failCounter;
u32 nowP[4]; // ??? const u8 *nowP[4];
u32 remainSize; u32 remainSize;
u16 errorCode; u16 errorCode;
u8 bmSlot; u8 bmSlot;
u8 unk_1b;
u8 recvAckFlag[4]; u8 recvAckFlag[4];
u8 ack; u8 ack;
u8 phase; u8 phase;
u8 n[4]; // ??? u8 n[4];
void *src; const void *src;
u8 bmSlotOrg; u8 bmSlotOrg;
u8 dataType; u8 dataType;
u16 payloadSize; u16 payloadSize;
@@ -170,16 +184,19 @@ struct NIComm
struct RfuSlotStatusNI struct RfuSlotStatusNI
{ {
struct NIComm send; struct
struct NIComm recv; {
struct NIComm send;
struct NIComm recv;
} sub;
void *recvBuffer; void *recvBuffer;
void *recvBufferSize; u32 recvBufferSize;
}; };
struct RfuFixed struct RfuFixed
{ {
void (*reqCallback)(u16, u16); void (*reqCallback)(u16, u16);
void *fastCopyPtr; void (*fastCopyPtr)(const u8 **, u8 **, s32);
u16 fastCopyBuffer[24]; u16 fastCopyBuffer[24];
u32 fastCopyBuffer2[12]; u32 fastCopyBuffer2[12];
u32 LLFBuffer[29]; u32 LLFBuffer[29];
@@ -190,7 +207,7 @@ struct RfuStatic
{ {
u8 flags; u8 flags;
u8 NIEndRecvFlag; u8 NIEndRecvFlag;
u8 RecvRenewalFlag; u8 recvRenewalFlag;
u8 commExistFlag; u8 commExistFlag;
u8 recvErrorFlag; u8 recvErrorFlag;
u8 recoveryBmSlot; u8 recoveryBmSlot;
@@ -231,7 +248,7 @@ struct RfuLinkStatus
u8 findParentCount; u8 findParentCount;
u8 watchInterval; u8 watchInterval;
u8 strength[4]; u8 strength[4];
u8 LLFReadyFlag; vu8 LLFReadyFlag;
u8 remainLLFrameSizeParent; u8 remainLLFrameSizeParent;
u8 remainLLFrameSizeChild[4]; u8 remainLLFrameSizeChild[4];
struct RfuTgtData partner[4]; struct RfuTgtData partner[4];
@@ -275,7 +292,7 @@ void rfu_REQ_sendData(u8);
void rfu_setMSCCallback(void (*func)(u16)); void rfu_setMSCCallback(void (*func)(u16));
void rfu_setREQCallback(void (*func)(u16, u16)); void rfu_setREQCallback(void (*func)(u16, u16));
bool8 rfu_getMasterSlave(void); bool8 rfu_getMasterSlave(void);
void rfu_REQBN_watchLink(u16 a0, u8 *a1, u8 *a2, u8 *a3); s32 rfu_REQBN_watchLink(u16 a0, u8 *a1, u8 *a2, u8 *a3);
u16 rfu_syncVBlank(void); u16 rfu_syncVBlank(void);
void rfu_REQ_reset(void); void rfu_REQ_reset(void);
void rfu_REQ_configSystem(u16, u8, u8); void rfu_REQ_configSystem(u16, u8, u8);
@@ -296,24 +313,24 @@ void rfu_REQ_changeMasterSlave(void);
void rfu_REQ_RFUStatus(void); void rfu_REQ_RFUStatus(void);
u32 rfu_getRFUStatus(u8 *status); u32 rfu_getRFUStatus(u8 *status);
struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void); struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void);
u8 rfu_NI_CHILD_setSendGameName(u8 a0, u8 a1); s32 rfu_NI_CHILD_setSendGameName(u8 a0, u8 a1);
void rfu_clearSlot(u8 a0, u8 a1); s32 rfu_clearSlot(u8 a0, u8 a1);
void rfu_clearAllSlot(void); void rfu_clearAllSlot(void);
bool16 rfu_CHILD_getConnectRecoveryStatus(u8 *status); u16 rfu_CHILD_getConnectRecoveryStatus(u8 *status);
u16 rfu_getConnectParentStatus(u8 *status, u8 *a1); u16 rfu_getConnectParentStatus(u8 *status, u8 *a1);
bool16 rfu_UNI_PARENT_getDRAC_ACK(u8 *a0); bool16 rfu_UNI_PARENT_getDRAC_ACK(u8 *a0);
void rfu_REQ_disconnect(u8 who); void rfu_REQ_disconnect(u8 who);
void rfu_changeSendTarget(u8 a0, u8 who, u8 a2); s32 rfu_changeSendTarget(u8 a0, u8 who, u8 a2);
void rfu_NI_stopReceivingData(u8 who); s32 rfu_NI_stopReceivingData(u8 who);
u16 rfu_initializeAPI(struct Unk_3001190 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam); u16 rfu_initializeAPI(struct Unk_3001190 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam);
void rfu_setTimerInterrupt(u8 which, IntrFunc *intr); void rfu_setTimerInterrupt(u8 which, IntrFunc *intr);
void rfu_setRecvBuffer(u8 a0, u8 a1, void *a2, size_t a3); s32 rfu_setRecvBuffer(u8 a0, u8 a1, void *a2, size_t a3);
bool16 rfu_UNI_setSendData(u8 flag, void *ptr, u8 size); s32 rfu_UNI_setSendData(u8 flag, const void *ptr, u8 size);
void rfu_REQ_recvData(void); void rfu_REQ_recvData(void);
void rfu_UNI_readySendData(u8 a0); void rfu_UNI_readySendData(u8 a0);
void rfu_UNI_clearRecvNewDataFlag(u8 a0); void rfu_UNI_clearRecvNewDataFlag(u8 a0);
void rfu_REQ_PARENT_resumeRetransmitAndChange(void); void rfu_REQ_PARENT_resumeRetransmitAndChange(void);
void rfu_NI_setSendData(u8, u8, const void *, u32); s32 rfu_NI_setSendData(u8, u8, const void *, u32);
// librfu_intr // librfu_intr
void IntrSIO32(void); void IntrSIO32(void);
+1093 -2
View File
File diff suppressed because it is too large Load Diff