1*6e778a7eSPedro F. Giffuni /*- 2*6e778a7eSPedro F. Giffuni * SPDX-License-Identifier: ISC 3*6e778a7eSPedro F. Giffuni * 414779705SSam Leffler * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting 514779705SSam Leffler * Copyright (c) 2002-2008 Atheros Communications, Inc. 614779705SSam Leffler * 714779705SSam Leffler * Permission to use, copy, modify, and/or distribute this software for any 814779705SSam Leffler * purpose with or without fee is hereby granted, provided that the above 914779705SSam Leffler * copyright notice and this permission notice appear in all copies. 1014779705SSam Leffler * 1114779705SSam Leffler * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1214779705SSam Leffler * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1314779705SSam Leffler * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1414779705SSam Leffler * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1514779705SSam Leffler * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1614779705SSam Leffler * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1714779705SSam Leffler * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1814779705SSam Leffler */ 1914779705SSam Leffler #ifndef _ATH_AH_EEPROM_V3_H_ 2014779705SSam Leffler #define _ATH_AH_EEPROM_V3_H_ 2114779705SSam Leffler 2214779705SSam Leffler #include "ah_eeprom.h" 2314779705SSam Leffler 2414779705SSam Leffler /* EEPROM defines for Version 2 & 3 AR5211 chips */ 2514779705SSam Leffler #define AR_EEPROM_RFSILENT 0x0f /* RF Silent/Clock Run Enable */ 2614779705SSam Leffler #define AR_EEPROM_MAC(i) (0x1d+(i)) /* MAC address word */ 2714779705SSam Leffler #define AR_EEPROM_MAGIC 0x3d /* magic number */ 2814779705SSam Leffler #define AR_EEPROM_PROTECT 0x3f /* EEPROM protect bits */ 2914779705SSam Leffler #define AR_EEPROM_PROTECT_PCIE 0x01 /* EEPROM protect bits for Condor/Swan*/ 3014779705SSam Leffler #define AR_EEPROM_REG_DOMAIN 0xbf /* current regulatory domain */ 3114779705SSam Leffler #define AR_EEPROM_ATHEROS_BASE 0xc0 /* Base of Atheros-specific data */ 3214779705SSam Leffler #define AR_EEPROM_ATHEROS(i) (AR_EEPROM_ATHEROS_BASE+(i)) 3314779705SSam Leffler #define AR_EEPROM_ATHEROS_MAX (0x400-AR_EEPROM_ATHEROS_BASE) 3414779705SSam Leffler #define AR_EEPROM_VERSION AR_EEPROM_ATHEROS(1) 3514779705SSam Leffler 3614779705SSam Leffler /* FLASH(EEPROM) Defines for AR531X chips */ 3714779705SSam Leffler #define AR_EEPROM_SIZE_LOWER 0x1b /* size info -- lower */ 3814779705SSam Leffler #define AR_EEPROM_SIZE_UPPER 0x1c /* size info -- upper */ 3914779705SSam Leffler #define AR_EEPROM_SIZE_UPPER_MASK 0xfff0 4014779705SSam Leffler #define AR_EEPROM_SIZE_UPPER_SHIFT 4 4114779705SSam Leffler #define AR_EEPROM_SIZE_ENDLOC_SHIFT 12 4214779705SSam Leffler #define AR_EEPROM_ATHEROS_MAX_LOC 0x400 4314779705SSam Leffler #define AR_EEPROM_ATHEROS_MAX_OFF (AR_EEPROM_ATHEROS_MAX_LOC-AR_EEPROM_ATHEROS_BASE) 4414779705SSam Leffler 4514779705SSam Leffler /* regulatory capabilities offsets */ 4614779705SSam Leffler #define AR_EEPROM_REG_CAPABILITIES_OFFSET 0xCA 4714779705SSam Leffler #define AR_EEPROM_REG_CAPABILITIES_OFFSET_PRE4_0 0xCF /* prior to 4.0 */ 4814779705SSam Leffler 4914779705SSam Leffler /* regulatory capabilities */ 5014779705SSam Leffler #define AR_EEPROM_EEREGCAP_EN_FCC_MIDBAND 0x0040 5114779705SSam Leffler #define AR_EEPROM_EEREGCAP_EN_KK_U1_EVEN 0x0080 5214779705SSam Leffler #define AR_EEPROM_EEREGCAP_EN_KK_U2 0x0100 5314779705SSam Leffler #define AR_EEPROM_EEREGCAP_EN_KK_MIDBAND 0x0200 5414779705SSam Leffler #define AR_EEPROM_EEREGCAP_EN_KK_U1_ODD 0x0400 5514779705SSam Leffler #define AR_EEPROM_EEREGCAP_EN_KK_NEW_11A 0x0800 5614779705SSam Leffler 5714779705SSam Leffler /* regulatory capabilities prior to eeprom version 4.0 */ 5814779705SSam Leffler #define AR_EEPROM_EEREGCAP_EN_KK_U1_ODD_PRE4_0 0x4000 5914779705SSam Leffler #define AR_EEPROM_EEREGCAP_EN_KK_NEW_11A_PRE4_0 0x8000 6014779705SSam Leffler 6114779705SSam Leffler /* 6214779705SSam Leffler * AR2413 (includes AR5413) 6314779705SSam Leffler */ 6414779705SSam Leffler #define AR_EEPROM_SERIAL_NUM_OFFSET 0xB0 /* EEPROM serial number */ 6514779705SSam Leffler #define AR_EEPROM_SERIAL_NUM_SIZE 12 /* EEPROM serial number size */ 6614779705SSam Leffler #define AR_EEPROM_CAPABILITIES_OFFSET 0xC9 /* EEPROM Location of capabilities */ 6714779705SSam Leffler 6814779705SSam Leffler #define AR_EEPROM_EEPCAP_COMPRESS_DIS 0x0001 6914779705SSam Leffler #define AR_EEPROM_EEPCAP_AES_DIS 0x0002 7014779705SSam Leffler #define AR_EEPROM_EEPCAP_FASTFRAME_DIS 0x0004 7114779705SSam Leffler #define AR_EEPROM_EEPCAP_BURST_DIS 0x0008 7214779705SSam Leffler #define AR_EEPROM_EEPCAP_MAXQCU 0x01F0 7314779705SSam Leffler #define AR_EEPROM_EEPCAP_MAXQCU_S 4 7414779705SSam Leffler #define AR_EEPROM_EEPCAP_HEAVY_CLIP_EN 0x0200 7514779705SSam Leffler #define AR_EEPROM_EEPCAP_KC_ENTRIES 0xF000 7614779705SSam Leffler #define AR_EEPROM_EEPCAP_KC_ENTRIES_S 12 7714779705SSam Leffler 7814779705SSam Leffler /* XXX used to index various EEPROM-derived data structures */ 7914779705SSam Leffler enum { 8014779705SSam Leffler headerInfo11A = 0, 8114779705SSam Leffler headerInfo11B = 1, 8214779705SSam Leffler headerInfo11G = 2, 8314779705SSam Leffler }; 8414779705SSam Leffler 8514779705SSam Leffler #define GROUPS_OFFSET3_2 0x100 /* groups offset for ver3.2 and earlier */ 8614779705SSam Leffler #define GROUPS_OFFSET3_3 0x150 /* groups offset for ver3.3 */ 8714779705SSam Leffler /* relative offset of GROUPi to GROUPS_OFFSET */ 8814779705SSam Leffler #define GROUP1_OFFSET 0x0 8914779705SSam Leffler #define GROUP2_OFFSET 0x5 9014779705SSam Leffler #define GROUP3_OFFSET 0x37 9114779705SSam Leffler #define GROUP4_OFFSET 0x46 9214779705SSam Leffler #define GROUP5_OFFSET 0x55 9314779705SSam Leffler #define GROUP6_OFFSET 0x65 9414779705SSam Leffler #define GROUP7_OFFSET 0x69 9514779705SSam Leffler #define GROUP8_OFFSET 0x6f 9614779705SSam Leffler 9714779705SSam Leffler /* RF silent fields in EEPROM */ 9814779705SSam Leffler #define AR_EEPROM_RFSILENT_GPIO_SEL 0x001c 9914779705SSam Leffler #define AR_EEPROM_RFSILENT_GPIO_SEL_S 2 10014779705SSam Leffler #define AR_EEPROM_RFSILENT_POLARITY 0x0002 10114779705SSam Leffler #define AR_EEPROM_RFSILENT_POLARITY_S 1 10214779705SSam Leffler 10314779705SSam Leffler /* Protect Bits RP is read protect, WP is write protect */ 10414779705SSam Leffler #define AR_EEPROM_PROTECT_RP_0_31 0x0001 10514779705SSam Leffler #define AR_EEPROM_PROTECT_WP_0_31 0x0002 10614779705SSam Leffler #define AR_EEPROM_PROTECT_RP_32_63 0x0004 10714779705SSam Leffler #define AR_EEPROM_PROTECT_WP_32_63 0x0008 10814779705SSam Leffler #define AR_EEPROM_PROTECT_RP_64_127 0x0010 10914779705SSam Leffler #define AR_EEPROM_PROTECT_WP_64_127 0x0020 11014779705SSam Leffler #define AR_EEPROM_PROTECT_RP_128_191 0x0040 11114779705SSam Leffler #define AR_EEPROM_PROTECT_WP_128_191 0x0080 11214779705SSam Leffler #define AR_EEPROM_PROTECT_RP_192_207 0x0100 11314779705SSam Leffler #define AR_EEPROM_PROTECT_WP_192_207 0x0200 11414779705SSam Leffler #define AR_EEPROM_PROTECT_RP_208_223 0x0400 11514779705SSam Leffler #define AR_EEPROM_PROTECT_WP_208_223 0x0800 11614779705SSam Leffler #define AR_EEPROM_PROTECT_RP_224_239 0x1000 11714779705SSam Leffler #define AR_EEPROM_PROTECT_WP_224_239 0x2000 11814779705SSam Leffler #define AR_EEPROM_PROTECT_RP_240_255 0x4000 11914779705SSam Leffler #define AR_EEPROM_PROTECT_WP_240_255 0x8000 12014779705SSam Leffler 12114779705SSam Leffler #define AR_EEPROM_MODAL_SPURS 5 12214779705SSam Leffler #define AR_SPUR_5413_1 1640 /* Freq 2464 */ 12314779705SSam Leffler #define AR_SPUR_5413_2 1200 /* Freq 2420 */ 12414779705SSam Leffler 12514779705SSam Leffler /* 12614779705SSam Leffler * EEPROM fixed point conversion scale factors. 12714779705SSam Leffler * NB: if you change one be sure to keep the other in sync. 12814779705SSam Leffler */ 12914779705SSam Leffler #define EEP_SCALE 100 /* conversion scale to avoid fp arith */ 13014779705SSam Leffler #define EEP_DELTA 10 /* SCALE/10, to avoid arith divide */ 13114779705SSam Leffler 13214779705SSam Leffler #define PWR_MIN 0 13314779705SSam Leffler #define PWR_MAX 3150 /* 31.5 * SCALE */ 13414779705SSam Leffler #define PWR_STEP 50 /* 0.5 * SCALE */ 13514779705SSam Leffler /* Keep 2 above defines together */ 13614779705SSam Leffler 13714779705SSam Leffler #define NUM_11A_EEPROM_CHANNELS 10 13814779705SSam Leffler #define NUM_2_4_EEPROM_CHANNELS 3 13914779705SSam Leffler #define NUM_PCDAC_VALUES 11 14014779705SSam Leffler #define NUM_TEST_FREQUENCIES 8 14114779705SSam Leffler #define NUM_EDGES 8 14214779705SSam Leffler #define NUM_INTERCEPTS 11 14314779705SSam Leffler #define FREQ_MASK 0x7f 14414779705SSam Leffler #define FREQ_MASK_3_3 0xff /* expanded in version 3.3 */ 14514779705SSam Leffler #define PCDAC_MASK 0x3f 14614779705SSam Leffler #define POWER_MASK 0x3f 14714779705SSam Leffler #define NON_EDGE_FLAG_MASK 0x40 14814779705SSam Leffler #define CHANNEL_POWER_INFO 8 14914779705SSam Leffler #define OBDB_UNSET 0xffff 15014779705SSam Leffler #define CHANNEL_UNUSED 0xff 15114779705SSam Leffler #define SCALE_OC_DELTA(_x) (((_x) * 2) / 10) 15214779705SSam Leffler 15314779705SSam Leffler /* Used during pcdac table construction */ 15414779705SSam Leffler #define PCDAC_START 1 15514779705SSam Leffler #define PCDAC_STOP 63 15614779705SSam Leffler #define PCDAC_STEP 1 15714779705SSam Leffler #define PWR_TABLE_SIZE 64 15814779705SSam Leffler #define MAX_RATE_POWER 63 15914779705SSam Leffler 16014779705SSam Leffler /* Used during power/rate table construction */ 16114779705SSam Leffler #define NUM_CTLS 16 16214779705SSam Leffler #define NUM_CTLS_3_3 32 /* expanded in version 3.3 */ 16314779705SSam Leffler #define NUM_CTLS_MAX NUM_CTLS_3_3 16414779705SSam Leffler 16514779705SSam Leffler typedef struct fullPcdacStruct { 16614779705SSam Leffler uint16_t channelValue; 16714779705SSam Leffler uint16_t pcdacMin; 16814779705SSam Leffler uint16_t pcdacMax; 16914779705SSam Leffler uint16_t numPcdacValues; 17014779705SSam Leffler uint16_t PcdacValues[64]; 17114779705SSam Leffler /* power is 32bit since in dest it is scaled */ 17214779705SSam Leffler int16_t PwrValues[64]; 17314779705SSam Leffler } FULL_PCDAC_STRUCT; 17414779705SSam Leffler 17514779705SSam Leffler typedef struct dataPerChannel { 17614779705SSam Leffler uint16_t channelValue; 17714779705SSam Leffler uint16_t pcdacMin; 17814779705SSam Leffler uint16_t pcdacMax; 17914779705SSam Leffler uint16_t numPcdacValues; 18014779705SSam Leffler uint16_t PcdacValues[NUM_PCDAC_VALUES]; 18114779705SSam Leffler /* NB: power is 32bit since in dest it is scaled */ 18214779705SSam Leffler int16_t PwrValues[NUM_PCDAC_VALUES]; 18314779705SSam Leffler } DATA_PER_CHANNEL; 18414779705SSam Leffler 18514779705SSam Leffler /* points to the appropriate pcdac structs in the above struct based on mode */ 18614779705SSam Leffler typedef struct pcdacsEeprom { 18714779705SSam Leffler const uint16_t *pChannelList; 18814779705SSam Leffler uint16_t numChannels; 18914779705SSam Leffler const DATA_PER_CHANNEL *pDataPerChannel; 19014779705SSam Leffler } PCDACS_EEPROM; 19114779705SSam Leffler 19214779705SSam Leffler typedef struct trgtPowerInfo { 19314779705SSam Leffler uint16_t twicePwr54; 19414779705SSam Leffler uint16_t twicePwr48; 19514779705SSam Leffler uint16_t twicePwr36; 19614779705SSam Leffler uint16_t twicePwr6_24; 19714779705SSam Leffler uint16_t testChannel; 19814779705SSam Leffler } TRGT_POWER_INFO; 19914779705SSam Leffler 20014779705SSam Leffler typedef struct trgtPowerAllModes { 20114779705SSam Leffler uint16_t numTargetPwr_11a; 20214779705SSam Leffler TRGT_POWER_INFO trgtPwr_11a[NUM_TEST_FREQUENCIES]; 20314779705SSam Leffler uint16_t numTargetPwr_11g; 20414779705SSam Leffler TRGT_POWER_INFO trgtPwr_11g[3]; 20514779705SSam Leffler uint16_t numTargetPwr_11b; 20614779705SSam Leffler TRGT_POWER_INFO trgtPwr_11b[2]; 20714779705SSam Leffler } TRGT_POWER_ALL_MODES; 20814779705SSam Leffler 20914779705SSam Leffler typedef struct cornerCalInfo { 21014779705SSam Leffler uint16_t gSel; 21114779705SSam Leffler uint16_t pd84; 21214779705SSam Leffler uint16_t pd90; 21314779705SSam Leffler uint16_t clip; 21414779705SSam Leffler } CORNER_CAL_INFO; 21514779705SSam Leffler 21614779705SSam Leffler /* 21714779705SSam Leffler * EEPROM version 4 definitions 21814779705SSam Leffler */ 21914779705SSam Leffler #define NUM_XPD_PER_CHANNEL 4 22014779705SSam Leffler #define NUM_POINTS_XPD0 4 22114779705SSam Leffler #define NUM_POINTS_XPD3 3 22214779705SSam Leffler #define IDEAL_10dB_INTERCEPT_2G 35 22314779705SSam Leffler #define IDEAL_10dB_INTERCEPT_5G 55 22414779705SSam Leffler 22514779705SSam Leffler #define TENX_OFDM_CCK_DELTA_INIT 15 /* power 1.5 dbm */ 22614779705SSam Leffler #define TENX_CH14_FILTER_CCK_DELTA_INIT 15 /* power 1.5 dbm */ 22714779705SSam Leffler #define CCK_OFDM_GAIN_DELTA 15 22814779705SSam Leffler 22914779705SSam Leffler #define NUM_TARGET_POWER_LOCATIONS_11B 4 23014779705SSam Leffler #define NUM_TARGET_POWER_LOCATIONS_11G 6 23114779705SSam Leffler 23214779705SSam Leffler typedef struct { 23314779705SSam Leffler uint16_t xpd_gain; 23414779705SSam Leffler uint16_t numPcdacs; 23514779705SSam Leffler uint16_t pcdac[NUM_POINTS_XPD0]; 23614779705SSam Leffler int16_t pwr_t4[NUM_POINTS_XPD0]; /* or gainF */ 23714779705SSam Leffler } EXPN_DATA_PER_XPD_5112; 23814779705SSam Leffler 23914779705SSam Leffler typedef struct { 24014779705SSam Leffler uint16_t channelValue; 24114779705SSam Leffler int16_t maxPower_t4; 24214779705SSam Leffler EXPN_DATA_PER_XPD_5112 pDataPerXPD[NUM_XPD_PER_CHANNEL]; 24314779705SSam Leffler } EXPN_DATA_PER_CHANNEL_5112; 24414779705SSam Leffler 24514779705SSam Leffler typedef struct { 24614779705SSam Leffler uint16_t *pChannels; 24714779705SSam Leffler uint16_t numChannels; 24814779705SSam Leffler uint16_t xpdMask; /* mask of permitted xpd_gains */ 24914779705SSam Leffler EXPN_DATA_PER_CHANNEL_5112 *pDataPerChannel; 25014779705SSam Leffler } EEPROM_POWER_EXPN_5112; 25114779705SSam Leffler 25214779705SSam Leffler typedef struct { 25314779705SSam Leffler uint16_t channelValue; 25414779705SSam Leffler uint16_t pcd1_xg0; 25514779705SSam Leffler int16_t pwr1_xg0; 25614779705SSam Leffler uint16_t pcd2_delta_xg0; 25714779705SSam Leffler int16_t pwr2_xg0; 25814779705SSam Leffler uint16_t pcd3_delta_xg0; 25914779705SSam Leffler int16_t pwr3_xg0; 26014779705SSam Leffler uint16_t pcd4_delta_xg0; 26114779705SSam Leffler int16_t pwr4_xg0; 26214779705SSam Leffler int16_t maxPower_t4; 26314779705SSam Leffler int16_t pwr1_xg3; /* pcdac = 20 */ 26414779705SSam Leffler int16_t pwr2_xg3; /* pcdac = 35 */ 26514779705SSam Leffler int16_t pwr3_xg3; /* pcdac = 63 */ 26614779705SSam Leffler /* XXX - Should be pwr1_xg2, etc to agree with documentation */ 26714779705SSam Leffler } EEPROM_DATA_PER_CHANNEL_5112; 26814779705SSam Leffler 26914779705SSam Leffler typedef struct { 27014779705SSam Leffler uint16_t pChannels[NUM_11A_EEPROM_CHANNELS]; 27114779705SSam Leffler uint16_t numChannels; 27214779705SSam Leffler uint16_t xpdMask; /* mask of permitted xpd_gains */ 27314779705SSam Leffler EEPROM_DATA_PER_CHANNEL_5112 pDataPerChannel[NUM_11A_EEPROM_CHANNELS]; 27414779705SSam Leffler } EEPROM_POWER_5112; 27514779705SSam Leffler 27614779705SSam Leffler /* 27714779705SSam Leffler * EEPROM version 5 definitions (Griffin, et. al.). 27814779705SSam Leffler */ 27914779705SSam Leffler #define NUM_2_4_EEPROM_CHANNELS_2413 4 28014779705SSam Leffler #define NUM_11A_EEPROM_CHANNELS_2413 10 28114779705SSam Leffler #define PWR_TABLE_SIZE_2413 128 28214779705SSam Leffler 28314779705SSam Leffler /* Used during pdadc construction */ 28414779705SSam Leffler #define MAX_NUM_PDGAINS_PER_CHANNEL 4 28514779705SSam Leffler #define NUM_PDGAINS_PER_CHANNEL 2 28614779705SSam Leffler #define NUM_POINTS_LAST_PDGAIN 5 28714779705SSam Leffler #define NUM_POINTS_OTHER_PDGAINS 4 28814779705SSam Leffler #define XPD_GAIN1_GEN5 3 28914779705SSam Leffler #define XPD_GAIN2_GEN5 1 29014779705SSam Leffler #define MAX_PWR_RANGE_IN_HALF_DB 64 29114779705SSam Leffler #define PD_GAIN_BOUNDARY_STRETCH_IN_HALF_DB 4 29214779705SSam Leffler 29314779705SSam Leffler typedef struct { 29414779705SSam Leffler uint16_t pd_gain; 29514779705SSam Leffler uint16_t numVpd; 29614779705SSam Leffler uint16_t Vpd[NUM_POINTS_LAST_PDGAIN]; 29714779705SSam Leffler int16_t pwr_t4[NUM_POINTS_LAST_PDGAIN]; /* or gainF */ 29814779705SSam Leffler } RAW_DATA_PER_PDGAIN_2413; 29914779705SSam Leffler 30014779705SSam Leffler typedef struct { 30114779705SSam Leffler uint16_t channelValue; 30214779705SSam Leffler int16_t maxPower_t4; 30314779705SSam Leffler uint16_t numPdGains; /* # Pd Gains per channel */ 30414779705SSam Leffler RAW_DATA_PER_PDGAIN_2413 pDataPerPDGain[MAX_NUM_PDGAINS_PER_CHANNEL]; 30514779705SSam Leffler } RAW_DATA_PER_CHANNEL_2413; 30614779705SSam Leffler 30714779705SSam Leffler /* XXX: assumes NUM_11A_EEPROM_CHANNELS_2413 >= NUM_2_4_EEPROM_CHANNELS_2413 ??? */ 30814779705SSam Leffler typedef struct { 30914779705SSam Leffler uint16_t pChannels[NUM_11A_EEPROM_CHANNELS_2413]; 31014779705SSam Leffler uint16_t numChannels; 31114779705SSam Leffler uint16_t xpd_mask; /* mask of permitted xpd_gains */ 31214779705SSam Leffler RAW_DATA_PER_CHANNEL_2413 pDataPerChannel[NUM_11A_EEPROM_CHANNELS_2413]; 31314779705SSam Leffler } RAW_DATA_STRUCT_2413; 31414779705SSam Leffler 31514779705SSam Leffler typedef struct { 31614779705SSam Leffler uint16_t channelValue; 31714779705SSam Leffler uint16_t numPdGains; 31814779705SSam Leffler uint16_t Vpd_I[MAX_NUM_PDGAINS_PER_CHANNEL]; 31914779705SSam Leffler int16_t pwr_I[MAX_NUM_PDGAINS_PER_CHANNEL]; 32014779705SSam Leffler uint16_t Vpd_delta[NUM_POINTS_LAST_PDGAIN] 32114779705SSam Leffler [MAX_NUM_PDGAINS_PER_CHANNEL]; 32214779705SSam Leffler int16_t pwr_delta_t2[NUM_POINTS_LAST_PDGAIN] 32314779705SSam Leffler [MAX_NUM_PDGAINS_PER_CHANNEL]; 32414779705SSam Leffler int16_t maxPower_t4; 32514779705SSam Leffler } EEPROM_DATA_PER_CHANNEL_2413; 32614779705SSam Leffler 32714779705SSam Leffler typedef struct { 32814779705SSam Leffler uint16_t pChannels[NUM_11A_EEPROM_CHANNELS_2413]; 32914779705SSam Leffler uint16_t numChannels; 33014779705SSam Leffler uint16_t xpd_mask; /* mask of permitted xpd_gains */ 33114779705SSam Leffler EEPROM_DATA_PER_CHANNEL_2413 pDataPerChannel[NUM_11A_EEPROM_CHANNELS_2413]; 33214779705SSam Leffler } EEPROM_DATA_STRUCT_2413; 33314779705SSam Leffler 33414779705SSam Leffler /* 33514779705SSam Leffler * Information retrieved from EEPROM. 33614779705SSam Leffler */ 33714779705SSam Leffler typedef struct { 33814779705SSam Leffler uint16_t ee_version; /* Version field */ 33914779705SSam Leffler uint16_t ee_protect; /* EEPROM protect field */ 34014779705SSam Leffler uint16_t ee_regdomain; /* Regulatory domain */ 34114779705SSam Leffler 34214779705SSam Leffler /* General Device Parameters */ 34314779705SSam Leffler uint16_t ee_turbo5Disable; 34414779705SSam Leffler uint16_t ee_turbo2Disable; 34514779705SSam Leffler uint16_t ee_rfKill; 34614779705SSam Leffler uint16_t ee_deviceType; 34714779705SSam Leffler uint16_t ee_turbo2WMaxPower5; 34814779705SSam Leffler uint16_t ee_turbo2WMaxPower2; 34914779705SSam Leffler uint16_t ee_xrTargetPower5; 35014779705SSam Leffler uint16_t ee_xrTargetPower2; 35114779705SSam Leffler uint16_t ee_Amode; 35214779705SSam Leffler uint16_t ee_regCap; 35314779705SSam Leffler uint16_t ee_Bmode; 35414779705SSam Leffler uint16_t ee_Gmode; 35514779705SSam Leffler int8_t ee_antennaGainMax[2]; 35614779705SSam Leffler uint16_t ee_xtnd5GSupport; 35714779705SSam Leffler uint8_t ee_cckOfdmPwrDelta; 35814779705SSam Leffler uint8_t ee_exist32kHzCrystal; 35914779705SSam Leffler uint16_t ee_targetPowersStart; 36014779705SSam Leffler uint16_t ee_fixedBias5; 36114779705SSam Leffler uint16_t ee_fixedBias2; 36214779705SSam Leffler uint16_t ee_cckOfdmGainDelta; 36314779705SSam Leffler uint16_t ee_scaledCh14FilterCckDelta; 36414779705SSam Leffler uint16_t ee_eepMap; 36514779705SSam Leffler uint16_t ee_earStart; 36614779705SSam Leffler 36714779705SSam Leffler /* 5 GHz / 2.4 GHz CKK / 2.4 GHz OFDM common parameters */ 36814779705SSam Leffler uint16_t ee_switchSettling[3]; 36914779705SSam Leffler uint16_t ee_txrxAtten[3]; 37014779705SSam Leffler uint16_t ee_txEndToXLNAOn[3]; 37114779705SSam Leffler uint16_t ee_thresh62[3]; 37214779705SSam Leffler uint16_t ee_txEndToXPAOff[3]; 37314779705SSam Leffler uint16_t ee_txFrameToXPAOn[3]; 37414779705SSam Leffler int8_t ee_adcDesiredSize[3]; /* 8-bit signed value */ 37514779705SSam Leffler int8_t ee_pgaDesiredSize[3]; /* 8-bit signed value */ 37614779705SSam Leffler int16_t ee_noiseFloorThresh[3]; 37714779705SSam Leffler uint16_t ee_xlnaGain[3]; 37814779705SSam Leffler uint16_t ee_xgain[3]; 37914779705SSam Leffler uint16_t ee_xpd[3]; 38014779705SSam Leffler uint16_t ee_antennaControl[11][3]; 38114779705SSam Leffler uint16_t ee_falseDetectBackoff[3]; 38214779705SSam Leffler uint16_t ee_gainI[3]; 38314779705SSam Leffler uint16_t ee_rxtxMargin[3]; 38414779705SSam Leffler 38514779705SSam Leffler /* new parameters added for the AR2413 */ 38614779705SSam Leffler HAL_BOOL ee_disableXr5; 38714779705SSam Leffler HAL_BOOL ee_disableXr2; 38814779705SSam Leffler uint16_t ee_eepMap2PowerCalStart; 38914779705SSam Leffler uint16_t ee_capField; 39014779705SSam Leffler 39114779705SSam Leffler uint16_t ee_switchSettlingTurbo[2]; 39214779705SSam Leffler uint16_t ee_txrxAttenTurbo[2]; 39314779705SSam Leffler int8_t ee_adcDesiredSizeTurbo[2]; 39414779705SSam Leffler int8_t ee_pgaDesiredSizeTurbo[2]; 39514779705SSam Leffler uint16_t ee_rxtxMarginTurbo[2]; 39614779705SSam Leffler 39714779705SSam Leffler /* 5 GHz parameters */ 39814779705SSam Leffler uint16_t ee_ob1; 39914779705SSam Leffler uint16_t ee_db1; 40014779705SSam Leffler uint16_t ee_ob2; 40114779705SSam Leffler uint16_t ee_db2; 40214779705SSam Leffler uint16_t ee_ob3; 40314779705SSam Leffler uint16_t ee_db3; 40414779705SSam Leffler uint16_t ee_ob4; 40514779705SSam Leffler uint16_t ee_db4; 40614779705SSam Leffler 40714779705SSam Leffler /* 2.4 GHz parameters */ 40814779705SSam Leffler uint16_t ee_obFor24; 40914779705SSam Leffler uint16_t ee_dbFor24; 41014779705SSam Leffler uint16_t ee_obFor24g; 41114779705SSam Leffler uint16_t ee_dbFor24g; 41214779705SSam Leffler uint16_t ee_ob2GHz[2]; 41314779705SSam Leffler uint16_t ee_db2GHz[2]; 41414779705SSam Leffler uint16_t ee_numCtls; 41514779705SSam Leffler uint16_t ee_ctl[NUM_CTLS_MAX]; 41614779705SSam Leffler uint16_t ee_iqCalI[2]; 41714779705SSam Leffler uint16_t ee_iqCalQ[2]; 41814779705SSam Leffler uint16_t ee_calPier11g[NUM_2_4_EEPROM_CHANNELS]; 41914779705SSam Leffler uint16_t ee_calPier11b[NUM_2_4_EEPROM_CHANNELS]; 42014779705SSam Leffler 42114779705SSam Leffler /* corner calibration information */ 42214779705SSam Leffler CORNER_CAL_INFO ee_cornerCal; 42314779705SSam Leffler 42414779705SSam Leffler uint16_t ee_opCap; 42514779705SSam Leffler 42614779705SSam Leffler /* 11a info */ 42714779705SSam Leffler uint16_t ee_channels11a[NUM_11A_EEPROM_CHANNELS]; 42814779705SSam Leffler uint16_t ee_numChannels11a; 42914779705SSam Leffler DATA_PER_CHANNEL ee_dataPerChannel11a[NUM_11A_EEPROM_CHANNELS]; 43014779705SSam Leffler 43114779705SSam Leffler uint16_t ee_numChannels2_4; 43214779705SSam Leffler uint16_t ee_channels11g[NUM_2_4_EEPROM_CHANNELS]; 43314779705SSam Leffler uint16_t ee_channels11b[NUM_2_4_EEPROM_CHANNELS]; 43414779705SSam Leffler uint16_t ee_spurChans[AR_EEPROM_MODAL_SPURS][2]; 43514779705SSam Leffler 43614779705SSam Leffler /* 11g info */ 43714779705SSam Leffler DATA_PER_CHANNEL ee_dataPerChannel11g[NUM_2_4_EEPROM_CHANNELS]; 43814779705SSam Leffler 43914779705SSam Leffler /* 11b info */ 44014779705SSam Leffler DATA_PER_CHANNEL ee_dataPerChannel11b[NUM_2_4_EEPROM_CHANNELS]; 44114779705SSam Leffler 44214779705SSam Leffler TRGT_POWER_ALL_MODES ee_tpow; 44314779705SSam Leffler 44414779705SSam Leffler RD_EDGES_POWER ee_rdEdgesPower[NUM_EDGES*NUM_CTLS_MAX]; 44514779705SSam Leffler 44614779705SSam Leffler union { 44714779705SSam Leffler EEPROM_POWER_EXPN_5112 eu_modePowerArray5112[3]; 44814779705SSam Leffler RAW_DATA_STRUCT_2413 eu_rawDataset2413[3]; 44914779705SSam Leffler } ee_u; 45014779705SSam Leffler } HAL_EEPROM; 45114779705SSam Leffler 45214779705SSam Leffler /* write-around defines */ 45314779705SSam Leffler #define ee_numTargetPwr_11a ee_tpow.numTargetPwr_11a 45414779705SSam Leffler #define ee_trgtPwr_11a ee_tpow.trgtPwr_11a 45514779705SSam Leffler #define ee_numTargetPwr_11g ee_tpow.numTargetPwr_11g 45614779705SSam Leffler #define ee_trgtPwr_11g ee_tpow.trgtPwr_11g 45714779705SSam Leffler #define ee_numTargetPwr_11b ee_tpow.numTargetPwr_11b 45814779705SSam Leffler #define ee_trgtPwr_11b ee_tpow.trgtPwr_11b 45914779705SSam Leffler #define ee_modePowerArray5112 ee_u.eu_modePowerArray5112 46014779705SSam Leffler #define ee_rawDataset2413 ee_u.eu_rawDataset2413 46114779705SSam Leffler #endif /* _ATH_AH_EEPROM_V3_H_ */ 462