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_DP_H 7d5c65159SKalle Valo #define ATH11K_DP_H 8d5c65159SKalle Valo 9d5c65159SKalle Valo #include "hal_rx.h" 10d5c65159SKalle Valo 11d5c65159SKalle Valo struct ath11k_base; 12d5c65159SKalle Valo struct ath11k_peer; 13d5c65159SKalle Valo struct ath11k_dp; 14d5c65159SKalle Valo struct ath11k_vif; 15d5c65159SKalle Valo struct hal_tcl_status_ring; 16d5c65159SKalle Valo struct ath11k_ext_irq_grp; 17d5c65159SKalle Valo 18d5c65159SKalle Valo struct dp_rx_tid { 19d5c65159SKalle Valo u8 tid; 20d5c65159SKalle Valo u32 *vaddr; 21d5c65159SKalle Valo dma_addr_t paddr; 22d5c65159SKalle Valo u32 size; 23d5c65159SKalle Valo u32 ba_win_sz; 24d5c65159SKalle Valo bool active; 25d5c65159SKalle Valo }; 26d5c65159SKalle Valo 27d5c65159SKalle Valo #define DP_REO_DESC_FREE_TIMEOUT_MS 1000 28d5c65159SKalle Valo 29d5c65159SKalle Valo struct dp_reo_cache_flush_elem { 30d5c65159SKalle Valo struct list_head list; 31d5c65159SKalle Valo struct dp_rx_tid data; 32d5c65159SKalle Valo unsigned long ts; 33d5c65159SKalle Valo }; 34d5c65159SKalle Valo 35d5c65159SKalle Valo struct dp_reo_cmd { 36d5c65159SKalle Valo struct list_head list; 37d5c65159SKalle Valo struct dp_rx_tid data; 38d5c65159SKalle Valo int cmd_num; 39d5c65159SKalle Valo void (*handler)(struct ath11k_dp *, void *, 40d5c65159SKalle Valo enum hal_reo_cmd_status status); 41d5c65159SKalle Valo }; 42d5c65159SKalle Valo 43d5c65159SKalle Valo struct dp_srng { 44d5c65159SKalle Valo u32 *vaddr_unaligned; 45d5c65159SKalle Valo u32 *vaddr; 46d5c65159SKalle Valo dma_addr_t paddr_unaligned; 47d5c65159SKalle Valo dma_addr_t paddr; 48d5c65159SKalle Valo int size; 49d5c65159SKalle Valo u32 ring_id; 50d5c65159SKalle Valo }; 51d5c65159SKalle Valo 52d5c65159SKalle Valo struct dp_rxdma_ring { 53d5c65159SKalle Valo struct dp_srng refill_buf_ring; 54d5c65159SKalle Valo struct idr bufs_idr; 55d5c65159SKalle Valo /* Protects bufs_idr */ 56d5c65159SKalle Valo spinlock_t idr_lock; 57d5c65159SKalle Valo int bufs_max; 58d5c65159SKalle Valo }; 59d5c65159SKalle Valo 60d0998eb8SJohn Crispin #define ATH11K_TX_COMPL_NEXT(x) (((x) + 1) % DP_TX_COMP_RING_SIZE) 61d0998eb8SJohn Crispin 62d5c65159SKalle Valo struct dp_tx_ring { 63d5c65159SKalle Valo u8 tcl_data_ring_id; 64d5c65159SKalle Valo struct dp_srng tcl_data_ring; 65d5c65159SKalle Valo struct dp_srng tcl_comp_ring; 66d5c65159SKalle Valo struct idr txbuf_idr; 67d5c65159SKalle Valo /* Protects txbuf_idr and num_pending */ 68d5c65159SKalle Valo spinlock_t tx_idr_lock; 69d0998eb8SJohn Crispin struct hal_wbm_release_ring *tx_status; 70d0998eb8SJohn Crispin int tx_status_head; 71d0998eb8SJohn Crispin int tx_status_tail; 72d5c65159SKalle Valo }; 73d5c65159SKalle Valo 74d5c65159SKalle Valo struct ath11k_pdev_mon_stats { 75d5c65159SKalle Valo u32 status_ppdu_state; 76d5c65159SKalle Valo u32 status_ppdu_start; 77d5c65159SKalle Valo u32 status_ppdu_end; 78d5c65159SKalle Valo u32 status_ppdu_compl; 79d5c65159SKalle Valo u32 status_ppdu_start_mis; 80d5c65159SKalle Valo u32 status_ppdu_end_mis; 81d5c65159SKalle Valo u32 status_ppdu_done; 82d5c65159SKalle Valo u32 dest_ppdu_done; 83d5c65159SKalle Valo u32 dest_mpdu_done; 84d5c65159SKalle Valo u32 dest_mpdu_drop; 85d5c65159SKalle Valo u32 dup_mon_linkdesc_cnt; 86d5c65159SKalle Valo u32 dup_mon_buf_cnt; 87d5c65159SKalle Valo }; 88d5c65159SKalle Valo 89d5c65159SKalle Valo struct dp_link_desc_bank { 90d5c65159SKalle Valo void *vaddr_unaligned; 91d5c65159SKalle Valo void *vaddr; 92d5c65159SKalle Valo dma_addr_t paddr_unaligned; 93d5c65159SKalle Valo dma_addr_t paddr; 94d5c65159SKalle Valo u32 size; 95d5c65159SKalle Valo }; 96d5c65159SKalle Valo 97d5c65159SKalle Valo /* Size to enforce scatter idle list mode */ 98d5c65159SKalle Valo #define DP_LINK_DESC_ALLOC_SIZE_THRESH 0x200000 99d5c65159SKalle Valo #define DP_LINK_DESC_BANKS_MAX 8 100d5c65159SKalle Valo 101d5c65159SKalle Valo #define DP_RX_DESC_COOKIE_INDEX_MAX 0x3ffff 102d5c65159SKalle Valo #define DP_RX_DESC_COOKIE_POOL_ID_MAX 0x1c0000 103d5c65159SKalle Valo #define DP_RX_DESC_COOKIE_MAX \ 104d5c65159SKalle Valo (DP_RX_DESC_COOKIE_INDEX_MAX | DP_RX_DESC_COOKIE_POOL_ID_MAX) 105d5c65159SKalle Valo #define DP_NOT_PPDU_ID_WRAP_AROUND 20000 106d5c65159SKalle Valo 107d5c65159SKalle Valo enum ath11k_dp_ppdu_state { 108d5c65159SKalle Valo DP_PPDU_STATUS_START, 109d5c65159SKalle Valo DP_PPDU_STATUS_DONE, 110d5c65159SKalle Valo }; 111d5c65159SKalle Valo 112d5c65159SKalle Valo struct ath11k_mon_data { 113d5c65159SKalle Valo struct dp_link_desc_bank link_desc_banks[DP_LINK_DESC_BANKS_MAX]; 114d5c65159SKalle Valo struct hal_rx_mon_ppdu_info mon_ppdu_info; 115d5c65159SKalle Valo 116d5c65159SKalle Valo u32 mon_ppdu_status; 117d5c65159SKalle Valo u32 mon_last_buf_cookie; 118d5c65159SKalle Valo u64 mon_last_linkdesc_paddr; 119d5c65159SKalle Valo u16 chan_noise_floor; 120d5c65159SKalle Valo 121d5c65159SKalle Valo struct ath11k_pdev_mon_stats rx_mon_stats; 122d5c65159SKalle Valo /* lock for monitor data */ 123d5c65159SKalle Valo spinlock_t mon_lock; 124d5c65159SKalle Valo struct sk_buff_head rx_status_q; 125d5c65159SKalle Valo }; 126d5c65159SKalle Valo 127d5c65159SKalle Valo struct ath11k_pdev_dp { 128d5c65159SKalle Valo u32 mac_id; 129d5c65159SKalle Valo atomic_t num_tx_pending; 130d5c65159SKalle Valo wait_queue_head_t tx_empty_waitq; 131d5c65159SKalle Valo struct dp_srng reo_dst_ring; 132d5c65159SKalle Valo struct dp_rxdma_ring rx_refill_buf_ring; 133d5c65159SKalle Valo struct dp_srng rxdma_err_dst_ring; 134d5c65159SKalle Valo struct dp_srng rxdma_mon_dst_ring; 135d5c65159SKalle Valo struct dp_srng rxdma_mon_desc_ring; 136d5c65159SKalle Valo 137d5c65159SKalle Valo struct dp_rxdma_ring rxdma_mon_buf_ring; 138d5c65159SKalle Valo struct dp_rxdma_ring rx_mon_status_refill_ring; 139d5c65159SKalle Valo struct ieee80211_rx_status rx_status; 140d5c65159SKalle Valo struct ath11k_mon_data mon_data; 141d5c65159SKalle Valo }; 142d5c65159SKalle Valo 143d5c65159SKalle Valo #define DP_NUM_CLIENTS_MAX 64 144d5c65159SKalle Valo #define DP_AVG_TIDS_PER_CLIENT 2 145d5c65159SKalle Valo #define DP_NUM_TIDS_MAX (DP_NUM_CLIENTS_MAX * DP_AVG_TIDS_PER_CLIENT) 146d5c65159SKalle Valo #define DP_AVG_MSDUS_PER_FLOW 128 147d5c65159SKalle Valo #define DP_AVG_FLOWS_PER_TID 2 148d5c65159SKalle Valo #define DP_AVG_MPDUS_PER_TID_MAX 128 149d5c65159SKalle Valo #define DP_AVG_MSDUS_PER_MPDU 4 150d5c65159SKalle Valo 151d5c65159SKalle Valo #define DP_RX_HASH_ENABLE 0 /* Disable hash based Rx steering */ 152d5c65159SKalle Valo 153d5c65159SKalle Valo #define DP_BA_WIN_SZ_MAX 256 154d5c65159SKalle Valo 155d5c65159SKalle Valo #define DP_TCL_NUM_RING_MAX 3 156d5c65159SKalle Valo 157d5c65159SKalle Valo #define DP_IDLE_SCATTER_BUFS_MAX 16 158d5c65159SKalle Valo 159d5c65159SKalle Valo #define DP_WBM_RELEASE_RING_SIZE 64 160d5c65159SKalle Valo #define DP_TCL_DATA_RING_SIZE 512 161d5c65159SKalle Valo #define DP_TX_COMP_RING_SIZE 8192 162d5c65159SKalle Valo #define DP_TX_IDR_SIZE (DP_TX_COMP_RING_SIZE << 1) 163d5c65159SKalle Valo #define DP_TCL_CMD_RING_SIZE 32 164d5c65159SKalle Valo #define DP_TCL_STATUS_RING_SIZE 32 165d5c65159SKalle Valo #define DP_REO_DST_RING_MAX 4 166d5c65159SKalle Valo #define DP_REO_DST_RING_SIZE 2048 167d5c65159SKalle Valo #define DP_REO_REINJECT_RING_SIZE 32 168d5c65159SKalle Valo #define DP_RX_RELEASE_RING_SIZE 1024 169d5c65159SKalle Valo #define DP_REO_EXCEPTION_RING_SIZE 128 170d5c65159SKalle Valo #define DP_REO_CMD_RING_SIZE 128 171d5c65159SKalle Valo #define DP_REO_STATUS_RING_SIZE 256 172d5c65159SKalle Valo #define DP_RXDMA_BUF_RING_SIZE 4096 173d5c65159SKalle Valo #define DP_RXDMA_REFILL_RING_SIZE 2048 174d5c65159SKalle Valo #define DP_RXDMA_ERR_DST_RING_SIZE 1024 175d5c65159SKalle Valo #define DP_RXDMA_MON_STATUS_RING_SIZE 1024 176d5c65159SKalle Valo #define DP_RXDMA_MONITOR_BUF_RING_SIZE 4096 177d5c65159SKalle Valo #define DP_RXDMA_MONITOR_DST_RING_SIZE 2048 178d5c65159SKalle Valo #define DP_RXDMA_MONITOR_DESC_RING_SIZE 4096 179d5c65159SKalle Valo 180d5c65159SKalle Valo #define DP_RX_BUFFER_SIZE 2048 181d5c65159SKalle Valo #define DP_RX_BUFFER_ALIGN_SIZE 128 182d5c65159SKalle Valo 183d5c65159SKalle Valo #define DP_RXDMA_BUF_COOKIE_BUF_ID GENMASK(17, 0) 184d5c65159SKalle Valo #define DP_RXDMA_BUF_COOKIE_PDEV_ID GENMASK(20, 18) 185d5c65159SKalle Valo 186d5c65159SKalle Valo #define DP_HW2SW_MACID(mac_id) ((mac_id) ? ((mac_id) - 1) : 0) 187d5c65159SKalle Valo #define DP_SW2HW_MACID(mac_id) ((mac_id) + 1) 188d5c65159SKalle Valo 189d5c65159SKalle Valo #define DP_TX_DESC_ID_MAC_ID GENMASK(1, 0) 190d5c65159SKalle Valo #define DP_TX_DESC_ID_MSDU_ID GENMASK(18, 2) 191d5c65159SKalle Valo #define DP_TX_DESC_ID_POOL_ID GENMASK(20, 19) 192d5c65159SKalle Valo 193d5c65159SKalle Valo struct ath11k_dp { 194d5c65159SKalle Valo struct ath11k_base *ab; 195d5c65159SKalle Valo enum ath11k_htc_ep_id eid; 196d5c65159SKalle Valo struct completion htt_tgt_version_received; 197d5c65159SKalle Valo u8 htt_tgt_ver_major; 198d5c65159SKalle Valo u8 htt_tgt_ver_minor; 199d5c65159SKalle Valo struct dp_link_desc_bank link_desc_banks[DP_LINK_DESC_BANKS_MAX]; 200d5c65159SKalle Valo struct dp_srng wbm_idle_ring; 201d5c65159SKalle Valo struct dp_srng wbm_desc_rel_ring; 202d5c65159SKalle Valo struct dp_srng tcl_cmd_ring; 203d5c65159SKalle Valo struct dp_srng tcl_status_ring; 204d5c65159SKalle Valo struct dp_srng reo_reinject_ring; 205d5c65159SKalle Valo struct dp_srng rx_rel_ring; 206d5c65159SKalle Valo struct dp_srng reo_except_ring; 207d5c65159SKalle Valo struct dp_srng reo_cmd_ring; 208d5c65159SKalle Valo struct dp_srng reo_status_ring; 209d5c65159SKalle Valo struct dp_tx_ring tx_ring[DP_TCL_NUM_RING_MAX]; 210d5c65159SKalle Valo struct hal_wbm_idle_scatter_list scatter_list[DP_IDLE_SCATTER_BUFS_MAX]; 211d5c65159SKalle Valo struct list_head reo_cmd_list; 212d5c65159SKalle Valo struct list_head reo_cmd_cache_flush_list; 213d5c65159SKalle Valo /* protects access to reo_cmd_list and reo_cmd_cache_flush_list */ 214d5c65159SKalle Valo spinlock_t reo_cmd_lock; 215d5c65159SKalle Valo }; 216d5c65159SKalle Valo 217d5c65159SKalle Valo /* HTT definitions */ 218d5c65159SKalle Valo 219d5c65159SKalle Valo #define HTT_TCL_META_DATA_TYPE BIT(0) 220d5c65159SKalle Valo #define HTT_TCL_META_DATA_VALID_HTT BIT(1) 221d5c65159SKalle Valo 222d5c65159SKalle Valo /* vdev meta data */ 223d5c65159SKalle Valo #define HTT_TCL_META_DATA_VDEV_ID GENMASK(9, 2) 224d5c65159SKalle Valo #define HTT_TCL_META_DATA_PDEV_ID GENMASK(11, 10) 225d5c65159SKalle Valo #define HTT_TCL_META_DATA_HOST_INSPECTED BIT(12) 226d5c65159SKalle Valo 227d5c65159SKalle Valo /* peer meta data */ 228d5c65159SKalle Valo #define HTT_TCL_META_DATA_PEER_ID GENMASK(15, 2) 229d5c65159SKalle Valo 230d5c65159SKalle Valo #define HTT_TX_WBM_COMP_STATUS_OFFSET 8 231d5c65159SKalle Valo 232d5c65159SKalle Valo /* HTT tx completion is overlayed in wbm_release_ring */ 233d5c65159SKalle Valo #define HTT_TX_WBM_COMP_INFO0_STATUS GENMASK(12, 9) 234d5c65159SKalle Valo #define HTT_TX_WBM_COMP_INFO0_REINJECT_REASON GENMASK(16, 13) 235d5c65159SKalle Valo #define HTT_TX_WBM_COMP_INFO0_REINJECT_REASON GENMASK(16, 13) 236d5c65159SKalle Valo 237d5c65159SKalle Valo #define HTT_TX_WBM_COMP_INFO1_ACK_RSSI GENMASK(31, 24) 238d5c65159SKalle Valo 239d5c65159SKalle Valo struct htt_tx_wbm_completion { 240d5c65159SKalle Valo u32 info0; 241d5c65159SKalle Valo u32 info1; 242d5c65159SKalle Valo u32 info2; 243d5c65159SKalle Valo u32 info3; 244d5c65159SKalle Valo } __packed; 245d5c65159SKalle Valo 246d5c65159SKalle Valo enum htt_h2t_msg_type { 247d5c65159SKalle Valo HTT_H2T_MSG_TYPE_VERSION_REQ = 0, 248d5c65159SKalle Valo HTT_H2T_MSG_TYPE_SRING_SETUP = 0xb, 249d5c65159SKalle Valo HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG = 0xc, 250d5c65159SKalle Valo HTT_H2T_MSG_TYPE_EXT_STATS_CFG = 0x10, 251d5c65159SKalle Valo HTT_H2T_MSG_TYPE_PPDU_STATS_CFG = 0x11, 252d5c65159SKalle Valo }; 253d5c65159SKalle Valo 254d5c65159SKalle Valo #define HTT_VER_REQ_INFO_MSG_ID GENMASK(7, 0) 255d5c65159SKalle Valo 256d5c65159SKalle Valo struct htt_ver_req_cmd { 257d5c65159SKalle Valo u32 ver_reg_info; 258d5c65159SKalle Valo } __packed; 259d5c65159SKalle Valo 260d5c65159SKalle Valo enum htt_srng_ring_type { 261d5c65159SKalle Valo HTT_HW_TO_SW_RING, 262d5c65159SKalle Valo HTT_SW_TO_HW_RING, 263d5c65159SKalle Valo HTT_SW_TO_SW_RING, 264d5c65159SKalle Valo }; 265d5c65159SKalle Valo 266d5c65159SKalle Valo enum htt_srng_ring_id { 267d5c65159SKalle Valo HTT_RXDMA_HOST_BUF_RING, 268d5c65159SKalle Valo HTT_RXDMA_MONITOR_STATUS_RING, 269d5c65159SKalle Valo HTT_RXDMA_MONITOR_BUF_RING, 270d5c65159SKalle Valo HTT_RXDMA_MONITOR_DESC_RING, 271d5c65159SKalle Valo HTT_RXDMA_MONITOR_DEST_RING, 272d5c65159SKalle Valo HTT_HOST1_TO_FW_RXBUF_RING, 273d5c65159SKalle Valo HTT_HOST2_TO_FW_RXBUF_RING, 274d5c65159SKalle Valo HTT_RXDMA_NON_MONITOR_DEST_RING, 275d5c65159SKalle Valo }; 276d5c65159SKalle Valo 277d5c65159SKalle Valo /* host -> target HTT_SRING_SETUP message 278d5c65159SKalle Valo * 279d5c65159SKalle Valo * After target is booted up, Host can send SRING setup message for 280d5c65159SKalle Valo * each host facing LMAC SRING. Target setups up HW registers based 281d5c65159SKalle Valo * on setup message and confirms back to Host if response_required is set. 282d5c65159SKalle Valo * Host should wait for confirmation message before sending new SRING 283d5c65159SKalle Valo * setup message 284d5c65159SKalle Valo * 285d5c65159SKalle Valo * The message would appear as follows: 286d5c65159SKalle Valo * 287d5c65159SKalle Valo * |31 24|23 20|19|18 16|15|14 8|7 0| 288d5c65159SKalle Valo * |--------------- +-----------------+----------------+------------------| 289d5c65159SKalle Valo * | ring_type | ring_id | pdev_id | msg_type | 290d5c65159SKalle Valo * |----------------------------------------------------------------------| 291d5c65159SKalle Valo * | ring_base_addr_lo | 292d5c65159SKalle Valo * |----------------------------------------------------------------------| 293d5c65159SKalle Valo * | ring_base_addr_hi | 294d5c65159SKalle Valo * |----------------------------------------------------------------------| 295d5c65159SKalle Valo * |ring_misc_cfg_flag|ring_entry_size| ring_size | 296d5c65159SKalle Valo * |----------------------------------------------------------------------| 297d5c65159SKalle Valo * | ring_head_offset32_remote_addr_lo | 298d5c65159SKalle Valo * |----------------------------------------------------------------------| 299d5c65159SKalle Valo * | ring_head_offset32_remote_addr_hi | 300d5c65159SKalle Valo * |----------------------------------------------------------------------| 301d5c65159SKalle Valo * | ring_tail_offset32_remote_addr_lo | 302d5c65159SKalle Valo * |----------------------------------------------------------------------| 303d5c65159SKalle Valo * | ring_tail_offset32_remote_addr_hi | 304d5c65159SKalle Valo * |----------------------------------------------------------------------| 305d5c65159SKalle Valo * | ring_msi_addr_lo | 306d5c65159SKalle Valo * |----------------------------------------------------------------------| 307d5c65159SKalle Valo * | ring_msi_addr_hi | 308d5c65159SKalle Valo * |----------------------------------------------------------------------| 309d5c65159SKalle Valo * | ring_msi_data | 310d5c65159SKalle Valo * |----------------------------------------------------------------------| 311d5c65159SKalle Valo * | intr_timer_th |IM| intr_batch_counter_th | 312d5c65159SKalle Valo * |----------------------------------------------------------------------| 313d5c65159SKalle Valo * | reserved |RR|PTCF| intr_low_threshold | 314d5c65159SKalle Valo * |----------------------------------------------------------------------| 315d5c65159SKalle Valo * Where 316d5c65159SKalle Valo * IM = sw_intr_mode 317d5c65159SKalle Valo * RR = response_required 318d5c65159SKalle Valo * PTCF = prefetch_timer_cfg 319d5c65159SKalle Valo * 320d5c65159SKalle Valo * The message is interpreted as follows: 321d5c65159SKalle Valo * dword0 - b'0:7 - msg_type: This will be set to 322d5c65159SKalle Valo * HTT_H2T_MSG_TYPE_SRING_SETUP 323d5c65159SKalle Valo * b'8:15 - pdev_id: 324d5c65159SKalle Valo * 0 (for rings at SOC/UMAC level), 325d5c65159SKalle Valo * 1/2/3 mac id (for rings at LMAC level) 326d5c65159SKalle Valo * b'16:23 - ring_id: identify which ring is to setup, 327d5c65159SKalle Valo * more details can be got from enum htt_srng_ring_id 328d5c65159SKalle Valo * b'24:31 - ring_type: identify type of host rings, 329d5c65159SKalle Valo * more details can be got from enum htt_srng_ring_type 330d5c65159SKalle Valo * dword1 - b'0:31 - ring_base_addr_lo: Lower 32bits of ring base address 331d5c65159SKalle Valo * dword2 - b'0:31 - ring_base_addr_hi: Upper 32bits of ring base address 332d5c65159SKalle Valo * dword3 - b'0:15 - ring_size: size of the ring in unit of 4-bytes words 333d5c65159SKalle Valo * b'16:23 - ring_entry_size: Size of each entry in 4-byte word units 334d5c65159SKalle Valo * b'24:31 - ring_misc_cfg_flag: Valid only for HW_TO_SW_RING and 335d5c65159SKalle Valo * SW_TO_HW_RING. 336d5c65159SKalle Valo * Refer to HTT_SRING_SETUP_RING_MISC_CFG_RING defs. 337d5c65159SKalle Valo * dword4 - b'0:31 - ring_head_off32_remote_addr_lo: 338d5c65159SKalle Valo * Lower 32 bits of memory address of the remote variable 339d5c65159SKalle Valo * storing the 4-byte word offset that identifies the head 340d5c65159SKalle Valo * element within the ring. 341d5c65159SKalle Valo * (The head offset variable has type u32.) 342d5c65159SKalle Valo * Valid for HW_TO_SW and SW_TO_SW rings. 343d5c65159SKalle Valo * dword5 - b'0:31 - ring_head_off32_remote_addr_hi: 344d5c65159SKalle Valo * Upper 32 bits of memory address of the remote variable 345d5c65159SKalle Valo * storing the 4-byte word offset that identifies the head 346d5c65159SKalle Valo * element within the ring. 347d5c65159SKalle Valo * (The head offset variable has type u32.) 348d5c65159SKalle Valo * Valid for HW_TO_SW and SW_TO_SW rings. 349d5c65159SKalle Valo * dword6 - b'0:31 - ring_tail_off32_remote_addr_lo: 350d5c65159SKalle Valo * Lower 32 bits of memory address of the remote variable 351d5c65159SKalle Valo * storing the 4-byte word offset that identifies the tail 352d5c65159SKalle Valo * element within the ring. 353d5c65159SKalle Valo * (The tail offset variable has type u32.) 354d5c65159SKalle Valo * Valid for HW_TO_SW and SW_TO_SW rings. 355d5c65159SKalle Valo * dword7 - b'0:31 - ring_tail_off32_remote_addr_hi: 356d5c65159SKalle Valo * Upper 32 bits of memory address of the remote variable 357d5c65159SKalle Valo * storing the 4-byte word offset that identifies the tail 358d5c65159SKalle Valo * element within the ring. 359d5c65159SKalle Valo * (The tail offset variable has type u32.) 360d5c65159SKalle Valo * Valid for HW_TO_SW and SW_TO_SW rings. 361d5c65159SKalle Valo * dword8 - b'0:31 - ring_msi_addr_lo: Lower 32bits of MSI cfg address 362d5c65159SKalle Valo * valid only for HW_TO_SW_RING and SW_TO_HW_RING 363d5c65159SKalle Valo * dword9 - b'0:31 - ring_msi_addr_hi: Upper 32bits of MSI cfg address 364d5c65159SKalle Valo * valid only for HW_TO_SW_RING and SW_TO_HW_RING 365d5c65159SKalle Valo * dword10 - b'0:31 - ring_msi_data: MSI data 366d5c65159SKalle Valo * Refer to HTT_SRING_SETUP_RING_MSC_CFG_xxx defs 367d5c65159SKalle Valo * valid only for HW_TO_SW_RING and SW_TO_HW_RING 368d5c65159SKalle Valo * dword11 - b'0:14 - intr_batch_counter_th: 369d5c65159SKalle Valo * batch counter threshold is in units of 4-byte words. 370d5c65159SKalle Valo * HW internally maintains and increments batch count. 371d5c65159SKalle Valo * (see SRING spec for detail description). 372d5c65159SKalle Valo * When batch count reaches threshold value, an interrupt 373d5c65159SKalle Valo * is generated by HW. 374d5c65159SKalle Valo * b'15 - sw_intr_mode: 375d5c65159SKalle Valo * This configuration shall be static. 376d5c65159SKalle Valo * Only programmed at power up. 377d5c65159SKalle Valo * 0: generate pulse style sw interrupts 378d5c65159SKalle Valo * 1: generate level style sw interrupts 379d5c65159SKalle Valo * b'16:31 - intr_timer_th: 380d5c65159SKalle Valo * The timer init value when timer is idle or is 381d5c65159SKalle Valo * initialized to start downcounting. 382d5c65159SKalle Valo * In 8us units (to cover a range of 0 to 524 ms) 383d5c65159SKalle Valo * dword12 - b'0:15 - intr_low_threshold: 384d5c65159SKalle Valo * Used only by Consumer ring to generate ring_sw_int_p. 385d5c65159SKalle Valo * Ring entries low threshold water mark, that is used 386d5c65159SKalle Valo * in combination with the interrupt timer as well as 387d5c65159SKalle Valo * the the clearing of the level interrupt. 388d5c65159SKalle Valo * b'16:18 - prefetch_timer_cfg: 389d5c65159SKalle Valo * Used only by Consumer ring to set timer mode to 390d5c65159SKalle Valo * support Application prefetch handling. 391d5c65159SKalle Valo * The external tail offset/pointer will be updated 392d5c65159SKalle Valo * at following intervals: 393d5c65159SKalle Valo * 3'b000: (Prefetch feature disabled; used only for debug) 394d5c65159SKalle Valo * 3'b001: 1 usec 395d5c65159SKalle Valo * 3'b010: 4 usec 396d5c65159SKalle Valo * 3'b011: 8 usec (default) 397d5c65159SKalle Valo * 3'b100: 16 usec 398d5c65159SKalle Valo * Others: Reserverd 399d5c65159SKalle Valo * b'19 - response_required: 400d5c65159SKalle Valo * Host needs HTT_T2H_MSG_TYPE_SRING_SETUP_DONE as response 401d5c65159SKalle Valo * b'20:31 - reserved: reserved for future use 402d5c65159SKalle Valo */ 403d5c65159SKalle Valo 404d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INFO0_MSG_TYPE GENMASK(7, 0) 405d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INFO0_PDEV_ID GENMASK(15, 8) 406d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INFO0_RING_ID GENMASK(23, 16) 407d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INFO0_RING_TYPE GENMASK(31, 24) 408d5c65159SKalle Valo 409d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INFO1_RING_SIZE GENMASK(15, 0) 410d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INFO1_RING_ENTRY_SIZE GENMASK(23, 16) 411d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INFO1_RING_LOOP_CNT_DIS BIT(25) 412d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INFO1_RING_FLAGS_MSI_SWAP BIT(27) 413d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INFO1_RING_FLAGS_HOST_FW_SWAP BIT(28) 414d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INFO1_RING_FLAGS_TLV_SWAP BIT(29) 415d5c65159SKalle Valo 416d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INTR_INFO_BATCH_COUNTER_THRESH GENMASK(14, 0) 417d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INTR_INFO_SW_INTR_MODE BIT(15) 418d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INTR_INFO_INTR_TIMER_THRESH GENMASK(31, 16) 419d5c65159SKalle Valo 420d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INFO2_INTR_LOW_THRESH GENMASK(15, 0) 421d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INFO2_PRE_FETCH_TIMER_CFG BIT(16) 422d5c65159SKalle Valo #define HTT_SRNG_SETUP_CMD_INFO2_RESPONSE_REQUIRED BIT(19) 423d5c65159SKalle Valo 424d5c65159SKalle Valo struct htt_srng_setup_cmd { 425d5c65159SKalle Valo u32 info0; 426d5c65159SKalle Valo u32 ring_base_addr_lo; 427d5c65159SKalle Valo u32 ring_base_addr_hi; 428d5c65159SKalle Valo u32 info1; 429d5c65159SKalle Valo u32 ring_head_off32_remote_addr_lo; 430d5c65159SKalle Valo u32 ring_head_off32_remote_addr_hi; 431d5c65159SKalle Valo u32 ring_tail_off32_remote_addr_lo; 432d5c65159SKalle Valo u32 ring_tail_off32_remote_addr_hi; 433d5c65159SKalle Valo u32 ring_msi_addr_lo; 434d5c65159SKalle Valo u32 ring_msi_addr_hi; 435d5c65159SKalle Valo u32 msi_data; 436d5c65159SKalle Valo u32 intr_info; 437d5c65159SKalle Valo u32 info2; 438d5c65159SKalle Valo } __packed; 439d5c65159SKalle Valo 440d5c65159SKalle Valo /* host -> target FW PPDU_STATS config message 441d5c65159SKalle Valo * 442d5c65159SKalle Valo * @details 443d5c65159SKalle Valo * The following field definitions describe the format of the HTT host 444d5c65159SKalle Valo * to target FW for PPDU_STATS_CFG msg. 445d5c65159SKalle Valo * The message allows the host to configure the PPDU_STATS_IND messages 446d5c65159SKalle Valo * produced by the target. 447d5c65159SKalle Valo * 448d5c65159SKalle Valo * |31 24|23 16|15 8|7 0| 449d5c65159SKalle Valo * |-----------------------------------------------------------| 450d5c65159SKalle Valo * | REQ bit mask | pdev_mask | msg type | 451d5c65159SKalle Valo * |-----------------------------------------------------------| 452d5c65159SKalle Valo * Header fields: 453d5c65159SKalle Valo * - MSG_TYPE 454d5c65159SKalle Valo * Bits 7:0 455d5c65159SKalle Valo * Purpose: identifies this is a req to configure ppdu_stats_ind from target 456d5c65159SKalle Valo * Value: 0x11 457d5c65159SKalle Valo * - PDEV_MASK 458d5c65159SKalle Valo * Bits 8:15 459d5c65159SKalle Valo * Purpose: identifies which pdevs this PPDU stats configuration applies to 460d5c65159SKalle Valo * Value: This is a overloaded field, refer to usage and interpretation of 461d5c65159SKalle Valo * PDEV in interface document. 462d5c65159SKalle Valo * Bit 8 : Reserved for SOC stats 463d5c65159SKalle Valo * Bit 9 - 15 : Indicates PDEV_MASK in DBDC 464d5c65159SKalle Valo * Indicates MACID_MASK in DBS 465d5c65159SKalle Valo * - REQ_TLV_BIT_MASK 466d5c65159SKalle Valo * Bits 16:31 467d5c65159SKalle Valo * Purpose: each set bit indicates the corresponding PPDU stats TLV type 468d5c65159SKalle Valo * needs to be included in the target's PPDU_STATS_IND messages. 469d5c65159SKalle Valo * Value: refer htt_ppdu_stats_tlv_tag_t <<<??? 470d5c65159SKalle Valo * 471d5c65159SKalle Valo */ 472d5c65159SKalle Valo 473d5c65159SKalle Valo struct htt_ppdu_stats_cfg_cmd { 474d5c65159SKalle Valo u32 msg; 475d5c65159SKalle Valo } __packed; 476d5c65159SKalle Valo 477d5c65159SKalle Valo #define HTT_PPDU_STATS_CFG_MSG_TYPE GENMASK(7, 0) 478d5c65159SKalle Valo #define HTT_PPDU_STATS_CFG_PDEV_ID GENMASK(16, 9) 479d5c65159SKalle Valo #define HTT_PPDU_STATS_CFG_TLV_TYPE_BITMASK GENMASK(31, 16) 480d5c65159SKalle Valo 481d5c65159SKalle Valo enum htt_ppdu_stats_tag_type { 482d5c65159SKalle Valo HTT_PPDU_STATS_TAG_COMMON, 483d5c65159SKalle Valo HTT_PPDU_STATS_TAG_USR_COMMON, 484d5c65159SKalle Valo HTT_PPDU_STATS_TAG_USR_RATE, 485d5c65159SKalle Valo HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_64, 486d5c65159SKalle Valo HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_256, 487d5c65159SKalle Valo HTT_PPDU_STATS_TAG_SCH_CMD_STATUS, 488d5c65159SKalle Valo HTT_PPDU_STATS_TAG_USR_COMPLTN_COMMON, 489d5c65159SKalle Valo HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_64, 490d5c65159SKalle Valo HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_256, 491d5c65159SKalle Valo HTT_PPDU_STATS_TAG_USR_COMPLTN_ACK_BA_STATUS, 492d5c65159SKalle Valo HTT_PPDU_STATS_TAG_USR_COMPLTN_FLUSH, 493d5c65159SKalle Valo HTT_PPDU_STATS_TAG_USR_COMMON_ARRAY, 494d5c65159SKalle Valo HTT_PPDU_STATS_TAG_INFO, 495d5c65159SKalle Valo HTT_PPDU_STATS_TAG_TX_MGMTCTRL_PAYLOAD, 496d5c65159SKalle Valo 497d5c65159SKalle Valo /* New TLV's are added above to this line */ 498d5c65159SKalle Valo HTT_PPDU_STATS_TAG_MAX, 499d5c65159SKalle Valo }; 500d5c65159SKalle Valo 501d5c65159SKalle Valo #define HTT_PPDU_STATS_TAG_DEFAULT (BIT(HTT_PPDU_STATS_TAG_COMMON) \ 502d5c65159SKalle Valo | BIT(HTT_PPDU_STATS_TAG_USR_COMMON) \ 503d5c65159SKalle Valo | BIT(HTT_PPDU_STATS_TAG_USR_RATE) \ 504d5c65159SKalle Valo | BIT(HTT_PPDU_STATS_TAG_SCH_CMD_STATUS) \ 505d5c65159SKalle Valo | BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_COMMON) \ 506d5c65159SKalle Valo | BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_ACK_BA_STATUS) \ 507d5c65159SKalle Valo | BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_FLUSH) \ 508d5c65159SKalle Valo | BIT(HTT_PPDU_STATS_TAG_USR_COMMON_ARRAY)) 509d5c65159SKalle Valo 510*1e93a781SAnilkumar Kolli #define HTT_PPDU_STATS_TAG_PKTLOG (BIT(HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_64) | \ 511*1e93a781SAnilkumar Kolli BIT(HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_256) | \ 512*1e93a781SAnilkumar Kolli BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_64) | \ 513*1e93a781SAnilkumar Kolli BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_256) | \ 514*1e93a781SAnilkumar Kolli BIT(HTT_PPDU_STATS_TAG_INFO) | \ 515*1e93a781SAnilkumar Kolli BIT(HTT_PPDU_STATS_TAG_TX_MGMTCTRL_PAYLOAD) | \ 516*1e93a781SAnilkumar Kolli HTT_PPDU_STATS_TAG_DEFAULT) 517*1e93a781SAnilkumar Kolli 518d5c65159SKalle Valo /* HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG Message 519d5c65159SKalle Valo * 520d5c65159SKalle Valo * details: 521d5c65159SKalle Valo * HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG message is sent by host to 522d5c65159SKalle Valo * configure RXDMA rings. 523d5c65159SKalle Valo * The configuration is per ring based and includes both packet subtypes 524d5c65159SKalle Valo * and PPDU/MPDU TLVs. 525d5c65159SKalle Valo * 526d5c65159SKalle Valo * The message would appear as follows: 527d5c65159SKalle Valo * 528d5c65159SKalle Valo * |31 26|25|24|23 16|15 8|7 0| 529d5c65159SKalle Valo * |-----------------+----------------+----------------+---------------| 530d5c65159SKalle Valo * | rsvd1 |PS|SS| ring_id | pdev_id | msg_type | 531d5c65159SKalle Valo * |-------------------------------------------------------------------| 532d5c65159SKalle Valo * | rsvd2 | ring_buffer_size | 533d5c65159SKalle Valo * |-------------------------------------------------------------------| 534d5c65159SKalle Valo * | packet_type_enable_flags_0 | 535d5c65159SKalle Valo * |-------------------------------------------------------------------| 536d5c65159SKalle Valo * | packet_type_enable_flags_1 | 537d5c65159SKalle Valo * |-------------------------------------------------------------------| 538d5c65159SKalle Valo * | packet_type_enable_flags_2 | 539d5c65159SKalle Valo * |-------------------------------------------------------------------| 540d5c65159SKalle Valo * | packet_type_enable_flags_3 | 541d5c65159SKalle Valo * |-------------------------------------------------------------------| 542d5c65159SKalle Valo * | tlv_filter_in_flags | 543d5c65159SKalle Valo * |-------------------------------------------------------------------| 544d5c65159SKalle Valo * Where: 545d5c65159SKalle Valo * PS = pkt_swap 546d5c65159SKalle Valo * SS = status_swap 547d5c65159SKalle Valo * The message is interpreted as follows: 548d5c65159SKalle Valo * dword0 - b'0:7 - msg_type: This will be set to 549d5c65159SKalle Valo * HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG 550d5c65159SKalle Valo * b'8:15 - pdev_id: 551d5c65159SKalle Valo * 0 (for rings at SOC/UMAC level), 552d5c65159SKalle Valo * 1/2/3 mac id (for rings at LMAC level) 553d5c65159SKalle Valo * b'16:23 - ring_id : Identify the ring to configure. 554d5c65159SKalle Valo * More details can be got from enum htt_srng_ring_id 555d5c65159SKalle Valo * b'24 - status_swap: 1 is to swap status TLV 556d5c65159SKalle Valo * b'25 - pkt_swap: 1 is to swap packet TLV 557d5c65159SKalle Valo * b'26:31 - rsvd1: reserved for future use 558d5c65159SKalle Valo * dword1 - b'0:16 - ring_buffer_size: size of bufferes referenced by rx ring, 559d5c65159SKalle Valo * in byte units. 560d5c65159SKalle Valo * Valid only for HW_TO_SW_RING and SW_TO_HW_RING 561d5c65159SKalle Valo * - b'16:31 - rsvd2: Reserved for future use 562d5c65159SKalle Valo * dword2 - b'0:31 - packet_type_enable_flags_0: 563d5c65159SKalle Valo * Enable MGMT packet from 0b0000 to 0b1001 564d5c65159SKalle Valo * bits from low to high: FP, MD, MO - 3 bits 565d5c65159SKalle Valo * FP: Filter_Pass 566d5c65159SKalle Valo * MD: Monitor_Direct 567d5c65159SKalle Valo * MO: Monitor_Other 568d5c65159SKalle Valo * 10 mgmt subtypes * 3 bits -> 30 bits 569d5c65159SKalle Valo * Refer to PKT_TYPE_ENABLE_FLAG0_xxx_MGMT_xxx defs 570d5c65159SKalle Valo * dword3 - b'0:31 - packet_type_enable_flags_1: 571d5c65159SKalle Valo * Enable MGMT packet from 0b1010 to 0b1111 572d5c65159SKalle Valo * bits from low to high: FP, MD, MO - 3 bits 573d5c65159SKalle Valo * Refer to PKT_TYPE_ENABLE_FLAG1_xxx_MGMT_xxx defs 574d5c65159SKalle Valo * dword4 - b'0:31 - packet_type_enable_flags_2: 575d5c65159SKalle Valo * Enable CTRL packet from 0b0000 to 0b1001 576d5c65159SKalle Valo * bits from low to high: FP, MD, MO - 3 bits 577d5c65159SKalle Valo * Refer to PKT_TYPE_ENABLE_FLAG2_xxx_CTRL_xxx defs 578d5c65159SKalle Valo * dword5 - b'0:31 - packet_type_enable_flags_3: 579d5c65159SKalle Valo * Enable CTRL packet from 0b1010 to 0b1111, 580d5c65159SKalle Valo * MCAST_DATA, UCAST_DATA, NULL_DATA 581d5c65159SKalle Valo * bits from low to high: FP, MD, MO - 3 bits 582d5c65159SKalle Valo * Refer to PKT_TYPE_ENABLE_FLAG3_xxx_CTRL_xxx defs 583d5c65159SKalle Valo * dword6 - b'0:31 - tlv_filter_in_flags: 584d5c65159SKalle Valo * Filter in Attention/MPDU/PPDU/Header/User tlvs 585d5c65159SKalle Valo * Refer to CFG_TLV_FILTER_IN_FLAG defs 586d5c65159SKalle Valo */ 587d5c65159SKalle Valo 588d5c65159SKalle Valo #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_MSG_TYPE GENMASK(7, 0) 589d5c65159SKalle Valo #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_PDEV_ID GENMASK(15, 8) 590d5c65159SKalle Valo #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_RING_ID GENMASK(23, 16) 591d5c65159SKalle Valo #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_SS BIT(24) 592d5c65159SKalle Valo #define HTT_RX_RING_SELECTION_CFG_CMD_INFO0_PS BIT(25) 593d5c65159SKalle Valo 594d5c65159SKalle Valo #define HTT_RX_RING_SELECTION_CFG_CMD_INFO1_BUF_SIZE GENMASK(15, 0) 595d5c65159SKalle Valo 596d5c65159SKalle Valo enum htt_rx_filter_tlv_flags { 597d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_MPDU_START = BIT(0), 598d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_MSDU_START = BIT(1), 599d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_RX_PACKET = BIT(2), 600d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_MSDU_END = BIT(3), 601d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_MPDU_END = BIT(4), 602d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PACKET_HEADER = BIT(5), 603d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PER_MSDU_HEADER = BIT(6), 604d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_ATTENTION = BIT(7), 605d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PPDU_START = BIT(8), 606d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PPDU_END = BIT(9), 607d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS = BIT(10), 608d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS_EXT = BIT(11), 609d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PPDU_END_STATUS_DONE = BIT(12), 610d5c65159SKalle Valo }; 611d5c65159SKalle Valo 612d5c65159SKalle Valo enum htt_rx_mgmt_pkt_filter_tlv_flags0 { 613d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ = BIT(0), 614d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ = BIT(1), 615d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ = BIT(2), 616d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP = BIT(3), 617d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP = BIT(4), 618d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP = BIT(5), 619d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ = BIT(6), 620d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ = BIT(7), 621d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ = BIT(8), 622d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP = BIT(9), 623d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP = BIT(10), 624d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP = BIT(11), 625d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ = BIT(12), 626d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ = BIT(13), 627d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ = BIT(14), 628d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP = BIT(15), 629d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP = BIT(16), 630d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP = BIT(17), 631d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV = BIT(18), 632d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV = BIT(19), 633d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV = BIT(20), 634d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7 = BIT(21), 635d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7 = BIT(22), 636d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7 = BIT(23), 637d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON = BIT(24), 638d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON = BIT(25), 639d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON = BIT(26), 640d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM = BIT(27), 641d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM = BIT(28), 642d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM = BIT(29), 643d5c65159SKalle Valo }; 644d5c65159SKalle Valo 645d5c65159SKalle Valo enum htt_rx_mgmt_pkt_filter_tlv_flags1 { 646d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC = BIT(0), 647d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC = BIT(1), 648d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC = BIT(2), 649d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH = BIT(3), 650d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH = BIT(4), 651d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH = BIT(5), 652d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH = BIT(6), 653d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH = BIT(7), 654d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH = BIT(8), 655d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION = BIT(9), 656d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION = BIT(10), 657d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION = BIT(11), 658d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK = BIT(12), 659d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK = BIT(13), 660d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK = BIT(14), 661d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15 = BIT(15), 662d5c65159SKalle Valo HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15 = BIT(16), 663d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15 = BIT(17), 664d5c65159SKalle Valo }; 665d5c65159SKalle Valo 666d5c65159SKalle Valo enum htt_rx_ctrl_pkt_filter_tlv_flags2 { 667d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 = BIT(0), 668d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 = BIT(1), 669d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 = BIT(2), 670d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 = BIT(3), 671d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 = BIT(4), 672d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 = BIT(5), 673d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER = BIT(6), 674d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER = BIT(7), 675d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER = BIT(8), 676d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 = BIT(9), 677d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 = BIT(10), 678d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 = BIT(11), 679d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL = BIT(12), 680d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL = BIT(13), 681d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL = BIT(14), 682d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP = BIT(15), 683d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP = BIT(16), 684d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP = BIT(17), 685d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT = BIT(18), 686d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT = BIT(19), 687d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT = BIT(20), 688d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER = BIT(21), 689d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER = BIT(22), 690d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER = BIT(23), 691d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BAR = BIT(24), 692d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BAR = BIT(25), 693d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BAR = BIT(26), 694d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BA = BIT(27), 695d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BA = BIT(28), 696d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BA = BIT(29), 697d5c65159SKalle Valo }; 698d5c65159SKalle Valo 699d5c65159SKalle Valo enum htt_rx_ctrl_pkt_filter_tlv_flags3 { 700d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL = BIT(0), 701d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL = BIT(1), 702d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL = BIT(2), 703d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_RTS = BIT(3), 704d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_RTS = BIT(4), 705d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_RTS = BIT(5), 706d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CTS = BIT(6), 707d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CTS = BIT(7), 708d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CTS = BIT(8), 709d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_ACK = BIT(9), 710d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_ACK = BIT(10), 711d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_ACK = BIT(11), 712d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND = BIT(12), 713d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND = BIT(13), 714d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND = BIT(14), 715d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK = BIT(15), 716d5c65159SKalle Valo HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK = BIT(16), 717d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK = BIT(17), 718d5c65159SKalle Valo }; 719d5c65159SKalle Valo 720d5c65159SKalle Valo enum htt_rx_data_pkt_filter_tlv_flasg3 { 721d5c65159SKalle Valo HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_MCAST = BIT(18), 722d5c65159SKalle Valo HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_MCAST = BIT(19), 723d5c65159SKalle Valo HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_MCAST = BIT(20), 724d5c65159SKalle Valo HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_UCAST = BIT(21), 725d5c65159SKalle Valo HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_UCAST = BIT(22), 726d5c65159SKalle Valo HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_UCAST = BIT(23), 727d5c65159SKalle Valo HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA = BIT(24), 728d5c65159SKalle Valo HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA = BIT(25), 729d5c65159SKalle Valo HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA = BIT(26), 730d5c65159SKalle Valo }; 731d5c65159SKalle Valo 732d5c65159SKalle Valo #define HTT_RX_FP_MGMT_FILTER_FLAGS0 \ 733d5c65159SKalle Valo (HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ \ 734d5c65159SKalle Valo | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP \ 735d5c65159SKalle Valo | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ \ 736d5c65159SKalle Valo | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP \ 737d5c65159SKalle Valo | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ \ 738d5c65159SKalle Valo | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP \ 739d5c65159SKalle Valo | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV \ 740d5c65159SKalle Valo | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON \ 741d5c65159SKalle Valo | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM) 742d5c65159SKalle Valo 743d5c65159SKalle Valo #define HTT_RX_MD_MGMT_FILTER_FLAGS0 \ 744d5c65159SKalle Valo (HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ \ 745d5c65159SKalle Valo | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP \ 746d5c65159SKalle Valo | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ \ 747d5c65159SKalle Valo | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP \ 748d5c65159SKalle Valo | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ \ 749d5c65159SKalle Valo | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP \ 750d5c65159SKalle Valo | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV \ 751d5c65159SKalle Valo | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON \ 752d5c65159SKalle Valo | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM) 753d5c65159SKalle Valo 754d5c65159SKalle Valo #define HTT_RX_MO_MGMT_FILTER_FLAGS0 \ 755d5c65159SKalle Valo (HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_REQ \ 756d5c65159SKalle Valo | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ASSOC_RESP \ 757d5c65159SKalle Valo | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_REQ \ 758d5c65159SKalle Valo | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_REASSOC_RESP \ 759d5c65159SKalle Valo | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_REQ \ 760d5c65159SKalle Valo | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_RESP \ 761d5c65159SKalle Valo | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_PROBE_TIMING_ADV \ 762d5c65159SKalle Valo | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_BEACON \ 763d5c65159SKalle Valo | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_ATIM) 764d5c65159SKalle Valo 765d5c65159SKalle Valo #define HTT_RX_FP_MGMT_FILTER_FLAGS1 (HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC \ 766d5c65159SKalle Valo | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH \ 767d5c65159SKalle Valo | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH \ 768d5c65159SKalle Valo | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION \ 769d5c65159SKalle Valo | HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK) 770d5c65159SKalle Valo 771d5c65159SKalle Valo #define HTT_RX_MD_MGMT_FILTER_FLAGS1 (HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC \ 772d5c65159SKalle Valo | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH \ 773d5c65159SKalle Valo | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH \ 774d5c65159SKalle Valo | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION \ 775d5c65159SKalle Valo | HTT_RX_MD_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK) 776d5c65159SKalle Valo 777d5c65159SKalle Valo #define HTT_RX_MO_MGMT_FILTER_FLAGS1 (HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DISASSOC \ 778d5c65159SKalle Valo | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_AUTH \ 779d5c65159SKalle Valo | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_DEAUTH \ 780d5c65159SKalle Valo | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION \ 781d5c65159SKalle Valo | HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_ACTION_NOACK) 782d5c65159SKalle Valo 783d5c65159SKalle Valo #define HTT_RX_FP_CTRL_FILTER_FLASG2 (HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER \ 784d5c65159SKalle Valo | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BAR \ 785d5c65159SKalle Valo | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_BA) 786d5c65159SKalle Valo 787d5c65159SKalle Valo #define HTT_RX_MD_CTRL_FILTER_FLASG2 (HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER \ 788d5c65159SKalle Valo | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BAR \ 789d5c65159SKalle Valo | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS2_BA) 790d5c65159SKalle Valo 791d5c65159SKalle Valo #define HTT_RX_MO_CTRL_FILTER_FLASG2 (HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_WRAPPER \ 792d5c65159SKalle Valo | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BAR \ 793d5c65159SKalle Valo | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_BA) 794d5c65159SKalle Valo 795d5c65159SKalle Valo #define HTT_RX_FP_CTRL_FILTER_FLASG3 (HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL \ 796d5c65159SKalle Valo | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_RTS \ 797d5c65159SKalle Valo | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CTS \ 798d5c65159SKalle Valo | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_ACK \ 799d5c65159SKalle Valo | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND \ 800d5c65159SKalle Valo | HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK) 801d5c65159SKalle Valo 802d5c65159SKalle Valo #define HTT_RX_MD_CTRL_FILTER_FLASG3 (HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL \ 803d5c65159SKalle Valo | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_RTS \ 804d5c65159SKalle Valo | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CTS \ 805d5c65159SKalle Valo | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_ACK \ 806d5c65159SKalle Valo | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND \ 807d5c65159SKalle Valo | HTT_RX_MD_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK) 808d5c65159SKalle Valo 809d5c65159SKalle Valo #define HTT_RX_MO_CTRL_FILTER_FLASG3 (HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_PSPOLL \ 810d5c65159SKalle Valo | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_RTS \ 811d5c65159SKalle Valo | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CTS \ 812d5c65159SKalle Valo | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_ACK \ 813d5c65159SKalle Valo | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND \ 814d5c65159SKalle Valo | HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS3_CFEND_ACK) 815d5c65159SKalle Valo 816d5c65159SKalle Valo #define HTT_RX_FP_DATA_FILTER_FLASG3 (HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_MCAST \ 817d5c65159SKalle Valo | HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_UCAST \ 818d5c65159SKalle Valo | HTT_RX_FP_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA) 819d5c65159SKalle Valo 820d5c65159SKalle Valo #define HTT_RX_MD_DATA_FILTER_FLASG3 (HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_MCAST \ 821d5c65159SKalle Valo | HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_UCAST \ 822d5c65159SKalle Valo | HTT_RX_MD_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA) 823d5c65159SKalle Valo 824d5c65159SKalle Valo #define HTT_RX_MO_DATA_FILTER_FLASG3 (HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_MCAST \ 825d5c65159SKalle Valo | HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_UCAST \ 826d5c65159SKalle Valo | HTT_RX_MO_DATA_PKT_FILTER_TLV_FLASG3_NULL_DATA) 827d5c65159SKalle Valo 828d5c65159SKalle Valo #define HTT_RX_MON_FP_MGMT_FILTER_FLAGS0 \ 829d5c65159SKalle Valo (HTT_RX_FP_MGMT_FILTER_FLAGS0 | \ 830d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7) 831d5c65159SKalle Valo 832d5c65159SKalle Valo #define HTT_RX_MON_MO_MGMT_FILTER_FLAGS0 \ 833d5c65159SKalle Valo (HTT_RX_MO_MGMT_FILTER_FLAGS0 | \ 834d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS0_RESERVED_7) 835d5c65159SKalle Valo 836d5c65159SKalle Valo #define HTT_RX_MON_FP_MGMT_FILTER_FLAGS1 \ 837d5c65159SKalle Valo (HTT_RX_FP_MGMT_FILTER_FLAGS1 | \ 838d5c65159SKalle Valo HTT_RX_FP_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15) 839d5c65159SKalle Valo 840d5c65159SKalle Valo #define HTT_RX_MON_MO_MGMT_FILTER_FLAGS1 \ 841d5c65159SKalle Valo (HTT_RX_MO_MGMT_FILTER_FLAGS1 | \ 842d5c65159SKalle Valo HTT_RX_MO_MGMT_PKT_FILTER_TLV_FLAGS1_RESERVED_15) 843d5c65159SKalle Valo 844d5c65159SKalle Valo #define HTT_RX_MON_FP_CTRL_FILTER_FLASG2 \ 845d5c65159SKalle Valo (HTT_RX_FP_CTRL_FILTER_FLASG2 | \ 846d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 | \ 847d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 | \ 848d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER | \ 849d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 | \ 850d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL | \ 851d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP | \ 852d5c65159SKalle Valo HTT_RX_FP_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT) 853d5c65159SKalle Valo 854d5c65159SKalle Valo #define HTT_RX_MON_MO_CTRL_FILTER_FLASG2 \ 855d5c65159SKalle Valo (HTT_RX_MO_CTRL_FILTER_FLASG2 | \ 856d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_1 | \ 857d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_2 | \ 858d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_TRIGGER | \ 859d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_RESERVED_4 | \ 860d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_BF_REP_POLL | \ 861d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_VHT_NDP | \ 862d5c65159SKalle Valo HTT_RX_MO_CTRL_PKT_FILTER_TLV_FLAGS2_CTRL_FRAME_EXT) 863d5c65159SKalle Valo 864d5c65159SKalle Valo #define HTT_RX_MON_FP_CTRL_FILTER_FLASG3 HTT_RX_FP_CTRL_FILTER_FLASG3 865d5c65159SKalle Valo 866d5c65159SKalle Valo #define HTT_RX_MON_MO_CTRL_FILTER_FLASG3 HTT_RX_MO_CTRL_FILTER_FLASG3 867d5c65159SKalle Valo 868d5c65159SKalle Valo #define HTT_RX_MON_FP_DATA_FILTER_FLASG3 HTT_RX_FP_DATA_FILTER_FLASG3 869d5c65159SKalle Valo 870d5c65159SKalle Valo #define HTT_RX_MON_MO_DATA_FILTER_FLASG3 HTT_RX_MO_DATA_FILTER_FLASG3 871d5c65159SKalle Valo 872d5c65159SKalle Valo #define HTT_RX_MON_FILTER_TLV_FLAGS \ 873d5c65159SKalle Valo (HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \ 874d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PPDU_START | \ 875d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PPDU_END | \ 876d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS | \ 877d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS_EXT | \ 878d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PPDU_END_STATUS_DONE) 879d5c65159SKalle Valo 880d5c65159SKalle Valo #define HTT_RX_MON_FILTER_TLV_FLAGS_MON_STATUS_RING \ 881d5c65159SKalle Valo (HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \ 882d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PPDU_START | \ 883d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PPDU_END | \ 884d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS | \ 885d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PPDU_END_USER_STATS_EXT | \ 886d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PPDU_END_STATUS_DONE) 887d5c65159SKalle Valo 888d5c65159SKalle Valo #define HTT_RX_MON_FILTER_TLV_FLAGS_MON_BUF_RING \ 889d5c65159SKalle Valo (HTT_RX_FILTER_TLV_FLAGS_MPDU_START | \ 890d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_MSDU_START | \ 891d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_RX_PACKET | \ 892d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_MSDU_END | \ 893d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_MPDU_END | \ 894d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PACKET_HEADER | \ 895d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_PER_MSDU_HEADER | \ 896d5c65159SKalle Valo HTT_RX_FILTER_TLV_FLAGS_ATTENTION) 897d5c65159SKalle Valo 898d5c65159SKalle Valo struct htt_rx_ring_selection_cfg_cmd { 899d5c65159SKalle Valo u32 info0; 900d5c65159SKalle Valo u32 info1; 901d5c65159SKalle Valo u32 pkt_type_en_flags0; 902d5c65159SKalle Valo u32 pkt_type_en_flags1; 903d5c65159SKalle Valo u32 pkt_type_en_flags2; 904d5c65159SKalle Valo u32 pkt_type_en_flags3; 905d5c65159SKalle Valo u32 rx_filter_tlv; 906d5c65159SKalle Valo } __packed; 907d5c65159SKalle Valo 908d5c65159SKalle Valo struct htt_rx_ring_tlv_filter { 909d5c65159SKalle Valo u32 rx_filter; /* see htt_rx_filter_tlv_flags */ 910d5c65159SKalle Valo u32 pkt_filter_flags0; /* MGMT */ 911d5c65159SKalle Valo u32 pkt_filter_flags1; /* MGMT */ 912d5c65159SKalle Valo u32 pkt_filter_flags2; /* CTRL */ 913d5c65159SKalle Valo u32 pkt_filter_flags3; /* DATA */ 914d5c65159SKalle Valo }; 915d5c65159SKalle Valo 916d5c65159SKalle Valo /* HTT message target->host */ 917d5c65159SKalle Valo 918d5c65159SKalle Valo enum htt_t2h_msg_type { 919d5c65159SKalle Valo HTT_T2H_MSG_TYPE_VERSION_CONF, 920d5c65159SKalle Valo HTT_T2H_MSG_TYPE_RX_ADDBA = 0x5, 921d5c65159SKalle Valo HTT_T2H_MSG_TYPE_PKTLOG = 0x8, 922d5c65159SKalle Valo HTT_T2H_MSG_TYPE_SEC_IND = 0xb, 923d5c65159SKalle Valo HTT_T2H_MSG_TYPE_PEER_MAP = 0x1e, 924d5c65159SKalle Valo HTT_T2H_MSG_TYPE_PEER_UNMAP = 0x1f, 925d5c65159SKalle Valo HTT_T2H_MSG_TYPE_PPDU_STATS_IND = 0x1d, 926d5c65159SKalle Valo HTT_T2H_MSG_TYPE_EXT_STATS_CONF = 0x1c, 927d5c65159SKalle Valo }; 928d5c65159SKalle Valo 929d5c65159SKalle Valo #define HTT_TARGET_VERSION_MAJOR 3 930d5c65159SKalle Valo 931d5c65159SKalle Valo #define HTT_T2H_MSG_TYPE GENMASK(7, 0) 932d5c65159SKalle Valo #define HTT_T2H_VERSION_CONF_MINOR GENMASK(15, 8) 933d5c65159SKalle Valo #define HTT_T2H_VERSION_CONF_MAJOR GENMASK(23, 16) 934d5c65159SKalle Valo 935d5c65159SKalle Valo struct htt_t2h_version_conf_msg { 936d5c65159SKalle Valo u32 version; 937d5c65159SKalle Valo } __packed; 938d5c65159SKalle Valo 939d5c65159SKalle Valo #define HTT_T2H_PEER_MAP_INFO_VDEV_ID GENMASK(15, 8) 940d5c65159SKalle Valo #define HTT_T2H_PEER_MAP_INFO_PEER_ID GENMASK(31, 16) 941d5c65159SKalle Valo #define HTT_T2H_PEER_MAP_INFO1_MAC_ADDR_H16 GENMASK(15, 0) 942d5c65159SKalle Valo #define HTT_T2H_PEER_MAP_INFO1_HW_PEER_ID GENMASK(31, 16) 943d5c65159SKalle Valo #define HTT_T2H_PEER_MAP_INFO2_AST_HASH_VAL GENMASK(15, 0) 944d5c65159SKalle Valo #define HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_M BIT(16) 945d5c65159SKalle Valo #define HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_S 16 946d5c65159SKalle Valo 947d5c65159SKalle Valo struct htt_t2h_peer_map_event { 948d5c65159SKalle Valo u32 info; 949d5c65159SKalle Valo u32 mac_addr_l32; 950d5c65159SKalle Valo u32 info1; 951d5c65159SKalle Valo u32 info2; 952d5c65159SKalle Valo } __packed; 953d5c65159SKalle Valo 954d5c65159SKalle Valo #define HTT_T2H_PEER_UNMAP_INFO_VDEV_ID HTT_T2H_PEER_MAP_INFO_VDEV_ID 955d5c65159SKalle Valo #define HTT_T2H_PEER_UNMAP_INFO_PEER_ID HTT_T2H_PEER_MAP_INFO_PEER_ID 956d5c65159SKalle Valo #define HTT_T2H_PEER_UNMAP_INFO1_MAC_ADDR_H16 \ 957d5c65159SKalle Valo HTT_T2H_PEER_MAP_INFO1_MAC_ADDR_H16 958d5c65159SKalle Valo #define HTT_T2H_PEER_MAP_INFO1_NEXT_HOP_M HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_M 959d5c65159SKalle Valo #define HTT_T2H_PEER_MAP_INFO1_NEXT_HOP_S HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_S 960d5c65159SKalle Valo 961d5c65159SKalle Valo struct htt_t2h_peer_unmap_event { 962d5c65159SKalle Valo u32 info; 963d5c65159SKalle Valo u32 mac_addr_l32; 964d5c65159SKalle Valo u32 info1; 965d5c65159SKalle Valo } __packed; 966d5c65159SKalle Valo 967d5c65159SKalle Valo struct htt_resp_msg { 968d5c65159SKalle Valo union { 969d5c65159SKalle Valo struct htt_t2h_version_conf_msg version_msg; 970d5c65159SKalle Valo struct htt_t2h_peer_map_event peer_map_ev; 971d5c65159SKalle Valo struct htt_t2h_peer_unmap_event peer_unmap_ev; 972d5c65159SKalle Valo }; 973d5c65159SKalle Valo } __packed; 974d5c65159SKalle Valo 975d5c65159SKalle Valo /* ppdu stats 976d5c65159SKalle Valo * 977d5c65159SKalle Valo * @details 978d5c65159SKalle Valo * The following field definitions describe the format of the HTT target 979d5c65159SKalle Valo * to host ppdu stats indication message. 980d5c65159SKalle Valo * 981d5c65159SKalle Valo * 982d5c65159SKalle Valo * |31 16|15 12|11 10|9 8|7 0 | 983d5c65159SKalle Valo * |----------------------------------------------------------------------| 984d5c65159SKalle Valo * | payload_size | rsvd |pdev_id|mac_id | msg type | 985d5c65159SKalle Valo * |----------------------------------------------------------------------| 986d5c65159SKalle Valo * | ppdu_id | 987d5c65159SKalle Valo * |----------------------------------------------------------------------| 988d5c65159SKalle Valo * | Timestamp in us | 989d5c65159SKalle Valo * |----------------------------------------------------------------------| 990d5c65159SKalle Valo * | reserved | 991d5c65159SKalle Valo * |----------------------------------------------------------------------| 992d5c65159SKalle Valo * | type-specific stats info | 993d5c65159SKalle Valo * | (see htt_ppdu_stats.h) | 994d5c65159SKalle Valo * |----------------------------------------------------------------------| 995d5c65159SKalle Valo * Header fields: 996d5c65159SKalle Valo * - MSG_TYPE 997d5c65159SKalle Valo * Bits 7:0 998d5c65159SKalle Valo * Purpose: Identifies this is a PPDU STATS indication 999d5c65159SKalle Valo * message. 1000d5c65159SKalle Valo * Value: 0x1d 1001d5c65159SKalle Valo * - mac_id 1002d5c65159SKalle Valo * Bits 9:8 1003d5c65159SKalle Valo * Purpose: mac_id of this ppdu_id 1004d5c65159SKalle Valo * Value: 0-3 1005d5c65159SKalle Valo * - pdev_id 1006d5c65159SKalle Valo * Bits 11:10 1007d5c65159SKalle Valo * Purpose: pdev_id of this ppdu_id 1008d5c65159SKalle Valo * Value: 0-3 1009d5c65159SKalle Valo * 0 (for rings at SOC level), 1010d5c65159SKalle Valo * 1/2/3 PDEV -> 0/1/2 1011d5c65159SKalle Valo * - payload_size 1012d5c65159SKalle Valo * Bits 31:16 1013d5c65159SKalle Valo * Purpose: total tlv size 1014d5c65159SKalle Valo * Value: payload_size in bytes 1015d5c65159SKalle Valo */ 1016d5c65159SKalle Valo 1017d5c65159SKalle Valo #define HTT_T2H_PPDU_STATS_INFO_PDEV_ID GENMASK(11, 10) 1018d5c65159SKalle Valo #define HTT_T2H_PPDU_STATS_INFO_PAYLOAD_SIZE GENMASK(31, 16) 1019d5c65159SKalle Valo 1020d5c65159SKalle Valo struct ath11k_htt_ppdu_stats_msg { 1021d5c65159SKalle Valo u32 info; 1022d5c65159SKalle Valo u32 ppdu_id; 1023d5c65159SKalle Valo u32 timestamp; 1024d5c65159SKalle Valo u32 rsvd; 1025d5c65159SKalle Valo u8 data[0]; 1026d5c65159SKalle Valo } __packed; 1027d5c65159SKalle Valo 1028d5c65159SKalle Valo struct htt_tlv { 1029d5c65159SKalle Valo u32 header; 1030d5c65159SKalle Valo u8 value[0]; 1031d5c65159SKalle Valo } __packed; 1032d5c65159SKalle Valo 1033d5c65159SKalle Valo #define HTT_TLV_TAG GENMASK(11, 0) 1034d5c65159SKalle Valo #define HTT_TLV_LEN GENMASK(23, 12) 1035d5c65159SKalle Valo 1036d5c65159SKalle Valo enum HTT_PPDU_STATS_BW { 1037d5c65159SKalle Valo HTT_PPDU_STATS_BANDWIDTH_5MHZ = 0, 1038d5c65159SKalle Valo HTT_PPDU_STATS_BANDWIDTH_10MHZ = 1, 1039d5c65159SKalle Valo HTT_PPDU_STATS_BANDWIDTH_20MHZ = 2, 1040d5c65159SKalle Valo HTT_PPDU_STATS_BANDWIDTH_40MHZ = 3, 1041d5c65159SKalle Valo HTT_PPDU_STATS_BANDWIDTH_80MHZ = 4, 1042d5c65159SKalle Valo HTT_PPDU_STATS_BANDWIDTH_160MHZ = 5, /* includes 80+80 */ 1043d5c65159SKalle Valo HTT_PPDU_STATS_BANDWIDTH_DYN = 6, 1044d5c65159SKalle Valo }; 1045d5c65159SKalle Valo 1046d5c65159SKalle Valo #define HTT_PPDU_STATS_CMN_FLAGS_FRAME_TYPE_M GENMASK(7, 0) 1047d5c65159SKalle Valo #define HTT_PPDU_STATS_CMN_FLAGS_QUEUE_TYPE_M GENMASK(15, 8) 1048d5c65159SKalle Valo /* bw - HTT_PPDU_STATS_BW */ 1049d5c65159SKalle Valo #define HTT_PPDU_STATS_CMN_FLAGS_BW_M GENMASK(19, 16) 1050d5c65159SKalle Valo 1051d5c65159SKalle Valo struct htt_ppdu_stats_common { 1052d5c65159SKalle Valo u32 ppdu_id; 1053d5c65159SKalle Valo u16 sched_cmdid; 1054d5c65159SKalle Valo u8 ring_id; 1055d5c65159SKalle Valo u8 num_users; 1056d5c65159SKalle Valo u32 flags; /* %HTT_PPDU_STATS_COMMON_FLAGS_*/ 1057d5c65159SKalle Valo u32 chain_mask; 1058d5c65159SKalle Valo u32 fes_duration_us; /* frame exchange sequence */ 1059d5c65159SKalle Valo u32 ppdu_sch_eval_start_tstmp_us; 1060d5c65159SKalle Valo u32 ppdu_sch_end_tstmp_us; 1061d5c65159SKalle Valo u32 ppdu_start_tstmp_us; 1062d5c65159SKalle Valo /* BIT [15 : 0] - phy mode (WLAN_PHY_MODE) with which ppdu was transmitted 1063d5c65159SKalle Valo * BIT [31 : 16] - bandwidth (in MHz) with which ppdu was transmitted 1064d5c65159SKalle Valo */ 1065d5c65159SKalle Valo u16 phy_mode; 1066d5c65159SKalle Valo u16 bw_mhz; 1067d5c65159SKalle Valo } __packed; 1068d5c65159SKalle Valo 1069d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_INFO0_USER_POS_M GENMASK(3, 0) 1070d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_INFO0_MU_GROUP_ID_M GENMASK(11, 4) 1071d5c65159SKalle Valo 1072d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_INFO1_RESP_TYPE_VALD_M BIT(0) 1073d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_INFO1_PPDU_TYPE_M GENMASK(5, 1) 1074d5c65159SKalle Valo 1075d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_FLAGS_LTF_SIZE_M GENMASK(1, 0) 1076d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_FLAGS_STBC_M BIT(2) 1077d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_FLAGS_HE_RE_M BIT(3) 1078d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_FLAGS_TXBF_M GENMASK(7, 4) 1079d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_FLAGS_BW_M GENMASK(11, 8) 1080d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_FLAGS_NSS_M GENMASK(15, 12) 1081d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_FLAGS_MCS_M GENMASK(19, 16) 1082d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_FLAGS_PREAMBLE_M GENMASK(23, 20) 1083d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_FLAGS_GI_M GENMASK(27, 24) 1084d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_FLAGS_DCM_M BIT(28) 1085d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_FLAGS_LDPC_M BIT(29) 1086d5c65159SKalle Valo 1087d5c65159SKalle Valo #define HTT_USR_RATE_PREAMBLE(_val) \ 1088d5c65159SKalle Valo FIELD_GET(HTT_PPDU_STATS_USER_RATE_FLAGS_PREAMBLE_M, _val) 1089d5c65159SKalle Valo #define HTT_USR_RATE_BW(_val) \ 1090d5c65159SKalle Valo FIELD_GET(HTT_PPDU_STATS_USER_RATE_FLAGS_BW_M, _val) 1091d5c65159SKalle Valo #define HTT_USR_RATE_NSS(_val) \ 1092d5c65159SKalle Valo FIELD_GET(HTT_PPDU_STATS_USER_RATE_FLAGS_NSS_M, _val) 1093d5c65159SKalle Valo #define HTT_USR_RATE_MCS(_val) \ 1094d5c65159SKalle Valo FIELD_GET(HTT_PPDU_STATS_USER_RATE_FLAGS_MCS_M, _val) 1095d5c65159SKalle Valo #define HTT_USR_RATE_GI(_val) \ 1096d5c65159SKalle Valo FIELD_GET(HTT_PPDU_STATS_USER_RATE_FLAGS_GI_M, _val) 1097d5c65159SKalle Valo 1098d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_LTF_SIZE_M GENMASK(1, 0) 1099d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_STBC_M BIT(2) 1100d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_HE_RE_M BIT(3) 1101d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_TXBF_M GENMASK(7, 4) 1102d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_BW_M GENMASK(11, 8) 1103d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_NSS_M GENMASK(15, 12) 1104d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_MCS_M GENMASK(19, 16) 1105d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_PREAMBLE_M GENMASK(23, 20) 1106d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_GI_M GENMASK(27, 24) 1107d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_DCM_M BIT(28) 1108d5c65159SKalle Valo #define HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_LDPC_M BIT(29) 1109d5c65159SKalle Valo 1110d5c65159SKalle Valo struct htt_ppdu_stats_user_rate { 1111d5c65159SKalle Valo u8 tid_num; 1112d5c65159SKalle Valo u8 reserved0; 1113d5c65159SKalle Valo u16 sw_peer_id; 1114d5c65159SKalle Valo u32 info0; /* %HTT_PPDU_STATS_USER_RATE_INFO0_*/ 1115d5c65159SKalle Valo u16 ru_end; 1116d5c65159SKalle Valo u16 ru_start; 1117d5c65159SKalle Valo u16 resp_ru_end; 1118d5c65159SKalle Valo u16 resp_ru_start; 1119d5c65159SKalle Valo u32 info1; /* %HTT_PPDU_STATS_USER_RATE_INFO1_ */ 1120d5c65159SKalle Valo u32 rate_flags; /* %HTT_PPDU_STATS_USER_RATE_FLAGS_ */ 1121d5c65159SKalle Valo /* Note: resp_rate_info is only valid for if resp_type is UL */ 1122d5c65159SKalle Valo u32 resp_rate_flags; /* %HTT_PPDU_STATS_USER_RATE_RESP_FLAGS_ */ 1123d5c65159SKalle Valo } __packed; 1124d5c65159SKalle Valo 1125d5c65159SKalle Valo #define HTT_PPDU_STATS_TX_INFO_FLAGS_RATECODE_M GENMASK(7, 0) 1126d5c65159SKalle Valo #define HTT_PPDU_STATS_TX_INFO_FLAGS_IS_AMPDU_M BIT(8) 1127d5c65159SKalle Valo #define HTT_PPDU_STATS_TX_INFO_FLAGS_BA_ACK_FAILED_M GENMASK(10, 9) 1128d5c65159SKalle Valo #define HTT_PPDU_STATS_TX_INFO_FLAGS_BW_M GENMASK(13, 11) 1129d5c65159SKalle Valo #define HTT_PPDU_STATS_TX_INFO_FLAGS_SGI_M BIT(14) 1130d5c65159SKalle Valo #define HTT_PPDU_STATS_TX_INFO_FLAGS_PEERID_M GENMASK(31, 16) 1131d5c65159SKalle Valo 1132d5c65159SKalle Valo #define HTT_TX_INFO_IS_AMSDU(_flags) \ 1133d5c65159SKalle Valo FIELD_GET(HTT_PPDU_STATS_TX_INFO_FLAGS_IS_AMPDU_M, _flags) 1134d5c65159SKalle Valo #define HTT_TX_INFO_BA_ACK_FAILED(_flags) \ 1135d5c65159SKalle Valo FIELD_GET(HTT_PPDU_STATS_TX_INFO_FLAGS_BA_ACK_FAILED_M, _flags) 1136d5c65159SKalle Valo #define HTT_TX_INFO_RATECODE(_flags) \ 1137d5c65159SKalle Valo FIELD_GET(HTT_PPDU_STATS_TX_INFO_FLAGS_RATECODE_M, _flags) 1138d5c65159SKalle Valo #define HTT_TX_INFO_PEERID(_flags) \ 1139d5c65159SKalle Valo FIELD_GET(HTT_PPDU_STATS_TX_INFO_FLAGS_PEERID_M, _flags) 1140d5c65159SKalle Valo 1141d5c65159SKalle Valo struct htt_tx_ppdu_stats_info { 1142d5c65159SKalle Valo struct htt_tlv tlv_hdr; 1143d5c65159SKalle Valo u32 tx_success_bytes; 1144d5c65159SKalle Valo u32 tx_retry_bytes; 1145d5c65159SKalle Valo u32 tx_failed_bytes; 1146d5c65159SKalle Valo u32 flags; /* %HTT_PPDU_STATS_TX_INFO_FLAGS_ */ 1147d5c65159SKalle Valo u16 tx_success_msdus; 1148d5c65159SKalle Valo u16 tx_retry_msdus; 1149d5c65159SKalle Valo u16 tx_failed_msdus; 1150d5c65159SKalle Valo u16 tx_duration; /* united in us */ 1151d5c65159SKalle Valo } __packed; 1152d5c65159SKalle Valo 1153d5c65159SKalle Valo enum htt_ppdu_stats_usr_compln_status { 1154d5c65159SKalle Valo HTT_PPDU_STATS_USER_STATUS_OK, 1155d5c65159SKalle Valo HTT_PPDU_STATS_USER_STATUS_FILTERED, 1156d5c65159SKalle Valo HTT_PPDU_STATS_USER_STATUS_RESP_TIMEOUT, 1157d5c65159SKalle Valo HTT_PPDU_STATS_USER_STATUS_RESP_MISMATCH, 1158d5c65159SKalle Valo HTT_PPDU_STATS_USER_STATUS_ABORT, 1159d5c65159SKalle Valo }; 1160d5c65159SKalle Valo 1161d5c65159SKalle Valo #define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_LONG_RETRY_M GENMASK(3, 0) 1162d5c65159SKalle Valo #define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_SHORT_RETRY_M GENMASK(7, 4) 1163d5c65159SKalle Valo #define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_IS_AMPDU_M BIT(8) 1164d5c65159SKalle Valo #define HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_RESP_TYPE_M GENMASK(12, 9) 1165d5c65159SKalle Valo 1166d5c65159SKalle Valo #define HTT_USR_CMPLTN_IS_AMPDU(_val) \ 1167d5c65159SKalle Valo FIELD_GET(HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_IS_AMPDU_M, _val) 1168d5c65159SKalle Valo #define HTT_USR_CMPLTN_LONG_RETRY(_val) \ 1169d5c65159SKalle Valo FIELD_GET(HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_LONG_RETRY_M, _val) 1170d5c65159SKalle Valo #define HTT_USR_CMPLTN_SHORT_RETRY(_val) \ 1171d5c65159SKalle Valo FIELD_GET(HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_SHORT_RETRY_M, _val) 1172d5c65159SKalle Valo 1173d5c65159SKalle Valo struct htt_ppdu_stats_usr_cmpltn_cmn { 1174d5c65159SKalle Valo u8 status; 1175d5c65159SKalle Valo u8 tid_num; 1176d5c65159SKalle Valo u16 sw_peer_id; 1177d5c65159SKalle Valo /* RSSI value of last ack packet (units = dB above noise floor) */ 1178d5c65159SKalle Valo u32 ack_rssi; 1179d5c65159SKalle Valo u16 mpdu_tried; 1180d5c65159SKalle Valo u16 mpdu_success; 1181d5c65159SKalle Valo u32 flags; /* %HTT_PPDU_STATS_USR_CMPLTN_CMN_FLAGS_LONG_RETRIES*/ 1182d5c65159SKalle Valo } __packed; 1183d5c65159SKalle Valo 1184d5c65159SKalle Valo #define HTT_PPDU_STATS_ACK_BA_INFO_NUM_MPDU_M GENMASK(8, 0) 1185d5c65159SKalle Valo #define HTT_PPDU_STATS_ACK_BA_INFO_NUM_MSDU_M GENMASK(24, 9) 1186b9269a07SVenkateswara Naralasetty #define HTT_PPDU_STATS_ACK_BA_INFO_TID_NUM GENMASK(31, 25) 1187b9269a07SVenkateswara Naralasetty 1188b9269a07SVenkateswara Naralasetty #define HTT_PPDU_STATS_NON_QOS_TID 16 1189d5c65159SKalle Valo 1190d5c65159SKalle Valo struct htt_ppdu_stats_usr_cmpltn_ack_ba_status { 1191d5c65159SKalle Valo u32 ppdu_id; 1192d5c65159SKalle Valo u16 sw_peer_id; 1193d5c65159SKalle Valo u16 reserved0; 1194d5c65159SKalle Valo u32 info; /* %HTT_PPDU_STATS_USR_CMPLTN_CMN_INFO_ */ 1195d5c65159SKalle Valo u16 current_seq; 1196d5c65159SKalle Valo u16 start_seq; 1197d5c65159SKalle Valo u32 success_bytes; 1198d5c65159SKalle Valo } __packed; 1199d5c65159SKalle Valo 1200d5c65159SKalle Valo struct htt_ppdu_stats_usr_cmn_array { 1201d5c65159SKalle Valo struct htt_tlv tlv_hdr; 1202d5c65159SKalle Valo u32 num_ppdu_stats; 1203d5c65159SKalle Valo /* tx_ppdu_stats_info is filled by multiple struct htt_tx_ppdu_stats_info 1204d5c65159SKalle Valo * elements. 1205d5c65159SKalle Valo * tx_ppdu_stats_info is variable length, with length = 1206d5c65159SKalle Valo * number_of_ppdu_stats * sizeof (struct htt_tx_ppdu_stats_info) 1207d5c65159SKalle Valo */ 1208d5c65159SKalle Valo struct htt_tx_ppdu_stats_info tx_ppdu_info[0]; 1209d5c65159SKalle Valo } __packed; 1210d5c65159SKalle Valo 1211d5c65159SKalle Valo struct htt_ppdu_user_stats { 1212d5c65159SKalle Valo u16 peer_id; 1213d5c65159SKalle Valo u32 tlv_flags; 1214d5c65159SKalle Valo bool is_valid_peer_id; 1215d5c65159SKalle Valo struct htt_ppdu_stats_user_rate rate; 1216d5c65159SKalle Valo struct htt_ppdu_stats_usr_cmpltn_cmn cmpltn_cmn; 1217d5c65159SKalle Valo struct htt_ppdu_stats_usr_cmpltn_ack_ba_status ack_ba; 1218d5c65159SKalle Valo }; 1219d5c65159SKalle Valo 1220d5c65159SKalle Valo #define HTT_PPDU_STATS_MAX_USERS 8 1221d5c65159SKalle Valo #define HTT_PPDU_DESC_MAX_DEPTH 16 1222d5c65159SKalle Valo 1223d5c65159SKalle Valo struct htt_ppdu_stats { 1224d5c65159SKalle Valo struct htt_ppdu_stats_common common; 1225d5c65159SKalle Valo struct htt_ppdu_user_stats user_stats[HTT_PPDU_STATS_MAX_USERS]; 1226d5c65159SKalle Valo }; 1227d5c65159SKalle Valo 1228d5c65159SKalle Valo struct htt_ppdu_stats_info { 1229d5c65159SKalle Valo u32 ppdu_id; 1230d5c65159SKalle Valo struct htt_ppdu_stats ppdu_stats; 1231d5c65159SKalle Valo struct list_head list; 1232d5c65159SKalle Valo }; 1233d5c65159SKalle Valo 1234d5c65159SKalle Valo /** 1235d5c65159SKalle Valo * @brief target -> host packet log message 1236d5c65159SKalle Valo * 1237d5c65159SKalle Valo * @details 1238d5c65159SKalle Valo * The following field definitions describe the format of the packet log 1239d5c65159SKalle Valo * message sent from the target to the host. 1240d5c65159SKalle Valo * The message consists of a 4-octet header,followed by a variable number 1241d5c65159SKalle Valo * of 32-bit character values. 1242d5c65159SKalle Valo * 1243d5c65159SKalle Valo * |31 16|15 12|11 10|9 8|7 0| 1244d5c65159SKalle Valo * |------------------------------------------------------------------| 1245d5c65159SKalle Valo * | payload_size | rsvd |pdev_id|mac_id| msg type | 1246d5c65159SKalle Valo * |------------------------------------------------------------------| 1247d5c65159SKalle Valo * | payload | 1248d5c65159SKalle Valo * |------------------------------------------------------------------| 1249d5c65159SKalle Valo * - MSG_TYPE 1250d5c65159SKalle Valo * Bits 7:0 1251d5c65159SKalle Valo * Purpose: identifies this as a pktlog message 1252d5c65159SKalle Valo * Value: HTT_T2H_MSG_TYPE_PKTLOG 1253d5c65159SKalle Valo * - mac_id 1254d5c65159SKalle Valo * Bits 9:8 1255d5c65159SKalle Valo * Purpose: identifies which MAC/PHY instance generated this pktlog info 1256d5c65159SKalle Valo * Value: 0-3 1257d5c65159SKalle Valo * - pdev_id 1258d5c65159SKalle Valo * Bits 11:10 1259d5c65159SKalle Valo * Purpose: pdev_id 1260d5c65159SKalle Valo * Value: 0-3 1261d5c65159SKalle Valo * 0 (for rings at SOC level), 1262d5c65159SKalle Valo * 1/2/3 PDEV -> 0/1/2 1263d5c65159SKalle Valo * - payload_size 1264d5c65159SKalle Valo * Bits 31:16 1265d5c65159SKalle Valo * Purpose: explicitly specify the payload size 1266d5c65159SKalle Valo * Value: payload size in bytes (payload size is a multiple of 4 bytes) 1267d5c65159SKalle Valo */ 1268d5c65159SKalle Valo struct htt_pktlog_msg { 1269d5c65159SKalle Valo u32 hdr; 1270d5c65159SKalle Valo u8 payload[0]; 1271d5c65159SKalle Valo }; 1272d5c65159SKalle Valo 1273d5c65159SKalle Valo /** 1274d5c65159SKalle Valo * @brief host -> target FW extended statistics retrieve 1275d5c65159SKalle Valo * 1276d5c65159SKalle Valo * @details 1277d5c65159SKalle Valo * The following field definitions describe the format of the HTT host 1278d5c65159SKalle Valo * to target FW extended stats retrieve message. 1279d5c65159SKalle Valo * The message specifies the type of stats the host wants to retrieve. 1280d5c65159SKalle Valo * 1281d5c65159SKalle Valo * |31 24|23 16|15 8|7 0| 1282d5c65159SKalle Valo * |-----------------------------------------------------------| 1283d5c65159SKalle Valo * | reserved | stats type | pdev_mask | msg type | 1284d5c65159SKalle Valo * |-----------------------------------------------------------| 1285d5c65159SKalle Valo * | config param [0] | 1286d5c65159SKalle Valo * |-----------------------------------------------------------| 1287d5c65159SKalle Valo * | config param [1] | 1288d5c65159SKalle Valo * |-----------------------------------------------------------| 1289d5c65159SKalle Valo * | config param [2] | 1290d5c65159SKalle Valo * |-----------------------------------------------------------| 1291d5c65159SKalle Valo * | config param [3] | 1292d5c65159SKalle Valo * |-----------------------------------------------------------| 1293d5c65159SKalle Valo * | reserved | 1294d5c65159SKalle Valo * |-----------------------------------------------------------| 1295d5c65159SKalle Valo * | cookie LSBs | 1296d5c65159SKalle Valo * |-----------------------------------------------------------| 1297d5c65159SKalle Valo * | cookie MSBs | 1298d5c65159SKalle Valo * |-----------------------------------------------------------| 1299d5c65159SKalle Valo * Header fields: 1300d5c65159SKalle Valo * - MSG_TYPE 1301d5c65159SKalle Valo * Bits 7:0 1302d5c65159SKalle Valo * Purpose: identifies this is a extended stats upload request message 1303d5c65159SKalle Valo * Value: 0x10 1304d5c65159SKalle Valo * - PDEV_MASK 1305d5c65159SKalle Valo * Bits 8:15 1306d5c65159SKalle Valo * Purpose: identifies the mask of PDEVs to retrieve stats from 1307d5c65159SKalle Valo * Value: This is a overloaded field, refer to usage and interpretation of 1308d5c65159SKalle Valo * PDEV in interface document. 1309d5c65159SKalle Valo * Bit 8 : Reserved for SOC stats 1310d5c65159SKalle Valo * Bit 9 - 15 : Indicates PDEV_MASK in DBDC 1311d5c65159SKalle Valo * Indicates MACID_MASK in DBS 1312d5c65159SKalle Valo * - STATS_TYPE 1313d5c65159SKalle Valo * Bits 23:16 1314d5c65159SKalle Valo * Purpose: identifies which FW statistics to upload 1315d5c65159SKalle Valo * Value: Defined by htt_dbg_ext_stats_type (see htt_stats.h) 1316d5c65159SKalle Valo * - Reserved 1317d5c65159SKalle Valo * Bits 31:24 1318d5c65159SKalle Valo * - CONFIG_PARAM [0] 1319d5c65159SKalle Valo * Bits 31:0 1320d5c65159SKalle Valo * Purpose: give an opaque configuration value to the specified stats type 1321d5c65159SKalle Valo * Value: stats-type specific configuration value 1322d5c65159SKalle Valo * Refer to htt_stats.h for interpretation for each stats sub_type 1323d5c65159SKalle Valo * - CONFIG_PARAM [1] 1324d5c65159SKalle Valo * Bits 31:0 1325d5c65159SKalle Valo * Purpose: give an opaque configuration value to the specified stats type 1326d5c65159SKalle Valo * Value: stats-type specific configuration value 1327d5c65159SKalle Valo * Refer to htt_stats.h for interpretation for each stats sub_type 1328d5c65159SKalle Valo * - CONFIG_PARAM [2] 1329d5c65159SKalle Valo * Bits 31:0 1330d5c65159SKalle Valo * Purpose: give an opaque configuration value to the specified stats type 1331d5c65159SKalle Valo * Value: stats-type specific configuration value 1332d5c65159SKalle Valo * Refer to htt_stats.h for interpretation for each stats sub_type 1333d5c65159SKalle Valo * - CONFIG_PARAM [3] 1334d5c65159SKalle Valo * Bits 31:0 1335d5c65159SKalle Valo * Purpose: give an opaque configuration value to the specified stats type 1336d5c65159SKalle Valo * Value: stats-type specific configuration value 1337d5c65159SKalle Valo * Refer to htt_stats.h for interpretation for each stats sub_type 1338d5c65159SKalle Valo * - Reserved [31:0] for future use. 1339d5c65159SKalle Valo * - COOKIE_LSBS 1340d5c65159SKalle Valo * Bits 31:0 1341d5c65159SKalle Valo * Purpose: Provide a mechanism to match a target->host stats confirmation 1342d5c65159SKalle Valo * message with its preceding host->target stats request message. 1343d5c65159SKalle Valo * Value: LSBs of the opaque cookie specified by the host-side requestor 1344d5c65159SKalle Valo * - COOKIE_MSBS 1345d5c65159SKalle Valo * Bits 31:0 1346d5c65159SKalle Valo * Purpose: Provide a mechanism to match a target->host stats confirmation 1347d5c65159SKalle Valo * message with its preceding host->target stats request message. 1348d5c65159SKalle Valo * Value: MSBs of the opaque cookie specified by the host-side requestor 1349d5c65159SKalle Valo */ 1350d5c65159SKalle Valo 1351d5c65159SKalle Valo struct htt_ext_stats_cfg_hdr { 1352d5c65159SKalle Valo u8 msg_type; 1353d5c65159SKalle Valo u8 pdev_mask; 1354d5c65159SKalle Valo u8 stats_type; 1355d5c65159SKalle Valo u8 reserved; 1356d5c65159SKalle Valo } __packed; 1357d5c65159SKalle Valo 1358d5c65159SKalle Valo struct htt_ext_stats_cfg_cmd { 1359d5c65159SKalle Valo struct htt_ext_stats_cfg_hdr hdr; 1360d5c65159SKalle Valo u32 cfg_param0; 1361d5c65159SKalle Valo u32 cfg_param1; 1362d5c65159SKalle Valo u32 cfg_param2; 1363d5c65159SKalle Valo u32 cfg_param3; 1364d5c65159SKalle Valo u32 reserved; 1365d5c65159SKalle Valo u32 cookie_lsb; 1366d5c65159SKalle Valo u32 cookie_msb; 1367d5c65159SKalle Valo } __packed; 1368d5c65159SKalle Valo 1369d5c65159SKalle Valo /* htt stats config default params */ 1370d5c65159SKalle Valo #define HTT_STAT_DEFAULT_RESET_START_OFFSET 0 1371d5c65159SKalle Valo #define HTT_STAT_DEFAULT_CFG0_ALL_HWQS 0xffffffff 1372d5c65159SKalle Valo #define HTT_STAT_DEFAULT_CFG0_ALL_TXQS 0xffffffff 1373d5c65159SKalle Valo #define HTT_STAT_DEFAULT_CFG0_ALL_CMDQS 0xffff 1374d5c65159SKalle Valo #define HTT_STAT_DEFAULT_CFG0_ALL_RINGS 0xffff 1375d5c65159SKalle Valo #define HTT_STAT_DEFAULT_CFG0_ACTIVE_PEERS 0xff 137686d4def8SGanesh Sesetti #define HTT_STAT_DEFAULT_CFG0_CCA_CUMULATIVE 0x00 137786d4def8SGanesh Sesetti #define HTT_STAT_DEFAULT_CFG0_ACTIVE_VDEVS 0x00 1378d5c65159SKalle Valo 1379d5c65159SKalle Valo /* HTT_DBG_EXT_STATS_PEER_INFO 1380d5c65159SKalle Valo * PARAMS: 1381d5c65159SKalle Valo * @config_param0: 1382d5c65159SKalle Valo * [Bit0] - [0] for sw_peer_id, [1] for mac_addr based request 1383d5c65159SKalle Valo * [Bit15 : Bit 1] htt_peer_stats_req_mode_t 1384d5c65159SKalle Valo * [Bit31 : Bit16] sw_peer_id 1385d5c65159SKalle Valo * @config_param1: 1386d5c65159SKalle Valo * peer_stats_req_type_mask:32 (enum htt_peer_stats_tlv_enum) 1387d5c65159SKalle Valo * 0 bit htt_peer_stats_cmn_tlv 1388d5c65159SKalle Valo * 1 bit htt_peer_details_tlv 1389d5c65159SKalle Valo * 2 bit htt_tx_peer_rate_stats_tlv 1390d5c65159SKalle Valo * 3 bit htt_rx_peer_rate_stats_tlv 1391d5c65159SKalle Valo * 4 bit htt_tx_tid_stats_tlv/htt_tx_tid_stats_v1_tlv 1392d5c65159SKalle Valo * 5 bit htt_rx_tid_stats_tlv 1393d5c65159SKalle Valo * 6 bit htt_msdu_flow_stats_tlv 1394d5c65159SKalle Valo * @config_param2: [Bit31 : Bit0] mac_addr31to0 1395d5c65159SKalle Valo * @config_param3: [Bit15 : Bit0] mac_addr47to32 1396d5c65159SKalle Valo * [Bit31 : Bit16] reserved 1397d5c65159SKalle Valo */ 1398d5c65159SKalle Valo #define HTT_STAT_PEER_INFO_MAC_ADDR BIT(0) 1399d5c65159SKalle Valo #define HTT_STAT_DEFAULT_PEER_REQ_TYPE 0x7f 1400d5c65159SKalle Valo 1401d5c65159SKalle Valo /* Used to set different configs to the specified stats type.*/ 1402d5c65159SKalle Valo struct htt_ext_stats_cfg_params { 1403d5c65159SKalle Valo u32 cfg0; 1404d5c65159SKalle Valo u32 cfg1; 1405d5c65159SKalle Valo u32 cfg2; 1406d5c65159SKalle Valo u32 cfg3; 1407d5c65159SKalle Valo }; 1408d5c65159SKalle Valo 1409d5c65159SKalle Valo /** 1410d5c65159SKalle Valo * @brief target -> host extended statistics upload 1411d5c65159SKalle Valo * 1412d5c65159SKalle Valo * @details 1413d5c65159SKalle Valo * The following field definitions describe the format of the HTT target 1414d5c65159SKalle Valo * to host stats upload confirmation message. 1415d5c65159SKalle Valo * The message contains a cookie echoed from the HTT host->target stats 1416d5c65159SKalle Valo * upload request, which identifies which request the confirmation is 1417d5c65159SKalle Valo * for, and a single stats can span over multiple HTT stats indication 1418d5c65159SKalle Valo * due to the HTT message size limitation so every HTT ext stats indication 1419d5c65159SKalle Valo * will have tag-length-value stats information elements. 1420d5c65159SKalle Valo * The tag-length header for each HTT stats IND message also includes a 1421d5c65159SKalle Valo * status field, to indicate whether the request for the stat type in 1422d5c65159SKalle Valo * question was fully met, partially met, unable to be met, or invalid 1423d5c65159SKalle Valo * (if the stat type in question is disabled in the target). 1424d5c65159SKalle Valo * A Done bit 1's indicate the end of the of stats info elements. 1425d5c65159SKalle Valo * 1426d5c65159SKalle Valo * 1427d5c65159SKalle Valo * |31 16|15 12|11|10 8|7 5|4 0| 1428d5c65159SKalle Valo * |--------------------------------------------------------------| 1429d5c65159SKalle Valo * | reserved | msg type | 1430d5c65159SKalle Valo * |--------------------------------------------------------------| 1431d5c65159SKalle Valo * | cookie LSBs | 1432d5c65159SKalle Valo * |--------------------------------------------------------------| 1433d5c65159SKalle Valo * | cookie MSBs | 1434d5c65159SKalle Valo * |--------------------------------------------------------------| 1435d5c65159SKalle Valo * | stats entry length | rsvd | D| S | stat type | 1436d5c65159SKalle Valo * |--------------------------------------------------------------| 1437d5c65159SKalle Valo * | type-specific stats info | 1438d5c65159SKalle Valo * | (see htt_stats.h) | 1439d5c65159SKalle Valo * |--------------------------------------------------------------| 1440d5c65159SKalle Valo * Header fields: 1441d5c65159SKalle Valo * - MSG_TYPE 1442d5c65159SKalle Valo * Bits 7:0 1443d5c65159SKalle Valo * Purpose: Identifies this is a extended statistics upload confirmation 1444d5c65159SKalle Valo * message. 1445d5c65159SKalle Valo * Value: 0x1c 1446d5c65159SKalle Valo * - COOKIE_LSBS 1447d5c65159SKalle Valo * Bits 31:0 1448d5c65159SKalle Valo * Purpose: Provide a mechanism to match a target->host stats confirmation 1449d5c65159SKalle Valo * message with its preceding host->target stats request message. 1450d5c65159SKalle Valo * Value: LSBs of the opaque cookie specified by the host-side requestor 1451d5c65159SKalle Valo * - COOKIE_MSBS 1452d5c65159SKalle Valo * Bits 31:0 1453d5c65159SKalle Valo * Purpose: Provide a mechanism to match a target->host stats confirmation 1454d5c65159SKalle Valo * message with its preceding host->target stats request message. 1455d5c65159SKalle Valo * Value: MSBs of the opaque cookie specified by the host-side requestor 1456d5c65159SKalle Valo * 1457d5c65159SKalle Valo * Stats Information Element tag-length header fields: 1458d5c65159SKalle Valo * - STAT_TYPE 1459d5c65159SKalle Valo * Bits 7:0 1460d5c65159SKalle Valo * Purpose: identifies the type of statistics info held in the 1461d5c65159SKalle Valo * following information element 1462d5c65159SKalle Valo * Value: htt_dbg_ext_stats_type 1463d5c65159SKalle Valo * - STATUS 1464d5c65159SKalle Valo * Bits 10:8 1465d5c65159SKalle Valo * Purpose: indicate whether the requested stats are present 1466d5c65159SKalle Valo * Value: htt_dbg_ext_stats_status 1467d5c65159SKalle Valo * - DONE 1468d5c65159SKalle Valo * Bits 11 1469d5c65159SKalle Valo * Purpose: 1470d5c65159SKalle Valo * Indicates the completion of the stats entry, this will be the last 1471d5c65159SKalle Valo * stats conf HTT segment for the requested stats type. 1472d5c65159SKalle Valo * Value: 1473d5c65159SKalle Valo * 0 -> the stats retrieval is ongoing 1474d5c65159SKalle Valo * 1 -> the stats retrieval is complete 1475d5c65159SKalle Valo * - LENGTH 1476d5c65159SKalle Valo * Bits 31:16 1477d5c65159SKalle Valo * Purpose: indicate the stats information size 1478d5c65159SKalle Valo * Value: This field specifies the number of bytes of stats information 1479d5c65159SKalle Valo * that follows the element tag-length header. 1480d5c65159SKalle Valo * It is expected but not required that this length is a multiple of 1481d5c65159SKalle Valo * 4 bytes. 1482d5c65159SKalle Valo */ 1483d5c65159SKalle Valo 1484d5c65159SKalle Valo #define HTT_T2H_EXT_STATS_INFO1_LENGTH GENMASK(31, 16) 1485d5c65159SKalle Valo 1486d5c65159SKalle Valo struct ath11k_htt_extd_stats_msg { 1487d5c65159SKalle Valo u32 info0; 1488d5c65159SKalle Valo u64 cookie; 1489d5c65159SKalle Valo u32 info1; 1490d5c65159SKalle Valo u8 data[0]; 1491d5c65159SKalle Valo } __packed; 1492d5c65159SKalle Valo 1493d5c65159SKalle Valo struct htt_mac_addr { 1494d5c65159SKalle Valo u32 mac_addr_l32; 1495d5c65159SKalle Valo u32 mac_addr_h16; 1496d5c65159SKalle Valo }; 1497d5c65159SKalle Valo 1498d5c65159SKalle Valo static inline void ath11k_dp_get_mac_addr(u32 addr_l32, u16 addr_h16, u8 *addr) 1499d5c65159SKalle Valo { 1500d5c65159SKalle Valo if (IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)) { 1501d5c65159SKalle Valo addr_l32 = swab32(addr_l32); 1502d5c65159SKalle Valo addr_h16 = swab16(addr_h16); 1503d5c65159SKalle Valo } 1504d5c65159SKalle Valo 1505d5c65159SKalle Valo memcpy(addr, &addr_l32, 4); 1506d5c65159SKalle Valo memcpy(addr + 4, &addr_h16, ETH_ALEN - 4); 1507d5c65159SKalle Valo } 1508d5c65159SKalle Valo 1509d5c65159SKalle Valo int ath11k_dp_service_srng(struct ath11k_base *ab, 1510d5c65159SKalle Valo struct ath11k_ext_irq_grp *irq_grp, 1511d5c65159SKalle Valo int budget); 1512d5c65159SKalle Valo int ath11k_dp_htt_connect(struct ath11k_dp *dp); 1513d5c65159SKalle Valo void ath11k_dp_vdev_tx_attach(struct ath11k *ar, struct ath11k_vif *arvif); 1514d5c65159SKalle Valo void ath11k_dp_free(struct ath11k_base *ab); 1515d5c65159SKalle Valo int ath11k_dp_alloc(struct ath11k_base *ab); 1516d5c65159SKalle Valo int ath11k_dp_pdev_alloc(struct ath11k_base *ab); 15179c57d7e3SVasanthakumar Thiagarajan void ath11k_dp_pdev_pre_alloc(struct ath11k_base *ab); 1518d5c65159SKalle Valo void ath11k_dp_pdev_free(struct ath11k_base *ab); 1519d5c65159SKalle Valo int ath11k_dp_tx_htt_srng_setup(struct ath11k_base *ab, u32 ring_id, 1520d5c65159SKalle Valo int mac_id, enum hal_ring_type ring_type); 1521d5c65159SKalle Valo int ath11k_dp_peer_setup(struct ath11k *ar, int vdev_id, const u8 *addr); 1522d5c65159SKalle Valo void ath11k_dp_peer_cleanup(struct ath11k *ar, int vdev_id, const u8 *addr); 1523d5c65159SKalle Valo void ath11k_dp_srng_cleanup(struct ath11k_base *ab, struct dp_srng *ring); 1524d5c65159SKalle Valo int ath11k_dp_srng_setup(struct ath11k_base *ab, struct dp_srng *ring, 1525d5c65159SKalle Valo enum hal_ring_type type, int ring_num, 1526d5c65159SKalle Valo int mac_id, int num_entries); 1527d5c65159SKalle Valo void ath11k_dp_link_desc_cleanup(struct ath11k_base *ab, 1528d5c65159SKalle Valo struct dp_link_desc_bank *desc_bank, 1529d5c65159SKalle Valo u32 ring_type, struct dp_srng *ring); 1530d5c65159SKalle Valo int ath11k_dp_link_desc_setup(struct ath11k_base *ab, 1531d5c65159SKalle Valo struct dp_link_desc_bank *link_desc_banks, 1532d5c65159SKalle Valo u32 ring_type, struct hal_srng *srng, 1533d5c65159SKalle Valo u32 n_link_desc); 1534d5c65159SKalle Valo 1535d5c65159SKalle Valo #endif 1536