if_otusreg.h revision 1.4 1 /* $NetBSD: if_otusreg.h,v 1.4 2013/01/20 21:50:41 christos Exp $ */
2 /* $OpenBSD: if_otusreg.h,v 1.6 2009/04/06 18:17:01 damien Exp $ */
3
4 /*-
5 * Copyright (c) 2009 Damien Bergamini <damien.bergamini (at) free.fr>
6 * Copyright (c) 2007-2008 Atheros Communications, Inc.
7 *
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.
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 #ifndef _IF_OTUSREG_H_
21 #define _IF_OTUSREG_H_
22
23 /* USB Endpoints addresses. */
24 #define AR_EPT_BULK_TX_NO (UE_DIR_OUT | 1)
25 #define AR_EPT_BULK_RX_NO (UE_DIR_IN | 2)
26 #define AR_EPT_INTR_RX_NO (UE_DIR_IN | 3)
27 #define AR_EPT_INTR_TX_NO (UE_DIR_OUT | 4)
28
29 /* USB Requests. */
30 #define AR_FW_DOWNLOAD 0x30
31 #define AR_FW_DOWNLOAD_COMPLETE 0x31
32
33 /* Maximum number of writes that can fit in a single FW command is 7. */
34 #define AR_FW_MAX_WRITES 7 /* 56 bytes */
35
36 #define AR_FW_INIT_ADDR 0x102800
37 #define AR_FW_MAIN_ADDR 0x200000
38
39 /*
40 * AR9170 MAC registers.
41 */
42 #define AR_MAC_REG_BASE 0x1c3000
43 #define AR_MAC_REG_MAC_ADDR_L (AR_MAC_REG_BASE + 0x610)
44 #define AR_MAC_REG_MAC_ADDR_H (AR_MAC_REG_BASE + 0x614)
45 #define AR_MAC_REG_BSSID_L (AR_MAC_REG_BASE + 0x618)
46 #define AR_MAC_REG_BSSID_H (AR_MAC_REG_BASE + 0x61c)
47 #define AR_MAC_REG_GROUP_HASH_TBL_L (AR_MAC_REG_BASE + 0x624)
48 #define AR_MAC_REG_GROUP_HASH_TBL_H (AR_MAC_REG_BASE + 0x628)
49 #define AR_MAC_REG_RX_TIMEOUT (AR_MAC_REG_BASE + 0x62c)
50 #define AR_MAC_REG_BASIC_RATE (AR_MAC_REG_BASE + 0x630)
51 #define AR_MAC_REG_MANDATORY_RATE (AR_MAC_REG_BASE + 0x634)
52 #define AR_MAC_REG_RTS_CTS_RATE (AR_MAC_REG_BASE + 0x638)
53 #define AR_MAC_REG_BACKOFF_PROTECT (AR_MAC_REG_BASE + 0x63c)
54 #define AR_MAC_REG_RX_THRESHOLD (AR_MAC_REG_BASE + 0x640)
55 #define AR_MAC_REG_RX_PE_DELAY (AR_MAC_REG_BASE + 0x64c)
56 #define AR_MAC_REG_DYNAMIC_SIFS_ACK (AR_MAC_REG_BASE + 0x658)
57 #define AR_MAC_REG_SNIFFER (AR_MAC_REG_BASE + 0x674)
58 #define AR_MAC_REG_SNIFFER_ENABLE_PROMISC (1 << 0)
59 #define AR_MAC_REG_SNIFFER_HW_MIC_CHECK 0x02000000
60 #define AR_MAC_REG_SNIFFER_DEFAULTS 0x02000000
61 #define AR_MAC_REG_ENCRYPTION (AR_MAC_REG_BASE + 0x678)
62 #define AR_MAC_REG_ENCRYPTION_RX_SOFTWARE (1 << 3)
63 #define AR_MAC_REG_ENCRYPTION_DEFAULTS 0x00000070
64
65 #define AR_MAC_REG_MISC_680 (AR_MAC_REG_BASE + 0x680)
66 #define AR_MAC_REG_TX_UNDERRUN (AR_MAC_REG_BASE + 0x688)
67
68 #define AR_MAC_REG_FRAMETYPE_FILTER (AR_MAC_REG_BASE + 0x68c)
69 #define AR_MAC_REG_FTF_ASSOC_REQ (1 << 0)
70 #define AR_MAC_REG_FTF_ASSOC_RESP (1 << 1)
71 #define AR_MAC_REG_FTF_REASSOC_REQ (1 << 2)
72 #define AR_MAC_REG_FTF_REASSOC_RESP (1 << 3)
73 #define AR_MAC_REG_FTF_PRB_REQ (1 << 4)
74 #define AR_MAC_REG_FTF_PRB_RESP (1 << 5)
75 #define AR_MAC_REG_FTF_BIT6 (1 << 6)
76 #define AR_MAC_REG_FTF_BIT7 (1 << 7)
77 #define AR_MAC_REG_FTF_BEACON (1 << 8)
78 #define AR_MAC_REG_FTF_ATIM (1 << 9)
79 #define AR_MAC_REG_FTF_DEASSOC (1 << 10)
80 #define AR_MAC_REG_FTF_AUTH (1 << 11)
81 #define AR_MAC_REG_FTF_DEAUTH (1 << 12)
82 #define AR_MAC_REG_FTF_BIT13 (1 << 13)
83 #define AR_MAC_REG_FTF_BIT14 (1 << 14)
84 #define AR_MAC_REG_FTF_BIT15 (1 << 15)
85 #define AR_MAC_REG_FTF_BAR (1 << 24)
86 #define AR_MAC_REG_FTF_BA (1 << 25)
87 #define AR_MAC_REG_FTF_PSPOLL (1 << 26)
88 #define AR_MAC_REG_FTF_RTS (1 << 27)
89 #define AR_MAC_REG_FTF_CTS (1 << 28)
90 #define AR_MAC_REG_FTF_ACK (1 << 29)
91 #define AR_MAC_REG_FTF_CFE (1 << 30)
92 #define AR_MAC_REG_FTF_CFE_ACK (1 << 31)
93 #define AR_MAC_REG_FTF_DEFAULTS 0x0700ffff
94 #define AR_MAC_REG_FTF_MONITOR 0xfd00ffff
95 //#define AR_MAC_REG_FTF_MONITOR 0xff00ffff
96
97 #define AR_MAC_REG_ACK_EXTENSION (AR_MAC_REG_BASE + 0x690)
98 #define AR_MAC_REG_EIFS_AND_SIFS (AR_MAC_REG_BASE + 0x698)
99 #define AR_MAC_REG_BUSY (AR_MAC_REG_BASE + 0x6e8)
100 #define AR_MAC_REG_BUSY_EXT (AR_MAC_REG_BASE + 0x6ec)
101 #define AR_MAC_REG_SLOT_TIME (AR_MAC_REG_BASE + 0x6f0)
102 #define AR_MAC_REG_POWERMANAGEMENT (AR_MAC_REG_BASE + 0x700)
103 #define AR_MAC_REG_POWERMGT_IBSS 0xe0
104 #define AR_MAC_REG_POWERMGT_AP 0xa1
105 #define AR_MAC_REG_POWERMGT_STA 0x02
106 #define AR_MAC_REG_POWERMGT_AP_WDS 0x03
107 #define AR_MAC_REG_POWERMGT_DEFAULTS 0x0f000000
108
109 #define AR_MAC_REG_AC0_CW (AR_MAC_REG_BASE + 0xb00)
110 #define AR_MAC_REG_AC1_CW (AR_MAC_REG_BASE + 0xb04)
111 #define AR_MAC_REG_AC2_CW (AR_MAC_REG_BASE + 0xb08)
112 #define AR_MAC_REG_AC3_CW (AR_MAC_REG_BASE + 0xb0c)
113 #define AR_MAC_REG_AC4_CW (AR_MAC_REG_BASE + 0xb10)
114 #define AR_MAC_REG_AC1_AC0_AIFS (AR_MAC_REG_BASE + 0xb14)
115 #define AR_MAC_REG_AC3_AC2_AIFS (AR_MAC_REG_BASE + 0xb18)
116 #define AR_MAC_REG_RETRY_MAX (AR_MAC_REG_BASE + 0xb28)
117 #define AR_MAC_REG_FCS_SELECT (AR_MAC_REG_BASE + 0xbb0)
118 #define AR_MAC_FCS_SWFCS (1 << 0)
119 #define AR_MAC_FCS_FIFO_PROT (1 << 2)
120
121 #define AR_MAC_REG_TXOP_NOT_ENOUGH_INDICATION \
122 (AR_MAC_REG_BASE + 0xb30)
123 #define AR_MAC_REG_AC1_AC0_TXOP (AR_MAC_REG_BASE + 0xb44)
124 #define AR_MAC_REG_AC3_AC2_TXOP (AR_MAC_REG_BASE + 0xb48)
125
126 #define AR_MAC_REG_AMPDU_FACTOR (AR_MAC_REG_BASE + 0xb9c)
127 #define AR_MAC_REG_AMPDU_DENSITY (AR_MAC_REG_BASE + 0xba0)
128
129 #define AR_MAC_REG_ACK_TABLE (AR_MAC_REG_BASE + 0xc00)
130 #define AR_MAC_REG_AMPDU_RX_THRESH (AR_MAC_REG_BASE + 0xc50)
131
132 #define AR_MAC_REG_OFDM_PHY_ERRORS (AR_MAC_REG_BASE + 0xcb4)
133 #define AR_MAC_REG_CCK_PHY_ERRORS (AR_MAC_REG_BASE + 0xcb8)
134
135 #define AR_MAC_REG_DMA (AR_MAC_REG_BASE + 0xd30)
136 #define AR_MAC_REG_DMA_OFF 0
137 #define AR_MAC_REG_DMA_ENABLE (1 << 8)
138
139 #define AR_MAC_REG_TXRX_MPI (AR_MAC_REG_BASE + 0xd7c)
140 #define AR_MAC_TXRX_MPI_TX_MPI_MASK 0x0000000f
141 #define AR_MAC_TXRX_MPI_TX_TO_MASK 0x0000fff0
142 #define AR_MAC_TXRX_MPI_RX_MPI_MASK 0x000f0000
143 #define AR_MAC_TXRX_MPI_RX_TO_MASK 0xfff00000
144
145 #define AR_MAC_REG_BCN_ADDR (AR_MAC_REG_BASE + 0xd84)
146 #define AR_MAC_REG_BCN_LENGTH (AR_MAC_REG_BASE + 0xd88)
147 #define AR_MAC_REG_BCN_PLCP (AR_MAC_REG_BASE + 0xd90)
148 #define AR_MAC_REG_BCN_CTRL (AR_MAC_REG_BASE + 0xd94)
149 #define AR_MAC_REG_BCN_HT1 (AR_MAC_REG_BASE + 0xda0)
150 #define AR_MAC_REG_BCN_HT2 (AR_MAC_REG_BASE + 0xda4)
151
152 /*
153 * GPIO register
154 */
155 #define AR_GPIO_REG_BASE 0x1d0100
156 #define AR_GPIO_REG_PORT_TYPE (AR_GPIO_REG_BASE + 0)
157 #define AR_GPIO_REG_DATA (AR_GPIO_REG_BASE + 4)
158 #define AR_GPIO_REG_DATA_LED0_ON (1 << 0)
159 #define AR_GPIO_REG_DATA_LED0_OFF (0 << 0)
160 #define AR_GPIO_REG_DATA_LED1_ON (1 << 1)
161 #define AR_GPIO_REG_DATA_LED1_OFF (0 << 1)
162 #define AR_NUM_LEDS 2
163
164 /*
165 * Power register
166 */
167 #define AR_PWR_REG_BASE 0x1d4000
168 #define AR_PWR_REG_CLOCK_SEL (AR_PWR_REG_BASE + 0x008)
169 #define AR_PWR_CLK_AHB_40MHZ 0
170 #define AR_PWR_CLK_AHB_20_22MHZ 1
171 #define AR_PWR_CLK_AHB_40_44MHZ 2
172 #define AR_PWR_CLK_AHB_80_88MHZ 3
173 #define AR_PWR_CLK_DAC_160_INV_DLY 0x70
174
175 /*
176 * USB register
177 */
178 #define AR_USB_REG_BASE 0x1e1000
179 #define AR_USB_REG_DMA_CTL (AR_USB_REG_BASE + 0x108)
180 #define AR_USB_REG_DMA_CTL_ENABLE_TO_DEVICE (1 << 0)
181 #define AR_USB_REG_DMA_CTL_ENABLE_FROM_DEVICE (1 << 1)
182 #define AR_USB_REG_DMA_CTL_HIGH_SPEED (1 << 2)
183 #define AR_USB_REG_DMA_CTL_PACKET_MODE (1 << 3)
184 #define AR_USB_REG_DMA_CTL_RX_STREAM_4K (0 << 4)
185 #define AR_USB_REG_DMA_CTL_RX_STREAM_8K (1 << 4)
186 #define AR_USB_REG_DMA_CTL_RX_STREAM_16K (2 << 4)
187 #define AR_USB_REG_DMA_CTL_RX_STREAM_32K (3 << 4)
188 #define AR_USB_REG_DMA_CTL_TX_STREAM_MODE (1 << 6)
189
190 #define AR_USB_REG_MAX_AGG_UPLOAD (AR_USB_REG_BASE + 0x110)
191 #define AR_USB_REG_UPLOAD_TIME_CTL (AR_USB_REG_BASE + 0x114)
192
193 /* Possible values for register AR_USB_MODE_CTRL. */
194 #define AR_USB_DS_ENA (1 << 0)
195 #define AR_USB_US_ENA (1 << 1)
196 #define AR_USB_US_PACKET_MODE (1 << 3)
197
198 /*
199 * PHY registers.
200 */
201 #define AR_PHY_BASE 0x1c5800
202 #define AR_PHY(reg) (AR_PHY_BASE + (reg) * 4)
203 #define AR_PHY_TURBO (AR_PHY_BASE + 0x0004)
204 #define AR_PHY_RF_CTL3 (AR_PHY_BASE + 0x0028)
205 #define AR_PHY_RF_CTL4 (AR_PHY_BASE + 0x0034)
206 #define AR_PHY_SETTLING (AR_PHY_BASE + 0x0044)
207 #define AR_PHY_RXGAIN (AR_PHY_BASE + 0x0048)
208 #define AR_PHY_DESIRED_SZ (AR_PHY_BASE + 0x0050)
209 #define AR_PHY_FIND_SIG (AR_PHY_BASE + 0x0058)
210 #define AR_PHY_AGC_CTL1 (AR_PHY_BASE + 0x005c)
211 #define AR_PHY_SFCORR (AR_PHY_BASE + 0x0068)
212 #define AR_PHY_SFCORR_LOW (AR_PHY_BASE + 0x006c)
213 #define AR_PHY_TIMING_CTRL4 (AR_PHY_BASE + 0x0120)
214 #define AR_PHY_TIMING5 (AR_PHY_BASE + 0x0124)
215 #define AR_PHY_POWER_TX_RATE1 (AR_PHY_BASE + 0x0134)
216 #define AR_PHY_POWER_TX_RATE2 (AR_PHY_BASE + 0x0138)
217 #define AR_PHY_POWER_TX_RATE_MAX (AR_PHY_BASE + 0x013c)
218 #define AR_PHY_SWITCH_CHAIN_0 (AR_PHY_BASE + 0x0160)
219 #define AR_PHY_SWITCH_COM (AR_PHY_BASE + 0x0164)
220 #define AR_PHY_HEAVY_CLIP_ENABLE (AR_PHY_BASE + 0x01e0)
221 #define AR_PHY_CCK_DETECT (AR_PHY_BASE + 0x0a08)
222 #define AR_PHY_GAIN_2GHZ (AR_PHY_BASE + 0x0a0c)
223 #define AR_PHY_POWER_TX_RATE3 (AR_PHY_BASE + 0x0a34)
224 #define AR_PHY_POWER_TX_RATE4 (AR_PHY_BASE + 0x0a38)
225 #define AR_PHY_TPCRG1 (AR_PHY_BASE + 0x0a58)
226 #define AR_PHY_POWER_TX_RATE5 (AR_PHY_BASE + 0x0b8c)
227 #define AR_PHY_POWER_TX_RATE6 (AR_PHY_BASE + 0x0b90)
228 #define AR_PHY_POWER_TX_RATE7 (AR_PHY_BASE + 0x0bcc)
229 #define AR_PHY_POWER_TX_RATE8 (AR_PHY_BASE + 0x0bd0)
230 #define AR_PHY_POWER_TX_RATE9 (AR_PHY_BASE + 0x0bd4)
231 #define AR_PHY_CCA (AR_PHY_BASE + 0x3064)
232
233 #define AR_SEEPROM_HW_TYPE_OFFSET 0x1374
234 #define AR_EEPROM_OFFSET 0x1600
235
236 #define AR_BANK4_CHUP (1 << 0)
237 #define AR_BANK4_BMODE_LF_SYNTH_FREQ (1 << 1)
238 #define AR_BANK4_AMODE_REFSEL(x) ((x) << 2)
239 #define AR_BANK4_ADDR(x) ((x) << 5)
240
241 /* Tx descriptor. */
242 struct ar_tx_head {
243 uint16_t len;
244 uint16_t macctl;
245 #define AR_TX_MAC_RTS (1 << 0)
246 #define AR_TX_MAC_CTS (1 << 1)
247 #define AR_TX_MAC_BACKOFF (1 << 3)
248 #define AR_TX_MAC_NOACK (1 << 2)
249 #define AR_TX_MAC_HW_DUR (1 << 9)
250 #define AR_TX_MAC_QID(qid) ((qid) << 10)
251 #define AR_TX_MAC_RATE_PROBING (1 << 15)
252
253 uint32_t phyctl;
254 /* Modulation type. */
255 #define AR_TX_PHY_MT_CCK 0
256 #define AR_TX_PHY_MT_OFDM 1
257 #define AR_TX_PHY_MT_HT 2
258 #define AR_TX_PHY_GF (1 << 2)
259 #define AR_TX_PHY_BW_SHIFT 3
260 #define AR_TX_PHY_TPC_SHIFT 9
261 #define AR_TX_PHY_ANTMSK(msk) ((msk) << 15)
262 #define AR_TX_PHY_MCS(mcs) ((mcs) << 18)
263 #define AR_TX_PHY_SHGI (1 << 31)
264 } __packed;
265
266 /* USB Rx stream mode header. */
267 struct ar_rx_head {
268 uint16_t len;
269 uint16_t tag;
270 #define AR_RX_HEAD_TAG 0x4e00
271 } __packed;
272
273 /* Rx descriptor. */
274 struct ar_rx_tail {
275 uint8_t rssi_ant[3];
276 uint8_t rssi_ant_ext[3];
277 uint8_t rssi; /* Combined RSSI. */
278 uint8_t evm[2][6]; /* Error Vector Magnitude. */
279 uint8_t phy_err;
280 uint8_t sa_idx;
281 uint8_t da_idx;
282 uint8_t error;
283 #define AR_RX_ERROR_TIMEOUT (1 << 0)
284 #define AR_RX_ERROR_OVERRUN (1 << 1)
285 #define AR_RX_ERROR_DECRYPT (1 << 2)
286 #define AR_RX_ERROR_FCS (1 << 3)
287 #define AR_RX_ERROR_BAD_RA (1 << 4)
288 #define AR_RX_ERROR_PLCP (1 << 5)
289 #define AR_RX_ERROR_MMIC (1 << 6)
290
291 uint8_t status;
292 /* Modulation type (same as AR_TX_PHY_MT). */
293 #define AR_RX_STATUS_MT_MASK 0x3
294 #define AR_RX_STATUS_MT_CCK 0
295 #define AR_RX_STATUS_MT_OFDM 1
296 #define AR_RX_STATUS_MT_HT 2
297 #define AR_RX_STATUS_SHPREAMBLE (1 << 3)
298 } __packed;
299
300 #define AR_PLCP_HDR_LEN 12
301 /* Magic PLCP header for firmware notifications through Rx bulk pipe. */
302 static uint8_t AR_PLCP_HDR_INTR[] = {
303 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
304 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
305 };
306
307 /* Firmware command/reply header. */
308 struct ar_cmd_hdr {
309 uint8_t len;
310 uint8_t code;
311 #define AR_CMD_RREG 0x00
312 #define AR_CMD_WREG 0x01
313 #define AR_CMD_RMEM 0x02
314 #define AR_CMD_WMEM 0x03
315 #define AR_CMD_BITAND 0x04
316 #define AR_CMD_BITOR 0x05
317 #define AR_CMD_EKEY 0x28
318 #define AR_CMD_DKEY 0x29
319 #define AR_CMD_FREQUENCY 0x30
320 #define AR_CMD_RF_INIT 0x31
321 #define AR_CMD_SYNTH 0x32
322 #define AR_CMD_FREQ_STRAT 0x33
323 #define AR_CMD_ECHO 0x80
324 #define AR_CMD_TALLY 0x81
325 #define AR_CMD_TALLY_APD 0x82
326 #define AR_CMD_CONFIG 0x83
327 #define AR_CMD_RESET 0x90
328 #define AR_CMD_DKRESET 0x91
329 #define AR_CMD_DKTX_STATUS 0x92
330 #define AR_CMD_FDC 0xa0
331 #define AR_CMD_WREEPROM 0xb0
332 #define AR_CMD_WFLASH AR_CMD_WREEPROM
333 #define AR_CMD_FLASH_ERASE 0xb1
334 #define AR_CMD_FLASH_PROG 0xb2
335 #define AR_CMD_FLASH_CHKSUM 0xb3
336 #define AR_CMD_FLASH_READ 0xb4
337 #define AR_CMD_FW_DL_INIT 0xb5
338 #define AR_CMD_MEM_WREEPROM 0xbb
339 /* Those have the 2 MSB set to 1. */
340 #define AR_EVT_BEACON 0x00
341 #define AR_EVT_TX_COMP 0x01
342 #define AR_EVT_TBTT 0x02
343 #define AR_EVT_ATIM 0x03
344
345 uint16_t token; /* Driver private data. */
346 } __packed;
347
348 /* Structure for command AR_CMD_RF_INIT/AR_CMD_FREQUENCY. */
349 struct ar_cmd_frequency {
350 uint32_t freq;
351 uint32_t dynht2040;
352 uint32_t htena;
353 uint32_t dsc_exp;
354 uint32_t dsc_man;
355 uint32_t dsc_shgi_exp;
356 uint32_t dsc_shgi_man;
357 uint32_t check_loop_count;
358 } __packed;
359
360 /* Firmware reply for command AR_CMD_FREQUENCY. */
361 struct ar_rsp_frequency {
362 uint32_t status;
363 #define AR_CAL_ERR_AGC (1 << 0) /* AGC cal unfinished. */
364 #define AR_CAL_ERR_NF (1 << 1) /* Noise cal unfinished. */
365 #define AR_CAL_ERR_NF_VAL (1 << 2) /* NF value unexpected. */
366
367 uint32_t nf[3]; /* Noisefloor. */
368 uint32_t nf_ext[3]; /* Noisefloor ext. */
369 } __packed;
370
371 /* Structure for command AR_CMD_EKEY. */
372 struct ar_cmd_ekey {
373 uint16_t uid; /* user ID */
374 uint16_t kix;
375 uint16_t cipher;
376 #define AR_CIPHER_NONE 0
377 #define AR_CIPHER_WEP64 1
378 #define AR_CIPHER_TKIP 2
379 #define AR_CIPHER_AES 4
380 #define AR_CIPHER_WEP128 5
381 #define AR_CIPHER_WEP256 6
382 #define AR_CIPHER_CENC 7
383
384 uint8_t macaddr[IEEE80211_ADDR_LEN];
385 uint8_t key[16];
386 } __packed;
387
388 /* Structure for event AR_EVT_TX_COMP. */
389 struct ar_evt_tx_comp {
390 uint8_t macaddr[IEEE80211_ADDR_LEN];
391 uint32_t phy;
392 uint16_t status;
393 #define AR_TX_STATUS_COMP 0
394 #define AR_TX_STATUS_RETRY_COMP 1
395 #define AR_TX_STATUS_FAILED 2
396 } __packed;
397
398 /*
399 * EEPROM.
400 */
401 /* Possible flags for opCapFlags. */
402 #define AR5416_OPFLAGS_11A 0x01
403 #define AR5416_OPFLAGS_11G 0x02
404 #define AR5416_OPFLAGS_5G_HT40 0x04
405 #define AR5416_OPFLAGS_2G_HT40 0x08
406 #define AR5416_OPFLAGS_5G_HT20 0x10
407 #define AR5416_OPFLAGS_2G_HT20 0x20
408
409 #define AR5416_NUM_5G_CAL_PIERS 8
410 #define AR5416_NUM_2G_CAL_PIERS 4
411 #define AR5416_NUM_5G_20_TARGET_POWERS 8
412 #define AR5416_NUM_5G_40_TARGET_POWERS 8
413 #define AR5416_NUM_2G_CCK_TARGET_POWERS 3
414 #define AR5416_NUM_2G_20_TARGET_POWERS 4
415 #define AR5416_NUM_2G_40_TARGET_POWERS 4
416 #define AR5416_NUM_CTLS 24
417 #define AR5416_NUM_BAND_EDGES 8
418 #define AR5416_NUM_PD_GAINS 4
419 #define AR5416_PD_GAIN_ICEPTS 5
420 #define AR5416_EEPROM_MODAL_SPURS 5
421 #define AR5416_MAX_CHAINS 2
422
423 typedef struct BaseEepHeader {
424 uint16_t length;
425 uint16_t checksum;
426 uint16_t version;
427 uint8_t opCapFlags;
428 uint8_t eepMisc;
429 uint16_t regDmn[2];
430 uint8_t macAddr[6];
431 uint8_t rxMask;
432 uint8_t txMask;
433 uint16_t rfSilent;
434 uint16_t blueToothOptions;
435 uint16_t deviceCap;
436 uint32_t binBuildNumber;
437 uint8_t deviceType;
438 uint8_t futureBase[33];
439 } __packed BASE_EEP_HEADER;
440
441 typedef struct spurChanStruct {
442 uint16_t spurChan;
443 uint8_t spurRangeLow;
444 uint8_t spurRangeHigh;
445 } __packed SPUR_CHAN;
446
447 typedef struct ModalEepHeader {
448 uint32_t antCtrlChain[AR5416_MAX_CHAINS];
449 uint32_t antCtrlCommon;
450 int8_t antennaGainCh[AR5416_MAX_CHAINS];
451 uint8_t switchSettling;
452 uint8_t txRxAttenCh[AR5416_MAX_CHAINS];
453 uint8_t rxTxMarginCh[AR5416_MAX_CHAINS];
454 uint8_t adcDesiredSize;
455 int8_t pgaDesiredSize;
456 uint8_t xlnaGainCh[AR5416_MAX_CHAINS];
457 uint8_t txEndToXpaOff;
458 uint8_t txEndToRxOn;
459 uint8_t txFrameToXpaOn;
460 uint8_t thresh62;
461 uint8_t noiseFloorThreshCh[AR5416_MAX_CHAINS];
462 uint8_t xpdGain;
463 uint8_t xpd;
464 int8_t iqCalICh[AR5416_MAX_CHAINS];
465 int8_t iqCalQCh[AR5416_MAX_CHAINS];
466 uint8_t pdGainOverlap;
467 uint8_t ob;
468 uint8_t db;
469 uint8_t xpaBiasLvl;
470 uint8_t pwrDecreaseFor2Chain;
471 uint8_t pwrDecreaseFor3Chain;
472 uint8_t txFrameToDataStart;
473 uint8_t txFrameToPaOn;
474 uint8_t ht40PowerIncForPdadc;
475 uint8_t bswAtten[AR5416_MAX_CHAINS];
476 uint8_t bswMargin[AR5416_MAX_CHAINS];
477 uint8_t swSettleHt40;
478 uint8_t futureModal[22];
479 SPUR_CHAN spurChans[AR5416_EEPROM_MODAL_SPURS];
480 } __packed MODAL_EEP_HEADER;
481
482 typedef struct calDataPerFreq {
483 uint8_t pwrPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
484 uint8_t vpdPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
485 } __packed CAL_DATA_PER_FREQ;
486
487 typedef struct CalTargetPowerLegacy {
488 uint8_t bChannel;
489 uint8_t tPow2x[4];
490 } __packed CAL_TARGET_POWER_LEG;
491
492 typedef struct CalTargetPowerHt {
493 uint8_t bChannel;
494 uint8_t tPow2x[8];
495 } __packed CAL_TARGET_POWER_HT;
496
497 typedef struct CalCtlEdges {
498 uint8_t bChannel;
499 uint8_t tPowerFlag;
500 } __packed CAL_CTL_EDGES;
501
502 typedef struct CalCtlData {
503 CAL_CTL_EDGES ctlEdges[AR5416_MAX_CHAINS][AR5416_NUM_BAND_EDGES];
504 } __packed CAL_CTL_DATA;
505
506 typedef struct ar5416eeprom {
507 BASE_EEP_HEADER baseEepHeader;
508 uint8_t custData[64];
509 MODAL_EEP_HEADER modalHeader[2];
510 uint8_t calFreqPier5G[AR5416_NUM_5G_CAL_PIERS];
511 uint8_t calFreqPier2G[AR5416_NUM_2G_CAL_PIERS];
512 CAL_DATA_PER_FREQ calPierData5G[AR5416_MAX_CHAINS]
513 [AR5416_NUM_5G_CAL_PIERS];
514 CAL_DATA_PER_FREQ calPierData2G[AR5416_MAX_CHAINS]
515 [AR5416_NUM_2G_CAL_PIERS];
516 CAL_TARGET_POWER_LEG calTPow5G[AR5416_NUM_5G_20_TARGET_POWERS];
517 CAL_TARGET_POWER_HT calTPow5GHT20[AR5416_NUM_5G_20_TARGET_POWERS];
518 CAL_TARGET_POWER_HT calTPow5GHT40[AR5416_NUM_5G_40_TARGET_POWERS];
519 CAL_TARGET_POWER_LEG calTPowCck[AR5416_NUM_2G_CCK_TARGET_POWERS];
520 CAL_TARGET_POWER_LEG calTPow2G[AR5416_NUM_2G_20_TARGET_POWERS];
521 CAL_TARGET_POWER_HT calTPow2GHT20[AR5416_NUM_2G_20_TARGET_POWERS];
522 CAL_TARGET_POWER_HT calTPow2GHT40[AR5416_NUM_2G_40_TARGET_POWERS];
523 uint8_t ctlIndex[AR5416_NUM_CTLS];
524 CAL_CTL_DATA ctlData[AR5416_NUM_CTLS];
525 uint8_t padding[3];
526 } __packed AR5416_EEPROM;
527
528 #endif /* _IF_OTUSREG_H_ */
529
530