xref: /openbsd/sys/dev/usb/if_otusreg.h (revision 4fac4e76)
1*4fac4e76Skrw /*	$OpenBSD: if_otusreg.h,v 1.12 2020/11/30 16:09:33 krw Exp $	*/
268baf11cSdamien 
368baf11cSdamien /*-
468baf11cSdamien  * Copyright (c) 2009 Damien Bergamini <damien.bergamini@free.fr>
568baf11cSdamien  * Copyright (c) 2007-2008 Atheros Communications, Inc.
668baf11cSdamien  *
768baf11cSdamien  * Permission to use, copy, modify, and distribute this software for any
868baf11cSdamien  * purpose with or without fee is hereby granted, provided that the above
968baf11cSdamien  * copyright notice and this permission notice appear in all copies.
1068baf11cSdamien  *
1168baf11cSdamien  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1268baf11cSdamien  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1368baf11cSdamien  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1468baf11cSdamien  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1568baf11cSdamien  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1668baf11cSdamien  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1768baf11cSdamien  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1868baf11cSdamien  */
1968baf11cSdamien 
2068baf11cSdamien /* USB Endpoints addresses. */
2168baf11cSdamien #define AR_EPT_BULK_TX_NO	(UE_DIR_OUT | 1)
2268baf11cSdamien #define AR_EPT_BULK_RX_NO	(UE_DIR_IN  | 2)
2368baf11cSdamien #define AR_EPT_INTR_RX_NO	(UE_DIR_IN  | 3)
2468baf11cSdamien #define AR_EPT_INTR_TX_NO	(UE_DIR_OUT | 4)
2568baf11cSdamien 
2668baf11cSdamien /* USB Requests. */
2768baf11cSdamien #define AR_FW_DOWNLOAD			0x30
2868baf11cSdamien #define AR_FW_DOWNLOAD_COMPLETE		0x31
2968baf11cSdamien 
3068baf11cSdamien /* Maximum number of writes that can fit in a single FW command is 7. */
3168baf11cSdamien #define AR_MAX_WRITE_IDX	6	/* 56 bytes */
3268baf11cSdamien 
3368baf11cSdamien #define AR_FW_INIT_ADDR			0x102800
3468baf11cSdamien #define AR_FW_MAIN_ADDR			0x200000
3568baf11cSdamien #define AR_USB_MODE_CTRL		0x1e1108
3668baf11cSdamien 
3768baf11cSdamien /*
3868baf11cSdamien  * AR9170 MAC registers.
3968baf11cSdamien  */
4068baf11cSdamien #define AR_MAC_REG_BASE			0x1c3000
4168baf11cSdamien #define AR_MAC_REG_MAC_ADDR_L		(AR_MAC_REG_BASE + 0x610)
4268baf11cSdamien #define AR_MAC_REG_MAC_ADDR_H		(AR_MAC_REG_BASE + 0x614)
436e30e88dSdamien #define AR_MAC_REG_BSSID_L		(AR_MAC_REG_BASE + 0x618)
446e30e88dSdamien #define AR_MAC_REG_BSSID_H		(AR_MAC_REG_BASE + 0x61c)
4568baf11cSdamien #define AR_MAC_REG_GROUP_HASH_TBL_L	(AR_MAC_REG_BASE + 0x624)
4668baf11cSdamien #define AR_MAC_REG_GROUP_HASH_TBL_H	(AR_MAC_REG_BASE + 0x628)
4768baf11cSdamien #define AR_MAC_REG_BASIC_RATE		(AR_MAC_REG_BASE + 0x630)
4868baf11cSdamien #define AR_MAC_REG_MANDATORY_RATE	(AR_MAC_REG_BASE + 0x634)
4968baf11cSdamien #define AR_MAC_REG_RTS_CTS_RATE		(AR_MAC_REG_BASE + 0x638)
5068baf11cSdamien #define AR_MAC_REG_BACKOFF_PROTECT	(AR_MAC_REG_BASE + 0x63c)
5168baf11cSdamien #define AR_MAC_REG_RX_THRESHOLD		(AR_MAC_REG_BASE + 0x640)
5268baf11cSdamien #define AR_MAC_REG_RX_PE_DELAY		(AR_MAC_REG_BASE + 0x64c)
5368baf11cSdamien #define AR_MAC_REG_DYNAMIC_SIFS_ACK	(AR_MAC_REG_BASE + 0x658)
5468baf11cSdamien #define AR_MAC_REG_SNIFFER		(AR_MAC_REG_BASE + 0x674)
5568baf11cSdamien #define AR_MAC_REG_ACK_EXTENSION	(AR_MAC_REG_BASE + 0x690)
5668baf11cSdamien #define AR_MAC_REG_EIFS_AND_SIFS	(AR_MAC_REG_BASE + 0x698)
57803f2018Sdamien #define AR_MAC_REG_BUSY			(AR_MAC_REG_BASE + 0x6e8)
58803f2018Sdamien #define AR_MAC_REG_BUSY_EXT		(AR_MAC_REG_BASE + 0x6ec)
5968baf11cSdamien #define AR_MAC_REG_SLOT_TIME		(AR_MAC_REG_BASE + 0x6f0)
6068baf11cSdamien #define AR_MAC_REG_AC0_CW		(AR_MAC_REG_BASE + 0xb00)
6168baf11cSdamien #define AR_MAC_REG_AC1_CW		(AR_MAC_REG_BASE + 0xb04)
6268baf11cSdamien #define AR_MAC_REG_AC2_CW		(AR_MAC_REG_BASE + 0xb08)
6368baf11cSdamien #define AR_MAC_REG_AC3_CW		(AR_MAC_REG_BASE + 0xb0c)
6468baf11cSdamien #define AR_MAC_REG_AC4_CW		(AR_MAC_REG_BASE + 0xb10)
6568baf11cSdamien #define AR_MAC_REG_AC1_AC0_AIFS		(AR_MAC_REG_BASE + 0xb14)
6668baf11cSdamien #define AR_MAC_REG_AC3_AC2_AIFS		(AR_MAC_REG_BASE + 0xb18)
6768baf11cSdamien #define AR_MAC_REG_RETRY_MAX		(AR_MAC_REG_BASE + 0xb28)
6868baf11cSdamien #define AR_MAC_REG_TXOP_NOT_ENOUGH_INDICATION	\
6968baf11cSdamien 					(AR_MAC_REG_BASE + 0xb30)
7068baf11cSdamien #define AR_MAC_REG_AC1_AC0_TXOP		(AR_MAC_REG_BASE + 0xb44)
7168baf11cSdamien #define AR_MAC_REG_AC3_AC2_TXOP		(AR_MAC_REG_BASE + 0xb48)
72803f2018Sdamien #define AR_MAC_REG_OFDM_PHY_ERRORS	(AR_MAC_REG_BASE + 0xcb4)
73803f2018Sdamien #define AR_MAC_REG_CCK_PHY_ERRORS	(AR_MAC_REG_BASE + 0xcb8)
7468baf11cSdamien #define AR_MAC_REG_BCN_HT1		(AR_MAC_REG_BASE + 0xda0)
751de0d41aSstsp #define AR_MAC_REG_DMA_TRIGGER		(AR_MAC_REG_BASE + 0xd30)
761de0d41aSstsp 
771de0d41aSstsp /* Possible values for register AR_MAC_REG_DMA_TRIGGER. */
781de0d41aSstsp #define AR_DMA_TRIGGER_TXQ0	0x001
791de0d41aSstsp #define AR_DMA_TRIGGER_TXQ1	0x002
801de0d41aSstsp #define AR_DMA_TRIGGER_TXQ2	0x004
811de0d41aSstsp #define AR_DMA_TRIGGER_TXQ3	0x008
821de0d41aSstsp #define AR_DMA_TRIGGER_TXQ4	0x010
831de0d41aSstsp #define AR_DMA_TRIGGER_RXQ	0x100
8468baf11cSdamien 
8568baf11cSdamien /* Possible values for register AR_USB_MODE_CTRL. */
8668baf11cSdamien #define AR_USB_DS_ENA		(1 << 0)
8768baf11cSdamien #define AR_USB_US_ENA		(1 << 1)
8868baf11cSdamien #define AR_USB_US_PACKET_MODE	(1 << 3)
8968baf11cSdamien #define AR_USB_RX_STREAM_4K	(0 << 4)
9068baf11cSdamien #define AR_USB_RX_STREAM_8K	(1 << 4)
9168baf11cSdamien #define AR_USB_RX_STREAM_16K	(2 << 4)
9268baf11cSdamien #define AR_USB_RX_STREAM_32K	(3 << 4)
9368baf11cSdamien #define AR_USB_TX_STREAM_MODE	(1 << 6)
9468baf11cSdamien 
9568baf11cSdamien #define AR_LED0_ON	(1 << 0)
9668baf11cSdamien #define AR_LED1_ON	(1 << 1)
9768baf11cSdamien 
9868baf11cSdamien /*
9968baf11cSdamien  * PHY registers.
10068baf11cSdamien  */
101803f2018Sdamien #define AR_PHY_BASE			0x1c5800
102803f2018Sdamien #define AR_PHY(reg)			(AR_PHY_BASE + (reg) * 4)
103803f2018Sdamien #define AR_PHY_TURBO			(AR_PHY_BASE + 0x0004)
104803f2018Sdamien #define AR_PHY_RF_CTL3			(AR_PHY_BASE + 0x0028)
105803f2018Sdamien #define AR_PHY_RF_CTL4			(AR_PHY_BASE + 0x0034)
106803f2018Sdamien #define AR_PHY_SETTLING			(AR_PHY_BASE + 0x0044)
107803f2018Sdamien #define AR_PHY_RXGAIN			(AR_PHY_BASE + 0x0048)
108803f2018Sdamien #define AR_PHY_DESIRED_SZ		(AR_PHY_BASE + 0x0050)
109803f2018Sdamien #define AR_PHY_FIND_SIG			(AR_PHY_BASE + 0x0058)
110803f2018Sdamien #define AR_PHY_AGC_CTL1			(AR_PHY_BASE + 0x005c)
111803f2018Sdamien #define AR_PHY_SFCORR			(AR_PHY_BASE + 0x0068)
112803f2018Sdamien #define AR_PHY_SFCORR_LOW		(AR_PHY_BASE + 0x006c)
113803f2018Sdamien #define AR_PHY_TIMING_CTRL4		(AR_PHY_BASE + 0x0120)
114803f2018Sdamien #define AR_PHY_TIMING5			(AR_PHY_BASE + 0x0124)
115803f2018Sdamien #define AR_PHY_POWER_TX_RATE1		(AR_PHY_BASE + 0x0134)
116803f2018Sdamien #define AR_PHY_POWER_TX_RATE2		(AR_PHY_BASE + 0x0138)
117803f2018Sdamien #define AR_PHY_POWER_TX_RATE_MAX	(AR_PHY_BASE + 0x013c)
118803f2018Sdamien #define AR_PHY_SWITCH_CHAIN_0		(AR_PHY_BASE + 0x0160)
119803f2018Sdamien #define AR_PHY_SWITCH_COM		(AR_PHY_BASE + 0x0164)
120803f2018Sdamien #define AR_PHY_HEAVY_CLIP_ENABLE	(AR_PHY_BASE + 0x01e0)
121803f2018Sdamien #define AR_PHY_CCK_DETECT		(AR_PHY_BASE + 0x0a08)
122803f2018Sdamien #define AR_PHY_GAIN_2GHZ		(AR_PHY_BASE + 0x0a0c)
123803f2018Sdamien #define AR_PHY_POWER_TX_RATE3		(AR_PHY_BASE + 0x0a34)
124803f2018Sdamien #define AR_PHY_POWER_TX_RATE4		(AR_PHY_BASE + 0x0a38)
125803f2018Sdamien #define AR_PHY_TPCRG1			(AR_PHY_BASE + 0x0a58)
126803f2018Sdamien #define AR_PHY_POWER_TX_RATE5		(AR_PHY_BASE + 0x0b8c)
127803f2018Sdamien #define AR_PHY_POWER_TX_RATE6		(AR_PHY_BASE + 0x0b90)
128803f2018Sdamien #define AR_PHY_POWER_TX_RATE7		(AR_PHY_BASE + 0x0bcc)
129803f2018Sdamien #define AR_PHY_POWER_TX_RATE8		(AR_PHY_BASE + 0x0bd0)
130803f2018Sdamien #define AR_PHY_POWER_TX_RATE9		(AR_PHY_BASE + 0x0bd4)
131803f2018Sdamien #define AR_PHY_CCA			(AR_PHY_BASE + 0x3064)
13268baf11cSdamien 
13368baf11cSdamien #define AR_SEEPROM_HW_TYPE_OFFSET	0x1374
134803f2018Sdamien #define AR_EEPROM_OFFSET		0x1600
13568baf11cSdamien 
13668baf11cSdamien #define AR_BANK4_CHUP			(1 << 0)
13768baf11cSdamien #define AR_BANK4_BMODE_LF_SYNTH_FREQ	(1 << 1)
13868baf11cSdamien #define AR_BANK4_AMODE_REFSEL(x)	((x) << 2)
13968baf11cSdamien #define AR_BANK4_ADDR(x)		((x) << 5)
14068baf11cSdamien 
14168baf11cSdamien /* Tx descriptor. */
14268baf11cSdamien struct ar_tx_head {
14368baf11cSdamien 	uint16_t	len;
14468baf11cSdamien 	uint16_t	macctl;
14568baf11cSdamien #define AR_TX_MAC_RTS		(1 <<  0)
14668baf11cSdamien #define AR_TX_MAC_CTS		(1 <<  1)
14768baf11cSdamien #define AR_TX_MAC_BACKOFF	(1 <<  3)
14868baf11cSdamien #define AR_TX_MAC_NOACK		(1 <<  2)
14968baf11cSdamien #define AR_TX_MAC_HW_DUR	(1 <<  9)
15088185ad4Sdamien #define AR_TX_MAC_QID(qid)	((qid) << 10)
15168baf11cSdamien #define AR_TX_MAC_RATE_PROBING	(1 << 15)
15268baf11cSdamien 
15368baf11cSdamien 	uint32_t	phyctl;
15468baf11cSdamien /* Modulation type. */
15568baf11cSdamien #define AR_TX_PHY_MT_CCK	0
15668baf11cSdamien #define AR_TX_PHY_MT_OFDM	1
15768baf11cSdamien #define AR_TX_PHY_MT_HT		2
15868baf11cSdamien #define AR_TX_PHY_GF		(1 << 2)
15968baf11cSdamien #define AR_TX_PHY_BW_SHIFT	3
16068baf11cSdamien #define AR_TX_PHY_TPC_SHIFT	9
16168baf11cSdamien #define AR_TX_PHY_ANTMSK(msk)	((msk) << 15)
16268baf11cSdamien #define AR_TX_PHY_MCS(mcs)	((mcs) << 18)
16361e87b28Sderaadt #define AR_TX_PHY_SHGI		(1U << 31)
16468baf11cSdamien } __packed;
16568baf11cSdamien 
16668baf11cSdamien /* USB Rx stream mode header. */
16768baf11cSdamien struct ar_rx_head {
16868baf11cSdamien 	uint16_t	len;
16968baf11cSdamien 	uint16_t	tag;
17068baf11cSdamien #define AR_RX_HEAD_TAG	0x4e00
17168baf11cSdamien } __packed;
17268baf11cSdamien 
17368baf11cSdamien /* Rx descriptor. */
17468baf11cSdamien struct ar_rx_tail {
17568baf11cSdamien 	uint8_t	rssi_ant[3];
17668baf11cSdamien 	uint8_t	rssi_ant_ext[3];
17768baf11cSdamien 	uint8_t	rssi;		/* Combined RSSI. */
17868baf11cSdamien 	uint8_t	evm[2][6];	/* Error Vector Magnitude. */
17968baf11cSdamien 	uint8_t	phy_err;
18068baf11cSdamien 	uint8_t	sa_idx;
18168baf11cSdamien 	uint8_t	da_idx;
18268baf11cSdamien 	uint8_t	error;
183b86c5724Sdamien #define AR_RX_ERROR_TIMEOUT	(1 << 0)
184b86c5724Sdamien #define AR_RX_ERROR_OVERRUN	(1 << 1)
185b86c5724Sdamien #define AR_RX_ERROR_DECRYPT	(1 << 2)
18668baf11cSdamien #define AR_RX_ERROR_FCS		(1 << 3)
187b86c5724Sdamien #define AR_RX_ERROR_BAD_RA	(1 << 4)
188b86c5724Sdamien #define AR_RX_ERROR_PLCP	(1 << 5)
189b86c5724Sdamien #define AR_RX_ERROR_MMIC	(1 << 6)
19068baf11cSdamien 
19168baf11cSdamien 	uint8_t	status;
19268baf11cSdamien /* Modulation type (same as AR_TX_PHY_MT). */
19368baf11cSdamien #define AR_RX_STATUS_MT_MASK	0x3
19468baf11cSdamien #define AR_RX_STATUS_MT_CCK	0
19568baf11cSdamien #define AR_RX_STATUS_MT_OFDM	1
19668baf11cSdamien #define AR_RX_STATUS_MT_HT	2
19768baf11cSdamien #define AR_RX_STATUS_SHPREAMBLE	(1 << 3)
19868baf11cSdamien } __packed;
19968baf11cSdamien 
20068baf11cSdamien #define AR_PLCP_HDR_LEN	12
20168baf11cSdamien /* Magic PLCP header for firmware notifications through Rx bulk pipe. */
20268baf11cSdamien static uint8_t AR_PLCP_HDR_INTR[] = {
20368baf11cSdamien 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
20468baf11cSdamien 	0xff, 0xff, 0xff, 0xff, 0xff, 0xff
20568baf11cSdamien };
20668baf11cSdamien 
20768baf11cSdamien /* Firmware command/reply header. */
20868baf11cSdamien struct ar_cmd_hdr {
20968baf11cSdamien 	uint8_t		len;
21068baf11cSdamien 	uint8_t		code;
21168baf11cSdamien #define AR_CMD_RREG		0x00
21268baf11cSdamien #define AR_CMD_WREG		0x01
21368baf11cSdamien #define AR_CMD_RMEM		0x02
21468baf11cSdamien #define AR_CMD_WMEM		0x03
21568baf11cSdamien #define AR_CMD_BITAND		0x04
21668baf11cSdamien #define AR_CMD_BITOR		0x05
21768baf11cSdamien #define AR_CMD_EKEY		0x28
21868baf11cSdamien #define AR_CMD_DKEY		0x29
21968baf11cSdamien #define AR_CMD_FREQUENCY	0x30
22068baf11cSdamien #define AR_CMD_RF_INIT		0x31
22168baf11cSdamien #define AR_CMD_SYNTH		0x32
22268baf11cSdamien #define AR_CMD_FREQ_STRAT	0x33
22368baf11cSdamien #define AR_CMD_ECHO		0x80
22468baf11cSdamien #define AR_CMD_TALLY		0x81
22568baf11cSdamien #define AR_CMD_TALLY_APD	0x82
22668baf11cSdamien #define AR_CMD_CONFIG		0x83
22768baf11cSdamien #define AR_CMD_RESET		0x90
22868baf11cSdamien #define AR_CMD_DKRESET		0x91
22968baf11cSdamien #define AR_CMD_DKTX_STATUS	0x92
23068baf11cSdamien #define AR_CMD_FDC		0xa0
23168baf11cSdamien #define AR_CMD_WREEPROM		0xb0
23268baf11cSdamien #define AR_CMD_WFLASH		AR_CMD_WREEPROM
23368baf11cSdamien #define AR_CMD_FLASH_ERASE	0xb1
23468baf11cSdamien #define AR_CMD_FLASH_PROG	0xb2
23568baf11cSdamien #define AR_CMD_FLASH_CHKSUM	0xb3
23668baf11cSdamien #define AR_CMD_FLASH_READ	0xb4
23768baf11cSdamien #define AR_CMD_FW_DL_INIT	0xb5
23868baf11cSdamien #define AR_CMD_MEM_WREEPROM	0xbb
23968baf11cSdamien /* Those have the 2 MSB set to 1. */
24068baf11cSdamien #define AR_EVT_BEACON		0x00
24168baf11cSdamien #define AR_EVT_TX_COMP		0x01
24268baf11cSdamien #define AR_EVT_TBTT		0x02
24368baf11cSdamien #define AR_EVT_ATIM		0x03
24468baf11cSdamien 
24568baf11cSdamien 	uint16_t	token;	/* Driver private data. */
24668baf11cSdamien } __packed;
24768baf11cSdamien 
24868baf11cSdamien /* Structure for command AR_CMD_RF_INIT/AR_CMD_FREQUENCY. */
24968baf11cSdamien struct ar_cmd_frequency {
25068baf11cSdamien 	uint32_t	freq;
25168baf11cSdamien 	uint32_t	dynht2040;
25268baf11cSdamien 	uint32_t	htena;
2536e30e88dSdamien 	uint32_t	dsc_exp;
2546e30e88dSdamien 	uint32_t	dsc_man;
2556e30e88dSdamien 	uint32_t	dsc_shgi_exp;
2566e30e88dSdamien 	uint32_t	dsc_shgi_man;
25768baf11cSdamien 	uint32_t	check_loop_count;
25868baf11cSdamien } __packed;
25968baf11cSdamien 
26068baf11cSdamien /* Firmware reply for command AR_CMD_FREQUENCY. */
26168baf11cSdamien struct ar_rsp_frequency {
26268baf11cSdamien 	uint32_t	status;
2636e30e88dSdamien #define AR_CAL_ERR_AGC		(1 << 0)	/* AGC cal unfinished. */
2646e30e88dSdamien #define AR_CAL_ERR_NF		(1 << 1)	/* Noise cal unfinished. */
2656e30e88dSdamien #define AR_CAL_ERR_NF_VAL	(1 << 2)	/* NF value unexpected. */
2666e30e88dSdamien 
2676e30e88dSdamien 	uint32_t	nf[3];		/* Noisefloor. */
2686e30e88dSdamien 	uint32_t	nf_ext[3];	/* Noisefloor ext. */
26968baf11cSdamien } __packed;
27068baf11cSdamien 
27168baf11cSdamien /* Structure for command AR_CMD_EKEY. */
27268baf11cSdamien struct ar_cmd_ekey {
27368baf11cSdamien 	uint16_t	uid;	/* user ID */
2744351e075Sdamien 	uint16_t	kix;
27568baf11cSdamien 	uint16_t	cipher;
27668baf11cSdamien #define AR_CIPHER_NONE		0
27768baf11cSdamien #define AR_CIPHER_WEP64		1
27868baf11cSdamien #define AR_CIPHER_TKIP		2
27968baf11cSdamien #define AR_CIPHER_AES		4
28068baf11cSdamien #define AR_CIPHER_WEP128	5
28168baf11cSdamien #define AR_CIPHER_WEP256	6
28268baf11cSdamien #define AR_CIPHER_CENC		7
28368baf11cSdamien 
28468baf11cSdamien 	uint8_t		macaddr[IEEE80211_ADDR_LEN];
28568baf11cSdamien 	uint8_t		key[16];
28668baf11cSdamien } __packed;
28768baf11cSdamien 
28868baf11cSdamien /* Structure for event AR_EVT_TX_COMP. */
28968baf11cSdamien struct ar_evt_tx_comp {
29068baf11cSdamien 	uint8_t		macaddr[IEEE80211_ADDR_LEN];
29168baf11cSdamien 	uint32_t	phy;
29268baf11cSdamien 	uint16_t	status;
29368baf11cSdamien #define AR_TX_STATUS_COMP	0
29468baf11cSdamien #define AR_TX_STATUS_RETRY_COMP	1
29568baf11cSdamien #define AR_TX_STATUS_FAILED	2
29668baf11cSdamien } __packed;
29768baf11cSdamien 
29868baf11cSdamien /* List of supported channels. */
29968baf11cSdamien static const uint8_t ar_chans[] = {
30068baf11cSdamien 	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
30168baf11cSdamien 	36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124,
30268baf11cSdamien 	128, 132, 136, 140, 149, 153, 157, 161, 165, 34, 38, 42, 46
30368baf11cSdamien };
30468baf11cSdamien 
30568baf11cSdamien /*
30668baf11cSdamien  * This data is automatically generated from the "otus.ini" file.
30768baf11cSdamien  * It is stored in a different way though, to reduce kernel's .rodata
30868baf11cSdamien  * section overhead (5.1KB instead of 8.5KB).
30968baf11cSdamien  */
31068baf11cSdamien 
311803f2018Sdamien /* NB: apply AR_PHY(). */
31268baf11cSdamien static const uint16_t ar5416_phy_regs[] = {
31368baf11cSdamien 	0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, 0x008,
31468baf11cSdamien 	0x009, 0x00a, 0x00b, 0x00c, 0x00d, 0x00e, 0x00f, 0x010, 0x011,
31568baf11cSdamien 	0x012, 0x013, 0x014, 0x015, 0x016, 0x017, 0x018, 0x01a, 0x01b,
31668baf11cSdamien 	0x040, 0x041, 0x042, 0x043, 0x045, 0x046, 0x047, 0x048, 0x049,
31768baf11cSdamien 	0x04a, 0x04b, 0x04d, 0x04e, 0x04f, 0x051, 0x052, 0x053, 0x055,
31868baf11cSdamien 	0x056, 0x058, 0x059, 0x05c, 0x05d, 0x05e, 0x05f, 0x060, 0x061,
31968baf11cSdamien 	0x062, 0x063, 0x064, 0x065, 0x066, 0x067, 0x068, 0x069, 0x06a,
32068baf11cSdamien 	0x06b, 0x06c, 0x06d, 0x070, 0x071, 0x072, 0x073, 0x074, 0x075,
32168baf11cSdamien 	0x076, 0x077, 0x078, 0x079, 0x07a, 0x07b, 0x07c, 0x07f, 0x080,
32268baf11cSdamien 	0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087, 0x088, 0x089,
32368baf11cSdamien 	0x08a, 0x08b, 0x08c, 0x08d, 0x08e, 0x08f, 0x090, 0x091, 0x092,
32468baf11cSdamien 	0x093, 0x094, 0x095, 0x096, 0x097, 0x098, 0x099, 0x09a, 0x09b,
32568baf11cSdamien 	0x09c, 0x09d, 0x09e, 0x09f, 0x0a0, 0x0a1, 0x0a2, 0x0a3, 0x0a4,
32668baf11cSdamien 	0x0a5, 0x0a6, 0x0a7, 0x0a8, 0x0a9, 0x0aa, 0x0ab, 0x0ac, 0x0ad,
32768baf11cSdamien 	0x0ae, 0x0af, 0x0b0, 0x0b1, 0x0b2, 0x0b3, 0x0b4, 0x0b5, 0x0b6,
32868baf11cSdamien 	0x0b7, 0x0b8, 0x0b9, 0x0ba, 0x0bb, 0x0bc, 0x0bd, 0x0be, 0x0bf,
32968baf11cSdamien 	0x0c0, 0x0c1, 0x0c2, 0x0c3, 0x0c4, 0x0c5, 0x0c6, 0x0c7, 0x0c8,
33068baf11cSdamien 	0x0c9, 0x0ca, 0x0cb, 0x0cc, 0x0cd, 0x0ce, 0x0cf, 0x0d0, 0x0d1,
33168baf11cSdamien 	0x0d2, 0x0d3, 0x0d4, 0x0d5, 0x0d6, 0x0d7, 0x0d8, 0x0d9, 0x0da,
33268baf11cSdamien 	0x0db, 0x0dc, 0x0dd, 0x0de, 0x0df, 0x0e0, 0x0e1, 0x0e2, 0x0e3,
33368baf11cSdamien 	0x0e4, 0x0e5, 0x0e6, 0x0e7, 0x0e8, 0x0e9, 0x0ea, 0x0eb, 0x0ec,
33468baf11cSdamien 	0x0ed, 0x0ee, 0x0ef, 0x0f0, 0x0f1, 0x0f2, 0x0f3, 0x0f4, 0x0f5,
33568baf11cSdamien 	0x0f6, 0x0f7, 0x0f8, 0x0f9, 0x0fa, 0x0fb, 0x0fc, 0x0fd, 0x0fe,
33668baf11cSdamien 	0x0ff, 0x100, 0x103, 0x104, 0x105, 0x106, 0x107, 0x108, 0x109,
33768baf11cSdamien 	0x10a, 0x10b, 0x10c, 0x10d, 0x10e, 0x10f, 0x13c, 0x13d, 0x13e,
33868baf11cSdamien 	0x13f, 0x280, 0x281, 0x282, 0x283, 0x284, 0x285, 0x286, 0x287,
33968baf11cSdamien 	0x288, 0x289, 0x28a, 0x28b, 0x28c, 0x28d, 0x28e, 0x28f, 0x290,
34068baf11cSdamien 	0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297, 0x298, 0x299,
34168baf11cSdamien 	0x29a, 0x29b, 0x29d, 0x29e, 0x29f, 0x2c0, 0x2c1, 0x2c2, 0x2c3,
34268baf11cSdamien 	0x2c4, 0x2c5, 0x2c6, 0x2c7, 0x2c8, 0x2c9, 0x2ca, 0x2cb, 0x2cc,
34368baf11cSdamien 	0x2cd, 0x2ce, 0x2cf, 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5,
34468baf11cSdamien 	0x2d6, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7, 0x2e8, 0x2e9,
34568baf11cSdamien 	0x2ea, 0x2eb, 0x2ec, 0x2ed, 0x2ee, 0x2ef, 0x2f0, 0x2f1, 0x2f2,
34668baf11cSdamien 	0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7, 0x2f8, 0x412, 0x448, 0x458,
34768baf11cSdamien 	0x683, 0x69b, 0x812, 0x848, 0x858, 0xa83, 0xa9b, 0xc19, 0xc57,
34868baf11cSdamien 	0xc5a, 0xc6f, 0xe9c, 0xed7, 0xed8, 0xed9, 0xeda, 0xedb, 0xedc,
34968baf11cSdamien 	0xedd, 0xede, 0xedf, 0xee0, 0xee1
35068baf11cSdamien };
35168baf11cSdamien 
35268baf11cSdamien static const uint32_t ar5416_phy_vals_5ghz_20mhz[] = {
35368baf11cSdamien 	0x00000007, 0x00000300, 0x00000000, 0xad848e19, 0x7d14e000,
35468baf11cSdamien 	0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
35568baf11cSdamien 	0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
35668baf11cSdamien 	0x00200400, 0x206a002e, 0x1372161e, 0x001a6a65, 0x1284233c,
35768baf11cSdamien 	0x6c48b4e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd10,
35868baf11cSdamien 	0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
35968baf11cSdamien 	0x00000000, 0x000007d0, 0x00000118, 0x10000fff, 0x0510081c,
36068baf11cSdamien 	0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
36168baf11cSdamien 	0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
36268baf11cSdamien 	0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
36368baf11cSdamien 	0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
36468baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
36568baf11cSdamien 	0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
36668baf11cSdamien 	0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
36768baf11cSdamien 	0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
36868baf11cSdamien 	0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
36968baf11cSdamien 	0x00000000, 0x00000040, 0x00000080, 0x000001a1, 0x000001e1,
37068baf11cSdamien 	0x00000021, 0x00000061, 0x00000168, 0x000001a8, 0x000001e8,
37168baf11cSdamien 	0x00000028, 0x00000068, 0x00000189, 0x000001c9, 0x00000009,
37268baf11cSdamien 	0x00000049, 0x00000089, 0x00000170, 0x000001b0, 0x000001f0,
37368baf11cSdamien 	0x00000030, 0x00000070, 0x00000191, 0x000001d1, 0x00000011,
37468baf11cSdamien 	0x00000051, 0x00000091, 0x000001b8, 0x000001f8, 0x00000038,
37568baf11cSdamien 	0x00000078, 0x00000199, 0x000001d9, 0x00000019, 0x00000059,
37668baf11cSdamien 	0x00000099, 0x000000d9, 0x000000f9, 0x000000f9, 0x000000f9,
37768baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
37868baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
37968baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
38068baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
38168baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
38268baf11cSdamien 	0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
38368baf11cSdamien 	0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
38468baf11cSdamien 	0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
38568baf11cSdamien 	0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
38668baf11cSdamien 	0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
38768baf11cSdamien 	0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
38868baf11cSdamien 	0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
38968baf11cSdamien 	0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
39068baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
39168baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
39268baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
39368baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
39468baf11cSdamien 	0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
39568baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
39668baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
39768baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
39868baf11cSdamien 	0x00000000, 0x00000008, 0x00000440, 0xd6be4788, 0x012e8160,
39968baf11cSdamien 	0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
40068baf11cSdamien 	0x00000400, 0x000009b5, 0x00000000, 0x00000108, 0x3f3f3f3f,
40168baf11cSdamien 	0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
40268baf11cSdamien 	0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
40368baf11cSdamien 	0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a9caa,
40468baf11cSdamien 	0x1ce739ce, 0x051701ce, 0x18010000, 0x30032602, 0x48073e06,
40568baf11cSdamien 	0x560b4c0a, 0x641a600f, 0x7a4f6e1b, 0x8c5b7e5a, 0x9d0f96cf,
40668baf11cSdamien 	0xb51fa69f, 0xcb3fbd07, 0x0000d7bf, 0x00000000, 0x00000000,
40768baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
40868baf11cSdamien 	0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
40968baf11cSdamien 	0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
41068baf11cSdamien 	0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
41168baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
41268baf11cSdamien 	0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
41368baf11cSdamien 	0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a65, 0x0510001c,
41468baf11cSdamien 	0x00009b40, 0x012e8160, 0x09249126, 0x00180a65, 0x0510001c,
41568baf11cSdamien 	0x00009b40, 0x012e8160, 0x09249126, 0x0001c600, 0x004b6a8e,
41668baf11cSdamien 	0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
41768baf11cSdamien 	0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
41868baf11cSdamien 	0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
41968baf11cSdamien };
42068baf11cSdamien 
42168baf11cSdamien #ifdef notyet
42268baf11cSdamien static const uint32_t ar5416_phy_vals_5ghz_40mhz[] = {
42368baf11cSdamien 	0x00000007, 0x000003c4, 0x00000000, 0xad848e19, 0x7d14e000,
42468baf11cSdamien 	0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
42568baf11cSdamien 	0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
42668baf11cSdamien 	0x00200400, 0x206a002e, 0x13721c1e, 0x001a6a65, 0x1284233c,
42768baf11cSdamien 	0x6c48b4e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd10,
42868baf11cSdamien 	0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
42968baf11cSdamien 	0x00000000, 0x000007d0, 0x00000230, 0x10000fff, 0x0510081c,
43068baf11cSdamien 	0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
43168baf11cSdamien 	0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
43268baf11cSdamien 	0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
43368baf11cSdamien 	0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
43468baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
43568baf11cSdamien 	0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
43668baf11cSdamien 	0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
43768baf11cSdamien 	0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
43868baf11cSdamien 	0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
43968baf11cSdamien 	0x00000000, 0x00000040, 0x00000080, 0x000001a1, 0x000001e1,
44068baf11cSdamien 	0x00000021, 0x00000061, 0x00000168, 0x000001a8, 0x000001e8,
44168baf11cSdamien 	0x00000028, 0x00000068, 0x00000189, 0x000001c9, 0x00000009,
44268baf11cSdamien 	0x00000049, 0x00000089, 0x00000170, 0x000001b0, 0x000001f0,
44368baf11cSdamien 	0x00000030, 0x00000070, 0x00000191, 0x000001d1, 0x00000011,
44468baf11cSdamien 	0x00000051, 0x00000091, 0x000001b8, 0x000001f8, 0x00000038,
44568baf11cSdamien 	0x00000078, 0x00000199, 0x000001d9, 0x00000019, 0x00000059,
44668baf11cSdamien 	0x00000099, 0x000000d9, 0x000000f9, 0x000000f9, 0x000000f9,
44768baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
44868baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
44968baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
45068baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
45168baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
45268baf11cSdamien 	0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
45368baf11cSdamien 	0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
45468baf11cSdamien 	0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
45568baf11cSdamien 	0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
45668baf11cSdamien 	0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
45768baf11cSdamien 	0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
45868baf11cSdamien 	0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
45968baf11cSdamien 	0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
46068baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
46168baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
46268baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
46368baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
46468baf11cSdamien 	0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
46568baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
46668baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
46768baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
46868baf11cSdamien 	0x00000000, 0x00000008, 0x00000440, 0xd6be4788, 0x012e8160,
46968baf11cSdamien 	0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
47068baf11cSdamien 	0x00000400, 0x000009b5, 0x00000000, 0x00000210, 0x3f3f3f3f,
47168baf11cSdamien 	0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
47268baf11cSdamien 	0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
47368baf11cSdamien 	0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a9caa,
47468baf11cSdamien 	0x1ce739ce, 0x051701ce, 0x18010000, 0x30032602, 0x48073e06,
47568baf11cSdamien 	0x560b4c0a, 0x641a600f, 0x7a4f6e1b, 0x8c5b7e5a, 0x9d0f96cf,
47668baf11cSdamien 	0xb51fa69f, 0xcb3fbcbf, 0x0000d7bf, 0x00000000, 0x00000000,
47768baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
47868baf11cSdamien 	0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
47968baf11cSdamien 	0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
48068baf11cSdamien 	0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
48168baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
48268baf11cSdamien 	0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
48368baf11cSdamien 	0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a65, 0x0510001c,
48468baf11cSdamien 	0x00009b40, 0x012e8160, 0x09249126, 0x00180a65, 0x0510001c,
48568baf11cSdamien 	0x00009b40, 0x012e8160, 0x09249126, 0x0001c600, 0x004b6a8e,
48668baf11cSdamien 	0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
48768baf11cSdamien 	0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
48868baf11cSdamien 	0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
48968baf11cSdamien };
49068baf11cSdamien #endif
49168baf11cSdamien 
49268baf11cSdamien #ifdef notyet
49368baf11cSdamien static const uint32_t ar5416_phy_vals_2ghz_40mhz[] = {
49468baf11cSdamien 	0x00000007, 0x000003c4, 0x00000000, 0xad848e19, 0x7d14e000,
49568baf11cSdamien 	0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
49668baf11cSdamien 	0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
49768baf11cSdamien 	0x00200400, 0x206a002e, 0x13721c24, 0x00197a68, 0x1284233c,
49868baf11cSdamien 	0x6c48b0e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd20,
49968baf11cSdamien 	0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
50068baf11cSdamien 	0x00000000, 0x00000898, 0x00000268, 0x10000fff, 0x0510001c,
50168baf11cSdamien 	0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
50268baf11cSdamien 	0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
50368baf11cSdamien 	0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
50468baf11cSdamien 	0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
50568baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
50668baf11cSdamien 	0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
50768baf11cSdamien 	0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
50868baf11cSdamien 	0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
50968baf11cSdamien 	0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
51068baf11cSdamien 	0x00000000, 0x00000040, 0x00000080, 0x00000141, 0x00000181,
51168baf11cSdamien 	0x000001c1, 0x00000001, 0x00000041, 0x000001a8, 0x000001e8,
51268baf11cSdamien 	0x00000028, 0x00000068, 0x000000a8, 0x00000169, 0x000001a9,
51368baf11cSdamien 	0x000001e9, 0x00000029, 0x00000069, 0x00000190, 0x000001d0,
51468baf11cSdamien 	0x00000010, 0x00000050, 0x00000090, 0x00000151, 0x00000191,
51568baf11cSdamien 	0x000001d1, 0x00000011, 0x00000051, 0x00000198, 0x000001d8,
51668baf11cSdamien 	0x00000018, 0x00000058, 0x00000098, 0x00000159, 0x00000199,
51768baf11cSdamien 	0x000001d9, 0x00000019, 0x00000059, 0x00000099, 0x000000d9,
51868baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
51968baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
52068baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
52168baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
52268baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
52368baf11cSdamien 	0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
52468baf11cSdamien 	0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
52568baf11cSdamien 	0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
52668baf11cSdamien 	0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
52768baf11cSdamien 	0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
52868baf11cSdamien 	0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
52968baf11cSdamien 	0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
53068baf11cSdamien 	0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
53168baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
53268baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
53368baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
53468baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
53568baf11cSdamien 	0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
53668baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
53768baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
53868baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
53968baf11cSdamien 	0x00000000, 0x0000000e, 0x00000440, 0xd03e4788, 0x012a8160,
54068baf11cSdamien 	0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
54168baf11cSdamien 	0x00000400, 0x000009b5, 0x00000000, 0x00000210, 0x3f3f3f3f,
54268baf11cSdamien 	0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
54368baf11cSdamien 	0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
54468baf11cSdamien 	0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a7caa,
54568baf11cSdamien 	0x1ce739ce, 0x051701ce, 0x18010000, 0x2e032402, 0x4a0a3c06,
54668baf11cSdamien 	0x621a540b, 0x764f6c1b, 0x845b7a5a, 0x950f8ccf, 0xa5cf9b4f,
54768baf11cSdamien 	0xbddfaf1f, 0xd1ffc93f, 0x00000000, 0x00000000, 0x00000000,
54868baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
54968baf11cSdamien 	0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
55068baf11cSdamien 	0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
55168baf11cSdamien 	0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
55268baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
55368baf11cSdamien 	0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
55468baf11cSdamien 	0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a68, 0x0510001c,
55568baf11cSdamien 	0x00009b40, 0x012a8160, 0x09249126, 0x00180a68, 0x0510001c,
55668baf11cSdamien 	0x00009b40, 0x012a8160, 0x09249126, 0x0001c600, 0x004b6a8e,
55768baf11cSdamien 	0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
55868baf11cSdamien 	0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
55968baf11cSdamien 	0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
56068baf11cSdamien };
56168baf11cSdamien #endif
56268baf11cSdamien 
56368baf11cSdamien static const uint32_t ar5416_phy_vals_2ghz_20mhz[] = {
56468baf11cSdamien 	0x00000007, 0x00000300, 0x00000000, 0xad848e19, 0x7d14e000,
56568baf11cSdamien 	0x9c0a9f6b, 0x00000090, 0x00000000, 0x02020200, 0x00000e0e,
56668baf11cSdamien 	0x0a020001, 0x0000a000, 0x00000000, 0x00000e0e, 0x00000007,
56768baf11cSdamien 	0x00200400, 0x206a002e, 0x137216a4, 0x00197a68, 0x1284233c,
56868baf11cSdamien 	0x6c48b0e4, 0x00000859, 0x7ec80d2e, 0x31395c5e, 0x0004dd20,
56968baf11cSdamien 	0x409a4190, 0x050cb081, 0x00000000, 0x00000000, 0x00000000,
57068baf11cSdamien 	0x00000000, 0x00000898, 0x00000134, 0x10000fff, 0x0510001c,
57168baf11cSdamien 	0xd0058a15, 0x00000001, 0x00000004, 0x3f3f3f3f, 0x3f3f3f3f,
57268baf11cSdamien 	0x0000007f, 0xdfb81020, 0x9280b212, 0x00020028, 0x5d50e188,
57368baf11cSdamien 	0x00081fff, 0x00009b40, 0x00001120, 0x190fb515, 0x00000000,
57468baf11cSdamien 	0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
57568baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
57668baf11cSdamien 	0x00000000, 0x00000007, 0x001fff00, 0x006f00c4, 0x03051000,
57768baf11cSdamien 	0x00000820, 0x038919be, 0x06336f77, 0x60f6532c, 0x08f186c8,
57868baf11cSdamien 	0x00046384, 0x00000000, 0x00000000, 0x00000000, 0x00000200,
57968baf11cSdamien 	0x64646464, 0x3c787878, 0x000000aa, 0x00000000, 0x00001042,
58068baf11cSdamien 	0x00000000, 0x00000040, 0x00000080, 0x00000141, 0x00000181,
58168baf11cSdamien 	0x000001c1, 0x00000001, 0x00000041, 0x000001a8, 0x000001e8,
58268baf11cSdamien 	0x00000028, 0x00000068, 0x000000a8, 0x00000169, 0x000001a9,
58368baf11cSdamien 	0x000001e9, 0x00000029, 0x00000069, 0x00000190, 0x000001d0,
58468baf11cSdamien 	0x00000010, 0x00000050, 0x00000090, 0x00000151, 0x00000191,
58568baf11cSdamien 	0x000001d1, 0x00000011, 0x00000051, 0x00000198, 0x000001d8,
58668baf11cSdamien 	0x00000018, 0x00000058, 0x00000098, 0x00000159, 0x00000199,
58768baf11cSdamien 	0x000001d9, 0x00000019, 0x00000059, 0x00000099, 0x000000d9,
58868baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
58968baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
59068baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
59168baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9,
59268baf11cSdamien 	0x000000f9, 0x000000f9, 0x000000f9, 0x000000f9, 0x00000000,
59368baf11cSdamien 	0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005,
59468baf11cSdamien 	0x00000008, 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
59568baf11cSdamien 	0x0000000d, 0x00000010, 0x00000011, 0x00000012, 0x00000013,
59668baf11cSdamien 	0x00000014, 0x00000015, 0x00000018, 0x00000019, 0x0000001a,
59768baf11cSdamien 	0x0000001b, 0x0000001c, 0x0000001d, 0x00000020, 0x00000021,
59868baf11cSdamien 	0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000028,
59968baf11cSdamien 	0x00000029, 0x0000002a, 0x0000002b, 0x0000002c, 0x0000002d,
60068baf11cSdamien 	0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034,
60168baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
60268baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
60368baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
60468baf11cSdamien 	0x00000035, 0x00000035, 0x00000035, 0x00000035, 0x00000035,
60568baf11cSdamien 	0x00000035, 0x00000010, 0x0000001a, 0x00000000, 0x00000000,
60668baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
60768baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
60868baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
60968baf11cSdamien 	0x00000000, 0x0000000e, 0x00000440, 0xd03e4788, 0x012a8160,
61068baf11cSdamien 	0x40806333, 0x00106c10, 0x009c4060, 0x1883800a, 0x018830c6,
61168baf11cSdamien 	0x00000400, 0x000009b5, 0x00000000, 0x00000108, 0x3f3f3f3f,
61268baf11cSdamien 	0x3f3f3f3f, 0x13c889af, 0x38490a20, 0x00007bb6, 0x0fff3ffc,
61368baf11cSdamien 	0x00000001, 0x0000a000, 0x00000000, 0x0cc75380, 0x0f0f0f01,
61468baf11cSdamien 	0xdfa91f01, 0x00418a11, 0x00000000, 0x09249126, 0x0a1a7caa,
61568baf11cSdamien 	0x1ce739ce, 0x051701ce, 0x18010000, 0x2e032402, 0x4a0a3c06,
61668baf11cSdamien 	0x621a540b, 0x764f6c1b, 0x845b7a5a, 0x950f8ccf, 0xa5cf9b4f,
61768baf11cSdamien 	0xbddfaf1f, 0xd1ffc93f, 0x00000000, 0x00000000, 0x00000000,
61868baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
61968baf11cSdamien 	0x3fffffff, 0x3fffffff, 0x3fffffff, 0x0003ffff, 0x79a8aa1f,
62068baf11cSdamien 	0x08000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x1ce739ce, 0x000001ce,
62168baf11cSdamien 	0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
62268baf11cSdamien 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
62368baf11cSdamien 	0x00000000, 0x00000000, 0x3f3f3f3f, 0x3f3f3f3f, 0x3f3f3f3f,
62468baf11cSdamien 	0x00000000, 0x1ce739ce, 0x000000c0, 0x00180a68, 0x0510001c,
62568baf11cSdamien 	0x00009b40, 0x012a8160, 0x09249126, 0x00180a68, 0x0510001c,
62668baf11cSdamien 	0x00009b40, 0x012a8160, 0x09249126, 0x0001c600, 0x004b6a8e,
62768baf11cSdamien 	0x000003ce, 0x00181400, 0x00820820, 0x066c420f, 0x0f282207,
62868baf11cSdamien 	0x17601685, 0x1f801104, 0x37a00c03, 0x3fc40883, 0x57c00803,
62968baf11cSdamien 	0x5fd80682, 0x7fe00482, 0x7f3c7bba, 0xf3307ff0
63068baf11cSdamien };
63168baf11cSdamien 
632803f2018Sdamien /* NB: apply AR_PHY(). */
63368baf11cSdamien static const uint8_t ar5416_banks_regs[] = {
63468baf11cSdamien 	0x2c, 0x38, 0x2c, 0x3b, 0x2c, 0x38, 0x3c, 0x2c, 0x3a, 0x2c, 0x39,
63568baf11cSdamien 	0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
63668baf11cSdamien 	0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
63768baf11cSdamien 	0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
63868baf11cSdamien 	0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
63968baf11cSdamien 	0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x38, 0x2c, 0x2c,
64068baf11cSdamien 	0x2c, 0x3c
64168baf11cSdamien };
64268baf11cSdamien 
64368baf11cSdamien static const uint32_t ar5416_banks_vals_5ghz[] = {
64468baf11cSdamien 	0x1e5795e5, 0x02008020, 0x02108421, 0x00000008, 0x0e73ff17,
64568baf11cSdamien 	0x00000420, 0x01400018, 0x000001a1, 0x00000001, 0x00000013,
64668baf11cSdamien 	0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
64768baf11cSdamien 	0x00000000, 0x00004000, 0x00006c00, 0x00002c00, 0x00004800,
64868baf11cSdamien 	0x00004000, 0x00006000, 0x00001000, 0x00004000, 0x00007c00,
64968baf11cSdamien 	0x00007c00, 0x00007c00, 0x00007c00, 0x00007c00, 0x00087c00,
65068baf11cSdamien 	0x00007c00, 0x00005400, 0x00000c00, 0x00001800, 0x00007c00,
65168baf11cSdamien 	0x00006c00, 0x00006c00, 0x00007c00, 0x00002c00, 0x00003c00,
65268baf11cSdamien 	0x00003800, 0x00001c00, 0x00000800, 0x00000408, 0x00004c15,
65368baf11cSdamien 	0x00004188, 0x0000201e, 0x00010408, 0x00000801, 0x00000c08,
65468baf11cSdamien 	0x0000181e, 0x00001016, 0x00002800, 0x00004010, 0x0000081c,
65568baf11cSdamien 	0x00000115, 0x00000015, 0x00000066, 0x0000001c, 0x00000000,
65668baf11cSdamien 	0x00000004, 0x00000015, 0x0000001f, 0x00000000, 0x000000a0,
65768baf11cSdamien 	0x00000000, 0x00000040, 0x0000001c
65868baf11cSdamien };
65968baf11cSdamien 
66068baf11cSdamien static const uint32_t ar5416_banks_vals_2ghz[] = {
66168baf11cSdamien 	0x1e5795e5, 0x02008020, 0x02108421, 0x00000008, 0x0e73ff17,
66268baf11cSdamien 	0x00000420, 0x01c00018, 0x000001a1, 0x00000001, 0x00000013,
66368baf11cSdamien 	0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
66468baf11cSdamien 	0x00000000, 0x00004000, 0x00006c00, 0x00002c00, 0x00004800,
66568baf11cSdamien 	0x00004000, 0x00006000, 0x00001000, 0x00004000, 0x00007c00,
66668baf11cSdamien 	0x00007c00, 0x00007c00, 0x00007c00, 0x00007c00, 0x00087c00,
66768baf11cSdamien 	0x00007c00, 0x00005400, 0x00000c00, 0x00001800, 0x00007c00,
66868baf11cSdamien 	0x00006c00, 0x00006c00, 0x00007c00, 0x00002c00, 0x00003c00,
66968baf11cSdamien 	0x00003800, 0x00001c00, 0x00000800, 0x00000408, 0x00004c15,
67068baf11cSdamien 	0x00004188, 0x0000201e, 0x00010408, 0x00000801, 0x00000c08,
67168baf11cSdamien 	0x0000181e, 0x00001016, 0x00002800, 0x00004010, 0x0000081c,
67268baf11cSdamien 	0x00000115, 0x00000015, 0x00000066, 0x0000001c, 0x00000000,
67368baf11cSdamien 	0x00000004, 0x00000015, 0x0000001f, 0x00000400, 0x000000a0,
67468baf11cSdamien 	0x00000000, 0x00000040, 0x0000001c
67568baf11cSdamien };
67668baf11cSdamien 
67768baf11cSdamien /*
67868baf11cSdamien  * EEPROM.
67968baf11cSdamien  */
68068baf11cSdamien /* Possible flags for opCapFlags. */
68168baf11cSdamien #define AR5416_OPFLAGS_11A	0x01
68268baf11cSdamien #define AR5416_OPFLAGS_11G	0x02
68368baf11cSdamien #define AR5416_OPFLAGS_5G_HT40	0x04
68468baf11cSdamien #define AR5416_OPFLAGS_2G_HT40	0x08
68568baf11cSdamien #define AR5416_OPFLAGS_5G_HT20	0x10
68668baf11cSdamien #define AR5416_OPFLAGS_2G_HT20	0x20
68768baf11cSdamien 
68868baf11cSdamien #define AR5416_NUM_5G_CAL_PIERS		8
68968baf11cSdamien #define AR5416_NUM_2G_CAL_PIERS		4
69068baf11cSdamien #define AR5416_NUM_5G_20_TARGET_POWERS	8
69168baf11cSdamien #define AR5416_NUM_5G_40_TARGET_POWERS	8
69268baf11cSdamien #define AR5416_NUM_2G_CCK_TARGET_POWERS	3
69368baf11cSdamien #define AR5416_NUM_2G_20_TARGET_POWERS	4
69468baf11cSdamien #define AR5416_NUM_2G_40_TARGET_POWERS	4
69568baf11cSdamien #define AR5416_NUM_CTLS			24
69668baf11cSdamien #define AR5416_NUM_BAND_EDGES		8
69768baf11cSdamien #define AR5416_NUM_PD_GAINS		4
69868baf11cSdamien #define AR5416_PD_GAIN_ICEPTS		5
69968baf11cSdamien #define AR5416_EEPROM_MODAL_SPURS	5
70068baf11cSdamien #define AR5416_MAX_CHAINS		2
70168baf11cSdamien 
702ab0b1be7Smglocker struct BaseEepHeader {
70368baf11cSdamien 	uint16_t	length;
70468baf11cSdamien 	uint16_t	checksum;
70568baf11cSdamien 	uint16_t	version;
70668baf11cSdamien 	uint8_t		opCapFlags;
70768baf11cSdamien 	uint8_t		eepMisc;
70868baf11cSdamien 	uint16_t	regDmn[2];
70968baf11cSdamien 	uint8_t		macAddr[6];
71068baf11cSdamien 	uint8_t		rxMask;
71168baf11cSdamien 	uint8_t		txMask;
71268baf11cSdamien 	uint16_t	rfSilent;
71368baf11cSdamien 	uint16_t	blueToothOptions;
71468baf11cSdamien 	uint16_t	deviceCap;
71568baf11cSdamien 	uint32_t	binBuildNumber;
71668baf11cSdamien 	uint8_t		deviceType;
71768baf11cSdamien 	uint8_t		futureBase[33];
718ab0b1be7Smglocker } __packed;
71968baf11cSdamien 
720ab0b1be7Smglocker struct spurChanStruct {
72168baf11cSdamien 	uint16_t	spurChan;
72268baf11cSdamien 	uint8_t		spurRangeLow;
72368baf11cSdamien 	uint8_t		spurRangeHigh;
724ab0b1be7Smglocker } __packed;
72568baf11cSdamien 
726ab0b1be7Smglocker struct ModalEepHeader {
72768baf11cSdamien 	uint32_t	antCtrlChain[AR5416_MAX_CHAINS];
72868baf11cSdamien 	uint32_t	antCtrlCommon;
72968baf11cSdamien 	int8_t		antennaGainCh[AR5416_MAX_CHAINS];
73068baf11cSdamien 	uint8_t		switchSettling;
73168baf11cSdamien 	uint8_t		txRxAttenCh[AR5416_MAX_CHAINS];
73268baf11cSdamien 	uint8_t		rxTxMarginCh[AR5416_MAX_CHAINS];
73368baf11cSdamien 	uint8_t		adcDesiredSize;
73468baf11cSdamien 	int8_t		pgaDesiredSize;
73568baf11cSdamien 	uint8_t		xlnaGainCh[AR5416_MAX_CHAINS];
73668baf11cSdamien 	uint8_t		txEndToXpaOff;
73768baf11cSdamien 	uint8_t		txEndToRxOn;
73868baf11cSdamien 	uint8_t		txFrameToXpaOn;
73968baf11cSdamien 	uint8_t		thresh62;
74068baf11cSdamien 	uint8_t		noiseFloorThreshCh[AR5416_MAX_CHAINS];
74168baf11cSdamien 	uint8_t		xpdGain;
74268baf11cSdamien 	uint8_t		xpd;
74368baf11cSdamien 	int8_t		iqCalICh[AR5416_MAX_CHAINS];
74468baf11cSdamien 	int8_t		iqCalQCh[AR5416_MAX_CHAINS];
74568baf11cSdamien 	uint8_t		pdGainOverlap;
74668baf11cSdamien 	uint8_t		ob;
74768baf11cSdamien 	uint8_t		db;
74868baf11cSdamien 	uint8_t		xpaBiasLvl;
74968baf11cSdamien 	uint8_t		pwrDecreaseFor2Chain;
75068baf11cSdamien 	uint8_t		pwrDecreaseFor3Chain;
75168baf11cSdamien 	uint8_t		txFrameToDataStart;
75268baf11cSdamien 	uint8_t		txFrameToPaOn;
75368baf11cSdamien 	uint8_t		ht40PowerIncForPdadc;
75468baf11cSdamien 	uint8_t		bswAtten[AR5416_MAX_CHAINS];
75568baf11cSdamien 	uint8_t		bswMargin[AR5416_MAX_CHAINS];
75668baf11cSdamien 	uint8_t		swSettleHt40;
75768baf11cSdamien 	uint8_t		futureModal[22];
758ab0b1be7Smglocker 	struct spurChanStruct spurChans[AR5416_EEPROM_MODAL_SPURS];
759ab0b1be7Smglocker } __packed;
76068baf11cSdamien 
761ab0b1be7Smglocker struct calDataPerFreq {
76268baf11cSdamien 	uint8_t		pwrPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
76368baf11cSdamien 	uint8_t		vpdPdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
764ab0b1be7Smglocker } __packed;
76568baf11cSdamien 
766ab0b1be7Smglocker struct CalTargetPowerLegacy {
76768baf11cSdamien 	uint8_t		bChannel;
76868baf11cSdamien 	uint8_t		tPow2x[4];
769ab0b1be7Smglocker } __packed;
77068baf11cSdamien 
771ab0b1be7Smglocker struct CalTargetPowerHt {
77268baf11cSdamien 	uint8_t		bChannel;
77368baf11cSdamien 	uint8_t		tPow2x[8];
774ab0b1be7Smglocker } __packed;
77568baf11cSdamien 
776ab0b1be7Smglocker struct CalCtlEdges {
77768baf11cSdamien 	uint8_t		bChannel;
77868baf11cSdamien 	uint8_t		tPowerFlag;
779ab0b1be7Smglocker } __packed;
78068baf11cSdamien 
781ab0b1be7Smglocker struct CalCtlData {
782ab0b1be7Smglocker 	struct CalCtlEdges ctlEdges[AR5416_MAX_CHAINS][AR5416_NUM_BAND_EDGES];
783ab0b1be7Smglocker } __packed;
78468baf11cSdamien 
785ab0b1be7Smglocker struct ar5416eeprom {
786ab0b1be7Smglocker 	struct BaseEepHeader	baseEepHeader;
78768baf11cSdamien 	uint8_t			custData[64];
788ab0b1be7Smglocker 	struct ModalEepHeader	modalHeader[2];
78968baf11cSdamien 	uint8_t			calFreqPier5G[AR5416_NUM_5G_CAL_PIERS];
79068baf11cSdamien 	uint8_t			calFreqPier2G[AR5416_NUM_2G_CAL_PIERS];
791ab0b1be7Smglocker 	struct calDataPerFreq	calPierData5G[AR5416_MAX_CHAINS]
79268baf11cSdamien 					     [AR5416_NUM_5G_CAL_PIERS];
793ab0b1be7Smglocker 	struct calDataPerFreq	calPierData2G[AR5416_MAX_CHAINS]
79468baf11cSdamien 					     [AR5416_NUM_2G_CAL_PIERS];
795ab0b1be7Smglocker 	struct CalTargetPowerLegacy calTPow5G[AR5416_NUM_5G_20_TARGET_POWERS];
796ab0b1be7Smglocker 	struct CalTargetPowerHt calTPow5GHT20[AR5416_NUM_5G_20_TARGET_POWERS];
797ab0b1be7Smglocker 	struct CalTargetPowerHt calTPow5GHT40[AR5416_NUM_5G_40_TARGET_POWERS];
798ab0b1be7Smglocker 	struct CalTargetPowerLegacy calTPowCck[AR5416_NUM_2G_CCK_TARGET_POWERS];
799ab0b1be7Smglocker 	struct CalTargetPowerLegacy calTPow2G[AR5416_NUM_2G_20_TARGET_POWERS];
800ab0b1be7Smglocker 	struct CalTargetPowerHt calTPow2GHT20[AR5416_NUM_2G_20_TARGET_POWERS];
801ab0b1be7Smglocker 	struct CalTargetPowerHt calTPow2GHT40[AR5416_NUM_2G_40_TARGET_POWERS];
80268baf11cSdamien 	uint8_t			ctlIndex[AR5416_NUM_CTLS];
803ab0b1be7Smglocker 	struct CalCtlData	ctlData[AR5416_NUM_CTLS];
80468baf11cSdamien 	uint8_t			padding;
805ab0b1be7Smglocker } __packed;
80668baf11cSdamien 
80768baf11cSdamien 
80868baf11cSdamien #define OTUS_TX_DATA_LIST_COUNT	8
80968baf11cSdamien #define OTUS_RX_DATA_LIST_COUNT	1
81068baf11cSdamien 
81168baf11cSdamien #define OTUS_CMD_TIMEOUT	1000
81268baf11cSdamien #define OTUS_TX_TIMEOUT		1000
81368baf11cSdamien 
81468baf11cSdamien #define OTUS_UID(aid)		(IEEE80211_AID(aid) + 4)
81568baf11cSdamien 
81668baf11cSdamien #define OTUS_MAX_TXCMDSZ	64
81768baf11cSdamien #define OTUS_RXBUFSZ		(8 * 1024)
81868baf11cSdamien #define OTUS_TXBUFSZ		(4 * 1024)
81968baf11cSdamien 
820d7d7f774Sdamien /* Default EDCA parameters for when QoS is disabled. */
821d7d7f774Sdamien static const struct ieee80211_edca_ac_params otus_edca_def[EDCA_NUM_AC] = {
822d7d7f774Sdamien 	{ 4, 10, 3,  0 },
823d7d7f774Sdamien 	{ 4, 10, 7,  0 },
824d7d7f774Sdamien 	{ 3,  4, 2, 94 },
825d7d7f774Sdamien 	{ 2,  3, 2, 47 }
826d7d7f774Sdamien };
827d7d7f774Sdamien 
82868baf11cSdamien #define OTUS_RIDX_CCK1		 0
82968baf11cSdamien #define OTUS_RIDX_OFDM6		 4
83068baf11cSdamien #define OTUS_RIDX_OFDM24	 8
83168baf11cSdamien #define OTUS_RIDX_MAX		11
83268baf11cSdamien static const struct otus_rate {
83368baf11cSdamien 	uint8_t	rate;
83468baf11cSdamien 	uint8_t	mcs;
83568baf11cSdamien } otus_rates[] = {
83668baf11cSdamien 	{   2, 0x0 },
83768baf11cSdamien 	{   4, 0x1 },
83868baf11cSdamien 	{  11, 0x2 },
83968baf11cSdamien 	{  22, 0x3 },
84068baf11cSdamien 	{  12, 0xb },
84168baf11cSdamien 	{  18, 0xf },
84268baf11cSdamien 	{  24, 0xa },
84368baf11cSdamien 	{  36, 0xe },
84468baf11cSdamien 	{  48, 0x9 },
84568baf11cSdamien 	{  72, 0xd },
84668baf11cSdamien 	{  96, 0x8 },
84768baf11cSdamien 	{ 108, 0xc }
84868baf11cSdamien };
84968baf11cSdamien 
85068baf11cSdamien struct otus_rx_radiotap_header {
85168baf11cSdamien 	struct ieee80211_radiotap_header wr_ihdr;
85268baf11cSdamien 	uint8_t		wr_flags;
85368baf11cSdamien 	uint8_t		wr_rate;
85468baf11cSdamien 	uint16_t	wr_chan_freq;
85568baf11cSdamien 	uint16_t	wr_chan_flags;
85668baf11cSdamien 	uint8_t		wr_antsignal;
85768baf11cSdamien } __packed;
85868baf11cSdamien 
85968baf11cSdamien #define OTUS_RX_RADIOTAP_PRESENT			\
86068baf11cSdamien 	(1 << IEEE80211_RADIOTAP_FLAGS |		\
86168baf11cSdamien 	 1 << IEEE80211_RADIOTAP_RATE |			\
86268baf11cSdamien 	 1 << IEEE80211_RADIOTAP_CHANNEL |		\
86368baf11cSdamien 	 1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL)
86468baf11cSdamien 
86568baf11cSdamien struct otus_tx_radiotap_header {
86668baf11cSdamien 	struct ieee80211_radiotap_header wt_ihdr;
86768baf11cSdamien 	uint8_t		wt_flags;
86868baf11cSdamien 	uint8_t		wt_rate;
86968baf11cSdamien 	uint16_t	wt_chan_freq;
87068baf11cSdamien 	uint16_t	wt_chan_flags;
87168baf11cSdamien } __packed;
87268baf11cSdamien 
87368baf11cSdamien #define OTUS_TX_RADIOTAP_PRESENT			\
87468baf11cSdamien 	(1 << IEEE80211_RADIOTAP_FLAGS |		\
87568baf11cSdamien 	 1 << IEEE80211_RADIOTAP_RATE |			\
87668baf11cSdamien 	 1 << IEEE80211_RADIOTAP_CHANNEL)
87768baf11cSdamien 
87868baf11cSdamien struct otus_softc;
87968baf11cSdamien 
88068baf11cSdamien struct otus_tx_cmd {
881ab0b1be7Smglocker 	struct usbd_xfer	*xfer;
88268baf11cSdamien 	uint8_t			*buf;
88368baf11cSdamien 	void			*odata;
88468baf11cSdamien 	uint16_t		token;
88568baf11cSdamien 	uint8_t			done;
88668baf11cSdamien };
88768baf11cSdamien 
88868baf11cSdamien struct otus_rx_data {
88968baf11cSdamien 	struct otus_softc	*sc;
890ab0b1be7Smglocker 	struct usbd_xfer	*xfer;
89168baf11cSdamien 	uint8_t			*buf;
89268baf11cSdamien };
89368baf11cSdamien 
89468baf11cSdamien struct otus_tx_data {
89568baf11cSdamien 	struct otus_softc	*sc;
896ab0b1be7Smglocker 	struct usbd_xfer	*xfer;
89768baf11cSdamien 	uint8_t			*buf;
89868baf11cSdamien };
89968baf11cSdamien 
90068baf11cSdamien struct otus_host_cmd {
90168baf11cSdamien 	void	(*cb)(struct otus_softc *, void *);
90268baf11cSdamien 	uint8_t	data[256];
90368baf11cSdamien };
90468baf11cSdamien 
90568baf11cSdamien #define OTUS_HOST_CMD_RING_COUNT	32
90668baf11cSdamien struct otus_host_cmd_ring {
90768baf11cSdamien 	struct otus_host_cmd	cmd[OTUS_HOST_CMD_RING_COUNT];
90868baf11cSdamien 	int			cur;
90968baf11cSdamien 	int			next;
91068baf11cSdamien 	int			queued;
91168baf11cSdamien };
91268baf11cSdamien 
91368baf11cSdamien struct otus_node {
91468baf11cSdamien 	struct ieee80211_node		ni;
91568baf11cSdamien 	struct ieee80211_amrr_node	amn;
91668baf11cSdamien 	uint8_t				ridx[IEEE80211_RATE_MAXSIZE];
91768baf11cSdamien };
91868baf11cSdamien 
91968baf11cSdamien struct otus_cmd_newstate {
92068baf11cSdamien 	enum ieee80211_state	state;
92168baf11cSdamien 	int			arg;
92268baf11cSdamien };
92368baf11cSdamien 
92468baf11cSdamien struct otus_cmd_key {
92568baf11cSdamien 	struct ieee80211_key	key;
926*4fac4e76Skrw 	struct ieee80211_node	*ni;
92768baf11cSdamien };
92868baf11cSdamien 
92968baf11cSdamien struct otus_softc {
93068baf11cSdamien 	struct device			sc_dev;
93168baf11cSdamien 	struct ieee80211com		sc_ic;
93268baf11cSdamien 	int				(*sc_newstate)(struct ieee80211com *,
93368baf11cSdamien 					    enum ieee80211_state, int);
93468baf11cSdamien 	void				(*sc_led_newstate)(struct otus_softc *);
93568baf11cSdamien 
936ab0b1be7Smglocker 	struct usbd_device		*sc_udev;
937ab0b1be7Smglocker 	struct usbd_interface		*sc_iface;
93868baf11cSdamien 
93968baf11cSdamien 	struct ar5416eeprom		eeprom;
9406e30e88dSdamien 	uint8_t				capflags;
941803f2018Sdamien 	uint8_t				rxmask;
942803f2018Sdamien 	uint8_t				txmask;
94368baf11cSdamien 
944ab0b1be7Smglocker 	struct usbd_pipe		*data_tx_pipe;
945ab0b1be7Smglocker 	struct usbd_pipe		*data_rx_pipe;
946ab0b1be7Smglocker 	struct usbd_pipe		*cmd_tx_pipe;
947ab0b1be7Smglocker 	struct usbd_pipe		*cmd_rx_pipe;
94868baf11cSdamien 	uint8_t 			*ibuf;
949234dfda1Sderaadt 	size_t				ibuflen;
95068baf11cSdamien 
95168baf11cSdamien 	int				sc_if_flags;
95268baf11cSdamien 	int				sc_tx_timer;
95368baf11cSdamien 	int				fixed_ridx;
9546e30e88dSdamien 	int				bb_reset;
95568baf11cSdamien 
95668baf11cSdamien 	struct ieee80211_channel	*sc_curchan;
95768baf11cSdamien 
95868baf11cSdamien 	struct usb_task			sc_task;
95968baf11cSdamien 	struct timeout			scan_to;
96068baf11cSdamien 	struct timeout			calib_to;
96168baf11cSdamien 	struct ieee80211_amrr		amrr;
96268baf11cSdamien 
96368baf11cSdamien 	int				write_idx;
96468baf11cSdamien 	int				tx_cur;
96568baf11cSdamien 	int				tx_queued;
96668baf11cSdamien 	uint32_t			led_state;
96768baf11cSdamien 
96868baf11cSdamien 	const uint32_t			*phy_vals;
96968baf11cSdamien 
97068baf11cSdamien 	struct {
97168baf11cSdamien 		uint32_t	reg;
97268baf11cSdamien 		uint32_t	val;
97368baf11cSdamien 	} __packed			write_buf[AR_MAX_WRITE_IDX + 1];
97468baf11cSdamien 
97568baf11cSdamien 	struct otus_host_cmd_ring	cmdq;
97668baf11cSdamien 	struct otus_tx_cmd		tx_cmd;
97768baf11cSdamien 	struct otus_tx_data		tx_data[OTUS_TX_DATA_LIST_COUNT];
97868baf11cSdamien 	struct otus_rx_data		rx_data[OTUS_RX_DATA_LIST_COUNT];
97968baf11cSdamien 
98068baf11cSdamien #if NBPFILTER > 0
98168baf11cSdamien 	caddr_t				sc_drvbpf;
98268baf11cSdamien 
98368baf11cSdamien 	union {
98468baf11cSdamien 		struct otus_rx_radiotap_header th;
98568baf11cSdamien 		uint8_t	pad[64];
98668baf11cSdamien 	}				sc_rxtapu;
98768baf11cSdamien #define sc_rxtap	sc_rxtapu.th
98868baf11cSdamien 	int				sc_rxtap_len;
98968baf11cSdamien 
99068baf11cSdamien 	union {
99168baf11cSdamien 		struct otus_tx_radiotap_header th;
99268baf11cSdamien 		uint8_t	pad[64];
99368baf11cSdamien 	}				sc_txtapu;
99468baf11cSdamien #define sc_txtap	sc_txtapu.th
99568baf11cSdamien 	int				sc_txtap_len;
99668baf11cSdamien #endif
997*4fac4e76Skrw 	int				sc_key_tasks;
99868baf11cSdamien };
999