This source file includes following definitions.
- umass_bbb_cbw_t
- umass_bbb_csw_t
- umass_cbi_sbl_t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 #ifdef UMASS_DEBUG
33 #define DIF(m, x) if (umassdebug & (m)) do { x ; } while (0)
34 #define DPRINTF(m, x) do { if (umassdebug & (m)) printf x; } while (0)
35 #define UDMASS_UPPER 0x00008000
36 #define UDMASS_GEN 0x00010000
37 #define UDMASS_SCSI 0x00020000
38 #define UDMASS_UFI 0x00040000
39 #define UDMASS_8070 0x00080000
40 #define UDMASS_USB 0x00100000
41 #define UDMASS_BBB 0x00200000
42 #define UDMASS_CBI 0x00400000
43 #define UDMASS_ALL 0xffff0000
44
45 #define UDMASS_XFER 0x40000000
46 #define UDMASS_CMD 0x80000000
47
48 extern int umassdebug;
49 #else
50 #define DIF(m, x)
51 #define DPRINTF(m, x)
52 #endif
53
54
55
56 #define UFI_COMMAND_LENGTH 12
57
58
59 #define DIR_NONE 0
60 #define DIR_IN 1
61 #define DIR_OUT 2
62
63
64 #define UMASS_BULKIN 0
65 #define UMASS_BULKOUT 1
66 #define UMASS_INTRIN 2
67 #define UMASS_NEP 3
68
69
70
71 #define UR_BBB_RESET 0xff
72 #define UR_BBB_GET_MAX_LUN 0xfe
73
74
75 typedef struct {
76 uDWord dCBWSignature;
77 #define CBWSIGNATURE 0x43425355
78 uDWord dCBWTag;
79 uDWord dCBWDataTransferLength;
80 uByte bCBWFlags;
81 #define CBWFLAGS_OUT 0x00
82 #define CBWFLAGS_IN 0x80
83 uByte bCBWLUN;
84 uByte bCDBLength;
85 #define CBWCDBLENGTH 16
86 uByte CBWCDB[CBWCDBLENGTH];
87 } umass_bbb_cbw_t;
88 #define UMASS_BBB_CBW_SIZE 31
89
90
91 typedef struct {
92 uDWord dCSWSignature;
93 #define CSWSIGNATURE 0x53425355
94 #define CSWSIGNATURE_OLYMPUS_C1 0x55425355
95 uDWord dCSWTag;
96 uDWord dCSWDataResidue;
97 uByte bCSWStatus;
98 #define CSWSTATUS_GOOD 0x0
99 #define CSWSTATUS_FAILED 0x1
100 #define CSWSTATUS_PHASE 0x2
101 } umass_bbb_csw_t;
102 #define UMASS_BBB_CSW_SIZE 13
103
104
105
106 #define UR_CBI_ADSC 0x00
107
108 typedef unsigned char umass_cbi_cbl_t[16];
109
110 typedef union {
111 struct {
112 uByte type;
113 #define IDB_TYPE_CCI 0x00
114 uByte value;
115 #define IDB_VALUE_PASS 0x00
116 #define IDB_VALUE_FAIL 0x01
117 #define IDB_VALUE_PHASE 0x02
118 #define IDB_VALUE_PERSISTENT 0x03
119 #define IDB_VALUE_STATUS_MASK 0x03
120 } common;
121
122 struct {
123 uByte asc;
124 uByte ascq;
125 } ufi;
126 } umass_cbi_sbl_t;
127
128 struct umass_softc;
129
130 typedef void (*umass_callback)(struct umass_softc *, void *, int, int);
131 #define STATUS_CMD_OK 0
132 #define STATUS_CMD_UNKNOWN 1
133 #define STATUS_CMD_FAILED 2
134 #define STATUS_WIRE_FAILED 3
135
136 typedef void (*umass_wire_xfer)(struct umass_softc *, int, void *, int, void *,
137 int, int, u_int, umass_callback, void *);
138 typedef void (*umass_wire_reset)(struct umass_softc *, int);
139 typedef void (*umass_wire_state)(usbd_xfer_handle, usbd_private_handle,
140 usbd_status);
141
142 struct umass_wire_methods {
143 umass_wire_xfer wire_xfer;
144 umass_wire_reset wire_reset;
145 umass_wire_state wire_state;
146 };
147
148 struct umassbus_softc {
149 struct device *sc_child;
150 };
151
152
153 struct umass_softc {
154 struct device sc_dev;
155 usbd_device_handle sc_udev;
156 usbd_interface_handle sc_iface;
157 int sc_ifaceno;
158
159 u_int8_t sc_epaddr[UMASS_NEP];
160 usbd_pipe_handle sc_pipe[UMASS_NEP];
161 usb_device_request_t sc_req;
162
163 const struct umass_wire_methods *sc_methods;
164
165 u_int8_t sc_wire;
166 #define UMASS_WPROTO_UNSPEC 0
167 #define UMASS_WPROTO_BBB 1
168 #define UMASS_WPROTO_CBI 2
169 #define UMASS_WPROTO_CBI_I 3
170
171 u_int8_t sc_cmd;
172 #define UMASS_CPROTO_UNSPEC 0
173 #define UMASS_CPROTO_SCSI 1
174 #define UMASS_CPROTO_ATAPI 2
175 #define UMASS_CPROTO_UFI 3
176 #define UMASS_CPROTO_RBC 4
177 #define UMASS_CPROTO_ISD_ATA 5
178
179 u_int32_t sc_quirks;
180 #define UMASS_QUIRK_WRONG_CSWSIG 0x00000001
181 #define UMASS_QUIRK_WRONG_CSWTAG 0x00000002
182
183 u_int32_t sc_busquirks;
184
185
186 umass_bbb_cbw_t cbw;
187 umass_bbb_csw_t csw;
188
189 umass_cbi_cbl_t cbl;
190 umass_cbi_sbl_t sbl;
191
192
193
194
195
196
197
198 #define XFER_BBB_CBW 0
199 #define XFER_BBB_DATA 1
200 #define XFER_BBB_DCLEAR 2
201 #define XFER_BBB_CSW1 3
202 #define XFER_BBB_CSW2 4
203 #define XFER_BBB_SCLEAR 5
204 #define XFER_BBB_RESET1 6
205 #define XFER_BBB_RESET2 7
206 #define XFER_BBB_RESET3 8
207
208 #define XFER_CBI_CB 0
209 #define XFER_CBI_DATA 1
210 #define XFER_CBI_STATUS 2
211 #define XFER_CBI_DCLEAR 3
212 #define XFER_CBI_SCLEAR 4
213 #define XFER_CBI_RESET1 5
214 #define XFER_CBI_RESET2 6
215 #define XFER_CBI_RESET3 7
216
217 #define XFER_NR 9
218
219 usbd_xfer_handle transfer_xfer[XFER_NR];
220
221 void *data_buffer;
222
223 int transfer_dir;
224 void *transfer_data;
225 int transfer_datalen;
226 int transfer_actlen;
227 umass_callback transfer_cb;
228 void *transfer_priv;
229 int transfer_status;
230
231 int transfer_state;
232 #define TSTATE_IDLE 0
233 #define TSTATE_BBB_COMMAND 1
234 #define TSTATE_BBB_DATA 2
235 #define TSTATE_BBB_DCLEAR 3
236 #define TSTATE_BBB_STATUS1 4
237 #define TSTATE_BBB_SCLEAR 5
238 #define TSTATE_BBB_STATUS2 6
239 #define TSTATE_BBB_RESET1 7
240 #define TSTATE_BBB_RESET2 8
241 #define TSTATE_BBB_RESET3 9
242 #define TSTATE_CBI_COMMAND 10
243 #define TSTATE_CBI_DATA 11
244 #define TSTATE_CBI_STATUS 12
245 #define TSTATE_CBI_DCLEAR 13
246 #define TSTATE_CBI_SCLEAR 14
247 #define TSTATE_CBI_RESET1 15
248 #define TSTATE_CBI_RESET2 16
249 #define TSTATE_CBI_RESET3 17
250 #define TSTATE_STATES 18
251
252
253 int timeout;
254
255 u_int8_t maxlun;
256
257 #ifdef UMASS_DEBUG
258 struct timeval tv;
259 #endif
260
261 int sc_xfer_flags;
262 char sc_dying;
263 int sc_refcnt;
264 int sc_sense;
265
266 struct umassbus_softc *bus;
267
268
269 int polling_depth;
270 usbd_status polled_xfer_status;
271 usbd_xfer_handle next_polled_xfer;
272 };
273
274 #define UMASS_MAX_TRANSFER_SIZE MAXBSIZE