diff options
Diffstat (limited to 'arm9/lib/include')
-rw-r--r-- | arm9/lib/include/CARD_backup.h | 27 | ||||
-rw-r--r-- | arm9/lib/include/CARD_common.h | 37 |
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); |