xref: /OK3568_Linux_fs/external/rkupdate/RKComm.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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