1 /* $OpenBSD: ar5416reg.h,v 1.7 2019/02/01 16:15:07 stsp Exp $ */ 2 3 /*- 4 * Copyright (c) 2009 Damien Bergamini <damien.bergamini@free.fr> 5 * Copyright (c) 2008-2009 Atheros Communications Inc. 6 * 7 * Permission to use, copy, modify, and/or distribute this software for any 8 * purpose with or without fee is hereby granted, provided that the above 9 * copyright notice and this permission notice appear in all copies. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 #define AR5416_MAX_CHAINS 3 21 22 #define AR5416_PHY_CCA_MIN_GOOD_VAL_2GHZ (-100) 23 #define AR5416_PHY_CCA_MIN_GOOD_VAL_5GHZ (-110) 24 #define AR5416_PHY_CCA_MAX_GOOD_VAL_2GHZ (-80) 25 #define AR5416_PHY_CCA_MAX_GOOD_VAL_5GHZ (-90) 26 27 /* 28 * ROM layout used by AR5416, AR9160 and AR9280. 29 */ 30 #define AR5416_EEP_START_LOC 256 31 #define AR5416_NUM_5G_CAL_PIERS 8 32 #define AR5416_NUM_2G_CAL_PIERS 4 33 #define AR5416_NUM_5G_20_TARGET_POWERS 8 34 #define AR5416_NUM_5G_40_TARGET_POWERS 8 35 #define AR5416_NUM_2G_CCK_TARGET_POWERS 3 36 #define AR5416_NUM_2G_20_TARGET_POWERS 4 37 #define AR5416_NUM_2G_40_TARGET_POWERS 4 38 #define AR5416_NUM_CTLS 24 39 #define AR5416_NUM_BAND_EDGES 8 40 #define AR5416_NUM_PD_GAINS 4 41 #define AR5416_PD_GAINS_IN_MASK 4 42 #define AR5416_PD_GAIN_ICEPTS 5 43 44 struct ar5416_base_eep_header { 45 uint16_t length; 46 uint16_t checksum; 47 uint16_t version; 48 uint8_t opCapFlags; 49 uint8_t eepMisc; 50 uint16_t regDmn[2]; 51 uint8_t macAddr[6]; 52 uint8_t rxMask; 53 uint8_t txMask; 54 uint16_t rfSilent; 55 uint16_t blueToothOptions; 56 uint16_t deviceCap; 57 uint32_t binBuildNumber; 58 uint8_t deviceType; 59 /* End of common header. */ 60 uint8_t pwdclkind; 61 uint8_t fastClk5g; 62 uint8_t divChain; 63 uint8_t rxGainType; 64 #define AR5416_EEP_RXGAIN_23DB_BACKOFF 0 65 #define AR5416_EEP_RXGAIN_13DB_BACKOFF 1 66 #define AR5416_EEP_RXGAIN_ORIG 2 67 68 uint8_t dacHiPwrMode_5G; 69 uint8_t openLoopPwrCntl; 70 uint8_t dacLpMode; 71 uint8_t txGainType; 72 uint8_t rcChainMask; 73 uint8_t desiredScaleCCK; 74 uint8_t pwrTableOffset; 75 uint8_t frac_n_5g; 76 uint8_t futureBase[21]; 77 } __packed; 78 79 struct ar5416_modal_eep_header { 80 uint32_t antCtrlChain[AR5416_MAX_CHAINS]; 81 uint32_t antCtrlCommon; 82 uint8_t antennaGainCh[AR5416_MAX_CHAINS]; 83 uint8_t switchSettling; 84 uint8_t txRxAttenCh[AR5416_MAX_CHAINS]; 85 uint8_t rxTxMarginCh[AR5416_MAX_CHAINS]; 86 uint8_t adcDesiredSize; 87 uint8_t pgaDesiredSize; 88 uint8_t xlnaGainCh[AR5416_MAX_CHAINS]; 89 uint8_t txEndToXpaOff; 90 uint8_t txEndToRxOn; 91 uint8_t txFrameToXpaOn; 92 uint8_t thresh62; 93 uint8_t noiseFloorThreshCh[AR5416_MAX_CHAINS]; 94 uint8_t xpdGain; 95 uint8_t xpd; 96 uint8_t iqCalICh[AR5416_MAX_CHAINS]; 97 uint8_t iqCalQCh[AR5416_MAX_CHAINS]; 98 uint8_t pdGainOverlap; 99 uint8_t ob; 100 uint8_t db; 101 uint8_t xpaBiasLvl; 102 uint8_t pwrDecreaseFor2Chain; 103 uint8_t pwrDecreaseFor3Chain; 104 uint8_t txFrameToDataStart; 105 uint8_t txFrameToPaOn; 106 uint8_t ht40PowerIncForPdadc; 107 uint8_t bswAtten[AR5416_MAX_CHAINS]; 108 uint8_t bswMargin[AR5416_MAX_CHAINS]; 109 uint8_t swSettleHt40; 110 uint8_t xatten2Db[AR5416_MAX_CHAINS]; 111 uint8_t xatten2Margin[AR5416_MAX_CHAINS]; 112 uint8_t ob_ch1; 113 uint8_t db_ch1; 114 uint8_t flagBits; 115 #define AR5416_EEP_FLAG_USEANT1 0x01 116 #define AR5416_EEP_FLAG_FORCEXPAON 0x02 117 #define AR5416_EEP_FLAG_LOCALBIAS 0x04 118 #define AR5416_EEP_FLAG_FEMBANDSELECT 0x08 119 #define AR5416_EEP_FLAG_XLNABUFIN 0x10 120 #define AR5416_EEP_FLAG_XLNAISEL_M 0x60 121 #define AR5416_EEP_FLAG_XLNAISEL_S 5 122 #define AR5416_EEP_FLAG_XLNABUFMODE 0x80 123 124 uint8_t miscBits; 125 #define AR5416_EEP_MISC_TX_DAC_SCALE_CCK_M 0x03 126 #define AR5416_EEP_MISC_TX_DAC_SCALE_CCK_S 0 127 #define AR5416_EEP_MISC_TX_CLIP_M 0xfc 128 #define AR5416_EEP_MISC_TX_CLIP_S 2 129 130 uint16_t xpaBiasLvlFreq[3]; 131 uint8_t futureModal[6]; 132 struct ar_spur_chan spurChans[AR_EEPROM_MODAL_SPURS]; 133 } __packed; 134 135 struct ar5416_cal_data_per_freq { 136 uint8_t pwrPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS]; 137 uint8_t vpdPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS]; 138 } __packed; 139 140 struct ar5416_cal_ctl_data { 141 struct ar_cal_ctl_edges 142 ctlEdges[AR5416_MAX_CHAINS][AR5416_NUM_BAND_EDGES]; 143 } __packed; 144 145 struct ar5416_eeprom { 146 struct ar5416_base_eep_header baseEepHeader; 147 uint8_t custData[64]; 148 struct ar5416_modal_eep_header modalHeader[2]; 149 uint8_t calFreqPier5G[AR5416_NUM_5G_CAL_PIERS]; 150 uint8_t calFreqPier2G[AR5416_NUM_2G_CAL_PIERS]; 151 struct ar5416_cal_data_per_freq 152 calPierData5G[AR5416_MAX_CHAINS][AR5416_NUM_5G_CAL_PIERS]; 153 struct ar5416_cal_data_per_freq 154 calPierData2G[AR5416_MAX_CHAINS][AR5416_NUM_2G_CAL_PIERS]; 155 struct ar_cal_target_power_leg 156 calTargetPower5G[AR5416_NUM_5G_20_TARGET_POWERS]; 157 struct ar_cal_target_power_ht 158 calTargetPower5GHT20[AR5416_NUM_5G_20_TARGET_POWERS]; 159 struct ar_cal_target_power_ht 160 calTargetPower5GHT40[AR5416_NUM_5G_40_TARGET_POWERS]; 161 struct ar_cal_target_power_leg 162 calTargetPowerCck[AR5416_NUM_2G_CCK_TARGET_POWERS]; 163 struct ar_cal_target_power_leg 164 calTargetPower2G[AR5416_NUM_2G_20_TARGET_POWERS]; 165 struct ar_cal_target_power_ht 166 calTargetPower2GHT20[AR5416_NUM_2G_20_TARGET_POWERS]; 167 struct ar_cal_target_power_ht 168 calTargetPower2GHT40[AR5416_NUM_2G_40_TARGET_POWERS]; 169 uint8_t ctlIndex[AR5416_NUM_CTLS]; 170 struct ar5416_cal_ctl_data ctlData[AR5416_NUM_CTLS]; 171 uint8_t padding; 172 } __packed; 173 174 /* Macro to "pack" registers to 16-bit to save some .rodata space. */ 175 #define P(x) (x) 176 177 /* 178 * AR5416 initialization values. 179 */ 180 static const uint16_t ar5416_regs[] = { 181 P(0x01030), P(0x01070), P(0x010b0), P(0x010f0), P(0x08014), 182 P(0x0801c), P(0x08120), P(0x081d0), P(0x09804), P(0x09820), 183 P(0x09824), P(0x09828), P(0x09834), P(0x09838), P(0x09844), 184 P(0x09848), P(0x0a848), P(0x0b848), P(0x09850), P(0x09858), 185 P(0x0985c), P(0x09860), P(0x09864), P(0x09868), P(0x0986c), 186 P(0x09914), P(0x09918), P(0x09924), P(0x09944), P(0x09960), 187 P(0x0a960), P(0x0b960), P(0x09964), P(0x099bc), P(0x099c0), 188 P(0x099c4), P(0x099c8), P(0x099cc), P(0x099d0), P(0x099d4), 189 P(0x099d8), P(0x0a204), P(0x0a208), P(0x0a20c), P(0x0b20c), 190 P(0x0c20c), P(0x0a21c), P(0x0a230), P(0x0a274), P(0x0a300), 191 P(0x0a304), P(0x0a308), P(0x0a30c), P(0x0a310), P(0x0a314), 192 P(0x0a318), P(0x0a31c), P(0x0a320), P(0x0a324), P(0x0a328), 193 P(0x0a32c), P(0x0a330), P(0x0a334) 194 }; 195 196 static const uint32_t ar5416_vals_5g20[] = { 197 0x00000230, 0x00000168, 0x00000e60, 0x0000a000, 0x03e803e8, 198 0x128d93a7, 0x08f04800, 0x00003210, 0x00000300, 0x02020200, 199 0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x1372161e, 200 0x001a6a65, 0x001a6a65, 0x001a6a65, 0x6c48b4e0, 0x7ec82d2e, 201 0x31395d5e, 0x00049d18, 0x0001ce00, 0x409a4190, 0x050cb081, 202 0x000007d0, 0x000001b8, 0xd0058a0b, 0xffb81020, 0x00000900, 203 0x00000900, 0x00000900, 0x00000000, 0x001a0a00, 0x038919be, 204 0x06336f77, 0x6af6532c, 0x08f186c8, 0x00046384, 0x00000000, 205 0x00000000, 0x00000880, 0xd6be4788, 0x002ec1e0, 0x002ec1e0, 206 0x002ec1e0, 0x1883800a, 0x00000000, 0x0a1a9caa, 0x18010000, 207 0x30032602, 0x48073e06, 0x560b4c0a, 0x641a600f, 0x7a4f6e1b, 208 0x8c5b7e5a, 0x9d0f96cf, 0xb51fa69f, 0xcb3fbd07, 0x0000d7bf, 209 0x00000000, 0x00000000, 0x00000000 210 }; 211 212 static const uint32_t ar5416_vals_5g40[] = { 213 0x00000460, 0x000002d0, 0x00001cc0, 0x00014000, 0x07d007d0, 214 0x128d93cf, 0x08f04800, 0x00003210, 0x000003c4, 0x02020200, 215 0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x1372161e, 216 0x001a6a65, 0x001a6a65, 0x001a6a65, 0x6d48b4e0, 0x7ec82d2e, 217 0x3139605e, 0x00049d18, 0x0001ce00, 0x409a4190, 0x050cb081, 218 0x00000fa0, 0x00000370, 0xd0058a0b, 0xffb81020, 0x00000900, 219 0x00000900, 0x00000900, 0x00000000, 0x001a0a00, 0x038919be, 220 0x06336f77, 0x6af6532c, 0x08f186c8, 0x00046384, 0x00000000, 221 0x00000000, 0x00000880, 0xd6be4788, 0x002ec1e0, 0x002ec1e0, 222 0x002ec1e0, 0x1883800a, 0x00000000, 0x0a1a9caa, 0x18010000, 223 0x30032602, 0x48073e06, 0x560b4c0a, 0x641a600f, 0x7a4f6e1b, 224 0x8c5b7e5a, 0x9d0f96cf, 0xb51fa69f, 0xcb3fbcbf, 0x0000d7bf, 225 0x00000000, 0x00000000, 0x00000000 226 }; 227 228 static const uint32_t ar5416_vals_2g40[] = { 229 0x000002c0, 0x00000318, 0x00007c70, 0x00016000, 0x10801600, 230 0x12e013d7, 0x08f04810, 0x0000320a, 0x000003c4, 0x02020200, 231 0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x137216a0, 232 0x00197a68, 0x00197a68, 0x00197a68, 0x6d48b0de, 0x7ec82d2e, 233 0x3139605e, 0x00049d18, 0x0001ce00, 0x409a4190, 0x050cb081, 234 0x00001130, 0x00000268, 0xd0058a0b, 0xffb81020, 0x00012d80, 235 0x00012d80, 0x00012d80, 0x00001120, 0x001a0a00, 0x038919be, 236 0x06336f77, 0x6af6532c, 0x08f186c8, 0x00046384, 0x00000000, 237 0x00000000, 0x00000880, 0xd03e4788, 0x002ac120, 0x002ac120, 238 0x002ac120, 0x1883800a, 0x00000210, 0x0a1a7caa, 0x18010000, 239 0x2e032402, 0x4a0a3c06, 0x621a540b, 0x764f6c1b, 0x845b7a5a, 240 0x950f8ccf, 0xa5cf9b4f, 0xbddfaf1f, 0xd1ffc93f, 0x00000000, 241 0x00000000, 0x00000000, 0x00000000 242 }; 243 244 static const uint32_t ar5416_vals_2g20[] = { 245 0x00000160, 0x0000018c, 0x00003e38, 0x0000b000, 0x08400b00, 246 0x12e013ab, 0x08f04810, 0x0000320a, 0x00000300, 0x02020200, 247 0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x137216a0, 248 0x00197a68, 0x00197a68, 0x00197a68, 0x6c48b0de, 0x7ec82d2e, 249 0x31395d5e, 0x00049d18, 0x0001ce00, 0x409a4190, 0x050cb081, 250 0x00000898, 0x00000134, 0xd0058a0b, 0xffb81020, 0x00012d80, 251 0x00012d80, 0x00012d80, 0x00001120, 0x001a0a00, 0x038919be, 252 0x06336f77, 0x6af6532c, 0x08f186c8, 0x00046384, 0x00000000, 253 0x00000000, 0x00000880, 0xd03e4788, 0x002ac120, 0x002ac120, 254 0x002ac120, 0x1883800a, 0x00000108, 0x0a1a7caa, 0x18010000, 255 0x2e032402, 0x4a0a3c06, 0x621a540b, 0x764f6c1b, 0x845b7a5a, 256 0x950f8ccf, 0xa5cf9b4f, 0xbddfaf1f, 0xd1ffc93f, 0x00000000, 257 0x00000000, 0x00000000, 0x00000000 258 }; 259 260 static const uint16_t ar5416_cm_regs[] = { 261 P(0x0000c), P(0x00030), P(0x00034), P(0x00040), P(0x00044), 262 P(0x00048), P(0x0004c), P(0x00050), P(0x00054), P(0x00800), 263 P(0x00804), P(0x00808), P(0x0080c), P(0x00810), P(0x00814), 264 P(0x00818), P(0x0081c), P(0x00820), P(0x00824), P(0x01040), 265 P(0x01044), P(0x01048), P(0x0104c), P(0x01050), P(0x01054), 266 P(0x01058), P(0x0105c), P(0x01060), P(0x01064), P(0x01230), 267 P(0x01270), P(0x01038), P(0x01078), P(0x010b8), P(0x010f8), 268 P(0x01138), P(0x01178), P(0x011b8), P(0x011f8), P(0x01238), 269 P(0x01278), P(0x012b8), P(0x012f8), P(0x01338), P(0x01378), 270 P(0x013b8), P(0x013f8), P(0x01438), P(0x01478), P(0x014b8), 271 P(0x014f8), P(0x01538), P(0x01578), P(0x015b8), P(0x015f8), 272 P(0x01638), P(0x01678), P(0x016b8), P(0x016f8), P(0x01738), 273 P(0x01778), P(0x017b8), P(0x017f8), P(0x0103c), P(0x0107c), 274 P(0x010bc), P(0x010fc), P(0x0113c), P(0x0117c), P(0x011bc), 275 P(0x011fc), P(0x0123c), P(0x0127c), P(0x012bc), P(0x012fc), 276 P(0x0133c), P(0x0137c), P(0x013bc), P(0x013fc), P(0x0143c), 277 P(0x0147c), P(0x04030), P(0x0403c), P(0x07010), P(0x07038), 278 P(0x08004), P(0x08008), P(0x0800c), P(0x08018), P(0x08020), 279 P(0x08038), P(0x0803c), P(0x08048), P(0x08054), P(0x08058), 280 P(0x0805c), P(0x08060), P(0x08064), P(0x080c0), P(0x080c4), 281 P(0x080c8), P(0x080cc), P(0x080d0), P(0x080d4), P(0x080d8), 282 P(0x080e0), P(0x080e4), P(0x080e8), P(0x080ec), P(0x080f0), 283 P(0x080f4), P(0x080f8), P(0x080fc), P(0x08100), P(0x08104), 284 P(0x08108), P(0x0810c), P(0x08110), P(0x08118), P(0x0811c), 285 P(0x08124), P(0x08128), P(0x0812c), P(0x08130), P(0x08134), 286 P(0x08138), P(0x0813c), P(0x08144), P(0x08168), P(0x0816c), 287 P(0x08170), P(0x08174), P(0x08178), P(0x0817c), P(0x081c4), 288 P(0x081ec), P(0x081f0), P(0x081f4), P(0x081f8), P(0x081fc), 289 P(0x08200), P(0x08204), P(0x08208), P(0x0820c), P(0x08210), 290 P(0x08214), P(0x08218), P(0x0821c), P(0x08220), P(0x08224), 291 P(0x08228), P(0x0822c), P(0x08230), P(0x08234), P(0x08238), 292 P(0x0823c), P(0x08240), P(0x08244), P(0x08248), P(0x0824c), 293 P(0x08250), P(0x08254), P(0x08258), P(0x0825c), P(0x08260), 294 P(0x08264), P(0x08270), P(0x08274), P(0x08278), P(0x0827c), 295 P(0x08284), P(0x08288), P(0x0828c), P(0x08294), P(0x08298), 296 P(0x08300), P(0x08304), P(0x08308), P(0x0830c), P(0x08310), 297 P(0x08314), P(0x08318), P(0x08328), P(0x0832c), P(0x08330), 298 P(0x08334), P(0x08338), P(0x0833c), P(0x08340), P(0x09808), 299 P(0x0980c), P(0x09810), P(0x09814), P(0x0981c), P(0x0982c), 300 P(0x09830), P(0x0983c), P(0x09840), P(0x0984c), P(0x09854), 301 P(0x09900), P(0x09904), P(0x09908), P(0x0990c), P(0x0991c), 302 P(0x09920), P(0x0a920), P(0x0b920), P(0x09928), P(0x0992c), 303 P(0x09934), P(0x09938), P(0x0993c), P(0x09948), P(0x0994c), 304 P(0x09954), P(0x09958), P(0x0c95c), P(0x0c968), P(0x09970), 305 P(0x09974), P(0x09978), P(0x0997c), P(0x09980), P(0x09984), 306 P(0x09988), P(0x0998c), P(0x09990), P(0x09994), P(0x09998), 307 P(0x0999c), P(0x099a0), P(0x099a4), P(0x099a8), P(0x099ac), 308 P(0x099b0), P(0x099dc), P(0x099e0), P(0x099e4), P(0x099e8), 309 P(0x099ec), P(0x099fc), P(0x09b00), P(0x09b04), P(0x09b08), 310 P(0x09b0c), P(0x09b10), P(0x09b14), P(0x09b18), P(0x09b1c), 311 P(0x09b20), P(0x09b24), P(0x09b28), P(0x09b2c), P(0x09b30), 312 P(0x09b34), P(0x09b38), P(0x09b3c), P(0x09b40), P(0x09b44), 313 P(0x09b48), P(0x09b4c), P(0x09b50), P(0x09b54), P(0x09b58), 314 P(0x09b5c), P(0x09b60), P(0x09b64), P(0x09b68), P(0x09b6c), 315 P(0x09b70), P(0x09b74), P(0x09b78), P(0x09b7c), P(0x09b80), 316 P(0x09b84), P(0x09b88), P(0x09b8c), P(0x09b90), P(0x09b94), 317 P(0x09b98), P(0x09b9c), P(0x09ba0), P(0x09ba4), P(0x09ba8), 318 P(0x09bac), P(0x09bb0), P(0x09bb4), P(0x09bb8), P(0x09bbc), 319 P(0x09bc0), P(0x09bc4), P(0x09bc8), P(0x09bcc), P(0x09bd0), 320 P(0x09bd4), P(0x09bd8), P(0x09bdc), P(0x09be0), P(0x09be4), 321 P(0x09be8), P(0x09bec), P(0x09bf0), P(0x09bf4), P(0x09bf8), 322 P(0x09bfc), P(0x0a210), P(0x0a214), P(0x0a218), P(0x0a220), 323 P(0x0a224), P(0x0a228), P(0x0a22c), P(0x0a234), P(0x0a238), 324 P(0x0a23c), P(0x0a240), P(0x0a244), P(0x0a248), P(0x0a24c), 325 P(0x0a250), P(0x0a254), P(0x0a258), P(0x0a25c), P(0x0a260), 326 P(0x0a268), P(0x0a26c), P(0x0b26c), P(0x0c26c), P(0x0d270), 327 P(0x0a278), P(0x0a27c), P(0x0a338), P(0x0a33c), P(0x0a340), 328 P(0x0a344), P(0x0a348), P(0x0a34c), P(0x0a350), P(0x0a354), 329 P(0x0a358), P(0x0d35c), P(0x0d360), P(0x0d364), P(0x0d368), 330 P(0x0d36c), P(0x0d370), P(0x0d374), P(0x0d378), P(0x0d37c), 331 P(0x0d380), P(0x0d384), P(0x0a388), P(0x0a38c), P(0x0a390), 332 P(0x0a394), P(0x0a398), P(0x0a39c), P(0x0a3a0), P(0x0a3a4), 333 P(0x0a3a8), P(0x0a3ac), P(0x0a3b0), P(0x0a3b4), P(0x0a3b8), 334 P(0x0a3bc), P(0x0a3c0), P(0x0a3c4), P(0x0a3c8), P(0x0a3cc), 335 P(0x0a3d0), P(0x0a3d4), P(0x0a3dc), P(0x0a3e0) 336 }; 337 338 static const uint32_t ar5416_cm_vals[] = { 339 0x00000000, 0x00020015, 0x00000005, 0x00000000, 0x00000008, 340 0x00000008, 0x00000010, 0x00000000, 0x0000001f, 0x00000000, 341 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 342 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002ffc0f, 343 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 344 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x00000000, 345 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 346 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 347 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 348 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 349 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 350 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 351 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 352 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 353 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 354 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 355 0x00000000, 0x00000002, 0x00000002, 0x00000000, 0x000004c2, 356 0x00000000, 0x00000000, 0x00000000, 0x00000700, 0x00000000, 357 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 358 0x000fc78f, 0x0000000f, 0x00000000, 0x2a82301a, 0x05dc01e0, 359 0x1f402710, 0x01f40000, 0x00001e00, 0x00000000, 0x00400000, 360 0xffffffff, 0x0000ffff, 0x003f3f3f, 0x00000000, 0x00000000, 361 0x00000000, 0x00000000, 0x00020000, 0x00020000, 0x00000001, 362 0x00000052, 0x00000000, 0x00000168, 0x000100aa, 0x00003210, 363 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 364 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 365 0x32143320, 0xfaa4fa50, 0x00000100, 0x00000000, 0x00000000, 366 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 367 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 368 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 369 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 370 0x00000000, 0x00100000, 0x0010f400, 0x00000100, 0x0001e800, 371 0x00000000, 0x00000000, 0x00000000, 0x400000ff, 0x00080922, 372 0x88000010, 0x00000000, 0x40000000, 0x003e4180, 0x00000000, 373 0x0000002c, 0x0000002c, 0x00000000, 0x00000000, 0x00000000, 374 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 375 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000302, 376 0x00000e00, 0x00070000, 0x00000000, 0x000107ff, 0x00000000, 377 0xad848e19, 0x7d14e000, 0x9c0a9f6b, 0x00000000, 0x0000a000, 378 0x00000000, 0x00200400, 0x206a002e, 0x1284233c, 0x00000859, 379 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000fff, 380 0x05100000, 0x05100000, 0x05100000, 0x00000001, 0x00000004, 381 0x1e1f2022, 0x0a0b0c0d, 0x00000000, 0x9280b212, 0x00020028, 382 0x5d50e188, 0x00081fff, 0x004b6a8e, 0x000003ce, 0x190fb515, 383 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 384 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 385 0x00000000, 0x00000000, 0x00000001, 0x001fff00, 0x00000000, 386 0x03051000, 0x00000000, 0x00000200, 0xaaaaaaaa, 0x3c466478, 387 0x000000aa, 0x00001042, 0x00000000, 0x00000001, 0x00000002, 388 0x00000003, 0x00000004, 0x00000005, 0x00000008, 0x00000009, 389 0x0000000a, 0x0000000b, 0x0000000c, 0x0000000d, 0x00000010, 390 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 391 0x00000018, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 392 0x0000001d, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 393 0x00000024, 0x00000025, 0x00000028, 0x00000029, 0x0000002a, 394 0x0000002b, 0x0000002c, 0x0000002d, 0x00000030, 0x00000031, 395 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000035, 396 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035, 397 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035, 398 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035, 399 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000010, 400 0x0000001a, 0x40806333, 0x00106c10, 0x009c4060, 0x018830c6, 401 0x00000400, 0x00000bb5, 0x00000011, 0x20202020, 0x20202020, 402 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc, 0x00000001, 403 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01, 0xdfa91f01, 404 0x00000000, 0x0e79e5c6, 0x0e79e5c6, 0x0e79e5c6, 0x00820820, 405 0x1ce739ce, 0x051701ce, 0x00000000, 0x00000000, 0x00000000, 406 0x00000000, 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 407 0x79a8aa1f, 0x07ffffef, 0x0fffffe7, 0x17ffffe5, 0x1fffffe4, 408 0x37ffffe3, 0x3fffffe3, 0x57ffffe3, 0x5fffffe2, 0x7fffffe2, 409 0x7f3c7bba, 0xf3307ff0, 0x08000000, 0x20202020, 0x20202020, 410 0x1ce739ce, 0x000001ce, 0x00000001, 0x00000000, 0x00000000, 411 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 412 0x00000000, 0x00000000, 0x00000000, 0x00000246, 0x20202020, 413 0x20202020, 0x20202020, 0x1ce739ce, 0x000001ce 414 }; 415 416 static const struct athn_ini ar5416_ini = { 417 nitems(ar5416_regs), 418 ar5416_regs, 419 ar5416_vals_5g20, 420 ar5416_vals_5g40, 421 ar5416_vals_2g40, 422 ar5416_vals_2g20, 423 nitems(ar5416_cm_regs), 424 ar5416_cm_regs, 425 ar5416_cm_vals 426 }; 427 428 /* 429 * AR9160 initialization values. 430 */ 431 static const uint16_t ar9160_regs[] = { 432 P(0x01030), P(0x01070), P(0x010b0), P(0x010f0), P(0x08014), 433 P(0x0801c), P(0x08120), P(0x081d0), P(0x09804), P(0x09820), 434 P(0x09824), P(0x09828), P(0x09834), P(0x09838), P(0x09844), 435 P(0x09848), P(0x0a848), P(0x0b848), P(0x09850), P(0x09858), 436 P(0x0985c), P(0x09860), P(0x09864), P(0x09868), P(0x0986c), 437 P(0x09914), P(0x09918), P(0x09924), P(0x09944), P(0x09960), 438 P(0x0a960), P(0x0b960), P(0x09964), P(0x0c968), P(0x099bc), 439 P(0x099c0), P(0x099c4), P(0x099c8), P(0x099cc), P(0x099d0), 440 P(0x099d4), P(0x099d8), P(0x0a204), P(0x0a208), P(0x0a20c), 441 P(0x0b20c), P(0x0c20c), P(0x0a21c), P(0x0a230), P(0x0a274), 442 P(0x0a300), P(0x0a304), P(0x0a308), P(0x0a30c), P(0x0a310), 443 P(0x0a314), P(0x0a318), P(0x0a31c), P(0x0a320), P(0x0a324), 444 P(0x0a328), P(0x0a32c), P(0x0a330), P(0x0a334) 445 }; 446 447 static const uint32_t ar9160_vals_5g20[] = { 448 0x00000230, 0x00000168, 0x00000e60, 0x0000a000, 0x03e803e8, 449 0x128d93a7, 0x08f04800, 0x00003210, 0x00000300, 0x02020200, 450 0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x0372161e, 451 0x001a6a65, 0x001a6a65, 0x001a6a65, 0x6c48b4e2, 0x7ec82d2e, 452 0x31395d5e, 0x00048d18, 0x0001ce00, 0x409a40d0, 0x050cb081, 453 0x000007d0, 0x0000000a, 0xd00a8a07, 0xffb81020, 0x00009b40, 454 0x00009b40, 0x00009b40, 0x00001120, 0x000003b5, 0x001a0600, 455 0x038919be, 0x06336f77, 0x6af65329, 0x08f186c8, 0x00046384, 456 0x00000000, 0x00000000, 0x00000880, 0xd6be4788, 0x002fc160, 457 0x002fc160, 0x002fc160, 0x1883800a, 0x00000000, 0x0a1a9caa, 458 0x18010000, 0x30032602, 0x48073e06, 0x560b4c0a, 0x641a600f, 459 0x7a4f6e1b, 0x8c5b7e5a, 0x9d0f96cf, 0xb51fa69f, 0xcb3fbd07, 460 0x0000d7bf, 0x00000000, 0x00000000, 0x00000000 461 }; 462 463 static const uint32_t ar9160_vals_5g40[] = { 464 0x00000460, 0x000002d0, 0x00001cc0, 0x00014000, 0x07d007d0, 465 0x128d93cf, 0x08f04800, 0x00003210, 0x000003c4, 0x02020200, 466 0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x0372161e, 467 0x001a6a65, 0x001a6a65, 0x001a6a65, 0x6d48b4e2, 0x7ec82d2e, 468 0x3139605e, 0x00048d18, 0x0001ce00, 0x409a40d0, 0x050cb081, 469 0x00000fa0, 0x00000014, 0xd00a8a07, 0xffb81020, 0x00009b40, 470 0x00009b40, 0x00009b40, 0x00001120, 0x000003b5, 0x001a0600, 471 0x038919be, 0x06336f77, 0x6af65329, 0x08f186c8, 0x00046384, 472 0x00000000, 0x00000000, 0x00000880, 0xd6be4788, 0x002fc160, 473 0x002fc160, 0x002fc160, 0x1883800a, 0x00000000, 0x0a1a9caa, 474 0x18010000, 0x30032602, 0x48073e06, 0x560b4c0a, 0x641a600f, 475 0x7a4f6e1b, 0x8c5b7e5a, 0x9d0f96cf, 0xb51fa69f, 0xcb3fbcbf, 476 0x0000d7bf, 0x00000000, 0x00000000, 0x00000000 477 }; 478 479 static const uint32_t ar9160_vals_2g40[] = { 480 0x000002c0, 0x00000318, 0x00007c70, 0x00016000, 0x10801600, 481 0x12e013d7, 0x08f04810, 0x0000320a, 0x000003c4, 0x02020200, 482 0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x037216a0, 483 0x00197a68, 0x00197a68, 0x00197a68, 0x6d48b0e2, 0x7ec82d2e, 484 0x3139605e, 0x00048d20, 0x0001ce00, 0x409a40d0, 0x050cb081, 485 0x00001130, 0x00000016, 0xd00a8a0d, 0xffb81020, 0x00009b40, 486 0x00009b40, 0x00009b40, 0x00001120, 0x000003ce, 0x001a0c00, 487 0x038919be, 0x06336f77, 0x6af65329, 0x08f186c8, 0x00046384, 488 0x00000000, 0x00000000, 0x00000880, 0xd03e4788, 0x002ac120, 489 0x002ac120, 0x002ac120, 0x1883800a, 0x00000210, 0x0a1a7caa, 490 0x18010000, 0x2e032402, 0x4a0a3c06, 0x621a540b, 0x764f6c1b, 491 0x845b7a5a, 0x950f8ccf, 0xa5cf9b4f, 0xbddfaf1f, 0xd1ffc93f, 492 0x00000000, 0x00000000, 0x00000000, 0x00000000 493 }; 494 495 static const uint32_t ar9160_vals_2g20[] = { 496 0x00000160, 0x0000018c, 0x00003e38, 0x0000b000, 0x08400b00, 497 0x12e013ab, 0x08f04810, 0x0000320a, 0x00000300, 0x02020200, 498 0x00000e0e, 0x0a020001, 0x00000e0e, 0x00000007, 0x037216a0, 499 0x00197a68, 0x00197a68, 0x00197a68, 0x6c48b0e2, 0x7ec82d2e, 500 0x31395d5e, 0x00048d20, 0x0001ce00, 0x409a40d0, 0x050cb081, 501 0x00000898, 0x0000000b, 0xd00a8a0d, 0xffb81020, 0x00009b40, 502 0x00009b40, 0x00009b40, 0x00001120, 0x000003ce, 0x001a0c00, 503 0x038919be, 0x06336f77, 0x6af65329, 0x08f186c8, 0x00046384, 504 0x00000000, 0x00000000, 0x00000880, 0xd03e4788, 0x002ac120, 505 0x002ac120, 0x002ac120, 0x1883800a, 0x00000108, 0x0a1a7caa, 506 0x18010000, 0x2e032402, 0x4a0a3c06, 0x621a540b, 0x764f6c1b, 507 0x845b7a5a, 0x950f8ccf, 0xa5cf9b4f, 0xbddfaf1f, 0xd1ffc93f, 508 0x00000000, 0x00000000, 0x00000000, 0x00000000 509 }; 510 511 static const uint16_t ar9160_cm_regs[] = { 512 P(0x0000c), P(0x00030), P(0x00034), P(0x00040), P(0x00044), 513 P(0x00048), P(0x0004c), P(0x00050), P(0x00054), P(0x00800), 514 P(0x00804), P(0x00808), P(0x0080c), P(0x00810), P(0x00814), 515 P(0x00818), P(0x0081c), P(0x00820), P(0x00824), P(0x01040), 516 P(0x01044), P(0x01048), P(0x0104c), P(0x01050), P(0x01054), 517 P(0x01058), P(0x0105c), P(0x01060), P(0x01064), P(0x01230), 518 P(0x01270), P(0x01038), P(0x01078), P(0x010b8), P(0x010f8), 519 P(0x01138), P(0x01178), P(0x011b8), P(0x011f8), P(0x01238), 520 P(0x01278), P(0x012b8), P(0x012f8), P(0x01338), P(0x01378), 521 P(0x013b8), P(0x013f8), P(0x01438), P(0x01478), P(0x014b8), 522 P(0x014f8), P(0x01538), P(0x01578), P(0x015b8), P(0x015f8), 523 P(0x01638), P(0x01678), P(0x016b8), P(0x016f8), P(0x01738), 524 P(0x01778), P(0x017b8), P(0x017f8), P(0x0103c), P(0x0107c), 525 P(0x010bc), P(0x010fc), P(0x0113c), P(0x0117c), P(0x011bc), 526 P(0x011fc), P(0x0123c), P(0x0127c), P(0x012bc), P(0x012fc), 527 P(0x0133c), P(0x0137c), P(0x013bc), P(0x013fc), P(0x0143c), 528 P(0x0147c), P(0x04030), P(0x0403c), P(0x07010), P(0x07038), 529 P(0x08004), P(0x08008), P(0x0800c), P(0x08018), P(0x08020), 530 P(0x08038), P(0x0803c), P(0x08048), P(0x08054), P(0x08058), 531 P(0x0805c), P(0x08060), P(0x08064), P(0x080c0), P(0x080c4), 532 P(0x080c8), P(0x080cc), P(0x080d0), P(0x080d4), P(0x080d8), 533 P(0x080e0), P(0x080e4), P(0x080e8), P(0x080ec), P(0x080f0), 534 P(0x080f4), P(0x080f8), P(0x080fc), P(0x08100), P(0x08104), 535 P(0x08108), P(0x0810c), P(0x08110), P(0x08118), P(0x0811c), 536 P(0x08124), P(0x08128), P(0x0812c), P(0x08130), P(0x08134), 537 P(0x08138), P(0x0813c), P(0x08144), P(0x08168), P(0x0816c), 538 P(0x08170), P(0x08174), P(0x08178), P(0x0817c), P(0x081c4), 539 P(0x081ec), P(0x081f0), P(0x081f4), P(0x081f8), P(0x081fc), 540 P(0x08200), P(0x08204), P(0x08208), P(0x0820c), P(0x08210), 541 P(0x08214), P(0x08218), P(0x0821c), P(0x08220), P(0x08224), 542 P(0x08228), P(0x0822c), P(0x08230), P(0x08234), P(0x08238), 543 P(0x0823c), P(0x08240), P(0x08244), P(0x08248), P(0x0824c), 544 P(0x08250), P(0x08254), P(0x08258), P(0x0825c), P(0x08260), 545 P(0x08264), P(0x08270), P(0x08274), P(0x08278), P(0x0827c), 546 P(0x08284), P(0x08288), P(0x0828c), P(0x08294), P(0x08298), 547 P(0x08300), P(0x08304), P(0x08308), P(0x0830c), P(0x08310), 548 P(0x08314), P(0x08318), P(0x08328), P(0x0832c), P(0x08330), 549 P(0x08334), P(0x08338), P(0x0833c), P(0x08340), P(0x09808), 550 P(0x0980c), P(0x09810), P(0x09814), P(0x0981c), P(0x0982c), 551 P(0x09830), P(0x0983c), P(0x09840), P(0x0984c), P(0x09854), 552 P(0x09900), P(0x09904), P(0x09908), P(0x0990c), P(0x0991c), 553 P(0x09920), P(0x0a920), P(0x0b920), P(0x09928), P(0x0992c), 554 P(0x09934), P(0x09938), P(0x0993c), P(0x09948), P(0x0994c), 555 P(0x09954), P(0x09958), P(0x09940), P(0x0c95c), P(0x09970), 556 P(0x09974), P(0x09978), P(0x0997c), P(0x09980), P(0x09984), 557 P(0x09988), P(0x0998c), P(0x09990), P(0x09994), P(0x09998), 558 P(0x0999c), P(0x099a0), P(0x099a4), P(0x099a8), P(0x099ac), 559 P(0x099b0), P(0x099dc), P(0x099e0), P(0x099e4), P(0x099e8), 560 P(0x099ec), P(0x099fc), P(0x09b00), P(0x09b04), P(0x09b08), 561 P(0x09b0c), P(0x09b10), P(0x09b14), P(0x09b18), P(0x09b1c), 562 P(0x09b20), P(0x09b24), P(0x09b28), P(0x09b2c), P(0x09b30), 563 P(0x09b34), P(0x09b38), P(0x09b3c), P(0x09b40), P(0x09b44), 564 P(0x09b48), P(0x09b4c), P(0x09b50), P(0x09b54), P(0x09b58), 565 P(0x09b5c), P(0x09b60), P(0x09b64), P(0x09b68), P(0x09b6c), 566 P(0x09b70), P(0x09b74), P(0x09b78), P(0x09b7c), P(0x09b80), 567 P(0x09b84), P(0x09b88), P(0x09b8c), P(0x09b90), P(0x09b94), 568 P(0x09b98), P(0x09b9c), P(0x09ba0), P(0x09ba4), P(0x09ba8), 569 P(0x09bac), P(0x09bb0), P(0x09bb4), P(0x09bb8), P(0x09bbc), 570 P(0x09bc0), P(0x09bc4), P(0x09bc8), P(0x09bcc), P(0x09bd0), 571 P(0x09bd4), P(0x09bd8), P(0x09bdc), P(0x09be0), P(0x09be4), 572 P(0x09be8), P(0x09bec), P(0x09bf0), P(0x09bf4), P(0x09bf8), 573 P(0x09bfc), P(0x0a210), P(0x0a214), P(0x0a218), P(0x0a220), 574 P(0x0a224), P(0x0a228), P(0x0a22c), P(0x0a234), P(0x0a238), 575 P(0x0a23c), P(0x0a240), P(0x0a244), P(0x0a248), P(0x0a24c), 576 P(0x0a250), P(0x0a254), P(0x0a258), P(0x0a25c), P(0x0a260), 577 P(0x0a268), P(0x0a26c), P(0x0b26c), P(0x0c26c), P(0x0d270), 578 P(0x0a278), P(0x0a27c), P(0x0a338), P(0x0a33c), P(0x0a340), 579 P(0x0a344), P(0x0a348), P(0x0a34c), P(0x0a350), P(0x0a354), 580 P(0x0a358), P(0x0d35c), P(0x0d360), P(0x0d364), P(0x0d368), 581 P(0x0d36c), P(0x0d370), P(0x0d374), P(0x0d378), P(0x0d37c), 582 P(0x0d380), P(0x0d384), P(0x0a388), P(0x0a38c), P(0x0a390), 583 P(0x0a394), P(0x0a398), P(0x0a39c), P(0x0a3a0), P(0x0a3a4), 584 P(0x0a3a8), P(0x0a3ac), P(0x0a3b0), P(0x0a3b4), P(0x0a3b8), 585 P(0x0a3bc), P(0x0a3c0), P(0x0a3c4), P(0x0a3c8), P(0x0a3cc), 586 P(0x0a3d0), P(0x0a3d4), P(0x0a3dc), P(0x0a3e0) 587 }; 588 589 static const uint32_t ar9160_cm_vals[] = { 590 0x00000000, 0x00020015, 0x00000005, 0x00000000, 0x00000008, 591 0x00000008, 0x00000010, 0x00000000, 0x0000001f, 0x00000000, 592 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 593 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x002ffc0f, 594 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 595 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x002ffc0f, 0x00000000, 596 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 597 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 598 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 599 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 600 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 601 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 602 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 603 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 604 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 605 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 606 0x00000000, 0x00000002, 0x00000002, 0x00000020, 0x000004c2, 607 0x00000000, 0x00000000, 0x00000000, 0x00000700, 0x00000000, 608 0x00000000, 0x00000000, 0x40000000, 0x00000000, 0x00000000, 609 0x000fc78f, 0x0000000f, 0x00000000, 0x2a82301a, 0x05dc01e0, 610 0x1f402710, 0x01f40000, 0x00001e00, 0x00000000, 0x00400000, 611 0xffffffff, 0x0000ffff, 0x003f3f3f, 0x00000000, 0x00000000, 612 0x00000000, 0x00000000, 0x00020000, 0x00020000, 0x00000001, 613 0x00000052, 0x00000000, 0x00000168, 0x000100aa, 0x00003210, 614 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 615 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 616 0x32143320, 0xfaa4fa50, 0x00000100, 0x00000000, 0x00000000, 617 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 618 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 619 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 620 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 621 0x00000000, 0x00100000, 0x0010f400, 0x00000100, 0x0001e800, 622 0x00000000, 0x00000000, 0x00000000, 0x400000ff, 0x00080922, 623 0x88a00010, 0x00000000, 0x40000000, 0x003e4180, 0x00000000, 624 0x0000002c, 0x0000002c, 0x00000000, 0x00000000, 0x00000000, 625 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 626 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000302, 627 0x00000e00, 0x00ff0000, 0x00000000, 0x000107ff, 0x00000000, 628 0xad848e19, 0x7d14e000, 0x9c0a9f6b, 0x00000000, 0x0000a000, 629 0x00000000, 0x00200400, 0x206a01ae, 0x1284233c, 0x00000859, 630 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000fff, 631 0x05100000, 0x05100000, 0x05100000, 0x00000001, 0x00000004, 632 0x1e1f2022, 0x0a0b0c0d, 0x00000000, 0x9280b212, 0x00020028, 633 0x5f3ca3de, 0x2108ecff, 0x00750604, 0x004b6a8e, 0x190fb515, 634 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 635 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 636 0x00000000, 0x00000000, 0x00000001, 0x201fff00, 0x006f0000, 637 0x03051000, 0x00000000, 0x00000200, 0xaaaaaaaa, 0x3c466478, 638 0x0cc80caa, 0x00001042, 0x00000000, 0x00000001, 0x00000002, 639 0x00000003, 0x00000004, 0x00000005, 0x00000008, 0x00000009, 640 0x0000000a, 0x0000000b, 0x0000000c, 0x0000000d, 0x00000010, 641 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 642 0x00000018, 0x00000019, 0x0000001a, 0x0000001b, 0x0000001c, 643 0x0000001d, 0x00000020, 0x00000021, 0x00000022, 0x00000023, 644 0x00000024, 0x00000025, 0x00000028, 0x00000029, 0x0000002a, 645 0x0000002b, 0x0000002c, 0x0000002d, 0x00000030, 0x00000031, 646 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000035, 647 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035, 648 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035, 649 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035, 650 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000010, 651 0x0000001a, 0x40806333, 0x00106c10, 0x009c4060, 0x018830c6, 652 0x00000400, 0x001a0bb5, 0x00000000, 0x20202020, 0x20202020, 653 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc, 0x00000001, 654 0x0000e000, 0x00000000, 0x0cc75380, 0x0f0f0f01, 0xdfa91f01, 655 0x00000001, 0x0e79e5c6, 0x0e79e5c6, 0x0e79e5c6, 0x00820820, 656 0x1ce739ce, 0x050701ce, 0x00000000, 0x00000000, 0x00000000, 657 0x00000000, 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 658 0x79bfaa03, 0x07ffffef, 0x0fffffe7, 0x17ffffe5, 0x1fffffe4, 659 0x37ffffe3, 0x3fffffe3, 0x57ffffe3, 0x5fffffe2, 0x7fffffe2, 660 0x7f3c7bba, 0xf3307ff0, 0x0c000000, 0x20202020, 0x20202020, 661 0x1ce739ce, 0x000001ce, 0x00000001, 0x00000000, 0x00000000, 662 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 663 0x00000000, 0x00000000, 0x00000000, 0x00000246, 0x20202020, 664 0x20202020, 0x20202020, 0x1ce739ce, 0x000001ce 665 }; 666 667 static const struct athn_ini ar9160_ini = { 668 nitems(ar9160_regs), 669 ar9160_regs, 670 ar9160_vals_5g20, 671 ar9160_vals_5g40, 672 ar9160_vals_2g40, 673 ar9160_vals_2g20, 674 nitems(ar9160_cm_regs), 675 ar9160_cm_regs, 676 ar9160_cm_vals 677 }; 678 679 /* 680 * BB/RF Gains common to AR5416 and AR9160. 681 */ 682 static const uint32_t ar5416_bb_rfgain_vals_5g[] = { 683 0x00000000, 0x00000040, 0x00000080, 0x000001a1, 0x000001e1, 684 0x00000021, 0x00000061, 0x00000168, 0x000001a8, 0x000001e8, 685 0x00000028, 0x00000068, 0x00000189, 0x000001c9, 0x00000009, 686 0x00000049, 0x00000089, 0x00000170, 0x000001b0, 0x000001f0, 687 0x00000030, 0x00000070, 0x00000191, 0x000001d1, 0x00000011, 688 0x00000051, 0x00000091, 0x000001b8, 0x000001f8, 0x00000038, 689 0x00000078, 0x00000199, 0x000001d9, 0x00000019, 0x00000059, 690 0x00000099, 0x000000d9, 0x000000f9, 0x000000f9, 0x000000f9, 691 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 692 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 693 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 694 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 695 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9 696 }; 697 698 static const uint32_t ar5416_bb_rfgain_vals_2g[] = { 699 0x00000000, 0x00000040, 0x00000080, 0x00000141, 0x00000181, 700 0x000001c1, 0x00000001, 0x00000041, 0x000001a8, 0x000001e8, 701 0x00000028, 0x00000068, 0x000000a8, 0x00000169, 0x000001a9, 702 0x000001e9, 0x00000029, 0x00000069, 0x00000190, 0x000001d0, 703 0x00000010, 0x00000050, 0x00000090, 0x00000151, 0x00000191, 704 0x000001d1, 0x00000011, 0x00000051, 0x00000198, 0x000001d8, 705 0x00000018, 0x00000058, 0x00000098, 0x00000159, 0x00000199, 706 0x000001d9, 0x00000019, 0x00000059, 0x00000099, 0x000000d9, 707 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 708 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 709 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 710 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 711 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9 712 }; 713 714 static const uint32_t ar5416_2_1_addac_vals[] = { 715 0x00000000, 0x00000003, 0x00000000, 0x0000000c, 0x00000000, 716 0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 717 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 718 0x00000000, 0x00000000, 0x00000000, 0x00000060, 0x00000000, 719 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 720 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 721 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 722 0x00000000 723 }; 724 725 static const struct athn_addac ar5416_2_1_addac = { 726 nitems(ar5416_2_1_addac_vals), 727 ar5416_2_1_addac_vals 728 }; 729 730 static const uint32_t ar5416_2_2_addac_vals[] = { 731 0x00000000, 0x00000003, 0x00000000, 0x0000000c, 0x00000000, 732 0x00000030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 733 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 734 0x00000000, 0x00000000, 0x00000000, 0x00000060, 0x00000000, 735 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 736 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 737 0x00000000, 0x00000058, 0x00000000, 0x00000000, 0x00000000, 738 0x00000000 739 }; 740 741 static const struct athn_addac ar5416_2_2_addac = { 742 nitems(ar5416_2_2_addac_vals), 743 ar5416_2_2_addac_vals 744 }; 745 746 static const uint32_t ar9160_1_0_addac_vals[] = { 747 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 748 0x00000000, 0x000000c0, 0x00000018, 0x00000004, 0x00000000, 749 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 750 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 751 0x00000000, 0x000000c0, 0x00000019, 0x00000004, 0x00000000, 752 0x00000000, 0x00000000, 0x00000004, 0x00000003, 0x00000008, 753 0x00000000 754 }; 755 756 static const struct athn_addac ar9160_1_0_addac = { 757 nitems(ar9160_1_0_addac_vals), 758 ar9160_1_0_addac_vals 759 }; 760 761 static const uint32_t ar9160_1_1_addac_vals[] = { 762 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 763 0x00000000, 0x000000c0, 0x00000018, 0x00000004, 0x00000000, 764 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 765 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 766 0x00000000, 0x000000c0, 0x00000019, 0x00000004, 0x00000000, 767 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 768 0x00000000 769 }; 770 771 static const struct athn_addac ar9160_1_1_addac = { 772 nitems(ar9160_1_1_addac_vals), 773 ar9160_1_1_addac_vals 774 }; 775 776 static const uint32_t ar5416_bank6tpc_vals[] = { 777 0x00000000, 0x00000000, 0x00000000, 0x00e00000, 0x005e0000, 778 0x00120000, 0x00620000, 0x00020000, 0x00ff0000, 0x00ff0000, 779 0x00ff0000, 0x40ff0000, 0x005f0000, 0x00870000, 0x00f90000, 780 0x007b0000, 0x00ff0000, 0x00f50000, 0x00dc0000, 0x00110000, 781 0x006100a8, 0x00423022, 0x201400df, 0x00c40002, 0x003000f2, 782 0x00440016, 0x00410040, 0x0001805e, 0x0000c0ab, 0x000000e1, 783 0x00007081, 0x000000d4 784 }; 785 786 static const uint32_t ar9160_bank6tpc_vals[] = { 787 0x00000000, 0x00000000, 0x00000000, 0x00e00000, 0x005e0000, 788 0x00120000, 0x00620000, 0x00020000, 0x00ff0000, 0x00ff0000, 789 0x00ff0000, 0x40ff0000, 0x005f0000, 0x00870000, 0x00f90000, 790 0x007b0000, 0x00ff0000, 0x00f50000, 0x00dc0000, 0x00110000, 791 0x006100a8, 0x00423022, 0x2014008f, 0x00c40002, 0x003000f2, 792 0x00440016, 0x00410040, 0x0001805e, 0x0000c0ab, 0x000000e1, 793 0x00007080, 0x000000d4 794 }; 795 796 static const uint32_t ar5416_bank6_vals[] = { 797 0x00000000, 0x00000000, 0x00000000, 0x00e00000, 0x005e0000, 798 0x00120000, 0x00620000, 0x00020000, 0x00ff0000, 0x00ff0000, 799 0x00ff0000, 0x40ff0000, 0x005f0000, 0x00870000, 0x00f90000, 800 0x007b0000, 0x00ff0000, 0x00f50000, 0x00dc0000, 0x00110000, 801 0x006100a8, 0x004210a2, 0x0014008f, 0x00c40003, 0x003000f2, 802 0x00440016, 0x00410040, 0x0001805e, 0x0000c0ab, 0x000000f1, 803 0x00002081, 0x000000d4 804 }; 805 806 /* 807 * Serializer/Deserializer programming. 808 */ 809 810 static const uint32_t ar5416_serdes_regs[] = { 811 AR_PCIE_SERDES, 812 AR_PCIE_SERDES, 813 AR_PCIE_SERDES, 814 AR_PCIE_SERDES, 815 AR_PCIE_SERDES, 816 AR_PCIE_SERDES, 817 AR_PCIE_SERDES, 818 AR_PCIE_SERDES, 819 AR_PCIE_SERDES, 820 AR_PCIE_SERDES2 821 }; 822 823 static const uint32_t ar5416_serdes_vals[] = { 824 0x9248fc00, 825 0x24924924, 826 /* RX shut off when elecidle is asserted. */ 827 0x28000039, 828 0x53160824, 829 0xe5980579, 830 0x001defff, 831 0x1aaabe40, 832 0xbe105554, 833 0x000e3007, 834 0x00000000 835 }; 836 837 static const struct athn_serdes ar5416_serdes = { 838 nitems(ar5416_serdes_vals), 839 ar5416_serdes_regs, 840 ar5416_serdes_vals, 841 }; 842