blob: 01d0460920f0c8ad6a54dda3e8d0895e205db878 [file] [log] [blame]
/*
* Copyright (c) 2012, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all
* copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/*
* This file was originally distributed by Qualcomm Atheros, Inc.
* under proprietary terms before Copyright ownership was assigned
* to the Linux Foundation.
*/
/** ------------------------------------------------------------------------- *
------------------------------------------------------------------------- *
\file wlan_nv.h
\brief Types for NV implementation
Anything that needs to be publicly available should
be in this file
$Id$========================================================================== */
#if !defined( __WLAN_NV_H )
#define __WLAN_NV_H
#include "halLegacyPalTypes.h"
#include "halCompiler.h"
//From HAL/inc/halNv.h
typedef enum
{
//Common Nv Fields
NV_COMMON_PRODUCT_ID, // 0
NV_COMMON_PRODUCT_BANDS, // 1
NV_COMMON_NUM_OF_TX_CHAINS, // 2
NV_COMMON_NUM_OF_RX_CHAINS, // 3
NV_COMMON_MAC_ADDR, // 4
NV_COMMON_MFG_SERIAL_NUMBER, // 5
NV_COMMON_WLAN_NV_REV_ID, // 6
NV_COMMON_COUPLER_TYPE, // 7
NV_COMMON_NV_VERSION, // 8
NV_COMMON_RESERVED, // 9
NUM_NV_FIELDS,
NV_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */
}eNvField;
#define NV_FIELD_MAC_ADDR_SIZE 6
#define NV_FIELD_MFG_SN_SIZE 40
typedef enum
{
PRODUCT_BAND_11_B_G = 0, //Gen6.0 is only this setting
PRODUCT_BAND_11_A_B_G = 1,
PRODUCT_BAND_11_A = 2,
NUM_PRODUCT_BANDS,
NUM_PRODUCT_BANDS_INVALID = 0x7FFFFFFF /* define as 4 bytes data */
}eNvProductBands; //NV_COMMON_PRODUCT_BANDS
#define EXTERNAL_PA 1
#define INTERNAL_PA 0
#define EXTERNAL_LNA 1
#define INTERNAL_LNA 0
#define EXTERNAL_COUPLER 1
#define INTERNAL_COUPLER 0
#define EXTERNAL_PDET 1
#define INTERNAL_PDET 0
#define DPD_ENABLED 1
#define DPD_DISABLED 0
#define TPC_MODE_OPEN_LOOP 0
#define TPC_MODE_SCPC 1
#define TPC_MODE_CLPC_MODE2 2
#define TPC_MODE_CLPC_MODE3 3
#define PA_POLARITY_TX_UNUSED 0
#define PA_POLARITY_TX_POSITIVE 1
#define PA_POLARITY_TX_NEGATIVE 2
#define PA_POLARITY_RX_UNUSED 0
#define PA_POLARITY_RX_POSITIVE 1
#define PA_POLARITY_RX_NEGATIVE 2
#define NV_VERSION_INVALID 0xFF
#define NV_VERSION_11N_11AC_COUPER_TYPE 0
#define NV_VERSION_11N_11AC_FW_CONFIG 1
#define NV_VERSION_LPDC_FW_CONFIG 2
#ifdef FEATURE_WLAN_CH144
#define NV_VERSION_CH144_CONFIG 3
#endif /* FEATURE_WLAN_CH144 */
#ifdef WCN_PRONTO
#ifdef FEATURE_WLAN_CH144
#define WLAN_NV_VERSION NV_VERSION_CH144_CONFIG
#else
#define WLAN_NV_VERSION NV_VERSION_LPDC_FW_CONFIG
#endif /* FEATURE_WLAN_CH144 */
#else //WCN_PRONTO
#define WLAN_NV_VERSION NV_VERSION_11N_11AC_FW_CONFIG
#endif //WCN_PRONTO
typedef PACKED_PRE struct PACKED_POST
{
uint8 macAddr1[NV_FIELD_MAC_ADDR_SIZE]; /* Default, not change name for compatibility */
uint8 macAddr2[NV_FIELD_MAC_ADDR_SIZE];
uint8 macAddr3[NV_FIELD_MAC_ADDR_SIZE];
uint8 macAddr4[NV_FIELD_MAC_ADDR_SIZE];
} sMacAddr;
typedef PACKED_PRE union PACKED_POST
{
//common NV fields
uint16 productId;
uint8 productBands;
uint8 wlanNvRevId;
uint8 numOfTxChains;
uint8 numOfRxChains;
sMacAddr macAddr;
uint8 mfgSN[NV_FIELD_MFG_SN_SIZE];
uint8 couplerType;
uint8 nvVersion;
} uNvFields;
//format of common part of nv
typedef PACKED_PRE struct PACKED_POST
{
//always ensure fields are aligned to 32-bit boundaries
uint16 productId;
uint8 productBands;
uint8 wlanNvRevId; //0: WCN1312, 1: WCN1314, 2: WCN3660
uint8 numOfTxChains;
uint8 numOfRxChains;
uint8 macAddr[NV_FIELD_MAC_ADDR_SIZE]; /* Default, not change name for compatibility */
uint8 macAddr2[NV_FIELD_MAC_ADDR_SIZE];
uint8 macAddr3[NV_FIELD_MAC_ADDR_SIZE];
uint8 macAddr4[NV_FIELD_MAC_ADDR_SIZE];
uint8 mfgSN[NV_FIELD_MFG_SN_SIZE];
uint8 couplerType;
uint8 nvVersion;
} sNvFields;
//From wlanfw/inc/halPhyTypes.h
typedef int8 tPowerdBm; //power in signed 8-bit integer, no decimal places
typedef PACKED_PRE union PACKED_POST
{
uint32 measurement; //measured values can be passed to pttApi, but are maintained to 2 decimal places internally
int16 reported; //used internally only - reported values only maintain 2 decimals places
}uAbsPwrPrecision;
typedef enum
{
PHY_TX_CHAIN_0 = 0,
NUM_PHY_MAX_TX_CHAINS = 1,
PHY_MAX_TX_CHAINS = NUM_PHY_MAX_TX_CHAINS,
PHY_ALL_TX_CHAINS,
//possible tx chain combinations
PHY_NO_TX_CHAINS,
PHY_TX_CHAIN_INVALID = 0x7FFFFFFF /* define as 4 bytes data */
}ePhyTxChains;
//From wlanfw/inc/halRfTypes.h
typedef enum
{
REG_DOMAIN_FCC,
REG_DOMAIN_ETSI,
REG_DOMAIN_JAPAN,
REG_DOMAIN_WORLD,
REG_DOMAIN_N_AMER_EXC_FCC,
REG_DOMAIN_APAC,
REG_DOMAIN_KOREA,
REG_DOMAIN_HI_5GHZ,
REG_DOMAIN_NO_5GHZ,
NUM_REG_DOMAINS,
NUM_REG_DOMAINS_INVALID = 0x7FFFFFFF /* define as 4 bytes data */
}eRegDomainId;
typedef enum
{
RF_SUBBAND_2_4_GHZ = 0,
RF_SUBBAND_5_LOW_GHZ = 1, //Low & Mid U-NII
RF_SUBBAND_5_MID_GHZ = 2, //ETSI
RF_SUBBAND_5_HIGH_GHZ = 3, //High U-NII
RF_SUBBAND_4_9_GHZ = 4, //Japanese
NUM_RF_SUBBANDS,
MAX_RF_SUBBANDS,
INVALID_RF_SUBBAND,
RF_BAND_2_4_GHZ = 0,
RF_BAND_5_GHZ = 1,
NUM_RF_BANDS,
BOTH_RF_BANDS,
RF_SUBBAND_INVALID = 0x7FFFFFFF /* define as 4 bytes data */
}eRfSubBand;
typedef enum
{
//2.4GHz Band
RF_CHAN_1 = 0,
RF_CHAN_2,
RF_CHAN_3,
RF_CHAN_4,
RF_CHAN_5,
RF_CHAN_6,
RF_CHAN_7,
RF_CHAN_8,
RF_CHAN_9,
RF_CHAN_10,
RF_CHAN_11,
RF_CHAN_12,
RF_CHAN_13,
RF_CHAN_14,
//5GHz Low & Mid U-NII Band
RF_CHAN_36,
RF_CHAN_40,
RF_CHAN_44,
RF_CHAN_48,
RF_CHAN_52,
RF_CHAN_56,
RF_CHAN_60,
RF_CHAN_64,
//5GHz Mid Band - ETSI & FCC
RF_CHAN_100,
RF_CHAN_104,
RF_CHAN_108,
RF_CHAN_112,
RF_CHAN_116,
RF_CHAN_120,
RF_CHAN_124,
RF_CHAN_128,
RF_CHAN_132,
RF_CHAN_136,
RF_CHAN_140,
#ifdef FEATURE_WLAN_CH144
RF_CHAN_144,
#endif /* FEATURE_WLAN_CH144 */
//5GHz High U-NII Band
RF_CHAN_149,
RF_CHAN_153,
RF_CHAN_157,
RF_CHAN_161,
RF_CHAN_165,
// 802.11p
RF_CHAN_170,
RF_CHAN_171,
RF_CHAN_172,
RF_CHAN_173,
RF_CHAN_174,
RF_CHAN_175,
RF_CHAN_176,
RF_CHAN_177,
RF_CHAN_178,
RF_CHAN_179,
RF_CHAN_180,
RF_CHAN_181,
RF_CHAN_182,
RF_CHAN_183,
RF_CHAN_184,
//CHANNEL BONDED CHANNELS
RF_CHAN_BOND_3,
RF_CHAN_BOND_4,
RF_CHAN_BOND_5,
RF_CHAN_BOND_6,
RF_CHAN_BOND_7,
RF_CHAN_BOND_8,
RF_CHAN_BOND_9,
RF_CHAN_BOND_10,
RF_CHAN_BOND_11,
RF_CHAN_BOND_38, //5GHz Low & Mid U-NII Band
RF_CHAN_BOND_42,
RF_CHAN_BOND_46,
RF_CHAN_BOND_50,
RF_CHAN_BOND_54,
RF_CHAN_BOND_58,
RF_CHAN_BOND_62,
RF_CHAN_BOND_102, //5GHz Mid Band - ETSI & FCC
RF_CHAN_BOND_106,
RF_CHAN_BOND_110,
RF_CHAN_BOND_114,
RF_CHAN_BOND_118,
RF_CHAN_BOND_122,
RF_CHAN_BOND_126,
RF_CHAN_BOND_130,
RF_CHAN_BOND_134,
RF_CHAN_BOND_138,
#ifdef FEATURE_WLAN_CH144
RF_CHAN_BOND_142,
#endif /* FEATURE_WLAN_CH144 */
RF_CHAN_BOND_151, //5GHz High U-NII Band
RF_CHAN_BOND_155,
RF_CHAN_BOND_159,
RF_CHAN_BOND_163,
NUM_RF_CHANNELS,
MIN_2_4GHZ_CHANNEL = RF_CHAN_1,
MAX_2_4GHZ_CHANNEL = RF_CHAN_14,
MIN_5GHZ_CHANNEL = RF_CHAN_36,
MAX_5GHZ_CHANNEL = RF_CHAN_184,
NUM_5GHZ_CHANNELS = (MAX_5GHZ_CHANNEL - MIN_5GHZ_CHANNEL + 1),
MIN_20MHZ_RF_CHANNEL = RF_CHAN_1,
MAX_20MHZ_RF_CHANNEL = RF_CHAN_184,
NUM_20MHZ_RF_CHANNELS = (MAX_20MHZ_RF_CHANNEL - MIN_20MHZ_RF_CHANNEL + 1),
MIN_40MHZ_RF_CHANNEL = RF_CHAN_BOND_3,
MAX_40MHZ_RF_CHANNEL = RF_CHAN_BOND_163,
NUM_40MHZ_RF_CHANNELS = (MAX_40MHZ_RF_CHANNEL - MIN_40MHZ_RF_CHANNEL + 1),
MIN_CB_2_4GHZ_CHANNEL = RF_CHAN_BOND_3,
MAX_CB_2_4GHZ_CHANNEL = RF_CHAN_BOND_11,
MIN_CB_5GHZ_CHANNEL = RF_CHAN_BOND_38,
MAX_CB_5GHZ_CHANNEL = RF_CHAN_BOND_163,
NUM_TPC_2_4GHZ_CHANNELS = 14,
NUM_TPC_5GHZ_CHANNELS = NUM_5GHZ_CHANNELS,
INVALID_RF_CHANNEL = 0xBAD,
RF_CHANNEL_INVALID_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */
}eRfChannels;
typedef enum
{
RF_CHAN_1_1 = RF_CHAN_1,
RF_CHAN_2_1 = RF_CHAN_2,
RF_CHAN_3_1 = RF_CHAN_3,
RF_CHAN_4_1 = RF_CHAN_4,
RF_CHAN_5_1 = RF_CHAN_5,
RF_CHAN_6_1 = RF_CHAN_6,
RF_CHAN_7_1 = RF_CHAN_7,
RF_CHAN_8_1 = RF_CHAN_8,
RF_CHAN_9_1 = RF_CHAN_9,
RF_CHAN_10_1 = RF_CHAN_10,
RF_CHAN_11_1 = RF_CHAN_11,
RF_CHAN_12_1 = RF_CHAN_12,
RF_CHAN_13_1 = RF_CHAN_13,
RF_CHAN_14_1 = RF_CHAN_14,
// The above params are used for scripts.
NUM_2_4GHZ_CHANNELS,
}eRfChannels_2_4GHz;
enum
{
NV_CHANNEL_DISABLE,
NV_CHANNEL_ENABLE,
NV_CHANNEL_DFS,
NV_CHANNEL_INVALID,
NV_CHANNEL_SKIP_DSRC,
NV_CHANNEL_SKIP_2G
};
typedef uint8 eNVChannelEnabledType;
typedef PACKED_PRE struct PACKED_POST
{
uint32_t enabled:4;
uint32_t flags:28;
tPowerdBm pwrLimit;
}sRegulatoryChannel;
typedef PACKED_PRE struct PACKED_POST
{
sRegulatoryChannel channels[NUM_RF_CHANNELS];
uAbsPwrPrecision antennaGain[NUM_RF_SUBBANDS];
uAbsPwrPrecision bRatePowerOffset[NUM_2_4GHZ_CHANNELS];
uAbsPwrPrecision gnRatePowerOffset[NUM_RF_CHANNELS];
}ALIGN_4 sRegulatoryDomains;
typedef PACKED_PRE struct PACKED_POST
{
int16 bRssiOffset[NUM_RF_CHANNELS];
int16 gnRssiOffset[NUM_RF_CHANNELS];
}ALIGN_4 sRssiChannelOffsets;
typedef PACKED_PRE struct PACKED_POST
{
uint16 targetFreq; //number in MHz
uint16 channelNum; //channel number as in the eRfChannels enumeration
eRfSubBand band; //band that this channel belongs to
}tRfChannelProps;
typedef enum
{
MODE_802_11B = 0,
MODE_802_11AG = 1,
MODE_802_11N = 2,
NUM_802_11_MODES,
MODE_802_11_INVALID = 0x7FFFFFFF /* define as 4 bytes data */
} e80211Modes;
#define HW_CAL_VALUES_VALID_BMAP_UNUSED 0 //Value
//Bit mask
#define HW_VAL_VALUES_VALID_BMAP_SLEEP_TIME_OVERHEAD_2G_MASK 0x1
#define HW_VAL_VALUES_VALID_BMAP_SLEEP_TIME_OVERHEAD_5G_MASK 0x2
#define HW_VAL_VALUES_VALID_BMAP_SLEEP_TIME_OVERHEAD_xLNA_5G_MASK 0x4
#define HW_VAL_VALUES_VALID_TXBBF_SEL_9MHZ_MASK 0x8
#define HW_VAL_VALUES_VALID_CUSTOM_TCXO_REG8_MASK 0x10
#define HW_VAL_VALUES_VALID_CUSTOM_TCXO_REG9_MASK 0x20
//From wlanfw/inc/halPhyCalMemory.h
typedef PACKED_PRE struct PACKED_POST
{
uint16 psSlpTimeOvrHd2G;
uint16 psSlpTimeOvrHd5G;
uint16 psSlpTimeOvrHdxLNA5G;
uint8 nv_TxBBFSel9MHz : 1;
uint8 hwParam1 : 7;
uint8 hwParam2;
uint16 custom_tcxo_reg8;
uint16 custom_tcxo_reg9;
uint32 hwParam3;
uint32 hwParam4;
uint32 hwParam5;
uint32 hwParam6;
uint32 hwParam7;
uint32 hwParam8;
uint32 hwParam9;
uint32 hwParam10;
uint32 hwParam11;
}sCalData;
typedef PACKED_PRE struct PACKED_POST
{
uint32 validBmap; //use eNvCalID
sCalData calData;
}sHwCalValues;
typedef PACKED_PRE struct PACKED_POST
{
uint32 txFirFilterMode;
}sTxBbFilterMode;
typedef PACKED_PRE struct PACKED_POST
{
int16 ofdmPwrOffset;
int16 rsvd;
}sOfdmCmdPwrOffset;
//From wlanfw/inc/halPhyCfg.h
typedef uint8 tTpcLutValue;
#define MAX_TPC_CAL_POINTS (8)
typedef uint8 tPowerDetect; //7-bit power detect reading
typedef PACKED_PRE struct PACKED_POST
{
tPowerDetect pwrDetAdc; //= SENSED_PWR register, which reports the 8-bit ADC
// the stored ADC value gets shifted to 7-bits as the index to the LUT
tPowerDetect adjustedPwrDet; //7-bit value that goes into the LUT at the LUT[pwrDet] location
//MSB set if extraPrecision.hi8_adjustedPwrDet is used
}tTpcCaldPowerPoint;
typedef tTpcCaldPowerPoint tTpcCaldPowerTable[NUM_PHY_MAX_TX_CHAINS][MAX_TPC_CAL_POINTS];
typedef PACKED_PRE struct PACKED_POST
{
tTpcCaldPowerTable empirical; //calibrated power points
}tTpcConfig;
//From wlanfw/inc/phyTxPower.h
#ifndef TPC_MEM_POWER_LUT_DEPTH
#define TPC_MEM_POWER_LUT_DEPTH 256
#endif
typedef tTpcLutValue tTpcPowerTable[NUM_PHY_MAX_TX_CHAINS][TPC_MEM_POWER_LUT_DEPTH];
typedef PACKED_PRE struct PACKED_POST
{
tTpcConfig *pwrSampled; //points to CLPC data in calMemory
}tPhyTxPowerBand;
//From halPhyRates.h
typedef enum
{
//802.11b Rates
HAL_PHY_RATE_11B_LONG_1_MBPS,
HAL_PHY_RATE_11B_LONG_2_MBPS,
HAL_PHY_RATE_11B_LONG_5_5_MBPS,
HAL_PHY_RATE_11B_LONG_11_MBPS,
HAL_PHY_RATE_11B_SHORT_2_MBPS,
HAL_PHY_RATE_11B_SHORT_5_5_MBPS,
HAL_PHY_RATE_11B_SHORT_11_MBPS,
//Spica_Virgo 11A 20MHz Rates
HAL_PHY_RATE_11A_6_MBPS,
HAL_PHY_RATE_11A_9_MBPS,
HAL_PHY_RATE_11A_12_MBPS,
HAL_PHY_RATE_11A_18_MBPS,
HAL_PHY_RATE_11A_24_MBPS,
HAL_PHY_RATE_11A_36_MBPS,
HAL_PHY_RATE_11A_48_MBPS,
HAL_PHY_RATE_11A_54_MBPS,
// 11A 20MHz Rates
HAL_PHY_RATE_11A_DUP_6_MBPS,
HAL_PHY_RATE_11A_DUP_9_MBPS,
HAL_PHY_RATE_11A_DUP_12_MBPS,
HAL_PHY_RATE_11A_DUP_18_MBPS,
HAL_PHY_RATE_11A_DUP_24_MBPS,
HAL_PHY_RATE_11A_DUP_36_MBPS,
HAL_PHY_RATE_11A_DUP_48_MBPS,
HAL_PHY_RATE_11A_DUP_54_MBPS,
//MCS Index #0-7 (20/40MHz)
HAL_PHY_RATE_MCS_1NSS_6_5_MBPS,
HAL_PHY_RATE_MCS_1NSS_13_MBPS,
HAL_PHY_RATE_MCS_1NSS_19_5_MBPS,
HAL_PHY_RATE_MCS_1NSS_26_MBPS,
HAL_PHY_RATE_MCS_1NSS_39_MBPS,
HAL_PHY_RATE_MCS_1NSS_52_MBPS,
HAL_PHY_RATE_MCS_1NSS_58_5_MBPS,
HAL_PHY_RATE_MCS_1NSS_65_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_7_2_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_14_4_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_21_7_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_28_9_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_43_3_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_57_8_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_65_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_72_2_MBPS,
//MCS Index #8-15 (20/40MHz)
HAL_PHY_RATE_MCS_1NSS_CB_13_5_MBPS,
HAL_PHY_RATE_MCS_1NSS_CB_27_MBPS,
HAL_PHY_RATE_MCS_1NSS_CB_40_5_MBPS,
HAL_PHY_RATE_MCS_1NSS_CB_54_MBPS,
HAL_PHY_RATE_MCS_1NSS_CB_81_MBPS,
HAL_PHY_RATE_MCS_1NSS_CB_108_MBPS,
HAL_PHY_RATE_MCS_1NSS_CB_121_5_MBPS,
HAL_PHY_RATE_MCS_1NSS_CB_135_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_15_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_30_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_45_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_60_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_90_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_120_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_135_MBPS,
HAL_PHY_RATE_MCS_1NSS_MM_SG_CB_150_MBPS,
#ifdef WLAN_FEATURE_11AC
/*11A duplicate 80MHz Rates*/
HAL_PHY_RATE_11AC_DUP_6_MBPS,
HAL_PHY_RATE_11AC_DUP_9_MBPS,
HAL_PHY_RATE_11AC_DUP_12_MBPS,
HAL_PHY_RATE_11AC_DUP_18_MBPS,
HAL_PHY_RATE_11AC_DUP_24_MBPS,
HAL_PHY_RATE_11AC_DUP_36_MBPS,
HAL_PHY_RATE_11AC_DUP_48_MBPS,
HAL_PHY_RATE_11AC_DUP_54_MBPS,
/*11AC rate 20MHZ Normal GI*/
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_6_5_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_13_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_19_5_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_26_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_39_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_52_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_58_5_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_65_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_78_MBPS,
#ifdef WCN_PRONTO
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_NGI_86_5_MBPS,
#endif
/*11AC rate 20MHZ Shortl GI*/
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_7_2_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_14_4_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_21_6_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_28_8_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_43_3_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_57_7_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_65_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_72_2_MBPS,
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_86_6_MBPS,
#ifdef WCN_PRONTO
HAL_PHY_RATE_VHT_20MHZ_MCS_1NSS_SGI_96_1_MBPS,
#endif
/*11AC rates 40MHZ normal GI*/
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_13_5_MBPS ,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_27_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_40_5_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_54_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_81_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_108_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_121_5_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_135_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_162_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_NGI_180_MBPS,
/*11AC rates 40MHZ short GI*/
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_15_MBPS ,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_30_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_45_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_60_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_90_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_120_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_135_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_150_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_180_MBPS,
HAL_PHY_RATE_VHT_40MHZ_MCS_1NSS_CB_SGI_200_MBPS,
/*11AC rates 80 MHZ normal GI*/
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_29_3_MBPS ,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_58_5_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_87_8_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_117_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_175_5_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_234_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_263_3_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_292_5_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_351_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_NGI_390_MBPS,
/*11AC rates 80 MHZ short GI*/
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_32_5_MBPS ,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_65_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_97_5_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_130_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_195_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_260_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_292_5_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_325_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_390_MBPS,
HAL_PHY_RATE_VHT_80MHZ_MCS_1NSS_CB_SGI_433_3_MBPS,
#endif //WLAN_FEATURE_11AC
NUM_HAL_PHY_RATES,
HAL_PHY_RATE_INVALID,
MIN_RATE_INDEX = 0,
MAX_RATE_INDEX = NUM_HAL_PHY_RATES - 1,
HAL_PHY_RATE_INVALID_MAX_FIELD = 0x7FFFFFFF /* define as 4 bytes data */
}eHalPhyRates;
#define NUM_RATE_POWER_GROUPS NUM_HAL_PHY_RATES //total number of rate power groups including the CB_RATE_POWER_OFFSET
typedef uAbsPwrPrecision tRateGroupPwr[NUM_HAL_PHY_RATES];
//From halNvTables.h
#define NV_FIELD_COUNTRY_CODE_SIZE 3
typedef PACKED_PRE struct PACKED_POST
{
uint8 regDomain; //from eRegDomainId
uint8 countryCode[NV_FIELD_COUNTRY_CODE_SIZE]; // string identifier
}sDefaultCountry;
#define GF_PA_BIAS_SELECT_MASK 0X7 //(3 bits)
#define TSMC_PA_BIAS_SELECT_MASK 0x7 //(3 bits)
#define GF_PA_BIAS_SELECT_1 0X0
#define GF_PA_BIAS_SELECT_2 0X1
#define TSMC_PA_BIAS_SELECT_1 0X0
#define TSMC_PA_BIAS_SELECT_2 0X1
#define TSMC_PA_BIAS_SELECT_3 0x2
#define EXT_PA_CTRL_POLARITY_DEFAULT 0X0
#define EXT_PA_CTRL_POLARITY_VALID 0X80
#define EXT_PA_CTRL0_POLARITY_MASK 0X3
#define EXT_PA_CTRL0_POLARITY_OFFSET 0X0
#define EXT_PA_CTRL1_POLARITY_MASK 0XC
#define EXT_PA_CTRL1_POLARITY_OFFSET 0X2
#define EXT_PA_CTRL_POLARITY_ZERO 0X1
#define EXT_PA_CTRL_POLARITY_ONE 0X2
typedef PACKED_PRE struct PACKED_POST
{
uint8 skuID;
uint8 tpcMode2G;
uint8 tpcMode5G;
uint8 configItem1;
uint8 xPA2G;
uint8 xPA5G;
uint8 extPaCtrl0Polarity;
uint8 extPaCtrl1Polarity;
uint8 xLNA2G;
uint8 xLNA5G;
uint8 xCoupler2G;
uint8 xCoupler5G;
uint8 xPdet2G;
uint8 xPdet5G;
uint8 enableDPD2G;
uint8 enableDPD5G;
uint8 pdadcSelect2G;
uint8 pdadcSelect5GLow;
uint8 pdadcSelect5GMid;
uint8 pdadcSelect5GHigh;
uint32 configItem2;
uint32 configItem3;
uint32 configItem4;
}sFwConfig;
#define NUM_RF_VR_RATE 13
typedef uAbsPwrPrecision tRateGroupPwrVR[NUM_RF_VR_RATE];
typedef PACKED_PRE union PACKED_POST
{
tRateGroupPwr pwrOptimum[NUM_RF_SUBBANDS]; // NV_TABLE_RATE_POWER_SETTINGS
sRegulatoryDomains regDomains[NUM_REG_DOMAINS]; // NV_TABLE_REGULATORY_DOMAINS
sDefaultCountry defaultCountryTable; // NV_TABLE_DEFAULT_COUNTRY
tTpcPowerTable plutCharacterized[NUM_RF_CHANNELS]; // NV_TABLE_TPC_POWER_TABLE
int16 plutPdadcOffset[NUM_RF_CHANNELS]; // NV_TABLE_TPC_PDADC_OFFSETS
tRateGroupPwrVR pwrOptimum_virtualRate[NUM_RF_SUBBANDS]; // NV_TABLE_VIRTUAL_RATE
sFwConfig fwConfig; // NV_TABLE_FW_CONFIG
sRssiChannelOffsets rssiChanOffsets[2]; // NV_TABLE_RSSI_CHANNEL_OFFSETS
sHwCalValues hwCalValues; // NV_TABLE_HW_CAL_VALUES
int16 antennaPathLoss[NUM_RF_CHANNELS]; // NV_TABLE_ANTENNA_PATH_LOSS
int16 pktTypePwrLimits[NUM_802_11_MODES][NUM_RF_CHANNELS]; // NV_TABLE_PACKET_TYPE_POWER_LIMITS
sOfdmCmdPwrOffset ofdmCmdPwrOffset; // NV_TABLE_OFDM_CMD_PWR_OFFSET
sTxBbFilterMode txbbFilterMode; // NV_TABLE_TX_BB_FILTER_MODE
}ALIGN_4 uNvTables;
//From halPhy.h
typedef tPowerdBm tChannelPwrLimit;
typedef PACKED_PRE struct PACKED_POST
{
uint8 chanId;
tChannelPwrLimit pwr;
} ALIGN_4 tChannelListWithPower;
//From HAL/inc/halNvTables.h
typedef enum
{
NV_FIELDS_IMAGE = 0, //contains all fields
NV_TABLE_RATE_POWER_SETTINGS = 2,
NV_TABLE_REGULATORY_DOMAINS = 3,
NV_TABLE_DEFAULT_COUNTRY = 4,
NV_TABLE_TPC_POWER_TABLE = 5,
NV_TABLE_TPC_PDADC_OFFSETS = 6,
NV_TABLE_HW_CAL_VALUES = 7,
NV_TABLE_RSSI_CHANNEL_OFFSETS = 9,
NV_TABLE_CAL_MEMORY = 10, //cal memory structure from halPhyCalMemory.h preceded by status
NV_TABLE_FW_CONFIG = 11,
NV_TABLE_ANTENNA_PATH_LOSS = 12,
NV_TABLE_PACKET_TYPE_POWER_LIMITS = 13,
NV_TABLE_OFDM_CMD_PWR_OFFSET = 14,
NV_TABLE_TX_BB_FILTER_MODE = 15,
NV_TABLE_VIRTUAL_RATE = 18,
NUM_NV_TABLE_IDS,
NV_ALL_TABLES = 0xFFF,
NV_BINARY_IMAGE = 0x1000,
NV_MAX_TABLE = 0x7FFFFFFF /* define as 4 bytes data */
}eNvTable;
typedef PACKED_PRE struct PACKED_POST
{
tRateGroupPwr pwrOptimum[NUM_RF_SUBBANDS]; // NV_TABLE_RATE_POWER_SETTINGS
sRegulatoryDomains regDomains[NUM_REG_DOMAINS]; // NV_TABLE_REGULATORY_DOMAINS
sDefaultCountry defaultCountryTable; // NV_TABLE_DEFAULT_COUNTRY
tTpcPowerTable plutCharacterized[NUM_RF_CHANNELS]; // NV_TABLE_TPC_POWER_TABLE
int16 plutPdadcOffset[NUM_RF_CHANNELS]; // NV_TABLE_TPC_PDADC_OFFSETS
tRateGroupPwrVR pwrOptimum_virtualRate[NUM_RF_SUBBANDS]; // NV_TABLE_VIRTUAL_RATE
sFwConfig fwConfig; // NV_TABLE_FW_CONFIG
sRssiChannelOffsets rssiChanOffsets[2]; // NV_TABLE_RSSI_CHANNEL_OFFSETS
sHwCalValues hwCalValues; // NV_TABLE_HW_CAL_VALUES
int16 antennaPathLoss[NUM_RF_CHANNELS]; // NV_TABLE_ANTENNA_PATH_LOSS
int16 pktTypePwrLimits[NUM_802_11_MODES][NUM_RF_CHANNELS]; // NV_TABLE_PACKET_TYPE_POWER_LIMITS
sOfdmCmdPwrOffset ofdmCmdPwrOffset; // NV_TABLE_OFDM_CMD_PWR_OFFSET
sTxBbFilterMode txbbFilterMode; // NV_TABLE_TX_BB_FILTER_MODE
}ALIGN_4 sNvTables;
typedef PACKED_PRE struct PACKED_POST
{
sNvFields fields;
sNvTables tables;
}ALIGN_4 sHalNv;
extern const sHalNv nvDefaults;
#endif