1 #ifndef RKCOMM_HEADER 2 #define RKCOMM_HEADER 3 #include "DefineHeader.h" 4 typedef enum 5 { 6 USB_BULK_READ = 0, 7 USB_BULK_WRITE, 8 USB_CONTROL, 9 } USB_ACCESS_TYPE; 10 typedef enum 11 { 12 TU_NONE_SUBCODE = 0, 13 TU_ERASESYSTEM_SUBCODE = 0xFE, 14 TU_LOWERFORMAT_SUBCODE = 0xFD, 15 TU_ERASEUSERDATA_SUBCODE = 0xFB, 16 TU_GETUSERSECTOR_SUBCODE = 0xF9 17 } TESTUNIT_SUBCODE; 18 typedef enum 19 { 20 RST_NONE_SUBCODE = 0, 21 RST_RESETMSC_SUBCODE, 22 RST_POWEROFF_SUBCODE, 23 RST_RESETMASKROM_SUBCODE, 24 RST_DISCONNECTRESET_SUBCODE 25 } RESET_SUBCODE; 26 typedef enum 27 { 28 RWMETHOD_IMAGE = 0, 29 RWMETHOD_LBA, 30 } RW_SUBCODE; 31 /* ���� */ 32 typedef enum 33 { 34 TEST_UNIT_READY = 0, 35 READ_FLASH_ID = 0x01, 36 TEST_BAD_BLOCK = 0x03, 37 READ_SECTOR = 0x04, 38 WRITE_SECTOR = 0x05, 39 ERASE_NORMAL = 0x06, 40 ERASE_FORCE = 0x0B, 41 READ_LBA = 0x14, 42 WRITE_LBA = 0x15, 43 ERASE_SYSTEMDISK = 0x16, 44 READ_SDRAM = 0x17, 45 WRITE_SDRAM = 0x18, 46 EXECUTE_SDRAM = 0x19, 47 READ_FLASH_INFO = 0x1A, 48 READ_CHIP_INFO = 0x1B, 49 SET_RESET_FLAG = 0x1E, 50 WRITE_EFUSE = 0x1F, 51 READ_EFUSE = 0x20, 52 READ_SPI_FLASH = 0x21, 53 WRITE_SPI_FLASH = 0x22, 54 SWITCH_MASKROM = 0xFE, 55 DEVICE_RESET = 0xFF 56 } USB_OPERATION_CODE; 57 58 #pragma pack(1) 59 60 typedef struct 61 { 62 BYTE ucOperCode; 63 BYTE ucReserved; 64 DWORD dwAddress; 65 BYTE ucReserved2; 66 USHORT usLength; 67 BYTE ucReserved3[7]; 68 } CBWCB, *PCBWCB; 69 70 typedef struct 71 { 72 DWORD dwCBWSignature; 73 DWORD dwCBWTag; 74 DWORD dwCBWTransferLength; 75 BYTE ucCBWFlags; 76 BYTE ucCBWLUN; 77 BYTE ucCBWCBLength; 78 CBWCB cbwcb; 79 } CBW, *PCBW; 80 81 typedef struct 82 { 83 DWORD dwCSWSignature; 84 DWORD dwCSWTag; 85 DWORD dwCBWDataResidue; 86 BYTE ucCSWStatus; 87 } CSW, *PCSW; 88 typedef struct 89 { 90 UINT uiSize; 91 UINT uiCrc; 92 UINT uiBlock[5]; 93 } STRUCT_END_WRITE_SECTOR, *PSTRUCT_END_WRITE_SECTOR; 94 95 #pragma pack() 96 #define NAND_DRIVER_DEV "/dev/rknand_sys_storage" 97 #define NAND_DRIVER_DEV_VENDOR "/dev/rknand_sys_storage" 98 #define NAND_DRIVER_DEV_LBA "/dev/rkflash0" 99 #define EMMC_DRIVER_DEV "/dev/rknand_sys_storage" 100 #define EMMC_DRIVER_DEV_VENDOR "/dev/vendor_storage" 101 //#define EMMC_DRIVER_DEV_LBA "/dev/block/mmcblk0" 102 #define EMMC_DRIVER_DEV_LBA "/dev/mmcblk0" 103 #define EMMC_POINT_NAME "emmc_point_name" 104 105 #define READ_SECTOR_IO _IOW('r', READ_SECTOR, unsigned int) 106 #define WRITE_SECTOR_IO _IOW('r', WRITE_SECTOR, unsigned int) 107 #define READ_LBA_IO _IOW('r', READ_LBA, unsigned int) 108 #define WRITE_LBA_IO _IOW('r', WRITE_LBA, unsigned int) 109 #define START_WRITE_SECTOR_IO _IOW('r', 0x51, unsigned int) 110 #define END_WRITE_SECTOR_IO _IOW('r', 0x52, unsigned int) 111 #define GET_FLASH_INFO_IO _IOW('r', READ_FLASH_INFO, unsigned int) 112 #define GET_BAD_BLOCK_IO _IOW('r', TEST_BAD_BLOCK, unsigned int) 113 #define GET_LOCK_FLAG_IO _IOW('r', 0x53, unsigned int) 114 #define GET_PUBLIC_KEY_IO _IOW('r', 0x54, unsigned int) 115 116 #define DISABLE_NAND_LBA_WRITE_IO _IO('V',0) 117 #define ENABLE_NAND_LBA_WRITE_IO _IO('V',1) 118 #define DISABLE_NAND_LBA_READ_IO _IO('V',2) 119 #define ENABLE_NAND_LBA_READ_IO _IO('V',3) 120 121 122 #define CMD_TIMEOUT 0 123 124 #define CBW_SIGN 0x43425355 /* "USBC" */ 125 #define CSW_SIGN 0x53425355 /* "USBS" */ 126 127 128 #define DIRECTION_OUT 0x00 129 #define DIRECTION_IN 0x80 130 #define MAX_TEST_BLOCKS 512 131 #define MAX_ERASE_BLOCKS 128 132 #define MAX_CLEAR_LEN 16*1024 133 134 #ifndef ERR_SUCCESS 135 #define ERR_SUCCESS 0 136 #endif 137 #define ERR_DEVICE_READY 0 138 #define ERR_DEVICE_OPEN_FAILED -1 139 #define ERR_CSW_OPEN_FAILED -2 140 #define ERR_DEVICE_WRITE_FAILED -3 141 #define ERR_DEVICE_READ_FAILED -4 142 #define ERR_CMD_NOTMATCH -5 143 #define ERR_DEVICE_UNREADY -6 144 #define ERR_FOUND_BAD_BLOCK -7 145 #define ERR_FAILED -8 146 #define ERR_CROSS_BORDER -9 147 #define ERR_DEVICE_NOT_SUPPORT -10 148 #define ERR_REQUEST_NOT_SUPPORT -11 149 #define ERR_REQUEST_FAIL -12 150 #define ERR_BUFFER_NOT_ENOUGH -13 151 152 #define UFI_CHECK_SIGN(cbw, csw) ((CSW_SIGN == (csw).dwCSWSignature) && ((csw).dwCSWTag == (cbw).dwCBWTag)) 153 154 class CRKLog; 155 class CRKComm 156 { 157 public: 158 virtual int RKU_EraseBlock(BYTE ucFlashCS, DWORD dwPos, DWORD dwCount, BYTE ucEraseType) = 0; 159 virtual int RKU_ReadChipInfo(BYTE *lpBuffer) = 0; 160 virtual int RKU_ReadFlashID(BYTE *lpBuffer) = 0; 161 virtual int RKU_ReadFlashInfo(BYTE *lpBuffer, UINT *puiRead = NULL) = 0; 162 virtual int RKU_ReadLBA(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer, BYTE bySubCode = RWMETHOD_IMAGE) = 0; 163 virtual int RKU_ReadSector(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer) = 0; 164 virtual int RKU_ResetDevice(BYTE bySubCode = RST_NONE_SUBCODE) = 0; 165 virtual int RKU_TestBadBlock(BYTE ucFlashCS, DWORD dwPos, DWORD dwCount, BYTE *lpBuffer) = 0; 166 virtual int RKU_TestDeviceReady(DWORD *dwTotal = NULL, DWORD *dwCurrent = NULL, BYTE bySubCode = TU_NONE_SUBCODE) = 0; 167 virtual int RKU_WriteLBA(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer, BYTE bySubCode = RWMETHOD_IMAGE) = 0; 168 virtual int RKU_LoaderWriteLBA(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer, BYTE bySubCode = RWMETHOD_IMAGE) = 0; 169 virtual int RKU_WriteSector(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer) = 0; 170 virtual int RKU_EndWriteSector(BYTE *lpBuffer) = 0; 171 virtual int RKU_GetLockFlag(BYTE *lpBuffer) = 0; 172 virtual int RKU_GetPublicKey(BYTE *lpBuffer) = 0; 173 virtual void RKU_ReopenLBAHandle() = 0; 174 virtual int RKU_ShowNandLBADevice() = 0; 175 virtual bool RKU_IsEmmcFlash() = 0; 176 CRKComm(CRKLog *pLog); 177 virtual ~CRKComm(); 178 protected: 179 CRKLog *m_log; 180 bool m_bEmmc; 181 int m_hDev; 182 int m_hLbaDev; 183 private: 184 185 }; 186 class CRKUsbComm: public CRKComm 187 { 188 public: 189 virtual int RKU_EraseBlock(BYTE ucFlashCS, DWORD dwPos, DWORD dwCount, BYTE ucEraseType); 190 virtual int RKU_ReadChipInfo(BYTE *lpBuffer); 191 virtual int RKU_ReadFlashID(BYTE *lpBuffer); 192 virtual int RKU_ReadFlashInfo(BYTE *lpBuffer, UINT *puiRead = NULL); 193 virtual int RKU_ReadLBA(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer, BYTE bySubCode = RWMETHOD_IMAGE); 194 virtual int RKU_ReadSector(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer); 195 virtual int RKU_ResetDevice(BYTE bySubCode = RST_NONE_SUBCODE); 196 virtual int RKU_TestBadBlock(BYTE ucFlashCS, DWORD dwPos, DWORD dwCount, BYTE *lpBuffer); 197 virtual int RKU_TestDeviceReady(DWORD *dwTotal = NULL, DWORD *dwCurrent = NULL, BYTE bySubCode = TU_NONE_SUBCODE); 198 virtual int RKU_WriteLBA(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer, BYTE bySubCode = RWMETHOD_IMAGE); 199 virtual int RKU_LoaderWriteLBA(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer, BYTE bySubCode = RWMETHOD_IMAGE); 200 virtual int RKU_WriteSector(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer); 201 virtual int RKU_EndWriteSector(BYTE *lpBuffer); 202 virtual int RKU_GetLockFlag(BYTE *lpBuffer); 203 virtual int RKU_GetPublicKey(BYTE *lpBuffer); 204 virtual void RKU_ReopenLBAHandle(); 205 virtual int RKU_ShowNandLBADevice(); 206 virtual bool RKU_IsEmmcFlash(); 207 CRKUsbComm(CRKLog *pLog); 208 ~CRKUsbComm(); 209 210 protected: 211 STRUCT_RKDEVICE_DESC m_deviceDesc; 212 CRKLog *m_log; 213 private: 214 bool CtrlNandLbaWrite(bool bEnable = true); 215 bool CtrlNandLbaRead(bool bEnable = true); 216 217 }; 218 219 #endif 220