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