1 /*---------------------------------------------------------------------------* 2 Project: TwlSDK - CARD - libraries 3 File: card_command.h 4 5 Copyright 2008 Nintendo. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Date:: 2008-04-21#$ 14 $Rev: 5625 $ 15 $Author: yosizaki $ 16 17 *---------------------------------------------------------------------------*/ 18 #ifndef NITRO_LIBRARIES_CARD_COMMAND_H__ 19 #define NITRO_LIBRARIES_CARD_COMMAND_H__ 20 21 22 #include <nitro/card/common.h> 23 #include <nitro/card/backup.h> 24 25 #include <nitro/pxi.h> 26 #include <nitro/os.h> 27 28 29 #ifdef __cplusplus 30 extern "C" 31 { 32 #endif 33 34 35 /*---------------------------------------------------------------------------*/ 36 /* Constants */ 37 38 // Backup device functionality (used internally) 39 #define CARD_BACKUP_CAPS_AVAILABLE (u32)(CARD_BACKUP_CAPS_READ - 1) 40 #define CARD_BACKUP_CAPS_READ (u32)(1 << CARD_REQ_READ_BACKUP) 41 #define CARD_BACKUP_CAPS_WRITE (u32)(1 << CARD_REQ_WRITE_BACKUP) 42 #define CARD_BACKUP_CAPS_PROGRAM (u32)(1 << CARD_REQ_PROGRAM_BACKUP) 43 #define CARD_BACKUP_CAPS_VERIFY (u32)(1 << CARD_REQ_VERIFY_BACKUP) 44 #define CARD_BACKUP_CAPS_ERASE_PAGE (u32)(1 << CARD_REQ_ERASE_PAGE_BACKUP) 45 #define CARD_BACKUP_CAPS_ERASE_SECTOR (u32)(1 << CARD_REQ_ERASE_SECTOR_BACKUP) 46 #define CARD_BACKUP_CAPS_ERASE_CHIP (u32)(1 << CARD_REQ_ERASE_CHIP_BACKUP) 47 #define CARD_BACKUP_CAPS_READ_STATUS (u32)(1 << CARD_REQ_READ_STATUS) 48 #define CARD_BACKUP_CAPS_WRITE_STATUS (u32)(1 << CARD_REQ_WRITE_STATUS) 49 #define CARD_BACKUP_CAPS_ERASE_SUBSECTOR (u32)(1 << CARD_REQ_ERASE_SUBSECTOR_BACKUP) 50 51 52 /*---------------------------------------------------------------------------*/ 53 /* Declarations */ 54 55 // Parameters for sending and receiving PXI command requests. 56 typedef struct CARDiCommandArg 57 { 58 CARDResult result; /* Return value */ 59 CARDBackupType type; /* Device type */ 60 u32 id; /* Card ID */ 61 u32 src; /* Transfer source */ 62 u32 dst; /* Transfer destination */ 63 u32 len; /* Transfer length */ 64 65 struct 66 { 67 /* Memory property */ 68 u32 total_size; /* Memory capacity (BYTE) */ 69 u32 sect_size; /* Write-sector (BYTE) */ 70 u32 subsect_size; /* Write-sector (BYTE) */ 71 u32 page_size; /* Write-page (BYTE) */ 72 u32 addr_width; /* Address width on command (BYTE) */ 73 /* Maximum wait-time (as LCD-V-COUNT tick) */ 74 u32 program_page; 75 u32 write_page; 76 u32 write_page_total; 77 u32 erase_chip; 78 u32 erase_chip_total; 79 u32 erase_sector; 80 u32 erase_sector_total; 81 u32 erase_subsector; 82 u32 erase_subsector_total; 83 u32 erase_page; 84 /* Initial parameter of status register */ 85 u8 initial_status; 86 u8 padding1[3]; 87 u32 caps; 88 u8 padding2[4]; 89 } 90 spec; 91 92 } 93 CARDiCommandArg; 94 95 SDK_COMPILER_ASSERT(sizeof(CARDiCommandArg) % 32 == 0); 96 97 98 /*---------------------------------------------------------------------------*/ 99 /* Functions */ 100 101 /*---------------------------------------------------------------------------* 102 Name: CARDi_SendPxi 103 104 Description: Sends a PXI FIFO word. 105 106 Arguments: data Data to send 107 108 Returns: None. 109 *---------------------------------------------------------------------------*/ CARDi_SendPxi(u32 data)110SDK_INLINE void CARDi_SendPxi(u32 data) 111 { 112 while (PXI_SendWordByFifo(PXI_FIFO_TAG_FS, data, TRUE) < 0) 113 { 114 } 115 } 116 117 /*---------------------------------------------------------------------------* 118 Name: CARDi_OnFifoRecv 119 120 Description: Callback for receiving a PXI FIFO word. 121 122 Arguments: tag PXI tag (always PXI_FIFO_TAG_FS) 123 data Receive data 124 err Error bit (according to old specs) 125 126 Returns: None. 127 *---------------------------------------------------------------------------*/ 128 void CARDi_OnFifoRecv(PXIFifoTag tag, u32 data, BOOL err); 129 130 131 #ifdef __cplusplus 132 } // extern "C" 133 #endif 134 135 136 #endif // NITRO_LIBRARIES_CARD_COMMAND_H__ 137