xref: /wlan-driver/qca-wifi-host-cmn/dp/wifi3.0/monitor/dp_rx_mon.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2022-2024 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_RX_MON_H_
21*5113495bSYour Name #define _DP_RX_MON_H_
22*5113495bSYour Name 
23*5113495bSYour Name #define dp_rx_mon_status_alert(params...) QDF_TRACE_FATAL(QDF_MODULE_ID_DP_RX_MON_STATUS, params)
24*5113495bSYour Name #define dp_rx_mon_status_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_DP_RX_MON_STATUS, params)
25*5113495bSYour Name #define dp_rx_mon_status_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_DP_RX_MON_STATUS, params)
26*5113495bSYour Name #define dp_rx_mon_status_info(params...) \
27*5113495bSYour Name 	__QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_DP_RX_MON_STATUS, ## params)
28*5113495bSYour Name #define dp_rx_mon_status_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_DP_RX_MON_STATUS, params)
29*5113495bSYour Name 
30*5113495bSYour Name #define dp_rx_mon_dest_alert(params...) QDF_TRACE_FATAL(QDF_MODULE_ID_DP_RX_MON_DEST, params)
31*5113495bSYour Name #define dp_rx_mon_dest_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_DP_RX_MON_DEST, params)
32*5113495bSYour Name #define dp_rx_mon_dest_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_DP_RX_MON_DEST, params)
33*5113495bSYour Name #define dp_rx_mon_dest_info(params...) \
34*5113495bSYour Name 	__QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_DP_RX_MON_DEST, ## params)
35*5113495bSYour Name #define dp_rx_mon_dest_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_DP_RX_MON_DEST, params)
36*5113495bSYour Name 
37*5113495bSYour Name /* The maximum buffer length allocated for radiotap for monitor status buffer */
38*5113495bSYour Name #define MAX_MONITOR_HEADER (512)
39*5113495bSYour Name 
40*5113495bSYour Name /* l2 header pad byte in case of Raw frame is Zero and 2 in non raw */
41*5113495bSYour Name #define DP_RX_MON_RAW_L2_HDR_PAD_BYTE (0)
42*5113495bSYour Name #define DP_RX_MON_NONRAW_L2_HDR_PAD_BYTE (2)
43*5113495bSYour Name 
44*5113495bSYour Name /*
45*5113495bSYour Name  * The maximum headroom reserved for monitor destination buffer to
46*5113495bSYour Name  * accommodate radiotap header and protocol flow tag
47*5113495bSYour Name  */
48*5113495bSYour Name /*
49*5113495bSYour Name  *  -------------------------------------------------
50*5113495bSYour Name  * |       Protocol & Flow TAG      | Radiotap header|
51*5113495bSYour Name  * |                                |  Length(128 B) |
52*5113495bSYour Name  * |  ((4* QDF_NBUF_MAX_FRAGS) * 2) |                |
53*5113495bSYour Name  *  -------------------------------------------------
54*5113495bSYour Name  */
55*5113495bSYour Name #define DP_RX_MON_MAX_RADIO_TAP_HDR (128)
56*5113495bSYour Name #define DP_RX_MON_PF_TAG_LEN_PER_FRAG (4)
57*5113495bSYour Name #define DP_RX_MON_TOT_PF_TAG_LEN \
58*5113495bSYour Name 	((DP_RX_MON_PF_TAG_LEN_PER_FRAG) * (QDF_NBUF_MAX_FRAGS))
59*5113495bSYour Name #define DP_RX_MON_MAX_MONITOR_HEADER \
60*5113495bSYour Name 	((DP_RX_MON_TOT_PF_TAG_LEN * 2) + (DP_RX_MON_MAX_RADIO_TAP_HDR))
61*5113495bSYour Name 
62*5113495bSYour Name #define DP_RX_MON_LLC_SIZE 4
63*5113495bSYour Name #define DP_RX_MON_SNAP_SIZE 4
64*5113495bSYour Name #define DP_RX_MON_DECAP_HDR_SIZE 14
65*5113495bSYour Name 
66*5113495bSYour Name 
67*5113495bSYour Name /**
68*5113495bSYour Name  * enum dp_mon_reap_status - monitor status ring ppdu status
69*5113495bSYour Name  *
70*5113495bSYour Name  * @DP_MON_STATUS_NO_DMA: DMA not done for status ring entry
71*5113495bSYour Name  * @DP_MON_STATUS_MATCH: status and dest ppdu id matches
72*5113495bSYour Name  * @DP_MON_STATUS_LAG: status ppdu id is lagging
73*5113495bSYour Name  * @DP_MON_STATUS_LEAD: status ppdu id is leading
74*5113495bSYour Name  * @DP_MON_STATUS_REPLENISH: status ring entry is NULL
75*5113495bSYour Name  * @DP_MON_STATUS_MAX: max num of different status
76*5113495bSYour Name  */
77*5113495bSYour Name enum dp_mon_reap_status {
78*5113495bSYour Name 	DP_MON_STATUS_NO_DMA,
79*5113495bSYour Name 	DP_MON_STATUS_MATCH,
80*5113495bSYour Name 	DP_MON_STATUS_LAG,
81*5113495bSYour Name 	DP_MON_STATUS_LEAD,
82*5113495bSYour Name 	DP_MON_STATUS_REPLENISH,
83*5113495bSYour Name 	DP_MON_STATUS_MAX
84*5113495bSYour Name };
85*5113495bSYour Name 
86*5113495bSYour Name /**
87*5113495bSYour Name  * dp_rx_mon_status_process() - Process monitor status ring and
88*5113495bSYour Name  *			TLV in status ring.
89*5113495bSYour Name  *
90*5113495bSYour Name  * @soc: core txrx main context
91*5113495bSYour Name  * @int_ctx: interrupt context
92*5113495bSYour Name  * @mac_id: mac_id which is one of 3 mac_ids
93*5113495bSYour Name  * @quota: No. of ring entry that can be serviced in one shot.
94*5113495bSYour Name  *
95*5113495bSYour Name  * Return: uint32_t: No. of ring entry that is processed.
96*5113495bSYour Name  */
97*5113495bSYour Name uint32_t
98*5113495bSYour Name dp_rx_mon_status_process(struct dp_soc *soc, struct dp_intr *int_ctx,
99*5113495bSYour Name 			 uint32_t mac_id, uint32_t quota);
100*5113495bSYour Name 
101*5113495bSYour Name /**
102*5113495bSYour Name  * dp_rx_populate_cbf_hdr - Send CBF frame with htt header
103*5113495bSYour Name  * @soc: Datapath soc handle
104*5113495bSYour Name  * @mac_id: Datapath mac id
105*5113495bSYour Name  * @event: WDI event
106*5113495bSYour Name  * @data: mpdu buffer
107*5113495bSYour Name  * @msdu_timestamp: time stamp
108*5113495bSYour Name  *
109*5113495bSYour Name  * Return: QDF_STATUS
110*5113495bSYour Name  */
111*5113495bSYour Name QDF_STATUS dp_rx_populate_cbf_hdr(struct dp_soc *soc,
112*5113495bSYour Name 				  uint32_t mac_id, uint32_t event,
113*5113495bSYour Name 				  qdf_nbuf_t data, uint32_t msdu_timestamp);
114*5113495bSYour Name 
115*5113495bSYour Name /**
116*5113495bSYour Name  * dp_rx_mon_handle_status_buf_done() - Handle DMA not done case for
117*5113495bSYour Name  * monitor status ring
118*5113495bSYour Name  *
119*5113495bSYour Name  * @pdev: DP pdev handle
120*5113495bSYour Name  * @mon_status_srng: Monitor status SRNG
121*5113495bSYour Name  *
122*5113495bSYour Name  * Return: enum dp_mon_reap_status
123*5113495bSYour Name  */
124*5113495bSYour Name enum dp_mon_reap_status
125*5113495bSYour Name dp_rx_mon_handle_status_buf_done(struct dp_pdev *pdev,
126*5113495bSYour Name 				 void *mon_status_srng);
127*5113495bSYour Name 
128*5113495bSYour Name #ifdef QCA_SUPPORT_FULL_MON
129*5113495bSYour Name 
130*5113495bSYour Name /**
131*5113495bSYour Name  * dp_full_mon_attach() - Full monitor mode attach
132*5113495bSYour Name  * This API initializes full monitor mode resources
133*5113495bSYour Name  *
134*5113495bSYour Name  * @pdev: dp pdev object
135*5113495bSYour Name  *
136*5113495bSYour Name  * Return: void
137*5113495bSYour Name  *
138*5113495bSYour Name  */
139*5113495bSYour Name void dp_full_mon_attach(struct dp_pdev *pdev);
140*5113495bSYour Name 
141*5113495bSYour Name /**
142*5113495bSYour Name  * dp_full_mon_detach() - Full monitor mode attach
143*5113495bSYour Name  * This API deinitilises full monitor mode resources
144*5113495bSYour Name  *
145*5113495bSYour Name  * @pdev: dp pdev object
146*5113495bSYour Name  *
147*5113495bSYour Name  * Return: void
148*5113495bSYour Name  *
149*5113495bSYour Name  */
150*5113495bSYour Name void dp_full_mon_detach(struct dp_pdev *pdev);
151*5113495bSYour Name 
152*5113495bSYour Name /**
153*5113495bSYour Name  * dp_full_mon_partial_detach() - Full monitor mode detach with no locks
154*5113495bSYour Name  * This API deinitilises full monitor mode resources but mon_desc not free
155*5113495bSYour Name  *
156*5113495bSYour Name  * @pdev: dp pdev object
157*5113495bSYour Name  *
158*5113495bSYour Name  * Return: void
159*5113495bSYour Name  *
160*5113495bSYour Name  */
161*5113495bSYour Name void dp_full_mon_partial_detach(struct dp_pdev *pdev);
162*5113495bSYour Name 
163*5113495bSYour Name /**
164*5113495bSYour Name  * dp_rx_mon_process()- API to process monitor destination ring for
165*5113495bSYour Name  * full monitor mode
166*5113495bSYour Name  *
167*5113495bSYour Name  * @soc: dp soc handle
168*5113495bSYour Name  * @int_ctx: interrupt context
169*5113495bSYour Name  * @mac_id: lmac id
170*5113495bSYour Name  * @quota: No. of ring entry that can be serviced in one shot.
171*5113495bSYour Name  */
172*5113495bSYour Name 
173*5113495bSYour Name uint32_t dp_rx_mon_process(struct dp_soc *soc, struct dp_intr *int_ctx,
174*5113495bSYour Name 			   uint32_t mac_id, uint32_t quota);
175*5113495bSYour Name 
176*5113495bSYour Name #else
177*5113495bSYour Name /**
178*5113495bSYour Name  * dp_full_mon_attach() - attach full monitor mode resources
179*5113495bSYour Name  * @pdev: Datapath PDEV handle
180*5113495bSYour Name  *
181*5113495bSYour Name  * Return: void
182*5113495bSYour Name  */
dp_full_mon_attach(struct dp_pdev * pdev)183*5113495bSYour Name static inline void dp_full_mon_attach(struct dp_pdev *pdev)
184*5113495bSYour Name {
185*5113495bSYour Name }
186*5113495bSYour Name 
187*5113495bSYour Name /**
188*5113495bSYour Name  * dp_full_mon_detach() - detach full monitor mode resources
189*5113495bSYour Name  * @pdev: Datapath PDEV handle
190*5113495bSYour Name  *
191*5113495bSYour Name  * Return: void
192*5113495bSYour Name  *
193*5113495bSYour Name  */
dp_full_mon_detach(struct dp_pdev * pdev)194*5113495bSYour Name static inline void dp_full_mon_detach(struct dp_pdev *pdev)
195*5113495bSYour Name {
196*5113495bSYour Name }
197*5113495bSYour Name #endif
198*5113495bSYour Name 
199*5113495bSYour Name /**
200*5113495bSYour Name  * dp_mon_link_free() - free monitor link desc pool
201*5113495bSYour Name  * @pdev: core txrx pdev context
202*5113495bSYour Name  *
203*5113495bSYour Name  * This function will release DP link desc pool for monitor mode from
204*5113495bSYour Name  * main device context.
205*5113495bSYour Name  *
206*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: success
207*5113495bSYour Name  *         QDF_STATUS_E_RESOURCES: Error return
208*5113495bSYour Name  */
209*5113495bSYour Name QDF_STATUS dp_mon_link_free(struct dp_pdev *pdev);
210*5113495bSYour Name 
211*5113495bSYour Name 
212*5113495bSYour Name /**
213*5113495bSYour Name  * dp_mon_process() - Main monitor mode processing roution.
214*5113495bSYour Name  * @soc: core txrx main context
215*5113495bSYour Name  * @int_ctx: interrupt context
216*5113495bSYour Name  * @mac_id: mac_id which is one of 3 mac_ids
217*5113495bSYour Name  * @quota: No. of status ring entry that can be serviced in one shot.
218*5113495bSYour Name  *
219*5113495bSYour Name  * This call monitor status ring process then monitor
220*5113495bSYour Name  * destination ring process.
221*5113495bSYour Name  * Called from the bottom half (tasklet/NET_RX_SOFTIRQ)
222*5113495bSYour Name  *
223*5113495bSYour Name  * Return: uint32_t: No. of ring entry that is processed.
224*5113495bSYour Name  */
225*5113495bSYour Name uint32_t dp_mon_process(struct dp_soc *soc, struct dp_intr *int_ctx,
226*5113495bSYour Name 			uint32_t mac_id, uint32_t quota);
227*5113495bSYour Name 
228*5113495bSYour Name QDF_STATUS dp_rx_mon_deliver(struct dp_soc *soc, uint32_t mac_id,
229*5113495bSYour Name 	qdf_nbuf_t head_msdu, qdf_nbuf_t tail_msdu);
230*5113495bSYour Name 
231*5113495bSYour Name /**
232*5113495bSYour Name  * dp_rx_mon_deliver_non_std() - deliver frames for non standard path
233*5113495bSYour Name  * @soc: core txrx main context
234*5113495bSYour Name  * @mac_id: MAC ID
235*5113495bSYour Name  *
236*5113495bSYour Name  * This function delivers the radio tap and dummy MSDU
237*5113495bSYour Name  * into user layer application for preamble only PPDU.
238*5113495bSYour Name  *
239*5113495bSYour Name  * Return: Operation status
240*5113495bSYour Name  */
241*5113495bSYour Name QDF_STATUS dp_rx_mon_deliver_non_std(struct dp_soc *soc, uint32_t mac_id);
242*5113495bSYour Name 
243*5113495bSYour Name #ifndef REMOVE_MON_DBG_STATS
244*5113495bSYour Name /**
245*5113495bSYour Name  * dp_rx_mon_update_dbg_ppdu_stats() - Update status ring TLV count
246*5113495bSYour Name  * @ppdu_info: HAL RX PPDU info retrieved from status ring TLV
247*5113495bSYour Name  * @rx_mon_stats: monitor mode status/destination ring PPDU and MPDU count
248*5113495bSYour Name  *
249*5113495bSYour Name  * Update status ring PPDU start and end count. Keep track TLV state on
250*5113495bSYour Name  * PPDU start and end to find out if start and end is matching. Keep
251*5113495bSYour Name  * track missing PPDU start and end count. Keep track matching PPDU
252*5113495bSYour Name  * start and end count.
253*5113495bSYour Name  *
254*5113495bSYour Name  * Return: None
255*5113495bSYour Name  */
256*5113495bSYour Name static inline void
dp_rx_mon_update_dbg_ppdu_stats(struct hal_rx_ppdu_info * ppdu_info,struct cdp_pdev_mon_stats * rx_mon_stats)257*5113495bSYour Name dp_rx_mon_update_dbg_ppdu_stats(struct hal_rx_ppdu_info *ppdu_info,
258*5113495bSYour Name 				struct cdp_pdev_mon_stats *rx_mon_stats)
259*5113495bSYour Name {
260*5113495bSYour Name 	if (ppdu_info->rx_state ==
261*5113495bSYour Name 		HAL_RX_MON_PPDU_START) {
262*5113495bSYour Name 		rx_mon_stats->status_ppdu_start++;
263*5113495bSYour Name 		if (rx_mon_stats->status_ppdu_state
264*5113495bSYour Name 			!= CDP_MON_PPDU_END)
265*5113495bSYour Name 			rx_mon_stats->status_ppdu_end_mis++;
266*5113495bSYour Name 		rx_mon_stats->status_ppdu_state
267*5113495bSYour Name 			= CDP_MON_PPDU_START;
268*5113495bSYour Name 		ppdu_info->rx_state = HAL_RX_MON_PPDU_RESET;
269*5113495bSYour Name 	} else if (ppdu_info->rx_state ==
270*5113495bSYour Name 		HAL_RX_MON_PPDU_END) {
271*5113495bSYour Name 		rx_mon_stats->status_ppdu_end++;
272*5113495bSYour Name 		if (rx_mon_stats->status_ppdu_state
273*5113495bSYour Name 			!= CDP_MON_PPDU_START)
274*5113495bSYour Name 			rx_mon_stats->status_ppdu_start_mis++;
275*5113495bSYour Name 		else
276*5113495bSYour Name 			rx_mon_stats->status_ppdu_compl++;
277*5113495bSYour Name 		rx_mon_stats->status_ppdu_state
278*5113495bSYour Name 			= CDP_MON_PPDU_END;
279*5113495bSYour Name 		ppdu_info->rx_state = HAL_RX_MON_PPDU_RESET;
280*5113495bSYour Name 	}
281*5113495bSYour Name }
282*5113495bSYour Name 
283*5113495bSYour Name /**
284*5113495bSYour Name  * dp_rx_mon_init_dbg_ppdu_stats() - initialization for monitor mode stats
285*5113495bSYour Name  * @ppdu_info: HAL RX PPDU info retrieved from status ring TLV
286*5113495bSYour Name  * @rx_mon_stats: monitor mode status/destination ring PPDU and MPDU count
287*5113495bSYour Name  *
288*5113495bSYour Name  * Return: None
289*5113495bSYour Name  */
290*5113495bSYour Name static inline void
dp_rx_mon_init_dbg_ppdu_stats(struct hal_rx_ppdu_info * ppdu_info,struct cdp_pdev_mon_stats * rx_mon_stats)291*5113495bSYour Name dp_rx_mon_init_dbg_ppdu_stats(struct hal_rx_ppdu_info *ppdu_info,
292*5113495bSYour Name 			      struct cdp_pdev_mon_stats *rx_mon_stats)
293*5113495bSYour Name {
294*5113495bSYour Name 	ppdu_info->rx_state = HAL_RX_MON_PPDU_END;
295*5113495bSYour Name 	rx_mon_stats->status_ppdu_state
296*5113495bSYour Name 		= CDP_MON_PPDU_END;
297*5113495bSYour Name }
298*5113495bSYour Name 
299*5113495bSYour Name #else
300*5113495bSYour Name static inline void
dp_rx_mon_update_dbg_ppdu_stats(struct hal_rx_ppdu_info * ppdu_info,struct cdp_pdev_mon_stats * rx_mon_stats)301*5113495bSYour Name dp_rx_mon_update_dbg_ppdu_stats(struct hal_rx_ppdu_info *ppdu_info,
302*5113495bSYour Name 				struct cdp_pdev_mon_stats *rx_mon_stats)
303*5113495bSYour Name {
304*5113495bSYour Name }
305*5113495bSYour Name 
306*5113495bSYour Name static inline void
dp_rx_mon_init_dbg_ppdu_stats(struct hal_rx_ppdu_info * ppdu_info,struct cdp_pdev_mon_stats * rx_mon_stats)307*5113495bSYour Name dp_rx_mon_init_dbg_ppdu_stats(struct hal_rx_ppdu_info *ppdu_info,
308*5113495bSYour Name 			      struct cdp_pdev_mon_stats *rx_mon_stats)
309*5113495bSYour Name {
310*5113495bSYour Name }
311*5113495bSYour Name 
312*5113495bSYour Name #endif
313*5113495bSYour Name 
314*5113495bSYour Name #ifdef QCA_ENHANCED_STATS_SUPPORT
315*5113495bSYour Name void
316*5113495bSYour Name dp_rx_populate_rx_rssi_chain(struct hal_rx_ppdu_info *ppdu_info,
317*5113495bSYour Name 			     struct cdp_rx_indication_ppdu *cdp_rx_ppdu,
318*5113495bSYour Name 			     struct dp_pdev *pdev);
319*5113495bSYour Name 
320*5113495bSYour Name /**
321*5113495bSYour Name  * dp_rx_populate_su_evm_details() - Populate su evm info
322*5113495bSYour Name  * @ppdu_info: ppdu info structure from ppdu ring
323*5113495bSYour Name  * @cdp_rx_ppdu: rx ppdu indication structure
324*5113495bSYour Name  */
325*5113495bSYour Name void
326*5113495bSYour Name dp_rx_populate_su_evm_details(struct hal_rx_ppdu_info *ppdu_info,
327*5113495bSYour Name 			      struct cdp_rx_indication_ppdu *cdp_rx_ppdu);
328*5113495bSYour Name 
329*5113495bSYour Name /**
330*5113495bSYour Name * dp_rx_handle_ppdu_stats() - Allocate and deliver ppdu stats to cdp layer
331*5113495bSYour Name * @soc: core txrx main context
332*5113495bSYour Name * @pdev: pdev structure
333*5113495bSYour Name * @ppdu_info: structure for rx ppdu ring
334*5113495bSYour Name *
335*5113495bSYour Name * Return: none
336*5113495bSYour Name */
337*5113495bSYour Name void
338*5113495bSYour Name dp_rx_handle_ppdu_stats(struct dp_soc *soc, struct dp_pdev *pdev,
339*5113495bSYour Name 			struct hal_rx_ppdu_info *ppdu_info);
340*5113495bSYour Name #else
341*5113495bSYour Name static inline void
dp_rx_populate_rx_rssi_chain(struct hal_rx_ppdu_info * ppdu_info,struct cdp_rx_indication_ppdu * cdp_rx_ppdu)342*5113495bSYour Name dp_rx_populate_rx_rssi_chain(struct hal_rx_ppdu_info *ppdu_info,
343*5113495bSYour Name 			     struct cdp_rx_indication_ppdu *cdp_rx_ppdu)
344*5113495bSYour Name {
345*5113495bSYour Name }
346*5113495bSYour Name 
347*5113495bSYour Name static inline void
dp_rx_populate_su_evm_details(struct hal_rx_ppdu_info * ppdu_info,struct cdp_rx_indication_ppdu * cdp_rx_ppdu)348*5113495bSYour Name dp_rx_populate_su_evm_details(struct hal_rx_ppdu_info *ppdu_info,
349*5113495bSYour Name 			      struct cdp_rx_indication_ppdu *cdp_rx_ppdu)
350*5113495bSYour Name {
351*5113495bSYour Name }
352*5113495bSYour Name 
353*5113495bSYour Name static inline void
dp_rx_populate_cdp_indication_ppdu_user(struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info,struct cdp_rx_indication_ppdu * cdp_rx_ppdu)354*5113495bSYour Name dp_rx_populate_cdp_indication_ppdu_user(struct dp_pdev *pdev,
355*5113495bSYour Name 					struct hal_rx_ppdu_info *ppdu_info,
356*5113495bSYour Name 					struct cdp_rx_indication_ppdu
357*5113495bSYour Name 					*cdp_rx_ppdu)
358*5113495bSYour Name {
359*5113495bSYour Name }
360*5113495bSYour Name 
361*5113495bSYour Name static inline void
dp_rx_populate_cdp_indication_ppdu(struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info,struct cdp_rx_indication_ppdu * cdp_rx_ppdu)362*5113495bSYour Name dp_rx_populate_cdp_indication_ppdu(struct dp_pdev *pdev,
363*5113495bSYour Name 				   struct hal_rx_ppdu_info *ppdu_info,
364*5113495bSYour Name 				   struct cdp_rx_indication_ppdu *cdp_rx_ppdu)
365*5113495bSYour Name {
366*5113495bSYour Name }
367*5113495bSYour Name 
dp_rx_rate_stats_update(struct dp_peer * peer,struct cdp_rx_indication_ppdu * ppdu,uint32_t user)368*5113495bSYour Name static inline void dp_rx_rate_stats_update(struct dp_peer *peer,
369*5113495bSYour Name 					   struct cdp_rx_indication_ppdu *ppdu,
370*5113495bSYour Name 					   uint32_t user)
371*5113495bSYour Name {
372*5113495bSYour Name }
373*5113495bSYour Name 
374*5113495bSYour Name static inline void
dp_rx_handle_ppdu_stats(struct dp_soc * soc,struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info)375*5113495bSYour Name dp_rx_handle_ppdu_stats(struct dp_soc *soc, struct dp_pdev *pdev,
376*5113495bSYour Name 			struct hal_rx_ppdu_info *ppdu_info)
377*5113495bSYour Name {
378*5113495bSYour Name }
379*5113495bSYour Name #endif /* QCA_ENHANCED_STATS_SUPPORT */
380*5113495bSYour Name 
381*5113495bSYour Name #ifdef WLAN_SUPPORT_CTRL_FRAME_STATS
382*5113495bSYour Name /**
383*5113495bSYour Name  * dp_rx_mon_update_user_ctrl_frame_stats() - Function to update Rx control
384*5113495bSYour Name  * frame stats per user.
385*5113495bSYour Name  * @pdev: DP Pdev Pointer
386*5113495bSYour Name  * @ppdu_info: HAL Rx PPDU info Pointer
387*5113495bSYour Name  *
388*5113495bSYour Name  * Return: None
389*5113495bSYour Name  */
390*5113495bSYour Name void dp_rx_mon_update_user_ctrl_frame_stats(struct dp_pdev *pdev,
391*5113495bSYour Name 					    struct hal_rx_ppdu_info *ppdu_info);
392*5113495bSYour Name #else
393*5113495bSYour Name static inline void
dp_rx_mon_update_user_ctrl_frame_stats(struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info)394*5113495bSYour Name dp_rx_mon_update_user_ctrl_frame_stats(struct dp_pdev *pdev,
395*5113495bSYour Name 				       struct hal_rx_ppdu_info *ppdu_info)
396*5113495bSYour Name {
397*5113495bSYour Name }
398*5113495bSYour Name #endif /* WLAN_SUPPORT_CTRL_FRAME_STATS */
399*5113495bSYour Name 
400*5113495bSYour Name #ifdef QCA_UNDECODED_METADATA_SUPPORT
401*5113495bSYour Name /**
402*5113495bSYour Name  * dp_rx_handle_ppdu_undecoded_metadata() - Allocate and deliver ppdu info
403*5113495bSYour Name  * undecoded metadata to cdp layer
404*5113495bSYour Name  * @soc: core txrx main context
405*5113495bSYour Name  * @pdev: pdev structure
406*5113495bSYour Name  * @ppdu_info: structure for rx ppdu ring
407*5113495bSYour Name  *
408*5113495bSYour Name  * Return: none
409*5113495bSYour Name  */
410*5113495bSYour Name void
411*5113495bSYour Name dp_rx_handle_ppdu_undecoded_metadata(struct dp_soc *soc, struct dp_pdev *pdev,
412*5113495bSYour Name 				     struct hal_rx_ppdu_info *ppdu_info);
413*5113495bSYour Name 
414*5113495bSYour Name #else
415*5113495bSYour Name static inline void
dp_rx_handle_ppdu_undecoded_metadata(struct dp_soc * soc,struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info)416*5113495bSYour Name dp_rx_handle_ppdu_undecoded_metadata(struct dp_soc *soc, struct dp_pdev *pdev,
417*5113495bSYour Name 				     struct hal_rx_ppdu_info *ppdu_info)
418*5113495bSYour Name {
419*5113495bSYour Name }
420*5113495bSYour Name #endif /* QCA_UNDECODED_METADATA_SUPPORT */
421*5113495bSYour Name 
422*5113495bSYour Name #ifdef QCA_MCOPY_SUPPORT
423*5113495bSYour Name /**
424*5113495bSYour Name  * dp_rx_handle_mcopy_mode() - Allocate and deliver first MSDU payload
425*5113495bSYour Name  * @soc: core txrx main context
426*5113495bSYour Name  * @pdev: pdev structure
427*5113495bSYour Name  * @ppdu_info: structure for rx ppdu ring
428*5113495bSYour Name  * @nbuf: QDF nbuf
429*5113495bSYour Name  * @fcs_ok_mpdu_cnt: fcs passed mpdu index
430*5113495bSYour Name  * @deliver_frame: flag to deliver wdi event
431*5113495bSYour Name  *
432*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - If nbuf to be freed by caller
433*5113495bSYour Name  *         QDF_STATUS_E_ALREADY - If nbuf not to be freed by caller
434*5113495bSYour Name  */
435*5113495bSYour Name QDF_STATUS
436*5113495bSYour Name dp_rx_handle_mcopy_mode(struct dp_soc *soc, struct dp_pdev *pdev,
437*5113495bSYour Name 			struct hal_rx_ppdu_info *ppdu_info, qdf_nbuf_t nbuf,
438*5113495bSYour Name 			uint8_t fcs_ok_mpdu_cnt, bool deliver_frame);
439*5113495bSYour Name 
440*5113495bSYour Name /**
441*5113495bSYour Name  * dp_rx_mcopy_handle_last_mpdu() - cache and delive last MPDU header in a
442*5113495bSYour Name  * status buffer if MPDU end tlv is received in different buffer
443*5113495bSYour Name  * @soc: core txrx main context
444*5113495bSYour Name  * @pdev: pdev structure
445*5113495bSYour Name  * @ppdu_info: structure for rx ppdu ring
446*5113495bSYour Name  * @status_nbuf: QDF nbuf
447*5113495bSYour Name  *
448*5113495bSYour Name  * Return: void
449*5113495bSYour Name  */
450*5113495bSYour Name void
451*5113495bSYour Name dp_rx_mcopy_handle_last_mpdu(struct dp_soc *soc, struct dp_pdev *pdev,
452*5113495bSYour Name 			     struct hal_rx_ppdu_info *ppdu_info,
453*5113495bSYour Name 			     qdf_nbuf_t status_nbuf);
454*5113495bSYour Name 
455*5113495bSYour Name /**
456*5113495bSYour Name  * dp_rx_mcopy_process_ppdu_info() - update mcopy ppdu info
457*5113495bSYour Name  * @pdev: pdev structure
458*5113495bSYour Name  * @ppdu_info: structure for rx ppdu ring
459*5113495bSYour Name  * @tlv_status: processed TLV status
460*5113495bSYour Name  *
461*5113495bSYour Name  * Return: void
462*5113495bSYour Name  */
463*5113495bSYour Name void
464*5113495bSYour Name dp_rx_mcopy_process_ppdu_info(struct dp_pdev *pdev,
465*5113495bSYour Name 			      struct hal_rx_ppdu_info *ppdu_info,
466*5113495bSYour Name 			      uint32_t tlv_status);
467*5113495bSYour Name 
468*5113495bSYour Name void
469*5113495bSYour Name dp_rx_process_mcopy_mode(struct dp_soc *soc, struct dp_pdev *pdev,
470*5113495bSYour Name 			 struct hal_rx_ppdu_info *ppdu_info,
471*5113495bSYour Name 			 uint32_t tlv_status,
472*5113495bSYour Name 			 qdf_nbuf_t status_nbuf);
473*5113495bSYour Name #else
474*5113495bSYour Name static inline QDF_STATUS
dp_rx_handle_mcopy_mode(struct dp_soc * soc,struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info,qdf_nbuf_t nbuf,uint8_t fcs_ok_cnt,bool deliver_frame)475*5113495bSYour Name dp_rx_handle_mcopy_mode(struct dp_soc *soc, struct dp_pdev *pdev,
476*5113495bSYour Name 			struct hal_rx_ppdu_info *ppdu_info, qdf_nbuf_t nbuf,
477*5113495bSYour Name 			uint8_t fcs_ok_cnt, bool deliver_frame)
478*5113495bSYour Name {
479*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
480*5113495bSYour Name }
481*5113495bSYour Name 
482*5113495bSYour Name static inline void
dp_rx_mcopy_handle_last_mpdu(struct dp_soc * soc,struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info,qdf_nbuf_t status_nbuf)483*5113495bSYour Name dp_rx_mcopy_handle_last_mpdu(struct dp_soc *soc, struct dp_pdev *pdev,
484*5113495bSYour Name 			     struct hal_rx_ppdu_info *ppdu_info,
485*5113495bSYour Name 			     qdf_nbuf_t status_nbuf)
486*5113495bSYour Name {
487*5113495bSYour Name }
488*5113495bSYour Name 
489*5113495bSYour Name static inline void
dp_rx_mcopy_process_ppdu_info(struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info,uint32_t tlv_status)490*5113495bSYour Name dp_rx_mcopy_process_ppdu_info(struct dp_pdev *pdev,
491*5113495bSYour Name 			      struct hal_rx_ppdu_info *ppdu_info,
492*5113495bSYour Name 			      uint32_t tlv_status)
493*5113495bSYour Name {
494*5113495bSYour Name }
495*5113495bSYour Name 
496*5113495bSYour Name static inline void
dp_rx_process_mcopy_mode(struct dp_soc * soc,struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info,uint32_t tlv_status,qdf_nbuf_t status_nbuf)497*5113495bSYour Name dp_rx_process_mcopy_mode(struct dp_soc *soc, struct dp_pdev *pdev,
498*5113495bSYour Name 			 struct hal_rx_ppdu_info *ppdu_info,
499*5113495bSYour Name 			 uint32_t tlv_status,
500*5113495bSYour Name 			 qdf_nbuf_t status_nbuf)
501*5113495bSYour Name {
502*5113495bSYour Name }
503*5113495bSYour Name #endif /* QCA_MCOPY_SUPPORT */
504*5113495bSYour Name 
505*5113495bSYour Name /**
506*5113495bSYour Name  * dp_rx_handle_smart_mesh_mode() - Deliver header for smart mesh
507*5113495bSYour Name  * @soc: Datapath SOC handle
508*5113495bSYour Name  * @pdev: Datapath PDEV handle
509*5113495bSYour Name  * @ppdu_info: Structure for rx ppdu info
510*5113495bSYour Name  * @nbuf: Qdf nbuf abstraction for linux skb
511*5113495bSYour Name  *
512*5113495bSYour Name  * Return: 0 on success, 1 on failure
513*5113495bSYour Name  */
514*5113495bSYour Name int
515*5113495bSYour Name dp_rx_handle_smart_mesh_mode(struct dp_soc *soc, struct dp_pdev *pdev,
516*5113495bSYour Name 			      struct hal_rx_ppdu_info *ppdu_info,
517*5113495bSYour Name 			      qdf_nbuf_t nbuf);
518*5113495bSYour Name 
519*5113495bSYour Name /**
520*5113495bSYour Name  * dp_rx_nbuf_prepare() - prepare RX nbuf
521*5113495bSYour Name  * @soc: core txrx main context
522*5113495bSYour Name  * @pdev: core txrx pdev context
523*5113495bSYour Name  *
524*5113495bSYour Name  * This function alloc & map nbuf for RX dma usage, retry it if failed
525*5113495bSYour Name  * until retry times reaches max threshold or succeeded.
526*5113495bSYour Name  *
527*5113495bSYour Name  * Return: qdf_nbuf_t pointer if succeeded, NULL if failed.
528*5113495bSYour Name  */
529*5113495bSYour Name qdf_nbuf_t
530*5113495bSYour Name dp_rx_nbuf_prepare(struct dp_soc *soc, struct dp_pdev *pdev);
531*5113495bSYour Name 
532*5113495bSYour Name #if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
533*5113495bSYour Name 
534*5113495bSYour Name /**
535*5113495bSYour Name  * dp_rx_mon_handle_cfr_mu_info() - Gather macaddr and ast_index of peer(s) in
536*5113495bSYour Name  * the PPDU received, this will be used for correlation of CFR data captured
537*5113495bSYour Name  * for an UL-MU-PPDU
538*5113495bSYour Name  * @pdev: pdev ctx
539*5113495bSYour Name  * @ppdu_info: pointer to ppdu info structure populated from ppdu status TLVs
540*5113495bSYour Name  * @cdp_rx_ppdu: Rx PPDU indication structure
541*5113495bSYour Name  *
542*5113495bSYour Name  * Return: none
543*5113495bSYour Name  */
544*5113495bSYour Name void
545*5113495bSYour Name dp_rx_mon_handle_cfr_mu_info(struct dp_pdev *pdev,
546*5113495bSYour Name 			     struct hal_rx_ppdu_info *ppdu_info,
547*5113495bSYour Name 			     struct cdp_rx_indication_ppdu *cdp_rx_ppdu);
548*5113495bSYour Name 
549*5113495bSYour Name /**
550*5113495bSYour Name  * dp_rx_mon_populate_cfr_ppdu_info() - Populate cdp ppdu info from hal ppdu
551*5113495bSYour Name  * info
552*5113495bSYour Name  * @pdev: pdev ctx
553*5113495bSYour Name  * @ppdu_info: ppdu info structure from ppdu ring
554*5113495bSYour Name  * @cdp_rx_ppdu : Rx PPDU indication structure
555*5113495bSYour Name  *
556*5113495bSYour Name  * Return: none
557*5113495bSYour Name  */
558*5113495bSYour Name void
559*5113495bSYour Name dp_rx_mon_populate_cfr_ppdu_info(struct dp_pdev *pdev,
560*5113495bSYour Name 				 struct hal_rx_ppdu_info *ppdu_info,
561*5113495bSYour Name 				 struct cdp_rx_indication_ppdu *cdp_rx_ppdu);
562*5113495bSYour Name 
563*5113495bSYour Name /**
564*5113495bSYour Name  * dp_cfr_rcc_mode_status() - Return status of cfr rcc mode
565*5113495bSYour Name  * @pdev: pdev ctx
566*5113495bSYour Name  *
567*5113495bSYour Name  * Return: True or False
568*5113495bSYour Name  */
569*5113495bSYour Name bool
570*5113495bSYour Name dp_cfr_rcc_mode_status(struct dp_pdev *pdev);
571*5113495bSYour Name 
572*5113495bSYour Name /**
573*5113495bSYour Name  * dp_rx_mon_populate_cfr_info() - Populate cdp ppdu info from hal cfr info
574*5113495bSYour Name  * @pdev: pdev ctx
575*5113495bSYour Name  * @ppdu_info: ppdu info structure from ppdu ring
576*5113495bSYour Name  * @cdp_rx_ppdu: Rx PPDU indication structure
577*5113495bSYour Name  *
578*5113495bSYour Name  * Return: none
579*5113495bSYour Name  */
580*5113495bSYour Name void
581*5113495bSYour Name dp_rx_mon_populate_cfr_info(struct dp_pdev *pdev,
582*5113495bSYour Name 			    struct hal_rx_ppdu_info *ppdu_info,
583*5113495bSYour Name 			    struct cdp_rx_indication_ppdu *cdp_rx_ppdu);
584*5113495bSYour Name 
585*5113495bSYour Name /**
586*5113495bSYour Name  * dp_update_cfr_dbg_stats() - Increment RCC debug statistics
587*5113495bSYour Name  * @pdev: pdev structure
588*5113495bSYour Name  * @ppdu_info: structure for rx ppdu ring
589*5113495bSYour Name  *
590*5113495bSYour Name  * Return: none
591*5113495bSYour Name  */
592*5113495bSYour Name void
593*5113495bSYour Name dp_update_cfr_dbg_stats(struct dp_pdev *pdev,
594*5113495bSYour Name 			struct hal_rx_ppdu_info *ppdu_info);
595*5113495bSYour Name 
596*5113495bSYour Name /**
597*5113495bSYour Name  * dp_rx_handle_cfr() - Gather cfr info from hal ppdu info
598*5113495bSYour Name  * @soc: core txrx main context
599*5113495bSYour Name  * @pdev: pdev ctx
600*5113495bSYour Name  * @ppdu_info: ppdu info structure from ppdu ring
601*5113495bSYour Name  *
602*5113495bSYour Name  * Return: none
603*5113495bSYour Name  */
604*5113495bSYour Name void
605*5113495bSYour Name dp_rx_handle_cfr(struct dp_soc *soc, struct dp_pdev *pdev,
606*5113495bSYour Name 		 struct hal_rx_ppdu_info *ppdu_info);
607*5113495bSYour Name 
608*5113495bSYour Name /**
609*5113495bSYour Name  * dp_rx_populate_cfr_non_assoc_sta() - Populate cfr ppdu info for PPDUs from
610*5113495bSYour Name  * non-associated stations
611*5113495bSYour Name  * @pdev: pdev ctx
612*5113495bSYour Name  * @ppdu_info: ppdu info structure from ppdu ring
613*5113495bSYour Name  * @cdp_rx_ppdu: Rx PPDU indication structure
614*5113495bSYour Name  *
615*5113495bSYour Name  * Return: none
616*5113495bSYour Name  */
617*5113495bSYour Name void
618*5113495bSYour Name dp_rx_populate_cfr_non_assoc_sta(struct dp_pdev *pdev,
619*5113495bSYour Name 				 struct hal_rx_ppdu_info *ppdu_info,
620*5113495bSYour Name 				 struct cdp_rx_indication_ppdu *cdp_rx_ppdu);
621*5113495bSYour Name 
622*5113495bSYour Name #else
623*5113495bSYour Name static inline void
dp_rx_mon_handle_cfr_mu_info(struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info,struct cdp_rx_indication_ppdu * cdp_rx_ppdu)624*5113495bSYour Name dp_rx_mon_handle_cfr_mu_info(struct dp_pdev *pdev,
625*5113495bSYour Name 			     struct hal_rx_ppdu_info *ppdu_info,
626*5113495bSYour Name 			     struct cdp_rx_indication_ppdu *cdp_rx_ppdu)
627*5113495bSYour Name {
628*5113495bSYour Name }
629*5113495bSYour Name 
630*5113495bSYour Name static inline void
dp_rx_mon_populate_cfr_ppdu_info(struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info,struct cdp_rx_indication_ppdu * cdp_rx_ppdu)631*5113495bSYour Name dp_rx_mon_populate_cfr_ppdu_info(struct dp_pdev *pdev,
632*5113495bSYour Name 				 struct hal_rx_ppdu_info *ppdu_info,
633*5113495bSYour Name 				 struct cdp_rx_indication_ppdu *cdp_rx_ppdu)
634*5113495bSYour Name {
635*5113495bSYour Name }
636*5113495bSYour Name 
637*5113495bSYour Name static inline void
dp_rx_mon_populate_cfr_info(struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info,struct cdp_rx_indication_ppdu * cdp_rx_ppdu)638*5113495bSYour Name dp_rx_mon_populate_cfr_info(struct dp_pdev *pdev,
639*5113495bSYour Name 			    struct hal_rx_ppdu_info *ppdu_info,
640*5113495bSYour Name 			    struct cdp_rx_indication_ppdu *cdp_rx_ppdu)
641*5113495bSYour Name {
642*5113495bSYour Name }
643*5113495bSYour Name 
644*5113495bSYour Name static inline void
dp_rx_handle_cfr(struct dp_soc * soc,struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info)645*5113495bSYour Name dp_rx_handle_cfr(struct dp_soc *soc, struct dp_pdev *pdev,
646*5113495bSYour Name 		 struct hal_rx_ppdu_info *ppdu_info)
647*5113495bSYour Name {
648*5113495bSYour Name }
649*5113495bSYour Name 
650*5113495bSYour Name static inline void
dp_rx_populate_cfr_non_assoc_sta(struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info,struct cdp_rx_indication_ppdu * cdp_rx_ppdu)651*5113495bSYour Name dp_rx_populate_cfr_non_assoc_sta(struct dp_pdev *pdev,
652*5113495bSYour Name 				 struct hal_rx_ppdu_info *ppdu_info,
653*5113495bSYour Name 				 struct cdp_rx_indication_ppdu *cdp_rx_ppdu)
654*5113495bSYour Name {
655*5113495bSYour Name }
656*5113495bSYour Name 
657*5113495bSYour Name static inline void
dp_update_cfr_dbg_stats(struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info)658*5113495bSYour Name dp_update_cfr_dbg_stats(struct dp_pdev *pdev,
659*5113495bSYour Name 			struct hal_rx_ppdu_info *ppdu_info)
660*5113495bSYour Name {
661*5113495bSYour Name }
662*5113495bSYour Name 
663*5113495bSYour Name static inline bool
dp_cfr_rcc_mode_status(struct dp_pdev * pdev)664*5113495bSYour Name dp_cfr_rcc_mode_status(struct dp_pdev *pdev)
665*5113495bSYour Name {
666*5113495bSYour Name 	return false;
667*5113495bSYour Name }
668*5113495bSYour Name #endif /* WLAN_CFR_ENABLE && WLAN_ENH_CFR_ENABLE */
669*5113495bSYour Name 
670*5113495bSYour Name /**
671*5113495bSYour Name  * dp_rx_mon_deliver(): function to deliver packets to stack
672*5113495bSYour Name  * @soc: DP soc
673*5113495bSYour Name  * @mac_id: MAC ID
674*5113495bSYour Name  * @head_msdu: head of msdu list
675*5113495bSYour Name  * @tail_msdu: tail of msdu list
676*5113495bSYour Name  *
677*5113495bSYour Name  * Return: status: 0 - Success, non-zero: Failure
678*5113495bSYour Name  */
679*5113495bSYour Name QDF_STATUS dp_rx_mon_deliver(struct dp_soc *soc,
680*5113495bSYour Name 			     uint32_t mac_id,
681*5113495bSYour Name 			     qdf_nbuf_t head_msdu,
682*5113495bSYour Name 			     qdf_nbuf_t tail_msdu);
683*5113495bSYour Name 
684*5113495bSYour Name /**
685*5113495bSYour Name  * dp_rx_mon_deliver_non_std()
686*5113495bSYour Name  * @soc: core txrx main context
687*5113495bSYour Name  * @mac_id: MAC ID
688*5113495bSYour Name  *
689*5113495bSYour Name  * This function delivers the radio tap and dummy MSDU
690*5113495bSYour Name  * into user layer application for preamble only PPDU.
691*5113495bSYour Name  *
692*5113495bSYour Name  * Return: QDF_STATUS
693*5113495bSYour Name  */
694*5113495bSYour Name QDF_STATUS dp_rx_mon_deliver_non_std(struct dp_soc *soc,
695*5113495bSYour Name 				     uint32_t mac_id);
696*5113495bSYour Name 
697*5113495bSYour Name #ifdef DP_RX_MON_MEM_FRAG
698*5113495bSYour Name #if defined(WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG) ||\
699*5113495bSYour Name 	defined(WLAN_SUPPORT_RX_FLOW_TAG)
700*5113495bSYour Name void dp_rx_mon_update_pf_tag_to_buf_headroom(struct dp_soc *soc,
701*5113495bSYour Name 					     qdf_nbuf_t nbuf);
702*5113495bSYour Name #else
703*5113495bSYour Name static inline
dp_rx_mon_update_pf_tag_to_buf_headroom(struct dp_soc * soc,qdf_nbuf_t nbuf)704*5113495bSYour Name void dp_rx_mon_update_pf_tag_to_buf_headroom(struct dp_soc *soc,
705*5113495bSYour Name 					     qdf_nbuf_t nbuf)
706*5113495bSYour Name {
707*5113495bSYour Name }
708*5113495bSYour Name #endif
709*5113495bSYour Name #else
710*5113495bSYour Name static inline
dp_rx_mon_update_pf_tag_to_buf_headroom(struct dp_soc * soc,qdf_nbuf_t nbuf)711*5113495bSYour Name void dp_rx_mon_update_pf_tag_to_buf_headroom(struct dp_soc *soc,
712*5113495bSYour Name 					     qdf_nbuf_t nbuf)
713*5113495bSYour Name {
714*5113495bSYour Name }
715*5113495bSYour Name #endif
716*5113495bSYour Name 
717*5113495bSYour Name qdf_nbuf_t dp_rx_mon_restitch_mpdu(struct dp_soc *soc, uint32_t mac_id,
718*5113495bSYour Name 				   qdf_nbuf_t head_msdu, qdf_nbuf_t tail_msdu,
719*5113495bSYour Name 				   struct cdp_mon_status *rs);
720*5113495bSYour Name 
721*5113495bSYour Name #ifdef DP_RX_MON_MEM_FRAG
722*5113495bSYour Name /**
723*5113495bSYour Name  * dp_rx_mon_get_nbuf_80211_hdr() - Get 80211 hdr from nbuf
724*5113495bSYour Name  * @nbuf: qdf_nbuf_t
725*5113495bSYour Name  *
726*5113495bSYour Name  * This function must be called after moving radiotap header.
727*5113495bSYour Name  *
728*5113495bSYour Name  * Return: Ptr pointing to 80211 header or NULL.
729*5113495bSYour Name  */
730*5113495bSYour Name static inline
dp_rx_mon_get_nbuf_80211_hdr(qdf_nbuf_t nbuf)731*5113495bSYour Name qdf_frag_t dp_rx_mon_get_nbuf_80211_hdr(qdf_nbuf_t nbuf)
732*5113495bSYour Name {
733*5113495bSYour Name 	/* Return NULL if nr_frag is Zero */
734*5113495bSYour Name 	if (!qdf_nbuf_get_nr_frags(nbuf))
735*5113495bSYour Name 		return NULL;
736*5113495bSYour Name 
737*5113495bSYour Name 	return qdf_nbuf_get_frag_addr(nbuf, 0);
738*5113495bSYour Name }
739*5113495bSYour Name #else
740*5113495bSYour Name static inline
dp_rx_mon_get_nbuf_80211_hdr(qdf_nbuf_t nbuf)741*5113495bSYour Name qdf_frag_t dp_rx_mon_get_nbuf_80211_hdr(qdf_nbuf_t nbuf)
742*5113495bSYour Name {
743*5113495bSYour Name 	return qdf_nbuf_data(nbuf);
744*5113495bSYour Name }
745*5113495bSYour Name #endif
746*5113495bSYour Name 
747*5113495bSYour Name /**
748*5113495bSYour Name  * dp_rx_mon_process_dest_pktlog(): function to log packet contents to
749*5113495bSYour Name  * pktlog buffer and send to pktlog module
750*5113495bSYour Name  * @soc: DP soc
751*5113495bSYour Name  * @mac_id: MAC ID
752*5113495bSYour Name  * @mpdu: MPDU buf
753*5113495bSYour Name  * Return: status: 0 - Success, non-zero: Failure
754*5113495bSYour Name  */
755*5113495bSYour Name QDF_STATUS dp_rx_mon_process_dest_pktlog(struct dp_soc *soc,
756*5113495bSYour Name 					 uint32_t mac_id,
757*5113495bSYour Name 					 qdf_nbuf_t mpdu);
758*5113495bSYour Name 
759*5113495bSYour Name #ifdef WLAN_TX_PKT_CAPTURE_ENH
760*5113495bSYour Name void
761*5113495bSYour Name dp_handle_tx_capture(struct dp_soc *soc, struct dp_pdev *pdev,
762*5113495bSYour Name 		     qdf_nbuf_t mon_mpdu);
763*5113495bSYour Name #else
764*5113495bSYour Name static inline void
dp_handle_tx_capture(struct dp_soc * soc,struct dp_pdev * pdev,qdf_nbuf_t mon_mpdu)765*5113495bSYour Name dp_handle_tx_capture(struct dp_soc *soc, struct dp_pdev *pdev,
766*5113495bSYour Name 		     qdf_nbuf_t mon_mpdu)
767*5113495bSYour Name {
768*5113495bSYour Name }
769*5113495bSYour Name #endif
770*5113495bSYour Name 
771*5113495bSYour Name /**
772*5113495bSYour Name  * dp_rx_get_mon_desc_pool() - Return monitor descriptor pool
773*5113495bSYour Name  *			       based on target
774*5113495bSYour Name  * @soc: soc handle
775*5113495bSYour Name  * @mac_id: mac id number
776*5113495bSYour Name  * @pdev_id: pdev id number
777*5113495bSYour Name  *
778*5113495bSYour Name  * Return: descriptor pool address
779*5113495bSYour Name  */
780*5113495bSYour Name static inline
dp_rx_get_mon_desc_pool(struct dp_soc * soc,uint8_t mac_id,uint8_t pdev_id)781*5113495bSYour Name struct rx_desc_pool *dp_rx_get_mon_desc_pool(struct dp_soc *soc,
782*5113495bSYour Name 					     uint8_t mac_id,
783*5113495bSYour Name 					     uint8_t pdev_id)
784*5113495bSYour Name {
785*5113495bSYour Name 	if (soc->wlan_cfg_ctx->rxdma1_enable)
786*5113495bSYour Name 		return &soc->rx_desc_mon[mac_id];
787*5113495bSYour Name 
788*5113495bSYour Name 	return &soc->rx_desc_buf[pdev_id];
789*5113495bSYour Name }
790*5113495bSYour Name 
791*5113495bSYour Name /**
792*5113495bSYour Name  * dp_rx_process_peer_based_pktlog() - Process Rx pktlog if peer based
793*5113495bSYour Name  *                                     filtering enabled
794*5113495bSYour Name  * @soc: core txrx main context
795*5113495bSYour Name  * @ppdu_info: Structure for rx ppdu info
796*5113495bSYour Name  * @status_nbuf: Qdf nbuf abstraction for linux skb
797*5113495bSYour Name  * @pdev_id: mac_id/pdev_id correspondinggly for MCL and WIN
798*5113495bSYour Name  *
799*5113495bSYour Name  * Return: none
800*5113495bSYour Name  */
801*5113495bSYour Name void
802*5113495bSYour Name dp_rx_process_peer_based_pktlog(struct dp_soc *soc,
803*5113495bSYour Name 				struct hal_rx_ppdu_info *ppdu_info,
804*5113495bSYour Name 				qdf_nbuf_t status_nbuf, uint32_t pdev_id);
805*5113495bSYour Name 
806*5113495bSYour Name uint32_t dp_mon_rx_add_tlv(uint8_t id, uint16_t len, void *value,
807*5113495bSYour Name 			   qdf_nbuf_t mpdu_nbuf);
808*5113495bSYour Name 
809*5113495bSYour Name /**
810*5113495bSYour Name  * dp_mon_rx_stats_update_rssi_dbm_params() - update rssi calibration
811*5113495bSYour Name  *                                      parameters in rx stats
812*5113495bSYour Name  * @mon_pdev: monitor pdev
813*5113495bSYour Name  * @ppdu_info: Structure for rx ppdu info
814*5113495bSYour Name  *
815*5113495bSYour Name  * Return: none
816*5113495bSYour Name  */
817*5113495bSYour Name void
818*5113495bSYour Name dp_mon_rx_stats_update_rssi_dbm_params(struct dp_mon_pdev *mon_pdev,
819*5113495bSYour Name 				       struct hal_rx_ppdu_info *ppdu_info);
820*5113495bSYour Name 
821*5113495bSYour Name #ifdef WLAN_FEATURE_LOCAL_PKT_CAPTURE
822*5113495bSYour Name /**
823*5113495bSYour Name  * dp_rx_handle_local_pkt_capture() - Rx handle for local packet capture
824*5113495bSYour Name  * @pdev: Datapath PDEV handle
825*5113495bSYour Name  * @ppdu_info: Structure for rx ppdu info
826*5113495bSYour Name  * @nbuf: Qdf nbuf abstraction for linux skb
827*5113495bSYour Name  * @tlv_status: TLV status
828*5113495bSYour Name  *
829*5113495bSYour Name  * Return: 0 on success, 1 on failure
830*5113495bSYour Name  */
831*5113495bSYour Name int
832*5113495bSYour Name dp_rx_handle_local_pkt_capture(struct dp_pdev *pdev,
833*5113495bSYour Name 			      struct hal_rx_ppdu_info *ppdu_info,
834*5113495bSYour Name 			      qdf_nbuf_t nbuf, uint32_t tlv_status);
835*5113495bSYour Name #else
836*5113495bSYour Name static inline int
dp_rx_handle_local_pkt_capture(struct dp_pdev * pdev,struct hal_rx_ppdu_info * ppdu_info,qdf_nbuf_t nbuf,uint32_t tlv_status)837*5113495bSYour Name dp_rx_handle_local_pkt_capture(struct dp_pdev *pdev,
838*5113495bSYour Name 			      struct hal_rx_ppdu_info *ppdu_info,
839*5113495bSYour Name 			      qdf_nbuf_t nbuf, uint32_t tlv_status)
840*5113495bSYour Name {
841*5113495bSYour Name 	return 0;
842*5113495bSYour Name }
843*5113495bSYour Name #endif
844*5113495bSYour Name #endif /* _DP_RX_MON_H_ */
845