1
2
3
4
5
6
7
8#ifndef _F_ROCKUSB_H_
9#define _F_ROCKUSB_H_
10#include <blk.h>
11
12#define ROCKUSB_VERSION "0.1"
13
14#define ROCKUSB_INTERFACE_CLASS 0xff
15#define ROCKUSB_INTERFACE_SUB_CLASS 0x06
16#define ROCKUSB_INTERFACE_PROTOCOL 0x05
17
18#define RX_ENDPOINT_MAXIMUM_PACKET_SIZE_2_0 0x0200
19#define RX_ENDPOINT_MAXIMUM_PACKET_SIZE_1_1 0x0040
20#define TX_ENDPOINT_MAXIMUM_PACKET_SIZE 0x0040
21
22#define EP_BUFFER_SIZE 4096
23
24
25
26
27
28
29#define RKUSB_BUF_SIZE EP_BUFFER_SIZE * 2
30#define RKBLOCK_BUF_SIZE 4096
31
32#define RKUSB_STATUS_IDLE 0
33#define RKUSB_STATUS_CMD 1
34#define RKUSB_STATUS_RXDATA 2
35#define RKUSB_STATUS_TXDATA 3
36#define RKUSB_STATUS_CSW 4
37#define RKUSB_STATUS_RXDATA_PREPARE 5
38#define RKUSB_STATUS_TXDATA_PREPARE 6
39
40enum rkusb_command {
41K_FW_TEST_UNIT_READY = 0x00,
42K_FW_READ_FLASH_ID = 0x01,
43K_FW_SET_DEVICE_ID = 0x02,
44K_FW_TEST_BAD_BLOCK = 0x03,
45K_FW_READ_10 = 0x04,
46K_FW_WRITE_10 = 0x05,
47K_FW_ERASE_10 = 0x06,
48K_FW_WRITE_SPARE = 0x07,
49K_FW_READ_SPARE = 0x08,
50
51K_FW_ERASE_10_FORCE = 0x0b,
52K_FW_GET_VERSION = 0x0c,
53
54K_FW_LBA_READ_10 = 0x14,
55K_FW_LBA_WRITE_10 = 0x15,
56K_FW_ERASE_SYS_DISK = 0x16,
57K_FW_SDRAM_READ_10 = 0x17,
58K_FW_SDRAM_WRITE_10 = 0x18,
59K_FW_SDRAM_EXECUTE = 0x19,
60K_FW_READ_FLASH_INFO = 0x1A,
61K_FW_GET_CHIP_VER = 0x1B,
62K_FW_LOW_FORMAT = 0x1C,
63K_FW_SET_RESET_FLAG = 0x1E,
64K_FW_SPI_READ_10 = 0x21,
65K_FW_SPI_WRITE_10 = 0x22,
66K_FW_LBA_ERASE_10 = 0x25,
67
68K_FW_SESSION = 0X30,
69K_FW_RESET = 0xff,
70};
71
72#define CBW_DIRECTION_OUT 0x00
73#define CBW_DIRECTION_IN 0x80
74
75struct cmd_dispatch_info {
76 enum rkusb_command cmd;
77
78 void (*cb)(struct usb_ep *ep, struct usb_request *req);
79};
80
81
82
83
84struct fsg_bulk_cb_wrap {
85 __le32 signature;
86 u32 tag;
87 __le32 data_transfer_length;
88 u8 flags;
89 u8 lun;
90 u8 length;
91 u8 CDB[16];
92};
93
94#define USB_BULK_CB_WRAP_LEN 31
95#define USB_BULK_CB_SIG 0x43425355
96#define USB_BULK_IN_FLAG 0x80
97
98
99struct bulk_cs_wrap {
100 __le32 signature;
101 u32 tag;
102 __le32 residue;
103 u8 status;
104};
105
106#define USB_BULK_CS_WRAP_LEN 13
107#define USB_BULK_CS_SIG 0x53425355
108#define USB_STATUS_PASS 0
109#define USB_STATUS_FAIL 1
110#define USB_STATUS_PHASE_ERROR 2
111
112#define CSW_GOOD 0x00
113#define CSW_FAIL 0x01
114
115struct f_rockusb {
116 struct usb_function usb_function;
117 struct usb_ep *in_ep, *out_ep;
118 struct usb_request *in_req, *out_req;
119 char *dev_type;
120 unsigned int dev_index;
121 unsigned int tag;
122 unsigned int lba;
123 unsigned int dl_size;
124 unsigned int dl_bytes;
125 unsigned int ul_size;
126 unsigned int ul_bytes;
127 struct blk_desc *desc;
128 int reboot_flag;
129 void *buf;
130 void *buf_head;
131};
132
133
134void rockusb_dev_init(char *dev_type, int dev_index);
135#endif
136