1 /* $OpenBSD: if_uathreg.h,v 1.2 2006/09/18 16:34:23 damien Exp $ */ 2 /* $FreeBSD$ */ 3 4 /*- 5 * Copyright (c) 2006 6 * Damien Bergamini <damien.bergamini@free.fr> 7 * Copyright (c) 2006 Sam Leffler, Errno Consulting 8 * 9 * Permission to use, copy, modify, and distribute this software for any 10 * purpose with or without fee is hereby granted, provided that the above 11 * copyright notice and this permission notice appear in all copies. 12 * 13 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 14 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 15 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 16 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 17 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 18 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 19 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 */ 21 22 #define UATH_CONFIG_INDEX 0 23 #define UATH_IFACE_INDEX 0 24 25 /* all fields are big endian */ 26 struct uath_fwblock { 27 uint32_t flags; 28 #define UATH_WRITE_BLOCK (1 << 4) 29 30 uint32_t len; 31 #define UATH_MAX_FWBLOCK_SIZE 2048 32 33 uint32_t total; 34 uint32_t remain; 35 uint32_t rxtotal; 36 uint32_t pad[123]; 37 } __packed; 38 39 #define UATH_MAX_CMDSZ 512 40 41 /* 42 * Messages are passed in Target Endianness. All fixed-size 43 * fields of a WDS Control Message are treated as 32-bit 44 * values and Control Msgs are guaranteed to be 32-bit aligned. 45 * 46 * The format of a WDS Control Message is as follows: 47 * Message Length 32 bits 48 * Message Opcode 32 bits 49 * Message ID 32 bits 50 * parameter 1 51 * parameter 2 52 * ... 53 * 54 * A variable-length parameter, or a parmeter that is larger than 55 * 32 bits is passed as <length, data> pair, where length is a 56 * 32-bit quantity and data is padded to 32 bits. 57 */ 58 struct uath_cmd_hdr { 59 uint32_t len; /* msg length including header */ 60 uint32_t code; /* operation code */ 61 /* NB: these are defined for rev 1.5 firmware; rev 1.6 is different */ 62 /* messages from Host -> Target */ 63 #define WDCMSG_HOST_AVAILABLE 0x01 64 #define WDCMSG_BIND 0x02 65 #define WDCMSG_TARGET_RESET 0x03 66 #define WDCMSG_TARGET_GET_CAPABILITY 0x04 67 #define WDCMSG_TARGET_SET_CONFIG 0x05 68 #define WDCMSG_TARGET_GET_STATUS 0x06 69 #define WDCMSG_TARGET_GET_STATS 0x07 70 #define WDCMSG_TARGET_START 0x08 71 #define WDCMSG_TARGET_STOP 0x09 72 #define WDCMSG_TARGET_ENABLE 0x0a 73 #define WDCMSG_TARGET_DISABLE 0x0b 74 #define WDCMSG_CREATE_CONNECTION 0x0c 75 #define WDCMSG_UPDATE_CONNECT_ATTR 0x0d 76 #define WDCMSG_DELETE_CONNECT 0x0e 77 #define WDCMSG_SEND 0x0f 78 #define WDCMSG_FLUSH 0x10 79 /* messages from Target -> Host */ 80 #define WDCMSG_STATS_UPDATE 0x11 81 #define WDCMSG_BMISS 0x12 82 #define WDCMSG_DEVICE_AVAIL 0x13 83 #define WDCMSG_SEND_COMPLETE 0x14 84 #define WDCMSG_DATA_AVAIL 0x15 85 #define WDCMSG_SET_PWR_MODE 0x16 86 #define WDCMSG_BMISS_ACK 0x17 87 #define WDCMSG_SET_LED_STEADY 0x18 88 #define WDCMSG_SET_LED_BLINK 0x19 89 /* more messages */ 90 #define WDCMSG_SETUP_BEACON_DESC 0x1a 91 #define WDCMSG_BEACON_INIT 0x1b 92 #define WDCMSG_RESET_KEY_CACHE 0x1c 93 #define WDCMSG_RESET_KEY_CACHE_ENTRY 0x1d 94 #define WDCMSG_SET_KEY_CACHE_ENTRY 0x1e 95 #define WDCMSG_SET_DECOMP_MASK 0x1f 96 #define WDCMSG_SET_REGULATORY_DOMAIN 0x20 97 #define WDCMSG_SET_LED_STATE 0x21 98 #define WDCMSG_WRITE_ASSOCID 0x22 99 #define WDCMSG_SET_STA_BEACON_TIMERS 0x23 100 #define WDCMSG_GET_TSF 0x24 101 #define WDCMSG_RESET_TSF 0x25 102 #define WDCMSG_SET_ADHOC_MODE 0x26 103 #define WDCMSG_SET_BASIC_RATE 0x27 104 #define WDCMSG_MIB_CONTROL 0x28 105 #define WDCMSG_GET_CHANNEL_DATA 0x29 106 #define WDCMSG_GET_CUR_RSSI 0x2a 107 #define WDCMSG_SET_ANTENNA_SWITCH 0x2b 108 #define WDCMSG_USE_SHORT_SLOT_TIME 0x2f 109 #define WDCMSG_SET_POWER_MODE 0x30 110 #define WDCMSG_SETUP_PSPOLL_DESC 0x31 111 #define WDCMSG_SET_RX_MULTICAST_FILTER 0x32 112 #define WDCMSG_RX_FILTER 0x33 113 #define WDCMSG_PER_CALIBRATION 0x34 114 #define WDCMSG_RESET 0x35 115 #define WDCMSG_DISABLE 0x36 116 #define WDCMSG_PHY_DISABLE 0x37 117 #define WDCMSG_SET_TX_POWER_LIMIT 0x38 118 #define WDCMSG_SET_TX_QUEUE_PARAMS 0x39 119 #define WDCMSG_SETUP_TX_QUEUE 0x3a 120 #define WDCMSG_RELEASE_TX_QUEUE 0x3b 121 #define WDCMSG_SET_DEFAULT_KEY 0x43 122 uint32_t msgid; /* msg id (supplied by host) */ 123 uint32_t magic; /* response desired/target status */ 124 uint32_t debug[4]; /* debug data area */ 125 /* msg data follows */ 126 } __packed; 127 128 struct uath_chunk { 129 uint8_t seqnum; /* sequence number for ordering */ 130 uint8_t flags; 131 #define UATH_CFLAGS_FINAL 0x01 /* final chunk of a msg */ 132 #define UATH_CFLAGS_RXMSG 0x02 /* chunk contains rx completion */ 133 #define UATH_CFLAGS_DEBUG 0x04 /* for debugging */ 134 uint16_t length; /* chunk size in bytes */ 135 /* chunk data follows */ 136 } __packed; 137 138 #define UATH_RX_DUMMYSIZE 4 139 140 /* 141 * Message format for a WDCMSG_DATA_AVAIL message from Target to Host. 142 */ 143 struct uath_rx_desc { 144 uint32_t len; /* msg length including header */ 145 uint32_t code; /* WDCMSG_DATA_AVAIL */ 146 uint32_t gennum; /* generation number */ 147 uint32_t status; /* start of RECEIVE_INFO */ 148 #define UATH_STATUS_OK 0 149 #define UATH_STATUS_STOP_IN_PROGRESS 1 150 #define UATH_STATUS_CRC_ERR 2 151 #define UATH_STATUS_PHY_ERR 3 152 #define UATH_STATUS_DECRYPT_CRC_ERR 4 153 #define UATH_STATUS_DECRYPT_MIC_ERR 5 154 #define UATH_STATUS_DECOMP_ERR 6 155 #define UATH_STATUS_KEY_ERR 7 156 #define UATH_STATUS_ERR 8 157 uint32_t tstamp_low; /* low-order 32-bits of rx timestamp */ 158 uint32_t tstamp_high; /* high-order 32-bits of rx timestamp */ 159 uint32_t framelen; /* frame length */ 160 uint32_t rate; /* rx rate code */ 161 uint32_t antenna; 162 int32_t rssi; 163 uint32_t channel; 164 uint32_t phyerror; 165 uint32_t connix; /* key table ix for bss traffic */ 166 uint32_t decrypterror; 167 uint32_t keycachemiss; 168 uint32_t pad; /* XXX? */ 169 } __packed; 170 171 struct uath_tx_desc { 172 uint32_t msglen; 173 uint32_t msgid; /* msg id (supplied by host) */ 174 uint32_t type; /* opcode: WDMSG_SEND or WDCMSG_FLUSH */ 175 uint32_t txqid; /* tx queue id and flags */ 176 #define UATH_TXQID_MASK 0x0f 177 #define UATH_TXQID_MINRATE 0x10 /* use min tx rate */ 178 #define UATH_TXQID_FF 0x20 /* content is fast frame */ 179 uint32_t connid; /* tx connection id */ 180 #define UATH_ID_INVALID 0xffffffff /* for sending prior to connection */ 181 uint32_t flags; /* non-zero if response desired */ 182 #define UATH_TX_NOTIFY (1 << 24) /* f/w will send a UATH_NOTIF_TX */ 183 uint32_t buflen; /* payload length */ 184 } __packed; 185 186 struct uath_cmd_host_available { 187 uint32_t sw_ver_major; 188 uint32_t sw_ver_minor; 189 uint32_t sw_ver_patch; 190 uint32_t sw_ver_build; 191 } __packed; 192 #define ATH_SW_VER_MAJOR 1 193 #define ATH_SW_VER_MINOR 5 194 #define ATH_SW_VER_PATCH 0 195 #define ATH_SW_VER_BUILD 9999 196 197 struct uath_cmd_bind { 198 uint32_t targethandle; 199 uint32_t hostapiversion; 200 } __packed; 201 202 /* structure for command WDCMSG_RESET */ 203 struct uath_cmd_reset { 204 uint32_t flags; /* channel flags */ 205 #define UATH_CHAN_TURBO 0x0100 206 #define UATH_CHAN_CCK 0x0200 207 #define UATH_CHAN_OFDM 0x0400 208 #define UATH_CHAN_2GHZ 0x1000 209 #define UATH_CHAN_5GHZ 0x2000 210 uint32_t freq; /* channel frequency */ 211 uint32_t maxrdpower; 212 uint32_t cfgctl; 213 uint32_t twiceantennareduction; 214 uint32_t channelchange; 215 uint32_t keeprccontent; 216 } __packed; 217 218 /* structure for commands UATH_CMD_READ_MAC and UATH_CMD_READ_EEPROM */ 219 struct uath_read_mac { 220 uint32_t len; 221 uint8_t data[32]; 222 } __packed; 223 224 /* structure for command UATH_CMD_WRITE_MAC */ 225 struct uath_write_mac { 226 uint32_t reg; 227 uint32_t len; 228 uint8_t data[32]; 229 } __packed; 230 231 /* structure for command UATH_CMD_STA_JOIN */ 232 struct uath_cmd_join_bss { 233 uint32_t bssid; /* NB: use zero */ 234 uint32_t bssmac[2]; /* bssid mac address */ 235 uint32_t bsstype; 236 uint32_t wlanmode; 237 uint32_t beaconinterval; 238 uint32_t dtiminterval; 239 uint32_t cfpinterval; 240 uint32_t atimwindow; 241 uint32_t defaultrateix; 242 uint32_t shortslottime11g; 243 uint32_t sleepduration; 244 uint32_t bmissthreshold; 245 uint32_t tcppowerlimit; 246 uint32_t quietduration; 247 uint32_t quietoffset; 248 uint32_t quietackctsallow; 249 uint32_t bssdefaultkey; /* XXX? */ 250 } __packed; 251 252 struct uath_cmd_assoc_bss { 253 uint32_t bssid; 254 uint32_t associd; 255 } __packed; 256 257 struct uath_cmd_start_bss { 258 uint32_t bssid; 259 } __packed; 260 261 /* structure for command UATH_CMD_0C */ 262 struct uath_cmd_0c { 263 uint32_t magic1; 264 uint32_t magic2; 265 uint32_t magic3; 266 } __packed; 267 268 struct uath_cmd_ledsteady { /* WDCMSG_SET_LED_STEADY */ 269 uint32_t lednum; 270 #define UATH_LED_LINK 0 271 #define UATH_LED_ACTIVITY 1 272 uint32_t ledmode; 273 #define UATH_LED_OFF 0 274 #define UATH_LED_ON 1 275 } __packed; 276 277 struct uath_cmd_ledblink { /* WDCMSG_SET_LED_BLINK */ 278 uint32_t lednum; 279 uint32_t ledmode; 280 uint32_t blinkrate; 281 uint32_t slowmode; 282 } __packed; 283 284 struct uath_cmd_ledstate { /* WDCMSG_SET_LED_STATE */ 285 uint32_t connected; 286 } __packed; 287 288 struct uath_connkey_rec { 289 uint8_t bssid[IEEE80211_ADDR_LEN]; 290 uint32_t keyiv; 291 uint32_t extkeyiv; 292 uint16_t keyflags; 293 uint16_t keylen; 294 uint16_t keytype; /* WEP, TKIP or AES */ 295 /* As far as I know, MIPS 4Kp is 32-bit processor */ 296 uint32_t priv; 297 uint8_t keyval[32]; 298 uint16_t aes_keylen; 299 uint8_t aes_keyval[16]; 300 uint8_t mic_txkeyval[8]; 301 uint8_t mic_rxkeyval[8]; 302 int64_t keyrsc[17]; 303 int32_t keytsc[17]; 304 int32_t keyexttsc[17]; 305 } __packed; 306 307 /* structure for command UATH_CMD_CRYPTO */ 308 struct uath_cmd_crypto { 309 uint32_t keyidx; 310 #define UATH_DEFAULT_KEY 6 311 uint32_t xorkey; 312 uint32_t size; 313 struct uath_connkey_rec rec; 314 } __packed; 315 316 struct uath_cmd_rateset { 317 uint8_t length; 318 #define UATH_MAX_NRATES 32 319 uint8_t set[UATH_MAX_NRATES]; 320 }; 321 322 /* structure for command WDCMSG_SET_BASIC_RATE */ 323 struct uath_cmd_rates { 324 uint32_t connid; 325 uint32_t keeprccontent; 326 uint32_t size; 327 struct uath_cmd_rateset rateset; 328 } __packed; 329 330 enum { 331 WLAN_MODE_NONE = 0, 332 WLAN_MODE_11b, 333 WLAN_MODE_11a, 334 WLAN_MODE_11g, 335 WLAN_MODE_11a_TURBO, 336 WLAN_MODE_11g_TURBO, 337 WLAN_MODE_11a_TURBO_PRIME, 338 WLAN_MODE_11g_TURBO_PRIME, 339 WLAN_MODE_11a_XR, 340 WLAN_MODE_11g_XR, 341 }; 342 343 struct uath_cmd_connection_attr { 344 uint32_t longpreambleonly; 345 struct uath_cmd_rateset rateset; 346 uint32_t wlanmode; 347 } __packed; 348 349 /* structure for command WDCMSG_CREATE_CONNECTION */ 350 struct uath_cmd_create_connection { 351 uint32_t connid; 352 uint32_t bssid; 353 uint32_t size; 354 struct uath_cmd_connection_attr connattr; 355 } __packed; 356 357 struct uath_cmd_txq_setparams { /* WDCMSG_SET_TX_QUEUE_PARAMS */ 358 uint32_t qnum; 359 uint32_t aifs; 360 uint32_t logcwmin; 361 uint32_t logcwmax; 362 uint32_t bursttime; 363 uint32_t qflags; 364 } __packed; 365 366 struct uath_cmd_txq_attr { 367 uint32_t priority; 368 uint32_t aifs; 369 uint32_t logcwmin; 370 uint32_t logcwmax; 371 uint32_t bursttime; 372 uint32_t mode; 373 uint32_t qflags; 374 } __packed; 375 376 struct uath_cmd_txq_setup { /* WDCMSG_SETUP_TX_QUEUE */ 377 uint32_t qid; 378 uint32_t len; 379 struct uath_cmd_txq_attr attr; 380 } __packed; 381 382 struct uath_cmd_stoptxdma { /* WDCMSG_STOP_TX_DMA */ 383 uint32_t qnum; 384 uint32_t msec; 385 } __packed; 386 387 /* structure for command UATH_CMD_31 */ 388 struct uath_cmd_31 { 389 uint32_t magic1; 390 uint32_t magic2; 391 } __packed; 392 393 struct uath_cmd_rx_filter { /* WDCMSG_RX_FILTER */ 394 uint32_t bits; 395 #define UATH_FILTER_RX_UCAST 0x00000001 396 #define UATH_FILTER_RX_MCAST 0x00000002 397 #define UATH_FILTER_RX_BCAST 0x00000004 398 #define UATH_FILTER_RX_CONTROL 0x00000008 399 #define UATH_FILTER_RX_BEACON 0x00000010 /* beacon frames */ 400 #define UATH_FILTER_RX_PROM 0x00000020 /* promiscuous mode */ 401 #define UATH_FILTER_RX_PHY_ERR 0x00000040 /* phy errors */ 402 #define UATH_FILTER_RX_PHY_RADAR 0x00000080 /* radar phy errors */ 403 #define UATH_FILTER_RX_XR_POOL 0x00000400 /* XR group polls */ 404 #define UATH_FILTER_RX_PROBE_REQ 0x00000800 405 uint32_t op; 406 #define UATH_FILTER_OP_INIT 0x0 407 #define UATH_FILTER_OP_SET 0x1 408 #define UATH_FILTER_OP_CLEAR 0x2 409 #define UATH_FILTER_OP_TEMP 0x3 410 #define UATH_FILTER_OP_RESTORE 0x4 411 } __packed; 412 413 struct uath_cmd_rx_mcast_filter { /* WDCMSG_SET_RX_MCAST_FILTER */ 414 uint32_t filter0; 415 uint32_t filter1; 416 } __packed; 417 418 struct uath_cmd_set_associd { /* WDCMSG_WRITE_ASSOCID */ 419 uint32_t defaultrateix; 420 uint32_t associd; 421 uint32_t timoffset; 422 uint32_t turboprime; 423 uint32_t bssid[2]; 424 } __packed; 425 426 struct uath_cmd_set_stabeacon_timers { /* WDCMSG_SET_STA_BEACON_TIMERS */ 427 uint32_t nexttbtt; 428 uint32_t nextdtim; 429 uint32_t nextcfp; 430 uint32_t beaconperiod; 431 uint32_t dtimperiod; 432 uint32_t cfpperiod; 433 uint32_t cfpduration; 434 uint32_t sleepduration; 435 uint32_t bsmissthreshold; 436 } __packed; 437 438 enum { 439 CFG_NONE, /* Sentinal to indicate "no config" */ 440 CFG_REG_DOMAIN, /* Regulatory Domain */ 441 CFG_RATE_CONTROL_ENABLE, 442 CFG_DEF_XMIT_DATA_RATE, /* NB: if rate control is not enabled */ 443 CFG_HW_TX_RETRIES, 444 CFG_SW_TX_RETRIES, 445 CFG_SLOW_CLOCK_ENABLE, 446 CFG_COMP_PROC, 447 CFG_USER_RTS_THRESHOLD, 448 CFG_XR2NORM_RATE_THRESHOLD, 449 CFG_XRMODE_SWITCH_COUNT, 450 CFG_PROTECTION_TYPE, 451 CFG_BURST_SEQ_THRESHOLD, 452 CFG_ABOLT, 453 CFG_IQ_LOG_COUNT_MAX, 454 CFG_MODE_CTS, 455 CFG_WME_ENABLED, 456 CFG_GPRS_CBR_PERIOD, 457 CFG_SERVICE_TYPE, 458 /* MAC Address to use. Overrides EEPROM */ 459 CFG_MAC_ADDR, 460 CFG_DEBUG_EAR, 461 CFG_INIT_REGS, 462 /* An ID for use in error & debug messages */ 463 CFG_DEBUG_ID, 464 CFG_COMP_WIN_SZ, 465 CFG_DIVERSITY_CTL, 466 CFG_TP_SCALE, 467 CFG_TPC_HALF_DBM5, 468 CFG_TPC_HALF_DBM2, 469 CFG_OVERRD_TX_POWER, 470 CFG_USE_32KHZ_CLOCK, 471 CFG_GMODE_PROTECTION, 472 CFG_GMODE_PROTECT_RATE_INDEX, 473 CFG_GMODE_NON_ERP_PREAMBLE, 474 CFG_WDC_TRANSPORT_CHUNK_SIZE, 475 }; 476 477 enum { 478 /* Sentinal to indicate "no capability" */ 479 CAP_NONE, 480 CAP_ALL, /* ALL capabilities */ 481 CAP_TARGET_VERSION, 482 CAP_TARGET_REVISION, 483 CAP_MAC_VERSION, 484 CAP_MAC_REVISION, 485 CAP_PHY_REVISION, 486 CAP_ANALOG_5GHz_REVISION, 487 CAP_ANALOG_2GHz_REVISION, 488 /* Target supports WDC message debug features */ 489 CAP_DEBUG_WDCMSG_SUPPORT, 490 491 CAP_REG_DOMAIN, 492 CAP_COUNTRY_CODE, 493 CAP_REG_CAP_BITS, 494 495 CAP_WIRELESS_MODES, 496 CAP_CHAN_SPREAD_SUPPORT, 497 CAP_SLEEP_AFTER_BEACON_BROKEN, 498 CAP_COMPRESS_SUPPORT, 499 CAP_BURST_SUPPORT, 500 CAP_FAST_FRAMES_SUPPORT, 501 CAP_CHAP_TUNING_SUPPORT, 502 CAP_TURBOG_SUPPORT, 503 CAP_TURBO_PRIME_SUPPORT, 504 CAP_DEVICE_TYPE, 505 CAP_XR_SUPPORT, 506 CAP_WME_SUPPORT, 507 CAP_TOTAL_QUEUES, 508 CAP_CONNECTION_ID_MAX, /* Should absorb CAP_KEY_CACHE_SIZE */ 509 510 CAP_LOW_5GHZ_CHAN, 511 CAP_HIGH_5GHZ_CHAN, 512 CAP_LOW_2GHZ_CHAN, 513 CAP_HIGH_2GHZ_CHAN, 514 515 CAP_MIC_AES_CCM, 516 CAP_MIC_CKIP, 517 CAP_MIC_TKIP, 518 CAP_MIC_TKIP_WME, 519 CAP_CIPHER_AES_CCM, 520 CAP_CIPHER_CKIP, 521 CAP_CIPHER_TKIP, 522 523 CAP_TWICE_ANTENNAGAIN_5G, 524 CAP_TWICE_ANTENNAGAIN_2G, 525 }; 526 527 enum { 528 ST_NONE, /* Sentinal to indicate "no status" */ 529 ST_ALL, 530 ST_SERVICE_TYPE, 531 ST_WLAN_MODE, 532 ST_FREQ, 533 ST_BAND, 534 ST_LAST_RSSI, 535 ST_PS_FRAMES_DROPPED, 536 ST_CACHED_DEF_ANT, 537 ST_COUNT_OTHER_RX_ANT, 538 ST_USE_FAST_DIVERSITY, 539 ST_MAC_ADDR, 540 ST_RX_GENERATION_NUM, 541 ST_TX_QUEUE_DEPTH, 542 ST_SERIAL_NUMBER, 543 ST_WDC_TRANSPORT_CHUNK_SIZE, 544 }; 545 546 enum { 547 BSS_ATTR_BEACON_INTERVAL, 548 BSS_ATTR_DTIM_INTERVAL, 549 BSS_ATTR_CFP_INTERVAL, 550 BSS_ATTR_CFP_MAX_DURATION, 551 BSS_ATTR_ATIM_WINDOW, 552 BSS_ATTR_DEFAULT_RATE_INDEX, 553 BSS_ATTR_SHORT_SLOT_TIME_11g, 554 BSS_ATTR_SLEEP_DURATION, 555 BSS_ATTR_BMISS_THRESHOLD, 556 BSS_ATTR_TPC_POWER_LIMIT, 557 BSS_ATTR_BSS_KEY_UPDATE, 558 }; 559 560 struct uath_cmd_update_bss_attribute { 561 uint32_t bssid; 562 uint32_t attribute; /* BSS_ATTR_BEACON_INTERVAL, et al. */ 563 uint32_t cfgsize; /* should be zero 0 */ 564 uint32_t cfgdata; 565 }; 566 567 struct uath_cmd_update_bss_attribute_key { 568 uint32_t bssid; 569 uint32_t attribute; /* BSS_ATTR_BSS_KEY_UPDATE */ 570 uint32_t cfgsize; /* size of remaining data */ 571 uint32_t bsskeyix; 572 uint32_t isdefaultkey; 573 uint32_t keyiv; /* IV generation control */ 574 uint32_t extkeyiv; /* extended IV for TKIP & CCM */ 575 uint32_t keyflags; 576 uint32_t keytype; 577 uint32_t initvalue; /* XXX */ 578 uint32_t keyval[4]; 579 uint32_t mictxkeyval[2]; 580 uint32_t micrxkeyval[2]; 581 uint32_t keyrsc[2]; 582 }; 583 584 enum { 585 TARGET_DEVICE_AWAKE, 586 TARGET_DEVICE_SLEEP, 587 TARGET_DEVICE_PWRDN, 588 TARGET_DEVICE_PWRSAVE, 589 TARGET_DEVICE_SUSPEND, 590 TARGET_DEVICE_RESUME, 591 }; 592 593 #define UATH_MAX_TXBUFSZ \ 594 (sizeof(struct uath_chunk) + sizeof(struct uath_tx_desc) + \ 595 IEEE80211_MAX_LEN) 596 597 /* 598 * it's not easy to measure how the chunk is passed into the host if the target 599 * passed the multi-chunks so just we check a minimal size we can imagine. 600 */ 601 #define UATH_MIN_RXBUFSZ (sizeof(struct uath_chunk)) 602