#ifndef _ATH_AH_EEPROM_V3_H_
#define _ATH_AH_EEPROM_V3_H_
#include "ah_eeprom.h"
#define AR_EEPROM_RFSILENT 0x0f
#define AR_EEPROM_MAC(i) (0x1d+(i))
#define AR_EEPROM_MAGIC 0x3d
#define AR_EEPROM_PROTECT 0x3f
#define AR_EEPROM_PROTECT_PCIE 0x01
#define AR_EEPROM_REG_DOMAIN 0xbf
#define AR_EEPROM_ATHEROS_BASE 0xc0
#define AR_EEPROM_ATHEROS(i) (AR_EEPROM_ATHEROS_BASE+(i))
#define AR_EEPROM_ATHEROS_MAX (0x400-AR_EEPROM_ATHEROS_BASE)
#define AR_EEPROM_VERSION AR_EEPROM_ATHEROS(1)
#define AR_EEPROM_SIZE_LOWER 0x1b
#define AR_EEPROM_SIZE_UPPER 0x1c
#define AR_EEPROM_SIZE_UPPER_MASK 0xfff0
#define AR_EEPROM_SIZE_UPPER_SHIFT 4
#define AR_EEPROM_SIZE_ENDLOC_SHIFT 12
#define AR_EEPROM_ATHEROS_MAX_LOC 0x400
#define AR_EEPROM_ATHEROS_MAX_OFF (AR_EEPROM_ATHEROS_MAX_LOC-AR_EEPROM_ATHEROS_BASE)
#define AR_EEPROM_REG_CAPABILITIES_OFFSET 0xCA
#define AR_EEPROM_REG_CAPABILITIES_OFFSET_PRE4_0 0xCF
#define AR_EEPROM_EEREGCAP_EN_FCC_MIDBAND 0x0040
#define AR_EEPROM_EEREGCAP_EN_KK_U1_EVEN 0x0080
#define AR_EEPROM_EEREGCAP_EN_KK_U2 0x0100
#define AR_EEPROM_EEREGCAP_EN_KK_MIDBAND 0x0200
#define AR_EEPROM_EEREGCAP_EN_KK_U1_ODD 0x0400
#define AR_EEPROM_EEREGCAP_EN_KK_NEW_11A 0x0800
#define AR_EEPROM_EEREGCAP_EN_KK_U1_ODD_PRE4_0 0x4000
#define AR_EEPROM_EEREGCAP_EN_KK_NEW_11A_PRE4_0 0x8000
#define AR_EEPROM_SERIAL_NUM_OFFSET 0xB0
#define AR_EEPROM_SERIAL_NUM_SIZE 12
#define AR_EEPROM_CAPABILITIES_OFFSET 0xC9
#define AR_EEPROM_EEPCAP_COMPRESS_DIS 0x0001
#define AR_EEPROM_EEPCAP_AES_DIS 0x0002
#define AR_EEPROM_EEPCAP_FASTFRAME_DIS 0x0004
#define AR_EEPROM_EEPCAP_BURST_DIS 0x0008
#define AR_EEPROM_EEPCAP_MAXQCU 0x01F0
#define AR_EEPROM_EEPCAP_MAXQCU_S 4
#define AR_EEPROM_EEPCAP_HEAVY_CLIP_EN 0x0200
#define AR_EEPROM_EEPCAP_KC_ENTRIES 0xF000
#define AR_EEPROM_EEPCAP_KC_ENTRIES_S 12
enum {
headerInfo11A = 0,
headerInfo11B = 1,
headerInfo11G = 2,
};
#define GROUPS_OFFSET3_2 0x100
#define GROUPS_OFFSET3_3 0x150
#define GROUP1_OFFSET 0x0
#define GROUP2_OFFSET 0x5
#define GROUP3_OFFSET 0x37
#define GROUP4_OFFSET 0x46
#define GROUP5_OFFSET 0x55
#define GROUP6_OFFSET 0x65
#define GROUP7_OFFSET 0x69
#define GROUP8_OFFSET 0x6f
#define AR_EEPROM_RFSILENT_GPIO_SEL 0x001c
#define AR_EEPROM_RFSILENT_GPIO_SEL_S 2
#define AR_EEPROM_RFSILENT_POLARITY 0x0002
#define AR_EEPROM_RFSILENT_POLARITY_S 1
#define AR_EEPROM_PROTECT_RP_0_31 0x0001
#define AR_EEPROM_PROTECT_WP_0_31 0x0002
#define AR_EEPROM_PROTECT_RP_32_63 0x0004
#define AR_EEPROM_PROTECT_WP_32_63 0x0008
#define AR_EEPROM_PROTECT_RP_64_127 0x0010
#define AR_EEPROM_PROTECT_WP_64_127 0x0020
#define AR_EEPROM_PROTECT_RP_128_191 0x0040
#define AR_EEPROM_PROTECT_WP_128_191 0x0080
#define AR_EEPROM_PROTECT_RP_192_207 0x0100
#define AR_EEPROM_PROTECT_WP_192_207 0x0200
#define AR_EEPROM_PROTECT_RP_208_223 0x0400
#define AR_EEPROM_PROTECT_WP_208_223 0x0800
#define AR_EEPROM_PROTECT_RP_224_239 0x1000
#define AR_EEPROM_PROTECT_WP_224_239 0x2000
#define AR_EEPROM_PROTECT_RP_240_255 0x4000
#define AR_EEPROM_PROTECT_WP_240_255 0x8000
#define AR_EEPROM_MODAL_SPURS 5
#define AR_SPUR_5413_1 1640
#define AR_SPUR_5413_2 1200
#define EEP_SCALE 100
#define EEP_DELTA 10
#define PWR_MIN 0
#define PWR_MAX 3150
#define PWR_STEP 50
#define NUM_11A_EEPROM_CHANNELS 10
#define NUM_2_4_EEPROM_CHANNELS 3
#define NUM_PCDAC_VALUES 11
#define NUM_TEST_FREQUENCIES 8
#define NUM_EDGES 8
#define NUM_INTERCEPTS 11
#define FREQ_MASK 0x7f
#define FREQ_MASK_3_3 0xff
#define PCDAC_MASK 0x3f
#define POWER_MASK 0x3f
#define NON_EDGE_FLAG_MASK 0x40
#define CHANNEL_POWER_INFO 8
#define OBDB_UNSET 0xffff
#define CHANNEL_UNUSED 0xff
#define SCALE_OC_DELTA(_x) (((_x) * 2) / 10)
#define PCDAC_START 1
#define PCDAC_STOP 63
#define PCDAC_STEP 1
#define PWR_TABLE_SIZE 64
#define MAX_RATE_POWER 63
#define NUM_CTLS 16
#define NUM_CTLS_3_3 32
#define NUM_CTLS_MAX NUM_CTLS_3_3
typedef struct fullPcdacStruct {
uint16_t channelValue;
uint16_t pcdacMin;
uint16_t pcdacMax;
uint16_t numPcdacValues;
uint16_t PcdacValues[64];
int16_t PwrValues[64];
} FULL_PCDAC_STRUCT;
typedef struct dataPerChannel {
uint16_t channelValue;
uint16_t pcdacMin;
uint16_t pcdacMax;
uint16_t numPcdacValues;
uint16_t PcdacValues[NUM_PCDAC_VALUES];
int16_t PwrValues[NUM_PCDAC_VALUES];
} DATA_PER_CHANNEL;
typedef struct pcdacsEeprom {
const uint16_t *pChannelList;
uint16_t numChannels;
const DATA_PER_CHANNEL *pDataPerChannel;
} PCDACS_EEPROM;
typedef struct trgtPowerInfo {
uint16_t twicePwr54;
uint16_t twicePwr48;
uint16_t twicePwr36;
uint16_t twicePwr6_24;
uint16_t testChannel;
} TRGT_POWER_INFO;
typedef struct trgtPowerAllModes {
uint16_t numTargetPwr_11a;
TRGT_POWER_INFO trgtPwr_11a[NUM_TEST_FREQUENCIES];
uint16_t numTargetPwr_11g;
TRGT_POWER_INFO trgtPwr_11g[3];
uint16_t numTargetPwr_11b;
TRGT_POWER_INFO trgtPwr_11b[2];
} TRGT_POWER_ALL_MODES;
typedef struct cornerCalInfo {
uint16_t gSel;
uint16_t pd84;
uint16_t pd90;
uint16_t clip;
} CORNER_CAL_INFO;
#define NUM_XPD_PER_CHANNEL 4
#define NUM_POINTS_XPD0 4
#define NUM_POINTS_XPD3 3
#define IDEAL_10dB_INTERCEPT_2G 35
#define IDEAL_10dB_INTERCEPT_5G 55
#define TENX_OFDM_CCK_DELTA_INIT 15
#define TENX_CH14_FILTER_CCK_DELTA_INIT 15
#define CCK_OFDM_GAIN_DELTA 15
#define NUM_TARGET_POWER_LOCATIONS_11B 4
#define NUM_TARGET_POWER_LOCATIONS_11G 6
typedef struct {
uint16_t xpd_gain;
uint16_t numPcdacs;
uint16_t pcdac[NUM_POINTS_XPD0];
int16_t pwr_t4[NUM_POINTS_XPD0];
} EXPN_DATA_PER_XPD_5112;
typedef struct {
uint16_t channelValue;
int16_t maxPower_t4;
EXPN_DATA_PER_XPD_5112 pDataPerXPD[NUM_XPD_PER_CHANNEL];
} EXPN_DATA_PER_CHANNEL_5112;
typedef struct {
uint16_t *pChannels;
uint16_t numChannels;
uint16_t xpdMask;
EXPN_DATA_PER_CHANNEL_5112 *pDataPerChannel;
} EEPROM_POWER_EXPN_5112;
typedef struct {
uint16_t channelValue;
uint16_t pcd1_xg0;
int16_t pwr1_xg0;
uint16_t pcd2_delta_xg0;
int16_t pwr2_xg0;
uint16_t pcd3_delta_xg0;
int16_t pwr3_xg0;
uint16_t pcd4_delta_xg0;
int16_t pwr4_xg0;
int16_t maxPower_t4;
int16_t pwr1_xg3;
int16_t pwr2_xg3;
int16_t pwr3_xg3;
} EEPROM_DATA_PER_CHANNEL_5112;
typedef struct {
uint16_t pChannels[NUM_11A_EEPROM_CHANNELS];
uint16_t numChannels;
uint16_t xpdMask;
EEPROM_DATA_PER_CHANNEL_5112 pDataPerChannel[NUM_11A_EEPROM_CHANNELS];
} EEPROM_POWER_5112;
#define NUM_2_4_EEPROM_CHANNELS_2413 4
#define NUM_11A_EEPROM_CHANNELS_2413 10
#define PWR_TABLE_SIZE_2413 128
#define MAX_NUM_PDGAINS_PER_CHANNEL 4
#define NUM_PDGAINS_PER_CHANNEL 2
#define NUM_POINTS_LAST_PDGAIN 5
#define NUM_POINTS_OTHER_PDGAINS 4
#define XPD_GAIN1_GEN5 3
#define XPD_GAIN2_GEN5 1
#define MAX_PWR_RANGE_IN_HALF_DB 64
#define PD_GAIN_BOUNDARY_STRETCH_IN_HALF_DB 4
typedef struct {
uint16_t pd_gain;
uint16_t numVpd;
uint16_t Vpd[NUM_POINTS_LAST_PDGAIN];
int16_t pwr_t4[NUM_POINTS_LAST_PDGAIN];
} RAW_DATA_PER_PDGAIN_2413;
typedef struct {
uint16_t channelValue;
int16_t maxPower_t4;
uint16_t numPdGains;
RAW_DATA_PER_PDGAIN_2413 pDataPerPDGain[MAX_NUM_PDGAINS_PER_CHANNEL];
} RAW_DATA_PER_CHANNEL_2413;
typedef struct {
uint16_t pChannels[NUM_11A_EEPROM_CHANNELS_2413];
uint16_t numChannels;
uint16_t xpd_mask;
RAW_DATA_PER_CHANNEL_2413 pDataPerChannel[NUM_11A_EEPROM_CHANNELS_2413];
} RAW_DATA_STRUCT_2413;
typedef struct {
uint16_t channelValue;
uint16_t numPdGains;
uint16_t Vpd_I[MAX_NUM_PDGAINS_PER_CHANNEL];
int16_t pwr_I[MAX_NUM_PDGAINS_PER_CHANNEL];
uint16_t Vpd_delta[NUM_POINTS_LAST_PDGAIN]
[MAX_NUM_PDGAINS_PER_CHANNEL];
int16_t pwr_delta_t2[NUM_POINTS_LAST_PDGAIN]
[MAX_NUM_PDGAINS_PER_CHANNEL];
int16_t maxPower_t4;
} EEPROM_DATA_PER_CHANNEL_2413;
typedef struct {
uint16_t pChannels[NUM_11A_EEPROM_CHANNELS_2413];
uint16_t numChannels;
uint16_t xpd_mask;
EEPROM_DATA_PER_CHANNEL_2413 pDataPerChannel[NUM_11A_EEPROM_CHANNELS_2413];
} EEPROM_DATA_STRUCT_2413;
typedef struct {
uint16_t ee_version;
uint16_t ee_protect;
uint16_t ee_regdomain;
uint16_t ee_turbo5Disable;
uint16_t ee_turbo2Disable;
uint16_t ee_rfKill;
uint16_t ee_deviceType;
uint16_t ee_turbo2WMaxPower5;
uint16_t ee_turbo2WMaxPower2;
uint16_t ee_xrTargetPower5;
uint16_t ee_xrTargetPower2;
uint16_t ee_Amode;
uint16_t ee_regCap;
uint16_t ee_Bmode;
uint16_t ee_Gmode;
int8_t ee_antennaGainMax[2];
uint16_t ee_xtnd5GSupport;
uint8_t ee_cckOfdmPwrDelta;
uint8_t ee_exist32kHzCrystal;
uint16_t ee_targetPowersStart;
uint16_t ee_fixedBias5;
uint16_t ee_fixedBias2;
uint16_t ee_cckOfdmGainDelta;
uint16_t ee_scaledCh14FilterCckDelta;
uint16_t ee_eepMap;
uint16_t ee_earStart;
uint16_t ee_switchSettling[3];
uint16_t ee_txrxAtten[3];
uint16_t ee_txEndToXLNAOn[3];
uint16_t ee_thresh62[3];
uint16_t ee_txEndToXPAOff[3];
uint16_t ee_txFrameToXPAOn[3];
int8_t ee_adcDesiredSize[3];
int8_t ee_pgaDesiredSize[3];
int16_t ee_noiseFloorThresh[3];
uint16_t ee_xlnaGain[3];
uint16_t ee_xgain[3];
uint16_t ee_xpd[3];
uint16_t ee_antennaControl[11][3];
uint16_t ee_falseDetectBackoff[3];
uint16_t ee_gainI[3];
uint16_t ee_rxtxMargin[3];
HAL_BOOL ee_disableXr5;
HAL_BOOL ee_disableXr2;
uint16_t ee_eepMap2PowerCalStart;
uint16_t ee_capField;
uint16_t ee_switchSettlingTurbo[2];
uint16_t ee_txrxAttenTurbo[2];
int8_t ee_adcDesiredSizeTurbo[2];
int8_t ee_pgaDesiredSizeTurbo[2];
uint16_t ee_rxtxMarginTurbo[2];
uint16_t ee_ob1;
uint16_t ee_db1;
uint16_t ee_ob2;
uint16_t ee_db2;
uint16_t ee_ob3;
uint16_t ee_db3;
uint16_t ee_ob4;
uint16_t ee_db4;
uint16_t ee_obFor24;
uint16_t ee_dbFor24;
uint16_t ee_obFor24g;
uint16_t ee_dbFor24g;
uint16_t ee_ob2GHz[2];
uint16_t ee_db2GHz[2];
uint16_t ee_numCtls;
uint16_t ee_ctl[NUM_CTLS_MAX];
uint16_t ee_iqCalI[2];
uint16_t ee_iqCalQ[2];
uint16_t ee_calPier11g[NUM_2_4_EEPROM_CHANNELS];
uint16_t ee_calPier11b[NUM_2_4_EEPROM_CHANNELS];
CORNER_CAL_INFO ee_cornerCal;
uint16_t ee_opCap;
uint16_t ee_channels11a[NUM_11A_EEPROM_CHANNELS];
uint16_t ee_numChannels11a;
DATA_PER_CHANNEL ee_dataPerChannel11a[NUM_11A_EEPROM_CHANNELS];
uint16_t ee_numChannels2_4;
uint16_t ee_channels11g[NUM_2_4_EEPROM_CHANNELS];
uint16_t ee_channels11b[NUM_2_4_EEPROM_CHANNELS];
uint16_t ee_spurChans[AR_EEPROM_MODAL_SPURS][2];
DATA_PER_CHANNEL ee_dataPerChannel11g[NUM_2_4_EEPROM_CHANNELS];
DATA_PER_CHANNEL ee_dataPerChannel11b[NUM_2_4_EEPROM_CHANNELS];
TRGT_POWER_ALL_MODES ee_tpow;
RD_EDGES_POWER ee_rdEdgesPower[NUM_EDGES*NUM_CTLS_MAX];
union {
EEPROM_POWER_EXPN_5112 eu_modePowerArray5112[3];
RAW_DATA_STRUCT_2413 eu_rawDataset2413[3];
} ee_u;
} HAL_EEPROM;
#define ee_numTargetPwr_11a ee_tpow.numTargetPwr_11a
#define ee_trgtPwr_11a ee_tpow.trgtPwr_11a
#define ee_numTargetPwr_11g ee_tpow.numTargetPwr_11g
#define ee_trgtPwr_11g ee_tpow.trgtPwr_11g
#define ee_numTargetPwr_11b ee_tpow.numTargetPwr_11b
#define ee_trgtPwr_11b ee_tpow.trgtPwr_11b
#define ee_modePowerArray5112 ee_u.eu_modePowerArray5112
#define ee_rawDataset2413 ee_u.eu_rawDataset2413
#endif