1/*	$NetBSD:$	*/
2/*	$OpenBSD: ar9287reg.h,v 1.3 2010/07/15 19:07:43 damien Exp $	*/
3
4/*-
5 * Copyright (c) 2009 Damien Bergamini <damien.bergamini@free.fr>
6 * Copyright (c) 2008-2009 Atheros Communications Inc.
7 *
8 * Permission to use, copy, modify, and/or distribute this software for any
9 * purpose with or without fee is hereby granted, provided that the above
10 * copyright notice and this permission notice appear in all copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 */
20
21#ifndef _ARN9287REG_H_
22#define _ARN9287REG_H_
23
24#define AR9287_MAX_CHAINS	2
25
26#define AR9287_PHY_CCA_MAX_GOOD_VALUE	(-118)
27
28/*
29 * Analog registers.
30 */
31#define AR9287_AN_RF2G3_CH0		0x7808
32#define AR9287_AN_RF2G3_CH1		0x785c
33#define AR9287_AN_TXPC0			0x7898
34#define AR9287_AN_TOP2			0x78b4
35
36/* Bits for AR9287_AN_RF2G3_CH[01]. */
37#define AR9287_AN_RF2G3_OB_PAL_OFF_M	0x0001c000
38#define AR9287_AN_RF2G3_OB_PAL_OFF_S	14
39#define AR9287_AN_RF2G3_OB_QAM_M	0x000e0000
40#define AR9287_AN_RF2G3_OB_QAM_S	17
41#define AR9287_AN_RF2G3_OB_PSK_M	0x00700000
42#define AR9287_AN_RF2G3_OB_PSK_S	20
43#define AR9287_AN_RF2G3_OB_CCK_M	0x03800000
44#define AR9287_AN_RF2G3_OB_CCK_S	23
45#define AR9287_AN_RF2G3_DB2_M		0x1c000000
46#define AR9287_AN_RF2G3_DB2_S		26
47#define AR9287_AN_RF2G3_DB1_M		0xe0000000
48#define AR9287_AN_RF2G3_DB1_S		29
49
50/* Bits for AR9287_AN_TXPC0. */
51#define AR9287_AN_TXPC0_TXPCMODE_M		0x0000c000
52#define AR9287_AN_TXPC0_TXPCMODE_S		14
53#define AR9287_AN_TXPC0_TXPCMODE_NORMAL		0
54#define AR9287_AN_TXPC0_TXPCMODE_TEST		1
55#define AR9287_AN_TXPC0_TXPCMODE_TEMPSENSE	2
56#define AR9287_AN_TXPC0_TXPCMODE_ATBTEST	3
57
58/* Bits for AR9287_AN_TOP2. */
59#define AR9287_AN_TOP2_XPABIAS_LVL_M	0xc0000000
60#define AR9287_AN_TOP2_XPABIAS_LVL_S	30
61
62/*
63 * ROM layout used by AR9287 (2GHz only).
64 */
65#define AR9287_EEP_START_LOC		128
66#define AR9287_NUM_2G_CAL_PIERS		3
67#define AR9287_NUM_2G_CCK_TARGET_POWERS	3
68#define AR9287_NUM_2G_20_TARGET_POWERS	3
69#define AR9287_NUM_2G_40_TARGET_POWERS	3
70#define AR9287_NUM_CTLS			12
71#define AR9287_NUM_BAND_EDGES		4
72#define AR9287_NUM_PD_GAINS		4
73#define AR9287_PD_GAINS_IN_MASK 	4
74#define AR9287_PD_GAIN_ICEPTS		1
75#define AR9287_MAX_RATE_POWER		63
76#define AR9287_NUM_RATES		16
77
78struct ar9287_base_eep_header {
79	uint16_t	length;
80	uint16_t	checksum;
81	uint16_t	version;
82	uint8_t		opCapFlags;
83	uint8_t		eepMisc;
84#define AR9287_EEPMISC_BIG_ENDIAN	0x01
85#define AR9287_EEPMISC_WOW		0x02
86
87	uint16_t	regDmn[2];
88	uint8_t		macAddr[6];
89	uint8_t		rxMask;
90	uint8_t		txMask;
91	uint16_t	rfSilent;
92	uint16_t	blueToothOptions;
93	uint16_t	deviceCap;
94	uint32_t	binBuildNumber;
95	uint8_t		deviceType;
96	/* End of common header. */
97	uint8_t		openLoopPwrCntl;
98	int8_t		pwrTableOffset;
99	int8_t		tempSensSlope;
100	int8_t		tempSensSlopePalOn;
101	uint8_t		futureBase[29];
102} __packed;
103
104struct ar9287_modal_eep_header {
105	uint32_t	antCtrlChain[AR9287_MAX_CHAINS];
106	uint32_t	antCtrlCommon;
107	int8_t		antennaGainCh[AR9287_MAX_CHAINS];
108	uint8_t		switchSettling;
109	uint8_t		txRxAttenCh[AR9287_MAX_CHAINS];
110	uint8_t		rxTxMarginCh[AR9287_MAX_CHAINS];
111	int8_t		adcDesiredSize;
112	uint8_t		txEndToXpaOff;
113	uint8_t		txEndToRxOn;
114	uint8_t		txFrameToXpaOn;
115	uint8_t		thresh62;
116	int8_t		noiseFloorThreshCh[AR9287_MAX_CHAINS];
117	uint8_t		xpdGain;
118	uint8_t		xpd;
119	int8_t		iqCalICh[AR9287_MAX_CHAINS];
120	int8_t		iqCalQCh[AR9287_MAX_CHAINS];
121	uint8_t		pdGainOverlap;
122	uint8_t		xpaBiasLvl;
123	uint8_t		txFrameToDataStart;
124	uint8_t		txFrameToPaOn;
125	uint8_t		ht40PowerIncForPdadc;
126	uint8_t		bswAtten[AR9287_MAX_CHAINS];
127	uint8_t		bswMargin[AR9287_MAX_CHAINS];
128	uint8_t		swSettleHt40;
129	uint8_t		version;
130	uint8_t		db1;
131	uint8_t		db2;
132	uint8_t		ob_cck;
133	uint8_t		ob_psk;
134	uint8_t		ob_qam;
135	uint8_t		ob_pal_off;
136	uint8_t		futureModal[30];
137	struct		ar_spur_chan spurChans[AR_EEPROM_MODAL_SPURS];
138} __packed;
139
140struct ar9287_cal_data_per_freq {
141	uint8_t	pwrPdg[AR9287_NUM_PD_GAINS][AR9287_PD_GAIN_ICEPTS];
142	uint8_t	vpdPdg[AR9287_NUM_PD_GAINS][AR9287_PD_GAIN_ICEPTS];
143} __packed;
144
145union ar9287_cal_data_per_freq_u {
146	struct ar_cal_data_per_freq_olpc	calDataOpen;
147	struct ar9287_cal_data_per_freq		calDataClose;
148} __packed;
149
150struct ar9287_cal_ctl_data {
151	struct ar_cal_ctl_edges
152	    ctlEdges[AR9287_MAX_CHAINS][AR9287_NUM_BAND_EDGES];
153} __packed;
154
155struct ar9287_eeprom {
156	struct	ar9287_base_eep_header baseEepHeader;
157	uint8_t custData[32];
158	struct	ar9287_modal_eep_header modalHeader;
159	uint8_t	calFreqPier2G[AR9287_NUM_2G_CAL_PIERS];
160	union	ar9287_cal_data_per_freq_u
161	    calPierData2G[AR9287_MAX_CHAINS][AR9287_NUM_2G_CAL_PIERS];
162	struct	ar_cal_target_power_leg
163	    calTargetPowerCck[AR9287_NUM_2G_CCK_TARGET_POWERS];
164	struct	ar_cal_target_power_leg
165	    calTargetPower2G[AR9287_NUM_2G_20_TARGET_POWERS];
166	struct	ar_cal_target_power_ht
167	    calTargetPower2GHT20[AR9287_NUM_2G_20_TARGET_POWERS];
168	struct	ar_cal_target_power_ht
169	    calTargetPower2GHT40[AR9287_NUM_2G_40_TARGET_POWERS];
170	uint8_t	ctlIndex[AR9287_NUM_CTLS];
171	struct	ar9287_cal_ctl_data ctlData[AR9287_NUM_CTLS];
172	uint8_t	padding;
173} __packed;
174
175/* Macro to "pack" registers to 16-bit to save some .rodata space. */
176#define P(x)	(x)
177
178/*
179 * AR9287 1.1 initialization values.
180 */
181static const uint16_t ar9287_1_1_regs[] = {
182	P(0x01030), P(0x01070), P(0x010b0), P(0x010f0), P(0x08014),
183	P(0x0801c), P(0x08120), P(0x081d0), P(0x08318), P(0x09804),
184	P(0x09820), P(0x09824), P(0x09828), P(0x09834), P(0x09838),
185	P(0x09840), P(0x09844), P(0x09850), P(0x09858), P(0x0985c),
186	P(0x09860), P(0x09864), P(0x09868), P(0x0986c), P(0x09914),
187	P(0x09918), P(0x09924), P(0x09944), P(0x09960), P(0x0a960),
188	P(0x09964), P(0x0c968), P(0x099b8), P(0x099bc), P(0x099c0),
189	P(0x0a204), P(0x0a20c), P(0x0b20c), P(0x0a21c), P(0x0a230),
190	P(0x0a250), P(0x0a358), P(0x0a3d8)
191};
192
193#ifndef IEEE80211_NO_HT
194static const uint32_t ar9287_1_1_vals_2g40[] = {
195	0x000002c0, 0x00000318, 0x00007c70, 0x00000000, 0x10801600,
196	0x12e00057, 0x08f04810, 0x0000320a, 0x00006880, 0x000003c4,
197	0x02020200, 0x01000e0e, 0x3a020001, 0x00000e0e, 0x00000007,
198	0x206a012e, 0x037216a0, 0x6d4000e2, 0x7ec84d2e, 0x3139605e,
199	0x00058d20, 0x0001ce00, 0x5ac640d0, 0x06903881, 0x00001130,
200	0x00000016, 0xd00a8a0d, 0xefbc1010, 0x00000010, 0x00000010,
201	0x00000210, 0x000003ce, 0x0000001c, 0x00000c00, 0x05eea6d4,
202	0x00000444, 0x00000000, 0x00000000, 0x1883800a, 0x00000210,
203	0x0004a000, 0x7999aa0e, 0x00000000
204};
205#endif
206
207static const uint32_t ar9287_1_1_vals_2g20[] = {
208	0x00000160, 0x0000018c, 0x00003e38, 0x00000000, 0x08400b00,
209	0x12e0002b, 0x08f04810, 0x0000320a, 0x00003440, 0x00000300,
210	0x02020200, 0x01000e0e, 0x3a020001, 0x00000e0e, 0x00000007,
211	0x206a012e, 0x037216a0, 0x6c4000e2, 0x7ec84d2e, 0x31395d5e,
212	0x00058d20, 0x0001ce00, 0x5ac640d0, 0x06903881, 0x00000898,
213	0x0000000b, 0xd00a8a0d, 0xefbc1010, 0x00000010, 0x00000010,
214	0x00000210, 0x000003ce, 0x0000001c, 0x00000c00, 0x05eea6d4,
215	0x00000444, 0x00000000, 0x00000000, 0x1883800a, 0x00000108,
216	0x0004a000, 0x7999aa0e, 0x00000000
217};
218
219static const uint16_t ar9287_1_1_cm_regs[] = {
220	P(0x0000c), P(0x00030), P(0x00034), P(0x00040), P(0x00044),
221	P(0x00048), P(0x0004c), P(0x00050), P(0x00054), P(0x00800),
222	P(0x00804), P(0x00808), P(0x0080c), P(0x00810), P(0x00814),
223	P(0x00818), P(0x0081c), P(0x00820), P(0x00824), P(0x01040),
224	P(0x01044), P(0x01048), P(0x0104c), P(0x01050), P(0x01054),
225	P(0x01058), P(0x0105c), P(0x01060), P(0x01064), P(0x01230),
226	P(0x01270), P(0x01038), P(0x01078), P(0x010b8), P(0x010f8),
227	P(0x01138), P(0x01178), P(0x011b8), P(0x011f8), P(0x01238),
228	P(0x01278), P(0x012b8), P(0x012f8), P(0x01338), P(0x01378),
229	P(0x013b8), P(0x013f8), P(0x01438), P(0x01478), P(0x014b8),
230	P(0x014f8), P(0x01538), P(0x01578), P(0x015b8), P(0x015f8),
231	P(0x01638), P(0x01678), P(0x016b8), P(0x016f8), P(0x01738),
232	P(0x01778), P(0x017b8), P(0x017f8), P(0x0103c), P(0x0107c),
233	P(0x010bc), P(0x010fc), P(0x0113c), P(0x0117c), P(0x011bc),
234	P(0x011fc), P(0x0123c), P(0x0127c), P(0x012bc), P(0x012fc),
235	P(0x0133c), P(0x0137c), P(0x013bc), P(0x013fc), P(0x0143c),
236	P(0x0147c), P(0x04030), P(0x0403c), P(0x04024), P(0x04060),
237	P(0x04064), P(0x07010), P(0x07020), P(0x07034), P(0x07038),
238	P(0x08004), P(0x08008), P(0x0800c), P(0x08018), P(0x08020),
239	P(0x08038), P(0x0803c), P(0x08048), P(0x08054), P(0x08058),
240	P(0x0805c), P(0x08060), P(0x08064), P(0x08070), P(0x080c0),
241	P(0x080c4), P(0x080c8), P(0x080cc), P(0x080d0), P(0x080d4),
242	P(0x080d8), P(0x080e0), P(0x080e4), P(0x080e8), P(0x080ec),
243	P(0x080f0), P(0x080f4), P(0x080f8), P(0x080fc), P(0x08100),
244	P(0x08104), P(0x08108), P(0x0810c), P(0x08110), P(0x08118),
245	P(0x0811c), P(0x08124), P(0x08128), P(0x0812c), P(0x08130),
246	P(0x08134), P(0x08138), P(0x0813c), P(0x08144), P(0x08168),
247	P(0x0816c), P(0x08170), P(0x08174), P(0x08178), P(0x0817c),
248	P(0x081c0), P(0x081c4), P(0x081d4), P(0x081ec), P(0x081f0),
249	P(0x081f4), P(0x081f8), P(0x081fc), P(0x08200), P(0x08204),
250	P(0x08208), P(0x0820c), P(0x08210), P(0x08214), P(0x08218),
251	P(0x0821c), P(0x08220), P(0x08224), P(0x08228), P(0x0822c),
252	P(0x08230), P(0x08234), P(0x08238), P(0x0823c), P(0x08240),
253	P(0x08244), P(0x08248), P(0x0824c), P(0x08250), P(0x08254),
254	P(0x08258), P(0x0825c), P(0x08260), P(0x08264), P(0x08270),
255	P(0x08274), P(0x08278), P(0x0827c), P(0x08284), P(0x08288),
256	P(0x0828c), P(0x08294), P(0x08298), P(0x0829c), P(0x08300),
257	P(0x08314), P(0x08328), P(0x0832c), P(0x08330), P(0x08334),
258	P(0x08338), P(0x0833c), P(0x08340), P(0x08344), P(0x08360),
259	P(0x08364), P(0x08368), P(0x08370), P(0x08374), P(0x08378),
260	P(0x0837c), P(0x08380), P(0x08384), P(0x08390), P(0x08394),
261	P(0x08398), P(0x0839c), P(0x083a0), P(0x09808), P(0x0980c),
262	P(0x09810), P(0x09814), P(0x0981c), P(0x0982c), P(0x09830),
263	P(0x0983c), P(0x0984c), P(0x0a84c), P(0x09854), P(0x09900),
264	P(0x09904), P(0x09908), P(0x0990c), P(0x09910), P(0x0991c),
265	P(0x09920), P(0x0a920), P(0x09928), P(0x0992c), P(0x09930),
266	P(0x0a930), P(0x09934), P(0x09938), P(0x0993c), P(0x09948),
267	P(0x0994c), P(0x09954), P(0x09958), P(0x09940), P(0x0c95c),
268	P(0x09970), P(0x09974), P(0x09978), P(0x0997c), P(0x099a0),
269	P(0x099a4), P(0x099a8), P(0x099ac), P(0x099b0), P(0x099b4),
270	P(0x099c4), P(0x099c8), P(0x099cc), P(0x099d0), P(0x099dc),
271	P(0x099e0), P(0x099e4), P(0x099e8), P(0x099ec), P(0x099f0),
272	P(0x099fc), P(0x0a208), P(0x0a210), P(0x0a214), P(0x0a218),
273	P(0x0a220), P(0x0a224), P(0x0a228), P(0x0a22c), P(0x0a234),
274	P(0x0a238), P(0x0a23c), P(0x0a240), P(0x0a244), P(0x0a248),
275	P(0x0a24c), P(0x0a254), P(0x0a258), P(0x0a25c), P(0x0a260),
276	P(0x0a264), P(0x0b264), P(0x0a268), P(0x0a26c), P(0x0b26c),
277	P(0x0d270), P(0x0a278), P(0x0a27c), P(0x0d35c), P(0x0d360),
278	P(0x0d364), P(0x0d368), P(0x0d36c), P(0x0d370), P(0x0d374),
279	P(0x0d378), P(0x0d37c), P(0x0d380), P(0x0d384), P(0x0a388),
280	P(0x0a38c), P(0x0a390), P(0x0a394), P(0x0a398), P(0x0b398),
281	P(0x0a39c), P(0x0a3c8), P(0x0a3cc), P(0x0a3d0), P(0x0a3d4),
282	P(0x0a3dc), P(0x0a3e0), P(0x0a3e4), P(0x0a3e8), P(0x0a3ec),
283	P(0x0a3f0), P(0x0a3f4), P(0x0b3f4), P(0x0a7d8), P(0x07800),
284	P(0x07804), P(0x07808), P(0x0780c), P(0x07810), P(0x07814),
285	P(0x07818), P(0x0781c), P(0x07820), P(0x07824), P(0x07828),
286	P(0x0782c), P(0x07830), P(0x07834), P(0x07838), P(0x0783c),
287	P(0x07840), P(0x07844), P(0x07848), P(0x07850), P(0x07854),
288	P(0x07858), P(0x0785c), P(0x07860), P(0x07864), P(0x07868),
289	P(0x0786c), P(0x07870), P(0x07874), P(0x07878), P(0x0787c),
290	P(0x07880), P(0x07884), P(0x07888), P(0x0788c), P(0x07890),
291	P(0x07894), P(0x07898), P(0x0789c), P(0x078a0), P(0x078a4),
292	P(0x078a8), P(0x078ac), P(0x078b0), P(0x078b4), P(0x078b8)
293};
294
295static const uint32_t ar9287_1_1_cm_vals[] = {
296	0x00000000, 0x00020015, 0x00000005, 0x00000000, 0x00000008,
297	0x00000008, 0x00000010, 0x00000000, 0x0000001f, 0x00000000,
298	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
299	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002ffc0f,
300	0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f,
301	0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x00000000,
302	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
303	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
304	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
305	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
306	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
307	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
308	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
309	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
310	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
311	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
312	0x00000000, 0x00000002, 0x00000002, 0x0000001f, 0x00000000,
313	0x00000000, 0x00000033, 0x00000000, 0x00000002, 0x000004c2,
314	0x00000000, 0x00000000, 0x00000000, 0x00000700, 0x00000000,
315	0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000,
316	0x000fc78f, 0x0000000f, 0x00000000, 0x00000000, 0x2a80001a,
317	0x05dc01e0, 0x1f402710, 0x01f40000, 0x00001e00, 0x00000000,
318	0x00400000, 0xffffffff, 0x0000ffff, 0x003f3f3f, 0x00000000,
319	0x00000000, 0x00000000, 0x00000000, 0x00020000, 0x00020000,
320	0x00000001, 0x00000052, 0x00000000, 0x00000168, 0x000100aa,
321	0x00003210, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
322	0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000,
323	0x00000000, 0x18487320, 0xfaa4fa50, 0x00000100, 0x00000000,
324	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
325	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
326	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
327	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
328	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00100000,
329	0x0010f400, 0x00000100, 0x0001e800, 0x00000000, 0x00000000,
330	0x00000000, 0x400000ff, 0x00080922, 0x88a00010, 0x00000000,
331	0x40000000, 0x003e4180, 0x00000000, 0x0000002c, 0x0000002c,
332	0x000000ff, 0x00000000, 0x00000000, 0x00000000, 0x00000040,
333	0x00000000, 0x00000000, 0x00000007, 0x00000302, 0x00000e00,
334	0x00ff0000, 0x00000000, 0x000107ff, 0x01c81043, 0xffffffff,
335	0xffffffff, 0x00000000, 0x00000000, 0x000000ff, 0x00000000,
336	0x00000000, 0xffffffff, 0xffffffff, 0x0fffffff, 0x0fffffff,
337	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xafe68e30,
338	0xfd14e000, 0x9c0a9f6b, 0x00000000, 0x0000a000, 0x00000000,
339	0x00200400, 0x0040233c, 0x0040233c, 0x00000044, 0x00000000,
340	0x00000000, 0x00000000, 0x00000000, 0x10002310, 0x10000fff,
341	0x04900000, 0x04900000, 0x00000001, 0x00000004, 0x00000000,
342	0x00000000, 0x1e1f2022, 0x0a0b0c0d, 0x00000000, 0x9280c00a,
343	0x00020028, 0x5f3ca3de, 0x0108ecff, 0x14750604, 0x004b6a8e,
344	0x990bb514, 0x00000000, 0x00000001, 0x00000000, 0x00000000,
345	0x00000001, 0x201fff00, 0x0c6f0000, 0x03051000, 0x00000820,
346	0x06336f77, 0x6af6532f, 0x08f186c8, 0x00046384, 0x00000000,
347	0x00000000, 0xaaaaaaaa, 0x3c466478, 0x0cc80caa, 0x00000000,
348	0x00001042, 0x803e4788, 0x4080a333, 0x40206c10, 0x009c4060,
349	0x01834061, 0x00000400, 0x000003b5, 0x233f7180, 0x20202020,
350	0x20202020, 0x13c889af, 0x38490a20, 0x00000000, 0xfffffffc,
351	0x00000000, 0x00000000, 0x0cdbd380, 0x0f0f0f01, 0xdfa91f01,
352	0x00418a11, 0x00418a11, 0x00000000, 0x0e79e5c6, 0x0e79e5c6,
353	0x00820820, 0x1ce739ce, 0x050701ce, 0x07ffffef, 0x0fffffe7,
354	0x17ffffe5, 0x1fffffe4, 0x37ffffe3, 0x3fffffe3, 0x57ffffe3,
355	0x5fffffe2, 0x7fffffe2, 0x7f3c7bba, 0xf3307ff0, 0x0c000000,
356	0x20202020, 0x20202020, 0x1ce739ce, 0x000001ce, 0x000001ce,
357	0x00000001, 0x00000246, 0x20202020, 0x20202020, 0x20202020,
358	0x1ce739ce, 0x000001ce, 0x00000000, 0x18c43433, 0x00f70081,
359	0x01036a1e, 0x00000000, 0x00000000, 0x000003f1, 0x00000800,
360	0x6c35ffd2, 0x6db6c000, 0x6db6cb30, 0x6db6cb6c, 0x0501e200,
361	0x0094128d, 0x976ee392, 0xf75ff6fc, 0x00040000, 0xdb003012,
362	0x04924914, 0x21084210, 0x00140000, 0x0e4548d8, 0x54214514,
363	0x02025830, 0x71c0d388, 0x934934a8, 0x00000000, 0x00000800,
364	0x6c35ffd2, 0x6db6c000, 0x6db6cb30, 0x6db6cb6c, 0x0501e200,
365	0x0094128d, 0x976ee392, 0xf75ff6fc, 0x00040000, 0xdb003012,
366	0x04924914, 0x21084210, 0x001b6db0, 0x00376b63, 0x06db6db6,
367	0x006d8000, 0x48100000, 0x00000000, 0x08000000, 0x0007ffd8,
368	0x0007ffd8, 0x001c0020, 0x00060aeb, 0x40008080, 0x2a850160
369};
370
371static const struct athn_ini ar9287_1_1_ini = {
372	.nregs		= __arraycount(ar9287_1_1_regs),
373	.regs		= ar9287_1_1_regs,
374	.vals_5g20	= NULL,	/* 2GHz only. */
375#ifndef IEEE80211_NO_HT
376	.vals_5g40	= NULL,	/* 2GHz only. */
377	.vals_2g40	= ar9287_1_1_vals_2g40,
378#endif
379	.vals_2g20	= ar9287_1_1_vals_2g20,
380	.ncmregs	= __arraycount(ar9287_1_1_cm_regs),
381	.cmregs		= ar9287_1_1_cm_regs,
382	.cmvals		= ar9287_1_1_cm_vals
383};
384
385/*
386 * AR9287 1.1 Tx gains.
387 */
388static const uint16_t ar9287_1_1_tx_gain_regs[] = {
389	P(0x0a300), P(0x0a304), P(0x0a308), P(0x0a30c), P(0x0a310),
390	P(0x0a314), P(0x0a318), P(0x0a31c), P(0x0a320), P(0x0a324),
391	P(0x0a328), P(0x0a32c), P(0x0a330), P(0x0a334), P(0x0a338),
392	P(0x0a33c), P(0x0a340), P(0x0a344), P(0x0a348), P(0x0a34c),
393	P(0x0a350), P(0x0a354), P(0x0a780), P(0x0a784), P(0x0a788),
394	P(0x0a78c), P(0x0a790), P(0x0a794), P(0x0a798), P(0x0a79c),
395	P(0x0a7a0), P(0x0a7a4), P(0x0a7a8), P(0x0a7ac), P(0x0a7b0),
396	P(0x0a7b4), P(0x0a7b8), P(0x0a7bc), P(0x0a7c0), P(0x0a7c4),
397	P(0x0a7c8), P(0x0a7cc), P(0x0a7d0), P(0x0a7d4), P(0x0a274)
398};
399
400static const uint32_t ar9287_1_1_tx_gain_vals_2g[] = {
401	0x00000000, 0x00004002, 0x00008004, 0x0000c00a, 0x0001000c,
402	0x0001420b, 0x0001824a, 0x0001c44a, 0x0002064a, 0x0002484a,
403	0x00028a4a, 0x0002cc4a, 0x00030e4a, 0x00034e8a, 0x00038e8c,
404	0x0003cecc, 0x00040ed4, 0x00044edc, 0x00048ede, 0x0004cf1e,
405	0x00050f5e, 0x00054f9e, 0x00000062, 0x00004064, 0x000080a4,
406	0x0000c0aa, 0x000100ac, 0x000140b4, 0x000180f4, 0x0001c134,
407	0x00020174, 0x0002417c, 0x0002817e, 0x0002c1be, 0x000301fe,
408	0x000301fe, 0x000301fe, 0x000301fe, 0x000301fe, 0x000301fe,
409	0x000301fe, 0x000301fe, 0x000301fe, 0x000301fe, 0x0a1aa000
410};
411
412static const struct athn_gain ar9287_1_1_tx_gain = {
413	__arraycount(ar9287_1_1_tx_gain_regs),
414	ar9287_1_1_tx_gain_regs,
415	NULL,	/* 2GHz only. */
416	ar9287_1_1_tx_gain_vals_2g
417};
418
419/*
420 * AR9287 1.1 Rx gains.
421 */
422static const uint16_t ar9287_1_1_rx_gain_regs[] = {
423	P(0x09a00), P(0x09a04), P(0x09a08), P(0x09a0c), P(0x09a10),
424	P(0x09a14), P(0x09a18), P(0x09a1c), P(0x09a20), P(0x09a24),
425	P(0x09a28), P(0x09a2c), P(0x09a30), P(0x09a34), P(0x09a38),
426	P(0x09a3c), P(0x09a40), P(0x09a44), P(0x09a48), P(0x09a4c),
427	P(0x09a50), P(0x09a54), P(0x09a58), P(0x09a5c), P(0x09a60),
428	P(0x09a64), P(0x09a68), P(0x09a6c), P(0x09a70), P(0x09a74),
429	P(0x09a78), P(0x09a7c), P(0x09a80), P(0x09a84), P(0x09a88),
430	P(0x09a8c), P(0x09a90), P(0x09a94), P(0x09a98), P(0x09a9c),
431	P(0x09aa0), P(0x09aa4), P(0x09aa8), P(0x09aac), P(0x09ab0),
432	P(0x09ab4), P(0x09ab8), P(0x09abc), P(0x09ac0), P(0x09ac4),
433	P(0x09ac8), P(0x09acc), P(0x09ad0), P(0x09ad4), P(0x09ad8),
434	P(0x09adc), P(0x09ae0), P(0x09ae4), P(0x09ae8), P(0x09aec),
435	P(0x09af0), P(0x09af4), P(0x09af8), P(0x09afc), P(0x09b00),
436	P(0x09b04), P(0x09b08), P(0x09b0c), P(0x09b10), P(0x09b14),
437	P(0x09b18), P(0x09b1c), P(0x09b20), P(0x09b24), P(0x09b28),
438	P(0x09b2c), P(0x09b30), P(0x09b34), P(0x09b38), P(0x09b3c),
439	P(0x09b40), P(0x09b44), P(0x09b48), P(0x09b4c), P(0x09b50),
440	P(0x09b54), P(0x09b58), P(0x09b5c), P(0x09b60), P(0x09b64),
441	P(0x09b68), P(0x09b6c), P(0x09b70), P(0x09b74), P(0x09b78),
442	P(0x09b7c), P(0x09b80), P(0x09b84), P(0x09b88), P(0x09b8c),
443	P(0x09b90), P(0x09b94), P(0x09b98), P(0x09b9c), P(0x09ba0),
444	P(0x09ba4), P(0x09ba8), P(0x09bac), P(0x09bb0), P(0x09bb4),
445	P(0x09bb8), P(0x09bbc), P(0x09bc0), P(0x09bc4), P(0x09bc8),
446	P(0x09bcc), P(0x09bd0), P(0x09bd4), P(0x09bd8), P(0x09bdc),
447	P(0x09be0), P(0x09be4), P(0x09be8), P(0x09bec), P(0x09bf0),
448	P(0x09bf4), P(0x09bf8), P(0x09bfc), P(0x0aa00), P(0x0aa04),
449	P(0x0aa08), P(0x0aa0c), P(0x0aa10), P(0x0aa14), P(0x0aa18),
450	P(0x0aa1c), P(0x0aa20), P(0x0aa24), P(0x0aa28), P(0x0aa2c),
451	P(0x0aa30), P(0x0aa34), P(0x0aa38), P(0x0aa3c), P(0x0aa40),
452	P(0x0aa44), P(0x0aa48), P(0x0aa4c), P(0x0aa50), P(0x0aa54),
453	P(0x0aa58), P(0x0aa5c), P(0x0aa60), P(0x0aa64), P(0x0aa68),
454	P(0x0aa6c), P(0x0aa70), P(0x0aa74), P(0x0aa78), P(0x0aa7c),
455	P(0x0aa80), P(0x0aa84), P(0x0aa88), P(0x0aa8c), P(0x0aa90),
456	P(0x0aa94), P(0x0aa98), P(0x0aa9c), P(0x0aaa0), P(0x0aaa4),
457	P(0x0aaa8), P(0x0aaac), P(0x0aab0), P(0x0aab4), P(0x0aab8),
458	P(0x0aabc), P(0x0aac0), P(0x0aac4), P(0x0aac8), P(0x0aacc),
459	P(0x0aad0), P(0x0aad4), P(0x0aad8), P(0x0aadc), P(0x0aae0),
460	P(0x0aae4), P(0x0aae8), P(0x0aaec), P(0x0aaf0), P(0x0aaf4),
461	P(0x0aaf8), P(0x0aafc), P(0x0ab00), P(0x0ab04), P(0x0ab08),
462	P(0x0ab0c), P(0x0ab10), P(0x0ab14), P(0x0ab18), P(0x0ab1c),
463	P(0x0ab20), P(0x0ab24), P(0x0ab28), P(0x0ab2c), P(0x0ab30),
464	P(0x0ab34), P(0x0ab38), P(0x0ab3c), P(0x0ab40), P(0x0ab44),
465	P(0x0ab48), P(0x0ab4c), P(0x0ab50), P(0x0ab54), P(0x0ab58),
466	P(0x0ab5c), P(0x0ab60), P(0x0ab64), P(0x0ab68), P(0x0ab6c),
467	P(0x0ab70), P(0x0ab74), P(0x0ab78), P(0x0ab7c), P(0x0ab80),
468	P(0x0ab84), P(0x0ab88), P(0x0ab8c), P(0x0ab90), P(0x0ab94),
469	P(0x0ab98), P(0x0ab9c), P(0x0aba0), P(0x0aba4), P(0x0aba8),
470	P(0x0abac), P(0x0abb0), P(0x0abb4), P(0x0abb8), P(0x0abbc),
471	P(0x0abc0), P(0x0abc4), P(0x0abc8), P(0x0abcc), P(0x0abd0),
472	P(0x0abd4), P(0x0abd8), P(0x0abdc), P(0x0abe0), P(0x0abe4),
473	P(0x0abe8), P(0x0abec), P(0x0abf0), P(0x0abf4), P(0x0abf8),
474	P(0x0abfc), P(0x09848), P(0x0a848)
475};
476
477static const uint32_t ar9287_1_1_rx_gain_vals_2g[] = {
478	0x0000a120, 0x0000a124, 0x0000a128, 0x0000a12c, 0x0000a130,
479	0x0000a194, 0x0000a198, 0x0000a20c, 0x0000a210, 0x0000a284,
480	0x0000a288, 0x0000a28c, 0x0000a290, 0x0000a294, 0x0000a2a0,
481	0x0000a2a4, 0x0000a2a8, 0x0000a2ac, 0x0000a2b0, 0x0000a2b4,
482	0x0000a2b8, 0x0000a2c4, 0x0000a708, 0x0000a70c, 0x0000a710,
483	0x0000ab04, 0x0000ab08, 0x0000ab0c, 0x0000ab10, 0x0000ab14,
484	0x0000ab18, 0x0000ab8c, 0x0000ab90, 0x0000ab94, 0x0000ab98,
485	0x0000aba4, 0x0000aba8, 0x0000cb04, 0x0000cb08, 0x0000cb0c,
486	0x0000cb10, 0x0000cb14, 0x0000cb18, 0x0000cb8c, 0x0000cb90,
487	0x0000cf18, 0x0000cf24, 0x0000cf28, 0x0000d314, 0x0000d318,
488	0x0000d38c, 0x0000d390, 0x0000d394, 0x0000d398, 0x0000d3a4,
489	0x0000d3a8, 0x0000d3ac, 0x0000d3b0, 0x0000f380, 0x0000f384,
490	0x0000f388, 0x0000f710, 0x0000f714, 0x0000f718, 0x0000fb10,
491	0x0000fb14, 0x0000fb18, 0x0000fb8c, 0x0000fb90, 0x0000fb94,
492	0x0000ff8c, 0x0000ff90, 0x0000ff94, 0x0000ffa0, 0x0000ffa4,
493	0x0000ffa8, 0x0000ffac, 0x0000ffb0, 0x0000ffb4, 0x0000ffa1,
494	0x0000ffa5, 0x0000ffa9, 0x0000ffad, 0x0000ffb1, 0x0000ffb5,
495	0x0000ffb9, 0x0000ffc5, 0x0000ffc9, 0x0000ffcd, 0x0000ffd1,
496	0x0000ffd5, 0x0000ffc2, 0x0000ffc6, 0x0000ffca, 0x0000ffce,
497	0x0000ffd2, 0x0000ffd6, 0x0000ffda, 0x0000ffc7, 0x0000ffcb,
498	0x0000ffcf, 0x0000ffd3, 0x0000ffd7, 0x0000ffdb, 0x0000ffdb,
499	0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb,
500	0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb,
501	0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb,
502	0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb,
503	0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000a120, 0x0000a124,
504	0x0000a128, 0x0000a12c, 0x0000a130, 0x0000a194, 0x0000a198,
505	0x0000a20c, 0x0000a210, 0x0000a284, 0x0000a288, 0x0000a28c,
506	0x0000a290, 0x0000a294, 0x0000a2a0, 0x0000a2a4, 0x0000a2a8,
507	0x0000a2ac, 0x0000a2b0, 0x0000a2b4, 0x0000a2b8, 0x0000a2c4,
508	0x0000a708, 0x0000a70c, 0x0000a710, 0x0000ab04, 0x0000ab08,
509	0x0000ab0c, 0x0000ab10, 0x0000ab14, 0x0000ab18, 0x0000ab8c,
510	0x0000ab90, 0x0000ab94, 0x0000ab98, 0x0000aba4, 0x0000aba8,
511	0x0000cb04, 0x0000cb08, 0x0000cb0c, 0x0000cb10, 0x0000cb14,
512	0x0000cb18, 0x0000cb8c, 0x0000cb90, 0x0000cf18, 0x0000cf24,
513	0x0000cf28, 0x0000d314, 0x0000d318, 0x0000d38c, 0x0000d390,
514	0x0000d394, 0x0000d398, 0x0000d3a4, 0x0000d3a8, 0x0000d3ac,
515	0x0000d3b0, 0x0000f380, 0x0000f384, 0x0000f388, 0x0000f710,
516	0x0000f714, 0x0000f718, 0x0000fb10, 0x0000fb14, 0x0000fb18,
517	0x0000fb8c, 0x0000fb90, 0x0000fb94, 0x0000ff8c, 0x0000ff90,
518	0x0000ff94, 0x0000ffa0, 0x0000ffa4, 0x0000ffa8, 0x0000ffac,
519	0x0000ffb0, 0x0000ffb4, 0x0000ffa1, 0x0000ffa5, 0x0000ffa9,
520	0x0000ffad, 0x0000ffb1, 0x0000ffb5, 0x0000ffb9, 0x0000ffc5,
521	0x0000ffc9, 0x0000ffcd, 0x0000ffd1, 0x0000ffd5, 0x0000ffc2,
522	0x0000ffc6, 0x0000ffca, 0x0000ffce, 0x0000ffd2, 0x0000ffd6,
523	0x0000ffda, 0x0000ffc7, 0x0000ffcb, 0x0000ffcf, 0x0000ffd3,
524	0x0000ffd7, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb,
525	0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb,
526	0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb,
527	0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb,
528	0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb,
529	0x0000ffdb, 0x00001067, 0x00001067
530};
531
532static const struct athn_gain ar9287_1_1_rx_gain = {
533	__arraycount(ar9287_1_1_rx_gain_regs),
534	ar9287_1_1_rx_gain_regs,
535	NULL,	/* 2GHz only. */
536	ar9287_1_1_rx_gain_vals_2g
537};
538
539#endif /* _ARN9287REG_H_ */
540