mirror of
https://github.com/pret/pokediamond.git
synced 2026-10-04 00:19:31 -04:00
arm9 CARD_backup
This commit is contained in:
@@ -1,358 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.extern cardi_common
|
||||
.extern OSi_ThreadInfo
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start CARD_CancelBackupAsync
|
||||
CARD_CancelBackupAsync: ; 0x020D6D7C
|
||||
stmdb sp!, {lr}
|
||||
sub sp, sp, #0x4
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, _020D6DA8 ; =cardi_common
|
||||
ldr r2, [r1, #0x114]
|
||||
orr r2, r2, #0x40
|
||||
str r2, [r1, #0x114]
|
||||
bl OS_RestoreInterrupts
|
||||
add sp, sp, #0x4
|
||||
ldmia sp!, {lr}
|
||||
bx lr
|
||||
.balign 4
|
||||
_020D6DA8: .word cardi_common
|
||||
|
||||
arm_func_start CARD_TryWaitBackupAsync
|
||||
CARD_TryWaitBackupAsync: ; 0x020D6DAC
|
||||
ldr ip, _020D6DB4 ; =CARDi_TryWaitAsync
|
||||
bx r12
|
||||
.balign 4
|
||||
_020D6DB4: .word CARDi_TryWaitAsync
|
||||
|
||||
arm_func_start CARD_WaitBackupAsync
|
||||
CARD_WaitBackupAsync: ; 0x020D6DB8
|
||||
ldr ip, _020D6DC0 ; =CARDi_WaitAsync
|
||||
bx r12
|
||||
.balign 4
|
||||
_020D6DC0: .word CARDi_WaitAsync
|
||||
|
||||
.extern _SDK_NintendoBackup
|
||||
|
||||
arm_func_start CARD_IdentifyBackup
|
||||
CARD_IdentifyBackup: ; 0x020D6DC4
|
||||
stmdb sp!, {r4-r7,lr}
|
||||
sub sp, sp, #0x4
|
||||
mov r5, r0
|
||||
ldr r0, _020D6F00 ; =_SDK_NintendoBackup
|
||||
ldr r7, _020D6F04 ; =cardi_common
|
||||
bl OSi_ReferSymbol
|
||||
_020D6DDC: ; 0x020D6DDC
|
||||
cmp r5, #0x0
|
||||
bne _020D6DE8
|
||||
bl OS_Terminate
|
||||
_020D6DE8:
|
||||
bl CARD_CheckEnabled
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, [r7, #0x114]
|
||||
mov r4, r0
|
||||
ands r0, r1, #0x4
|
||||
beq _020D6E18
|
||||
add r6, r7, #0x10c
|
||||
_020D6E04:
|
||||
mov r0, r6
|
||||
bl OS_SleepThread
|
||||
ldr r0, [r7, #0x114]
|
||||
ands r0, r0, #0x4
|
||||
bne _020D6E04
|
||||
_020D6E18:
|
||||
ldr r0, [r7, #0x114]
|
||||
mov r1, #0x0
|
||||
orr r0, r0, #0x4
|
||||
str r0, [r7, #0x114]
|
||||
str r1, [r7, #0x38]
|
||||
mov r0, r4
|
||||
str r1, [r7, #0x3c]
|
||||
bl OS_RestoreInterrupts
|
||||
mov r0, r5
|
||||
bl CARDi_IdentifyBackupCore
|
||||
ldr r0, _020D6F08 ; =OSi_ThreadInfo
|
||||
ldr r1, _020D6F04 ; =cardi_common
|
||||
ldr r2, [r0, #0x4]
|
||||
mov r0, r7
|
||||
str r2, [r1, #0x104]
|
||||
mov r1, #0x2
|
||||
mov r2, #0x1
|
||||
bl CARDi_Request
|
||||
_020D6E60: ; 0x020D6E60
|
||||
ldr r0, [r7, #0x0]
|
||||
mov r1, #0x0
|
||||
str r1, [r0, #0xc]
|
||||
ldr r0, [r7, #0x0]
|
||||
add r1, r7, #0x120
|
||||
str r1, [r0, #0x10]
|
||||
ldr r1, [r7, #0x0]
|
||||
mov r2, #0x1
|
||||
mov r0, r7
|
||||
str r2, [r1, #0x14]
|
||||
mov r1, #0x6
|
||||
bl CARDi_Request
|
||||
ldr r6, [r7, #0x38]
|
||||
ldr r5, [r7, #0x3c]
|
||||
bl OS_DisableInterrupts
|
||||
mov r4, r0
|
||||
ldr r1, [r7, #0x114]
|
||||
add r0, r7, #0x10c
|
||||
bic r1, r1, #0x4c
|
||||
str r1, [r7, #0x114]
|
||||
bl OS_WakeupThread
|
||||
ldr r0, [r7, #0x114]
|
||||
ands r0, r0, #0x10
|
||||
beq _020D6EC8
|
||||
add r0, r7, #0x44
|
||||
bl OS_WakeupThreadDirect
|
||||
_020D6EC8:
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
_020D6ED0: ; 0x020D6ED0
|
||||
cmp r6, #0x0
|
||||
beq _020D6EE0
|
||||
mov r0, r5
|
||||
blx r6
|
||||
_020D6EE0:
|
||||
ldr r0, [r7, #0x0]
|
||||
ldr r0, [r0, #0x0]
|
||||
cmp r0, #0x0
|
||||
moveq r0, #0x1
|
||||
movne r0, #0x0
|
||||
add sp, sp, #0x4
|
||||
ldmia sp!, {r4-r7,lr}
|
||||
bx lr
|
||||
.balign 4
|
||||
_020D6F00: .word _SDK_NintendoBackup
|
||||
_020D6F04: .word cardi_common
|
||||
_020D6F08: .word OSi_ThreadInfo
|
||||
|
||||
arm_func_start CARD_GetBackupSectorSize
|
||||
CARD_GetBackupSectorSize: ; 0x020D6F0C
|
||||
ldr r0, _020D6F1C ; =cardi_common
|
||||
ldr r0, [r0, #0x0]
|
||||
ldr r0, [r0, #0x1c]
|
||||
bx lr
|
||||
.balign 4
|
||||
_020D6F1C: .word cardi_common
|
||||
|
||||
arm_func_start CARDi_RequestStreamCommand
|
||||
CARDi_RequestStreamCommand: ; 0x020D6F20
|
||||
stmdb sp!, {r4-r10,lr}
|
||||
mov r10, r0
|
||||
ldr r6, _020D7004 ; =cardi_common
|
||||
ldr r0, _020D7008 ; =_SDK_NintendoBackup
|
||||
mov r9, r1
|
||||
mov r8, r2
|
||||
mov r7, r3
|
||||
bl OSi_ReferSymbol
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, [r6, #0x114]
|
||||
mov r5, r0
|
||||
ands r0, r1, #0x4
|
||||
beq _020D6F6C
|
||||
add r4, r6, #0x10c
|
||||
_020D6F58:
|
||||
mov r0, r4
|
||||
bl OS_SleepThread
|
||||
ldr r0, [r6, #0x114]
|
||||
ands r0, r0, #0x4
|
||||
bne _020D6F58
|
||||
_020D6F6C:
|
||||
ldr r0, [r6, #0x114]
|
||||
ldr r1, [sp, #0x20]
|
||||
orr r0, r0, #0x4
|
||||
str r0, [r6, #0x114]
|
||||
str r7, [r6, #0x38]
|
||||
mov r0, r5
|
||||
str r1, [r6, #0x3c]
|
||||
bl OS_RestoreInterrupts
|
||||
str r10, [r6, #0x1c]
|
||||
str r9, [r6, #0x20]
|
||||
ldr r0, [sp, #0x24]
|
||||
ldr r1, [sp, #0x28]
|
||||
str r8, [r6, #0x24]
|
||||
ldr r2, [sp, #0x2c]
|
||||
str r1, [r6, #0x2c]
|
||||
ldr r1, [sp, #0x30]
|
||||
str r2, [r6, #0x30]
|
||||
str r1, [r6, #0x34]
|
||||
cmp r0, #0x0
|
||||
beq _020D6FD0
|
||||
ldr r0, _020D700C ; =CARDi_RequestStreamCommandCore
|
||||
bl CARDi_SetTask
|
||||
mov r0, #0x1
|
||||
ldmia sp!, {r4-r10,lr}
|
||||
bx lr
|
||||
_020D6FD0:
|
||||
ldr r0, _020D7010 ; =OSi_ThreadInfo
|
||||
ldr r1, _020D7004 ; =cardi_common
|
||||
ldr r2, [r0, #0x4]
|
||||
mov r0, r6
|
||||
str r2, [r1, #0x104]
|
||||
bl CARDi_RequestStreamCommandCore
|
||||
_020D6FE8: ; 0x020D6FE8
|
||||
ldr r0, [r6, #0x0]
|
||||
ldr r0, [r0, #0x0]
|
||||
cmp r0, #0x0
|
||||
moveq r0, #0x1
|
||||
movne r0, #0x0
|
||||
ldmia sp!, {r4-r10,lr}
|
||||
bx lr
|
||||
.balign 4
|
||||
_020D7004: .word cardi_common
|
||||
_020D7008: .word _SDK_NintendoBackup
|
||||
_020D700C: .word CARDi_RequestStreamCommandCore
|
||||
_020D7010: .word OSi_ThreadInfo
|
||||
|
||||
arm_func_start CARDi_RequestStreamCommandCore
|
||||
CARDi_RequestStreamCommandCore:
|
||||
stmdb sp!, {r4-r11,lr}
|
||||
sub sp, sp, #0x4
|
||||
mov r9, r0
|
||||
ldr r8, [r9, #0x2c]
|
||||
ldr r0, _020D720C ; =_SDK_NintendoBackup
|
||||
ldr r7, [r9, #0x34]
|
||||
ldr r10, [r9, #0x30]
|
||||
mov r6, #0x100
|
||||
bl OSi_ReferSymbol
|
||||
cmp r8, #0xb
|
||||
bne _020D7048
|
||||
bl CARD_GetBackupSectorSize
|
||||
mov r6, r0
|
||||
_020D7048:
|
||||
mov r0, #0x1
|
||||
add r4, r9, #0x120
|
||||
mov r11, #0x9
|
||||
str r0, [sp, #0x0]
|
||||
_020D7058:
|
||||
ldr r5, [r9, #0x24]
|
||||
ldr r0, [r9, #0x0]
|
||||
cmp r6, r5
|
||||
movcc r5, r6
|
||||
str r5, [r0, #0x14]
|
||||
ldr r0, [r9, #0x114]
|
||||
ands r0, r0, #0x40
|
||||
beq _020D7094
|
||||
ldr r0, [r9, #0x114]
|
||||
mov r1, #0x7
|
||||
bic r0, r0, #0x40
|
||||
str r0, [r9, #0x114]
|
||||
ldr r0, [r9, #0x0]
|
||||
str r1, [r0, #0x0]
|
||||
b _020D71A8
|
||||
_020D7094:
|
||||
cmp r7, #0x3
|
||||
addls pc, pc, r7, lsl #0x2
|
||||
b _020D7124
|
||||
; jump table
|
||||
b _020D70B0 ; case 0
|
||||
b _020D70D4 ; case 1
|
||||
b _020D70D4 ; case 2
|
||||
b _020D710C ; case 3
|
||||
_020D70B0:
|
||||
mov r1, r5
|
||||
add r0, r9, #0x120
|
||||
bl DC_InvalidateRange
|
||||
ldr r1, [r9, #0x1c]
|
||||
ldr r0, [r9, #0x0]
|
||||
str r1, [r0, #0xc]
|
||||
ldr r0, [r9, #0x0]
|
||||
str r4, [r0, #0x10]
|
||||
b _020D7124
|
||||
_020D70D4:
|
||||
ldr r0, [r9, #0x1c]
|
||||
mov r1, r4
|
||||
mov r2, r5
|
||||
bl MI_CpuCopy8
|
||||
mov r1, r5
|
||||
add r0, r9, #0x120
|
||||
bl DC_FlushRange
|
||||
bl DC_WaitWriteBufferEmpty
|
||||
_020D70F4: ; 0x020D70F4
|
||||
ldr r0, [r9, #0x0]
|
||||
str r4, [r0, #0xc]
|
||||
ldr r1, [r9, #0x20]
|
||||
ldr r0, [r9, #0x0]
|
||||
str r1, [r0, #0x10]
|
||||
b _020D7124
|
||||
_020D710C:
|
||||
ldr r1, [r9, #0x1c]
|
||||
ldr r0, [r9, #0x0]
|
||||
str r1, [r0, #0xc]
|
||||
ldr r1, [r9, #0x20]
|
||||
ldr r0, [r9, #0x0]
|
||||
str r1, [r0, #0x10]
|
||||
_020D7124:
|
||||
mov r0, r9
|
||||
mov r1, r8
|
||||
mov r2, r10
|
||||
bl CARDi_Request
|
||||
_020D7134: ; 0x020D7134
|
||||
cmp r0, #0x0
|
||||
beq _020D71A8
|
||||
cmp r7, #0x2
|
||||
bne _020D7160
|
||||
ldr r2, [sp, #0x0]
|
||||
mov r0, r9
|
||||
mov r1, r11
|
||||
bl CARDi_Request
|
||||
_020D7154: ; 0x020D7154
|
||||
cmp r0, #0x0
|
||||
bne _020D7178
|
||||
b _020D71A8
|
||||
_020D7160:
|
||||
cmp r7, #0x0
|
||||
bne _020D7178
|
||||
ldr r1, [r9, #0x20]
|
||||
mov r2, r5
|
||||
add r0, r9, #0x120
|
||||
bl MI_CpuCopy8
|
||||
_020D7178:
|
||||
ldr r0, [r9, #0x1c]
|
||||
add r0, r0, r5
|
||||
str r0, [r9, #0x1c]
|
||||
ldr r0, [r9, #0x20]
|
||||
add r0, r0, r5
|
||||
str r0, [r9, #0x20]
|
||||
ldr r0, [r9, #0x24]
|
||||
sub r0, r0, r5
|
||||
str r0, [r9, #0x24]
|
||||
ldr r0, [r9, #0x24]
|
||||
cmp r0, #0x0
|
||||
bne _020D7058
|
||||
_020D71A8:
|
||||
ldr r6, [r9, #0x38]
|
||||
ldr r5, [r9, #0x3c]
|
||||
bl OS_DisableInterrupts
|
||||
ldr r1, [r9, #0x114]
|
||||
mov r4, r0
|
||||
bic r0, r1, #0x4c
|
||||
str r0, [r9, #0x114]
|
||||
add r0, r9, #0x10c
|
||||
bl OS_WakeupThread
|
||||
ldr r0, [r9, #0x114]
|
||||
ands r0, r0, #0x10
|
||||
beq _020D71E0
|
||||
add r0, r9, #0x44
|
||||
bl OS_WakeupThreadDirect
|
||||
_020D71E0:
|
||||
mov r0, r4
|
||||
bl OS_RestoreInterrupts
|
||||
_020D71E8: ; 0x020D71E8
|
||||
cmp r6, #0x0
|
||||
addeq sp, sp, #0x4
|
||||
ldmeqia sp!, {r4-r11,lr}
|
||||
bxeq lr
|
||||
mov r0, r5
|
||||
blx r6
|
||||
add sp, sp, #0x4
|
||||
ldmia sp!, {r4-r11,lr}
|
||||
bx lr
|
||||
.balign 4
|
||||
_020D720C: .word _SDK_NintendoBackup
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
#include "CARD_backup.h"
|
||||
#include "function_target.h"
|
||||
#include "CARD_common.h"
|
||||
#include "OS_cache.h"
|
||||
#include "MI_memory.h"
|
||||
#include "OS_terminate_proc.h"
|
||||
#include "OS_system.h"
|
||||
|
||||
extern void OSi_ReferSymbol(void *symbol);
|
||||
extern char _SDK_NintendoBackup[];
|
||||
|
||||
extern BOOL CARDi_Request(CARDiCommon * p, int req_type, int retry_count);
|
||||
extern void CARDi_IdentifyBackupCore(CARDBackupType type);
|
||||
|
||||
extern CARDiCommon cardi_common;
|
||||
|
||||
static void CARDi_RequestStreamCommandCore(CARDiCommon *p);
|
||||
|
||||
ARM_FUNC static void CARDi_RequestStreamCommandCore(CARDiCommon *p)
|
||||
{
|
||||
const int req_type = p->req_type;
|
||||
const int req_mode = p->req_mode;
|
||||
const int retry_count = p->req_retry;
|
||||
u32 size = sizeof(p->backup_cache_page_buf);
|
||||
|
||||
OSi_ReferSymbol((void *)_SDK_NintendoBackup);
|
||||
|
||||
if (req_type == CARD_REQ_ERASE_SECTOR_BACKUP)
|
||||
{
|
||||
size = CARD_GetBackupSectorSize();
|
||||
}
|
||||
do
|
||||
{
|
||||
const u32 len = (size < p->len) ? size : p->len;
|
||||
p->cmd->len = len;
|
||||
|
||||
if ((p->flag & CARD_STAT_CANCEL) != 0)
|
||||
{
|
||||
p->flag &= ~CARD_STAT_CANCEL;
|
||||
p->cmd->result = CARD_RESULT_CANCELED;
|
||||
break;
|
||||
}
|
||||
switch (req_mode)
|
||||
{
|
||||
case CARD_REQUEST_MODE_RECV:
|
||||
DC_InvalidateRange(p->backup_cache_page_buf, len);
|
||||
p->cmd->src = (u32)p->src;
|
||||
p->cmd->dest = (u32)p->backup_cache_page_buf;
|
||||
break;
|
||||
case CARD_REQUEST_MODE_SEND:
|
||||
case CARD_REQUEST_MODE_SEND_VERIFY:
|
||||
MI_CpuCopy8((const void *)p->src, p->backup_cache_page_buf, len);
|
||||
DC_FlushRange(p->backup_cache_page_buf, len);
|
||||
DC_WaitWriteBufferEmpty();
|
||||
p->cmd->src = (u32)p->backup_cache_page_buf;
|
||||
p->cmd->dest = (u32)p->dst;
|
||||
break;
|
||||
case CARD_REQUEST_MODE_SPECIAL:
|
||||
p->cmd->src = (u32)p->src;
|
||||
p->cmd->dest = (u32)p->dst;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!CARDi_Request(p, req_type, retry_count))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (req_mode == CARD_REQUEST_MODE_SEND_VERIFY)
|
||||
{
|
||||
if (!CARDi_Request(p, CARD_REQ_VERIFY_BACKUP, 1))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (req_mode == CARD_REQUEST_MODE_RECV)
|
||||
{
|
||||
MI_CpuCopy8(p->backup_cache_page_buf, (void *)p->dst, len);
|
||||
}
|
||||
p->src += len;
|
||||
p->dst += len;
|
||||
p->len -= len;
|
||||
}
|
||||
while (p->len > 0);
|
||||
CARDi_EndTask(p, TRUE);
|
||||
}
|
||||
|
||||
ARM_FUNC 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)
|
||||
{
|
||||
CARDiCommon *const p = &cardi_common;
|
||||
|
||||
OSi_ReferSymbol((void *)_SDK_NintendoBackup);
|
||||
|
||||
CARDi_WaitTask(p, callback, arg);
|
||||
p->src = src;
|
||||
p->dst = dst;
|
||||
p->len = len;
|
||||
p->req_type = req_type;
|
||||
p->req_retry = req_retry;
|
||||
p->req_mode = req_mode;
|
||||
if (is_async)
|
||||
{
|
||||
CARDi_SetTask(CARDi_RequestStreamCommandCore);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
cardi_common.cur_th = OS_GetCurrentThread();
|
||||
CARDi_RequestStreamCommandCore(p);
|
||||
return (p->cmd->result == CARD_RESULT_SUCCESS);
|
||||
}
|
||||
}
|
||||
|
||||
ARM_FUNC u32 CARD_GetBackupSectorSize(void)
|
||||
{
|
||||
return cardi_common.cmd->spec.sect_size;
|
||||
}
|
||||
|
||||
ARM_FUNC BOOL CARD_IdentifyBackup(CARDBackupType type)
|
||||
{
|
||||
CARDiCommon *const p = &cardi_common;
|
||||
|
||||
OSi_ReferSymbol((void *)_SDK_NintendoBackup);
|
||||
if (type == CARD_BACKUP_TYPE_NOT_USE)
|
||||
{
|
||||
OS_Terminate();
|
||||
}
|
||||
|
||||
CARD_CheckEnabled();
|
||||
|
||||
CARDi_WaitTask(p, NULL, NULL);
|
||||
CARDi_IdentifyBackupCore(type);
|
||||
cardi_common.cur_th = OS_GetCurrentThread();
|
||||
(void)CARDi_Request(p, CARD_REQ_IDENTIFY, 1);
|
||||
|
||||
p->cmd->src = 0;
|
||||
p->cmd->dest = (u32)p->backup_cache_page_buf;
|
||||
p->cmd->len = 1;
|
||||
(void)CARDi_Request(p, CARD_REQ_READ_BACKUP, 1);
|
||||
CARDi_EndTask(p, TRUE);
|
||||
return (p->cmd->result == CARD_RESULT_SUCCESS);
|
||||
}
|
||||
|
||||
ARM_FUNC BOOL CARD_WaitBackupAsync(void)
|
||||
{
|
||||
return CARDi_WaitAsync();
|
||||
}
|
||||
|
||||
ARM_FUNC BOOL CARD_TryWaitBackupAsync(void)
|
||||
{
|
||||
return CARDi_TryWaitAsync();
|
||||
}
|
||||
|
||||
ARM_FUNC void CARD_CancelBackupAsync(void)
|
||||
{
|
||||
OSIntrMode bak_cpsr = OS_DisableInterrupts();
|
||||
cardi_common.flag |= CARD_STAT_CANCEL;
|
||||
(void)OS_RestoreInterrupts(bak_cpsr);
|
||||
}
|
||||
@@ -2,7 +2,6 @@
|
||||
#include "consts.h"
|
||||
#include "function_target.h"
|
||||
#include "MI_memory.h"
|
||||
#include "OS_system.h"
|
||||
#include "OS_terminate_proc.h"
|
||||
#include "OS_spinLock.h"
|
||||
#include "OS_cache.h"
|
||||
|
||||
Reference in New Issue
Block a user