xref: /onnv-gate/usr/src/uts/common/sys/uwb/uwb.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_UWB_UWB_H
27*9430SRaymond.Chen@Sun.COM #define	_SYS_UWB_UWB_H
28*9430SRaymond.Chen@Sun.COM 
29*9430SRaymond.Chen@Sun.COM 
30*9430SRaymond.Chen@Sun.COM #ifdef	__cplusplus
31*9430SRaymond.Chen@Sun.COM extern "C" {
32*9430SRaymond.Chen@Sun.COM #endif
33*9430SRaymond.Chen@Sun.COM 
34*9430SRaymond.Chen@Sun.COM /*
35*9430SRaymond.Chen@Sun.COM  * IOCTLs and related data structures for UWB Radio Controller drivers.
36*9430SRaymond.Chen@Sun.COM  */
37*9430SRaymond.Chen@Sun.COM 
38*9430SRaymond.Chen@Sun.COM /* IOCTLs */
39*9430SRaymond.Chen@Sun.COM #define	UWB_IOCTL_BASE			0x1000
40*9430SRaymond.Chen@Sun.COM #define	UWB_COMMAND			(UWB_IOCTL_BASE + 0x1)
41*9430SRaymond.Chen@Sun.COM #define	UWB_GET_NOTIFICATION		(UWB_IOCTL_BASE + 0x2)
42*9430SRaymond.Chen@Sun.COM 
43*9430SRaymond.Chen@Sun.COM #define	UWB_CE_TYPE_GENERAL 0		/* General Command/Event type */
44*9430SRaymond.Chen@Sun.COM 
45*9430SRaymond.Chen@Sun.COM /*
46*9430SRaymond.Chen@Sun.COM  * UWB Radio Controller Commands and Events:
47*9430SRaymond.Chen@Sun.COM  *
48*9430SRaymond.Chen@Sun.COM  * See WUSB spec 1.0 [Table 8-68]
49*9430SRaymond.Chen@Sun.COM  * See WHCI 0.95 [Table 3-2],[Table 3-5]
50*9430SRaymond.Chen@Sun.COM  */
51*9430SRaymond.Chen@Sun.COM /* Commands */
52*9430SRaymond.Chen@Sun.COM #define	UWB_CE_CHANNEL_CHANGE			16
53*9430SRaymond.Chen@Sun.COM #define	UWB_CE_DEV_ADDR_MGMT			17
54*9430SRaymond.Chen@Sun.COM #define	UWB_CE_GET_IE				18
55*9430SRaymond.Chen@Sun.COM #define	UWB_CE_RESET				19
56*9430SRaymond.Chen@Sun.COM #define	UWB_CE_SCAN				20
57*9430SRaymond.Chen@Sun.COM #define	UWB_CE_SET_BEACON_FILTER		21
58*9430SRaymond.Chen@Sun.COM #define	UWB_CE_SET_DRP_IE			22
59*9430SRaymond.Chen@Sun.COM #define	UWB_CE_SET_IE				23
60*9430SRaymond.Chen@Sun.COM #define	UWB_CE_SET_NOTIFICATION_FILTER		24
61*9430SRaymond.Chen@Sun.COM #define	UWB_CE_SET_TX_POWER			25
62*9430SRaymond.Chen@Sun.COM #define	UWB_CE_SLEEP				26
63*9430SRaymond.Chen@Sun.COM #define	UWB_CE_START_BEACON			27
64*9430SRaymond.Chen@Sun.COM #define	UWB_CE_STOP_BEACON			28
65*9430SRaymond.Chen@Sun.COM #define	UWB_CE_BP_MERGE				29
66*9430SRaymond.Chen@Sun.COM #define	UWB_CE_SEND_COMMAND_FRAME		30
67*9430SRaymond.Chen@Sun.COM #define	UWB_CE_SET_ASIE_NOTIFICATION		31
68*9430SRaymond.Chen@Sun.COM 
69*9430SRaymond.Chen@Sun.COM /* Notifications */
70*9430SRaymond.Chen@Sun.COM #define	UWB_NOTIF_IE_RECEIVED			0
71*9430SRaymond.Chen@Sun.COM #define	UWB_NOTIF_BEACON_RECEIVED 		1
72*9430SRaymond.Chen@Sun.COM #define	UWB_NOTIF_BEACON_SIZE_CHANGE    	2
73*9430SRaymond.Chen@Sun.COM #define	UWB_NOTIF_BPOIE_CHANGE			3
74*9430SRaymond.Chen@Sun.COM #define	UWB_NOTIF_BP_SLOT_CHANGE 		4
75*9430SRaymond.Chen@Sun.COM #define	UWB_NOTIF_BP_SWITCH_IE_RECEIVED 	5
76*9430SRaymond.Chen@Sun.COM #define	UWB_NOTIF_DEV_ADDR_CONFLICT 		6
77*9430SRaymond.Chen@Sun.COM #define	UWB_NOTIF_DRP_AVAILABILITY_CHANGE 	7
78*9430SRaymond.Chen@Sun.COM #define	UWB_NOTIF_DRP				8
79*9430SRaymond.Chen@Sun.COM #define	UWB_NOTIF_BP_SWITCH_STATUS 		9
80*9430SRaymond.Chen@Sun.COM #define	UWB_NOTIF_CMD_FRAME_RCV 		10
81*9430SRaymond.Chen@Sun.COM #define	UWB_NOTIF_CHANNEL_CHANGE_IE_RCV 	11
82*9430SRaymond.Chen@Sun.COM #define	UWB_NOTIF_RESERVED 			12
83*9430SRaymond.Chen@Sun.COM 
84*9430SRaymond.Chen@Sun.COM /*
85*9430SRaymond.Chen@Sun.COM  * Scan types.
86*9430SRaymond.Chen@Sun.COM  * WUSB spec 1.0 [Table 8-78. Scan RCCB]
87*9430SRaymond.Chen@Sun.COM  * WHCI 0.95 [Table 3-14. Scan RCCB Format]
88*9430SRaymond.Chen@Sun.COM  */
89*9430SRaymond.Chen@Sun.COM #define	UWB_RC_SCAN_ONLY			0
90*9430SRaymond.Chen@Sun.COM #define	UWB_RC_SCAN_OUTSIDE_BP			1
91*9430SRaymond.Chen@Sun.COM #define	UWB_RC_SCAN_WHILE_INACTIVE		2
92*9430SRaymond.Chen@Sun.COM #define	UWB_RC_SCAN_DISABLED			3
93*9430SRaymond.Chen@Sun.COM #define	UWB_RC_SCAN_ONLY_STARTTIME 		4
94*9430SRaymond.Chen@Sun.COM 
95*9430SRaymond.Chen@Sun.COM /*
96*9430SRaymond.Chen@Sun.COM  * See ECMA-368 [7.2.2 Device address]
97*9430SRaymond.Chen@Sun.COM  * Individual MAC sublayers are addressed via an EUI-48 [I3]
98*9430SRaymond.Chen@Sun.COM  * DevAddrs are 16-bit values
99*9430SRaymond.Chen@Sun.COM  */
100*9430SRaymond.Chen@Sun.COM typedef struct uwb_mac_addr {
101*9430SRaymond.Chen@Sun.COM 	uint8_t addr[6];
102*9430SRaymond.Chen@Sun.COM } uwb_mac_addr_t;
103*9430SRaymond.Chen@Sun.COM 
104*9430SRaymond.Chen@Sun.COM typedef struct uwb_dev_addr {
105*9430SRaymond.Chen@Sun.COM 	uint8_t addr[2];
106*9430SRaymond.Chen@Sun.COM } uwb_dev_addr_t;
107*9430SRaymond.Chen@Sun.COM 
108*9430SRaymond.Chen@Sun.COM /*
109*9430SRaymond.Chen@Sun.COM  * See ECMA-368 [16.8.6]
110*9430SRaymond.Chen@Sun.COM  * One superframe has 256 Medium Access Slots.
111*9430SRaymond.Chen@Sun.COM  * One superframe has 16 zones.
112*9430SRaymond.Chen@Sun.COM  */
113*9430SRaymond.Chen@Sun.COM #define	UWB_MAS_NUM 256
114*9430SRaymond.Chen@Sun.COM #define	UWB_ZONE_NUM 16
115*9430SRaymond.Chen@Sun.COM 
116*9430SRaymond.Chen@Sun.COM /* Type of DRP reservation. ECMA-368 [table 106] */
117*9430SRaymond.Chen@Sun.COM #define	UWB_DRP_TP_ALIEN	0
118*9430SRaymond.Chen@Sun.COM #define	UWB_DRP_TP_HARD		1
119*9430SRaymond.Chen@Sun.COM #define	UWB_DRP_TP_SOFT		2
120*9430SRaymond.Chen@Sun.COM #define	UWB_DRP_TP_PRVT		3
121*9430SRaymond.Chen@Sun.COM #define	UWB_DRP_TP_PCA		4
122*9430SRaymond.Chen@Sun.COM #define	UWB_DRP_TP_RESVD	5
123*9430SRaymond.Chen@Sun.COM 
124*9430SRaymond.Chen@Sun.COM /* DRP Reasons. ECMA-368 [table 107] */
125*9430SRaymond.Chen@Sun.COM #define	UWB_DRP_RS_ACCEP	0
126*9430SRaymond.Chen@Sun.COM #define	UWB_DRP_RS_CNFLCT	1
127*9430SRaymond.Chen@Sun.COM #define	UWB_DRP_RS_PNDNG	2
128*9430SRaymond.Chen@Sun.COM #define	UWB_DRP_RS_DENI		3
129*9430SRaymond.Chen@Sun.COM #define	UWB_DRP_RS_MODIF	4
130*9430SRaymond.Chen@Sun.COM #define	UWB_DRP_RS_RSEVD	5
131*9430SRaymond.Chen@Sun.COM 
132*9430SRaymond.Chen@Sun.COM /* Allocation of MAS slots in a DRP request. ECMA-368 */
133*9430SRaymond.Chen@Sun.COM typedef struct uwb_drp_bm_alloc {
134*9430SRaymond.Chen@Sun.COM 	uint16_t zone;
135*9430SRaymond.Chen@Sun.COM 	uint16_t mas;
136*9430SRaymond.Chen@Sun.COM } uwb_drp_bm_alloc_t;
137*9430SRaymond.Chen@Sun.COM 
138*9430SRaymond.Chen@Sun.COM /*  Information elements. ECMA-368 [Table 104] */
139*9430SRaymond.Chen@Sun.COM #define	UWB_IE_TIM		0
140*9430SRaymond.Chen@Sun.COM #define	UWB_IE_BPO		1
141*9430SRaymond.Chen@Sun.COM #define	UWB_IE_PCA_AVAIL 	2
142*9430SRaymond.Chen@Sun.COM #define	UWB_IE_DRP_AVAIL 	8
143*9430SRaymond.Chen@Sun.COM #define	UWB_IE_DRP 		9
144*9430SRaymond.Chen@Sun.COM #define	UWB_IE_HIB_MODE		10
145*9430SRaymond.Chen@Sun.COM #define	UWB_IE_BP_SWITCH 	11
146*9430SRaymond.Chen@Sun.COM #define	UWB_IE_MAC_CAP 		12
147*9430SRaymond.Chen@Sun.COM #define	UWB_IE_PHY_CAP 		13
148*9430SRaymond.Chen@Sun.COM #define	UWB_IE_PROBE 		14
149*9430SRaymond.Chen@Sun.COM #define	UWB_IE_APPSPEC_PROBE	15
150*9430SRaymond.Chen@Sun.COM #define	UWB_IE_LINK_FB		16
151*9430SRaymond.Chen@Sun.COM #define	UWB_IE_HIB_ANCHOR	17
152*9430SRaymond.Chen@Sun.COM #define	UWB_IE_CHNL_CHG		18
153*9430SRaymond.Chen@Sun.COM #define	UWB_IE_IDENT		19
154*9430SRaymond.Chen@Sun.COM #define	UWB_IE_MASTER_KEY_ID	20
155*9430SRaymond.Chen@Sun.COM #define	UWB_IE_RELQ_REQ		21
156*9430SRaymond.Chen@Sun.COM #define	UWB_IE_MAB		22
157*9430SRaymond.Chen@Sun.COM #define	UWB_IE_APP_SPEC		255
158*9430SRaymond.Chen@Sun.COM 
159*9430SRaymond.Chen@Sun.COM /* UWB Information Element header. ECMA-368 [16.8] */
160*9430SRaymond.Chen@Sun.COM typedef struct uwb_ie_head {
161*9430SRaymond.Chen@Sun.COM 	uint8_t		id; 	/* Element ID */
162*9430SRaymond.Chen@Sun.COM 	uint8_t		len; 	/* Length */
163*9430SRaymond.Chen@Sun.COM } uwb_ie_head_t;
164*9430SRaymond.Chen@Sun.COM 
165*9430SRaymond.Chen@Sun.COM /* Dynamic Reservation Protocol IE. ECMA-368 [16.8.6] */
166*9430SRaymond.Chen@Sun.COM typedef struct uwb_drp_ie {
167*9430SRaymond.Chen@Sun.COM 	uwb_ie_head_t		head;
168*9430SRaymond.Chen@Sun.COM 	uint16_t 		drp_ctrl;
169*9430SRaymond.Chen@Sun.COM 	uwb_dev_addr_t		dev_addr;
170*9430SRaymond.Chen@Sun.COM 	uwb_drp_bm_alloc_t	allocs[1];
171*9430SRaymond.Chen@Sun.COM } uwb_drp_ie_t;
172*9430SRaymond.Chen@Sun.COM 
173*9430SRaymond.Chen@Sun.COM /* Dynamic Reservation Protocol IE. ECMA-368 [16.8.7] */
174*9430SRaymond.Chen@Sun.COM typedef struct uwb_drp_avail_ie {
175*9430SRaymond.Chen@Sun.COM 	uwb_ie_head_t	head;
176*9430SRaymond.Chen@Sun.COM 	ulong_t 	bitmap[8];
177*9430SRaymond.Chen@Sun.COM } uwb_drp_avail_ie_t;
178*9430SRaymond.Chen@Sun.COM 
179*9430SRaymond.Chen@Sun.COM 
180*9430SRaymond.Chen@Sun.COM /* Data structures for UWB commands */
181*9430SRaymond.Chen@Sun.COM 
182*9430SRaymond.Chen@Sun.COM /* WUSB spec 1.0 [Table 8-65] Radio Control Command Block (RCCB) */
183*9430SRaymond.Chen@Sun.COM typedef struct uwb_rccb_head {
184*9430SRaymond.Chen@Sun.COM 	uint8_t bCommandType;		/* Command Type */
185*9430SRaymond.Chen@Sun.COM 	uint16_t wCommand;		/* Command code */
186*9430SRaymond.Chen@Sun.COM 	uint8_t bCommandContext;	/* Context ID */
187*9430SRaymond.Chen@Sun.COM } uwb_rccb_head_t;
188*9430SRaymond.Chen@Sun.COM 
189*9430SRaymond.Chen@Sun.COM /* Generic RCCB Command */
190*9430SRaymond.Chen@Sun.COM typedef struct uwb_rccb_cmd {
191*9430SRaymond.Chen@Sun.COM 	uwb_rccb_head_t rccb;
192*9430SRaymond.Chen@Sun.COM 	uint8_t	buf[1];
193*9430SRaymond.Chen@Sun.COM } uwb_rccb_cmd_t;
194*9430SRaymond.Chen@Sun.COM 
195*9430SRaymond.Chen@Sun.COM /* WUSB spec 1.0. Table 8-78. Scan RCCB */
196*9430SRaymond.Chen@Sun.COM typedef struct uwb_rccb_scan {
197*9430SRaymond.Chen@Sun.COM 	uwb_rccb_head_t rccb;
198*9430SRaymond.Chen@Sun.COM 	uint8_t bChannelNumber;
199*9430SRaymond.Chen@Sun.COM 	uint8_t bScanState;
200*9430SRaymond.Chen@Sun.COM 	uint16_t wStartTime;
201*9430SRaymond.Chen@Sun.COM } uwb_rccb_scan_t;
202*9430SRaymond.Chen@Sun.COM 
203*9430SRaymond.Chen@Sun.COM /* WUSB spec 1.0 Table 8-93. Start Beaconing RCCB */
204*9430SRaymond.Chen@Sun.COM typedef struct uwb_rccb_start_beacon {
205*9430SRaymond.Chen@Sun.COM 	uwb_rccb_head_t rccb;
206*9430SRaymond.Chen@Sun.COM 	uint16_t 	wBPSTOffset;
207*9430SRaymond.Chen@Sun.COM 	uint8_t 	bChannelNumber;
208*9430SRaymond.Chen@Sun.COM } uwb_rccb_start_beacon_t;
209*9430SRaymond.Chen@Sun.COM 
210*9430SRaymond.Chen@Sun.COM /* WUSB spec 1.0 Table 8-82. Set DRP IE RCCB */
211*9430SRaymond.Chen@Sun.COM typedef struct uwb_rccb_set_drp_ie {
212*9430SRaymond.Chen@Sun.COM 	uwb_rccb_head_t rccb;
213*9430SRaymond.Chen@Sun.COM 	uint16_t 	wIELength;
214*9430SRaymond.Chen@Sun.COM 	uint8_t 	IEData[1];
215*9430SRaymond.Chen@Sun.COM } uwb_rccb_set_drp_ie_t;
216*9430SRaymond.Chen@Sun.COM 
217*9430SRaymond.Chen@Sun.COM /* WUSB spec 1.0 Table 8-84. Set IE RCCB */
218*9430SRaymond.Chen@Sun.COM typedef struct uwb_rccb_set_ie {
219*9430SRaymond.Chen@Sun.COM 	uwb_rccb_head_t rccb;
220*9430SRaymond.Chen@Sun.COM 	uint16_t 	wIELength;
221*9430SRaymond.Chen@Sun.COM 	uint8_t 	IEData[1];
222*9430SRaymond.Chen@Sun.COM }uwb_rccb_set_ie_t;
223*9430SRaymond.Chen@Sun.COM 
224*9430SRaymond.Chen@Sun.COM /* WUSB spec 1.0 Table 8-72. Device Address Management RCCB */
225*9430SRaymond.Chen@Sun.COM typedef struct uwb_rccb_dev_addr_mgmt {
226*9430SRaymond.Chen@Sun.COM 	uwb_rccb_head_t rccb;
227*9430SRaymond.Chen@Sun.COM 	uint8_t 	bmOperationType;
228*9430SRaymond.Chen@Sun.COM 	uint8_t 	baAddr[6];
229*9430SRaymond.Chen@Sun.COM } uwb_rccb_dev_addr_mgmt_t;
230*9430SRaymond.Chen@Sun.COM 
231*9430SRaymond.Chen@Sun.COM /* Data structures for UWB Command results (Events) */
232*9430SRaymond.Chen@Sun.COM 
233*9430SRaymond.Chen@Sun.COM /*  WUSB spec 1.0 Table 8-66. Radio Control Event Block (RCEB) */
234*9430SRaymond.Chen@Sun.COM typedef struct uwb_rceb_head {
235*9430SRaymond.Chen@Sun.COM 	uint8_t 	bEventType;
236*9430SRaymond.Chen@Sun.COM 	uint16_t 	wEvent;
237*9430SRaymond.Chen@Sun.COM 	uint8_t 	bEventContext;
238*9430SRaymond.Chen@Sun.COM } uwb_rceb_head_t;
239*9430SRaymond.Chen@Sun.COM 
240*9430SRaymond.Chen@Sun.COM /*
241*9430SRaymond.Chen@Sun.COM  * Generic RCEB for commands that returns result code only.
242*9430SRaymond.Chen@Sun.COM  * Including channel change, scan, reset, etc.
243*9430SRaymond.Chen@Sun.COM  */
244*9430SRaymond.Chen@Sun.COM typedef struct uwb_rceb_result_code {
245*9430SRaymond.Chen@Sun.COM 	uwb_rceb_head_t rceb;
246*9430SRaymond.Chen@Sun.COM 	uint8_t 	bResultCode;
247*9430SRaymond.Chen@Sun.COM } uwb_rceb_result_code_t;
248*9430SRaymond.Chen@Sun.COM 
249*9430SRaymond.Chen@Sun.COM /*
250*9430SRaymond.Chen@Sun.COM  * WUSB 1.0 Table 8-73. Device Address Management RCEB
251*9430SRaymond.Chen@Sun.COM  * baAddr should be ignored if the Set bit in the associated
252*9430SRaymond.Chen@Sun.COM  * RCCB is set to 1. The spec is fixed in Errata.
253*9430SRaymond.Chen@Sun.COM  */
254*9430SRaymond.Chen@Sun.COM typedef struct uwb_rceb_dev_addr_mgmt {
255*9430SRaymond.Chen@Sun.COM 	uwb_rceb_head_t rceb;
256*9430SRaymond.Chen@Sun.COM 	uint8_t 	baAddr[6];
257*9430SRaymond.Chen@Sun.COM 	uint8_t 	bResultCode;
258*9430SRaymond.Chen@Sun.COM } uwb_rceb_dev_addr_mgmt_t;
259*9430SRaymond.Chen@Sun.COM 
260*9430SRaymond.Chen@Sun.COM /* WUSB 1.0 Table 8-75. Get IE RCEB */
261*9430SRaymond.Chen@Sun.COM typedef struct uwb_rceb_get_ie {
262*9430SRaymond.Chen@Sun.COM 	uwb_rceb_head_t rceb;
263*9430SRaymond.Chen@Sun.COM 	uint16_t 	wIELength;
264*9430SRaymond.Chen@Sun.COM 	uint8_t 	IEData[1];
265*9430SRaymond.Chen@Sun.COM } uwb_rceb_get_ie_t;
266*9430SRaymond.Chen@Sun.COM 
267*9430SRaymond.Chen@Sun.COM /* WUSB 1.0 Table 8-86. Set IE RCEB */
268*9430SRaymond.Chen@Sun.COM typedef struct uwb_rceb_set_ie {
269*9430SRaymond.Chen@Sun.COM 	uwb_rceb_head_t rceb;
270*9430SRaymond.Chen@Sun.COM 	uint16_t 	RemainingSpace;
271*9430SRaymond.Chen@Sun.COM 	uint8_t 	bResultCode;
272*9430SRaymond.Chen@Sun.COM } uwb_rceb_set_ie_t;
273*9430SRaymond.Chen@Sun.COM 
274*9430SRaymond.Chen@Sun.COM /* WUSB 1.0 Table 8-83. Set DRP IE RCEB */
275*9430SRaymond.Chen@Sun.COM typedef struct uwb_rceb_set_drp_ie {
276*9430SRaymond.Chen@Sun.COM 	uwb_rceb_head_t rceb;
277*9430SRaymond.Chen@Sun.COM 	uint16_t 	wRemainingSpace;
278*9430SRaymond.Chen@Sun.COM 	uint8_t 	bResultCode;
279*9430SRaymond.Chen@Sun.COM } uwb_rceb_set_drp_ie_t;
280*9430SRaymond.Chen@Sun.COM 
281*9430SRaymond.Chen@Sun.COM 
282*9430SRaymond.Chen@Sun.COM /* Data structures for UWB Notifications */
283*9430SRaymond.Chen@Sun.COM 
284*9430SRaymond.Chen@Sun.COM /* Notification from device */
285*9430SRaymond.Chen@Sun.COM typedef struct uwb_rceb_notif {
286*9430SRaymond.Chen@Sun.COM 	uwb_rceb_head_t rceb;
287*9430SRaymond.Chen@Sun.COM 	uint8_t		buf[1];
288*9430SRaymond.Chen@Sun.COM } uwb_rceb_notif_t;
289*9430SRaymond.Chen@Sun.COM 
290*9430SRaymond.Chen@Sun.COM typedef struct uwb_notif_get {
291*9430SRaymond.Chen@Sun.COM 	/* wait for milliseconds untile get a notification */
292*9430SRaymond.Chen@Sun.COM 	uint_t		timeout;
293*9430SRaymond.Chen@Sun.COM 	uwb_rceb_notif_t notif;
294*9430SRaymond.Chen@Sun.COM } uwb_notif_get_t;
295*9430SRaymond.Chen@Sun.COM 
296*9430SRaymond.Chen@Sun.COM /*
297*9430SRaymond.Chen@Sun.COM  * UWB_NOTIF_BEACON_RECEIVED, Beacon received notification
298*9430SRaymond.Chen@Sun.COM  * WHCI [3.1.4.2].
299*9430SRaymond.Chen@Sun.COM  * NOTICE:In WUSB Spec, Table 8-98. No bBeaconType. Below follow
300*9430SRaymond.Chen@Sun.COM  * WHCI spec
301*9430SRaymond.Chen@Sun.COM  */
302*9430SRaymond.Chen@Sun.COM typedef struct uwb_rceb_beacon {
303*9430SRaymond.Chen@Sun.COM 	uwb_rceb_head_t rceb;
304*9430SRaymond.Chen@Sun.COM 	uint8_t 	bChannelNumber;
305*9430SRaymond.Chen@Sun.COM 	uint8_t 	bBeaconType;
306*9430SRaymond.Chen@Sun.COM 	uint16_t	wBPSTOffset;
307*9430SRaymond.Chen@Sun.COM 	uint8_t		bLQI;
308*9430SRaymond.Chen@Sun.COM 	uint8_t		bRSSI;
309*9430SRaymond.Chen@Sun.COM 	uint16_t	wBeaconInfoLength;
310*9430SRaymond.Chen@Sun.COM 	uint8_t		BeaconInfo[1];
311*9430SRaymond.Chen@Sun.COM } uwb_rceb_beacon_t;
312*9430SRaymond.Chen@Sun.COM 
313*9430SRaymond.Chen@Sun.COM /* MAC Header field values for beacon frames. ECMA 368 [table 96] */
314*9430SRaymond.Chen@Sun.COM typedef struct uwb_bcfrm_mac_hdr {
315*9430SRaymond.Chen@Sun.COM 	uint16_t	Frame_Control;
316*9430SRaymond.Chen@Sun.COM 	uwb_dev_addr_t	DestAddr;
317*9430SRaymond.Chen@Sun.COM 	uwb_dev_addr_t	SrcAddr;
318*9430SRaymond.Chen@Sun.COM 	uint16_t	Sequence_Control;
319*9430SRaymond.Chen@Sun.COM 	uint16_t	Access_Information;
320*9430SRaymond.Chen@Sun.COM } uwb_bcfrm_mac_hdr_t;
321*9430SRaymond.Chen@Sun.COM 
322*9430SRaymond.Chen@Sun.COM /* Beacon Frame [ECMA-368] page 151 */
323*9430SRaymond.Chen@Sun.COM typedef struct uwb_beacon_frame {
324*9430SRaymond.Chen@Sun.COM 	uwb_bcfrm_mac_hdr_t	hdr;
325*9430SRaymond.Chen@Sun.COM 	uwb_mac_addr_t		Device_Identifier;
326*9430SRaymond.Chen@Sun.COM 	uint8_t			Beacon_Slot_Number;
327*9430SRaymond.Chen@Sun.COM 	uint8_t			Device_Control;
328*9430SRaymond.Chen@Sun.COM 	uint8_t			IEData[1];
329*9430SRaymond.Chen@Sun.COM } uwb_beacon_frame_t;
330*9430SRaymond.Chen@Sun.COM 
331*9430SRaymond.Chen@Sun.COM /* WUSB 1.0. Table 8-99. Beacon Size Change Notification RCEB */
332*9430SRaymond.Chen@Sun.COM typedef struct uwb_rceb_beacon_size_change {
333*9430SRaymond.Chen@Sun.COM 	uwb_rceb_head_t		rceb;
334*9430SRaymond.Chen@Sun.COM 	uint16_t		wNewBeaconSize;
335*9430SRaymond.Chen@Sun.COM } uwb_rceb_beacon_size_change_t;
336*9430SRaymond.Chen@Sun.COM 
337*9430SRaymond.Chen@Sun.COM /* WUSB 1.0. Table 8-100. BPOIE Change Notification RCEB */
338*9430SRaymond.Chen@Sun.COM typedef struct uwb_rceb_bpoie_change {
339*9430SRaymond.Chen@Sun.COM 	uwb_rceb_head_t		rceb;
340*9430SRaymond.Chen@Sun.COM 	uint16_t		wBPOIELength;
341*9430SRaymond.Chen@Sun.COM 	uint8_t			BPOIE[1];
342*9430SRaymond.Chen@Sun.COM } uwb_rceb_bpoie_change_t;
343*9430SRaymond.Chen@Sun.COM 
344*9430SRaymond.Chen@Sun.COM /* WHCI 0.95  Table 3-42. BP Slot Change Notification RCEB Format */
345*9430SRaymond.Chen@Sun.COM typedef struct uwb_rceb_bp_slot_change {
346*9430SRaymond.Chen@Sun.COM 	uwb_rceb_head_t		rceb;
347*9430SRaymond.Chen@Sun.COM 	uint8_t			bNewSlotNumber;
348*9430SRaymond.Chen@Sun.COM } uwb_rceb_bp_slot_change_t;
349*9430SRaymond.Chen@Sun.COM 
350*9430SRaymond.Chen@Sun.COM /* WHCI 0.95 Table 3-45. DRP Availability Changed Notification RCEB Format */
351*9430SRaymond.Chen@Sun.COM typedef struct uwb_rceb_drp_availability {
352*9430SRaymond.Chen@Sun.COM 	uwb_rceb_head_t		rceb;
353*9430SRaymond.Chen@Sun.COM 	uint8_t			DRPAvailability[32]; /* 256 bit bitmap */
354*9430SRaymond.Chen@Sun.COM } uwb_rceb_drp_availability_t;
355*9430SRaymond.Chen@Sun.COM 
356*9430SRaymond.Chen@Sun.COM /* WHCI 0.95 [3.1.4.9] * Table 3-46. DRP Notification RCEB Format */
357*9430SRaymond.Chen@Sun.COM typedef struct uwb_rceb_drp {
358*9430SRaymond.Chen@Sun.COM 	uwb_rceb_head_t		rceb;
359*9430SRaymond.Chen@Sun.COM 	uint16_t 		wSrcAddr;
360*9430SRaymond.Chen@Sun.COM 	uint8_t 		bReason;
361*9430SRaymond.Chen@Sun.COM 	uint8_t 		bBeaconSlotNumber;
362*9430SRaymond.Chen@Sun.COM 	uint16_t 		wIELength;
363*9430SRaymond.Chen@Sun.COM 	uint8_t 		IEData[1];
364*9430SRaymond.Chen@Sun.COM } uwb_rceb_drp_t;
365*9430SRaymond.Chen@Sun.COM 
366*9430SRaymond.Chen@Sun.COM 
367*9430SRaymond.Chen@Sun.COM #ifdef __cplusplus
368*9430SRaymond.Chen@Sun.COM }
369*9430SRaymond.Chen@Sun.COM #endif
370*9430SRaymond.Chen@Sun.COM 
371*9430SRaymond.Chen@Sun.COM #endif	/* _SYS_UWB_UWB_H */
372