1 /* $OpenBSD: if_otusreg.h,v 1.9 2013/11/26 20:33:18 deraadt Exp $ */
4 * Copyright (c) 2009 Damien Bergamini <damien.bergamini@free.fr>
5 * Copyright (c) 2007-2008 Atheros Communications, Inc.
6 * Copyright (c) 2015 Adrian Chadd <adrian@FreeBSD.org>
8 * Permission to use, copy, modify, and 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.
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.
22 #ifndef __IF_OTUSREG_H__
23 #define __IF_OTUSREG_H__
25 /* USB Endpoints addresses. */
26 #define AR_EPT_BULK_TX_NO (UE_DIR_OUT | 1)
27 #define AR_EPT_BULK_RX_NO (UE_DIR_IN | 2)
28 #define AR_EPT_INTR_RX_NO (UE_DIR_IN | 3)
29 #define AR_EPT_INTR_TX_NO (UE_DIR_OUT | 4)
32 #define AR_FW_DOWNLOAD 0x30
33 #define AR_FW_DOWNLOAD_COMPLETE 0x31
35 /* Maximum number of writes that can fit in a single FW command is 7. */
36 #define AR_MAX_WRITE_IDX 6 /* 56 bytes */
38 #define AR_FW_INIT_ADDR 0x102800
39 #define AR_FW_MAIN_ADDR 0x200000
40 #define AR_USB_MODE_CTRL 0x1e1108
43 * AR9170 MAC registers.
45 #define AR_MAC_REG_BASE 0x1c3000
46 #define AR_MAC_REG_DMA_TRIGGER (AR_MAC_REG_BASE + 0xd30)
47 #define AR_MAC_REG_MAC_ADDR_L (AR_MAC_REG_BASE + 0x610)
48 #define AR_MAC_REG_MAC_ADDR_H (AR_MAC_REG_BASE + 0x614)
49 #define AR_MAC_REG_BSSID_L (AR_MAC_REG_BASE + 0x618)
50 #define AR_MAC_REG_BSSID_H (AR_MAC_REG_BASE + 0x61c)
51 #define AR_MAC_REG_GROUP_HASH_TBL_L (AR_MAC_REG_BASE + 0x624)
52 #define AR_MAC_REG_GROUP_HASH_TBL_H (AR_MAC_REG_BASE + 0x628)
53 #define AR_MAC_REG_RX_TIMEOUT (AR_MAC_REG_BASE + 0x62c)
54 #define AR_MAC_REG_BASIC_RATE (AR_MAC_REG_BASE + 0x630)
55 #define AR_MAC_REG_MANDATORY_RATE (AR_MAC_REG_BASE + 0x634)
56 #define AR_MAC_REG_RTS_CTS_RATE (AR_MAC_REG_BASE + 0x638)
57 #define AR_MAC_REG_BACKOFF_PROTECT (AR_MAC_REG_BASE + 0x63c)
58 #define AR_MAC_REG_RX_THRESHOLD (AR_MAC_REG_BASE + 0x640)
59 #define AR_MAC_REG_RX_PE_DELAY (AR_MAC_REG_BASE + 0x64c)
60 #define AR_MAC_REG_DYNAMIC_SIFS_ACK (AR_MAC_REG_BASE + 0x658)
61 #define AR_MAC_REG_SNIFFER (AR_MAC_REG_BASE + 0x674)
62 #define AR_MAC_SNIFFER_DEFAULTS 0x02000000
63 #define AR_MAC_SNIFFER_ENABLE_PROMISC 0x1
64 #define AR_MAC_REG_ENCRYPTION (AR_MAC_REG_BASE + 0x678)
65 #define AR_MAC_REG_MISC_680 (AR_MAC_REG_BASE + 0x680)
66 #define AR_MAC_REG_FRAMETYPE_FILTER (AR_MAC_REG_BASE + 0x68c)
67 #define AR_MAC_REG_ACK_EXTENSION (AR_MAC_REG_BASE + 0x690)
68 #define AR_MAC_REG_ACK_TPC (AR_MAC_REG_BASE + 0x694)
69 #define AR_MAC_REG_EIFS_AND_SIFS (AR_MAC_REG_BASE + 0x698)
70 #define AR_MAC_REG_BUSY (AR_MAC_REG_BASE + 0x6e8)
71 #define AR_MAC_REG_BUSY_EXT (AR_MAC_REG_BASE + 0x6ec)
72 #define AR_MAC_REG_SLOT_TIME (AR_MAC_REG_BASE + 0x6f0)
73 #define AR_MAC_REG_CAM_MODE (AR_MAC_REG_BASE + 0x700)
74 #define AR_MAC_CAM_DEFAULTS (0xf << 24)
75 #define AR_MAC_CAM_IBSS 0xe0
76 #define AR_MAC_CAM_AP 0xa1
77 #define AR_MAC_CAM_STA 0x2
78 #define AR_MAC_CAM_AP_WDS 0x3
79 #define AR_MAC_REG_AC0_CW (AR_MAC_REG_BASE + 0xb00)
80 #define AR_MAC_REG_AC1_CW (AR_MAC_REG_BASE + 0xb04)
81 #define AR_MAC_REG_AC2_CW (AR_MAC_REG_BASE + 0xb08)
82 #define AR_MAC_REG_AC3_CW (AR_MAC_REG_BASE + 0xb0c)
83 #define AR_MAC_REG_AC4_CW (AR_MAC_REG_BASE + 0xb10)
84 #define AR_MAC_REG_AC1_AC0_AIFS (AR_MAC_REG_BASE + 0xb14)
85 #define AR_MAC_REG_AC3_AC2_AIFS (AR_MAC_REG_BASE + 0xb18)
86 #define AR_MAC_REG_RETRY_MAX (AR_MAC_REG_BASE + 0xb28)
87 #define AR_MAC_REG_TID_CFACK_CFEND_RATE (AR_MAC_REG_BASE + 0xb2c)
88 #define AR_MAC_REG_TXOP_NOT_ENOUGH_INDICATION \
89 (AR_MAC_REG_BASE + 0xb30)
90 #define AR_MAC_REG_TXOP_DURATION (AR_MAC_REG_BASE + 0xb38)
91 #define AR_MAC_REG_AC1_AC0_TXOP (AR_MAC_REG_BASE + 0xb44)
92 #define AR_MAC_REG_AC3_AC2_TXOP (AR_MAC_REG_BASE + 0xb48)
93 #define AR_MAC_REG_AMPDU_FACTOR (AR_MAC_REG_BASE + 0xb9c)
94 #define AR_MAC_REG_FCS_SELECT (AR_MAC_REG_BASE + 0xbb0)
95 #define AR_MAC_REG_RX_CONTROL (AR_MAC_REG_BASE + 0xc40)
96 #define AR_MAC_RX_CTRL_DEAGG 0x1
97 #define AR_MAC_RX_CTRL_SHORT_FILTER 0x2
98 #define AR_MAC_RX_CTRL_SA_DA_SEARCH 0x20
99 #define AR_MAC_RX_CTRL_PASS_TO_HOST (1 << 28)
100 #define AR_MAC_RX_CTRL_ACK_IN_SNIFFER (1 << 30)
102 #define AR_MAC_REG_AMPDU_RX_THRESH (AR_MAC_REG_BASE + 0xc50)
103 #define AR_MAC_REG_OFDM_PHY_ERRORS (AR_MAC_REG_BASE + 0xcb4)
104 #define AR_MAC_REG_CCK_PHY_ERRORS (AR_MAC_REG_BASE + 0xcb8)
105 #define AR_MAC_REG_TXRX_MPI (AR_MAC_REG_BASE + 0xd7c)
106 #define AR_MAC_REG_BCN_HT1 (AR_MAC_REG_BASE + 0xda0)
108 /* Possible values for register AR_USB_MODE_CTRL. */
109 #define AR_USB_DS_ENA (1 << 0)
110 #define AR_USB_US_ENA (1 << 1)
111 #define AR_USB_US_PACKET_MODE (1 << 3)
112 #define AR_USB_RX_STREAM_4K (0 << 4)
113 #define AR_USB_RX_STREAM_8K (1 << 4)
114 #define AR_USB_RX_STREAM_16K (2 << 4)
115 #define AR_USB_RX_STREAM_32K (3 << 4)
116 #define AR_USB_TX_STREAM_MODE (1 << 6)
118 #define AR_LED0_ON (1 << 0)
119 #define AR_LED1_ON (1 << 1)
124 #define AR_PHY_BASE 0x1c5800
125 #define AR_PHY(reg) (AR_PHY_BASE + (reg) * 4)
126 #define AR_PHY_TURBO (AR_PHY_BASE + 0x0004)
127 #define AR_PHY_RF_CTL3 (AR_PHY_BASE + 0x0028)
128 #define AR_PHY_RF_CTL4 (AR_PHY_BASE + 0x0034)
129 #define AR_PHY_SETTLING (AR_PHY_BASE + 0x0044)
130 #define AR_PHY_RXGAIN (AR_PHY_BASE + 0x0048)
131 #define AR_PHY_DESIRED_SZ (AR_PHY_BASE + 0x0050)
132 #define AR_PHY_FIND_SIG (AR_PHY_BASE + 0x0058)
133 #define AR_PHY_AGC_CTL1 (AR_PHY_BASE + 0x005c)
134 #define AR_PHY_SFCORR (AR_PHY_BASE + 0x0068)
135 #define AR_PHY_SFCORR_LOW (AR_PHY_BASE + 0x006c)
136 #define AR_PHY_TIMING_CTRL4 (AR_PHY_BASE + 0x0120)
137 #define AR_PHY_TIMING5 (AR_PHY_BASE + 0x0124)
138 #define AR_PHY_POWER_TX_RATE1 (AR_PHY_BASE + 0x0134)
139 #define AR_PHY_POWER_TX_RATE2 (AR_PHY_BASE + 0x0138)
140 #define AR_PHY_POWER_TX_RATE_MAX (AR_PHY_BASE + 0x013c)
141 #define AR_PHY_SWITCH_CHAIN_0 (AR_PHY_BASE + 0x0160)
142 #define AR_PHY_SWITCH_COM (AR_PHY_BASE + 0x0164)
143 #define AR_PHY_HEAVY_CLIP_ENABLE (AR_PHY_BASE + 0x01e0)
144 #define AR_PHY_CCK_DETECT (AR_PHY_BASE + 0x0a08)
145 #define AR_PHY_GAIN_2GHZ (AR_PHY_BASE + 0x0a0c)
146 #define AR_PHY_POWER_TX_RATE3 (AR_PHY_BASE + 0x0a34)
147 #define AR_PHY_POWER_TX_RATE4 (AR_PHY_BASE + 0x0a38)
148 #define AR_PHY_TPCRG1 (AR_PHY_BASE + 0x0a58)
149 #define AR_PHY_POWER_TX_RATE5 (AR_PHY_BASE + 0x0b8c)
150 #define AR_PHY_POWER_TX_RATE6 (AR_PHY_BASE + 0x0b90)
151 #define AR_PHY_POWER_TX_RATE7 (AR_PHY_BASE + 0x0bcc)
152 #define AR_PHY_POWER_TX_RATE8 (AR_PHY_BASE + 0x0bd0)
153 #define AR_PHY_POWER_TX_RATE9 (AR_PHY_BASE + 0x0bd4)
154 #define AR_PHY_CCA (AR_PHY_BASE + 0x3064)
156 #define AR_SEEPROM_HW_TYPE_OFFSET 0x1374
157 #define AR_EEPROM_OFFSET 0x1600
159 #define AR_BANK4_CHUP (1 << 0)
160 #define AR_BANK4_BMODE_LF_SYNTH_FREQ (1 << 1)
161 #define AR_BANK4_AMODE_REFSEL(x) ((x) << 2)
162 #define AR_BANK4_ADDR(x) ((x) << 5)
165 * Random number generator.
167 #define AR_RAND_REG_BASE 0x1d0000
172 #define AR_GPIO_REG_BASE 0x1d0100
174 #define AR_GPIO_REG_PORT_TYPE (AR_GPIO_REG_BASE + 0x000)
175 #define AR_GPIO_REG_PORT_DATA (AR_GPIO_REG_BASE + 0x004)
176 #define AR_GPIO_PORT_LED_0 1
177 #define AR_GPIO_PORT_LED_1 2
178 /* WPS Button GPIO for TP-Link TL-WN821N */
179 #define AR_GPIO_PORT_WPS_BUTTON_PRESSED 4
184 #define AR_PWR_REG_BASE 0x1d4000
186 #define AR_PWR_REG_RESET (AR_PWR_REG_BASE + 0x004)
187 #define AR_PWR_REG_CLOCK_SEL (AR_PWR_REG_BASE + 0x008)
188 #define AR_PWR_REG_PLL_ADDAC (AR_PWR_REG_BASE + 0x014)
194 #define AR_TX_MAC_RTS (1 << 0)
195 #define AR_TX_MAC_CTS (1 << 1)
196 #define AR_TX_MAC_BACKOFF (1 << 3)
197 #define AR_TX_MAC_NOACK (1 << 2)
198 #define AR_TX_MAC_HW_DUR (1 << 9)
199 #define AR_TX_MAC_QID(qid) ((qid) << 10)
200 #define AR_TX_MAC_RATE_PROBING (1 << 15)
203 /* Modulation type. */
204 #define AR_TX_PHY_MT_CCK 0
205 #define AR_TX_PHY_MT_OFDM 1
206 #define AR_TX_PHY_MT_HT 2
207 #define AR_TX_PHY_GF (1 << 2)
208 #define AR_TX_PHY_BW_SHIFT 3
209 #define AR_TX_PHY_TPC_SHIFT 9
210 #define AR_TX_PHY_ANTMSK(msk) ((msk) << 15)
211 #define AR_TX_PHY_MCS(mcs) ((mcs) << 18)
212 #define AR_TX_PHY_SHGI (1U << 31)
215 /* USB Rx stream mode header. */
219 #define AR_RX_HEAD_TAG 0x4e00
225 uint8_t rssi_ant_ext[3];
226 uint8_t rssi; /* Combined RSSI. */
227 uint8_t evm[2][6]; /* Error Vector Magnitude. */
232 #define AR_RX_ERROR_TIMEOUT (1 << 0)
233 #define AR_RX_ERROR_OVERRUN (1 << 1)
234 #define AR_RX_ERROR_DECRYPT (1 << 2)
235 #define AR_RX_ERROR_FCS (1 << 3)
236 #define AR_RX_ERROR_BAD_RA (1 << 4)
237 #define AR_RX_ERROR_PLCP (1 << 5)
238 #define AR_RX_ERROR_MMIC (1 << 6)
241 /* Modulation type (same as AR_TX_PHY_MT). */
242 #define AR_RX_STATUS_MT_MASK 0x3
243 #define AR_RX_STATUS_MT_CCK 0
244 #define AR_RX_STATUS_MT_OFDM 1
245 #define AR_RX_STATUS_MT_HT 2
246 #define AR_RX_STATUS_SHPREAMBLE (1 << 3)
249 #define AR_PLCP_HDR_LEN 12
250 /* Magic PLCP header for firmware notifications through Rx bulk pipe. */
251 static uint8_t AR_PLCP_HDR_INTR[] = {
252 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
253 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
256 /* Firmware command/reply header. */
260 #define AR_CMD_RREG 0x00
261 #define AR_CMD_WREG 0x01
262 #define AR_CMD_RMEM 0x02
263 #define AR_CMD_WMEM 0x03
264 #define AR_CMD_BITAND 0x04
265 #define AR_CMD_BITOR 0x05
266 #define AR_CMD_EKEY 0x28
267 #define AR_CMD_DKEY 0x29
268 #define AR_CMD_FREQUENCY 0x30
269 #define AR_CMD_RF_INIT 0x31
270 #define AR_CMD_SYNTH 0x32
271 #define AR_CMD_FREQ_STRAT 0x33
272 #define AR_CMD_ECHO 0x80
273 #define AR_CMD_TALLY 0x81
274 #define AR_CMD_TALLY_APD 0x82
275 #define AR_CMD_CONFIG 0x83
276 #define AR_CMD_RESET 0x90
277 #define AR_CMD_DKRESET 0x91
278 #define AR_CMD_DKTX_STATUS 0x92
279 #define AR_CMD_FDC 0xa0
280 #define AR_CMD_WREEPROM 0xb0
281 #define AR_CMD_WFLASH AR_CMD_WREEPROM
282 #define AR_CMD_FLASH_ERASE 0xb1
283 #define AR_CMD_FLASH_PROG 0xb2
284 #define AR_CMD_FLASH_CHKSUM 0xb3
285 #define AR_CMD_FLASH_READ 0xb4
286 #define AR_CMD_FW_DL_INIT 0xb5
287 #define AR_CMD_MEM_WREEPROM 0xbb
288 /* Those have the 2 MSB set to 1. */
289 #define AR_EVT_BEACON 0x00
290 #define AR_EVT_TX_COMP 0x01
291 #define AR_EVT_TBTT 0x02
292 #define AR_EVT_ATIM 0x03
293 #define AR_EVT_DO_BB_RESET 0x09
295 uint16_t token; /* Driver private data. */
298 /* Structure for command AR_CMD_RF_INIT/AR_CMD_FREQUENCY. */
299 struct ar_cmd_frequency {
305 uint32_t dsc_shgi_exp;
306 uint32_t dsc_shgi_man;
307 uint32_t check_loop_count;
310 /* Firmware reply for command AR_CMD_FREQUENCY. */
311 struct ar_rsp_frequency {
313 #define AR_CAL_ERR_AGC (1 << 0) /* AGC cal unfinished. */
314 #define AR_CAL_ERR_NF (1 << 1) /* Noise cal unfinished. */
315 #define AR_CAL_ERR_NF_VAL (1 << 2) /* NF value unexpected. */
317 uint32_t nf[3]; /* Noisefloor. */
318 uint32_t nf_ext[3]; /* Noisefloor ext. */
321 /* Structure for command AR_CMD_EKEY. */
323 uint16_t uid; /* user ID */
326 #define AR_CIPHER_NONE 0
327 #define AR_CIPHER_WEP64 1
328 #define AR_CIPHER_TKIP 2
329 #define AR_CIPHER_AES 4
330 #define AR_CIPHER_WEP128 5
331 #define AR_CIPHER_WEP256 6
332 #define AR_CIPHER_CENC 7
334 uint8_t macaddr[IEEE80211_ADDR_LEN];
338 /* Structure for event AR_EVT_TX_COMP. */
339 struct ar_evt_tx_comp {
340 uint8_t macaddr[IEEE80211_ADDR_LEN];
343 #define AR_TX_STATUS_COMP 0
344 #define AR_TX_STATUS_RETRY_COMP 1
345 #define AR_TX_STATUS_FAILED 2
348 /* List of supported channels. */
349 static const uint8_t ar_chans[] = {
350 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
351 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64, 100, 104, 108,
352 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165
356 * This data is automatically generated from the "otus.ini" file.
357 * It is stored in a different way though, to reduce kernel's .rodata
358 * section overhead (5.1KB instead of 8.5KB).
361 /* NB: apply AR_PHY(). */
362 static const uint16_t ar5416_phy_regs[] = {
363 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, 0x008,
364 0x009, 0x00a, 0x00b, 0x00c, 0x00d, 0x00e, 0x00f, 0x010, 0x011,
365 0x012, 0x013, 0x014, 0x015, 0x016, 0x017, 0x018, 0x01a, 0x01b,
366 0x040, 0x041, 0x042, 0x043, 0x045, 0x046, 0x047, 0x048, 0x049,
367 0x04a, 0x04b, 0x04d, 0x04e, 0x04f, 0x051, 0x052, 0x053, 0x055,
368 0x056, 0x058, 0x059, 0x05c, 0x05d, 0x05e, 0x05f, 0x060, 0x061,
369 0x062, 0x063, 0x064, 0x065, 0x066, 0x067, 0x068, 0x069, 0x06a,
370 0x06b, 0x06c, 0x06d, 0x070, 0x071, 0x072, 0x073, 0x074, 0x075,
371 0x076, 0x077, 0x078, 0x079, 0x07a, 0x07b, 0x07c, 0x07f, 0x080,
372 0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087, 0x088, 0x089,
373 0x08a, 0x08b, 0x08c, 0x08d, 0x08e, 0x08f, 0x090, 0x091, 0x092,
374 0x093, 0x094, 0x095, 0x096, 0x097, 0x098, 0x099, 0x09a, 0x09b,
375 0x09c, 0x09d, 0x09e, 0x09f, 0x0a0, 0x0a1, 0x0a2, 0x0a3, 0x0a4,
376 0x0a5, 0x0a6, 0x0a7, 0x0a8, 0x0a9, 0x0aa, 0x0ab, 0x0ac, 0x0ad,
377 0x0ae, 0x0af, 0x0b0, 0x0b1, 0x0b2, 0x0b3, 0x0b4, 0x0b5, 0x0b6,
378 0x0b7, 0x0b8, 0x0b9, 0x0ba, 0x0bb, 0x0bc, 0x0bd, 0x0be, 0x0bf,
379 0x0c0, 0x0c1, 0x0c2, 0x0c3, 0x0c4, 0x0c5, 0x0c6, 0x0c7, 0x0c8,
380 0x0c9, 0x0ca, 0x0cb, 0x0cc, 0x0cd, 0x0ce, 0x0cf, 0x0d0, 0x0d1,
381 0x0d2, 0x0d3, 0x0d4, 0x0d5, 0x0d6, 0x0d7, 0x0d8, 0x0d9, 0x0da,
382 0x0db, 0x0dc, 0x0dd, 0x0de, 0x0df, 0x0e0, 0x0e1, 0x0e2, 0x0e3,
383 0x0e4, 0x0e5, 0x0e6, 0x0e7, 0x0e8, 0x0e9, 0x0ea, 0x0eb, 0x0ec,
384 0x0ed, 0x0ee, 0x0ef, 0x0f0, 0x0f1, 0x0f2, 0x0f3, 0x0f4, 0x0f5,
385 0x0f6, 0x0f7, 0x0f8, 0x0f9, 0x0fa, 0x0fb, 0x0fc, 0x0fd, 0x0fe,
386 0x0ff, 0x100, 0x103, 0x104, 0x105, 0x106, 0x107, 0x108, 0x109,
387 0x10a, 0x10b, 0x10c, 0x10d, 0x10e, 0x10f, 0x13c, 0x13d, 0x13e,
388 0x13f, 0x280, 0x281, 0x282, 0x283, 0x284, 0x285, 0x286, 0x287,
389 0x288, 0x289, 0x28a, 0x28b, 0x28c, 0x28d, 0x28e, 0x28f, 0x290,
390 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297, 0x298, 0x299,
391 0x29a, 0x29b, 0x29d, 0x29e, 0x29f, 0x2c0, 0x2c1, 0x2c2, 0x2c3,
392 0x2c4, 0x2c5, 0x2c6, 0x2c7, 0x2c8, 0x2c9, 0x2ca, 0x2cb, 0x2cc,
393 0x2cd, 0x2ce, 0x2cf, 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5,
394 0x2d6, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7, 0x2e8, 0x2e9,
395 0x2ea, 0x2eb, 0x2ec, 0x2ed, 0x2ee, 0x2ef, 0x2f0, 0x2f1, 0x2f2,
396 0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7, 0x2f8, 0x412, 0x448, 0x458,
397 0x683, 0x69b, 0x812, 0x848, 0x858, 0xa83, 0xa9b, 0xc19, 0xc57,
398 0xc5a, 0xc6f, 0xe9c, 0xed7, 0xed8, 0xed9, 0xeda, 0xedb, 0xedc,
399 0xedd, 0xede, 0xedf, 0xee0, 0xee1
402 static const uint32_t ar5416_phy_vals_5ghz_20mhz[] = {
403 0x00000007, 0x00000300, 0x00000000, 0xad848e19, 0x7d14e000,
404 0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
405 0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
406 0x00200400, 0x206a002e, 0x1372161e, 0x001a6a65, 0x1284233c,
407 0x6c48b4e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd10,
408 0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
409 0x00000000, 0x000007d0, 0x00000118, 0x10000fff, 0x0510081c,
410 0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
411 0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
412 0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
413 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
414 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
415 0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
416 0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
417 0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
418 0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
419 0x00000000, 0x00000040, 0x00000080, 0x000001a1, 0x000001e1,
420 0x00000021, 0x00000061, 0x00000168, 0x000001a8, 0x000001e8,
421 0x00000028, 0x00000068, 0x00000189, 0x000001c9, 0x00000009,
422 0x00000049, 0x00000089, 0x00000170, 0x000001b0, 0x000001f0,
423 0x00000030, 0x00000070, 0x00000191, 0x000001d1, 0x00000011,
424 0x00000051, 0x00000091, 0x000001b8, 0x000001f8, 0x00000038,
425 0x00000078, 0x00000199, 0x000001d9, 0x00000019, 0x00000059,
426 0x00000099, 0x000000d9, 0x000000f9, 0x000000f9, 0x000000f9,
427 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
428 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
429 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
430 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
431 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
432 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
433 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
434 0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
435 0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
436 0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
437 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
438 0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
439 0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
440 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
441 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
442 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
443 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
444 0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
445 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
446 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
447 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
448 0x00000000, 0x00000008, 0x00000440, 0xd6be4788, 0x012e8160,
449 0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
450 0x00000400, 0x000009b5, 0x00000000, 0x00000108, 0x3f3f3f3f,
451 0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
452 0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
453 0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a9caa,
454 0x1ce739ce, 0x051701ce, 0x18010000, 0x30032602, 0x48073e06,
455 0x560b4c0a, 0x641a600f, 0x7a4f6e1b, 0x8c5b7e5a, 0x9d0f96cf,
456 0xb51fa69f, 0xcb3fbd07, 0x0000d7bf, 0x00000000, 0x00000000,
457 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
458 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
459 0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
460 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
461 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
462 0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
463 0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a65, 0x0510001c,
464 0x00009b40, 0x012e8160, 0x09249126, 0x00180a65, 0x0510001c,
465 0x00009b40, 0x012e8160, 0x09249126, 0x0001c600, 0x004b6a8e,
466 0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
467 0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
468 0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
472 static const uint32_t ar5416_phy_vals_5ghz_40mhz[] = {
473 0x00000007, 0x000003c4, 0x00000000, 0xad848e19, 0x7d14e000,
474 0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
475 0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
476 0x00200400, 0x206a002e, 0x13721c1e, 0x001a6a65, 0x1284233c,
477 0x6c48b4e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd10,
478 0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
479 0x00000000, 0x000007d0, 0x00000230, 0x10000fff, 0x0510081c,
480 0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
481 0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
482 0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
483 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
484 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
485 0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
486 0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
487 0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
488 0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
489 0x00000000, 0x00000040, 0x00000080, 0x000001a1, 0x000001e1,
490 0x00000021, 0x00000061, 0x00000168, 0x000001a8, 0x000001e8,
491 0x00000028, 0x00000068, 0x00000189, 0x000001c9, 0x00000009,
492 0x00000049, 0x00000089, 0x00000170, 0x000001b0, 0x000001f0,
493 0x00000030, 0x00000070, 0x00000191, 0x000001d1, 0x00000011,
494 0x00000051, 0x00000091, 0x000001b8, 0x000001f8, 0x00000038,
495 0x00000078, 0x00000199, 0x000001d9, 0x00000019, 0x00000059,
496 0x00000099, 0x000000d9, 0x000000f9, 0x000000f9, 0x000000f9,
497 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
498 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
499 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
500 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
501 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
502 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
503 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
504 0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
505 0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
506 0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
507 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
508 0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
509 0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
510 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
511 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
512 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
513 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
514 0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
515 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
516 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
517 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
518 0x00000000, 0x00000008, 0x00000440, 0xd6be4788, 0x012e8160,
519 0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
520 0x00000400, 0x000009b5, 0x00000000, 0x00000210, 0x3f3f3f3f,
521 0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
522 0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
523 0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a9caa,
524 0x1ce739ce, 0x051701ce, 0x18010000, 0x30032602, 0x48073e06,
525 0x560b4c0a, 0x641a600f, 0x7a4f6e1b, 0x8c5b7e5a, 0x9d0f96cf,
526 0xb51fa69f, 0xcb3fbcbf, 0x0000d7bf, 0x00000000, 0x00000000,
527 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
528 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
529 0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
530 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
531 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
532 0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
533 0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a65, 0x0510001c,
534 0x00009b40, 0x012e8160, 0x09249126, 0x00180a65, 0x0510001c,
535 0x00009b40, 0x012e8160, 0x09249126, 0x0001c600, 0x004b6a8e,
536 0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
537 0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
538 0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
543 static const uint32_t ar5416_phy_vals_2ghz_40mhz[] = {
544 0x00000007, 0x000003c4, 0x00000000, 0xad848e19, 0x7d14e000,
545 0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
546 0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
547 0x00200400, 0x206a002e, 0x13721c24, 0x00197a68, 0x1284233c,
548 0x6c48b0e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd20,
549 0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
550 0x00000000, 0x00000898, 0x00000268, 0x10000fff, 0x0510001c,
551 0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
552 0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
553 0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
554 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
555 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
556 0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
557 0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
558 0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
559 0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
560 0x00000000, 0x00000040, 0x00000080, 0x00000141, 0x00000181,
561 0x000001c1, 0x00000001, 0x00000041, 0x000001a8, 0x000001e8,
562 0x00000028, 0x00000068, 0x000000a8, 0x00000169, 0x000001a9,
563 0x000001e9, 0x00000029, 0x00000069, 0x00000190, 0x000001d0,
564 0x00000010, 0x00000050, 0x00000090, 0x00000151, 0x00000191,
565 0x000001d1, 0x00000011, 0x00000051, 0x00000198, 0x000001d8,
566 0x00000018, 0x00000058, 0x00000098, 0x00000159, 0x00000199,
567 0x000001d9, 0x00000019, 0x00000059, 0x00000099, 0x000000d9,
568 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
569 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
570 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
571 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
572 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
573 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
574 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
575 0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
576 0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
577 0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
578 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
579 0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
580 0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
581 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
582 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
583 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
584 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
585 0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
586 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
587 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
588 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
589 0x00000000, 0x0000000e, 0x00000440, 0xd03e4788, 0x012a8160,
590 0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
591 0x00000400, 0x000009b5, 0x00000000, 0x00000210, 0x3f3f3f3f,
592 0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
593 0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
594 0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a7caa,
595 0x1ce739ce, 0x051701ce, 0x18010000, 0x2e032402, 0x4a0a3c06,
596 0x621a540b, 0x764f6c1b, 0x845b7a5a, 0x950f8ccf, 0xa5cf9b4f,
597 0xbddfaf1f, 0xd1ffc93f, 0x00000000, 0x00000000, 0x00000000,
598 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
599 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
600 0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
601 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
602 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
603 0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
604 0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a68, 0x0510001c,
605 0x00009b40, 0x012a8160, 0x09249126, 0x00180a68, 0x0510001c,
606 0x00009b40, 0x012a8160, 0x09249126, 0x0001c600, 0x004b6a8e,
607 0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
608 0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
609 0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
613 static const uint32_t ar5416_phy_vals_2ghz_20mhz[] = {
614 0x00000007, 0x00000300, 0x00000000, 0xad848e19, 0x7d14e000,
615 0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
616 0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
617 0x00200400, 0x206a002e, 0x137216a4, 0x00197a68, 0x1284233c,
618 0x6c48b0e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd20,
619 0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
620 0x00000000, 0x00000898, 0x00000134, 0x10000fff, 0x0510001c,
621 0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
622 0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
623 0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
624 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
625 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
626 0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
627 0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
628 0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
629 0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
630 0x00000000, 0x00000040, 0x00000080, 0x00000141, 0x00000181,
631 0x000001c1, 0x00000001, 0x00000041, 0x000001a8, 0x000001e8,
632 0x00000028, 0x00000068, 0x000000a8, 0x00000169, 0x000001a9,
633 0x000001e9, 0x00000029, 0x00000069, 0x00000190, 0x000001d0,
634 0x00000010, 0x00000050, 0x00000090, 0x00000151, 0x00000191,
635 0x000001d1, 0x00000011, 0x00000051, 0x00000198, 0x000001d8,
636 0x00000018, 0x00000058, 0x00000098, 0x00000159, 0x00000199,
637 0x000001d9, 0x00000019, 0x00000059, 0x00000099, 0x000000d9,
638 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
639 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
640 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
641 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
642 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
643 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
644 0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
645 0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
646 0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
647 0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
648 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
649 0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
650 0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
651 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
652 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
653 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
654 0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
655 0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
656 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
657 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
658 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
659 0x00000000, 0x0000000e, 0x00000440, 0xd03e4788, 0x012a8160,
660 0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
661 0x00000400, 0x000009b5, 0x00000000, 0x00000108, 0x3f3f3f3f,
662 0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
663 0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
664 0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a7caa,
665 0x1ce739ce, 0x051701ce, 0x18010000, 0x2e032402, 0x4a0a3c06,
666 0x621a540b, 0x764f6c1b, 0x845b7a5a, 0x950f8ccf, 0xa5cf9b4f,
667 0xbddfaf1f, 0xd1ffc93f, 0x00000000, 0x00000000, 0x00000000,
668 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
669 0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
670 0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
671 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
672 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
673 0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
674 0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a68, 0x0510001c,
675 0x00009b40, 0x012a8160, 0x09249126, 0x00180a68, 0x0510001c,
676 0x00009b40, 0x012a8160, 0x09249126, 0x0001c600, 0x004b6a8e,
677 0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
678 0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
679 0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
682 /* NB: apply AR_PHY(). */
683 static const uint8_t ar5416_banks_regs[] = {
684 0x2c, 0x38, 0x2c, 0x3b, 0x2c, 0x38, 0x3c, 0x2c, 0x3a, 0x2c, 0x39,
685 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
686 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
687 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
688 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
689 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x38, 0x2c, 0x2c,
693 static const uint32_t ar5416_banks_vals_5ghz[] = {
694 0x1e5795e5, 0x02008020, 0x02108421, 0x00000008, 0x0e73ff17,
695 0x00000420, 0x01400018, 0x000001a1, 0x00000001, 0x00000013,
696 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
697 0x00000000, 0x00004000, 0x00006c00, 0x00002c00, 0x00004800,
698 0x00004000, 0x00006000, 0x00001000, 0x00004000, 0x00007c00,
699 0x00007c00, 0x00007c00, 0x00007c00, 0x00007c00, 0x00087c00,
700 0x00007c00, 0x00005400, 0x00000c00, 0x00001800, 0x00007c00,
701 0x00006c00, 0x00006c00, 0x00007c00, 0x00002c00, 0x00003c00,
702 0x00003800, 0x00001c00, 0x00000800, 0x00000408, 0x00004c15,
703 0x00004188, 0x0000201e, 0x00010408, 0x00000801, 0x00000c08,
704 0x0000181e, 0x00001016, 0x00002800, 0x00004010, 0x0000081c,
705 0x00000115, 0x00000015, 0x00000066, 0x0000001c, 0x00000000,
706 0x00000004, 0x00000015, 0x0000001f, 0x00000000, 0x000000a0,
707 0x00000000, 0x00000040, 0x0000001c
710 static const uint32_t ar5416_banks_vals_2ghz[] = {
711 0x1e5795e5, 0x02008020, 0x02108421, 0x00000008, 0x0e73ff17,
712 0x00000420, 0x01c00018, 0x000001a1, 0x00000001, 0x00000013,
713 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
714 0x00000000, 0x00004000, 0x00006c00, 0x00002c00, 0x00004800,
715 0x00004000, 0x00006000, 0x00001000, 0x00004000, 0x00007c00,
716 0x00007c00, 0x00007c00, 0x00007c00, 0x00007c00, 0x00087c00,
717 0x00007c00, 0x00005400, 0x00000c00, 0x00001800, 0x00007c00,
718 0x00006c00, 0x00006c00, 0x00007c00, 0x00002c00, 0x00003c00,
719 0x00003800, 0x00001c00, 0x00000800, 0x00000408, 0x00004c15,
720 0x00004188, 0x0000201e, 0x00010408, 0x00000801, 0x00000c08,
721 0x0000181e, 0x00001016, 0x00002800, 0x00004010, 0x0000081c,
722 0x00000115, 0x00000015, 0x00000066, 0x0000001c, 0x00000000,
723 0x00000004, 0x00000015, 0x0000001f, 0x00000400, 0x000000a0,
724 0x00000000, 0x00000040, 0x0000001c
730 /* Possible flags for opCapFlags. */
731 #define AR5416_OPFLAGS_11A 0x01
732 #define AR5416_OPFLAGS_11G 0x02
733 #define AR5416_OPFLAGS_5G_HT40 0x04
734 #define AR5416_OPFLAGS_2G_HT40 0x08
735 #define AR5416_OPFLAGS_5G_HT20 0x10
736 #define AR5416_OPFLAGS_2G_HT20 0x20
738 #define AR5416_NUM_5G_CAL_PIERS 8
739 #define AR5416_NUM_2G_CAL_PIERS 4
740 #define AR5416_NUM_5G_20_TARGET_POWERS 8
741 #define AR5416_NUM_5G_40_TARGET_POWERS 8
742 #define AR5416_NUM_2G_CCK_TARGET_POWERS 3
743 #define AR5416_NUM_2G_20_TARGET_POWERS 4
744 #define AR5416_NUM_2G_40_TARGET_POWERS 4
745 #define AR5416_NUM_CTLS 24
746 #define AR5416_NUM_BAND_EDGES 8
747 #define AR5416_NUM_PD_GAINS 4
748 #define AR5416_PD_GAIN_ICEPTS 5
749 #define AR5416_EEPROM_MODAL_SPURS 5
750 #define AR5416_MAX_CHAINS 2
752 struct BaseEepHeader {
763 uint16_t blueToothOptions;
765 uint32_t binBuildNumber;
767 uint8_t futureBase[33];
770 struct spurChanStruct {
772 uint8_t spurRangeLow;
773 uint8_t spurRangeHigh;
776 struct ModalEepHeader {
777 uint32_t antCtrlChain[AR5416_MAX_CHAINS];
778 uint32_t antCtrlCommon;
779 int8_t antennaGainCh[AR5416_MAX_CHAINS];
780 uint8_t switchSettling;
781 uint8_t txRxAttenCh[AR5416_MAX_CHAINS];
782 uint8_t rxTxMarginCh[AR5416_MAX_CHAINS];
783 uint8_t adcDesiredSize;
784 int8_t pgaDesiredSize;
785 uint8_t xlnaGainCh[AR5416_MAX_CHAINS];
786 uint8_t txEndToXpaOff;
788 uint8_t txFrameToXpaOn;
790 uint8_t noiseFloorThreshCh[AR5416_MAX_CHAINS];
793 int8_t iqCalICh[AR5416_MAX_CHAINS];
794 int8_t iqCalQCh[AR5416_MAX_CHAINS];
795 uint8_t pdGainOverlap;
799 uint8_t pwrDecreaseFor2Chain;
800 uint8_t pwrDecreaseFor3Chain;
801 uint8_t txFrameToDataStart;
802 uint8_t txFrameToPaOn;
803 uint8_t ht40PowerIncForPdadc;
804 uint8_t bswAtten[AR5416_MAX_CHAINS];
805 uint8_t bswMargin[AR5416_MAX_CHAINS];
806 uint8_t swSettleHt40;
807 uint8_t futureModal[22];
808 struct spurChanStruct spurChans[AR5416_EEPROM_MODAL_SPURS];
811 struct calDataPerFreq {
812 uint8_t pwrPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
813 uint8_t vpdPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
816 struct CalTargetPowerLegacy {
821 struct CalTargetPowerHt {
832 struct CalCtlEdges ctlEdges[AR5416_MAX_CHAINS][AR5416_NUM_BAND_EDGES];
835 struct ar5416eeprom {
836 struct BaseEepHeader baseEepHeader;
837 uint8_t custData[64];
838 struct ModalEepHeader modalHeader[2];
839 uint8_t calFreqPier5G[AR5416_NUM_5G_CAL_PIERS];
840 uint8_t calFreqPier2G[AR5416_NUM_2G_CAL_PIERS];
841 struct calDataPerFreq calPierData5G[AR5416_MAX_CHAINS]
842 [AR5416_NUM_5G_CAL_PIERS];
843 struct calDataPerFreq calPierData2G[AR5416_MAX_CHAINS]
844 [AR5416_NUM_2G_CAL_PIERS];
845 struct CalTargetPowerLegacy calTPow5G[AR5416_NUM_5G_20_TARGET_POWERS];
846 struct CalTargetPowerHt calTPow5GHT20[AR5416_NUM_5G_20_TARGET_POWERS];
847 struct CalTargetPowerHt calTPow5GHT40[AR5416_NUM_5G_40_TARGET_POWERS];
848 struct CalTargetPowerLegacy calTPowCck[AR5416_NUM_2G_CCK_TARGET_POWERS];
849 struct CalTargetPowerLegacy calTPow2G[AR5416_NUM_2G_20_TARGET_POWERS];
850 struct CalTargetPowerHt calTPow2GHT20[AR5416_NUM_2G_20_TARGET_POWERS];
851 struct CalTargetPowerHt calTPow2GHT40[AR5416_NUM_2G_40_TARGET_POWERS];
852 uint8_t ctlIndex[AR5416_NUM_CTLS];
853 struct CalCtlData ctlData[AR5416_NUM_CTLS];
857 #define OTUS_NUM_CHAINS 2
859 #define OTUS_UID(aid) (IEEE80211_AID(aid) + 4)
861 #define OTUS_MAX_TXCMDSZ 64
862 #define OTUS_RXBUFSZ (8 * 1024)
863 /* Bumped for later A-MSDU and legacy fast-frames TX support */
864 #define OTUS_TXBUFSZ (8 * 1024)
866 /* Default EDCA parameters for when QoS is disabled. */
867 static const struct wmeParams otus_edca_def[WME_NUM_AC] = {
874 #define OTUS_RIDX_CCK1 0
875 #define OTUS_RIDX_OFDM6 4
876 #define OTUS_RIDX_OFDM24 8
877 #define OTUS_RIDX_MAX 11
878 static const struct otus_rate {
896 struct otus_rx_radiotap_header {
897 struct ieee80211_radiotap_header wr_ihdr;
900 uint16_t wr_chan_freq;
901 uint16_t wr_chan_flags;
902 uint8_t wr_antsignal;
905 #define OTUS_RX_RADIOTAP_PRESENT \
906 (1 << IEEE80211_RADIOTAP_FLAGS | \
907 1 << IEEE80211_RADIOTAP_RATE | \
908 1 << IEEE80211_RADIOTAP_CHANNEL | \
909 1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL)
911 struct otus_tx_radiotap_header {
912 struct ieee80211_radiotap_header wt_ihdr;
915 uint16_t wt_chan_freq;
916 uint16_t wt_chan_flags;
919 #define OTUS_TX_RADIOTAP_PRESENT \
920 (1 << IEEE80211_RADIOTAP_FLAGS | \
921 1 << IEEE80211_RADIOTAP_RATE | \
922 1 << IEEE80211_RADIOTAP_CHANNEL)
926 /* Firmware commands */
933 STAILQ_ENTRY(otus_tx_cmd) next_cmd;
938 struct otus_softc *sc;
942 struct ieee80211_node *ni;
943 STAILQ_ENTRY(otus_data) next;
947 struct ieee80211_node ni;
953 #define OTUS_CONFIG_INDEX 0
954 #define OTUS_IFACE_INDEX 0
957 * The carl9170 firmware has the following specification:
976 struct ieee80211vap vap;
977 int (*newstate)(struct ieee80211vap *,
978 enum ieee80211_state, int);
980 #define OTUS_VAP(vap) ((struct otus_vap *)(vap))
981 #define OTUS_NODE(ni) ((struct otus_node *)(ni))
983 #define OTUS_LOCK(sc) mtx_lock(&(sc)->sc_mtx)
984 #define OTUS_UNLOCK(sc) mtx_unlock(&(sc)->sc_mtx)
985 #define OTUS_LOCK_ASSERT(sc) mtx_assert(&(sc)->sc_mtx, MA_OWNED)
986 #define OTUS_UNLOCK_ASSERT(sc) mtx_assert(&(sc)->sc_mtx, MA_NOTOWNED)
988 /* XXX the TX/RX endpoint dump says it's 0x200, (512)? */
989 #define OTUS_MAX_TXSZ 512
990 #define OTUS_MAX_RXSZ 512
991 /* intr/cmd endpoint dump says 0x40 */
992 #define OTUS_MAX_CTRLSZ 64
994 #define OTUS_CMD_LIST_COUNT 32
995 #define OTUS_RX_LIST_COUNT 128
996 #define OTUS_TX_LIST_COUNT 32
999 struct ieee80211com sc_ic;
1000 struct ieee80211_ratectl_tx_stats sc_txs;
1001 struct mbufq sc_snd;
1003 struct usb_device *sc_udev;
1004 int (*sc_newstate)(struct ieee80211com *,
1005 enum ieee80211_state, int);
1006 void (*sc_led_newstate)(struct otus_softc *);
1007 struct usbd_interface *sc_iface;
1010 struct ar5416eeprom eeprom;
1023 struct ieee80211_channel *sc_curchan;
1025 struct task tx_task;
1026 struct timeout_task scan_to;
1027 struct timeout_task calib_to;
1029 /* register batch writes */
1034 /* current firmware message serial / token number */
1037 /* current noisefloor, from SET_FREQUENCY */
1038 int sc_nf[OTUS_NUM_CHAINS];
1040 /* How many pending, active transmit frames */
1041 int sc_tx_n_pending;
1044 const uint32_t *phy_vals;
1049 } __packed write_buf[AR_MAX_WRITE_IDX + 1];
1051 struct otus_data sc_rx[OTUS_RX_LIST_COUNT];
1052 struct otus_data sc_tx[OTUS_TX_LIST_COUNT];
1053 struct otus_tx_cmd sc_cmd[OTUS_CMD_LIST_COUNT];
1055 struct usb_xfer *sc_xfer[OTUS_N_XFER];
1057 STAILQ_HEAD(, otus_data) sc_rx_active;
1058 STAILQ_HEAD(, otus_data) sc_rx_inactive;
1059 STAILQ_HEAD(, otus_data) sc_tx_active[OTUS_N_XFER];
1060 STAILQ_HEAD(, otus_data) sc_tx_inactive;
1061 STAILQ_HEAD(, otus_data) sc_tx_pending[OTUS_N_XFER];
1063 STAILQ_HEAD(, otus_tx_cmd) sc_cmd_active;
1064 STAILQ_HEAD(, otus_tx_cmd) sc_cmd_inactive;
1065 STAILQ_HEAD(, otus_tx_cmd) sc_cmd_pending;
1066 STAILQ_HEAD(, otus_tx_cmd) sc_cmd_waiting;
1069 struct otus_rx_radiotap_header th;
1072 #define sc_rxtap sc_rxtapu.th
1075 struct otus_tx_radiotap_header th;
1078 #define sc_txtap sc_txtapu.th
1081 #endif /* __IF_OTUSREG_H__ */