summaryrefslogtreecommitdiff
path: root/arm9/lib/include
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/lib/include')
-rw-r--r--arm9/lib/include/CARD_backup.h34
-rw-r--r--arm9/lib/include/CARD_common.h45
-rw-r--r--arm9/lib/include/MATH_crc.h7
-rw-r--r--arm9/lib/include/MI_memory.h4
4 files changed, 90 insertions, 0 deletions
diff --git a/arm9/lib/include/CARD_backup.h b/arm9/lib/include/CARD_backup.h
index d2cbc231..7cb5f820 100644
--- a/arm9/lib/include/CARD_backup.h
+++ b/arm9/lib/include/CARD_backup.h
@@ -2,7 +2,41 @@
#define NITRO_CARD_BACKUP_H_
#include "nitro/types.h"
+#include "MI_dma.h"
+#include "CARD_common.h"
BOOL CARD_TryWaitBackupAsync(void);
+BOOL CARD_WaitBackupAsync(void);
+void CARD_CancelBackupAsync(void);
+void CARD_UnlockBackup(u16 lock_id);
+void CARD_LockBackup(u16 lock_id);
+BOOL CARD_IdentifyBackup(u16 lock_id);
+
+BOOL CARDi_RequestStreamCommand(
+ u32 src,
+ u32 dst,
+ u32 len,
+ MIDmaCallback callback,
+ void * arg,
+ BOOL is_async,
+ CARDRequest req_type,
+ int req_retry,
+ CARDRequestMode req_mode
+);
+
+static inline BOOL CARDi_ReadBackup(u32 src, void * dst, u32 len, MIDmaCallback callback, void * arg, BOOL is_async)
+{
+ return CARDi_RequestStreamCommand((u32)src, (u32)dst, len, callback, arg, is_async, CARD_REQ_READ_BACKUP, 1, CARD_REQUEST_MODE_RECV);
+}
+
+static inline BOOL CARDi_WriteBackup(u32 dst, void * src, u32 len, MIDmaCallback callback, void * arg, BOOL is_async)
+{
+ return CARDi_RequestStreamCommand((u32)src, (u32)dst, len, callback, arg, is_async, CARD_REQ_WRITE_BACKUP, CARD_RETRY_COUNT_MAX, CARD_REQUEST_MODE_SEND);
+}
+
+static inline BOOL CARDi_WriteAndVerifyBackup(u32 dst, void * src, u32 len, MIDmaCallback callback, void * arg, BOOL is_async)
+{
+ return CARDi_RequestStreamCommand((u32)src, (u32)dst, len, callback, arg, is_async, CARD_REQ_WRITE_BACKUP, CARD_RETRY_COUNT_MAX, CARD_REQUEST_MODE_SEND_VERIFY);
+}
#endif //NITRO_CARD_BACKUP_H_
diff --git a/arm9/lib/include/CARD_common.h b/arm9/lib/include/CARD_common.h
index 1396de12..9cedac4f 100644
--- a/arm9/lib/include/CARD_common.h
+++ b/arm9/lib/include/CARD_common.h
@@ -1,6 +1,51 @@
#ifndef NITRO_CARD_COMMON_H_
#define NITRO_CARD_COMMON_H_
+typedef enum
+{
+ CARD_RESULT_SUCCESS = 0,
+ CARD_RESULT_FAILURE,
+ CARD_RESULT_INVALID_PARAM,
+ CARD_RESULT_UNSUPPORTED,
+ CARD_RESULT_TIMEOUT,
+ CARD_RESULT_ERROR,
+ CARD_RESULT_NO_RESPONSE,
+ CARD_RESULT_CANCELED
+}
+CARDResult;
+
+typedef enum
+{
+ CARD_REQ_INIT = 0, /* initialize (setting from ARM9)*/
+ CARD_REQ_ACK, /* request done (acknowledge from ARM7)*/
+ CARD_REQ_IDENTIFY, /* CARD_IdentifyBackup*/
+ CARD_REQ_READ_ID, /* CARD_ReadRomID (TEG && ARM9)*/
+ CARD_REQ_READ_ROM, /* CARD_ReadRom (TEG && ARM9)*/
+ CARD_REQ_WRITE_ROM, /* (reserved)*/
+ CARD_REQ_READ_BACKUP, /* CARD_ReadBackup*/
+ CARD_REQ_WRITE_BACKUP, /* CARD_WriteBackup*/
+ CARD_REQ_PROGRAM_BACKUP, /* CARD_ProgramBackup*/
+ CARD_REQ_VERIFY_BACKUP, /* CARD_VerifyBackup*/
+ CARD_REQ_ERASE_PAGE_BACKUP, /* CARD_EraseBackupPage*/
+ CARD_REQ_ERASE_SECTOR_BACKUP, /* CARD_EraseBackupSector*/
+ CARD_REQ_ERASE_CHIP_BACKUP, /* CARD_EraseBackupChip*/
+ CARD_REQ_MAX
+}
+CARDRequest;
+
+typedef enum
+{
+ CARD_REQUEST_MODE_RECV, /* Data reception*/
+ CARD_REQUEST_MODE_SEND, /* Send data (Including single verify)*/
+ CARD_REQUEST_MODE_SEND_VERIFY, /* Send data + verify*/
+ CARD_REQUEST_MODE_SPECIAL /* special operations like sector deletion*/
+}
+CARDRequestMode;
+
+CARDResult CARD_GetResultCode(void);
+
+#define CARD_RETRY_COUNT_MAX 10
+
void CARD_Init(void);
#endif //NITRO_CARD_COMMON_H_
diff --git a/arm9/lib/include/MATH_crc.h b/arm9/lib/include/MATH_crc.h
index f15a2e32..4f06fa75 100644
--- a/arm9/lib/include/MATH_crc.h
+++ b/arm9/lib/include/MATH_crc.h
@@ -7,6 +7,8 @@ typedef u8 MATHCRC8Context;
typedef u16 MATHCRC16Context;
typedef u32 MATHCRC32Context;
+#define MATH_CRC16_CCITT_POLY 0x1021
+
struct MATHCRC8Table {
u8 table[256];
};
@@ -35,4 +37,9 @@ void MATHi_CRC16InitTable(struct MATHCRC16Table *table, u16 poly);
void MATHi_CRC8Update(const struct MATHCRC8Table *table, MATHCRC8Context *context, const void *input, u32 length);
void MATHi_CRC8InitTable(struct MATHCRC8Table *table, u8 poly);
+static inline void MATH_CRC16InitTable(struct MATHCRC16Table * table)
+{
+ MATHi_CRC16InitTable(table, MATH_CRC16_CCITT_POLY);
+}
+
#endif
diff --git a/arm9/lib/include/MI_memory.h b/arm9/lib/include/MI_memory.h
index d79e9dcb..981fdc81 100644
--- a/arm9/lib/include/MI_memory.h
+++ b/arm9/lib/include/MI_memory.h
@@ -5,6 +5,10 @@
void MI_CpuFill8(void *dest, u8 data, u32 size);
void MI_CpuCopy8(void const *src, void *dest, u32 size);
+void MIi_CpuClearFast(u32 data, void *destp, u32 size);
+static inline void MI_CpuClearFast(void *destp, u32 size) {
+ MIi_CpuClearFast(0, destp, size);
+}
static inline void MI_CpuClear8(void *dest, u32 size) {
MI_CpuFill8(dest, 0, size);
}