xref: /rk3399_rockchip-uboot/include/usb_defs.h (revision 012771d88adfb5e0886591880041f05fc8b15bdd)
1*012771d8Swdenk /*
2*012771d8Swdenk  * (C) Copyright 2001
3*012771d8Swdenk  * Denis Peter, MPL AG Switzerland
4*012771d8Swdenk  *
5*012771d8Swdenk  * See file CREDITS for list of people who contributed to this
6*012771d8Swdenk  * project.
7*012771d8Swdenk  *
8*012771d8Swdenk  * This program is free software; you can redistribute it and/or
9*012771d8Swdenk  * modify it under the terms of the GNU General Public License as
10*012771d8Swdenk  * published by the Free Software Foundation; either version 2 of
11*012771d8Swdenk  * the License, or (at your option) any later version.
12*012771d8Swdenk  *
13*012771d8Swdenk  * This program is distributed in the hope that it will be useful,
14*012771d8Swdenk  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15*012771d8Swdenk  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*012771d8Swdenk  * GNU General Public License for more details.
17*012771d8Swdenk  *
18*012771d8Swdenk  * You should have received a copy of the GNU General Public License
19*012771d8Swdenk  * along with this program; if not, write to the Free Software
20*012771d8Swdenk  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21*012771d8Swdenk  * MA 02111-1307 USA
22*012771d8Swdenk  *
23*012771d8Swdenk  * Note: Part of this code has been derived from linux
24*012771d8Swdenk  *
25*012771d8Swdenk  */
26*012771d8Swdenk #ifndef _USB_DEFS_H_
27*012771d8Swdenk #define _USB_DEFS_H_
28*012771d8Swdenk 
29*012771d8Swdenk 
30*012771d8Swdenk /* Everything is aribtrary */
31*012771d8Swdenk #define USB_ALTSETTINGALLOC          4
32*012771d8Swdenk #define USB_MAXALTSETTING	           128  /* Hard limit */
33*012771d8Swdenk 
34*012771d8Swdenk #define USB_MAX_DEVICE              32
35*012771d8Swdenk #define USB_MAXCONFIG		            8
36*012771d8Swdenk #define USB_MAXINTERFACES	          8
37*012771d8Swdenk #define USB_MAXENDPOINTS	          16
38*012771d8Swdenk #define USB_MAXCHILDREN  						8 	/* This is arbitrary */
39*012771d8Swdenk #define USB_MAX_HUB									16
40*012771d8Swdenk 
41*012771d8Swdenk #define USB_CNTL_TIMEOUT 100 /* 100ms timeout */
42*012771d8Swdenk 
43*012771d8Swdenk /* USB constants */
44*012771d8Swdenk 
45*012771d8Swdenk /* Device and/or Interface Class codes */
46*012771d8Swdenk #define USB_CLASS_PER_INTERFACE  0	/* for DeviceClass */
47*012771d8Swdenk #define USB_CLASS_AUDIO          1
48*012771d8Swdenk #define USB_CLASS_COMM           2
49*012771d8Swdenk #define USB_CLASS_HID            3
50*012771d8Swdenk #define USB_CLASS_PRINTER	       7
51*012771d8Swdenk #define USB_CLASS_MASS_STORAGE   8
52*012771d8Swdenk #define USB_CLASS_HUB            9
53*012771d8Swdenk #define USB_CLASS_DATA           10
54*012771d8Swdenk #define USB_CLASS_VENDOR_SPEC    0xff
55*012771d8Swdenk 
56*012771d8Swdenk /* some HID sub classes */
57*012771d8Swdenk #define USB_SUB_HID_NONE        0
58*012771d8Swdenk #define USB_SUB_HID_BOOT        1
59*012771d8Swdenk 
60*012771d8Swdenk /* some UID Protocols */
61*012771d8Swdenk #define USB_PROT_HID_NONE       0
62*012771d8Swdenk #define USB_PROT_HID_KEYBOARD   1
63*012771d8Swdenk #define USB_PROT_HID_MOUSE      2
64*012771d8Swdenk 
65*012771d8Swdenk 
66*012771d8Swdenk /* Sub STORAGE Classes */
67*012771d8Swdenk #define US_SC_RBC              1		/* Typically, flash devices */
68*012771d8Swdenk #define US_SC_8020             2		/* CD-ROM */
69*012771d8Swdenk #define US_SC_QIC              3		/* QIC-157 Tapes */
70*012771d8Swdenk #define US_SC_UFI              4		/* Floppy */
71*012771d8Swdenk #define US_SC_8070             5		/* Removable media */
72*012771d8Swdenk #define US_SC_SCSI             6		/* Transparent */
73*012771d8Swdenk #define US_SC_MIN              US_SC_RBC
74*012771d8Swdenk #define US_SC_MAX              US_SC_SCSI
75*012771d8Swdenk 
76*012771d8Swdenk /* STORAGE Protocols */
77*012771d8Swdenk #define US_PR_CB               1		/* Control/Bulk w/o interrupt */
78*012771d8Swdenk #define US_PR_CBI              0		/* Control/Bulk/Interrupt */
79*012771d8Swdenk #define US_PR_BULK             0x50		/* bulk only */
80*012771d8Swdenk 
81*012771d8Swdenk /* USB types */
82*012771d8Swdenk #define USB_TYPE_STANDARD   (0x00 << 5)
83*012771d8Swdenk #define USB_TYPE_CLASS      (0x01 << 5)
84*012771d8Swdenk #define USB_TYPE_VENDOR     (0x02 << 5)
85*012771d8Swdenk #define USB_TYPE_RESERVED   (0x03 << 5)
86*012771d8Swdenk 
87*012771d8Swdenk /* USB recipients */
88*012771d8Swdenk #define USB_RECIP_DEVICE      0x00
89*012771d8Swdenk #define USB_RECIP_INTERFACE   0x01
90*012771d8Swdenk #define USB_RECIP_ENDPOINT    0x02
91*012771d8Swdenk #define USB_RECIP_OTHER       0x03
92*012771d8Swdenk 
93*012771d8Swdenk /* USB directions */
94*012771d8Swdenk #define USB_DIR_OUT           0
95*012771d8Swdenk #define USB_DIR_IN            0x80
96*012771d8Swdenk 
97*012771d8Swdenk /* Descriptor types */
98*012771d8Swdenk #define USB_DT_DEVICE        0x01
99*012771d8Swdenk #define USB_DT_CONFIG        0x02
100*012771d8Swdenk #define USB_DT_STRING        0x03
101*012771d8Swdenk #define USB_DT_INTERFACE     0x04
102*012771d8Swdenk #define USB_DT_ENDPOINT      0x05
103*012771d8Swdenk 
104*012771d8Swdenk #define USB_DT_HID          (USB_TYPE_CLASS | 0x01)
105*012771d8Swdenk #define USB_DT_REPORT       (USB_TYPE_CLASS | 0x02)
106*012771d8Swdenk #define USB_DT_PHYSICAL     (USB_TYPE_CLASS | 0x03)
107*012771d8Swdenk #define USB_DT_HUB          (USB_TYPE_CLASS | 0x09)
108*012771d8Swdenk 
109*012771d8Swdenk /* Descriptor sizes per descriptor type */
110*012771d8Swdenk #define USB_DT_DEVICE_SIZE      18
111*012771d8Swdenk #define USB_DT_CONFIG_SIZE      9
112*012771d8Swdenk #define USB_DT_INTERFACE_SIZE   9
113*012771d8Swdenk #define USB_DT_ENDPOINT_SIZE    7
114*012771d8Swdenk #define USB_DT_ENDPOINT_AUDIO_SIZE  9	/* Audio extension */
115*012771d8Swdenk #define USB_DT_HUB_NONVAR_SIZE  7
116*012771d8Swdenk #define USB_DT_HID_SIZE         9
117*012771d8Swdenk 
118*012771d8Swdenk /* Endpoints */
119*012771d8Swdenk #define USB_ENDPOINT_NUMBER_MASK  0x0f	/* in bEndpointAddress */
120*012771d8Swdenk #define USB_ENDPOINT_DIR_MASK     0x80
121*012771d8Swdenk 
122*012771d8Swdenk #define USB_ENDPOINT_XFERTYPE_MASK 0x03	/* in bmAttributes */
123*012771d8Swdenk #define USB_ENDPOINT_XFER_CONTROL  0
124*012771d8Swdenk #define USB_ENDPOINT_XFER_ISOC     1
125*012771d8Swdenk #define USB_ENDPOINT_XFER_BULK     2
126*012771d8Swdenk #define USB_ENDPOINT_XFER_INT      3
127*012771d8Swdenk 
128*012771d8Swdenk /* USB Packet IDs (PIDs) */
129*012771d8Swdenk #define USB_PID_UNDEF_0             0xf0
130*012771d8Swdenk #define USB_PID_OUT                 0xe1
131*012771d8Swdenk #define USB_PID_ACK                 0xd2
132*012771d8Swdenk #define USB_PID_DATA0               0xc3
133*012771d8Swdenk #define USB_PID_UNDEF_4             0xb4
134*012771d8Swdenk #define USB_PID_SOF                 0xa5
135*012771d8Swdenk #define USB_PID_UNDEF_6             0x96
136*012771d8Swdenk #define USB_PID_UNDEF_7             0x87
137*012771d8Swdenk #define USB_PID_UNDEF_8             0x78
138*012771d8Swdenk #define USB_PID_IN                  0x69
139*012771d8Swdenk #define USB_PID_NAK                 0x5a
140*012771d8Swdenk #define USB_PID_DATA1               0x4b
141*012771d8Swdenk #define USB_PID_PREAMBLE            0x3c
142*012771d8Swdenk #define USB_PID_SETUP               0x2d
143*012771d8Swdenk #define USB_PID_STALL               0x1e
144*012771d8Swdenk #define USB_PID_UNDEF_F             0x0f
145*012771d8Swdenk 
146*012771d8Swdenk /* Standard requests */
147*012771d8Swdenk #define USB_REQ_GET_STATUS          0x00
148*012771d8Swdenk #define USB_REQ_CLEAR_FEATURE       0x01
149*012771d8Swdenk #define USB_REQ_SET_FEATURE         0x03
150*012771d8Swdenk #define USB_REQ_SET_ADDRESS         0x05
151*012771d8Swdenk #define USB_REQ_GET_DESCRIPTOR      0x06
152*012771d8Swdenk #define USB_REQ_SET_DESCRIPTOR      0x07
153*012771d8Swdenk #define USB_REQ_GET_CONFIGURATION   0x08
154*012771d8Swdenk #define USB_REQ_SET_CONFIGURATION   0x09
155*012771d8Swdenk #define USB_REQ_GET_INTERFACE       0x0A
156*012771d8Swdenk #define USB_REQ_SET_INTERFACE       0x0B
157*012771d8Swdenk #define USB_REQ_SYNCH_FRAME         0x0C
158*012771d8Swdenk 
159*012771d8Swdenk /* HID requests */
160*012771d8Swdenk #define USB_REQ_GET_REPORT          0x01
161*012771d8Swdenk #define USB_REQ_GET_IDLE            0x02
162*012771d8Swdenk #define USB_REQ_GET_PROTOCOL        0x03
163*012771d8Swdenk #define USB_REQ_SET_REPORT          0x09
164*012771d8Swdenk #define USB_REQ_SET_IDLE            0x0A
165*012771d8Swdenk #define USB_REQ_SET_PROTOCOL        0x0B
166*012771d8Swdenk 
167*012771d8Swdenk 
168*012771d8Swdenk /* "pipe" definitions */
169*012771d8Swdenk 
170*012771d8Swdenk #define PIPE_ISOCHRONOUS    0
171*012771d8Swdenk #define PIPE_INTERRUPT      1
172*012771d8Swdenk #define PIPE_CONTROL        2
173*012771d8Swdenk #define PIPE_BULK           3
174*012771d8Swdenk #define PIPE_DEVEP_MASK     0x0007ff00
175*012771d8Swdenk 
176*012771d8Swdenk #define USB_ISOCHRONOUS    0
177*012771d8Swdenk #define USB_INTERRUPT      1
178*012771d8Swdenk #define USB_CONTROL        2
179*012771d8Swdenk #define USB_BULK           3
180*012771d8Swdenk 
181*012771d8Swdenk /* USB-status codes: */
182*012771d8Swdenk #define USB_ST_ACTIVE           0x1		/* TD is active */
183*012771d8Swdenk #define USB_ST_STALLED          0x2		/* TD is stalled */
184*012771d8Swdenk #define USB_ST_BUF_ERR          0x4		/* buffer error */
185*012771d8Swdenk #define USB_ST_BABBLE_DET       0x8		/* Babble detected */
186*012771d8Swdenk #define USB_ST_NAK_REC          0x10	/* NAK Received*/
187*012771d8Swdenk #define USB_ST_CRC_ERR          0x20	/* CRC/timeout Error */
188*012771d8Swdenk #define USB_ST_BIT_ERR          0x40	/* Bitstuff error */
189*012771d8Swdenk #define USB_ST_NOT_PROC         0x80000000L	/* Not yet processed */
190*012771d8Swdenk 
191*012771d8Swdenk 
192*012771d8Swdenk 
193*012771d8Swdenk /*************************************************************************
194*012771d8Swdenk  * Hub defines
195*012771d8Swdenk  */
196*012771d8Swdenk 
197*012771d8Swdenk /*
198*012771d8Swdenk  * Hub request types
199*012771d8Swdenk  */
200*012771d8Swdenk 
201*012771d8Swdenk #define USB_RT_HUB	(USB_TYPE_CLASS | USB_RECIP_DEVICE)
202*012771d8Swdenk #define USB_RT_PORT	(USB_TYPE_CLASS | USB_RECIP_OTHER)
203*012771d8Swdenk 
204*012771d8Swdenk /*
205*012771d8Swdenk  * Hub Class feature numbers
206*012771d8Swdenk  */
207*012771d8Swdenk #define C_HUB_LOCAL_POWER   0
208*012771d8Swdenk #define C_HUB_OVER_CURRENT  1
209*012771d8Swdenk 
210*012771d8Swdenk /*
211*012771d8Swdenk  * Port feature numbers
212*012771d8Swdenk  */
213*012771d8Swdenk #define USB_PORT_FEAT_CONNECTION     0
214*012771d8Swdenk #define USB_PORT_FEAT_ENABLE         1
215*012771d8Swdenk #define USB_PORT_FEAT_SUSPEND        2
216*012771d8Swdenk #define USB_PORT_FEAT_OVER_CURRENT   3
217*012771d8Swdenk #define USB_PORT_FEAT_RESET          4
218*012771d8Swdenk #define USB_PORT_FEAT_POWER          8
219*012771d8Swdenk #define USB_PORT_FEAT_LOWSPEED       9
220*012771d8Swdenk #define USB_PORT_FEAT_C_CONNECTION   16
221*012771d8Swdenk #define USB_PORT_FEAT_C_ENABLE       17
222*012771d8Swdenk #define USB_PORT_FEAT_C_SUSPEND      18
223*012771d8Swdenk #define USB_PORT_FEAT_C_OVER_CURRENT 19
224*012771d8Swdenk #define USB_PORT_FEAT_C_RESET        20
225*012771d8Swdenk 
226*012771d8Swdenk /* wPortStatus bits */
227*012771d8Swdenk #define USB_PORT_STAT_CONNECTION    0x0001
228*012771d8Swdenk #define USB_PORT_STAT_ENABLE        0x0002
229*012771d8Swdenk #define USB_PORT_STAT_SUSPEND       0x0004
230*012771d8Swdenk #define USB_PORT_STAT_OVERCURRENT   0x0008
231*012771d8Swdenk #define USB_PORT_STAT_RESET         0x0010
232*012771d8Swdenk #define USB_PORT_STAT_POWER         0x0100
233*012771d8Swdenk #define USB_PORT_STAT_LOW_SPEED     0x0200
234*012771d8Swdenk 
235*012771d8Swdenk /* wPortChange bits */
236*012771d8Swdenk #define USB_PORT_STAT_C_CONNECTION  0x0001
237*012771d8Swdenk #define USB_PORT_STAT_C_ENABLE      0x0002
238*012771d8Swdenk #define USB_PORT_STAT_C_SUSPEND     0x0004
239*012771d8Swdenk #define USB_PORT_STAT_C_OVERCURRENT 0x0008
240*012771d8Swdenk #define USB_PORT_STAT_C_RESET       0x0010
241*012771d8Swdenk 
242*012771d8Swdenk /* wHubCharacteristics (masks) */
243*012771d8Swdenk #define HUB_CHAR_LPSM               0x0003
244*012771d8Swdenk #define HUB_CHAR_COMPOUND           0x0004
245*012771d8Swdenk #define HUB_CHAR_OCPM               0x0018
246*012771d8Swdenk 
247*012771d8Swdenk /*
248*012771d8Swdenk  *Hub Status & Hub Change bit masks
249*012771d8Swdenk  */
250*012771d8Swdenk #define HUB_STATUS_LOCAL_POWER	0x0001
251*012771d8Swdenk #define HUB_STATUS_OVERCURRENT	0x0002
252*012771d8Swdenk 
253*012771d8Swdenk #define HUB_CHANGE_LOCAL_POWER	0x0001
254*012771d8Swdenk #define HUB_CHANGE_OVERCURRENT	0x0002
255*012771d8Swdenk 
256*012771d8Swdenk #endif /*_USB_DEFS_H_ */
257