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.h27
-rw-r--r--arm9/lib/include/CARD_common.h37
2 files changed, 45 insertions, 19 deletions
diff --git a/arm9/lib/include/CARD_backup.h b/arm9/lib/include/CARD_backup.h
index 7cb5f820..465d6d2e 100644
--- a/arm9/lib/include/CARD_backup.h
+++ b/arm9/lib/include/CARD_backup.h
@@ -1,28 +1,17 @@
-#ifndef NITRO_CARD_BACKUP_H_
-#define NITRO_CARD_BACKUP_H_
+#ifndef POKEDIAMOND_CARD_BACKUP_H
+#define POKEDIAMOND_CARD_BACKUP_H
#include "nitro/types.h"
#include "MI_dma.h"
#include "CARD_common.h"
-BOOL CARD_TryWaitBackupAsync(void);
+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);
+u32 CARD_GetBackupSectorSize(void);;
+BOOL CARD_IdentifyBackup(CARDBackupType type);
BOOL CARD_WaitBackupAsync(void);
+BOOL CARD_TryWaitBackupAsync(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)
{
@@ -39,4 +28,4 @@ static inline BOOL CARDi_WriteAndVerifyBackup(u32 dst, void * src, u32 len, MIDm
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_
+#endif //POKEDIAMOND_CARD_BACKUP_H
diff --git a/arm9/lib/include/CARD_common.h b/arm9/lib/include/CARD_common.h
index 051923ce..292b9066 100644
--- a/arm9/lib/include/CARD_common.h
+++ b/arm9/lib/include/CARD_common.h
@@ -3,6 +3,7 @@
#include "nitro/types.h"
#include "OS_thread.h"
+#include "OS_system.h"
#include "MI_dma.h"
#define CARD_THREAD_PRIORITY_DEFAULT 4
@@ -152,6 +153,42 @@ typedef struct CARDiCommon
u8 backup_cache_page_buf[256] ALIGN(32);
} CARDiCommon;
+static inline void CARDi_EndTask(CARDiCommon *p, BOOL is_own_task)
+{
+ const MIDmaCallback func = p->callback;
+ void *const arg = p->callback_arg;
+
+ {
+ OSIntrMode bak_psr = OS_DisableInterrupts();
+
+ p->flag &= ~(CARD_STAT_BUSY | CARD_STAT_TASK | CARD_STAT_CANCEL);
+ OS_WakeupThread(p->busy_q);
+ if ((p->flag & CARD_STAT_RECV) != 0)
+ {
+ OS_WakeupThreadDirect(p->thread);
+ }
+ (void)OS_RestoreInterrupts(bak_psr);
+ }
+
+ if (is_own_task && func)
+ {
+ (*func)(arg);
+ }
+}
+
+static inline void CARDi_WaitTask(CARDiCommon *p, MIDmaCallback callback, void *callback_arg)
+{
+ OSIntrMode bak_psr = OS_DisableInterrupts();
+ while ((p->flag & CARD_STAT_BUSY) != 0)
+ {
+ OS_SleepThread(p->busy_q);
+ }
+ p->flag |= CARD_STAT_BUSY;
+ p->callback = callback;
+ p->callback_arg = callback_arg;
+ (void)OS_RestoreInterrupts(bak_psr);
+}
+
void CARDi_SetTask(void (*task) (CARDiCommon *));
void CARDi_InitCommon(void);
BOOL CARD_IsEnabled(void);