1288253Sadrian/*	$OpenBSD: if_otusreg.h,v 1.9 2013/11/26 20:33:18 deraadt Exp $	*/
2288253Sadrian
3288253Sadrian/*-
4288253Sadrian * Copyright (c) 2009 Damien Bergamini <damien.bergamini@free.fr>
5288253Sadrian * Copyright (c) 2007-2008 Atheros Communications, Inc.
6288253Sadrian * Copyright (c) 2015 Adrian Chadd <adrian@FreeBSD.org>
7288253Sadrian *
8288253Sadrian * Permission to use, copy, modify, and distribute this software for any
9288253Sadrian * purpose with or without fee is hereby granted, provided that the above
10288253Sadrian * copyright notice and this permission notice appear in all copies.
11288253Sadrian *
12288253Sadrian * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13288253Sadrian * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14288253Sadrian * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15288253Sadrian * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16288253Sadrian * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17288253Sadrian * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18288253Sadrian * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19288253Sadrian *
20288253Sadrian * $FreeBSD: stable/11/sys/dev/otus/if_otusreg.h 345636 2019-03-28 09:50:25Z avos $
21288253Sadrian */
22288253Sadrian#ifndef	__IF_OTUSREG_H__
23288253Sadrian#define	__IF_OTUSREG_H__
24288253Sadrian
25288253Sadrian/* USB Endpoints addresses. */
26288253Sadrian#define AR_EPT_BULK_TX_NO	(UE_DIR_OUT | 1)
27288253Sadrian#define AR_EPT_BULK_RX_NO	(UE_DIR_IN  | 2)
28288253Sadrian#define AR_EPT_INTR_RX_NO	(UE_DIR_IN  | 3)
29288253Sadrian#define AR_EPT_INTR_TX_NO	(UE_DIR_OUT | 4)
30288253Sadrian
31288253Sadrian/* USB Requests. */
32288253Sadrian#define AR_FW_DOWNLOAD			0x30
33288253Sadrian#define AR_FW_DOWNLOAD_COMPLETE		0x31
34288253Sadrian
35288253Sadrian/* Maximum number of writes that can fit in a single FW command is 7. */
36288253Sadrian#define AR_MAX_WRITE_IDX	6	/* 56 bytes */
37288253Sadrian
38288253Sadrian#define AR_FW_INIT_ADDR			0x102800
39288253Sadrian#define AR_FW_MAIN_ADDR			0x200000
40288253Sadrian#define AR_USB_MODE_CTRL		0x1e1108
41288253Sadrian
42288253Sadrian/*
43288253Sadrian * AR9170 MAC registers.
44288253Sadrian */
45288253Sadrian#define AR_MAC_REG_BASE			0x1c3000
46289781Sadrian#define AR_MAC_REG_DMA_TRIGGER		(AR_MAC_REG_BASE + 0xd30)
47288253Sadrian#define AR_MAC_REG_MAC_ADDR_L		(AR_MAC_REG_BASE + 0x610)
48288253Sadrian#define AR_MAC_REG_MAC_ADDR_H		(AR_MAC_REG_BASE + 0x614)
49288253Sadrian#define AR_MAC_REG_BSSID_L		(AR_MAC_REG_BASE + 0x618)
50288253Sadrian#define AR_MAC_REG_BSSID_H		(AR_MAC_REG_BASE + 0x61c)
51288253Sadrian#define AR_MAC_REG_GROUP_HASH_TBL_L	(AR_MAC_REG_BASE + 0x624)
52288253Sadrian#define AR_MAC_REG_GROUP_HASH_TBL_H	(AR_MAC_REG_BASE + 0x628)
53289781Sadrian#define AR_MAC_REG_RX_TIMEOUT		(AR_MAC_REG_BASE + 0x62c)
54288253Sadrian#define AR_MAC_REG_BASIC_RATE		(AR_MAC_REG_BASE + 0x630)
55288253Sadrian#define AR_MAC_REG_MANDATORY_RATE	(AR_MAC_REG_BASE + 0x634)
56288253Sadrian#define AR_MAC_REG_RTS_CTS_RATE		(AR_MAC_REG_BASE + 0x638)
57288253Sadrian#define AR_MAC_REG_BACKOFF_PROTECT	(AR_MAC_REG_BASE + 0x63c)
58288253Sadrian#define AR_MAC_REG_RX_THRESHOLD		(AR_MAC_REG_BASE + 0x640)
59288253Sadrian#define AR_MAC_REG_RX_PE_DELAY		(AR_MAC_REG_BASE + 0x64c)
60288253Sadrian#define AR_MAC_REG_DYNAMIC_SIFS_ACK	(AR_MAC_REG_BASE + 0x658)
61288253Sadrian#define AR_MAC_REG_SNIFFER		(AR_MAC_REG_BASE + 0x674)
62290432Sadrian#define         AR_MAC_SNIFFER_DEFAULTS	0x02000000
63290432Sadrian#define         AR_MAC_SNIFFER_ENABLE_PROMISC	0x1
64289781Sadrian#define AR_MAC_REG_ENCRYPTION		(AR_MAC_REG_BASE + 0x678)
65289781Sadrian#define AR_MAC_REG_MISC_680		(AR_MAC_REG_BASE + 0x680)
66289781Sadrian#define AR_MAC_REG_FRAMETYPE_FILTER	(AR_MAC_REG_BASE + 0x68c)
67288253Sadrian#define AR_MAC_REG_ACK_EXTENSION	(AR_MAC_REG_BASE + 0x690)
68289781Sadrian#define AR_MAC_REG_ACK_TPC		(AR_MAC_REG_BASE + 0x694)
69288253Sadrian#define AR_MAC_REG_EIFS_AND_SIFS	(AR_MAC_REG_BASE + 0x698)
70288253Sadrian#define AR_MAC_REG_BUSY			(AR_MAC_REG_BASE + 0x6e8)
71288253Sadrian#define AR_MAC_REG_BUSY_EXT		(AR_MAC_REG_BASE + 0x6ec)
72288253Sadrian#define AR_MAC_REG_SLOT_TIME		(AR_MAC_REG_BASE + 0x6f0)
73289781Sadrian#define AR_MAC_REG_CAM_MODE		(AR_MAC_REG_BASE + 0x700)
74290432Sadrian#define         AR_MAC_CAM_DEFAULTS	(0xf << 24)
75290432Sadrian#define         AR_MAC_CAM_IBSS		0xe0
76290432Sadrian#define         AR_MAC_CAM_AP		0xa1
77290432Sadrian#define         AR_MAC_CAM_STA		0x2
78290432Sadrian#define         AR_MAC_CAM_AP_WDS	0x3
79288253Sadrian#define AR_MAC_REG_AC0_CW		(AR_MAC_REG_BASE + 0xb00)
80288253Sadrian#define AR_MAC_REG_AC1_CW		(AR_MAC_REG_BASE + 0xb04)
81288253Sadrian#define AR_MAC_REG_AC2_CW		(AR_MAC_REG_BASE + 0xb08)
82288253Sadrian#define AR_MAC_REG_AC3_CW		(AR_MAC_REG_BASE + 0xb0c)
83288253Sadrian#define AR_MAC_REG_AC4_CW		(AR_MAC_REG_BASE + 0xb10)
84288253Sadrian#define AR_MAC_REG_AC1_AC0_AIFS		(AR_MAC_REG_BASE + 0xb14)
85288253Sadrian#define AR_MAC_REG_AC3_AC2_AIFS		(AR_MAC_REG_BASE + 0xb18)
86288253Sadrian#define AR_MAC_REG_RETRY_MAX		(AR_MAC_REG_BASE + 0xb28)
87289781Sadrian#define AR_MAC_REG_TID_CFACK_CFEND_RATE	(AR_MAC_REG_BASE + 0xb2c)
88288253Sadrian#define AR_MAC_REG_TXOP_NOT_ENOUGH_INDICATION	\
89288253Sadrian					(AR_MAC_REG_BASE + 0xb30)
90289781Sadrian#define AR_MAC_REG_TXOP_DURATION	(AR_MAC_REG_BASE + 0xb38)
91288253Sadrian#define AR_MAC_REG_AC1_AC0_TXOP		(AR_MAC_REG_BASE + 0xb44)
92288253Sadrian#define AR_MAC_REG_AC3_AC2_TXOP		(AR_MAC_REG_BASE + 0xb48)
93289781Sadrian#define AR_MAC_REG_AMPDU_FACTOR		(AR_MAC_REG_BASE + 0xb9c)
94289781Sadrian#define AR_MAC_REG_FCS_SELECT		(AR_MAC_REG_BASE + 0xbb0)
95289781Sadrian#define AR_MAC_REG_RX_CONTROL		(AR_MAC_REG_BASE + 0xc40)
96290432Sadrian#define         AR_MAC_RX_CTRL_DEAGG		0x1
97290432Sadrian#define         AR_MAC_RX_CTRL_SHORT_FILTER	0x2
98290432Sadrian#define         AR_MAC_RX_CTRL_SA_DA_SEARCH	0x20
99290432Sadrian#define         AR_MAC_RX_CTRL_PASS_TO_HOST	(1 << 28)
100290432Sadrian#define         AR_MAC_RX_CTRL_ACK_IN_SNIFFER	(1 << 30)
101290432Sadrian
102289781Sadrian#define AR_MAC_REG_AMPDU_RX_THRESH	(AR_MAC_REG_BASE + 0xc50)
103288253Sadrian#define AR_MAC_REG_OFDM_PHY_ERRORS	(AR_MAC_REG_BASE + 0xcb4)
104288253Sadrian#define AR_MAC_REG_CCK_PHY_ERRORS	(AR_MAC_REG_BASE + 0xcb8)
105289781Sadrian#define AR_MAC_REG_TXRX_MPI		(AR_MAC_REG_BASE + 0xd7c)
106288253Sadrian#define AR_MAC_REG_BCN_HT1		(AR_MAC_REG_BASE + 0xda0)
107288253Sadrian
108288253Sadrian/* Possible values for register AR_USB_MODE_CTRL. */
109288253Sadrian#define AR_USB_DS_ENA		(1 << 0)
110288253Sadrian#define AR_USB_US_ENA		(1 << 1)
111288253Sadrian#define AR_USB_US_PACKET_MODE	(1 << 3)
112288253Sadrian#define AR_USB_RX_STREAM_4K	(0 << 4)
113288253Sadrian#define AR_USB_RX_STREAM_8K	(1 << 4)
114288253Sadrian#define AR_USB_RX_STREAM_16K	(2 << 4)
115288253Sadrian#define AR_USB_RX_STREAM_32K	(3 << 4)
116288253Sadrian#define AR_USB_TX_STREAM_MODE	(1 << 6)
117288253Sadrian
118288253Sadrian#define AR_LED0_ON	(1 << 0)
119288253Sadrian#define AR_LED1_ON	(1 << 1)
120288253Sadrian
121288253Sadrian/*
122288253Sadrian * PHY registers.
123288253Sadrian */
124288253Sadrian#define AR_PHY_BASE			0x1c5800
125288253Sadrian#define AR_PHY(reg)			(AR_PHY_BASE + (reg) * 4)
126288253Sadrian#define AR_PHY_TURBO			(AR_PHY_BASE + 0x0004)
127288253Sadrian#define AR_PHY_RF_CTL3			(AR_PHY_BASE + 0x0028)
128288253Sadrian#define AR_PHY_RF_CTL4			(AR_PHY_BASE + 0x0034)
129288253Sadrian#define AR_PHY_SETTLING			(AR_PHY_BASE + 0x0044)
130288253Sadrian#define AR_PHY_RXGAIN			(AR_PHY_BASE + 0x0048)
131288253Sadrian#define AR_PHY_DESIRED_SZ		(AR_PHY_BASE + 0x0050)
132288253Sadrian#define AR_PHY_FIND_SIG			(AR_PHY_BASE + 0x0058)
133288253Sadrian#define AR_PHY_AGC_CTL1			(AR_PHY_BASE + 0x005c)
134288253Sadrian#define AR_PHY_SFCORR			(AR_PHY_BASE + 0x0068)
135288253Sadrian#define AR_PHY_SFCORR_LOW		(AR_PHY_BASE + 0x006c)
136288253Sadrian#define AR_PHY_TIMING_CTRL4		(AR_PHY_BASE + 0x0120)
137288253Sadrian#define AR_PHY_TIMING5			(AR_PHY_BASE + 0x0124)
138288253Sadrian#define AR_PHY_POWER_TX_RATE1		(AR_PHY_BASE + 0x0134)
139288253Sadrian#define AR_PHY_POWER_TX_RATE2		(AR_PHY_BASE + 0x0138)
140288253Sadrian#define AR_PHY_POWER_TX_RATE_MAX	(AR_PHY_BASE + 0x013c)
141288253Sadrian#define AR_PHY_SWITCH_CHAIN_0		(AR_PHY_BASE + 0x0160)
142288253Sadrian#define AR_PHY_SWITCH_COM		(AR_PHY_BASE + 0x0164)
143288253Sadrian#define AR_PHY_HEAVY_CLIP_ENABLE	(AR_PHY_BASE + 0x01e0)
144288253Sadrian#define AR_PHY_CCK_DETECT		(AR_PHY_BASE + 0x0a08)
145288253Sadrian#define AR_PHY_GAIN_2GHZ		(AR_PHY_BASE + 0x0a0c)
146288253Sadrian#define AR_PHY_POWER_TX_RATE3		(AR_PHY_BASE + 0x0a34)
147288253Sadrian#define AR_PHY_POWER_TX_RATE4		(AR_PHY_BASE + 0x0a38)
148288253Sadrian#define AR_PHY_TPCRG1			(AR_PHY_BASE + 0x0a58)
149288253Sadrian#define AR_PHY_POWER_TX_RATE5		(AR_PHY_BASE + 0x0b8c)
150288253Sadrian#define AR_PHY_POWER_TX_RATE6		(AR_PHY_BASE + 0x0b90)
151288253Sadrian#define AR_PHY_POWER_TX_RATE7		(AR_PHY_BASE + 0x0bcc)
152288253Sadrian#define AR_PHY_POWER_TX_RATE8		(AR_PHY_BASE + 0x0bd0)
153288253Sadrian#define AR_PHY_POWER_TX_RATE9		(AR_PHY_BASE + 0x0bd4)
154288253Sadrian#define AR_PHY_CCA			(AR_PHY_BASE + 0x3064)
155288253Sadrian
156288253Sadrian#define AR_SEEPROM_HW_TYPE_OFFSET	0x1374
157288253Sadrian#define AR_EEPROM_OFFSET		0x1600
158288253Sadrian
159288253Sadrian#define AR_BANK4_CHUP			(1 << 0)
160288253Sadrian#define AR_BANK4_BMODE_LF_SYNTH_FREQ	(1 << 1)
161288253Sadrian#define AR_BANK4_AMODE_REFSEL(x)	((x) << 2)
162288253Sadrian#define AR_BANK4_ADDR(x)		((x) << 5)
163288253Sadrian
164289781Sadrian/*
165289781Sadrian * Random number generator.
166289781Sadrian */
167289781Sadrian#define	AR_RAND_REG_BASE		0x1d0000
168289781Sadrian
169289781Sadrian/*
170289781Sadrian * GPIO.
171289781Sadrian */
172289781Sadrian#define	AR_GPIO_REG_BASE		0x1d0100
173289781Sadrian
174289781Sadrian#define	AR_GPIO_REG_PORT_TYPE			(AR_GPIO_REG_BASE + 0x000)
175289781Sadrian#define	AR_GPIO_REG_PORT_DATA			(AR_GPIO_REG_BASE + 0x004)
176289781Sadrian#define		AR_GPIO_PORT_LED_0		1
177289781Sadrian#define		AR_GPIO_PORT_LED_1		2
178289781Sadrian/* WPS Button GPIO for TP-Link TL-WN821N */
179289781Sadrian#define	AR_GPIO_PORT_WPS_BUTTON_PRESSED		4
180289781Sadrian
181289781Sadrian/*
182289781Sadrian * Power Management.
183289781Sadrian */
184289781Sadrian#define	AR_PWR_REG_BASE			0x1d4000
185289781Sadrian
186289781Sadrian#define	AR_PWR_REG_RESET		(AR_PWR_REG_BASE + 0x004)
187289781Sadrian#define	AR_PWR_REG_CLOCK_SEL		(AR_PWR_REG_BASE + 0x008)
188289781Sadrian#define	AR_PWR_REG_PLL_ADDAC		(AR_PWR_REG_BASE + 0x014)
189289781Sadrian
190288253Sadrian/* Tx descriptor. */
191288253Sadrianstruct ar_tx_head {
192288253Sadrian	uint16_t	len;
193288253Sadrian	uint16_t	macctl;
194288253Sadrian#define AR_TX_MAC_RTS		(1 <<  0)
195288253Sadrian#define AR_TX_MAC_CTS		(1 <<  1)
196288253Sadrian#define AR_TX_MAC_BACKOFF	(1 <<  3)
197288253Sadrian#define AR_TX_MAC_NOACK		(1 <<  2)
198288253Sadrian#define AR_TX_MAC_HW_DUR	(1 <<  9)
199288253Sadrian#define AR_TX_MAC_QID(qid)	((qid) << 10)
200288253Sadrian#define AR_TX_MAC_RATE_PROBING	(1 << 15)
201288253Sadrian
202288253Sadrian	uint32_t	phyctl;
203288253Sadrian/* Modulation type. */
204288253Sadrian#define AR_TX_PHY_MT_CCK	0
205288253Sadrian#define AR_TX_PHY_MT_OFDM	1
206288253Sadrian#define AR_TX_PHY_MT_HT		2
207288253Sadrian#define AR_TX_PHY_GF		(1 << 2)
208288253Sadrian#define AR_TX_PHY_BW_SHIFT	3
209288253Sadrian#define AR_TX_PHY_TPC_SHIFT	9
210288253Sadrian#define AR_TX_PHY_ANTMSK(msk)	((msk) << 15)
211288253Sadrian#define AR_TX_PHY_MCS(mcs)	((mcs) << 18)
212288253Sadrian#define AR_TX_PHY_SHGI		(1U << 31)
213288253Sadrian} __packed;
214288253Sadrian
215288253Sadrian/* USB Rx stream mode header. */
216288253Sadrianstruct ar_rx_head {
217288253Sadrian	uint16_t	len;
218288253Sadrian	uint16_t	tag;
219288253Sadrian#define AR_RX_HEAD_TAG	0x4e00
220288253Sadrian} __packed;
221288253Sadrian
222288253Sadrian/* Rx descriptor. */
223288253Sadrianstruct ar_rx_tail {
224288253Sadrian	uint8_t	rssi_ant[3];
225288253Sadrian	uint8_t	rssi_ant_ext[3];
226288253Sadrian	uint8_t	rssi;		/* Combined RSSI. */
227288253Sadrian	uint8_t	evm[2][6];	/* Error Vector Magnitude. */
228288253Sadrian	uint8_t	phy_err;
229288253Sadrian	uint8_t	sa_idx;
230288253Sadrian	uint8_t	da_idx;
231288253Sadrian	uint8_t	error;
232288253Sadrian#define AR_RX_ERROR_TIMEOUT	(1 << 0)
233288253Sadrian#define AR_RX_ERROR_OVERRUN	(1 << 1)
234288253Sadrian#define AR_RX_ERROR_DECRYPT	(1 << 2)
235288253Sadrian#define AR_RX_ERROR_FCS		(1 << 3)
236288253Sadrian#define AR_RX_ERROR_BAD_RA	(1 << 4)
237288253Sadrian#define AR_RX_ERROR_PLCP	(1 << 5)
238288253Sadrian#define AR_RX_ERROR_MMIC	(1 << 6)
239288253Sadrian
240288253Sadrian	uint8_t	status;
241288253Sadrian/* Modulation type (same as AR_TX_PHY_MT). */
242288253Sadrian#define AR_RX_STATUS_MT_MASK	0x3
243288253Sadrian#define AR_RX_STATUS_MT_CCK	0
244288253Sadrian#define AR_RX_STATUS_MT_OFDM	1
245288253Sadrian#define AR_RX_STATUS_MT_HT	2
246288253Sadrian#define AR_RX_STATUS_SHPREAMBLE	(1 << 3)
247288253Sadrian} __packed;
248288253Sadrian
249288253Sadrian#define AR_PLCP_HDR_LEN	12
250288253Sadrian/* Magic PLCP header for firmware notifications through Rx bulk pipe. */
251288253Sadrianstatic uint8_t AR_PLCP_HDR_INTR[] = {
252288253Sadrian	0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
253288253Sadrian	0xff, 0xff, 0xff, 0xff, 0xff, 0xff
254288253Sadrian};
255288253Sadrian
256288253Sadrian/* Firmware command/reply header. */
257288253Sadrianstruct ar_cmd_hdr {
258288253Sadrian	uint8_t		len;
259288253Sadrian	uint8_t		code;
260288253Sadrian#define AR_CMD_RREG		0x00
261288253Sadrian#define AR_CMD_WREG		0x01
262288253Sadrian#define AR_CMD_RMEM		0x02
263288253Sadrian#define AR_CMD_WMEM		0x03
264288253Sadrian#define AR_CMD_BITAND		0x04
265288253Sadrian#define AR_CMD_BITOR		0x05
266288253Sadrian#define AR_CMD_EKEY		0x28
267288253Sadrian#define AR_CMD_DKEY		0x29
268288253Sadrian#define AR_CMD_FREQUENCY	0x30
269288253Sadrian#define AR_CMD_RF_INIT		0x31
270288253Sadrian#define AR_CMD_SYNTH		0x32
271288253Sadrian#define AR_CMD_FREQ_STRAT	0x33
272288253Sadrian#define AR_CMD_ECHO		0x80
273288253Sadrian#define AR_CMD_TALLY		0x81
274288253Sadrian#define AR_CMD_TALLY_APD	0x82
275288253Sadrian#define AR_CMD_CONFIG		0x83
276288253Sadrian#define AR_CMD_RESET		0x90
277288253Sadrian#define AR_CMD_DKRESET		0x91
278288253Sadrian#define AR_CMD_DKTX_STATUS	0x92
279288253Sadrian#define AR_CMD_FDC		0xa0
280288253Sadrian#define AR_CMD_WREEPROM		0xb0
281288253Sadrian#define AR_CMD_WFLASH		AR_CMD_WREEPROM
282288253Sadrian#define AR_CMD_FLASH_ERASE	0xb1
283288253Sadrian#define AR_CMD_FLASH_PROG	0xb2
284288253Sadrian#define AR_CMD_FLASH_CHKSUM	0xb3
285288253Sadrian#define AR_CMD_FLASH_READ	0xb4
286288253Sadrian#define AR_CMD_FW_DL_INIT	0xb5
287288253Sadrian#define AR_CMD_MEM_WREEPROM	0xbb
288288253Sadrian/* Those have the 2 MSB set to 1. */
289288253Sadrian#define AR_EVT_BEACON		0x00
290288253Sadrian#define AR_EVT_TX_COMP		0x01
291288253Sadrian#define AR_EVT_TBTT		0x02
292288253Sadrian#define AR_EVT_ATIM		0x03
293288253Sadrian#define AR_EVT_DO_BB_RESET	0x09
294288253Sadrian
295288253Sadrian	uint16_t	token;	/* Driver private data. */
296288253Sadrian} __packed;
297288253Sadrian
298288253Sadrian/* Structure for command AR_CMD_RF_INIT/AR_CMD_FREQUENCY. */
299288253Sadrianstruct ar_cmd_frequency {
300288253Sadrian	uint32_t	freq;
301288253Sadrian	uint32_t	dynht2040;
302288253Sadrian	uint32_t	htena;
303288253Sadrian	uint32_t	dsc_exp;
304288253Sadrian	uint32_t	dsc_man;
305288253Sadrian	uint32_t	dsc_shgi_exp;
306288253Sadrian	uint32_t	dsc_shgi_man;
307288253Sadrian	uint32_t	check_loop_count;
308288253Sadrian} __packed;
309288253Sadrian
310288253Sadrian/* Firmware reply for command AR_CMD_FREQUENCY. */
311288253Sadrianstruct ar_rsp_frequency {
312288253Sadrian	uint32_t	status;
313288253Sadrian#define AR_CAL_ERR_AGC		(1 << 0)	/* AGC cal unfinished. */
314288253Sadrian#define AR_CAL_ERR_NF		(1 << 1)	/* Noise cal unfinished. */
315288253Sadrian#define AR_CAL_ERR_NF_VAL	(1 << 2)	/* NF value unexpected. */
316288253Sadrian
317288253Sadrian	uint32_t	nf[3];		/* Noisefloor. */
318288253Sadrian	uint32_t	nf_ext[3];	/* Noisefloor ext. */
319288253Sadrian} __packed;
320288253Sadrian
321288253Sadrian/* Structure for command AR_CMD_EKEY. */
322288253Sadrianstruct ar_cmd_ekey {
323288253Sadrian	uint16_t	uid;	/* user ID */
324288253Sadrian	uint16_t	kix;
325288253Sadrian	uint16_t	cipher;
326288253Sadrian#define AR_CIPHER_NONE		0
327288253Sadrian#define AR_CIPHER_WEP64		1
328288253Sadrian#define AR_CIPHER_TKIP		2
329288253Sadrian#define AR_CIPHER_AES		4
330288253Sadrian#define AR_CIPHER_WEP128	5
331288253Sadrian#define AR_CIPHER_WEP256	6
332288253Sadrian#define AR_CIPHER_CENC		7
333288253Sadrian
334288253Sadrian	uint8_t		macaddr[IEEE80211_ADDR_LEN];
335288253Sadrian	uint8_t		key[16];
336288253Sadrian} __packed;
337288253Sadrian
338288253Sadrian/* Structure for event AR_EVT_TX_COMP. */
339288253Sadrianstruct ar_evt_tx_comp {
340288253Sadrian	uint8_t		macaddr[IEEE80211_ADDR_LEN];
341288253Sadrian	uint32_t	phy;
342288253Sadrian	uint16_t	status;
343288253Sadrian#define AR_TX_STATUS_COMP	0
344288253Sadrian#define AR_TX_STATUS_RETRY_COMP	1
345288253Sadrian#define AR_TX_STATUS_FAILED	2
346288253Sadrian} __packed;
347288253Sadrian
348288253Sadrian/* List of supported channels. */
349288253Sadrianstatic const uint8_t ar_chans[] = {
350288253Sadrian	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
351298894Savos	34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64, 100, 104, 108,
352298894Savos	112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165
353288253Sadrian};
354288253Sadrian
355288253Sadrian/*
356288253Sadrian * This data is automatically generated from the "otus.ini" file.
357288253Sadrian * It is stored in a different way though, to reduce kernel's .rodata
358288253Sadrian * section overhead (5.1KB instead of 8.5KB).
359288253Sadrian */
360288253Sadrian
361288253Sadrian/* NB: apply AR_PHY(). */
362288253Sadrianstatic const uint16_t ar5416_phy_regs[] = {
363288253Sadrian	0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, 0x008,
364288253Sadrian	0x009, 0x00a, 0x00b, 0x00c, 0x00d, 0x00e, 0x00f, 0x010, 0x011,
365288253Sadrian	0x012, 0x013, 0x014, 0x015, 0x016, 0x017, 0x018, 0x01a, 0x01b,
366288253Sadrian	0x040, 0x041, 0x042, 0x043, 0x045, 0x046, 0x047, 0x048, 0x049,
367288253Sadrian	0x04a, 0x04b, 0x04d, 0x04e, 0x04f, 0x051, 0x052, 0x053, 0x055,
368288253Sadrian	0x056, 0x058, 0x059, 0x05c, 0x05d, 0x05e, 0x05f, 0x060, 0x061,
369288253Sadrian	0x062, 0x063, 0x064, 0x065, 0x066, 0x067, 0x068, 0x069, 0x06a,
370288253Sadrian	0x06b, 0x06c, 0x06d, 0x070, 0x071, 0x072, 0x073, 0x074, 0x075,
371288253Sadrian	0x076, 0x077, 0x078, 0x079, 0x07a, 0x07b, 0x07c, 0x07f, 0x080,
372288253Sadrian	0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087, 0x088, 0x089,
373288253Sadrian	0x08a, 0x08b, 0x08c, 0x08d, 0x08e, 0x08f, 0x090, 0x091, 0x092,
374288253Sadrian	0x093, 0x094, 0x095, 0x096, 0x097, 0x098, 0x099, 0x09a, 0x09b,
375288253Sadrian	0x09c, 0x09d, 0x09e, 0x09f, 0x0a0, 0x0a1, 0x0a2, 0x0a3, 0x0a4,
376288253Sadrian	0x0a5, 0x0a6, 0x0a7, 0x0a8, 0x0a9, 0x0aa, 0x0ab, 0x0ac, 0x0ad,
377288253Sadrian	0x0ae, 0x0af, 0x0b0, 0x0b1, 0x0b2, 0x0b3, 0x0b4, 0x0b5, 0x0b6,
378288253Sadrian	0x0b7, 0x0b8, 0x0b9, 0x0ba, 0x0bb, 0x0bc, 0x0bd, 0x0be, 0x0bf,
379288253Sadrian	0x0c0, 0x0c1, 0x0c2, 0x0c3, 0x0c4, 0x0c5, 0x0c6, 0x0c7, 0x0c8,
380288253Sadrian	0x0c9, 0x0ca, 0x0cb, 0x0cc, 0x0cd, 0x0ce, 0x0cf, 0x0d0, 0x0d1,
381288253Sadrian	0x0d2, 0x0d3, 0x0d4, 0x0d5, 0x0d6, 0x0d7, 0x0d8, 0x0d9, 0x0da,
382288253Sadrian	0x0db, 0x0dc, 0x0dd, 0x0de, 0x0df, 0x0e0, 0x0e1, 0x0e2, 0x0e3,
383288253Sadrian	0x0e4, 0x0e5, 0x0e6, 0x0e7, 0x0e8, 0x0e9, 0x0ea, 0x0eb, 0x0ec,
384288253Sadrian	0x0ed, 0x0ee, 0x0ef, 0x0f0, 0x0f1, 0x0f2, 0x0f3, 0x0f4, 0x0f5,
385288253Sadrian	0x0f6, 0x0f7, 0x0f8, 0x0f9, 0x0fa, 0x0fb, 0x0fc, 0x0fd, 0x0fe,
386288253Sadrian	0x0ff, 0x100, 0x103, 0x104, 0x105, 0x106, 0x107, 0x108, 0x109,
387288253Sadrian	0x10a, 0x10b, 0x10c, 0x10d, 0x10e, 0x10f, 0x13c, 0x13d, 0x13e,
388288253Sadrian	0x13f, 0x280, 0x281, 0x282, 0x283, 0x284, 0x285, 0x286, 0x287,
389288253Sadrian	0x288, 0x289, 0x28a, 0x28b, 0x28c, 0x28d, 0x28e, 0x28f, 0x290,
390288253Sadrian	0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297, 0x298, 0x299,
391288253Sadrian	0x29a, 0x29b, 0x29d, 0x29e, 0x29f, 0x2c0, 0x2c1, 0x2c2, 0x2c3,
392288253Sadrian	0x2c4, 0x2c5, 0x2c6, 0x2c7, 0x2c8, 0x2c9, 0x2ca, 0x2cb, 0x2cc,
393288253Sadrian	0x2cd, 0x2ce, 0x2cf, 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5,
394288253Sadrian	0x2d6, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7, 0x2e8, 0x2e9,
395288253Sadrian	0x2ea, 0x2eb, 0x2ec, 0x2ed, 0x2ee, 0x2ef, 0x2f0, 0x2f1, 0x2f2,
396288253Sadrian	0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7, 0x2f8, 0x412, 0x448, 0x458,
397288253Sadrian	0x683, 0x69b, 0x812, 0x848, 0x858, 0xa83, 0xa9b, 0xc19, 0xc57,
398288253Sadrian	0xc5a, 0xc6f, 0xe9c, 0xed7, 0xed8, 0xed9, 0xeda, 0xedb, 0xedc,
399288253Sadrian	0xedd, 0xede, 0xedf, 0xee0, 0xee1
400288253Sadrian};
401288253Sadrian
402288253Sadrianstatic const uint32_t ar5416_phy_vals_5ghz_20mhz[] = {
403288253Sadrian	0x00000007, 0x00000300, 0x00000000, 0xad848e19, 0x7d14e000,
404288253Sadrian	0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
405288253Sadrian	0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
406288253Sadrian	0x00200400, 0x206a002e, 0x1372161e, 0x001a6a65, 0x1284233c,
407288253Sadrian	0x6c48b4e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd10,
408288253Sadrian	0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
409288253Sadrian	0x00000000, 0x000007d0, 0x00000118, 0x10000fff, 0x0510081c,
410288253Sadrian	0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
411288253Sadrian	0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
412288253Sadrian	0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
413288253Sadrian	0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
414288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
415288253Sadrian	0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
416288253Sadrian	0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
417288253Sadrian	0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
418288253Sadrian	0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
419288253Sadrian	0x00000000, 0x00000040, 0x00000080, 0x000001a1, 0x000001e1,
420288253Sadrian	0x00000021, 0x00000061, 0x00000168, 0x000001a8, 0x000001e8,
421288253Sadrian	0x00000028, 0x00000068, 0x00000189, 0x000001c9, 0x00000009,
422288253Sadrian	0x00000049, 0x00000089, 0x00000170, 0x000001b0, 0x000001f0,
423288253Sadrian	0x00000030, 0x00000070, 0x00000191, 0x000001d1, 0x00000011,
424288253Sadrian	0x00000051, 0x00000091, 0x000001b8, 0x000001f8, 0x00000038,
425288253Sadrian	0x00000078, 0x00000199, 0x000001d9, 0x00000019, 0x00000059,
426288253Sadrian	0x00000099, 0x000000d9, 0x000000f9, 0x000000f9, 0x000000f9,
427288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
428288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
429288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
430288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
431288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
432288253Sadrian	0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
433288253Sadrian	0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
434288253Sadrian	0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
435288253Sadrian	0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
436288253Sadrian	0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
437288253Sadrian	0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
438288253Sadrian	0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
439288253Sadrian	0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
440288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
441288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
442288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
443288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
444288253Sadrian	0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
445288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
446288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
447288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
448288253Sadrian	0x00000000, 0x00000008, 0x00000440, 0xd6be4788, 0x012e8160,
449288253Sadrian	0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
450288253Sadrian	0x00000400, 0x000009b5, 0x00000000, 0x00000108, 0x3f3f3f3f,
451288253Sadrian	0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
452288253Sadrian	0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
453288253Sadrian	0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a9caa,
454288253Sadrian	0x1ce739ce, 0x051701ce, 0x18010000, 0x30032602, 0x48073e06,
455288253Sadrian	0x560b4c0a, 0x641a600f, 0x7a4f6e1b, 0x8c5b7e5a, 0x9d0f96cf,
456288253Sadrian	0xb51fa69f, 0xcb3fbd07, 0x0000d7bf, 0x00000000, 0x00000000,
457288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
458288253Sadrian	0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
459288253Sadrian	0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
460288253Sadrian	0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
461288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
462288253Sadrian	0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
463288253Sadrian	0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a65, 0x0510001c,
464288253Sadrian	0x00009b40, 0x012e8160, 0x09249126, 0x00180a65, 0x0510001c,
465288253Sadrian	0x00009b40, 0x012e8160, 0x09249126, 0x0001c600, 0x004b6a8e,
466288253Sadrian	0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
467288253Sadrian	0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
468288253Sadrian	0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
469288253Sadrian};
470288253Sadrian
471288253Sadrian#ifdef notyet
472288253Sadrianstatic const uint32_t ar5416_phy_vals_5ghz_40mhz[] = {
473288253Sadrian	0x00000007, 0x000003c4, 0x00000000, 0xad848e19, 0x7d14e000,
474288253Sadrian	0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
475288253Sadrian	0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
476288253Sadrian	0x00200400, 0x206a002e, 0x13721c1e, 0x001a6a65, 0x1284233c,
477288253Sadrian	0x6c48b4e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd10,
478288253Sadrian	0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
479288253Sadrian	0x00000000, 0x000007d0, 0x00000230, 0x10000fff, 0x0510081c,
480288253Sadrian	0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
481288253Sadrian	0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
482288253Sadrian	0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
483288253Sadrian	0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
484288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
485288253Sadrian	0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
486288253Sadrian	0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
487288253Sadrian	0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
488288253Sadrian	0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
489288253Sadrian	0x00000000, 0x00000040, 0x00000080, 0x000001a1, 0x000001e1,
490288253Sadrian	0x00000021, 0x00000061, 0x00000168, 0x000001a8, 0x000001e8,
491288253Sadrian	0x00000028, 0x00000068, 0x00000189, 0x000001c9, 0x00000009,
492288253Sadrian	0x00000049, 0x00000089, 0x00000170, 0x000001b0, 0x000001f0,
493288253Sadrian	0x00000030, 0x00000070, 0x00000191, 0x000001d1, 0x00000011,
494288253Sadrian	0x00000051, 0x00000091, 0x000001b8, 0x000001f8, 0x00000038,
495288253Sadrian	0x00000078, 0x00000199, 0x000001d9, 0x00000019, 0x00000059,
496288253Sadrian	0x00000099, 0x000000d9, 0x000000f9, 0x000000f9, 0x000000f9,
497288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
498288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
499288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
500288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
501288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
502288253Sadrian	0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
503288253Sadrian	0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
504288253Sadrian	0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
505288253Sadrian	0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
506288253Sadrian	0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
507288253Sadrian	0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
508288253Sadrian	0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
509288253Sadrian	0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
510288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
511288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
512288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
513288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
514288253Sadrian	0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
515288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
516288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
517288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
518288253Sadrian	0x00000000, 0x00000008, 0x00000440, 0xd6be4788, 0x012e8160,
519288253Sadrian	0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
520288253Sadrian	0x00000400, 0x000009b5, 0x00000000, 0x00000210, 0x3f3f3f3f,
521288253Sadrian	0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
522288253Sadrian	0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
523288253Sadrian	0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a9caa,
524288253Sadrian	0x1ce739ce, 0x051701ce, 0x18010000, 0x30032602, 0x48073e06,
525288253Sadrian	0x560b4c0a, 0x641a600f, 0x7a4f6e1b, 0x8c5b7e5a, 0x9d0f96cf,
526288253Sadrian	0xb51fa69f, 0xcb3fbcbf, 0x0000d7bf, 0x00000000, 0x00000000,
527288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
528288253Sadrian	0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
529288253Sadrian	0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
530288253Sadrian	0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
531288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
532288253Sadrian	0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
533288253Sadrian	0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a65, 0x0510001c,
534288253Sadrian	0x00009b40, 0x012e8160, 0x09249126, 0x00180a65, 0x0510001c,
535288253Sadrian	0x00009b40, 0x012e8160, 0x09249126, 0x0001c600, 0x004b6a8e,
536288253Sadrian	0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
537288253Sadrian	0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
538288253Sadrian	0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
539288253Sadrian};
540288253Sadrian#endif
541288253Sadrian
542288253Sadrian#ifdef notyet
543288253Sadrianstatic const uint32_t ar5416_phy_vals_2ghz_40mhz[] = {
544288253Sadrian	0x00000007, 0x000003c4, 0x00000000, 0xad848e19, 0x7d14e000,
545288253Sadrian	0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
546288253Sadrian	0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
547288253Sadrian	0x00200400, 0x206a002e, 0x13721c24, 0x00197a68, 0x1284233c,
548288253Sadrian	0x6c48b0e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd20,
549288253Sadrian	0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
550288253Sadrian	0x00000000, 0x00000898, 0x00000268, 0x10000fff, 0x0510001c,
551288253Sadrian	0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
552288253Sadrian	0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
553288253Sadrian	0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
554288253Sadrian	0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
555288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
556288253Sadrian	0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
557288253Sadrian	0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
558288253Sadrian	0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
559288253Sadrian	0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
560288253Sadrian	0x00000000, 0x00000040, 0x00000080, 0x00000141, 0x00000181,
561288253Sadrian	0x000001c1, 0x00000001, 0x00000041, 0x000001a8, 0x000001e8,
562288253Sadrian	0x00000028, 0x00000068, 0x000000a8, 0x00000169, 0x000001a9,
563288253Sadrian	0x000001e9, 0x00000029, 0x00000069, 0x00000190, 0x000001d0,
564288253Sadrian	0x00000010, 0x00000050, 0x00000090, 0x00000151, 0x00000191,
565288253Sadrian	0x000001d1, 0x00000011, 0x00000051, 0x00000198, 0x000001d8,
566288253Sadrian	0x00000018, 0x00000058, 0x00000098, 0x00000159, 0x00000199,
567288253Sadrian	0x000001d9, 0x00000019, 0x00000059, 0x00000099, 0x000000d9,
568288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
569288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
570288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
571288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
572288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
573288253Sadrian	0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
574288253Sadrian	0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
575288253Sadrian	0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
576288253Sadrian	0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
577288253Sadrian	0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
578288253Sadrian	0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
579288253Sadrian	0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
580288253Sadrian	0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
581288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
582288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
583288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
584288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
585288253Sadrian	0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
586288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
587288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
588288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
589288253Sadrian	0x00000000, 0x0000000e, 0x00000440, 0xd03e4788, 0x012a8160,
590288253Sadrian	0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
591288253Sadrian	0x00000400, 0x000009b5, 0x00000000, 0x00000210, 0x3f3f3f3f,
592288253Sadrian	0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
593288253Sadrian	0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
594288253Sadrian	0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a7caa,
595288253Sadrian	0x1ce739ce, 0x051701ce, 0x18010000, 0x2e032402, 0x4a0a3c06,
596288253Sadrian	0x621a540b, 0x764f6c1b, 0x845b7a5a, 0x950f8ccf, 0xa5cf9b4f,
597288253Sadrian	0xbddfaf1f, 0xd1ffc93f, 0x00000000, 0x00000000, 0x00000000,
598288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
599288253Sadrian	0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
600288253Sadrian	0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
601288253Sadrian	0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
602288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
603288253Sadrian	0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
604288253Sadrian	0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a68, 0x0510001c,
605288253Sadrian	0x00009b40, 0x012a8160, 0x09249126, 0x00180a68, 0x0510001c,
606288253Sadrian	0x00009b40, 0x012a8160, 0x09249126, 0x0001c600, 0x004b6a8e,
607288253Sadrian	0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
608288253Sadrian	0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
609288253Sadrian	0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
610288253Sadrian};
611288253Sadrian#endif
612288253Sadrian
613288253Sadrianstatic const uint32_t ar5416_phy_vals_2ghz_20mhz[] = {
614288253Sadrian	0x00000007, 0x00000300, 0x00000000, 0xad848e19, 0x7d14e000,
615288253Sadrian	0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
616288253Sadrian	0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
617288253Sadrian	0x00200400, 0x206a002e, 0x137216a4, 0x00197a68, 0x1284233c,
618288253Sadrian	0x6c48b0e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd20,
619288253Sadrian	0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
620288253Sadrian	0x00000000, 0x00000898, 0x00000134, 0x10000fff, 0x0510001c,
621288253Sadrian	0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
622288253Sadrian	0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
623288253Sadrian	0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
624288253Sadrian	0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
625288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
626288253Sadrian	0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
627288253Sadrian	0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
628288253Sadrian	0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
629288253Sadrian	0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
630288253Sadrian	0x00000000, 0x00000040, 0x00000080, 0x00000141, 0x00000181,
631288253Sadrian	0x000001c1, 0x00000001, 0x00000041, 0x000001a8, 0x000001e8,
632288253Sadrian	0x00000028, 0x00000068, 0x000000a8, 0x00000169, 0x000001a9,
633288253Sadrian	0x000001e9, 0x00000029, 0x00000069, 0x00000190, 0x000001d0,
634288253Sadrian	0x00000010, 0x00000050, 0x00000090, 0x00000151, 0x00000191,
635288253Sadrian	0x000001d1, 0x00000011, 0x00000051, 0x00000198, 0x000001d8,
636288253Sadrian	0x00000018, 0x00000058, 0x00000098, 0x00000159, 0x00000199,
637288253Sadrian	0x000001d9, 0x00000019, 0x00000059, 0x00000099, 0x000000d9,
638288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
639288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
640288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
641288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
642288253Sadrian	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
643288253Sadrian	0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
644288253Sadrian	0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
645288253Sadrian	0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
646288253Sadrian	0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
647288253Sadrian	0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
648288253Sadrian	0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
649288253Sadrian	0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
650288253Sadrian	0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
651288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
652288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
653288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
654288253Sadrian	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
655288253Sadrian	0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
656288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
657288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
658288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
659288253Sadrian	0x00000000, 0x0000000e, 0x00000440, 0xd03e4788, 0x012a8160,
660288253Sadrian	0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
661288253Sadrian	0x00000400, 0x000009b5, 0x00000000, 0x00000108, 0x3f3f3f3f,
662288253Sadrian	0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
663288253Sadrian	0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
664288253Sadrian	0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a7caa,
665288253Sadrian	0x1ce739ce, 0x051701ce, 0x18010000, 0x2e032402, 0x4a0a3c06,
666288253Sadrian	0x621a540b, 0x764f6c1b, 0x845b7a5a, 0x950f8ccf, 0xa5cf9b4f,
667288253Sadrian	0xbddfaf1f, 0xd1ffc93f, 0x00000000, 0x00000000, 0x00000000,
668288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
669288253Sadrian	0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
670288253Sadrian	0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
671288253Sadrian	0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
672288253Sadrian	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
673288253Sadrian	0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
674288253Sadrian	0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a68, 0x0510001c,
675288253Sadrian	0x00009b40, 0x012a8160, 0x09249126, 0x00180a68, 0x0510001c,
676288253Sadrian	0x00009b40, 0x012a8160, 0x09249126, 0x0001c600, 0x004b6a8e,
677288253Sadrian	0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
678288253Sadrian	0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
679288253Sadrian	0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
680288253Sadrian};
681288253Sadrian
682288253Sadrian/* NB: apply AR_PHY(). */
683288253Sadrianstatic const uint8_t ar5416_banks_regs[] = {
684288253Sadrian	0x2c, 0x38, 0x2c, 0x3b, 0x2c, 0x38, 0x3c, 0x2c, 0x3a, 0x2c, 0x39,
685288253Sadrian	0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
686288253Sadrian	0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
687288253Sadrian	0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
688288253Sadrian	0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
689288253Sadrian	0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x38, 0x2c, 0x2c,
690288253Sadrian	0x2c, 0x3c
691288253Sadrian};
692288253Sadrian
693288253Sadrianstatic const uint32_t ar5416_banks_vals_5ghz[] = {
694288253Sadrian	0x1e5795e5, 0x02008020, 0x02108421, 0x00000008, 0x0e73ff17,
695288253Sadrian	0x00000420, 0x01400018, 0x000001a1, 0x00000001, 0x00000013,
696288253Sadrian	0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
697288253Sadrian	0x00000000, 0x00004000, 0x00006c00, 0x00002c00, 0x00004800,
698288253Sadrian	0x00004000, 0x00006000, 0x00001000, 0x00004000, 0x00007c00,
699288253Sadrian	0x00007c00, 0x00007c00, 0x00007c00, 0x00007c00, 0x00087c00,
700288253Sadrian	0x00007c00, 0x00005400, 0x00000c00, 0x00001800, 0x00007c00,
701288253Sadrian	0x00006c00, 0x00006c00, 0x00007c00, 0x00002c00, 0x00003c00,
702288253Sadrian	0x00003800, 0x00001c00, 0x00000800, 0x00000408, 0x00004c15,
703288253Sadrian	0x00004188, 0x0000201e, 0x00010408, 0x00000801, 0x00000c08,
704288253Sadrian	0x0000181e, 0x00001016, 0x00002800, 0x00004010, 0x0000081c,
705288253Sadrian	0x00000115, 0x00000015, 0x00000066, 0x0000001c, 0x00000000,
706288253Sadrian	0x00000004, 0x00000015, 0x0000001f, 0x00000000, 0x000000a0,
707288253Sadrian	0x00000000, 0x00000040, 0x0000001c
708288253Sadrian};
709288253Sadrian
710288253Sadrianstatic const uint32_t ar5416_banks_vals_2ghz[] = {
711288253Sadrian	0x1e5795e5, 0x02008020, 0x02108421, 0x00000008, 0x0e73ff17,
712288253Sadrian	0x00000420, 0x01c00018, 0x000001a1, 0x00000001, 0x00000013,
713288253Sadrian	0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
714288253Sadrian	0x00000000, 0x00004000, 0x00006c00, 0x00002c00, 0x00004800,
715288253Sadrian	0x00004000, 0x00006000, 0x00001000, 0x00004000, 0x00007c00,
716288253Sadrian	0x00007c00, 0x00007c00, 0x00007c00, 0x00007c00, 0x00087c00,
717288253Sadrian	0x00007c00, 0x00005400, 0x00000c00, 0x00001800, 0x00007c00,
718288253Sadrian	0x00006c00, 0x00006c00, 0x00007c00, 0x00002c00, 0x00003c00,
719288253Sadrian	0x00003800, 0x00001c00, 0x00000800, 0x00000408, 0x00004c15,
720288253Sadrian	0x00004188, 0x0000201e, 0x00010408, 0x00000801, 0x00000c08,
721288253Sadrian	0x0000181e, 0x00001016, 0x00002800, 0x00004010, 0x0000081c,
722288253Sadrian	0x00000115, 0x00000015, 0x00000066, 0x0000001c, 0x00000000,
723288253Sadrian	0x00000004, 0x00000015, 0x0000001f, 0x00000400, 0x000000a0,
724288253Sadrian	0x00000000, 0x00000040, 0x0000001c
725288253Sadrian};
726288253Sadrian
727288253Sadrian/*
728288253Sadrian * EEPROM.
729288253Sadrian */
730288253Sadrian/* Possible flags for opCapFlags. */
731288253Sadrian#define AR5416_OPFLAGS_11A	0x01
732288253Sadrian#define AR5416_OPFLAGS_11G	0x02
733288253Sadrian#define AR5416_OPFLAGS_5G_HT40	0x04
734288253Sadrian#define AR5416_OPFLAGS_2G_HT40	0x08
735288253Sadrian#define AR5416_OPFLAGS_5G_HT20	0x10
736288253Sadrian#define AR5416_OPFLAGS_2G_HT20	0x20
737288253Sadrian
738288253Sadrian#define AR5416_NUM_5G_CAL_PIERS		8
739288253Sadrian#define AR5416_NUM_2G_CAL_PIERS		4
740288253Sadrian#define AR5416_NUM_5G_20_TARGET_POWERS	8
741288253Sadrian#define AR5416_NUM_5G_40_TARGET_POWERS	8
742288253Sadrian#define AR5416_NUM_2G_CCK_TARGET_POWERS	3
743288253Sadrian#define AR5416_NUM_2G_20_TARGET_POWERS	4
744288253Sadrian#define AR5416_NUM_2G_40_TARGET_POWERS	4
745288253Sadrian#define AR5416_NUM_CTLS			24
746288253Sadrian#define AR5416_NUM_BAND_EDGES		8
747288253Sadrian#define AR5416_NUM_PD_GAINS		4
748288253Sadrian#define AR5416_PD_GAIN_ICEPTS		5
749288253Sadrian#define AR5416_EEPROM_MODAL_SPURS	5
750288253Sadrian#define AR5416_MAX_CHAINS		2
751288253Sadrian
752288253Sadrianstruct BaseEepHeader {
753288253Sadrian	uint16_t	length;
754288253Sadrian	uint16_t	checksum;
755288253Sadrian	uint16_t	version;
756288253Sadrian	uint8_t		opCapFlags;
757288253Sadrian	uint8_t		eepMisc;
758288253Sadrian	uint16_t	regDmn[2];
759288253Sadrian	uint8_t		macAddr[6];
760288253Sadrian	uint8_t		rxMask;
761288253Sadrian	uint8_t		txMask;
762288253Sadrian	uint16_t	rfSilent;
763288253Sadrian	uint16_t	blueToothOptions;
764288253Sadrian	uint16_t	deviceCap;
765288253Sadrian	uint32_t	binBuildNumber;
766288253Sadrian	uint8_t		deviceType;
767288253Sadrian	uint8_t		futureBase[33];
768288253Sadrian} __packed;
769288253Sadrian
770288253Sadrianstruct spurChanStruct {
771288253Sadrian	uint16_t	spurChan;
772288253Sadrian	uint8_t		spurRangeLow;
773288253Sadrian	uint8_t		spurRangeHigh;
774288253Sadrian} __packed;
775288253Sadrian
776288253Sadrianstruct ModalEepHeader {
777288253Sadrian	uint32_t	antCtrlChain[AR5416_MAX_CHAINS];
778288253Sadrian	uint32_t	antCtrlCommon;
779288253Sadrian	int8_t		antennaGainCh[AR5416_MAX_CHAINS];
780288253Sadrian	uint8_t		switchSettling;
781288253Sadrian	uint8_t		txRxAttenCh[AR5416_MAX_CHAINS];
782288253Sadrian	uint8_t		rxTxMarginCh[AR5416_MAX_CHAINS];
783288253Sadrian	uint8_t		adcDesiredSize;
784288253Sadrian	int8_t		pgaDesiredSize;
785288253Sadrian	uint8_t		xlnaGainCh[AR5416_MAX_CHAINS];
786288253Sadrian	uint8_t		txEndToXpaOff;
787288253Sadrian	uint8_t		txEndToRxOn;
788288253Sadrian	uint8_t		txFrameToXpaOn;
789288253Sadrian	uint8_t		thresh62;
790288253Sadrian	uint8_t		noiseFloorThreshCh[AR5416_MAX_CHAINS];
791288253Sadrian	uint8_t		xpdGain;
792288253Sadrian	uint8_t		xpd;
793288253Sadrian	int8_t		iqCalICh[AR5416_MAX_CHAINS];
794288253Sadrian	int8_t		iqCalQCh[AR5416_MAX_CHAINS];
795288253Sadrian	uint8_t		pdGainOverlap;
796288253Sadrian	uint8_t		ob;
797288253Sadrian	uint8_t		db;
798288253Sadrian	uint8_t		xpaBiasLvl;
799288253Sadrian	uint8_t		pwrDecreaseFor2Chain;
800288253Sadrian	uint8_t		pwrDecreaseFor3Chain;
801288253Sadrian	uint8_t		txFrameToDataStart;
802288253Sadrian	uint8_t		txFrameToPaOn;
803288253Sadrian	uint8_t		ht40PowerIncForPdadc;
804288253Sadrian	uint8_t		bswAtten[AR5416_MAX_CHAINS];
805288253Sadrian	uint8_t		bswMargin[AR5416_MAX_CHAINS];
806288253Sadrian	uint8_t		swSettleHt40;
807288253Sadrian	uint8_t		futureModal[22];
808288253Sadrian	struct spurChanStruct spurChans[AR5416_EEPROM_MODAL_SPURS];
809288253Sadrian} __packed;
810288253Sadrian
811288253Sadrianstruct calDataPerFreq {
812288253Sadrian	uint8_t		pwrPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
813288253Sadrian	uint8_t		vpdPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
814288253Sadrian} __packed;
815288253Sadrian
816288253Sadrianstruct CalTargetPowerLegacy {
817288253Sadrian	uint8_t		bChannel;
818288253Sadrian	uint8_t		tPow2x[4];
819288253Sadrian} __packed;
820288253Sadrian
821288253Sadrianstruct CalTargetPowerHt {
822288253Sadrian	uint8_t		bChannel;
823288253Sadrian	uint8_t		tPow2x[8];
824288253Sadrian} __packed;
825288253Sadrian
826288253Sadrianstruct CalCtlEdges {
827288253Sadrian	uint8_t		bChannel;
828288253Sadrian	uint8_t		tPowerFlag;
829288253Sadrian} __packed;
830288253Sadrian
831288253Sadrianstruct CalCtlData {
832288253Sadrian	struct CalCtlEdges ctlEdges[AR5416_MAX_CHAINS][AR5416_NUM_BAND_EDGES];
833288253Sadrian} __packed;
834288253Sadrian
835288253Sadrianstruct ar5416eeprom {
836288253Sadrian	struct BaseEepHeader	baseEepHeader;
837288253Sadrian	uint8_t			custData[64];
838288253Sadrian	struct ModalEepHeader	modalHeader[2];
839288253Sadrian	uint8_t			calFreqPier5G[AR5416_NUM_5G_CAL_PIERS];
840288253Sadrian	uint8_t			calFreqPier2G[AR5416_NUM_2G_CAL_PIERS];
841288253Sadrian	struct calDataPerFreq	calPierData5G[AR5416_MAX_CHAINS]
842288253Sadrian					     [AR5416_NUM_5G_CAL_PIERS];
843288253Sadrian	struct calDataPerFreq	calPierData2G[AR5416_MAX_CHAINS]
844288253Sadrian					     [AR5416_NUM_2G_CAL_PIERS];
845288253Sadrian	struct CalTargetPowerLegacy calTPow5G[AR5416_NUM_5G_20_TARGET_POWERS];
846288253Sadrian	struct CalTargetPowerHt calTPow5GHT20[AR5416_NUM_5G_20_TARGET_POWERS];
847288253Sadrian	struct CalTargetPowerHt calTPow5GHT40[AR5416_NUM_5G_40_TARGET_POWERS];
848288253Sadrian	struct CalTargetPowerLegacy calTPowCck[AR5416_NUM_2G_CCK_TARGET_POWERS];
849288253Sadrian	struct CalTargetPowerLegacy calTPow2G[AR5416_NUM_2G_20_TARGET_POWERS];
850288253Sadrian	struct CalTargetPowerHt calTPow2GHT20[AR5416_NUM_2G_20_TARGET_POWERS];
851288253Sadrian	struct CalTargetPowerHt calTPow2GHT40[AR5416_NUM_2G_40_TARGET_POWERS];
852288253Sadrian	uint8_t			ctlIndex[AR5416_NUM_CTLS];
853288253Sadrian	struct CalCtlData	ctlData[AR5416_NUM_CTLS];
854288253Sadrian	uint8_t			padding;
855288253Sadrian} __packed;
856288253Sadrian
857288253Sadrian#define	OTUS_NUM_CHAINS			2
858288253Sadrian
859288253Sadrian#define OTUS_UID(aid)		(IEEE80211_AID(aid) + 4)
860288253Sadrian
861288253Sadrian#define OTUS_MAX_TXCMDSZ	64
862288253Sadrian#define OTUS_RXBUFSZ		(8 * 1024)
863288253Sadrian/* Bumped for later A-MSDU and legacy fast-frames TX support */
864288253Sadrian#define OTUS_TXBUFSZ		(8 * 1024)
865288253Sadrian
866288253Sadrian/* Default EDCA parameters for when QoS is disabled. */
867288253Sadrianstatic const struct wmeParams otus_edca_def[WME_NUM_AC] = {
868288253Sadrian	{ 4, 10, 3,  0 },
869288253Sadrian	{ 4, 10, 7,  0 },
870288253Sadrian	{ 3,  4, 2, 94 },
871288253Sadrian	{ 2,  3, 2, 47 }
872288253Sadrian};
873288253Sadrian
874288253Sadrian#define OTUS_RIDX_CCK1		 0
875288253Sadrian#define OTUS_RIDX_OFDM6		 4
876288253Sadrian#define OTUS_RIDX_OFDM24	 8
877288253Sadrian#define OTUS_RIDX_MAX		11
878288253Sadrianstatic const struct otus_rate {
879288253Sadrian	uint8_t	rate;
880288253Sadrian	uint8_t	mcs;
881288253Sadrian} otus_rates[] = {
882288253Sadrian	{   2, 0x0 },
883288253Sadrian	{   4, 0x1 },
884288253Sadrian	{  11, 0x2 },
885288253Sadrian	{  22, 0x3 },
886288253Sadrian	{  12, 0xb },
887288253Sadrian	{  18, 0xf },
888288253Sadrian	{  24, 0xa },
889288253Sadrian	{  36, 0xe },
890288253Sadrian	{  48, 0x9 },
891288253Sadrian	{  72, 0xd },
892288253Sadrian	{  96, 0x8 },
893288253Sadrian	{ 108, 0xc }
894288253Sadrian};
895288253Sadrian
896288253Sadrianstruct otus_rx_radiotap_header {
897288253Sadrian	struct ieee80211_radiotap_header wr_ihdr;
898288253Sadrian	uint8_t		wr_flags;
899288253Sadrian	uint8_t		wr_rate;
900288253Sadrian	uint16_t	wr_chan_freq;
901288253Sadrian	uint16_t	wr_chan_flags;
902288253Sadrian	uint8_t		wr_antsignal;
903345636Savos} __packed __aligned(8);
904288253Sadrian
905288253Sadrian#define OTUS_RX_RADIOTAP_PRESENT			\
906288253Sadrian	(1 << IEEE80211_RADIOTAP_FLAGS |		\
907288253Sadrian	 1 << IEEE80211_RADIOTAP_RATE |			\
908288253Sadrian	 1 << IEEE80211_RADIOTAP_CHANNEL |		\
909288253Sadrian	 1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL)
910288253Sadrian
911288253Sadrianstruct otus_tx_radiotap_header {
912288253Sadrian	struct ieee80211_radiotap_header wt_ihdr;
913288253Sadrian	uint8_t		wt_flags;
914288253Sadrian	uint8_t		wt_rate;
915288253Sadrian	uint16_t	wt_chan_freq;
916288253Sadrian	uint16_t	wt_chan_flags;
917288253Sadrian} __packed;
918288253Sadrian
919288253Sadrian#define OTUS_TX_RADIOTAP_PRESENT			\
920288253Sadrian	(1 << IEEE80211_RADIOTAP_FLAGS |		\
921288253Sadrian	 1 << IEEE80211_RADIOTAP_RATE |			\
922288253Sadrian	 1 << IEEE80211_RADIOTAP_CHANNEL)
923288253Sadrian
924288253Sadrianstruct otus_softc;
925288253Sadrian
926288253Sadrian/* Firmware commands */
927288253Sadrianstruct otus_tx_cmd {
928288253Sadrian	uint8_t			*buf;
929288253Sadrian	uint16_t		buflen;
930288975Skevlo	void			*odata;
931288290Sadrian	uint16_t		odatalen;
932288253Sadrian	uint16_t		token;
933288253Sadrian	STAILQ_ENTRY(otus_tx_cmd)	next_cmd;
934288253Sadrian};
935288253Sadrian
936288253Sadrian/* TX, RX buffers */
937288253Sadrianstruct otus_data {
938288253Sadrian	struct otus_softc	*sc;
939288253Sadrian	uint8_t			*buf;
940288253Sadrian	uint16_t		buflen;
941288253Sadrian	struct mbuf		*m;
942288253Sadrian	struct ieee80211_node	*ni;
943288253Sadrian	STAILQ_ENTRY(otus_data)	next;
944288253Sadrian};
945288253Sadrian
946288253Sadrianstruct otus_node {
947288253Sadrian	struct ieee80211_node		ni;
948288253Sadrian	uint64_t			tx_done;
949288253Sadrian	uint64_t			tx_err;
950288253Sadrian	uint64_t			tx_retries;
951288253Sadrian};
952288253Sadrian
953288253Sadrian#define OTUS_CONFIG_INDEX               0
954288253Sadrian#define OTUS_IFACE_INDEX                0
955288253Sadrian
956288253Sadrian/*
957288253Sadrian * The carl9170 firmware has the following specification:
958288253Sadrian *
959288253Sadrian * 0 - USB control
960288253Sadrian * 1 - TX
961288253Sadrian * 2 - RX
962288253Sadrian * 3 - IRQ
963288253Sadrian * 4 - CMD
964288253Sadrian * ..
965288253Sadrian * 10 - end
966288253Sadrian */
967288253Sadrianenum {
968288253Sadrian	OTUS_BULK_TX,
969288253Sadrian	OTUS_BULK_RX,
970288253Sadrian	OTUS_BULK_IRQ,
971288253Sadrian	OTUS_BULK_CMD,
972288253Sadrian	OTUS_N_XFER
973288253Sadrian};
974288253Sadrian
975288253Sadrianstruct otus_vap {
976288253Sadrian	struct ieee80211vap	vap;
977288253Sadrian	int			(*newstate)(struct ieee80211vap *,
978288253Sadrian				    enum ieee80211_state, int);
979288253Sadrian};
980288253Sadrian#define	OTUS_VAP(vap)		((struct otus_vap *)(vap))
981288253Sadrian#define	OTUS_NODE(ni)		((struct otus_node *)(ni))
982288253Sadrian
983288253Sadrian#define	OTUS_LOCK(sc)		mtx_lock(&(sc)->sc_mtx)
984288253Sadrian#define	OTUS_UNLOCK(sc)		mtx_unlock(&(sc)->sc_mtx)
985288253Sadrian#define	OTUS_LOCK_ASSERT(sc)	mtx_assert(&(sc)->sc_mtx, MA_OWNED)
986288253Sadrian#define	OTUS_UNLOCK_ASSERT(sc)	mtx_assert(&(sc)->sc_mtx, MA_NOTOWNED)
987288253Sadrian
988288253Sadrian/* XXX the TX/RX endpoint dump says it's 0x200, (512)? */
989288253Sadrian#define	OTUS_MAX_TXSZ		512
990288253Sadrian#define	OTUS_MAX_RXSZ		512
991288253Sadrian/* intr/cmd endpoint dump says 0x40 */
992288253Sadrian#define	OTUS_MAX_CTRLSZ		64
993288253Sadrian
994288253Sadrian#define	OTUS_CMD_LIST_COUNT	32
995288253Sadrian#define	OTUS_RX_LIST_COUNT	128
996288253Sadrian#define	OTUS_TX_LIST_COUNT	32
997288253Sadrian
998288253Sadrianstruct otus_softc {
999288253Sadrian	struct ieee80211com		sc_ic;
1000288253Sadrian	struct mbufq			sc_snd;
1001288253Sadrian	device_t			sc_dev;
1002288253Sadrian	struct usb_device		*sc_udev;
1003288253Sadrian	int				(*sc_newstate)(struct ieee80211com *,
1004288253Sadrian					    enum ieee80211_state, int);
1005288253Sadrian	void				(*sc_led_newstate)(struct otus_softc *);
1006288253Sadrian	struct usbd_interface		*sc_iface;
1007288253Sadrian	struct mtx			sc_mtx;
1008288253Sadrian
1009288253Sadrian	struct ar5416eeprom		eeprom;
1010288253Sadrian	uint8_t				capflags;
1011288253Sadrian	uint8_t				rxmask;
1012288253Sadrian	uint8_t				txmask;
1013288253Sadrian	int				sc_running:1,
1014288253Sadrian					sc_calibrating:1,
1015288253Sadrian					sc_scanning:1;
1016288253Sadrian
1017288253Sadrian	int				sc_if_flags;
1018288253Sadrian	int				sc_tx_timer;
1019288253Sadrian	int				fixed_ridx;
1020288253Sadrian	int				bb_reset;
1021288253Sadrian
1022288253Sadrian	struct ieee80211_channel	*sc_curchan;
1023288253Sadrian
1024288253Sadrian	struct task			tx_task;
1025288253Sadrian	struct timeout_task		scan_to;
1026288253Sadrian	struct timeout_task		calib_to;
1027288253Sadrian
1028288253Sadrian	/* register batch writes */
1029288253Sadrian	int				write_idx;
1030288253Sadrian
1031288253Sadrian	uint32_t			led_state;
1032288253Sadrian
1033288253Sadrian	/* current firmware message serial / token number */
1034288253Sadrian	int				token;
1035288253Sadrian
1036288253Sadrian	/* current noisefloor, from SET_FREQUENCY */
1037288253Sadrian	int				sc_nf[OTUS_NUM_CHAINS];
1038288253Sadrian
1039288319Sadrian	/* How many pending, active transmit frames */
1040288319Sadrian	int				sc_tx_n_pending;
1041288319Sadrian	int				sc_tx_n_active;
1042288319Sadrian
1043288253Sadrian	const uint32_t			*phy_vals;
1044288253Sadrian
1045288253Sadrian	struct {
1046288253Sadrian		uint32_t	reg;
1047288253Sadrian		uint32_t	val;
1048288253Sadrian	} __packed			write_buf[AR_MAX_WRITE_IDX + 1];
1049288253Sadrian
1050288253Sadrian	struct otus_data		sc_rx[OTUS_RX_LIST_COUNT];
1051288253Sadrian	struct otus_data		sc_tx[OTUS_TX_LIST_COUNT];
1052288253Sadrian	struct otus_tx_cmd		sc_cmd[OTUS_CMD_LIST_COUNT];
1053288253Sadrian
1054288253Sadrian	struct usb_xfer			*sc_xfer[OTUS_N_XFER];
1055288253Sadrian
1056288253Sadrian	STAILQ_HEAD(, otus_data)	sc_rx_active;
1057288253Sadrian	STAILQ_HEAD(, otus_data)	sc_rx_inactive;
1058288253Sadrian	STAILQ_HEAD(, otus_data)	sc_tx_active[OTUS_N_XFER];
1059288253Sadrian	STAILQ_HEAD(, otus_data)	sc_tx_inactive;
1060288253Sadrian	STAILQ_HEAD(, otus_data)	sc_tx_pending[OTUS_N_XFER];
1061288253Sadrian
1062288253Sadrian	STAILQ_HEAD(, otus_tx_cmd)	sc_cmd_active;
1063288253Sadrian	STAILQ_HEAD(, otus_tx_cmd)	sc_cmd_inactive;
1064288253Sadrian	STAILQ_HEAD(, otus_tx_cmd)	sc_cmd_pending;
1065288253Sadrian	STAILQ_HEAD(, otus_tx_cmd)	sc_cmd_waiting;
1066288253Sadrian
1067288253Sadrian	union {
1068288253Sadrian		struct otus_rx_radiotap_header th;
1069288253Sadrian		uint8_t	pad[64];
1070288253Sadrian	}				sc_rxtapu;
1071288253Sadrian#define sc_rxtap	sc_rxtapu.th
1072288253Sadrian
1073288253Sadrian	union {
1074288253Sadrian		struct otus_tx_radiotap_header th;
1075288253Sadrian		uint8_t	pad[64];
1076288253Sadrian	}				sc_txtapu;
1077288253Sadrian#define sc_txtap	sc_txtapu.th
1078288253Sadrian};
1079288253Sadrian
1080288253Sadrian#endif	/* __IF_OTUSREG_H__ */
1081