1/*- 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 2007-2009 Sam Leffler, Errno Consulting 5 * Copyright (c) 2007-2009 Marvell Semiconductor, Inc. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer, 13 * without modification. 14 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 15 * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any 16 * redistribution must be conditioned upon including a substantially 17 * similar Disclaimer requirement for further binary redistribution. 18 * 19 * NO WARRANTY 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY 23 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 24 * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, 25 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 28 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 30 * THE POSSIBILITY OF SUCH DAMAGES. 31 */ 32 33/* 34 * Definitions for the Marvell Wireless LAN controller Hardware Access Layer. 35 */ 36#ifndef _MWL_HALREG_H_ 37#define _MWL_HALREG_H_ 38 39#define MWL_ANT_INFO_SUPPORT /* per-antenna data in rx descriptor */ 40 41#define MACREG_REG_TSF_LOW 0xa600 /* TSF lo */ 42#define MACREG_REG_TSF_HIGH 0xa604 /* TSF hi */ 43#define MACREG_REG_CHIP_REV 0xa814 /* chip rev */ 44 45// Map to 0x80000000 (Bus control) on BAR0 46#define MACREG_REG_H2A_INTERRUPT_EVENTS 0x00000C18 // (From host to ARM) 47#define MACREG_REG_H2A_INTERRUPT_CAUSE 0x00000C1C // (From host to ARM) 48#define MACREG_REG_H2A_INTERRUPT_MASK 0x00000C20 // (From host to ARM) 49#define MACREG_REG_H2A_INTERRUPT_CLEAR_SEL 0x00000C24 // (From host to ARM) 50#define MACREG_REG_H2A_INTERRUPT_STATUS_MASK 0x00000C28 // (From host to ARM) 51 52#define MACREG_REG_A2H_INTERRUPT_EVENTS 0x00000C2C // (From ARM to host) 53#define MACREG_REG_A2H_INTERRUPT_CAUSE 0x00000C30 // (From ARM to host) 54#define MACREG_REG_A2H_INTERRUPT_MASK 0x00000C34 // (From ARM to host) 55#define MACREG_REG_A2H_INTERRUPT_CLEAR_SEL 0x00000C38 // (From ARM to host) 56#define MACREG_REG_A2H_INTERRUPT_STATUS_MASK 0x00000C3C // (From ARM to host) 57 58// Map to 0x80000000 on BAR1 59#define MACREG_REG_GEN_PTR 0x00000C10 60#define MACREG_REG_INT_CODE 0x00000C14 61#define MACREG_REG_SCRATCH 0x00000C40 62#define MACREG_REG_FW_PRESENT 0x0000BFFC 63 64#define MACREG_REG_PROMISCUOUS 0xA300 65 66// Bit definitio for MACREG_REG_A2H_INTERRUPT_CAUSE (A2HRIC) 67#define MACREG_A2HRIC_BIT_TX_DONE 0x00000001 // bit 0 68#define MACREG_A2HRIC_BIT_RX_RDY 0x00000002 // bit 1 69#define MACREG_A2HRIC_BIT_OPC_DONE 0x00000004 // bit 2 70#define MACREG_A2HRIC_BIT_MAC_EVENT 0x00000008 // bit 3 71#define MACREG_A2HRIC_BIT_RX_PROBLEM 0x00000010 // bit 4 72 73#define MACREG_A2HRIC_BIT_RADIO_OFF 0x00000020 // bit 5 74#define MACREG_A2HRIC_BIT_RADIO_ON 0x00000040 // bit 6 75 76#define MACREG_A2HRIC_BIT_RADAR_DETECT 0x00000080 // bit 7 77 78#define MACREG_A2HRIC_BIT_ICV_ERROR 0x00000100 // bit 8 79#define MACREG_A2HRIC_BIT_MIC_ERROR 0x00000200 // bit 9 80#define MACREG_A2HRIC_BIT_QUEUE_EMPTY 0x00004000 81#define MACREG_A2HRIC_BIT_QUEUE_FULL 0x00000800 82#define MACREG_A2HRIC_BIT_CHAN_SWITCH 0x00001000 83#define MACREG_A2HRIC_BIT_TX_WATCHDOG 0x00002000 84#define MACREG_A2HRIC_BIT_BA_WATCHDOG 0x00000400 85#define MACREQ_A2HRIC_BIT_TX_ACK 0x00008000 86#define ISR_SRC_BITS ((MACREG_A2HRIC_BIT_RX_RDY) | \ 87 (MACREG_A2HRIC_BIT_TX_DONE) | \ 88 (MACREG_A2HRIC_BIT_OPC_DONE) | \ 89 (MACREG_A2HRIC_BIT_MAC_EVENT)| \ 90 (MACREG_A2HRIC_BIT_MIC_ERROR)| \ 91 (MACREG_A2HRIC_BIT_ICV_ERROR)| \ 92 (MACREG_A2HRIC_BIT_RADAR_DETECT)| \ 93 (MACREG_A2HRIC_BIT_CHAN_SWITCH)| \ 94 (MACREG_A2HRIC_BIT_TX_WATCHDOG)| \ 95 (MACREG_A2HRIC_BIT_QUEUE_EMPTY)| \ 96 (MACREG_A2HRIC_BIT_BA_WATCHDOG)| \ 97 (MACREQ_A2HRIC_BIT_TX_ACK)) 98 99#define MACREG_A2HRIC_BIT_MASK ISR_SRC_BITS 100 101// Bit definitio for MACREG_REG_H2A_INTERRUPT_CAUSE (H2ARIC) 102#define MACREG_H2ARIC_BIT_PPA_READY 0x00000001 // bit 0 103#define MACREG_H2ARIC_BIT_DOOR_BELL 0x00000002 // bit 1 104#define ISR_RESET (1<<15) 105 106// INT code register event definition 107#define MACREG_INT_CODE_CMD_FINISHED 0x00000005 108 109/* 110 * Host/Firmware Interface definitions. 111 */ 112 113/** 114 * Define total number of TX queues in the shared memory. 115 * This count includes the EDCA queues, Block Ack queues, and HCCA queues 116 * In addition to this, there could be a management packet queue some 117 * time in the future 118 */ 119#define NUM_EDCA_QUEUES 4 120#define NUM_HCCA_QUEUES 0 121#define NUM_BA_QUEUES 0 122#define NUM_MGMT_QUEUES 0 123#define NUM_ACK_EVENT_QUEUE 1 124#define TOTAL_TX_QUEUES \ 125 (NUM_EDCA_QUEUES + NUM_HCCA_QUEUES + NUM_BA_QUEUES + NUM_MGMT_QUEUES + NUM_ACK_EVENT_QUEUE) 126#define MAX_TXWCB_QUEUES TOTAL_TX_QUEUES - NUM_ACK_EVENT_QUEUE 127#define MAX_RXWCB_QUEUES 1 128 129//============================================================================= 130// PUBLIC DEFINITIONS 131//============================================================================= 132 133#define RATE_INDEX_MAX_ARRAY 14 134#define WOW_MAX_STATION 32 135 136/* 137 * Hardware tx/rx descriptors. 138 * 139 * NB: tx descriptor size must match f/w expected size 140 * because f/w prefetch's the next descriptor linearly 141 * and doesn't chase the next pointer. 142 */ 143struct mwl_txdesc { 144 uint32_t Status; 145#define EAGLE_TXD_STATUS_IDLE 0x00000000 146#define EAGLE_TXD_STATUS_USED 0x00000001 147#define EAGLE_TXD_STATUS_OK 0x00000001 148#define EAGLE_TXD_STATUS_OK_RETRY 0x00000002 149#define EAGLE_TXD_STATUS_OK_MORE_RETRY 0x00000004 150#define EAGLE_TXD_STATUS_MULTICAST_TX 0x00000008 151#define EAGLE_TXD_STATUS_BROADCAST_TX 0x00000010 152#define EAGLE_TXD_STATUS_FAILED_LINK_ERROR 0x00000020 153#define EAGLE_TXD_STATUS_FAILED_EXCEED_LIMIT 0x00000040 154#define EAGLE_TXD_STATUS_FAILED_XRETRY EAGLE_TXD_STATUS_FAILED_EXCEED_LIMIT 155#define EAGLE_TXD_STATUS_FAILED_AGING 0x00000080 156#define EAGLE_TXD_STATUS_FW_OWNED 0x80000000 157 uint8_t DataRate; 158 uint8_t TxPriority; 159 uint16_t QosCtrl; 160 uint32_t PktPtr; 161 uint16_t PktLen; 162 uint8_t DestAddr[6]; 163 uint32_t pPhysNext; 164 uint32_t SapPktInfo; 165#define EAGLE_TXD_MODE_BONLY 1 166#define EAGLE_TXD_MODE_GONLY 2 167#define EAGLE_TXD_MODE_BG 3 168#define EAGLE_TXD_MODE_NONLY 4 169#define EAGLE_TXD_MODE_BN 5 170#define EAGLE_TXD_MODE_GN 6 171#define EAGLE_TXD_MODE_BGN 7 172#define EAGLE_TXD_MODE_AONLY 8 173#define EAGLE_TXD_MODE_AG 10 174#define EAGLE_TXD_MODE_AN 12 175 uint16_t Format; 176#define EAGLE_TXD_FORMAT 0x0001 /* frame format/rate */ 177#define EAGLE_TXD_FORMAT_LEGACY 0x0000 /* legacy rate frame */ 178#define EAGLE_TXD_FORMAT_HT 0x0001 /* HT rate frame */ 179#define EAGLE_TXD_GI 0x0002 /* guard interval */ 180#define EAGLE_TXD_GI_SHORT 0x0002 /* short guard interval */ 181#define EAGLE_TXD_GI_LONG 0x0000 /* long guard interval */ 182#define EAGLE_TXD_CHW 0x0004 /* channel width */ 183#define EAGLE_TXD_CHW_20 0x0000 /* 20MHz channel width */ 184#define EAGLE_TXD_CHW_40 0x0004 /* 40MHz channel width */ 185#define EAGLE_TXD_RATE 0x01f8 /* tx rate (legacy)/ MCS */ 186#define EAGLE_TXD_RATE_S 3 187#define EAGLE_TXD_ADV 0x0600 /* advanced coding */ 188#define EAGLE_TXD_ADV_S 9 189#define EAGLE_TXD_ADV_NONE 0x0000 190#define EAGLE_TXD_ADV_LDPC 0x0200 191#define EAGLE_TXD_ADV_RS 0x0400 192/* NB: 3 is reserved */ 193#define EAGLE_TXD_ANTENNA 0x1800 /* antenna select */ 194#define EAGLE_TXD_ANTENNA_S 11 195#define EAGLE_TXD_EXTCHAN 0x6000 /* extension channel */ 196#define EAGLE_TXD_EXTCHAN_S 13 197#define EAGLE_TXD_EXTCHAN_HI 0x0000 /* above */ 198#define EAGLE_TXD_EXTCHAN_LO 0x2000 /* below */ 199#define EAGLE_TXD_PREAMBLE 0x8000 200#define EAGLE_TXD_PREAMBLE_SHORT 0x8000 /* short preamble */ 201#define EAGLE_TXD_PREAMBLE_LONG 0x0000 /* long preamble */ 202 uint16_t pad; /* align to 4-byte boundary */ 203#define EAGLE_TXD_FIXED_RATE 0x0100 /* get tx rate from Format */ 204#define EAGLE_TXD_DONT_AGGR 0x0200 /* don't aggregate frame */ 205 uint32_t ack_wcb_addr; 206} __packed; 207 208struct mwl_ant_info { 209 uint8_t rssi_a; /* RSSI for antenna A */ 210 uint8_t rssi_b; /* RSSI for antenna B */ 211 uint8_t rssi_c; /* RSSI for antenna C */ 212 uint8_t rsvd1; /* Reserved */ 213 uint8_t nf_a; /* Noise floor for antenna A */ 214 uint8_t nf_b; /* Noise floor for antenna B */ 215 uint8_t nf_c; /* Noise floor for antenna C */ 216 uint8_t rsvd2; /* Reserved */ 217 uint8_t nf; /* Noise floor */ 218 uint8_t rsvd3[3]; /* Reserved - To make word aligned */ 219} __packed; 220 221struct mwl_rxdesc { 222 uint8_t RxControl; /* control element */ 223#define EAGLE_RXD_CTRL_DRIVER_OWN 0x00 224#define EAGLE_RXD_CTRL_OS_OWN 0x04 225#define EAGLE_RXD_CTRL_DMA_OWN 0x80 226 uint8_t RSSI; /* received signal strengt indication */ 227 uint8_t Status; /* status field w/ USED bit */ 228#define EAGLE_RXD_STATUS_IDLE 0x00 229#define EAGLE_RXD_STATUS_OK 0x01 230#define EAGLE_RXD_STATUS_MULTICAST_RX 0x02 231#define EAGLE_RXD_STATUS_BROADCAST_RX 0x04 232#define EAGLE_RXD_STATUS_FRAGMENT_RX 0x08 233#define EAGLE_RXD_STATUS_GENERAL_DECRYPT_ERR 0xff 234#define EAGLE_RXD_STATUS_DECRYPT_ERR_MASK 0x80 235#define EAGLE_RXD_STATUS_TKIP_MIC_DECRYPT_ERR 0x02 236#define EAGLE_RXD_STATUS_WEP_ICV_DECRYPT_ERR 0x04 237#define EAGLE_RXD_STATUS_TKIP_ICV_DECRYPT_ERR 0x08 238 uint8_t Channel; /* channel # pkt received on */ 239 uint16_t PktLen; /* total length of received data */ 240 uint8_t SQ2; /* not used */ 241 uint8_t Rate; /* received data rate */ 242 uint32_t pPhysBuffData; /* physical address of payload data */ 243 uint32_t pPhysNext; /* physical address of next RX desc */ 244 uint16_t QosCtrl; /* received QosCtrl field variable */ 245 uint16_t HtSig2; /* like name states */ 246#ifdef MWL_ANT_INFO_SUPPORT 247 struct mwl_ant_info ai; /* antenna info */ 248#endif 249} __packed; 250 251/* 252// Define OpMode for SoftAP/Station mode 253// 254// The following mode signature has to be written to PCI scratch register#0 255// right after successfully downloading the last block of firmware and 256// before waiting for firmware ready signature 257 */ 258#define HostCmd_STA_MODE 0x5A 259#define HostCmd_SOFTAP_MODE 0xA5 260 261#define HostCmd_STA_FWRDY_SIGNATURE 0xF0F1F2F4 262#define HostCmd_SOFTAP_FWRDY_SIGNATURE 0xF1F2F4A5 263 264//*************************************************************************** 265//*************************************************************************** 266 267//*************************************************************************** 268 269#define HostCmd_CMD_CODE_DNLD 0x0001 270#define HostCmd_CMD_GET_HW_SPEC 0x0003 271#define HostCmd_CMD_SET_HW_SPEC 0x0004 272#define HostCmd_CMD_MAC_MULTICAST_ADR 0x0010 273#define HostCmd_CMD_802_11_GET_STAT 0x0014 274#define HostCmd_CMD_MAC_REG_ACCESS 0x0019 275#define HostCmd_CMD_BBP_REG_ACCESS 0x001a 276#define HostCmd_CMD_RF_REG_ACCESS 0x001b 277#define HostCmd_CMD_802_11_RADIO_CONTROL 0x001c 278#define HostCmd_CMD_802_11_RF_TX_POWER 0x001e 279#define HostCmd_CMD_802_11_RF_ANTENNA 0x0020 280#define HostCmd_CMD_SET_BEACON 0x0100 281#define HostCmd_CMD_SET_AID 0x010d 282#define HostCmd_CMD_SET_RF_CHANNEL 0x010a 283#define HostCmd_CMD_SET_INFRA_MODE 0x010e 284#define HostCmd_CMD_SET_G_PROTECT_FLAG 0x010f 285#define HostCmd_CMD_802_11_RTS_THSD 0x0113 286#define HostCmd_CMD_802_11_SET_SLOT 0x0114 287 288#define HostCmd_CMD_802_11H_DETECT_RADAR 0x0120 289#define HostCmd_CMD_SET_WMM_MODE 0x0123 290#define HostCmd_CMD_HT_GUARD_INTERVAL 0x0124 291#define HostCmd_CMD_SET_FIXED_RATE 0x0126 292#define HostCmd_CMD_SET_LINKADAPT_CS_MODE 0x0129 293#define HostCmd_CMD_SET_MAC_ADDR 0x0202 294#define HostCmd_CMD_SET_RATE_ADAPT_MODE 0x0203 295#define HostCmd_CMD_GET_WATCHDOG_BITMAP 0x0205 296 297//SoftAP command code 298#define HostCmd_CMD_BSS_START 0x1100 299#define HostCmd_CMD_SET_NEW_STN 0x1111 300#define HostCmd_CMD_SET_KEEP_ALIVE 0x1112 301#define HostCmd_CMD_SET_APMODE 0x1114 302#define HostCmd_CMD_SET_SWITCH_CHANNEL 0x1121 303 304/* 305 @HWENCR@ 306 Command to update firmware encryption keys. 307*/ 308#define HostCmd_CMD_UPDATE_ENCRYPTION 0x1122 309/* 310 @11E-BA@ 311 Command to create/destroy block ACK 312*/ 313#define HostCmd_CMD_BASTREAM 0x1125 314#define HostCmd_CMD_SET_RIFS 0x1126 315#define HostCmd_CMD_SET_N_PROTECT_FLAG 0x1131 316#define HostCmd_CMD_SET_N_PROTECT_OPMODE 0x1132 317#define HostCmd_CMD_SET_OPTIMIZATION_LEVEL 0x1133 318#define HostCmd_CMD_GET_CALTABLE 0x1134 319#define HostCmd_CMD_SET_MIMOPSHT 0x1135 320#define HostCmd_CMD_GET_BEACON 0x1138 321#define HostCmd_CMD_SET_REGION_CODE 0x1139 322#define HostCmd_CMD_SET_POWERSAVESTATION 0x1140 323#define HostCmd_CMD_SET_TIM 0x1141 324#define HostCmd_CMD_GET_TIM 0x1142 325#define HostCmd_CMD_GET_SEQNO 0x1143 326#define HostCmd_CMD_DWDS_ENABLE 0x1144 327#define HostCmd_CMD_AMPDU_RETRY_RATEDROP_MODE 0x1145 328#define HostCmd_CMD_CFEND_ENABLE 0x1146 329 330/* 331// Define general result code for each command 332 */ 333#define HostCmd_RESULT_OK 0x0000 // OK 334#define HostCmd_RESULT_ERROR 0x0001 // Genenral error 335#define HostCmd_RESULT_NOT_SUPPORT 0x0002 // Command is not valid 336#define HostCmd_RESULT_PENDING 0x0003 // Command is pending (will be processed) 337#define HostCmd_RESULT_BUSY 0x0004 // System is busy (command ignored) 338#define HostCmd_RESULT_PARTIAL_DATA 0x0005 // Data buffer is not big enough 339 340/* 341// Definition of action or option for each command 342// 343// Define general purpose action 344 */ 345#define HostCmd_ACT_GEN_READ 0x0000 346#define HostCmd_ACT_GEN_WRITE 0x0001 347#define HostCmd_ACT_GEN_GET 0x0000 348#define HostCmd_ACT_GEN_SET 0x0001 349#define HostCmd_ACT_GEN_OFF 0x0000 350#define HostCmd_ACT_GEN_ON 0x0001 351 352#define HostCmd_ACT_DIFF_CHANNEL 0x0002 353#define HostCmd_ACT_GEN_SET_LIST 0x0002 354 355// Define action or option for HostCmd_FW_USE_FIXED_RATE 356#define HostCmd_ACT_USE_FIXED_RATE 0x0001 357#define HostCmd_ACT_NOT_USE_FIXED_RATE 0x0002 358 359// Define action or option for HostCmd_CMD_802_11_SET_WEP 360//#define HostCmd_ACT_ENABLE 0x0001 // Use MAC control for WEP on/off 361//#define HostCmd_ACT_DISABLE 0x0000 362#define HostCmd_ACT_ADD 0x0002 363#define HostCmd_ACT_REMOVE 0x0004 364#define HostCmd_ACT_USE_DEFAULT 0x0008 365 366#define HostCmd_TYPE_WEP_40_BIT 0x0001 // 40 bit 367#define HostCmd_TYPE_WEP_104_BIT 0x0002 // 104 bit 368#define HostCmd_TYPE_WEP_128_BIT 0x0003 // 128 bit 369#define HostCmd_TYPE_WEP_TX_KEY 0x0004 // TX WEP 370 371#define HostCmd_NUM_OF_WEP_KEYS 4 372 373#define HostCmd_WEP_KEY_INDEX_MASK 0x3fffffff 374 375// Define action or option for HostCmd_CMD_802_11_RESET 376#define HostCmd_ACT_HALT 0x0001 377#define HostCmd_ACT_RESTART 0x0002 378 379// Define action or option for HostCmd_CMD_802_11_RADIO_CONTROL 380#define HostCmd_TYPE_AUTO_PREAMBLE 0x0001 381#define HostCmd_TYPE_SHORT_PREAMBLE 0x0002 382#define HostCmd_TYPE_LONG_PREAMBLE 0x0003 383 384// Define action or option for CMD_802_11_RF_CHANNEL 385#define HostCmd_TYPE_802_11A 0x0001 386#define HostCmd_TYPE_802_11B 0x0002 387 388// Define action or option for HostCmd_CMD_802_11_RF_TX_POWER 389#define HostCmd_ACT_TX_POWER_OPT_SET_HIGH 0x0003 390#define HostCmd_ACT_TX_POWER_OPT_SET_MID 0x0002 391#define HostCmd_ACT_TX_POWER_OPT_SET_LOW 0x0001 392#define HostCmd_ACT_TX_POWER_OPT_SET_AUTO 0x0000 393 394#define HostCmd_ACT_TX_POWER_LEVEL_MIN 0x000e // in dbm 395#define HostCmd_ACT_TX_POWER_LEVEL_GAP 0x0001 // in dbm 396// Define action or option for HostCmd_CMD_802_11_DATA_RATE 397#define HostCmd_ACT_SET_TX_AUTO 0x0000 398#define HostCmd_ACT_SET_TX_FIX_RATE 0x0001 399#define HostCmd_ACT_GET_TX_RATE 0x0002 400 401#define HostCmd_ACT_SET_RX 0x0001 402#define HostCmd_ACT_SET_TX 0x0002 403#define HostCmd_ACT_SET_BOTH 0x0003 404#define HostCmd_ACT_GET_RX 0x0004 405#define HostCmd_ACT_GET_TX 0x0008 406#define HostCmd_ACT_GET_BOTH 0x000c 407 408#define TYPE_ANTENNA_DIVERSITY 0xffff 409 410// Define action or option for HostCmd_CMD_802_11_PS_MODE 411#define HostCmd_TYPE_CAM 0x0000 412#define HostCmd_TYPE_MAX_PSP 0x0001 413#define HostCmd_TYPE_FAST_PSP 0x0002 414 415#define HostCmd_CMD_SET_EDCA_PARAMS 0x0115 416 417//============================================================================= 418// HOST COMMAND DEFINITIONS 419//============================================================================= 420 421// 422// Definition of data structure for each command 423// 424// Define general data structure 425typedef struct { 426 uint16_t Cmd; 427 uint16_t Length; 428#ifdef MWL_MBSS_SUPPORT 429 uint8_t SeqNum; 430 uint8_t MacId; 431#else 432 uint16_t SeqNum; 433#endif 434 uint16_t Result; 435} __packed FWCmdHdr; 436 437typedef struct { 438 FWCmdHdr CmdHdr; 439 uint8_t Version; // HW revision 440 uint8_t HostIf; // Host interface 441 uint16_t NumOfMCastAdr; // Max. number of Multicast address FW can handle 442 uint8_t PermanentAddr[6]; // MAC address 443 uint16_t RegionCode; // Region Code 444 uint32_t FWReleaseNumber; // 4 byte of FW release number 445 uint32_t ulFwAwakeCookie; // Firmware awake cookie 446 uint32_t DeviceCaps; // Device capabilities (see above) 447 uint32_t RxPdWrPtr; // Rx shared memory queue 448 uint32_t NumTxQueues; // # TX queues in WcbBase array 449 uint32_t WcbBase[MAX_TXWCB_QUEUES]; // TX WCB Rings 450 uint32_t Flags; 451#define SET_HW_SPEC_DISABLEMBSS 0x08 452#define SET_HW_SPEC_HOSTFORM_BEACON 0x10 453#define SET_HW_SPEC_HOSTFORM_PROBERESP 0x20 454#define SET_HW_SPEC_HOST_POWERSAVE 0x40 455#define SET_HW_SPEC_HOSTENCRDECR_MGMT 0x80 456 uint32_t TxWcbNumPerQueue; 457 uint32_t TotalRxWcb; 458} __packed HostCmd_DS_SET_HW_SPEC; 459 460typedef struct { 461 FWCmdHdr CmdHdr; 462 u_int8_t Version; /* version of the HW */ 463 u_int8_t HostIf; /* host interface */ 464 u_int16_t NumOfWCB; /* Max. number of WCB FW can handle */ 465 u_int16_t NumOfMCastAddr; /* MaxNbr of MC addresses FW can handle */ 466 u_int8_t PermanentAddr[6]; /* MAC address programmed in HW */ 467 u_int16_t RegionCode; 468 u_int16_t NumberOfAntenna; /* Number of antenna used */ 469 u_int32_t FWReleaseNumber; /* 4 byte of FW release number */ 470 u_int32_t WcbBase0; 471 u_int32_t RxPdWrPtr; 472 u_int32_t RxPdRdPtr; 473 u_int32_t ulFwAwakeCookie; 474 u_int32_t WcbBase1[TOTAL_TX_QUEUES-1]; 475} __packed HostCmd_DS_GET_HW_SPEC; 476 477typedef struct { 478 FWCmdHdr CmdHdr; 479 u_int32_t Enable; /* FALSE: Disable or TRUE: Enable */ 480} __packed HostCmd_DS_BSS_START; 481 482typedef struct { 483 u_int8_t ElemId; 484 u_int8_t Len; 485 u_int8_t OuiType[4]; /* 00:50:f2:01 */ 486 u_int8_t Ver[2]; 487 u_int8_t GrpKeyCipher[4]; 488 u_int8_t PwsKeyCnt[2]; 489 u_int8_t PwsKeyCipherList[4]; 490 u_int8_t AuthKeyCnt[2]; 491 u_int8_t AuthKeyList[4]; 492} __packed RsnIE_t; 493 494typedef struct { 495 u_int8_t ElemId; 496 u_int8_t Len; 497 u_int8_t Ver[2]; 498 u_int8_t GrpKeyCipher[4]; 499 u_int8_t PwsKeyCnt[2]; 500 u_int8_t PwsKeyCipherList[4]; 501 u_int8_t AuthKeyCnt[2]; 502 u_int8_t AuthKeyList[4]; 503 u_int8_t RsnCap[2]; 504} __packed Rsn48IE_t; 505 506typedef struct { 507 u_int8_t ElementId; 508 u_int8_t Len; 509 u_int8_t CfpCnt; 510 u_int8_t CfpPeriod; 511 u_int16_t CfpMaxDuration; 512 u_int16_t CfpDurationRemaining; 513} __packed CfParams_t; 514 515typedef struct { 516 u_int8_t ElementId; 517 u_int8_t Len; 518 u_int16_t AtimWindow; 519} __packed IbssParams_t; 520 521typedef union { 522 CfParams_t CfParamSet; 523 IbssParams_t IbssParamSet; 524} __packed SsParams_t; 525 526typedef struct { 527 u_int8_t ElementId; 528 u_int8_t Len; 529 u_int16_t DwellTime; 530 u_int8_t HopSet; 531 u_int8_t HopPattern; 532 u_int8_t HopIndex; 533} __packed FhParams_t; 534 535typedef struct { 536 u_int8_t ElementId; 537 u_int8_t Len; 538 u_int8_t CurrentChan; 539} __packed DsParams_t; 540 541typedef union { 542 FhParams_t FhParamSet; 543 DsParams_t DsParamSet; 544} __packed PhyParams_t; 545 546typedef struct { 547 u_int8_t FirstChannelNum; 548 u_int8_t NumOfChannels; 549 u_int8_t MaxTxPwrLevel; 550} __packed ChannelInfo_t; 551 552typedef struct { 553 u_int8_t ElementId; 554 u_int8_t Len; 555 u_int8_t CountryStr[3]; 556 ChannelInfo_t ChannelInfo[40]; 557} __packed Country_t; 558 559typedef struct { 560 u_int8_t AIFSN : 4; 561 u_int8_t ACM : 1; 562 u_int8_t ACI : 2; 563 u_int8_t rsvd : 1; 564 565}__packed ACIAIFSN_field_t; 566 567typedef struct { 568 u_int8_t ECW_min : 4; 569 u_int8_t ECW_max : 4; 570}__packed ECWmin_max_field_t; 571 572typedef struct { 573 ACIAIFSN_field_t ACI_AIFSN; 574 ECWmin_max_field_t ECW_min_max; 575 u_int16_t TXOP_lim; 576}__packed ACparam_rcd_t; 577 578typedef struct { 579 u_int8_t ElementId; 580 u_int8_t Len; 581 u_int8_t OUI[3]; 582 u_int8_t Type; 583 u_int8_t Subtype; 584 u_int8_t version; 585 u_int8_t rsvd; 586 ACparam_rcd_t AC_BE; 587 ACparam_rcd_t AC_BK; 588 ACparam_rcd_t AC_VI; 589 ACparam_rcd_t AC_VO; 590} __packed WMM_param_elem_t ; 591 592typedef struct { 593#ifdef MWL_MBSS_SUPPORT 594 u_int8_t StaMacAddr[6]; 595#endif 596 u_int8_t SsId[32]; 597 u_int8_t BssType; 598 u_int16_t BcnPeriod; 599 u_int8_t DtimPeriod; 600 SsParams_t SsParamSet; 601 PhyParams_t PhyParamSet; 602 u_int16_t ProbeDelay; 603 u_int16_t CapInfo; /* see below */ 604 u_int8_t BssBasicRateSet[14]; 605 u_int8_t OpRateSet[14]; 606 RsnIE_t RsnIE; 607 Rsn48IE_t Rsn48IE; 608 WMM_param_elem_t WMMParam; 609 Country_t Country; 610 u_int32_t ApRFType; /* 0->B, 1->G, 2->Mixed, 3->A, 4->11J */ 611} __packed StartCmd_t; 612 613#define HostCmd_CAPINFO_DEFAULT 0x0000 614#define HostCmd_CAPINFO_ESS 0x0001 615#define HostCmd_CAPINFO_IBSS 0x0002 616#define HostCmd_CAPINFO_CF_POLLABLE 0x0004 617#define HostCmd_CAPINFO_CF_REQUEST 0x0008 618#define HostCmd_CAPINFO_PRIVACY 0x0010 619#define HostCmd_CAPINFO_SHORT_PREAMBLE 0x0020 620#define HostCmd_CAPINFO_PBCC 0x0040 621#define HostCmd_CAPINFO_CHANNEL_AGILITY 0x0080 622#define HostCmd_CAPINFO_SHORT_SLOT 0x0400 623#define HostCmd_CAPINFO_DSSS_OFDM 0x2000 624 625typedef struct { 626 FWCmdHdr CmdHdr; 627 StartCmd_t StartCmd; 628} __packed HostCmd_DS_AP_BEACON; 629 630typedef struct { 631 FWCmdHdr CmdHdr; 632 uint16_t FrmBodyLen; 633 uint8_t FrmBody[1]; /* NB: variable length */ 634} __packed HostCmd_DS_SET_BEACON; 635 636// Define data structure for HostCmd_CMD_MAC_MULTICAST_ADR 637typedef struct { 638 FWCmdHdr CmdHdr; 639 uint16_t Action; 640 uint16_t NumOfAdrs; 641#define MWL_HAL_MCAST_MAX 32 642 uint8_t MACList[6*32]; 643} __packed HostCmd_DS_MAC_MULTICAST_ADR; 644 645// Indicate to FW the current state of AP ERP info 646typedef struct { 647 FWCmdHdr CmdHdr; 648 uint32_t GProtectFlag; 649} __packed HostCmd_FW_SET_G_PROTECT_FLAG; 650 651typedef struct { 652 FWCmdHdr CmdHdr; 653} __packed HostCmd_FW_SET_INFRA_MODE; 654 655// Define data structure for HostCmd_CMD_802_11_RF_CHANNEL 656typedef struct { 657 FWCmdHdr CmdHdr; 658 uint16_t Action; 659 uint8_t CurrentChannel; /* channel # */ 660 uint32_t ChannelFlags; /* see below */ 661} __packed HostCmd_FW_SET_RF_CHANNEL; 662 663/* bits 0-5 specify frequency band */ 664#define FREQ_BAND_2DOT4GHZ 0x0001 665#define FREQ_BAND_4DOT9GHZ 0x0002 /* XXX not implemented */ 666#define FREQ_BAND_5GHZ 0x0004 667#define FREQ_BAND_5DOT2GHZ 0x0008 /* XXX not implemented */ 668/* bits 6-10 specify channel width */ 669#define CH_AUTO_WIDTH 0x0000 /* XXX not used? */ 670#define CH_10_MHz_WIDTH 0x0040 671#define CH_20_MHz_WIDTH 0x0080 672#define CH_40_MHz_WIDTH 0x0100 673/* bits 11-12 specify extension channel */ 674#define EXT_CH_NONE 0x0000 /* no extension channel */ 675#define EXT_CH_ABOVE_CTRL_CH 0x0800 /* extension channel above */ 676#define EXT_CH_AUTO 0x1000 /* XXX not used? */ 677#define EXT_CH_BELOW_CTRL_CH 0x1800 /* extension channel below */ 678/* bits 13-31 are reserved */ 679 680#define FIXED_RATE_WITH_AUTO_RATE_DROP 0 681#define FIXED_RATE_WITHOUT_AUTORATE_DROP 1 682 683#define LEGACY_RATE_TYPE 0 684#define HT_RATE_TYPE 1 685 686#define RETRY_COUNT_VALID 0 687#define RETRY_COUNT_INVALID 1 688 689typedef struct { 690 // lower rate after the retry count 691 uint32_t FixRateType; //0: legacy, 1: HT 692 uint32_t RetryCountValid; //0: retry count is not valid, 1: use retry count specified 693} __packed FIX_RATE_FLAG; 694 695typedef struct { 696 FIX_RATE_FLAG FixRateTypeFlags; 697 uint32_t FixedRate; // legacy rate(not index) or an MCS code. 698 uint32_t RetryCount; 699} __packed FIXED_RATE_ENTRY; 700 701typedef struct { 702 FWCmdHdr CmdHdr; 703 uint32_t Action; //HostCmd_ACT_GEN_GET 0x0000 704 //HostCmd_ACT_GEN_SET 0x0001 705 //HostCmd_ACT_NOT_USE_FIXED_RATE 0x0002 706 uint32_t AllowRateDrop; // use fixed rate specified but firmware can drop to 707 uint32_t EntryCount; 708 FIXED_RATE_ENTRY FixedRateTable[4]; 709 uint8_t MulticastRate; 710 uint8_t MultiRateTxType; 711 uint8_t ManagementRate; 712} __packed HostCmd_FW_USE_FIXED_RATE; 713 714typedef struct { 715 uint32_t AllowRateDrop; 716 uint32_t EntryCount; 717 FIXED_RATE_ENTRY FixedRateTable[4]; 718} __packed USE_FIXED_RATE_INFO; 719 720typedef struct { 721 FWCmdHdr CmdHdr; 722 uint32_t Action; 723 uint32_t GIType; 724#define GI_TYPE_LONG 0x0001 725#define GI_TYPE_SHORT 0x0002 726} __packed HostCmd_FW_HT_GUARD_INTERVAL; 727 728typedef struct { 729 FWCmdHdr CmdHdr; 730 uint32_t Action; 731 uint8_t RxAntennaMap; 732 uint8_t TxAntennaMap; 733} __packed HostCmd_FW_HT_MIMO_CONFIG; 734 735typedef struct { 736 FWCmdHdr CmdHdr; 737 uint16_t Action; 738 uint8_t Slot; // Slot=0 if regular, Slot=1 if short. 739} __packed HostCmd_FW_SET_SLOT; 740 741// Define data structure for HostCmd_CMD_802_11_GET_STAT 742typedef struct { 743 FWCmdHdr CmdHdr; 744 uint32_t TxRetrySuccesses; 745 uint32_t TxMultipleRetrySuccesses; 746 uint32_t TxFailures; 747 uint32_t RTSSuccesses; 748 uint32_t RTSFailures; 749 uint32_t AckFailures; 750 uint32_t RxDuplicateFrames; 751 uint32_t FCSErrorCount; 752 uint32_t TxWatchDogTimeouts; 753 uint32_t RxOverflows; //used 754 uint32_t RxFragErrors; //used 755 uint32_t RxMemErrors; //used 756 uint32_t PointerErrors; //used 757 uint32_t TxUnderflows; //used 758 uint32_t TxDone; 759 uint32_t TxDoneBufTryPut; 760 uint32_t TxDoneBufPut; 761 uint32_t Wait4TxBuf; // Put size of requested buffer in here 762 uint32_t TxAttempts; 763 uint32_t TxSuccesses; 764 uint32_t TxFragments; 765 uint32_t TxMulticasts; 766 uint32_t RxNonCtlPkts; 767 uint32_t RxMulticasts; 768 uint32_t RxUndecryptableFrames; 769 uint32_t RxICVErrors; 770 uint32_t RxExcludedFrames; 771} __packed HostCmd_DS_802_11_GET_STAT; 772 773// Define data structure for HostCmd_CMD_MAC_REG_ACCESS 774typedef struct { 775 FWCmdHdr CmdHdr; 776 uint16_t Action; 777 uint16_t Offset; 778 uint32_t Value; 779 uint16_t Reserved; 780} __packed HostCmd_DS_MAC_REG_ACCESS; 781 782// Define data structure for HostCmd_CMD_BBP_REG_ACCESS 783typedef struct { 784 FWCmdHdr CmdHdr; 785 uint16_t Action; 786 uint16_t Offset; 787 uint8_t Value; 788 uint8_t Reserverd[3]; 789} __packed HostCmd_DS_BBP_REG_ACCESS; 790 791// Define data structure for HostCmd_CMD_RF_REG_ACCESS 792typedef struct { 793 FWCmdHdr CmdHdr; 794 uint16_t Action; 795 uint16_t Offset; 796 uint8_t Value; 797 uint8_t Reserverd[3]; 798} __packed HostCmd_DS_RF_REG_ACCESS; 799 800// Define data structure for HostCmd_CMD_802_11_RADIO_CONTROL 801typedef struct { 802 FWCmdHdr CmdHdr; 803 uint16_t Action; 804 uint16_t Control; // @bit0: 1/0,on/off, @bit1: 1/0, long/short @bit2: 1/0,auto/fix 805 uint16_t RadioOn; 806} __packed HostCmd_DS_802_11_RADIO_CONTROL; 807 808#define TX_POWER_LEVEL_TOTAL 8 809// Define data structure for HostCmd_CMD_802_11_RF_TX_POWER 810typedef struct { 811 FWCmdHdr CmdHdr; 812 uint16_t Action; 813 uint16_t SupportTxPowerLevel; 814 uint16_t CurrentTxPowerLevel; 815 uint16_t Reserved; 816 uint16_t PowerLevelList[TX_POWER_LEVEL_TOTAL]; 817} __packed HostCmd_DS_802_11_RF_TX_POWER; 818 819// Define data structure for HostCmd_CMD_802_11_RF_ANTENNA 820typedef struct _HostCmd_DS_802_11_RF_ANTENNA { 821 FWCmdHdr CmdHdr; 822 uint16_t Action; 823 uint16_t AntennaMode; // Number of antennas or 0xffff(diversity) 824} __packed HostCmd_DS_802_11_RF_ANTENNA; 825 826// Define data structure for HostCmd_CMD_802_11_PS_MODE 827typedef struct { 828 FWCmdHdr CmdHdr; 829 uint16_t Action; 830 uint16_t PowerMode; // CAM, Max.PSP or Fast PSP 831} __packed HostCmd_DS_802_11_PS_MODE; 832 833typedef struct { 834 FWCmdHdr CmdHdr; 835 uint16_t Action; 836 uint16_t Threshold; 837} __packed HostCmd_DS_802_11_RTS_THSD; 838 839// used for stand alone bssid sets/clears 840typedef struct { 841 FWCmdHdr CmdHdr; 842#ifdef MWL_MBSS_SUPPORT 843 uint16_t MacType; 844#define WL_MAC_TYPE_PRIMARY_CLIENT 0 845#define WL_MAC_TYPE_SECONDARY_CLIENT 1 846#define WL_MAC_TYPE_PRIMARY_AP 2 847#define WL_MAC_TYPE_SECONDARY_AP 3 848#endif 849 uint8_t MacAddr[6]; 850} __packed HostCmd_DS_SET_MAC, 851 HostCmd_FW_SET_BSSID, 852 HostCmd_FW_SET_MAC; 853 854// Indicate to FW to send out PS Poll 855typedef struct { 856 FWCmdHdr CmdHdr; 857 uint32_t PSPoll; 858} __packed HostCmd_FW_TX_POLL; 859 860// used for AID sets/clears 861typedef struct { 862 FWCmdHdr CmdHdr; 863 uint16_t AssocID; 864 uint8_t MacAddr[6]; //AP's Mac Address(BSSID) 865 uint32_t GProtection; 866 uint8_t ApRates[ RATE_INDEX_MAX_ARRAY]; 867} __packed HostCmd_FW_SET_AID; 868 869typedef struct { 870 uint32_t LegacyRateBitMap; 871 uint32_t HTRateBitMap; 872 uint16_t CapInfo; 873 uint16_t HTCapabilitiesInfo; 874 uint8_t MacHTParamInfo; 875 uint8_t Rev; 876 struct { 877 uint8_t ControlChan; 878 uint8_t AddChan; 879 uint16_t OpMode; 880 uint16_t stbc; 881 } __packed AddHtInfo; 882} __packed PeerInfo_t; 883 884typedef struct { 885 FWCmdHdr CmdHdr; 886 uint16_t AID; 887 uint8_t MacAddr[6]; 888 uint16_t StnId; 889 uint16_t Action; 890 uint16_t Reserved; 891 PeerInfo_t PeerInfo; 892 uint8_t Qosinfo; 893 uint8_t isQosSta; 894 uint32_t FwStaPtr; 895} __packed HostCmd_FW_SET_NEW_STN; 896 897typedef struct { 898 FWCmdHdr CmdHdr; 899 uint8_t tick; 900} __packed HostCmd_FW_SET_KEEP_ALIVE_TICK; 901 902typedef struct { 903 FWCmdHdr CmdHdr; 904 uint8_t QNum; 905} __packed HostCmd_FW_SET_RIFS; 906 907typedef struct { 908 FWCmdHdr CmdHdr; 909 uint8_t ApMode; 910} __packed HostCmd_FW_SET_APMODE; 911 912typedef struct { 913 FWCmdHdr CmdHdr; 914 uint16_t Action; // see following 915 uint16_t RadarTypeCode; 916} __packed HostCmd_802_11h_Detect_Radar; 917 918#define DR_DFS_DISABLE 0 919#define DR_CHK_CHANNEL_AVAILABLE_START 1 920#define DR_CHK_CHANNEL_AVAILABLE_STOP 2 921#define DR_IN_SERVICE_MONITOR_START 3 922 923//New Structure for Update Tim 30/9/2003 924typedef struct { 925 FWCmdHdr CmdHdr; 926 uint16_t Aid; 927 uint32_t Set; 928} __packed HostCmd_UpdateTIM; 929 930typedef struct { 931 FWCmdHdr CmdHdr; 932 uint32_t SsidBroadcastEnable; 933} __packed HostCmd_SSID_BROADCAST; 934 935typedef struct { 936 FWCmdHdr CmdHdr; 937 uint32_t WdsEnable; 938} __packed HostCmd_WDS; 939 940typedef struct { 941 FWCmdHdr CmdHdr; 942 uint32_t Next11hChannel; 943 uint32_t Mode; 944 uint32_t InitialCount; 945 uint32_t ChannelFlags ; 946} __packed HostCmd_SET_SWITCH_CHANNEL; 947 948typedef struct { 949 FWCmdHdr CmdHdr; 950 uint32_t SpectrumMgmt; 951} __packed HostCmd_SET_SPECTRUM_MGMT; 952 953typedef struct { 954 FWCmdHdr CmdHdr; 955 int32_t PowerConstraint; 956} __packed HostCmd_SET_POWER_CONSTRAINT; 957 958typedef struct { 959 uint8_t FirstChannelNo; 960 uint8_t NoofChannel; 961 uint8_t MaxTransmitPw; 962} __packed DomainChannelEntry; 963 964typedef struct { 965 uint8_t CountryString[3]; 966 uint8_t GChannelLen; 967 DomainChannelEntry DomainEntryG[1]; /** Assume only 1 G zone **/ 968 uint8_t AChannelLen; 969 DomainChannelEntry DomainEntryA[20]; /** Assume max of 5 A zone **/ 970} __packed DomainCountryInfo; 971 972typedef struct { 973 FWCmdHdr CmdHdr; 974 uint32_t Action ; // 0 -> unset, 1 ->set 975 DomainCountryInfo DomainInfo ; 976} __packed HostCmd_SET_COUNTRY_INFO; 977 978typedef struct { 979 FWCmdHdr CmdHdr; 980 uint16_t regionCode ; 981} __packed HostCmd_SET_REGIONCODE_INFO; 982 983// for HostCmd_CMD_SET_WMM_MODE 984typedef struct { 985 FWCmdHdr CmdHdr; 986 uint16_t Action; // 0->unset, 1->set 987} __packed HostCmd_FW_SetWMMMode; 988 989typedef struct { 990 FWCmdHdr CmdHdr; 991 uint16_t Action; // 0->unset, 1->set 992 uint16_t IeListLen; 993 uint8_t IeList[200]; 994} __packed HostCmd_FW_SetIEs; 995 996#define EDCA_PARAM_SIZE 18 997#define BA_PARAM_SIZE 2 998 999typedef struct { 1000 FWCmdHdr CmdHdr; 1001 uint16_t Action; //0 = get all, 0x1 =set CWMin/Max, 0x2 = set TXOP , 0x4 =set AIFSN 1002 uint16_t TxOP; // in unit of 32 us 1003 uint32_t CWMax; // 0~15 1004 uint32_t CWMin; // 0~15 1005 uint8_t AIFSN; 1006 uint8_t TxQNum; // Tx Queue number. 1007} __packed HostCmd_FW_SET_EDCA_PARAMS; 1008 1009/****************************************************************************** 1010 @HWENCR@ 1011 Hardware Encryption related data structures and constant definitions. 1012 Note that all related changes are marked with the @HWENCR@ tag. 1013*******************************************************************************/ 1014 1015#define MAX_ENCR_KEY_LENGTH 16 /* max 128 bits - depends on type */ 1016#define MIC_KEY_LENGTH 8 /* size of Tx/Rx MIC key - 8 bytes*/ 1017 1018#define ENCR_KEY_TYPE_ID_WEP 0x00 /* Key type is WEP */ 1019#define ENCR_KEY_TYPE_ID_TKIP 0x01 /* Key type is TKIP */ 1020#define ENCR_KEY_TYPE_ID_AES 0x02 /* Key type is AES-CCMP */ 1021 1022/* flags used in structure - same as driver EKF_XXX flags */ 1023#define ENCR_KEY_FLAG_INUSE 0x00000001 /* indicate key is in use */ 1024#define ENCR_KEY_FLAG_RXGROUPKEY 0x00000002 /* Group key for RX only */ 1025#define ENCR_KEY_FLAG_TXGROUPKEY 0x00000004 /* Group key for TX */ 1026#define ENCR_KEY_FLAG_PAIRWISE 0x00000008 /* pairwise */ 1027#define ENCR_KEY_FLAG_RXONLY 0x00000010 /* only used for RX */ 1028// These flags are new additions - for hardware encryption commands only. 1029#define ENCR_KEY_FLAG_AUTHENTICATOR 0x00000020 /* Key is for Authenticator */ 1030#define ENCR_KEY_FLAG_TSC_VALID 0x00000040 /* Sequence counters valid */ 1031#define ENCR_KEY_FLAG_WEP_TXKEY 0x01000000 /* Tx key for WEP */ 1032#define ENCR_KEY_FLAG_MICKEY_VALID 0x02000000 /* Tx/Rx MIC keys are valid */ 1033 1034/* 1035 UPDATE_ENCRYPTION command action type. 1036*/ 1037typedef enum { 1038 // request to enable/disable HW encryption 1039 EncrActionEnableHWEncryption, 1040 // request to set encryption key 1041 EncrActionTypeSetKey, 1042 // request to remove one or more keys 1043 EncrActionTypeRemoveKey, 1044 EncrActionTypeSetGroupKey 1045} ENCR_ACTION_TYPE; 1046 1047/* 1048 Key material definitions (for WEP, TKIP, & AES-CCMP) 1049*/ 1050 1051/* 1052 WEP Key material definition 1053 ---------------------------- 1054 WEPKey --> An array of 'MAX_ENCR_KEY_LENGTH' bytes. 1055 Note that we do not support 152bit WEP keys 1056*/ 1057typedef struct { 1058 // WEP key material (max 128bit) 1059 uint8_t KeyMaterial[ MAX_ENCR_KEY_LENGTH ]; 1060} __packed WEP_TYPE_KEY; 1061 1062/* 1063 TKIP Key material definition 1064 ---------------------------- 1065 This structure defines TKIP key material. Note that 1066 the TxMicKey and RxMicKey may or may not be valid. 1067*/ 1068/* TKIP Sequence counter - 24 bits */ 1069/* Incremented on each fragment MPDU */ 1070typedef struct { 1071 uint16_t low; 1072 uint32_t high; 1073} __packed ENCR_TKIPSEQCNT; 1074 1075typedef struct { 1076 // TKIP Key material. Key type (group or pairwise key) is 1077 // determined by flags in KEY_PARAM_SET structure. 1078 uint8_t KeyMaterial[ MAX_ENCR_KEY_LENGTH ]; 1079 uint8_t TkipTxMicKey[ MIC_KEY_LENGTH ]; 1080 uint8_t TkipRxMicKey[ MIC_KEY_LENGTH ]; 1081 ENCR_TKIPSEQCNT TkipRsc; 1082 ENCR_TKIPSEQCNT TkipTsc; 1083} __packed TKIP_TYPE_KEY; 1084 1085/* 1086 AES-CCMP Key material definition 1087 -------------------------------- 1088 This structure defines AES-CCMP key material. 1089*/ 1090typedef struct { 1091 // AES Key material 1092 uint8_t KeyMaterial[ MAX_ENCR_KEY_LENGTH ]; 1093} __packed AES_TYPE_KEY; 1094 1095/* 1096 Encryption key definition. 1097 -------------------------- 1098 This structure provides all required/essential 1099 information about the key being set/removed. 1100*/ 1101typedef struct { 1102 uint16_t Length; // Total length of this structure 1103 uint16_t KeyTypeId; // Key type - WEP, TKIP or AES-CCMP. 1104 uint32_t KeyInfo; // key flags (ENCR_KEY_FLAG_XXX_ 1105 uint32_t KeyIndex; // For WEP only - actual key index 1106 uint16_t KeyLen; // Size of the key 1107 union { // Key material (variable size array) 1108 WEP_TYPE_KEY WepKey; 1109 TKIP_TYPE_KEY TkipKey; 1110 AES_TYPE_KEY AesKey; 1111 }__packed Key; 1112#ifdef MWL_MBSS_SUPPORT 1113 uint8_t Macaddr[6]; 1114#endif 1115} __packed KEY_PARAM_SET; 1116 1117/* 1118 HostCmd_FW_UPDATE_ENCRYPTION 1119 ---------------------------- 1120 Define data structure for updating firmware encryption keys. 1121 1122*/ 1123typedef struct { 1124 FWCmdHdr CmdHdr; 1125 uint32_t ActionType; // ENCR_ACTION_TYPE 1126 uint32_t DataLength; // size of the data buffer attached. 1127#ifdef MWL_MBSS_SUPPORT 1128 uint8_t macaddr[6]; 1129#endif 1130 uint8_t ActionData[1]; 1131} __packed HostCmd_FW_UPDATE_ENCRYPTION; 1132 1133typedef struct { 1134 FWCmdHdr CmdHdr; 1135 uint32_t ActionType; // ENCR_ACTION_TYPE 1136 uint32_t DataLength; // size of the data buffer attached. 1137 KEY_PARAM_SET KeyParam; 1138#ifndef MWL_MBSS_SUPPORT 1139 uint8_t Macaddr[8]; /* XXX? */ 1140#endif 1141} __packed HostCmd_FW_UPDATE_ENCRYPTION_SET_KEY; 1142 1143typedef struct { 1144 // Rate flags - see above. 1145 uint32_t Flags; 1146 // Rate in 500Kbps units. 1147 uint8_t RateKbps; 1148 // 802.11 rate to conversion table index value. 1149 // This is the value required by the firmware/hardware. 1150 uint16_t RateCodeToIndex; 1151}__packed RATE_INFO; 1152 1153/* 1154 UPDATE_STADB command action type. 1155*/ 1156typedef enum { 1157 // request to add entry to stainfo db 1158 StaInfoDbActionAddEntry, 1159 // request to modify peer entry 1160 StaInfoDbActionModifyEntry, 1161 // request to remove peer from stainfo db 1162 StaInfoDbActionRemoveEntry 1163}__packed STADB_ACTION_TYPE; 1164 1165/* 1166 @11E-BA@ 1167 802.11e/WMM Related command(s)/data structures 1168*/ 1169 1170// Flag to indicate if the stream is an immediate block ack stream. 1171// if this bit is not set, the stream is delayed block ack stream. 1172#define BASTREAM_FLAG_DELAYED_TYPE 0x00 1173#define BASTREAM_FLAG_IMMEDIATE_TYPE 0x01 1174 1175// Flag to indicate the direction of the stream (upstream/downstream). 1176// If this bit is not set, the direction is downstream. 1177#define BASTREAM_FLAG_DIRECTION_UPSTREAM 0x00 1178#define BASTREAM_FLAG_DIRECTION_DOWNSTREAM 0x02 1179#define BASTREAM_FLAG_DIRECTION_DLP 0x04 1180#define BASTREAM_FLAG_DIRECTION_BOTH 0x06 1181 1182typedef enum { 1183 BaCreateStream, 1184 BaUpdateStream, 1185 BaDestroyStream, 1186 BaFlushStream, 1187 BaCheckCreateStream 1188} BASTREAM_ACTION_TYPE; 1189 1190typedef struct { 1191 uint32_t Context; 1192} __packed BASTREAM_CONTEXT; 1193 1194// parameters for block ack creation 1195typedef struct { 1196 // BA Creation flags - see above 1197 uint32_t Flags; 1198 // idle threshold 1199 uint32_t IdleThrs; 1200 // block ack transmit threshold (after how many pkts should we send BAR?) 1201 uint32_t BarThrs; 1202 // receiver window size 1203 uint32_t WindowSize; 1204 // MAC Address of the BA partner 1205 uint8_t PeerMacAddr[6]; 1206 // Dialog Token 1207 uint8_t DialogToken; 1208 //TID for the traffic stream in this BA 1209 uint8_t Tid; 1210 // shared memory queue ID (not sure if this is required) 1211 uint8_t QueueId; 1212 uint8_t ParamInfo; 1213 // returned by firmware - firmware context pointer. 1214 // this context pointer will be passed to firmware for all future commands. 1215 BASTREAM_CONTEXT FwBaContext; 1216 uint8_t ResetSeqNo; /** 0 or 1**/ 1217 uint16_t StartSeqNo; 1218 1219 // proxy sta MAC Address 1220 uint8_t StaSrcMacAddr[6]; 1221}__packed BASTREAM_CREATE_STREAM; 1222 1223// new transmit sequence number information 1224typedef struct { 1225 // BA flags - see above 1226 uint32_t Flags; 1227 // returned by firmware in the create ba stream response 1228 BASTREAM_CONTEXT FwBaContext; 1229 // new sequence number for this block ack stream 1230 uint16_t BaSeqNum; 1231}__packed BASTREAM_UPDATE_STREAM; 1232 1233typedef struct { 1234 // BA Stream flags 1235 uint32_t Flags; 1236 // returned by firmware in the create ba stream response 1237 BASTREAM_CONTEXT FwBaContext; 1238}__packed BASTREAM_STREAM_INFO; 1239 1240//Command to create/destroy block ACK 1241typedef struct { 1242 FWCmdHdr CmdHdr; 1243 uint32_t ActionType; 1244 union 1245 { 1246 // information required to create BA Stream... 1247 BASTREAM_CREATE_STREAM CreateParams; 1248 // update starting/new sequence number etc. 1249 BASTREAM_UPDATE_STREAM UpdtSeqNum; 1250 // destroy an existing stream... 1251 BASTREAM_STREAM_INFO DestroyParams; 1252 // destroy an existing stream... 1253 BASTREAM_STREAM_INFO FlushParams; 1254 }__packed BaInfo; 1255}__packed HostCmd_FW_BASTREAM; 1256 1257// Define data structure for HostCmd_CMD_GET_WATCHDOG_BITMAP 1258typedef struct { 1259 FWCmdHdr CmdHdr; 1260 uint8_t Watchdogbitmap; // for SW/BA 1261} __packed HostCmd_FW_GET_WATCHDOG_BITMAP; 1262 1263// Define data structure for HostCmd_CMD_SET_REGION_POWER 1264typedef struct { 1265 FWCmdHdr CmdHdr; 1266 uint16_t MaxPowerLevel; 1267 uint16_t Reserved; 1268} __packed HostCmd_DS_SET_REGION_POWER; 1269 1270// Define data structure for HostCmd_CMD_SET_RATE_ADAPT_MODE 1271typedef struct { 1272 FWCmdHdr CmdHdr; 1273 uint16_t Action; 1274 uint16_t RateAdaptMode; 1275} __packed HostCmd_DS_SET_RATE_ADAPT_MODE; 1276 1277// Define data structure for HostCmd_CMD_SET_LINKADAPT_CS_MODE 1278typedef struct { 1279 FWCmdHdr CmdHdr; 1280 uint16_t Action; 1281 uint16_t CSMode; 1282} __packed HostCmd_DS_SET_LINKADAPT_CS_MODE; 1283 1284typedef struct { 1285 FWCmdHdr CmdHdr; 1286 uint32_t NProtectFlag; 1287} __packed HostCmd_FW_SET_N_PROTECT_FLAG; 1288 1289typedef struct { 1290 FWCmdHdr CmdHdr; 1291 uint8_t NProtectOpMode; 1292} __packed HostCmd_FW_SET_N_PROTECT_OPMODE; 1293 1294typedef struct { 1295 FWCmdHdr CmdHdr; 1296 uint8_t OptLevel; 1297} __packed HostCmd_FW_SET_OPTIMIZATION_LEVEL; 1298 1299typedef struct { 1300 FWCmdHdr CmdHdr; 1301 uint8_t annex; 1302 uint8_t index; 1303 uint8_t len; 1304 uint8_t Reserverd; 1305#define CAL_TBL_SIZE 160 1306 uint8_t calTbl[CAL_TBL_SIZE]; 1307} __packed HostCmd_FW_GET_CALTABLE; 1308 1309typedef struct { 1310 FWCmdHdr CmdHdr; 1311 uint8_t Addr[6]; 1312 uint8_t Enable; 1313 uint8_t Mode; 1314} __packed HostCmd_FW_SET_MIMOPSHT; 1315 1316#define MAX_BEACON_SIZE 1024 1317typedef struct { 1318 FWCmdHdr CmdHdr; 1319 uint16_t Bcnlen; 1320 uint8_t Reserverd[2]; 1321 uint8_t Bcn[MAX_BEACON_SIZE]; 1322} __packed HostCmd_FW_GET_BEACON; 1323 1324typedef struct { 1325 FWCmdHdr CmdHdr; 1326 uint8_t NumberOfPowersave; 1327 uint8_t reserved; 1328} __packed HostCmd_SET_POWERSAVESTATION; 1329 1330typedef struct { 1331 FWCmdHdr CmdHdr; 1332 uint16_t Aid; 1333 uint32_t Set; 1334 uint8_t reserved; 1335} __packed HostCmd_SET_TIM; 1336 1337typedef struct { 1338 FWCmdHdr CmdHdr; 1339 uint8_t TrafficMap[251]; 1340 uint8_t reserved; 1341} __packed HostCmd_GET_TIM; 1342 1343typedef struct { 1344 FWCmdHdr CmdHdr; 1345 uint8_t MacAddr[6]; 1346 uint8_t TID; 1347 uint16_t SeqNo; 1348 uint8_t reserved; 1349} __packed HostCmd_GET_SEQNO; 1350 1351typedef struct { 1352 FWCmdHdr CmdHdr; 1353 uint32_t Enable; //0 -- Disbale. or 1 -- Enable. 1354} __packed HostCmd_DWDS_ENABLE; 1355 1356typedef struct { 1357 FWCmdHdr CmdHdr; 1358 uint16_t Action; /* 0: Get. 1:Set */ 1359 uint32_t Option; /* 0: default. 1:Aggressive */ 1360 uint32_t Threshold; /* Range 0-200, default 8 */ 1361}__packed HostCmd_FW_AMPDU_RETRY_RATEDROP_MODE; 1362 1363typedef struct { 1364 FWCmdHdr CmdHdr; 1365 uint32_t Enable; /* 0 -- Disable. or 1 -- Enable */ 1366}__packed HostCmd_CFEND_ENABLE; 1367#endif /* _MWL_HALREG_H_ */ 1368