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