usb_cdc.h revision 7492:2387323b838f
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 2008 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
30#include <sys/types.h>
31#include <sys/dditypes.h>
32#include <sys/usb/clients/usbser/usbser_dsdi.h>
33
34#ifdef	__cplusplus
35extern "C" {
36#endif
37
38/*
39 * USB Communications Device Class
40 */
41
42/*
43 * Class-specific descriptors
44 */
45#define	USB_CDC_CS_INTERFACE			0x24
46#define	USB_CDC_CS_ENDPOINT			0x25
47
48#define	USB_CDC_DESCR_TYPE_HEADER		0x00
49#define	USB_CDC_DESCR_TYPE_CALL_MANAGEMENT	0x01
50#define	USB_CDC_DESCR_TYPE_ACM			0x02
51#define	USB_CDC_DESCR_TYPE_UNION		0x06
52#define	USB_CDC_DESCR_TYPE_COUNTRY		0x07
53#define	USB_CDC_DESCR_TYPE_NETWORK_TERMINAL	0x0a
54#define	USB_CDC_DESCR_TYPE_ETHERNET		0x0f
55
56/* Header Functional Descriptor */
57typedef struct usb_cdc_header_descr {
58	uint8_t		bFunctionalLength;
59	uint8_t		bDescriptorType;
60	uint8_t		bDescriptorSubtype;
61	uint16_t	bcdCDC;
62} usb_cdc_header_descr_t;
63
64/* Call Management Descriptor */
65typedef struct usb_cdc_call_mgmt_descr {
66	uint8_t		bFunctionalLength;
67	uint8_t		bDescriptorType;
68	uint8_t		bDescriptorSubtype;
69	uint8_t		bmCapabilities;
70	uint8_t		bDataInterface;
71} usb_cdc_call_mgmt_descr_t;
72
73#define	USB_CDC_CALL_MGMT_CAP_CALL_MGMT		0x01
74#define	USB_CDC_CALL_MGMT_CAP_DATA_INTERFACE	0x02
75
76/* Abstract Control Management Descriptor */
77typedef struct usb_cdc_acm_descr {
78	uint8_t		bFunctionalLength;
79	uint8_t		bDescriptorType;
80	uint8_t		bDescriptorSubtype;
81	uint8_t		bmCapabilities;
82} usb_cdc_acm_descr_t;
83
84#define	USB_CDC_ACM_CAP_COMM_FEATURE		0x01
85#define	USB_CDC_ACM_CAP_SERIAL_LINE		0x02
86#define	USB_CDC_ACM_CAP_SEND_BREAK		0x04
87#define	USB_CDC_ACM_CAP_NETWORK_CONNECTION	0x08
88
89/* Union Functional Descriptor */
90typedef struct usb_cdc_union_descr {
91	uint8_t		bFunctionalLength;
92	uint8_t		bDescriptorType;
93	uint8_t		bDescriptorSubtype;
94	uint8_t		bMasterInterface0;
95	uint8_t		bSlaveInterface0;
96	/* more slave interafce may follow */
97} usb_cdc_union_descr_t;
98
99/*
100 * Class-specific requests
101 */
102#define	USB_CDC_REQ_SEND_ENCAPSULATED_COMMAND	0x00
103#define	USB_CDC_REQ_GET_ENCAPSULATED_RESPONSE	0x01
104#define	USB_CDC_REQ_SET_LINE_CODING		0x20
105#define	USB_CDC_REQ_GET_LINE_CODING		0x21
106#define	USB_CDC_REQ_SET_CONTROL_LINE_STATE	0x22
107#define	USB_CDC_REQ_SEND_BREAK			0x23
108
109/* Line Coding */
110typedef struct usb_cdc_line_coding {
111	uint32_t	dwDTERate;
112	uint8_t		bCharFormat;
113	uint8_t		bParityType;
114	uint8_t		bDataBits;
115} usb_cdc_line_coding_t;
116
117#define	USB_CDC_LINE_CODING_LEN			7
118
119#define	USB_CDC_STOP_BITS_1			0
120#define	USB_CDC_STOP_BITS_1_5			1
121#define	USB_CDC_STOP_BITS_2			2
122
123#define	USB_CDC_PARITY_NO			0
124#define	USB_CDC_PARITY_ODD			1
125#define	USB_CDC_PARITY_EVEN			2
126#define	USB_CDC_PARITY_MARK			3
127#define	USB_CDC_PARITY_SPACE			4
128
129#define	USB_CDC_ACM_CONTROL_DTR			0x01
130#define	USB_CDC_ACM_CONTROL_RTS			0x02
131
132#define	USB_CDC_NOTIFICATION_REQUEST_TYPE	0xa1
133/*
134 * Class-specific notifications
135 */
136#define	USB_CDC_NOTIFICATION_NETWORK_CONNECTION	0x00
137#define	USB_CDC_NOTIFICATION_RESPONSE_AVAILABLE	0x01
138#define	USB_CDC_NOTIFICATION_SERIAL_STATE	0x20
139#define	USB_CDC_NOTIFICATION_SPEED_CHANGE	0x2a
140
141typedef struct usb_cdc_notification {
142	uint8_t		bmRequestType;
143	uint8_t		bNotificationType;
144	uint16_t	wValue;
145	uint16_t	wIndex;
146	uint16_t	wLength;
147} usb_cdc_notification_t;
148
149/* Serial State */
150#define	USB_CDC_ACM_CONTROL_DCD			0x01
151#define	USB_CDC_ACM_CONTROL_DSR			0x02
152#define	USB_CDC_ACM_CONTROL_BREAK		0x04
153#define	USB_CDC_ACM_CONTROL_RNG			0x08
154#define	USB_CDC_ACM_CONTROL_FRAMING		0x10
155#define	USB_CDC_ACM_CONTROL_PARITY		0x20
156#define	USB_CDC_ACM_CONTROL_OVERRUN		0x40
157
158
159#ifdef	__cplusplus
160}
161#endif
162
163#endif	/* _SYS_USB_USB_CDC_H */
164