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