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