Home | History | Annotate | Line # | Download | only in dist
      1  1.1     alc /*
      2  1.1     alc  * Copyright (c) 2008 Sam Leffler, Errno Consulting
      3  1.1     alc  * Copyright (c) 2008 Atheros Communications, Inc.
      4  1.1     alc  *
      5  1.1     alc  * Permission to use, copy, modify, and/or distribute this software for any
      6  1.1     alc  * purpose with or without fee is hereby granted, provided that the above
      7  1.1     alc  * copyright notice and this permission notice appear in all copies.
      8  1.1     alc  *
      9  1.1     alc  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     10  1.1     alc  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     11  1.1     alc  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     12  1.1     alc  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     13  1.1     alc  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     14  1.1     alc  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     15  1.1     alc  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     16  1.1     alc  *
     17  1.2  cegger  * $Id: ah_eeprom_v14.h,v 1.2 2011/02/21 11:06:38 cegger Exp $
     18  1.1     alc  */
     19  1.1     alc #ifndef _AH_EEPROM_V14_H_
     20  1.1     alc #define _AH_EEPROM_V14_H_
     21  1.1     alc 
     22  1.1     alc #include "ah_eeprom.h"
     23  1.1     alc 
     24  1.1     alc /* reg_off = 4 * (eep_off) */
     25  1.1     alc #define AR5416_EEPROM_S			2
     26  1.1     alc #define AR5416_EEPROM_OFFSET		0x2000
     27  1.1     alc #define AR5416_EEPROM_START_ADDR	0x503f1200
     28  1.1     alc #define AR5416_EEPROM_MAX		0xae0 /* Ignore for the moment used only on the flash implementations */
     29  1.1     alc #define AR5416_EEPROM_MAGIC		0xa55a
     30  1.1     alc #define AR5416_EEPROM_MAGIC_OFFSET	0x0
     31  1.1     alc 
     32  1.1     alc #define owl_get_ntxchains(_txchainmask) \
     33  1.1     alc     (((_txchainmask >> 2) & 1) + ((_txchainmask >> 1) & 1) + (_txchainmask & 1))
     34  1.1     alc 
     35  1.1     alc #ifdef __LINUX_ARM_ARCH__ /* AP71 */
     36  1.1     alc #define owl_eep_start_loc		0
     37  1.1     alc #else
     38  1.1     alc #define owl_eep_start_loc		256
     39  1.1     alc #endif
     40  1.1     alc 
     41  1.1     alc /* End temp defines */
     42  1.1     alc 
     43  1.1     alc #define AR5416_EEP_NO_BACK_VER       	0x1
     44  1.1     alc #define AR5416_EEP_VER               	0xE
     45  1.1     alc #define AR5416_EEP_VER_MINOR_MASK	0xFFF
     46  1.1     alc // Adds modal params txFrameToPaOn, txFrametoDataStart, ht40PowerInc
     47  1.1     alc #define AR5416_EEP_MINOR_VER_2		0x2
     48  1.1     alc // Adds modal params bswAtten, bswMargin, swSettle and base OpFlags for HT20/40 Disable
     49  1.1     alc #define AR5416_EEP_MINOR_VER_3		0x3
     50  1.1     alc #define AR5416_EEP_MINOR_VER_7		0x7
     51  1.1     alc #define AR5416_EEP_MINOR_VER_9		0x9
     52  1.1     alc #define AR5416_EEP_MINOR_VER_16		0x10
     53  1.1     alc #define AR5416_EEP_MINOR_VER_17		0x11
     54  1.1     alc #define AR5416_EEP_MINOR_VER_19		0x13
     55  1.1     alc 
     56  1.1     alc // 16-bit offset location start of calibration struct
     57  1.1     alc #define AR5416_EEP_START_LOC         	256
     58  1.1     alc #define AR5416_NUM_5G_CAL_PIERS      	8
     59  1.1     alc #define AR5416_NUM_2G_CAL_PIERS      	4
     60  1.1     alc #define AR5416_NUM_5G_20_TARGET_POWERS  8
     61  1.1     alc #define AR5416_NUM_5G_40_TARGET_POWERS  8
     62  1.1     alc #define AR5416_NUM_2G_CCK_TARGET_POWERS 3
     63  1.1     alc #define AR5416_NUM_2G_20_TARGET_POWERS  4
     64  1.1     alc #define AR5416_NUM_2G_40_TARGET_POWERS  4
     65  1.1     alc #define AR5416_NUM_CTLS              	24
     66  1.1     alc #define AR5416_NUM_BAND_EDGES        	8
     67  1.1     alc #define AR5416_NUM_PD_GAINS          	4
     68  1.1     alc #define AR5416_PD_GAINS_IN_MASK      	4
     69  1.1     alc #define AR5416_PD_GAIN_ICEPTS        	5
     70  1.1     alc #define AR5416_EEPROM_MODAL_SPURS    	5
     71  1.1     alc #define AR5416_MAX_RATE_POWER        	63
     72  1.1     alc #define AR5416_NUM_PDADC_VALUES      	128
     73  1.1     alc #define AR5416_NUM_RATES             	16
     74  1.1     alc #define AR5416_BCHAN_UNUSED          	0xFF
     75  1.1     alc #define AR5416_MAX_PWR_RANGE_IN_HALF_DB 64
     76  1.1     alc #define AR5416_EEPMISC_BIG_ENDIAN    	0x01
     77  1.1     alc #define FREQ2FBIN(x,y) 			((y) ? ((x) - 2300) : (((x) - 4800) / 5))
     78  1.1     alc #define AR5416_MAX_CHAINS            	3
     79  1.2  cegger #define	AR5416_PWR_TABLE_OFFSET_DB	-5
     80  1.1     alc #define AR5416_ANT_16S               	25
     81  1.1     alc 
     82  1.1     alc #define AR5416_NUM_ANT_CHAIN_FIELDS     7
     83  1.1     alc #define AR5416_NUM_ANT_COMMON_FIELDS    4
     84  1.1     alc #define AR5416_SIZE_ANT_CHAIN_FIELD     3
     85  1.1     alc #define AR5416_SIZE_ANT_COMMON_FIELD    4
     86  1.1     alc #define AR5416_ANT_CHAIN_MASK           0x7
     87  1.1     alc #define AR5416_ANT_COMMON_MASK          0xf
     88  1.1     alc #define AR5416_CHAIN_0_IDX              0
     89  1.1     alc #define AR5416_CHAIN_1_IDX              1
     90  1.1     alc #define AR5416_CHAIN_2_IDX              2
     91  1.1     alc 
     92  1.1     alc #define	AR5416_OPFLAGS_11A		0x01
     93  1.1     alc #define	AR5416_OPFLAGS_11G		0x02
     94  1.1     alc #define	AR5416_OPFLAGS_5G_HT40		0x04
     95  1.1     alc #define	AR5416_OPFLAGS_2G_HT40		0x08
     96  1.1     alc #define	AR5416_OPFLAGS_5G_HT20		0x10
     97  1.1     alc #define	AR5416_OPFLAGS_2G_HT20		0x20
     98  1.1     alc 
     99  1.1     alc /* RF silent fields in EEPROM */
    100  1.1     alc #define	EEP_RFSILENT_ENABLED		0x0001	/* enabled/disabled */
    101  1.1     alc #define	EEP_RFSILENT_ENABLED_S		0
    102  1.1     alc #define	EEP_RFSILENT_POLARITY		0x0002	/* polarity */
    103  1.1     alc #define	EEP_RFSILENT_POLARITY_S		1
    104  1.1     alc #define	EEP_RFSILENT_GPIO_SEL		0x001c	/* gpio PIN */
    105  1.1     alc #define	EEP_RFSILENT_GPIO_SEL_S		2
    106  1.1     alc 
    107  1.1     alc /* Rx gain type values */
    108  1.1     alc #define	AR5416_EEP_RXGAIN_23dB_BACKOFF	0
    109  1.1     alc #define	AR5416_EEP_RXGAIN_13dB_BACKOFF	1
    110  1.1     alc #define	AR5416_EEP_RXGAIN_ORIG		2
    111  1.1     alc 
    112  1.1     alc /* Tx gain type values */
    113  1.1     alc #define	AR5416_EEP_TXGAIN_ORIG		0
    114  1.1     alc #define	AR5416_EEP_TXGAIN_HIGH_POWER	1
    115  1.1     alc 
    116  1.1     alc typedef struct spurChanStruct {
    117  1.1     alc 	uint16_t	spurChan;
    118  1.1     alc 	uint8_t		spurRangeLow;
    119  1.1     alc 	uint8_t		spurRangeHigh;
    120  1.1     alc } __packed SPUR_CHAN;
    121  1.1     alc 
    122  1.1     alc typedef struct CalTargetPowerLegacy {
    123  1.1     alc 	uint8_t		bChannel;
    124  1.1     alc 	uint8_t		tPow2x[4];
    125  1.1     alc } __packed CAL_TARGET_POWER_LEG;
    126  1.1     alc 
    127  1.1     alc typedef struct CalTargetPowerHt {
    128  1.1     alc 	uint8_t		bChannel;
    129  1.1     alc 	uint8_t		tPow2x[8];
    130  1.1     alc } __packed CAL_TARGET_POWER_HT;
    131  1.1     alc 
    132  1.1     alc typedef struct CalCtlEdges {
    133  1.1     alc 	uint8_t		bChannel;
    134  1.1     alc 	uint8_t		tPowerFlag;	/* [0..5] tPower [6..7] flag */
    135  1.1     alc #define	CAL_CTL_EDGES_POWER	0x3f
    136  1.1     alc #define	CAL_CTL_EDGES_POWER_S	0
    137  1.1     alc #define	CAL_CTL_EDGES_FLAG	0xc0
    138  1.1     alc #define	CAL_CTL_EDGES_FLAG_S	6
    139  1.1     alc } __packed CAL_CTL_EDGES;
    140  1.1     alc 
    141  1.1     alc /*
    142  1.1     alc  * NB: The format in EEPROM has words 0 and 2 swapped (i.e. version
    143  1.1     alc  * and length are swapped).  We reverse their position after reading
    144  1.1     alc  * the data into host memory so the version field is at the same
    145  1.1     alc  * offset as in previous EEPROM layouts.  This makes utilities that
    146  1.1     alc  * inspect the EEPROM contents work without looking at the PCI device
    147  1.1     alc  * id which may or may not be reliable.
    148  1.1     alc  */
    149  1.1     alc typedef struct BaseEepHeader {
    150  1.1     alc 	uint16_t	version;	/* NB: length in EEPROM */
    151  1.1     alc 	uint16_t	checksum;
    152  1.1     alc 	uint16_t	length;		/* NB: version in EEPROM */
    153  1.1     alc 	uint8_t		opCapFlags;
    154  1.1     alc 	uint8_t		eepMisc;
    155  1.1     alc 	uint16_t	regDmn[2];
    156  1.1     alc 	uint8_t		macAddr[6];
    157  1.1     alc 	uint8_t		rxMask;
    158  1.1     alc 	uint8_t		txMask;
    159  1.1     alc 	uint16_t	rfSilent;
    160  1.1     alc 	uint16_t	blueToothOptions;
    161  1.1     alc 	uint16_t	deviceCap;
    162  1.1     alc 	uint32_t	binBuildNumber;
    163  1.1     alc 	uint8_t		deviceType;
    164  1.1     alc 	uint8_t		pwdclkind;
    165  1.1     alc 	uint8_t		fastClk5g;
    166  1.1     alc 	uint8_t		divChain;
    167  1.1     alc 	uint8_t		rxGainType;
    168  1.1     alc 	uint8_t		dacHiPwrMode;	/* use the DAC high power mode (MB91) */
    169  1.1     alc 	uint8_t		openLoopPwrCntl;/* 1: use open loop power control,
    170  1.1     alc 					   0: use closed loop power control */
    171  1.1     alc 	uint8_t		dacLpMode;
    172  1.1     alc 	uint8_t		txGainType;	/* high power tx gain table support */
    173  1.1     alc 	uint8_t		rcChainMask;	/* "1" if the card is an HB93 1x2 */
    174  1.1     alc 	uint8_t		futureBase[24];
    175  1.1     alc } __packed BASE_EEP_HEADER; // 64 B
    176  1.1     alc 
    177  1.1     alc typedef struct ModalEepHeader {
    178  1.1     alc 	uint32_t	antCtrlChain[AR5416_MAX_CHAINS];	// 12
    179  1.1     alc 	uint32_t	antCtrlCommon;				// 4
    180  1.1     alc 	int8_t		antennaGainCh[AR5416_MAX_CHAINS];	// 3
    181  1.1     alc 	uint8_t		switchSettling;				// 1
    182  1.1     alc 	uint8_t		txRxAttenCh[AR5416_MAX_CHAINS];		// 3
    183  1.1     alc 	uint8_t		rxTxMarginCh[AR5416_MAX_CHAINS];	// 3
    184  1.1     alc 	uint8_t		adcDesiredSize;				// 1
    185  1.1     alc 	int8_t		pgaDesiredSize;				// 1
    186  1.1     alc 	uint8_t		xlnaGainCh[AR5416_MAX_CHAINS];		// 3
    187  1.1     alc 	uint8_t		txEndToXpaOff;				// 1
    188  1.1     alc 	uint8_t		txEndToRxOn;				// 1
    189  1.1     alc 	uint8_t		txFrameToXpaOn;				// 1
    190  1.1     alc 	uint8_t		thresh62;				// 1
    191  1.1     alc 	uint8_t		noiseFloorThreshCh[AR5416_MAX_CHAINS];	// 3
    192  1.1     alc 	uint8_t		xpdGain;				// 1
    193  1.1     alc 	uint8_t		xpd;					// 1
    194  1.1     alc 	int8_t		iqCalICh[AR5416_MAX_CHAINS];		// 1
    195  1.1     alc 	int8_t		iqCalQCh[AR5416_MAX_CHAINS];		// 1
    196  1.1     alc 	uint8_t		pdGainOverlap;				// 1
    197  1.1     alc 	uint8_t		ob;					// 1
    198  1.1     alc 	uint8_t		db;					// 1
    199  1.1     alc 	uint8_t		xpaBiasLvl;				// 1
    200  1.1     alc 	uint8_t		pwrDecreaseFor2Chain;			// 1
    201  1.1     alc 	uint8_t		pwrDecreaseFor3Chain;			// 1 -> 48 B
    202  1.1     alc 	uint8_t		txFrameToDataStart;			// 1
    203  1.1     alc 	uint8_t		txFrameToPaOn;				// 1
    204  1.1     alc 	uint8_t		ht40PowerIncForPdadc;			// 1
    205  1.1     alc 	uint8_t		bswAtten[AR5416_MAX_CHAINS];		// 3
    206  1.1     alc 	uint8_t		bswMargin[AR5416_MAX_CHAINS];		// 3
    207  1.1     alc 	uint8_t		swSettleHt40;				// 1
    208  1.1     alc 	uint8_t		xatten2Db[AR5416_MAX_CHAINS];    	// 3 -> New for AR9280 (0xa20c/b20c 11:6)
    209  1.1     alc 	uint8_t		xatten2Margin[AR5416_MAX_CHAINS];	// 3 -> New for AR9280 (0xa20c/b20c 21:17)
    210  1.1     alc 	uint8_t		ob_ch1;				// 1 -> ob and db become chain specific from AR9280
    211  1.1     alc 	uint8_t		db_ch1;				// 1
    212  1.1     alc 	uint8_t		flagBits;			// 1
    213  1.1     alc #define	AR5416_EEP_FLAG_USEANT1		0x01	/* +1 configured antenna */
    214  1.1     alc #define	AR5416_EEP_FLAG_FORCEXPAON	0x02	/* force XPA bit for 5G */
    215  1.1     alc #define	AR5416_EEP_FLAG_LOCALBIAS	0x04	/* enable local bias */
    216  1.1     alc #define	AR5416_EEP_FLAG_FEMBANDSELECT	0x08	/* FEM band select used */
    217  1.1     alc #define	AR5416_EEP_FLAG_XLNABUFIN	0x10
    218  1.1     alc #define	AR5416_EEP_FLAG_XLNAISEL	0x60
    219  1.1     alc #define	AR5416_EEP_FLAG_XLNAISEL_S	5
    220  1.1     alc #define	AR5416_EEP_FLAG_XLNABUFMODE	0x80
    221  1.1     alc 	uint8_t		miscBits;			// [0..1]: bb_tx_dac_scale_cck
    222  1.1     alc 	uint16_t	xpaBiasLvlFreq[3];		// 3
    223  1.1     alc 	uint8_t		futureModal[6];			// 6
    224  1.1     alc 
    225  1.1     alc 	SPUR_CHAN spurChans[AR5416_EEPROM_MODAL_SPURS];	// 20 B
    226  1.1     alc } __packed MODAL_EEP_HEADER;				// == 100 B
    227  1.1     alc 
    228  1.1     alc typedef struct calDataPerFreqOpLoop {
    229  1.1     alc 	uint8_t		pwrPdg[2][5]; /* power measurement */
    230  1.1     alc 	uint8_t		vpdPdg[2][5]; /* pdadc voltage at power measurement */
    231  1.1     alc 	uint8_t		pcdac[2][5];  /* pcdac used for power measurement */
    232  1.1     alc 	uint8_t		empty[2][5];  /* future use */
    233  1.1     alc } __packed CAL_DATA_PER_FREQ_OP_LOOP;
    234  1.1     alc 
    235  1.1     alc typedef struct CalCtlData {
    236  1.1     alc 	CAL_CTL_EDGES		ctlEdges[AR5416_MAX_CHAINS][AR5416_NUM_BAND_EDGES];
    237  1.1     alc } __packed CAL_CTL_DATA;
    238  1.1     alc 
    239  1.1     alc typedef struct calDataPerFreq {
    240  1.1     alc 	uint8_t		pwrPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
    241  1.1     alc 	uint8_t		vpdPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
    242  1.1     alc } __packed CAL_DATA_PER_FREQ;
    243  1.1     alc 
    244  1.1     alc struct ar5416eeprom {
    245  1.1     alc 	BASE_EEP_HEADER		baseEepHeader;         // 64 B
    246  1.1     alc 	uint8_t			custData[64];          // 64 B
    247  1.1     alc 	MODAL_EEP_HEADER	modalHeader[2];        // 200 B
    248  1.1     alc 	uint8_t			calFreqPier5G[AR5416_NUM_5G_CAL_PIERS];
    249  1.1     alc 	uint8_t			calFreqPier2G[AR5416_NUM_2G_CAL_PIERS];
    250  1.1     alc 	CAL_DATA_PER_FREQ	calPierData5G[AR5416_MAX_CHAINS][AR5416_NUM_5G_CAL_PIERS];
    251  1.1     alc 	CAL_DATA_PER_FREQ	calPierData2G[AR5416_MAX_CHAINS][AR5416_NUM_2G_CAL_PIERS];
    252  1.1     alc 	CAL_TARGET_POWER_LEG	calTargetPower5G[AR5416_NUM_5G_20_TARGET_POWERS];
    253  1.1     alc 	CAL_TARGET_POWER_HT	calTargetPower5GHT20[AR5416_NUM_5G_20_TARGET_POWERS];
    254  1.1     alc 	CAL_TARGET_POWER_HT	calTargetPower5GHT40[AR5416_NUM_5G_40_TARGET_POWERS];
    255  1.1     alc 	CAL_TARGET_POWER_LEG	calTargetPowerCck[AR5416_NUM_2G_CCK_TARGET_POWERS];
    256  1.1     alc 	CAL_TARGET_POWER_LEG	calTargetPower2G[AR5416_NUM_2G_20_TARGET_POWERS];
    257  1.1     alc 	CAL_TARGET_POWER_HT	calTargetPower2GHT20[AR5416_NUM_2G_20_TARGET_POWERS];
    258  1.1     alc 	CAL_TARGET_POWER_HT	calTargetPower2GHT40[AR5416_NUM_2G_40_TARGET_POWERS];
    259  1.1     alc 	uint8_t			ctlIndex[AR5416_NUM_CTLS];
    260  1.1     alc 	CAL_CTL_DATA		ctlData[AR5416_NUM_CTLS];
    261  1.1     alc 	uint8_t			padding;
    262  1.1     alc } __packed;
    263  1.1     alc 
    264  1.1     alc typedef struct {
    265  1.1     alc 	struct ar5416eeprom ee_base;
    266  1.1     alc #define NUM_EDGES	 8
    267  1.1     alc 	uint16_t	ee_numCtls;
    268  1.1     alc 	RD_EDGES_POWER	ee_rdEdgesPower[NUM_EDGES*AR5416_NUM_CTLS];
    269  1.1     alc 	/* XXX these are dynamically calculated for use by shared code */
    270  1.1     alc 	int8_t		ee_antennaGainMax[2];
    271  1.1     alc } HAL_EEPROM_v14;
    272  1.1     alc #endif /* _AH_EEPROM_V14_H_ */
    273