1 /*
2  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 /**
21  * DOC: cdp_txrx_stats_struct.h
22  * Define the host data path stats API functions
23  * called by the host control SW and the OS interface module
24  */
25 #ifndef _CDP_TXRX_STATS_STRUCT_H_
26 #define _CDP_TXRX_STATS_STRUCT_H_
27 
28 #include <qdf_types.h>
29 #include <cdp_txrx_hist_struct.h>
30 
31 #define TXRX_STATS_LEVEL_OFF   0
32 #define TXRX_STATS_LEVEL_BASIC 1
33 #define TXRX_STATS_LEVEL_FULL  2
34 
35 #define BSS_CHAN_INFO_READ                        1
36 #define BSS_CHAN_INFO_READ_AND_CLEAR              2
37 
38 #define TX_FRAME_TYPE_DATA 0
39 #define TX_FRAME_TYPE_MGMT 1
40 #define TX_FRAME_TYPE_BEACON 2
41 
42 #ifndef TXRX_STATS_LEVEL
43 #define TXRX_STATS_LEVEL TXRX_STATS_LEVEL_BASIC
44 #endif
45 
46 #define CDP_MU_MAX_USERS 37
47 #define CDP_MU_MAX_MIMO_USERS 8
48 /* 1 additional MCS is for invalid values */
49 #ifdef WLAN_FEATURE_11BE
50 #define MAX_MCS (16 + 1)
51 #define MAX_MCS_11BE 16
52 #define MAX_PUNCTURED_MODE 5
53 #else
54 #define MAX_MCS (14 + 1)
55 #endif
56 
57 #define MCS_INVALID_ARRAY_INDEX MAX_MCS
58 #define MAX_MCS_11A 8
59 #define MAX_MCS_11B 7
60 #define MAX_MCS_11N 8
61 #define MAX_MCS_11AC 12
62 #define MAX_MCS_11AX 14
63 /* 1 additional GI is for invalid values */
64 #define MAX_GI (4 + 1)
65 #define SS_COUNT 8
66 #define MAX_BW 8
67 #define MAX_RECEPTION_TYPES 4
68 
69 #define CDP_MAX_RX_DEST_RINGS 8
70 #define CDP_MAX_TX_DATA_RINGS 5
71 #define CDP_MAX_WIFI_INT_ERROR_REASONS 5
72 /*
73  * This header file is being accessed in userspace applications.
74  * NR_CPUS is a linux kernel macro and cannot be accessible by user space apps.
75  * Defining maximum possible cpu count locally.
76  */
77 #define CDP_NR_CPUS 8
78 
79 #define MAX_TRANSMIT_TYPES	9
80 
81 #define MAX_USER_POS		8
82 #define MAX_MU_GROUP_ID		64
83 
84 #ifdef WLAN_FEATURE_11BE
85 #define MAX_RU_LOCATIONS	16
86 #else
87 #define MAX_RU_LOCATIONS	6
88 #endif
89 #define RU_26			1
90 #define RU_52			2
91 #define RU_106			4
92 #define RU_242			9
93 #define RU_484			18
94 #define RU_996			37
95 #ifdef WLAN_FEATURE_11BE
96 #define RU_2X996		74
97 #define RU_3X996		111
98 #define RU_4X996		148
99 #define RU_52_26		RU_52 + RU_26
100 #define RU_106_26		RU_106 + RU_26
101 #define RU_484_242		RU_484 + RU_242
102 #define RU_996_484		RU_996 + RU_484
103 #define RU_996_484_242		RU_996 + RU_484_242
104 #define RU_2X996_484		RU_2X996 + RU_484
105 #define RU_3X996_484		RU_3X996 + RU_484
106 #endif
107 
108 
109 /* WME stream classes */
110 #define WME_AC_BE    0    /* best effort */
111 #define WME_AC_BK    1    /* background */
112 #define WME_AC_VI    2    /* video */
113 #define WME_AC_VO    3    /* voice */
114 #define WME_AC_MAX   4    /* MAX AC Value */
115 
116 #define CDP_MAX_RX_RINGS 8  /* max rx rings */
117 #define CDP_MAX_TX_COMP_RINGS 5 /* max tx/completion rings */
118 #define CDP_MAX_TX_COMP_PPE_RING (CDP_MAX_TX_COMP_RINGS - 1)
119 #define CDP_MAX_RX_WBM_RINGS 1 /* max rx wbm rings */
120 
121 #define CDP_MAX_TX_TQM_STATUS 15  /* max tx tqm completion status */
122 #define CDP_MAX_TX_HTT_STATUS 7  /* max tx htt completion status */
123 
124 #define CDP_DMA_CODE_MAX 14 /* max rxdma error */
125 #define CDP_REO_CODE_MAX 15 /* max reo error */
126 
127 #define CDP_MAX_LMACS 2 /* max lmacs */
128 
129 /*
130  * Max of TxRx context
131  */
132 #define CDP_MAX_TXRX_CTX CDP_MAX_RX_RINGS
133 
134 /* TID level VoW stats macros
135  * to add and get stats
136  */
137 #define PFLOW_TXRX_TIDQ_STATS_ADD(_peer, _tid, _var, _val) \
138 	(((_peer)->tidq_stats[_tid]).stats[_var]) += _val
139 #define PFLOW_TXRX_TIDQ_STATS_GET(_peer, _tid, _var, _val) \
140 	((_peer)->tidq_stats[_tid].stats[_var])
141 /*
142  * Video only stats
143  */
144 #define PFLOW_CTRL_PDEV_VIDEO_STATS_SET(_pdev, _var, _val) \
145 	(((_pdev)->vow.vistats[_var]).value) = _val
146 #define PFLOW_CTRL_PDEV_VIDEO_STATS_GET(_pdev, _var) \
147 	((_pdev)->vow.vistats[_var].value)
148 #define PFLOW_CTRL_PDEV_VIDEO_STATS_ADD(_pdev, _var, _val) \
149 	(((_pdev)->vow.vistats[_var]).value) += _val
150 /*
151  * video delay stats
152  */
153 #define PFLOW_CTRL_PDEV_DELAY_VIDEO_STATS_SET(_pdev, _var, _val) \
154 	(((_pdev)->vow.delaystats[_var]).value) = _val
155 #define PFLOW_CTRL_PDEV_DELAY_VIDEO_STATS_GET(_pdev, _var) \
156 	((_pdev)->vow.delaystats[_var].value)
157 #define PFLOW_CTRL_PDEV_DELAY_VIDEO_STATS_ADD(_pdev, _var, _val) \
158 	(((_pdev)->vow.delaystats[_var]).value) += _val
159 /*
160  * Number of TLVs sent by FW. Needs to reflect
161  * HTT_PPDU_STATS_MAX_TAG declared in FW
162  */
163 #define CDP_PPDU_STATS_MAX_TAG 14
164 #define CDP_MAX_DATA_TIDS 9
165 #define CDP_MAX_VOW_TID 4
166 #define CDP_VDEV_ALL 0xff
167 
168 #define CDP_MAX_TIDS 17
169 
170 #define CDP_MAX_PKT_PER_WIN 1000
171 #define CDP_MAX_WIN_MOV_AVG 10
172 
173 #define CDP_WDI_NUM_EVENTS WDI_NUM_EVENTS
174 
175 #define CDP_FCTL_RETRY 0x0800
176 #define CDP_FC_IS_RETRY_SET(_fc) \
177 	((_fc) & qdf_cpu_to_le16(CDP_FCTL_RETRY))
178 
179 #define CDP_INVALID_SNR 255
180 
181 #define CDP_SNR_MULTIPLIER BIT(8)
182 #define CDP_SNR_MUL(x, mul) ((x) * (mul))
183 #define CDP_SNR_RND(x, mul) ((((x) % (mul)) >= ((mul) / 2)) ?\
184 	((x) + ((mul) - 1)) / (mul) : (x) / (mul))
185 
186 #define CDP_SNR_OUT(x) (CDP_SNR_RND((x), CDP_SNR_MULTIPLIER))
187 #define CDP_SNR_IN(x)  (CDP_SNR_MUL((x), CDP_SNR_MULTIPLIER))
188 #define CDP_SNR_AVG(x, y) ((((x) << 2) + (y) - (x)) >> 2)
189 
190 #define CDP_SNR_UPDATE_AVG(x, y) x = CDP_SNR_AVG((x), CDP_SNR_IN((y)))
191 
192 /*Max SU EVM count */
193 #ifdef QCA_MONITOR_2_0_SUPPORT
194 #define DP_RX_MAX_SU_EVM_COUNT 256
195 #else
196 #define DP_RX_MAX_SU_EVM_COUNT 32
197 #endif
198 
199 #define WDI_EVENT_BASE 0x100
200 
201 #define CDP_TXRX_RATECODE_MCS_MASK 0xF
202 #define CDP_TXRX_RATECODE_NSS_MASK 0x3
203 #define CDP_TXRX_RATECODE_NSS_LSB 4
204 #define CDP_TXRX_RATECODE_PREM_MASK 0x3
205 #define CDP_TXRX_RATECODE_PREM_LSB 6
206 
207 /* Below BW_GAIN should be added to the SNR value of every ppdu based on the
208  * bandwidth. This table is obtained from HALPHY.
209  * BW         BW_Gain
210  * 20          0
211  * 40          3dBm
212  * 80          6dBm
213  * 160/80P80   9dBm
214  * 320         12dBm
215  */
216 
217 #define PKT_BW_GAIN_20MHZ 0
218 #define PKT_BW_GAIN_40MHZ 3
219 #define PKT_BW_GAIN_80MHZ 6
220 #define PKT_BW_GAIN_160MHZ 9
221 #ifdef WLAN_FEATURE_11BE
222 #define PKT_BW_GAIN_320MHZ 12
223 #endif
224 
225 /* Below indicates xmit path which can be taken by packet */
226 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
227 #define DP_INGRESS_STATS_MAX_SIZE 2
228 #define DP_VDEV_XMIT_TYPE 1 /* Packet can take path as : MLD/MLO-VAP/WDS_EXT */
229 #else
230 #define DP_INGRESS_STATS_MAX_SIZE 1
231 #define DP_VDEV_XMIT_TYPE 0
232 #endif
233 
234 /**
235  * enum cdp_wifi_error_code - Code describing the type of WIFI error detected
236  *
237  * This enum is a direct replica of hal_rxdma_error_code enum.
238  * New element addition to the enum need to make a entry in this enum too.
239  *
240  * @CDP_WIFI_ERR_OVERFLOW: MPDU frame is not complete due to overflow
241  * @CDP_WIFI_ERR_MPDU_LENGTH: MPDU frame is not complete due to receiving
242  * incomplete MPDU from the PHY
243  * @CDP_WIFI_ERR_FCS: FCS check on the MPDU frame failed
244  * @CDP_WIFI_ERR_DECRYPT: Decryption error
245  * @CDP_WIFI_ERR_TKIP_MIC: TKIP MIC error
246  * @CDP_WIFI_ERR_UNENCRYPTED: Received a frame that was expected to be
247  * encrypted but wasn’t
248  * @CDP_WIFI_ERR_MSDU_LEN: MSDU related length error
249  * @CDP_WIFI_ERR_MSDU_LIMIT: Number of MSDUs in the MPDUs exceeded the max
250  * allowed
251  * @CDP_WIFI_ERR_WIFI_PARSE: Wifi parsing error
252  * @CDP_WIFI_ERR_AMSDU_PARSE: Amsdu parsing error
253  * @CDP_WIFI_ERR_SA_TIMEOUT: Source Address search timeout
254  * @CDP_WIFI_ERR_DA_TIMEOUT: Destination Address search timeout
255  * @CDP_WIFI_ERR_FLOW_TIMEOUT: Flow Search Timeout
256  * @CDP_WIFI_ERR_FLUSH_REQUEST: Flush request error
257  * @CDP_WIFI_ERR_AMSDU_FRAGMENT: Reported A-MSDU present along with a fragmented
258  * MPDU
259  * @CDP_WIFI_ERR_MULTICAST_ECHO: Reported a multicast echo error
260  * @CDP_WIFI_ERR_DUMMY: Dummy errors
261  * @CDP_WIFI_ERR_MAX: Maximum value
262  */
263 enum cdp_wifi_error_code {
264 	CDP_WIFI_ERR_OVERFLOW = 0,
265 	CDP_WIFI_ERR_MPDU_LENGTH,
266 	CDP_WIFI_ERR_FCS,
267 	CDP_WIFI_ERR_DECRYPT,
268 	CDP_WIFI_ERR_TKIP_MIC,
269 	CDP_WIFI_ERR_UNENCRYPTED,
270 	CDP_WIFI_ERR_MSDU_LEN,
271 	CDP_WIFI_ERR_MSDU_LIMIT,
272 	CDP_WIFI_ERR_WIFI_PARSE,
273 	CDP_WIFI_ERR_AMSDU_PARSE,
274 	CDP_WIFI_ERR_SA_TIMEOUT,
275 	CDP_WIFI_ERR_DA_TIMEOUT,
276 	CDP_WIFI_ERR_FLOW_TIMEOUT,
277 	CDP_WIFI_ERR_FLUSH_REQUEST,
278 	CDP_WIFI_ERR_AMSDU_FRAGMENT,
279 	CDP_WIFI_ERR_MULTICAST_ECHO,
280 	CDP_WIFI_ERR_DUMMY = 31,
281 	CDP_WIFI_ERR_MAX
282 };
283 
284 /**
285  * enum cdp_phy_rx_error_code - Error code describing the type of error detected
286  *
287  * This enum is a direct replica of hal_reo_error_code enum.
288  * New element addition to the enum need to make a entry in this enum too.
289  *
290  * @CDP_RX_ERR_QUEUE_ADDR_0: Rx queue descriptor is set to 0
291  * @CDP_RX_ERR_QUEUE_INVALID: Rx queue descriptor valid bit is NOT set
292  * @CDP_RX_ERR_AMPDU_IN_NON_BA: AMPDU frame received without BA session having
293  * been setup
294  * @CDP_RX_ERR_NON_BA_DUPLICATE: Non-BA session, SN equal to SSN retry bit set
295  * duplicate frame
296  * @CDP_RX_ERR_BA_DUPLICATE: BA session, duplicate frame
297  * @CDP_RX_ERR_REGULAR_FRAME_2K_JUMP: A normal management/data frame received
298  * with 2K jump in SN
299  * @CDP_RX_ERR_BAR_FRAME_2K_JUMP: A bar received with 2K jump in SSN
300  * @CDP_RX_ERR_REGULAR_FRAME_OOR: A normal management/data frame received with
301  * SN falling within the OOR window
302  * @CDP_RX_ERR_BAR_FRAME_OOR: A bar received with SSN falling within the OOR
303  * window
304  * @CDP_RX_ERR_BAR_FRAME_NO_BA_SESSION: A bar received without a BA session
305  * @CDP_RX_ERR_BAR_FRAME_SN_EQUALS_SSN: A bar received with SSN equal to SN
306  * @CDP_RX_ERR_PN_CHECK_FAILED: PN Check Failed packet
307  * @CDP_RX_ERR_2K_ERROR_HANDLING_FLAG_SET: Frame is forwarded as a result of
308  * the Seq_2k_error_detected_flag been set in the REO Queue descriptor
309  * @CDP_RX_ERR_PN_ERROR_HANDLING_FLAG_SET: Frame is forwarded as a result of
310  * the pn_error_detected_flag been set in the REO Queue descriptor
311  * @CDP_RX_ERR_QUEUE_BLOCKED_SET: Frame is forwarded as a result of the queue
312  * descriptor(address) being blocked as SW/FW seems to be currently in the
313  * process of making updates to this descriptor
314  * @CDP_RX_ERR_MAX: Maximum value
315  */
316 enum cdp_phy_rx_error_code {
317 	CDP_RX_ERR_QUEUE_ADDR_0 = 0,
318 	CDP_RX_ERR_QUEUE_INVALID,
319 	CDP_RX_ERR_AMPDU_IN_NON_BA,
320 	CDP_RX_ERR_NON_BA_DUPLICATE,
321 	CDP_RX_ERR_BA_DUPLICATE,
322 	CDP_RX_ERR_REGULAR_FRAME_2K_JUMP,
323 	CDP_RX_ERR_BAR_FRAME_2K_JUMP,
324 	CDP_RX_ERR_REGULAR_FRAME_OOR,
325 	CDP_RX_ERR_BAR_FRAME_OOR,
326 	CDP_RX_ERR_BAR_FRAME_NO_BA_SESSION,
327 	CDP_RX_ERR_BAR_FRAME_SN_EQUALS_SSN,
328 	CDP_RX_ERR_PN_CHECK_FAILED,
329 	CDP_RX_ERR_2K_ERROR_HANDLING_FLAG_SET,
330 	CDP_RX_ERR_PN_ERROR_HANDLING_FLAG_SET,
331 	CDP_RX_ERR_QUEUE_BLOCKED_SET,
332 	CDP_RX_ERR_MAX
333 };
334 
335 /**
336  * enum cdp_tx_transmit_type - Transmit type index
337  * @SU: SU Transmit type index
338  * @MU_MIMO: MU_MIMO Transmit type index
339  * @MU_OFDMA: MU_OFDMA Transmit type index
340  * @MU_MIMO_OFDMA: MU MIMO OFDMA Transmit type index
341  */
342 enum cdp_tx_transmit_type {
343 	SU = 0,
344 	MU_MIMO,
345 	MU_OFDMA,
346 	MU_MIMO_OFDMA,
347 };
348 
349 /**
350  * enum cdp_tx_mode_type - Uplink transmit mode type
351  * @TX_MODE_TYPE_DL: DL TX mode
352  * @TX_MODE_TYPE_UL: UL TX mode
353  * @TX_MODE_TYPE_UNKNOWN: UL TX mode unknown
354  */
355 enum cdp_tx_mode_type {
356 	TX_MODE_TYPE_DL = 0,
357 	TX_MODE_TYPE_UL,
358 	TX_MODE_TYPE_UNKNOWN,
359 };
360 
361 /**
362  * enum cdp_tx_mode_dl - Downlink transmit mode index
363  * @TX_MODE_DL_SU_DATA: SU Transmit type index
364  * @TX_MODE_DL_OFDMA_DATA: OFDMA Transmit type index
365  * @TX_MODE_DL_MUMIMO_DATA: MIMO Transmit type index
366  * @TX_MODE_DL_MAX: Maximum value
367  */
368 enum cdp_tx_mode_dl {
369 	TX_MODE_DL_SU_DATA = 0,
370 	TX_MODE_DL_OFDMA_DATA,
371 	TX_MODE_DL_MUMIMO_DATA,
372 	TX_MODE_DL_MAX,
373 };
374 
375 /**
376  * enum cdp_tx_mode_ul - Uplink transmit mode index
377  * @TX_MODE_UL_OFDMA_BASIC_TRIGGER_DATA: UL ofdma trigger index
378  * @TX_MODE_UL_MUMIMO_BASIC_TRIGGER_DATA: UL mimo trigger index
379  * @TX_MODE_UL_OFDMA_MU_BAR_TRIGGER: UL ofdma MU-BAR trigger index
380  * @TX_MODE_UL_MAX: Maximum value
381  */
382 enum cdp_tx_mode_ul {
383 	TX_MODE_UL_OFDMA_BASIC_TRIGGER_DATA = 0,
384 	TX_MODE_UL_MUMIMO_BASIC_TRIGGER_DATA,
385 	TX_MODE_UL_OFDMA_MU_BAR_TRIGGER,
386 	TX_MODE_UL_MAX,
387 };
388 
389 /**
390  * enum cdp_msduq_index - TX msdu queue
391  * @MSDUQ_INDEX_DEFAULT: TCP/UDP msduq index
392  * @MSDUQ_INDEX_CUSTOM_PRIO_0: custom priority msduq index
393  * @MSDUQ_INDEX_CUSTOM_PRIO_1: custom priority msduq index
394  * @MSDUQ_INDEX_CUSTOM_EXT_PRIO_0: custom ext priority msduq index
395  * @MSDUQ_INDEX_CUSTOM_EXT_PRIO_1: custom ext priority msduq index
396  * @MSDUQ_INDEX_CUSTOM_EXT_PRIO_2: custom ext priority msduq index
397  * @MSDUQ_INDEX_CUSTOM_EXT_PRIO_3: custom ext priority msduq index
398  * @MSDUQ_INDEX_MAX: Maximum value
399  */
400 enum cdp_msduq_index {
401 	MSDUQ_INDEX_DEFAULT = 0,
402 	MSDUQ_INDEX_CUSTOM_PRIO_0,
403 	MSDUQ_INDEX_CUSTOM_PRIO_1,
404 	MSDUQ_INDEX_CUSTOM_EXT_PRIO_0,
405 	MSDUQ_INDEX_CUSTOM_EXT_PRIO_1,
406 	MSDUQ_INDEX_CUSTOM_EXT_PRIO_2,
407 	MSDUQ_INDEX_CUSTOM_EXT_PRIO_3,
408 	MSDUQ_INDEX_MAX,
409 };
410 
411 /**
412  * enum cdp_ul_trigger_tids - UL trigger tids
413  * @CDP_UL_TRIG_BK_TID: Background tid
414  * @CDP_UL_TRIG_BE_TID: Best effort tid
415  * @CDP_UL_TRIG_VI_TID: Video tid
416  * @CDP_UL_TRIG_VO_TID: Voice tid
417  */
418 enum cdp_ul_trigger_tids {
419 	CDP_UL_TRIG_BK_TID = 25,
420 	CDP_UL_TRIG_BE_TID,
421 	CDP_UL_TRIG_VI_TID,
422 	CDP_UL_TRIG_VO_TID,
423 };
424 
425 #define UL_TRIGGER_TID_TO_DATA_TID(_tid) (      \
426 		(((_tid) == CDP_UL_TRIG_BE_TID)) ? 0 : \
427 		(((_tid) == CDP_UL_TRIG_BK_TID)) ? 1 : \
428 		(((_tid) == CDP_UL_TRIG_VI_TID)) ? 5 : \
429 		6)
430 
431 #ifdef WLAN_FEATURE_11BE
432 /**
433  * enum cdp_ru_index - Different RU index
434  * @RU_26_INDEX : 26-tone Resource Unit index
435  * @RU_52_INDEX : 52-tone Resource Unit index
436  * @RU_52_26_INDEX : 52_26-tone Resource Unit index
437  * @RU_106_INDEX: 106-tone Resource Unit index
438  * @RU_106_26_INDEX: 106_26-tone Resource Unit index
439  * @RU_242_INDEX: 242-tone Resource Unit index
440  * @RU_484_INDEX: 484-tone Resource Unit index
441  * @RU_484_242_INDEX: 484_242-tone Resource Unit index
442  * @RU_996_INDEX: 996-tone Resource Unit index
443  * @RU_996_484_INDEX: 996_484-tone Resource Unit index
444  * @RU_996_484_242_INDEX: 996_484_242-tone Resource Unit index
445  * @RU_2X996_INDEX: 2X996-tone Resource Unit index
446  * @RU_2X996_484_INDEX: 2X996_484-tone Resource Unit index
447  * @RU_3X996_INDEX: 3X996-tone Resource Unit index
448  * @RU_3X996_484_INDEX: 3X996_484-tone Resource Unit index
449  * @RU_4X996_INDEX: 4X996-tone Resource Unit index
450  * @RU_INDEX_MAX: Maximum value
451  */
452 enum cdp_ru_index {
453 	RU_26_INDEX = 0,
454 	RU_52_INDEX,
455 	RU_52_26_INDEX,
456 	RU_106_INDEX,
457 	RU_106_26_INDEX,
458 	RU_242_INDEX,
459 	RU_484_INDEX,
460 	RU_484_242_INDEX,
461 	RU_996_INDEX,
462 	RU_996_484_INDEX,
463 	RU_996_484_242_INDEX,
464 	RU_2X996_INDEX,
465 	RU_2X996_484_INDEX,
466 	RU_3X996_INDEX,
467 	RU_3X996_484_INDEX,
468 	RU_4X996_INDEX,
469 	RU_INDEX_MAX,
470 };
471 #else
472 enum cdp_ru_index {
473 	RU_26_INDEX = 0,
474 	RU_52_INDEX,
475 	RU_106_INDEX,
476 	RU_242_INDEX,
477 	RU_484_INDEX,
478 	RU_996_INDEX,
479 	RU_INDEX_MAX,
480 };
481 #endif
482 
483 struct cdp_ru_debug {
484 	char *ru_type;
485 };
486 
487 #ifdef WLAN_FEATURE_11BE
488 static const struct cdp_ru_debug cdp_ru_string[RU_INDEX_MAX] = {
489 	{ "RU_26" },
490 	{ "RU_52" },
491 	{ "RU_52_26" },
492 	{ "RU_106" },
493 	{ "RU_106_26" },
494 	{ "RU_242" },
495 	{ "RU_484" },
496 	{ "RU_484_242" },
497 	{ "RU_996" },
498 	{ "RU_996_484" },
499 	{ "RU_996_484_242" },
500 	{ "RU_2x996" },
501 	{ "RU_2x996_484" },
502 	{ "RU_3x996" },
503 	{ "RU_3x996_484" },
504 	{ "RU_4x996" },
505 };
506 #else
507 static const struct cdp_ru_debug cdp_ru_string[RU_INDEX_MAX] = {
508 	{ "RU_26" },
509 	{ "RU_52" },
510 	{ "RU_106" },
511 	{ "RU_242" },
512 	{ "RU_484" },
513 	{ "RU_996" }
514 };
515 #endif
516 
517 #ifdef FEATURE_TSO_STATS
518 /* Number of TSO Packet Statistics captured */
519 #define CDP_MAX_TSO_PACKETS 5
520 /* Information for Number of Segments for a TSO Packet captured */
521 #define CDP_MAX_TSO_SEGMENTS 2
522 /* Information for Number of Fragments for a TSO Segment captured */
523 #define CDP_MAX_TSO_FRAGMENTS 6
524 #endif /* FEATURE_TSO_STATS */
525 
526 /* Different Packet Types */
527 enum cdp_packet_type {
528 	DOT11_A = 0,
529 	DOT11_B = 1,
530 	DOT11_N = 2,
531 	DOT11_AC = 3,
532 	DOT11_AX = 4,
533 #ifdef WLAN_FEATURE_11BE
534 	DOT11_BE = 5,
535 #endif
536 	DOT11_MAX,
537 };
538 
539 #define MCS_VALID 1
540 #define MCS_INVALID 0
541 
542 #ifdef WLAN_FEATURE_11BE
543 #define CDP_IS_PKT_TYPE_SUPPORT_NSS(_pkt_type) \
544 		(DOT11_N == (_pkt_type) || DOT11_AC == (_pkt_type) || \
545 		 DOT11_AX == (_pkt_type) || DOT11_BE == (_pkt_type))
546 #else
547 #define CDP_IS_PKT_TYPE_SUPPORT_NSS(_pkt_type) \
548 		(DOT11_N == (_pkt_type) || DOT11_AC == (_pkt_type) || \
549 		 DOT11_AX == (_pkt_type))
550 #endif /* WLAN_FEATURE_11BE */
551 
552 #define CDP_MAX_MCS_STRING_LEN 34
553 /**
554  * struct cdp_rate_debug - mcs rate debug record
555  * @mcs_type: print string for a given mcs
556  * @valid: valid mcs rate?
557  */
558 struct cdp_rate_debug {
559 	char mcs_type[CDP_MAX_MCS_STRING_LEN];
560 	uint8_t valid;
561 };
562 
563 #ifdef WLAN_FEATURE_11BE
564 static const struct cdp_rate_debug cdp_rate_string[DOT11_MAX][MAX_MCS] = {
565 	{
566 		{"OFDM 48 Mbps", MCS_VALID},
567 		{"OFDM 24 Mbps", MCS_VALID},
568 		{"OFDM 12 Mbps", MCS_VALID},
569 		{"OFDM 6 Mbps ", MCS_VALID},
570 		{"OFDM 54 Mbps", MCS_VALID},
571 		{"OFDM 36 Mbps", MCS_VALID},
572 		{"OFDM 18 Mbps", MCS_VALID},
573 		{"OFDM 9 Mbps ", MCS_VALID},
574 		{"INVALID ", MCS_INVALID},
575 		{"INVALID ", MCS_INVALID},
576 		{"INVALID ", MCS_INVALID},
577 		{"INVALID ", MCS_INVALID},
578 		{"INVALID ", MCS_INVALID},
579 		{"INVALID ", MCS_INVALID},
580 		{"INVALID ", MCS_INVALID},
581 		{"INVALID ", MCS_INVALID},
582 		{"INVALID ", MCS_INVALID},
583 	},
584 	{
585 		{"CCK 11 Mbps Long  ", MCS_VALID},
586 		{"CCK 5.5 Mbps Long ", MCS_VALID},
587 		{"CCK 2 Mbps Long   ", MCS_VALID},
588 		{"CCK 1 Mbps Long   ", MCS_VALID},
589 		{"CCK 11 Mbps Short ", MCS_VALID},
590 		{"CCK 5.5 Mbps Short", MCS_VALID},
591 		{"CCK 2 Mbps Short  ", MCS_VALID},
592 		{"INVALID ", MCS_INVALID},
593 		{"INVALID ", MCS_INVALID},
594 		{"INVALID ", MCS_INVALID},
595 		{"INVALID ", MCS_INVALID},
596 		{"INVALID ", MCS_INVALID},
597 		{"INVALID ", MCS_INVALID},
598 		{"INVALID ", MCS_INVALID},
599 		{"INVALID ", MCS_INVALID},
600 		{"INVALID ", MCS_INVALID},
601 		{"INVALID ", MCS_INVALID},
602 	},
603 	{
604 		{"HT MCS 0 (BPSK 1/2)  ", MCS_VALID},
605 		{"HT MCS 1 (QPSK 1/2)  ", MCS_VALID},
606 		{"HT MCS 2 (QPSK 3/4)  ", MCS_VALID},
607 		{"HT MCS 3 (16-QAM 1/2)", MCS_VALID},
608 		{"HT MCS 4 (16-QAM 3/4)", MCS_VALID},
609 		{"HT MCS 5 (64-QAM 2/3)", MCS_VALID},
610 		{"HT MCS 6 (64-QAM 3/4)", MCS_VALID},
611 		{"HT MCS 7 (64-QAM 5/6)", MCS_VALID},
612 		{"INVALID ", MCS_INVALID},
613 		{"INVALID ", MCS_INVALID},
614 		{"INVALID ", MCS_INVALID},
615 		{"INVALID ", MCS_INVALID},
616 		{"INVALID ", MCS_INVALID},
617 		{"INVALID ", MCS_INVALID},
618 		{"INVALID ", MCS_INVALID},
619 		{"INVALID ", MCS_INVALID},
620 		{"INVALID ", MCS_INVALID},
621 	},
622 	{
623 		{"VHT MCS 0 (BPSK 1/2)     ", MCS_VALID},
624 		{"VHT MCS 1 (QPSK 1/2)     ", MCS_VALID},
625 		{"VHT MCS 2 (QPSK 3/4)     ", MCS_VALID},
626 		{"VHT MCS 3 (16-QAM 1/2)   ", MCS_VALID},
627 		{"VHT MCS 4 (16-QAM 3/4)   ", MCS_VALID},
628 		{"VHT MCS 5 (64-QAM 2/3)   ", MCS_VALID},
629 		{"VHT MCS 6 (64-QAM 3/4)   ", MCS_VALID},
630 		{"VHT MCS 7 (64-QAM 5/6)   ", MCS_VALID},
631 		{"VHT MCS 8 (256-QAM 3/4)  ", MCS_VALID},
632 		{"VHT MCS 9 (256-QAM 5/6)  ", MCS_VALID},
633 		{"VHT MCS 10 (1024-QAM 3/4)", MCS_VALID},
634 		{"VHT MCS 11 (1024-QAM 5/6)", MCS_VALID},
635 		{"INVALID ", MCS_INVALID},
636 		{"INVALID ", MCS_INVALID},
637 		{"INVALID ", MCS_INVALID},
638 		{"INVALID ", MCS_INVALID},
639 	},
640 	{
641 		{"HE MCS 0 (BPSK 1/2)     ", MCS_VALID},
642 		{"HE MCS 1 (QPSK 1/2)     ", MCS_VALID},
643 		{"HE MCS 2 (QPSK 3/4)     ", MCS_VALID},
644 		{"HE MCS 3 (16-QAM 1/2)   ", MCS_VALID},
645 		{"HE MCS 4 (16-QAM 3/4)   ", MCS_VALID},
646 		{"HE MCS 5 (64-QAM 2/3)   ", MCS_VALID},
647 		{"HE MCS 6 (64-QAM 3/4)   ", MCS_VALID},
648 		{"HE MCS 7 (64-QAM 5/6)   ", MCS_VALID},
649 		{"HE MCS 8 (256-QAM 3/4)  ", MCS_VALID},
650 		{"HE MCS 9 (256-QAM 5/6)  ", MCS_VALID},
651 		{"HE MCS 10 (1024-QAM 3/4)", MCS_VALID},
652 		{"HE MCS 11 (1024-QAM 5/6)", MCS_VALID},
653 		{"HE MCS 12 (4096-QAM 3/4)", MCS_VALID},
654 		{"HE MCS 13 (4096-QAM 5/6)", MCS_VALID},
655 		{"INVALID ", MCS_INVALID},
656 		{"INVALID ", MCS_INVALID},
657 		{"INVALID ", MCS_INVALID},
658 	},
659 	{
660 		{"EHT MCS 0 (BPSK 1/2)     ", MCS_VALID},
661 		{"EHT MCS 1 (QPSK 1/2)     ", MCS_VALID},
662 		{"EHT MCS 2 (QPSK 3/4)     ", MCS_VALID},
663 		{"EHT MCS 3 (16-QAM 1/2)   ", MCS_VALID},
664 		{"EHT MCS 4 (16-QAM 3/4)   ", MCS_VALID},
665 		{"EHT MCS 5 (64-QAM 2/3)   ", MCS_VALID},
666 		{"EHT MCS 6 (64-QAM 3/4)   ", MCS_VALID},
667 		{"EHT MCS 7 (64-QAM 5/6)   ", MCS_VALID},
668 		{"EHT MCS 8 (256-QAM 3/4)  ", MCS_VALID},
669 		{"EHT MCS 9 (256-QAM 5/6)  ", MCS_VALID},
670 		{"EHT MCS 10 (1024-QAM 3/4)", MCS_VALID},
671 		{"EHT MCS 11 (1024-QAM 5/6)", MCS_VALID},
672 		{"EHT MCS 12 (4096-QAM 3/4)", MCS_VALID},
673 		{"EHT MCS 13 (4096-QAM 5/6)", MCS_VALID},
674 		{"EHT MCS 14 (BPSK-DCM 1/2)", MCS_VALID},
675 		{"EHT MCS 15 (BPSK-DCM 1/2)", MCS_VALID},
676 		{"INVALID ", MCS_INVALID},
677 	}
678 };
679 #else
680 static const struct cdp_rate_debug cdp_rate_string[DOT11_MAX][MAX_MCS] = {
681 	{
682 		{"OFDM 48 Mbps", MCS_VALID},
683 		{"OFDM 24 Mbps", MCS_VALID},
684 		{"OFDM 12 Mbps", MCS_VALID},
685 		{"OFDM 6 Mbps ", MCS_VALID},
686 		{"OFDM 54 Mbps", MCS_VALID},
687 		{"OFDM 36 Mbps", MCS_VALID},
688 		{"OFDM 18 Mbps", MCS_VALID},
689 		{"OFDM 9 Mbps ", MCS_VALID},
690 		{"INVALID ", MCS_INVALID},
691 		{"INVALID ", MCS_INVALID},
692 		{"INVALID ", MCS_INVALID},
693 		{"INVALID ", MCS_INVALID},
694 		{"INVALID ", MCS_INVALID},
695 	},
696 	{
697 		{"CCK 11 Mbps Long  ", MCS_VALID},
698 		{"CCK 5.5 Mbps Long ", MCS_VALID},
699 		{"CCK 2 Mbps Long   ", MCS_VALID},
700 		{"CCK 1 Mbps Long   ", MCS_VALID},
701 		{"CCK 11 Mbps Short ", MCS_VALID},
702 		{"CCK 5.5 Mbps Short", MCS_VALID},
703 		{"CCK 2 Mbps Short  ", MCS_VALID},
704 		{"INVALID ", MCS_INVALID},
705 		{"INVALID ", MCS_INVALID},
706 		{"INVALID ", MCS_INVALID},
707 		{"INVALID ", MCS_INVALID},
708 		{"INVALID ", MCS_INVALID},
709 		{"INVALID ", MCS_INVALID},
710 	},
711 	{
712 		{"HT MCS 0 (BPSK 1/2)  ", MCS_VALID},
713 		{"HT MCS 1 (QPSK 1/2)  ", MCS_VALID},
714 		{"HT MCS 2 (QPSK 3/4)  ", MCS_VALID},
715 		{"HT MCS 3 (16-QAM 1/2)", MCS_VALID},
716 		{"HT MCS 4 (16-QAM 3/4)", MCS_VALID},
717 		{"HT MCS 5 (64-QAM 2/3)", MCS_VALID},
718 		{"HT MCS 6 (64-QAM 3/4)", MCS_VALID},
719 		{"HT MCS 7 (64-QAM 5/6)", MCS_VALID},
720 		{"INVALID ", MCS_INVALID},
721 		{"INVALID ", MCS_INVALID},
722 		{"INVALID ", MCS_INVALID},
723 		{"INVALID ", MCS_INVALID},
724 		{"INVALID ", MCS_INVALID},
725 	},
726 	{
727 		{"VHT MCS 0 (BPSK 1/2)     ", MCS_VALID},
728 		{"VHT MCS 1 (QPSK 1/2)     ", MCS_VALID},
729 		{"VHT MCS 2 (QPSK 3/4)     ", MCS_VALID},
730 		{"VHT MCS 3 (16-QAM 1/2)   ", MCS_VALID},
731 		{"VHT MCS 4 (16-QAM 3/4)   ", MCS_VALID},
732 		{"VHT MCS 5 (64-QAM 2/3)   ", MCS_VALID},
733 		{"VHT MCS 6 (64-QAM 3/4)   ", MCS_VALID},
734 		{"VHT MCS 7 (64-QAM 5/6)   ", MCS_VALID},
735 		{"VHT MCS 8 (256-QAM 3/4)  ", MCS_VALID},
736 		{"VHT MCS 9 (256-QAM 5/6)  ", MCS_VALID},
737 		{"VHT MCS 10 (1024-QAM 3/4)", MCS_VALID},
738 		{"VHT MCS 11 (1024-QAM 5/6)", MCS_VALID},
739 		{"INVALID ", MCS_INVALID},
740 	},
741 	{
742 		{"HE MCS 0 (BPSK 1/2)     ", MCS_VALID},
743 		{"HE MCS 1 (QPSK 1/2)     ", MCS_VALID},
744 		{"HE MCS 2 (QPSK 3/4)     ", MCS_VALID},
745 		{"HE MCS 3 (16-QAM 1/2)   ", MCS_VALID},
746 		{"HE MCS 4 (16-QAM 3/4)   ", MCS_VALID},
747 		{"HE MCS 5 (64-QAM 2/3)   ", MCS_VALID},
748 		{"HE MCS 6 (64-QAM 3/4)   ", MCS_VALID},
749 		{"HE MCS 7 (64-QAM 5/6)   ", MCS_VALID},
750 		{"HE MCS 8 (256-QAM 3/4)  ", MCS_VALID},
751 		{"HE MCS 9 (256-QAM 5/6)  ", MCS_VALID},
752 		{"HE MCS 10 (1024-QAM 3/4)", MCS_VALID},
753 		{"HE MCS 11 (1024-QAM 5/6)", MCS_VALID},
754 		{"HE MCS 12 (4096-QAM 3/4)", MCS_VALID},
755 		{"HE MCS 13 (4096-QAM 5/6)", MCS_VALID},
756 		{"INVALID ", MCS_INVALID},
757 	}
758 };
759 #endif
760 
761 /**
762  * enum cdp_mu_packet_type - MU type index
763  * @TXRX_TYPE_MU_MIMO: MU MIMO type index
764  * @TXRX_TYPE_MU_OFDMA: MU OFDMA type index
765  * @TXRX_TYPE_MU_MAX: MU MAX type index
766  */
767 enum cdp_mu_packet_type {
768 	TXRX_TYPE_MU_MIMO = 0,
769 	TXRX_TYPE_MU_OFDMA = 1,
770 	TXRX_TYPE_MU_MAX = 2,
771 };
772 
773 /**
774  * enum peer_stats_type peer stats type
775  * @PEER_TX_STATS: stats type for tx
776  * @PEER_RX_STATS: stats type for rx
777  */
778 enum peer_stats_type {
779 	PEER_TX_STATS,
780 	PEER_RX_STATS,
781 };
782 
783 enum WDI_EVENT {
784 	WDI_EVENT_TX_STATUS = WDI_EVENT_BASE,
785 	WDI_EVENT_OFFLOAD_ALL,
786 	WDI_EVENT_RX_DESC_REMOTE,
787 	WDI_EVENT_RX_PEER_INVALID,
788 	WDI_EVENT_DBG_PRINT, /* NEED to integrate pktlog changes*/
789 	WDI_EVENT_RX_CBF_REMOTE,
790 	WDI_EVENT_RATE_FIND,
791 	WDI_EVENT_RATE_UPDATE,
792 	WDI_EVENT_SW_EVENT,
793 	WDI_EVENT_RX_DESC,
794 	WDI_EVENT_LITE_T2H,
795 	WDI_EVENT_LITE_RX,
796 	WDI_EVENT_RX_PPDU_DESC,
797 	WDI_EVENT_TX_PPDU_DESC,
798 	WDI_EVENT_TX_MSDU_DESC,
799 	WDI_EVENT_TX_DATA,
800 	WDI_EVENT_RX_DATA,
801 	WDI_EVENT_TX_MGMT_CTRL,
802 	WDI_EVENT_TX_PKT_CAPTURE,
803 	WDI_EVENT_HTT_STATS,
804 	WDI_EVENT_TX_BEACON,
805 	WDI_EVENT_PEER_STATS,
806 	WDI_EVENT_TX_SOJOURN_STAT,
807 	WDI_EVENT_UPDATE_DP_STATS,
808 	WDI_EVENT_RX_MGMT_CTRL,
809 	WDI_EVENT_PEER_CREATE,
810 	WDI_EVENT_PEER_DESTROY,
811 	WDI_EVENT_PEER_FLUSH_RATE_STATS,
812 	WDI_EVENT_FLUSH_RATE_STATS_REQ,
813 	WDI_EVENT_RX_MPDU,
814 	WDI_EVENT_HMWDS_AST_ADD_STATUS,
815 	WDI_EVENT_PEER_QOS_STATS,
816 	WDI_EVENT_PKT_CAPTURE_TX_DATA,
817 	WDI_EVENT_PKT_CAPTURE_RX_DATA,
818 	WDI_EVENT_PKT_CAPTURE_RX_DATA_NO_PEER,
819 	WDI_EVENT_PKT_CAPTURE_OFFLOAD_TX_DATA,
820 	WDI_EVENT_RX_CBF,
821 	WDI_EVENT_PKT_CAPTURE_PPDU_STATS,
822 	WDI_EVENT_HOST_SW_EVENT,
823 	WDI_EVENT_HYBRID_TX,
824 #ifdef WLAN_FEATURE_11BE_MLO
825 	WDI_EVENT_MLO_TSTMP,
826 #endif
827 #ifdef QCA_UNDECODED_METADATA_SUPPORT
828 	WDI_EVENT_RX_PPDU_DESC_UNDECODED_METADATA,
829 #endif
830 	WDI_EVENT_LITE_MON_RX,
831 	WDI_EVENT_LITE_MON_TX,
832 	WDI_EVENT_TXRX_PEER_CREATE,
833 	WDI_EVENT_PEER_UNMAP,
834 	WDI_EVENT_PEER_DELETE,
835 	WDI_EVENT_PEER_PRIMARY_UMAC_UPDATE,
836 	WDI_EVENT_MCAST_PRIMARY_UPDATE,
837 	WDI_EVENT_STA_PRIMARY_UMAC_UPDATE,
838 	/* End of new event items */
839 	WDI_EVENT_LAST
840 };
841 
842 #define WDI_NUM_EVENTS WDI_EVENT_LAST - WDI_EVENT_BASE
843 
844 struct cdp_stats_extd {
845 };
846 
847 /* TID level Tx/Rx stats
848  *
849  */
850 enum cdp_txrx_tidq_stats {
851 	/* Tx Counters */
852 	TX_MSDU_TOTAL_LINUX_SUBSYSTEM,
853 	TX_MSDU_TOTAL_FROM_OSIF,
854 	TX_MSDU_TX_COMP_PKT_CNT,
855 	/* Rx Counters */
856 	RX_MSDU_TOTAL_FROM_FW,
857 	RX_MSDU_MCAST_FROM_FW,
858 	RX_TID_MISMATCH_FROM_FW,
859 	RX_MSDU_MISC_PKTS,
860 	RX_MSDU_IS_ARP,
861 	RX_MSDU_IS_EAP,
862 	RX_MSDU_IS_DHCP,
863 	RX_AGGREGATE_10,
864 	RX_AGGREGATE_20,
865 	RX_AGGREGATE_30,
866 	RX_AGGREGATE_40,
867 	RX_AGGREGATE_50,
868 	RX_AGGREGATE_60,
869 	RX_AGGREGATE_MORE,
870 	RX_AMSDU_1,
871 	RX_AMSDU_2,
872 	RX_AMSDU_3,
873 	RX_AMSDU_4,
874 	RX_AMSDU_MORE,
875 	RX_MSDU_CHAINED_FROM_FW,
876 	RX_MSDU_REORDER_FAILED_FROM_FW,
877 	RX_MSDU_REORDER_FLUSHED_FROM_FW,
878 	RX_MSDU_DISCARD_FROM_FW,
879 	RX_MSDU_DUPLICATE_FROM_FW,
880 	RX_MSDU_DELIVERED_TO_STACK,
881 	TIDQ_STATS_MAX,
882 };
883 
884 struct cdp_tidq_stats {
885 	uint32_t stats[TIDQ_STATS_MAX];
886 };
887 
888 #if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
889 /**
890  * struct cdp_rx_ppdu_cfr_info - struct for storing ppdu info extracted from HW
891  * TLVs, this will be used for CFR correlation
892  *
893  * @bb_captured_channel : Set by RXPCU when MACRX_FREEZE_CAPTURE_CHANNEL TLV is
894  * sent to PHY, SW checks it to correlate current PPDU TLVs with uploaded
895  * channel information.
896  *
897  * @bb_captured_timeout : Set by RxPCU to indicate channel capture condition is
898  * met, but MACRX_FREEZE_CAPTURE_CHANNEL is not sent to PHY due to AST delay,
899  * which means the rx_frame_falling edge to FREEZE TLV ready time exceeds
900  * the threshold time defined by RXPCU register FREEZE_TLV_DELAY_CNT_THRESH.
901  * Bb_captured_reason is still valid in this case.
902  *
903  * @bb_captured_reason : Copy capture_reason of MACRX_FREEZE_CAPTURE_CHANNEL
904  * TLV to here for FW usage. Valid when bb_captured_channel or
905  * bb_captured_timeout is set.
906  * <enum 0 freeze_reason_TM>
907  * <enum 1 freeze_reason_FTM>
908  * <enum 2 freeze_reason_ACK_resp_to_TM_FTM>
909  * <enum 3 freeze_reason_TA_RA_TYPE_FILTER>
910  * <enum 4 freeze_reason_NDPA_NDP>
911  * <enum 5 freeze_reason_ALL_PACKET>
912  * <legal 0-5>
913  *
914  * @rx_location_info_valid: Indicates whether CFR DMA address in the PPDU TLV
915  * is valid
916  * <enum 0 rx_location_info_is_not_valid>
917  * <enum 1 rx_location_info_is_valid>
918  * <legal all>
919  *
920  * @chan_capture_status : capture status reported by ucode
921  * a. CAPTURE_IDLE: FW has disabled "REPETITIVE_CHE_CAPTURE_CTRL"
922  * b. CAPTURE_BUSY: previous PPDU’s channel capture upload DMA ongoing. (Note
923  * that this upload is triggered after receiving freeze_channel_capture TLV
924  * after last PPDU is rx)
925  * c. CAPTURE_ACTIVE: channel capture is enabled and no previous channel
926  * capture ongoing
927  * d. CAPTURE_NO_BUFFER: next buffer in IPC ring not available
928  *
929  * @rtt_che_buffer_pointer_high8 : The high 8 bits of the 40 bits pointer to
930  * external RTT channel information buffer
931  *
932  * @rtt_che_buffer_pointer_low32 : The low 32 bits of the 40 bits pointer to
933  * external RTT channel information buffer
934  *
935  * @rtt_cfo_measurement : raw cfo data extracted from hardware, which is 14 bit
936  * signed number. The first bit used for sign representation and 13 bits for
937  * fractional part.
938  *
939  * @agc_gain_info0: Chain 0 & chain 1 agc gain information reported by PHY
940  *
941  * @agc_gain_info1: Chain 2 & chain 3 agc gain information reported by PHY
942  *
943  * @agc_gain_info2: Chain 4 & chain 5 agc gain information reported by PHY
944  *
945  * @agc_gain_info3: Chain 6 & chain 7 agc gain information reported by PHY
946  *
947  * @rx_start_ts: Rx packet timestamp, the time the first L-STF ADC sample
948  * arrived at Rx antenna.
949  *
950  * @mcs_rate: Indicates the mcs/rate in which packet is received.
951  * If HT,
952  *    0-7: MCS0-MCS7
953  * If VHT,
954  *    0-9: MCS0 to MCS9
955  * If HE,
956  *    0-11: MCS0 to MCS11,
957  *    12-13: 4096QAM,
958  *    14-15: reserved
959  * If Legacy,
960  *    0: 48 Mbps
961  *    1: 24 Mbps
962  *    2: 12 Mbps
963  *    3: 6 Mbps
964  *    4: 54 Mbps
965  *    5: 36 Mbps
966  *    6: 18 Mbps
967  *    7: 9 Mbps
968  *
969  * @gi_type: Indicates the guard interval.
970  *    0: 0.8 us
971  *    1: 0.4 us
972  *    2: 1.6 us
973  *    3: 3.2 us
974  */
975 struct cdp_rx_ppdu_cfr_info {
976 	bool bb_captured_channel;
977 	bool bb_captured_timeout;
978 	uint8_t bb_captured_reason;
979 	bool rx_location_info_valid;
980 	uint8_t chan_capture_status;
981 	uint8_t rtt_che_buffer_pointer_high8;
982 	uint32_t rtt_che_buffer_pointer_low32;
983 	int16_t rtt_cfo_measurement;
984 	uint32_t agc_gain_info0;
985 	uint32_t agc_gain_info1;
986 	uint32_t agc_gain_info2;
987 	uint32_t agc_gain_info3;
988 	uint32_t rx_start_ts;
989 	uint32_t mcs_rate;
990 	uint32_t gi_type;
991 };
992 #endif
993 
994 /**
995  * struct cdp_rx_su_evm_info - Rx evm info
996  * @number_of_symbols: number of symbols
997  * @nss_count: number of spatial streams
998  * @pilot_count: number of pilot count
999  * @pilot_evm:
1000  */
1001 struct cdp_rx_su_evm_info {
1002 	uint16_t number_of_symbols;
1003 	uint8_t  nss_count;
1004 	uint8_t  pilot_count;
1005 	uint32_t pilot_evm[DP_RX_MAX_SU_EVM_COUNT];
1006 };
1007 
1008 /**
1009  * enum cdp_delay_stats_mode - Different types of delay statistics
1010  *
1011  * @CDP_DELAY_STATS_SW_ENQ: Stack to hw enqueue delay
1012  * @CDP_DELAY_STATS_TX_INTERFRAME: Interframe delay at radio entry point
1013  * @CDP_DELAY_STATS_FW_HW_TRANSMIT: Hw enqueue to tx completion delay
1014  * @CDP_DELAY_STATS_REAP_STACK: Delay in ring reap to indicating network stack
1015  * @CDP_DELAY_STATS_RX_INTERFRAME: Rx inteframe delay
1016  * @CDP_DELAY_STATS_MODE_MAX: Maximum delay mode
1017  */
1018 enum cdp_delay_stats_mode {
1019 	CDP_DELAY_STATS_SW_ENQ,
1020 	CDP_DELAY_STATS_TX_INTERFRAME,
1021 	CDP_DELAY_STATS_FW_HW_TRANSMIT,
1022 	CDP_DELAY_STATS_REAP_STACK,
1023 	CDP_DELAY_STATS_RX_INTERFRAME,
1024 	CDP_DELAY_STATS_MODE_MAX,
1025 };
1026 
1027 /*
1028  * cdp_delay_bucket_index
1029  *	Index to be used for all delay stats
1030  */
1031 enum cdp_delay_bucket_index {
1032 	CDP_DELAY_BUCKET_0,
1033 	CDP_DELAY_BUCKET_1,
1034 	CDP_DELAY_BUCKET_2,
1035 	CDP_DELAY_BUCKET_3,
1036 	CDP_DELAY_BUCKET_4,
1037 	CDP_DELAY_BUCKET_5,
1038 	CDP_DELAY_BUCKET_6,
1039 	CDP_DELAY_BUCKET_7,
1040 	CDP_DELAY_BUCKET_8,
1041 	CDP_DELAY_BUCKET_9,
1042 	CDP_DELAY_BUCKET_10,
1043 	CDP_DELAY_BUCKET_11,
1044 	CDP_DELAY_BUCKET_12,
1045 	CDP_DELAY_BUCKET_MAX,
1046 };
1047 
1048 /**
1049  * enum cdp_tx_sw_drop - packet drop due to following reasons.
1050  * @TX_DESC_ERR:
1051  * @TX_HAL_RING_ACCESS_ERR:
1052  * @TX_DMA_MAP_ERR:
1053  * @TX_HW_ENQUEUE:
1054  * @TX_SW_ENQUEUE:
1055  * @TX_MAX_DROP:
1056  */
1057 enum cdp_tx_sw_drop {
1058 	TX_DESC_ERR,
1059 	TX_HAL_RING_ACCESS_ERR,
1060 	TX_DMA_MAP_ERR,
1061 	TX_HW_ENQUEUE,
1062 	TX_SW_ENQUEUE,
1063 	TX_MAX_DROP,
1064 };
1065 
1066 /**
1067  * enum cdp_rx_sw_drop - packet drop due to following reasons.
1068  * @INTRABSS_DROP:
1069  * @MSDU_DONE_FAILURE:
1070  * @INVALID_PEER_VDEV:
1071  * @POLICY_CHECK_DROP:
1072  * @MEC_DROP:
1073  * @NAWDS_MCAST_DROP:
1074  * @MESH_FILTER_DROP:
1075  * @ENQUEUE_DROP:
1076  * @RX_MAX_DROP:
1077  */
1078 enum cdp_rx_sw_drop {
1079 	INTRABSS_DROP,
1080 	MSDU_DONE_FAILURE,
1081 	INVALID_PEER_VDEV,
1082 	POLICY_CHECK_DROP,
1083 	MEC_DROP,
1084 	NAWDS_MCAST_DROP,
1085 	MESH_FILTER_DROP,
1086 	ENQUEUE_DROP,
1087 	RX_MAX_DROP,
1088 };
1089 
1090 /**
1091  * struct cdp_delay_stats - delay statistics
1092  * @delay_bucket: division of buckets as per latency
1093  * @min_delay: minimum delay
1094  * @max_delay: maximum delay
1095  * @avg_delay: average delay
1096  */
1097 struct cdp_delay_stats {
1098 	uint64_t delay_bucket[CDP_DELAY_BUCKET_MAX];
1099 	uint32_t min_delay;
1100 	uint32_t max_delay;
1101 	uint32_t avg_delay;
1102 };
1103 
1104 /**
1105  * struct cdp_tid_tx_stats - per-TID statistics
1106  * @swq_delay: delay between wifi driver entry point and enqueue to HW in tx
1107  * @hwtx_delay: delay between wifi driver exit (enqueue to HW) and tx completion
1108  * @intfrm_delay: interframe delay
1109  * @success_cnt: total successful transmit count
1110  * @comp_fail_cnt: firmware drop found in tx completion path
1111  * @swdrop_cnt: software drop in tx path
1112  * @tqm_status_cnt: TQM completion status count
1113  * @htt_status_cnt: HTT completion status count
1114  */
1115 struct cdp_tid_tx_stats {
1116 	struct cdp_delay_stats swq_delay;
1117 	struct cdp_delay_stats hwtx_delay;
1118 	struct cdp_delay_stats intfrm_delay;
1119 	uint64_t success_cnt;
1120 	uint64_t comp_fail_cnt;
1121 	uint64_t swdrop_cnt[TX_MAX_DROP];
1122 	uint64_t tqm_status_cnt[CDP_MAX_TX_TQM_STATUS];
1123 	uint64_t htt_status_cnt[CDP_MAX_TX_HTT_STATUS];
1124 };
1125 
1126 /**
1127  * struct cdp_reo_error_stats - REO error statistics
1128  * @err_src_reo_code_inv: Wireless Buffer Manager source receive reorder ring
1129  *                        reason unknown
1130  * @err_reo_codes: Receive reorder error codes
1131  */
1132 struct cdp_reo_error_stats {
1133 	uint64_t err_src_reo_code_inv;
1134 	uint64_t err_reo_codes[CDP_REO_CODE_MAX];
1135 };
1136 
1137 /**
1138  * struct cdp_rxdma_error_stats - RxDMA error statistics
1139  * @err_src_rxdma_code_inv: DMA reason unknown count
1140  * @err_dma_codes: DMA error codes count
1141  */
1142 struct cdp_rxdma_error_stats {
1143 	uint64_t err_src_rxdma_code_inv;
1144 	uint64_t err_dma_codes[CDP_DMA_CODE_MAX];
1145 };
1146 
1147 /**
1148  * struct cdp_tid_rx_stats - per-TID Rx statistics
1149  * @to_stack_delay: Time taken between ring reap to indication to network stack
1150  * @intfrm_delay: Interframe rx delay
1151  * @delivered_to_stack: Total packets indicated to stack
1152  * @intrabss_cnt: Rx total intraBSS frames
1153  * @msdu_cnt: number of msdu received from HW
1154  * @mcast_msdu_cnt: Num Mcast Msdus received from HW in Rx
1155  * @bcast_msdu_cnt: Num Bcast Msdus received from HW in Rx
1156  * @fail_cnt: Rx deliver drop counters
1157  * @reo_err: V3 reo error statistics
1158  * @rxdma_err: V3 rxdma error statistics
1159  */
1160 struct cdp_tid_rx_stats {
1161 	struct cdp_delay_stats to_stack_delay;
1162 	struct cdp_delay_stats intfrm_delay;
1163 	uint64_t delivered_to_stack;
1164 	uint64_t intrabss_cnt;
1165 	uint64_t msdu_cnt;
1166 	uint64_t mcast_msdu_cnt;
1167 	uint64_t bcast_msdu_cnt;
1168 	uint64_t fail_cnt[RX_MAX_DROP];
1169 	struct cdp_reo_error_stats reo_err;
1170 	struct cdp_rxdma_error_stats rxdma_err;
1171 };
1172 
1173 /**
1174  * struct cdp_tid_stats - composite TID statistics
1175  * @ingress_stack: Total packets received from linux stack
1176  * @osif_drop: drops in osif layer
1177  * @tid_tx_stats: transmit counters per tid
1178  * @tid_rx_stats: receive counters per tid
1179  * @tid_rx_wbm_stats: WBM receive counters per tid
1180  */
1181 struct cdp_tid_stats {
1182 	uint64_t ingress_stack;
1183 	uint64_t osif_drop;
1184 	struct cdp_tid_tx_stats tid_tx_stats[CDP_MAX_TX_COMP_RINGS]
1185 					    [CDP_MAX_DATA_TIDS];
1186 	struct cdp_tid_rx_stats tid_rx_stats[CDP_MAX_RX_RINGS]
1187 					    [CDP_MAX_DATA_TIDS];
1188 	struct cdp_tid_rx_stats tid_rx_wbm_stats[CDP_MAX_RX_WBM_RINGS]
1189 						[CDP_MAX_DATA_TIDS];
1190 };
1191 
1192 /**
1193  * struct cdp_tid_stats_intf - network interface TID statistics
1194  * @ingress_stack: Total packets received from linux stack
1195  * @osif_drop: drops in osif layer
1196  * @tx_total: total of per ring transmit counters per tid
1197  * @rx_total: total of per ring receive counters per tid
1198  */
1199 struct cdp_tid_stats_intf {
1200 	uint64_t ingress_stack;
1201 	uint64_t osif_drop;
1202 	struct cdp_tid_tx_stats tx_total[CDP_MAX_DATA_TIDS];
1203 	struct cdp_tid_rx_stats rx_total[CDP_MAX_DATA_TIDS];
1204 };
1205 
1206 /**
1207  * struct cdp_delay_tx_stats - Tx delay stats
1208  * @tx_swq_delay: software enqueue delay
1209  * @hwtx_delay: HW enqueue to completion delay
1210  * @nwdelay_avg: Network delay average
1211  * @swdelay_avg: Wifi SW Delay Average
1212  * @hwdelay_avg: Wifi HW delay Average
1213  * @nw_delay_win_avg: average NW delay for each window
1214  * @sw_delay_win_avg: average Wifi SW delay for each window
1215  * @hw_delay_win_avg: average Wifi HW delay for each window
1216  * @cur_win_num_pkts: number of packets processed in current window
1217  * @curr_win_idx: current windows index
1218  */
1219 struct cdp_delay_tx_stats {
1220 	struct cdp_hist_stats    tx_swq_delay;
1221 	struct cdp_hist_stats    hwtx_delay;
1222 
1223 #ifdef CONFIG_SAWF
1224 	uint32_t nwdelay_avg;
1225 	uint32_t swdelay_avg;
1226 	uint32_t hwdelay_avg;
1227 
1228 	uint64_t nw_delay_win_avg[CDP_MAX_WIN_MOV_AVG];
1229 	uint64_t sw_delay_win_avg[CDP_MAX_WIN_MOV_AVG];
1230 	uint64_t hw_delay_win_avg[CDP_MAX_WIN_MOV_AVG];
1231 
1232 	uint32_t cur_win_num_pkts;
1233 	uint32_t curr_win_idx;
1234 #endif
1235 };
1236 
1237 /**
1238  * struct cdp_delay_rx_stats - Rx delay stats
1239  * @to_stack_delay: To stack delay
1240  */
1241 struct cdp_delay_rx_stats {
1242 	struct cdp_hist_stats    to_stack_delay;
1243 };
1244 
1245 /**
1246  * struct cdp_delay_tid_stats - Delay tid stats
1247  * @tx_delay: Tx delay related stats
1248  * @rx_delay: Rx delay related stats
1249  */
1250 struct cdp_delay_tid_stats {
1251 	struct cdp_delay_tx_stats  tx_delay;
1252 	struct cdp_delay_rx_stats  rx_delay;
1253 };
1254 
1255 /**
1256  * struct cdp_pkt_info - packet info
1257  * @num: no of packets
1258  * @bytes: total no of bytes
1259  */
1260 struct cdp_pkt_info {
1261 	uint64_t num;
1262 	uint64_t bytes;
1263 };
1264 
1265 /**
1266  * struct cdp_pkt_type - packet type
1267  * @mcs_count: Counter array for each MCS index
1268  */
1269 struct cdp_pkt_type {
1270 	uint32_t mcs_count[MAX_MCS];
1271 };
1272 
1273 /**
1274  * struct cdp_rx_mu - Rx MU Stats
1275  * @ppdu_nss: Packet Count in spatial streams
1276  * @mpdu_cnt_fcs_ok: Rx success mpdu count
1277  * @mpdu_cnt_fcs_err: Rx fail mpdu count
1278  * @ppdu: counter array for each MCS index
1279  */
1280 struct cdp_rx_mu {
1281 	uint32_t ppdu_nss[SS_COUNT];
1282 	uint32_t mpdu_cnt_fcs_ok;
1283 	uint32_t mpdu_cnt_fcs_err;
1284 	struct cdp_pkt_type ppdu;
1285 };
1286 
1287 /**
1288  * struct cdp_tx_pkt_info - tx packet info
1289  * @num_msdu: successful msdu
1290  * @num_mpdu: successful mpdu from compltn common
1291  * @mpdu_tried: mpdu tried
1292  *
1293  * tx packet info counter field for mpdu success/tried and msdu
1294  */
1295 struct cdp_tx_pkt_info {
1296 	uint32_t num_msdu;
1297 	uint32_t num_mpdu;
1298 	uint32_t mpdu_tried;
1299 };
1300 
1301 #ifdef FEATURE_TSO_STATS
1302 /**
1303  * struct cdp_tso_seg_histogram - Segment histogram for TCP Packets
1304  * @segs_1: packets with single segments
1305  * @segs_2_5: packets with 2-5 segments
1306  * @segs_6_10: packets with 6-10 segments
1307  * @segs_11_15: packets with 11-15 segments
1308  * @segs_16_20: packets with 16-20 segments
1309  * @segs_20_plus: packets with 20 plus segments
1310  */
1311 struct cdp_tso_seg_histogram {
1312 	uint64_t segs_1;
1313 	uint64_t segs_2_5;
1314 	uint64_t segs_6_10;
1315 	uint64_t segs_11_15;
1316 	uint64_t segs_16_20;
1317 	uint64_t segs_20_plus;
1318 };
1319 
1320 /**
1321  * struct cdp_tso_packet_info - Stats for TSO segments within a TSO packet
1322  * @tso_seg: TSO Segment information
1323  * @num_seg: Number of segments
1324  * @tso_packet_len: Size of the tso packet
1325  * @tso_seg_idx: segment number
1326  */
1327 struct cdp_tso_packet_info {
1328 	struct qdf_tso_seg_t tso_seg[CDP_MAX_TSO_SEGMENTS];
1329 	uint8_t num_seg;
1330 	size_t tso_packet_len;
1331 	uint32_t tso_seg_idx;
1332 };
1333 
1334 /**
1335  * struct cdp_tso_info - stats for tso packets
1336  * @tso_packet_info: TSO packet information
1337  */
1338 struct cdp_tso_info {
1339 	struct cdp_tso_packet_info tso_packet_info[CDP_MAX_TSO_PACKETS];
1340 };
1341 #endif /* FEATURE_TSO_STATS */
1342 
1343 /**
1344  * struct cdp_tso_stats -  TSO stats information
1345  * @num_tso_pkts: Total number of TSO Packets
1346  * @tso_comp: Total tso packet completions
1347  * @dropped_host: TSO packets dropped by host
1348  * @tso_no_mem_dropped: TSO packets dropped by host due to descriptor
1349  *			unavailablity
1350  * @dropped_target: TSO packets_dropped by target
1351  * @tso_info: Per TSO packet counters
1352  * @seg_histogram: TSO histogram stats
1353  */
1354 struct cdp_tso_stats {
1355 	struct cdp_pkt_info num_tso_pkts;
1356 	uint32_t tso_comp;
1357 	struct cdp_pkt_info dropped_host;
1358 	struct cdp_pkt_info tso_no_mem_dropped;
1359 	uint32_t dropped_target;
1360 #ifdef FEATURE_TSO_STATS
1361 	struct cdp_tso_info tso_info;
1362 	struct cdp_tso_seg_histogram seg_histogram;
1363 #endif /* FEATURE_TSO_STATS */
1364 };
1365 
1366 #define CDP_PEER_STATS_START 0
1367 
1368 enum cdp_peer_stats_type {
1369 	cdp_peer_stats_min = CDP_PEER_STATS_START,
1370 	/* Peer per pkt stats */
1371 	cdp_peer_per_pkt_stats_min = cdp_peer_stats_min,
1372 	cdp_peer_tx_ucast = cdp_peer_per_pkt_stats_min,
1373 	cdp_peer_tx_mcast,
1374 	cdp_peer_tx_inactive_time,
1375 	cdp_peer_rx_ucast,
1376 	/* Add enum for peer per pkt stats before this */
1377 	cdp_peer_per_pkt_stats_max,
1378 
1379 	/* Peer extd stats */
1380 	cdp_peer_extd_stats_min,
1381 	cdp_peer_tx_rate = cdp_peer_extd_stats_min,
1382 	cdp_peer_tx_last_tx_rate,
1383 	cdp_peer_tx_ratecode,
1384 	cdp_peer_tx_flags,
1385 	cdp_peer_tx_power,
1386 	cdp_peer_rx_rate,
1387 	cdp_peer_rx_last_rx_rate,
1388 	cdp_peer_rx_ratecode,
1389 	cdp_peer_rx_flags,
1390 	cdp_peer_rx_avg_snr,
1391 	cdp_peer_rx_snr,
1392 	cdp_peer_rx_avg_rate,
1393 	cdp_peer_tx_avg_rate,
1394 	/* Add enum for peer extd stats before this */
1395 	cdp_peer_extd_stats_max,
1396 	cdp_peer_stats_max = cdp_peer_extd_stats_max,
1397 };
1398 
1399 /*
1400  * The max size of cdp_peer_stats_param_t is limited to 16 bytes.
1401  * If the buffer size is exceeding this size limit,
1402  * dp_txrx_get_peer_stats is to be used instead.
1403  */
1404 typedef union cdp_peer_stats_buf {
1405 	/* Tx types */
1406 	struct cdp_pkt_info tx_ucast;
1407 	struct cdp_pkt_info tx_mcast;
1408 	uint32_t tx_rate;
1409 	uint32_t tx_rate_avg;
1410 	uint32_t last_tx_rate;
1411 	uint32_t tx_inactive_time;
1412 	uint32_t tx_flags;
1413 	uint32_t tx_power;
1414 	uint16_t tx_ratecode;
1415 
1416 	/* Rx types */
1417 	struct cdp_pkt_info rx_ucast;
1418 	uint32_t rx_rate;
1419 	uint32_t rx_rate_avg;
1420 	uint32_t last_rx_rate;
1421 	uint32_t rx_ratecode;
1422 	uint32_t rx_flags;
1423 	uint32_t rx_avg_snr;
1424 	uint32_t rx_snr;
1425 } cdp_peer_stats_param_t; /* Max union size 16 bytes */
1426 
1427 /**
1428  * enum cdp_protocol_trace -  Protocols supported by per-peer protocol trace
1429  * @CDP_TRACE_ICMP: ICMP packets
1430  * @CDP_TRACE_EAP: EAPOL packets
1431  * @CDP_TRACE_ARP: ARP packets
1432  * @CDP_TRACE_MAX: MAX enumeration
1433  *
1434  * Enumeration of all protocols supported by per-peer protocol trace feature
1435  */
1436 enum cdp_protocol_trace {
1437 	CDP_TRACE_ICMP,
1438 	CDP_TRACE_EAP,
1439 	CDP_TRACE_ARP,
1440 	CDP_TRACE_MAX
1441 };
1442 
1443 /**
1444  * struct protocol_trace_count - type of count on per-peer protocol trace
1445  * @egress_cnt: how many packets go out of host driver
1446  * @ingress_cnt: how many packets come into the host driver
1447  *
1448  * Type of count on per-peer protocol trace
1449  */
1450 struct protocol_trace_count {
1451 	uint16_t egress_cnt;
1452 	uint16_t ingress_cnt;
1453 };
1454 
1455 /**
1456  * struct cdp_tx_stats - tx stats
1457  * @comp_pkt: Pkt Info for which completions were received
1458  * @ucast: Unicast Packet Count
1459  * @mcast: Multicast Packet Count
1460  * @bcast: Broadcast Packet Count
1461  * @nawds_mcast: NAWDS  Multicast Packet Count
1462  * @tx_success: Successful Tx Packets
1463  * @nawds_mcast_drop: NAWDS  Multicast Drop Count
1464  * @protocol_trace_cnt: per-peer protocol counter
1465  * @tx_failed: Total Tx failure
1466  * @ofdma: Total Packets as ofdma
1467  * @stbc: Packets in STBC
1468  * @ldpc: Packets in LDPC
1469  * @retries: Packet retries
1470  * @retries_mpdu: mpdu number of successfully transmitted after retries
1471  * @non_amsdu_cnt: Number of MSDUs with no MSDU level aggregation
1472  * @amsdu_cnt: Number of MSDUs part of AMSDU
1473  * @tx_rate: Tx Rate
1474  * @last_tx_rate: Last tx rate for unicast packets
1475  * @last_tx_rate_mcs: Tx rate mcs for unicast packets
1476  * @mcast_last_tx_rate: Last tx rate for multicast packets
1477  * @mcast_last_tx_rate_mcs: Last tx rate mcs for multicast
1478  * @last_per: Tx Per
1479  * @rnd_avg_tx_rate: Rounded average tx rate
1480  * @avg_tx_rate: Average TX rate
1481  * @last_ack_rssi: RSSI of last acked packet
1482  * @tx_bytes_success_last: last Tx success bytes
1483  * @tx_data_success_last: last Tx success data
1484  * @tx_byte_rate: Bytes Trasmitted in last one sec
1485  * @tx_data_rate: Data Transmitted in last one sec
1486  * @tx_data_ucast_last:
1487  * @tx_data_ucast_rate:
1488  * @pkt_type:
1489  * @sgi_count: SGI count
1490  * @pream_punct_cnt: Preamble Punctured count
1491  * @nss: Packet count for different num_spatial_stream values
1492  * @bw: Packet Count for different bandwidths
1493  * @wme_ac_type: Wireless Multimedia type Count
1494  * @excess_retries_per_ac: Wireless Multimedia type Count
1495  * @dot11_tx_pkts: dot11 tx packets
1496  * @dropped: dropped packet counters
1497  * @dropped.fw_rem: Discarded by firmware
1498  * @dropped.fw_rem_notx: firmware_discard_untransmitted
1499  * @dropped.fw_rem_tx: firmware_discard_transmitted
1500  * @dropped.age_out: aged out in mpdu/msdu queues
1501  * @dropped.fw_reason1: discarded by firmware reason 1
1502  * @dropped.fw_reason2: discarded by firmware reason 2
1503  * @dropped.fw_reason3: discarded by firmware reason 3
1504  * @dropped.fw_rem_queue_disable: dropped due to queue disable
1505  * @dropped.fw_rem_no_match: dropped due to fw no match command
1506  * @dropped.drop_threshold: dropped due to HW threshold
1507  * @dropped.drop_link_desc_na: dropped due resource not available in HW
1508  * @dropped.invalid_drop: Invalid msdu drop
1509  * @dropped.mcast_vdev_drop: MCAST drop configured for VDEV in HW
1510  * @dropped.invalid_rr: Invalid TQM release reason
1511  * @fw_tx_cnt:
1512  * @fw_tx_bytes:
1513  * @fw_txcount:
1514  * @fw_max4msframelen:
1515  * @fw_ratecount:
1516  * @ac_nobufs:
1517  * @rssi_chain: rssi chain
1518  * @inactive_time: inactive time in secs
1519  * @tx_flags: tx flags
1520  * @tx_power: Tx power latest
1521  * @is_tx_no_ack: no ack received
1522  * @tx_ratecode: Tx rate code of last frame
1523  * @ampdu_cnt: completion of aggregation
1524  * @non_ampdu_cnt: tx completion not aggregated
1525  * @failed_retry_count: packets failed due to retry above 802.11 retry limit
1526  * @retry_count: packets successfully send after one or more retry
1527  * @multiple_retry_count: packets successfully sent after more than one retry
1528  * @last_tx_rate_used:
1529  * @tx_ppdus: ppdus in tx
1530  * @tx_mpdus_success: mpdus successful in tx
1531  * @tx_mpdus_tried: mpdus tried in tx
1532  * @transmit_type: pkt info for tx transmit type
1533  * @mu_group_id: mumimo mu group id
1534  * @ru_start: RU start index
1535  * @ru_tones: RU tones size
1536  * @ru_loc: pkt info for RU location 26/ 52/ 106/ 242/ 484 counter
1537  * @num_ppdu_cookie_valid : Number of comp received with valid ppdu cookie
1538  * @no_ack_count:
1539  * @tx_success_twt: Successful Tx Packets in TWT session
1540  * @nss_info: NSS 1,2, ...8
1541  * @mcs_info: MCS index
1542  * @bw_info: Bandwidth
1543  *       <enum 0 bw_20_MHz>
1544  *       <enum 1 bw_40_MHz>
1545  *       <enum 2 bw_80_MHz>
1546  *       <enum 3 bw_160_MHz>
1547  * @gi_info: <enum 0     0_8_us_sgi > Legacy normal GI
1548  *       <enum 1     0_4_us_sgi > Legacy short GI
1549  *       <enum 2     1_6_us_sgi > HE related GI
1550  *       <enum 3     3_2_us_sgi > HE
1551  * @preamble_info: preamble
1552  * @mpdu_success_with_retries: mpdu retry count in case of successful
1553  *                             transmission
1554  * @last_tx_ts: last timestamp in jiffies when tx comp occurred
1555  * @su_be_ppdu_cnt: SU Tx packet count
1556  * @mu_be_ppdu_cnt: MU Tx packet count
1557  * @punc_bw: MSDU count for punctured BW
1558  * @release_src_not_tqm: Counter to keep track of release source is not TQM
1559  *			 in TX completion status processing
1560  * @per: Packet error ratio
1561  * @rts_success: RTS success count
1562  * @rts_failure: RTS failure count
1563  * @bar_cnt: Block ACK Request frame count
1564  * @ndpa_cnt: NDP announcement frame count
1565  * @inval_link_id_pkt_cnt: Counter to capture Invalid Link Id
1566  * @wme_ac_type_bytes: Wireless Multimedia Type Bytes Count
1567  * @tx_ucast_total: Total tx unicast count
1568  * @tx_ucast_success: Total tx unicast success count
1569  * @fragment_count: Fragment packet count
1570  */
1571 struct cdp_tx_stats {
1572 	struct cdp_pkt_info comp_pkt;
1573 	struct cdp_pkt_info ucast;
1574 	struct cdp_pkt_info mcast;
1575 	struct cdp_pkt_info bcast;
1576 	struct cdp_pkt_info nawds_mcast;
1577 #ifdef VDEV_PEER_PROTOCOL_COUNT
1578 	struct protocol_trace_count protocol_trace_cnt[CDP_TRACE_MAX];
1579 #endif
1580 	struct cdp_pkt_info tx_success;
1581 	uint32_t nawds_mcast_drop;
1582 	uint32_t tx_failed;
1583 	uint32_t ofdma;
1584 	uint32_t stbc;
1585 	uint32_t ldpc;
1586 	uint32_t retries;
1587 	uint32_t retries_mpdu;
1588 	uint32_t non_amsdu_cnt;
1589 	uint32_t amsdu_cnt;
1590 	uint32_t tx_rate;
1591 	uint32_t last_tx_rate;
1592 	uint32_t last_tx_rate_mcs;
1593 	uint32_t mcast_last_tx_rate;
1594 	uint32_t mcast_last_tx_rate_mcs;
1595 	uint32_t last_per;
1596 	uint64_t rnd_avg_tx_rate;
1597 	uint64_t avg_tx_rate;
1598 	uint32_t last_ack_rssi;
1599 	uint32_t tx_bytes_success_last;
1600 	uint32_t tx_data_success_last;
1601 	uint32_t tx_byte_rate;
1602 	uint32_t tx_data_rate;
1603 	uint32_t tx_data_ucast_last;
1604 	uint32_t tx_data_ucast_rate;
1605 	struct cdp_pkt_type pkt_type[DOT11_MAX];
1606 	uint32_t sgi_count[MAX_GI];
1607 	uint32_t pream_punct_cnt;
1608 
1609 	uint32_t nss[SS_COUNT];
1610 
1611 	uint32_t bw[MAX_BW];
1612 
1613 	uint32_t wme_ac_type[WME_AC_MAX];
1614 
1615 	uint32_t excess_retries_per_ac[WME_AC_MAX];
1616 	struct cdp_pkt_info dot11_tx_pkts;
1617 
1618 	struct {
1619 		struct cdp_pkt_info fw_rem;
1620 		uint32_t fw_rem_notx;
1621 		uint32_t fw_rem_tx;
1622 		uint32_t age_out;
1623 		uint32_t fw_reason1;
1624 		uint32_t fw_reason2;
1625 		uint32_t fw_reason3;
1626 		uint32_t fw_rem_queue_disable;
1627 		uint32_t fw_rem_no_match;
1628 		uint32_t drop_threshold;
1629 		uint32_t drop_link_desc_na;
1630 		uint32_t invalid_drop;
1631 		uint32_t mcast_vdev_drop;
1632 		uint32_t invalid_rr;
1633 	} dropped;
1634 
1635 	uint32_t fw_tx_cnt;
1636 	uint32_t fw_tx_bytes;
1637 	uint32_t fw_txcount;
1638 	uint32_t fw_max4msframelen;
1639 	uint32_t fw_ratecount;
1640 
1641 	uint32_t ac_nobufs[WME_AC_MAX];
1642 	int32_t rssi_chain[CDP_RSSI_CHAIN_LEN];
1643 	uint32_t inactive_time;
1644 
1645 	uint32_t tx_flags;
1646 	uint32_t tx_power;
1647 
1648 	/* MSDUs which the target sent but couldn't get an ack for */
1649 	struct cdp_pkt_info is_tx_no_ack;
1650 	uint16_t tx_ratecode;
1651 
1652 	/*add for peer and updated from ppdu*/
1653 	uint32_t ampdu_cnt;
1654 	uint32_t non_ampdu_cnt;
1655 	uint32_t failed_retry_count;
1656 	uint32_t retry_count;
1657 	uint32_t multiple_retry_count;
1658 	uint32_t last_tx_rate_used;
1659 	uint32_t tx_ppdus;
1660 	uint32_t tx_mpdus_success;
1661 	uint32_t tx_mpdus_tried;
1662 
1663 	struct cdp_tx_pkt_info transmit_type[MAX_TRANSMIT_TYPES];
1664 	uint32_t mu_group_id[MAX_MU_GROUP_ID];
1665 	uint32_t ru_start;
1666 	uint32_t ru_tones;
1667 	struct cdp_tx_pkt_info ru_loc[MAX_RU_LOCATIONS];
1668 
1669 	uint32_t num_ppdu_cookie_valid;
1670 	uint32_t no_ack_count[QDF_PROTO_SUBTYPE_MAX];
1671 	struct cdp_pkt_info tx_success_twt;
1672 
1673 	uint32_t nss_info:4,
1674 		 mcs_info:4,
1675 		 bw_info:4,
1676 		 gi_info:4,
1677 		 preamble_info:4;
1678 	uint32_t mpdu_success_with_retries;
1679 	unsigned long last_tx_ts;
1680 #ifdef WLAN_FEATURE_11BE
1681 	struct cdp_pkt_type su_be_ppdu_cnt;
1682 	struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
1683 	uint32_t punc_bw[MAX_PUNCTURED_MODE];
1684 #endif
1685 	uint32_t release_src_not_tqm;
1686 	uint32_t per;
1687 	uint32_t rts_success;
1688 	uint32_t rts_failure;
1689 	uint32_t bar_cnt;
1690 	uint32_t ndpa_cnt;
1691 	uint32_t inval_link_id_pkt_cnt;
1692 	uint64_t wme_ac_type_bytes[WME_AC_MAX];
1693 	struct cdp_pkt_info tx_ucast_total;
1694 	struct cdp_pkt_info tx_ucast_success;
1695 	uint32_t fragment_count;
1696 };
1697 
1698 /**
1699  * struct cdp_rx_stats - rx Level Stats
1700  * @to_stack: Total packets sent up the stack
1701  * @rcvd_reo:  Packets received on the reo ring
1702  * @rcvd: Total packets received
1703  * @rx_lmac: Packets received on which lmac
1704  * @unicast: Total unicast packets
1705  * @multicast: Total multicast packets
1706  * @bcast:  Broadcast Packet Count
1707  * @raw: Raw Pakets received
1708  * @nawds_mcast_drop: Total multicast packets
1709  * @mec_drop: Total MEC packets dropped
1710  * @ppeds_drop: Total DS packets dropped
1711  * @rx_success: Total rx success count
1712  * @last_rx_ts: last timestamp in jiffies when RX happened
1713  * @intra_bss: Intra-bss statistics
1714  * @intra_bss.pkts: Intra BSS packets received
1715  * @intra_bss.fail: Intra BSS packets failed
1716  * @intra_bss.mdns_no_fwd: Intra BSS MDNS packets not forwarded
1717  * @protocol_trace_cnt: per-peer protocol counters
1718  * @err: error countersa
1719  * @err.mic_err: Rx MIC errors CCMP
1720  * @err.decrypt_err: Rx Decryption Errors CRC
1721  * @err.fcserr: rx MIC check failed (CCMP)
1722  * @err.pn_err: pn check failed
1723  * @err.oor_err: Rx OOR errors
1724  * @err.jump_2k_err: 2k jump errors
1725  * @err.rxdma_wifi_parse_err: rxdma wifi parse errors
1726  * @wme_ac_type: Wireless Multimedia type Count
1727  * @reception_type: Reception type os packets
1728  * @pkt_type:
1729  * @mcs_count: mcs count
1730  * @sgi_count: sgi count
1731  * @nss: packet count in spatial Streams
1732  * @ppdu_nss: PPDU packet count in spatial streams
1733  * @mpdu_cnt_fcs_ok: SU Rx success mpdu count
1734  * @mpdu_cnt_fcs_err: SU Rx fail mpdu count
1735  * @su_ax_ppdu_cnt: SU Rx packet count
1736  * @ppdu_cnt: PPDU packet count in reception type
1737  * @rx_mu: Rx MU stats
1738  * @bw:  Packet Count in different bandwidths
1739  * @non_ampdu_cnt: Number of MSDUs with no MPDU level aggregation
1740  * @ampdu_cnt: Number of MSDUs part of AMSPU
1741  * @non_amsdu_cnt: Number of MSDUs with no MSDU level aggregation
1742  * @amsdu_cnt: Number of MSDUs part of AMSDU
1743  * @bar_recv_cnt: Number of bar received
1744  * @avg_snr: Average snr
1745  * @rx_rate: Rx rate
1746  * @last_rx_rate: Previous rx rate
1747  * @rnd_avg_rx_rate: Rounded average rx rate
1748  * @avg_rx_rate:  Average Rx rate
1749  * @dot11_rx_pkts: dot11 rx packets
1750  * @rx_bytes_success_last: last Rx success bytes
1751  * @rx_data_success_last: last rx success data
1752  * @rx_byte_rate: bytes received in last one sec
1753  * @rx_data_rate: data received in last one sec
1754  * @rx_retries: retries of packet in rx
1755  * @rx_mpdus: mpdu in rx
1756  * @rx_ppdus: ppdu in rx
1757  * @rx_aggr: aggregation on rx
1758  * @rx_discard: packets discard in rx
1759  * @rx_ratecode: Rx rate code of last frame
1760  * @rx_flags: rx flags
1761  * @rx_snr_measured_time: Time at which snr is measured
1762  * @snr: SNR of received signal
1763  * @last_snr: Previous snr
1764  * @multipass_rx_pkt_drop: Dropped multipass rx pkt
1765  * @peer_unauth_rx_pkt_drop: Unauth rx packet drops
1766  * @policy_check_drop: policy check drops
1767  * @rx_mpdu_cnt: rx mpdu count per MCS rate
1768  * @nss_info: NSS 1,2, ...8
1769  * @mcs_info: MCS index
1770  * @bw_info: Bandwidth
1771  *       <enum 0 bw_20_MHz>
1772  *       <enum 1 bw_40_MHz>
1773  *       <enum 2 bw_80_MHz>
1774  *       <enum 3 bw_160_MHz>
1775  * @gi_info: <enum 0     0_8_us_sgi > Legacy normal GI
1776  *       <enum 1     0_4_us_sgi > Legacy short GI
1777  *       <enum 2     1_6_us_sgi > HE related GI
1778  *       <enum 3     3_2_us_sgi > HE
1779  * @preamble_info: preamble
1780  * @to_stack_twt: Total packets sent up the stack in TWT session
1781  * @mpdu_retry_cnt: retries of mpdu in rx
1782  * @su_be_ppdu_cnt: SU Rx packet count for BE
1783  * @mu_be_ppdu_cnt: MU rx packet count for BE
1784  * @punc_bw: MSDU count for punctured BW
1785  * @mcast_3addr_drop:
1786  * @bar_cnt: Block ACK Request frame count
1787  * @ndpa_cnt: NDP announcement frame count
1788  * @inval_link_id_pkt_cnt: Counter to capture Invalid Link Id
1789  * @wme_ac_type_bytes: Wireless Multimedia type Byte Count
1790  * @rx_total: Total rx count
1791  * @duplicate_count: Duplicate packets count
1792  * @fragment_count: Fragment packet count
1793  */
1794 struct cdp_rx_stats {
1795 	struct cdp_pkt_info to_stack;
1796 	struct cdp_pkt_info rcvd_reo[CDP_MAX_RX_RINGS];
1797 	struct cdp_pkt_info rcvd;
1798 	struct cdp_pkt_info rx_lmac[CDP_MAX_LMACS];
1799 	struct cdp_pkt_info unicast;
1800 	struct cdp_pkt_info multicast;
1801 	struct cdp_pkt_info bcast;
1802 	struct cdp_pkt_info raw;
1803 	uint32_t nawds_mcast_drop;
1804 	struct cdp_pkt_info mec_drop;
1805 	struct cdp_pkt_info ppeds_drop;
1806 	struct cdp_pkt_info rx_success;
1807 	unsigned long last_rx_ts;
1808 	struct {
1809 		struct cdp_pkt_info pkts;
1810 		struct cdp_pkt_info fail;
1811 		uint32_t mdns_no_fwd;
1812 	} intra_bss;
1813 #ifdef VDEV_PEER_PROTOCOL_COUNT
1814 	struct protocol_trace_count protocol_trace_cnt[CDP_TRACE_MAX];
1815 #endif
1816 
1817 	struct {
1818 		uint32_t mic_err;
1819 		uint32_t decrypt_err;
1820 		uint32_t fcserr;
1821 		uint32_t pn_err;
1822 		uint32_t oor_err;
1823 		uint32_t jump_2k_err;
1824 		uint32_t rxdma_wifi_parse_err;
1825 	} err;
1826 
1827 	uint32_t wme_ac_type[WME_AC_MAX];
1828 	uint32_t reception_type[MAX_RECEPTION_TYPES];
1829 	struct cdp_pkt_type pkt_type[DOT11_MAX];
1830 	uint32_t sgi_count[MAX_GI];
1831 	uint32_t nss[SS_COUNT];
1832 	uint32_t ppdu_nss[SS_COUNT];
1833 	uint32_t mpdu_cnt_fcs_ok;
1834 	uint32_t mpdu_cnt_fcs_err;
1835 	struct cdp_pkt_type su_ax_ppdu_cnt;
1836 	uint32_t ppdu_cnt[MAX_RECEPTION_TYPES];
1837 	struct cdp_rx_mu rx_mu[TXRX_TYPE_MU_MAX];
1838 	uint32_t bw[MAX_BW];
1839 	uint32_t non_ampdu_cnt;
1840 	uint32_t ampdu_cnt;
1841 	uint32_t non_amsdu_cnt;
1842 	uint32_t amsdu_cnt;
1843 	uint32_t bar_recv_cnt;
1844 	uint32_t avg_snr;
1845 	uint32_t rx_rate;
1846 	uint32_t last_rx_rate;
1847 	uint32_t rnd_avg_rx_rate;
1848 	uint32_t avg_rx_rate;
1849 	struct cdp_pkt_info  dot11_rx_pkts;
1850 
1851 	uint32_t rx_bytes_success_last;
1852 	uint32_t rx_data_success_last;
1853 	uint32_t rx_byte_rate;
1854 	uint32_t rx_data_rate;
1855 
1856 	uint32_t rx_retries;
1857 	uint32_t rx_mpdus;
1858 	uint32_t rx_ppdus;
1859 
1860 	/*add for peer updated for ppdu*/
1861 	uint32_t rx_aggr;
1862 	uint32_t rx_discard;
1863 	uint32_t rx_ratecode;
1864 	uint32_t rx_flags;
1865 	unsigned long rx_snr_measured_time;
1866 	uint8_t snr;
1867 	uint8_t last_snr;
1868 	uint32_t multipass_rx_pkt_drop;
1869 	uint32_t peer_unauth_rx_pkt_drop;
1870 	uint32_t policy_check_drop;
1871 	uint32_t rx_mpdu_cnt[MAX_MCS];
1872 	uint32_t nss_info:4,
1873 		 mcs_info:4,
1874 		 bw_info:4,
1875 		 gi_info:4,
1876 	         preamble_info:4;
1877 	struct cdp_pkt_info to_stack_twt;
1878 	uint32_t mpdu_retry_cnt;
1879 #ifdef WLAN_FEATURE_11BE
1880 	struct cdp_pkt_type su_be_ppdu_cnt;
1881 	struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
1882 	uint32_t punc_bw[MAX_PUNCTURED_MODE];
1883 #endif
1884 	uint32_t mcast_3addr_drop;
1885 	uint32_t bar_cnt;
1886 	uint32_t ndpa_cnt;
1887 	uint32_t inval_link_id_pkt_cnt;
1888 	uint64_t wme_ac_type_bytes[WME_AC_MAX];
1889 #ifdef IPA_OFFLOAD
1890 	struct cdp_pkt_info rx_total;
1891 #endif
1892 	uint32_t duplicate_count;
1893 	uint32_t fragment_count;
1894 };
1895 
1896 /**
1897  * struct cdp_tx_ingress_stats - Tx ingress Stats
1898  * @rcvd: Total packets received for transmission
1899  * @rcvd_in_fast_xmit_flow:
1900  * @rcvd_per_core:
1901  * @processed: Tx packets processed
1902  * @reinject_pkts: Total packets reinjected
1903  * @inspect_pkts: Total packets passed to inspect handler
1904  * @nawds_mcast: NAWDS  Multicast Packet Count
1905  * @bcast: Number of broadcast packets
1906  * @raw: Raw packet info
1907  * @raw.raw_pkt: Total Raw packets
1908  * @raw.dma_map_error: DMA map error
1909  * @raq.invalid_raw_pkt_datatype:
1910  * @raw.num_frags_overflow_err: msdu's nbuf count exceeds num of segments
1911  * @sg: Scatter Gather packet info
1912  * @sg.sg_pkt: Total scatter gather packets
1913  * @sg.non_sg_pkts: non SG packets
1914  * @sg.dropped_host: SG packets dropped by host
1915  * @sg.dropped_target: SG packets dropped by target
1916  * @sg.dma_map_error: Dma map error
1917  * @mcast_en: Multicast Enhancement packets info
1918  * @mcast_en.mcast_pkt: total no of multicast conversion packets
1919  * @mcast_en.dropped_map_error: packets dropped due to map error
1920  * @mcast_en.dropped_self_mac: packets dropped due to self Mac address
1921  * @mcast_en.dropped_send_fail: Packets dropped due to send fail
1922  * @mcast_en.ucast: total unicast packets transmitted
1923  * @mcast_en.fail_seg_alloc: Segment allocation failure
1924  * @mcast_en.clone_fail: NBUF clone failure
1925  * @igmp_mcast_en: IGMP Multicast Enhancement packets info
1926  * @igmp_mcast_en.igmp_rcvd: igmp pkts received for conversion to ucast pkts
1927  * @igmp_mcast_en.igmp_ucast_converted: unicast pkts sent as part of VoW IGMP
1928  *                                      improvements
1929  * @dropped: Packets dropped on the Tx side
1930  * @dropped.dropped_pkt: Total scatter gather packets
1931  * @dropped.desc_na: Desc Not Available
1932  * @dropped.desc_na_exc_alloc_fail:
1933  * @dropped.desc_na_outstand:
1934  * @dropped.exc_desc_na: Exception desc Not Available
1935  * @dropped.ring_full: ring full
1936  * @dropped.enqueue_fail: hw enqueue fail
1937  * @dropped.dma_error: dma fail
1938  * @dropped.res_full: Resource Full: Congestion Control
1939  * @dropped.headroom_insufficient: headroom insufficient
1940  * @dropped.fail_per_pkt_vdev_id_check: Per pkt vdev id check
1941  * @dropped.drop_ingress: Packets dropped during Umac reset
1942  * @dropped.invalid_peer_id_in_exc_path:
1943  * @dropped.tx_mcast_drop:
1944  * @mesh: mesh packet information
1945  * @mesh.exception_fw: packets sent to fw
1946  * @mesh.completion_fw: packets completions received from fw
1947  * @cce_classified:Number of packets classified by CCE
1948  * @cce_classified_raw:Number of raw packets classified by CCE
1949  * @sniffer_rcvd: Number of packets received with ppdu cookie
1950  * @tso_stats:
1951  * @mlo_mcast: mlo mcast packet counters
1952  * @mlo_mcast.send_pkt_count: MLO mcast send packet counter
1953  * @mlo_mcast.fail_pkt_count: MLO mcast failed packet counter
1954  */
1955 struct cdp_tx_ingress_stats {
1956 	struct cdp_pkt_info rcvd;
1957 	uint64_t rcvd_in_fast_xmit_flow;
1958 	uint32_t rcvd_per_core[CDP_MAX_TX_DATA_RINGS];
1959 	struct cdp_pkt_info processed;
1960 	struct cdp_pkt_info reinject_pkts;
1961 	struct cdp_pkt_info inspect_pkts;
1962 	struct cdp_pkt_info nawds_mcast;
1963 	struct cdp_pkt_info bcast;
1964 
1965 	struct {
1966 		struct cdp_pkt_info raw_pkt;
1967 		uint32_t dma_map_error;
1968 		uint32_t invalid_raw_pkt_datatype;
1969 		uint32_t num_frags_overflow_err;
1970 	} raw;
1971 
1972 	struct {
1973 		struct cdp_pkt_info sg_pkt;
1974 		struct cdp_pkt_info non_sg_pkts;
1975 		struct cdp_pkt_info  dropped_host;
1976 		uint32_t dropped_target;
1977 		uint32_t dma_map_error;
1978 	} sg;
1979 
1980 	struct {
1981 		struct cdp_pkt_info mcast_pkt;
1982 		uint32_t dropped_map_error;
1983 		uint32_t dropped_self_mac;
1984 		uint32_t dropped_send_fail;
1985 		uint32_t ucast;
1986 		uint32_t fail_seg_alloc;
1987 		uint32_t clone_fail;
1988 	} mcast_en;
1989 
1990 	struct {
1991 		uint32_t igmp_rcvd;
1992 		uint32_t igmp_ucast_converted;
1993 	} igmp_mcast_en;
1994 
1995 	struct {
1996 		struct cdp_pkt_info dropped_pkt;
1997 		struct cdp_pkt_info  desc_na;
1998 		struct cdp_pkt_info  desc_na_exc_alloc_fail;
1999 		struct cdp_pkt_info  desc_na_exc_outstand;
2000 		struct cdp_pkt_info  exc_desc_na;
2001 		uint32_t ring_full;
2002 		uint32_t enqueue_fail;
2003 		uint32_t dma_error;
2004 		uint32_t res_full;
2005 		uint32_t headroom_insufficient;
2006 		uint32_t fail_per_pkt_vdev_id_check;
2007 		uint32_t drop_ingress;
2008 		uint32_t invalid_peer_id_in_exc_path;
2009 		uint32_t tx_mcast_drop;
2010 		uint32_t fw2wbm_tx_drop;
2011 	} dropped;
2012 
2013 	struct {
2014 		uint32_t exception_fw;
2015 		uint32_t completion_fw;
2016 	} mesh;
2017 
2018 	uint32_t cce_classified;
2019 	uint32_t cce_classified_raw;
2020 	struct cdp_pkt_info sniffer_rcvd;
2021 	struct cdp_tso_stats tso_stats;
2022 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MCAST_MLO)
2023 	struct {
2024 		uint32_t send_pkt_count;
2025 		uint32_t fail_pkt_count;
2026 	} mlo_mcast;
2027 #endif
2028 };
2029 
2030 /**
2031  * struct cdp_rx_ingress_stats - rx ingress stats
2032  * @reo_rcvd_pkt: packets received at REO block
2033  * @null_q_desc_pkt: null queue desc pkt count
2034  * @routed_eapol_pkt: routed eapol pkt count
2035  */
2036 struct cdp_rx_ingress_stats {
2037 	struct cdp_pkt_info reo_rcvd_pkt;
2038 	struct cdp_pkt_info null_q_desc_pkt;
2039 	struct cdp_pkt_info routed_eapol_pkt;
2040 };
2041 
2042 /**
2043  * struct cdp_vdev_stats - vdev stats structure
2044  * @tx_i: ingress tx stats
2045  * @rx_i: ingress rx stats
2046  * @tx: cdp tx stats
2047  * @rx: cdp rx stats
2048  * @tso_stats: tso stats
2049  * @tid_tx_stats: tid tx stats
2050  */
2051 struct cdp_vdev_stats {
2052 	struct cdp_tx_ingress_stats tx_i;
2053 	struct cdp_rx_ingress_stats rx_i;
2054 	struct cdp_tx_stats tx;
2055 	struct cdp_rx_stats rx;
2056 	struct cdp_tso_stats tso_stats;
2057 #ifdef HW_TX_DELAY_STATS_ENABLE
2058 	struct cdp_tid_tx_stats tid_tx_stats[CDP_MAX_TX_COMP_RINGS]
2059 					    [CDP_MAX_DATA_TIDS];
2060 #endif
2061 };
2062 
2063 /**
2064  * struct cdp_calibr_stats - Calibrated stats
2065  * @tx: Tx statistics
2066  * @last_per: Tx last packet error rate
2067  * @tx_bytes_success_last: last Tx success bytes
2068  * @tx_data_success_last: last Tx success data
2069  * @tx_byte_rate: Bytes Trasmitted in last one sec
2070  * @tx_data_rate: Data Transmitted in last one sec
2071  * @tx_data_ucast_last: last unicast Tx bytes
2072  * @tx_data_ucast_rate: last unicast Tx data
2073  * @inactive_time: inactive time in secs
2074  * @rx: Rx statistics
2075  * @rx_bytes_success_last: last Rx success bytes
2076  * @rx_data_success_last: last Rx success data
2077  * @rx_byte_rate: Bytes received in last one sec
2078  * @rx_data_rate: Data received in last one sec
2079  */
2080 struct cdp_calibr_stats {
2081 	struct {
2082 		uint32_t last_per;
2083 		uint32_t tx_bytes_success_last;
2084 		uint32_t tx_data_success_last;
2085 		uint32_t tx_byte_rate;
2086 		uint32_t tx_data_rate;
2087 		uint32_t tx_data_ucast_last;
2088 		uint32_t tx_data_ucast_rate;
2089 		uint32_t inactive_time;
2090 	} tx;
2091 
2092 	struct {
2093 		uint32_t rx_bytes_success_last;
2094 		uint32_t rx_data_success_last;
2095 		uint32_t rx_byte_rate;
2096 		uint32_t rx_data_rate;
2097 	} rx;
2098 };
2099 
2100 /**
2101  * struct cdp_calibr_stats_intf: Calibrated stats interface
2102  * @to_stack: Total packets sent up the stack
2103  * @tx_success: Successful Tx Packets
2104  * @tx_ucast: Tx Unicast Packet Count
2105  */
2106 struct cdp_calibr_stats_intf {
2107 	struct cdp_pkt_info to_stack;
2108 	struct cdp_pkt_info tx_success;
2109 	struct cdp_pkt_info tx_ucast;
2110 };
2111 
2112 /**
2113  * struct cdp_peer_stats - peer stats structure
2114  * @mac_addr: MAC address
2115  * @tx: cdp tx stats
2116  * @rx: cdp rx stats
2117  */
2118 struct cdp_peer_stats {
2119 	struct qdf_mac_addr mac_addr;
2120 	struct cdp_tx_stats tx;
2121 	struct cdp_rx_stats rx;
2122 };
2123 
2124 /**
2125  * struct cdp_peer_tid_stats - Per peer and per TID stats
2126  * @tx_prev_delay: tx previous delay
2127  * @tx_avg_jitter: tx average jitter
2128  * @tx_avg_delay: tx average delay
2129  * @tx_avg_err: tx average error
2130  * @tx_total_success: tx total success
2131  * @tx_drop: tx drop
2132  */
2133 struct cdp_peer_tid_stats {
2134 #ifdef WLAN_PEER_JITTER
2135 	uint32_t tx_prev_delay;
2136 	uint32_t tx_avg_jitter;
2137 	uint32_t tx_avg_delay;
2138 	uint64_t tx_avg_err;
2139 	uint64_t tx_total_success;
2140 	uint64_t tx_drop;
2141 #endif
2142 };
2143 
2144 /**
2145  * struct cdp_interface_peer_stats - interface structure for txrx peer stats
2146  * @peer_mac: peer mac address
2147  * @vdev_id : vdev_id for the peer
2148  * @rssi_changed: denotes rssi is changed
2149  * @last_peer_tx_rate: peer tx rate for last transmission
2150  * @peer_tx_rate: tx rate for current transmission
2151  * @peer_rssi: current rssi value of peer
2152  * @tx_packet_count: tx packet count
2153  * @rx_packet_count: rx packet count
2154  * @tx_byte_count: tx byte count
2155  * @rx_byte_count: rx byte count
2156  * @per: per error rate
2157  * @ack_rssi: RSSI of the last ack received
2158  * @free_buff: free tx descriptor count
2159  * @rx_avg_snr: Avg Rx SNR
2160  */
2161 struct cdp_interface_peer_stats {
2162 	uint8_t  peer_mac[QDF_MAC_ADDR_SIZE];
2163 	uint8_t  vdev_id;
2164 	uint8_t  rssi_changed;
2165 	uint32_t last_peer_tx_rate;
2166 	uint32_t peer_tx_rate;
2167 	uint32_t peer_rssi;
2168 	uint32_t tx_packet_count;
2169 	uint32_t rx_packet_count;
2170 	uint32_t tx_byte_count;
2171 	uint32_t rx_byte_count;
2172 	uint32_t per;
2173 	uint32_t ack_rssi;
2174 	uint32_t free_buff;
2175 	uint32_t rx_avg_snr;
2176 };
2177 
2178 /**
2179  * struct cdp_interface_peer_qos_stats - interface structure for peer qos stats
2180  * @peer_mac: peer mac address
2181  * @frame_control: frame control field
2182  * @qos_control: qos control field
2183  * @frame_control_info_valid: frame_control valid
2184  * @qos_control_info_valid: qos_control valid
2185  * @vdev_id : vdev_id for the peer
2186  */
2187 struct cdp_interface_peer_qos_stats {
2188 	uint8_t  peer_mac[QDF_MAC_ADDR_SIZE];
2189 	uint16_t frame_control;
2190 	uint16_t qos_control;
2191 	uint8_t  frame_control_info_valid;
2192 	uint8_t  qos_control_info_valid;
2193 	uint8_t  vdev_id;
2194 };
2195 
2196 /* Tx completions per interrupt */
2197 struct cdp_hist_tx_comp {
2198 	uint32_t pkts_1;
2199 	uint32_t pkts_2_20;
2200 	uint32_t pkts_21_40;
2201 	uint32_t pkts_41_60;
2202 	uint32_t pkts_61_80;
2203 	uint32_t pkts_81_100;
2204 	uint32_t pkts_101_200;
2205 	uint32_t pkts_201_plus;
2206 };
2207 
2208 /* Rx ring descriptors reaped per interrupt */
2209 struct cdp_hist_rx_ind {
2210 	uint32_t pkts_1;
2211 	uint32_t pkts_2_20;
2212 	uint32_t pkts_21_40;
2213 	uint32_t pkts_41_60;
2214 	uint32_t pkts_61_80;
2215 	uint32_t pkts_81_100;
2216 	uint32_t pkts_101_200;
2217 	uint32_t pkts_201_plus;
2218 };
2219 
2220 struct cdp_htt_tlv_hdr {
2221 	/* BIT [11 :  0]   :- tag
2222 	 * BIT [23 : 12]   :- length
2223 	 * BIT [31 : 24]   :- reserved
2224 	 */
2225 	uint32_t tag__length;
2226 };
2227 
2228 #define HTT_STATS_SUBTYPE_MAX     16
2229 
2230 struct cdp_htt_rx_pdev_fw_stats_tlv {
2231     struct cdp_htt_tlv_hdr tlv_hdr;
2232 
2233     /* BIT [ 7 :  0]   :- mac_id
2234      * BIT [31 :  8]   :- reserved
2235      */
2236     uint32_t mac_id__word;
2237     /* Num PPDU status processed from HW */
2238     uint32_t ppdu_recvd;
2239     /* Num MPDU across PPDUs with FCS ok */
2240     uint32_t mpdu_cnt_fcs_ok;
2241     /* Num MPDU across PPDUs with FCS err */
2242     uint32_t mpdu_cnt_fcs_err;
2243     /* Num MSDU across PPDUs */
2244     uint32_t tcp_msdu_cnt;
2245     /* Num MSDU across PPDUs */
2246     uint32_t tcp_ack_msdu_cnt;
2247     /* Num MSDU across PPDUs */
2248     uint32_t udp_msdu_cnt;
2249     /* Num MSDU across PPDUs */
2250     uint32_t other_msdu_cnt;
2251     /* Num MPDU on FW ring indicated */
2252     uint32_t fw_ring_mpdu_ind;
2253     /* Num MGMT MPDU given to protocol */
2254     uint32_t fw_ring_mgmt_subtype[HTT_STATS_SUBTYPE_MAX];
2255     /* Num ctrl MPDU given to protocol */
2256     uint32_t fw_ring_ctrl_subtype[HTT_STATS_SUBTYPE_MAX];
2257     /* Num mcast data packet received */
2258     uint32_t fw_ring_mcast_data_msdu;
2259     /* Num broadcast data packet received */
2260     uint32_t fw_ring_bcast_data_msdu;
2261     /* Num unicat data packet received */
2262     uint32_t fw_ring_ucast_data_msdu;
2263     /* Num null data packet received  */
2264     uint32_t fw_ring_null_data_msdu;
2265     /* Num MPDU on FW ring dropped */
2266     uint32_t fw_ring_mpdu_drop;
2267 
2268     /* Num buf indication to offload */
2269     uint32_t ofld_local_data_ind_cnt;
2270     /* Num buf recycle from offload */
2271     uint32_t ofld_local_data_buf_recycle_cnt;
2272     /* Num buf indication to data_rx */
2273     uint32_t drx_local_data_ind_cnt;
2274     /* Num buf recycle from data_rx */
2275     uint32_t drx_local_data_buf_recycle_cnt;
2276     /* Num buf indication to protocol */
2277     uint32_t local_nondata_ind_cnt;
2278     /* Num buf recycle from protocol */
2279     uint32_t local_nondata_buf_recycle_cnt;
2280 
2281     /* Num buf fed */
2282     uint32_t fw_status_buf_ring_refill_cnt;
2283     /* Num ring empty encountered */
2284     uint32_t fw_status_buf_ring_empty_cnt;
2285     /* Num buf fed  */
2286     uint32_t fw_pkt_buf_ring_refill_cnt;
2287     /* Num ring empty encountered */
2288     uint32_t fw_pkt_buf_ring_empty_cnt;
2289     /* Num buf fed  */
2290     uint32_t fw_link_buf_ring_refill_cnt;
2291     /* Num ring empty encountered  */
2292     uint32_t fw_link_buf_ring_empty_cnt;
2293 
2294     /* Num buf fed */
2295     uint32_t host_pkt_buf_ring_refill_cnt;
2296     /* Num ring empty encountered */
2297     uint32_t host_pkt_buf_ring_empty_cnt;
2298     /* Num buf fed */
2299     uint32_t mon_pkt_buf_ring_refill_cnt;
2300     /* Num ring empty encountered */
2301     uint32_t mon_pkt_buf_ring_empty_cnt;
2302     /* Num buf fed */
2303     uint32_t mon_status_buf_ring_refill_cnt;
2304     /* Num ring empty encountered */
2305     uint32_t mon_status_buf_ring_empty_cnt;
2306     /* Num buf fed */
2307     uint32_t mon_desc_buf_ring_refill_cnt;
2308     /* Num ring empty encountered */
2309     uint32_t mon_desc_buf_ring_empty_cnt;
2310     /* Num buf fed */
2311     uint32_t mon_dest_ring_update_cnt;
2312     /* Num ring full encountered */
2313     uint32_t mon_dest_ring_full_cnt;
2314 
2315     /* Num rx suspend is attempted */
2316     uint32_t rx_suspend_cnt;
2317     /* Num rx suspend failed */
2318     uint32_t rx_suspend_fail_cnt;
2319     /* Num rx resume attempted */
2320     uint32_t rx_resume_cnt;
2321     /* Num rx resume failed */
2322     uint32_t rx_resume_fail_cnt;
2323     /* Num rx ring switch */
2324     uint32_t rx_ring_switch_cnt;
2325     /* Num rx ring restore */
2326     uint32_t rx_ring_restore_cnt;
2327     /* Num rx flush issued */
2328     uint32_t rx_flush_cnt;
2329 };
2330 
2331 /* == TX PDEV STATS == */
2332 struct cdp_htt_tx_pdev_stats_cmn_tlv {
2333     struct cdp_htt_tlv_hdr tlv_hdr;
2334 
2335     /* BIT [ 7 :  0]   :- mac_id
2336      * BIT [31 :  8]   :- reserved
2337      */
2338     uint32_t mac_id__word;
2339     /* Num queued to HW */
2340     uint32_t hw_queued;
2341     /* Num PPDU reaped from HW */
2342     uint32_t hw_reaped;
2343     /* Num underruns */
2344     uint32_t underrun;
2345     /* Num HW Paused counter. */
2346     uint32_t hw_paused;
2347     /* Num HW flush counter. */
2348     uint32_t hw_flush;
2349     /* Num HW filtered counter. */
2350     uint32_t hw_filt;
2351     /* Num PPDUs cleaned up in TX abort */
2352     uint32_t tx_abort;
2353     /* Num MPDUs requed by SW */
2354     uint32_t mpdu_requed;
2355     /* excessive retries */
2356     uint32_t tx_xretry;
2357     /* Last used data hw rate code */
2358     uint32_t data_rc;
2359     /* frames dropped due to excessive sw retries */
2360     uint32_t mpdu_dropped_xretry;
2361     /* illegal rate phy errors  */
2362     uint32_t illgl_rate_phy_err;
2363     /* wal pdev continuous xretry */
2364     uint32_t cont_xretry;
2365     /* wal pdev continuous xretry */
2366     uint32_t tx_timeout;
2367     /* wal pdev resets  */
2368     uint32_t pdev_resets;
2369     /* PhY/BB underrun */
2370     uint32_t phy_underrun;
2371     /* MPDU is more than txop limit */
2372     uint32_t txop_ovf;
2373     /* Number of Sequences posted */
2374     uint32_t seq_posted;
2375     /* Number of Sequences failed queueing */
2376     uint32_t seq_failed_queueing;
2377     /* Number of Sequences completed */
2378     uint32_t seq_completed;
2379     /* Number of Sequences restarted */
2380     uint32_t seq_restarted;
2381     /* Number of MU Sequences posted */
2382     uint32_t mu_seq_posted;
2383     /* Number of time HW ring is paused between seq switch within ISR */
2384     uint32_t seq_switch_hw_paused;
2385     /* Number of times seq continuation in DSR */
2386     uint32_t next_seq_posted_dsr;
2387     /* Number of times seq continuation in ISR */
2388     uint32_t seq_posted_isr;
2389     /* Number of seq_ctrl cached. */
2390     uint32_t seq_ctrl_cached;
2391     /* Number of MPDUs successfully transmitted */
2392     uint32_t mpdu_count_tqm;
2393     /* Number of MSDUs successfully transmitted */
2394     uint32_t msdu_count_tqm;
2395     /* Number of MPDUs dropped */
2396     uint32_t mpdu_removed_tqm;
2397     /* Number of MSDUs dropped */
2398     uint32_t msdu_removed_tqm;
2399     /* Num MPDUs flushed by SW, HWPAUSED, SW TXABORT (Reset,channel change) */
2400     uint32_t mpdus_sw_flush;
2401     /* Num MPDUs filtered by HW, all filter condition (TTL expired) */
2402     uint32_t mpdus_hw_filter;
2403     /* Num MPDUs truncated by PDG (TXOP, TBTT, PPDU_duration based on rate, dyn_bw) */
2404     uint32_t mpdus_truncated;
2405     /* Num MPDUs that was tried but didn't receive ACK or BA */
2406     uint32_t mpdus_ack_failed;
2407     /* Num MPDUs that was dropped due to expiry (MSDU TTL). */
2408     uint32_t mpdus_expired;
2409     /* Num MPDUs that was retried within seq_ctrl (MGMT/LEGACY) */
2410     uint32_t mpdus_seq_hw_retry;
2411     /* Num of TQM acked cmds processed */
2412     uint32_t ack_tlv_proc;
2413     /* coex_abort_mpdu_cnt valid. */
2414     uint32_t coex_abort_mpdu_cnt_valid;
2415     /* coex_abort_mpdu_cnt from TX FES stats. */
2416     uint32_t coex_abort_mpdu_cnt;
2417     /* Number of total PPDUs(DATA, MGMT, excludes selfgen) tried over the air (OTA) */
2418     uint32_t num_total_ppdus_tried_ota;
2419     /* Number of data PPDUs tried over the air (OTA) */
2420     uint32_t num_data_ppdus_tried_ota;
2421     /* Num Local control/mgmt frames (MSDUs) queued */
2422     uint32_t local_ctrl_mgmt_enqued;
2423     /* local_ctrl_mgmt_freed:
2424      * Num Local control/mgmt frames (MSDUs) done
2425      * It includes all local ctrl/mgmt completions
2426      * (acked, no ack, flush, TTL, etc)
2427      */
2428     uint32_t local_ctrl_mgmt_freed;
2429     /* Num Local data frames (MSDUs) queued */
2430     uint32_t local_data_enqued;
2431     /* local_data_freed:
2432      * Num Local data frames (MSDUs) done
2433      * It includes all local data completions
2434      * (acked, no ack, flush, TTL, etc)
2435      */
2436     uint32_t local_data_freed;
2437 
2438 	/* Num MPDUs tried by SW */
2439 	uint32_t mpdu_tried;
2440 	/* Num of waiting seq posted in isr completion handler */
2441 	uint32_t isr_wait_seq_posted;
2442 	uint32_t tx_active_dur_us_low;
2443 	uint32_t tx_active_dur_us_high;
2444 };
2445 
2446 #define DP_NUM_AC_WMM 4
2447 
2448 struct cdp_pdev_obss_pd_stats_tlv {
2449 	struct cdp_htt_tlv_hdr tlv_hdr;
2450 
2451 	uint32_t num_obss_tx_ppdu_success;
2452 	uint32_t num_obss_tx_ppdu_failure;
2453 	/** num_sr_tx_transmissions:
2454 	 * Counter of TX done by aborting other BSS RX with spatial reuse
2455 	 * (for cases where rx RSSI from other BSS is below the packet-detection
2456 	 * threshold for doing spatial reuse)
2457 	 */
2458 	uint32_t num_sr_tx_transmissions;
2459 	/**
2460 	 * Count the number of times the RSSI from an other-BSS signal
2461 	 * is below the spatial reuse power threshold, thus providing an
2462 	 * opportunity for spatial reuse since OBSS interference will be
2463 	 * inconsequential.
2464 	 */
2465 	uint32_t num_spatial_reuse_opportunities;
2466 	/**
2467 	 * Count of number of times OBSS frames were aborted and non-SRG
2468 	 * opportunities were created. Non-SRG opportunities are created when
2469 	 * incoming OBSS RSSI is lesser than the global configured non-SRG RSSI
2470 	 * threshold and non-SRG OBSS color / non-SRG OBSS BSSID registers
2471 	 * allow non-SRG TX.
2472 	 */
2473 	uint32_t num_non_srg_opportunities;
2474 	/**
2475 	 * Count of number of times TX PPDU were transmitted using non-SRG
2476 	 * opportunities created. Incoming OBSS frame RSSI is compared with per
2477 	 * PPDU non-SRG RSSI threshold configured in each PPDU. If incoming OBSS
2478 	 * RSSI < non-SRG RSSI threshold configured in each PPDU, then non-SRG
2479 	 * transmission happens.
2480 	 */
2481 	uint32_t num_non_srg_ppdu_tried;
2482 	/**
2483 	 * Count of number of times non-SRG based TX transmissions were
2484 	 * successful
2485 	 */
2486 	uint32_t num_non_srg_ppdu_success;
2487 	/**
2488 	 * Count of number of times OBSS frames were aborted and SRG
2489 	 * opportunities were created. Srg opportunities are created when
2490 	 * incoming OBSS RSSI is less than the global configured SRG RSSI
2491 	 * threshold and SRC OBSS color / SRG OBSS BSSID / SRG partial bssid /
2492 	 * SRG BSS color bitmap registers allow SRG TX.
2493 	 */
2494 	uint32_t num_srg_opportunities;
2495 	/**
2496 	 * Count of number of times TX PPDU were transmitted using SRG
2497 	 * opportunities created.
2498 	 * Incoming OBSS frame RSSI is compared with per PPDU SRG RSSI
2499 	 * threshold configured in each PPDU.
2500 	 * If incoming OBSS RSSI < SRG RSSI threshold configured in each PPDU,
2501 	 * then SRG transmission happens.
2502 	 */
2503 	uint32_t num_srg_ppdu_tried;
2504 	/**
2505 	 * Count of number of times SRG based TX transmissions were successful
2506 	 */
2507 	uint32_t num_srg_ppdu_success;
2508 	/**
2509 	 * Count of number of times PSR opportunities were created by aborting
2510 	 * OBSS UL OFDMA HE-TB PPDU frame. HE-TB ppdu frames are aborted if the
2511 	 * spatial reuse info in the OBSS trigger common field is set to allow
2512 	 * PSR based spatial reuse.
2513 	 */
2514 	uint32_t num_psr_opportunities;
2515 	/**
2516 	 * Count of number of times TX PPDU were transmitted using PSR
2517 	 * opportunities created.
2518 	 */
2519 	uint32_t num_psr_ppdu_tried;
2520 	/**
2521 	 * Count of number of times PSR based TX transmissions were successful.
2522 	 */
2523 	uint32_t num_psr_ppdu_success;
2524 	/**
2525 	 * Count of number of times TX PPDU per access category were transmitted
2526 	 * using non-SRG opportunities created.
2527 	 */
2528 	uint32_t num_non_srg_ppdu_tried_per_ac[DP_NUM_AC_WMM];
2529 	/**
2530 	 * Count of number of times non-SRG based TX transmissions per access
2531 	 * category were successful
2532 	 */
2533 	uint32_t num_non_srg_ppdu_success_per_ac[DP_NUM_AC_WMM];
2534 	/**
2535 	 * Count of number of times TX PPDU per access category were transmitted
2536 	 * using SRG opportunities created.
2537 	 */
2538 	uint32_t num_srg_ppdu_tried_per_ac[DP_NUM_AC_WMM];
2539 	/**
2540 	 * Count of number of times SRG based TX transmissions per access
2541 	 * category were successful
2542 	 */
2543 	uint32_t num_srg_ppdu_success_per_ac[DP_NUM_AC_WMM];
2544 	/**
2545 	 * Count of number of times ppdu was flushed due to ongoing OBSS
2546 	 * frame duration value lesser than minimum required frame duration.
2547 	 */
2548 	uint32_t num_obss_min_duration_check_flush_cnt;
2549 	/**
2550 	 * Count of number of times ppdu was flushed due to ppdu duration
2551 	 * exceeding aborted OBSS frame duration
2552 	 */
2553 	uint32_t num_sr_ppdu_abort_flush_cnt;
2554 };
2555 
2556 struct cdp_htt_tx_pdev_stats_urrn_tlv_v {
2557     struct cdp_htt_tlv_hdr tlv_hdr;
2558     QDF_FLEX_ARRAY(uint32_t, urrn_stats); /* HTT_TX_PDEV_MAX_URRN_STATS */
2559 };
2560 
2561 /* NOTE: Variable length TLV, use length spec to infer array size */
2562 struct cdp_htt_tx_pdev_stats_flush_tlv_v {
2563     struct cdp_htt_tlv_hdr tlv_hdr;
2564     QDF_FLEX_ARRAY(uint32_t, flush_errs); /* HTT_TX_PDEV_MAX_FLUSH_REASON_STATS */
2565 };
2566 
2567 /* NOTE: Variable length TLV, use length spec to infer array size */
2568 struct cdp_htt_tx_pdev_stats_sifs_tlv_v {
2569     struct cdp_htt_tlv_hdr tlv_hdr;
2570     QDF_FLEX_ARRAY(uint32_t, sifs_status); /* HTT_TX_PDEV_MAX_SIFS_BURST_STATS */
2571 };
2572 
2573 /* NOTE: Variable length TLV, use length spec to infer array size */
2574 struct cdp_htt_tx_pdev_stats_phy_err_tlv_v {
2575     struct cdp_htt_tlv_hdr tlv_hdr;
2576     QDF_FLEX_ARRAY(uint32_t, phy_errs); /* HTT_TX_PDEV_MAX_PHY_ERR_STATS */
2577 };
2578 
2579 /* == RX PDEV/SOC STATS == */
2580 /* HTT_STATS_RX_SOC_FW_STATS_TAG */
2581 struct cdp_htt_rx_soc_fw_stats_tlv {
2582     struct cdp_htt_tlv_hdr tlv_hdr;
2583     /* Num Packets received on REO FW ring */
2584     uint32_t fw_reo_ring_data_msdu;
2585     /* Num bc/mc packets indicated from fw to host */
2586     uint32_t fw_to_host_data_msdu_bcmc;
2587     /* Num unicast packets indicated from fw to host */
2588     uint32_t fw_to_host_data_msdu_uc;
2589     /* Num remote buf recycle from offload  */
2590     uint32_t ofld_remote_data_buf_recycle_cnt;
2591     /* Num remote free buf given to offload */
2592     uint32_t ofld_remote_free_buf_indication_cnt;
2593 };
2594 
2595 struct cdp_htt_rx_soc_fw_refill_ring_num_refill_tlv_v {
2596     struct cdp_htt_tlv_hdr tlv_hdr;
2597     /* Num total buf refilled from refill ring */
2598     QDF_FLEX_ARRAY(uint32_t, refill_ring_num_refill); /* HTT_RX_STATS_REFILL_MAX_RING */
2599 };
2600 
2601 struct cdp_htt_rx_pdev_fw_ring_mpdu_err_tlv_v {
2602     struct cdp_htt_tlv_hdr tlv_hdr;
2603     /* Num error MPDU for each RxDMA error type  */
2604     QDF_FLEX_ARRAY(uint32_t, fw_ring_mpdu_err); /* HTT_RX_STATS_RXDMA_MAX_ERR */
2605 };
2606 
2607 struct cdp_htt_rx_pdev_fw_mpdu_drop_tlv_v {
2608     struct cdp_htt_tlv_hdr tlv_hdr;
2609     /* Num MPDU dropped  */
2610     QDF_FLEX_ARRAY(uint32_t, fw_mpdu_drop); /* HTT_RX_STATS_FW_DROP_REASON_MAX */
2611 };
2612 
2613 #define HTT_STATS_PHY_ERR_MAX 43
2614 
2615 struct cdp_htt_rx_pdev_fw_stats_phy_err_tlv {
2616     struct cdp_htt_tlv_hdr tlv_hdr;
2617 
2618     /* BIT [ 7 :  0]   :- mac_id
2619      * BIT [31 :  8]   :- reserved
2620      */
2621     uint32_t mac_id__word;
2622     /* Num of phy err */
2623     uint32_t total_phy_err_cnt;
2624     /* Counts of different types of phy errs
2625      * The mapping of PHY error types to phy_err array elements is HW dependent.
2626      * The only currently-supported mapping is shown below:
2627      *
2628      * 0 phyrx_err_phy_off Reception aborted due to receiving a PHY_OFF TLV
2629      * 1 phyrx_err_synth_off
2630      * 2 phyrx_err_ofdma_timing
2631      * 3 phyrx_err_ofdma_signal_parity
2632      * 4 phyrx_err_ofdma_rate_illegal
2633      * 5 phyrx_err_ofdma_length_illegal
2634      * 6 phyrx_err_ofdma_restart
2635      * 7 phyrx_err_ofdma_service
2636      * 8 phyrx_err_ppdu_ofdma_power_drop
2637      * 9 phyrx_err_cck_blokker
2638      * 10 phyrx_err_cck_timing
2639      * 11 phyrx_err_cck_header_crc
2640      * 12 phyrx_err_cck_rate_illegal
2641      * 13 phyrx_err_cck_length_illegal
2642      * 14 phyrx_err_cck_restart
2643      * 15 phyrx_err_cck_service
2644      * 16 phyrx_err_cck_power_drop
2645      * 17 phyrx_err_ht_crc_err
2646      * 18 phyrx_err_ht_length_illegal
2647      * 19 phyrx_err_ht_rate_illegal
2648      * 20 phyrx_err_ht_zlf
2649      * 21 phyrx_err_false_radar_ext
2650      * 22 phyrx_err_green_field
2651      * 23 phyrx_err_bw_gt_dyn_bw
2652      * 24 phyrx_err_leg_ht_mismatch
2653      * 25 phyrx_err_vht_crc_error
2654      * 26 phyrx_err_vht_siga_unsupported
2655      * 27 phyrx_err_vht_lsig_len_invalid
2656      * 28 phyrx_err_vht_ndp_or_zlf
2657      * 29 phyrx_err_vht_nsym_lt_zero
2658      * 30 phyrx_err_vht_rx_extra_symbol_mismatch
2659      * 31 phyrx_err_vht_rx_skip_group_id0
2660      * 32 phyrx_err_vht_rx_skip_group_id1to62
2661      * 33 phyrx_err_vht_rx_skip_group_id63
2662      * 34 phyrx_err_ofdm_ldpc_decoder_disabled
2663      * 35 phyrx_err_defer_nap
2664      * 36 phyrx_err_fdomain_timeout
2665      * 37 phyrx_err_lsig_rel_check
2666      * 38 phyrx_err_bt_collision
2667      * 39 phyrx_err_unsupported_mu_feedback
2668      * 40 phyrx_err_ppdu_tx_interrupt_rx
2669      * 41 phyrx_err_unsupported_cbf
2670      * 42 phyrx_err_other
2671      */
2672     uint32_t phy_err[HTT_STATS_PHY_ERR_MAX];
2673 };
2674 
2675 struct cdp_htt_rx_soc_fw_refill_ring_empty_tlv_v {
2676     struct cdp_htt_tlv_hdr tlv_hdr;
2677     /* Num ring empty encountered */
2678     QDF_FLEX_ARRAY(uint32_t, refill_ring_empty_cnt); /* HTT_RX_STATS_REFILL_MAX_RING */
2679 };
2680 
2681 struct cdp_htt_tx_pdev_stats {
2682     struct cdp_htt_tx_pdev_stats_cmn_tlv cmn_tlv;
2683     struct cdp_htt_tx_pdev_stats_urrn_tlv_v underrun_tlv;
2684     struct cdp_htt_tx_pdev_stats_sifs_tlv_v sifs_tlv;
2685     struct cdp_htt_tx_pdev_stats_flush_tlv_v flush_tlv;
2686     struct cdp_htt_tx_pdev_stats_phy_err_tlv_v phy_err_tlv;
2687 	struct cdp_pdev_obss_pd_stats_tlv obss_pd_stats_tlv;
2688 };
2689 
2690 struct cdp_htt_rx_soc_stats_t {
2691     struct cdp_htt_rx_soc_fw_stats_tlv fw_tlv;
2692     struct cdp_htt_rx_soc_fw_refill_ring_empty_tlv_v fw_refill_ring_empty_tlv;
2693     struct cdp_htt_rx_soc_fw_refill_ring_num_refill_tlv_v fw_refill_ring_num_refill_tlv;
2694 };
2695 
2696 struct cdp_htt_rx_pdev_stats {
2697     struct cdp_htt_rx_soc_stats_t soc_stats;
2698     struct cdp_htt_rx_pdev_fw_stats_tlv fw_stats_tlv;
2699     struct cdp_htt_rx_pdev_fw_ring_mpdu_err_tlv_v fw_ring_mpdu_err_tlv;
2700     struct cdp_htt_rx_pdev_fw_mpdu_drop_tlv_v fw_ring_mpdu_drop;
2701     struct cdp_htt_rx_pdev_fw_stats_phy_err_tlv fw_stats_phy_err_tlv;
2702 };
2703 
2704 #ifdef WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG
2705 /* Since protocol type enumeration value is passed as CCE metadata
2706  * to firmware, add a constant offset before passing it to firmware
2707  */
2708 #define RX_PROTOCOL_TAG_START_OFFSET  128
2709 /* This should align with packet type enumerations in ieee80211_ioctl.h
2710  * and wmi_unified_param.h files
2711  */
2712 #define RX_PROTOCOL_TAG_MAX   24
2713 /* Macro that should be used to dump the statistics counter for all
2714  * protocol types
2715  */
2716 #define RX_PROTOCOL_TAG_ALL 0xff
2717 #endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
2718 
2719 #ifdef WLAN_FEATURE_11BE
2720 #define OFDMA_NUM_RU_SIZE 16
2721 #else
2722 #define OFDMA_NUM_RU_SIZE 7
2723 #endif
2724 
2725 #define OFDMA_NUM_USERS	37
2726 
2727 #if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
2728 /**
2729  * enum mac_freeze_capture_reason - capture reason counters
2730  * @FREEZE_REASON_TM: When m_directed_ftm is enabled, this CFR data is
2731  * captured for a Timing Measurement (TM) frame.
2732  * @FREEZE_REASON_FTM: When m_directed_ftm is enabled, this CFR data is
2733  * captured for a Fine Timing Measurement (FTM) frame.
2734  * @FREEZE_REASON_ACK_RESP_TO_TM_FTM: When m_all_ftm_ack is enabled, this CFR
2735  * data is captured for an ACK received for the FTM/TM frame sent to a station.
2736  * @FREEZE_REASON_TA_RA_TYPE_FILTER: When m_ta_ra_filter is enabled, this CFR
2737  * data is captured for a PPDU received,since the CFR TA_RA filter is met.
2738  * @FREEZE_REASON_NDPA_NDP: When m_ndpa_ndp_directed(or)m_ndpa_ndp_all is
2739  * enabled, this CFR data is captured for an NDP frame received.
2740  * @FREEZE_REASON_ALL_PACKET: When m_all_packet is enabled, this CFR data is
2741  * captured for an incoming PPDU.
2742  * @FREEZE_REASON_MAX: Maximum value
2743  */
2744 enum mac_freeze_capture_reason {
2745 	FREEZE_REASON_TM = 0,
2746 	FREEZE_REASON_FTM,
2747 	FREEZE_REASON_ACK_RESP_TO_TM_FTM,
2748 	FREEZE_REASON_TA_RA_TYPE_FILTER,
2749 	FREEZE_REASON_NDPA_NDP,
2750 	FREEZE_REASON_ALL_PACKET,
2751 	FREEZE_REASON_MAX,
2752 };
2753 
2754 /**
2755  * enum chan_capture_status - capture status counters
2756  * @CAPTURE_IDLE: CFR data is not captured, since VCSR setting for CFR/RCC is
2757  * not enabled.
2758  * @CAPTURE_BUSY: CFR data is not available, since previous channel
2759  * upload is in progress
2760  * @CAPTURE_ACTIVE: CFR data is captured in HW registers
2761  * @CAPTURE_NO_BUFFER: CFR data is not captured, since no buffer is available
2762  * in IPC ring to DMA CFR data
2763  * @CAPTURE_MAX: Maximum value
2764  */
2765 enum chan_capture_status {
2766 	CAPTURE_IDLE = 0,
2767 	CAPTURE_BUSY,
2768 	CAPTURE_ACTIVE,
2769 	CAPTURE_NO_BUFFER,
2770 	CAPTURE_MAX,
2771 };
2772 
2773 /**
2774  * struct cdp_cfr_rcc_stats - CFR RCC debug statistics
2775  * @bb_captured_channel_cnt: No. of PPDUs for which MAC sent Freeze TLV to PHY
2776  * @bb_captured_timeout_cnt: No. of PPDUs for which CFR filter criteria matched
2777  * but MAC did not send Freeze TLV to PHY as time exceeded freeze tlv delay
2778  * count threshold
2779  * @rx_loc_info_valid_cnt: No. of PPDUs for which PHY could find a valid buffer
2780  * in ucode IPC ring
2781  * @chan_capture_status: capture status counters
2782  *	[0] - No. of PPDUs with capture status CAPTURE_IDLE
2783  *	[1] - No. of PPDUs with capture status CAPTURE_BUSY
2784  *	[2] - No. of PPDUs with capture status CAPTURE_ACTIVE
2785  *	[3] - No. of PPDUs with capture status CAPTURE_NO_BUFFER
2786  * @reason_cnt: capture reason counters
2787  *	[0] - No. PPDUs filtered due to freeze_reason_TM
2788  *	[1] - No. PPDUs filtered due to freeze_reason_FTM
2789  *	[2] - No. PPDUs filtered due to freeze_reason_ACK_resp_to_TM_FTM
2790  *	[3] - No. PPDUs filtered due to freeze_reason_TA_RA_TYPE_FILTER
2791  *	[4] - No. PPDUs filtered due to freeze_reason_NDPA_NDP
2792  *	[5] - No. PPDUs filtered due to freeze_reason_ALL_PACKET
2793  */
2794 struct cdp_cfr_rcc_stats {
2795 	uint64_t bb_captured_channel_cnt;
2796 	uint64_t bb_captured_timeout_cnt;
2797 	uint64_t rx_loc_info_valid_cnt;
2798 	uint64_t chan_capture_status[CAPTURE_MAX];
2799 	uint64_t reason_cnt[FREEZE_REASON_MAX];
2800 };
2801 #else
2802 struct cdp_cfr_rcc_stats {
2803 };
2804 #endif
2805 
2806 /**
2807  * struct cdp_per_cpu_packets - Per cpu packets
2808  * @num_cpus: Number of cpus
2809  * @pkts: packet count per core
2810  */
2811 struct cdp_per_cpu_packets {
2812 	uint8_t num_cpus;
2813 	uint64_t pkts[CDP_NR_CPUS][CDP_MAX_RX_DEST_RINGS];
2814 };
2815 
2816 /**
2817  * struct cdp_soc_stats - soc stats
2818  * @tx:
2819  * @tx.egress: Total packets transmitted
2820  * @tx.tx_invalid_peer: packets dropped on tx because of no peer
2821  * @tx.tx_hw_enq: Enqueues per tx hw ring
2822  * @tx.tx_hw_ring_full: descriptors in each tx hw ring
2823  * @tx.desc_in_use: Descriptors in use at soc
2824  * @tx.dropped_fw_removed: HW_release_reason == FW removed
2825  * @tx.invalid_release_source: tx completion release_src != HW or FW
2826  * @tx.invalid_tx_comp_desc: TX Desc from completion ring Desc is not valid
2827  * @tx.wifi_internal_error: tx completion wifi_internal_error
2828  * @tx.non_wifi_internal_err: tx completion non_wifi_internal_error
2829  * @tx.tx_comp_loop_pkt_limit_hit: TX Comp loop packet limit hit
2830  * @tx.hp_oos2: Head pointer Out of sync at the end of dp_tx_comp_handler
2831  * @tx.tx_comp_exception: tx desc freed as part of vdev detach
2832  * @rx:
2833  * @rx.ingress: Total rx packets count
2834  * @rx.err_ring_pkts: Total Packets in Rx Error ring
2835  * @rx.rx_frags: No of Fragments
2836  * @rx.rx_hw_reinject: No of reinjected packets
2837  * @rx.bar_frame: Number of bar frames received
2838  * @rx.rx_frag_err_len_error: Fragments dropped due to len errors in skb
2839  * @rx.rx_frag_err_no_peer: Fragments dropped due to no peer found
2840  * @rx.rx_frag_wait: No of incomplete fragments in waitlist
2841  * @rx.rx_frag_err: Fragments dropped due to errors
2842  * @rx.rx_frag_oor: Fragments received OOR causing sequence num mismatch
2843  * @rx.reap_loop_pkt_limit_hit: Reap loop packet limit hit
2844  * @rx.hp_oos2: Head pointer Out of sync at the end of dp_rx_process
2845  * @rx.near_full: Rx ring near full
2846  * @rx.msdu_scatter_wait_break: Break ring reaping as not all scattered msdu
2847  * received
2848  * @rx.rx_sw_route_drop: Number of frames routed from rx sw ring
2849  * @rx.rx_hw_route_drop: Number of frames routed from rx hw ring
2850  * @rx.rx_packets: packet count per core
2851  * @rx.err.rx_rejected: RX msdu rejected count on delivery to vdev stack_fn
2852  * @rx.err.raw_frm_drop: RX raw frame dropped count
2853  * @rx.err.phy_ring_access_fail: phy ring access Fail error count
2854  * @rx.err.phy_ring_access_full_fail: phy ring access full Fail error count
2855  * @rx.err.phy_rx_error: phy rx order ERR Count
2856  * @rx.err.phy_rx_dest_dup: phy rx order DEST Duplicate count
2857  * @rx.err.phy_wifi_rel_dup: phy wifi RELEASE Duplicate count
2858  * @rx.err.phy_rx_sw_err_dup: phy rx sw error Duplicate count
2859  * @rx.err.invalid_rbm: Invalid RBM error count
2860  * @rx.err.invalid_vdev: Invalid VDEV Error count
2861  * @rx.err.invalid_pdev: Invalid PDEV error count
2862  * @rx.err.pkt_delivered_no_peer: Pkts delivered to stack that no related peer
2863  * @rx.err.defrag_peer_uninit: Defrag peer uninit error count
2864  * @rx.err.invalid_sa_da_idx: Invalid sa_idx or da_idx
2865  * @rx.err.msdu_done_fail: MSDU DONE failures
2866  * @ex.err.rx_invalid_peer: Invalid PEER Error count
2867  * @rx.err.rx_invalid_peer_id: Invalid PEER ID count
2868  * @rx.err.rx_invalid_pkt_len: Invalid packet length count
2869  * @rx.err.rx_sw_error: RX sw error count
2870  * @rx.err.rx_desc_invalid_magic: RX DEST Desc Invalid Magic count
2871  * @rx.err.rx_hw_error: rx hw Error count
2872  * @rx.err.rx_hw_cmd_send_fail: Rx hw cmd send fail/requeue count
2873  * @rx.err.rx_hw_cmd_send_drain: Rx hw cmd send drain count
2874  * @rx.err.scatter_msdu: RX msdu drop count due to scatter
2875  * @rx.err.invalid_cookie: RX msdu drop count due to invalid cookie
2876  * @rx.err.stale_cookie: Count of stale cookie read in RX path
2877  * @rx.err.rx_2k_jump_delba_sent: Delba sent count due to RX 2k jump
2878  * @rx.err.rx_2k_jump_to_stack: RX 2k jump msdu indicated to stack count
2879  * @rx.err.rx_2k_jump_drop: RX 2k jump msdu dropped count
2880  * @rx.err.rx_hw_err_oor_drop: Rx HW OOR msdu drop count
2881  * @rx.err.rx_hw_err_oor_to_stack: Rx HW OOR msdu indicated to stack count
2882  * @rx.err.rx_hw_err_oor_sg_count: Rx HW OOR scattered msdu count
2883  * @rx.err.msdu_count_mismatch: Incorrect msdu count in MPDU desc info
2884  * @rx.err.invalid_link_cookie: Stale link desc cookie count
2885  * @rx.err.nbuf_sanity_fail: Nbuf sanity failure
2886  * @rx.err.dup_refill_link_desc: Duplicate link desc refilled
2887  * @rx.err.msdu_continuation_err: Incorrect msdu continuation bit in MSDU desc
2888  * @rx.err.ssn_update_count: Count of start sequence (ssn) updates
2889  * @rx.err.bar_handle_fail_count: Count of bar handling fail
2890  * @rx.err.intrabss_eapol_drop: EAPOL drop count in intrabss scenario
2891  * @rx.err.pn_in_dest_check_fail: PN check failed for 2K-jump or OOR error
2892  * @rx.err.msdu_len_err: MSDU len err count
2893  * @rx.err.rx_flush_count: Rx flush count
2894  * @ast:
2895  * @ast.added: ast entry added count
2896  * @ast.deleted: ast entry deleted count
2897  * @ast.aged_out: ast entry aged out count
2898  * @ast.map_err: ast entry mapping error count
2899  * @ast.ast_mismatch: ast entry mismatch count
2900  * @mec:
2901  * @mec.added: Mec added count
2902  * @mec.deleted: Mec deleted count
2903  */
2904 struct cdp_soc_stats {
2905 	struct {
2906 		struct cdp_pkt_info egress;
2907 		struct cdp_pkt_info tx_invalid_peer;
2908 		uint32_t tx_hw_enq[CDP_MAX_TX_DATA_RINGS];
2909 		uint32_t tx_hw_ring_full[CDP_MAX_TX_DATA_RINGS];
2910 		uint32_t desc_in_use;
2911 		uint32_t dropped_fw_removed;
2912 		uint32_t invalid_release_source;
2913 		uint32_t invalid_tx_comp_desc;
2914 		uint32_t wifi_internal_error[CDP_MAX_WIFI_INT_ERROR_REASONS];
2915 		uint32_t non_wifi_internal_err;
2916 		uint32_t tx_comp_loop_pkt_limit_hit;
2917 		uint32_t hp_oos2;
2918 		uint32_t tx_comp_exception;
2919 	} tx;
2920 
2921 	struct {
2922 		struct cdp_pkt_info ingress;
2923 		uint32_t err_ring_pkts;
2924 		uint32_t rx_frags;
2925 		uint32_t rx_hw_reinject;
2926 		uint32_t bar_frame;
2927 		uint32_t rx_frag_err_len_error;
2928 		uint32_t rx_frag_err_no_peer;
2929 		uint32_t rx_frag_wait;
2930 		uint32_t rx_frag_err;
2931 		uint32_t rx_frag_oor;
2932 		uint32_t reap_loop_pkt_limit_hit;
2933 		uint32_t hp_oos2;
2934 		uint32_t near_full;
2935 		uint32_t msdu_scatter_wait_break;
2936 		uint32_t rx_sw_route_drop;
2937 		uint32_t rx_hw_route_drop;
2938 		struct cdp_per_cpu_packets rx_packets;
2939 
2940 		struct {
2941 			uint32_t rx_rejected;
2942 			uint32_t rx_raw_frm_drop;
2943 			uint32_t phy_ring_access_fail;
2944 			uint32_t phy_ring_access_full_fail;
2945 			uint32_t phy_rx_hw_error[CDP_MAX_RX_DEST_RINGS];
2946 			uint32_t phy_rx_hw_dest_dup;
2947 			uint32_t phy_wifi_rel_dup;
2948 			uint32_t phy_rx_sw_err_dup;
2949 			uint32_t invalid_rbm;
2950 			uint32_t invalid_vdev;
2951 			uint32_t invalid_pdev;
2952 			uint32_t pkt_delivered_no_peer;
2953 			uint32_t defrag_peer_uninit;
2954 			uint32_t invalid_sa_da_idx;
2955 			uint32_t msdu_done_fail;
2956 			struct cdp_pkt_info rx_invalid_peer;
2957 			struct cdp_pkt_info rx_invalid_peer_id;
2958 			struct cdp_pkt_info rx_invalid_pkt_len;
2959 			uint32_t rx_sw_error[CDP_WIFI_ERR_MAX];
2960 			uint32_t rx_desc_invalid_magic;
2961 			uint32_t rx_hw_error[CDP_RX_ERR_MAX];
2962 			uint32_t rx_hw_cmd_send_fail;
2963 			uint32_t rx_hw_cmd_send_drain;
2964 			uint32_t scatter_msdu;
2965 			uint32_t invalid_cookie;
2966 			uint32_t stale_cookie;
2967 			uint32_t rx_2k_jump_delba_sent;
2968 			uint32_t rx_2k_jump_to_stack;
2969 			uint32_t rx_2k_jump_drop;
2970 			uint32_t rx_hw_err_msdu_buf_rcved;
2971 			uint32_t rx_hw_err_msdu_buf_invalid_cookie;
2972 			uint32_t rx_hw_err_oor_drop;
2973 			uint32_t rx_hw_err_raw_mpdu_drop;
2974 			uint32_t rx_hw_err_oor_to_stack;
2975 			uint32_t rx_hw_err_oor_sg_count;
2976 			uint32_t msdu_count_mismatch;
2977 			uint32_t invalid_link_cookie;
2978 			uint32_t nbuf_sanity_fail;
2979 			uint32_t dup_refill_link_desc;
2980 			uint32_t msdu_continuation_err;
2981 			uint32_t ssn_update_count;
2982 			uint32_t bar_handle_fail_count;
2983 			uint32_t intrabss_eapol_drop;
2984 			uint32_t pn_in_dest_check_fail;
2985 			uint32_t msdu_len_err;
2986 			uint32_t rx_flush_count;
2987 		} err;
2988 	} rx;
2989 
2990 	struct {
2991 		uint32_t added;
2992 		uint32_t deleted;
2993 		uint32_t aged_out;
2994 		uint32_t map_err;
2995 		uint32_t ast_mismatch;
2996 	} ast;
2997 
2998 	struct {
2999 		uint32_t added;
3000 		uint32_t deleted;
3001 	} mec;
3002 };
3003 
3004 #ifdef WLAN_CONFIG_TELEMETRY_AGENT
3005 /**
3006  * struct cdp_pdev_telemetry_stats- Structure to hold pdev telemetry stats
3007  * @tx_mpdu_failed: Tx mpdu failed
3008  * @tx_mpdu_total: Total tx mpdus
3009  * @link_airtime: pdev airtime usage per ac per sec
3010  */
3011 struct cdp_pdev_telemetry_stats {
3012 	uint32_t tx_mpdu_failed[WME_AC_MAX];
3013 	uint32_t tx_mpdu_total[WME_AC_MAX];
3014 	uint32_t link_airtime[WME_AC_MAX];
3015 };
3016 
3017 /**
3018  * struct cdp_peer_telemetry_stats- Structure to hold peer telemetry stats
3019  * @tx_mpdu_retried: Tx mpdus retried
3020  * @tx_mpdu_total: Total tx mpdus
3021  * @rx_mpdu_retried: Rx mpdus retried
3022  * @rx_mpdu_total: Total rx mpdus
3023  * @tx_airtime_consumption: tx airtime consumption of that peer
3024  * @rx_airtime_consumption: rx airtime consumption of that peer
3025  * @snr: peer average snr
3026  */
3027 struct cdp_peer_telemetry_stats {
3028 	uint32_t tx_mpdu_retried;
3029 	uint32_t tx_mpdu_total;
3030 	uint32_t rx_mpdu_retried;
3031 	uint32_t rx_mpdu_total;
3032 	uint16_t tx_airtime_consumption[WME_AC_MAX];
3033 	uint16_t rx_airtime_consumption[WME_AC_MAX];
3034 	uint8_t snr;
3035 };
3036 
3037 /**
3038  * struct cdp_peer_tx_dl_deter- Structure to hold peer DL deterministic stats
3039  * @avg_rate: Average TX rate
3040  * @mode_cnt: TX mode count
3041  */
3042 struct cdp_peer_tx_dl_deter {
3043 	uint64_t avg_rate;
3044 	uint32_t mode_cnt;
3045 };
3046 
3047 /**
3048  * struct cdp_peer_tx_ul_deter- Structure to hold peer UL deterministic stats
3049  * @avg_rate: Average TX rate
3050  * @mode_cnt: TX mode count
3051  * @trigger_success: Trigger frame received success
3052  * @trigger_fail: Trigger frame received fail
3053  */
3054 struct cdp_peer_tx_ul_deter {
3055 	uint64_t avg_rate;
3056 	uint32_t mode_cnt;
3057 	uint32_t trigger_success;
3058 	uint32_t trigger_fail;
3059 };
3060 
3061 /**
3062  * struct cdp_peer_rx_deter- Structure to hold peer rx deterministic stats
3063  * @avg_rate: Average RX rate
3064  * @mode_cnt: RX mode count
3065  */
3066 struct cdp_peer_rx_deter {
3067 	uint64_t avg_rate;
3068 	uint32_t mode_cnt;
3069 };
3070 
3071 /**
3072  * struct cdp_peer_deter_stats- Structure to hold peer deterministic stats
3073  * @dl_det: TX DL deterministic stats
3074  * @ul_det: TX UL deterministic stats
3075  * @rx_det: RX deterministic stats
3076  */
3077 struct cdp_peer_deter_stats {
3078 	struct cdp_peer_tx_dl_deter dl_det[MSDUQ_INDEX_MAX][TX_MODE_DL_MAX];
3079 	struct cdp_peer_tx_ul_deter ul_det[TX_MODE_UL_MAX];
3080 	struct cdp_peer_rx_deter rx_det;
3081 };
3082 
3083 /**
3084  * struct cdp_pdev_chan_util_stats- Structure to hold channel utilization stats
3085  * @ap_chan_util: Channel utilization
3086  * @ap_tx_util: TX utilization
3087  * @ap_rx_util: RX utilization
3088  */
3089 struct cdp_pdev_chan_util_stats {
3090 	uint8_t ap_chan_util;
3091 	uint8_t ap_tx_util;
3092 	uint8_t ap_rx_util;
3093 };
3094 
3095 /**
3096  * struct cdp_pdev_ul_trigger_status - Structure to hold UL trigger status
3097  * @trigger_success: Trigger success
3098  * @trigger_fail: Trigger fail
3099  */
3100 struct cdp_pdev_ul_trigger_status {
3101 	uint64_t trigger_success;
3102 	uint64_t trigger_fail;
3103 };
3104 
3105 /**
3106  * struct cdp_pdev_deter_stats - Structure to hold pdev deterministic stats
3107  * @dl_ofdma_usr: num_user counter for dl ofdma
3108  * @ul_ofdma_usr: num_user counter for ul ofdma
3109  * @dl_mimo_usr: num_user counter for dl mimo
3110  * @ul_mimo_usr: num_user counter for ul mimo
3111  * @dl_mode_cnt: DL tx mode counter
3112  * @ul_mode_cnt: UL tx mode counter
3113  * @rx_su_cnt: RX su counter
3114  * @ch_access_delay:
3115  * @ch_util: channel congestion stats
3116  * @ts: trigger status for ul
3117  */
3118 struct cdp_pdev_deter_stats {
3119 	uint64_t dl_ofdma_usr[CDP_MU_MAX_USERS];
3120 	uint64_t ul_ofdma_usr[CDP_MU_MAX_USERS];
3121 	uint64_t dl_mimo_usr[CDP_MU_MAX_MIMO_USERS];
3122 	uint64_t ul_mimo_usr[CDP_MU_MAX_MIMO_USERS];
3123 	uint64_t dl_mode_cnt[TX_MODE_DL_MAX];
3124 	uint64_t ul_mode_cnt[TX_MODE_UL_MAX];
3125 	uint64_t rx_su_cnt;
3126 	uint32_t ch_access_delay[WME_AC_MAX];
3127 	struct cdp_pdev_chan_util_stats ch_util;
3128 	struct cdp_pdev_ul_trigger_status ts[TX_MODE_UL_MAX];
3129 };
3130 #endif
3131 
3132 /**
3133  * struct cdp_pdev_stats - pdev stats
3134  * @dropped: dropped packet counters
3135  * @dropped.msdu_not_done: packets dropped because msdu done bit not set
3136  * @dropped.mec: Multicast Echo check
3137  * @dropped.mesh_filter: Mesh Filtered packets
3138  * @dropped.wifi_parse: rxdma errors due to wifi parse error
3139  * @dropped.mon_rx_drop: packets dropped on monitor vap
3140  * @dropped.mon_radiotap_update_err: not enough space to update radiotap
3141  * @replenish: replenish counters
3142  * @replenish.pkts: total packets replenished
3143  * @replenish.rxdma_err: rxdma errors for replenished
3144  * @replenish.nbuf_alloc_fail: nbuf alloc failed
3145  * @replenish.frag_alloc_fail: frag alloc failed
3146  * @replenish.map_err: Mapping failure
3147  * @replenish.x86_fail: x86 failures
3148  * @replenish.low_thresh_intrs: low threshold interrupts
3149  * @replenish.free_list: RX descriptors moving back to free list
3150  * @rx_raw_pkts: Rx Raw Packets
3151  * @mesh_mem_alloc: Mesh Rx Stats Alloc fail
3152  * @tso_desc_cnt: TSO descriptors
3153  * @sg_desc_cnt: SG Descriptors
3154  * @vlan_tag_stp_cnt: Vlan tagged Stp packets in wifi parse error
3155  * @err: Rx errors
3156  * @err.desc_alloc_fail: desc alloc failed errors
3157  * @err.desc_lt_alloc_fail:
3158  * @err.ip_csum_err: ip checksum errors
3159  * @err.tcp_udp_csum_err: tcp/udp checksum errors
3160  * @err.rxdma_error:
3161  * @err.fw_reported_rxdma_error:
3162  * @err.reo_error:
3163  * @buf_freelist: buffers added back in freelist
3164  * @tx_i: Tx Ingress stats
3165  * @rx_i: Rx Ingress stats
3166  * @tx:CDP Tx Stats
3167  * @rx: CDP Rx Stats
3168  * @tx_comp_histogram: Number of Tx completions per interrupt
3169  * @rx_ind_histogram:  Number of Rx ring descriptors reaped per interrupt
3170  * @ppdu_stats_counter: ppdu stats counter
3171  * @cdp_delayed_ba_not_recev: counter for delayed ba not received
3172  * @htt_tx_pdev_stats: htt pdev stats for tx
3173  * @htt_rx_pdev_stats: htt pdev stats for rx
3174  * @wdi_event:
3175  * @tid_stats:
3176  * @ul_ofdma: UL OFDMA stats
3177  * @ul_ofdma.data_rx_ru_size: UL ofdma data ru size counter array
3178  * @ul_ofdma.nondata_rx_ru_size: UL ofdma non data ru size counter array
3179  * @ul_ofdma.data_rx_ppdu: data rx ppdu counter
3180  * @ul_ofdma.data_users: data user counter array
3181  * @eap_drop_stats: EAPOL packet drop stats information
3182  * @eap_drop_stats.tx_desc_error: Total number EAPOL packets dropped due to TX
3183  *		   descriptor error
3184  * @eap_drop_stats.tx_hal_ring_access_err: Total EAPOL packets dropped due to
3185  *			     HAL ring access failure
3186  * @eap_drop_stats.tx_dma_map_err: EAPOL packets dropped due to error in DMA map
3187  * @eap_drop_stats.tx_hw_enqueue: EAPOL packets dropped by the host due to
3188  *                                failure in HW enqueue
3189  * @eap_drop_stats.tx_sw_enqueue: EAPOL packets dropped by the host due to
3190  *                                failure in SW enqueue
3191  * @tso_stats:
3192  * @rcc:
3193  * @tx_ppdu_proc: stats counter for tx ppdu processed
3194  * @ack_ba_comes_twice: stats counter for ack_ba_comes twice
3195  * @ppdu_drop: stats counter for ppdu_desc drop once threshold reached
3196  * @ppdu_wrap_drop: stats counter for ppdu desc drop on wrap around
3197  * @rx_buffer_pool:
3198  * @rx_buffer_pool.num_bufs_consumed:
3199  * @rx_buffer_pool.num_pool_bufs_replenish:
3200  * @rx_buffer_pool.num_bufs_alloc_success:
3201  * @rx_refill_buff_pool:
3202  * @rx_refill_buff_pool.num_bufs_refilled:
3203  * @rx_refill_buff_pool.num_bufs_allocated:
3204  * @peer_unauth_rx_pkt_drop: stats counter for drops due to unauthorized peer
3205  * @telemetry_stats: pdev telemetry stats
3206  * @deter_stats:
3207  * @invalid_msdu_cnt: Invalid MSDU count received counter
3208  */
3209 struct cdp_pdev_stats {
3210 	struct {
3211 		uint32_t msdu_not_done;
3212 		uint32_t mec;
3213 		uint32_t mesh_filter;
3214 		uint32_t wifi_parse;
3215 		/* Monitor mode related */
3216 		uint32_t mon_rx_drop;
3217 		uint32_t mon_radiotap_update_err;
3218 		uint32_t mon_ver_err;
3219 	} dropped;
3220 
3221 	struct {
3222 		struct cdp_pkt_info pkts;
3223 		uint32_t rxdma_err;
3224 		uint32_t nbuf_alloc_fail;
3225 		uint32_t frag_alloc_fail;
3226 		uint32_t map_err;
3227 		uint32_t x86_fail;
3228 		uint32_t low_thresh_intrs;
3229 		int32_t free_list;
3230 	} replenish;
3231 
3232 	uint32_t rx_raw_pkts;
3233 	uint32_t mesh_mem_alloc;
3234 	uint32_t tso_desc_cnt;
3235 	uint32_t sg_desc_cnt;
3236 	uint32_t vlan_tag_stp_cnt;
3237 
3238 	/* Rx errors */
3239 	struct {
3240 		uint32_t desc_alloc_fail;
3241 		uint32_t desc_lt_alloc_fail;
3242 		uint32_t ip_csum_err;
3243 		uint32_t tcp_udp_csum_err;
3244 		uint32_t rxdma_error;
3245 		uint32_t fw_reported_rxdma_error;
3246 		uint32_t reo_error;
3247 	} err;
3248 
3249 	uint32_t buf_freelist;
3250 	struct cdp_tx_ingress_stats tx_i;
3251 	struct cdp_rx_ingress_stats rx_i;
3252 	struct cdp_tx_stats tx;
3253 	struct cdp_rx_stats rx;
3254 	struct cdp_hist_tx_comp tx_comp_histogram;
3255 	struct cdp_hist_rx_ind rx_ind_histogram;
3256 	uint64_t ppdu_stats_counter[CDP_PPDU_STATS_MAX_TAG];
3257 	uint32_t cdp_delayed_ba_not_recev;
3258 
3259 	struct cdp_htt_tx_pdev_stats  htt_tx_pdev_stats;
3260 	struct cdp_htt_rx_pdev_stats  htt_rx_pdev_stats;
3261 
3262 	/* Received wdi messages from fw */
3263 	uint32_t wdi_event[CDP_WDI_NUM_EVENTS];
3264 	struct cdp_tid_stats tid_stats;
3265 
3266 	/* numbers of data/nondata per RU sizes */
3267 	struct {
3268 		uint32_t data_rx_ru_size[OFDMA_NUM_RU_SIZE];
3269 		uint32_t nondata_rx_ru_size[OFDMA_NUM_RU_SIZE];
3270 		uint32_t data_rx_ppdu;
3271 		uint32_t data_users[OFDMA_NUM_USERS];
3272 	} ul_ofdma;
3273 
3274 	struct {
3275 		uint8_t tx_desc_err;
3276 		uint8_t tx_hal_ring_access_err;
3277 		uint8_t tx_dma_map_err;
3278 		uint8_t tx_hw_enqueue;
3279 		uint8_t tx_sw_enqueue;
3280 	} eap_drop_stats;
3281 
3282 	struct cdp_tso_stats tso_stats;
3283 	struct cdp_cfr_rcc_stats rcc;
3284 
3285 	uint64_t tx_ppdu_proc;
3286 	uint64_t ack_ba_comes_twice;
3287 	uint64_t ppdu_drop;
3288 	uint64_t ppdu_wrap_drop;
3289 
3290 	struct {
3291 		uint64_t num_bufs_consumed;
3292 		uint64_t num_pool_bufs_replenish;
3293 		uint64_t num_bufs_alloc_success;
3294 	} rx_buffer_pool;
3295 
3296 	struct {
3297 		uint64_t num_bufs_refilled;
3298 		uint64_t num_bufs_allocated;
3299 	} rx_refill_buff_pool;
3300 
3301 	uint32_t peer_unauth_rx_pkt_drop;
3302 #ifdef WLAN_CONFIG_TELEMETRY_AGENT
3303 	struct cdp_pdev_telemetry_stats telemetry_stats;
3304 	struct cdp_pdev_deter_stats deter_stats;
3305 #endif
3306 	uint32_t invalid_msdu_cnt;
3307 };
3308 
3309 /**
3310  * struct cdp_peer_hmwds_ast_add_status - hmwds peer ast add status
3311  * @vdev_id: vdev id
3312  * @status: ast add status
3313  * @peer_mac: peer mac address
3314  * @ast_mac: ast node mac address
3315  */
3316 struct cdp_peer_hmwds_ast_add_status {
3317 	uint32_t vdev_id;
3318 	uint32_t status;
3319 	uint8_t  peer_mac[QDF_MAC_ADDR_SIZE];
3320 	uint8_t  ast_mac[QDF_MAC_ADDR_SIZE];
3321 };
3322 
3323 /**
3324  * enum cdp_soc_param_t - Enumeration of cdp soc parameters
3325  * @DP_SOC_PARAM_MSDU_EXCEPTION_DESC:
3326  * @DP_SOC_PARAM_CMEM_FSE_SUPPORT:
3327  * @DP_SOC_PARAM_MAX_AST_AGEOUT:
3328  * @DP_SOC_PARAM_EAPOL_OVER_CONTROL_PORT: For sending EAPOL's over control port
3329  * @DP_SOC_PARAM_MULTI_PEER_GRP_CMD_SUPPORT: For sending bulk AST delete
3330  * @DP_SOC_PARAM_RSSI_DBM_CONV_SUPPORT: To set the rssi dbm support bit
3331  * @DP_SOC_PARAM_UMAC_HW_RESET_SUPPORT: Whether target supports UMAC HW reset
3332  * @DP_SOC_PARAM_MULTI_RX_REORDER_SETUP_SUPPORT: Whether setting up a group of
3333  *						 TIDs at a time is supported
3334  * @DP_SOC_PARAM_MAX:
3335  */
3336 enum cdp_soc_param_t {
3337 	DP_SOC_PARAM_MSDU_EXCEPTION_DESC,
3338 	DP_SOC_PARAM_CMEM_FSE_SUPPORT,
3339 	DP_SOC_PARAM_MAX_AST_AGEOUT,
3340 	DP_SOC_PARAM_EAPOL_OVER_CONTROL_PORT,
3341 	DP_SOC_PARAM_MULTI_PEER_GRP_CMD_SUPPORT,
3342 	DP_SOC_PARAM_RSSI_DBM_CONV_SUPPORT,
3343 	DP_SOC_PARAM_UMAC_HW_RESET_SUPPORT,
3344 	DP_SOC_PARAM_MULTI_RX_REORDER_SETUP_SUPPORT,
3345 	DP_SOC_PARAM_MAX,
3346 };
3347 
3348 #ifdef QCA_ENH_V3_STATS_SUPPORT
3349 /*
3350  * Enumeration of PDEV Configuration parameter
3351  */
3352 enum _dp_param_t {
3353 	DP_PARAM_MSDU_TTL,
3354 	DP_PARAM_TOTAL_Q_SIZE_RANGE0,
3355 	DP_PARAM_TOTAL_Q_SIZE_RANGE1,
3356 	DP_PARAM_TOTAL_Q_SIZE_RANGE2,
3357 	DP_PARAM_TOTAL_Q_SIZE_RANGE3,
3358 	DP_PARAM_VIDEO_DELAY_STATS_FC,
3359 	DP_PARAM_QFLUSHINTERVAL,
3360 	DP_PARAM_TOTAL_Q_SIZE,
3361 	DP_PARAM_MIN_THRESHOLD,
3362 	DP_PARAM_MAX_Q_LIMIT,
3363 	DP_PARAM_MIN_Q_LIMIT,
3364 	DP_PARAM_CONG_CTRL_TIMER_INTV,
3365 	DP_PARAM_STATS_TIMER_INTV,
3366 	DP_PARAM_ROTTING_TIMER_INTV,
3367 	DP_PARAM_LATENCY_PROFILE,
3368 	DP_PARAM_HOSTQ_DUMP,
3369 	DP_PARAM_TIDQ_MAP,
3370 	DP_PARAM_VIDEO_STATS_FC,
3371 	DP_PARAM_STATS_FC,
3372 
3373 	DP_PARAM_MAX,
3374 };
3375 #endif
3376 /* Bitmasks for stats that can block */
3377 #define EXT_TXRX_FW_STATS		0x0001
3378 
3379 #define CDP_TX_CAP_HTT_MAX_FTYPE 19
3380 #define CDP_FC0_TYPE_SHIFT 2
3381 #define CDP_FC0_SUBTYPE_SHIFT 4
3382 #define CDP_FC0_TYPE_DATA 0x08
3383 #define CDP_FC0_SUBTYPE_MASK 0xf0
3384 
3385 #define CDP_TXCAP_MAX_TYPE \
3386 	((CDP_FC0_TYPE_DATA >> CDP_FC0_TYPE_SHIFT) + 1)
3387 #define CDP_TXCAP_MAX_SUBTYPE \
3388 	((CDP_FC0_SUBTYPE_MASK >> CDP_FC0_SUBTYPE_SHIFT) + 1)
3389 
3390 enum CDP_PEER_MSDU_DESC {
3391 	PEER_MSDU_SUCC,
3392 	PEER_MSDU_ENQ,
3393 	PEER_MSDU_DEQ,
3394 	PEER_MSDU_FLUSH,
3395 	PEER_MSDU_DROP,
3396 	PEER_MSDU_XRETRY,
3397 	PEER_MSDU_DESC_MAX,
3398 };
3399 
3400 enum CDP_PEER_MPDU_DESC {
3401 	PEER_MPDU_TRI,
3402 	PEER_MPDU_SUCC,
3403 	PEER_MPDU_RESTITCH,
3404 	PEER_MPDU_ARR,
3405 	PEER_MPDU_CLONE,
3406 	PEER_MPDU_TO_STACK,
3407 	PEER_MPDU_DESC_MAX,
3408 };
3409 
3410 /**
3411  * struct cdp_tid_q_len - Structure to hold consolidated queue length
3412  * @defer_msdu_len: Deferred MSDU queue length
3413  * @tasklet_msdu_len: MSDU complete queue length
3414  * @pending_q_len: MSDU pending queue length
3415  */
3416 struct cdp_tid_q_len {
3417 	uint64_t defer_msdu_len;
3418 	uint64_t tasklet_msdu_len;
3419 	uint64_t pending_q_len;
3420 };
3421 
3422 /**
3423  * struct cdp_peer_tx_capture_stats - Structure to hold peer tx capture stats
3424  * @len_stats: Per TID deferred, pending and completed msdu queue length
3425  * @mpdu: Mpdu success and restich count
3426  * @msdu: Msdu success and restich count
3427  */
3428 struct cdp_peer_tx_capture_stats {
3429 	struct cdp_tid_q_len len_stats[CDP_MAX_TIDS];
3430 #ifdef WLAN_TX_PKT_CAPTURE_ENH_DEBUG
3431 	uint32_t mpdu[PEER_MPDU_DESC_MAX];
3432 	uint32_t msdu[PEER_MSDU_DESC_MAX];
3433 #endif
3434 };
3435 
3436 /**
3437  * struct cdp_pdev_tx_capture_stats - Structure to hold pdev tx capture stats
3438  * @peer_mismatch: Peer mismatched
3439  * @last_rcv_ppdu: Last received PPDU stats in ms
3440  * @ppdu_stats_queue_depth: PPDU stats queue depth
3441  * @ppdu_stats_defer_queue_depth: PPDU stats deferred queue depth
3442  * @ppdu_dropped: PPDU dropped count
3443  * @pend_ppdu_dropped: Pending PPDU dropped count
3444  * @ppdu_flush_count: PPDU flush count
3445  * @msdu_threshold_drop: MSDU threshold drop count
3446  * @ctl_mgmt_q_len: Control management queue length
3447  * @retries_ctl_mgmt_q_len: Control management retries queue length
3448  * @htt_frame_type: HTT frame type
3449  * @len_stats: Consolidated msdu, ppdu and pending queue length
3450  */
3451 struct cdp_pdev_tx_capture_stats {
3452 	uint64_t peer_mismatch;
3453 	uint32_t last_rcv_ppdu;
3454 	uint32_t ppdu_stats_queue_depth;
3455 	uint32_t ppdu_stats_defer_queue_depth;
3456 	uint32_t ppdu_dropped;
3457 	uint32_t pend_ppdu_dropped;
3458 	uint32_t ppdu_flush_count;
3459 	uint32_t msdu_threshold_drop;
3460 	unsigned int ctl_mgmt_q_len[CDP_TXCAP_MAX_TYPE][CDP_TXCAP_MAX_SUBTYPE];
3461 	unsigned int retries_ctl_mgmt_q_len[CDP_TXCAP_MAX_TYPE]
3462 					   [CDP_TXCAP_MAX_SUBTYPE];
3463 	uint32_t htt_frame_type[CDP_TX_CAP_HTT_MAX_FTYPE];
3464 	struct cdp_tid_q_len len_stats;
3465 };
3466 #endif
3467