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