xref: /freebsd/sys/dev/ath/ath_hal/ah_eeprom_v3.h (revision 95ee2897)
16e778a7eSPedro F. Giffuni /*-
26e778a7eSPedro F. Giffuni  * SPDX-License-Identifier: ISC
36e778a7eSPedro 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