Home | History | Annotate | Line # | Download | only in ic
      1 /*	$NetBSD: arn9287reg.h,v 1.1 2013/03/30 02:53:02 christos Exp $	*/
      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 (at) 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 
     78 struct 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 
    104 struct 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 
    140 struct 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 
    145 union 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 
    150 struct ar9287_cal_ctl_data {
    151 	struct ar_cal_ctl_edges
    152 	    ctlEdges[AR9287_MAX_CHAINS][AR9287_NUM_BAND_EDGES];
    153 } __packed;
    154 
    155 struct 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  */
    181 static 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
    194 static 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 
    207 static 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 
    219 static 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 
    295 static 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 
    371 static 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  */
    388 static 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 
    400 static 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 
    412 static 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  */
    422 static 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 
    477 static 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 
    532 static 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