• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3/arm-brcm-linux-uclibcgnueabi/sysroot/usr/include/linux/usb/
1/*
2 * USB Communications Device Class (CDC) definitions
3 *
4 * CDC says how to talk to lots of different types of network adapters,
5 * notably ethernet adapters and various modems.  It's used mostly with
6 * firmware based USB peripherals.
7 */
8
9#ifndef __LINUX_USB_CDC_H
10#define __LINUX_USB_CDC_H
11
12#include <linux/types.h>
13
14#define USB_CDC_SUBCLASS_ACM			0x02
15#define USB_CDC_SUBCLASS_ETHERNET		0x06
16#define USB_CDC_SUBCLASS_WHCM			0x08
17#define USB_CDC_SUBCLASS_DMM			0x09
18#define USB_CDC_SUBCLASS_MDLM			0x0a
19#define USB_CDC_SUBCLASS_OBEX			0x0b
20#define USB_CDC_SUBCLASS_EEM			0x0c
21#define USB_CDC_SUBCLASS_NCM			0x0d
22
23#define USB_CDC_PROTO_NONE			0
24
25#define USB_CDC_ACM_PROTO_AT_V25TER		1
26#define USB_CDC_ACM_PROTO_AT_PCCA101		2
27#define USB_CDC_ACM_PROTO_AT_PCCA101_WAKE	3
28#define USB_CDC_ACM_PROTO_AT_GSM		4
29#define USB_CDC_ACM_PROTO_AT_3G			5
30#define USB_CDC_ACM_PROTO_AT_CDMA		6
31#define USB_CDC_ACM_PROTO_VENDOR		0xff
32
33#define USB_CDC_PROTO_EEM			7
34
35/*-------------------------------------------------------------------------*/
36
37/*
38 * Class-Specific descriptors ... there are a couple dozen of them
39 */
40
41#define USB_CDC_HEADER_TYPE		0x00	/* header_desc */
42#define USB_CDC_CALL_MANAGEMENT_TYPE	0x01	/* call_mgmt_descriptor */
43#define USB_CDC_ACM_TYPE		0x02	/* acm_descriptor */
44#define USB_CDC_UNION_TYPE		0x06	/* union_desc */
45#define USB_CDC_COUNTRY_TYPE		0x07
46#define USB_CDC_NETWORK_TERMINAL_TYPE	0x0a	/* network_terminal_desc */
47#define USB_CDC_ETHERNET_TYPE		0x0f	/* ether_desc */
48#define USB_CDC_WHCM_TYPE		0x11
49#define USB_CDC_MDLM_TYPE		0x12	/* mdlm_desc */
50#define USB_CDC_MDLM_DETAIL_TYPE	0x13	/* mdlm_detail_desc */
51#define USB_CDC_DMM_TYPE		0x14
52#define USB_CDC_OBEX_TYPE		0x15
53#define USB_CDC_NCM_TYPE		0x1a
54
55/* "Header Functional Descriptor" from CDC spec  5.2.3.1 */
56struct usb_cdc_header_desc {
57	__u8	bLength;
58	__u8	bDescriptorType;
59	__u8	bDescriptorSubType;
60
61	__le16	bcdCDC;
62} __attribute__ ((packed));
63
64/* "Call Management Descriptor" from CDC spec  5.2.3.2 */
65struct usb_cdc_call_mgmt_descriptor {
66	__u8	bLength;
67	__u8	bDescriptorType;
68	__u8	bDescriptorSubType;
69
70	__u8	bmCapabilities;
71#define USB_CDC_CALL_MGMT_CAP_CALL_MGMT		0x01
72#define USB_CDC_CALL_MGMT_CAP_DATA_INTF		0x02
73
74	__u8	bDataInterface;
75} __attribute__ ((packed));
76
77/* "Abstract Control Management Descriptor" from CDC spec  5.2.3.3 */
78struct usb_cdc_acm_descriptor {
79	__u8	bLength;
80	__u8	bDescriptorType;
81	__u8	bDescriptorSubType;
82
83	__u8	bmCapabilities;
84} __attribute__ ((packed));
85
86/* capabilities from 5.2.3.3 */
87
88#define USB_CDC_COMM_FEATURE	0x01
89#define USB_CDC_CAP_LINE	0x02
90#define USB_CDC_CAP_BRK	0x04
91#define USB_CDC_CAP_NOTIFY	0x08
92
93/* "Union Functional Descriptor" from CDC spec 5.2.3.8 */
94struct usb_cdc_union_desc {
95	__u8	bLength;
96	__u8	bDescriptorType;
97	__u8	bDescriptorSubType;
98
99	__u8	bMasterInterface0;
100	__u8	bSlaveInterface0;
101	/* ... and there could be other slave interfaces */
102} __attribute__ ((packed));
103
104/* "Country Selection Functional Descriptor" from CDC spec 5.2.3.9 */
105struct usb_cdc_country_functional_desc {
106	__u8	bLength;
107	__u8	bDescriptorType;
108	__u8	bDescriptorSubType;
109
110	__u8	iCountryCodeRelDate;
111	__le16	wCountyCode0;
112	/* ... and there can be a lot of country codes */
113} __attribute__ ((packed));
114
115/* "Network Channel Terminal Functional Descriptor" from CDC spec 5.2.3.11 */
116struct usb_cdc_network_terminal_desc {
117	__u8	bLength;
118	__u8	bDescriptorType;
119	__u8	bDescriptorSubType;
120
121	__u8	bEntityId;
122	__u8	iName;
123	__u8	bChannelIndex;
124	__u8	bPhysicalInterface;
125} __attribute__ ((packed));
126
127/* "Ethernet Networking Functional Descriptor" from CDC spec 5.2.3.16 */
128struct usb_cdc_ether_desc {
129	__u8	bLength;
130	__u8	bDescriptorType;
131	__u8	bDescriptorSubType;
132
133	__u8	iMACAddress;
134	__le32	bmEthernetStatistics;
135	__le16	wMaxSegmentSize;
136	__le16	wNumberMCFilters;
137	__u8	bNumberPowerFilters;
138} __attribute__ ((packed));
139
140/* "Telephone Control Model Functional Descriptor" from CDC WMC spec 6.3..3 */
141struct usb_cdc_dmm_desc {
142	__u8	bFunctionLength;
143	__u8	bDescriptorType;
144	__u8	bDescriptorSubtype;
145	__u16	bcdVersion;
146	__le16	wMaxCommand;
147} __attribute__ ((packed));
148
149/* "MDLM Functional Descriptor" from CDC WMC spec 6.7.2.3 */
150struct usb_cdc_mdlm_desc {
151	__u8	bLength;
152	__u8	bDescriptorType;
153	__u8	bDescriptorSubType;
154
155	__le16	bcdVersion;
156	__u8	bGUID[16];
157} __attribute__ ((packed));
158
159/* "MDLM Detail Functional Descriptor" from CDC WMC spec 6.7.2.4 */
160struct usb_cdc_mdlm_detail_desc {
161	__u8	bLength;
162	__u8	bDescriptorType;
163	__u8	bDescriptorSubType;
164
165	/* type is associated with mdlm_desc.bGUID */
166	__u8	bGuidDescriptorType;
167	__u8	bDetailData[0];
168} __attribute__ ((packed));
169
170/* "OBEX Control Model Functional Descriptor" */
171struct usb_cdc_obex_desc {
172	__u8	bLength;
173	__u8	bDescriptorType;
174	__u8	bDescriptorSubType;
175
176	__le16	bcdVersion;
177} __attribute__ ((packed));
178
179/* "NCM Control Model Functional Descriptor" */
180struct usb_cdc_ncm_desc {
181	__u8	bLength;
182	__u8	bDescriptorType;
183	__u8	bDescriptorSubType;
184
185	__le16	bcdNcmVersion;
186	__u8	bmNetworkCapabilities;
187} __attribute__ ((packed));
188/*-------------------------------------------------------------------------*/
189
190/*
191 * Class-Specific Control Requests (6.2)
192 *
193 * section 3.6.2.1 table 4 has the ACM profile, for modems.
194 * section 3.8.2 table 10 has the ethernet profile.
195 *
196 * Microsoft's RNDIS stack for Ethernet is a vendor-specific CDC ACM variant,
197 * heavily dependent on the encapsulated (proprietary) command mechanism.
198 */
199
200#define USB_CDC_SEND_ENCAPSULATED_COMMAND	0x00
201#define USB_CDC_GET_ENCAPSULATED_RESPONSE	0x01
202#define USB_CDC_REQ_SET_LINE_CODING		0x20
203#define USB_CDC_REQ_GET_LINE_CODING		0x21
204#define USB_CDC_REQ_SET_CONTROL_LINE_STATE	0x22
205#define USB_CDC_REQ_SEND_BREAK			0x23
206#define USB_CDC_SET_ETHERNET_MULTICAST_FILTERS	0x40
207#define USB_CDC_SET_ETHERNET_PM_PATTERN_FILTER	0x41
208#define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER	0x42
209#define USB_CDC_SET_ETHERNET_PACKET_FILTER	0x43
210#define USB_CDC_GET_ETHERNET_STATISTIC		0x44
211#define USB_CDC_GET_NTB_PARAMETERS		0x80
212#define USB_CDC_GET_NET_ADDRESS			0x81
213#define USB_CDC_SET_NET_ADDRESS			0x82
214#define USB_CDC_GET_NTB_FORMAT			0x83
215#define USB_CDC_SET_NTB_FORMAT			0x84
216#define USB_CDC_GET_NTB_INPUT_SIZE		0x85
217#define USB_CDC_SET_NTB_INPUT_SIZE		0x86
218#define USB_CDC_GET_MAX_DATAGRAM_SIZE		0x87
219#define USB_CDC_SET_MAX_DATAGRAM_SIZE		0x88
220#define USB_CDC_GET_CRC_MODE			0x89
221#define USB_CDC_SET_CRC_MODE			0x8a
222
223/* Line Coding Structure from CDC spec 6.2.13 */
224struct usb_cdc_line_coding {
225	__le32	dwDTERate;
226	__u8	bCharFormat;
227#define USB_CDC_1_STOP_BITS			0
228#define USB_CDC_1_5_STOP_BITS			1
229#define USB_CDC_2_STOP_BITS			2
230
231	__u8	bParityType;
232#define USB_CDC_NO_PARITY			0
233#define USB_CDC_ODD_PARITY			1
234#define USB_CDC_EVEN_PARITY			2
235#define USB_CDC_MARK_PARITY			3
236#define USB_CDC_SPACE_PARITY			4
237
238	__u8	bDataBits;
239} __attribute__ ((packed));
240
241/* table 62; bits in multicast filter */
242#define	USB_CDC_PACKET_TYPE_PROMISCUOUS		(1 << 0)
243#define	USB_CDC_PACKET_TYPE_ALL_MULTICAST	(1 << 1) /* no filter */
244#define	USB_CDC_PACKET_TYPE_DIRECTED		(1 << 2)
245#define	USB_CDC_PACKET_TYPE_BROADCAST		(1 << 3)
246#define	USB_CDC_PACKET_TYPE_MULTICAST		(1 << 4) /* filtered */
247
248
249/*-------------------------------------------------------------------------*/
250
251/*
252 * Class-Specific Notifications (6.3) sent by interrupt transfers
253 *
254 * section 3.8.2 table 11 of the CDC spec lists Ethernet notifications
255 * section 3.6.2.1 table 5 specifies ACM notifications, accepted by RNDIS
256 * RNDIS also defines its own bit-incompatible notifications
257 */
258
259#define USB_CDC_NOTIFY_NETWORK_CONNECTION	0x00
260#define USB_CDC_NOTIFY_RESPONSE_AVAILABLE	0x01
261#define USB_CDC_NOTIFY_SERIAL_STATE		0x20
262#define USB_CDC_NOTIFY_SPEED_CHANGE		0x2a
263
264struct usb_cdc_notification {
265	__u8	bmRequestType;
266	__u8	bNotificationType;
267	__le16	wValue;
268	__le16	wIndex;
269	__le16	wLength;
270} __attribute__ ((packed));
271
272/*-------------------------------------------------------------------------*/
273
274/*
275 * Class Specific structures and constants
276 *
277 * CDC NCM parameter structure, CDC NCM subclass 6.2.1
278 *
279 */
280
281struct usb_cdc_ncm_ntb_parameter {
282	__le16	wLength;
283	__le16	bmNtbFormatSupported;
284	__le32	dwNtbInMaxSize;
285	__le16	wNdpInDivisor;
286	__le16	wNdpInPayloadRemainder;
287	__le16	wNdpInAlignment;
288	__le16	wPadding1;
289	__le32	dwNtbOutMaxSize;
290	__le16	wNdpOutDivisor;
291	__le16	wNdpOutPayloadRemainder;
292	__le16	wNdpOutAlignment;
293	__le16	wPadding2;
294} __attribute__ ((packed));
295
296/*
297 * CDC NCM transfer headers, CDC NCM subclass 3.2
298 */
299
300#define NCM_NTH16_SIGN		0x484D434E /* NCMH */
301#define NCM_NTH32_SIGN		0x686D636E /* ncmh */
302
303struct usb_cdc_ncm_nth16 {
304	__le32	dwSignature;
305	__le16	wHeaderLength;
306	__le16	wSequence;
307	__le16	wBlockLength;
308	__le16	wFpIndex;
309} __attribute__ ((packed));
310
311struct usb_cdc_ncm_nth32 {
312	__le32	dwSignature;
313	__le16	wHeaderLength;
314	__le16	wSequence;
315	__le32	dwBlockLength;
316	__le32	dwFpIndex;
317} __attribute__ ((packed));
318
319/*
320 * CDC NCM datagram pointers, CDC NCM subclass 3.3
321 */
322
323#define NCM_NDP16_CRC_SIGN	0x314D434E /* NCM1 */
324#define NCM_NDP16_NOCRC_SIGN	0x304D434E /* NCM0 */
325#define NCM_NDP32_CRC_SIGN	0x316D636E /* ncm1 */
326#define NCM_NDP32_NOCRC_SIGN	0x306D636E /* ncm0 */
327
328struct usb_cdc_ncm_ndp16 {
329	__le32	dwSignature;
330	__le16	wLength;
331	__le16	wNextFpIndex;
332	__u8	data[0];
333} __attribute__ ((packed));
334
335struct usb_cdc_ncm_ndp32 {
336	__le32	dwSignature;
337	__le16	wLength;
338	__le16	wReserved6;
339	__le32	dwNextFpIndex;
340	__le32	dwReserved12;
341	__u8	data[0];
342} __attribute__ ((packed));
343
344#endif /* __LINUX_USB_CDC_H */
345