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