host.h (24239B)
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 */ 184enum 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 */ 198enum 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 */ 211enum 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 */ 219enum 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 */ 239enum 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 246enum 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 */ 292struct 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 */ 328struct 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 367struct 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. */ 375struct 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 */ 383struct lbs_offset_value { 384 u32 offset; 385 u32 value; 386} __packed; 387 388#define MAX_11D_TRIPLETS 83 389 390struct 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 397struct 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 */ 408struct 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 443struct 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 */ 461struct 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 469struct 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 477struct 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 495struct cmd_ds_mac_control { 496 struct cmd_header hdr; 497 __le16 action; 498 u16 reserved; 499} __packed; 500 501struct 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 508struct 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 516struct cmd_ds_802_11_deauthenticate { 517 struct cmd_header hdr; 518 519 u8 macaddr[ETH_ALEN]; 520 __le16 reasoncode; 521} __packed; 522 523struct 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 /* 512 permitted - enough for required and most optional IEs */ 532 u8 iebuf[]; 533} __packed; 534 535struct cmd_ds_802_11_associate_response { 536 struct cmd_header hdr; 537 538 __le16 capability; 539 __le16 statuscode; 540 __le16 aid; 541 /* max 512 */ 542 u8 iebuf[]; 543} __packed; 544 545struct cmd_ds_802_11_set_wep { 546 struct cmd_header hdr; 547 548 /* ACT_ADD, ACT_REMOVE or ACT_ENABLE */ 549 __le16 action; 550 551 /* key Index selected for Tx */ 552 __le16 keyindex; 553 554 /* 40, 128bit or TXWEP */ 555 uint8_t keytype[4]; 556 uint8_t keymaterial[4][16]; 557} __packed; 558 559struct cmd_ds_802_11_snmp_mib { 560 struct cmd_header hdr; 561 562 __le16 action; 563 __le16 oid; 564 __le16 bufsize; 565 u8 value[128]; 566} __packed; 567 568struct cmd_ds_reg_access { 569 struct cmd_header hdr; 570 571 __le16 action; 572 __le16 offset; 573 union { 574 u8 bbp_rf; /* for BBP and RF registers */ 575 __le32 mac; /* for MAC registers */ 576 } value; 577} __packed; 578 579struct cmd_ds_802_11_radio_control { 580 struct cmd_header hdr; 581 582 __le16 action; 583 __le16 control; 584} __packed; 585 586struct cmd_ds_802_11_beacon_control { 587 struct cmd_header hdr; 588 589 __le16 action; 590 __le16 beacon_enable; 591 __le16 beacon_period; 592} __packed; 593 594struct cmd_ds_802_11_sleep_params { 595 struct cmd_header hdr; 596 597 /* ACT_GET/ACT_SET */ 598 __le16 action; 599 600 /* Sleep clock error in ppm */ 601 __le16 error; 602 603 /* Wakeup offset in usec */ 604 __le16 offset; 605 606 /* Clock stabilization time in usec */ 607 __le16 stabletime; 608 609 /* control periodic calibration */ 610 uint8_t calcontrol; 611 612 /* control the use of external sleep clock */ 613 uint8_t externalsleepclk; 614 615 /* reserved field, should be set to zero */ 616 __le16 reserved; 617} __packed; 618 619struct cmd_ds_802_11_rf_channel { 620 struct cmd_header hdr; 621 622 __le16 action; 623 __le16 channel; 624 __le16 rftype; /* unused */ 625 __le16 reserved; /* unused */ 626 u8 channellist[32]; /* unused */ 627} __packed; 628 629struct cmd_ds_802_11_rssi { 630 struct cmd_header hdr; 631 632 /* 633 * request: number of beacons (N) to average the SNR and NF over 634 * response: SNR of most recent beacon 635 */ 636 __le16 n_or_snr; 637 638 /* 639 * The following fields are only set in the response. 640 * In the request these are reserved and should be set to 0. 641 */ 642 __le16 nf; /* most recent beacon noise floor */ 643 __le16 avg_snr; /* average SNR weighted by N from request */ 644 __le16 avg_nf; /* average noise floor weighted by N from request */ 645} __packed; 646 647struct cmd_ds_802_11_mac_address { 648 struct cmd_header hdr; 649 650 __le16 action; 651 u8 macadd[ETH_ALEN]; 652} __packed; 653 654struct cmd_ds_802_11_rf_tx_power { 655 struct cmd_header hdr; 656 657 __le16 action; 658 __le16 curlevel; 659 s8 maxlevel; 660 s8 minlevel; 661} __packed; 662 663/* MONITOR_MODE only exists in OLPC v5 firmware */ 664struct cmd_ds_802_11_monitor_mode { 665 struct cmd_header hdr; 666 667 __le16 action; 668 __le16 mode; 669} __packed; 670 671struct cmd_ds_set_boot2_ver { 672 struct cmd_header hdr; 673 674 __le16 action; 675 __le16 version; 676} __packed; 677 678struct cmd_ds_802_11_fw_wake_method { 679 struct cmd_header hdr; 680 681 __le16 action; 682 __le16 method; 683} __packed; 684 685struct cmd_ds_802_11_ps_mode { 686 struct cmd_header hdr; 687 688 __le16 action; 689 690 /* 691 * Interval for keepalive in PS mode: 692 * 0x0000 = don't change 693 * 0x001E = firmware default 694 * 0xFFFF = disable 695 */ 696 __le16 nullpktinterval; 697 698 /* 699 * Number of DTIM intervals to wake up for: 700 * 0 = don't change 701 * 1 = firmware default 702 * 5 = max 703 */ 704 __le16 multipledtim; 705 706 __le16 reserved; 707 __le16 locallisteninterval; 708 709 /* 710 * AdHoc awake period (FW v9+ only): 711 * 0 = don't change 712 * 1 = always awake (IEEE standard behavior) 713 * 2 - 31 = sleep for (n - 1) periods and awake for 1 period 714 * 32 - 254 = invalid 715 * 255 = sleep at each ATIM 716 */ 717 __le16 adhoc_awake_period; 718} __packed; 719 720struct cmd_confirm_sleep { 721 struct cmd_header hdr; 722 723 __le16 action; 724 __le16 nullpktinterval; 725 __le16 multipledtim; 726 __le16 reserved; 727 __le16 locallisteninterval; 728} __packed; 729 730struct cmd_ds_802_11_data_rate { 731 struct cmd_header hdr; 732 733 __le16 action; 734 __le16 reserved; 735 u8 rates[MAX_RATES]; 736} __packed; 737 738struct cmd_ds_802_11_rate_adapt_rateset { 739 struct cmd_header hdr; 740 __le16 action; 741 __le16 enablehwauto; 742 __le16 bitmap; 743} __packed; 744 745struct cmd_ds_802_11_ad_hoc_start { 746 struct cmd_header hdr; 747 748 u8 ssid[IEEE80211_MAX_SSID_LEN]; 749 u8 bsstype; 750 __le16 beaconperiod; 751 u8 dtimperiod; /* Reserved on v9 and later */ 752 struct ieee_ie_ibss_param_set ibss; 753 u8 reserved1[4]; 754 struct ieee_ie_ds_param_set ds; 755 u8 reserved2[4]; 756 __le16 probedelay; /* Reserved on v9 and later */ 757 __le16 capability; 758 u8 rates[MAX_RATES]; 759 u8 tlv_memory_size_pad[100]; 760} __packed; 761 762struct cmd_ds_802_11_ad_hoc_result { 763 struct cmd_header hdr; 764 765 u8 pad[3]; 766 u8 bssid[ETH_ALEN]; 767} __packed; 768 769struct adhoc_bssdesc { 770 u8 bssid[ETH_ALEN]; 771 u8 ssid[IEEE80211_MAX_SSID_LEN]; 772 u8 type; 773 __le16 beaconperiod; 774 u8 dtimperiod; 775 __le64 timestamp; 776 __le64 localtime; 777 struct ieee_ie_ds_param_set ds; 778 u8 reserved1[4]; 779 struct ieee_ie_ibss_param_set ibss; 780 u8 reserved2[4]; 781 __le16 capability; 782 u8 rates[MAX_RATES]; 783 784 /* 785 * DO NOT ADD ANY FIELDS TO THIS STRUCTURE. It is used below in the 786 * Adhoc join command and will cause a binary layout mismatch with 787 * the firmware 788 */ 789} __packed; 790 791struct cmd_ds_802_11_ad_hoc_join { 792 struct cmd_header hdr; 793 794 struct adhoc_bssdesc bss; 795 __le16 failtimeout; /* Reserved on v9 and later */ 796 __le16 probedelay; /* Reserved on v9 and later */ 797} __packed; 798 799struct cmd_ds_802_11_ad_hoc_stop { 800 struct cmd_header hdr; 801} __packed; 802 803struct cmd_ds_802_11_enable_rsn { 804 struct cmd_header hdr; 805 806 __le16 action; 807 __le16 enable; 808} __packed; 809 810struct MrvlIEtype_keyParamSet { 811 /* type ID */ 812 __le16 type; 813 814 /* length of Payload */ 815 __le16 length; 816 817 /* type of key: WEP=0, TKIP=1, AES=2 */ 818 __le16 keytypeid; 819 820 /* key control Info specific to a keytypeid */ 821 __le16 keyinfo; 822 823 /* length of key */ 824 __le16 keylen; 825 826 /* key material of size keylen */ 827 u8 key[32]; 828} __packed; 829 830#define MAX_WOL_RULES 16 831 832struct host_wol_rule { 833 uint8_t rule_no; 834 uint8_t rule_ops; 835 __le16 sig_offset; 836 __le16 sig_length; 837 __le16 reserve; 838 __be32 sig_mask; 839 __be32 signature; 840} __packed; 841 842struct wol_config { 843 uint8_t action; 844 uint8_t pattern; 845 uint8_t no_rules_in_cmd; 846 uint8_t result; 847 struct host_wol_rule rule[MAX_WOL_RULES]; 848} __packed; 849 850struct cmd_ds_host_sleep { 851 struct cmd_header hdr; 852 __le32 criteria; 853 uint8_t gpio; 854 uint16_t gap; 855 struct wol_config wol_conf; 856} __packed; 857 858 859 860struct cmd_ds_802_11_key_material { 861 struct cmd_header hdr; 862 863 __le16 action; 864 struct MrvlIEtype_keyParamSet keyParamSet[2]; 865} __packed; 866 867struct cmd_ds_802_11_eeprom_access { 868 struct cmd_header hdr; 869 __le16 action; 870 __le16 offset; 871 __le16 len; 872 /* firmware says it returns a maximum of 20 bytes */ 873#define LBS_EEPROM_READ_LEN 20 874 u8 value[LBS_EEPROM_READ_LEN]; 875} __packed; 876 877struct cmd_ds_802_11_tpc_cfg { 878 struct cmd_header hdr; 879 880 __le16 action; 881 uint8_t enable; 882 int8_t P0; 883 int8_t P1; 884 int8_t P2; 885 uint8_t usesnr; 886} __packed; 887 888 889struct cmd_ds_802_11_pa_cfg { 890 struct cmd_header hdr; 891 892 __le16 action; 893 uint8_t enable; 894 int8_t P0; 895 int8_t P1; 896 int8_t P2; 897} __packed; 898 899 900struct cmd_ds_802_11_led_ctrl { 901 struct cmd_header hdr; 902 903 __le16 action; 904 __le16 numled; 905 u8 data[256]; 906} __packed; 907 908/* Automatic Frequency Control */ 909struct cmd_ds_802_11_afc { 910 struct cmd_header hdr; 911 912 __le16 afc_auto; 913 union { 914 struct { 915 __le16 threshold; 916 __le16 period; 917 }; 918 struct { 919 __le16 timing_offset; /* signed */ 920 __le16 carrier_offset; /* signed */ 921 }; 922 }; 923} __packed; 924 925struct cmd_tx_rate_query { 926 __le16 txrate; 927} __packed; 928 929struct cmd_ds_get_tsf { 930 __le64 tsfvalue; 931} __packed; 932 933struct cmd_ds_bt_access { 934 struct cmd_header hdr; 935 936 __le16 action; 937 __le32 id; 938 u8 addr1[ETH_ALEN]; 939 u8 addr2[ETH_ALEN]; 940} __packed; 941 942struct cmd_ds_fwt_access { 943 struct cmd_header hdr; 944 945 __le16 action; 946 __le32 id; 947 u8 valid; 948 u8 da[ETH_ALEN]; 949 u8 dir; 950 u8 ra[ETH_ALEN]; 951 __le32 ssn; 952 __le32 dsn; 953 __le32 metric; 954 u8 rate; 955 u8 hopcount; 956 u8 ttl; 957 __le32 expiration; 958 u8 sleepmode; 959 __le32 snr; 960 __le32 references; 961 u8 prec[ETH_ALEN]; 962} __packed; 963 964struct cmd_ds_mesh_config { 965 struct cmd_header hdr; 966 967 __le16 action; 968 __le16 channel; 969 __le16 type; 970 __le16 length; 971 u8 data[128]; /* last position reserved */ 972} __packed; 973 974struct cmd_ds_mesh_access { 975 struct cmd_header hdr; 976 977 __le16 action; 978 __le32 data[32]; /* last position reserved */ 979} __packed; 980 981/* Number of stats counters returned by the firmware */ 982#define MESH_STATS_NUM 8 983#endif