xref: /freebsd/sys/dev/otus/if_otusreg.h (revision c99a4e8a47c76f9fc6a1bb14bfd8dbd2b0831144)
1a9fcb51fSAdrian Chadd /*	$OpenBSD: if_otusreg.h,v 1.9 2013/11/26 20:33:18 deraadt Exp $	*/
2a9fcb51fSAdrian Chadd 
3a9fcb51fSAdrian Chadd /*-
4a9fcb51fSAdrian Chadd  * Copyright (c) 2009 Damien Bergamini <damien.bergamini@free.fr>
5a9fcb51fSAdrian Chadd  * Copyright (c) 2007-2008 Atheros Communications, Inc.
6a9fcb51fSAdrian Chadd  * Copyright (c) 2015 Adrian Chadd <adrian@FreeBSD.org>
7a9fcb51fSAdrian Chadd  *
8a9fcb51fSAdrian Chadd  * Permission to use, copy, modify, and distribute this software for any
9a9fcb51fSAdrian Chadd  * purpose with or without fee is hereby granted, provided that the above
10a9fcb51fSAdrian Chadd  * copyright notice and this permission notice appear in all copies.
11a9fcb51fSAdrian Chadd  *
12a9fcb51fSAdrian Chadd  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13a9fcb51fSAdrian Chadd  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14a9fcb51fSAdrian Chadd  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15a9fcb51fSAdrian Chadd  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16a9fcb51fSAdrian Chadd  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17a9fcb51fSAdrian Chadd  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18a9fcb51fSAdrian Chadd  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19a9fcb51fSAdrian Chadd  *
20a9fcb51fSAdrian Chadd  * $FreeBSD$
21a9fcb51fSAdrian Chadd  */
22a9fcb51fSAdrian Chadd #ifndef	__IF_OTUSREG_H__
23a9fcb51fSAdrian Chadd #define	__IF_OTUSREG_H__
24a9fcb51fSAdrian Chadd 
25a9fcb51fSAdrian Chadd /* USB Endpoints addresses. */
26a9fcb51fSAdrian Chadd #define AR_EPT_BULK_TX_NO	(UE_DIR_OUT | 1)
27a9fcb51fSAdrian Chadd #define AR_EPT_BULK_RX_NO	(UE_DIR_IN  | 2)
28a9fcb51fSAdrian Chadd #define AR_EPT_INTR_RX_NO	(UE_DIR_IN  | 3)
29a9fcb51fSAdrian Chadd #define AR_EPT_INTR_TX_NO	(UE_DIR_OUT | 4)
30a9fcb51fSAdrian Chadd 
31a9fcb51fSAdrian Chadd /* USB Requests. */
32a9fcb51fSAdrian Chadd #define AR_FW_DOWNLOAD			0x30
33a9fcb51fSAdrian Chadd #define AR_FW_DOWNLOAD_COMPLETE		0x31
34a9fcb51fSAdrian Chadd 
35a9fcb51fSAdrian Chadd /* Maximum number of writes that can fit in a single FW command is 7. */
36a9fcb51fSAdrian Chadd #define AR_MAX_WRITE_IDX	6	/* 56 bytes */
37a9fcb51fSAdrian Chadd 
38a9fcb51fSAdrian Chadd #define AR_FW_INIT_ADDR			0x102800
39a9fcb51fSAdrian Chadd #define AR_FW_MAIN_ADDR			0x200000
40a9fcb51fSAdrian Chadd #define AR_USB_MODE_CTRL		0x1e1108
41a9fcb51fSAdrian Chadd 
42a9fcb51fSAdrian Chadd /*
43a9fcb51fSAdrian Chadd  * AR9170 MAC registers.
44a9fcb51fSAdrian Chadd  */
45a9fcb51fSAdrian Chadd #define AR_MAC_REG_BASE			0x1c3000
46a9fcb51fSAdrian Chadd #define AR_MAC_REG_MAC_ADDR_L		(AR_MAC_REG_BASE + 0x610)
47a9fcb51fSAdrian Chadd #define AR_MAC_REG_MAC_ADDR_H		(AR_MAC_REG_BASE + 0x614)
48a9fcb51fSAdrian Chadd #define AR_MAC_REG_BSSID_L		(AR_MAC_REG_BASE + 0x618)
49a9fcb51fSAdrian Chadd #define AR_MAC_REG_BSSID_H		(AR_MAC_REG_BASE + 0x61c)
50a9fcb51fSAdrian Chadd #define AR_MAC_REG_GROUP_HASH_TBL_L	(AR_MAC_REG_BASE + 0x624)
51a9fcb51fSAdrian Chadd #define AR_MAC_REG_GROUP_HASH_TBL_H	(AR_MAC_REG_BASE + 0x628)
52a9fcb51fSAdrian Chadd #define AR_MAC_REG_BASIC_RATE		(AR_MAC_REG_BASE + 0x630)
53a9fcb51fSAdrian Chadd #define AR_MAC_REG_MANDATORY_RATE	(AR_MAC_REG_BASE + 0x634)
54a9fcb51fSAdrian Chadd #define AR_MAC_REG_RTS_CTS_RATE		(AR_MAC_REG_BASE + 0x638)
55a9fcb51fSAdrian Chadd #define AR_MAC_REG_BACKOFF_PROTECT	(AR_MAC_REG_BASE + 0x63c)
56a9fcb51fSAdrian Chadd #define AR_MAC_REG_RX_THRESHOLD		(AR_MAC_REG_BASE + 0x640)
57a9fcb51fSAdrian Chadd #define AR_MAC_REG_RX_PE_DELAY		(AR_MAC_REG_BASE + 0x64c)
58a9fcb51fSAdrian Chadd #define AR_MAC_REG_DYNAMIC_SIFS_ACK	(AR_MAC_REG_BASE + 0x658)
59a9fcb51fSAdrian Chadd #define AR_MAC_REG_SNIFFER		(AR_MAC_REG_BASE + 0x674)
60a9fcb51fSAdrian Chadd #define AR_MAC_REG_ACK_EXTENSION	(AR_MAC_REG_BASE + 0x690)
61a9fcb51fSAdrian Chadd #define AR_MAC_REG_EIFS_AND_SIFS	(AR_MAC_REG_BASE + 0x698)
62a9fcb51fSAdrian Chadd #define AR_MAC_REG_BUSY			(AR_MAC_REG_BASE + 0x6e8)
63a9fcb51fSAdrian Chadd #define AR_MAC_REG_BUSY_EXT		(AR_MAC_REG_BASE + 0x6ec)
64a9fcb51fSAdrian Chadd #define AR_MAC_REG_SLOT_TIME		(AR_MAC_REG_BASE + 0x6f0)
65a9fcb51fSAdrian Chadd #define AR_MAC_REG_AC0_CW		(AR_MAC_REG_BASE + 0xb00)
66a9fcb51fSAdrian Chadd #define AR_MAC_REG_AC1_CW		(AR_MAC_REG_BASE + 0xb04)
67a9fcb51fSAdrian Chadd #define AR_MAC_REG_AC2_CW		(AR_MAC_REG_BASE + 0xb08)
68a9fcb51fSAdrian Chadd #define AR_MAC_REG_AC3_CW		(AR_MAC_REG_BASE + 0xb0c)
69a9fcb51fSAdrian Chadd #define AR_MAC_REG_AC4_CW		(AR_MAC_REG_BASE + 0xb10)
70a9fcb51fSAdrian Chadd #define AR_MAC_REG_AC1_AC0_AIFS		(AR_MAC_REG_BASE + 0xb14)
71a9fcb51fSAdrian Chadd #define AR_MAC_REG_AC3_AC2_AIFS		(AR_MAC_REG_BASE + 0xb18)
72a9fcb51fSAdrian Chadd #define AR_MAC_REG_RETRY_MAX		(AR_MAC_REG_BASE + 0xb28)
73a9fcb51fSAdrian Chadd #define AR_MAC_REG_TXOP_NOT_ENOUGH_INDICATION	\
74a9fcb51fSAdrian Chadd 					(AR_MAC_REG_BASE + 0xb30)
75a9fcb51fSAdrian Chadd #define AR_MAC_REG_AC1_AC0_TXOP		(AR_MAC_REG_BASE + 0xb44)
76a9fcb51fSAdrian Chadd #define AR_MAC_REG_AC3_AC2_TXOP		(AR_MAC_REG_BASE + 0xb48)
77a9fcb51fSAdrian Chadd #define AR_MAC_REG_OFDM_PHY_ERRORS	(AR_MAC_REG_BASE + 0xcb4)
78a9fcb51fSAdrian Chadd #define AR_MAC_REG_CCK_PHY_ERRORS	(AR_MAC_REG_BASE + 0xcb8)
79a9fcb51fSAdrian Chadd #define AR_MAC_REG_BCN_HT1		(AR_MAC_REG_BASE + 0xda0)
80a9fcb51fSAdrian Chadd 
81a9fcb51fSAdrian Chadd /* Possible values for register AR_USB_MODE_CTRL. */
82a9fcb51fSAdrian Chadd #define AR_USB_DS_ENA		(1 << 0)
83a9fcb51fSAdrian Chadd #define AR_USB_US_ENA		(1 << 1)
84a9fcb51fSAdrian Chadd #define AR_USB_US_PACKET_MODE	(1 << 3)
85a9fcb51fSAdrian Chadd #define AR_USB_RX_STREAM_4K	(0 << 4)
86a9fcb51fSAdrian Chadd #define AR_USB_RX_STREAM_8K	(1 << 4)
87a9fcb51fSAdrian Chadd #define AR_USB_RX_STREAM_16K	(2 << 4)
88a9fcb51fSAdrian Chadd #define AR_USB_RX_STREAM_32K	(3 << 4)
89a9fcb51fSAdrian Chadd #define AR_USB_TX_STREAM_MODE	(1 << 6)
90a9fcb51fSAdrian Chadd 
91a9fcb51fSAdrian Chadd #define AR_LED0_ON	(1 << 0)
92a9fcb51fSAdrian Chadd #define AR_LED1_ON	(1 << 1)
93a9fcb51fSAdrian Chadd 
94a9fcb51fSAdrian Chadd /*
95a9fcb51fSAdrian Chadd  * PHY registers.
96a9fcb51fSAdrian Chadd  */
97a9fcb51fSAdrian Chadd #define AR_PHY_BASE			0x1c5800
98a9fcb51fSAdrian Chadd #define AR_PHY(reg)			(AR_PHY_BASE + (reg) * 4)
99a9fcb51fSAdrian Chadd #define AR_PHY_TURBO			(AR_PHY_BASE + 0x0004)
100a9fcb51fSAdrian Chadd #define AR_PHY_RF_CTL3			(AR_PHY_BASE + 0x0028)
101a9fcb51fSAdrian Chadd #define AR_PHY_RF_CTL4			(AR_PHY_BASE + 0x0034)
102a9fcb51fSAdrian Chadd #define AR_PHY_SETTLING			(AR_PHY_BASE + 0x0044)
103a9fcb51fSAdrian Chadd #define AR_PHY_RXGAIN			(AR_PHY_BASE + 0x0048)
104a9fcb51fSAdrian Chadd #define AR_PHY_DESIRED_SZ		(AR_PHY_BASE + 0x0050)
105a9fcb51fSAdrian Chadd #define AR_PHY_FIND_SIG			(AR_PHY_BASE + 0x0058)
106a9fcb51fSAdrian Chadd #define AR_PHY_AGC_CTL1			(AR_PHY_BASE + 0x005c)
107a9fcb51fSAdrian Chadd #define AR_PHY_SFCORR			(AR_PHY_BASE + 0x0068)
108a9fcb51fSAdrian Chadd #define AR_PHY_SFCORR_LOW		(AR_PHY_BASE + 0x006c)
109a9fcb51fSAdrian Chadd #define AR_PHY_TIMING_CTRL4		(AR_PHY_BASE + 0x0120)
110a9fcb51fSAdrian Chadd #define AR_PHY_TIMING5			(AR_PHY_BASE + 0x0124)
111a9fcb51fSAdrian Chadd #define AR_PHY_POWER_TX_RATE1		(AR_PHY_BASE + 0x0134)
112a9fcb51fSAdrian Chadd #define AR_PHY_POWER_TX_RATE2		(AR_PHY_BASE + 0x0138)
113a9fcb51fSAdrian Chadd #define AR_PHY_POWER_TX_RATE_MAX	(AR_PHY_BASE + 0x013c)
114a9fcb51fSAdrian Chadd #define AR_PHY_SWITCH_CHAIN_0		(AR_PHY_BASE + 0x0160)
115a9fcb51fSAdrian Chadd #define AR_PHY_SWITCH_COM		(AR_PHY_BASE + 0x0164)
116a9fcb51fSAdrian Chadd #define AR_PHY_HEAVY_CLIP_ENABLE	(AR_PHY_BASE + 0x01e0)
117a9fcb51fSAdrian Chadd #define AR_PHY_CCK_DETECT		(AR_PHY_BASE + 0x0a08)
118a9fcb51fSAdrian Chadd #define AR_PHY_GAIN_2GHZ		(AR_PHY_BASE + 0x0a0c)
119a9fcb51fSAdrian Chadd #define AR_PHY_POWER_TX_RATE3		(AR_PHY_BASE + 0x0a34)
120a9fcb51fSAdrian Chadd #define AR_PHY_POWER_TX_RATE4		(AR_PHY_BASE + 0x0a38)
121a9fcb51fSAdrian Chadd #define AR_PHY_TPCRG1			(AR_PHY_BASE + 0x0a58)
122a9fcb51fSAdrian Chadd #define AR_PHY_POWER_TX_RATE5		(AR_PHY_BASE + 0x0b8c)
123a9fcb51fSAdrian Chadd #define AR_PHY_POWER_TX_RATE6		(AR_PHY_BASE + 0x0b90)
124a9fcb51fSAdrian Chadd #define AR_PHY_POWER_TX_RATE7		(AR_PHY_BASE + 0x0bcc)
125a9fcb51fSAdrian Chadd #define AR_PHY_POWER_TX_RATE8		(AR_PHY_BASE + 0x0bd0)
126a9fcb51fSAdrian Chadd #define AR_PHY_POWER_TX_RATE9		(AR_PHY_BASE + 0x0bd4)
127a9fcb51fSAdrian Chadd #define AR_PHY_CCA			(AR_PHY_BASE + 0x3064)
128a9fcb51fSAdrian Chadd 
129a9fcb51fSAdrian Chadd #define AR_SEEPROM_HW_TYPE_OFFSET	0x1374
130a9fcb51fSAdrian Chadd #define AR_EEPROM_OFFSET		0x1600
131a9fcb51fSAdrian Chadd 
132a9fcb51fSAdrian Chadd #define AR_BANK4_CHUP			(1 << 0)
133a9fcb51fSAdrian Chadd #define AR_BANK4_BMODE_LF_SYNTH_FREQ	(1 << 1)
134a9fcb51fSAdrian Chadd #define AR_BANK4_AMODE_REFSEL(x)	((x) << 2)
135a9fcb51fSAdrian Chadd #define AR_BANK4_ADDR(x)		((x) << 5)
136a9fcb51fSAdrian Chadd 
137a9fcb51fSAdrian Chadd /* Tx descriptor. */
138a9fcb51fSAdrian Chadd struct ar_tx_head {
139a9fcb51fSAdrian Chadd 	uint16_t	len;
140a9fcb51fSAdrian Chadd 	uint16_t	macctl;
141a9fcb51fSAdrian Chadd #define AR_TX_MAC_RTS		(1 <<  0)
142a9fcb51fSAdrian Chadd #define AR_TX_MAC_CTS		(1 <<  1)
143a9fcb51fSAdrian Chadd #define AR_TX_MAC_BACKOFF	(1 <<  3)
144a9fcb51fSAdrian Chadd #define AR_TX_MAC_NOACK		(1 <<  2)
145a9fcb51fSAdrian Chadd #define AR_TX_MAC_HW_DUR	(1 <<  9)
146a9fcb51fSAdrian Chadd #define AR_TX_MAC_QID(qid)	((qid) << 10)
147a9fcb51fSAdrian Chadd #define AR_TX_MAC_RATE_PROBING	(1 << 15)
148a9fcb51fSAdrian Chadd 
149a9fcb51fSAdrian Chadd 	uint32_t	phyctl;
150a9fcb51fSAdrian Chadd /* Modulation type. */
151a9fcb51fSAdrian Chadd #define AR_TX_PHY_MT_CCK	0
152a9fcb51fSAdrian Chadd #define AR_TX_PHY_MT_OFDM	1
153a9fcb51fSAdrian Chadd #define AR_TX_PHY_MT_HT		2
154a9fcb51fSAdrian Chadd #define AR_TX_PHY_GF		(1 << 2)
155a9fcb51fSAdrian Chadd #define AR_TX_PHY_BW_SHIFT	3
156a9fcb51fSAdrian Chadd #define AR_TX_PHY_TPC_SHIFT	9
157a9fcb51fSAdrian Chadd #define AR_TX_PHY_ANTMSK(msk)	((msk) << 15)
158a9fcb51fSAdrian Chadd #define AR_TX_PHY_MCS(mcs)	((mcs) << 18)
159a9fcb51fSAdrian Chadd #define AR_TX_PHY_SHGI		(1U << 31)
160a9fcb51fSAdrian Chadd } __packed;
161a9fcb51fSAdrian Chadd 
162a9fcb51fSAdrian Chadd /* USB Rx stream mode header. */
163a9fcb51fSAdrian Chadd struct ar_rx_head {
164a9fcb51fSAdrian Chadd 	uint16_t	len;
165a9fcb51fSAdrian Chadd 	uint16_t	tag;
166a9fcb51fSAdrian Chadd #define AR_RX_HEAD_TAG	0x4e00
167a9fcb51fSAdrian Chadd } __packed;
168a9fcb51fSAdrian Chadd 
169a9fcb51fSAdrian Chadd /* Rx descriptor. */
170a9fcb51fSAdrian Chadd struct ar_rx_tail {
171a9fcb51fSAdrian Chadd 	uint8_t	rssi_ant[3];
172a9fcb51fSAdrian Chadd 	uint8_t	rssi_ant_ext[3];
173a9fcb51fSAdrian Chadd 	uint8_t	rssi;		/* Combined RSSI. */
174a9fcb51fSAdrian Chadd 	uint8_t	evm[2][6];	/* Error Vector Magnitude. */
175a9fcb51fSAdrian Chadd 	uint8_t	phy_err;
176a9fcb51fSAdrian Chadd 	uint8_t	sa_idx;
177a9fcb51fSAdrian Chadd 	uint8_t	da_idx;
178a9fcb51fSAdrian Chadd 	uint8_t	error;
179a9fcb51fSAdrian Chadd #define AR_RX_ERROR_TIMEOUT	(1 << 0)
180a9fcb51fSAdrian Chadd #define AR_RX_ERROR_OVERRUN	(1 << 1)
181a9fcb51fSAdrian Chadd #define AR_RX_ERROR_DECRYPT	(1 << 2)
182a9fcb51fSAdrian Chadd #define AR_RX_ERROR_FCS		(1 << 3)
183a9fcb51fSAdrian Chadd #define AR_RX_ERROR_BAD_RA	(1 << 4)
184a9fcb51fSAdrian Chadd #define AR_RX_ERROR_PLCP	(1 << 5)
185a9fcb51fSAdrian Chadd #define AR_RX_ERROR_MMIC	(1 << 6)
186a9fcb51fSAdrian Chadd 
187a9fcb51fSAdrian Chadd 	uint8_t	status;
188a9fcb51fSAdrian Chadd /* Modulation type (same as AR_TX_PHY_MT). */
189a9fcb51fSAdrian Chadd #define AR_RX_STATUS_MT_MASK	0x3
190a9fcb51fSAdrian Chadd #define AR_RX_STATUS_MT_CCK	0
191a9fcb51fSAdrian Chadd #define AR_RX_STATUS_MT_OFDM	1
192a9fcb51fSAdrian Chadd #define AR_RX_STATUS_MT_HT	2
193a9fcb51fSAdrian Chadd #define AR_RX_STATUS_SHPREAMBLE	(1 << 3)
194a9fcb51fSAdrian Chadd } __packed;
195a9fcb51fSAdrian Chadd 
196a9fcb51fSAdrian Chadd #define AR_PLCP_HDR_LEN	12
197a9fcb51fSAdrian Chadd /* Magic PLCP header for firmware notifications through Rx bulk pipe. */
198a9fcb51fSAdrian Chadd static uint8_t AR_PLCP_HDR_INTR[] = {
199a9fcb51fSAdrian Chadd 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
200a9fcb51fSAdrian Chadd 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff
201a9fcb51fSAdrian Chadd };
202a9fcb51fSAdrian Chadd 
203a9fcb51fSAdrian Chadd /* Firmware command/reply header. */
204a9fcb51fSAdrian Chadd struct ar_cmd_hdr {
205a9fcb51fSAdrian Chadd 	uint8_t		len;
206a9fcb51fSAdrian Chadd 	uint8_t		code;
207a9fcb51fSAdrian Chadd #define AR_CMD_RREG		0x00
208a9fcb51fSAdrian Chadd #define AR_CMD_WREG		0x01
209a9fcb51fSAdrian Chadd #define AR_CMD_RMEM		0x02
210a9fcb51fSAdrian Chadd #define AR_CMD_WMEM		0x03
211a9fcb51fSAdrian Chadd #define AR_CMD_BITAND		0x04
212a9fcb51fSAdrian Chadd #define AR_CMD_BITOR		0x05
213a9fcb51fSAdrian Chadd #define AR_CMD_EKEY		0x28
214a9fcb51fSAdrian Chadd #define AR_CMD_DKEY		0x29
215a9fcb51fSAdrian Chadd #define AR_CMD_FREQUENCY	0x30
216a9fcb51fSAdrian Chadd #define AR_CMD_RF_INIT		0x31
217a9fcb51fSAdrian Chadd #define AR_CMD_SYNTH		0x32
218a9fcb51fSAdrian Chadd #define AR_CMD_FREQ_STRAT	0x33
219a9fcb51fSAdrian Chadd #define AR_CMD_ECHO		0x80
220a9fcb51fSAdrian Chadd #define AR_CMD_TALLY		0x81
221a9fcb51fSAdrian Chadd #define AR_CMD_TALLY_APD	0x82
222a9fcb51fSAdrian Chadd #define AR_CMD_CONFIG		0x83
223a9fcb51fSAdrian Chadd #define AR_CMD_RESET		0x90
224a9fcb51fSAdrian Chadd #define AR_CMD_DKRESET		0x91
225a9fcb51fSAdrian Chadd #define AR_CMD_DKTX_STATUS	0x92
226a9fcb51fSAdrian Chadd #define AR_CMD_FDC		0xa0
227a9fcb51fSAdrian Chadd #define AR_CMD_WREEPROM		0xb0
228a9fcb51fSAdrian Chadd #define AR_CMD_WFLASH		AR_CMD_WREEPROM
229a9fcb51fSAdrian Chadd #define AR_CMD_FLASH_ERASE	0xb1
230a9fcb51fSAdrian Chadd #define AR_CMD_FLASH_PROG	0xb2
231a9fcb51fSAdrian Chadd #define AR_CMD_FLASH_CHKSUM	0xb3
232a9fcb51fSAdrian Chadd #define AR_CMD_FLASH_READ	0xb4
233a9fcb51fSAdrian Chadd #define AR_CMD_FW_DL_INIT	0xb5
234a9fcb51fSAdrian Chadd #define AR_CMD_MEM_WREEPROM	0xbb
235a9fcb51fSAdrian Chadd /* Those have the 2 MSB set to 1. */
236a9fcb51fSAdrian Chadd #define AR_EVT_BEACON		0x00
237a9fcb51fSAdrian Chadd #define AR_EVT_TX_COMP		0x01
238a9fcb51fSAdrian Chadd #define AR_EVT_TBTT		0x02
239a9fcb51fSAdrian Chadd #define AR_EVT_ATIM		0x03
240a9fcb51fSAdrian Chadd #define AR_EVT_DO_BB_RESET	0x09
241a9fcb51fSAdrian Chadd 
242a9fcb51fSAdrian Chadd 	uint16_t	token;	/* Driver private data. */
243a9fcb51fSAdrian Chadd } __packed;
244a9fcb51fSAdrian Chadd 
245a9fcb51fSAdrian Chadd /* Structure for command AR_CMD_RF_INIT/AR_CMD_FREQUENCY. */
246a9fcb51fSAdrian Chadd struct ar_cmd_frequency {
247a9fcb51fSAdrian Chadd 	uint32_t	freq;
248a9fcb51fSAdrian Chadd 	uint32_t	dynht2040;
249a9fcb51fSAdrian Chadd 	uint32_t	htena;
250a9fcb51fSAdrian Chadd 	uint32_t	dsc_exp;
251a9fcb51fSAdrian Chadd 	uint32_t	dsc_man;
252a9fcb51fSAdrian Chadd 	uint32_t	dsc_shgi_exp;
253a9fcb51fSAdrian Chadd 	uint32_t	dsc_shgi_man;
254a9fcb51fSAdrian Chadd 	uint32_t	check_loop_count;
255a9fcb51fSAdrian Chadd } __packed;
256a9fcb51fSAdrian Chadd 
257a9fcb51fSAdrian Chadd /* Firmware reply for command AR_CMD_FREQUENCY. */
258a9fcb51fSAdrian Chadd struct ar_rsp_frequency {
259a9fcb51fSAdrian Chadd 	uint32_t	status;
260a9fcb51fSAdrian Chadd #define AR_CAL_ERR_AGC		(1 << 0)	/* AGC cal unfinished. */
261a9fcb51fSAdrian Chadd #define AR_CAL_ERR_NF		(1 << 1)	/* Noise cal unfinished. */
262a9fcb51fSAdrian Chadd #define AR_CAL_ERR_NF_VAL	(1 << 2)	/* NF value unexpected. */
263a9fcb51fSAdrian Chadd 
264a9fcb51fSAdrian Chadd 	uint32_t	nf[3];		/* Noisefloor. */
265a9fcb51fSAdrian Chadd 	uint32_t	nf_ext[3];	/* Noisefloor ext. */
266a9fcb51fSAdrian Chadd } __packed;
267a9fcb51fSAdrian Chadd 
268a9fcb51fSAdrian Chadd /* Structure for command AR_CMD_EKEY. */
269a9fcb51fSAdrian Chadd struct ar_cmd_ekey {
270a9fcb51fSAdrian Chadd 	uint16_t	uid;	/* user ID */
271a9fcb51fSAdrian Chadd 	uint16_t	kix;
272a9fcb51fSAdrian Chadd 	uint16_t	cipher;
273a9fcb51fSAdrian Chadd #define AR_CIPHER_NONE		0
274a9fcb51fSAdrian Chadd #define AR_CIPHER_WEP64		1
275a9fcb51fSAdrian Chadd #define AR_CIPHER_TKIP		2
276a9fcb51fSAdrian Chadd #define AR_CIPHER_AES		4
277a9fcb51fSAdrian Chadd #define AR_CIPHER_WEP128	5
278a9fcb51fSAdrian Chadd #define AR_CIPHER_WEP256	6
279a9fcb51fSAdrian Chadd #define AR_CIPHER_CENC		7
280a9fcb51fSAdrian Chadd 
281a9fcb51fSAdrian Chadd 	uint8_t		macaddr[IEEE80211_ADDR_LEN];
282a9fcb51fSAdrian Chadd 	uint8_t		key[16];
283a9fcb51fSAdrian Chadd } __packed;
284a9fcb51fSAdrian Chadd 
285a9fcb51fSAdrian Chadd /* Structure for event AR_EVT_TX_COMP. */
286a9fcb51fSAdrian Chadd struct ar_evt_tx_comp {
287a9fcb51fSAdrian Chadd 	uint8_t		macaddr[IEEE80211_ADDR_LEN];
288a9fcb51fSAdrian Chadd 	uint32_t	phy;
289a9fcb51fSAdrian Chadd 	uint16_t	status;
290a9fcb51fSAdrian Chadd #define AR_TX_STATUS_COMP	0
291a9fcb51fSAdrian Chadd #define AR_TX_STATUS_RETRY_COMP	1
292a9fcb51fSAdrian Chadd #define AR_TX_STATUS_FAILED	2
293a9fcb51fSAdrian Chadd } __packed;
294a9fcb51fSAdrian Chadd 
295a9fcb51fSAdrian Chadd /* List of supported channels. */
296a9fcb51fSAdrian Chadd static const uint8_t ar_chans[] = {
297a9fcb51fSAdrian Chadd 	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
298a9fcb51fSAdrian Chadd 	36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124,
299a9fcb51fSAdrian Chadd 	128, 132, 136, 140, 149, 153, 157, 161, 165, 34, 38, 42, 46
300a9fcb51fSAdrian Chadd };
301a9fcb51fSAdrian Chadd 
302a9fcb51fSAdrian Chadd /*
303a9fcb51fSAdrian Chadd  * This data is automatically generated from the "otus.ini" file.
304a9fcb51fSAdrian Chadd  * It is stored in a different way though, to reduce kernel's .rodata
305a9fcb51fSAdrian Chadd  * section overhead (5.1KB instead of 8.5KB).
306a9fcb51fSAdrian Chadd  */
307a9fcb51fSAdrian Chadd 
308a9fcb51fSAdrian Chadd /* NB: apply AR_PHY(). */
309a9fcb51fSAdrian Chadd static const uint16_t ar5416_phy_regs[] = {
310a9fcb51fSAdrian Chadd 	0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, 0x008,
311a9fcb51fSAdrian Chadd 	0x009, 0x00a, 0x00b, 0x00c, 0x00d, 0x00e, 0x00f, 0x010, 0x011,
312a9fcb51fSAdrian Chadd 	0x012, 0x013, 0x014, 0x015, 0x016, 0x017, 0x018, 0x01a, 0x01b,
313a9fcb51fSAdrian Chadd 	0x040, 0x041, 0x042, 0x043, 0x045, 0x046, 0x047, 0x048, 0x049,
314a9fcb51fSAdrian Chadd 	0x04a, 0x04b, 0x04d, 0x04e, 0x04f, 0x051, 0x052, 0x053, 0x055,
315a9fcb51fSAdrian Chadd 	0x056, 0x058, 0x059, 0x05c, 0x05d, 0x05e, 0x05f, 0x060, 0x061,
316a9fcb51fSAdrian Chadd 	0x062, 0x063, 0x064, 0x065, 0x066, 0x067, 0x068, 0x069, 0x06a,
317a9fcb51fSAdrian Chadd 	0x06b, 0x06c, 0x06d, 0x070, 0x071, 0x072, 0x073, 0x074, 0x075,
318a9fcb51fSAdrian Chadd 	0x076, 0x077, 0x078, 0x079, 0x07a, 0x07b, 0x07c, 0x07f, 0x080,
319a9fcb51fSAdrian Chadd 	0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087, 0x088, 0x089,
320a9fcb51fSAdrian Chadd 	0x08a, 0x08b, 0x08c, 0x08d, 0x08e, 0x08f, 0x090, 0x091, 0x092,
321a9fcb51fSAdrian Chadd 	0x093, 0x094, 0x095, 0x096, 0x097, 0x098, 0x099, 0x09a, 0x09b,
322a9fcb51fSAdrian Chadd 	0x09c, 0x09d, 0x09e, 0x09f, 0x0a0, 0x0a1, 0x0a2, 0x0a3, 0x0a4,
323a9fcb51fSAdrian Chadd 	0x0a5, 0x0a6, 0x0a7, 0x0a8, 0x0a9, 0x0aa, 0x0ab, 0x0ac, 0x0ad,
324a9fcb51fSAdrian Chadd 	0x0ae, 0x0af, 0x0b0, 0x0b1, 0x0b2, 0x0b3, 0x0b4, 0x0b5, 0x0b6,
325a9fcb51fSAdrian Chadd 	0x0b7, 0x0b8, 0x0b9, 0x0ba, 0x0bb, 0x0bc, 0x0bd, 0x0be, 0x0bf,
326a9fcb51fSAdrian Chadd 	0x0c0, 0x0c1, 0x0c2, 0x0c3, 0x0c4, 0x0c5, 0x0c6, 0x0c7, 0x0c8,
327a9fcb51fSAdrian Chadd 	0x0c9, 0x0ca, 0x0cb, 0x0cc, 0x0cd, 0x0ce, 0x0cf, 0x0d0, 0x0d1,
328a9fcb51fSAdrian Chadd 	0x0d2, 0x0d3, 0x0d4, 0x0d5, 0x0d6, 0x0d7, 0x0d8, 0x0d9, 0x0da,
329a9fcb51fSAdrian Chadd 	0x0db, 0x0dc, 0x0dd, 0x0de, 0x0df, 0x0e0, 0x0e1, 0x0e2, 0x0e3,
330a9fcb51fSAdrian Chadd 	0x0e4, 0x0e5, 0x0e6, 0x0e7, 0x0e8, 0x0e9, 0x0ea, 0x0eb, 0x0ec,
331a9fcb51fSAdrian Chadd 	0x0ed, 0x0ee, 0x0ef, 0x0f0, 0x0f1, 0x0f2, 0x0f3, 0x0f4, 0x0f5,
332a9fcb51fSAdrian Chadd 	0x0f6, 0x0f7, 0x0f8, 0x0f9, 0x0fa, 0x0fb, 0x0fc, 0x0fd, 0x0fe,
333a9fcb51fSAdrian Chadd 	0x0ff, 0x100, 0x103, 0x104, 0x105, 0x106, 0x107, 0x108, 0x109,
334a9fcb51fSAdrian Chadd 	0x10a, 0x10b, 0x10c, 0x10d, 0x10e, 0x10f, 0x13c, 0x13d, 0x13e,
335a9fcb51fSAdrian Chadd 	0x13f, 0x280, 0x281, 0x282, 0x283, 0x284, 0x285, 0x286, 0x287,
336a9fcb51fSAdrian Chadd 	0x288, 0x289, 0x28a, 0x28b, 0x28c, 0x28d, 0x28e, 0x28f, 0x290,
337a9fcb51fSAdrian Chadd 	0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297, 0x298, 0x299,
338a9fcb51fSAdrian Chadd 	0x29a, 0x29b, 0x29d, 0x29e, 0x29f, 0x2c0, 0x2c1, 0x2c2, 0x2c3,
339a9fcb51fSAdrian Chadd 	0x2c4, 0x2c5, 0x2c6, 0x2c7, 0x2c8, 0x2c9, 0x2ca, 0x2cb, 0x2cc,
340a9fcb51fSAdrian Chadd 	0x2cd, 0x2ce, 0x2cf, 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5,
341a9fcb51fSAdrian Chadd 	0x2d6, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7, 0x2e8, 0x2e9,
342a9fcb51fSAdrian Chadd 	0x2ea, 0x2eb, 0x2ec, 0x2ed, 0x2ee, 0x2ef, 0x2f0, 0x2f1, 0x2f2,
343a9fcb51fSAdrian Chadd 	0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7, 0x2f8, 0x412, 0x448, 0x458,
344a9fcb51fSAdrian Chadd 	0x683, 0x69b, 0x812, 0x848, 0x858, 0xa83, 0xa9b, 0xc19, 0xc57,
345a9fcb51fSAdrian Chadd 	0xc5a, 0xc6f, 0xe9c, 0xed7, 0xed8, 0xed9, 0xeda, 0xedb, 0xedc,
346a9fcb51fSAdrian Chadd 	0xedd, 0xede, 0xedf, 0xee0, 0xee1
347a9fcb51fSAdrian Chadd };
348a9fcb51fSAdrian Chadd 
349a9fcb51fSAdrian Chadd static const uint32_t ar5416_phy_vals_5ghz_20mhz[] = {
350a9fcb51fSAdrian Chadd 	0x00000007, 0x00000300, 0x00000000, 0xad848e19, 0x7d14e000,
351a9fcb51fSAdrian Chadd 	0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
352a9fcb51fSAdrian Chadd 	0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
353a9fcb51fSAdrian Chadd 	0x00200400, 0x206a002e, 0x1372161e, 0x001a6a65, 0x1284233c,
354a9fcb51fSAdrian Chadd 	0x6c48b4e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd10,
355a9fcb51fSAdrian Chadd 	0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
356a9fcb51fSAdrian Chadd 	0x00000000, 0x000007d0, 0x00000118, 0x10000fff, 0x0510081c,
357a9fcb51fSAdrian Chadd 	0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
358a9fcb51fSAdrian Chadd 	0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
359a9fcb51fSAdrian Chadd 	0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
360a9fcb51fSAdrian Chadd 	0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
361a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
362a9fcb51fSAdrian Chadd 	0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
363a9fcb51fSAdrian Chadd 	0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
364a9fcb51fSAdrian Chadd 	0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
365a9fcb51fSAdrian Chadd 	0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
366a9fcb51fSAdrian Chadd 	0x00000000, 0x00000040, 0x00000080, 0x000001a1, 0x000001e1,
367a9fcb51fSAdrian Chadd 	0x00000021, 0x00000061, 0x00000168, 0x000001a8, 0x000001e8,
368a9fcb51fSAdrian Chadd 	0x00000028, 0x00000068, 0x00000189, 0x000001c9, 0x00000009,
369a9fcb51fSAdrian Chadd 	0x00000049, 0x00000089, 0x00000170, 0x000001b0, 0x000001f0,
370a9fcb51fSAdrian Chadd 	0x00000030, 0x00000070, 0x00000191, 0x000001d1, 0x00000011,
371a9fcb51fSAdrian Chadd 	0x00000051, 0x00000091, 0x000001b8, 0x000001f8, 0x00000038,
372a9fcb51fSAdrian Chadd 	0x00000078, 0x00000199, 0x000001d9, 0x00000019, 0x00000059,
373a9fcb51fSAdrian Chadd 	0x00000099, 0x000000d9, 0x000000f9, 0x000000f9, 0x000000f9,
374a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
375a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
376a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
377a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
378a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
379a9fcb51fSAdrian Chadd 	0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
380a9fcb51fSAdrian Chadd 	0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
381a9fcb51fSAdrian Chadd 	0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
382a9fcb51fSAdrian Chadd 	0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
383a9fcb51fSAdrian Chadd 	0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
384a9fcb51fSAdrian Chadd 	0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
385a9fcb51fSAdrian Chadd 	0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
386a9fcb51fSAdrian Chadd 	0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
387a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
388a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
389a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
390a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
391a9fcb51fSAdrian Chadd 	0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
392a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
393a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
394a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
395a9fcb51fSAdrian Chadd 	0x00000000, 0x00000008, 0x00000440, 0xd6be4788, 0x012e8160,
396a9fcb51fSAdrian Chadd 	0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
397a9fcb51fSAdrian Chadd 	0x00000400, 0x000009b5, 0x00000000, 0x00000108, 0x3f3f3f3f,
398a9fcb51fSAdrian Chadd 	0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
399a9fcb51fSAdrian Chadd 	0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
400a9fcb51fSAdrian Chadd 	0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a9caa,
401a9fcb51fSAdrian Chadd 	0x1ce739ce, 0x051701ce, 0x18010000, 0x30032602, 0x48073e06,
402a9fcb51fSAdrian Chadd 	0x560b4c0a, 0x641a600f, 0x7a4f6e1b, 0x8c5b7e5a, 0x9d0f96cf,
403a9fcb51fSAdrian Chadd 	0xb51fa69f, 0xcb3fbd07, 0x0000d7bf, 0x00000000, 0x00000000,
404a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
405a9fcb51fSAdrian Chadd 	0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
406a9fcb51fSAdrian Chadd 	0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
407a9fcb51fSAdrian Chadd 	0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
408a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
409a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
410a9fcb51fSAdrian Chadd 	0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a65, 0x0510001c,
411a9fcb51fSAdrian Chadd 	0x00009b40, 0x012e8160, 0x09249126, 0x00180a65, 0x0510001c,
412a9fcb51fSAdrian Chadd 	0x00009b40, 0x012e8160, 0x09249126, 0x0001c600, 0x004b6a8e,
413a9fcb51fSAdrian Chadd 	0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
414a9fcb51fSAdrian Chadd 	0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
415a9fcb51fSAdrian Chadd 	0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
416a9fcb51fSAdrian Chadd };
417a9fcb51fSAdrian Chadd 
418a9fcb51fSAdrian Chadd #ifdef notyet
419a9fcb51fSAdrian Chadd static const uint32_t ar5416_phy_vals_5ghz_40mhz[] = {
420a9fcb51fSAdrian Chadd 	0x00000007, 0x000003c4, 0x00000000, 0xad848e19, 0x7d14e000,
421a9fcb51fSAdrian Chadd 	0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
422a9fcb51fSAdrian Chadd 	0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
423a9fcb51fSAdrian Chadd 	0x00200400, 0x206a002e, 0x13721c1e, 0x001a6a65, 0x1284233c,
424a9fcb51fSAdrian Chadd 	0x6c48b4e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd10,
425a9fcb51fSAdrian Chadd 	0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
426a9fcb51fSAdrian Chadd 	0x00000000, 0x000007d0, 0x00000230, 0x10000fff, 0x0510081c,
427a9fcb51fSAdrian Chadd 	0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
428a9fcb51fSAdrian Chadd 	0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
429a9fcb51fSAdrian Chadd 	0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
430a9fcb51fSAdrian Chadd 	0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
431a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
432a9fcb51fSAdrian Chadd 	0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
433a9fcb51fSAdrian Chadd 	0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
434a9fcb51fSAdrian Chadd 	0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
435a9fcb51fSAdrian Chadd 	0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
436a9fcb51fSAdrian Chadd 	0x00000000, 0x00000040, 0x00000080, 0x000001a1, 0x000001e1,
437a9fcb51fSAdrian Chadd 	0x00000021, 0x00000061, 0x00000168, 0x000001a8, 0x000001e8,
438a9fcb51fSAdrian Chadd 	0x00000028, 0x00000068, 0x00000189, 0x000001c9, 0x00000009,
439a9fcb51fSAdrian Chadd 	0x00000049, 0x00000089, 0x00000170, 0x000001b0, 0x000001f0,
440a9fcb51fSAdrian Chadd 	0x00000030, 0x00000070, 0x00000191, 0x000001d1, 0x00000011,
441a9fcb51fSAdrian Chadd 	0x00000051, 0x00000091, 0x000001b8, 0x000001f8, 0x00000038,
442a9fcb51fSAdrian Chadd 	0x00000078, 0x00000199, 0x000001d9, 0x00000019, 0x00000059,
443a9fcb51fSAdrian Chadd 	0x00000099, 0x000000d9, 0x000000f9, 0x000000f9, 0x000000f9,
444a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
445a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
446a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
447a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
448a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
449a9fcb51fSAdrian Chadd 	0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
450a9fcb51fSAdrian Chadd 	0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
451a9fcb51fSAdrian Chadd 	0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
452a9fcb51fSAdrian Chadd 	0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
453a9fcb51fSAdrian Chadd 	0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
454a9fcb51fSAdrian Chadd 	0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
455a9fcb51fSAdrian Chadd 	0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
456a9fcb51fSAdrian Chadd 	0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
457a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
458a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
459a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
460a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
461a9fcb51fSAdrian Chadd 	0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
462a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
463a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
464a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
465a9fcb51fSAdrian Chadd 	0x00000000, 0x00000008, 0x00000440, 0xd6be4788, 0x012e8160,
466a9fcb51fSAdrian Chadd 	0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
467a9fcb51fSAdrian Chadd 	0x00000400, 0x000009b5, 0x00000000, 0x00000210, 0x3f3f3f3f,
468a9fcb51fSAdrian Chadd 	0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
469a9fcb51fSAdrian Chadd 	0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
470a9fcb51fSAdrian Chadd 	0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a9caa,
471a9fcb51fSAdrian Chadd 	0x1ce739ce, 0x051701ce, 0x18010000, 0x30032602, 0x48073e06,
472a9fcb51fSAdrian Chadd 	0x560b4c0a, 0x641a600f, 0x7a4f6e1b, 0x8c5b7e5a, 0x9d0f96cf,
473a9fcb51fSAdrian Chadd 	0xb51fa69f, 0xcb3fbcbf, 0x0000d7bf, 0x00000000, 0x00000000,
474a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
475a9fcb51fSAdrian Chadd 	0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
476a9fcb51fSAdrian Chadd 	0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
477a9fcb51fSAdrian Chadd 	0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
478a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
479a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
480a9fcb51fSAdrian Chadd 	0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a65, 0x0510001c,
481a9fcb51fSAdrian Chadd 	0x00009b40, 0x012e8160, 0x09249126, 0x00180a65, 0x0510001c,
482a9fcb51fSAdrian Chadd 	0x00009b40, 0x012e8160, 0x09249126, 0x0001c600, 0x004b6a8e,
483a9fcb51fSAdrian Chadd 	0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
484a9fcb51fSAdrian Chadd 	0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
485a9fcb51fSAdrian Chadd 	0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
486a9fcb51fSAdrian Chadd };
487a9fcb51fSAdrian Chadd #endif
488a9fcb51fSAdrian Chadd 
489a9fcb51fSAdrian Chadd #ifdef notyet
490a9fcb51fSAdrian Chadd static const uint32_t ar5416_phy_vals_2ghz_40mhz[] = {
491a9fcb51fSAdrian Chadd 	0x00000007, 0x000003c4, 0x00000000, 0xad848e19, 0x7d14e000,
492a9fcb51fSAdrian Chadd 	0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
493a9fcb51fSAdrian Chadd 	0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
494a9fcb51fSAdrian Chadd 	0x00200400, 0x206a002e, 0x13721c24, 0x00197a68, 0x1284233c,
495a9fcb51fSAdrian Chadd 	0x6c48b0e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd20,
496a9fcb51fSAdrian Chadd 	0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
497a9fcb51fSAdrian Chadd 	0x00000000, 0x00000898, 0x00000268, 0x10000fff, 0x0510001c,
498a9fcb51fSAdrian Chadd 	0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
499a9fcb51fSAdrian Chadd 	0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
500a9fcb51fSAdrian Chadd 	0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
501a9fcb51fSAdrian Chadd 	0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
502a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
503a9fcb51fSAdrian Chadd 	0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
504a9fcb51fSAdrian Chadd 	0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
505a9fcb51fSAdrian Chadd 	0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
506a9fcb51fSAdrian Chadd 	0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
507a9fcb51fSAdrian Chadd 	0x00000000, 0x00000040, 0x00000080, 0x00000141, 0x00000181,
508a9fcb51fSAdrian Chadd 	0x000001c1, 0x00000001, 0x00000041, 0x000001a8, 0x000001e8,
509a9fcb51fSAdrian Chadd 	0x00000028, 0x00000068, 0x000000a8, 0x00000169, 0x000001a9,
510a9fcb51fSAdrian Chadd 	0x000001e9, 0x00000029, 0x00000069, 0x00000190, 0x000001d0,
511a9fcb51fSAdrian Chadd 	0x00000010, 0x00000050, 0x00000090, 0x00000151, 0x00000191,
512a9fcb51fSAdrian Chadd 	0x000001d1, 0x00000011, 0x00000051, 0x00000198, 0x000001d8,
513a9fcb51fSAdrian Chadd 	0x00000018, 0x00000058, 0x00000098, 0x00000159, 0x00000199,
514a9fcb51fSAdrian Chadd 	0x000001d9, 0x00000019, 0x00000059, 0x00000099, 0x000000d9,
515a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
516a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
517a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
518a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
519a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
520a9fcb51fSAdrian Chadd 	0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
521a9fcb51fSAdrian Chadd 	0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
522a9fcb51fSAdrian Chadd 	0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
523a9fcb51fSAdrian Chadd 	0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
524a9fcb51fSAdrian Chadd 	0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
525a9fcb51fSAdrian Chadd 	0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
526a9fcb51fSAdrian Chadd 	0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
527a9fcb51fSAdrian Chadd 	0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
528a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
529a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
530a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
531a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
532a9fcb51fSAdrian Chadd 	0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
533a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
534a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
535a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
536a9fcb51fSAdrian Chadd 	0x00000000, 0x0000000e, 0x00000440, 0xd03e4788, 0x012a8160,
537a9fcb51fSAdrian Chadd 	0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
538a9fcb51fSAdrian Chadd 	0x00000400, 0x000009b5, 0x00000000, 0x00000210, 0x3f3f3f3f,
539a9fcb51fSAdrian Chadd 	0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
540a9fcb51fSAdrian Chadd 	0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
541a9fcb51fSAdrian Chadd 	0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a7caa,
542a9fcb51fSAdrian Chadd 	0x1ce739ce, 0x051701ce, 0x18010000, 0x2e032402, 0x4a0a3c06,
543a9fcb51fSAdrian Chadd 	0x621a540b, 0x764f6c1b, 0x845b7a5a, 0x950f8ccf, 0xa5cf9b4f,
544a9fcb51fSAdrian Chadd 	0xbddfaf1f, 0xd1ffc93f, 0x00000000, 0x00000000, 0x00000000,
545a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
546a9fcb51fSAdrian Chadd 	0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
547a9fcb51fSAdrian Chadd 	0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
548a9fcb51fSAdrian Chadd 	0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
549a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
550a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
551a9fcb51fSAdrian Chadd 	0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a68, 0x0510001c,
552a9fcb51fSAdrian Chadd 	0x00009b40, 0x012a8160, 0x09249126, 0x00180a68, 0x0510001c,
553a9fcb51fSAdrian Chadd 	0x00009b40, 0x012a8160, 0x09249126, 0x0001c600, 0x004b6a8e,
554a9fcb51fSAdrian Chadd 	0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
555a9fcb51fSAdrian Chadd 	0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
556a9fcb51fSAdrian Chadd 	0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
557a9fcb51fSAdrian Chadd };
558a9fcb51fSAdrian Chadd #endif
559a9fcb51fSAdrian Chadd 
560a9fcb51fSAdrian Chadd static const uint32_t ar5416_phy_vals_2ghz_20mhz[] = {
561a9fcb51fSAdrian Chadd 	0x00000007, 0x00000300, 0x00000000, 0xad848e19, 0x7d14e000,
562a9fcb51fSAdrian Chadd 	0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
563a9fcb51fSAdrian Chadd 	0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
564a9fcb51fSAdrian Chadd 	0x00200400, 0x206a002e, 0x137216a4, 0x00197a68, 0x1284233c,
565a9fcb51fSAdrian Chadd 	0x6c48b0e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd20,
566a9fcb51fSAdrian Chadd 	0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
567a9fcb51fSAdrian Chadd 	0x00000000, 0x00000898, 0x00000134, 0x10000fff, 0x0510001c,
568a9fcb51fSAdrian Chadd 	0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
569a9fcb51fSAdrian Chadd 	0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
570a9fcb51fSAdrian Chadd 	0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
571a9fcb51fSAdrian Chadd 	0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
572a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
573a9fcb51fSAdrian Chadd 	0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
574a9fcb51fSAdrian Chadd 	0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
575a9fcb51fSAdrian Chadd 	0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
576a9fcb51fSAdrian Chadd 	0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
577a9fcb51fSAdrian Chadd 	0x00000000, 0x00000040, 0x00000080, 0x00000141, 0x00000181,
578a9fcb51fSAdrian Chadd 	0x000001c1, 0x00000001, 0x00000041, 0x000001a8, 0x000001e8,
579a9fcb51fSAdrian Chadd 	0x00000028, 0x00000068, 0x000000a8, 0x00000169, 0x000001a9,
580a9fcb51fSAdrian Chadd 	0x000001e9, 0x00000029, 0x00000069, 0x00000190, 0x000001d0,
581a9fcb51fSAdrian Chadd 	0x00000010, 0x00000050, 0x00000090, 0x00000151, 0x00000191,
582a9fcb51fSAdrian Chadd 	0x000001d1, 0x00000011, 0x00000051, 0x00000198, 0x000001d8,
583a9fcb51fSAdrian Chadd 	0x00000018, 0x00000058, 0x00000098, 0x00000159, 0x00000199,
584a9fcb51fSAdrian Chadd 	0x000001d9, 0x00000019, 0x00000059, 0x00000099, 0x000000d9,
585a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
586a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
587a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
588a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
589a9fcb51fSAdrian Chadd 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
590a9fcb51fSAdrian Chadd 	0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
591a9fcb51fSAdrian Chadd 	0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
592a9fcb51fSAdrian Chadd 	0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
593a9fcb51fSAdrian Chadd 	0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
594a9fcb51fSAdrian Chadd 	0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
595a9fcb51fSAdrian Chadd 	0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
596a9fcb51fSAdrian Chadd 	0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
597a9fcb51fSAdrian Chadd 	0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
598a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
599a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
600a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
601a9fcb51fSAdrian Chadd 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
602a9fcb51fSAdrian Chadd 	0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
603a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
604a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
605a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
606a9fcb51fSAdrian Chadd 	0x00000000, 0x0000000e, 0x00000440, 0xd03e4788, 0x012a8160,
607a9fcb51fSAdrian Chadd 	0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
608a9fcb51fSAdrian Chadd 	0x00000400, 0x000009b5, 0x00000000, 0x00000108, 0x3f3f3f3f,
609a9fcb51fSAdrian Chadd 	0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
610a9fcb51fSAdrian Chadd 	0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
611a9fcb51fSAdrian Chadd 	0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a7caa,
612a9fcb51fSAdrian Chadd 	0x1ce739ce, 0x051701ce, 0x18010000, 0x2e032402, 0x4a0a3c06,
613a9fcb51fSAdrian Chadd 	0x621a540b, 0x764f6c1b, 0x845b7a5a, 0x950f8ccf, 0xa5cf9b4f,
614a9fcb51fSAdrian Chadd 	0xbddfaf1f, 0xd1ffc93f, 0x00000000, 0x00000000, 0x00000000,
615a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
616a9fcb51fSAdrian Chadd 	0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
617a9fcb51fSAdrian Chadd 	0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
618a9fcb51fSAdrian Chadd 	0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
619a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
620a9fcb51fSAdrian Chadd 	0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
621a9fcb51fSAdrian Chadd 	0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a68, 0x0510001c,
622a9fcb51fSAdrian Chadd 	0x00009b40, 0x012a8160, 0x09249126, 0x00180a68, 0x0510001c,
623a9fcb51fSAdrian Chadd 	0x00009b40, 0x012a8160, 0x09249126, 0x0001c600, 0x004b6a8e,
624a9fcb51fSAdrian Chadd 	0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
625a9fcb51fSAdrian Chadd 	0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
626a9fcb51fSAdrian Chadd 	0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
627a9fcb51fSAdrian Chadd };
628a9fcb51fSAdrian Chadd 
629a9fcb51fSAdrian Chadd /* NB: apply AR_PHY(). */
630a9fcb51fSAdrian Chadd static const uint8_t ar5416_banks_regs[] = {
631a9fcb51fSAdrian Chadd 	0x2c, 0x38, 0x2c, 0x3b, 0x2c, 0x38, 0x3c, 0x2c, 0x3a, 0x2c, 0x39,
632a9fcb51fSAdrian Chadd 	0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
633a9fcb51fSAdrian Chadd 	0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
634a9fcb51fSAdrian Chadd 	0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
635a9fcb51fSAdrian Chadd 	0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
636a9fcb51fSAdrian Chadd 	0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x38, 0x2c, 0x2c,
637a9fcb51fSAdrian Chadd 	0x2c, 0x3c
638a9fcb51fSAdrian Chadd };
639a9fcb51fSAdrian Chadd 
640a9fcb51fSAdrian Chadd static const uint32_t ar5416_banks_vals_5ghz[] = {
641a9fcb51fSAdrian Chadd 	0x1e5795e5, 0x02008020, 0x02108421, 0x00000008, 0x0e73ff17,
642a9fcb51fSAdrian Chadd 	0x00000420, 0x01400018, 0x000001a1, 0x00000001, 0x00000013,
643a9fcb51fSAdrian Chadd 	0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
644a9fcb51fSAdrian Chadd 	0x00000000, 0x00004000, 0x00006c00, 0x00002c00, 0x00004800,
645a9fcb51fSAdrian Chadd 	0x00004000, 0x00006000, 0x00001000, 0x00004000, 0x00007c00,
646a9fcb51fSAdrian Chadd 	0x00007c00, 0x00007c00, 0x00007c00, 0x00007c00, 0x00087c00,
647a9fcb51fSAdrian Chadd 	0x00007c00, 0x00005400, 0x00000c00, 0x00001800, 0x00007c00,
648a9fcb51fSAdrian Chadd 	0x00006c00, 0x00006c00, 0x00007c00, 0x00002c00, 0x00003c00,
649a9fcb51fSAdrian Chadd 	0x00003800, 0x00001c00, 0x00000800, 0x00000408, 0x00004c15,
650a9fcb51fSAdrian Chadd 	0x00004188, 0x0000201e, 0x00010408, 0x00000801, 0x00000c08,
651a9fcb51fSAdrian Chadd 	0x0000181e, 0x00001016, 0x00002800, 0x00004010, 0x0000081c,
652a9fcb51fSAdrian Chadd 	0x00000115, 0x00000015, 0x00000066, 0x0000001c, 0x00000000,
653a9fcb51fSAdrian Chadd 	0x00000004, 0x00000015, 0x0000001f, 0x00000000, 0x000000a0,
654a9fcb51fSAdrian Chadd 	0x00000000, 0x00000040, 0x0000001c
655a9fcb51fSAdrian Chadd };
656a9fcb51fSAdrian Chadd 
657a9fcb51fSAdrian Chadd static const uint32_t ar5416_banks_vals_2ghz[] = {
658a9fcb51fSAdrian Chadd 	0x1e5795e5, 0x02008020, 0x02108421, 0x00000008, 0x0e73ff17,
659a9fcb51fSAdrian Chadd 	0x00000420, 0x01c00018, 0x000001a1, 0x00000001, 0x00000013,
660a9fcb51fSAdrian Chadd 	0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
661a9fcb51fSAdrian Chadd 	0x00000000, 0x00004000, 0x00006c00, 0x00002c00, 0x00004800,
662a9fcb51fSAdrian Chadd 	0x00004000, 0x00006000, 0x00001000, 0x00004000, 0x00007c00,
663a9fcb51fSAdrian Chadd 	0x00007c00, 0x00007c00, 0x00007c00, 0x00007c00, 0x00087c00,
664a9fcb51fSAdrian Chadd 	0x00007c00, 0x00005400, 0x00000c00, 0x00001800, 0x00007c00,
665a9fcb51fSAdrian Chadd 	0x00006c00, 0x00006c00, 0x00007c00, 0x00002c00, 0x00003c00,
666a9fcb51fSAdrian Chadd 	0x00003800, 0x00001c00, 0x00000800, 0x00000408, 0x00004c15,
667a9fcb51fSAdrian Chadd 	0x00004188, 0x0000201e, 0x00010408, 0x00000801, 0x00000c08,
668a9fcb51fSAdrian Chadd 	0x0000181e, 0x00001016, 0x00002800, 0x00004010, 0x0000081c,
669a9fcb51fSAdrian Chadd 	0x00000115, 0x00000015, 0x00000066, 0x0000001c, 0x00000000,
670a9fcb51fSAdrian Chadd 	0x00000004, 0x00000015, 0x0000001f, 0x00000400, 0x000000a0,
671a9fcb51fSAdrian Chadd 	0x00000000, 0x00000040, 0x0000001c
672a9fcb51fSAdrian Chadd };
673a9fcb51fSAdrian Chadd 
674a9fcb51fSAdrian Chadd /*
675a9fcb51fSAdrian Chadd  * EEPROM.
676a9fcb51fSAdrian Chadd  */
677a9fcb51fSAdrian Chadd /* Possible flags for opCapFlags. */
678a9fcb51fSAdrian Chadd #define AR5416_OPFLAGS_11A	0x01
679a9fcb51fSAdrian Chadd #define AR5416_OPFLAGS_11G	0x02
680a9fcb51fSAdrian Chadd #define AR5416_OPFLAGS_5G_HT40	0x04
681a9fcb51fSAdrian Chadd #define AR5416_OPFLAGS_2G_HT40	0x08
682a9fcb51fSAdrian Chadd #define AR5416_OPFLAGS_5G_HT20	0x10
683a9fcb51fSAdrian Chadd #define AR5416_OPFLAGS_2G_HT20	0x20
684a9fcb51fSAdrian Chadd 
685a9fcb51fSAdrian Chadd #define AR5416_NUM_5G_CAL_PIERS		8
686a9fcb51fSAdrian Chadd #define AR5416_NUM_2G_CAL_PIERS		4
687a9fcb51fSAdrian Chadd #define AR5416_NUM_5G_20_TARGET_POWERS	8
688a9fcb51fSAdrian Chadd #define AR5416_NUM_5G_40_TARGET_POWERS	8
689a9fcb51fSAdrian Chadd #define AR5416_NUM_2G_CCK_TARGET_POWERS	3
690a9fcb51fSAdrian Chadd #define AR5416_NUM_2G_20_TARGET_POWERS	4
691a9fcb51fSAdrian Chadd #define AR5416_NUM_2G_40_TARGET_POWERS	4
692a9fcb51fSAdrian Chadd #define AR5416_NUM_CTLS			24
693a9fcb51fSAdrian Chadd #define AR5416_NUM_BAND_EDGES		8
694a9fcb51fSAdrian Chadd #define AR5416_NUM_PD_GAINS		4
695a9fcb51fSAdrian Chadd #define AR5416_PD_GAIN_ICEPTS		5
696a9fcb51fSAdrian Chadd #define AR5416_EEPROM_MODAL_SPURS	5
697a9fcb51fSAdrian Chadd #define AR5416_MAX_CHAINS		2
698a9fcb51fSAdrian Chadd 
699a9fcb51fSAdrian Chadd struct BaseEepHeader {
700a9fcb51fSAdrian Chadd 	uint16_t	length;
701a9fcb51fSAdrian Chadd 	uint16_t	checksum;
702a9fcb51fSAdrian Chadd 	uint16_t	version;
703a9fcb51fSAdrian Chadd 	uint8_t		opCapFlags;
704a9fcb51fSAdrian Chadd 	uint8_t		eepMisc;
705a9fcb51fSAdrian Chadd 	uint16_t	regDmn[2];
706a9fcb51fSAdrian Chadd 	uint8_t		macAddr[6];
707a9fcb51fSAdrian Chadd 	uint8_t		rxMask;
708a9fcb51fSAdrian Chadd 	uint8_t		txMask;
709a9fcb51fSAdrian Chadd 	uint16_t	rfSilent;
710a9fcb51fSAdrian Chadd 	uint16_t	blueToothOptions;
711a9fcb51fSAdrian Chadd 	uint16_t	deviceCap;
712a9fcb51fSAdrian Chadd 	uint32_t	binBuildNumber;
713a9fcb51fSAdrian Chadd 	uint8_t		deviceType;
714a9fcb51fSAdrian Chadd 	uint8_t		futureBase[33];
715a9fcb51fSAdrian Chadd } __packed;
716a9fcb51fSAdrian Chadd 
717a9fcb51fSAdrian Chadd struct spurChanStruct {
718a9fcb51fSAdrian Chadd 	uint16_t	spurChan;
719a9fcb51fSAdrian Chadd 	uint8_t		spurRangeLow;
720a9fcb51fSAdrian Chadd 	uint8_t		spurRangeHigh;
721a9fcb51fSAdrian Chadd } __packed;
722a9fcb51fSAdrian Chadd 
723a9fcb51fSAdrian Chadd struct ModalEepHeader {
724a9fcb51fSAdrian Chadd 	uint32_t	antCtrlChain[AR5416_MAX_CHAINS];
725a9fcb51fSAdrian Chadd 	uint32_t	antCtrlCommon;
726a9fcb51fSAdrian Chadd 	int8_t		antennaGainCh[AR5416_MAX_CHAINS];
727a9fcb51fSAdrian Chadd 	uint8_t		switchSettling;
728a9fcb51fSAdrian Chadd 	uint8_t		txRxAttenCh[AR5416_MAX_CHAINS];
729a9fcb51fSAdrian Chadd 	uint8_t		rxTxMarginCh[AR5416_MAX_CHAINS];
730a9fcb51fSAdrian Chadd 	uint8_t		adcDesiredSize;
731a9fcb51fSAdrian Chadd 	int8_t		pgaDesiredSize;
732a9fcb51fSAdrian Chadd 	uint8_t		xlnaGainCh[AR5416_MAX_CHAINS];
733a9fcb51fSAdrian Chadd 	uint8_t		txEndToXpaOff;
734a9fcb51fSAdrian Chadd 	uint8_t		txEndToRxOn;
735a9fcb51fSAdrian Chadd 	uint8_t		txFrameToXpaOn;
736a9fcb51fSAdrian Chadd 	uint8_t		thresh62;
737a9fcb51fSAdrian Chadd 	uint8_t		noiseFloorThreshCh[AR5416_MAX_CHAINS];
738a9fcb51fSAdrian Chadd 	uint8_t		xpdGain;
739a9fcb51fSAdrian Chadd 	uint8_t		xpd;
740a9fcb51fSAdrian Chadd 	int8_t		iqCalICh[AR5416_MAX_CHAINS];
741a9fcb51fSAdrian Chadd 	int8_t		iqCalQCh[AR5416_MAX_CHAINS];
742a9fcb51fSAdrian Chadd 	uint8_t		pdGainOverlap;
743a9fcb51fSAdrian Chadd 	uint8_t		ob;
744a9fcb51fSAdrian Chadd 	uint8_t		db;
745a9fcb51fSAdrian Chadd 	uint8_t		xpaBiasLvl;
746a9fcb51fSAdrian Chadd 	uint8_t		pwrDecreaseFor2Chain;
747a9fcb51fSAdrian Chadd 	uint8_t		pwrDecreaseFor3Chain;
748a9fcb51fSAdrian Chadd 	uint8_t		txFrameToDataStart;
749a9fcb51fSAdrian Chadd 	uint8_t		txFrameToPaOn;
750a9fcb51fSAdrian Chadd 	uint8_t		ht40PowerIncForPdadc;
751a9fcb51fSAdrian Chadd 	uint8_t		bswAtten[AR5416_MAX_CHAINS];
752a9fcb51fSAdrian Chadd 	uint8_t		bswMargin[AR5416_MAX_CHAINS];
753a9fcb51fSAdrian Chadd 	uint8_t		swSettleHt40;
754a9fcb51fSAdrian Chadd 	uint8_t		futureModal[22];
755a9fcb51fSAdrian Chadd 	struct spurChanStruct spurChans[AR5416_EEPROM_MODAL_SPURS];
756a9fcb51fSAdrian Chadd } __packed;
757a9fcb51fSAdrian Chadd 
758a9fcb51fSAdrian Chadd struct calDataPerFreq {
759a9fcb51fSAdrian Chadd 	uint8_t		pwrPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
760a9fcb51fSAdrian Chadd 	uint8_t		vpdPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
761a9fcb51fSAdrian Chadd } __packed;
762a9fcb51fSAdrian Chadd 
763a9fcb51fSAdrian Chadd struct CalTargetPowerLegacy {
764a9fcb51fSAdrian Chadd 	uint8_t		bChannel;
765a9fcb51fSAdrian Chadd 	uint8_t		tPow2x[4];
766a9fcb51fSAdrian Chadd } __packed;
767a9fcb51fSAdrian Chadd 
768a9fcb51fSAdrian Chadd struct CalTargetPowerHt {
769a9fcb51fSAdrian Chadd 	uint8_t		bChannel;
770a9fcb51fSAdrian Chadd 	uint8_t		tPow2x[8];
771a9fcb51fSAdrian Chadd } __packed;
772a9fcb51fSAdrian Chadd 
773a9fcb51fSAdrian Chadd struct CalCtlEdges {
774a9fcb51fSAdrian Chadd 	uint8_t		bChannel;
775a9fcb51fSAdrian Chadd 	uint8_t		tPowerFlag;
776a9fcb51fSAdrian Chadd } __packed;
777a9fcb51fSAdrian Chadd 
778a9fcb51fSAdrian Chadd struct CalCtlData {
779a9fcb51fSAdrian Chadd 	struct CalCtlEdges ctlEdges[AR5416_MAX_CHAINS][AR5416_NUM_BAND_EDGES];
780a9fcb51fSAdrian Chadd } __packed;
781a9fcb51fSAdrian Chadd 
782a9fcb51fSAdrian Chadd struct ar5416eeprom {
783a9fcb51fSAdrian Chadd 	struct BaseEepHeader	baseEepHeader;
784a9fcb51fSAdrian Chadd 	uint8_t			custData[64];
785a9fcb51fSAdrian Chadd 	struct ModalEepHeader	modalHeader[2];
786a9fcb51fSAdrian Chadd 	uint8_t			calFreqPier5G[AR5416_NUM_5G_CAL_PIERS];
787a9fcb51fSAdrian Chadd 	uint8_t			calFreqPier2G[AR5416_NUM_2G_CAL_PIERS];
788a9fcb51fSAdrian Chadd 	struct calDataPerFreq	calPierData5G[AR5416_MAX_CHAINS]
789a9fcb51fSAdrian Chadd 					     [AR5416_NUM_5G_CAL_PIERS];
790a9fcb51fSAdrian Chadd 	struct calDataPerFreq	calPierData2G[AR5416_MAX_CHAINS]
791a9fcb51fSAdrian Chadd 					     [AR5416_NUM_2G_CAL_PIERS];
792a9fcb51fSAdrian Chadd 	struct CalTargetPowerLegacy calTPow5G[AR5416_NUM_5G_20_TARGET_POWERS];
793a9fcb51fSAdrian Chadd 	struct CalTargetPowerHt calTPow5GHT20[AR5416_NUM_5G_20_TARGET_POWERS];
794a9fcb51fSAdrian Chadd 	struct CalTargetPowerHt calTPow5GHT40[AR5416_NUM_5G_40_TARGET_POWERS];
795a9fcb51fSAdrian Chadd 	struct CalTargetPowerLegacy calTPowCck[AR5416_NUM_2G_CCK_TARGET_POWERS];
796a9fcb51fSAdrian Chadd 	struct CalTargetPowerLegacy calTPow2G[AR5416_NUM_2G_20_TARGET_POWERS];
797a9fcb51fSAdrian Chadd 	struct CalTargetPowerHt calTPow2GHT20[AR5416_NUM_2G_20_TARGET_POWERS];
798a9fcb51fSAdrian Chadd 	struct CalTargetPowerHt calTPow2GHT40[AR5416_NUM_2G_40_TARGET_POWERS];
799a9fcb51fSAdrian Chadd 	uint8_t			ctlIndex[AR5416_NUM_CTLS];
800a9fcb51fSAdrian Chadd 	struct CalCtlData	ctlData[AR5416_NUM_CTLS];
801a9fcb51fSAdrian Chadd 	uint8_t			padding;
802a9fcb51fSAdrian Chadd } __packed;
803a9fcb51fSAdrian Chadd 
804a9fcb51fSAdrian Chadd #define	OTUS_NUM_CHAINS			2
805a9fcb51fSAdrian Chadd 
806a9fcb51fSAdrian Chadd #define OTUS_UID(aid)		(IEEE80211_AID(aid) + 4)
807a9fcb51fSAdrian Chadd 
808a9fcb51fSAdrian Chadd #define OTUS_MAX_TXCMDSZ	64
809a9fcb51fSAdrian Chadd #define OTUS_RXBUFSZ		(8 * 1024)
810a9fcb51fSAdrian Chadd /* Bumped for later A-MSDU and legacy fast-frames TX support */
811a9fcb51fSAdrian Chadd #define OTUS_TXBUFSZ		(8 * 1024)
812a9fcb51fSAdrian Chadd 
813a9fcb51fSAdrian Chadd /* Default EDCA parameters for when QoS is disabled. */
814a9fcb51fSAdrian Chadd static const struct wmeParams otus_edca_def[WME_NUM_AC] = {
815a9fcb51fSAdrian Chadd 	{ 4, 10, 3,  0 },
816a9fcb51fSAdrian Chadd 	{ 4, 10, 7,  0 },
817a9fcb51fSAdrian Chadd 	{ 3,  4, 2, 94 },
818a9fcb51fSAdrian Chadd 	{ 2,  3, 2, 47 }
819a9fcb51fSAdrian Chadd };
820a9fcb51fSAdrian Chadd 
821a9fcb51fSAdrian Chadd #define OTUS_RIDX_CCK1		 0
822a9fcb51fSAdrian Chadd #define OTUS_RIDX_OFDM6		 4
823a9fcb51fSAdrian Chadd #define OTUS_RIDX_OFDM24	 8
824a9fcb51fSAdrian Chadd #define OTUS_RIDX_MAX		11
825a9fcb51fSAdrian Chadd static const struct otus_rate {
826a9fcb51fSAdrian Chadd 	uint8_t	rate;
827a9fcb51fSAdrian Chadd 	uint8_t	mcs;
828a9fcb51fSAdrian Chadd } otus_rates[] = {
829a9fcb51fSAdrian Chadd 	{   2, 0x0 },
830a9fcb51fSAdrian Chadd 	{   4, 0x1 },
831a9fcb51fSAdrian Chadd 	{  11, 0x2 },
832a9fcb51fSAdrian Chadd 	{  22, 0x3 },
833a9fcb51fSAdrian Chadd 	{  12, 0xb },
834a9fcb51fSAdrian Chadd 	{  18, 0xf },
835a9fcb51fSAdrian Chadd 	{  24, 0xa },
836a9fcb51fSAdrian Chadd 	{  36, 0xe },
837a9fcb51fSAdrian Chadd 	{  48, 0x9 },
838a9fcb51fSAdrian Chadd 	{  72, 0xd },
839a9fcb51fSAdrian Chadd 	{  96, 0x8 },
840a9fcb51fSAdrian Chadd 	{ 108, 0xc }
841a9fcb51fSAdrian Chadd };
842a9fcb51fSAdrian Chadd 
843a9fcb51fSAdrian Chadd struct otus_rx_radiotap_header {
844a9fcb51fSAdrian Chadd 	struct ieee80211_radiotap_header wr_ihdr;
845a9fcb51fSAdrian Chadd 	uint8_t		wr_flags;
846a9fcb51fSAdrian Chadd 	uint8_t		wr_rate;
847a9fcb51fSAdrian Chadd 	uint16_t	wr_chan_freq;
848a9fcb51fSAdrian Chadd 	uint16_t	wr_chan_flags;
849a9fcb51fSAdrian Chadd 	uint8_t		wr_antsignal;
850a9fcb51fSAdrian Chadd } __packed;
851a9fcb51fSAdrian Chadd 
852a9fcb51fSAdrian Chadd #define OTUS_RX_RADIOTAP_PRESENT			\
853a9fcb51fSAdrian Chadd 	(1 << IEEE80211_RADIOTAP_FLAGS |		\
854a9fcb51fSAdrian Chadd 	 1 << IEEE80211_RADIOTAP_RATE |			\
855a9fcb51fSAdrian Chadd 	 1 << IEEE80211_RADIOTAP_CHANNEL |		\
856a9fcb51fSAdrian Chadd 	 1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL)
857a9fcb51fSAdrian Chadd 
858a9fcb51fSAdrian Chadd struct otus_tx_radiotap_header {
859a9fcb51fSAdrian Chadd 	struct ieee80211_radiotap_header wt_ihdr;
860a9fcb51fSAdrian Chadd 	uint8_t		wt_flags;
861a9fcb51fSAdrian Chadd 	uint8_t		wt_rate;
862a9fcb51fSAdrian Chadd 	uint16_t	wt_chan_freq;
863a9fcb51fSAdrian Chadd 	uint16_t	wt_chan_flags;
864a9fcb51fSAdrian Chadd } __packed;
865a9fcb51fSAdrian Chadd 
866a9fcb51fSAdrian Chadd #define OTUS_TX_RADIOTAP_PRESENT			\
867a9fcb51fSAdrian Chadd 	(1 << IEEE80211_RADIOTAP_FLAGS |		\
868a9fcb51fSAdrian Chadd 	 1 << IEEE80211_RADIOTAP_RATE |			\
869a9fcb51fSAdrian Chadd 	 1 << IEEE80211_RADIOTAP_CHANNEL)
870a9fcb51fSAdrian Chadd 
871a9fcb51fSAdrian Chadd struct otus_softc;
872a9fcb51fSAdrian Chadd 
873a9fcb51fSAdrian Chadd /* Firmware commands */
874a9fcb51fSAdrian Chadd struct otus_tx_cmd {
875a9fcb51fSAdrian Chadd 	uint8_t			*buf;
876a9fcb51fSAdrian Chadd 	uint16_t		buflen;
877*c99a4e8aSKevin Lo 	void			*odata;
878c4dabdf7SAdrian Chadd 	uint16_t		odatalen;
879a9fcb51fSAdrian Chadd 	uint16_t		token;
880a9fcb51fSAdrian Chadd 	STAILQ_ENTRY(otus_tx_cmd)	next_cmd;
881a9fcb51fSAdrian Chadd };
882a9fcb51fSAdrian Chadd 
883a9fcb51fSAdrian Chadd /* TX, RX buffers */
884a9fcb51fSAdrian Chadd struct otus_data {
885a9fcb51fSAdrian Chadd 	struct otus_softc	*sc;
886a9fcb51fSAdrian Chadd 	uint8_t			*buf;
887a9fcb51fSAdrian Chadd 	uint16_t		buflen;
888a9fcb51fSAdrian Chadd 	struct mbuf		*m;
889a9fcb51fSAdrian Chadd 	struct ieee80211_node	*ni;
890a9fcb51fSAdrian Chadd 	STAILQ_ENTRY(otus_data)	next;
891a9fcb51fSAdrian Chadd };
892a9fcb51fSAdrian Chadd 
893a9fcb51fSAdrian Chadd struct otus_node {
894a9fcb51fSAdrian Chadd 	struct ieee80211_node		ni;
895a9fcb51fSAdrian Chadd 	uint64_t			tx_done;
896a9fcb51fSAdrian Chadd 	uint64_t			tx_err;
897a9fcb51fSAdrian Chadd 	uint64_t			tx_retries;
898a9fcb51fSAdrian Chadd };
899a9fcb51fSAdrian Chadd 
900a9fcb51fSAdrian Chadd #define OTUS_CONFIG_INDEX               0
901a9fcb51fSAdrian Chadd #define OTUS_IFACE_INDEX                0
902a9fcb51fSAdrian Chadd 
903a9fcb51fSAdrian Chadd /*
904a9fcb51fSAdrian Chadd  * The carl9170 firmware has the following specification:
905a9fcb51fSAdrian Chadd  *
906a9fcb51fSAdrian Chadd  * 0 - USB control
907a9fcb51fSAdrian Chadd  * 1 - TX
908a9fcb51fSAdrian Chadd  * 2 - RX
909a9fcb51fSAdrian Chadd  * 3 - IRQ
910a9fcb51fSAdrian Chadd  * 4 - CMD
911a9fcb51fSAdrian Chadd  * ..
912a9fcb51fSAdrian Chadd  * 10 - end
913a9fcb51fSAdrian Chadd  */
914a9fcb51fSAdrian Chadd enum {
915a9fcb51fSAdrian Chadd 	OTUS_BULK_TX,
916a9fcb51fSAdrian Chadd 	OTUS_BULK_RX,
917a9fcb51fSAdrian Chadd 	OTUS_BULK_IRQ,
918a9fcb51fSAdrian Chadd 	OTUS_BULK_CMD,
919a9fcb51fSAdrian Chadd 	OTUS_N_XFER
920a9fcb51fSAdrian Chadd };
921a9fcb51fSAdrian Chadd 
922a9fcb51fSAdrian Chadd struct otus_vap {
923a9fcb51fSAdrian Chadd 	struct ieee80211vap	vap;
924a9fcb51fSAdrian Chadd 	int			(*newstate)(struct ieee80211vap *,
925a9fcb51fSAdrian Chadd 				    enum ieee80211_state, int);
926a9fcb51fSAdrian Chadd };
927a9fcb51fSAdrian Chadd #define	OTUS_VAP(vap)		((struct otus_vap *)(vap))
928a9fcb51fSAdrian Chadd #define	OTUS_NODE(ni)		((struct otus_node *)(ni))
929a9fcb51fSAdrian Chadd 
930a9fcb51fSAdrian Chadd #define	OTUS_LOCK(sc)		mtx_lock(&(sc)->sc_mtx)
931a9fcb51fSAdrian Chadd #define	OTUS_UNLOCK(sc)		mtx_unlock(&(sc)->sc_mtx)
932a9fcb51fSAdrian Chadd #define	OTUS_LOCK_ASSERT(sc)	mtx_assert(&(sc)->sc_mtx, MA_OWNED)
933a9fcb51fSAdrian Chadd #define	OTUS_UNLOCK_ASSERT(sc)	mtx_assert(&(sc)->sc_mtx, MA_NOTOWNED)
934a9fcb51fSAdrian Chadd 
935a9fcb51fSAdrian Chadd /* XXX the TX/RX endpoint dump says it's 0x200, (512)? */
936a9fcb51fSAdrian Chadd #define	OTUS_MAX_TXSZ		512
937a9fcb51fSAdrian Chadd #define	OTUS_MAX_RXSZ		512
938a9fcb51fSAdrian Chadd /* intr/cmd endpoint dump says 0x40 */
939a9fcb51fSAdrian Chadd #define	OTUS_MAX_CTRLSZ		64
940a9fcb51fSAdrian Chadd 
941a9fcb51fSAdrian Chadd #define	OTUS_CMD_LIST_COUNT	32
942a9fcb51fSAdrian Chadd #define	OTUS_RX_LIST_COUNT	128
943a9fcb51fSAdrian Chadd #define	OTUS_TX_LIST_COUNT	32
944a9fcb51fSAdrian Chadd 
945a9fcb51fSAdrian Chadd struct otus_softc {
946a9fcb51fSAdrian Chadd 	struct ieee80211com		sc_ic;
947a9fcb51fSAdrian Chadd 	struct mbufq			sc_snd;
948a9fcb51fSAdrian Chadd 	device_t			sc_dev;
949a9fcb51fSAdrian Chadd 	struct usb_device		*sc_udev;
950a9fcb51fSAdrian Chadd 	int				(*sc_newstate)(struct ieee80211com *,
951a9fcb51fSAdrian Chadd 					    enum ieee80211_state, int);
952a9fcb51fSAdrian Chadd 	void				(*sc_led_newstate)(struct otus_softc *);
953a9fcb51fSAdrian Chadd 	struct usbd_interface		*sc_iface;
954a9fcb51fSAdrian Chadd 	struct mtx			sc_mtx;
955a9fcb51fSAdrian Chadd 
956a9fcb51fSAdrian Chadd 	struct ar5416eeprom		eeprom;
957a9fcb51fSAdrian Chadd 	uint8_t				capflags;
958a9fcb51fSAdrian Chadd 	uint8_t				rxmask;
959a9fcb51fSAdrian Chadd 	uint8_t				txmask;
960a9fcb51fSAdrian Chadd 	int				sc_running:1,
961a9fcb51fSAdrian Chadd 					sc_calibrating:1,
962a9fcb51fSAdrian Chadd 					sc_scanning:1;
963a9fcb51fSAdrian Chadd 
964a9fcb51fSAdrian Chadd 	int				sc_if_flags;
965a9fcb51fSAdrian Chadd 	int				sc_tx_timer;
966a9fcb51fSAdrian Chadd 	int				fixed_ridx;
967a9fcb51fSAdrian Chadd 	int				bb_reset;
968a9fcb51fSAdrian Chadd 
969a9fcb51fSAdrian Chadd 	struct ieee80211_channel	*sc_curchan;
970a9fcb51fSAdrian Chadd 
971a9fcb51fSAdrian Chadd 	struct task			tx_task;
972a9fcb51fSAdrian Chadd 	struct task			wme_update_task;
973a9fcb51fSAdrian Chadd 	struct timeout_task		scan_to;
974a9fcb51fSAdrian Chadd 	struct timeout_task		calib_to;
975a9fcb51fSAdrian Chadd 
976a9fcb51fSAdrian Chadd 	/* register batch writes */
977a9fcb51fSAdrian Chadd 	int				write_idx;
978a9fcb51fSAdrian Chadd 
979a9fcb51fSAdrian Chadd 	uint32_t			led_state;
980a9fcb51fSAdrian Chadd 
981a9fcb51fSAdrian Chadd 	/* current firmware message serial / token number */
982a9fcb51fSAdrian Chadd 	int				token;
983a9fcb51fSAdrian Chadd 
984a9fcb51fSAdrian Chadd 	/* current noisefloor, from SET_FREQUENCY */
985a9fcb51fSAdrian Chadd 	int				sc_nf[OTUS_NUM_CHAINS];
986a9fcb51fSAdrian Chadd 
987c74d4747SAdrian Chadd 	/* How many pending, active transmit frames */
988c74d4747SAdrian Chadd 	int				sc_tx_n_pending;
989c74d4747SAdrian Chadd 	int				sc_tx_n_active;
990c74d4747SAdrian Chadd 
991a9fcb51fSAdrian Chadd 	const uint32_t			*phy_vals;
992a9fcb51fSAdrian Chadd 
993a9fcb51fSAdrian Chadd 	struct {
994a9fcb51fSAdrian Chadd 		uint32_t	reg;
995a9fcb51fSAdrian Chadd 		uint32_t	val;
996a9fcb51fSAdrian Chadd 	} __packed			write_buf[AR_MAX_WRITE_IDX + 1];
997a9fcb51fSAdrian Chadd 
998a9fcb51fSAdrian Chadd 	struct otus_data		sc_rx[OTUS_RX_LIST_COUNT];
999a9fcb51fSAdrian Chadd 	struct otus_data		sc_tx[OTUS_TX_LIST_COUNT];
1000a9fcb51fSAdrian Chadd 	struct otus_tx_cmd		sc_cmd[OTUS_CMD_LIST_COUNT];
1001a9fcb51fSAdrian Chadd 
1002a9fcb51fSAdrian Chadd 	struct usb_xfer			*sc_xfer[OTUS_N_XFER];
1003a9fcb51fSAdrian Chadd 
1004a9fcb51fSAdrian Chadd 	STAILQ_HEAD(, otus_data)	sc_rx_active;
1005a9fcb51fSAdrian Chadd 	STAILQ_HEAD(, otus_data)	sc_rx_inactive;
1006a9fcb51fSAdrian Chadd 	STAILQ_HEAD(, otus_data)	sc_tx_active[OTUS_N_XFER];
1007a9fcb51fSAdrian Chadd 	STAILQ_HEAD(, otus_data)	sc_tx_inactive;
1008a9fcb51fSAdrian Chadd 	STAILQ_HEAD(, otus_data)	sc_tx_pending[OTUS_N_XFER];
1009a9fcb51fSAdrian Chadd 
1010a9fcb51fSAdrian Chadd 	STAILQ_HEAD(, otus_tx_cmd)	sc_cmd_active;
1011a9fcb51fSAdrian Chadd 	STAILQ_HEAD(, otus_tx_cmd)	sc_cmd_inactive;
1012a9fcb51fSAdrian Chadd 	STAILQ_HEAD(, otus_tx_cmd)	sc_cmd_pending;
1013a9fcb51fSAdrian Chadd 	STAILQ_HEAD(, otus_tx_cmd)	sc_cmd_waiting;
1014a9fcb51fSAdrian Chadd 
1015a9fcb51fSAdrian Chadd 	union {
1016a9fcb51fSAdrian Chadd 		struct otus_rx_radiotap_header th;
1017a9fcb51fSAdrian Chadd 		uint8_t	pad[64];
1018a9fcb51fSAdrian Chadd 	}				sc_rxtapu;
1019a9fcb51fSAdrian Chadd #define sc_rxtap	sc_rxtapu.th
1020a9fcb51fSAdrian Chadd 	int				sc_rxtap_len;
1021a9fcb51fSAdrian Chadd 
1022a9fcb51fSAdrian Chadd 	union {
1023a9fcb51fSAdrian Chadd 		struct otus_tx_radiotap_header th;
1024a9fcb51fSAdrian Chadd 		uint8_t	pad[64];
1025a9fcb51fSAdrian Chadd 	}				sc_txtapu;
1026a9fcb51fSAdrian Chadd #define sc_txtap	sc_txtapu.th
1027a9fcb51fSAdrian Chadd 	int				sc_txtap_len;
1028a9fcb51fSAdrian Chadd };
1029a9fcb51fSAdrian Chadd 
1030a9fcb51fSAdrian Chadd #endif	/* __IF_OTUSREG_H__ */
1031