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