xref: /onnv-gate/usr/src/uts/common/sys/usb/usba/wusba_io.h (revision 9430:637732b28916)
1*9430SRaymond.Chen@Sun.COM /*
2*9430SRaymond.Chen@Sun.COM  * CDDL HEADER START
3*9430SRaymond.Chen@Sun.COM  *
4*9430SRaymond.Chen@Sun.COM  * The contents of this file are subject to the terms of the
5*9430SRaymond.Chen@Sun.COM  * Common Development and Distribution License (the "License").
6*9430SRaymond.Chen@Sun.COM  * You may not use this file except in compliance with the License.
7*9430SRaymond.Chen@Sun.COM  *
8*9430SRaymond.Chen@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*9430SRaymond.Chen@Sun.COM  * or http://www.opensolaris.org/os/licensing.
10*9430SRaymond.Chen@Sun.COM  * See the License for the specific language governing permissions
11*9430SRaymond.Chen@Sun.COM  * and limitations under the License.
12*9430SRaymond.Chen@Sun.COM  *
13*9430SRaymond.Chen@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
14*9430SRaymond.Chen@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*9430SRaymond.Chen@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
16*9430SRaymond.Chen@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
17*9430SRaymond.Chen@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
18*9430SRaymond.Chen@Sun.COM  *
19*9430SRaymond.Chen@Sun.COM  * CDDL HEADER END
20*9430SRaymond.Chen@Sun.COM  */
21*9430SRaymond.Chen@Sun.COM /*
22*9430SRaymond.Chen@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23*9430SRaymond.Chen@Sun.COM  * Use is subject to license terms.
24*9430SRaymond.Chen@Sun.COM  */
25*9430SRaymond.Chen@Sun.COM 
26*9430SRaymond.Chen@Sun.COM #ifndef	_SYS_USB_WUSBA_IO_H
27*9430SRaymond.Chen@Sun.COM #define	_SYS_USB_WUSBA_IO_H
28*9430SRaymond.Chen@Sun.COM 
29*9430SRaymond.Chen@Sun.COM #ifdef	__cplusplus
30*9430SRaymond.Chen@Sun.COM extern "C" {
31*9430SRaymond.Chen@Sun.COM #endif
32*9430SRaymond.Chen@Sun.COM 
33*9430SRaymond.Chen@Sun.COM /* ioctl commands between wusb host and the wusbadm tool */
34*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_IOC		('W' << 8)
35*9430SRaymond.Chen@Sun.COM 
36*9430SRaymond.Chen@Sun.COM /* get the state of a device corresponding to cdid */
37*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_GET_DSTATE	(WUSB_HC_IOC | 0x01)
38*9430SRaymond.Chen@Sun.COM 
39*9430SRaymond.Chen@Sun.COM #define	MAX_USB_NODENAME	256
40*9430SRaymond.Chen@Sun.COM /* for WUSB_HC_GET_DSTATE ioctl */
41*9430SRaymond.Chen@Sun.COM typedef struct wusb_hc_get_dstate {
42*9430SRaymond.Chen@Sun.COM 	uint8_t		cdid[16];		/* IN arg */
43*9430SRaymond.Chen@Sun.COM 	uint16_t	state;			/* OUT arg - device state */
44*9430SRaymond.Chen@Sun.COM 	char		path[MAXPATHLEN];	/* OUT arg - device apid */
45*9430SRaymond.Chen@Sun.COM 
46*9430SRaymond.Chen@Sun.COM 	/* OUT arg - driver name XXX: need to find MAX nodename len */
47*9430SRaymond.Chen@Sun.COM 	char		nodename[MAX_USB_NODENAME];
48*9430SRaymond.Chen@Sun.COM } wusb_hc_get_dstate_t;
49*9430SRaymond.Chen@Sun.COM 
50*9430SRaymond.Chen@Sun.COM /* device state, refer to WUSB 1.0 spec - Figure 7.1 */
51*9430SRaymond.Chen@Sun.COM enum wusb_device_state {
52*9430SRaymond.Chen@Sun.COM 	WUSB_STATE_UNCONNTED = 0,
53*9430SRaymond.Chen@Sun.COM 	WUSB_STATE_CONNTING,		/* sent connection notification */
54*9430SRaymond.Chen@Sun.COM 	WUSB_STATE_UNAUTHENTICATED,	/* got connect ACK from host */
55*9430SRaymond.Chen@Sun.COM 	WUSB_STATE_DEFAULT,		/* authenticated and usb addr = 0 */
56*9430SRaymond.Chen@Sun.COM 	WUSB_STATE_ADDRESSED,		/* non-zero usb addr is assigned */
57*9430SRaymond.Chen@Sun.COM 	WUSB_STATE_CONFIGURED,		/* configuration is set */
58*9430SRaymond.Chen@Sun.COM 	WUSB_STATE_SLEEPING,
59*9430SRaymond.Chen@Sun.COM 	WUSB_STATE_RECONNTING
60*9430SRaymond.Chen@Sun.COM };
61*9430SRaymond.Chen@Sun.COM 
62*9430SRaymond.Chen@Sun.COM /* get host 48-bit MAC addr */
63*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_GET_MAC_ADDR	(WUSB_HC_IOC | 0x02)
64*9430SRaymond.Chen@Sun.COM 
65*9430SRaymond.Chen@Sun.COM /* load CC to host and update chid when cc list is null */
66*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_ADD_CC		(WUSB_HC_IOC | 0x03)
67*9430SRaymond.Chen@Sun.COM 
68*9430SRaymond.Chen@Sun.COM /* remove CC from host */
69*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_REM_CC		(WUSB_HC_IOC | 0x04)
70*9430SRaymond.Chen@Sun.COM 
71*9430SRaymond.Chen@Sun.COM /* CC structure for WUSB_HC_ADD_CC and WUSB_HC_REM_CC ioctl */
72*9430SRaymond.Chen@Sun.COM typedef struct wusb_cc {
73*9430SRaymond.Chen@Sun.COM 	uint8_t		CHID[16];
74*9430SRaymond.Chen@Sun.COM 	uint8_t		CDID[16];
75*9430SRaymond.Chen@Sun.COM 	uint8_t		CK[16];
76*9430SRaymond.Chen@Sun.COM } wusb_cc_t;
77*9430SRaymond.Chen@Sun.COM 
78*9430SRaymond.Chen@Sun.COM /* set host beaconing channel number */
79*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_SET_CHANNEL	(WUSB_HC_IOC | 0x05)
80*9430SRaymond.Chen@Sun.COM 
81*9430SRaymond.Chen@Sun.COM /* start host to accept device connections and transfers */
82*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_START		(WUSB_HC_IOC | 0x06)
83*9430SRaymond.Chen@Sun.COM 
84*9430SRaymond.Chen@Sun.COM /*
85*9430SRaymond.Chen@Sun.COM  * start flag bitmap for WUSB_HC_START ioctl:
86*9430SRaymond.Chen@Sun.COM  * INITIAL_START and CHANNEL_START are exclusive
87*9430SRaymond.Chen@Sun.COM  */
88*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_INITIAL_START		0x00000001 /* fully start host */
89*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_CHANNEL_START		0x00000002 /* partially start host */
90*9430SRaymond.Chen@Sun.COM 
91*9430SRaymond.Chen@Sun.COM /* stop host functioning */
92*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_STOP		(WUSB_HC_IOC | 0x07)
93*9430SRaymond.Chen@Sun.COM 
94*9430SRaymond.Chen@Sun.COM /*
95*9430SRaymond.Chen@Sun.COM  * stop flag bitmap for WUSB_HC_STOP ioctl:
96*9430SRaymond.Chen@Sun.COM  * FINAL_STOP and CHANNEL_STOP are exclusive, and there must be one
97*9430SRaymond.Chen@Sun.COM  * REM_ALL_CC is optional
98*9430SRaymond.Chen@Sun.COM  */
99*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_FINAL_STOP		0x00000001 /* fully stop host */
100*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_CHANNEL_STOP		0x00000002 /* partially stop host */
101*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_REM_ALL_CC		0x00000004 /* remove all cc'es */
102*9430SRaymond.Chen@Sun.COM 
103*9430SRaymond.Chen@Sun.COM /* start host to accept new device connections */
104*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_START_NA	(WUSB_HC_IOC | 0x08)
105*9430SRaymond.Chen@Sun.COM 
106*9430SRaymond.Chen@Sun.COM /* stop host from accepting new device connections */
107*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_STOP_NA		(WUSB_HC_IOC | 0x09)
108*9430SRaymond.Chen@Sun.COM 
109*9430SRaymond.Chen@Sun.COM /* get host state */
110*9430SRaymond.Chen@Sun.COM #define	WUSB_HC_GET_HSTATE	(WUSB_HC_IOC | 0x0a)
111*9430SRaymond.Chen@Sun.COM 
112*9430SRaymond.Chen@Sun.COM /* host state for WUSB_HC_GET_HSTATE ioctl */
113*9430SRaymond.Chen@Sun.COM enum wusb_host_state {
114*9430SRaymond.Chen@Sun.COM 	WUSB_HC_DISCONNTED = 0,
115*9430SRaymond.Chen@Sun.COM 	WUSB_HC_STOPPED,	/* default or WUSB_HC_FINAL_STOP is called */
116*9430SRaymond.Chen@Sun.COM 	WUSB_HC_STARTED,	/* WUSB_HC_INITIAL_START is called */
117*9430SRaymond.Chen@Sun.COM 	WUSB_HC_CH_STOPPED	/* WUSB_HC_CHANNEL_STOP is called */
118*9430SRaymond.Chen@Sun.COM };
119*9430SRaymond.Chen@Sun.COM 
120*9430SRaymond.Chen@Sun.COM #ifdef __cplusplus
121*9430SRaymond.Chen@Sun.COM }
122*9430SRaymond.Chen@Sun.COM #endif
123*9430SRaymond.Chen@Sun.COM 
124*9430SRaymond.Chen@Sun.COM #endif	/* _SYS_USB_WUSBA_IO_H */
125