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