freebsd-dev/sys/dev/mwl/mwlreg.h
Pedro F. Giffuni 718cf2ccb9 sys/dev: further adoption of SPDX licensing ID tags.
Mainly focus on files that use BSD 2-Clause license, however the tool I
was using misidentified many licenses so this was mostly a manual - error
prone - task.

The Software Package Data Exchange (SPDX) group provides a specification
to make it easier for automated tools to detect and summarize well known
opensource licenses. We are gradually adopting the specification, noting
that the tags are considered only advisory and do not, in any way,
superceed or replace the license texts.
2017-11-27 14:52:40 +00:00

1382 lines
44 KiB
C

/*-
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
*
* Copyright (c) 2007-2009 Sam Leffler, Errno Consulting
* Copyright (c) 2007-2009 Marvell Semiconductor, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
* redistribution must be conditioned upon including a substantially
* similar Disclaimer requirement for further binary redistribution.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGES.
*
* $FreeBSD$
*/
/*
* Definitions for the Marvell Wireless LAN controller Hardware Access Layer.
*/
#ifndef _MWL_HALREG_H_
#define _MWL_HALREG_H_
#define MWL_ANT_INFO_SUPPORT /* per-antenna data in rx descriptor */
#define MACREG_REG_TSF_LOW 0xa600 /* TSF lo */
#define MACREG_REG_TSF_HIGH 0xa604 /* TSF hi */
#define MACREG_REG_CHIP_REV 0xa814 /* chip rev */
// Map to 0x80000000 (Bus control) on BAR0
#define MACREG_REG_H2A_INTERRUPT_EVENTS 0x00000C18 // (From host to ARM)
#define MACREG_REG_H2A_INTERRUPT_CAUSE 0x00000C1C // (From host to ARM)
#define MACREG_REG_H2A_INTERRUPT_MASK 0x00000C20 // (From host to ARM)
#define MACREG_REG_H2A_INTERRUPT_CLEAR_SEL 0x00000C24 // (From host to ARM)
#define MACREG_REG_H2A_INTERRUPT_STATUS_MASK 0x00000C28 // (From host to ARM)
#define MACREG_REG_A2H_INTERRUPT_EVENTS 0x00000C2C // (From ARM to host)
#define MACREG_REG_A2H_INTERRUPT_CAUSE 0x00000C30 // (From ARM to host)
#define MACREG_REG_A2H_INTERRUPT_MASK 0x00000C34 // (From ARM to host)
#define MACREG_REG_A2H_INTERRUPT_CLEAR_SEL 0x00000C38 // (From ARM to host)
#define MACREG_REG_A2H_INTERRUPT_STATUS_MASK 0x00000C3C // (From ARM to host)
// Map to 0x80000000 on BAR1
#define MACREG_REG_GEN_PTR 0x00000C10
#define MACREG_REG_INT_CODE 0x00000C14
#define MACREG_REG_SCRATCH 0x00000C40
#define MACREG_REG_FW_PRESENT 0x0000BFFC
#define MACREG_REG_PROMISCUOUS 0xA300
// Bit definitio for MACREG_REG_A2H_INTERRUPT_CAUSE (A2HRIC)
#define MACREG_A2HRIC_BIT_TX_DONE 0x00000001 // bit 0
#define MACREG_A2HRIC_BIT_RX_RDY 0x00000002 // bit 1
#define MACREG_A2HRIC_BIT_OPC_DONE 0x00000004 // bit 2
#define MACREG_A2HRIC_BIT_MAC_EVENT 0x00000008 // bit 3
#define MACREG_A2HRIC_BIT_RX_PROBLEM 0x00000010 // bit 4
#define MACREG_A2HRIC_BIT_RADIO_OFF 0x00000020 // bit 5
#define MACREG_A2HRIC_BIT_RADIO_ON 0x00000040 // bit 6
#define MACREG_A2HRIC_BIT_RADAR_DETECT 0x00000080 // bit 7
#define MACREG_A2HRIC_BIT_ICV_ERROR 0x00000100 // bit 8
#define MACREG_A2HRIC_BIT_MIC_ERROR 0x00000200 // bit 9
#define MACREG_A2HRIC_BIT_QUEUE_EMPTY 0x00004000
#define MACREG_A2HRIC_BIT_QUEUE_FULL 0x00000800
#define MACREG_A2HRIC_BIT_CHAN_SWITCH 0x00001000
#define MACREG_A2HRIC_BIT_TX_WATCHDOG 0x00002000
#define MACREG_A2HRIC_BIT_BA_WATCHDOG 0x00000400
#define MACREQ_A2HRIC_BIT_TX_ACK 0x00008000
#define ISR_SRC_BITS ((MACREG_A2HRIC_BIT_RX_RDY) | \
(MACREG_A2HRIC_BIT_TX_DONE) | \
(MACREG_A2HRIC_BIT_OPC_DONE) | \
(MACREG_A2HRIC_BIT_MAC_EVENT)| \
(MACREG_A2HRIC_BIT_MIC_ERROR)| \
(MACREG_A2HRIC_BIT_ICV_ERROR)| \
(MACREG_A2HRIC_BIT_RADAR_DETECT)| \
(MACREG_A2HRIC_BIT_CHAN_SWITCH)| \
(MACREG_A2HRIC_BIT_TX_WATCHDOG)| \
(MACREG_A2HRIC_BIT_QUEUE_EMPTY)| \
(MACREG_A2HRIC_BIT_BA_WATCHDOG)| \
(MACREQ_A2HRIC_BIT_TX_ACK))
#define MACREG_A2HRIC_BIT_MASK ISR_SRC_BITS
// Bit definitio for MACREG_REG_H2A_INTERRUPT_CAUSE (H2ARIC)
#define MACREG_H2ARIC_BIT_PPA_READY 0x00000001 // bit 0
#define MACREG_H2ARIC_BIT_DOOR_BELL 0x00000002 // bit 1
#define ISR_RESET (1<<15)
// INT code register event definition
#define MACREG_INT_CODE_CMD_FINISHED 0x00000005
/*
* Host/Firmware Interface definitions.
*/
/**
* Define total number of TX queues in the shared memory.
* This count includes the EDCA queues, Block Ack queues, and HCCA queues
* In addition to this, there could be a management packet queue some
* time in the future
*/
#define NUM_EDCA_QUEUES 4
#define NUM_HCCA_QUEUES 0
#define NUM_BA_QUEUES 0
#define NUM_MGMT_QUEUES 0
#define NUM_ACK_EVENT_QUEUE 1
#define TOTAL_TX_QUEUES \
(NUM_EDCA_QUEUES + NUM_HCCA_QUEUES + NUM_BA_QUEUES + NUM_MGMT_QUEUES + NUM_ACK_EVENT_QUEUE)
#define MAX_TXWCB_QUEUES TOTAL_TX_QUEUES - NUM_ACK_EVENT_QUEUE
#define MAX_RXWCB_QUEUES 1
//=============================================================================
// PUBLIC DEFINITIONS
//=============================================================================
#define RATE_INDEX_MAX_ARRAY 14
#define WOW_MAX_STATION 32
/*
* Hardware tx/rx descriptors.
*
* NB: tx descriptor size must match f/w expected size
* because f/w prefetch's the next descriptor linearly
* and doesn't chase the next pointer.
*/
struct mwl_txdesc {
uint32_t Status;
#define EAGLE_TXD_STATUS_IDLE 0x00000000
#define EAGLE_TXD_STATUS_USED 0x00000001
#define EAGLE_TXD_STATUS_OK 0x00000001
#define EAGLE_TXD_STATUS_OK_RETRY 0x00000002
#define EAGLE_TXD_STATUS_OK_MORE_RETRY 0x00000004
#define EAGLE_TXD_STATUS_MULTICAST_TX 0x00000008
#define EAGLE_TXD_STATUS_BROADCAST_TX 0x00000010
#define EAGLE_TXD_STATUS_FAILED_LINK_ERROR 0x00000020
#define EAGLE_TXD_STATUS_FAILED_EXCEED_LIMIT 0x00000040
#define EAGLE_TXD_STATUS_FAILED_XRETRY EAGLE_TXD_STATUS_FAILED_EXCEED_LIMIT
#define EAGLE_TXD_STATUS_FAILED_AGING 0x00000080
#define EAGLE_TXD_STATUS_FW_OWNED 0x80000000
uint8_t DataRate;
uint8_t TxPriority;
uint16_t QosCtrl;
uint32_t PktPtr;
uint16_t PktLen;
uint8_t DestAddr[6];
uint32_t pPhysNext;
uint32_t SapPktInfo;
#define EAGLE_TXD_MODE_BONLY 1
#define EAGLE_TXD_MODE_GONLY 2
#define EAGLE_TXD_MODE_BG 3
#define EAGLE_TXD_MODE_NONLY 4
#define EAGLE_TXD_MODE_BN 5
#define EAGLE_TXD_MODE_GN 6
#define EAGLE_TXD_MODE_BGN 7
#define EAGLE_TXD_MODE_AONLY 8
#define EAGLE_TXD_MODE_AG 10
#define EAGLE_TXD_MODE_AN 12
uint16_t Format;
#define EAGLE_TXD_FORMAT 0x0001 /* frame format/rate */
#define EAGLE_TXD_FORMAT_LEGACY 0x0000 /* legacy rate frame */
#define EAGLE_TXD_FORMAT_HT 0x0001 /* HT rate frame */
#define EAGLE_TXD_GI 0x0002 /* guard interval */
#define EAGLE_TXD_GI_SHORT 0x0002 /* short guard interval */
#define EAGLE_TXD_GI_LONG 0x0000 /* long guard interval */
#define EAGLE_TXD_CHW 0x0004 /* channel width */
#define EAGLE_TXD_CHW_20 0x0000 /* 20MHz channel width */
#define EAGLE_TXD_CHW_40 0x0004 /* 40MHz channel width */
#define EAGLE_TXD_RATE 0x01f8 /* tx rate (legacy)/ MCS */
#define EAGLE_TXD_RATE_S 3
#define EAGLE_TXD_ADV 0x0600 /* advanced coding */
#define EAGLE_TXD_ADV_S 9
#define EAGLE_TXD_ADV_NONE 0x0000
#define EAGLE_TXD_ADV_LDPC 0x0200
#define EAGLE_TXD_ADV_RS 0x0400
/* NB: 3 is reserved */
#define EAGLE_TXD_ANTENNA 0x1800 /* antenna select */
#define EAGLE_TXD_ANTENNA_S 11
#define EAGLE_TXD_EXTCHAN 0x6000 /* extension channel */
#define EAGLE_TXD_EXTCHAN_S 13
#define EAGLE_TXD_EXTCHAN_HI 0x0000 /* above */
#define EAGLE_TXD_EXTCHAN_LO 0x2000 /* below */
#define EAGLE_TXD_PREAMBLE 0x8000
#define EAGLE_TXD_PREAMBLE_SHORT 0x8000 /* short preamble */
#define EAGLE_TXD_PREAMBLE_LONG 0x0000 /* long preamble */
uint16_t pad; /* align to 4-byte boundary */
#define EAGLE_TXD_FIXED_RATE 0x0100 /* get tx rate from Format */
#define EAGLE_TXD_DONT_AGGR 0x0200 /* don't aggregate frame */
uint32_t ack_wcb_addr;
} __packed;
struct mwl_ant_info {
uint8_t rssi_a; /* RSSI for antenna A */
uint8_t rssi_b; /* RSSI for antenna B */
uint8_t rssi_c; /* RSSI for antenna C */
uint8_t rsvd1; /* Reserved */
uint8_t nf_a; /* Noise floor for antenna A */
uint8_t nf_b; /* Noise floor for antenna B */
uint8_t nf_c; /* Noise floor for antenna C */
uint8_t rsvd2; /* Reserved */
uint8_t nf; /* Noise floor */
uint8_t rsvd3[3]; /* Reserved - To make word aligned */
} __packed;
struct mwl_rxdesc {
uint8_t RxControl; /* control element */
#define EAGLE_RXD_CTRL_DRIVER_OWN 0x00
#define EAGLE_RXD_CTRL_OS_OWN 0x04
#define EAGLE_RXD_CTRL_DMA_OWN 0x80
uint8_t RSSI; /* received signal strengt indication */
uint8_t Status; /* status field w/ USED bit */
#define EAGLE_RXD_STATUS_IDLE 0x00
#define EAGLE_RXD_STATUS_OK 0x01
#define EAGLE_RXD_STATUS_MULTICAST_RX 0x02
#define EAGLE_RXD_STATUS_BROADCAST_RX 0x04
#define EAGLE_RXD_STATUS_FRAGMENT_RX 0x08
#define EAGLE_RXD_STATUS_GENERAL_DECRYPT_ERR 0xff
#define EAGLE_RXD_STATUS_DECRYPT_ERR_MASK 0x80
#define EAGLE_RXD_STATUS_TKIP_MIC_DECRYPT_ERR 0x02
#define EAGLE_RXD_STATUS_WEP_ICV_DECRYPT_ERR 0x04
#define EAGLE_RXD_STATUS_TKIP_ICV_DECRYPT_ERR 0x08
uint8_t Channel; /* channel # pkt received on */
uint16_t PktLen; /* total length of received data */
uint8_t SQ2; /* not used */
uint8_t Rate; /* received data rate */
uint32_t pPhysBuffData; /* physical address of payload data */
uint32_t pPhysNext; /* physical address of next RX desc */
uint16_t QosCtrl; /* received QosCtrl field variable */
uint16_t HtSig2; /* like name states */
#ifdef MWL_ANT_INFO_SUPPORT
struct mwl_ant_info ai; /* antenna info */
#endif
} __packed;
/*
// Define OpMode for SoftAP/Station mode
//
// The following mode signature has to be written to PCI scratch register#0
// right after successfully downloading the last block of firmware and
// before waiting for firmware ready signature
*/
#define HostCmd_STA_MODE 0x5A
#define HostCmd_SOFTAP_MODE 0xA5
#define HostCmd_STA_FWRDY_SIGNATURE 0xF0F1F2F4
#define HostCmd_SOFTAP_FWRDY_SIGNATURE 0xF1F2F4A5
//***************************************************************************
//***************************************************************************
//***************************************************************************
#define HostCmd_CMD_CODE_DNLD 0x0001
#define HostCmd_CMD_GET_HW_SPEC 0x0003
#define HostCmd_CMD_SET_HW_SPEC 0x0004
#define HostCmd_CMD_MAC_MULTICAST_ADR 0x0010
#define HostCmd_CMD_802_11_GET_STAT 0x0014
#define HostCmd_CMD_MAC_REG_ACCESS 0x0019
#define HostCmd_CMD_BBP_REG_ACCESS 0x001a
#define HostCmd_CMD_RF_REG_ACCESS 0x001b
#define HostCmd_CMD_802_11_RADIO_CONTROL 0x001c
#define HostCmd_CMD_802_11_RF_TX_POWER 0x001e
#define HostCmd_CMD_802_11_RF_ANTENNA 0x0020
#define HostCmd_CMD_SET_BEACON 0x0100
#define HostCmd_CMD_SET_AID 0x010d
#define HostCmd_CMD_SET_RF_CHANNEL 0x010a
#define HostCmd_CMD_SET_INFRA_MODE 0x010e
#define HostCmd_CMD_SET_G_PROTECT_FLAG 0x010f
#define HostCmd_CMD_802_11_RTS_THSD 0x0113
#define HostCmd_CMD_802_11_SET_SLOT 0x0114
#define HostCmd_CMD_802_11H_DETECT_RADAR 0x0120
#define HostCmd_CMD_SET_WMM_MODE 0x0123
#define HostCmd_CMD_HT_GUARD_INTERVAL 0x0124
#define HostCmd_CMD_SET_FIXED_RATE 0x0126
#define HostCmd_CMD_SET_LINKADAPT_CS_MODE 0x0129
#define HostCmd_CMD_SET_MAC_ADDR 0x0202
#define HostCmd_CMD_SET_RATE_ADAPT_MODE 0x0203
#define HostCmd_CMD_GET_WATCHDOG_BITMAP 0x0205
//SoftAP command code
#define HostCmd_CMD_BSS_START 0x1100
#define HostCmd_CMD_SET_NEW_STN 0x1111
#define HostCmd_CMD_SET_KEEP_ALIVE 0x1112
#define HostCmd_CMD_SET_APMODE 0x1114
#define HostCmd_CMD_SET_SWITCH_CHANNEL 0x1121
/*
@HWENCR@
Command to update firmware encryption keys.
*/
#define HostCmd_CMD_UPDATE_ENCRYPTION 0x1122
/*
@11E-BA@
Command to create/destroy block ACK
*/
#define HostCmd_CMD_BASTREAM 0x1125
#define HostCmd_CMD_SET_RIFS 0x1126
#define HostCmd_CMD_SET_N_PROTECT_FLAG 0x1131
#define HostCmd_CMD_SET_N_PROTECT_OPMODE 0x1132
#define HostCmd_CMD_SET_OPTIMIZATION_LEVEL 0x1133
#define HostCmd_CMD_GET_CALTABLE 0x1134
#define HostCmd_CMD_SET_MIMOPSHT 0x1135
#define HostCmd_CMD_GET_BEACON 0x1138
#define HostCmd_CMD_SET_REGION_CODE 0x1139
#define HostCmd_CMD_SET_POWERSAVESTATION 0x1140
#define HostCmd_CMD_SET_TIM 0x1141
#define HostCmd_CMD_GET_TIM 0x1142
#define HostCmd_CMD_GET_SEQNO 0x1143
#define HostCmd_CMD_DWDS_ENABLE 0x1144
#define HostCmd_CMD_AMPDU_RETRY_RATEDROP_MODE 0x1145
#define HostCmd_CMD_CFEND_ENABLE 0x1146
/*
// Define general result code for each command
*/
#define HostCmd_RESULT_OK 0x0000 // OK
#define HostCmd_RESULT_ERROR 0x0001 // Genenral error
#define HostCmd_RESULT_NOT_SUPPORT 0x0002 // Command is not valid
#define HostCmd_RESULT_PENDING 0x0003 // Command is pending (will be processed)
#define HostCmd_RESULT_BUSY 0x0004 // System is busy (command ignored)
#define HostCmd_RESULT_PARTIAL_DATA 0x0005 // Data buffer is not big enough
/*
// Definition of action or option for each command
//
// Define general purpose action
*/
#define HostCmd_ACT_GEN_READ 0x0000
#define HostCmd_ACT_GEN_WRITE 0x0001
#define HostCmd_ACT_GEN_GET 0x0000
#define HostCmd_ACT_GEN_SET 0x0001
#define HostCmd_ACT_GEN_OFF 0x0000
#define HostCmd_ACT_GEN_ON 0x0001
#define HostCmd_ACT_DIFF_CHANNEL 0x0002
#define HostCmd_ACT_GEN_SET_LIST 0x0002
// Define action or option for HostCmd_FW_USE_FIXED_RATE
#define HostCmd_ACT_USE_FIXED_RATE 0x0001
#define HostCmd_ACT_NOT_USE_FIXED_RATE 0x0002
// Define action or option for HostCmd_CMD_802_11_SET_WEP
//#define HostCmd_ACT_ENABLE 0x0001 // Use MAC control for WEP on/off
//#define HostCmd_ACT_DISABLE 0x0000
#define HostCmd_ACT_ADD 0x0002
#define HostCmd_ACT_REMOVE 0x0004
#define HostCmd_ACT_USE_DEFAULT 0x0008
#define HostCmd_TYPE_WEP_40_BIT 0x0001 // 40 bit
#define HostCmd_TYPE_WEP_104_BIT 0x0002 // 104 bit
#define HostCmd_TYPE_WEP_128_BIT 0x0003 // 128 bit
#define HostCmd_TYPE_WEP_TX_KEY 0x0004 // TX WEP
#define HostCmd_NUM_OF_WEP_KEYS 4
#define HostCmd_WEP_KEY_INDEX_MASK 0x3fffffff
// Define action or option for HostCmd_CMD_802_11_RESET
#define HostCmd_ACT_HALT 0x0001
#define HostCmd_ACT_RESTART 0x0002
// Define action or option for HostCmd_CMD_802_11_RADIO_CONTROL
#define HostCmd_TYPE_AUTO_PREAMBLE 0x0001
#define HostCmd_TYPE_SHORT_PREAMBLE 0x0002
#define HostCmd_TYPE_LONG_PREAMBLE 0x0003
// Define action or option for CMD_802_11_RF_CHANNEL
#define HostCmd_TYPE_802_11A 0x0001
#define HostCmd_TYPE_802_11B 0x0002
// Define action or option for HostCmd_CMD_802_11_RF_TX_POWER
#define HostCmd_ACT_TX_POWER_OPT_SET_HIGH 0x0003
#define HostCmd_ACT_TX_POWER_OPT_SET_MID 0x0002
#define HostCmd_ACT_TX_POWER_OPT_SET_LOW 0x0001
#define HostCmd_ACT_TX_POWER_OPT_SET_AUTO 0x0000
#define HostCmd_ACT_TX_POWER_LEVEL_MIN 0x000e // in dbm
#define HostCmd_ACT_TX_POWER_LEVEL_GAP 0x0001 // in dbm
// Define action or option for HostCmd_CMD_802_11_DATA_RATE
#define HostCmd_ACT_SET_TX_AUTO 0x0000
#define HostCmd_ACT_SET_TX_FIX_RATE 0x0001
#define HostCmd_ACT_GET_TX_RATE 0x0002
#define HostCmd_ACT_SET_RX 0x0001
#define HostCmd_ACT_SET_TX 0x0002
#define HostCmd_ACT_SET_BOTH 0x0003
#define HostCmd_ACT_GET_RX 0x0004
#define HostCmd_ACT_GET_TX 0x0008
#define HostCmd_ACT_GET_BOTH 0x000c
#define TYPE_ANTENNA_DIVERSITY 0xffff
// Define action or option for HostCmd_CMD_802_11_PS_MODE
#define HostCmd_TYPE_CAM 0x0000
#define HostCmd_TYPE_MAX_PSP 0x0001
#define HostCmd_TYPE_FAST_PSP 0x0002
#define HostCmd_CMD_SET_EDCA_PARAMS 0x0115
//=============================================================================
// HOST COMMAND DEFINITIONS
//=============================================================================
//
// Definition of data structure for each command
//
// Define general data structure
typedef struct {
uint16_t Cmd;
uint16_t Length;
#ifdef MWL_MBSS_SUPPORT
uint8_t SeqNum;
uint8_t MacId;
#else
uint16_t SeqNum;
#endif
uint16_t Result;
} __packed FWCmdHdr;
typedef struct {
FWCmdHdr CmdHdr;
uint8_t Version; // HW revision
uint8_t HostIf; // Host interface
uint16_t NumOfMCastAdr; // Max. number of Multicast address FW can handle
uint8_t PermanentAddr[6]; // MAC address
uint16_t RegionCode; // Region Code
uint32_t FWReleaseNumber; // 4 byte of FW release number
uint32_t ulFwAwakeCookie; // Firmware awake cookie
uint32_t DeviceCaps; // Device capabilities (see above)
uint32_t RxPdWrPtr; // Rx shared memory queue
uint32_t NumTxQueues; // # TX queues in WcbBase array
uint32_t WcbBase[MAX_TXWCB_QUEUES]; // TX WCB Rings
uint32_t Flags;
#define SET_HW_SPEC_DISABLEMBSS 0x08
#define SET_HW_SPEC_HOSTFORM_BEACON 0x10
#define SET_HW_SPEC_HOSTFORM_PROBERESP 0x20
#define SET_HW_SPEC_HOST_POWERSAVE 0x40
#define SET_HW_SPEC_HOSTENCRDECR_MGMT 0x80
uint32_t TxWcbNumPerQueue;
uint32_t TotalRxWcb;
} __packed HostCmd_DS_SET_HW_SPEC;
typedef struct {
FWCmdHdr CmdHdr;
u_int8_t Version; /* version of the HW */
u_int8_t HostIf; /* host interface */
u_int16_t NumOfWCB; /* Max. number of WCB FW can handle */
u_int16_t NumOfMCastAddr; /* MaxNbr of MC addresses FW can handle */
u_int8_t PermanentAddr[6]; /* MAC address programmed in HW */
u_int16_t RegionCode;
u_int16_t NumberOfAntenna; /* Number of antenna used */
u_int32_t FWReleaseNumber; /* 4 byte of FW release number */
u_int32_t WcbBase0;
u_int32_t RxPdWrPtr;
u_int32_t RxPdRdPtr;
u_int32_t ulFwAwakeCookie;
u_int32_t WcbBase1[TOTAL_TX_QUEUES-1];
} __packed HostCmd_DS_GET_HW_SPEC;
typedef struct {
FWCmdHdr CmdHdr;
u_int32_t Enable; /* FALSE: Disable or TRUE: Enable */
} __packed HostCmd_DS_BSS_START;
typedef struct {
u_int8_t ElemId;
u_int8_t Len;
u_int8_t OuiType[4]; /* 00:50:f2:01 */
u_int8_t Ver[2];
u_int8_t GrpKeyCipher[4];
u_int8_t PwsKeyCnt[2];
u_int8_t PwsKeyCipherList[4];
u_int8_t AuthKeyCnt[2];
u_int8_t AuthKeyList[4];
} __packed RsnIE_t;
typedef struct {
u_int8_t ElemId;
u_int8_t Len;
u_int8_t Ver[2];
u_int8_t GrpKeyCipher[4];
u_int8_t PwsKeyCnt[2];
u_int8_t PwsKeyCipherList[4];
u_int8_t AuthKeyCnt[2];
u_int8_t AuthKeyList[4];
u_int8_t RsnCap[2];
} __packed Rsn48IE_t;
typedef struct {
u_int8_t ElementId;
u_int8_t Len;
u_int8_t CfpCnt;
u_int8_t CfpPeriod;
u_int16_t CfpMaxDuration;
u_int16_t CfpDurationRemaining;
} __packed CfParams_t;
typedef struct {
u_int8_t ElementId;
u_int8_t Len;
u_int16_t AtimWindow;
} __packed IbssParams_t;
typedef union {
CfParams_t CfParamSet;
IbssParams_t IbssParamSet;
} __packed SsParams_t;
typedef struct {
u_int8_t ElementId;
u_int8_t Len;
u_int16_t DwellTime;
u_int8_t HopSet;
u_int8_t HopPattern;
u_int8_t HopIndex;
} __packed FhParams_t;
typedef struct {
u_int8_t ElementId;
u_int8_t Len;
u_int8_t CurrentChan;
} __packed DsParams_t;
typedef union {
FhParams_t FhParamSet;
DsParams_t DsParamSet;
} __packed PhyParams_t;
typedef struct {
u_int8_t FirstChannelNum;
u_int8_t NumOfChannels;
u_int8_t MaxTxPwrLevel;
} __packed ChannelInfo_t;
typedef struct {
u_int8_t ElementId;
u_int8_t Len;
u_int8_t CountryStr[3];
ChannelInfo_t ChannelInfo[40];
} __packed Country_t;
typedef struct {
u_int8_t AIFSN : 4;
u_int8_t ACM : 1;
u_int8_t ACI : 2;
u_int8_t rsvd : 1;
}__packed ACIAIFSN_field_t;
typedef struct {
u_int8_t ECW_min : 4;
u_int8_t ECW_max : 4;
}__packed ECWmin_max_field_t;
typedef struct {
ACIAIFSN_field_t ACI_AIFSN;
ECWmin_max_field_t ECW_min_max;
u_int16_t TXOP_lim;
}__packed ACparam_rcd_t;
typedef struct {
u_int8_t ElementId;
u_int8_t Len;
u_int8_t OUI[3];
u_int8_t Type;
u_int8_t Subtype;
u_int8_t version;
u_int8_t rsvd;
ACparam_rcd_t AC_BE;
ACparam_rcd_t AC_BK;
ACparam_rcd_t AC_VI;
ACparam_rcd_t AC_VO;
} __packed WMM_param_elem_t ;
typedef struct {
#ifdef MWL_MBSS_SUPPORT
u_int8_t StaMacAddr[6];
#endif
u_int8_t SsId[32];
u_int8_t BssType;
u_int16_t BcnPeriod;
u_int8_t DtimPeriod;
SsParams_t SsParamSet;
PhyParams_t PhyParamSet;
u_int16_t ProbeDelay;
u_int16_t CapInfo; /* see below */
u_int8_t BssBasicRateSet[14];
u_int8_t OpRateSet[14];
RsnIE_t RsnIE;
Rsn48IE_t Rsn48IE;
WMM_param_elem_t WMMParam;
Country_t Country;
u_int32_t ApRFType; /* 0->B, 1->G, 2->Mixed, 3->A, 4->11J */
} __packed StartCmd_t;
#define HostCmd_CAPINFO_DEFAULT 0x0000
#define HostCmd_CAPINFO_ESS 0x0001
#define HostCmd_CAPINFO_IBSS 0x0002
#define HostCmd_CAPINFO_CF_POLLABLE 0x0004
#define HostCmd_CAPINFO_CF_REQUEST 0x0008
#define HostCmd_CAPINFO_PRIVACY 0x0010
#define HostCmd_CAPINFO_SHORT_PREAMBLE 0x0020
#define HostCmd_CAPINFO_PBCC 0x0040
#define HostCmd_CAPINFO_CHANNEL_AGILITY 0x0080
#define HostCmd_CAPINFO_SHORT_SLOT 0x0400
#define HostCmd_CAPINFO_DSSS_OFDM 0x2000
typedef struct {
FWCmdHdr CmdHdr;
StartCmd_t StartCmd;
} __packed HostCmd_DS_AP_BEACON;
typedef struct {
FWCmdHdr CmdHdr;
uint16_t FrmBodyLen;
uint8_t FrmBody[1]; /* NB: variable length */
} __packed HostCmd_DS_SET_BEACON;
// Define data structure for HostCmd_CMD_MAC_MULTICAST_ADR
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
uint16_t NumOfAdrs;
#define MWL_HAL_MCAST_MAX 32
uint8_t MACList[6*32];
} __packed HostCmd_DS_MAC_MULTICAST_ADR;
// Indicate to FW the current state of AP ERP info
typedef struct {
FWCmdHdr CmdHdr;
uint32_t GProtectFlag;
} __packed HostCmd_FW_SET_G_PROTECT_FLAG;
typedef struct {
FWCmdHdr CmdHdr;
} __packed HostCmd_FW_SET_INFRA_MODE;
// Define data structure for HostCmd_CMD_802_11_RF_CHANNEL
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
uint8_t CurrentChannel; /* channel # */
uint32_t ChannelFlags; /* see below */
} __packed HostCmd_FW_SET_RF_CHANNEL;
/* bits 0-5 specify frequency band */
#define FREQ_BAND_2DOT4GHZ 0x0001
#define FREQ_BAND_4DOT9GHZ 0x0002 /* XXX not implemented */
#define FREQ_BAND_5GHZ 0x0004
#define FREQ_BAND_5DOT2GHZ 0x0008 /* XXX not implemented */
/* bits 6-10 specify channel width */
#define CH_AUTO_WIDTH 0x0000 /* XXX not used? */
#define CH_10_MHz_WIDTH 0x0040
#define CH_20_MHz_WIDTH 0x0080
#define CH_40_MHz_WIDTH 0x0100
/* bits 11-12 specify extension channel */
#define EXT_CH_NONE 0x0000 /* no extension channel */
#define EXT_CH_ABOVE_CTRL_CH 0x0800 /* extension channel above */
#define EXT_CH_AUTO 0x1000 /* XXX not used? */
#define EXT_CH_BELOW_CTRL_CH 0x1800 /* extension channel below */
/* bits 13-31 are reserved */
#define FIXED_RATE_WITH_AUTO_RATE_DROP 0
#define FIXED_RATE_WITHOUT_AUTORATE_DROP 1
#define LEGACY_RATE_TYPE 0
#define HT_RATE_TYPE 1
#define RETRY_COUNT_VALID 0
#define RETRY_COUNT_INVALID 1
typedef struct {
// lower rate after the retry count
uint32_t FixRateType; //0: legacy, 1: HT
uint32_t RetryCountValid; //0: retry count is not valid, 1: use retry count specified
} __packed FIX_RATE_FLAG;
typedef struct {
FIX_RATE_FLAG FixRateTypeFlags;
uint32_t FixedRate; // legacy rate(not index) or an MCS code.
uint32_t RetryCount;
} __packed FIXED_RATE_ENTRY;
typedef struct {
FWCmdHdr CmdHdr;
uint32_t Action; //HostCmd_ACT_GEN_GET 0x0000
//HostCmd_ACT_GEN_SET 0x0001
//HostCmd_ACT_NOT_USE_FIXED_RATE 0x0002
uint32_t AllowRateDrop; // use fixed rate specified but firmware can drop to
uint32_t EntryCount;
FIXED_RATE_ENTRY FixedRateTable[4];
uint8_t MulticastRate;
uint8_t MultiRateTxType;
uint8_t ManagementRate;
} __packed HostCmd_FW_USE_FIXED_RATE;
typedef struct {
uint32_t AllowRateDrop;
uint32_t EntryCount;
FIXED_RATE_ENTRY FixedRateTable[4];
} __packed USE_FIXED_RATE_INFO;
typedef struct {
FWCmdHdr CmdHdr;
uint32_t Action;
uint32_t GIType;
#define GI_TYPE_LONG 0x0001
#define GI_TYPE_SHORT 0x0002
} __packed HostCmd_FW_HT_GUARD_INTERVAL;
typedef struct {
FWCmdHdr CmdHdr;
uint32_t Action;
uint8_t RxAntennaMap;
uint8_t TxAntennaMap;
} __packed HostCmd_FW_HT_MIMO_CONFIG;
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
uint8_t Slot; // Slot=0 if regular, Slot=1 if short.
} __packed HostCmd_FW_SET_SLOT;
// Define data structure for HostCmd_CMD_802_11_GET_STAT
typedef struct {
FWCmdHdr CmdHdr;
uint32_t TxRetrySuccesses;
uint32_t TxMultipleRetrySuccesses;
uint32_t TxFailures;
uint32_t RTSSuccesses;
uint32_t RTSFailures;
uint32_t AckFailures;
uint32_t RxDuplicateFrames;
uint32_t FCSErrorCount;
uint32_t TxWatchDogTimeouts;
uint32_t RxOverflows; //used
uint32_t RxFragErrors; //used
uint32_t RxMemErrors; //used
uint32_t PointerErrors; //used
uint32_t TxUnderflows; //used
uint32_t TxDone;
uint32_t TxDoneBufTryPut;
uint32_t TxDoneBufPut;
uint32_t Wait4TxBuf; // Put size of requested buffer in here
uint32_t TxAttempts;
uint32_t TxSuccesses;
uint32_t TxFragments;
uint32_t TxMulticasts;
uint32_t RxNonCtlPkts;
uint32_t RxMulticasts;
uint32_t RxUndecryptableFrames;
uint32_t RxICVErrors;
uint32_t RxExcludedFrames;
} __packed HostCmd_DS_802_11_GET_STAT;
// Define data structure for HostCmd_CMD_MAC_REG_ACCESS
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
uint16_t Offset;
uint32_t Value;
uint16_t Reserved;
} __packed HostCmd_DS_MAC_REG_ACCESS;
// Define data structure for HostCmd_CMD_BBP_REG_ACCESS
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
uint16_t Offset;
uint8_t Value;
uint8_t Reserverd[3];
} __packed HostCmd_DS_BBP_REG_ACCESS;
// Define data structure for HostCmd_CMD_RF_REG_ACCESS
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
uint16_t Offset;
uint8_t Value;
uint8_t Reserverd[3];
} __packed HostCmd_DS_RF_REG_ACCESS;
// Define data structure for HostCmd_CMD_802_11_RADIO_CONTROL
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
uint16_t Control; // @bit0: 1/0,on/off, @bit1: 1/0, long/short @bit2: 1/0,auto/fix
uint16_t RadioOn;
} __packed HostCmd_DS_802_11_RADIO_CONTROL;
#define TX_POWER_LEVEL_TOTAL 8
// Define data structure for HostCmd_CMD_802_11_RF_TX_POWER
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
uint16_t SupportTxPowerLevel;
uint16_t CurrentTxPowerLevel;
uint16_t Reserved;
uint16_t PowerLevelList[TX_POWER_LEVEL_TOTAL];
} __packed HostCmd_DS_802_11_RF_TX_POWER;
// Define data structure for HostCmd_CMD_802_11_RF_ANTENNA
typedef struct _HostCmd_DS_802_11_RF_ANTENNA {
FWCmdHdr CmdHdr;
uint16_t Action;
uint16_t AntennaMode; // Number of antennas or 0xffff(diversity)
} __packed HostCmd_DS_802_11_RF_ANTENNA;
// Define data structure for HostCmd_CMD_802_11_PS_MODE
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
uint16_t PowerMode; // CAM, Max.PSP or Fast PSP
} __packed HostCmd_DS_802_11_PS_MODE;
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
uint16_t Threshold;
} __packed HostCmd_DS_802_11_RTS_THSD;
// used for stand alone bssid sets/clears
typedef struct {
FWCmdHdr CmdHdr;
#ifdef MWL_MBSS_SUPPORT
uint16_t MacType;
#define WL_MAC_TYPE_PRIMARY_CLIENT 0
#define WL_MAC_TYPE_SECONDARY_CLIENT 1
#define WL_MAC_TYPE_PRIMARY_AP 2
#define WL_MAC_TYPE_SECONDARY_AP 3
#endif
uint8_t MacAddr[6];
} __packed HostCmd_DS_SET_MAC,
HostCmd_FW_SET_BSSID,
HostCmd_FW_SET_MAC;
// Indicate to FW to send out PS Poll
typedef struct {
FWCmdHdr CmdHdr;
uint32_t PSPoll;
} __packed HostCmd_FW_TX_POLL;
// used for AID sets/clears
typedef struct {
FWCmdHdr CmdHdr;
uint16_t AssocID;
uint8_t MacAddr[6]; //AP's Mac Address(BSSID)
uint32_t GProtection;
uint8_t ApRates[ RATE_INDEX_MAX_ARRAY];
} __packed HostCmd_FW_SET_AID;
typedef struct {
uint32_t LegacyRateBitMap;
uint32_t HTRateBitMap;
uint16_t CapInfo;
uint16_t HTCapabilitiesInfo;
uint8_t MacHTParamInfo;
uint8_t Rev;
struct {
uint8_t ControlChan;
uint8_t AddChan;
uint16_t OpMode;
uint16_t stbc;
} __packed AddHtInfo;
} __packed PeerInfo_t;
typedef struct {
FWCmdHdr CmdHdr;
uint16_t AID;
uint8_t MacAddr[6];
uint16_t StnId;
uint16_t Action;
uint16_t Reserved;
PeerInfo_t PeerInfo;
uint8_t Qosinfo;
uint8_t isQosSta;
uint32_t FwStaPtr;
} __packed HostCmd_FW_SET_NEW_STN;
typedef struct {
FWCmdHdr CmdHdr;
uint8_t tick;
} __packed HostCmd_FW_SET_KEEP_ALIVE_TICK;
typedef struct {
FWCmdHdr CmdHdr;
uint8_t QNum;
} __packed HostCmd_FW_SET_RIFS;
typedef struct {
FWCmdHdr CmdHdr;
uint8_t ApMode;
} __packed HostCmd_FW_SET_APMODE;
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action; // see following
uint16_t RadarTypeCode;
} __packed HostCmd_802_11h_Detect_Radar;
#define DR_DFS_DISABLE 0
#define DR_CHK_CHANNEL_AVAILABLE_START 1
#define DR_CHK_CHANNEL_AVAILABLE_STOP 2
#define DR_IN_SERVICE_MONITOR_START 3
//New Structure for Update Tim 30/9/2003
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Aid;
uint32_t Set;
} __packed HostCmd_UpdateTIM;
typedef struct {
FWCmdHdr CmdHdr;
uint32_t SsidBroadcastEnable;
} __packed HostCmd_SSID_BROADCAST;
typedef struct {
FWCmdHdr CmdHdr;
uint32_t WdsEnable;
} __packed HostCmd_WDS;
typedef struct {
FWCmdHdr CmdHdr;
uint32_t Next11hChannel;
uint32_t Mode;
uint32_t InitialCount;
uint32_t ChannelFlags ;
} __packed HostCmd_SET_SWITCH_CHANNEL;
typedef struct {
FWCmdHdr CmdHdr;
uint32_t SpectrumMgmt;
} __packed HostCmd_SET_SPECTRUM_MGMT;
typedef struct {
FWCmdHdr CmdHdr;
int32_t PowerConstraint;
} __packed HostCmd_SET_POWER_CONSTRAINT;
typedef struct {
uint8_t FirstChannelNo;
uint8_t NoofChannel;
uint8_t MaxTransmitPw;
} __packed DomainChannelEntry;
typedef struct {
uint8_t CountryString[3];
uint8_t GChannelLen;
DomainChannelEntry DomainEntryG[1]; /** Assume only 1 G zone **/
uint8_t AChannelLen;
DomainChannelEntry DomainEntryA[20]; /** Assume max of 5 A zone **/
} __packed DomainCountryInfo;
typedef struct {
FWCmdHdr CmdHdr;
uint32_t Action ; // 0 -> unset, 1 ->set
DomainCountryInfo DomainInfo ;
} __packed HostCmd_SET_COUNTRY_INFO;
typedef struct {
FWCmdHdr CmdHdr;
uint16_t regionCode ;
} __packed HostCmd_SET_REGIONCODE_INFO;
// for HostCmd_CMD_SET_WMM_MODE
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action; // 0->unset, 1->set
} __packed HostCmd_FW_SetWMMMode;
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action; // 0->unset, 1->set
uint16_t IeListLen;
uint8_t IeList[200];
} __packed HostCmd_FW_SetIEs;
#define EDCA_PARAM_SIZE 18
#define BA_PARAM_SIZE 2
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action; //0 = get all, 0x1 =set CWMin/Max, 0x2 = set TXOP , 0x4 =set AIFSN
uint16_t TxOP; // in unit of 32 us
uint32_t CWMax; // 0~15
uint32_t CWMin; // 0~15
uint8_t AIFSN;
uint8_t TxQNum; // Tx Queue number.
} __packed HostCmd_FW_SET_EDCA_PARAMS;
/******************************************************************************
@HWENCR@
Hardware Encryption related data structures and constant definitions.
Note that all related changes are marked with the @HWENCR@ tag.
*******************************************************************************/
#define MAX_ENCR_KEY_LENGTH 16 /* max 128 bits - depends on type */
#define MIC_KEY_LENGTH 8 /* size of Tx/Rx MIC key - 8 bytes*/
#define ENCR_KEY_TYPE_ID_WEP 0x00 /* Key type is WEP */
#define ENCR_KEY_TYPE_ID_TKIP 0x01 /* Key type is TKIP */
#define ENCR_KEY_TYPE_ID_AES 0x02 /* Key type is AES-CCMP */
/* flags used in structure - same as driver EKF_XXX flags */
#define ENCR_KEY_FLAG_INUSE 0x00000001 /* indicate key is in use */
#define ENCR_KEY_FLAG_RXGROUPKEY 0x00000002 /* Group key for RX only */
#define ENCR_KEY_FLAG_TXGROUPKEY 0x00000004 /* Group key for TX */
#define ENCR_KEY_FLAG_PAIRWISE 0x00000008 /* pairwise */
#define ENCR_KEY_FLAG_RXONLY 0x00000010 /* only used for RX */
// These flags are new additions - for hardware encryption commands only.
#define ENCR_KEY_FLAG_AUTHENTICATOR 0x00000020 /* Key is for Authenticator */
#define ENCR_KEY_FLAG_TSC_VALID 0x00000040 /* Sequence counters valid */
#define ENCR_KEY_FLAG_WEP_TXKEY 0x01000000 /* Tx key for WEP */
#define ENCR_KEY_FLAG_MICKEY_VALID 0x02000000 /* Tx/Rx MIC keys are valid */
/*
UPDATE_ENCRYPTION command action type.
*/
typedef enum {
// request to enable/disable HW encryption
EncrActionEnableHWEncryption,
// request to set encryption key
EncrActionTypeSetKey,
// request to remove one or more keys
EncrActionTypeRemoveKey,
EncrActionTypeSetGroupKey
} ENCR_ACTION_TYPE;
/*
Key material definitions (for WEP, TKIP, & AES-CCMP)
*/
/*
WEP Key material definition
----------------------------
WEPKey --> An array of 'MAX_ENCR_KEY_LENGTH' bytes.
Note that we do not support 152bit WEP keys
*/
typedef struct {
// WEP key material (max 128bit)
uint8_t KeyMaterial[ MAX_ENCR_KEY_LENGTH ];
} __packed WEP_TYPE_KEY;
/*
TKIP Key material definition
----------------------------
This structure defines TKIP key material. Note that
the TxMicKey and RxMicKey may or may not be valid.
*/
/* TKIP Sequence counter - 24 bits */
/* Incremented on each fragment MPDU */
typedef struct {
uint16_t low;
uint32_t high;
} __packed ENCR_TKIPSEQCNT;
typedef struct {
// TKIP Key material. Key type (group or pairwise key) is
// determined by flags in KEY_PARAM_SET structure.
uint8_t KeyMaterial[ MAX_ENCR_KEY_LENGTH ];
uint8_t TkipTxMicKey[ MIC_KEY_LENGTH ];
uint8_t TkipRxMicKey[ MIC_KEY_LENGTH ];
ENCR_TKIPSEQCNT TkipRsc;
ENCR_TKIPSEQCNT TkipTsc;
} __packed TKIP_TYPE_KEY;
/*
AES-CCMP Key material definition
--------------------------------
This structure defines AES-CCMP key material.
*/
typedef struct {
// AES Key material
uint8_t KeyMaterial[ MAX_ENCR_KEY_LENGTH ];
} __packed AES_TYPE_KEY;
/*
Encryption key definition.
--------------------------
This structure provides all required/essential
information about the key being set/removed.
*/
typedef struct {
uint16_t Length; // Total length of this structure
uint16_t KeyTypeId; // Key type - WEP, TKIP or AES-CCMP.
uint32_t KeyInfo; // key flags (ENCR_KEY_FLAG_XXX_
uint32_t KeyIndex; // For WEP only - actual key index
uint16_t KeyLen; // Size of the key
union { // Key material (variable size array)
WEP_TYPE_KEY WepKey;
TKIP_TYPE_KEY TkipKey;
AES_TYPE_KEY AesKey;
}__packed Key;
#ifdef MWL_MBSS_SUPPORT
uint8_t Macaddr[6];
#endif
} __packed KEY_PARAM_SET;
/*
HostCmd_FW_UPDATE_ENCRYPTION
----------------------------
Define data structure for updating firmware encryption keys.
*/
typedef struct {
FWCmdHdr CmdHdr;
uint32_t ActionType; // ENCR_ACTION_TYPE
uint32_t DataLength; // size of the data buffer attached.
#ifdef MWL_MBSS_SUPPORT
uint8_t macaddr[6];
#endif
uint8_t ActionData[1];
} __packed HostCmd_FW_UPDATE_ENCRYPTION;
typedef struct {
FWCmdHdr CmdHdr;
uint32_t ActionType; // ENCR_ACTION_TYPE
uint32_t DataLength; // size of the data buffer attached.
KEY_PARAM_SET KeyParam;
#ifndef MWL_MBSS_SUPPORT
uint8_t Macaddr[8]; /* XXX? */
#endif
} __packed HostCmd_FW_UPDATE_ENCRYPTION_SET_KEY;
typedef struct {
// Rate flags - see above.
uint32_t Flags;
// Rate in 500Kbps units.
uint8_t RateKbps;
// 802.11 rate to conversion table index value.
// This is the value required by the firmware/hardware.
uint16_t RateCodeToIndex;
}__packed RATE_INFO;
/*
UPDATE_STADB command action type.
*/
typedef enum {
// request to add entry to stainfo db
StaInfoDbActionAddEntry,
// request to modify peer entry
StaInfoDbActionModifyEntry,
// request to remove peer from stainfo db
StaInfoDbActionRemoveEntry
}__packed STADB_ACTION_TYPE;
/*
@11E-BA@
802.11e/WMM Related command(s)/data structures
*/
// Flag to indicate if the stream is an immediate block ack stream.
// if this bit is not set, the stream is delayed block ack stream.
#define BASTREAM_FLAG_DELAYED_TYPE 0x00
#define BASTREAM_FLAG_IMMEDIATE_TYPE 0x01
// Flag to indicate the direction of the stream (upstream/downstream).
// If this bit is not set, the direction is downstream.
#define BASTREAM_FLAG_DIRECTION_UPSTREAM 0x00
#define BASTREAM_FLAG_DIRECTION_DOWNSTREAM 0x02
#define BASTREAM_FLAG_DIRECTION_DLP 0x04
#define BASTREAM_FLAG_DIRECTION_BOTH 0x06
typedef enum {
BaCreateStream,
BaUpdateStream,
BaDestroyStream,
BaFlushStream,
BaCheckCreateStream
} BASTREAM_ACTION_TYPE;
typedef struct {
uint32_t Context;
} __packed BASTREAM_CONTEXT;
// parameters for block ack creation
typedef struct {
// BA Creation flags - see above
uint32_t Flags;
// idle threshold
uint32_t IdleThrs;
// block ack transmit threshold (after how many pkts should we send BAR?)
uint32_t BarThrs;
// receiver window size
uint32_t WindowSize;
// MAC Address of the BA partner
uint8_t PeerMacAddr[6];
// Dialog Token
uint8_t DialogToken;
//TID for the traffic stream in this BA
uint8_t Tid;
// shared memory queue ID (not sure if this is required)
uint8_t QueueId;
uint8_t ParamInfo;
// returned by firmware - firmware context pointer.
// this context pointer will be passed to firmware for all future commands.
BASTREAM_CONTEXT FwBaContext;
uint8_t ResetSeqNo; /** 0 or 1**/
uint16_t StartSeqNo;
// proxy sta MAC Address
uint8_t StaSrcMacAddr[6];
}__packed BASTREAM_CREATE_STREAM;
// new transmit sequence number information
typedef struct {
// BA flags - see above
uint32_t Flags;
// returned by firmware in the create ba stream response
BASTREAM_CONTEXT FwBaContext;
// new sequence number for this block ack stream
uint16_t BaSeqNum;
}__packed BASTREAM_UPDATE_STREAM;
typedef struct {
// BA Stream flags
uint32_t Flags;
// returned by firmware in the create ba stream response
BASTREAM_CONTEXT FwBaContext;
}__packed BASTREAM_STREAM_INFO;
//Command to create/destroy block ACK
typedef struct {
FWCmdHdr CmdHdr;
uint32_t ActionType;
union
{
// information required to create BA Stream...
BASTREAM_CREATE_STREAM CreateParams;
// update starting/new sequence number etc.
BASTREAM_UPDATE_STREAM UpdtSeqNum;
// destroy an existing stream...
BASTREAM_STREAM_INFO DestroyParams;
// destroy an existing stream...
BASTREAM_STREAM_INFO FlushParams;
}__packed BaInfo;
}__packed HostCmd_FW_BASTREAM;
// Define data structure for HostCmd_CMD_GET_WATCHDOG_BITMAP
typedef struct {
FWCmdHdr CmdHdr;
uint8_t Watchdogbitmap; // for SW/BA
} __packed HostCmd_FW_GET_WATCHDOG_BITMAP;
// Define data structure for HostCmd_CMD_SET_REGION_POWER
typedef struct {
FWCmdHdr CmdHdr;
uint16_t MaxPowerLevel;
uint16_t Reserved;
} __packed HostCmd_DS_SET_REGION_POWER;
// Define data structure for HostCmd_CMD_SET_RATE_ADAPT_MODE
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
uint16_t RateAdaptMode;
} __packed HostCmd_DS_SET_RATE_ADAPT_MODE;
// Define data structure for HostCmd_CMD_SET_LINKADAPT_CS_MODE
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
uint16_t CSMode;
} __packed HostCmd_DS_SET_LINKADAPT_CS_MODE;
typedef struct {
FWCmdHdr CmdHdr;
uint32_t NProtectFlag;
} __packed HostCmd_FW_SET_N_PROTECT_FLAG;
typedef struct {
FWCmdHdr CmdHdr;
uint8_t NProtectOpMode;
} __packed HostCmd_FW_SET_N_PROTECT_OPMODE;
typedef struct {
FWCmdHdr CmdHdr;
uint8_t OptLevel;
} __packed HostCmd_FW_SET_OPTIMIZATION_LEVEL;
typedef struct {
FWCmdHdr CmdHdr;
uint8_t annex;
uint8_t index;
uint8_t len;
uint8_t Reserverd;
#define CAL_TBL_SIZE 160
uint8_t calTbl[CAL_TBL_SIZE];
} __packed HostCmd_FW_GET_CALTABLE;
typedef struct {
FWCmdHdr CmdHdr;
uint8_t Addr[6];
uint8_t Enable;
uint8_t Mode;
} __packed HostCmd_FW_SET_MIMOPSHT;
#define MAX_BEACON_SIZE 1024
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Bcnlen;
uint8_t Reserverd[2];
uint8_t Bcn[MAX_BEACON_SIZE];
} __packed HostCmd_FW_GET_BEACON;
typedef struct {
FWCmdHdr CmdHdr;
uint8_t NumberOfPowersave;
uint8_t reserved;
} __packed HostCmd_SET_POWERSAVESTATION;
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Aid;
uint32_t Set;
uint8_t reserved;
} __packed HostCmd_SET_TIM;
typedef struct {
FWCmdHdr CmdHdr;
uint8_t TrafficMap[251];
uint8_t reserved;
} __packed HostCmd_GET_TIM;
typedef struct {
FWCmdHdr CmdHdr;
uint8_t MacAddr[6];
uint8_t TID;
uint16_t SeqNo;
uint8_t reserved;
} __packed HostCmd_GET_SEQNO;
typedef struct {
FWCmdHdr CmdHdr;
uint32_t Enable; //0 -- Disbale. or 1 -- Enable.
} __packed HostCmd_DWDS_ENABLE;
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action; /* 0: Get. 1:Set */
uint32_t Option; /* 0: default. 1:Aggressive */
uint32_t Threshold; /* Range 0-200, default 8 */
}__packed HostCmd_FW_AMPDU_RETRY_RATEDROP_MODE;
typedef struct {
FWCmdHdr CmdHdr;
uint32_t Enable; /* 0 -- Disable. or 1 -- Enable */
}__packed HostCmd_CFEND_ENABLE;
#endif /* _MWL_HALREG_H_ */