xref: /illumos-gate/usr/src/uts/common/sys/usb/usba/wusba.h (revision ff0e937b)
1*ff0e937bSRaymond Chen /*
2*ff0e937bSRaymond Chen  * CDDL HEADER START
3*ff0e937bSRaymond Chen  *
4*ff0e937bSRaymond Chen  * The contents of this file are subject to the terms of the
5*ff0e937bSRaymond Chen  * Common Development and Distribution License (the "License").
6*ff0e937bSRaymond Chen  * You may not use this file except in compliance with the License.
7*ff0e937bSRaymond Chen  *
8*ff0e937bSRaymond Chen  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*ff0e937bSRaymond Chen  * or http://www.opensolaris.org/os/licensing.
10*ff0e937bSRaymond Chen  * See the License for the specific language governing permissions
11*ff0e937bSRaymond Chen  * and limitations under the License.
12*ff0e937bSRaymond Chen  *
13*ff0e937bSRaymond Chen  * When distributing Covered Code, include this CDDL HEADER in each
14*ff0e937bSRaymond Chen  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*ff0e937bSRaymond Chen  * If applicable, add the following below this CDDL HEADER, with the
16*ff0e937bSRaymond Chen  * fields enclosed by brackets "[]" replaced with your own identifying
17*ff0e937bSRaymond Chen  * information: Portions Copyright [yyyy] [name of copyright owner]
18*ff0e937bSRaymond Chen  *
19*ff0e937bSRaymond Chen  * CDDL HEADER END
20*ff0e937bSRaymond Chen  */
21*ff0e937bSRaymond Chen /*
22*ff0e937bSRaymond Chen  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23*ff0e937bSRaymond Chen  * Use is subject to license terms.
24*ff0e937bSRaymond Chen  */
25*ff0e937bSRaymond Chen 
26*ff0e937bSRaymond Chen #ifndef	_SYS_USB_WUSBA_H
27*ff0e937bSRaymond Chen #define	_SYS_USB_WUSBA_H
28*ff0e937bSRaymond Chen 
29*ff0e937bSRaymond Chen #ifdef	__cplusplus
30*ff0e937bSRaymond Chen extern "C" {
31*ff0e937bSRaymond Chen #endif
32*ff0e937bSRaymond Chen 
33*ff0e937bSRaymond Chen /* Wireless USB feature selectors */
34*ff0e937bSRaymond Chen #define	WUSB_FEAT_TX_DRP_IE		0
35*ff0e937bSRaymond Chen #define	WUSB_FEAT_DEV_XMIT_PKT		1
36*ff0e937bSRaymond Chen #define	WUSB_FEAT_COUNT_PKTS		2
37*ff0e937bSRaymond Chen #define	WUSB_FEAT_CAPT_PKTS		3
38*ff0e937bSRaymond Chen 
39*ff0e937bSRaymond Chen /* Wireless USB status selector for GET_STATUS request */
40*ff0e937bSRaymond Chen #define	WUSB_STS_TYPE_STANDARD		0
41*ff0e937bSRaymond Chen #define	WUSB_STS_TYPE_WIRELESS_FEAT	1
42*ff0e937bSRaymond Chen #define	WUSB_STS_TYPE_CHANNEL_INFO	2
43*ff0e937bSRaymond Chen #define	WUSB_STS_TYPE_RECVD_DATA	3
44*ff0e937bSRaymond Chen #define	WUSB_STS_TYPE_MAS_AVAIL		4
45*ff0e937bSRaymond Chen #define	WUSB_STS_TYPE_TRANS_PWR		5
46*ff0e937bSRaymond Chen 
47*ff0e937bSRaymond Chen /*
48*ff0e937bSRaymond Chen  * Device buffer length for count packets and capture packet functions,
49*ff0e937bSRaymond Chen  * refer to WUSB 1.0 4.3.7.2
50*ff0e937bSRaymond Chen  */
51*ff0e937bSRaymond Chen #define	WUSB_COUNT_CAPT_PKT_LEN		512
52*ff0e937bSRaymond Chen 
53*ff0e937bSRaymond Chen /* Length for Wireless USB GET_STATUS request */
54*ff0e937bSRaymond Chen #define	WUSB_STANDARD_STS_LEN		2
55*ff0e937bSRaymond Chen #define	WUSB_FEAT_STAT_LEN		1
56*ff0e937bSRaymond Chen #define	WUSB_CHANNEL_INFO_STS_LEN	1
57*ff0e937bSRaymond Chen #define	WUSB_RECVD_DATA_STS_LEN		WUSB_COUNT_CAPT_PKT_LEN
58*ff0e937bSRaymond Chen #define	WUSB_MAS_AVAIL_STS_LEN		1
59*ff0e937bSRaymond Chen #define	WUSB_TRANS_PWR_STS_LEN		2
60*ff0e937bSRaymond Chen 
61*ff0e937bSRaymond Chen /* Wiless USB feature status bits */
62*ff0e937bSRaymond Chen #define	WUSB_TX_DRP_IE_STATUS		1
63*ff0e937bSRaymond Chen #define	WUSB_TRANS_PWR_STATUS		2
64*ff0e937bSRaymond Chen #define	WUSB_COUNT_PKTS_STATUS		4
65*ff0e937bSRaymond Chen #define	WUSB_CAPT_PKTS_STATUS		8
66*ff0e937bSRaymond Chen 
67*ff0e937bSRaymond Chen /* Status data */
68*ff0e937bSRaymond Chen typedef struct wusb_counted_pkt {
69*ff0e937bSRaymond Chen 	uint8_t		recp_time[3];
70*ff0e937bSRaymond Chen 	uint8_t		mac_header[6];
71*ff0e937bSRaymond Chen 	uint8_t		lqi;
72*ff0e937bSRaymond Chen } wusb_counted_pkt_t;
73*ff0e937bSRaymond Chen 
74*ff0e937bSRaymond Chen typedef struct wusb_count_pkts {
75*ff0e937bSRaymond Chen 	uint8_t			pkt_count;
76*ff0e937bSRaymond Chen 	wusb_counted_pkt_t	pkt_block[51];
77*ff0e937bSRaymond Chen } wusb_count_pkts_t;
78*ff0e937bSRaymond Chen 
79*ff0e937bSRaymond Chen typedef struct wusb_trans_pwr {
80*ff0e937bSRaymond Chen 	uint8_t		bTxNotifTransPwr;
81*ff0e937bSRaymond Chen 	uint8_t		bTxBeaconTransPwr;
82*ff0e937bSRaymond Chen } wusb_trans_pwr_t;
83*ff0e937bSRaymond Chen 
84*ff0e937bSRaymond Chen /* Wireless USB data selectors for SetWUSBDate request */
85*ff0e937bSRaymond Chen #define	WUSB_DATA_DRPIE_INFO		1
86*ff0e937bSRaymond Chen #define	WUSB_DATA_TRANS_DATA		2
87*ff0e937bSRaymond Chen #define	WUSB_DATA_TRANS_PARAMS		3
88*ff0e937bSRaymond Chen #define	WUSB_DATA_RECV_PARAMS		4
89*ff0e937bSRaymond Chen #define	WUSB_DATA_TRANS_PWR		5
90*ff0e937bSRaymond Chen 
91*ff0e937bSRaymond Chen typedef struct wusb_trans_params {
92*ff0e937bSRaymond Chen 	uint8_t		trans_time[3];
93*ff0e937bSRaymond Chen 	uint8_t		trans_adjust;
94*ff0e937bSRaymond Chen } wusb_trans_params_t;
95*ff0e937bSRaymond Chen 
96*ff0e937bSRaymond Chen typedef struct wusb_recv_params {
97*ff0e937bSRaymond Chen 	uint8_t		recv_filter;
98*ff0e937bSRaymond Chen 	uint8_t		recv_channel;
99*ff0e937bSRaymond Chen 	uint8_t		recv_start_time[3];
100*ff0e937bSRaymond Chen 	uint8_t		recv_end_time[3];
101*ff0e937bSRaymond Chen } wusb_recv_params_t;
102*ff0e937bSRaymond Chen 
103*ff0e937bSRaymond Chen /* Wireless USB key index bits */
104*ff0e937bSRaymond Chen #define	WUSB_KEY_INDEX_MASK		0x0f
105*ff0e937bSRaymond Chen #define	WUSB_KEY_TYPE_MASK		0x30
106*ff0e937bSRaymond Chen #define	WUSB_KEY_TYPE_ASSOCIATION	0x10
107*ff0e937bSRaymond Chen #define	WUSB_KEY_TYPE_GTK		0x20
108*ff0e937bSRaymond Chen #define	WUSB_KEY_ORIGIN_MASK		0x40
109*ff0e937bSRaymond Chen #define	WUSB_KEY_ORIGIN_HOST		0x00
110*ff0e937bSRaymond Chen #define	WUSB_KEY_ORIGIN_DEV		0x40
111*ff0e937bSRaymond Chen 
112*ff0e937bSRaymond Chen typedef struct wusb_key {
113*ff0e937bSRaymond Chen #if defined(_BIT_FIELDS_LTOH)
114*ff0e937bSRaymond Chen 	uint8_t		key_index	:4,
115*ff0e937bSRaymond Chen 			key_type	:2,
116*ff0e937bSRaymond Chen 			key_origin	:1,
117*ff0e937bSRaymond Chen 			key_resv	:1;
118*ff0e937bSRaymond Chen #elif defined(_BIT_FIELDS_HTOL)
119*ff0e937bSRaymond Chen 	uint8_t		key_resv	:1,
120*ff0e937bSRaymond Chen 			key_origin	:1,
121*ff0e937bSRaymond Chen 			key_type	:2,
122*ff0e937bSRaymond Chen 			key_index	:4;
123*ff0e937bSRaymond Chen #endif
124*ff0e937bSRaymond Chen } wusb_key_t;
125*ff0e937bSRaymond Chen 
126*ff0e937bSRaymond Chen /* Wireless USB handshake data */
127*ff0e937bSRaymond Chen typedef struct wusb_hndshk_data {
128*ff0e937bSRaymond Chen 	uint8_t		bMessageNumber;
129*ff0e937bSRaymond Chen 	uint8_t		bStatus;
130*ff0e937bSRaymond Chen 	uint8_t		tTKID[3];
131*ff0e937bSRaymond Chen 	uint8_t		bReserved;
132*ff0e937bSRaymond Chen 	uint8_t		CDID[16];
133*ff0e937bSRaymond Chen 	uint8_t		Nonce[16];
134*ff0e937bSRaymond Chen 	uint8_t		MIC[8];
135*ff0e937bSRaymond Chen } wusb_hndshk_data_t;
136*ff0e937bSRaymond Chen 
137*ff0e937bSRaymond Chen /* Handshake stage */
138*ff0e937bSRaymond Chen #define	WUSB_HNDSHK_MSG_NUM1		1
139*ff0e937bSRaymond Chen #define	WUSB_HNDSHK_MSG_NUM2		2
140*ff0e937bSRaymond Chen #define	WUSB_HNDSHK_MSG_NUM3		3
141*ff0e937bSRaymond Chen 
142*ff0e937bSRaymond Chen /* Handshake status */
143*ff0e937bSRaymond Chen #define	WUSB_HNDSHK_NORMAL		0
144*ff0e937bSRaymond Chen #define	WUSB_HNDSHK_ABORT_PER_POLICY	1
145*ff0e937bSRaymond Chen #define	WUSB_HNDSHK_IN_PROGRESS		2
146*ff0e937bSRaymond Chen #define	WUSB_HNDSHK_TKID_CONFLICT	3
147*ff0e937bSRaymond Chen 
148*ff0e937bSRaymond Chen #define	WUSB_HNDSHK_DATA_LEN		46
149*ff0e937bSRaymond Chen 
150*ff0e937bSRaymond Chen /* Wireless USB connection context */
151*ff0e937bSRaymond Chen #define	WUSB_CHID_LEN			16
152*ff0e937bSRaymond Chen #define	WUSB_CDID_LEN			16
153*ff0e937bSRaymond Chen #define	WUSB_CK_LEN			16
154*ff0e937bSRaymond Chen #define	WUSB_CC_LEN			48
155*ff0e937bSRaymond Chen 
156*ff0e937bSRaymond Chen 
157*ff0e937bSRaymond Chen /*
158*ff0e937bSRaymond Chen  * ****************************************
159*ff0e937bSRaymond Chen  * IE definitions
160*ff0e937bSRaymond Chen  * ****************************************
161*ff0e937bSRaymond Chen  */
162*ff0e937bSRaymond Chen 
163*ff0e937bSRaymond Chen /* Wireless USB channel IE identifiers */
164*ff0e937bSRaymond Chen #define	WUSB_IE_WCTA			0x80
165*ff0e937bSRaymond Chen #define	WUSB_IE_CONNECTACK		0x81
166*ff0e937bSRaymond Chen #define	WUSB_IE_HOSTINFO		0x82
167*ff0e937bSRaymond Chen #define	WUSB_IE_CHCHANGEANNOUNCE	0x83
168*ff0e937bSRaymond Chen #define	WUSB_IE_DEV_DISCONNECT		0x84
169*ff0e937bSRaymond Chen #define	WUSB_IE_HOST_DISCONNECT		0x85
170*ff0e937bSRaymond Chen #define	WUSB_IE_RELEASE_CHANNEL		0x86
171*ff0e937bSRaymond Chen #define	WUSB_IE_WORK			0x87
172*ff0e937bSRaymond Chen #define	WUSB_IE_CHANNEL_STOP		0x88
173*ff0e937bSRaymond Chen #define	WUSB_IE_DEV_KEEPALIVE		0x89
174*ff0e937bSRaymond Chen #define	WUSB_IE_ISOC_DISCARD		0x8a
175*ff0e937bSRaymond Chen #define	WUSB_IE_RESETDEVICE		0x8b
176*ff0e937bSRaymond Chen #define	WUSB_IE_XMIT_PACKET_ADJUST	0x8c
177*ff0e937bSRaymond Chen 
178*ff0e937bSRaymond Chen /* Array-based IE must not include more than 4 elements */
179*ff0e937bSRaymond Chen #define	WUSB_IE_MAX_ELEMENT		4
180*ff0e937bSRaymond Chen #define	WUSB_ACK_BLOCK_SIZE		18
181*ff0e937bSRaymond Chen #define	WUSB_ACK_IE_MAX_DATA_LEN	\
182*ff0e937bSRaymond Chen 	(WUSB_ACK_BLOCK_SIZE * WUSB_IE_MAX_ELEMENT)
183*ff0e937bSRaymond Chen #define	WUSB_DISCONN_IE_MAX_DATA_LEN	(WUSB_IE_MAX_ELEMENT + 2)
184*ff0e937bSRaymond Chen 
185*ff0e937bSRaymond Chen typedef struct wusb_ie_header {
186*ff0e937bSRaymond Chen 	uint8_t			bLength;
187*ff0e937bSRaymond Chen 	uint8_t			bIEIdentifier;
188*ff0e937bSRaymond Chen } wusb_ie_header_t;
189*ff0e937bSRaymond Chen 
190*ff0e937bSRaymond Chen typedef struct wusb_connectack_block {
191*ff0e937bSRaymond Chen 	uint8_t			CDID[16];
192*ff0e937bSRaymond Chen 	uint8_t			bDeviceAddress;
193*ff0e937bSRaymond Chen 	uint8_t			bReserved;
194*ff0e937bSRaymond Chen } wusb_connectack_block_t;
195*ff0e937bSRaymond Chen 
196*ff0e937bSRaymond Chen typedef struct wusb_ie_connect_ack {
197*ff0e937bSRaymond Chen 	uint8_t			bLength;
198*ff0e937bSRaymond Chen 	uint8_t			bIEIdentifier;
199*ff0e937bSRaymond Chen 	uint8_t			bAckBlock[WUSB_ACK_IE_MAX_DATA_LEN];
200*ff0e937bSRaymond Chen } wusb_ie_connect_ack_t;
201*ff0e937bSRaymond Chen 
202*ff0e937bSRaymond Chen typedef struct wusb_ie_host_info {
203*ff0e937bSRaymond Chen 	uint8_t			bLength;
204*ff0e937bSRaymond Chen 	uint8_t			bIEIdentifier;
205*ff0e937bSRaymond Chen 	uint8_t			bmAttributes[2];
206*ff0e937bSRaymond Chen 	uint8_t			CHID[16];
207*ff0e937bSRaymond Chen } wusb_ie_host_info_t;
208*ff0e937bSRaymond Chen 
209*ff0e937bSRaymond Chen #define	WUSB_HI_RECONN_ONLY	0x00
210*ff0e937bSRaymond Chen #define	WUSB_HI_CONN_LMTED	0x01
211*ff0e937bSRaymond Chen #define	WUSB_HI_CONN_ALL	0x03
212*ff0e937bSRaymond Chen #define	WUSB_HI_P2P_DRD_CAP	0x04
213*ff0e937bSRaymond Chen #define	WUSB_HI_STRIDX_SHIFT	3
214*ff0e937bSRaymond Chen #define	WUSB_HI_STRIDX_MASK	0x38
215*ff0e937bSRaymond Chen 
216*ff0e937bSRaymond Chen typedef struct wusb_ie_chchange_announce {
217*ff0e937bSRaymond Chen 	uint8_t			bLength;
218*ff0e937bSRaymond Chen 	uint8_t			bIEIdentifier;
219*ff0e937bSRaymond Chen 	uint8_t			bNewPHYChannelNumber;
220*ff0e937bSRaymond Chen 	uint8_t			SwitchTime[3];
221*ff0e937bSRaymond Chen } wusb_ie_chchange_announce_t;
222*ff0e937bSRaymond Chen 
223*ff0e937bSRaymond Chen /* the size must be even multiple of 2 bytes */
224*ff0e937bSRaymond Chen typedef struct wusb_ie_dev_disconnect {
225*ff0e937bSRaymond Chen 	uint8_t			bLength;
226*ff0e937bSRaymond Chen 	uint8_t			bIEIdentifier;
227*ff0e937bSRaymond Chen 	uint8_t			bDeviceAddress[WUSB_DISCONN_IE_MAX_DATA_LEN];
228*ff0e937bSRaymond Chen } wusb_ie_dev_disconnect_t;
229*ff0e937bSRaymond Chen 
230*ff0e937bSRaymond Chen typedef wusb_ie_dev_disconnect_t wusb_ie_keepalive_t;
231*ff0e937bSRaymond Chen 
232*ff0e937bSRaymond Chen typedef struct wusb_ie_host_disconnect {
233*ff0e937bSRaymond Chen 	uint8_t			bLength;
234*ff0e937bSRaymond Chen 	uint8_t			bIEIdentifier;
235*ff0e937bSRaymond Chen } wusb_ie_host_disconnect_t;
236*ff0e937bSRaymond Chen 
237*ff0e937bSRaymond Chen typedef struct wusb_udrb {
238*ff0e937bSRaymond Chen 	uint16_t		wStart;
239*ff0e937bSRaymond Chen 	uint16_t		wDurationValue;
240*ff0e937bSRaymond Chen 	uint8_t			bDeviceAddress;
241*ff0e937bSRaymond Chen 	uint8_t			bReserved;
242*ff0e937bSRaymond Chen } wusb_udrb_t;
243*ff0e937bSRaymond Chen 
244*ff0e937bSRaymond Chen typedef struct wusb_ie_release_channel {
245*ff0e937bSRaymond Chen 	uint8_t			bLength;
246*ff0e937bSRaymond Chen 	uint8_t			bIEIdentifier;
247*ff0e937bSRaymond Chen 	wusb_udrb_t		udrb[WUSB_IE_MAX_ELEMENT];
248*ff0e937bSRaymond Chen } wusb_ie_release_channel_t;
249*ff0e937bSRaymond Chen 
250*ff0e937bSRaymond Chen typedef struct wusb_ie_channel_stop {
251*ff0e937bSRaymond Chen 	uint8_t			bLength;
252*ff0e937bSRaymond Chen 	uint8_t			bIEIdentifier;
253*ff0e937bSRaymond Chen 	uint8_t			bmAttributes;
254*ff0e937bSRaymond Chen 	uint8_t			StopTime[3];
255*ff0e937bSRaymond Chen } wusb_ie_channel_stop_t;
256*ff0e937bSRaymond Chen 
257*ff0e937bSRaymond Chen typedef struct wusb_ie_isoc_discard {
258*ff0e937bSRaymond Chen 	uint8_t			bLength;
259*ff0e937bSRaymond Chen 	uint8_t			bIEIdentifier;
260*ff0e937bSRaymond Chen 	uint8_t			bDiscardID;
261*ff0e937bSRaymond Chen 	uint8_t			bDeviceAddress;
262*ff0e937bSRaymond Chen 	uint8_t			bmAttributes;
263*ff0e937bSRaymond Chen 	uint8_t			bFirstReceiveWindowPosition;
264*ff0e937bSRaymond Chen 	uint16_t		wNumberDiscardedPackets;
265*ff0e937bSRaymond Chen 	uint16_t		wNumberDiscardedSegments;
266*ff0e937bSRaymond Chen 	uint8_t			bmDeviceReceiveWindow[4];
267*ff0e937bSRaymond Chen } wusb_ie_isoc_discard_t;
268*ff0e937bSRaymond Chen 
269*ff0e937bSRaymond Chen typedef struct wusb_ie_reset_device {
270*ff0e937bSRaymond Chen 	uint8_t			bLength;
271*ff0e937bSRaymond Chen 	uint8_t			bIEIdentifier;
272*ff0e937bSRaymond Chen 	uint8_t			CDID[4 * WUSB_IE_MAX_ELEMENT];
273*ff0e937bSRaymond Chen } wusb_ie_reset_device_t;
274*ff0e937bSRaymond Chen 
275*ff0e937bSRaymond Chen typedef struct wusb_ie_xmit_packet_adjust {
276*ff0e937bSRaymond Chen 	uint8_t			bLength;
277*ff0e937bSRaymond Chen 	uint8_t			bIEIdentifier;
278*ff0e937bSRaymond Chen 	uint8_t			bTransmitAdjustment;
279*ff0e937bSRaymond Chen 	uint8_t			bReserved;
280*ff0e937bSRaymond Chen } wusb_ie_xmit_packet_adjust_t;
281*ff0e937bSRaymond Chen 
282*ff0e937bSRaymond Chen /*
283*ff0e937bSRaymond Chen  * **************************************
284*ff0e937bSRaymond Chen  * Device notification definitions
285*ff0e937bSRaymond Chen  * **************************************
286*ff0e937bSRaymond Chen  */
287*ff0e937bSRaymond Chen 
288*ff0e937bSRaymond Chen /* Device notification message types */
289*ff0e937bSRaymond Chen #define	WUSB_DN_CONNECT			1
290*ff0e937bSRaymond Chen #define	WUSB_DN_DISCONNECT		2
291*ff0e937bSRaymond Chen #define	WUSB_DN_EPRDY			3
292*ff0e937bSRaymond Chen #define	WUSB_DN_MASAVAILCHANGED		4
293*ff0e937bSRaymond Chen #define	WUSB_DN_REMOTEWAKEUP		5
294*ff0e937bSRaymond Chen #define	WUSB_DN_SLEEP			6
295*ff0e937bSRaymond Chen #define	WUSB_DN_ALIVE			7
296*ff0e937bSRaymond Chen 
297*ff0e937bSRaymond Chen /* WUSB Errata 06.12 specifies WUSB header must not be included */
298*ff0e937bSRaymond Chen typedef struct wusb_dn_header {
299*ff0e937bSRaymond Chen 	uint8_t			bType;
300*ff0e937bSRaymond Chen } wusb_dn_header_t;
301*ff0e937bSRaymond Chen 
302*ff0e937bSRaymond Chen #define	WUSB_DN_CONN_PKT_LEN		19
303*ff0e937bSRaymond Chen #define	WUSB_DN_DISCONN_PKT_LEN		1
304*ff0e937bSRaymond Chen #define	WUSB_DN_EPRDY_HDR_LEN		2
305*ff0e937bSRaymond Chen #define	WUSB_DN_MASAVAILCHANGED_PKT_LEN	1
306*ff0e937bSRaymond Chen #define	WUSB_DN_SLEEP_PKT_LEN		2
307*ff0e937bSRaymond Chen #define	WUSB_DN_REMOTEWAKEUP_PKT_LEN	1
308*ff0e937bSRaymond Chen #define	WUSB_DN_ALIVE_PKT_LEN		1
309*ff0e937bSRaymond Chen 
310*ff0e937bSRaymond Chen typedef struct wusb_dn_connect {
311*ff0e937bSRaymond Chen 	uint8_t			bType;
312*ff0e937bSRaymond Chen 	uint8_t			bmConnAttributes[2];
313*ff0e937bSRaymond Chen 	uint8_t			CDID[16];
314*ff0e937bSRaymond Chen } wusb_dn_connect_t;
315*ff0e937bSRaymond Chen 
316*ff0e937bSRaymond Chen typedef struct wusb_dn_disconnect {
317*ff0e937bSRaymond Chen 	uint8_t			bType;
318*ff0e937bSRaymond Chen } wusb_dn_disconnect_t;
319*ff0e937bSRaymond Chen 
320*ff0e937bSRaymond Chen typedef struct wusb_dn_eprdy {
321*ff0e937bSRaymond Chen 	uint8_t			bType;
322*ff0e937bSRaymond Chen 	uint8_t			bLength;
323*ff0e937bSRaymond Chen 	uint8_t			bEPsReadyArray[1];
324*ff0e937bSRaymond Chen } wusb_dn_eprdy_t;
325*ff0e937bSRaymond Chen 
326*ff0e937bSRaymond Chen typedef struct wusb_dn_masavail_changed {
327*ff0e937bSRaymond Chen 	uint8_t			bType;
328*ff0e937bSRaymond Chen } wusb_dn_masavail_changed_t;
329*ff0e937bSRaymond Chen 
330*ff0e937bSRaymond Chen typedef struct wusb_dn_sleep {
331*ff0e937bSRaymond Chen 	uint8_t			bType;
332*ff0e937bSRaymond Chen 	uint8_t			bmSlpAttributes;
333*ff0e937bSRaymond Chen } wusb_dn_sleep_t;
334*ff0e937bSRaymond Chen 
335*ff0e937bSRaymond Chen typedef struct wusb_dn_remote_wakeup {
336*ff0e937bSRaymond Chen 	uint8_t			bType;
337*ff0e937bSRaymond Chen } wusb_dn_remote_wakeup_t;
338*ff0e937bSRaymond Chen 
339*ff0e937bSRaymond Chen typedef struct wusb_dn_alive {
340*ff0e937bSRaymond Chen 	uint8_t			bType;
341*ff0e937bSRaymond Chen } wusb_dn_alive_t;
342*ff0e937bSRaymond Chen 
343*ff0e937bSRaymond Chen #define	WUSB_DN_CONN_NEW		0x01
344*ff0e937bSRaymond Chen #define	WUSB_DN_CONN_BEACON_MASK	0x06
345*ff0e937bSRaymond Chen #define	WUSB_DN_CONN_SELF_BEACON	0x02
346*ff0e937bSRaymond Chen #define	WUSB_DN_CONN_DIRECTED_BEACON	0x04
347*ff0e937bSRaymond Chen #define	WUSB_DN_CONN_NO_BEACON		0x06
348*ff0e937bSRaymond Chen 
349*ff0e937bSRaymond Chen #define	WUSB_DN_SLP_ATTR_GTS		0
350*ff0e937bSRaymond Chen #define	WUSB_DN_SLP_ATTR_WTS		1
351*ff0e937bSRaymond Chen 
352*ff0e937bSRaymond Chen /*
353*ff0e937bSRaymond Chen  * WUSB data rate definitions. See WUSB 7.4.1.1
354*ff0e937bSRaymond Chen  */
355*ff0e937bSRaymond Chen #define	WUSB_DATA_RATE_BIT_53	1 << 0	/* 53.3 Mbps */
356*ff0e937bSRaymond Chen #define	WUSB_DATA_RATE_BIT_80	1 << 1	/* 80 Mbps */
357*ff0e937bSRaymond Chen #define	WUSB_DATA_RATE_BIT_106	1 << 2	/* 106.7 Mbps */
358*ff0e937bSRaymond Chen #define	WUSB_DATA_RATE_BIT_160	1 << 3	/* 160 Mbps */
359*ff0e937bSRaymond Chen #define	WUSB_DATA_RATE_BIT_200	1 << 4	/* 200 Mbps */
360*ff0e937bSRaymond Chen #define	WUSB_DATA_RATE_BIT_320	1 << 5	/* 320 Mbps */
361*ff0e937bSRaymond Chen #define	WUSB_DATA_RATE_BIT_400	1 << 6	/* 400 Mbps */
362*ff0e937bSRaymond Chen #define	WUSB_DATA_RATE_BIT_480	1 << 7	/* 480 Mbps */
363*ff0e937bSRaymond Chen 
364*ff0e937bSRaymond Chen /*
365*ff0e937bSRaymond Chen  * WUSB PHY Transfer Rate. See WUSB 5.6
366*ff0e937bSRaymond Chen  */
367*ff0e937bSRaymond Chen #define	WUSB_PHY_TX_RATE_53	0	/* 53.3 Mbps */
368*ff0e937bSRaymond Chen #define	WUSB_PHY_TX_RATE_80	1	/* 80 Mbps */
369*ff0e937bSRaymond Chen #define	WUSB_PHY_TX_RATE_106	2	/* 106.7 Mbps */
370*ff0e937bSRaymond Chen #define	WUSB_PHY_TX_RATE_160	3	/* 160 Mbps */
371*ff0e937bSRaymond Chen #define	WUSB_PHY_TX_RATE_200	4	/* 200 Mbps */
372*ff0e937bSRaymond Chen #define	WUSB_PHY_TX_RATE_320	5	/* 320 Mbps */
373*ff0e937bSRaymond Chen #define	WUSB_PHY_TX_RATE_400	6	/* 400 Mbps */
374*ff0e937bSRaymond Chen #define	WUSB_PHY_TX_RATE_480	7	/* 480 Mbps */
375*ff0e937bSRaymond Chen #define	WUSB_PHY_TX_RATE_RES	8	/* 8~1F, reserved */
376*ff0e937bSRaymond Chen 
377*ff0e937bSRaymond Chen /*
378*ff0e937bSRaymond Chen  * *****************************************
379*ff0e937bSRaymond Chen  * crypto definition
380*ff0e937bSRaymond Chen  * *****************************************
381*ff0e937bSRaymond Chen  */
382*ff0e937bSRaymond Chen 
383*ff0e937bSRaymond Chen typedef struct wusb_ccm_nonce {
384*ff0e937bSRaymond Chen 	uint64_t		sfn;
385*ff0e937bSRaymond Chen 	uint32_t		tkid;
386*ff0e937bSRaymond Chen 	uint16_t		daddr;
387*ff0e937bSRaymond Chen 	uint16_t		saddr;
388*ff0e937bSRaymond Chen } wusb_ccm_nonce_t;
389*ff0e937bSRaymond Chen 
390*ff0e937bSRaymond Chen #define	CCM_MAC_LEN		8	/* from WUSB 6.4 */
391*ff0e937bSRaymond Chen #define	CCM_NONCE_LEN		13	/* from WUSB 6.4 */
392*ff0e937bSRaymond Chen 
393*ff0e937bSRaymond Chen /* WUSB encryption types. see table 7-35 */
394*ff0e937bSRaymond Chen #define	WUSB_ENCRYP_TYPE_UNSECURE	0
395*ff0e937bSRaymond Chen #define	WUSB_ENCRYP_TYPE_WIRED		1
396*ff0e937bSRaymond Chen #define	WUSB_ENCRYP_TYPE_CCM_1		2
397*ff0e937bSRaymond Chen #define	WUSB_ENCRYP_TYPE_RSA_1		3
398*ff0e937bSRaymond Chen 
399*ff0e937bSRaymond Chen /* association, refer to WUSB AM Spec 3.8 */
400*ff0e937bSRaymond Chen enum wusb_association_attr {
401*ff0e937bSRaymond Chen 	attrAssociationTypeId			= 0x0000,
402*ff0e937bSRaymond Chen 	attrAssociationSubTypeId		= 0x0001,
403*ff0e937bSRaymond Chen 	attrLength				= 0x0002,
404*ff0e937bSRaymond Chen 	attrAssociationStatus			= 0x0004,
405*ff0e937bSRaymond Chen 	attrLangID				= 0x0008,
406*ff0e937bSRaymond Chen 	attrDeviceFriendlyName			= 0x000B,
407*ff0e937bSRaymond Chen 	attrHostFriendlyName			= 0x000C,
408*ff0e937bSRaymond Chen 	attrCHID				= 0x1000,
409*ff0e937bSRaymond Chen 	attrCDID				= 0x1001,
410*ff0e937bSRaymond Chen 	attrConnectionContext			= 0x1002,
411*ff0e937bSRaymond Chen 	attrBandGroups				= 0x1004
412*ff0e937bSRaymond Chen };
413*ff0e937bSRaymond Chen 
414*ff0e937bSRaymond Chen typedef	uint16_t	wusb_asso_attr_t;
415*ff0e937bSRaymond Chen 
416*ff0e937bSRaymond Chen typedef struct wusb_cbaf_info_item {
417*ff0e937bSRaymond Chen 	wusb_asso_attr_t	typeID;
418*ff0e937bSRaymond Chen 	uint16_t		length;
419*ff0e937bSRaymond Chen } wusb_cbaf_info_item_t;
420*ff0e937bSRaymond Chen 
421*ff0e937bSRaymond Chen #define	fieldAssociationTypeId			"\x00\x00\x02\x00"
422*ff0e937bSRaymond Chen #define	fieldAssociationSubTypeId		"\x01\x00\x02\x00"
423*ff0e937bSRaymond Chen #define	fieldLength				"\x02\x00\x04\x00"
424*ff0e937bSRaymond Chen #define	fieldAssociationStatus			"\x04\x00\x04\x00"
425*ff0e937bSRaymond Chen #define	fieldLangID				"\x08\x00\x02\x00"
426*ff0e937bSRaymond Chen #define	fieldDeviceFriendlyName			"\x0B\x00\x40\x00"
427*ff0e937bSRaymond Chen #define	fieldHostFriendlyName			"\x0C\x00\x40\x00"
428*ff0e937bSRaymond Chen #define	fieldCHID				"\x00\x10\x10\x00"
429*ff0e937bSRaymond Chen #define	fieldCDID				"\x01\x10\x10\x00"
430*ff0e937bSRaymond Chen #define	fieldConnectionContext			"\x02\x10\x30\x00"
431*ff0e937bSRaymond Chen #define	fieldBandGroups				"\x04\x10\x02\x00"
432*ff0e937bSRaymond Chen 
433*ff0e937bSRaymond Chen 
434*ff0e937bSRaymond Chen #ifdef __cplusplus
435*ff0e937bSRaymond Chen }
436*ff0e937bSRaymond Chen #endif
437*ff0e937bSRaymond Chen 
438*ff0e937bSRaymond Chen #endif /* _SYS_USB_WUSBA_H */
439