diff options
Diffstat (limited to 'arm9/lib/include')
| -rw-r--r-- | arm9/lib/include/CARD_common.h | 173 | ||||
| -rw-r--r-- | arm9/lib/include/CARD_rom.h | 3 | ||||
| -rw-r--r-- | arm9/lib/include/MI_memory.h | 5 | ||||
| -rw-r--r-- | arm9/lib/include/OS_spinLock.h | 2 | ||||
| -rw-r--r-- | arm9/lib/include/mmap.h | 1 | 
5 files changed, 155 insertions, 29 deletions
| diff --git a/arm9/lib/include/CARD_common.h b/arm9/lib/include/CARD_common.h index 9cedac4f..051923ce 100644 --- a/arm9/lib/include/CARD_common.h +++ b/arm9/lib/include/CARD_common.h @@ -1,5 +1,34 @@ -#ifndef NITRO_CARD_COMMON_H_ -#define NITRO_CARD_COMMON_H_ +#ifndef POKEDIAMOND_CARD_COMMON_H +#define POKEDIAMOND_CARD_COMMON_H + +#include "nitro/types.h" +#include "OS_thread.h" +#include "MI_dma.h" + +#define	CARD_THREAD_PRIORITY_DEFAULT	4 + +#define	CARD_BACKUP_TYPE_DEVICE_SHIFT	0 +#define	CARD_BACKUP_TYPE_DEVICE_EEPROM	1 +#define	CARD_BACKUP_TYPE_DEVICE_FLASH	2 +#define	CARD_BACKUP_TYPE_DEVICE_FRAM	3 +#define	CARD_BACKUP_TYPE_SIZEBIT_SHIFT	8 +#define	CARD_BACKUP_TYPE_VENDER_SHIFT	16 +#define	CARD_BACKUP_TYPE_DEFINE(type, size, vender)	\ +	(((CARD_BACKUP_TYPE_DEVICE_ ## type) << CARD_BACKUP_TYPE_DEVICE_SHIFT) |	\ +	((size) << CARD_BACKUP_TYPE_SIZEBIT_SHIFT) |	\ +	((vender) << CARD_BACKUP_TYPE_VENDER_SHIFT)) + +typedef enum +{ +    CARD_BACKUP_TYPE_EEPROM_4KBITS = CARD_BACKUP_TYPE_DEFINE(EEPROM, 9, 0), +    CARD_BACKUP_TYPE_EEPROM_64KBITS = CARD_BACKUP_TYPE_DEFINE(EEPROM, 13, 0), +    CARD_BACKUP_TYPE_EEPROM_512KBITS = CARD_BACKUP_TYPE_DEFINE(EEPROM, 16, 0), +    CARD_BACKUP_TYPE_FLASH_2MBITS = CARD_BACKUP_TYPE_DEFINE(FLASH, 18, 0), +    CARD_BACKUP_TYPE_FLASH_4MBITS = CARD_BACKUP_TYPE_DEFINE(FLASH, 19, 0), +    CARD_BACKUP_TYPE_FLASH_8MBITS = CARD_BACKUP_TYPE_DEFINE(FLASH, 20, 0), +    CARD_BACKUP_TYPE_FRAM_256KBITS = CARD_BACKUP_TYPE_DEFINE(FRAM, 15, 0), +    CARD_BACKUP_TYPE_NOT_USE = 0 +} CARDBackupType;  typedef enum  { @@ -11,41 +40,133 @@ typedef enum      CARD_RESULT_ERROR,      CARD_RESULT_NO_RESPONSE,      CARD_RESULT_CANCELED -} -CARDResult; +} 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_TARGET_NONE, +    CARD_TARGET_ROM, +    CARD_TARGET_BACKUP +} CARDTargetMode; + +typedef enum +{ +    CARD_REQ_INIT = 0, +    CARD_REQ_ACK, +    CARD_REQ_IDENTIFY, +    CARD_REQ_READ_ID, +    CARD_REQ_READ_ROM, +    CARD_REQ_WRITE_ROM, +    CARD_REQ_READ_BACKUP, +    CARD_REQ_WRITE_BACKUP, +    CARD_REQ_PROGRAM_BACKUP, +    CARD_REQ_VERIFY_BACKUP, +    CARD_REQ_ERASE_PAGE_BACKUP, +    CARD_REQ_ERASE_SECTOR_BACKUP, +    CARD_REQ_ERASE_CHIP_BACKUP,      CARD_REQ_MAX -} -CARDRequest; +} 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; +    CARD_REQUEST_MODE_RECV, +    CARD_REQUEST_MODE_SEND, +    CARD_REQUEST_MODE_SEND_VERIFY, +    CARD_REQUEST_MODE_SPECIAL +} CARDRequestMode; + +enum +{ +    CARD_STAT_INIT = (1 << 0), +    CARD_STAT_INIT_CMD = (1 << 1), +    CARD_STAT_BUSY = (1 << 2), +    CARD_STAT_TASK = (1 << 3), +    CARD_STAT_RECV = (1 << 4), +    CARD_STAT_REQ = (1 << 5), +    CARD_STAT_CANCEL = (1 << 6) +}; + +typedef s32 CARDiOwner; + +typedef struct CARDiCommandArg +{ +    CARDResult result; +    CARDBackupType type; +    u32 id; +    u32 src; +    u32 dest; +    u32 len; + +    struct +    { +        u32 total_size; +        u32 sect_size; +        u32 page_size; +        u32 addr_width; +        u32 program_page; +        u32 write_page; +        u32 write_page_total; +        u32 erase_chip; +        u32 erase_chip_total; +        u32 erase_sector; +        u32 erase_sector_total; +        u32 erase_page; +        u8 initial_status; +        u8 padding1[3]; +        u32 caps; +        u8 padding2[16]; +    } spec; +} CARDiCommandArg; + +typedef struct CARDiCommon +{ +    CARDiCommandArg *cmd; +    s32 command; + +    volatile CARDiOwner lock_owner; +    volatile s32 lock_ref; +    OSThreadQueue lock_queue[1]; +    CARDTargetMode lock_target; + +    u32 src; +    u32 dst; +    u32 len; +    u32 dma; +    CARDRequest req_type; +    s32 req_retry; +    CARDRequestMode req_mode; +    MIDmaCallback callback; +    void *callback_arg; +    void (*task_func) (struct CARDiCommon *); + +    OSThread thread[1]; +    OSThread *cur_th; + +    u32 priority; +    OSThreadQueue busy_q[1]; + +    volatile u32 flag; + +    u8 dummy[8]; + +    u8 backup_cache_page_buf[256] ALIGN(32); +} CARDiCommon; +void CARDi_SetTask(void (*task) (CARDiCommon *)); +void CARDi_InitCommon(void); +BOOL CARD_IsEnabled(void); +void CARD_CheckEnabled(void); +void CARD_Enable(BOOL enable); +BOOL CARDi_WaitAsync(void); +BOOL CARDi_TryWaitAsync(void);  CARDResult CARD_GetResultCode(void); +void CARD_LockRom(u16 lock_id); +void CARD_UnlockRom(u16 lock_id); +void CARD_LockBackup(u16 lock_id); +void CARD_UnlockBackup(u16 lock_id);  #define CARD_RETRY_COUNT_MAX 10  void CARD_Init(void); -#endif //NITRO_CARD_COMMON_H_ +#endif //POKEDIAMOND_CARD_COMMON_H diff --git a/arm9/lib/include/CARD_rom.h b/arm9/lib/include/CARD_rom.h index 3d7bbb77..b96c527b 100644 --- a/arm9/lib/include/CARD_rom.h +++ b/arm9/lib/include/CARD_rom.h @@ -26,9 +26,6 @@ static inline void CARD_ReadRomAsync(u32 dma, const void * src, void * dst, u32      CARDi_ReadRom(dma, src, dst, len, callback, arg, TRUE);  } -void CARD_LockRom(u16 lock_id); -void CARD_UnlockRom(u16 lock_id); -  static inline const CARDRomRegion * CARD_GetRomRegionFNT() {      return (const CARDRomRegion *)((const u8 *)HW_ROM_HEADER_BUF + 0x40);  } diff --git a/arm9/lib/include/MI_memory.h b/arm9/lib/include/MI_memory.h index 01c12f86..450e5e58 100644 --- a/arm9/lib/include/MI_memory.h +++ b/arm9/lib/include/MI_memory.h @@ -45,4 +45,9 @@ static inline void MI_CpuCopy16(const void *src, void *dest, u32 size)      MIi_CpuCopy16(src, dest, size);  } +static inline void MI_CpuFillFast(void *dest, u32 data, u32 size) +{ +    MIi_CpuClearFast(data, dest, size); +} +  #endif //POKEDIAMOND_ARM9_MI_MEMORY_H diff --git a/arm9/lib/include/OS_spinLock.h b/arm9/lib/include/OS_spinLock.h index a5d27585..c26e3b9f 100644 --- a/arm9/lib/include/OS_spinLock.h +++ b/arm9/lib/include/OS_spinLock.h @@ -5,6 +5,8 @@  #include "nitro/OS_spinLock_shared.h"  #include "syscall.h" +#define OS_LOCK_ID_ERROR        (-3) +  static inline void OSi_WaitByLoop(void)  {      SVC_WaitByLoop(0x1000 / 4); diff --git a/arm9/lib/include/mmap.h b/arm9/lib/include/mmap.h index c56b1dfe..027259ad 100644 --- a/arm9/lib/include/mmap.h +++ b/arm9/lib/include/mmap.h @@ -29,6 +29,7 @@ extern u32 SDK_AUTOLOAD_DTCM_START[];  #define HW_CARD_ROM_HEADER_SIZE 0x00000160  #define HW_DOWNLOAD_PARAMETER_SIZE      0x00000020 +#define HW_CARD_ROM_HEADER      (HW_MAIN_MEM + 0x007ffa80)  #define HW_RESET_PARAMETER_BUF  (HW_MAIN_MEM + 0x007ffc20)  #define HW_ROM_BASE_OFFSET_BUF  (HW_MAIN_MEM + 0x007ffc2c)  #define HW_ROM_HEADER_BUF       (HW_MAIN_MEM + 0x007ffe00)      // ROM registration area data buffer | 
