1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * This file function prototypes, data structure 4 * and definitions for all the host/station commands 5 */ 6 7 #ifndef _LBS_HOST_H_ 8 #define _LBS_HOST_H_ 9 10 #include "types.h" 11 #include "defs.h" 12 13 #define DEFAULT_AD_HOC_CHANNEL 6 14 15 #define CMD_OPTION_WAITFORRSP 0x0002 16 17 /* Host command IDs */ 18 19 /* 20 * Return command are almost always the same as the host command, but with 21 * bit 15 set high. There are a few exceptions, though... 22 */ 23 #define CMD_RET(cmd) (0x8000 | cmd) 24 25 /* Return command convention exceptions: */ 26 #define CMD_RET_802_11_ASSOCIATE 0x8012 27 28 /* Command codes */ 29 #define CMD_GET_HW_SPEC 0x0003 30 #define CMD_EEPROM_UPDATE 0x0004 31 #define CMD_802_11_RESET 0x0005 32 #define CMD_802_11_SCAN 0x0006 33 #define CMD_802_11_GET_LOG 0x000b 34 #define CMD_MAC_MULTICAST_ADR 0x0010 35 #define CMD_802_11_AUTHENTICATE 0x0011 36 #define CMD_802_11_EEPROM_ACCESS 0x0059 37 #define CMD_802_11_ASSOCIATE 0x0050 38 #define CMD_802_11_SET_WEP 0x0013 39 #define CMD_802_11_GET_STAT 0x0014 40 #define CMD_802_3_GET_STAT 0x0015 41 #define CMD_802_11_SNMP_MIB 0x0016 42 #define CMD_MAC_REG_MAP 0x0017 43 #define CMD_BBP_REG_MAP 0x0018 44 #define CMD_MAC_REG_ACCESS 0x0019 45 #define CMD_BBP_REG_ACCESS 0x001a 46 #define CMD_RF_REG_ACCESS 0x001b 47 #define CMD_802_11_RADIO_CONTROL 0x001c 48 #define CMD_802_11_RF_CHANNEL 0x001d 49 #define CMD_802_11_RF_TX_POWER 0x001e 50 #define CMD_802_11_RSSI 0x001f 51 #define CMD_802_11_RF_ANTENNA 0x0020 52 #define CMD_802_11_PS_MODE 0x0021 53 #define CMD_802_11_DATA_RATE 0x0022 54 #define CMD_RF_REG_MAP 0x0023 55 #define CMD_802_11_DEAUTHENTICATE 0x0024 56 #define CMD_802_11_REASSOCIATE 0x0025 57 #define CMD_MAC_CONTROL 0x0028 58 #define CMD_802_11_AD_HOC_START 0x002b 59 #define CMD_802_11_AD_HOC_JOIN 0x002c 60 #define CMD_802_11_QUERY_TKIP_REPLY_CNTRS 0x002e 61 #define CMD_802_11_ENABLE_RSN 0x002f 62 #define CMD_802_11_SET_AFC 0x003c 63 #define CMD_802_11_GET_AFC 0x003d 64 #define CMD_802_11_DEEP_SLEEP 0x003e 65 #define CMD_802_11_AD_HOC_STOP 0x0040 66 #define CMD_802_11_HOST_SLEEP_CFG 0x0043 67 #define CMD_802_11_WAKEUP_CONFIRM 0x0044 68 #define CMD_802_11_HOST_SLEEP_ACTIVATE 0x0045 69 #define CMD_802_11_BEACON_STOP 0x0049 70 #define CMD_802_11_MAC_ADDRESS 0x004d 71 #define CMD_802_11_LED_GPIO_CTRL 0x004e 72 #define CMD_802_11_BAND_CONFIG 0x0058 73 #define CMD_GSPI_BUS_CONFIG 0x005a 74 #define CMD_802_11D_DOMAIN_INFO 0x005b 75 #define CMD_802_11_KEY_MATERIAL 0x005e 76 #define CMD_802_11_SLEEP_PARAMS 0x0066 77 #define CMD_802_11_INACTIVITY_TIMEOUT 0x0067 78 #define CMD_802_11_SLEEP_PERIOD 0x0068 79 #define CMD_802_11_TPC_CFG 0x0072 80 #define CMD_802_11_PA_CFG 0x0073 81 #define CMD_802_11_FW_WAKE_METHOD 0x0074 82 #define CMD_802_11_SUBSCRIBE_EVENT 0x0075 83 #define CMD_802_11_RATE_ADAPT_RATESET 0x0076 84 #define CMD_802_11_TX_RATE_QUERY 0x007f 85 #define CMD_GET_TSF 0x0080 86 #define CMD_BT_ACCESS 0x0087 87 #define CMD_FWT_ACCESS 0x0095 88 #define CMD_802_11_MONITOR_MODE 0x0098 89 #define CMD_MESH_ACCESS 0x009b 90 #define CMD_MESH_CONFIG_OLD 0x00a3 91 #define CMD_MESH_CONFIG 0x00ac 92 #define CMD_SET_BOOT2_VER 0x00a5 93 #define CMD_FUNC_INIT 0x00a9 94 #define CMD_FUNC_SHUTDOWN 0x00aa 95 #define CMD_802_11_BEACON_CTRL 0x00b0 96 97 /* For the IEEE Power Save */ 98 #define PS_MODE_ACTION_ENTER_PS 0x0030 99 #define PS_MODE_ACTION_EXIT_PS 0x0031 100 #define PS_MODE_ACTION_SLEEP_CONFIRMED 0x0034 101 102 #define CMD_ENABLE_RSN 0x0001 103 #define CMD_DISABLE_RSN 0x0000 104 105 #define CMD_ACT_GET 0x0000 106 #define CMD_ACT_SET 0x0001 107 108 /* Define action or option for CMD_802_11_SET_WEP */ 109 #define CMD_ACT_ADD 0x0002 110 #define CMD_ACT_REMOVE 0x0004 111 112 #define CMD_TYPE_WEP_40_BIT 0x01 113 #define CMD_TYPE_WEP_104_BIT 0x02 114 115 #define CMD_NUM_OF_WEP_KEYS 4 116 117 #define CMD_WEP_KEY_INDEX_MASK 0x3fff 118 119 /* Define action or option for CMD_802_11_SCAN */ 120 #define CMD_BSS_TYPE_BSS 0x0001 121 #define CMD_BSS_TYPE_IBSS 0x0002 122 #define CMD_BSS_TYPE_ANY 0x0003 123 124 /* Define action or option for CMD_802_11_SCAN */ 125 #define CMD_SCAN_TYPE_ACTIVE 0x0000 126 #define CMD_SCAN_TYPE_PASSIVE 0x0001 127 128 #define CMD_SCAN_RADIO_TYPE_BG 0 129 130 #define CMD_SCAN_PROBE_DELAY_TIME 0 131 132 /* Define action or option for CMD_MAC_CONTROL */ 133 #define CMD_ACT_MAC_RX_ON 0x0001 134 #define CMD_ACT_MAC_TX_ON 0x0002 135 #define CMD_ACT_MAC_LOOPBACK_ON 0x0004 136 #define CMD_ACT_MAC_WEP_ENABLE 0x0008 137 #define CMD_ACT_MAC_INT_ENABLE 0x0010 138 #define CMD_ACT_MAC_MULTICAST_ENABLE 0x0020 139 #define CMD_ACT_MAC_BROADCAST_ENABLE 0x0040 140 #define CMD_ACT_MAC_PROMISCUOUS_ENABLE 0x0080 141 #define CMD_ACT_MAC_ALL_MULTICAST_ENABLE 0x0100 142 #define CMD_ACT_MAC_STRICT_PROTECTION_ENABLE 0x0400 143 144 /* Event flags for CMD_802_11_SUBSCRIBE_EVENT */ 145 #define CMD_SUBSCRIBE_RSSI_LOW 0x0001 146 #define CMD_SUBSCRIBE_SNR_LOW 0x0002 147 #define CMD_SUBSCRIBE_FAILCOUNT 0x0004 148 #define CMD_SUBSCRIBE_BCNMISS 0x0008 149 #define CMD_SUBSCRIBE_RSSI_HIGH 0x0010 150 #define CMD_SUBSCRIBE_SNR_HIGH 0x0020 151 152 #define RADIO_PREAMBLE_LONG 0x00 153 #define RADIO_PREAMBLE_SHORT 0x02 154 #define RADIO_PREAMBLE_AUTO 0x04 155 156 /* Define action or option for CMD_802_11_RF_CHANNEL */ 157 #define CMD_OPT_802_11_RF_CHANNEL_GET 0x00 158 #define CMD_OPT_802_11_RF_CHANNEL_SET 0x01 159 160 /* Define action or option for CMD_802_11_DATA_RATE */ 161 #define CMD_ACT_SET_TX_AUTO 0x0000 162 #define CMD_ACT_SET_TX_FIX_RATE 0x0001 163 #define CMD_ACT_GET_TX_RATE 0x0002 164 165 /* Options for CMD_802_11_FW_WAKE_METHOD */ 166 #define CMD_WAKE_METHOD_UNCHANGED 0x0000 167 #define CMD_WAKE_METHOD_COMMAND_INT 0x0001 168 #define CMD_WAKE_METHOD_GPIO 0x0002 169 170 /* Object IDs for CMD_802_11_SNMP_MIB */ 171 #define SNMP_MIB_OID_BSS_TYPE 0x0000 172 #define SNMP_MIB_OID_OP_RATE_SET 0x0001 173 #define SNMP_MIB_OID_BEACON_PERIOD 0x0002 /* Reserved on v9+ */ 174 #define SNMP_MIB_OID_DTIM_PERIOD 0x0003 /* Reserved on v9+ */ 175 #define SNMP_MIB_OID_ASSOC_TIMEOUT 0x0004 /* Reserved on v9+ */ 176 #define SNMP_MIB_OID_RTS_THRESHOLD 0x0005 177 #define SNMP_MIB_OID_SHORT_RETRY_LIMIT 0x0006 178 #define SNMP_MIB_OID_LONG_RETRY_LIMIT 0x0007 179 #define SNMP_MIB_OID_FRAG_THRESHOLD 0x0008 180 #define SNMP_MIB_OID_11D_ENABLE 0x0009 181 #define SNMP_MIB_OID_11H_ENABLE 0x000A 182 183 /* Define action or option for CMD_BT_ACCESS */ 184 enum cmd_bt_access_opts { 185 /* The bt commands start at 5 instead of 1 because the old dft commands 186 * are mapped to 1-4. These old commands are no longer maintained and 187 * should not be called. 188 */ 189 CMD_ACT_BT_ACCESS_ADD = 5, 190 CMD_ACT_BT_ACCESS_DEL, 191 CMD_ACT_BT_ACCESS_LIST, 192 CMD_ACT_BT_ACCESS_RESET, 193 CMD_ACT_BT_ACCESS_SET_INVERT, 194 CMD_ACT_BT_ACCESS_GET_INVERT 195 }; 196 197 /* Define action or option for CMD_FWT_ACCESS */ 198 enum cmd_fwt_access_opts { 199 CMD_ACT_FWT_ACCESS_ADD = 1, 200 CMD_ACT_FWT_ACCESS_DEL, 201 CMD_ACT_FWT_ACCESS_LOOKUP, 202 CMD_ACT_FWT_ACCESS_LIST, 203 CMD_ACT_FWT_ACCESS_LIST_ROUTE, 204 CMD_ACT_FWT_ACCESS_LIST_NEIGHBOR, 205 CMD_ACT_FWT_ACCESS_RESET, 206 CMD_ACT_FWT_ACCESS_CLEANUP, 207 CMD_ACT_FWT_ACCESS_TIME, 208 }; 209 210 /* Define action or option for CMD_802_11_HOST_SLEEP_CFG */ 211 enum cmd_wol_cfg_opts { 212 CMD_ACT_ACTION_NONE = 0, 213 CMD_ACT_SET_WOL_RULE, 214 CMD_ACT_GET_WOL_RULE, 215 CMD_ACT_RESET_WOL_RULE, 216 }; 217 218 /* Define action or option for CMD_MESH_ACCESS */ 219 enum cmd_mesh_access_opts { 220 CMD_ACT_MESH_GET_TTL = 1, 221 CMD_ACT_MESH_SET_TTL, 222 CMD_ACT_MESH_GET_STATS, 223 CMD_ACT_MESH_GET_ANYCAST, 224 CMD_ACT_MESH_SET_ANYCAST, 225 CMD_ACT_MESH_SET_LINK_COSTS, 226 CMD_ACT_MESH_GET_LINK_COSTS, 227 CMD_ACT_MESH_SET_BCAST_RATE, 228 CMD_ACT_MESH_GET_BCAST_RATE, 229 CMD_ACT_MESH_SET_RREQ_DELAY, 230 CMD_ACT_MESH_GET_RREQ_DELAY, 231 CMD_ACT_MESH_SET_ROUTE_EXP, 232 CMD_ACT_MESH_GET_ROUTE_EXP, 233 CMD_ACT_MESH_SET_AUTOSTART_ENABLED, 234 CMD_ACT_MESH_GET_AUTOSTART_ENABLED, 235 CMD_ACT_MESH_SET_GET_PRB_RSP_LIMIT = 17, 236 }; 237 238 /* Define actions and types for CMD_MESH_CONFIG */ 239 enum cmd_mesh_config_actions { 240 CMD_ACT_MESH_CONFIG_STOP = 0, 241 CMD_ACT_MESH_CONFIG_START, 242 CMD_ACT_MESH_CONFIG_SET, 243 CMD_ACT_MESH_CONFIG_GET, 244 }; 245 246 enum cmd_mesh_config_types { 247 CMD_TYPE_MESH_SET_BOOTFLAG = 1, 248 CMD_TYPE_MESH_SET_BOOTTIME, 249 CMD_TYPE_MESH_SET_DEF_CHANNEL, 250 CMD_TYPE_MESH_SET_MESH_IE, 251 CMD_TYPE_MESH_GET_DEFAULTS, 252 CMD_TYPE_MESH_GET_MESH_IE, /* GET_DEFAULTS is superset of GET_MESHIE */ 253 }; 254 255 /* Card Event definition */ 256 #define MACREG_INT_CODE_TX_PPA_FREE 0 257 #define MACREG_INT_CODE_TX_DMA_DONE 1 258 #define MACREG_INT_CODE_LINK_LOST_W_SCAN 2 259 #define MACREG_INT_CODE_LINK_LOST_NO_SCAN 3 260 #define MACREG_INT_CODE_LINK_SENSED 4 261 #define MACREG_INT_CODE_CMD_FINISHED 5 262 #define MACREG_INT_CODE_MIB_CHANGED 6 263 #define MACREG_INT_CODE_INIT_DONE 7 264 #define MACREG_INT_CODE_DEAUTHENTICATED 8 265 #define MACREG_INT_CODE_DISASSOCIATED 9 266 #define MACREG_INT_CODE_PS_AWAKE 10 267 #define MACREG_INT_CODE_PS_SLEEP 11 268 #define MACREG_INT_CODE_MIC_ERR_MULTICAST 13 269 #define MACREG_INT_CODE_MIC_ERR_UNICAST 14 270 #define MACREG_INT_CODE_WM_AWAKE 15 271 #define MACREG_INT_CODE_DEEP_SLEEP_AWAKE 16 272 #define MACREG_INT_CODE_ADHOC_BCN_LOST 17 273 #define MACREG_INT_CODE_HOST_AWAKE 18 274 #define MACREG_INT_CODE_STOP_TX 19 275 #define MACREG_INT_CODE_START_TX 20 276 #define MACREG_INT_CODE_CHANNEL_SWITCH 21 277 #define MACREG_INT_CODE_MEASUREMENT_RDY 22 278 #define MACREG_INT_CODE_WMM_CHANGE 23 279 #define MACREG_INT_CODE_BG_SCAN_REPORT 24 280 #define MACREG_INT_CODE_RSSI_LOW 25 281 #define MACREG_INT_CODE_SNR_LOW 26 282 #define MACREG_INT_CODE_MAX_FAIL 27 283 #define MACREG_INT_CODE_RSSI_HIGH 28 284 #define MACREG_INT_CODE_SNR_HIGH 29 285 #define MACREG_INT_CODE_MESH_AUTO_STARTED 35 286 #define MACREG_INT_CODE_FIRMWARE_READY 48 287 288 289 /* 802.11-related definitions */ 290 291 /* TxPD descriptor */ 292 struct txpd { 293 /* union to cope up with later FW revisions */ 294 union { 295 /* Current Tx packet status */ 296 __le32 tx_status; 297 struct { 298 /* BSS type: client, AP, etc. */ 299 u8 bss_type; 300 /* BSS number */ 301 u8 bss_num; 302 /* Reserved */ 303 __le16 reserved; 304 } bss; 305 } u; 306 /* Tx control */ 307 __le32 tx_control; 308 __le32 tx_packet_location; 309 /* Tx packet length */ 310 __le16 tx_packet_length; 311 struct_group_attr(tx_dest_addr, __packed, 312 /* First 2 byte of destination MAC address */ 313 u8 tx_dest_addr_high[2]; 314 /* Last 4 byte of destination MAC address */ 315 u8 tx_dest_addr_low[4]; 316 ); 317 /* Pkt Priority */ 318 u8 priority; 319 /* Pkt Trasnit Power control */ 320 u8 powermgmt; 321 /* Amount of time the packet has been queued (units = 2ms) */ 322 u8 pktdelay_2ms; 323 /* reserved */ 324 u8 reserved1; 325 } __packed; 326 327 /* RxPD Descriptor */ 328 struct rxpd { 329 /* union to cope up with later FW revisions */ 330 union { 331 /* Current Rx packet status */ 332 __le16 status; 333 struct { 334 /* BSS type: client, AP, etc. */ 335 u8 bss_type; 336 /* BSS number */ 337 u8 bss_num; 338 } __packed bss; 339 } __packed u; 340 341 /* SNR */ 342 u8 snr; 343 344 /* Tx control */ 345 u8 rx_control; 346 347 /* Pkt length */ 348 __le16 pkt_len; 349 350 /* Noise Floor */ 351 u8 nf; 352 353 /* Rx Packet Rate */ 354 u8 rx_rate; 355 356 /* Pkt addr */ 357 __le32 pkt_ptr; 358 359 /* Next Rx RxPD addr */ 360 __le32 next_rxpd_ptr; 361 362 /* Pkt Priority */ 363 u8 priority; 364 u8 reserved[3]; 365 } __packed; 366 367 struct cmd_header { 368 __le16 command; 369 __le16 size; 370 __le16 seqnum; 371 __le16 result; 372 } __packed; 373 374 /* Generic structure to hold all key types. */ 375 struct enc_key { 376 u16 len; 377 u16 flags; /* KEY_INFO_* from defs.h */ 378 u16 type; /* KEY_TYPE_* from defs.h */ 379 u8 key[32]; 380 }; 381 382 /* lbs_offset_value */ 383 struct lbs_offset_value { 384 u32 offset; 385 u32 value; 386 } __packed; 387 388 #define MAX_11D_TRIPLETS 83 389 390 struct mrvl_ie_domain_param_set { 391 struct mrvl_ie_header header; 392 393 u8 country_code[IEEE80211_COUNTRY_STRING_LEN]; 394 struct ieee80211_country_ie_triplet triplet[MAX_11D_TRIPLETS]; 395 } __packed; 396 397 struct cmd_ds_802_11d_domain_info { 398 struct cmd_header hdr; 399 400 __le16 action; 401 struct mrvl_ie_domain_param_set domain; 402 } __packed; 403 404 /* 405 * Define data structure for CMD_GET_HW_SPEC 406 * This structure defines the response for the GET_HW_SPEC command 407 */ 408 struct cmd_ds_get_hw_spec { 409 struct cmd_header hdr; 410 411 /* HW Interface version number */ 412 __le16 hwifversion; 413 /* HW version number */ 414 __le16 version; 415 /* Max number of TxPD FW can handle */ 416 __le16 nr_txpd; 417 /* Max no of Multicast address */ 418 __le16 nr_mcast_adr; 419 /* MAC address */ 420 u8 permanentaddr[6]; 421 422 /* region Code */ 423 __le16 regioncode; 424 425 /* Number of antenna used */ 426 __le16 nr_antenna; 427 428 /* FW release number, example 0x01030304 = 2.3.4p1 */ 429 __le32 fwrelease; 430 431 /* Base Address of TxPD queue */ 432 __le32 wcb_base; 433 /* Read Pointer of RxPd queue */ 434 __le32 rxpd_rdptr; 435 436 /* Write Pointer of RxPd queue */ 437 __le32 rxpd_wrptr; 438 439 /*FW/HW capability */ 440 __le32 fwcapinfo; 441 } __packed; 442 443 struct cmd_ds_802_11_subscribe_event { 444 struct cmd_header hdr; 445 446 __le16 action; 447 __le16 events; 448 449 /* A TLV to the CMD_802_11_SUBSCRIBE_EVENT command can contain a 450 * number of TLVs. From the v5.1 manual, those TLVs would add up to 451 * 40 bytes. However, future firmware might add additional TLVs, so I 452 * bump this up a bit. 453 */ 454 uint8_t tlv[128]; 455 } __packed; 456 457 /* 458 * This scan handle Country Information IE(802.11d compliant) 459 * Define data structure for CMD_802_11_SCAN 460 */ 461 struct cmd_ds_802_11_scan { 462 struct cmd_header hdr; 463 464 uint8_t bsstype; 465 uint8_t bssid[ETH_ALEN]; 466 uint8_t tlvbuffer[]; 467 } __packed; 468 469 struct cmd_ds_802_11_scan_rsp { 470 struct cmd_header hdr; 471 472 __le16 bssdescriptsize; 473 uint8_t nr_sets; 474 uint8_t bssdesc_and_tlvbuffer[]; 475 } __packed; 476 477 struct cmd_ds_802_11_get_log { 478 struct cmd_header hdr; 479 480 __le32 mcasttxframe; 481 __le32 failed; 482 __le32 retry; 483 __le32 multiretry; 484 __le32 framedup; 485 __le32 rtssuccess; 486 __le32 rtsfailure; 487 __le32 ackfailure; 488 __le32 rxfrag; 489 __le32 mcastrxframe; 490 __le32 fcserror; 491 __le32 txframe; 492 __le32 wepundecryptable; 493 } __packed; 494 495 struct cmd_ds_mac_control { 496 struct cmd_header hdr; 497 __le16 action; 498 u16 reserved; 499 } __packed; 500 501 struct cmd_ds_mac_multicast_adr { 502 struct cmd_header hdr; 503 __le16 action; 504 __le16 nr_of_adrs; 505 u8 maclist[ETH_ALEN * MRVDRV_MAX_MULTICAST_LIST_SIZE]; 506 } __packed; 507 508 struct cmd_ds_802_11_authenticate { 509 struct cmd_header hdr; 510 511 u8 bssid[ETH_ALEN]; 512 u8 authtype; 513 u8 reserved[10]; 514 } __packed; 515 516 struct cmd_ds_802_11_deauthenticate { 517 struct cmd_header hdr; 518 519 u8 macaddr[ETH_ALEN]; 520 __le16 reasoncode; 521 } __packed; 522 523 struct cmd_ds_802_11_associate { 524 struct cmd_header hdr; 525 526 u8 bssid[6]; 527 __le16 capability; 528 __le16 listeninterval; 529 __le16 bcnperiod; 530 u8 dtimperiod; 531 u8 iebuf[512]; /* Enough for required and most optional IEs */ 532 } __packed; 533 534 struct cmd_ds_802_11_associate_response { 535 struct cmd_header hdr; 536 537 __le16 capability; 538 __le16 statuscode; 539 __le16 aid; 540 u8 iebuf[512]; 541 } __packed; 542 543 struct cmd_ds_802_11_set_wep { 544 struct cmd_header hdr; 545 546 /* ACT_ADD, ACT_REMOVE or ACT_ENABLE */ 547 __le16 action; 548 549 /* key Index selected for Tx */ 550 __le16 keyindex; 551 552 /* 40, 128bit or TXWEP */ 553 uint8_t keytype[4]; 554 uint8_t keymaterial[4][16]; 555 } __packed; 556 557 struct cmd_ds_802_11_snmp_mib { 558 struct cmd_header hdr; 559 560 __le16 action; 561 __le16 oid; 562 __le16 bufsize; 563 u8 value[128]; 564 } __packed; 565 566 struct cmd_ds_reg_access { 567 struct cmd_header hdr; 568 569 __le16 action; 570 __le16 offset; 571 union { 572 u8 bbp_rf; /* for BBP and RF registers */ 573 __le32 mac; /* for MAC registers */ 574 } value; 575 } __packed; 576 577 struct cmd_ds_802_11_radio_control { 578 struct cmd_header hdr; 579 580 __le16 action; 581 __le16 control; 582 } __packed; 583 584 struct cmd_ds_802_11_beacon_control { 585 struct cmd_header hdr; 586 587 __le16 action; 588 __le16 beacon_enable; 589 __le16 beacon_period; 590 } __packed; 591 592 struct cmd_ds_802_11_sleep_params { 593 struct cmd_header hdr; 594 595 /* ACT_GET/ACT_SET */ 596 __le16 action; 597 598 /* Sleep clock error in ppm */ 599 __le16 error; 600 601 /* Wakeup offset in usec */ 602 __le16 offset; 603 604 /* Clock stabilization time in usec */ 605 __le16 stabletime; 606 607 /* control periodic calibration */ 608 uint8_t calcontrol; 609 610 /* control the use of external sleep clock */ 611 uint8_t externalsleepclk; 612 613 /* reserved field, should be set to zero */ 614 __le16 reserved; 615 } __packed; 616 617 struct cmd_ds_802_11_rf_channel { 618 struct cmd_header hdr; 619 620 __le16 action; 621 __le16 channel; 622 __le16 rftype; /* unused */ 623 __le16 reserved; /* unused */ 624 u8 channellist[32]; /* unused */ 625 } __packed; 626 627 struct cmd_ds_802_11_rssi { 628 struct cmd_header hdr; 629 630 /* 631 * request: number of beacons (N) to average the SNR and NF over 632 * response: SNR of most recent beacon 633 */ 634 __le16 n_or_snr; 635 636 /* 637 * The following fields are only set in the response. 638 * In the request these are reserved and should be set to 0. 639 */ 640 __le16 nf; /* most recent beacon noise floor */ 641 __le16 avg_snr; /* average SNR weighted by N from request */ 642 __le16 avg_nf; /* average noise floor weighted by N from request */ 643 } __packed; 644 645 struct cmd_ds_802_11_mac_address { 646 struct cmd_header hdr; 647 648 __le16 action; 649 u8 macadd[ETH_ALEN]; 650 } __packed; 651 652 struct cmd_ds_802_11_rf_tx_power { 653 struct cmd_header hdr; 654 655 __le16 action; 656 __le16 curlevel; 657 s8 maxlevel; 658 s8 minlevel; 659 } __packed; 660 661 /* MONITOR_MODE only exists in OLPC v5 firmware */ 662 struct cmd_ds_802_11_monitor_mode { 663 struct cmd_header hdr; 664 665 __le16 action; 666 __le16 mode; 667 } __packed; 668 669 struct cmd_ds_set_boot2_ver { 670 struct cmd_header hdr; 671 672 __le16 action; 673 __le16 version; 674 } __packed; 675 676 struct cmd_ds_802_11_fw_wake_method { 677 struct cmd_header hdr; 678 679 __le16 action; 680 __le16 method; 681 } __packed; 682 683 struct cmd_ds_802_11_ps_mode { 684 struct cmd_header hdr; 685 686 __le16 action; 687 688 /* 689 * Interval for keepalive in PS mode: 690 * 0x0000 = don't change 691 * 0x001E = firmware default 692 * 0xFFFF = disable 693 */ 694 __le16 nullpktinterval; 695 696 /* 697 * Number of DTIM intervals to wake up for: 698 * 0 = don't change 699 * 1 = firmware default 700 * 5 = max 701 */ 702 __le16 multipledtim; 703 704 __le16 reserved; 705 __le16 locallisteninterval; 706 707 /* 708 * AdHoc awake period (FW v9+ only): 709 * 0 = don't change 710 * 1 = always awake (IEEE standard behavior) 711 * 2 - 31 = sleep for (n - 1) periods and awake for 1 period 712 * 32 - 254 = invalid 713 * 255 = sleep at each ATIM 714 */ 715 __le16 adhoc_awake_period; 716 } __packed; 717 718 struct cmd_confirm_sleep { 719 struct cmd_header hdr; 720 721 __le16 action; 722 __le16 nullpktinterval; 723 __le16 multipledtim; 724 __le16 reserved; 725 __le16 locallisteninterval; 726 } __packed; 727 728 struct cmd_ds_802_11_data_rate { 729 struct cmd_header hdr; 730 731 __le16 action; 732 __le16 reserved; 733 u8 rates[MAX_RATES]; 734 } __packed; 735 736 struct cmd_ds_802_11_rate_adapt_rateset { 737 struct cmd_header hdr; 738 __le16 action; 739 __le16 enablehwauto; 740 __le16 bitmap; 741 } __packed; 742 743 struct cmd_ds_802_11_ad_hoc_start { 744 struct cmd_header hdr; 745 746 u8 ssid[IEEE80211_MAX_SSID_LEN]; 747 u8 bsstype; 748 __le16 beaconperiod; 749 u8 dtimperiod; /* Reserved on v9 and later */ 750 struct ieee_ie_ibss_param_set ibss; 751 u8 reserved1[4]; 752 struct ieee_ie_ds_param_set ds; 753 u8 reserved2[4]; 754 __le16 probedelay; /* Reserved on v9 and later */ 755 __le16 capability; 756 u8 rates[MAX_RATES]; 757 u8 tlv_memory_size_pad[100]; 758 } __packed; 759 760 struct cmd_ds_802_11_ad_hoc_result { 761 struct cmd_header hdr; 762 763 u8 pad[3]; 764 u8 bssid[ETH_ALEN]; 765 } __packed; 766 767 struct adhoc_bssdesc { 768 u8 bssid[ETH_ALEN]; 769 u8 ssid[IEEE80211_MAX_SSID_LEN]; 770 u8 type; 771 __le16 beaconperiod; 772 u8 dtimperiod; 773 __le64 timestamp; 774 __le64 localtime; 775 struct ieee_ie_ds_param_set ds; 776 u8 reserved1[4]; 777 struct ieee_ie_ibss_param_set ibss; 778 u8 reserved2[4]; 779 __le16 capability; 780 u8 rates[MAX_RATES]; 781 782 /* 783 * DO NOT ADD ANY FIELDS TO THIS STRUCTURE. It is used below in the 784 * Adhoc join command and will cause a binary layout mismatch with 785 * the firmware 786 */ 787 } __packed; 788 789 struct cmd_ds_802_11_ad_hoc_join { 790 struct cmd_header hdr; 791 792 struct adhoc_bssdesc bss; 793 __le16 failtimeout; /* Reserved on v9 and later */ 794 __le16 probedelay; /* Reserved on v9 and later */ 795 } __packed; 796 797 struct cmd_ds_802_11_ad_hoc_stop { 798 struct cmd_header hdr; 799 } __packed; 800 801 struct cmd_ds_802_11_enable_rsn { 802 struct cmd_header hdr; 803 804 __le16 action; 805 __le16 enable; 806 } __packed; 807 808 struct MrvlIEtype_keyParamSet { 809 /* type ID */ 810 __le16 type; 811 812 /* length of Payload */ 813 __le16 length; 814 815 /* type of key: WEP=0, TKIP=1, AES=2 */ 816 __le16 keytypeid; 817 818 /* key control Info specific to a keytypeid */ 819 __le16 keyinfo; 820 821 /* length of key */ 822 __le16 keylen; 823 824 /* key material of size keylen */ 825 u8 key[32]; 826 } __packed; 827 828 #define MAX_WOL_RULES 16 829 830 struct host_wol_rule { 831 uint8_t rule_no; 832 uint8_t rule_ops; 833 __le16 sig_offset; 834 __le16 sig_length; 835 __le16 reserve; 836 __be32 sig_mask; 837 __be32 signature; 838 } __packed; 839 840 struct wol_config { 841 uint8_t action; 842 uint8_t pattern; 843 uint8_t no_rules_in_cmd; 844 uint8_t result; 845 struct host_wol_rule rule[MAX_WOL_RULES]; 846 } __packed; 847 848 struct cmd_ds_host_sleep { 849 struct cmd_header hdr; 850 __le32 criteria; 851 uint8_t gpio; 852 uint16_t gap; 853 struct wol_config wol_conf; 854 } __packed; 855 856 857 858 struct cmd_ds_802_11_key_material { 859 struct cmd_header hdr; 860 861 __le16 action; 862 struct MrvlIEtype_keyParamSet keyParamSet[2]; 863 } __packed; 864 865 struct cmd_ds_802_11_eeprom_access { 866 struct cmd_header hdr; 867 __le16 action; 868 __le16 offset; 869 __le16 len; 870 /* firmware says it returns a maximum of 20 bytes */ 871 #define LBS_EEPROM_READ_LEN 20 872 u8 value[LBS_EEPROM_READ_LEN]; 873 } __packed; 874 875 struct cmd_ds_802_11_tpc_cfg { 876 struct cmd_header hdr; 877 878 __le16 action; 879 uint8_t enable; 880 int8_t P0; 881 int8_t P1; 882 int8_t P2; 883 uint8_t usesnr; 884 } __packed; 885 886 887 struct cmd_ds_802_11_pa_cfg { 888 struct cmd_header hdr; 889 890 __le16 action; 891 uint8_t enable; 892 int8_t P0; 893 int8_t P1; 894 int8_t P2; 895 } __packed; 896 897 898 struct cmd_ds_802_11_led_ctrl { 899 struct cmd_header hdr; 900 901 __le16 action; 902 __le16 numled; 903 u8 data[256]; 904 } __packed; 905 906 /* Automatic Frequency Control */ 907 struct cmd_ds_802_11_afc { 908 struct cmd_header hdr; 909 910 __le16 afc_auto; 911 union { 912 struct { 913 __le16 threshold; 914 __le16 period; 915 }; 916 struct { 917 __le16 timing_offset; /* signed */ 918 __le16 carrier_offset; /* signed */ 919 }; 920 }; 921 } __packed; 922 923 struct cmd_tx_rate_query { 924 __le16 txrate; 925 } __packed; 926 927 struct cmd_ds_get_tsf { 928 __le64 tsfvalue; 929 } __packed; 930 931 struct cmd_ds_bt_access { 932 struct cmd_header hdr; 933 934 __le16 action; 935 __le32 id; 936 u8 addr1[ETH_ALEN]; 937 u8 addr2[ETH_ALEN]; 938 } __packed; 939 940 struct cmd_ds_fwt_access { 941 struct cmd_header hdr; 942 943 __le16 action; 944 __le32 id; 945 u8 valid; 946 u8 da[ETH_ALEN]; 947 u8 dir; 948 u8 ra[ETH_ALEN]; 949 __le32 ssn; 950 __le32 dsn; 951 __le32 metric; 952 u8 rate; 953 u8 hopcount; 954 u8 ttl; 955 __le32 expiration; 956 u8 sleepmode; 957 __le32 snr; 958 __le32 references; 959 u8 prec[ETH_ALEN]; 960 } __packed; 961 962 struct cmd_ds_mesh_config { 963 struct cmd_header hdr; 964 965 __le16 action; 966 __le16 channel; 967 __le16 type; 968 __le16 length; 969 u8 data[128]; /* last position reserved */ 970 } __packed; 971 972 struct cmd_ds_mesh_access { 973 struct cmd_header hdr; 974 975 __le16 action; 976 __le32 data[32]; /* last position reserved */ 977 } __packed; 978 979 /* Number of stats counters returned by the firmware */ 980 #define MESH_STATS_NUM 8 981 #endif 982