/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
* 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.
*/
/*
* Definitions for the Marvell Wireless LAN controller Hardware Access Layer.
*/
#ifndef _MWL_REG_H
#define _MWL_REG_H
#ifdef __cplusplus
extern "C" {
#endif
#define MWL_MBSS_SUPPORT /* enable multi-bss support */
/*
* 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
/*
* Firmware download support.
*/
#define FW_DOWNLOAD_BLOCK_SIZE 256
#define FW_CHECK_USECS (5*1000) /* 5ms */
#define FW_MAX_NUM_CHECKS 200
#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
*/
/* From host to ARM */
#define MACREG_REG_H2A_INTERRUPT_EVENTS 0x00000C18
#define MACREG_REG_H2A_INTERRUPT_CAUSE 0x00000C1C
#define MACREG_REG_H2A_INTERRUPT_MASK 0x00000C20
#define MACREG_REG_H2A_INTERRUPT_CLEAR_SEL 0x00000C24
#define MACREG_REG_H2A_INTERRUPT_STATUS_MASK 0x00000C28
/* From ARM to host */
#define MACREG_REG_A2H_INTERRUPT_EVENTS 0x00000C2C
#define MACREG_REG_A2H_INTERRUPT_CAUSE 0x00000C30
#define MACREG_REG_A2H_INTERRUPT_MASK 0x00000C34
#define MACREG_REG_A2H_INTERRUPT_CLEAR_SEL 0x00000C38
#define MACREG_REG_A2H_INTERRUPT_STATUS_MASK 0x00000C3C
/* 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
/*
* 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
*/
/* RESULT OK */
#define HostCmd_RESULT_OK 0x0000
/* Genenral error */
#define HostCmd_RESULT_ERROR 0x0001
/* Command is not valid */
#define HostCmd_RESULT_NOT_SUPPORT 0x0002
/* Command is pending (will be processed) */
#define HostCmd_RESULT_PENDING 0x0003
/* System is busy (command ignored) */
#define HostCmd_RESULT_BUSY 0x0004
/* Data buffer is not big enough */
#define HostCmd_RESULT_PARTIAL_DATA 0x0005
#define HostCmd_CMD_SET_EDCA_PARAMS 0x0115
/*
* 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_ADD 0x0002
#define HostCmd_ACT_REMOVE 0x0004
#define HostCmd_ACT_USE_DEFAULT 0x0008
/*
* PUBLIC DEFINITIONS
*/
#define RATE_INDEX_MAX_ARRAY 14
#define WOW_MAX_STATION 32
#pragma pack(1)
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 */
};
/*
* 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;
};
struct mwl_rxdesc {
/* control element */
uint8_t RxControl;
#define EAGLE_RXD_CTRL_DRIVER_OWN 0x00
#define EAGLE_RXD_CTRL_OS_OWN 0x04
#define EAGLE_RXD_CTRL_DMA_OWN 0x80
/* received signal strengt indication */
uint8_t RSSI;
/* status field w/ USED bit */
uint8_t Status;
#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
/* channel # pkt received on */
uint8_t Channel;
/* total length of received data */
uint16_t PktLen;
/* not used */
uint8_t SQ2;
/* received data rate */
uint8_t Rate;
/* physical address of payload data */
uint32_t pPhysBuffData;
/* physical address of next RX desc */
uint32_t pPhysNext;
/* received QosCtrl field variable */
uint16_t QosCtrl;
/* like name states */
uint16_t HtSig2;
#ifdef MWL_ANT_INFO_SUPPORT
/* antenna info */
struct mwl_ant_info ai;
#endif
};
#pragma pack()
// =============================================================================
// HOST COMMAND DEFINITIONS
// =============================================================================
//
// Definition of data structure for each command
//
// Define general data structure
#pragma pack(1)
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;
} FWCmdHdr;
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];
} HostCmd_FW_GET_CALTABLE;
typedef struct {
FWCmdHdr CmdHdr;
/* version of the HW */
uint8_t Version;
/* host interface */
uint8_t HostIf;
/* Max. number of WCB FW can handle */
uint16_t NumOfWCB;
/* MaxNbr of MC addresses FW can handle */
uint16_t NumOfMCastAddr;
/* MAC address programmed in HW */
uint8_t PermanentAddr[6];
uint16_t RegionCode;
/* Number of antenna used */
uint16_t NumberOfAntenna;
/* 4 byte of FW release number */
uint32_t FWReleaseNumber;
uint32_t WcbBase0;
uint32_t RxPdWrPtr;
uint32_t RxPdRdPtr;
uint32_t ulFwAwakeCookie;
uint32_t WcbBase1[3];
} HostCmd_DS_GET_HW_SPEC;
typedef struct {
FWCmdHdr CmdHdr;
/* HW revision */
uint8_t Version;
/* Host interface */
uint8_t HostIf;
/* Max. number of Multicast address FW can handle */
uint16_t NumOfMCastAdr;
/* MAC address */
uint8_t PermanentAddr[6];
/* Region Code */
uint16_t RegionCode;
/* 4 byte of FW release number */
uint32_t FWReleaseNumber;
/* Firmware awake cookie */
uint32_t ulFwAwakeCookie;
/* Device capabilities (see above) */
uint32_t DeviceCaps;
/* Rx shared memory queue */
uint32_t RxPdWrPtr;
/* TX queues in WcbBase array */
uint32_t NumTxQueues;
/* TX WCB Rings */
uint32_t WcbBase[MAX_TXWCB_QUEUES];
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;
}HostCmd_DS_SET_HW_SPEC;
// 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];
} HostCmd_DS_SET_MAC,
HostCmd_FW_SET_BSSID,
HostCmd_FW_SET_MAC;
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;
} AddHtInfo;
} 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;
} HostCmd_FW_SET_NEW_STN;
/* Define data structure for HostCmd_CMD_802_11_RF_ANTENNA */
typedef struct _HostCmd_DS_802_11_RF_ANTENNA {
FWCmdHdr CmdHdr;
uint16_t Action;
/* Number of antennas or 0xffff(diversity) */
uint16_t AntennaMode;
} HostCmd_DS_802_11_RF_ANTENNA;
/* Define data structure for HostCmd_CMD_802_11_RADIO_CONTROL */
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
/*
* @bit0: 1/0, on/off
* @bit1: 1/0, long/short
* @bit2: 1/0,auto/fix
*/
uint16_t Control;
uint16_t RadioOn;
} HostCmd_DS_802_11_RADIO_CONTROL;
/* for HostCmd_CMD_SET_WMM_MODE */
typedef struct {
FWCmdHdr CmdHdr;
/* 0->unset, 1->set */
uint16_t Action;
} HostCmd_FW_SetWMMMode;
/* 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
// 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 */
} HostCmd_FW_SET_RF_CHANNEL;
#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];
} HostCmd_DS_802_11_RF_TX_POWER;
typedef struct {
/*
* lower rate after the retry count
* 0: legacy, 1: HT
*/
uint32_t FixRateType;
/*
* 0: retry count is not valid
* 1: use retry count specified
*/
uint32_t RetryCountValid;
} FIX_RATE_FLAG;
typedef struct {
FIX_RATE_FLAG FixRateTypeFlags;
/* legacy rate(not index) or an MCS code */
uint32_t FixedRate;
uint32_t RetryCount;
} FIXED_RATE_ENTRY;
typedef struct {
FWCmdHdr CmdHdr;
/*
* HostCmd_ACT_GEN_GET 0x0000
* HostCmd_ACT_GEN_SET 0x0001
* HostCmd_ACT_NOT_USE_FIXED_RATE 0x0002
*/
uint32_t Action;
/* use fixed rate specified but firmware can drop */
uint32_t AllowRateDrop;
uint32_t EntryCount;
FIXED_RATE_ENTRY FixedRateTable[4];
uint8_t MulticastRate;
uint8_t MultiRateTxType;
uint8_t ManagementRate;
} HostCmd_FW_USE_FIXED_RATE;
/* Define data structure for HostCmd_CMD_SET_RATE_ADAPT_MODE */
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
uint16_t RateAdaptMode;
} HostCmd_DS_SET_RATE_ADAPT_MODE;
typedef struct {
FWCmdHdr CmdHdr;
uint8_t OptLevel;
} HostCmd_FW_SET_OPTIMIZATION_LEVEL;
typedef struct {
FWCmdHdr CmdHdr;
uint16_t regionCode;
} HostCmd_SET_REGIONCODE_INFO;
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 */
} HostCmd_FW_AMPDU_RETRY_RATEDROP_MODE;
typedef struct {
FWCmdHdr CmdHdr;
uint32_t Enable; /* 0 -- Disable. or 1 -- Enable */
} HostCmd_CFEND_ENABLE;
typedef struct {
FWCmdHdr CmdHdr;
uint32_t Enable; /* FALSE: Disable or TRUE: Enable */
} HostCmd_DS_BSS_START;
typedef struct {
FWCmdHdr CmdHdr;
} HostCmd_FW_SET_INFRA_MODE;
/* 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];
} HostCmd_FW_SET_AID;
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
uint16_t Threshold;
} HostCmd_DS_802_11_RTS_THSD;
/* Define data structure for HostCmd_CMD_SET_LINKADAPT_CS_MODE */
typedef struct {
FWCmdHdr CmdHdr;
uint16_t Action;
uint16_t CSMode;
} HostCmd_DS_SET_LINKADAPT_CS_MODE;
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];
} HostCmd_FW_UPDATE_ENCRYPTION;
/*
* @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
*/
/* indicate key is in use */
#define ENCR_KEY_FLAG_INUSE 0x00000001
/* Group key for RX only */
#define ENCR_KEY_FLAG_RXGROUPKEY 0x00000002
/* Group key for TX */
#define ENCR_KEY_FLAG_TXGROUPKEY 0x00000004
/* pairwise */
#define ENCR_KEY_FLAG_PAIRWISE 0x00000008
/* only used for RX */
#define ENCR_KEY_FLAG_RXONLY 0x00000010
/*
* These flags are new additions - for hardware encryption commands only
*/
/* Key is for Authenticator */
#define ENCR_KEY_FLAG_AUTHENTICATOR 0x00000020
/* Sequence counters valid */
#define ENCR_KEY_FLAG_TSC_VALID 0x00000040
/* Tx key for WEP */
#define ENCR_KEY_FLAG_WEP_TXKEY 0x01000000
/* Tx/Rx MIC keys are valid */
#define ENCR_KEY_FLAG_MICKEY_VALID 0x02000000
/*
* 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];
} 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;
} ENCR_TKIPSEQCNT;
/*
* TKIP Key material. Key type (group or pairwise key) is
* determined by flags in KEY_PARAM_SET structure
*/
typedef struct {
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;
} 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];
} AES_TYPE_KEY;
/*
* 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;
/*
* 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 */
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;
} Key;
#ifdef MWL_MBSS_SUPPORT
uint8_t Macaddr[6];
#endif
} KEY_PARAM_SET;
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];
#endif
} HostCmd_FW_UPDATE_ENCRYPTION_SET_KEY;
#pragma pack()
#ifdef __cplusplus
}
#endif
#endif /* _MWL_REG_H */