xref: /wlan-driver/qca-wifi-host-cmn/dp/wifi3.0/dp_htt.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name #ifndef _DP_HTT_H_
21*5113495bSYour Name #define _DP_HTT_H_
22*5113495bSYour Name 
23*5113495bSYour Name #include <qdf_types.h>
24*5113495bSYour Name #include <qdf_lock.h>
25*5113495bSYour Name #include <qdf_nbuf.h>
26*5113495bSYour Name #include <htc_api.h>
27*5113495bSYour Name 
28*5113495bSYour Name #include "cdp_txrx_cmn_struct.h"
29*5113495bSYour Name #include "dp_types.h"
30*5113495bSYour Name #ifdef HTT_LOGGER
31*5113495bSYour Name #include "dp_htt_logger.h"
32*5113495bSYour Name #else
33*5113495bSYour Name struct htt_logger;
34*5113495bSYour Name static inline
htt_interface_logging_init(struct htt_logger ** htt_logger_handle,struct cdp_ctrl_objmgr_psoc * ctrl_psoc)35*5113495bSYour Name void htt_interface_logging_init(struct htt_logger **htt_logger_handle,
36*5113495bSYour Name 				struct cdp_ctrl_objmgr_psoc *ctrl_psoc)
37*5113495bSYour Name {
38*5113495bSYour Name }
39*5113495bSYour Name 
40*5113495bSYour Name static inline
htt_interface_logging_deinit(struct htt_logger * htt_logger_handle)41*5113495bSYour Name void htt_interface_logging_deinit(struct htt_logger *htt_logger_handle)
42*5113495bSYour Name {
43*5113495bSYour Name }
44*5113495bSYour Name 
45*5113495bSYour Name static inline
htt_command_record(struct htt_logger * h,uint8_t msg_type,uint8_t * msg_data)46*5113495bSYour Name int htt_command_record(struct htt_logger *h, uint8_t msg_type,
47*5113495bSYour Name 		       uint8_t *msg_data)
48*5113495bSYour Name {
49*5113495bSYour Name 	return 0;
50*5113495bSYour Name }
51*5113495bSYour Name 
52*5113495bSYour Name static inline
htt_event_record(struct htt_logger * h,uint8_t msg_type,uint8_t * msg_data)53*5113495bSYour Name int htt_event_record(struct htt_logger *h, uint8_t msg_type,
54*5113495bSYour Name 		     uint8_t *msg_data)
55*5113495bSYour Name {
56*5113495bSYour Name 	return 0;
57*5113495bSYour Name }
58*5113495bSYour Name 
59*5113495bSYour Name static inline
htt_wbm_event_record(struct htt_logger * h,uint8_t tx_status,uint8_t * msg_data)60*5113495bSYour Name int htt_wbm_event_record(struct htt_logger *h, uint8_t tx_status,
61*5113495bSYour Name 			 uint8_t *msg_data)
62*5113495bSYour Name {
63*5113495bSYour Name 	return 0;
64*5113495bSYour Name }
65*5113495bSYour Name 
66*5113495bSYour Name #endif
67*5113495bSYour Name 
68*5113495bSYour Name #define HTT_MGMT_CTRL_TLV_HDR_RESERVERD_LEN 16
69*5113495bSYour Name #define HTT_TLV_HDR_LEN HTT_T2H_EXT_STATS_CONF_TLV_HDR_SIZE
70*5113495bSYour Name #define HTT_SHIFT_UPPER_TIMESTAMP 32
71*5113495bSYour Name #define HTT_MASK_UPPER_TIMESTAMP 0xFFFFFFFF00000000
72*5113495bSYour Name 
73*5113495bSYour Name /**
74*5113495bSYour Name  * htt_htc_pkt_pool_free() - Free HTC packet pool
75*5113495bSYour Name  * @soc:	HTT SOC handle
76*5113495bSYour Name  */
77*5113495bSYour Name void htt_htc_pkt_pool_free(struct htt_soc *soc);
78*5113495bSYour Name 
79*5113495bSYour Name #define HTT_TX_MUTEX_TYPE qdf_spinlock_t
80*5113495bSYour Name 
81*5113495bSYour Name #define HTT_TX_MUTEX_INIT(_mutex)				\
82*5113495bSYour Name 	qdf_spinlock_create(_mutex)
83*5113495bSYour Name 
84*5113495bSYour Name #define HTT_TX_MUTEX_ACQUIRE(_mutex)			\
85*5113495bSYour Name 	qdf_spin_lock_bh(_mutex)
86*5113495bSYour Name 
87*5113495bSYour Name #define HTT_TX_MUTEX_RELEASE(_mutex)			\
88*5113495bSYour Name 	qdf_spin_unlock_bh(_mutex)
89*5113495bSYour Name 
90*5113495bSYour Name #define HTT_TX_MUTEX_DESTROY(_mutex)			\
91*5113495bSYour Name 	qdf_spinlock_destroy(_mutex)
92*5113495bSYour Name 
93*5113495bSYour Name #define DP_HTT_MAX_SEND_QUEUE_DEPTH 64
94*5113495bSYour Name 
95*5113495bSYour Name #ifndef HTT_MAC_ADDR_LEN
96*5113495bSYour Name #define HTT_MAC_ADDR_LEN 6
97*5113495bSYour Name #endif
98*5113495bSYour Name 
99*5113495bSYour Name #define HTT_FRAMECTRL_TYPE_MASK 0x0C
100*5113495bSYour Name #define HTT_GET_FRAME_CTRL_TYPE(_val)	\
101*5113495bSYour Name 		(((_val) & HTT_FRAMECTRL_TYPE_MASK) >> 2)
102*5113495bSYour Name #define FRAME_CTRL_TYPE_MGMT	0x0
103*5113495bSYour Name #define FRAME_CTRL_TYPE_CTRL	0x1
104*5113495bSYour Name #define FRAME_CTRL_TYPE_DATA	0x2
105*5113495bSYour Name #define FRAME_CTRL_TYPE_RESV	0x3
106*5113495bSYour Name 
107*5113495bSYour Name #define HTT_FRAMECTRL_DATATYPE 0x08
108*5113495bSYour Name #define HTT_PPDU_DESC_MAX_DEPTH 16
109*5113495bSYour Name #define DP_SCAN_PEER_ID 0xFFFF
110*5113495bSYour Name 
111*5113495bSYour Name #define HTT_RX_DELBA_WIN_SIZE_M    0x0000FC00
112*5113495bSYour Name #define HTT_RX_DELBA_WIN_SIZE_S    10
113*5113495bSYour Name 
114*5113495bSYour Name #define HTT_RX_DELBA_WIN_SIZE_GET(word)		\
115*5113495bSYour Name 	(((word) & HTT_RX_DELBA_WIN_SIZE_M) >> HTT_RX_DELBA_WIN_SIZE_S)
116*5113495bSYour Name 
117*5113495bSYour Name /*
118*5113495bSYour Name  * Set the base misclist size to HTT copy engine source ring size
119*5113495bSYour Name  * to guarantee that a packet on the misclist won't be freed while it
120*5113495bSYour Name  * is sitting in the copy engine.
121*5113495bSYour Name  */
122*5113495bSYour Name #define DP_HTT_HTC_PKT_MISCLIST_SIZE          2048
123*5113495bSYour Name #define HTT_T2H_MAX_MSG_SIZE 2048
124*5113495bSYour Name 
125*5113495bSYour Name #define HTT_T2H_EXT_STATS_TLV_START_OFFSET    3
126*5113495bSYour Name 
127*5113495bSYour Name /*
128*5113495bSYour Name  * Below offset are based on htt_ppdu_stats_common_tlv
129*5113495bSYour Name  * defined in htt_ppdu_stats.h
130*5113495bSYour Name  */
131*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_TLV_HDR_OFFSET 0
132*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_PPDU_ID_OFFSET 1
133*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_RING_ID_SCH_CMD_ID_OFFSET 2
134*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_QTYPE_FRM_TYPE_OFFSET 3
135*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_CHAIN_MASK_OFFSET 4
136*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_FES_DUR_US_OFFSET 5
137*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_SCH_EVAL_START_TSTMP_L32_US_OFFSET 6
138*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_SCH_END_TSTMP_US_OFFSET 7
139*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_START_TSTMP_L32_US_OFFSET 8
140*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_CHAN_MHZ_PHY_MODE_OFFSET 9
141*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_CCA_DELTA_TIME_US_OFFSET 10
142*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_RXFRM_DELTA_TIME_US_OFFSET 11
143*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_TXFRM_DELTA_TIME_US_OFFSET 12
144*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_RESV_NUM_UL_BEAM_OFFSET 13
145*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_START_TSTMP_U32_US_OFFSET 14
146*5113495bSYour Name #define HTT_PPDU_STATS_COMMON_TLV_BSSCOLOR_OBSS_PSR_OFFSET 15
147*5113495bSYour Name 
148*5113495bSYour Name /* get index for field in htt_ppdu_stats_common_tlv */
149*5113495bSYour Name #define HTT_GET_STATS_CMN_INDEX(index) \
150*5113495bSYour Name 	HTT_PPDU_STATS_COMMON_TLV_##index##_OFFSET
151*5113495bSYour Name 
152*5113495bSYour Name #define HTT_VDEV_STATS_TLV_SOC_DROP_CNT_OFFSET        1
153*5113495bSYour Name 
154*5113495bSYour Name #define HTT_VDEV_STATS_TLV_HDR_OFFSET                 0
155*5113495bSYour Name #define HTT_VDEV_STATS_TLV_VDEV_ID_OFFSET             1
156*5113495bSYour Name #define HTT_VDEV_STATS_TLV_RX_BYTE_CNT_OFFSET         2
157*5113495bSYour Name #define HTT_VDEV_STATS_TLV_RX_PKT_CNT_OFFSET          4
158*5113495bSYour Name #define HTT_VDEV_STATS_TLV_TX_SUCCESS_BYTE_CNT_OFFSET 6
159*5113495bSYour Name #define HTT_VDEV_STATS_TLV_TX_SUCCESS_PKT_CNT_OFFSET  8
160*5113495bSYour Name #define HTT_VDEV_STATS_TLV_TX_RETRY_PKT_CNT_OFFSET    10
161*5113495bSYour Name #define HTT_VDEV_STATS_TLV_TX_DROP_PKT_CNT_OFFSET     12
162*5113495bSYour Name #define HTT_VDEV_STATS_TLV_TX_AGE_OUT_PKT_CNT_OFFSET  14
163*5113495bSYour Name #define HTT_VDEV_STATS_TLV_TX_RETRY_BYTE_CNT_OFFSET   16
164*5113495bSYour Name #define HTT_VDEV_STATS_TLV_TX_DROP_BYTE_CNT_OFFSET    18
165*5113495bSYour Name #define HTT_VDEV_STATS_TLV_TX_AGE_OUT_BYTE_CNT_OFFSET 20
166*5113495bSYour Name #define HTT_VDEV_STATS_TLV_TX_TQM_BYPASS_PKT_CNT_OFFSET  22
167*5113495bSYour Name #define HTT_VDEV_STATS_TLV_TX_TQM_BYPASS_BYTE_CNT_OFFSET 24
168*5113495bSYour Name 
169*5113495bSYour Name #define HTT_VDEV_STATS_GET_INDEX(index) \
170*5113495bSYour Name 	HTT_VDEV_STATS_TLV_##index##_OFFSET
171*5113495bSYour Name 
172*5113495bSYour Name #define HTT_VDEV_STATS_U32_SHIFT 0x20
173*5113495bSYour Name #define HTT_VDEV_STATS_U32_MASK  0xFFFFFFFF00000000
174*5113495bSYour Name #define HTT_VDEV_STATS_L32_MASK  0x00000000FFFFFFFF
175*5113495bSYour Name 
176*5113495bSYour Name #define HTT_VDEV_GET_STATS_U64(msg_word) \
177*5113495bSYour Name 	(((((uint64_t)(*(((uint32_t *)msg_word) + 1))) & HTT_VDEV_STATS_L32_MASK) << \
178*5113495bSYour Name 	HTT_VDEV_STATS_U32_SHIFT) | ((*(uint32_t *)msg_word) & HTT_VDEV_STATS_L32_MASK))
179*5113495bSYour Name 
180*5113495bSYour Name #define HTT_VDEV_GET_STATS_U32(msg_word) \
181*5113495bSYour Name 	((*(uint32_t *)msg_word) & HTT_VDEV_STATS_L32_MASK)
182*5113495bSYour Name 
183*5113495bSYour Name #define MAX_SCHED_STARVE 100000
184*5113495bSYour Name #define WRAP_DROP_TSF_DELTA 10000
185*5113495bSYour Name #define MAX_TSF_32 0xFFFFFFFF
186*5113495bSYour Name 
187*5113495bSYour Name #define dp_htt_alert(params...) QDF_TRACE_FATAL(QDF_MODULE_ID_DP_HTT, params)
188*5113495bSYour Name #define dp_htt_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_DP_HTT, params)
189*5113495bSYour Name #define dp_htt_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_DP_HTT, params)
190*5113495bSYour Name #define dp_htt_info(params...) \
191*5113495bSYour Name 	__QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_DP_HTT, ## params)
192*5113495bSYour Name #define dp_htt_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_DP_HTT, params)
193*5113495bSYour Name 
194*5113495bSYour Name #define dp_htt_tx_stats_alert(params...) QDF_TRACE_FATAL(QDF_MODULE_ID_DP_HTT_TX_STATS, params)
195*5113495bSYour Name #define dp_htt_tx_stats_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_DP_HTT_TX_STATS, params)
196*5113495bSYour Name #define dp_htt_tx_stats_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_DP_HTT_TX_STATS, params)
197*5113495bSYour Name #define dp_htt_tx_stats_info(params...) \
198*5113495bSYour Name 	__QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_DP_HTT_TX_STATS, ## params)
199*5113495bSYour Name #define dp_htt_tx_stats_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_DP_HTT_TX_STATS, params)
200*5113495bSYour Name 
201*5113495bSYour Name #define RXMON_GLOBAL_EN_SHIFT 28
202*5113495bSYour Name #ifdef IPA_OPT_WIFI_DP
203*5113495bSYour Name #define MAX_RESERVE_FAIL_ATTEMPT 5
204*5113495bSYour Name #endif
205*5113495bSYour Name 
206*5113495bSYour Name /**
207*5113495bSYour Name  * enum dp_full_mon_config - enum to enable/disable full monitor mode
208*5113495bSYour Name  *
209*5113495bSYour Name  * @DP_FULL_MON_DISABLE: Disable full monitor mode
210*5113495bSYour Name  * @DP_FULL_MON_ENABLE: Enable full monitor mode
211*5113495bSYour Name  */
212*5113495bSYour Name enum dp_full_mon_config {
213*5113495bSYour Name 	DP_FULL_MON_DISABLE,
214*5113495bSYour Name 	DP_FULL_MON_ENABLE,
215*5113495bSYour Name };
216*5113495bSYour Name 
217*5113495bSYour Name struct dp_htt_htc_pkt {
218*5113495bSYour Name 	void *soc_ctxt;
219*5113495bSYour Name 	qdf_dma_addr_t nbuf_paddr;
220*5113495bSYour Name 	HTC_PACKET htc_pkt;
221*5113495bSYour Name };
222*5113495bSYour Name 
223*5113495bSYour Name struct dp_htt_htc_pkt_union {
224*5113495bSYour Name 	union {
225*5113495bSYour Name 		struct dp_htt_htc_pkt pkt;
226*5113495bSYour Name 		struct dp_htt_htc_pkt_union *next;
227*5113495bSYour Name 	} u;
228*5113495bSYour Name };
229*5113495bSYour Name 
230*5113495bSYour Name struct bp_handler {
231*5113495bSYour Name 	unsigned long bp_start_tt;
232*5113495bSYour Name 	unsigned long bp_last_tt;
233*5113495bSYour Name 	unsigned long bp_duration;
234*5113495bSYour Name 	unsigned long bp_counter;
235*5113495bSYour Name };
236*5113495bSYour Name 
237*5113495bSYour Name struct dp_htt_timestamp {
238*5113495bSYour Name 	struct bp_handler *umac_path;
239*5113495bSYour Name 	struct bp_handler *lmac_path;
240*5113495bSYour Name };
241*5113495bSYour Name 
242*5113495bSYour Name struct htt_soc {
243*5113495bSYour Name 	struct cdp_ctrl_objmgr_psoc *ctrl_psoc;
244*5113495bSYour Name 	struct dp_soc *dp_soc;
245*5113495bSYour Name 	hal_soc_handle_t hal_soc;
246*5113495bSYour Name 	struct dp_htt_timestamp pdevid_tt[MAX_PDEV_CNT];
247*5113495bSYour Name 	/* htt_logger handle */
248*5113495bSYour Name 	struct htt_logger *htt_logger_handle;
249*5113495bSYour Name 	HTC_HANDLE htc_soc;
250*5113495bSYour Name 	qdf_device_t osdev;
251*5113495bSYour Name 	HTC_ENDPOINT_ID htc_endpoint;
252*5113495bSYour Name 	struct dp_htt_htc_pkt_union *htt_htc_pkt_freelist;
253*5113495bSYour Name 	struct dp_htt_htc_pkt_union *htt_htc_pkt_misclist;
254*5113495bSYour Name 	struct {
255*5113495bSYour Name 		u_int8_t major;
256*5113495bSYour Name 		u_int8_t minor;
257*5113495bSYour Name 	} tgt_ver;
258*5113495bSYour Name 	struct {
259*5113495bSYour Name 		u_int8_t major;
260*5113495bSYour Name 		u_int8_t minor;
261*5113495bSYour Name 	} wifi_ip_ver;
262*5113495bSYour Name 
263*5113495bSYour Name 	struct {
264*5113495bSYour Name 		int htc_err_cnt;
265*5113495bSYour Name 		int htc_pkt_free;
266*5113495bSYour Name 		int skip_count;
267*5113495bSYour Name 		int fail_count;
268*5113495bSYour Name 		/* rtpm put skip count for ver req msg */
269*5113495bSYour Name 		int htt_ver_req_put_skip;
270*5113495bSYour Name 		int reserve_fail_cnt;
271*5113495bSYour Name 		int abort_count;
272*5113495bSYour Name 	} stats;
273*5113495bSYour Name 
274*5113495bSYour Name 	HTT_TX_MUTEX_TYPE htt_tx_mutex;
275*5113495bSYour Name };
276*5113495bSYour Name 
277*5113495bSYour Name #ifdef WLAN_PKT_CAPTURE_TX_2_0
278*5113495bSYour Name /**
279*5113495bSYour Name  * struct dp_tx_mon_downstream_tlv_config - Enable/Disable TxMon
280*5113495bSYour Name  * downstream TLVs
281*5113495bSYour Name  * @tx_fes_setup: TX_FES_SETUP TLV
282*5113495bSYour Name  * @tx_peer_entry: TX_PEER_ENTRY TLV
283*5113495bSYour Name  * @tx_queue_extension: TX_QUEUE_EXTENSION TLV
284*5113495bSYour Name  * @tx_last_mpdu_end: TX_LAST_MPDU_END TLV
285*5113495bSYour Name  * @tx_last_mpdu_fetched: TX_LAST_MPDU_FETCHED TLV
286*5113495bSYour Name  * @tx_data_sync: TX_DATA_SYNC TLV
287*5113495bSYour Name  * @pcu_ppdu_setup_init: PCU_PPDU_SETUP_INIT TLV
288*5113495bSYour Name  * @fw2s_mon: FW2S_MON TLV
289*5113495bSYour Name  * @tx_loopback_setup: TX_LOOPBACK_SETUP TLV
290*5113495bSYour Name  * @sch_critical_tlv_ref: SCH_CRITICAL_TLV_REF TLV
291*5113495bSYour Name  * @ndp_preamble_done: NDP_PREAMBLE_DONE TLV
292*5113495bSYour Name  * @tx_raw_frame_setup: TX_RAW_OR_NATIVE_FRAME_SETUP TLV
293*5113495bSYour Name  * @txpcu_user_setup: TXPCU_USER_SETUP TLV
294*5113495bSYour Name  * @rxpcu_setup: RXPCU_SETUP TLV
295*5113495bSYour Name  * @rxpcu_setup_complete: RXPCU_SETUP_COMPLETE TLV
296*5113495bSYour Name  * @coex_tx_req: COEX_TX_REQ TLV
297*5113495bSYour Name  * @rxpcu_user_setup: RXPCU_USER_SETUP TLV
298*5113495bSYour Name  * @rxpcu_user_setup_ext: RXPCU_USER_SETUP_EXT TLV
299*5113495bSYour Name  * @wur_data: WUR_DATA TLV
300*5113495bSYour Name  * @tqm_mpdu_global_start: TQM_MPDU_GLOBAL_START
301*5113495bSYour Name  * @tx_fes_setup_complete: TX_FES_SETUP_COMPLETE TLV
302*5113495bSYour Name  * @scheduler_end: SCHEDULER_END TLV
303*5113495bSYour Name  * @sch_wait_instr_tx_path: SCH_WAIT_INSTR_TX_PATH TLV
304*5113495bSYour Name  *
305*5113495bSYour Name  */
306*5113495bSYour Name struct dp_tx_mon_downstream_tlv_config {
307*5113495bSYour Name 	uint32_t tx_fes_setup:1,
308*5113495bSYour Name 		 tx_peer_entry:1,
309*5113495bSYour Name 		 tx_queue_extension:1,
310*5113495bSYour Name 		 tx_last_mpdu_end:1,
311*5113495bSYour Name 		 tx_last_mpdu_fetched:1,
312*5113495bSYour Name 		 tx_data_sync:1,
313*5113495bSYour Name 		 pcu_ppdu_setup_init:1,
314*5113495bSYour Name 		 fw2s_mon:1,
315*5113495bSYour Name 		 tx_loopback_setup:1,
316*5113495bSYour Name 		 sch_critical_tlv_ref:1,
317*5113495bSYour Name 		 ndp_preamble_done:1,
318*5113495bSYour Name 		 tx_raw_frame_setup:1,
319*5113495bSYour Name 		 txpcu_user_setup:1,
320*5113495bSYour Name 		 rxpcu_setup:1,
321*5113495bSYour Name 		 rxpcu_setup_complete:1,
322*5113495bSYour Name 		 coex_tx_req:1,
323*5113495bSYour Name 		 rxpcu_user_setup:1,
324*5113495bSYour Name 		 rxpcu_user_setup_ext:1,
325*5113495bSYour Name 		 wur_data:1,
326*5113495bSYour Name 		 tqm_mpdu_global_start:1,
327*5113495bSYour Name 		 tx_fes_setup_complete:1,
328*5113495bSYour Name 		 scheduler_end:1,
329*5113495bSYour Name 		 sch_wait_instr_tx_path:1;
330*5113495bSYour Name };
331*5113495bSYour Name 
332*5113495bSYour Name /**
333*5113495bSYour Name  * struct dp_tx_mon_upstream_tlv_config - Enable/Disable TxMon
334*5113495bSYour Name  * upstream TLVs
335*5113495bSYour Name  * @rx_response_required_info: RX_RESPONSE_REQUIRED_INFO
336*5113495bSYour Name  * TLV
337*5113495bSYour Name  * @response_start_status: RESPONSE_START_STATUS TLV
338*5113495bSYour Name  * @response_end_status: RESPONSE_END_STATUS TLV
339*5113495bSYour Name  * @tx_fes_status_start: TX_FES_STATUS_START TLV
340*5113495bSYour Name  * @tx_fes_status_end: TX_FES_STATUS_END TLV
341*5113495bSYour Name  * @tx_fes_status_start_ppdu: TX_FES_STATUS_START_PPDU TLV
342*5113495bSYour Name  * @tx_fes_status_user_ppdu: TX_FES_STATUS_USER_PPDU TLV
343*5113495bSYour Name  * @tx_fes_status_ack_or_ba: TX_FES_STATUS_ACK_OR_BA TLV
344*5113495bSYour Name  * @tx_fes_status_1k_ba: TX_FES_STATUS_1K_BA TLV
345*5113495bSYour Name  * @tx_fes_status_start_prot: TX_FES_STATUS_START_PROTO TLV
346*5113495bSYour Name  * @tx_fes_status_prot: TX_FES_STATUS_PROTO TLV
347*5113495bSYour Name  * @tx_fes_status_user_response: TX_FES_STATUS_USER_RESPONSE TLV
348*5113495bSYour Name  * @rx_frame_bitmap_ack: RX_FRAME_BITMAP_ACK TLV
349*5113495bSYour Name  * @rx_frame_1k_bitmap_ack: RX_FRAME_1K_BITMAP_ACK TLV
350*5113495bSYour Name  * @coex_tx_status: COEX_TX_STATUS TLV
351*5113495bSYour Name  * @received_response_info: RECEIVED_RESPONSE_INFO TLV
352*5113495bSYour Name  * @received_response_info_p2: RECEIVED_RESPONSE_INFO_PART2 TLV
353*5113495bSYour Name  * @ofdma_trigger_details: OFDMA_TRIGGER_DETAILS
354*5113495bSYour Name  * @received_trigger_info: RECEIVED_TRIGGER_INFO
355*5113495bSYour Name  * @pdg_tx_request: PDG_TX_REQUEST
356*5113495bSYour Name  * @pdg_response: PDG_RESPONSE
357*5113495bSYour Name  * @pdg_trig_response: PDG_TRIG_RESPONSE
358*5113495bSYour Name  * @trigger_response_tx_done: TRIGGER_RESPONSE_TX_DONE
359*5113495bSYour Name  * @prot_tx_end: PROT_TX_END
360*5113495bSYour Name  * @ppdu_tx_end: PPDU_TX_END
361*5113495bSYour Name  * @r2r_status_end: R2R_STATUS_END
362*5113495bSYour Name  * @flush_req: FLUSH_REQ
363*5113495bSYour Name  * @mactx_phy_desc: MACTX_PHY_DESC
364*5113495bSYour Name  * @mactx_user_desc_cmn: MACTX_USER_DESC_COMMON
365*5113495bSYour Name  * @mactx_user_desc_per_usr: MACTX_USER_DESC_PER_USER
366*5113495bSYour Name  * @tqm_acked_1k_mpdu: TQM_ACKED_1K_MPDU
367*5113495bSYour Name  * @tqm_acked_mpdu: TQM_ACKED_MPDU
368*5113495bSYour Name  * @tqm_update_tx_mpdu_count: TQM_UPDATE_TX_MPDU_COUNT
369*5113495bSYour Name  * @phytx_ppdu_header_info_request: PHYTX_PPDU_HEADER_INFO_REQUEST
370*5113495bSYour Name  * @u_sig_eht_su_mu: U_SIG_EHT_SU_MU
371*5113495bSYour Name  * @u_sig_eht_su: U_SIG_EHT_SU
372*5113495bSYour Name  * @u_sig_eht_tb: U_SIG_EHT_TB
373*5113495bSYour Name  * @eht_sig_usr_su: EHT_SIG_USR_SU
374*5113495bSYour Name  * @eht_sig_usr_mu_mimo: EHT_SIG_USR_MU_MIMO
375*5113495bSYour Name  * @eht_sig_usr_ofdma: EHT_SIG_USR_MU_MIMO
376*5113495bSYour Name  * @he_sig_a_su: HE_SIG_A_SU
377*5113495bSYour Name  * @he_sig_a_mu_dl: HE_SIG_A_MU_DL
378*5113495bSYour Name  * @he_sig_a_mu_ul: HE_SIG_A_MU_UL
379*5113495bSYour Name  * @he_sig_b1_mu: HE_SIG_B1_MU
380*5113495bSYour Name  * @he_sig_b2_mu: HE_SIG_B2_MU
381*5113495bSYour Name  * @he_sig_b2_ofdma: HE_SIG_B2_OFDMA
382*5113495bSYour Name  * @vht_sig_b_mu160: VHT_SIG_B_MU160
383*5113495bSYour Name  * @vht_sig_b_mu80: VHT_SIG_B_MU80
384*5113495bSYour Name  * @vht_sig_b_mu40: VHT_SIG_B_MU40
385*5113495bSYour Name  * @vht_sig_b_mu20: VHT_SIG_B_MU20
386*5113495bSYour Name  * @vht_sig_b_su160: VHT_SIG_B_SU160
387*5113495bSYour Name  * @vht_sig_b_su80: VHT_SIG_B_SU80
388*5113495bSYour Name  * @vht_sig_b_su40: VHT_SIG_B_SU40
389*5113495bSYour Name  * @vht_sig_b_su20: VHT_SIG_B_SU20
390*5113495bSYour Name  * @vht_sig_a: VHT_SIG_A
391*5113495bSYour Name  * @ht_sig: HT_SIG
392*5113495bSYour Name  * @l_sig_b: L_SIG_B
393*5113495bSYour Name  * @l_sig_a: L_SIG_A
394*5113495bSYour Name  * @tx_service: TX_SERVICE
395*5113495bSYour Name  * @txpcu_buf_status: TXPCU_BUFFER_STATUS
396*5113495bSYour Name  * @txpcu_user_buf_status: TXPCU_USER_BUFFER_STATUS
397*5113495bSYour Name  * @txdma_stop_request: TXDMA_STOP_REQUEST
398*5113495bSYour Name  * @expected_response: EXPECTED_RESPONSE
399*5113495bSYour Name  * @tx_mpdu_count_transfer_end: TX_MPDU_COUNT_TRANSFER_END
400*5113495bSYour Name  * @rx_trig_info: RX_TRIG_INFO
401*5113495bSYour Name  * @rxpcu_tx_setup_clear: RXPCU_TX_SETUP_CLEAR
402*5113495bSYour Name  * @rx_frame_bitmap_req: RX_FRAME_BITMAP_REQ
403*5113495bSYour Name  * @rx_phy_sleep: RX_PHY_SLEEP
404*5113495bSYour Name  * @txpcu_preamble_done: TXPCU_PREAMBLE_DONE
405*5113495bSYour Name  * @txpcu_phytx_debug32: TXPCU_PHYTX_DEBUG32
406*5113495bSYour Name  * @txpcu_phytx_other_transmit_info32: TXPCU_PHYTX_OTHER_TRANSMIT_INFO32
407*5113495bSYour Name  * @rx_ppdu_noack_report: RX_PPDU_NO_ACK_REPORT
408*5113495bSYour Name  * @rx_ppdu_ack_report: RX_PPDU_ACK_REPORT
409*5113495bSYour Name  * @coex_rx_status: COEX_RX_STATUS
410*5113495bSYour Name  * @rx_start_param: RX_START_PARAM
411*5113495bSYour Name  * @tx_cbf_info: TX_CBF_INFO
412*5113495bSYour Name  * @rxpcu_early_rx_indication: RXPCU_EARLY_RX_INDICATION
413*5113495bSYour Name  * @received_response_user_7_0: RECEIVED_RESPONSE_USER_7_0
414*5113495bSYour Name  * @received_response_user_15_8: RECEIVED_RESPONSE_USER_15_8
415*5113495bSYour Name  * @received_response_user_23_16: RECEIVED_RESPONSE_USER_23_16
416*5113495bSYour Name  * @received_response_user_31_24: RECEIVED_RESPONSE_USER_31_24
417*5113495bSYour Name  * @received_response_user_36_32: RECEIVED_RESPONSE_USER_36_32
418*5113495bSYour Name  * @rx_pm_info: RX_PM_INFO
419*5113495bSYour Name  * @rx_preamble: RX_PREAMBLE
420*5113495bSYour Name  * @others: OTHERS
421*5113495bSYour Name  * @mactx_pre_phy_desc: MACTX_PRE_PHY_DESC
422*5113495bSYour Name  *
423*5113495bSYour Name  */
424*5113495bSYour Name struct dp_tx_mon_upstream_tlv_config {
425*5113495bSYour Name 	uint32_t rx_response_required_info:1,
426*5113495bSYour Name 		 response_start_status:1,
427*5113495bSYour Name 		 response_end_status:1,
428*5113495bSYour Name 		 tx_fes_status_start:1,
429*5113495bSYour Name 		 tx_fes_status_end:1,
430*5113495bSYour Name 		 tx_fes_status_start_ppdu:1,
431*5113495bSYour Name 		 tx_fes_status_user_ppdu:1,
432*5113495bSYour Name 		 tx_fes_status_ack_or_ba:1,
433*5113495bSYour Name 		 tx_fes_status_1k_ba:1,
434*5113495bSYour Name 		 tx_fes_status_start_prot:1,
435*5113495bSYour Name 		 tx_fes_status_prot:1,
436*5113495bSYour Name 		 tx_fes_status_user_response:1,
437*5113495bSYour Name 		 rx_frame_bitmap_ack:1,
438*5113495bSYour Name 		 rx_frame_1k_bitmap_ack:1,
439*5113495bSYour Name 		 coex_tx_status:1,
440*5113495bSYour Name 		 received_response_info:1,
441*5113495bSYour Name 		 received_response_info_p2:1,
442*5113495bSYour Name 		 ofdma_trigger_details:1,
443*5113495bSYour Name 		 received_trigger_info:1,
444*5113495bSYour Name 		 pdg_tx_request:1,
445*5113495bSYour Name 		 pdg_response:1,
446*5113495bSYour Name 		 pdg_trig_response:1,
447*5113495bSYour Name 		 trigger_response_tx_done:1,
448*5113495bSYour Name 		 prot_tx_end:1,
449*5113495bSYour Name 		 ppdu_tx_end:1,
450*5113495bSYour Name 		 r2r_status_end:1,
451*5113495bSYour Name 		 flush_req:1,
452*5113495bSYour Name 		 mactx_phy_desc:1,
453*5113495bSYour Name 		 mactx_user_desc_cmn:1,
454*5113495bSYour Name 		 mactx_user_desc_per_usr:1;
455*5113495bSYour Name 	uint32_t tqm_acked_1k_mpdu:1,
456*5113495bSYour Name 		 tqm_acked_mpdu:1,
457*5113495bSYour Name 		 tqm_update_tx_mpdu_count:1,
458*5113495bSYour Name 		 phytx_ppdu_header_info_request:1,
459*5113495bSYour Name 		 u_sig_eht_su_mu:1,
460*5113495bSYour Name 		 u_sig_eht_su:1,
461*5113495bSYour Name 		 u_sig_eht_tb:1,
462*5113495bSYour Name 		 eht_sig_usr_su:1,
463*5113495bSYour Name 		 eht_sig_usr_mu_mimo:1,
464*5113495bSYour Name 		 eht_sig_usr_ofdma:1,
465*5113495bSYour Name 		 he_sig_a_su:1,
466*5113495bSYour Name 		 he_sig_a_mu_dl:1,
467*5113495bSYour Name 		 he_sig_a_mu_ul:1,
468*5113495bSYour Name 		 he_sig_b1_mu:1,
469*5113495bSYour Name 		 he_sig_b2_mu:1,
470*5113495bSYour Name 		 he_sig_b2_ofdma:1,
471*5113495bSYour Name 		 vht_sig_b_mu160:1,
472*5113495bSYour Name 		 vht_sig_b_mu80:1,
473*5113495bSYour Name 		 vht_sig_b_mu40:1,
474*5113495bSYour Name 		 vht_sig_b_mu20:1,
475*5113495bSYour Name 		 vht_sig_b_su160:1,
476*5113495bSYour Name 		 vht_sig_b_su80:1,
477*5113495bSYour Name 		 vht_sig_b_su40:1,
478*5113495bSYour Name 		 vht_sig_b_su20:1,
479*5113495bSYour Name 		 vht_sig_a:1,
480*5113495bSYour Name 		 ht_sig:1,
481*5113495bSYour Name 		 l_sig_b:1,
482*5113495bSYour Name 		 l_sig_a:1,
483*5113495bSYour Name 		 tx_service:1;
484*5113495bSYour Name 	uint32_t txpcu_buf_status:1,
485*5113495bSYour Name 		 txpcu_user_buf_status:1,
486*5113495bSYour Name 		 txdma_stop_request:1,
487*5113495bSYour Name 		 expected_response:1,
488*5113495bSYour Name 		 tx_mpdu_count_transfer_end:1,
489*5113495bSYour Name 		 rx_trig_info:1,
490*5113495bSYour Name 		 rxpcu_tx_setup_clear:1,
491*5113495bSYour Name 		 rx_frame_bitmap_req:1,
492*5113495bSYour Name 		 rx_phy_sleep:1,
493*5113495bSYour Name 		 txpcu_preamble_done:1,
494*5113495bSYour Name 		 txpcu_phytx_debug32:1,
495*5113495bSYour Name 		 txpcu_phytx_other_transmit_info32:1,
496*5113495bSYour Name 		 rx_ppdu_noack_report:1,
497*5113495bSYour Name 		 rx_ppdu_ack_report:1,
498*5113495bSYour Name 		 coex_rx_status:1,
499*5113495bSYour Name 		 rx_start_param:1,
500*5113495bSYour Name 		 tx_cbf_info:1,
501*5113495bSYour Name 		 rxpcu_early_rx_indication:1,
502*5113495bSYour Name 		 received_response_user_7_0:1,
503*5113495bSYour Name 		 received_response_user_15_8:1,
504*5113495bSYour Name 		 received_response_user_23_16:1,
505*5113495bSYour Name 		 received_response_user_31_24:1,
506*5113495bSYour Name 		 received_response_user_36_32:1,
507*5113495bSYour Name 		 rx_pm_info:1,
508*5113495bSYour Name 		 rx_preamble:1,
509*5113495bSYour Name 		 others:1,
510*5113495bSYour Name 		 mactx_pre_phy_desc:1;
511*5113495bSYour Name };
512*5113495bSYour Name 
513*5113495bSYour Name /**
514*5113495bSYour Name  * struct dp_tx_mon_wordmask_config - Tx monitor word mask
515*5113495bSYour Name  * @pcu_ppdu_setup_init: PCU_PPDU_SETUP TLV word mask
516*5113495bSYour Name  * @tx_peer_entry: TX_PEER_ENTRY TLV word mask
517*5113495bSYour Name  * @tx_queue_ext: TX_QUEUE_EXTENSION TLV word mask
518*5113495bSYour Name  * @tx_fes_status_end: TX_FES_STATUS_END TLV word mask
519*5113495bSYour Name  * @response_end_status: RESPONSE_END_STATUS TLV word mask
520*5113495bSYour Name  * @tx_fes_status_prot: TX_FES_STATUS_PROT TLV word mask
521*5113495bSYour Name  * @tx_fes_setup: TX_FES_SETUP TLV word mask
522*5113495bSYour Name  * @tx_msdu_start: TX_MSDU_START TLV word mask
523*5113495bSYour Name  * @tx_mpdu_start: TX_MPDU_START TLV word mask
524*5113495bSYour Name  * @rxpcu_user_setup: RXPCU_USER_SETUP TLV word mask
525*5113495bSYour Name  */
526*5113495bSYour Name struct dp_tx_mon_wordmask_config {
527*5113495bSYour Name 	uint32_t pcu_ppdu_setup_init;
528*5113495bSYour Name 	uint16_t tx_peer_entry;
529*5113495bSYour Name 	uint16_t tx_queue_ext;
530*5113495bSYour Name 	uint16_t tx_fes_status_end;
531*5113495bSYour Name 	uint16_t response_end_status;
532*5113495bSYour Name 	uint16_t tx_fes_status_prot;
533*5113495bSYour Name 	uint8_t tx_fes_setup;
534*5113495bSYour Name 	uint8_t tx_msdu_start;
535*5113495bSYour Name 	uint8_t tx_mpdu_start;
536*5113495bSYour Name 	uint8_t rxpcu_user_setup;
537*5113495bSYour Name };
538*5113495bSYour Name 
539*5113495bSYour Name /**
540*5113495bSYour Name  * struct htt_tx_ring_tlv_filter - Tx ring TLV filter
541*5113495bSYour Name  * enable/disable.
542*5113495bSYour Name  * @dtlvs: enable/disable downstream TLVs
543*5113495bSYour Name  * @utlvs: enable/disable upstream TLVs
544*5113495bSYour Name  * @wmask: enable/disable word mask subscription
545*5113495bSYour Name  * @compaction_enable: word mask compaction enable
546*5113495bSYour Name  * @mgmt_filter: enable/disable mgmt packets
547*5113495bSYour Name  * @data_filter: enable/disable data packets
548*5113495bSYour Name  * @ctrl_filter: enable/disable ctrl packets
549*5113495bSYour Name  * @mgmt_dma_length: configure length for mgmt packet
550*5113495bSYour Name  * @ctrl_dma_length: configure length for ctrl packet
551*5113495bSYour Name  * @data_dma_length: configure length for data packet
552*5113495bSYour Name  * @mgmt_mpdu_end: enable mpdu end tlv for mgmt
553*5113495bSYour Name  * @mgmt_msdu_end: enable msdu end tlv for mgmt
554*5113495bSYour Name  * @mgmt_msdu_start: enable msdu start tlv for mgmt
555*5113495bSYour Name  * @mgmt_mpdu_start: enable mpdu start tlv for mgmt
556*5113495bSYour Name  * @ctrl_mpdu_end: enable mpdu end tlv for ctrl
557*5113495bSYour Name  * @ctrl_msdu_end: enable msdu end tlv for ctrl
558*5113495bSYour Name  * @ctrl_msdu_start: enable msdu start tlv for ctrl
559*5113495bSYour Name  * @ctrl_mpdu_start: enable mpdu start tlv for ctrl
560*5113495bSYour Name  * @data_mpdu_end: enable mpdu end tlv for data
561*5113495bSYour Name  * @data_msdu_end: enable msdu end tlv for data
562*5113495bSYour Name  * @data_msdu_start: enable msdu start tlv for data
563*5113495bSYour Name  * @data_mpdu_start: enable mpdu start tlv for data
564*5113495bSYour Name  * @mgmt_mpdu_log: enable mgmt mpdu level logging
565*5113495bSYour Name  * @ctrl_mpdu_log: enable ctrl mpdu level logging
566*5113495bSYour Name  * @data_mpdu_log: enable data mpdu level logging
567*5113495bSYour Name  * @enable: enable tx monitor
568*5113495bSYour Name  *
569*5113495bSYour Name  * NOTE: Do not change the layout of this structure
570*5113495bSYour Name  */
571*5113495bSYour Name struct htt_tx_ring_tlv_filter {
572*5113495bSYour Name 	struct dp_tx_mon_downstream_tlv_config dtlvs;
573*5113495bSYour Name 	struct dp_tx_mon_upstream_tlv_config utlvs;
574*5113495bSYour Name 	struct dp_tx_mon_wordmask_config wmask;
575*5113495bSYour Name 	uint8_t compaction_enable;
576*5113495bSYour Name 	uint16_t mgmt_filter;
577*5113495bSYour Name 	uint16_t data_filter;
578*5113495bSYour Name 	uint16_t ctrl_filter;
579*5113495bSYour Name 	uint16_t mgmt_dma_length:3,
580*5113495bSYour Name 		 ctrl_dma_length:3,
581*5113495bSYour Name 		 data_dma_length:3;
582*5113495bSYour Name 	uint16_t mgmt_mpdu_end:1,
583*5113495bSYour Name 		 mgmt_msdu_end:1,
584*5113495bSYour Name 		 mgmt_msdu_start:1,
585*5113495bSYour Name 		 mgmt_mpdu_start:1,
586*5113495bSYour Name 		 ctrl_mpdu_end:1,
587*5113495bSYour Name 		 ctrl_msdu_end:1,
588*5113495bSYour Name 		 ctrl_msdu_start:1,
589*5113495bSYour Name 		 ctrl_mpdu_start:1,
590*5113495bSYour Name 		 data_mpdu_end:1,
591*5113495bSYour Name 		 data_msdu_end:1,
592*5113495bSYour Name 		 data_msdu_start:1,
593*5113495bSYour Name 		 data_mpdu_start:1;
594*5113495bSYour Name 	uint8_t  mgmt_mpdu_log:1,
595*5113495bSYour Name 		 ctrl_mpdu_log:1,
596*5113495bSYour Name 		 data_mpdu_log:1;
597*5113495bSYour Name 	uint8_t  enable:1;
598*5113495bSYour Name };
599*5113495bSYour Name #endif /* WLAN_PKT_CAPTURE_TX_2_0 */
600*5113495bSYour Name 
601*5113495bSYour Name /**
602*5113495bSYour Name  * struct htt_rx_ring_tlv_filter - Rx ring TLV filter
603*5113495bSYour Name  * enable/disable.
604*5113495bSYour Name  * @mpdu_start: enable/disable MPDU start TLV
605*5113495bSYour Name  * @msdu_start: enable/disable MSDU start TLV
606*5113495bSYour Name  * @packet: enable/disable PACKET TLV
607*5113495bSYour Name  * @msdu_end: enable/disable MSDU end TLV
608*5113495bSYour Name  * @mpdu_end: enable/disable MPDU end TLV
609*5113495bSYour Name  * @packet_header: enable/disable PACKET header TLV
610*5113495bSYour Name  * @attention: enable/disable ATTENTION TLV
611*5113495bSYour Name  * @ppdu_start: enable/disable PPDU start TLV
612*5113495bSYour Name  * @ppdu_end: enable/disable PPDU end TLV
613*5113495bSYour Name  * @ppdu_end_user_stats: enable/disable PPDU user stats TLV
614*5113495bSYour Name  * @ppdu_end_user_stats_ext: enable/disable PPDU user stats ext TLV
615*5113495bSYour Name  * @ppdu_end_status_done: enable/disable PPDU end status done TLV
616*5113495bSYour Name  * @ppdu_start_user_info:
617*5113495bSYour Name  * @header_per_msdu:
618*5113495bSYour Name  * @enable_fp: enable/disable FP packet
619*5113495bSYour Name  * @enable_md: enable/disable MD packet
620*5113495bSYour Name  * @enable_mo: enable/disable MO packet
621*5113495bSYour Name  * @fp_mgmt_filter:
622*5113495bSYour Name  * @mo_mgmt_filter:
623*5113495bSYour Name  * @fp_ctrl_filter:
624*5113495bSYour Name  * @mo_ctrl_filter:
625*5113495bSYour Name  * @fp_data_filter:
626*5113495bSYour Name  * @mo_data_filter:
627*5113495bSYour Name  * @md_data_filter:
628*5113495bSYour Name  * @md_mgmt_filter:
629*5113495bSYour Name  * @md_ctrl_filter:
630*5113495bSYour Name  * @offset_valid: Flag to indicate if below offsets are valid
631*5113495bSYour Name  * @rx_packet_offset: Offset of packet payload
632*5113495bSYour Name  * @rx_header_offset: Offset of rx_header tlv
633*5113495bSYour Name  * @rx_mpdu_end_offset: Offset of rx_mpdu_end tlv
634*5113495bSYour Name  * @rx_mpdu_start_offset: Offset of rx_mpdu_start tlv
635*5113495bSYour Name  * @rx_msdu_end_offset: Offset of rx_msdu_end tlv
636*5113495bSYour Name  * @rx_msdu_start_offset: Offset of rx_msdu_start tlv
637*5113495bSYour Name  * @rx_attn_offset: Offset of rx_attention tlv
638*5113495bSYour Name  * @fp_phy_err: Flag to indicate FP PHY status tlv
639*5113495bSYour Name  * @fp_phy_err_buf_src: source ring selection for the FP PHY ERR status tlv
640*5113495bSYour Name  * @fp_phy_err_buf_dest: dest ring selection for the FP PHY ERR status tlv
641*5113495bSYour Name  * @phy_err_filter_valid:
642*5113495bSYour Name  * @phy_err_mask: select the phy errors defined in phyrx_abort_request_reason
643*5113495bSYour Name  *  enums 0 to 31.
644*5113495bSYour Name  * @phy_err_mask_cont: select the fp phy errors defined in
645*5113495bSYour Name  *  phyrx_abort_request_reason enums 32 to 63
646*5113495bSYour Name  * @rx_mpdu_start_wmask: word mask for mpdu start tlv
647*5113495bSYour Name  * @rx_mpdu_end_wmask: word mask for mpdu end tlv
648*5113495bSYour Name  * @rx_msdu_end_wmask: word mask for msdu end tlv
649*5113495bSYour Name  * @rx_pkt_tlv_offset: rx pkt tlv offset
650*5113495bSYour Name  * @mgmt_dma_length: configure length for mgmt packet
651*5113495bSYour Name  * @ctrl_dma_length: configure length for ctrl packet
652*5113495bSYour Name  * @data_dma_length: configure length for data packet
653*5113495bSYour Name  * @rx_hdr_length: configure length for rx header tlv
654*5113495bSYour Name  * @mgmt_mpdu_log: enable mgmt mpdu level logging
655*5113495bSYour Name  * @ctrl_mpdu_log: enable ctrl mpdu level logging
656*5113495bSYour Name  * @data_mpdu_log: enable data mpdu level logging
657*5113495bSYour Name  * @enable: enable rx monitor
658*5113495bSYour Name  * @enable_fpmo: enable/disable FPMO packet
659*5113495bSYour Name  * @fpmo_data_filter: FPMO mode data filter
660*5113495bSYour Name  * @fpmo_mgmt_filter: FPMO mode mgmt filter
661*5113495bSYour Name  * @fpmo_ctrl_filter: FPMO mode ctrl filter
662*5113495bSYour Name  * @enable_mon_mac_filter: enable/disable mac based filter on scan radio
663*5113495bSYour Name  *
664*5113495bSYour Name  * NOTE: Do not change the layout of this structure
665*5113495bSYour Name  */
666*5113495bSYour Name struct htt_rx_ring_tlv_filter {
667*5113495bSYour Name 	u_int32_t mpdu_start:1,
668*5113495bSYour Name 		msdu_start:1,
669*5113495bSYour Name 		packet:1,
670*5113495bSYour Name 		msdu_end:1,
671*5113495bSYour Name 		mpdu_end:1,
672*5113495bSYour Name 		packet_header:1,
673*5113495bSYour Name 		attention:1,
674*5113495bSYour Name 		ppdu_start:1,
675*5113495bSYour Name 		ppdu_end:1,
676*5113495bSYour Name 		ppdu_end_user_stats:1,
677*5113495bSYour Name 		ppdu_end_user_stats_ext:1,
678*5113495bSYour Name 		ppdu_end_status_done:1,
679*5113495bSYour Name 		ppdu_start_user_info:1,
680*5113495bSYour Name 		header_per_msdu:1,
681*5113495bSYour Name 		enable_fp:1,
682*5113495bSYour Name 		enable_md:1,
683*5113495bSYour Name 		enable_mo:1;
684*5113495bSYour Name 	u_int32_t fp_mgmt_filter:16,
685*5113495bSYour Name 		mo_mgmt_filter:16;
686*5113495bSYour Name 	u_int32_t fp_ctrl_filter:16,
687*5113495bSYour Name 		mo_ctrl_filter:16;
688*5113495bSYour Name 	u_int32_t fp_data_filter:16,
689*5113495bSYour Name 		mo_data_filter:16;
690*5113495bSYour Name 	u_int16_t md_data_filter;
691*5113495bSYour Name 	u_int16_t md_mgmt_filter;
692*5113495bSYour Name 	u_int16_t md_ctrl_filter;
693*5113495bSYour Name 	bool offset_valid;
694*5113495bSYour Name 	uint16_t rx_packet_offset;
695*5113495bSYour Name 	uint16_t rx_header_offset;
696*5113495bSYour Name 	uint16_t rx_mpdu_end_offset;
697*5113495bSYour Name 	uint16_t rx_mpdu_start_offset;
698*5113495bSYour Name 	uint16_t rx_msdu_end_offset;
699*5113495bSYour Name 	uint16_t rx_msdu_start_offset;
700*5113495bSYour Name 	uint16_t rx_attn_offset;
701*5113495bSYour Name #ifdef QCA_UNDECODED_METADATA_SUPPORT
702*5113495bSYour Name 	u_int32_t fp_phy_err:1,
703*5113495bSYour Name 		fp_phy_err_buf_src:2,
704*5113495bSYour Name 		fp_phy_err_buf_dest:2,
705*5113495bSYour Name 		phy_err_filter_valid:1;
706*5113495bSYour Name 	u_int32_t phy_err_mask;
707*5113495bSYour Name 	u_int32_t phy_err_mask_cont;
708*5113495bSYour Name #endif
709*5113495bSYour Name #if defined(WLAN_PKT_CAPTURE_RX_2_0) || defined(CONFIG_WORD_BASED_TLV) || \
710*5113495bSYour Name 	defined(CONFIG_MON_WORD_BASED_TLV) || \
711*5113495bSYour Name 	defined(WLAN_FEATURE_LOCAL_PKT_CAPTURE)
712*5113495bSYour Name 	uint32_t rx_mpdu_start_wmask;
713*5113495bSYour Name 	uint16_t rx_mpdu_end_wmask;
714*5113495bSYour Name 	uint32_t rx_msdu_end_wmask;
715*5113495bSYour Name 	uint16_t rx_pkt_tlv_offset;
716*5113495bSYour Name 	uint16_t mgmt_dma_length:3,
717*5113495bSYour Name 		 ctrl_dma_length:3,
718*5113495bSYour Name 		 data_dma_length:3,
719*5113495bSYour Name 		 rx_hdr_length:3,
720*5113495bSYour Name 		 mgmt_mpdu_log:1,
721*5113495bSYour Name 		 ctrl_mpdu_log:1,
722*5113495bSYour Name 		 data_mpdu_log:1,
723*5113495bSYour Name 		 enable:1;
724*5113495bSYour Name 	u_int16_t enable_fpmo:1;
725*5113495bSYour Name 	u_int16_t fpmo_data_filter;
726*5113495bSYour Name 	u_int16_t fpmo_mgmt_filter;
727*5113495bSYour Name 	u_int16_t fpmo_ctrl_filter;
728*5113495bSYour Name #endif
729*5113495bSYour Name 	bool enable_mon_mac_filter;
730*5113495bSYour Name };
731*5113495bSYour Name 
732*5113495bSYour Name /**
733*5113495bSYour Name  * struct dp_htt_rx_flow_fst_setup - Rx FST setup message
734*5113495bSYour Name  * @pdev_id: DP Pdev identifier
735*5113495bSYour Name  * @max_entries: Size of Rx FST in number of entries
736*5113495bSYour Name  * @max_search: Number of collisions allowed
737*5113495bSYour Name  * @base_addr_lo: lower 32-bit physical address
738*5113495bSYour Name  * @base_addr_hi: upper 32-bit physical address
739*5113495bSYour Name  * @ip_da_sa_prefix: IPv4 prefix to map to IPv6 address scheme
740*5113495bSYour Name  * @hash_key_len: Rx FST hash key size
741*5113495bSYour Name  * @hash_key: Rx FST Toeplitz hash key
742*5113495bSYour Name  */
743*5113495bSYour Name struct dp_htt_rx_flow_fst_setup {
744*5113495bSYour Name 	uint8_t pdev_id;
745*5113495bSYour Name 	uint32_t max_entries;
746*5113495bSYour Name 	uint32_t max_search;
747*5113495bSYour Name 	uint32_t base_addr_lo;
748*5113495bSYour Name 	uint32_t base_addr_hi;
749*5113495bSYour Name 	uint32_t ip_da_sa_prefix;
750*5113495bSYour Name 	uint32_t hash_key_len;
751*5113495bSYour Name 	uint8_t *hash_key;
752*5113495bSYour Name };
753*5113495bSYour Name 
754*5113495bSYour Name /**
755*5113495bSYour Name  * enum dp_htt_flow_fst_operation - FST related operations allowed
756*5113495bSYour Name  * @DP_HTT_FST_CACHE_OP_NONE: Cache no-op
757*5113495bSYour Name  * @DP_HTT_FST_CACHE_INVALIDATE_ENTRY: Invalidate single cache entry
758*5113495bSYour Name  * @DP_HTT_FST_CACHE_INVALIDATE_FULL: Invalidate entire cache
759*5113495bSYour Name  * @DP_HTT_FST_ENABLE: Bypass FST is enabled
760*5113495bSYour Name  * @DP_HTT_FST_DISABLE: Disable bypass FST
761*5113495bSYour Name  */
762*5113495bSYour Name enum dp_htt_flow_fst_operation {
763*5113495bSYour Name 	DP_HTT_FST_CACHE_OP_NONE,
764*5113495bSYour Name 	DP_HTT_FST_CACHE_INVALIDATE_ENTRY,
765*5113495bSYour Name 	DP_HTT_FST_CACHE_INVALIDATE_FULL,
766*5113495bSYour Name 	DP_HTT_FST_ENABLE,
767*5113495bSYour Name 	DP_HTT_FST_DISABLE
768*5113495bSYour Name };
769*5113495bSYour Name 
770*5113495bSYour Name /**
771*5113495bSYour Name  * struct dp_htt_rx_flow_fst_operation - Rx FST operation message
772*5113495bSYour Name  * @pdev_id: DP Pdev identifier
773*5113495bSYour Name  * @op_code: FST operation to be performed by FW/HW
774*5113495bSYour Name  * @rx_flow: Rx Flow information on which operation is to be performed
775*5113495bSYour Name  */
776*5113495bSYour Name struct dp_htt_rx_flow_fst_operation {
777*5113495bSYour Name 	uint8_t pdev_id;
778*5113495bSYour Name 	enum dp_htt_flow_fst_operation op_code;
779*5113495bSYour Name 	struct cdp_rx_flow_info *rx_flow;
780*5113495bSYour Name };
781*5113495bSYour Name 
782*5113495bSYour Name /**
783*5113495bSYour Name  * struct dp_htt_rx_fisa_cfg - Rx fisa config
784*5113495bSYour Name  * @pdev_id: DP Pdev identifier
785*5113495bSYour Name  * @fisa_timeout: fisa aggregation timeout
786*5113495bSYour Name  * @max_aggr_supported: FISA max MSDU aggregation supported
787*5113495bSYour Name  */
788*5113495bSYour Name struct dp_htt_rx_fisa_cfg {
789*5113495bSYour Name 	uint8_t pdev_id;
790*5113495bSYour Name 	uint32_t fisa_timeout;
791*5113495bSYour Name 	uint8_t max_aggr_supported;
792*5113495bSYour Name };
793*5113495bSYour Name 
794*5113495bSYour Name /**
795*5113495bSYour Name  * htt_htc_pkt_alloc() - Allocate HTC packet buffer
796*5113495bSYour Name  * @soc:	HTT SOC handle
797*5113495bSYour Name  *
798*5113495bSYour Name  * Return: Pointer to htc packet buffer
799*5113495bSYour Name  */
800*5113495bSYour Name struct dp_htt_htc_pkt *htt_htc_pkt_alloc(struct htt_soc *soc);
801*5113495bSYour Name 
802*5113495bSYour Name /**
803*5113495bSYour Name  * htt_htc_pkt_free() - Free HTC packet buffer
804*5113495bSYour Name  * @soc:	HTT SOC handle
805*5113495bSYour Name  * @pkt:	packet to free
806*5113495bSYour Name  */
807*5113495bSYour Name void
808*5113495bSYour Name htt_htc_pkt_free(struct htt_soc *soc, struct dp_htt_htc_pkt *pkt);
809*5113495bSYour Name 
810*5113495bSYour Name #define HTT_HTC_PKT_STATUS_SUCCESS \
811*5113495bSYour Name 	((pkt->htc_pkt.Status != QDF_STATUS_E_CANCELED) && \
812*5113495bSYour Name 	(pkt->htc_pkt.Status != QDF_STATUS_E_RESOURCES))
813*5113495bSYour Name 
814*5113495bSYour Name #ifdef ENABLE_CE4_COMP_DISABLE_HTT_HTC_MISC_LIST
815*5113495bSYour Name 
816*5113495bSYour Name static void
htt_htc_misc_pkt_list_add(struct htt_soc * soc,struct dp_htt_htc_pkt * pkt)817*5113495bSYour Name htt_htc_misc_pkt_list_add(struct htt_soc *soc, struct dp_htt_htc_pkt *pkt)
818*5113495bSYour Name {
819*5113495bSYour Name }
820*5113495bSYour Name 
821*5113495bSYour Name #else  /* ENABLE_CE4_COMP_DISABLE_HTT_HTC_MISC_LIST */
822*5113495bSYour Name 
823*5113495bSYour Name /**
824*5113495bSYour Name  * htt_htc_misc_pkt_list_add() - Add pkt to misc list
825*5113495bSYour Name  * @soc:	HTT SOC handle
826*5113495bSYour Name  * @pkt: pkt to be added to list
827*5113495bSYour Name  */
828*5113495bSYour Name void
829*5113495bSYour Name htt_htc_misc_pkt_list_add(struct htt_soc *soc, struct dp_htt_htc_pkt *pkt);
830*5113495bSYour Name 
831*5113495bSYour Name #endif  /* ENABLE_CE4_COMP_DISABLE_HTT_HTC_MISC_LIST */
832*5113495bSYour Name 
833*5113495bSYour Name /**
834*5113495bSYour Name  * DP_HTT_SEND_HTC_PKT() - Send htt packet from host
835*5113495bSYour Name  * @soc : HTT SOC handle
836*5113495bSYour Name  * @pkt: pkt to be send
837*5113495bSYour Name  * @cmd : command to be recorded in dp htt logger
838*5113495bSYour Name  * @buf : Pointer to buffer needs to be recorded for above cmd
839*5113495bSYour Name  *
840*5113495bSYour Name  * Return: None
841*5113495bSYour Name  */
DP_HTT_SEND_HTC_PKT(struct htt_soc * soc,struct dp_htt_htc_pkt * pkt,uint8_t cmd,uint8_t * buf)842*5113495bSYour Name static inline QDF_STATUS DP_HTT_SEND_HTC_PKT(struct htt_soc *soc,
843*5113495bSYour Name 					     struct dp_htt_htc_pkt *pkt,
844*5113495bSYour Name 					     uint8_t cmd, uint8_t *buf)
845*5113495bSYour Name {
846*5113495bSYour Name 	QDF_STATUS status;
847*5113495bSYour Name 
848*5113495bSYour Name 	htt_command_record(soc->htt_logger_handle, cmd, buf);
849*5113495bSYour Name 
850*5113495bSYour Name 	status = htc_send_pkt(soc->htc_soc, &pkt->htc_pkt);
851*5113495bSYour Name 	if (status == QDF_STATUS_SUCCESS && HTT_HTC_PKT_STATUS_SUCCESS)
852*5113495bSYour Name 		htt_htc_misc_pkt_list_add(soc, pkt);
853*5113495bSYour Name 	else
854*5113495bSYour Name 		soc->stats.fail_count++;
855*5113495bSYour Name 	return status;
856*5113495bSYour Name }
857*5113495bSYour Name 
858*5113495bSYour Name /**
859*5113495bSYour Name  * dp_htt_rx_fisa_config(): Send HTT msg to configure FISA
860*5113495bSYour Name  * @pdev: DP pdev handle
861*5113495bSYour Name  * @fisa_config: Flow entry parameters
862*5113495bSYour Name  *
863*5113495bSYour Name  * Return: Success when HTT message is sent, error on failure
864*5113495bSYour Name  */
865*5113495bSYour Name QDF_STATUS dp_htt_rx_fisa_config(struct dp_pdev *pdev,
866*5113495bSYour Name 				 struct dp_htt_rx_fisa_cfg *fisa_config);
867*5113495bSYour Name 
868*5113495bSYour Name #ifdef WLAN_SUPPORT_PPEDS
869*5113495bSYour Name 
870*5113495bSYour Name /**
871*5113495bSYour Name  * struct dp_htt_rxdma_rxole_ppe_config - Rx DMA and RxOLE PPE config
872*5113495bSYour Name  * @override: RxDMA override to override the reo_destinatoin_indication
873*5113495bSYour Name  * @reo_destination_indication: REO destination indication value
874*5113495bSYour Name  * @multi_buffer_msdu_override_en: Override the indicatio for SG
875*5113495bSYour Name  * @intra_bss_override: Rx OLE IntraBSS override
876*5113495bSYour Name  * @decap_raw_override: Rx Decap Raw override
877*5113495bSYour Name  * @decap_nwifi_override: Rx Native override
878*5113495bSYour Name  * @ip_frag_override: IP fragments override
879*5113495bSYour Name  * @reserved: Reserved
880*5113495bSYour Name  */
881*5113495bSYour Name struct dp_htt_rxdma_rxole_ppe_config {
882*5113495bSYour Name 	uint32_t override:1,
883*5113495bSYour Name 		 reo_destination_indication:5,
884*5113495bSYour Name 		 multi_buffer_msdu_override_en:1,
885*5113495bSYour Name 		 intra_bss_override:1,
886*5113495bSYour Name 		 decap_raw_override:1,
887*5113495bSYour Name 		 decap_nwifi_override:1,
888*5113495bSYour Name 		 ip_frag_override:1,
889*5113495bSYour Name 		 reserved:21;
890*5113495bSYour Name };
891*5113495bSYour Name 
892*5113495bSYour Name /**
893*5113495bSYour Name  * dp_htt_rxdma_rxole_ppe_cfg_set() - Send RxOLE and RxDMA PPE config
894*5113495bSYour Name  * @soc: Data path SoC handle
895*5113495bSYour Name  * @cfg: RxDMA and RxOLE PPE config
896*5113495bSYour Name  *
897*5113495bSYour Name  * Return: Success when HTT message is sent, error on failure
898*5113495bSYour Name  */
899*5113495bSYour Name QDF_STATUS
900*5113495bSYour Name dp_htt_rxdma_rxole_ppe_cfg_set(struct dp_soc *soc,
901*5113495bSYour Name 			       struct dp_htt_rxdma_rxole_ppe_config *cfg);
902*5113495bSYour Name #endif /* WLAN_SUPPORT_PPEDS */
903*5113495bSYour Name 
904*5113495bSYour Name /**
905*5113495bSYour Name  * htt_soc_initialize() - SOC level HTT initialization
906*5113495bSYour Name  * @htt_soc: Opaque htt SOC handle
907*5113495bSYour Name  * @ctrl_psoc: Opaque ctrl SOC handle
908*5113495bSYour Name  * @htc_soc: SOC level HTC handle
909*5113495bSYour Name  * @hal_soc_hdl: Opaque HAL SOC handle
910*5113495bSYour Name  * @osdev: QDF device
911*5113495bSYour Name  *
912*5113495bSYour Name  * Return: HTT handle on success; NULL on failure
913*5113495bSYour Name  */
914*5113495bSYour Name void *
915*5113495bSYour Name htt_soc_initialize(struct htt_soc *htt_soc,
916*5113495bSYour Name 		   struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
917*5113495bSYour Name 		   HTC_HANDLE htc_soc,
918*5113495bSYour Name 		   hal_soc_handle_t hal_soc_hdl, qdf_device_t osdev);
919*5113495bSYour Name 
920*5113495bSYour Name /**
921*5113495bSYour Name  * dp_htt_h2t_full() - Send full handler (called from HTC)
922*5113495bSYour Name  * @context:	Opaque context (HTT SOC handle)
923*5113495bSYour Name  * @pkt:	HTC packet
924*5113495bSYour Name  *
925*5113495bSYour Name  * Return: enum htc_send_full_action
926*5113495bSYour Name  */
927*5113495bSYour Name enum htc_send_full_action
928*5113495bSYour Name dp_htt_h2t_full(void *context, HTC_PACKET *pkt);
929*5113495bSYour Name 
930*5113495bSYour Name /**
931*5113495bSYour Name  * dp_htt_h2t_send_complete() - H2T completion handler
932*5113495bSYour Name  * @context:	Opaque context (HTT SOC handle)
933*5113495bSYour Name  * @htc_pkt:	HTC packet
934*5113495bSYour Name  */
935*5113495bSYour Name void
936*5113495bSYour Name dp_htt_h2t_send_complete(void *context, HTC_PACKET *htc_pkt);
937*5113495bSYour Name 
938*5113495bSYour Name /**
939*5113495bSYour Name  * dp_htt_hif_t2h_hp_callback() - HIF callback for high priority T2H messages
940*5113495bSYour Name  * @context:	Opaque context (HTT SOC handle)
941*5113495bSYour Name  * @nbuf:	nbuf containing T2H message
942*5113495bSYour Name  * @pipe_id:	HIF pipe ID
943*5113495bSYour Name  *
944*5113495bSYour Name  * Return: QDF_STATUS
945*5113495bSYour Name  *
946*5113495bSYour Name  * TODO: Temporary change to bypass HTC connection for this new HIF pipe, which
947*5113495bSYour Name  * will be used for packet log and other high-priority HTT messages. Proper
948*5113495bSYour Name  * HTC connection to be added later once required FW changes are available
949*5113495bSYour Name  */
950*5113495bSYour Name QDF_STATUS
951*5113495bSYour Name dp_htt_hif_t2h_hp_callback(void *context, qdf_nbuf_t nbuf, uint8_t pipe_id);
952*5113495bSYour Name 
953*5113495bSYour Name /**
954*5113495bSYour Name  * htt_soc_attach() - attach DP and HTT SOC
955*5113495bSYour Name  * @soc: DP SOC handle
956*5113495bSYour Name  * @htc_hdl: HTC handle
957*5113495bSYour Name  *
958*5113495bSYour Name  * Return: htt_soc handle on Success, NULL on Failure
959*5113495bSYour Name  */
960*5113495bSYour Name struct htt_soc *htt_soc_attach(struct dp_soc *soc, HTC_HANDLE htc_hdl);
961*5113495bSYour Name 
962*5113495bSYour Name /**
963*5113495bSYour Name  * htt_set_htc_handle() - set HTC handle
964*5113495bSYour Name  * @htt_hdl: HTT handle/SOC
965*5113495bSYour Name  * @htc_soc: HTC handle
966*5113495bSYour Name  *
967*5113495bSYour Name  * Return: None
968*5113495bSYour Name  */
969*5113495bSYour Name void htt_set_htc_handle(struct htt_soc *htt_hdl, HTC_HANDLE htc_soc);
970*5113495bSYour Name 
971*5113495bSYour Name /**
972*5113495bSYour Name  * htt_get_htc_handle() - set HTC handle
973*5113495bSYour Name  * @htt_hdl: HTT handle/SOC
974*5113495bSYour Name  *
975*5113495bSYour Name  * Return: HTC_HANDLE
976*5113495bSYour Name  */
977*5113495bSYour Name HTC_HANDLE htt_get_htc_handle(struct htt_soc *htt_hdl);
978*5113495bSYour Name 
979*5113495bSYour Name /**
980*5113495bSYour Name  * htt_soc_htc_dealloc() - HTC memory de-alloc
981*5113495bSYour Name  * @htt_handle: SOC level HTT handle
982*5113495bSYour Name  *
983*5113495bSYour Name  * Return: None
984*5113495bSYour Name  */
985*5113495bSYour Name void htt_soc_htc_dealloc(struct htt_soc *htt_handle);
986*5113495bSYour Name 
987*5113495bSYour Name /**
988*5113495bSYour Name  * htt_soc_htc_prealloc() - HTC memory prealloc
989*5113495bSYour Name  * @htt_soc: SOC level HTT handle
990*5113495bSYour Name  *
991*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on success or
992*5113495bSYour Name  * QDF_STATUS_E_NO_MEM on allocation failure
993*5113495bSYour Name  */
994*5113495bSYour Name QDF_STATUS htt_soc_htc_prealloc(struct htt_soc *htt_soc);
995*5113495bSYour Name 
996*5113495bSYour Name /**
997*5113495bSYour Name  * htt_soc_detach() - Free SOC level HTT handle
998*5113495bSYour Name  * @htt_hdl: HTT SOC handle
999*5113495bSYour Name  */
1000*5113495bSYour Name void htt_soc_detach(struct htt_soc *htt_hdl);
1001*5113495bSYour Name 
1002*5113495bSYour Name /**
1003*5113495bSYour Name  * htt_srng_setup() - Send SRNG setup message to target
1004*5113495bSYour Name  * @htt_soc:	HTT SOC handle
1005*5113495bSYour Name  * @pdev_id:	pdev Id
1006*5113495bSYour Name  * @hal_ring_hdl:	Opaque HAL SRNG pointer
1007*5113495bSYour Name  * @hal_ring_type:	SRNG ring type
1008*5113495bSYour Name  *
1009*5113495bSYour Name  * Return: 0 on success; error code on failure
1010*5113495bSYour Name  */
1011*5113495bSYour Name int htt_srng_setup(struct htt_soc *htt_soc, int pdev_id,
1012*5113495bSYour Name 		   hal_ring_handle_t hal_ring_hdl,
1013*5113495bSYour Name 		   int hal_ring_type);
1014*5113495bSYour Name 
1015*5113495bSYour Name /**
1016*5113495bSYour Name  * htt_soc_attach_target() - SOC level HTT setup
1017*5113495bSYour Name  * @htt_soc:	HTT SOC handle
1018*5113495bSYour Name  *
1019*5113495bSYour Name  * Return: 0 on success; error code on failure
1020*5113495bSYour Name  */
1021*5113495bSYour Name int htt_soc_attach_target(struct htt_soc *htt_soc);
1022*5113495bSYour Name 
1023*5113495bSYour Name /**
1024*5113495bSYour Name  * htt_h2t_rx_ring_cfg() - Send SRNG packet and TLV filter
1025*5113495bSYour Name  * config message to target
1026*5113495bSYour Name  * @htt_soc:	HTT SOC handle
1027*5113495bSYour Name  * @pdev_id:	PDEV Id
1028*5113495bSYour Name  * @hal_ring_hdl:	Opaque HAL SRNG pointer
1029*5113495bSYour Name  * @hal_ring_type:	SRNG ring type
1030*5113495bSYour Name  * @ring_buf_size:	SRNG buffer size
1031*5113495bSYour Name  * @htt_tlv_filter:	Rx SRNG TLV and filter setting
1032*5113495bSYour Name  *
1033*5113495bSYour Name  * Return: 0 on success; error code on failure
1034*5113495bSYour Name  */
1035*5113495bSYour Name int htt_h2t_rx_ring_cfg(struct htt_soc *htt_soc, int pdev_id,
1036*5113495bSYour Name 			hal_ring_handle_t hal_ring_hdl,
1037*5113495bSYour Name 			int hal_ring_type, int ring_buf_size,
1038*5113495bSYour Name 			struct htt_rx_ring_tlv_filter *htt_tlv_filter);
1039*5113495bSYour Name 
1040*5113495bSYour Name /**
1041*5113495bSYour Name  * dp_htt_t2h_msg_handler() - Generic Target to host Msg/event handler
1042*5113495bSYour Name  * @context:	Opaque context (HTT SOC handle)
1043*5113495bSYour Name  * @pkt:	HTC packet
1044*5113495bSYour Name  */
1045*5113495bSYour Name void dp_htt_t2h_msg_handler(void *context, HTC_PACKET *pkt);
1046*5113495bSYour Name 
1047*5113495bSYour Name /**
1048*5113495bSYour Name  * htt_t2h_stats_handler() - target to host stats work handler
1049*5113495bSYour Name  * @context:	context (dp soc context)
1050*5113495bSYour Name  *
1051*5113495bSYour Name  * Return: void
1052*5113495bSYour Name  */
1053*5113495bSYour Name void htt_t2h_stats_handler(void *context);
1054*5113495bSYour Name 
1055*5113495bSYour Name /**
1056*5113495bSYour Name  * struct htt_stats_context - htt stats information
1057*5113495bSYour Name  * @soc: Size of each descriptor in the pool
1058*5113495bSYour Name  * @msg: T2H Ext stats message queue
1059*5113495bSYour Name  * @msg_len: T2H Ext stats message length
1060*5113495bSYour Name  */
1061*5113495bSYour Name struct htt_stats_context {
1062*5113495bSYour Name 	struct dp_soc *soc;
1063*5113495bSYour Name 	qdf_nbuf_queue_t msg;
1064*5113495bSYour Name 	uint32_t msg_len;
1065*5113495bSYour Name };
1066*5113495bSYour Name 
1067*5113495bSYour Name #ifdef DP_UMAC_HW_RESET_SUPPORT
1068*5113495bSYour Name /**
1069*5113495bSYour Name  * struct dp_htt_umac_reset_setup_cmd_params - Params for UMAC reset setup cmd
1070*5113495bSYour Name  * @msi_data: MSI data to be used for raising the UMAC reset interrupt
1071*5113495bSYour Name  * @shmem_addr_low: Lower 32-bits of shared memory
1072*5113495bSYour Name  * @shmem_addr_high: Higher 32-bits of shared memory
1073*5113495bSYour Name  */
1074*5113495bSYour Name struct dp_htt_umac_reset_setup_cmd_params {
1075*5113495bSYour Name 	uint32_t msi_data;
1076*5113495bSYour Name 	uint32_t shmem_addr_low;
1077*5113495bSYour Name 	uint32_t shmem_addr_high;
1078*5113495bSYour Name };
1079*5113495bSYour Name 
1080*5113495bSYour Name /**
1081*5113495bSYour Name  * dp_htt_umac_reset_send_setup_cmd(): Send the HTT UMAC reset setup command
1082*5113495bSYour Name  * @soc: dp soc object
1083*5113495bSYour Name  * @setup_params: parameters required by this command
1084*5113495bSYour Name  *
1085*5113495bSYour Name  * Return: Success when HTT message is sent, error on failure
1086*5113495bSYour Name  */
1087*5113495bSYour Name QDF_STATUS dp_htt_umac_reset_send_setup_cmd(
1088*5113495bSYour Name 		struct dp_soc *soc,
1089*5113495bSYour Name 		const struct dp_htt_umac_reset_setup_cmd_params *setup_params);
1090*5113495bSYour Name 
1091*5113495bSYour Name /**
1092*5113495bSYour Name  * dp_htt_umac_reset_send_start_pre_reset_cmd() - Send the HTT UMAC reset start
1093*5113495bSYour Name  * pre reset command
1094*5113495bSYour Name  * @soc: dp soc object
1095*5113495bSYour Name  * @is_initiator: Indicates whether the target needs to execute the
1096*5113495bSYour Name  * UMAC-recovery in context of the Initiator or Non-Initiator. The value zero
1097*5113495bSYour Name  * indicates this target is Non-Initiator.
1098*5113495bSYour Name  * @is_umac_hang: Indicates whether MLO UMAC recovery executed in context of
1099*5113495bSYour Name  * UMAC hang or Target recovery.
1100*5113495bSYour Name  *
1101*5113495bSYour Name  * Return: Success when HTT message is sent, error on failure
1102*5113495bSYour Name  */
1103*5113495bSYour Name QDF_STATUS dp_htt_umac_reset_send_start_pre_reset_cmd(
1104*5113495bSYour Name 		struct dp_soc *soc, bool is_initiator, bool is_umac_hang);
1105*5113495bSYour Name #endif
1106*5113495bSYour Name 
1107*5113495bSYour Name /**
1108*5113495bSYour Name  * dp_htt_rx_flow_fst_setup() - Send HTT Rx FST setup message to FW
1109*5113495bSYour Name  * @pdev: DP pdev handle
1110*5113495bSYour Name  * @fse_setup_info: FST setup parameters
1111*5113495bSYour Name  *
1112*5113495bSYour Name  * Return: Success when HTT message is sent, error on failure
1113*5113495bSYour Name  */
1114*5113495bSYour Name QDF_STATUS
1115*5113495bSYour Name dp_htt_rx_flow_fst_setup(struct dp_pdev *pdev,
1116*5113495bSYour Name 			 struct dp_htt_rx_flow_fst_setup *fse_setup_info);
1117*5113495bSYour Name 
1118*5113495bSYour Name /**
1119*5113495bSYour Name  * dp_htt_rx_flow_fse_operation(): Send HTT Flow Search Entry msg to
1120*5113495bSYour Name  * add/del a flow in HW
1121*5113495bSYour Name  * @pdev: DP pdev handle
1122*5113495bSYour Name  * @fse_op_info: Flow entry parameters
1123*5113495bSYour Name  *
1124*5113495bSYour Name  * Return: Success when HTT message is sent, error on failure
1125*5113495bSYour Name  */
1126*5113495bSYour Name QDF_STATUS
1127*5113495bSYour Name dp_htt_rx_flow_fse_operation(struct dp_pdev *pdev,
1128*5113495bSYour Name 			     struct dp_htt_rx_flow_fst_operation *fse_op_info);
1129*5113495bSYour Name 
1130*5113495bSYour Name /**
1131*5113495bSYour Name  * htt_h2t_full_mon_cfg() - Send full monitor configuration msg to FW
1132*5113495bSYour Name  *
1133*5113495bSYour Name  * @htt_soc: HTT Soc handle
1134*5113495bSYour Name  * @pdev_id: Radio id
1135*5113495bSYour Name  * @dp_full_mon_config: enabled/disable configuration
1136*5113495bSYour Name  *
1137*5113495bSYour Name  * Return: Success when HTT message is sent, error on failure
1138*5113495bSYour Name  */
1139*5113495bSYour Name int htt_h2t_full_mon_cfg(struct htt_soc *htt_soc,
1140*5113495bSYour Name 			 uint8_t pdev_id,
1141*5113495bSYour Name 			 enum dp_full_mon_config);
1142*5113495bSYour Name 
1143*5113495bSYour Name /**
1144*5113495bSYour Name  * dp_h2t_hw_vdev_stats_config_send: Send HTT command to FW for config
1145*5113495bSYour Name  *				     of HW vdev stats
1146*5113495bSYour Name  * @dpsoc: Datapath soc handle
1147*5113495bSYour Name  * @pdev_id: INVALID_PDEV_ID for all pdevs or 0,1,2 for individual pdev
1148*5113495bSYour Name  * @enable: flag to specify enable/disable of stats
1149*5113495bSYour Name  * @reset: flag to specify if command is for reset of stats
1150*5113495bSYour Name  * @reset_bitmask: bitmask of vdev_id(s) for reset of HW stats
1151*5113495bSYour Name  *
1152*5113495bSYour Name  *  Return: QDF_STATUS
1153*5113495bSYour Name  */
1154*5113495bSYour Name QDF_STATUS dp_h2t_hw_vdev_stats_config_send(struct dp_soc *dpsoc,
1155*5113495bSYour Name 					    uint8_t pdev_id, bool enable,
1156*5113495bSYour Name 					    bool reset, uint64_t reset_bitmask);
1157*5113495bSYour Name 
1158*5113495bSYour Name static inline enum htt_srng_ring_id
dp_htt_get_mon_htt_ring_id(struct dp_soc * soc,enum hal_ring_type hal_ring_type)1159*5113495bSYour Name dp_htt_get_mon_htt_ring_id(struct dp_soc *soc,
1160*5113495bSYour Name 			   enum hal_ring_type hal_ring_type)
1161*5113495bSYour Name {
1162*5113495bSYour Name 	enum htt_srng_ring_id htt_srng_id = 0;
1163*5113495bSYour Name 
1164*5113495bSYour Name 	if (wlan_cfg_get_txmon_hw_support(soc->wlan_cfg_ctx)) {
1165*5113495bSYour Name 		switch (hal_ring_type) {
1166*5113495bSYour Name 		case RXDMA_MONITOR_BUF:
1167*5113495bSYour Name 			htt_srng_id = HTT_RX_MON_HOST2MON_BUF_RING;
1168*5113495bSYour Name 			break;
1169*5113495bSYour Name 		case RXDMA_MONITOR_DST:
1170*5113495bSYour Name 			htt_srng_id = HTT_RX_MON_MON2HOST_DEST_RING;
1171*5113495bSYour Name 			break;
1172*5113495bSYour Name 		default:
1173*5113495bSYour Name 			dp_err("Invalid ring type %d ", hal_ring_type);
1174*5113495bSYour Name 			break;
1175*5113495bSYour Name 		}
1176*5113495bSYour Name 	} else {
1177*5113495bSYour Name 		switch (hal_ring_type) {
1178*5113495bSYour Name 		case RXDMA_MONITOR_BUF:
1179*5113495bSYour Name 			htt_srng_id = HTT_RXDMA_MONITOR_BUF_RING;
1180*5113495bSYour Name 			break;
1181*5113495bSYour Name 		case RXDMA_MONITOR_DST:
1182*5113495bSYour Name 			htt_srng_id = HTT_RXDMA_MONITOR_DEST_RING;
1183*5113495bSYour Name 			break;
1184*5113495bSYour Name 		default:
1185*5113495bSYour Name 			dp_err("Invalid ring type %d ", hal_ring_type);
1186*5113495bSYour Name 			break;
1187*5113495bSYour Name 		}
1188*5113495bSYour Name 	}
1189*5113495bSYour Name 
1190*5113495bSYour Name 	return htt_srng_id;
1191*5113495bSYour Name }
1192*5113495bSYour Name 
1193*5113495bSYour Name #ifdef IPA_OPT_WIFI_DP
1194*5113495bSYour Name /**
1195*5113495bSYour Name  * htt_h2t_rx_cce_super_rule_setup() - htt message to set cce super rules
1196*5113495bSYour Name  *
1197*5113495bSYour Name  * @htt_soc: HTT Soc handle
1198*5113495bSYour Name  * @flt_params: Filter tuple
1199*5113495bSYour Name  *
1200*5113495bSYour Name  * Return: QDF_STATUS
1201*5113495bSYour Name  */
1202*5113495bSYour Name QDF_STATUS htt_h2t_rx_cce_super_rule_setup(struct htt_soc *htt_soc,
1203*5113495bSYour Name 					   void *flt_params);
1204*5113495bSYour Name #endif
1205*5113495bSYour Name 
1206*5113495bSYour Name #ifdef QCA_SUPPORT_PRIMARY_LINK_MIGRATE
1207*5113495bSYour Name /**
1208*5113495bSYour Name  * struct dp_peer_info - Primary Peer information
1209*5113495bSYour Name  * @primary_peer_id: Primary peer id
1210*5113495bSYour Name  * @chip_id: Chip id of primary peer
1211*5113495bSYour Name  * @hw_peer_id: ast hash index
1212*5113495bSYour Name  * @ast_hash: ast hash value
1213*5113495bSYour Name  */
1214*5113495bSYour Name struct dp_peer_info {
1215*5113495bSYour Name 	uint16_t primary_peer_id;
1216*5113495bSYour Name 	uint8_t chip_id;
1217*5113495bSYour Name 	uint16_t hw_peer_id;
1218*5113495bSYour Name 	uint16_t ast_hash;
1219*5113495bSYour Name };
1220*5113495bSYour Name 
1221*5113495bSYour Name /**
1222*5113495bSYour Name  * dp_h2t_ptqm_migration_msg_send() - Send H2T PTQM message to FW
1223*5113495bSYour Name  * @dp_soc: DP SOC handle
1224*5113495bSYour Name  * @vdev_id: Vdev id of primary peer
1225*5113495bSYour Name  * @pdev_id: Pdev id of primary peer
1226*5113495bSYour Name  * @chip_id: Chip id of primary peer
1227*5113495bSYour Name  * @peer_id: Peer id of primary peer
1228*5113495bSYour Name  * @ml_peer_id: Peer id of MLD peer
1229*5113495bSYour Name  * @src_info: source info for DS
1230*5113495bSYour Name  * @status: success or failure status of PTQM migration
1231*5113495bSYour Name  *
1232*5113495bSYour Name  * Return: Success when HTT message is sent, error on failure
1233*5113495bSYour Name  */
1234*5113495bSYour Name QDF_STATUS
1235*5113495bSYour Name dp_h2t_ptqm_migration_msg_send(struct dp_soc *dp_soc, uint16_t vdev_id,
1236*5113495bSYour Name 			       uint8_t pdev_id,
1237*5113495bSYour Name 			       uint8_t chip_id, uint16_t peer_id,
1238*5113495bSYour Name 			       uint16_t ml_peer_id, uint16_t src_info,
1239*5113495bSYour Name 			       QDF_STATUS status);
1240*5113495bSYour Name 
1241*5113495bSYour Name /**
1242*5113495bSYour Name  * dp_htt_reo_migration() - Reo migration API
1243*5113495bSYour Name  * @soc: DP SOC handle
1244*5113495bSYour Name  * @peer_id: Peer id of primary peer
1245*5113495bSYour Name  * @ml_peer_id: Peer id of MLD peer
1246*5113495bSYour Name  * @vdev_id: Vdev id of primary peer
1247*5113495bSYour Name  * @pdev_id: Pdev id of primary peer
1248*5113495bSYour Name  * @chip_id: Chip id of primary peer
1249*5113495bSYour Name  *
1250*5113495bSYour Name  * Return: Success if migration completes, error on failure
1251*5113495bSYour Name  */
1252*5113495bSYour Name QDF_STATUS dp_htt_reo_migration(struct dp_soc *soc, uint16_t peer_id,
1253*5113495bSYour Name 				uint16_t ml_peer_id, uint16_t vdev_id,
1254*5113495bSYour Name 				uint8_t pdev_id, uint8_t chip_id);
1255*5113495bSYour Name #endif
1256*5113495bSYour Name #endif /* _DP_HTT_H_ */
1257