xref: /linux/drivers/net/wireless/ath/ath11k/dp.h (revision 74c12ee02af109adcde36ec184fa59c0afb0edaa)
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