xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (c) 2010-2011 Atheros Communications Inc.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Permission to use, copy, modify, and/or distribute this software for any
5*4882a593Smuzhiyun  * purpose with or without fee is hereby granted, provided that the above
6*4882a593Smuzhiyun  * copyright notice and this permission notice appear in all copies.
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9*4882a593Smuzhiyun  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10*4882a593Smuzhiyun  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11*4882a593Smuzhiyun  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12*4882a593Smuzhiyun  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13*4882a593Smuzhiyun  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14*4882a593Smuzhiyun  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15*4882a593Smuzhiyun  */
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #ifndef AR9003_EEPROM_H
18*4882a593Smuzhiyun #define AR9003_EEPROM_H
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #include <linux/types.h>
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #define AR9300_EEP_VER               0xD000
23*4882a593Smuzhiyun #define AR9300_EEP_VER_MINOR_MASK    0xFFF
24*4882a593Smuzhiyun #define AR9300_EEP_MINOR_VER_1       0x1
25*4882a593Smuzhiyun #define AR9300_EEP_MINOR_VER         AR9300_EEP_MINOR_VER_1
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun /* 16-bit offset location start of calibration struct */
28*4882a593Smuzhiyun #define AR9300_EEP_START_LOC         256
29*4882a593Smuzhiyun #define AR9300_NUM_5G_CAL_PIERS      8
30*4882a593Smuzhiyun #define AR9300_NUM_2G_CAL_PIERS      3
31*4882a593Smuzhiyun #define AR9300_NUM_5G_20_TARGET_POWERS  8
32*4882a593Smuzhiyun #define AR9300_NUM_5G_40_TARGET_POWERS  8
33*4882a593Smuzhiyun #define AR9300_NUM_2G_CCK_TARGET_POWERS 2
34*4882a593Smuzhiyun #define AR9300_NUM_2G_20_TARGET_POWERS  3
35*4882a593Smuzhiyun #define AR9300_NUM_2G_40_TARGET_POWERS  3
36*4882a593Smuzhiyun /* #define AR9300_NUM_CTLS              21 */
37*4882a593Smuzhiyun #define AR9300_NUM_CTLS_5G           9
38*4882a593Smuzhiyun #define AR9300_NUM_CTLS_2G           12
39*4882a593Smuzhiyun #define AR9300_NUM_BAND_EDGES_5G     8
40*4882a593Smuzhiyun #define AR9300_NUM_BAND_EDGES_2G     4
41*4882a593Smuzhiyun #define AR9300_EEPMISC_WOW           0x02
42*4882a593Smuzhiyun #define AR9300_CUSTOMER_DATA_SIZE    20
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun #define AR9300_MAX_CHAINS            3
45*4882a593Smuzhiyun #define AR9300_ANT_16S               25
46*4882a593Smuzhiyun #define AR9300_FUTURE_MODAL_SZ       6
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun #define AR9300_PAPRD_RATE_MASK		0x01ffffff
49*4882a593Smuzhiyun #define AR9300_PAPRD_SCALE_1		0x0e000000
50*4882a593Smuzhiyun #define AR9300_PAPRD_SCALE_1_S		25
51*4882a593Smuzhiyun #define AR9300_PAPRD_SCALE_2		0x70000000
52*4882a593Smuzhiyun #define AR9300_PAPRD_SCALE_2_S		28
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun #define AR9300_EEP_ANTDIV_CONTROL_DEFAULT_VALUE 0xc9
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun /* Delta from which to start power to pdadc table */
57*4882a593Smuzhiyun /* This offset is used in both open loop and closed loop power control
58*4882a593Smuzhiyun  * schemes. In open loop power control, it is not really needed, but for
59*4882a593Smuzhiyun  * the "sake of consistency" it was kept. For certain AP designs, this
60*4882a593Smuzhiyun  * value is overwritten by the value in the flag "pwrTableOffset" just
61*4882a593Smuzhiyun  * before writing the pdadc vs pwr into the chip registers.
62*4882a593Smuzhiyun  */
63*4882a593Smuzhiyun #define AR9300_PWR_TABLE_OFFSET  0
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun /* Noise power data definitions
66*4882a593Smuzhiyun  * units are: 4 x dBm - NOISE_PWR_DATA_OFFSET
67*4882a593Smuzhiyun  * (e.g. -25 = (-25/4 - 90) = -96.25 dBm)
68*4882a593Smuzhiyun  * range (for 6 signed bits) is (-32 to 31) + offset => -122dBm to -59dBm
69*4882a593Smuzhiyun  * resolution (2 bits) is 0.25dBm
70*4882a593Smuzhiyun  */
71*4882a593Smuzhiyun #define NOISE_PWR_DATA_OFFSET	-90
72*4882a593Smuzhiyun #define NOISE_PWR_DBM_2_INT(_p)	((((_p) + 3) >> 2) + NOISE_PWR_DATA_OFFSET)
73*4882a593Smuzhiyun #define N2DBM(_p)		NOISE_PWR_DBM_2_INT(_p)
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun /* byte addressable */
76*4882a593Smuzhiyun #define AR9300_EEPROM_SIZE (16*1024)
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun #define AR9300_BASE_ADDR_4K 0xfff
79*4882a593Smuzhiyun #define AR9300_BASE_ADDR 0x3ff
80*4882a593Smuzhiyun #define AR9300_BASE_ADDR_512 0x1ff
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun /* AR5416_EEPMISC_BIG_ENDIAN not set indicates little endian */
83*4882a593Smuzhiyun #define AR9300_EEPMISC_LITTLE_ENDIAN 0
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun #define AR9300_OTP_BASE \
86*4882a593Smuzhiyun 		((AR_SREV_9340(ah) || AR_SREV_9550(ah)) ? 0x30000 : 0x14000)
87*4882a593Smuzhiyun #define AR9300_OTP_STATUS \
88*4882a593Smuzhiyun 		((AR_SREV_9340(ah) || AR_SREV_9550(ah)) ? 0x31018 : 0x15f18)
89*4882a593Smuzhiyun #define AR9300_OTP_STATUS_TYPE		0x7
90*4882a593Smuzhiyun #define AR9300_OTP_STATUS_VALID		0x4
91*4882a593Smuzhiyun #define AR9300_OTP_STATUS_ACCESS_BUSY	0x2
92*4882a593Smuzhiyun #define AR9300_OTP_STATUS_SM_BUSY	0x1
93*4882a593Smuzhiyun #define AR9300_OTP_READ_DATA \
94*4882a593Smuzhiyun 		((AR_SREV_9340(ah) || AR_SREV_9550(ah)) ? 0x3101c : 0x15f1c)
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun enum targetPowerHTRates {
97*4882a593Smuzhiyun 	HT_TARGET_RATE_0_8_16,
98*4882a593Smuzhiyun 	HT_TARGET_RATE_1_3_9_11_17_19,
99*4882a593Smuzhiyun 	HT_TARGET_RATE_4,
100*4882a593Smuzhiyun 	HT_TARGET_RATE_5,
101*4882a593Smuzhiyun 	HT_TARGET_RATE_6,
102*4882a593Smuzhiyun 	HT_TARGET_RATE_7,
103*4882a593Smuzhiyun 	HT_TARGET_RATE_12,
104*4882a593Smuzhiyun 	HT_TARGET_RATE_13,
105*4882a593Smuzhiyun 	HT_TARGET_RATE_14,
106*4882a593Smuzhiyun 	HT_TARGET_RATE_15,
107*4882a593Smuzhiyun 	HT_TARGET_RATE_20,
108*4882a593Smuzhiyun 	HT_TARGET_RATE_21,
109*4882a593Smuzhiyun 	HT_TARGET_RATE_22,
110*4882a593Smuzhiyun 	HT_TARGET_RATE_23
111*4882a593Smuzhiyun };
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun enum targetPowerLegacyRates {
114*4882a593Smuzhiyun 	LEGACY_TARGET_RATE_6_24,
115*4882a593Smuzhiyun 	LEGACY_TARGET_RATE_36,
116*4882a593Smuzhiyun 	LEGACY_TARGET_RATE_48,
117*4882a593Smuzhiyun 	LEGACY_TARGET_RATE_54
118*4882a593Smuzhiyun };
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun enum targetPowerCckRates {
121*4882a593Smuzhiyun 	LEGACY_TARGET_RATE_1L_5L,
122*4882a593Smuzhiyun 	LEGACY_TARGET_RATE_5S,
123*4882a593Smuzhiyun 	LEGACY_TARGET_RATE_11L,
124*4882a593Smuzhiyun 	LEGACY_TARGET_RATE_11S
125*4882a593Smuzhiyun };
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun enum ar9300_Rates {
128*4882a593Smuzhiyun 	ALL_TARGET_LEGACY_6_24,
129*4882a593Smuzhiyun 	ALL_TARGET_LEGACY_36,
130*4882a593Smuzhiyun 	ALL_TARGET_LEGACY_48,
131*4882a593Smuzhiyun 	ALL_TARGET_LEGACY_54,
132*4882a593Smuzhiyun 	ALL_TARGET_LEGACY_1L_5L,
133*4882a593Smuzhiyun 	ALL_TARGET_LEGACY_5S,
134*4882a593Smuzhiyun 	ALL_TARGET_LEGACY_11L,
135*4882a593Smuzhiyun 	ALL_TARGET_LEGACY_11S,
136*4882a593Smuzhiyun 	ALL_TARGET_HT20_0_8_16,
137*4882a593Smuzhiyun 	ALL_TARGET_HT20_1_3_9_11_17_19,
138*4882a593Smuzhiyun 	ALL_TARGET_HT20_4,
139*4882a593Smuzhiyun 	ALL_TARGET_HT20_5,
140*4882a593Smuzhiyun 	ALL_TARGET_HT20_6,
141*4882a593Smuzhiyun 	ALL_TARGET_HT20_7,
142*4882a593Smuzhiyun 	ALL_TARGET_HT20_12,
143*4882a593Smuzhiyun 	ALL_TARGET_HT20_13,
144*4882a593Smuzhiyun 	ALL_TARGET_HT20_14,
145*4882a593Smuzhiyun 	ALL_TARGET_HT20_15,
146*4882a593Smuzhiyun 	ALL_TARGET_HT20_20,
147*4882a593Smuzhiyun 	ALL_TARGET_HT20_21,
148*4882a593Smuzhiyun 	ALL_TARGET_HT20_22,
149*4882a593Smuzhiyun 	ALL_TARGET_HT20_23,
150*4882a593Smuzhiyun 	ALL_TARGET_HT40_0_8_16,
151*4882a593Smuzhiyun 	ALL_TARGET_HT40_1_3_9_11_17_19,
152*4882a593Smuzhiyun 	ALL_TARGET_HT40_4,
153*4882a593Smuzhiyun 	ALL_TARGET_HT40_5,
154*4882a593Smuzhiyun 	ALL_TARGET_HT40_6,
155*4882a593Smuzhiyun 	ALL_TARGET_HT40_7,
156*4882a593Smuzhiyun 	ALL_TARGET_HT40_12,
157*4882a593Smuzhiyun 	ALL_TARGET_HT40_13,
158*4882a593Smuzhiyun 	ALL_TARGET_HT40_14,
159*4882a593Smuzhiyun 	ALL_TARGET_HT40_15,
160*4882a593Smuzhiyun 	ALL_TARGET_HT40_20,
161*4882a593Smuzhiyun 	ALL_TARGET_HT40_21,
162*4882a593Smuzhiyun 	ALL_TARGET_HT40_22,
163*4882a593Smuzhiyun 	ALL_TARGET_HT40_23,
164*4882a593Smuzhiyun 	ar9300RateSize,
165*4882a593Smuzhiyun };
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun struct eepFlags {
169*4882a593Smuzhiyun 	u8 opFlags;
170*4882a593Smuzhiyun 	u8 eepMisc;
171*4882a593Smuzhiyun } __packed;
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun enum CompressAlgorithm {
174*4882a593Smuzhiyun 	_CompressNone = 0,
175*4882a593Smuzhiyun 	_CompressLzma,
176*4882a593Smuzhiyun 	_CompressPairs,
177*4882a593Smuzhiyun 	_CompressBlock,
178*4882a593Smuzhiyun 	_Compress4,
179*4882a593Smuzhiyun 	_Compress5,
180*4882a593Smuzhiyun 	_Compress6,
181*4882a593Smuzhiyun 	_Compress7,
182*4882a593Smuzhiyun };
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun struct ar9300_base_eep_hdr {
185*4882a593Smuzhiyun 	__le16 regDmn[2];
186*4882a593Smuzhiyun 	/* 4 bits tx and 4 bits rx */
187*4882a593Smuzhiyun 	u8 txrxMask;
188*4882a593Smuzhiyun 	struct eepFlags opCapFlags;
189*4882a593Smuzhiyun 	u8 rfSilent;
190*4882a593Smuzhiyun 	u8 blueToothOptions;
191*4882a593Smuzhiyun 	u8 deviceCap;
192*4882a593Smuzhiyun 	/* takes lower byte in eeprom location */
193*4882a593Smuzhiyun 	u8 deviceType;
194*4882a593Smuzhiyun 	/* offset in dB to be added to beginning
195*4882a593Smuzhiyun 	 * of pdadc table in calibration
196*4882a593Smuzhiyun 	 */
197*4882a593Smuzhiyun 	int8_t pwrTableOffset;
198*4882a593Smuzhiyun 	u8 params_for_tuning_caps[2];
199*4882a593Smuzhiyun 	/*
200*4882a593Smuzhiyun 	 * bit0 - enable tx temp comp
201*4882a593Smuzhiyun 	 * bit1 - enable tx volt comp
202*4882a593Smuzhiyun 	 * bit2 - enable fastClock - default to 1
203*4882a593Smuzhiyun 	 * bit3 - enable doubling - default to 1
204*4882a593Smuzhiyun 	 * bit4 - enable internal regulator - default to 1
205*4882a593Smuzhiyun 	 */
206*4882a593Smuzhiyun 	u8 featureEnable;
207*4882a593Smuzhiyun 	/* misc flags: bit0 - turn down drivestrength */
208*4882a593Smuzhiyun 	u8 miscConfiguration;
209*4882a593Smuzhiyun 	u8 eepromWriteEnableGpio;
210*4882a593Smuzhiyun 	u8 wlanDisableGpio;
211*4882a593Smuzhiyun 	u8 wlanLedGpio;
212*4882a593Smuzhiyun 	u8 rxBandSelectGpio;
213*4882a593Smuzhiyun 	u8 txrxgain;
214*4882a593Smuzhiyun 	/* SW controlled internal regulator fields */
215*4882a593Smuzhiyun 	__le32 swreg;
216*4882a593Smuzhiyun } __packed;
217*4882a593Smuzhiyun 
218*4882a593Smuzhiyun struct ar9300_modal_eep_header {
219*4882a593Smuzhiyun 	/* 4 idle, t1, t2, b (4 bits per setting) */
220*4882a593Smuzhiyun 	__le32 antCtrlCommon;
221*4882a593Smuzhiyun 	/* 4 ra1l1, ra2l1, ra1l2, ra2l2, ra12 */
222*4882a593Smuzhiyun 	__le32 antCtrlCommon2;
223*4882a593Smuzhiyun 	/* 6 idle, t, r, rx1, rx12, b (2 bits each) */
224*4882a593Smuzhiyun 	__le16 antCtrlChain[AR9300_MAX_CHAINS];
225*4882a593Smuzhiyun 	/* 3 xatten1_db for AR9280 (0xa20c/b20c 5:0) */
226*4882a593Smuzhiyun 	u8 xatten1DB[AR9300_MAX_CHAINS];
227*4882a593Smuzhiyun 	/* 3  xatten1_margin for merlin (0xa20c/b20c 16:12 */
228*4882a593Smuzhiyun 	u8 xatten1Margin[AR9300_MAX_CHAINS];
229*4882a593Smuzhiyun 	int8_t tempSlope;
230*4882a593Smuzhiyun 	int8_t voltSlope;
231*4882a593Smuzhiyun 	/* spur channels in usual fbin coding format */
232*4882a593Smuzhiyun 	u8 spurChans[AR_EEPROM_MODAL_SPURS];
233*4882a593Smuzhiyun 	/* 3  Check if the register is per chain */
234*4882a593Smuzhiyun 	int8_t noiseFloorThreshCh[AR9300_MAX_CHAINS];
235*4882a593Smuzhiyun 	u8 reserved[11];
236*4882a593Smuzhiyun 	int8_t quick_drop;
237*4882a593Smuzhiyun 	u8 xpaBiasLvl;
238*4882a593Smuzhiyun 	u8 txFrameToDataStart;
239*4882a593Smuzhiyun 	u8 txFrameToPaOn;
240*4882a593Smuzhiyun 	u8 txClip;
241*4882a593Smuzhiyun 	int8_t antennaGain;
242*4882a593Smuzhiyun 	u8 switchSettling;
243*4882a593Smuzhiyun 	int8_t adcDesiredSize;
244*4882a593Smuzhiyun 	u8 txEndToXpaOff;
245*4882a593Smuzhiyun 	u8 txEndToRxOn;
246*4882a593Smuzhiyun 	u8 txFrameToXpaOn;
247*4882a593Smuzhiyun 	u8 thresh62;
248*4882a593Smuzhiyun 	__le32 papdRateMaskHt20;
249*4882a593Smuzhiyun 	__le32 papdRateMaskHt40;
250*4882a593Smuzhiyun 	__le16 switchcomspdt;
251*4882a593Smuzhiyun 	u8 xlna_bias_strength;
252*4882a593Smuzhiyun 	u8 futureModal[7];
253*4882a593Smuzhiyun } __packed;
254*4882a593Smuzhiyun 
255*4882a593Smuzhiyun struct ar9300_cal_data_per_freq_op_loop {
256*4882a593Smuzhiyun 	int8_t refPower;
257*4882a593Smuzhiyun 	/* pdadc voltage at power measurement */
258*4882a593Smuzhiyun 	u8 voltMeas;
259*4882a593Smuzhiyun 	/* pcdac used for power measurement   */
260*4882a593Smuzhiyun 	u8 tempMeas;
261*4882a593Smuzhiyun 	/* range is -60 to -127 create a mapping equation 1db resolution */
262*4882a593Smuzhiyun 	int8_t rxNoisefloorCal;
263*4882a593Smuzhiyun 	/*range is same as noisefloor */
264*4882a593Smuzhiyun 	int8_t rxNoisefloorPower;
265*4882a593Smuzhiyun 	/* temp measured when noisefloor cal was performed */
266*4882a593Smuzhiyun 	u8 rxTempMeas;
267*4882a593Smuzhiyun } __packed;
268*4882a593Smuzhiyun 
269*4882a593Smuzhiyun struct cal_tgt_pow_legacy {
270*4882a593Smuzhiyun 	u8 tPow2x[4];
271*4882a593Smuzhiyun } __packed;
272*4882a593Smuzhiyun 
273*4882a593Smuzhiyun struct cal_tgt_pow_ht {
274*4882a593Smuzhiyun 	u8 tPow2x[14];
275*4882a593Smuzhiyun } __packed;
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun struct cal_ctl_data_2g {
278*4882a593Smuzhiyun 	u8 ctlEdges[AR9300_NUM_BAND_EDGES_2G];
279*4882a593Smuzhiyun } __packed;
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun struct cal_ctl_data_5g {
282*4882a593Smuzhiyun 	u8 ctlEdges[AR9300_NUM_BAND_EDGES_5G];
283*4882a593Smuzhiyun } __packed;
284*4882a593Smuzhiyun 
285*4882a593Smuzhiyun #define MAX_BASE_EXTENSION_FUTURE 2
286*4882a593Smuzhiyun 
287*4882a593Smuzhiyun struct ar9300_BaseExtension_1 {
288*4882a593Smuzhiyun 	u8 ant_div_control;
289*4882a593Smuzhiyun 	u8 future[MAX_BASE_EXTENSION_FUTURE];
290*4882a593Smuzhiyun 	/*
291*4882a593Smuzhiyun 	 * misc_enable:
292*4882a593Smuzhiyun 	 *
293*4882a593Smuzhiyun 	 * BIT 0   - TX Gain Cap enable.
294*4882a593Smuzhiyun 	 * BIT 1   - Uncompressed Checksum enable.
295*4882a593Smuzhiyun 	 * BIT 2/3 - MinCCApwr enable 2g/5g.
296*4882a593Smuzhiyun 	 */
297*4882a593Smuzhiyun 	u8 misc_enable;
298*4882a593Smuzhiyun 	int8_t tempslopextension[8];
299*4882a593Smuzhiyun 	int8_t quick_drop_low;
300*4882a593Smuzhiyun 	int8_t quick_drop_high;
301*4882a593Smuzhiyun } __packed;
302*4882a593Smuzhiyun 
303*4882a593Smuzhiyun struct ar9300_BaseExtension_2 {
304*4882a593Smuzhiyun 	int8_t    tempSlopeLow;
305*4882a593Smuzhiyun 	int8_t    tempSlopeHigh;
306*4882a593Smuzhiyun 	u8   xatten1DBLow[AR9300_MAX_CHAINS];
307*4882a593Smuzhiyun 	u8   xatten1MarginLow[AR9300_MAX_CHAINS];
308*4882a593Smuzhiyun 	u8   xatten1DBHigh[AR9300_MAX_CHAINS];
309*4882a593Smuzhiyun 	u8   xatten1MarginHigh[AR9300_MAX_CHAINS];
310*4882a593Smuzhiyun } __packed;
311*4882a593Smuzhiyun 
312*4882a593Smuzhiyun struct ar9300_eeprom {
313*4882a593Smuzhiyun 	u8 eepromVersion;
314*4882a593Smuzhiyun 	u8 templateVersion;
315*4882a593Smuzhiyun 	u8 macAddr[6];
316*4882a593Smuzhiyun 	u8 custData[AR9300_CUSTOMER_DATA_SIZE];
317*4882a593Smuzhiyun 
318*4882a593Smuzhiyun 	struct ar9300_base_eep_hdr baseEepHeader;
319*4882a593Smuzhiyun 
320*4882a593Smuzhiyun 	struct ar9300_modal_eep_header modalHeader2G;
321*4882a593Smuzhiyun 	struct ar9300_BaseExtension_1 base_ext1;
322*4882a593Smuzhiyun 	u8 calFreqPier2G[AR9300_NUM_2G_CAL_PIERS];
323*4882a593Smuzhiyun 	struct ar9300_cal_data_per_freq_op_loop
324*4882a593Smuzhiyun 	 calPierData2G[AR9300_MAX_CHAINS][AR9300_NUM_2G_CAL_PIERS];
325*4882a593Smuzhiyun 	u8 calTarget_freqbin_Cck[AR9300_NUM_2G_CCK_TARGET_POWERS];
326*4882a593Smuzhiyun 	u8 calTarget_freqbin_2G[AR9300_NUM_2G_20_TARGET_POWERS];
327*4882a593Smuzhiyun 	u8 calTarget_freqbin_2GHT20[AR9300_NUM_2G_20_TARGET_POWERS];
328*4882a593Smuzhiyun 	u8 calTarget_freqbin_2GHT40[AR9300_NUM_2G_40_TARGET_POWERS];
329*4882a593Smuzhiyun 	struct cal_tgt_pow_legacy
330*4882a593Smuzhiyun 	 calTargetPowerCck[AR9300_NUM_2G_CCK_TARGET_POWERS];
331*4882a593Smuzhiyun 	struct cal_tgt_pow_legacy
332*4882a593Smuzhiyun 	 calTargetPower2G[AR9300_NUM_2G_20_TARGET_POWERS];
333*4882a593Smuzhiyun 	struct cal_tgt_pow_ht
334*4882a593Smuzhiyun 	 calTargetPower2GHT20[AR9300_NUM_2G_20_TARGET_POWERS];
335*4882a593Smuzhiyun 	struct cal_tgt_pow_ht
336*4882a593Smuzhiyun 	 calTargetPower2GHT40[AR9300_NUM_2G_40_TARGET_POWERS];
337*4882a593Smuzhiyun 	u8 ctlIndex_2G[AR9300_NUM_CTLS_2G];
338*4882a593Smuzhiyun 	u8 ctl_freqbin_2G[AR9300_NUM_CTLS_2G][AR9300_NUM_BAND_EDGES_2G];
339*4882a593Smuzhiyun 	struct cal_ctl_data_2g ctlPowerData_2G[AR9300_NUM_CTLS_2G];
340*4882a593Smuzhiyun 	struct ar9300_modal_eep_header modalHeader5G;
341*4882a593Smuzhiyun 	struct ar9300_BaseExtension_2 base_ext2;
342*4882a593Smuzhiyun 	u8 calFreqPier5G[AR9300_NUM_5G_CAL_PIERS];
343*4882a593Smuzhiyun 	struct ar9300_cal_data_per_freq_op_loop
344*4882a593Smuzhiyun 	 calPierData5G[AR9300_MAX_CHAINS][AR9300_NUM_5G_CAL_PIERS];
345*4882a593Smuzhiyun 	u8 calTarget_freqbin_5G[AR9300_NUM_5G_20_TARGET_POWERS];
346*4882a593Smuzhiyun 	u8 calTarget_freqbin_5GHT20[AR9300_NUM_5G_20_TARGET_POWERS];
347*4882a593Smuzhiyun 	u8 calTarget_freqbin_5GHT40[AR9300_NUM_5G_40_TARGET_POWERS];
348*4882a593Smuzhiyun 	struct cal_tgt_pow_legacy
349*4882a593Smuzhiyun 	 calTargetPower5G[AR9300_NUM_5G_20_TARGET_POWERS];
350*4882a593Smuzhiyun 	struct cal_tgt_pow_ht
351*4882a593Smuzhiyun 	 calTargetPower5GHT20[AR9300_NUM_5G_20_TARGET_POWERS];
352*4882a593Smuzhiyun 	struct cal_tgt_pow_ht
353*4882a593Smuzhiyun 	 calTargetPower5GHT40[AR9300_NUM_5G_40_TARGET_POWERS];
354*4882a593Smuzhiyun 	u8 ctlIndex_5G[AR9300_NUM_CTLS_5G];
355*4882a593Smuzhiyun 	u8 ctl_freqbin_5G[AR9300_NUM_CTLS_5G][AR9300_NUM_BAND_EDGES_5G];
356*4882a593Smuzhiyun 	struct cal_ctl_data_5g ctlPowerData_5G[AR9300_NUM_CTLS_5G];
357*4882a593Smuzhiyun } __packed;
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun s32 ar9003_hw_get_tx_gain_idx(struct ath_hw *ah);
360*4882a593Smuzhiyun s32 ar9003_hw_get_rx_gain_idx(struct ath_hw *ah);
361*4882a593Smuzhiyun u32 ar9003_hw_ant_ctrl_common_get(struct ath_hw *ah, bool is2ghz);
362*4882a593Smuzhiyun u32 ar9003_hw_ant_ctrl_common_2_get(struct ath_hw *ah, bool is2ghz);
363*4882a593Smuzhiyun 
364*4882a593Smuzhiyun u8 *ar9003_get_spur_chan_ptr(struct ath_hw *ah, bool is_2ghz);
365*4882a593Smuzhiyun 
366*4882a593Smuzhiyun unsigned int ar9003_get_paprd_scale_factor(struct ath_hw *ah,
367*4882a593Smuzhiyun 					   struct ath9k_channel *chan);
368*4882a593Smuzhiyun 
369*4882a593Smuzhiyun void ar9003_hw_internal_regulator_apply(struct ath_hw *ah);
370*4882a593Smuzhiyun int ar9003_hw_tx_power_regwrite(struct ath_hw *ah, u8 * pPwrArray);
371*4882a593Smuzhiyun 
372*4882a593Smuzhiyun #endif
373