xref: /utopia/UTPA2-700.0.x/modules/usb/drv/usb_ecos/usbhost/include/drvUSB_CH9.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 //    Software and any modification/derivatives thereof.
18 //    No right, ownership, or interest to MStar Software and any
19 //    modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 //    supplied together with third party`s software and the use of MStar
23 //    Software may require additional licenses from third parties.
24 //    Therefore, you hereby agree it is your sole responsibility to separately
25 //    obtain any and all third party right and license necessary for your use of
26 //    such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 //    MStar`s confidential information and you agree to keep MStar`s
30 //    confidential information in strictest confidence and not disclose to any
31 //    third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35 //    without limitation, any warranties of merchantability, non-infringement of
36 //    intellectual property rights, fitness for a particular purpose, error free
37 //    and in conformity with any international standard.  You agree to waive any
38 //    claim against MStar for any loss, damage, cost or expense that you may
39 //    incur related to your use of MStar Software.
40 //    In no event shall MStar be liable for any direct, indirect, incidental or
41 //    consequential damages, including without limitation, lost of profit or
42 //    revenues, lost or damage of data, and unauthorized system use.
43 //    You agree that this Section 4 shall still apply without being affected
44 //    even if MStar Software has been modified by MStar in accordance with your
45 //    request or instruction for your use, except otherwise agreed by both
46 //    parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 //    services in relation with MStar Software to you for your use of
50 //    MStar Software in conjunction with your or your customer`s product
51 //    ("Services").
52 //    You understand and agree that, except otherwise agreed by both parties in
53 //    writing, Services are provided on an "AS IS" basis and the warranty
54 //    disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 //    or otherwise:
58 //    (a) conferring any license or right to use MStar name, trademark, service
59 //        mark, symbol or any other identification;
60 //    (b) obligating MStar or any of its affiliates to furnish any person,
61 //        including without limitation, you and your customers, any assistance
62 //        of any kind whatsoever, or any information; or
63 //    (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 //    of Taiwan, R.O.C., excluding its conflict of law rules.
67 //    Any and all dispute arising out hereof or related hereto shall be finally
68 //    settled by arbitration referred to the Chinese Arbitration Association,
69 //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 //    Rules of the Association by three (3) arbitrators appointed in accordance
71 //    with the said Rules.
72 //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73 //    be English.
74 //    The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 
79 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
80 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
81 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
82 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
83 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
84 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
85 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
86 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
87 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
88 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
89 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
90 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
91 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
92 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
93 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
94 	 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
95 
96 #ifndef __MS_USB_CH9_H
97 #define __MS_USB_CH9_H
98 
99 #include "MsTypes.h"
100 #include "drvTypes.h"    /* __u8 etc */
101 
102 /*-------------------------------------------------------------------------*/
103 
104 
105 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
106 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
107 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
108 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
109 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
110 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
111 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
112 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
113 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
114 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
115 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
116 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
117 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
118 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
119 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
120 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
121 
122 #define USB_DIR_OUT      0    /* to device */
123 #define USB_DIR_IN      0x80    /* to host */
124 
125 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
126 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
127 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
128 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
129 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
130 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
131 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
132 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
133 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
134 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
135 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
136 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
137 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
138 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
139 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
140 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
141 #define USB_TYPE_MASK        (0x03 << 5) // pipe type
142 #define USB_TYPE_STANDARD    (0x00 << 5)
143 #define USB_TYPE_CLASS      (0x01 << 5)
144 #define USB_TYPE_VENDOR      (0x02 << 5)
145 #define USB_TYPE_RESERVED    (0x03 << 5)
146 
147 
148 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
149 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
150 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
151 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
152 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
153 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
154 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
155 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
156 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
157 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
158 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
159 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
160 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
161 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
162 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
163 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
164 #define USB_RECIP_MASK      0x1f
165 #define USB_RECIP_DEVICE    0x00
166 #define USB_RECIP_INTERFACE    0x01
167 #define USB_RECIP_ENDPOINT    0x02
168 #define USB_RECIP_OTHER      0x03
169 
170 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
171 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
172 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
173 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
174 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
175 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
176 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
177 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
178 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
179 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
180 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
181 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
182 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
183 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
184 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
185 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
186 
187 #define USB_REQ_GET_STATUS    0x00
188 #define USB_REQ_CLEAR_FEATURE    0x01
189 #define USB_REQ_SET_FEATURE    0x03
190 #define USB_REQ_SET_ADDRESS    0x05
191 #define USB_REQ_GET_DESCRIPTOR    0x06
192 #define USB_REQ_SET_DESCRIPTOR    0x07
193 #define USB_REQ_GET_CONFIGURATION  0x08
194 #define USB_REQ_SET_CONFIGURATION  0x09
195 #define USB_REQ_GET_INTERFACE    0x0A
196 #define USB_REQ_SET_INTERFACE    0x0B
197 #define USB_REQ_SYNCH_FRAME    0x0C
198 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
199 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
200 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
201 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
202 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
203 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
204 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
205 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
206 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
207 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
208 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
209 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
210 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
211 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
212 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
213 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
214 
215 struct usb_ctrlrequest {
216   unsigned char bRequestType;
217   unsigned char bRequest;
218   U16 wValue;
219   U16 wIndex;
220   U16 wLength;
221 } __attribute__((packed));
222 
223 /*-------------------------------------------------------------------------*/
224 
225 
226 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
227 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
228 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
229 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
230 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
231 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
232 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
233 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
234 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
235 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
236 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
237 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
238 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
239 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
240 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
241 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
242 
243 #define USB_DT_DEVICE      0x01
244 #define USB_DT_CONFIG      0x02
245 #define USB_DT_STRING      0x03
246 #define USB_DT_INTERFACE    0x04
247 #define USB_DT_ENDPOINT      0x05
248 #define USB_DT_DEVICE_QUALIFIER    0x06
249 #define USB_DT_OTHER_SPEED_CONFIG  0x07
250 #define USB_DT_INTERFACE_POWER    0x08
251 #define USB_DT_OTG                0x09
252 
253 /* All standard descriptors have these 2 fields at the beginning */
254 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
255 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
256 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
257 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
258 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
259 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
260 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
261 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
262 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
263 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
264 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
265 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
266 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
267 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
268 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
269 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
270 
271 struct usb_descriptor_header {
272   unsigned char  bLength;
273   unsigned char  bDescriptorType;
274 } __attribute__((packed));
275 
276 
277 /*-------------------------------------------------------------------------*/
278 
279 /* USB_DT_DEVICE: Device descriptor */
280 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
281 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
282 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
283 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
284 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
285 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
286 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
287 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
288 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
289 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
290 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
291 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
292 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
293 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
294 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
295 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
296 
297 struct usb_device_descriptor {
298   unsigned char  bLength;
299   unsigned char  bDescriptorType;
300 
301   U16 bcdUSB;
302   unsigned char  bDeviceClass;
303   unsigned char  bDeviceSubClass;
304   unsigned char  bDeviceProtocol;
305   unsigned char  bMaxPacketSize0;
306   U16 idVendor;
307   U16 idProduct;
308   U16 bcdDevice;
309   unsigned char  iManufacturer;
310   unsigned char  iProduct;
311   unsigned char  iSerialNumber;
312   unsigned char  bNumConfigurations;
313 } __attribute__((packed));
314 
315 #define USB_DT_DEVICE_SIZE    18
316 
317 
318 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
319 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
320 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
321 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
322 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
323 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
324 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
325 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
326 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
327 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
328 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
329 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
330 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
331 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
332 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
333 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
334 
335 #define USB_CLASS_PER_INTERFACE    0  /* for DeviceClass */
336 #define USB_CLASS_AUDIO      1
337 #define USB_CLASS_COMM      2
338 #define USB_CLASS_HID      3
339 #define USB_CLASS_PHYSICAL    5
340 #define USB_CLASS_STILL_IMAGE    6
341 #define USB_CLASS_PRINTER    7
342 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
343 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
344 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
345 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
346 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
347 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
348 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
349 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
350 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
351 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
352 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
353 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
354 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
355 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
356 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
357 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
358 #define USB_CLASS_STORAGE    8 // supported class
359 #define USB_CLASS_HUB      9 // supported class
360 #define USB_CLASS_CDC_DATA    0x0a
361 #define USB_CLASS_CSCID      0x0b  /* chip+ smart card */
362 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
363 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
364 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
365 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
366 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
367 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
368 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
369 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
370 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
371 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
372 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
373 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
374 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
375 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
376 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
377 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
378 #define USB_CLASS_CONTENT_SEC    0x0d  /* content security */
379 #define USB_CLASS_APP_SPEC    0xfe
380 #define USB_CLASS_VENDOR_SPEC    0xff // vendor used
381 
382 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
383 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
384 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
385 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
386 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
387 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
388 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
389 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
390 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
391 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
392 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
393 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
394 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
395 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
396 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
397 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
398 
399 /*-------------------------------------------------------------------------*/
400 
401 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
402 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
403 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
404 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
405 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
406 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
407 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
408 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
409 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
410 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
411 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
412 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
413 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
414 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
415 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
416 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
417 
418 struct usb_config_descriptor {
419   unsigned char  bLength;
420   unsigned char  bDescriptorType;
421 
422   U16 wTotalLength;
423   unsigned char  bNumInterfaces;
424   unsigned char  bConfigurationValue;
425   unsigned char  iConfiguration;
426   unsigned char  bmAttributes;
427   unsigned char  bMaxPower;
428 } __attribute__((packed));
429 
430 #define USB_DT_CONFIG_SIZE    9
431 
432 /* from config descriptor bmAttributes */
433 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
434 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
435 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
436 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
437 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
438 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
439 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
440 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
441 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
442 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
443 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
444 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
445 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
446 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
447 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
448 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
449 
450 #define USB_CONFIG_ATT_ONE    (1 << 7)  /* must be set */
451 #define USB_CONFIG_ATT_SELFPOWER  (1 << 6)  /* self powered */
452 #define USB_CONFIG_ATT_WAKEUP    (1 << 5)  /* can wakeup */
453 
454 /*-------------------------------------------------------------------------*/
455 
456 /* USB_DT_STRING: String descriptor */
457 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
458 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
459 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
460 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
461 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
462 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
463 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
464 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
465 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
466 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
467 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
468 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
469 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
470 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
471 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
472 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
473 
474 struct usb_string_descriptor {
475   unsigned char  bLength;
476   unsigned char  bDescriptorType;
477 
478   U16 wData[1];    /* UTF-16LE encoded */
479 } __attribute__((packed));
480 
481 
482 /*-------------------------------------------------------------------------*/
483 
484 /* USB_DT_INTERFACE: Interface descriptor */
485 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
486 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
487 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
488 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
489 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
490 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
491 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
492 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
493 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
494 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
495 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
496 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
497 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
498 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
499 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
500 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
501 
502 struct usb_interface_descriptor {
503   unsigned char  bLength;
504   unsigned char  bDescriptorType;
505 
506   unsigned char  bInterfaceNumber;
507   unsigned char  bAlternateSetting;
508   unsigned char  bNumEndpoints;
509   unsigned char  bInterfaceClass;
510   unsigned char  bInterfaceSubClass;
511   unsigned char  bInterfaceProtocol;
512   unsigned char  iInterface;
513 } __attribute__((packed));
514 
515 #define USB_DT_INTERFACE_SIZE    9
516 
517 /*-------------------------------------------------------------------------*/
518 
519 /* USB_DT_ENDPOINT: Endpoint descriptor */
520 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
521 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
522 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
523 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
524 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
525 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
526 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
527 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
528 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
529 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
530 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
531 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
532 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
533 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
534 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
535 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
536 
537 struct usb_endpoint_descriptor {
538   unsigned char  bLength;
539   unsigned char  bDescriptorType;
540 
541   unsigned char  bEndpointAddress;
542   unsigned char  bmAttributes;
543   U16 wMaxPacketSize;
544   unsigned char  bInterval;
545 
546   unsigned char  bRefresh;
547   unsigned char  bSynchAddress;
548 } __attribute__((packed));
549 
550 #define USB_DT_ENDPOINT_SIZE    7
551 #define USB_DT_ENDPOINT_AUDIO_SIZE  9  /* Audio extension */
552 
553 
554 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
555 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
556 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
557 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
558 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
559 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
560 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
561 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
562 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
563 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
564 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
565 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
566 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
567 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
568 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
569 	/*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
570 
571 #define USB_ENDPOINT_NUMBER_MASK  0x0f  /* in bEndpointAddress */
572 #define USB_ENDPOINT_DIR_MASK    0x80
573 
574 #define USB_ENDPOINT_XFERTYPE_MASK  0x03  /* in bmAttributes */
575 #define USB_ENDPOINT_XFER_CONTROL  0
576 #define USB_ENDPOINT_XFER_ISOC    1
577 #define USB_ENDPOINT_XFER_BULK    2
578 #define USB_ENDPOINT_XFER_INT    3
579 
580 
581 /*-------------------------------------------------------------------------*/
582 
583 /* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */
584 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
585 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
586 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
587 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
588 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
589 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
590 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
591 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
592 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
593 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
594 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
595 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
596 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
597 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
598 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
599 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
600 
601 struct usb_qualifier_descriptor {
602   unsigned char  bLength;
603   unsigned char  bDescriptorType;
604 
605   U16 bcdUSB;
606   unsigned char  bDeviceClass;
607   unsigned char  bDeviceSubClass;
608   unsigned char  bDeviceProtocol;
609   unsigned char  bMaxPacketSize0;
610   unsigned char  bNumConfigurations;
611   unsigned char  bRESERVED;
612 } __attribute__((packed));
613 
614 
615 /*-------------------------------------------------------------------------*/
616 
617 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
618 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
619 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
620 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
621 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
622 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
623 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
624 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
625 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
626 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
627 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
628 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
629 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
630 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
631 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
632 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
633 
634 enum usb_device_speed {
635   USB_SPEED_UNKNOWN = 0,      /* enumerating */
636   USB_SPEED_LOW, USB_SPEED_FULL,    /* usb 1.1 */
637   USB_SPEED_HIGH        /* usb 2.0 */
638 };
639 
640 enum usb_device_state {
641   USB_STATE_NOTATTACHED = 0,
642 
643   /* the chapter 9 device states */
644   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
645   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
646   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
647   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
648   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
649   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
650   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
651   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
652   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
653   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
654   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
655   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
656   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
657   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
658   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
659   /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
660 
661   USB_STATE_ATTACHED,
662   USB_STATE_POWERED,
663   USB_STATE_DEFAULT,      /* limited function */
664   USB_STATE_ADDRESS,
665   USB_STATE_CONFIGURED,      /* most functions */
666 
667   USB_STATE_SUSPENDED
668 
669 };
670 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
671 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
672 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
673 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
674 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
675 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
676 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
677 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
678 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
679 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
680 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
681 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
682 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
683 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
684 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
685 /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/
686 
687 /*-------------------------------------------------------------------------*/
688 
689 /* USB_DT_OTG: OTG descriptor */
690 struct usb_otg_descriptor {
691   unsigned char  bLength;
692   unsigned char  bDescriptorType;
693   unsigned char  bmAttributes;
694 } __attribute__((packed));
695 
696 #define USB_RT_OTG          0x00
697 #define OTG_B_HNP_ENABLE    0x03
698 #define OTG_A_HNP_SUPPORT   0x04
699 #define OTG_ALT_HNP_SUPPORT 0x05
700 #define OTGH_SRP_Enable     0x01
701 #define OTGH_HNP_Enable     0x02
702 #define OTGH_SRP_HNP_Enable 0x03
703 #endif
704