blob: e74e5fe0482f691f5ae01e6999f1f3c42294dd2d [file] [log] [blame]
/*
* Copyright (c) 2012 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_nv2.h
\brief Types for NV implementation
Anything that needs to be publicly available should
be in this file
$Id$
========================================================================== */
#if !defined( __WLAN_NV2_H )
#define __WLAN_NV2_H
#include "halLegacyPalTypes.h"
#include "halCompiler.h"
#include "wlan_nv.h"
/* From here, NV2 No CH144 support reduced structure
* This structure will be used for NV2 backward compatibility */
typedef enum
{
//2.4GHz Band
RF_CHAN_1_V2 = 0,
RF_CHAN_2_V2 = 1,
RF_CHAN_3_V2 = 2,
RF_CHAN_4_V2 = 3,
RF_CHAN_5_V2 = 4,
RF_CHAN_6_V2 = 5,
RF_CHAN_7_V2 = 6,
RF_CHAN_8_V2 = 7,
RF_CHAN_9_V2 = 8,
RF_CHAN_10_V2 = 9,
RF_CHAN_11_V2 = 10,
RF_CHAN_12_V2 = 11,
RF_CHAN_13_V2 = 12,
RF_CHAN_14_V2 = 13,
//4.9GHz Band
RF_CHAN_240_V2 = 14,
RF_CHAN_244_V2 = 15,
RF_CHAN_248_V2 = 16,
RF_CHAN_252_V2 = 17,
RF_CHAN_208_V2 = 18,
RF_CHAN_212_V2 = 19,
RF_CHAN_216_V2 = 20,
//5GHz Low & Mid U-NII Band
RF_CHAN_36_V2 = 21,
RF_CHAN_40_V2 = 22,
RF_CHAN_44_V2 = 23,
RF_CHAN_48_V2 = 24,
RF_CHAN_52_V2 = 25,
RF_CHAN_56_V2 = 26,
RF_CHAN_60_V2 = 27,
RF_CHAN_64_V2 = 28,
//5GHz Mid Band - ETSI & FCC
RF_CHAN_100_V2 = 29,
RF_CHAN_104_V2 = 30,
RF_CHAN_108_V2 = 31,
RF_CHAN_112_V2 = 32,
RF_CHAN_116_V2 = 33,
RF_CHAN_120_V2 = 34,
RF_CHAN_124_V2 = 35,
RF_CHAN_128_V2 = 36,
RF_CHAN_132_V2 = 37,
RF_CHAN_136_V2 = 38,
RF_CHAN_140_V2 = 39,
//5GHz High U-NII Band
RF_CHAN_149_V2 = 40,
RF_CHAN_153_V2 = 41,
RF_CHAN_157_V2 = 42,
RF_CHAN_161_V2 = 43,
RF_CHAN_165_V2 = 44,
//CHANNEL BONDED CHANNELS
RF_CHAN_BOND_3_V2 = 45,
RF_CHAN_BOND_4_V2 = 46,
RF_CHAN_BOND_5_V2 = 47,
RF_CHAN_BOND_6_V2 = 48,
RF_CHAN_BOND_7_V2 = 49,
RF_CHAN_BOND_8_V2 = 50,
RF_CHAN_BOND_9_V2 = 51,
RF_CHAN_BOND_10_V2 = 52,
RF_CHAN_BOND_11_V2 = 53,
RF_CHAN_BOND_242_V2 = 54, //4.9GHz Band
RF_CHAN_BOND_246_V2 = 55,
RF_CHAN_BOND_250_V2 = 56,
RF_CHAN_BOND_210_V2 = 57,
RF_CHAN_BOND_214_V2 = 58,
RF_CHAN_BOND_38_V2 = 59, //5GHz Low & Mid U-NII Band
RF_CHAN_BOND_42_V2 = 60,
RF_CHAN_BOND_46_V2 = 61,
RF_CHAN_BOND_50_V2 = 62,
RF_CHAN_BOND_54_V2 = 63,
RF_CHAN_BOND_58_V2 = 64,
RF_CHAN_BOND_62_V2 = 65,
RF_CHAN_BOND_102_V2 = 66, //5GHz Mid Band - ETSI & FCC
RF_CHAN_BOND_106_V2 = 67,
RF_CHAN_BOND_110_V2 = 68,
RF_CHAN_BOND_114_V2 = 69,
RF_CHAN_BOND_118_V2 = 70,
RF_CHAN_BOND_122_V2 = 71,
RF_CHAN_BOND_126_V2 = 72,
RF_CHAN_BOND_130_V2 = 73,
RF_CHAN_BOND_134_V2 = 74,
RF_CHAN_BOND_138_V2 = 75,
RF_CHAN_BOND_151_V2 = 76, //5GHz High U-NII Band
RF_CHAN_BOND_155_V2 = 77,
RF_CHAN_BOND_159_V2 = 78,
RF_CHAN_BOND_163_V2 = 79,
NUM_RF_CHANNELS_V2,
MIN_2_4GHZ_CHANNEL_V2 = RF_CHAN_1_V2,
MAX_2_4GHZ_CHANNEL_V2 = RF_CHAN_14_V2,
MIN_5GHZ_CHANNEL_V2 = RF_CHAN_240_V2,
MAX_5GHZ_CHANNEL_V2 = RF_CHAN_165_V2,
NUM_5GHZ_CHANNELS_V2 = (MAX_5GHZ_CHANNEL_V2 - MIN_5GHZ_CHANNEL_V2 + 1),
MIN_20MHZ_RF_CHANNEL_V2 = RF_CHAN_1_V2,
MAX_20MHZ_RF_CHANNEL_V2 = RF_CHAN_165_V2,
NUM_20MHZ_RF_CHANNELS_V2 = (MAX_20MHZ_RF_CHANNEL_V2 - MIN_20MHZ_RF_CHANNEL_V2 + 1),
MIN_40MHZ_RF_CHANNEL_V2 = RF_CHAN_BOND_3_V2,
MAX_40MHZ_RF_CHANNEL_V2 = RF_CHAN_BOND_163_V2,
NUM_40MHZ_RF_CHANNELS_V2 = (MAX_40MHZ_RF_CHANNEL_V2 - MIN_40MHZ_RF_CHANNEL_V2 + 1),
MIN_CB_2_4GHZ_CHANNEL_V2 = RF_CHAN_BOND_3_V2,
MAX_CB_2_4GHZ_CHANNEL_V2 = RF_CHAN_BOND_11_V2,
MIN_CB_5GHZ_CHANNEL_V2 = RF_CHAN_BOND_242_V2,
MAX_CB_5GHZ_CHANNEL_V2 = RF_CHAN_BOND_163_V2,
NUM_TPC_2_4GHZ_CHANNELS_V2 = 14,
NUM_TPC_5GHZ_CHANNELS_V2 = NUM_5GHZ_CHANNELS_V2,
INVALID_RF_CHANNEL_V2 = 0xBAD,
RF_CHANNEL_INVALID_MAX_FIELD_V2 = 0x7FFFFFFF /* define as 4 bytes data */
}eRfChannelsV2;
typedef PACKED_PRE struct PACKED_POST
{
sRegulatoryChannel channels[NUM_RF_CHANNELS_V2];
uAbsPwrPrecision antennaGain[NUM_RF_SUBBANDS];
uAbsPwrPrecision bRatePowerOffset[NUM_2_4GHZ_CHANNELS];
uAbsPwrPrecision gnRatePowerOffset[NUM_RF_CHANNELS_V2];
}ALIGN_4 sRegulatoryDomainsV2;
typedef PACKED_PRE struct PACKED_POST
{
int16 bRssiOffset[NUM_RF_CHANNELS_V2];
int16 gnRssiOffset[NUM_RF_CHANNELS_V2];
}ALIGN_4 sRssiChannelOffsetsV2;
typedef PACKED_PRE union PACKED_POST
{
tRateGroupPwr pwrOptimum[NUM_RF_SUBBANDS]; // NV_TABLE_RATE_POWER_SETTINGS
sRegulatoryDomainsV2 regDomains[NUM_REG_DOMAINS]; // NV_TABLE_REGULATORY_DOMAINS
sDefaultCountry defaultCountryTable; // NV_TABLE_DEFAULT_COUNTRY
tTpcPowerTable plutCharacterized[NUM_RF_CHANNELS_V2]; // NV_TABLE_TPC_POWER_TABLE
int16 plutPdadcOffset[NUM_RF_CHANNELS_V2]; // NV_TABLE_TPC_PDADC_OFFSETS
tRateGroupPwrVR pwrOptimum_virtualRate[NUM_RF_SUBBANDS]; // NV_TABLE_VIRTUAL_RATE
sFwConfig fwConfig; // NV_TABLE_FW_CONFIG
sRssiChannelOffsetsV2 rssiChanOffsets[2]; // NV_TABLE_RSSI_CHANNEL_OFFSETS
sHwCalValues hwCalValues; // NV_TABLE_HW_CAL_VALUES
int16 antennaPathLoss[NUM_RF_CHANNELS_V2]; // NV_TABLE_ANTENNA_PATH_LOSS
int16 pktTypePwrLimits[NUM_802_11_MODES][NUM_RF_CHANNELS_V2]; // NV_TABLE_PACKET_TYPE_POWER_LIMITS
sOfdmCmdPwrOffset ofdmCmdPwrOffset; // NV_TABLE_OFDM_CMD_PWR_OFFSET
sTxBbFilterMode txbbFilterMode; // NV_TABLE_TX_BB_FILTER_MODE
}ALIGN_4 uNvTablesV2;
typedef PACKED_PRE struct PACKED_POST
{
tRateGroupPwr pwrOptimum[NUM_RF_SUBBANDS]; // NV_TABLE_RATE_POWER_SETTINGS
sRegulatoryDomainsV2 regDomains[NUM_REG_DOMAINS]; // NV_TABLE_REGULATORY_DOMAINS
sDefaultCountry defaultCountryTable; // NV_TABLE_DEFAULT_COUNTRY
tTpcPowerTable plutCharacterized[NUM_RF_CHANNELS_V2]; // NV_TABLE_TPC_POWER_TABLE
int16 plutPdadcOffset[NUM_RF_CHANNELS_V2]; // NV_TABLE_TPC_PDADC_OFFSETS
tRateGroupPwrVR pwrOptimum_virtualRate[NUM_RF_SUBBANDS]; // NV_TABLE_VIRTUAL_RATE
sFwConfig fwConfig; // NV_TABLE_FW_CONFIG
sRssiChannelOffsetsV2 rssiChanOffsets[2]; // NV_TABLE_RSSI_CHANNEL_OFFSETS
sHwCalValues hwCalValues; // NV_TABLE_HW_CAL_VALUES
int16 antennaPathLoss[NUM_RF_CHANNELS_V2]; // NV_TABLE_ANTENNA_PATH_LOSS
int16 pktTypePwrLimits[NUM_802_11_MODES][NUM_RF_CHANNELS_V2]; // NV_TABLE_PACKET_TYPE_POWER_LIMITS
sOfdmCmdPwrOffset ofdmCmdPwrOffset; // NV_TABLE_OFDM_CMD_PWR_OFFSET
sTxBbFilterMode txbbFilterMode; // NV_TABLE_TX_BB_FILTER_MODE
}ALIGN_4 sNvTablesV2;
typedef PACKED_PRE struct PACKED_POST
{
sNvFields fields;
sNvTablesV2 tables;
}ALIGN_4 sHalNvV2;
extern const sHalNvV2 nvDefaultsV2;
#endif