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 2009 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 
26 #ifndef	_SYS_USB_WUSBA_IO_H
27 #define	_SYS_USB_WUSBA_IO_H
28 
29 #ifdef	__cplusplus
30 extern "C" {
31 #endif
32 
33 /* ioctl commands between wusb host and the wusbadm tool */
34 #define	WUSB_HC_IOC		('W' << 8)
35 
36 /* get the state of a device corresponding to cdid */
37 #define	WUSB_HC_GET_DSTATE	(WUSB_HC_IOC | 0x01)
38 
39 #define	MAX_USB_NODENAME	256
40 /* for WUSB_HC_GET_DSTATE ioctl */
41 typedef struct wusb_hc_get_dstate {
42 	uint8_t		cdid[16];		/* IN arg */
43 	uint16_t	state;			/* OUT arg - device state */
44 	char		path[MAXPATHLEN];	/* OUT arg - device apid */
45 
46 	/* OUT arg - driver name XXX: need to find MAX nodename len */
47 	char		nodename[MAX_USB_NODENAME];
48 } wusb_hc_get_dstate_t;
49 
50 /* device state, refer to WUSB 1.0 spec - Figure 7.1 */
51 enum wusb_device_state {
52 	WUSB_STATE_UNCONNTED = 0,
53 	WUSB_STATE_CONNTING,		/* sent connection notification */
54 	WUSB_STATE_UNAUTHENTICATED,	/* got connect ACK from host */
55 	WUSB_STATE_DEFAULT,		/* authenticated and usb addr = 0 */
56 	WUSB_STATE_ADDRESSED,		/* non-zero usb addr is assigned */
57 	WUSB_STATE_CONFIGURED,		/* configuration is set */
58 	WUSB_STATE_SLEEPING,
59 	WUSB_STATE_RECONNTING
60 };
61 
62 /* get host 48-bit MAC addr */
63 #define	WUSB_HC_GET_MAC_ADDR	(WUSB_HC_IOC | 0x02)
64 
65 /* load CC to host and update chid when cc list is null */
66 #define	WUSB_HC_ADD_CC		(WUSB_HC_IOC | 0x03)
67 
68 /* remove CC from host */
69 #define	WUSB_HC_REM_CC		(WUSB_HC_IOC | 0x04)
70 
71 /* CC structure for WUSB_HC_ADD_CC and WUSB_HC_REM_CC ioctl */
72 typedef struct wusb_cc {
73 	uint8_t		CHID[16];
74 	uint8_t		CDID[16];
75 	uint8_t		CK[16];
76 } wusb_cc_t;
77 
78 /* set host beaconing channel number */
79 #define	WUSB_HC_SET_CHANNEL	(WUSB_HC_IOC | 0x05)
80 
81 /* start host to accept device connections and transfers */
82 #define	WUSB_HC_START		(WUSB_HC_IOC | 0x06)
83 
84 /*
85  * start flag bitmap for WUSB_HC_START ioctl:
86  * INITIAL_START and CHANNEL_START are exclusive
87  */
88 #define	WUSB_HC_INITIAL_START		0x00000001 /* fully start host */
89 #define	WUSB_HC_CHANNEL_START		0x00000002 /* partially start host */
90 
91 /* stop host functioning */
92 #define	WUSB_HC_STOP		(WUSB_HC_IOC | 0x07)
93 
94 /*
95  * stop flag bitmap for WUSB_HC_STOP ioctl:
96  * FINAL_STOP and CHANNEL_STOP are exclusive, and there must be one
97  * REM_ALL_CC is optional
98  */
99 #define	WUSB_HC_FINAL_STOP		0x00000001 /* fully stop host */
100 #define	WUSB_HC_CHANNEL_STOP		0x00000002 /* partially stop host */
101 #define	WUSB_HC_REM_ALL_CC		0x00000004 /* remove all cc'es */
102 
103 /* start host to accept new device connections */
104 #define	WUSB_HC_START_NA	(WUSB_HC_IOC | 0x08)
105 
106 /* stop host from accepting new device connections */
107 #define	WUSB_HC_STOP_NA		(WUSB_HC_IOC | 0x09)
108 
109 /* get host state */
110 #define	WUSB_HC_GET_HSTATE	(WUSB_HC_IOC | 0x0a)
111 
112 /* host state for WUSB_HC_GET_HSTATE ioctl */
113 enum wusb_host_state {
114 	WUSB_HC_DISCONNTED = 0,
115 	WUSB_HC_STOPPED,	/* default or WUSB_HC_FINAL_STOP is called */
116 	WUSB_HC_STARTED,	/* WUSB_HC_INITIAL_START is called */
117 	WUSB_HC_CH_STOPPED	/* WUSB_HC_CHANNEL_STOP is called */
118 };
119 
120 #ifdef __cplusplus
121 }
122 #endif
123 
124 #endif	/* _SYS_USB_WUSBA_IO_H */
125