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