summaryrefslogtreecommitdiff
path: root/include/usb_defs.h
blob: 6ad4d084e97617fc3dcc92a63bfe901e4283ccb2 (plain)
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
/*
 * (C) Copyright 2001
 * Denis Peter, MPL AG Switzerland
 *
 * See file CREDITS for list of people who contributed to this
 * project.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 *
 * Note: Part of this code has been derived from linux
 *
 */
#ifndef _USB_DEFS_H_
#define _USB_DEFS_H_

/* USB constants */

/* Device and/or Interface Class codes */
#define USB_CLASS_PER_INTERFACE  0	/* for DeviceClass */
#define USB_CLASS_AUDIO 		 1
#define USB_CLASS_COMM			 2
#define USB_CLASS_HID			 3
#define USB_CLASS_PRINTER		   7
#define USB_CLASS_MASS_STORAGE	 8
#define USB_CLASS_HUB			 9
#define USB_CLASS_DATA			 10
#define USB_CLASS_VENDOR_SPEC	 0xff

/* some HID sub classes */
#define USB_SUB_HID_NONE		0
#define USB_SUB_HID_BOOT		1

/* some UID Protocols */
#define USB_PROT_HID_NONE		0
#define USB_PROT_HID_KEYBOARD	1
#define USB_PROT_HID_MOUSE		2


/* Sub STORAGE Classes */
#define US_SC_RBC			   1		/* Typically, flash devices */
#define US_SC_8020			   2		/* CD-ROM */
#define US_SC_QIC			   3		/* QIC-157 Tapes */
#define US_SC_UFI			   4		/* Floppy */
#define US_SC_8070			   5		/* Removable media */
#define US_SC_SCSI			   6		/* Transparent */
#define US_SC_MIN			   US_SC_RBC
#define US_SC_MAX			   US_SC_SCSI

/* STORAGE Protocols */
#define US_PR_CB			   1		/* Control/Bulk w/o interrupt */
#define US_PR_CBI			   0		/* Control/Bulk/Interrupt */
#define US_PR_BULK			   0x50 	/* bulk only */

/* USB types */
#define USB_TYPE_STANDARD	(0x00 << 5)
#define USB_TYPE_CLASS		(0x01 << 5)
#define USB_TYPE_VENDOR 	(0x02 << 5)
#define USB_TYPE_RESERVED	(0x03 << 5)

/* USB recipients */
#define USB_RECIP_DEVICE	  0x00
#define USB_RECIP_INTERFACE   0x01
#define USB_RECIP_ENDPOINT	  0x02
#define USB_RECIP_OTHER 	  0x03

/* USB directions */
#define USB_DIR_OUT 		  0
#define USB_DIR_IN			  0x80

/* Descriptor types */
#define USB_DT_DEVICE		 0x01
#define USB_DT_CONFIG		 0x02
#define USB_DT_STRING		 0x03
#define USB_DT_INTERFACE	 0x04
#define USB_DT_ENDPOINT 	 0x05

#define USB_DT_HID			(USB_TYPE_CLASS | 0x01)
#define USB_DT_REPORT		(USB_TYPE_CLASS | 0x02)
#define USB_DT_PHYSICAL 	(USB_TYPE_CLASS | 0x03)
#define USB_DT_HUB			(USB_TYPE_CLASS | 0x09)

/* Descriptor sizes per descriptor type */
#define USB_DT_DEVICE_SIZE		18
#define USB_DT_CONFIG_SIZE		9
#define USB_DT_INTERFACE_SIZE	9
#define USB_DT_ENDPOINT_SIZE	7
#define USB_DT_ENDPOINT_AUDIO_SIZE	9	/* Audio extension */
#define USB_DT_HUB_NONVAR_SIZE	7
#define USB_DT_HID_SIZE 		9

/* Endpoints */
#define USB_ENDPOINT_NUMBER_MASK  0x0f	/* in bEndpointAddress */
#define USB_ENDPOINT_DIR_MASK	  0x80

#define USB_ENDPOINT_XFERTYPE_MASK 0x03 /* in bmAttributes */
#define USB_ENDPOINT_XFER_CONTROL  0
#define USB_ENDPOINT_XFER_ISOC	   1
#define USB_ENDPOINT_XFER_BULK	   2
#define USB_ENDPOINT_XFER_INT	   3

/* USB Packet IDs (PIDs) */
#define USB_PID_UNDEF_0 			0xf0
#define USB_PID_OUT 				0xe1
#define USB_PID_ACK 				0xd2
#define USB_PID_DATA0				0xc3
#define USB_PID_UNDEF_4 			0xb4
#define USB_PID_SOF 				0xa5
#define USB_PID_UNDEF_6 			0x96
#define USB_PID_UNDEF_7 			0x87
#define USB_PID_UNDEF_8 			0x78
#define USB_PID_IN					0x69
#define USB_PID_NAK 				0x5a
#define USB_PID_DATA1				0x4b
#define USB_PID_PREAMBLE			0x3c
#define USB_PID_SETUP				0x2d
#define USB_PID_STALL				0x1e
#define USB_PID_UNDEF_F 			0x0f

/* Standard requests */
#define USB_REQ_GET_STATUS			0x00
#define USB_REQ_CLEAR_FEATURE		0x01
#define USB_REQ_SET_FEATURE 		0x03
#define USB_REQ_SET_ADDRESS 		0x05
#define USB_REQ_GET_DESCRIPTOR		0x06
#define USB_REQ_SET_DESCRIPTOR		0x07
#define USB_REQ_GET_CONFIGURATION	0x08
#define USB_REQ_SET_CONFIGURATION	0x09
#define USB_REQ_GET_INTERFACE		0x0A
#define USB_REQ_SET_INTERFACE		0x0B
#define USB_REQ_SYNCH_FRAME 		0x0C

/* HID requests */
#define USB_REQ_GET_REPORT			0x01
#define USB_REQ_GET_IDLE			0x02
#define USB_REQ_GET_PROTOCOL		0x03
#define USB_REQ_SET_REPORT			0x09
#define USB_REQ_SET_IDLE			0x0A
#define USB_REQ_SET_PROTOCOL		0x0B


/* "pipe" definitions */

#define PIPE_ISOCHRONOUS	0
#define PIPE_INTERRUPT		1
#define PIPE_CONTROL		2
#define PIPE_BULK			3
#define PIPE_DEVEP_MASK 	0x0007ff00

#define USB_ISOCHRONOUS    0
#define USB_INTERRUPT	   1
#define USB_CONTROL 	   2
#define USB_BULK		   3

/* USB-status codes: */
#define USB_ST_ACTIVE			0x1 	/* TD is active */
#define USB_ST_STALLED			0x2 	/* TD is stalled */
#define USB_ST_BUF_ERR			0x4 	/* buffer error */
#define USB_ST_BABBLE_DET		0x8 	/* Babble detected */
#define USB_ST_NAK_REC			0x10	/* NAK Received*/
#define USB_ST_CRC_ERR			0x20	/* CRC/timeout Error */
#define USB_ST_BIT_ERR			0x40	/* Bitstuff error */
#define USB_ST_NOT_PROC 		0x80000000L /* Not yet processed */


/*************************************************************************
 * Hub defines
 */

/*
 * Hub request types
 */

#define USB_RT_HUB	(USB_TYPE_CLASS | USB_RECIP_DEVICE)
#define USB_RT_PORT (USB_TYPE_CLASS | USB_RECIP_OTHER)

/*
 * Hub Class feature numbers
 */
#define C_HUB_LOCAL_POWER	0
#define C_HUB_OVER_CURRENT	1

/*
 * Port feature numbers
 */
#define USB_PORT_FEAT_CONNECTION	 0
#define USB_PORT_FEAT_ENABLE		 1
#define USB_PORT_FEAT_SUSPEND		 2
#define USB_PORT_FEAT_OVER_CURRENT	 3
#define USB_PORT_FEAT_RESET 		 4
#define USB_PORT_FEAT_POWER 		 8
#define USB_PORT_FEAT_LOWSPEED		 9
#define USB_PORT_FEAT_C_CONNECTION	 16
#define USB_PORT_FEAT_C_ENABLE		 17
#define USB_PORT_FEAT_C_SUSPEND 	 18
#define USB_PORT_FEAT_C_OVER_CURRENT 19
#define USB_PORT_FEAT_C_RESET		 20

/* wPortStatus bits */
#define USB_PORT_STAT_CONNECTION	0x0001
#define USB_PORT_STAT_ENABLE		0x0002
#define USB_PORT_STAT_SUSPEND		0x0004
#define USB_PORT_STAT_OVERCURRENT	0x0008
#define USB_PORT_STAT_RESET 		0x0010
#define USB_PORT_STAT_POWER 		0x0100
#define USB_PORT_STAT_LOW_SPEED 	0x0200
#define USB_PORT_STAT_HIGH_SPEED	0x0400

/* wPortChange bits */
#define USB_PORT_STAT_C_CONNECTION	0x0001
#define USB_PORT_STAT_C_ENABLE		0x0002
#define USB_PORT_STAT_C_SUSPEND 	0x0004
#define USB_PORT_STAT_C_OVERCURRENT 0x0008
#define USB_PORT_STAT_C_RESET		0x0010

/* wHubCharacteristics (masks) */
#define HUB_CHAR_LPSM				0x0003
#define HUB_CHAR_COMPOUND			0x0004
#define HUB_CHAR_OCPM				0x0018

/*
 *Hub Status & Hub Change bit masks
 */
#define HUB_STATUS_LOCAL_POWER	0x0001
#define HUB_STATUS_OVERCURRENT	0x0002

#define HUB_CHANGE_LOCAL_POWER	0x0001
#define HUB_CHANGE_OVERCURRENT	0x0002

#define LITTLEENDIAN

#endif /*_USB_DEFS_H_ */