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