1d5c65159SKalle Valo /* SPDX-License-Identifier: BSD-3-Clause-Clear */ 2d5c65159SKalle Valo /* 3d5c65159SKalle Valo * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. 4d5c65159SKalle Valo */ 5d5c65159SKalle Valo 6d5c65159SKalle Valo #ifndef ATH11K_HW_H 7d5c65159SKalle Valo #define ATH11K_HW_H 8d5c65159SKalle Valo 9d5c65159SKalle Valo /* Target configuration defines */ 10d5c65159SKalle Valo 11d5c65159SKalle Valo /* Num VDEVS per radio */ 12d5c65159SKalle Valo #define TARGET_NUM_VDEVS (16 + 1) 13d5c65159SKalle Valo 14d5c65159SKalle Valo #define TARGET_NUM_PEERS_PDEV (512 + TARGET_NUM_VDEVS) 15d5c65159SKalle Valo 16d5c65159SKalle Valo /* Num of peers for Single Radio mode */ 17d5c65159SKalle Valo #define TARGET_NUM_PEERS_SINGLE (TARGET_NUM_PEERS_PDEV) 18d5c65159SKalle Valo 19d5c65159SKalle Valo /* Num of peers for DBS */ 20d5c65159SKalle Valo #define TARGET_NUM_PEERS_DBS (2 * TARGET_NUM_PEERS_PDEV) 21d5c65159SKalle Valo 22d5c65159SKalle Valo /* Num of peers for DBS_SBS */ 23d5c65159SKalle Valo #define TARGET_NUM_PEERS_DBS_SBS (3 * TARGET_NUM_PEERS_PDEV) 24d5c65159SKalle Valo 25d5c65159SKalle Valo /* Max num of stations (per radio) */ 26d5c65159SKalle Valo #define TARGET_NUM_STATIONS 512 27d5c65159SKalle Valo 28d5c65159SKalle Valo #define TARGET_NUM_PEERS(x) TARGET_NUM_PEERS_##x 29d5c65159SKalle Valo #define TARGET_NUM_PEER_KEYS 2 30d5c65159SKalle Valo #define TARGET_NUM_TIDS(x) (2 * TARGET_NUM_PEERS(x) + \ 31d5c65159SKalle Valo 4 * TARGET_NUM_VDEVS + 8) 32d5c65159SKalle Valo 33d5c65159SKalle Valo #define TARGET_AST_SKID_LIMIT 16 34d5c65159SKalle Valo #define TARGET_NUM_OFFLD_PEERS 4 35d5c65159SKalle Valo #define TARGET_NUM_OFFLD_REORDER_BUFFS 4 36d5c65159SKalle Valo 37d5c65159SKalle Valo #define TARGET_TX_CHAIN_MASK (BIT(0) | BIT(1) | BIT(2) | BIT(4)) 38d5c65159SKalle Valo #define TARGET_RX_CHAIN_MASK (BIT(0) | BIT(1) | BIT(2) | BIT(4)) 39d5c65159SKalle Valo #define TARGET_RX_TIMEOUT_LO_PRI 100 40d5c65159SKalle Valo #define TARGET_RX_TIMEOUT_HI_PRI 40 41d5c65159SKalle Valo 42d5c65159SKalle Valo #define TARGET_DECAP_MODE_RAW 0 43d5c65159SKalle Valo #define TARGET_DECAP_MODE_NATIVE_WIFI 1 44d5c65159SKalle Valo #define TARGET_DECAP_MODE_ETH 2 45d5c65159SKalle Valo 46d5c65159SKalle Valo #define TARGET_SCAN_MAX_PENDING_REQS 4 47d5c65159SKalle Valo #define TARGET_BMISS_OFFLOAD_MAX_VDEV 3 48d5c65159SKalle Valo #define TARGET_ROAM_OFFLOAD_MAX_VDEV 3 49d5c65159SKalle Valo #define TARGET_ROAM_OFFLOAD_MAX_AP_PROFILES 8 50d5c65159SKalle Valo #define TARGET_GTK_OFFLOAD_MAX_VDEV 3 51d5c65159SKalle Valo #define TARGET_NUM_MCAST_GROUPS 12 52d5c65159SKalle Valo #define TARGET_NUM_MCAST_TABLE_ELEMS 64 53d5c65159SKalle Valo #define TARGET_MCAST2UCAST_MODE 2 54d5c65159SKalle Valo #define TARGET_TX_DBG_LOG_SIZE 1024 55d5c65159SKalle Valo #define TARGET_RX_SKIP_DEFRAG_TIMEOUT_DUP_DETECTION_CHECK 1 56d5c65159SKalle Valo #define TARGET_VOW_CONFIG 0 57d5c65159SKalle Valo #define TARGET_NUM_MSDU_DESC (2500) 58d5c65159SKalle Valo #define TARGET_MAX_FRAG_ENTRIES 6 59d5c65159SKalle Valo #define TARGET_MAX_BCN_OFFLD 16 60d5c65159SKalle Valo #define TARGET_NUM_WDS_ENTRIES 32 61d5c65159SKalle Valo #define TARGET_DMA_BURST_SIZE 1 62d5c65159SKalle Valo #define TARGET_RX_BATCHMODE 1 63d5c65159SKalle Valo 64d5c65159SKalle Valo #define ATH11K_HW_MAX_QUEUES 4 65107560d8SJohn Crispin #define ATH11K_QUEUE_LEN 4096 66d5c65159SKalle Valo 67d5c65159SKalle Valo #define ATH11k_HW_RATECODE_CCK_SHORT_PREAM_MASK 0x4 68d5c65159SKalle Valo 69d5c65159SKalle Valo #define ATH11K_FW_DIR "ath11k" 70d5c65159SKalle Valo 71d5c65159SKalle Valo #define ATH11K_BOARD_MAGIC "QCA-ATH11K-BOARD" 72d5c65159SKalle Valo #define ATH11K_BOARD_API2_FILE "board-2.bin" 7393a5b668SAnilkumar Kolli #define ATH11K_DEFAULT_BOARD_FILE "board.bin" 74d5c65159SKalle Valo #define ATH11K_DEFAULT_CAL_FILE "caldata.bin" 751399fb87SGovind Singh #define ATH11K_AMSS_FILE "amss.bin" 7656970454SGovind Singh #define ATH11K_M3_FILE "m3.bin" 77d5c65159SKalle Valo 78d5c65159SKalle Valo enum ath11k_hw_rate_cck { 79d5c65159SKalle Valo ATH11K_HW_RATE_CCK_LP_11M = 0, 80d5c65159SKalle Valo ATH11K_HW_RATE_CCK_LP_5_5M, 81d5c65159SKalle Valo ATH11K_HW_RATE_CCK_LP_2M, 82d5c65159SKalle Valo ATH11K_HW_RATE_CCK_LP_1M, 83d5c65159SKalle Valo ATH11K_HW_RATE_CCK_SP_11M, 84d5c65159SKalle Valo ATH11K_HW_RATE_CCK_SP_5_5M, 85d5c65159SKalle Valo ATH11K_HW_RATE_CCK_SP_2M, 86d5c65159SKalle Valo }; 87d5c65159SKalle Valo 88d5c65159SKalle Valo enum ath11k_hw_rate_ofdm { 89d5c65159SKalle Valo ATH11K_HW_RATE_OFDM_48M = 0, 90d5c65159SKalle Valo ATH11K_HW_RATE_OFDM_24M, 91d5c65159SKalle Valo ATH11K_HW_RATE_OFDM_12M, 92d5c65159SKalle Valo ATH11K_HW_RATE_OFDM_6M, 93d5c65159SKalle Valo ATH11K_HW_RATE_OFDM_54M, 94d5c65159SKalle Valo ATH11K_HW_RATE_OFDM_36M, 95d5c65159SKalle Valo ATH11K_HW_RATE_OFDM_18M, 96d5c65159SKalle Valo ATH11K_HW_RATE_OFDM_9M, 97d5c65159SKalle Valo }; 98d5c65159SKalle Valo 99630ad41cSGovind Singh enum ath11k_bus { 100630ad41cSGovind Singh ATH11K_BUS_AHB, 101630ad41cSGovind Singh ATH11K_BUS_PCI, 102630ad41cSGovind Singh }; 103630ad41cSGovind Singh 10434d5a3a8SKalle Valo #define ATH11K_EXT_IRQ_GRP_NUM_MAX 11 10534d5a3a8SKalle Valo 10634d5a3a8SKalle Valo struct ath11k_hw_ring_mask { 10734d5a3a8SKalle Valo u8 tx[ATH11K_EXT_IRQ_GRP_NUM_MAX]; 10834d5a3a8SKalle Valo u8 rx_mon_status[ATH11K_EXT_IRQ_GRP_NUM_MAX]; 10934d5a3a8SKalle Valo u8 rx[ATH11K_EXT_IRQ_GRP_NUM_MAX]; 11034d5a3a8SKalle Valo u8 rx_err[ATH11K_EXT_IRQ_GRP_NUM_MAX]; 11134d5a3a8SKalle Valo u8 rx_wbm_rel[ATH11K_EXT_IRQ_GRP_NUM_MAX]; 11234d5a3a8SKalle Valo u8 reo_status[ATH11K_EXT_IRQ_GRP_NUM_MAX]; 11334d5a3a8SKalle Valo u8 rxdma2host[ATH11K_EXT_IRQ_GRP_NUM_MAX]; 11434d5a3a8SKalle Valo u8 host2rxdma[ATH11K_EXT_IRQ_GRP_NUM_MAX]; 11534d5a3a8SKalle Valo }; 11634d5a3a8SKalle Valo 117d547ca4cSAnilkumar Kolli struct ath11k_hw_ops { 118d547ca4cSAnilkumar Kolli u8 (*get_hw_mac_from_pdev_id)(int pdev_id); 119d547ca4cSAnilkumar Kolli }; 120d547ca4cSAnilkumar Kolli 121d5c65159SKalle Valo struct ath11k_hw_params { 122d5c65159SKalle Valo const char *name; 123d3318abfSAnilkumar Kolli u16 hw_rev; 124b1cc29e9SAnilkumar Kolli u8 max_radios; 1253b94ae4cSAnilkumar Kolli u32 bdf_addr; 1263b94ae4cSAnilkumar Kolli 127d5c65159SKalle Valo struct { 128d5c65159SKalle Valo const char *dir; 129d5c65159SKalle Valo size_t board_size; 130d5c65159SKalle Valo size_t cal_size; 131d5c65159SKalle Valo } fw; 132d547ca4cSAnilkumar Kolli 133d547ca4cSAnilkumar Kolli const struct ath11k_hw_ops *hw_ops; 13434d5a3a8SKalle Valo 13534d5a3a8SKalle Valo const struct ath11k_hw_ring_mask *ring_mask; 136727fae14SCarl Huang 137727fae14SCarl Huang bool internal_sleep_clock; 1386976433cSCarl Huang 1396976433cSCarl Huang const struct ath11k_hw_regs *regs; 140d5c65159SKalle Valo }; 141d5c65159SKalle Valo 142d547ca4cSAnilkumar Kolli extern const struct ath11k_hw_ops ipq8074_ops; 143d547ca4cSAnilkumar Kolli extern const struct ath11k_hw_ops ipq6018_ops; 1449de2ad43SCarl Huang extern const struct ath11k_hw_ops qca6390_ops; 145d547ca4cSAnilkumar Kolli 14634d5a3a8SKalle Valo extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_ipq8074; 14734d5a3a8SKalle Valo 148d547ca4cSAnilkumar Kolli static inline 149d547ca4cSAnilkumar Kolli int ath11k_hw_get_mac_from_pdev_id(struct ath11k_hw_params *hw, 150d547ca4cSAnilkumar Kolli int pdev_idx) 151d547ca4cSAnilkumar Kolli { 152d547ca4cSAnilkumar Kolli if (hw->hw_ops->get_hw_mac_from_pdev_id) 153d547ca4cSAnilkumar Kolli return hw->hw_ops->get_hw_mac_from_pdev_id(pdev_idx); 154d547ca4cSAnilkumar Kolli 155d547ca4cSAnilkumar Kolli return 0; 156d547ca4cSAnilkumar Kolli } 157d547ca4cSAnilkumar Kolli 158d5c65159SKalle Valo struct ath11k_fw_ie { 159d5c65159SKalle Valo __le32 id; 160d5c65159SKalle Valo __le32 len; 16114dd3a71SGustavo A. R. Silva u8 data[]; 162d5c65159SKalle Valo }; 163d5c65159SKalle Valo 164d5c65159SKalle Valo enum ath11k_bd_ie_board_type { 165d5c65159SKalle Valo ATH11K_BD_IE_BOARD_NAME = 0, 166d5c65159SKalle Valo ATH11K_BD_IE_BOARD_DATA = 1, 167d5c65159SKalle Valo }; 168d5c65159SKalle Valo 169d5c65159SKalle Valo enum ath11k_bd_ie_type { 170d5c65159SKalle Valo /* contains sub IEs of enum ath11k_bd_ie_board_type */ 171d5c65159SKalle Valo ATH11K_BD_IE_BOARD = 0, 172d5c65159SKalle Valo ATH11K_BD_IE_BOARD_EXT = 1, 173d5c65159SKalle Valo }; 174d5c65159SKalle Valo 1756976433cSCarl Huang struct ath11k_hw_regs { 1766976433cSCarl Huang u32 hal_tcl1_ring_base_lsb; 1776976433cSCarl Huang u32 hal_tcl1_ring_base_msb; 1786976433cSCarl Huang u32 hal_tcl1_ring_id; 1796976433cSCarl Huang u32 hal_tcl1_ring_misc; 1806976433cSCarl Huang u32 hal_tcl1_ring_tp_addr_lsb; 1816976433cSCarl Huang u32 hal_tcl1_ring_tp_addr_msb; 1826976433cSCarl Huang u32 hal_tcl1_ring_consumer_int_setup_ix0; 1836976433cSCarl Huang u32 hal_tcl1_ring_consumer_int_setup_ix1; 1846976433cSCarl Huang u32 hal_tcl1_ring_msi1_base_lsb; 1856976433cSCarl Huang u32 hal_tcl1_ring_msi1_base_msb; 1866976433cSCarl Huang u32 hal_tcl1_ring_msi1_data; 1876976433cSCarl Huang u32 hal_tcl2_ring_base_lsb; 1886976433cSCarl Huang u32 hal_tcl_ring_base_lsb; 1896976433cSCarl Huang 1906976433cSCarl Huang u32 hal_tcl_status_ring_base_lsb; 1916976433cSCarl Huang 1926976433cSCarl Huang u32 hal_reo1_ring_base_lsb; 1936976433cSCarl Huang u32 hal_reo1_ring_base_msb; 1946976433cSCarl Huang u32 hal_reo1_ring_id; 1956976433cSCarl Huang u32 hal_reo1_ring_misc; 1966976433cSCarl Huang u32 hal_reo1_ring_hp_addr_lsb; 1976976433cSCarl Huang u32 hal_reo1_ring_hp_addr_msb; 1986976433cSCarl Huang u32 hal_reo1_ring_producer_int_setup; 1996976433cSCarl Huang u32 hal_reo1_ring_msi1_base_lsb; 2006976433cSCarl Huang u32 hal_reo1_ring_msi1_base_msb; 2016976433cSCarl Huang u32 hal_reo1_ring_msi1_data; 2026976433cSCarl Huang u32 hal_reo2_ring_base_lsb; 2036976433cSCarl Huang u32 hal_reo1_aging_thresh_ix_0; 2046976433cSCarl Huang u32 hal_reo1_aging_thresh_ix_1; 2056976433cSCarl Huang u32 hal_reo1_aging_thresh_ix_2; 2066976433cSCarl Huang u32 hal_reo1_aging_thresh_ix_3; 2076976433cSCarl Huang 2086976433cSCarl Huang u32 hal_reo1_ring_hp; 2096976433cSCarl Huang u32 hal_reo1_ring_tp; 2106976433cSCarl Huang u32 hal_reo2_ring_hp; 2116976433cSCarl Huang 2126976433cSCarl Huang u32 hal_reo_tcl_ring_base_lsb; 2136976433cSCarl Huang u32 hal_reo_tcl_ring_hp; 2146976433cSCarl Huang 2156976433cSCarl Huang u32 hal_reo_status_ring_base_lsb; 2166976433cSCarl Huang u32 hal_reo_status_hp; 2176976433cSCarl Huang }; 2186976433cSCarl Huang 2196976433cSCarl Huang extern const struct ath11k_hw_regs ipq8074_regs; 2206976433cSCarl Huang extern const struct ath11k_hw_regs qca6390_regs; 2216976433cSCarl Huang 222d5c65159SKalle Valo #endif 223