usb_cdc.h revision 3227:9602d8b74112
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26#ifndef _SYS_USB_USB_CDC_H
27#define	_SYS_USB_USB_CDC_H
28
29#pragma ident	"%Z%%M%	%I%	%E% SMI"
30
31#include <sys/types.h>
32#include <sys/dditypes.h>
33#include <sys/usb/clients/usbser/usbser_dsdi.h>
34
35#ifdef	__cplusplus
36extern "C" {
37#endif
38
39/*
40 * USB Communications Device Class
41 */
42
43/*
44 * Class-specific descriptors
45 */
46#define	USB_CDC_CS_INTERFACE			0x24
47#define	USB_CDC_CS_ENDPOINT			0x25
48
49#define	USB_CDC_DESCR_TYPE_HEADER		0x00
50#define	USB_CDC_DESCR_TYPE_CALL_MANAGEMENT	0x01
51#define	USB_CDC_DESCR_TYPE_ACM			0x02
52#define	USB_CDC_DESCR_TYPE_UNION		0x06
53#define	USB_CDC_DESCR_TYPE_COUNTRY		0x07
54#define	USB_CDC_DESCR_TYPE_NETWORK_TERMINAL	0x0a
55#define	USB_CDC_DESCR_TYPE_ETHERNET		0x0f
56
57/* Header Functional Descriptor */
58typedef struct usb_cdc_header_descr {
59	uint8_t		bFunctionalLength;
60	uint8_t		bDescriptorType;
61	uint8_t		bDescriptorSubtype;
62	uint16_t	bcdCDC;
63} usb_cdc_header_descr_t;
64
65/* Call Management Descriptor */
66typedef struct usb_cdc_call_mgmt_descr {
67	uint8_t		bFunctionalLength;
68	uint8_t		bDescriptorType;
69	uint8_t		bDescriptorSubtype;
70	uint8_t		bmCapabilities;
71	uint8_t		bDataInterface;
72} usb_cdc_call_mgmt_descr_t;
73
74#define	USB_CDC_CALL_MGMT_CAP_CALL_MGMT		0x01
75#define	USB_CDC_CALL_MGMT_CAP_DATA_INTERFACE	0x02
76
77/* Abstract Control Management Descriptor */
78typedef struct usb_cdc_acm_descr {
79	uint8_t		bFunctionalLength;
80	uint8_t		bDescriptorType;
81	uint8_t		bDescriptorSubtype;
82	uint8_t		bmCapabilities;
83} usb_cdc_acm_descr_t;
84
85#define	USB_CDC_ACM_CAP_COMM_FEATURE		0x01
86#define	USB_CDC_ACM_CAP_SERIAL_LINE		0x02
87#define	USB_CDC_ACM_CAP_SEND_BREAK		0x04
88#define	USB_CDC_ACM_CAP_NETWORK_CONNECTION	0x08
89
90/* Union Functional Descriptor */
91typedef struct usb_cdc_union_descr {
92	uint8_t		bFunctionalLength;
93	uint8_t		bDescriptorType;
94	uint8_t		bDescriptorSubtype;
95	uint8_t		bMasterInterface0;
96	uint8_t		bSlaveInterface0;
97	/* more slave interafce may follow */
98} usb_cdc_union_descr_t;
99
100/*
101 * Class-specific requests
102 */
103#define	USB_CDC_REQ_SEND_ENCAPSULATED_COMMAND	0x00
104#define	USB_CDC_REQ_GET_ENCAPSULATED_RESPONSE	0x01
105#define	USB_CDC_REQ_SET_LINE_CODING		0x20
106#define	USB_CDC_REQ_GET_LINE_CODING		0x21
107#define	USB_CDC_REQ_SET_CONTROL_LINE_STATE	0x22
108#define	USB_CDC_REQ_SEND_BREAK			0x23
109
110/* Line Coding */
111typedef struct usb_cdc_line_coding {
112	uint32_t	dwDTERate;
113	uint8_t		bCharFormat;
114	uint8_t		bParityType;
115	uint8_t		bDataBits;
116} usb_cdc_line_coding_t;
117
118#define	USB_CDC_LINE_CODING_LEN			7
119
120#define	USB_CDC_STOP_BITS_1			0
121#define	USB_CDC_STOP_BITS_1_5			1
122#define	USB_CDC_STOP_BITS_2			2
123
124#define	USB_CDC_PARITY_NO			0
125#define	USB_CDC_PARITY_ODD			1
126#define	USB_CDC_PARITY_EVEN			2
127#define	USB_CDC_PARITY_MARK			3
128#define	USB_CDC_PARITY_SPACE			4
129
130#define	USB_CDC_ACM_CONTROL_DTR			0x01
131#define	USB_CDC_ACM_CONTROL_RTS			0x02
132
133#define	USB_CDC_NOTIFICATION_REQUEST_TYPE	0xa1
134/*
135 * Class-specific notifications
136 */
137#define	USB_CDC_NOTIFICATION_NETWORK_CONNECTION	0x00
138#define	USB_CDC_NOTIFICATION_RESPONSE_AVAILABLE	0x01
139#define	USB_CDC_NOTIFICATION_SERIAL_STATE	0x20
140#define	USB_CDC_NOTIFICATION_SPEED_CHANGE	0x2a
141
142typedef struct usb_cdc_notification {
143	uint8_t		bmRequestType;
144	uint8_t		bNotificationType;
145	uint16_t	wValue;
146	uint16_t	wIndex;
147	uint16_t	wLength;
148} usb_cdc_notification_t;
149
150/* Serial State */
151#define	USB_CDC_ACM_CONTROL_DCD			0x01
152#define	USB_CDC_ACM_CONTROL_DSR			0x02
153#define	USB_CDC_ACM_CONTROL_BREAK		0x04
154#define	USB_CDC_ACM_CONTROL_RNG			0x08
155#define	USB_CDC_ACM_CONTROL_FRAMING		0x10
156#define	USB_CDC_ACM_CONTROL_PARITY		0x20
157#define	USB_CDC_ACM_CONTROL_OVERRUN		0x40
158
159
160#ifdef	__cplusplus
161}
162#endif
163
164#endif	/* _SYS_USB_USB_CDC_H */
165