xref: /wlan-driver/qcacld-3.0/core/mac/inc/sir_api.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2012-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  * This file sir_api.h contains definitions exported by
22*5113495bSYour Name  * Sirius software.
23*5113495bSYour Name  * Author:        Chandra Modumudi
24*5113495bSYour Name  * Date:          04/16/2002
25*5113495bSYour Name  * History:-
26*5113495bSYour Name  * Date           Modified by    Modification Information
27*5113495bSYour Name  * --------------------------------------------------------------------
28*5113495bSYour Name  */
29*5113495bSYour Name 
30*5113495bSYour Name #ifndef __SIR_API_H
31*5113495bSYour Name #define __SIR_API_H
32*5113495bSYour Name 
33*5113495bSYour Name /* legacy definition */
34*5113495bSYour Name typedef void *tpAniSirGlobal;
35*5113495bSYour Name 
36*5113495bSYour Name struct mac_context;
37*5113495bSYour Name #include "qdf_types.h"
38*5113495bSYour Name #include "cds_regdomain.h"
39*5113495bSYour Name #include "sir_types.h"
40*5113495bSYour Name #include "sir_mac_prot_def.h"
41*5113495bSYour Name #include "ani_system_defs.h"
42*5113495bSYour Name #include "sir_params.h"
43*5113495bSYour Name #include "cds_regdomain.h"
44*5113495bSYour Name #include "wmi_unified.h"
45*5113495bSYour Name #include "wmi_unified_param.h"
46*5113495bSYour Name #include "ol_txrx_htt_api.h"
47*5113495bSYour Name #include "wlan_reg_services_api.h"
48*5113495bSYour Name #include <dot11f.h>
49*5113495bSYour Name #include "wlan_policy_mgr_api.h"
50*5113495bSYour Name #include "wlan_tdls_public_structs.h"
51*5113495bSYour Name #include "qca_vendor.h"
52*5113495bSYour Name #include "wlan_cp_stats_mc_defs.h"
53*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
54*5113495bSYour Name #include "wlan_mlo_mgr_public_structs.h"
55*5113495bSYour Name #endif
56*5113495bSYour Name 
57*5113495bSYour Name #define OFFSET_OF(structType, fldName)   (&((structType *)0)->fldName)
58*5113495bSYour Name #define WLAN_DOT11_BASIC_RATE_MASK (0x80)
59*5113495bSYour Name #define BITS_ON(_Field, _Bitmask)  ((_Field) |=  (_Bitmask))
60*5113495bSYour Name #define BITS_OFF(_Field, _Bitmask) ((_Field) &= ~(_Bitmask))
61*5113495bSYour Name 
62*5113495bSYour Name /* / Max supported channel list */
63*5113495bSYour Name #define SIR_MAX_SUPPORTED_CHANNEL_LIST      96
64*5113495bSYour Name 
65*5113495bSYour Name #define SIR_MDIE_SIZE               3   /* MD ID(2 bytes), Capability(1 byte) */
66*5113495bSYour Name 
67*5113495bSYour Name #define SIR_MAX_ELEMENT_ID         255
68*5113495bSYour Name 
69*5113495bSYour Name #define SIR_BCN_REPORT_MAX_BSS_DESC       8
70*5113495bSYour Name 
71*5113495bSYour Name #define SIR_NUM_11B_RATES 4     /* 1,2,5.5,11 */
72*5113495bSYour Name #define SIR_NUM_11A_RATES 8     /* 6,9,12,18,24,36,48,54 */
73*5113495bSYour Name 
74*5113495bSYour Name typedef uint8_t tSirIpv4Addr[QDF_IPV4_ADDR_SIZE];
75*5113495bSYour Name 
76*5113495bSYour Name #define SIR_VERSION_STRING_LEN 1024
77*5113495bSYour Name typedef uint8_t tSirVersionString[SIR_VERSION_STRING_LEN];
78*5113495bSYour Name 
79*5113495bSYour Name /* Periodic Tx pattern offload feature */
80*5113495bSYour Name #define PERIODIC_TX_PTRN_MAX_SIZE 1536
81*5113495bSYour Name #ifndef MAXNUM_PERIODIC_TX_PTRNS
82*5113495bSYour Name #define MAXNUM_PERIODIC_TX_PTRNS 6
83*5113495bSYour Name #endif
84*5113495bSYour Name 
85*5113495bSYour Name /* FW response timeout values in milli seconds */
86*5113495bSYour Name #define SIR_PEER_ASSOC_TIMEOUT           (4000) /* 4 seconds */
87*5113495bSYour Name 
88*5113495bSYour Name #ifdef FEATURE_RUNTIME_PM
89*5113495bSYour Name /* Add extra PMO_RESUME_TIMEOUT for runtime PM resume timeout */
90*5113495bSYour Name #define SIR_PEER_CREATE_RESPONSE_TIMEOUT (4000 + PMO_RESUME_TIMEOUT)
91*5113495bSYour Name #define SIR_DELETE_STA_TIMEOUT           (4000 + PMO_RESUME_TIMEOUT)
92*5113495bSYour Name #define SIR_VDEV_PLCY_MGR_TIMEOUT        (4000 + PMO_RESUME_TIMEOUT)
93*5113495bSYour Name #else
94*5113495bSYour Name #define SIR_PEER_CREATE_RESPONSE_TIMEOUT (4000)
95*5113495bSYour Name #define SIR_DELETE_STA_TIMEOUT           (4000) /* 4 seconds */
96*5113495bSYour Name #define SIR_VDEV_PLCY_MGR_TIMEOUT        (4000)
97*5113495bSYour Name #endif
98*5113495bSYour Name 
99*5113495bSYour Name #define MAX_POWER_DBG_ARGS_SUPPORTED 8
100*5113495bSYour Name #define QOS_MAP_MAX_EX  21
101*5113495bSYour Name #define QOS_MAP_RANGE_NUM 8
102*5113495bSYour Name #define QOS_MAP_LEN_MIN (QOS_MAP_RANGE_NUM * 2)
103*5113495bSYour Name #define QOS_MAP_LEN_MAX \
104*5113495bSYour Name 	(QOS_MAP_LEN_MIN + 2 * QOS_MAP_MAX_EX)
105*5113495bSYour Name #define NUM_CHAINS_MAX  2
106*5113495bSYour Name 
107*5113495bSYour Name /* Maximum number of realms present in fils indication element */
108*5113495bSYour Name #define SIR_MAX_REALM_COUNT 7
109*5113495bSYour Name /* Realm length */
110*5113495bSYour Name #define SIR_REALM_LEN 2
111*5113495bSYour Name /* Cache ID length */
112*5113495bSYour Name #define CACHE_ID_LEN 2
113*5113495bSYour Name 
114*5113495bSYour Name /* Maximum peer station number query one time */
115*5113495bSYour Name #define MAX_PEER_STA 12
116*5113495bSYour Name 
117*5113495bSYour Name /* Maximum number of peers for SAP */
118*5113495bSYour Name #ifndef SIR_SAP_MAX_NUM_PEERS
119*5113495bSYour Name #define SIR_SAP_MAX_NUM_PEERS 32
120*5113495bSYour Name #endif
121*5113495bSYour Name 
122*5113495bSYour Name #define SIR_KEK_KEY_LEN 16
123*5113495bSYour Name #define SIR_KEK_KEY_LEN_FILS 64
124*5113495bSYour Name 
125*5113495bSYour Name #define SIR_FILS_HLP_OUI_TYPE  "\x5"
126*5113495bSYour Name #define SIR_FILS_HLP_OUI_LEN   1
127*5113495bSYour Name #define SIR_FILS_HLP_IE_LEN    2048
128*5113495bSYour Name 
129*5113495bSYour Name #define SIR_REPLAY_CTR_LEN 8
130*5113495bSYour Name #ifdef WLAN_FEATURE_ROAM_OFFLOAD
131*5113495bSYour Name #define SIR_UAPSD_BITOFFSET_ACVO     0
132*5113495bSYour Name #define SIR_UAPSD_BITOFFSET_ACVI     1
133*5113495bSYour Name #define SIR_UAPSD_BITOFFSET_ACBK     2
134*5113495bSYour Name #define SIR_UAPSD_BITOFFSET_ACBE     3
135*5113495bSYour Name 
136*5113495bSYour Name #define SIR_UAPSD_FLAG_ACVO     (1 << SIR_UAPSD_BITOFFSET_ACVO)
137*5113495bSYour Name #define SIR_UAPSD_FLAG_ACVI     (1 << SIR_UAPSD_BITOFFSET_ACVI)
138*5113495bSYour Name #define SIR_UAPSD_FLAG_ACBK     (1 << SIR_UAPSD_BITOFFSET_ACBK)
139*5113495bSYour Name #define SIR_UAPSD_FLAG_ACBE     (1 << SIR_UAPSD_BITOFFSET_ACBE)
140*5113495bSYour Name #define SIR_UAPSD_GET(ac, mask)      (((mask) & (SIR_UAPSD_FLAG_ ## ac)) >> SIR_UAPSD_BITOFFSET_ ## ac)
141*5113495bSYour Name 
142*5113495bSYour Name #endif
143*5113495bSYour Name 
144*5113495bSYour Name /* Maximum management packet data unit length */
145*5113495bSYour Name #define MAX_MGMT_MPDU_LEN 2304
146*5113495bSYour Name 
147*5113495bSYour Name struct scheduler_msg;
148*5113495bSYour Name 
149*5113495bSYour Name /**
150*5113495bSYour Name  * enum sir_roam_op_code - Operation to be done by the callback.
151*5113495bSYour Name  * @SIR_ROAM_SYNCH_PROPAGATION: Propagate the new BSS info after roaming.
152*5113495bSYour Name  * @SIR_ROAMING_DEREGISTER_STA: Deregister the old STA after roaming.
153*5113495bSYour Name  * @SIR_ROAMING_START: Firmware started roaming operation
154*5113495bSYour Name  * @SIR_ROAMING_ABORT: Firmware aborted roaming operation, still connected.
155*5113495bSYour Name  * @SIR_ROAM_SYNCH_COMPLETE: Roam sync propagation is complete.
156*5113495bSYour Name  * @SIR_ROAMING_INVOKE_FAIL: Firmware roaming failed.
157*5113495bSYour Name  * @SIR_ROAMING_DEAUTH: Firmware indicates deauth.
158*5113495bSYour Name  */
159*5113495bSYour Name enum sir_roam_op_code {
160*5113495bSYour Name 	SIR_ROAM_SYNCH_PROPAGATION = 1,
161*5113495bSYour Name 	SIR_ROAMING_DEREGISTER_STA,
162*5113495bSYour Name 	SIR_ROAMING_START,
163*5113495bSYour Name 	SIR_ROAMING_ABORT,
164*5113495bSYour Name 	SIR_ROAM_SYNCH_COMPLETE,
165*5113495bSYour Name 	SIR_ROAM_SYNCH_NAPI_OFF,
166*5113495bSYour Name 	SIR_ROAMING_INVOKE_FAIL,
167*5113495bSYour Name 	SIR_ROAMING_DEAUTH,
168*5113495bSYour Name };
169*5113495bSYour Name 
170*5113495bSYour Name /**
171*5113495bSYour Name  * enum ps_state - State of the power save
172*5113495bSYour Name  * @FULL_POWER_MODE: for Full power mode
173*5113495bSYour Name  * @LEGACY_POWER_SAVE_MODE: For Legacy Power Save mode
174*5113495bSYour Name  * @UAPSD_MODE: for UAPSD power save
175*5113495bSYour Name  */
176*5113495bSYour Name enum ps_state {
177*5113495bSYour Name 	FULL_POWER_MODE,
178*5113495bSYour Name 	LEGACY_POWER_SAVE_MODE,
179*5113495bSYour Name 	UAPSD_MODE
180*5113495bSYour Name };
181*5113495bSYour Name 
182*5113495bSYour Name /**
183*5113495bSYour Name  * \var g_phy_rates_suppt
184*5113495bSYour Name  *
185*5113495bSYour Name  * \brief Rate support lookup table
186*5113495bSYour Name  *
187*5113495bSYour Name  *
188*5113495bSYour Name  * This is a  lookup table indexing rates &  configuration parameters to
189*5113495bSYour Name  * support.  Given a rate (in  unites of 0.5Mpbs) & three bools (MIMO
190*5113495bSYour Name  * Enabled, Channel  Bonding Enabled, & Concatenation  Enabled), one can
191*5113495bSYour Name  * determine  whether  the given  rate  is  supported  by computing  two
192*5113495bSYour Name  * indices.  The  first maps  the rate to  table row as  indicated below
193*5113495bSYour Name  * (i.e. eHddSuppRate_6Mbps maps to  row zero, eHddSuppRate_9Mbps to row
194*5113495bSYour Name  * 1, and so on).  Index two can be computed like so:
195*5113495bSYour Name  *
196*5113495bSYour Name  * \code
197*5113495bSYour Name  *  idx2 = ( fEsf  ? 0x4 : 0x0 ) |
198*5113495bSYour Name  *         ( fCb   ? 0x2 : 0x0 ) |
199*5113495bSYour Name  *         ( fMimo ? 0x1 : 0x0 );
200*5113495bSYour Name  * \endcode
201*5113495bSYour Name  *
202*5113495bSYour Name  *
203*5113495bSYour Name  * Given that:
204*5113495bSYour Name  *
205*5113495bSYour Name  *  \code
206*5113495bSYour Name  *  fSupported = g_phy_rates_suppt[idx1][idx2];
207*5113495bSYour Name  *  \endcode
208*5113495bSYour Name  *
209*5113495bSYour Name  *
210*5113495bSYour Name  * This table is based on  the document "PHY Supported Rates.doc".  This
211*5113495bSYour Name  * table is  permissive in that a  rate is reflected  as being supported
212*5113495bSYour Name  * even  when turning  off an  enabled feature  would be  required.  For
213*5113495bSYour Name  * instance, "PHY Supported Rates"  lists 42Mpbs as unsupported when CB,
214*5113495bSYour Name  * ESF, &  MIMO are all  on.  However,  if we turn  off either of  CB or
215*5113495bSYour Name  * MIMO, it then becomes supported.   Therefore, we mark it as supported
216*5113495bSYour Name  * even in index 7 of this table.
217*5113495bSYour Name  *
218*5113495bSYour Name  *
219*5113495bSYour Name  */
220*5113495bSYour Name 
221*5113495bSYour Name static const bool g_phy_rates_suppt[24][8] = {
222*5113495bSYour Name 
223*5113495bSYour Name 	/* SSF   SSF    SSF    SSF    ESF    ESF    ESF    ESF */
224*5113495bSYour Name 	/* SIMO  MIMO   SIMO   MIMO   SIMO   MIMO   SIMO   MIMO */
225*5113495bSYour Name 	/* No CB No CB  CB     CB     No CB  No CB  CB     CB */
226*5113495bSYour Name 	{true, true, true, true, true, true, true, true},       /* 6Mbps */
227*5113495bSYour Name 	{true, true, true, true, true, true, true, true},       /* 9Mbps */
228*5113495bSYour Name 	{true, true, true, true, true, true, true, true},       /* 12Mbps */
229*5113495bSYour Name 	{true, true, true, true, true, true, true, true},       /* 18Mbps */
230*5113495bSYour Name 	{false, false, true, true, false, false, true, true},   /* 20Mbps */
231*5113495bSYour Name 	{true, true, true, true, true, true, true, true},       /* 24Mbps */
232*5113495bSYour Name 	{true, true, true, true, true, true, true, true},       /* 36Mbps */
233*5113495bSYour Name 	{false, false, true, true, false, true, true, true},    /* 40Mbps */
234*5113495bSYour Name 	{false, false, true, true, false, true, true, true},    /* 42Mbps */
235*5113495bSYour Name 	{true, true, true, true, true, true, true, true},       /* 48Mbps */
236*5113495bSYour Name 	{true, true, true, true, true, true, true, true},       /* 54Mbps */
237*5113495bSYour Name 	{false, true, true, true, false, true, true, true},     /* 72Mbps */
238*5113495bSYour Name 	{false, false, true, true, false, true, true, true},    /* 80Mbps */
239*5113495bSYour Name 	{false, false, true, true, false, true, true, true},    /* 84Mbps */
240*5113495bSYour Name 	{false, true, true, true, false, true, true, true},     /* 96Mbps */
241*5113495bSYour Name 	{false, true, true, true, false, true, true, true},     /* 108Mbps */
242*5113495bSYour Name 	{false, false, true, true, false, true, true, true},    /* 120Mbps */
243*5113495bSYour Name 	{false, false, true, true, false, true, true, true},    /* 126Mbps */
244*5113495bSYour Name 	{false, false, false, true, false, false, false, true}, /* 144Mbps */
245*5113495bSYour Name 	{false, false, false, true, false, false, false, true}, /* 160Mbps */
246*5113495bSYour Name 	{false, false, false, true, false, false, false, true}, /* 168Mbps */
247*5113495bSYour Name 	{false, false, false, true, false, false, false, true}, /* 192Mbps */
248*5113495bSYour Name 	{false, false, false, true, false, false, false, true}, /* 216Mbps */
249*5113495bSYour Name 	{false, false, false, true, false, false, false, true}, /* 240Mbps */
250*5113495bSYour Name };
251*5113495bSYour Name 
252*5113495bSYour Name typedef enum {
253*5113495bSYour Name 	/* 11b rates */
254*5113495bSYour Name 	SUPP_RATE_1_MBPS   =   1 * 2,
255*5113495bSYour Name 	SUPP_RATE_2_MBPS   =   2 * 2,
256*5113495bSYour Name 	SUPP_RATE_5_MBPS =     11,
257*5113495bSYour Name 	SUPP_RATE_11_MBPS  =   11 * 2,
258*5113495bSYour Name 
259*5113495bSYour Name 	/* 11a / 11g rates */
260*5113495bSYour Name 	SUPP_RATE_6_MBPS   =   6 * 2,
261*5113495bSYour Name 	SUPP_RATE_9_MBPS   =   9 * 2,
262*5113495bSYour Name 	SUPP_RATE_12_MBPS  =   12 * 2,
263*5113495bSYour Name 	SUPP_RATE_18_MBPS  =   18 * 2,
264*5113495bSYour Name 	SUPP_RATE_24_MBPS  =   24 * 2,
265*5113495bSYour Name 	SUPP_RATE_36_MBPS  =   36 * 2,
266*5113495bSYour Name 	SUPP_RATE_48_MBPS  =   48 * 2,
267*5113495bSYour Name 	SUPP_RATE_54_MBPS  =   54 * 2,
268*5113495bSYour Name 
269*5113495bSYour Name 	/* Airgo prop. rates */
270*5113495bSYour Name 	SUPP_RATE_20_MBPS   =  20 * 2,
271*5113495bSYour Name 	SUPP_RATE_40_MBPS   =  40 * 2,
272*5113495bSYour Name 	SUPP_RATE_42_MBPS   =  42 * 2,
273*5113495bSYour Name 	SUPP_RATE_72_MBPS   =  72 * 2,
274*5113495bSYour Name 	SUPP_RATE_80_MBPS   =  80 * 2,
275*5113495bSYour Name 	SUPP_RATE_84_MBPS   =  84 * 2,
276*5113495bSYour Name 	SUPP_RATE_96_MBPS   =  96 * 2,
277*5113495bSYour Name 	SUPP_RATE_108_MBPS  =  108 * 2,
278*5113495bSYour Name 	SUPP_RATE_120_MBPS  =  120 * 2,
279*5113495bSYour Name 	SUPP_RATE_126_MBPS  =  126 * 2,
280*5113495bSYour Name 	SUPP_RATE_144_MBPS  =  144 * 2,
281*5113495bSYour Name 	SUPP_RATE_160_MBPS  =  160 * 2,
282*5113495bSYour Name 	SUPP_RATE_168_MBPS  =  168 * 2,
283*5113495bSYour Name 	SUPP_RATE_192_MBPS  =  192 * 2,
284*5113495bSYour Name 	SUPP_RATE_216_MBPS  =  216 * 2,
285*5113495bSYour Name 	SUPP_RATE_240_MBPS  =  240 * 2
286*5113495bSYour Name } eCsrSupportedRates;
287*5113495bSYour Name 
288*5113495bSYour Name /**
289*5113495bSYour Name  * struct ps_params - maintain power save state and USAPD params
290*5113495bSYour Name  * @mac_ctx: mac_ctx
291*5113495bSYour Name  * @session_id: Session Id.
292*5113495bSYour Name  * @ps_state : State of the power save
293*5113495bSYour Name  * @uapsd_per_ac_trigger_enable_mask: dynamic UPASD mask setting
294*5113495bSYour Name  *		derived from AddTS Rsp and DelTS frame.
295*5113495bSYour Name  *		If a particular AC bit is set, it means AC is trigger  enabled.
296*5113495bSYour Name  * @uapsd_per_ac_delivery_enable_mask: dynamic UPASD mask setting
297*5113495bSYour Name  *		derived from AddTS Rsp and DelTs frame.
298*5113495bSYour Name  *		If a particular AC bit is set, it means AC is delivery enabled.
299*5113495bSYour Name  * @ac_admit_mask: used for AC downgrade. This is a dynamic mask
300*5113495bSYour Name  *		setting which keep tracks of ACs being admitted.
301*5113495bSYour Name  *		If bit is set to 0: That particular AC is not admitted
302*5113495bSYour Name  *		If bit is set to 1: That particular AC is admitted
303*5113495bSYour Name  * @uapsd_per_ac_bit_mask: This is a static UAPSD mask setting
304*5113495bSYour Name  *		derived from SME_JOIN_REQ and SME_REASSOC_REQ.
305*5113495bSYour Name  *		If a particular AC bit is set, it means the AC is both
306*5113495bSYour Name  *		trigger enabled and delivery enabled.
307*5113495bSYour Name  * @auto_ps_enable_timer: Upon expiration of this timer	Power Save Offload
308*5113495bSYour Name  *		module will try to enable sta mode ps
309*5113495bSYour Name  */
310*5113495bSYour Name 
311*5113495bSYour Name struct ps_params {
312*5113495bSYour Name 	void *mac_ctx;
313*5113495bSYour Name 	uint32_t     session_id;
314*5113495bSYour Name 	enum    ps_state ps_state;
315*5113495bSYour Name 	uint8_t uapsd_per_ac_trigger_enable_mask;
316*5113495bSYour Name 	uint8_t uapsd_per_ac_delivery_enable_mask;
317*5113495bSYour Name 	uint8_t ac_admit_mask[SIR_MAC_DIRECTION_DIRECT];
318*5113495bSYour Name 	uint8_t uapsd_per_ac_bit_mask;
319*5113495bSYour Name 	qdf_mc_timer_t auto_ps_enable_timer;
320*5113495bSYour Name };
321*5113495bSYour Name 
322*5113495bSYour Name /* Type declarations used by Firmware and Host software */
323*5113495bSYour Name 
324*5113495bSYour Name /* Scan type enum used in scan request */
325*5113495bSYour Name typedef enum eSirScanType {
326*5113495bSYour Name 	eSIR_PASSIVE_SCAN,
327*5113495bSYour Name 	eSIR_ACTIVE_SCAN,
328*5113495bSYour Name 	eSIR_BEACON_TABLE,
329*5113495bSYour Name } tSirScanType;
330*5113495bSYour Name 
331*5113495bSYour Name /**
332*5113495bSYour Name  * struct roam_scan_ch_resp - roam scan chan list response to userspace
333*5113495bSYour Name  * @vdev_id: vdev id
334*5113495bSYour Name  * @num_channels: number of roam scan channels
335*5113495bSYour Name  * @command_resp: command response or async event
336*5113495bSYour Name  * @chan_list: list of roam scan channels
337*5113495bSYour Name  */
338*5113495bSYour Name struct roam_scan_ch_resp {
339*5113495bSYour Name 	uint16_t vdev_id;
340*5113495bSYour Name 	uint16_t num_channels;
341*5113495bSYour Name 	uint32_t command_resp;
342*5113495bSYour Name 	uint32_t *chan_list;
343*5113495bSYour Name };
344*5113495bSYour Name 
345*5113495bSYour Name /**
346*5113495bSYour Name  * struct wlan_beacon_report - Beacon info to be send to userspace
347*5113495bSYour Name  * @vdev_id: vdev id
348*5113495bSYour Name  * @ssid: ssid present in beacon
349*5113495bSYour Name  * @bssid: bssid present in beacon
350*5113495bSYour Name  * @frequency: channel frequency in MHz
351*5113495bSYour Name  * @beacon_interval: Interval between two consecutive beacons
352*5113495bSYour Name  * @time_stamp: time stamp at which beacon received from AP
353*5113495bSYour Name  * @boot_time: Boot time when beacon received
354*5113495bSYour Name  */
355*5113495bSYour Name struct wlan_beacon_report {
356*5113495bSYour Name 	uint8_t vdev_id;
357*5113495bSYour Name 	struct wlan_ssid ssid;
358*5113495bSYour Name 	struct qdf_mac_addr bssid;
359*5113495bSYour Name 	uint32_t frequency;
360*5113495bSYour Name 	uint16_t beacon_interval;
361*5113495bSYour Name 	qdf_time_t time_stamp;
362*5113495bSYour Name 	qdf_time_t boot_time;
363*5113495bSYour Name };
364*5113495bSYour Name 
365*5113495bSYour Name 
366*5113495bSYour Name /* / Result codes Firmware return to Host SW */
367*5113495bSYour Name typedef enum eSirResultCodes {
368*5113495bSYour Name 	eSIR_SME_SUCCESS,
369*5113495bSYour Name 	eSIR_LOGE_EXCEPTION,
370*5113495bSYour Name 	eSIR_SME_INVALID_PARAMETERS = 500,
371*5113495bSYour Name 	eSIR_SME_UNEXPECTED_REQ_RESULT_CODE,
372*5113495bSYour Name 	eSIR_SME_RESOURCES_UNAVAILABLE,
373*5113495bSYour Name 	/* Unable to find a BssDescription */
374*5113495bSYour Name 	eSIR_SME_SCAN_FAILED,
375*5113495bSYour Name 	/* matching requested scan criteria */
376*5113495bSYour Name 	eSIR_SME_BSS_ALREADY_STARTED_OR_JOINED,
377*5113495bSYour Name 	eSIR_SME_LOST_LINK_WITH_PEER_RESULT_CODE,
378*5113495bSYour Name 	eSIR_SME_REFUSED,
379*5113495bSYour Name 	eSIR_SME_JOIN_DEAUTH_FROM_AP_DURING_ADD_STA,
380*5113495bSYour Name 	eSIR_SME_JOIN_TIMEOUT_RESULT_CODE,
381*5113495bSYour Name 	eSIR_SME_AUTH_TIMEOUT_RESULT_CODE,
382*5113495bSYour Name 	eSIR_SME_ASSOC_TIMEOUT_RESULT_CODE,
383*5113495bSYour Name 	eSIR_SME_REASSOC_TIMEOUT_RESULT_CODE,
384*5113495bSYour Name 	eSIR_SME_MAX_NUM_OF_PRE_AUTH_REACHED,
385*5113495bSYour Name 	eSIR_SME_AUTH_REFUSED,
386*5113495bSYour Name 	eSIR_SME_INVALID_WEP_DEFAULT_KEY,
387*5113495bSYour Name 	eSIR_SME_NO_KEY_MAPPING_KEY_FOR_PEER,
388*5113495bSYour Name 	eSIR_SME_ASSOC_REFUSED,
389*5113495bSYour Name 	eSIR_SME_REASSOC_REFUSED,
390*5113495bSYour Name 	/* Recvd Deauth while join/pre-auth */
391*5113495bSYour Name 	eSIR_SME_DEAUTH_WHILE_JOIN,
392*5113495bSYour Name 	eSIR_SME_STA_NOT_AUTHENTICATED,
393*5113495bSYour Name 	eSIR_SME_STA_NOT_ASSOCIATED,
394*5113495bSYour Name 	eSIR_SME_ALREADY_JOINED_A_BSS,
395*5113495bSYour Name 	/* Given in SME_SCAN_RSP msg */
396*5113495bSYour Name 	eSIR_SME_MORE_SCAN_RESULTS_FOLLOW,
397*5113495bSYour Name 	/* that more SME_SCAN_RSP */
398*5113495bSYour Name 	/* messages are following. */
399*5113495bSYour Name 	/* SME_SCAN_RSP message with */
400*5113495bSYour Name 	/* eSIR_SME_SUCCESS status */
401*5113495bSYour Name 	/* code is the last one. */
402*5113495bSYour Name 	/* Sent in SME_JOIN/REASSOC_RSP */
403*5113495bSYour Name 	eSIR_SME_INVALID_ASSOC_RSP_RXED,
404*5113495bSYour Name 	/* messages upon receiving */
405*5113495bSYour Name 	/* invalid Re/Assoc Rsp frame. */
406*5113495bSYour Name 	/* STOP BSS triggered by MIC failures: MAC software to
407*5113495bSYour Name 	 * disassoc all stations
408*5113495bSYour Name 	 */
409*5113495bSYour Name 	eSIR_SME_MIC_COUNTER_MEASURES,
410*5113495bSYour Name 	/* with MIC_FAILURE reason code and perform the stop bss operation */
411*5113495bSYour Name 	/* didn't get rsp from peer within timeout interval */
412*5113495bSYour Name 	eSIR_SME_ADDTS_RSP_TIMEOUT,
413*5113495bSYour Name 	/* didn't get success rsp from HAL */
414*5113495bSYour Name 	eSIR_SME_ADDTS_RSP_FAILED,
415*5113495bSYour Name 	/* failed to send ch switch act frm */
416*5113495bSYour Name 	eSIR_SME_CHANNEL_SWITCH_FAIL,
417*5113495bSYour Name 	eSIR_SME_INVALID_STATE,
418*5113495bSYour Name 	/* SIR_HAL_SIR_HAL_INIT_SCAN_RSP returned failed status */
419*5113495bSYour Name 	eSIR_SME_HAL_SCAN_INIT_FAILED,
420*5113495bSYour Name 	/* SIR_HAL_END_SCAN_RSP returned failed status */
421*5113495bSYour Name 	eSIR_SME_HAL_SCAN_END_FAILED,
422*5113495bSYour Name 	/* SIR_HAL_FINISH_SCAN_RSP returned failed status */
423*5113495bSYour Name 	eSIR_SME_HAL_SCAN_FINISH_FAILED,
424*5113495bSYour Name 	/* Failed to send a message to HAL */
425*5113495bSYour Name 	eSIR_SME_HAL_SEND_MESSAGE_FAIL,
426*5113495bSYour Name 	/* Failed to stop the bss */
427*5113495bSYour Name 	eSIR_SME_STOP_BSS_FAILURE,
428*5113495bSYour Name 	eSIR_SME_WOWL_ENTER_REQ_FAILED,
429*5113495bSYour Name 	eSIR_SME_WOWL_EXIT_REQ_FAILED,
430*5113495bSYour Name 	eSIR_SME_FT_REASSOC_TIMEOUT_FAILURE,
431*5113495bSYour Name 	eSIR_SME_FT_REASSOC_FAILURE,
432*5113495bSYour Name 	eSIR_SME_SEND_ACTION_FAIL,
433*5113495bSYour Name 	eSIR_SME_DEAUTH_STATUS,
434*5113495bSYour Name 	eSIR_PNO_SCAN_SUCCESS,
435*5113495bSYour Name 	eSIR_SME_INVALID_SESSION,
436*5113495bSYour Name 	eSIR_DONOT_USE_RESULT_CODE = SIR_MAX_ENUM_SIZE
437*5113495bSYour Name } tSirResultCodes;
438*5113495bSYour Name 
439*5113495bSYour Name #ifdef WLAN_FEATURE_FILS_SK
440*5113495bSYour Name struct fils_join_rsp_params {
441*5113495bSYour Name 	uint8_t *fils_pmk;
442*5113495bSYour Name 	uint8_t fils_pmk_len;
443*5113495bSYour Name 	uint8_t fils_pmkid[PMKID_LEN];
444*5113495bSYour Name 	uint8_t kek[MAX_KEK_LEN];
445*5113495bSYour Name 	uint8_t kek_len;
446*5113495bSYour Name 	uint8_t tk[MAX_TK_LEN];
447*5113495bSYour Name 	uint8_t tk_len;
448*5113495bSYour Name 	uint8_t gtk_len;
449*5113495bSYour Name 	uint8_t gtk[MAX_GTK_LEN];
450*5113495bSYour Name 	struct qdf_mac_addr dst_mac;
451*5113495bSYour Name 	struct qdf_mac_addr src_mac;
452*5113495bSYour Name 	uint16_t hlp_data_len;
453*5113495bSYour Name 	uint8_t hlp_data[FILS_MAX_HLP_DATA_LEN];
454*5113495bSYour Name };
455*5113495bSYour Name #endif
456*5113495bSYour Name 
457*5113495bSYour Name #define RMENABLEDCAP_MAX_LEN 5
458*5113495bSYour Name 
459*5113495bSYour Name struct rrm_config_param {
460*5113495bSYour Name 	uint8_t rrm_enabled;
461*5113495bSYour Name 	bool sap_rrm_enabled;
462*5113495bSYour Name 	uint8_t max_randn_interval;
463*5113495bSYour Name 	uint8_t rm_capability[RMENABLEDCAP_MAX_LEN];
464*5113495bSYour Name };
465*5113495bSYour Name 
466*5113495bSYour Name const char *lim_bss_type_to_string(const uint16_t bss_type);
467*5113495bSYour Name /**
468*5113495bSYour Name  * struct supported_rates - stores rates/MCS supported
469*5113495bSYour Name  * @llbRates: 11b rates in unit of 500kbps
470*5113495bSYour Name  * @llaRates: 11a rates in unit of 500kbps
471*5113495bSYour Name  * @supportedMCSSet: supported basic MCS, 0-76 bits used, remaining reserved
472*5113495bSYour Name  *                    bits 0-15 and 32 should be set.
473*5113495bSYour Name  * @rxHighestDataRate: RX Highest Supported Data Rate defines the highest data
474*5113495bSYour Name  *                      rate that the STA is able to receive, in unites of 1Mbps
475*5113495bSYour Name  *                      This value is derived from "Supported MCS Set field"
476*5113495bSYour Name  *                      inside the HT capability element.
477*5113495bSYour Name  * @vhtRxMCSMap: Indicates the Maximum MCS(VHT) that can be received for each
478*5113495bSYour Name  *                number of spacial streams
479*5113495bSYour Name  * @vhtRxHighestDataRate: Indicate the highest VHT data rate that the STA is
480*5113495bSYour Name  *                         able to receive
481*5113495bSYour Name  * @vhtTxMCSMap: Indicates the Maximum MCS(VHT) that can be transmitted for
482*5113495bSYour Name  *                each number of spacial streams
483*5113495bSYour Name  * @vhtTxHighestDataRate: Indicate the highest VHT data rate that the STA is
484*5113495bSYour Name  *                         able to transmit
485*5113495bSYour Name  * @he_rx_mcs: Indicates the Maximum MCS(HE) that can be received for each
486*5113495bSYour Name  *              number of spacial streams
487*5113495bSYour Name  * @he_tx_mcs: Indicates the Maximum MCS(HE) that can be transmitted for each
488*5113495bSYour Name  *              number of spacial streams
489*5113495bSYour Name  * @bw_20_rx_max_nss_for_mcs_0_to_7: Indicates MAX RX NSS for MCS from 0 to 7
490*5113495bSYour Name  * @bw_20_tx_max_nss_for_mcs_0_to_7: Indicates MAX TX NSS for MCS from 0 to 7
491*5113495bSYour Name  * @bw_20_rx_max_nss_for_mcs_8_and_9: Indicates MAX RX NSS for MCS from 8 9
492*5113495bSYour Name  * @bw_20_tx_max_nss_for_mcs_8_and_9: Indicates MAX TX NSS for MCS from 8 9
493*5113495bSYour Name  * @bw_20_rx_max_nss_for_mcs_10_and_11:Indicates MAX RX NSS for MCS from 10 11
494*5113495bSYour Name  * @bw_20_tx_max_nss_for_mcs_10_and_11: Indicates MAX TX NSS for MCS from 10 11
495*5113495bSYour Name  * @bw_20_rx_max_nss_for_mcs_12_and_13: Indicates MAX RX NSS for MCS from 12 13
496*5113495bSYour Name  * @bw_20_tx_max_nss_for_mcs_12_and_13: Indicates MAX TX NSS for MCS from 12 13
497*5113495bSYour Name  * @bw_le_80_rx_max_nss_for_mcs_0_to_7: Indicates MAX RX NSS for MCS from 0 to 7
498*5113495bSYour Name  * @bw_le_80_tx_max_nss_for_mcs_0_to_7: Indicates MAX TX NSS for MCS from 0 to 7
499*5113495bSYour Name  * @bw_le_80_rx_max_nss_for_mcs_8_and_9: Indicates MAX RX NSS for MCS from 8 9
500*5113495bSYour Name  * @bw_le_80_tx_max_nss_for_mcs_8_and_9: Indicates MAX TX NSS for MCS from 8 9
501*5113495bSYour Name  * @bw_le_80_rx_max_nss_for_mcs_10_and_11:Indicates MAX RX NSS for MCS from
502*5113495bSYour Name  *                                        10 11
503*5113495bSYour Name  * @bw_le_80_tx_max_nss_for_mcs_10_and_11: Indicates MAX TX NSS for MCS from
504*5113495bSYour Name  *                                         10 11
505*5113495bSYour Name  * @bw_le_80_rx_max_nss_for_mcs_12_and_13: Indicates MAX RX NSS for MCS from
506*5113495bSYour Name  *                                         12 13
507*5113495bSYour Name  * @bw_le_80_tx_max_nss_for_mcs_12_and_13: Indicates MAX TX NSS for MCS from
508*5113495bSYour Name  *                                         12 13
509*5113495bSYour Name  * @bw_160_rx_max_nss_for_mcs_0_to_7: Indicates MAX RX NSS for MCS from 0 to 7
510*5113495bSYour Name  * @bw_160_tx_max_nss_for_mcs_0_to_7: Indicates MAX TX NSS for MCS from 0 to 7
511*5113495bSYour Name  * @bw_160_rx_max_nss_for_mcs_8_and_9: Indicates MAX RX NSS for MCS from 8 9
512*5113495bSYour Name  * @bw_160_tx_max_nss_for_mcs_8_and_9: Indicates MAX TX NSS for MCS from 8 9
513*5113495bSYour Name  * @bw_160_rx_max_nss_for_mcs_10_and_11:Indicates MAX RX NSS for MCS from
514*5113495bSYour Name  *                                        10 11
515*5113495bSYour Name  * @bw_160_tx_max_nss_for_mcs_10_and_11: Indicates MAX TX NSS for MCS from
516*5113495bSYour Name  *                                         10 11
517*5113495bSYour Name  * @bw_160_rx_max_nss_for_mcs_12_and_13: Indicates MAX RX NSS for MCS from
518*5113495bSYour Name  *                                         12 13
519*5113495bSYour Name  * @bw_160_tx_max_nss_for_mcs_12_and_13: Indicates MAX TX NSS for MCS from
520*5113495bSYour Name  *                                         12 13
521*5113495bSYour Name  * @bw_320_rx_max_nss_for_mcs_0_to_7: Indicates MAX RX NSS for MCS from 0 to 7
522*5113495bSYour Name  * @bw_320_tx_max_nss_for_mcs_0_to_7: Indicates MAX TX NSS for MCS from 0 to 7
523*5113495bSYour Name  * @bw_320_rx_max_nss_for_mcs_8_and_9: Indicates MAX RX NSS for MCS from 8 9
524*5113495bSYour Name  * @bw_320_tx_max_nss_for_mcs_8_and_9: Indicates MAX TX NSS for MCS from 8 9
525*5113495bSYour Name  * @bw_320_rx_max_nss_for_mcs_10_and_11:Indicates MAX RX NSS for MCS from
526*5113495bSYour Name  *                                        10 11
527*5113495bSYour Name  * @bw_320_tx_max_nss_for_mcs_10_and_11: Indicates MAX TX NSS for MCS from
528*5113495bSYour Name  *                                         10 11
529*5113495bSYour Name  * @bw_320_rx_max_nss_for_mcs_12_and_13: Indicates MAX RX NSS for MCS from
530*5113495bSYour Name  *                                         12 13
531*5113495bSYour Name  * @bw_320_tx_max_nss_for_mcs_12_and_13: Indicates MAX TX NSS for MCS from
532*5113495bSYour Name  *                                         12 13
533*5113495bSYour Name  */
534*5113495bSYour Name struct supported_rates {
535*5113495bSYour Name 	uint16_t llbRates[SIR_NUM_11B_RATES];
536*5113495bSYour Name 	uint16_t llaRates[SIR_NUM_11A_RATES];
537*5113495bSYour Name 	uint8_t supportedMCSSet[SIR_MAC_MAX_SUPPORTED_MCS_SET];
538*5113495bSYour Name 	uint16_t rxHighestDataRate;
539*5113495bSYour Name 	uint16_t vhtRxMCSMap;
540*5113495bSYour Name 	uint16_t vhtRxHighestDataRate;
541*5113495bSYour Name 	uint16_t vhtTxMCSMap;
542*5113495bSYour Name 	uint16_t vhtTxHighestDataRate;
543*5113495bSYour Name #ifdef WLAN_FEATURE_11AX
544*5113495bSYour Name 	uint16_t rx_he_mcs_map_lt_80;
545*5113495bSYour Name 	uint16_t tx_he_mcs_map_lt_80;
546*5113495bSYour Name 	uint16_t rx_he_mcs_map_160;
547*5113495bSYour Name 	uint16_t tx_he_mcs_map_160;
548*5113495bSYour Name 	uint16_t rx_he_mcs_map_80_80;
549*5113495bSYour Name 	uint16_t tx_he_mcs_map_80_80;
550*5113495bSYour Name #endif
551*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
552*5113495bSYour Name 	uint32_t bw_20_rx_max_nss_for_mcs_0_to_7:4;
553*5113495bSYour Name 	uint32_t bw_20_tx_max_nss_for_mcs_0_to_7:4;
554*5113495bSYour Name 	uint32_t bw_20_rx_max_nss_for_mcs_8_and_9:4;
555*5113495bSYour Name 	uint32_t bw_20_tx_max_nss_for_mcs_8_and_9:4;
556*5113495bSYour Name 	uint32_t bw_20_rx_max_nss_for_mcs_10_and_11:4;
557*5113495bSYour Name 	uint32_t bw_20_tx_max_nss_for_mcs_10_and_11:4;
558*5113495bSYour Name 	uint32_t bw_20_rx_max_nss_for_mcs_12_and_13:4;
559*5113495bSYour Name 	uint32_t bw_20_tx_max_nss_for_mcs_12_and_13:4;
560*5113495bSYour Name 	uint32_t bw_le_80_rx_max_nss_for_mcs_0_to_9:4;
561*5113495bSYour Name 	uint32_t bw_le_80_tx_max_nss_for_mcs_0_to_9:4;
562*5113495bSYour Name 	uint32_t bw_le_80_rx_max_nss_for_mcs_10_and_11:4;
563*5113495bSYour Name 	uint32_t bw_le_80_tx_max_nss_for_mcs_10_and_11:4;
564*5113495bSYour Name 	uint32_t bw_le_80_rx_max_nss_for_mcs_12_and_13:4;
565*5113495bSYour Name 	uint32_t bw_le_80_tx_max_nss_for_mcs_12_and_13:4;
566*5113495bSYour Name 	uint32_t bw_160_rx_max_nss_for_mcs_0_to_9:4;
567*5113495bSYour Name 	uint32_t bw_160_tx_max_nss_for_mcs_0_to_9:4;
568*5113495bSYour Name 	uint32_t bw_160_rx_max_nss_for_mcs_10_and_11:4;
569*5113495bSYour Name 	uint32_t bw_160_tx_max_nss_for_mcs_10_and_11:4;
570*5113495bSYour Name 	uint32_t bw_160_rx_max_nss_for_mcs_12_and_13:4;
571*5113495bSYour Name 	uint32_t bw_160_tx_max_nss_for_mcs_12_and_13:4;
572*5113495bSYour Name 	uint32_t bw_320_rx_max_nss_for_mcs_0_to_9:4;
573*5113495bSYour Name 	uint32_t bw_320_tx_max_nss_for_mcs_0_to_9:4;
574*5113495bSYour Name 	uint32_t bw_320_rx_max_nss_for_mcs_10_and_11:4;
575*5113495bSYour Name 	uint32_t bw_320_tx_max_nss_for_mcs_10_and_11:4;
576*5113495bSYour Name 	uint8_t bw_320_rx_max_nss_for_mcs_12_and_13:4;
577*5113495bSYour Name 	uint8_t bw_320_tx_max_nss_for_mcs_12_and_13:4;
578*5113495bSYour Name #endif
579*5113495bSYour Name };
580*5113495bSYour Name 
581*5113495bSYour Name struct register_mgmt_frame {
582*5113495bSYour Name 	uint16_t messageType;
583*5113495bSYour Name 	uint16_t length;
584*5113495bSYour Name 	uint8_t sessionId;
585*5113495bSYour Name 	bool registerFrame;
586*5113495bSYour Name 	uint16_t frameType;
587*5113495bSYour Name 	uint16_t matchLen;
588*5113495bSYour Name 	QDF_FLEX_ARRAY(uint8_t, matchData);
589*5113495bSYour Name };
590*5113495bSYour Name 
591*5113495bSYour Name /* / Generic type for sending a response message */
592*5113495bSYour Name /* / with result code to host software */
593*5113495bSYour Name typedef struct sSirSmeRsp {
594*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_*_RSP */
595*5113495bSYour Name 	uint16_t length;
596*5113495bSYour Name 	uint8_t vdev_id;
597*5113495bSYour Name 	tSirResultCodes status_code;
598*5113495bSYour Name 	struct wlan_objmgr_psoc *psoc;
599*5113495bSYour Name } tSirSmeRsp, *tpSirSmeRsp;
600*5113495bSYour Name 
601*5113495bSYour Name struct bss_description;
602*5113495bSYour Name struct roam_offload_synch_ind;
603*5113495bSYour Name struct roam_pmkid_req_event;
604*5113495bSYour Name 
605*5113495bSYour Name /**
606*5113495bSYour Name  * typedef pe_roam_synch_fn_t - PE roam synch callback routine pointer
607*5113495bSYour Name  * @mac_ctx: Global MAC context
608*5113495bSYour Name  * @vdev_id: vdev id
609*5113495bSYour Name  * @roam_sync_ind_ptr: Structure with roam synch parameters
610*5113495bSYour Name  * @ie_len: ie length
611*5113495bSYour Name  * @reason: Reason for calling the callback
612*5113495bSYour Name  *
613*5113495bSYour Name  * This type is for callbacks registered with WMA to complete the roam synch
614*5113495bSYour Name  * propagation at PE level. It also fills the BSS descriptor, which will be
615*5113495bSYour Name  * helpful to complete the roam synch propagation.
616*5113495bSYour Name  *
617*5113495bSYour Name  * Return: Success or Failure.
618*5113495bSYour Name  */
619*5113495bSYour Name typedef QDF_STATUS
620*5113495bSYour Name (*pe_roam_synch_fn_t)(struct mac_context *mac_ctx,
621*5113495bSYour Name 		      uint8_t vdev_id,
622*5113495bSYour Name 		      struct roam_offload_synch_ind *roam_sync_ind_ptr,
623*5113495bSYour Name 		      uint16_t ie_len,
624*5113495bSYour Name 		      enum sir_roam_op_code reason);
625*5113495bSYour Name 
626*5113495bSYour Name /**
627*5113495bSYour Name  * typedef stop_roaming_fn_t - Stop roaming routine pointer
628*5113495bSYour Name  * @mac_handle: Pointer to opaque mac handle
629*5113495bSYour Name  * @session_id: Session Identifier
630*5113495bSYour Name  * @reason: Reason for calling the callback
631*5113495bSYour Name  * @requestor: Requestor for disabling roaming in driver
632*5113495bSYour Name  *
633*5113495bSYour Name  * This type is for callbacks registered with WMA to stop roaming on the given
634*5113495bSYour Name  * session ID
635*5113495bSYour Name  *
636*5113495bSYour Name  * Return: Success or Failure.
637*5113495bSYour Name  */
638*5113495bSYour Name typedef QDF_STATUS
639*5113495bSYour Name (*stop_roaming_fn_t)(mac_handle_t mac_handle,
640*5113495bSYour Name 		     uint8_t session_id, uint8_t reason,
641*5113495bSYour Name 		     enum wlan_cm_rso_control_requestor requestor);
642*5113495bSYour Name 
643*5113495bSYour Name /**
644*5113495bSYour Name  * typedef set_ies_fn_t - Set IEs routine pointer
645*5113495bSYour Name  * @mac_ctx: Global MAC context
646*5113495bSYour Name  * @vdev_id: vdev id
647*5113495bSYour Name  * @dot11_mode: dot11 mode
648*5113495bSYour Name  * @opmode: device opmode
649*5113495bSYour Name  *
650*5113495bSYour Name  * This type is for callbacks registered with WMA to set the IEs for a
651*5113495bSYour Name  * given vdev id to the firmware.
652*5113495bSYour Name  *
653*5113495bSYour Name  * Return: Success or Failure
654*5113495bSYour Name  */
655*5113495bSYour Name typedef QDF_STATUS
656*5113495bSYour Name (*set_ies_fn_t)(struct mac_context *mac_ctx, uint8_t vdev_id,
657*5113495bSYour Name 		uint16_t dot11_mode, enum QDF_OPMODE device_mode);
658*5113495bSYour Name 
659*5113495bSYour Name /* / Definition for indicating all modules ready on STA */
660*5113495bSYour Name struct sme_ready_req {
661*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_SYS_READY_IND */
662*5113495bSYour Name 	uint16_t length;
663*5113495bSYour Name 	QDF_STATUS (*csr_roam_auth_event_handle_cb)(struct mac_context *mac,
664*5113495bSYour Name 						    uint8_t vdev_id,
665*5113495bSYour Name 						    struct qdf_mac_addr bssid,
666*5113495bSYour Name 						    uint32_t akm);
667*5113495bSYour Name 	pe_roam_synch_fn_t pe_roam_synch_cb;
668*5113495bSYour Name 	stop_roaming_fn_t stop_roaming_cb;
669*5113495bSYour Name 	QDF_STATUS (*sme_msg_cb)(struct mac_context *mac,
670*5113495bSYour Name 				 struct scheduler_msg *msg);
671*5113495bSYour Name 	QDF_STATUS (*pe_disconnect_cb) (struct mac_context *mac,
672*5113495bSYour Name 					uint8_t vdev_id,
673*5113495bSYour Name 					uint8_t *deauth_disassoc_frame,
674*5113495bSYour Name 					uint16_t deauth_disassoc_frame_len,
675*5113495bSYour Name 					uint16_t reason_code);
676*5113495bSYour Name 	set_ies_fn_t pe_roam_set_ie_cb;
677*5113495bSYour Name };
678*5113495bSYour Name 
679*5113495bSYour Name /**
680*5113495bSYour Name  * struct s_sir_set_hw_mode - Set HW mode request
681*5113495bSYour Name  * @messageType: Message type
682*5113495bSYour Name  * @length: Length of the message
683*5113495bSYour Name  * @set_hw: Params containing the HW mode index and callback
684*5113495bSYour Name  */
685*5113495bSYour Name struct s_sir_set_hw_mode {
686*5113495bSYour Name 	uint16_t messageType;
687*5113495bSYour Name 	uint16_t length;
688*5113495bSYour Name 	struct policy_mgr_hw_mode set_hw;
689*5113495bSYour Name };
690*5113495bSYour Name 
691*5113495bSYour Name /**
692*5113495bSYour Name  * struct sir_set_dual_mac_cfg - Set Dual mac config request
693*5113495bSYour Name  * @message_type: Message type
694*5113495bSYour Name  * @length: Length of the message
695*5113495bSYour Name  * @set_dual_mac: Params containing the dual mac config and callback
696*5113495bSYour Name  */
697*5113495bSYour Name struct sir_set_dual_mac_cfg {
698*5113495bSYour Name 	uint16_t message_type;
699*5113495bSYour Name 	uint16_t length;
700*5113495bSYour Name 	struct policy_mgr_dual_mac_config set_dual_mac;
701*5113495bSYour Name };
702*5113495bSYour Name 
703*5113495bSYour Name /**
704*5113495bSYour Name  * struct sir_antenna_mode_param - antenna mode param
705*5113495bSYour Name  * @num_tx_chains: Number of TX chains
706*5113495bSYour Name  * @num_rx_chains: Number of RX chains
707*5113495bSYour Name  * @set_antenna_mode_resp: callback to set antenna mode command
708*5113495bSYour Name  * @set_antenna_mode_ctx: callback context to set antenna mode command
709*5113495bSYour Name  */
710*5113495bSYour Name struct sir_antenna_mode_param {
711*5113495bSYour Name 	uint32_t num_tx_chains;
712*5113495bSYour Name 	uint32_t num_rx_chains;
713*5113495bSYour Name 	void *set_antenna_mode_resp;
714*5113495bSYour Name 	void *set_antenna_mode_ctx;
715*5113495bSYour Name };
716*5113495bSYour Name 
717*5113495bSYour Name /**
718*5113495bSYour Name  * struct sir_set_antenna_mode - Set antenna mode request
719*5113495bSYour Name  * @message_type: Message type
720*5113495bSYour Name  * @length: Length of the message
721*5113495bSYour Name  * @set_antenna_mode: Params containing antenna mode params
722*5113495bSYour Name  */
723*5113495bSYour Name struct sir_set_antenna_mode {
724*5113495bSYour Name 	uint16_t message_type;
725*5113495bSYour Name 	uint16_t length;
726*5113495bSYour Name 	struct sir_antenna_mode_param set_antenna_mode;
727*5113495bSYour Name };
728*5113495bSYour Name 
729*5113495bSYour Name /**
730*5113495bSYour Name  * enum bss_type - Enum for BSS type used in scanning/joining etc.
731*5113495bSYour Name  *
732*5113495bSYour Name  * @eSIR_INFRASTRUCTURE_MODE: Infrastructure station
733*5113495bSYour Name  * @eSIR_INFRA_AP_MODE: softAP mode
734*5113495bSYour Name  * @eSIR_AUTO_MODE: Auto role
735*5113495bSYour Name  * @eSIR_MONITOR_MODE: Monitor mode
736*5113495bSYour Name  * @eSIR_NDI_MODE: NAN datapath mode
737*5113495bSYour Name  */
738*5113495bSYour Name enum bss_type {
739*5113495bSYour Name 	eSIR_INFRASTRUCTURE_MODE,
740*5113495bSYour Name 	eSIR_INFRA_AP_MODE,
741*5113495bSYour Name 	eSIR_AUTO_MODE,
742*5113495bSYour Name 	eSIR_MONITOR_MODE,
743*5113495bSYour Name 	eSIR_NDI_MODE,
744*5113495bSYour Name 	eSIR_DONOT_USE_BSS_TYPE = SIR_MAX_ENUM_SIZE
745*5113495bSYour Name };
746*5113495bSYour Name 
747*5113495bSYour Name /* / Power Capability info used in 11H */
748*5113495bSYour Name struct power_cap_info {
749*5113495bSYour Name 	uint8_t minTxPower;
750*5113495bSYour Name 	uint8_t maxTxPower;
751*5113495bSYour Name };
752*5113495bSYour Name 
753*5113495bSYour Name /* / Supported Channel info used in 11H */
754*5113495bSYour Name struct supported_channels {
755*5113495bSYour Name 	uint8_t numChnl;
756*5113495bSYour Name 	uint8_t channelList[SIR_MAX_SUPPORTED_CHANNEL_LIST];
757*5113495bSYour Name };
758*5113495bSYour Name 
759*5113495bSYour Name typedef enum eSirNwType {
760*5113495bSYour Name 	eSIR_11A_NW_TYPE,
761*5113495bSYour Name 	eSIR_11B_NW_TYPE,
762*5113495bSYour Name 	eSIR_11G_NW_TYPE,
763*5113495bSYour Name 	eSIR_11N_NW_TYPE,
764*5113495bSYour Name 	eSIR_11AC_NW_TYPE,
765*5113495bSYour Name 	eSIR_11AX_NW_TYPE,
766*5113495bSYour Name 	eSIR_11BE_NW_TYPE,
767*5113495bSYour Name 	eSIR_DONOT_USE_NW_TYPE = SIR_MAX_ENUM_SIZE
768*5113495bSYour Name } tSirNwType;
769*5113495bSYour Name 
770*5113495bSYour Name struct add_ie_params {
771*5113495bSYour Name 	uint16_t probeRespDataLen;
772*5113495bSYour Name 	uint8_t *probeRespData_buff;
773*5113495bSYour Name 	uint16_t assocRespDataLen;
774*5113495bSYour Name 	uint8_t *assocRespData_buff;
775*5113495bSYour Name 	uint16_t probeRespBCNDataLen;
776*5113495bSYour Name 	uint8_t *probeRespBCNData_buff;
777*5113495bSYour Name };
778*5113495bSYour Name 
779*5113495bSYour Name #define GET_IE_LEN_IN_BSS(lenInBss) (lenInBss + sizeof(lenInBss) - \
780*5113495bSYour Name 			    ((uintptr_t)OFFSET_OF(struct bss_description,\
781*5113495bSYour Name 						  ieFields)))
782*5113495bSYour Name 
783*5113495bSYour Name #define WSCIE_PROBE_RSP_LEN (317 + 2)
784*5113495bSYour Name 
785*5113495bSYour Name #ifdef WLAN_FEATURE_FILS_SK
786*5113495bSYour Name /* struct fils_ind_elements: elements parsed from fils indication present
787*5113495bSYour Name  * in beacon/probe resp
788*5113495bSYour Name  * @realm_cnt: number of realm present
789*5113495bSYour Name  * @realm: realms
790*5113495bSYour Name  * @is_fils_sk_supported: if FILS SK supported
791*5113495bSYour Name  * @is_cache_id_present: if cache id present
792*5113495bSYour Name  * @cache_id: cache id
793*5113495bSYour Name  */
794*5113495bSYour Name struct fils_ind_elements {
795*5113495bSYour Name 	uint16_t realm_cnt;
796*5113495bSYour Name 	uint8_t realm[SIR_MAX_REALM_COUNT][SIR_REALM_LEN];
797*5113495bSYour Name 	bool is_fils_sk_supported;
798*5113495bSYour Name 	bool is_cache_id_present;
799*5113495bSYour Name 	uint8_t cache_id[CACHE_ID_LEN];
800*5113495bSYour Name };
801*5113495bSYour Name #endif
802*5113495bSYour Name 
803*5113495bSYour Name struct bss_description {
804*5113495bSYour Name 	/* offset of the ieFields from bssId. */
805*5113495bSYour Name 	uint16_t length;
806*5113495bSYour Name 	tSirMacAddr bssId;
807*5113495bSYour Name 	unsigned long scansystimensec;
808*5113495bSYour Name 	uint32_t timeStamp[2];
809*5113495bSYour Name 	uint16_t beaconInterval;
810*5113495bSYour Name 	uint16_t capabilityInfo;
811*5113495bSYour Name 	tSirNwType nwType;      /* Indicates 11a/b/g */
812*5113495bSYour Name 	int8_t rssi;
813*5113495bSYour Name 	int8_t rssi_raw;
814*5113495bSYour Name 	int8_t sinr;
815*5113495bSYour Name 	/* channel frequency what peer sent in beacon/probersp. */
816*5113495bSYour Name 	uint32_t chan_freq;
817*5113495bSYour Name 	/* Based on system time, not a relative time. */
818*5113495bSYour Name 	uint64_t received_time;
819*5113495bSYour Name 	uint32_t parentTSF;
820*5113495bSYour Name 	uint32_t startTSF[2];
821*5113495bSYour Name 	uint8_t mdiePresent;
822*5113495bSYour Name 	/* MDIE for 11r, picked from the beacons */
823*5113495bSYour Name 	uint8_t mdie[SIR_MDIE_SIZE];
824*5113495bSYour Name #ifdef FEATURE_WLAN_ESE
825*5113495bSYour Name 	uint16_t QBSSLoad_present;
826*5113495bSYour Name 	uint16_t QBSSLoad_avail;
827*5113495bSYour Name #endif
828*5113495bSYour Name 	/* whether it is from a probe rsp */
829*5113495bSYour Name 	uint8_t fProbeRsp;
830*5113495bSYour Name 	tSirMacSeqCtl seq_ctrl;
831*5113495bSYour Name 	uint32_t tsf_delta;
832*5113495bSYour Name 	struct scan_mbssid_info mbssid_info;
833*5113495bSYour Name #ifdef WLAN_FEATURE_FILS_SK
834*5113495bSYour Name 	struct fils_ind_elements fils_info_element;
835*5113495bSYour Name #endif
836*5113495bSYour Name 	uint32_t assoc_disallowed;
837*5113495bSYour Name 	uint32_t adaptive_11r_ap;
838*5113495bSYour Name 	uint32_t mbo_oce_enabled_ap;
839*5113495bSYour Name #if defined(WLAN_SAE_SINGLE_PMK) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
840*5113495bSYour Name 	uint32_t is_single_pmk;
841*5113495bSYour Name #endif
842*5113495bSYour Name 	/* Please keep the structure 4 bytes aligned above the ieFields */
843*5113495bSYour Name 	QDF_FLEX_ARRAY(uint32_t, ieFields);
844*5113495bSYour Name };
845*5113495bSYour Name 
846*5113495bSYour Name /* / Definition for response message to previously */
847*5113495bSYour Name /* / issued start BSS request */
848*5113495bSYour Name /* / MAC ---> */
849*5113495bSYour Name struct start_bss_rsp {
850*5113495bSYour Name 	uint8_t vdev_id;
851*5113495bSYour Name 	tSirResultCodes status_code;
852*5113495bSYour Name 	uint32_t staId;         /* Station ID for Self */
853*5113495bSYour Name };
854*5113495bSYour Name 
855*5113495bSYour Name struct report_channel_list {
856*5113495bSYour Name 	uint8_t num_channels;
857*5113495bSYour Name 	uint32_t chan_freq_lst[SIR_ESE_MAX_MEAS_IE_REQS];
858*5113495bSYour Name };
859*5113495bSYour Name 
860*5113495bSYour Name #ifdef FEATURE_OEM_DATA_SUPPORT
861*5113495bSYour Name struct oem_data_req {
862*5113495bSYour Name 	uint32_t data_len;
863*5113495bSYour Name 	uint8_t *data;
864*5113495bSYour Name };
865*5113495bSYour Name 
866*5113495bSYour Name struct oem_data_rsp {
867*5113495bSYour Name 	uint32_t rsp_len;
868*5113495bSYour Name 	uint8_t *data;
869*5113495bSYour Name };
870*5113495bSYour Name #endif /* FEATURE_OEM_DATA_SUPPORT */
871*5113495bSYour Name 
872*5113495bSYour Name #ifdef FEATURE_WLAN_ESE
873*5113495bSYour Name typedef struct ese_wmm_tspec_ie {
874*5113495bSYour Name 	uint16_t         traffic_type:1;
875*5113495bSYour Name 	uint16_t                 tsid:4;
876*5113495bSYour Name 	uint16_t            direction:2;
877*5113495bSYour Name 	uint16_t        access_policy:2;
878*5113495bSYour Name 	uint16_t          aggregation:1;
879*5113495bSYour Name 	uint16_t                  psb:1;
880*5113495bSYour Name 	uint16_t        user_priority:3;
881*5113495bSYour Name 	uint16_t       tsinfo_ack_pol:2;
882*5113495bSYour Name 	uint8_t          tsinfo_rsvd:7;
883*5113495bSYour Name 	uint8_t      burst_size_defn:1;
884*5113495bSYour Name 	uint16_t                 size:15;
885*5113495bSYour Name 	uint16_t                fixed:1;
886*5113495bSYour Name 	uint16_t            max_msdu_size;
887*5113495bSYour Name 	uint32_t            min_service_int;
888*5113495bSYour Name 	uint32_t            max_service_int;
889*5113495bSYour Name 	uint32_t            inactivity_int;
890*5113495bSYour Name 	uint32_t            suspension_int;
891*5113495bSYour Name 	uint32_t            service_start_time;
892*5113495bSYour Name 	uint32_t            min_data_rate;
893*5113495bSYour Name 	uint32_t            mean_data_rate;
894*5113495bSYour Name 	uint32_t            peak_data_rate;
895*5113495bSYour Name 	uint32_t            burst_size;
896*5113495bSYour Name 	uint32_t            delay_bound;
897*5113495bSYour Name 	uint32_t            min_phy_rate;
898*5113495bSYour Name 	uint16_t            surplus_bw_allowance;
899*5113495bSYour Name 	uint16_t            medium_time;
900*5113495bSYour Name } qdf_packed ese_wmm_tspec_ie;
901*5113495bSYour Name 
902*5113495bSYour Name typedef struct sTspecInfo {
903*5113495bSYour Name 	uint8_t valid;
904*5113495bSYour Name 	struct mac_tspec_ie tspec;
905*5113495bSYour Name } tTspecInfo;
906*5113495bSYour Name 
907*5113495bSYour Name typedef struct sESETspecTspecInfo {
908*5113495bSYour Name 	uint8_t numTspecs;
909*5113495bSYour Name 	tTspecInfo tspec[ESE_MAX_TSPEC_IES];
910*5113495bSYour Name } tESETspecInfo;
911*5113495bSYour Name 
912*5113495bSYour Name struct tsm_ie {
913*5113495bSYour Name 	uint8_t tsid;
914*5113495bSYour Name 	uint8_t state;
915*5113495bSYour Name 	uint16_t msmt_interval;
916*5113495bSYour Name };
917*5113495bSYour Name 
918*5113495bSYour Name struct tsm_ie_ind {
919*5113495bSYour Name 	struct tsm_ie tsm_ie;
920*5113495bSYour Name 	uint8_t sessionId;
921*5113495bSYour Name };
922*5113495bSYour Name 
923*5113495bSYour Name typedef struct sAniTrafStrmMetrics {
924*5113495bSYour Name 	uint16_t UplinkPktQueueDly;
925*5113495bSYour Name 	uint16_t UplinkPktQueueDlyHist[4];
926*5113495bSYour Name 	uint32_t UplinkPktTxDly;
927*5113495bSYour Name 	uint16_t UplinkPktLoss;
928*5113495bSYour Name 	uint16_t UplinkPktCount;
929*5113495bSYour Name 	uint8_t RoamingCount;
930*5113495bSYour Name 	uint16_t RoamingDly;
931*5113495bSYour Name } tAniTrafStrmMetrics, *tpAniTrafStrmMetrics;
932*5113495bSYour Name 
933*5113495bSYour Name typedef struct sAniGetTsmStatsReq {
934*5113495bSYour Name 	/* Common for all types are requests */
935*5113495bSYour Name 	uint16_t msgType;       /* message type is same as the request type */
936*5113495bSYour Name 	uint16_t msgLen;        /* length of the entire request */
937*5113495bSYour Name 	uint8_t tid;            /* traffic id */
938*5113495bSYour Name 	struct qdf_mac_addr bssId;
939*5113495bSYour Name 	void *tsmStatsCallback;
940*5113495bSYour Name 	void *pDevContext;      /* device context */
941*5113495bSYour Name } tAniGetTsmStatsReq, *tpAniGetTsmStatsReq;
942*5113495bSYour Name 
943*5113495bSYour Name typedef struct sAniGetTsmStatsRsp {
944*5113495bSYour Name 	/* Common for all types are responses */
945*5113495bSYour Name 	uint16_t msgType;       /*
946*5113495bSYour Name 				 * message type is same as
947*5113495bSYour Name 				 * the request type
948*5113495bSYour Name 				 */
949*5113495bSYour Name 	uint16_t msgLen;        /*
950*5113495bSYour Name 				 * length of the entire request,
951*5113495bSYour Name 				 * includes the pStatsBuf length too
952*5113495bSYour Name 				 */
953*5113495bSYour Name 	uint8_t sessionId;
954*5113495bSYour Name 	uint32_t rc;            /* success/failure */
955*5113495bSYour Name 	struct qdf_mac_addr bssid; /* bssid to get the tsm stats for */
956*5113495bSYour Name 	tAniTrafStrmMetrics tsmMetrics;
957*5113495bSYour Name 	void *tsmStatsReq;      /* tsm stats request backup */
958*5113495bSYour Name } tAniGetTsmStatsRsp, *tpAniGetTsmStatsRsp;
959*5113495bSYour Name 
960*5113495bSYour Name struct ese_bcn_report_bss_info {
961*5113495bSYour Name 	tBcnReportFields bcnReportFields;
962*5113495bSYour Name 	uint8_t ieLen;
963*5113495bSYour Name 	uint8_t *pBuf;
964*5113495bSYour Name };
965*5113495bSYour Name 
966*5113495bSYour Name struct ese_bcn_report_rsp {
967*5113495bSYour Name 	uint16_t measurementToken;
968*5113495bSYour Name 	uint8_t flag;        /* Flag to report measurement done and more data */
969*5113495bSYour Name 	uint8_t numBss;
970*5113495bSYour Name 	struct ese_bcn_report_bss_info
971*5113495bSYour Name 				bcnRepBssInfo[SIR_BCN_REPORT_MAX_BSS_DESC];
972*5113495bSYour Name };
973*5113495bSYour Name 
974*5113495bSYour Name #define TSRS_11AG_RATE_6MBPS   0xC
975*5113495bSYour Name #define TSRS_11B_RATE_5_5MBPS  0xB
976*5113495bSYour Name 
977*5113495bSYour Name struct ese_tsrs_ie {
978*5113495bSYour Name 	uint8_t tsid;
979*5113495bSYour Name 	uint8_t rates[8];
980*5113495bSYour Name };
981*5113495bSYour Name 
982*5113495bSYour Name struct ese_tsm_ie {
983*5113495bSYour Name 	uint8_t tsid;
984*5113495bSYour Name 	uint8_t state;
985*5113495bSYour Name 	uint16_t msmt_interval;
986*5113495bSYour Name };
987*5113495bSYour Name 
988*5113495bSYour Name typedef struct sTSMStats {
989*5113495bSYour Name 	uint8_t tid;
990*5113495bSYour Name 	struct qdf_mac_addr bssid;
991*5113495bSYour Name 	tTrafStrmMetrics tsmMetrics;
992*5113495bSYour Name } tTSMStats, *tpTSMStats;
993*5113495bSYour Name typedef struct sEseTSMContext {
994*5113495bSYour Name 	uint8_t tid;
995*5113495bSYour Name 	struct ese_tsm_ie tsmInfo;
996*5113495bSYour Name 	tTrafStrmMetrics tsmMetrics;
997*5113495bSYour Name } tEseTSMContext, *tpEseTSMContext;
998*5113495bSYour Name typedef struct sEsePEContext {
999*5113495bSYour Name 	tEseTSMContext tsm;
1000*5113495bSYour Name } tEsePEContext, *tpEsePEContext;
1001*5113495bSYour Name 
1002*5113495bSYour Name #endif /* FEATURE_WLAN_ESE */
1003*5113495bSYour Name 
1004*5113495bSYour Name /* Warning Do not add any new param in this struct */
1005*5113495bSYour Name struct join_req {
1006*5113495bSYour Name 	tSirRSNie rsnIE;
1007*5113495bSYour Name 	tSirAddie addIEScan;
1008*5113495bSYour Name 	tSirAddie addIEAssoc;
1009*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
1010*5113495bSYour Name 	struct mlo_partner_info partner_info;
1011*5113495bSYour Name 	uint8_t assoc_link_id;
1012*5113495bSYour Name 	bool is_ml_probe_req_sent;
1013*5113495bSYour Name #endif
1014*5113495bSYour Name 	/* Warning:::::::::::: Do not add any new param in this struct */
1015*5113495bSYour Name 	/* Pls make this as last variable in struct */
1016*5113495bSYour Name 	struct bss_description bssDescription;
1017*5113495bSYour Name 	/*
1018*5113495bSYour Name 	 * WARNING: Pls make bssDescription as last variable in struct
1019*5113495bSYour Name 	 * join_req as it has ieFields followed after this bss
1020*5113495bSYour Name 	 * description. Adding a variable after this corrupts the ieFields
1021*5113495bSYour Name 	 */
1022*5113495bSYour Name };
1023*5113495bSYour Name 
1024*5113495bSYour Name struct oem_channel_info {
1025*5113495bSYour Name 	uint32_t mhz;
1026*5113495bSYour Name 	uint32_t band_center_freq1;
1027*5113495bSYour Name 	uint32_t band_center_freq2;
1028*5113495bSYour Name 	uint32_t info;
1029*5113495bSYour Name 	uint32_t reg_info_1;
1030*5113495bSYour Name 	uint32_t reg_info_2;
1031*5113495bSYour Name 	uint8_t nss;
1032*5113495bSYour Name 	uint32_t rate_flags;
1033*5113495bSYour Name 	uint8_t sec_ch_offset;
1034*5113495bSYour Name 	enum phy_ch_width ch_width;
1035*5113495bSYour Name };
1036*5113495bSYour Name 
1037*5113495bSYour Name enum sir_sme_phy_mode {
1038*5113495bSYour Name 	SIR_SME_PHY_MODE_LEGACY = 0,
1039*5113495bSYour Name 	SIR_SME_PHY_MODE_HT = 1,
1040*5113495bSYour Name 	SIR_SME_PHY_MODE_VHT = 2
1041*5113495bSYour Name };
1042*5113495bSYour Name 
1043*5113495bSYour Name /* / Definition for Association indication from peer */
1044*5113495bSYour Name /* / MAC ---> */
1045*5113495bSYour Name struct assoc_ind {
1046*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_ASSOC_IND */
1047*5113495bSYour Name 	uint16_t length;
1048*5113495bSYour Name 	uint8_t sessionId;
1049*5113495bSYour Name 	tSirMacAddr peerMacAddr;
1050*5113495bSYour Name 	uint16_t aid;
1051*5113495bSYour Name 	tSirMacAddr bssId;      /* Self BSSID */
1052*5113495bSYour Name 	uint16_t staId;         /* Station ID for peer */
1053*5113495bSYour Name 	tAniAuthType authType;
1054*5113495bSYour Name 	enum ani_akm_type akm_type;
1055*5113495bSYour Name 	tAniSSID ssId;          /* SSID used by STA to associate */
1056*5113495bSYour Name 	tSirWAPIie wapiIE;      /* WAPI IE received from peer */
1057*5113495bSYour Name 	tSirRSNie rsnIE;        /* RSN IE received from peer */
1058*5113495bSYour Name 	/* Additional IE received from peer, which possibly include
1059*5113495bSYour Name 	 * WSC IE and/or P2P IE
1060*5113495bSYour Name 	 */
1061*5113495bSYour Name 	tSirAddie addIE;
1062*5113495bSYour Name 
1063*5113495bSYour Name 	/* powerCap & supportedChannels are present only when */
1064*5113495bSYour Name 	/* spectrumMgtIndicator flag is set */
1065*5113495bSYour Name 	bool spectrumMgtIndicator;
1066*5113495bSYour Name 	struct power_cap_info powerCap;
1067*5113495bSYour Name 	struct supported_channels supportedChannels;
1068*5113495bSYour Name 	bool wmmEnabledSta; /* if present - STA is WMM enabled */
1069*5113495bSYour Name 	bool reassocReq;
1070*5113495bSYour Name 	/* Required for indicating the frames to upper layer */
1071*5113495bSYour Name 	uint32_t assocReqLength;
1072*5113495bSYour Name 	uint8_t *assocReqPtr;
1073*5113495bSYour Name 
1074*5113495bSYour Name 	/* Timing measurement capability */
1075*5113495bSYour Name 	uint8_t timingMeasCap;
1076*5113495bSYour Name 	struct oem_channel_info chan_info;
1077*5113495bSYour Name 	bool ampdu;
1078*5113495bSYour Name 	bool sgi_enable;
1079*5113495bSYour Name 	bool tx_stbc;
1080*5113495bSYour Name 	bool rx_stbc;
1081*5113495bSYour Name 	tSirMacHTChannelWidth ch_width;
1082*5113495bSYour Name 	enum sir_sme_phy_mode mode;
1083*5113495bSYour Name 	uint8_t max_supp_idx;
1084*5113495bSYour Name 	uint8_t max_ext_idx;
1085*5113495bSYour Name 	uint8_t max_mcs_idx;
1086*5113495bSYour Name 	uint8_t max_real_mcs_idx;
1087*5113495bSYour Name 	uint8_t rx_mcs_map;
1088*5113495bSYour Name 	uint8_t tx_mcs_map;
1089*5113495bSYour Name 	/* Extended CSA capability of station */
1090*5113495bSYour Name 	uint8_t ecsa_capable;
1091*5113495bSYour Name 	uint32_t ext_cap;
1092*5113495bSYour Name 	uint8_t supported_band;
1093*5113495bSYour Name 	tDot11fIEHTCaps HTCaps;
1094*5113495bSYour Name 	tDot11fIEVHTCaps VHTCaps;
1095*5113495bSYour Name 	bool he_caps_present;
1096*5113495bSYour Name 	bool eht_caps_present;
1097*5113495bSYour Name 	tSirMacCapabilityInfo capability_info;
1098*5113495bSYour Name 	bool is_sae_authenticated;
1099*5113495bSYour Name 	const uint8_t *owe_ie;
1100*5113495bSYour Name 	uint32_t owe_ie_len;
1101*5113495bSYour Name 	uint16_t owe_status;
1102*5113495bSYour Name 	const uint8_t *ft_ie;
1103*5113495bSYour Name 	uint32_t ft_ie_len;
1104*5113495bSYour Name 	uint16_t ft_status;
1105*5113495bSYour Name 	bool need_assoc_rsp_tx_cb;
1106*5113495bSYour Name 	tSirMacAddr peer_mld_addr;
1107*5113495bSYour Name };
1108*5113495bSYour Name 
1109*5113495bSYour Name /**
1110*5113495bSYour Name  * struct owe_assoc_ind - owe association indication
1111*5113495bSYour Name  * @node : List entry element
1112*5113495bSYour Name  * @assoc_ind: pointer to assoc ind
1113*5113495bSYour Name  */
1114*5113495bSYour Name struct owe_assoc_ind {
1115*5113495bSYour Name 	qdf_list_node_t node;
1116*5113495bSYour Name 	struct assoc_ind *assoc_ind;
1117*5113495bSYour Name };
1118*5113495bSYour Name 
1119*5113495bSYour Name /**
1120*5113495bSYour Name  * struct ft_assoc_ind - ft association indication
1121*5113495bSYour Name  * @node: List entry element
1122*5113495bSYour Name  * @assoc_ind: pointer to assoc ind
1123*5113495bSYour Name  */
1124*5113495bSYour Name struct ft_assoc_ind {
1125*5113495bSYour Name 	qdf_list_node_t node;
1126*5113495bSYour Name 	struct assoc_ind *assoc_ind;
1127*5113495bSYour Name };
1128*5113495bSYour Name 
1129*5113495bSYour Name /* / Definition for Association confirm */
1130*5113495bSYour Name /* / ---> MAC */
1131*5113495bSYour Name struct assoc_cnf {
1132*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_ASSOC_CNF */
1133*5113495bSYour Name 	uint16_t length;
1134*5113495bSYour Name 	tSirResultCodes status_code;
1135*5113495bSYour Name 	struct qdf_mac_addr bssid;      /* Self BSSID */
1136*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
1137*5113495bSYour Name 	uint16_t aid;
1138*5113495bSYour Name 	enum wlan_status_code mac_status_code;
1139*5113495bSYour Name 	uint8_t *owe_ie;
1140*5113495bSYour Name 	uint32_t owe_ie_len;
1141*5113495bSYour Name 	uint8_t *ft_ie;
1142*5113495bSYour Name 	uint32_t ft_ie_len;
1143*5113495bSYour Name 	bool need_assoc_rsp_tx_cb;
1144*5113495bSYour Name };
1145*5113495bSYour Name 
1146*5113495bSYour Name /**
1147*5113495bSYour Name  * Table below indicates what information is passed for each of
1148*5113495bSYour Name  * the Wireless Media status change notifications:
1149*5113495bSYour Name  *
1150*5113495bSYour Name  * Status Change code               Status change info
1151*5113495bSYour Name  * ----------------------------------------------------------------------
1152*5113495bSYour Name  * eSIR_SME_DEAUTH_FROM_PEER        Reason code received in DEAUTH frame
1153*5113495bSYour Name  * eSIR_SME_DISASSOC_FROM_PEER      Reason code received in DISASSOC frame
1154*5113495bSYour Name  * eSIR_SME_LOST_LINK_WITH_PEER     None
1155*5113495bSYour Name  * eSIR_SME_CHANNEL_SWITCH          New channel number
1156*5113495bSYour Name  * eSIR_SME_RADAR_DETECTED          Indicates that radar is detected
1157*5113495bSYour Name  * eSIR_SME_AP_CAPS_CHANGED         Indicates that capabilities of the AP
1158*5113495bSYour Name  *                                  that STA is currently associated with
1159*5113495bSYour Name  *                                  have changed.
1160*5113495bSYour Name  */
1161*5113495bSYour Name 
1162*5113495bSYour Name /* Definition for Disassociation request */
1163*5113495bSYour Name struct disassoc_req {
1164*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_DISASSOC_REQ */
1165*5113495bSYour Name 	uint16_t length;
1166*5113495bSYour Name 	uint8_t sessionId;      /* Session ID */
1167*5113495bSYour Name 	struct qdf_mac_addr bssid;      /* Peer BSSID */
1168*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
1169*5113495bSYour Name 	uint16_t reasonCode;
1170*5113495bSYour Name 	/* This flag tells LIM whether to send the disassoc OTA or not */
1171*5113495bSYour Name 	/* This will be set in while handing off from one AP to other */
1172*5113495bSYour Name 	uint8_t doNotSendOverTheAir;
1173*5113495bSYour Name 	bool process_ho_fail;
1174*5113495bSYour Name };
1175*5113495bSYour Name 
1176*5113495bSYour Name /* / Definition for Disassociation response */
1177*5113495bSYour Name struct disassoc_rsp {
1178*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_DISASSOC_RSP */
1179*5113495bSYour Name 	uint16_t length;
1180*5113495bSYour Name 	uint8_t sessionId;      /* Session ID */
1181*5113495bSYour Name 	tSirResultCodes status_code;
1182*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
1183*5113495bSYour Name 	uint16_t staId;
1184*5113495bSYour Name };
1185*5113495bSYour Name 
1186*5113495bSYour Name /* / Definition for Disassociation indication from peer */
1187*5113495bSYour Name struct disassoc_ind {
1188*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_DISASSOC_IND */
1189*5113495bSYour Name 	uint16_t length;
1190*5113495bSYour Name 	uint8_t vdev_id;
1191*5113495bSYour Name 	tSirResultCodes status_code;
1192*5113495bSYour Name 	struct qdf_mac_addr bssid;
1193*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
1194*5113495bSYour Name 	struct qdf_mac_addr peer_mld_addr;
1195*5113495bSYour Name 	uint16_t staId;
1196*5113495bSYour Name 	uint32_t reasonCode;
1197*5113495bSYour Name 	bool from_ap;
1198*5113495bSYour Name };
1199*5113495bSYour Name 
1200*5113495bSYour Name /* / Definition for Disassociation confirm */
1201*5113495bSYour Name /* / MAC ---> */
1202*5113495bSYour Name struct disassoc_cnf {
1203*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_DISASSOC_CNF */
1204*5113495bSYour Name 	uint16_t length;
1205*5113495bSYour Name 	uint8_t vdev_id;
1206*5113495bSYour Name 	tSirResultCodes status_code;
1207*5113495bSYour Name 	struct qdf_mac_addr bssid;
1208*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
1209*5113495bSYour Name };
1210*5113495bSYour Name 
1211*5113495bSYour Name /**
1212*5113495bSYour Name  * struct sir_sme_discon_done_ind  - disconnect done indiaction
1213*5113495bSYour Name  * @message_type: msg type
1214*5113495bSYour Name  * @length: length of msg
1215*5113495bSYour Name  * @session_id: session id of the indication
1216*5113495bSYour Name  * @reason_code: reason for disconnect indication
1217*5113495bSYour Name  * @peer_mac: peer mac
1218*5113495bSYour Name  */
1219*5113495bSYour Name struct sir_sme_discon_done_ind {
1220*5113495bSYour Name 	uint16_t           message_type;
1221*5113495bSYour Name 	uint16_t           length;
1222*5113495bSYour Name 	uint8_t            session_id;
1223*5113495bSYour Name 	tSirResultCodes    reason_code;
1224*5113495bSYour Name 	tSirMacAddr        peer_mac;
1225*5113495bSYour Name };
1226*5113495bSYour Name 
1227*5113495bSYour Name /* / Definition for Deauthetication request */
1228*5113495bSYour Name struct deauth_req {
1229*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_DEAUTH_REQ */
1230*5113495bSYour Name 	uint16_t length;
1231*5113495bSYour Name 	uint8_t vdev_id;      /* Session ID */
1232*5113495bSYour Name 	struct qdf_mac_addr bssid;      /* AP BSSID */
1233*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
1234*5113495bSYour Name 	uint16_t reasonCode;
1235*5113495bSYour Name };
1236*5113495bSYour Name 
1237*5113495bSYour Name /**
1238*5113495bSYour Name  * struct deauth_retry_params - deauth retry params
1239*5113495bSYour Name  * @peer_mac: peer mac
1240*5113495bSYour Name  * @reason_code: reason for disconnect indication
1241*5113495bSYour Name  * @retry_cnt: retry count
1242*5113495bSYour Name  */
1243*5113495bSYour Name struct deauth_retry_params {
1244*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
1245*5113495bSYour Name 	uint16_t reason_code;
1246*5113495bSYour Name 	uint8_t retry_cnt;
1247*5113495bSYour Name };
1248*5113495bSYour Name 
1249*5113495bSYour Name /* / Definition for Deauthetication response */
1250*5113495bSYour Name struct deauth_rsp {
1251*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_DEAUTH_RSP */
1252*5113495bSYour Name 	uint16_t length;
1253*5113495bSYour Name 	uint8_t sessionId;      /* Session ID */
1254*5113495bSYour Name 	tSirResultCodes status_code;
1255*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
1256*5113495bSYour Name };
1257*5113495bSYour Name 
1258*5113495bSYour Name /* / Definition for Deauthetication indication from peer */
1259*5113495bSYour Name struct deauth_ind {
1260*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_DEAUTH_IND */
1261*5113495bSYour Name 	uint16_t length;
1262*5113495bSYour Name 	uint8_t vdev_id;
1263*5113495bSYour Name 	tSirResultCodes status_code;
1264*5113495bSYour Name 	struct qdf_mac_addr bssid;      /* AP BSSID */
1265*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
1266*5113495bSYour Name 	struct qdf_mac_addr peer_mld_addr;
1267*5113495bSYour Name 
1268*5113495bSYour Name 	uint16_t staId;
1269*5113495bSYour Name 	uint32_t reasonCode;
1270*5113495bSYour Name 	int8_t rssi;
1271*5113495bSYour Name 	bool from_ap;
1272*5113495bSYour Name };
1273*5113495bSYour Name 
1274*5113495bSYour Name /* / Definition for Deauthetication confirm */
1275*5113495bSYour Name struct deauth_cnf {
1276*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_DEAUTH_CNF */
1277*5113495bSYour Name 	uint16_t length;
1278*5113495bSYour Name 	uint8_t vdev_id;
1279*5113495bSYour Name 	tSirResultCodes status_code;
1280*5113495bSYour Name 	struct qdf_mac_addr bssid;
1281*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
1282*5113495bSYour Name };
1283*5113495bSYour Name 
1284*5113495bSYour Name struct stop_bss_req {
1285*5113495bSYour Name 	uint8_t vdev_id;
1286*5113495bSYour Name 	uint32_t cmd_id;
1287*5113495bSYour Name };
1288*5113495bSYour Name 
1289*5113495bSYour Name struct stop_bss_rsp {
1290*5113495bSYour Name 	uint8_t vdev_id;
1291*5113495bSYour Name 	tSirResultCodes status_code;
1292*5113495bSYour Name };
1293*5113495bSYour Name 
1294*5113495bSYour Name /* / Definition for Channel Switch indication for station */
1295*5113495bSYour Name /* / MAC ---> */
1296*5113495bSYour Name struct switch_channel_ind {
1297*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_SWITCH_CHL_IND */
1298*5113495bSYour Name 	uint16_t length;
1299*5113495bSYour Name 	uint8_t sessionId;
1300*5113495bSYour Name 	uint32_t freq;
1301*5113495bSYour Name 	struct ch_params chan_params;
1302*5113495bSYour Name 	struct qdf_mac_addr bssid;      /* BSSID */
1303*5113495bSYour Name 	QDF_STATUS status;
1304*5113495bSYour Name 	enum wlan_phymode ch_phymode;
1305*5113495bSYour Name };
1306*5113495bSYour Name 
1307*5113495bSYour Name /* / Definition for MIC failure indication */
1308*5113495bSYour Name /* / MAC ---> */
1309*5113495bSYour Name /* / MAC reports this each time a MIC failure occurs on Rx TKIP packet */
1310*5113495bSYour Name struct mic_failure_ind {
1311*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_MIC_FAILURE_IND */
1312*5113495bSYour Name 	uint16_t length;
1313*5113495bSYour Name 	uint8_t sessionId;
1314*5113495bSYour Name 	struct qdf_mac_addr bssId;
1315*5113495bSYour Name 	tSirMicFailureInfo info;
1316*5113495bSYour Name };
1317*5113495bSYour Name 
1318*5113495bSYour Name struct missed_beacon_ind {
1319*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_MISSED_BEACON_IND */
1320*5113495bSYour Name 	uint16_t length;
1321*5113495bSYour Name 	uint8_t bss_idx;
1322*5113495bSYour Name 	int32_t rssi;
1323*5113495bSYour Name };
1324*5113495bSYour Name 
1325*5113495bSYour Name /* / Definition for Set Context response */
1326*5113495bSYour Name /* / MAC ---> */
1327*5113495bSYour Name struct set_context_rsp {
1328*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_SET_CONTEXT_RSP */
1329*5113495bSYour Name 	uint16_t length;
1330*5113495bSYour Name 	uint8_t sessionId;      /* Session ID */
1331*5113495bSYour Name 	tSirResultCodes status_code;
1332*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
1333*5113495bSYour Name };
1334*5113495bSYour Name 
1335*5113495bSYour Name typedef struct sAniGetSnrReq {
1336*5113495bSYour Name 	/* Common for all types are requests */
1337*5113495bSYour Name 	uint16_t msgType;       /* message type is same as the request type */
1338*5113495bSYour Name 	uint16_t msgLen;        /* length of the entire request */
1339*5113495bSYour Name 	uint8_t sessionId;
1340*5113495bSYour Name 	void *snrCallback;
1341*5113495bSYour Name 	void *pDevContext;      /* device context */
1342*5113495bSYour Name 	int8_t snr;
1343*5113495bSYour Name } tAniGetSnrReq, *tpAniGetSnrReq;
1344*5113495bSYour Name 
1345*5113495bSYour Name /* generic country code change request MSG structure */
1346*5113495bSYour Name typedef struct sAniGenericChangeCountryCodeReq {
1347*5113495bSYour Name 	uint16_t msgType;       /* message type is same as the request type */
1348*5113495bSYour Name 	uint16_t msgLen;        /* length of the entire request */
1349*5113495bSYour Name 	uint8_t countryCode[REG_ALPHA2_LEN + 1];  /* 3 char country code */
1350*5113495bSYour Name } tAniGenericChangeCountryCodeReq, *tpAniGenericChangeCountryCodeReq;
1351*5113495bSYour Name 
1352*5113495bSYour Name /**
1353*5113495bSYour Name  * struct sAniDHCPStopInd - DHCP Stop indication message
1354*5113495bSYour Name  * @msgType: message type is same as the request type
1355*5113495bSYour Name  * @msgLen: length of the entire request
1356*5113495bSYour Name  * @device_mode: Mode of the device(ex:STA, AP)
1357*5113495bSYour Name  * @adapterMacAddr: MAC address of the adapter
1358*5113495bSYour Name  * @peerMacAddr: MAC address of the connected peer
1359*5113495bSYour Name  */
1360*5113495bSYour Name typedef struct sAniDHCPStopInd {
1361*5113495bSYour Name 	uint16_t msgType;
1362*5113495bSYour Name 	uint16_t msgLen;
1363*5113495bSYour Name 	uint8_t device_mode;
1364*5113495bSYour Name 	struct qdf_mac_addr adapterMacAddr;
1365*5113495bSYour Name 	struct qdf_mac_addr peerMacAddr;
1366*5113495bSYour Name } tAniDHCPInd, *tpAniDHCPInd;
1367*5113495bSYour Name 
1368*5113495bSYour Name /**********************PE Statistics end*************************/
1369*5113495bSYour Name 
1370*5113495bSYour Name typedef struct sSirP2PNoaAttr {
1371*5113495bSYour Name #ifdef ANI_BIG_BYTE_ENDIAN
1372*5113495bSYour Name 	uint32_t index:8;
1373*5113495bSYour Name 	uint32_t oppPsFlag:1;
1374*5113495bSYour Name 	uint32_t ctWin:7;
1375*5113495bSYour Name 	uint32_t rsvd1:16;
1376*5113495bSYour Name #else
1377*5113495bSYour Name 	uint32_t rsvd1:16;
1378*5113495bSYour Name 	uint32_t ctWin:7;
1379*5113495bSYour Name 	uint32_t oppPsFlag:1;
1380*5113495bSYour Name 	uint32_t index:8;
1381*5113495bSYour Name #endif
1382*5113495bSYour Name 
1383*5113495bSYour Name #ifdef ANI_BIG_BYTE_ENDIAN
1384*5113495bSYour Name 	uint32_t uNoa1IntervalCnt:8;
1385*5113495bSYour Name 	uint32_t rsvd2:24;
1386*5113495bSYour Name #else
1387*5113495bSYour Name 	uint32_t rsvd2:24;
1388*5113495bSYour Name 	uint32_t uNoa1IntervalCnt:8;
1389*5113495bSYour Name #endif
1390*5113495bSYour Name 	uint32_t uNoa1Duration;
1391*5113495bSYour Name 	uint32_t uNoa1Interval;
1392*5113495bSYour Name 	uint32_t uNoa1StartTime;
1393*5113495bSYour Name 
1394*5113495bSYour Name #ifdef ANI_BIG_BYTE_ENDIAN
1395*5113495bSYour Name 	uint32_t uNoa2IntervalCnt:8;
1396*5113495bSYour Name 	uint32_t rsvd3:24;
1397*5113495bSYour Name #else
1398*5113495bSYour Name 	uint32_t rsvd3:24;
1399*5113495bSYour Name 	uint32_t uNoa2IntervalCnt:8;
1400*5113495bSYour Name #endif
1401*5113495bSYour Name 	uint32_t uNoa2Duration;
1402*5113495bSYour Name 	uint32_t uNoa2Interval;
1403*5113495bSYour Name 	uint32_t uNoa2StartTime;
1404*5113495bSYour Name } tSirP2PNoaAttr, *tpSirP2PNoaAttr;
1405*5113495bSYour Name 
1406*5113495bSYour Name typedef struct sSirTclasInfo {
1407*5113495bSYour Name 	tSirMacTclasIE tclas;
1408*5113495bSYour Name 	uint8_t version;        /* applies only for classifier type ip */
1409*5113495bSYour Name 	union {
1410*5113495bSYour Name 		tSirMacTclasParamEthernet eth;
1411*5113495bSYour Name 		tSirMacTclasParamIPv4 ipv4;
1412*5113495bSYour Name 		tSirMacTclasParamIPv6 ipv6;
1413*5113495bSYour Name 		tSirMacTclasParam8021dq t8021dq;
1414*5113495bSYour Name 	} qdf_packed tclasParams;
1415*5113495bSYour Name } qdf_packed tSirTclasInfo;
1416*5113495bSYour Name 
1417*5113495bSYour Name typedef struct sSirAddtsReqInfo {
1418*5113495bSYour Name 	uint8_t dialogToken;
1419*5113495bSYour Name 	struct mac_tspec_ie tspec;
1420*5113495bSYour Name 
1421*5113495bSYour Name 	uint8_t numTclas;       /* number of Tclas elements */
1422*5113495bSYour Name 	tSirTclasInfo tclasInfo[SIR_MAC_TCLASIE_MAXNUM];
1423*5113495bSYour Name 	uint8_t tclasProc;
1424*5113495bSYour Name #if defined(FEATURE_WLAN_ESE)
1425*5113495bSYour Name 	struct ese_tsrs_ie tsrsIE;
1426*5113495bSYour Name 	uint8_t tsrsPresent:1;
1427*5113495bSYour Name #endif
1428*5113495bSYour Name 	uint8_t wmeTspecPresent:1;
1429*5113495bSYour Name 	uint8_t wsmTspecPresent:1;
1430*5113495bSYour Name 	uint8_t lleTspecPresent:1;
1431*5113495bSYour Name 	uint8_t tclasProcPresent:1;
1432*5113495bSYour Name } tSirAddtsReqInfo, *tpSirAddtsReqInfo;
1433*5113495bSYour Name 
1434*5113495bSYour Name typedef struct sSirAddtsRspInfo {
1435*5113495bSYour Name 	uint8_t dialogToken;
1436*5113495bSYour Name 	enum wlan_status_code status;
1437*5113495bSYour Name 	tSirMacTsDelayIE delay;
1438*5113495bSYour Name 
1439*5113495bSYour Name 	struct mac_tspec_ie tspec;
1440*5113495bSYour Name 	uint8_t numTclas;       /* number of Tclas elements */
1441*5113495bSYour Name 	tSirTclasInfo tclasInfo[SIR_MAC_TCLASIE_MAXNUM];
1442*5113495bSYour Name 	uint8_t tclasProc;
1443*5113495bSYour Name 	tSirMacScheduleIE schedule;
1444*5113495bSYour Name #ifdef FEATURE_WLAN_ESE
1445*5113495bSYour Name 	struct ese_tsm_ie tsmIE;
1446*5113495bSYour Name 	uint8_t tsmPresent:1;
1447*5113495bSYour Name #endif
1448*5113495bSYour Name 	uint8_t wmeTspecPresent:1;
1449*5113495bSYour Name 	uint8_t wsmTspecPresent:1;
1450*5113495bSYour Name 	uint8_t lleTspecPresent:1;
1451*5113495bSYour Name 	uint8_t tclasProcPresent:1;
1452*5113495bSYour Name 	uint8_t schedulePresent:1;
1453*5113495bSYour Name } tSirAddtsRspInfo, *tpSirAddtsRspInfo;
1454*5113495bSYour Name 
1455*5113495bSYour Name /* / Add a tspec as defined */
1456*5113495bSYour Name typedef struct sSirAddtsReq {
1457*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_ADDTS_REQ */
1458*5113495bSYour Name 	uint16_t length;
1459*5113495bSYour Name 	uint8_t sessionId;      /* Session ID */
1460*5113495bSYour Name 	struct qdf_mac_addr bssid;      /* BSSID */
1461*5113495bSYour Name 	uint32_t timeout;       /* in ms */
1462*5113495bSYour Name 	uint8_t rspReqd;
1463*5113495bSYour Name 	tSirAddtsReqInfo req;
1464*5113495bSYour Name } tSirAddtsReq, *tpSirAddtsReq;
1465*5113495bSYour Name 
1466*5113495bSYour Name typedef struct sSirAddtsRsp {
1467*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_ADDTS_RSP */
1468*5113495bSYour Name 	uint16_t length;
1469*5113495bSYour Name 	uint8_t sessionId;      /* sme sessionId  Added for BT-AMP support */
1470*5113495bSYour Name 	uint32_t rc;            /* return code */
1471*5113495bSYour Name 	tSirAddtsRspInfo rsp;
1472*5113495bSYour Name } tSirAddtsRsp, *tpSirAddtsRsp;
1473*5113495bSYour Name 
1474*5113495bSYour Name typedef struct sSirDeltsReq {
1475*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_DELTS_REQ */
1476*5113495bSYour Name 	uint16_t length;
1477*5113495bSYour Name 	uint8_t sessionId;      /* Session ID */
1478*5113495bSYour Name 	struct qdf_mac_addr bssid;      /* BSSID */
1479*5113495bSYour Name 	uint16_t aid;           /* use 0 if macAddr is being specified */
1480*5113495bSYour Name 	struct qdf_mac_addr macaddr;    /* only on AP to specify the STA */
1481*5113495bSYour Name 	uint8_t rspReqd;
1482*5113495bSYour Name 	struct delts_req_info req;
1483*5113495bSYour Name } tSirDeltsReq, *tpSirDeltsReq;
1484*5113495bSYour Name 
1485*5113495bSYour Name typedef struct sSirDeltsRsp {
1486*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_DELTS_RSP */
1487*5113495bSYour Name 	uint16_t length;
1488*5113495bSYour Name 	uint8_t sessionId;
1489*5113495bSYour Name 	uint32_t rc;
1490*5113495bSYour Name 	uint16_t aid;           /* use 0 if macAddr is being specified */
1491*5113495bSYour Name 	struct qdf_mac_addr macaddr;    /* only on AP to specify the STA */
1492*5113495bSYour Name 	struct delts_req_info rsp;
1493*5113495bSYour Name } tSirDeltsRsp, *tpSirDeltsRsp;
1494*5113495bSYour Name 
1495*5113495bSYour Name typedef struct sSirAggrQosReqInfo {
1496*5113495bSYour Name 	uint16_t tspecIdx;
1497*5113495bSYour Name 	tSirAddtsReqInfo aggrAddTsInfo[QCA_WLAN_AC_ALL];
1498*5113495bSYour Name } tSirAggrQosReqInfo, *tpSirAggrQosReqInfo;
1499*5113495bSYour Name 
1500*5113495bSYour Name typedef struct sSirAggrQosReq {
1501*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_ADDTS_REQ */
1502*5113495bSYour Name 	uint16_t length;
1503*5113495bSYour Name 	uint8_t sessionId;      /* Session ID */
1504*5113495bSYour Name 	struct qdf_mac_addr bssid;      /* BSSID */
1505*5113495bSYour Name 	uint32_t timeout;       /* in ms */
1506*5113495bSYour Name 	uint8_t rspReqd;
1507*5113495bSYour Name 	tSirAggrQosReqInfo aggrInfo;
1508*5113495bSYour Name } tSirAggrQosReq;
1509*5113495bSYour Name 
1510*5113495bSYour Name typedef struct sSirAggrQosRspInfo {
1511*5113495bSYour Name 	uint16_t tspecIdx;
1512*5113495bSYour Name 	tSirAddtsRspInfo aggrRsp[QCA_WLAN_AC_ALL];
1513*5113495bSYour Name } tSirAggrQosRspInfo, *tpSirAggrQosRspInfo;
1514*5113495bSYour Name 
1515*5113495bSYour Name typedef struct sSirAggrQosRsp {
1516*5113495bSYour Name 	uint16_t messageType;
1517*5113495bSYour Name 	uint16_t length;
1518*5113495bSYour Name 	uint8_t sessionId;
1519*5113495bSYour Name 	tSirAggrQosRspInfo aggrInfo;
1520*5113495bSYour Name } tSirAggrQosRsp, *tpSirAggrQosRsp;
1521*5113495bSYour Name 
1522*5113495bSYour Name 
1523*5113495bSYour Name struct qos_map_set {
1524*5113495bSYour Name 	uint8_t present;
1525*5113495bSYour Name 	uint8_t num_dscp_exceptions;
1526*5113495bSYour Name 	uint8_t dscp_exceptions[QOS_MAP_MAX_EX][2];
1527*5113495bSYour Name 	uint8_t dscp_range[QOS_MAP_RANGE_NUM][2];
1528*5113495bSYour Name };
1529*5113495bSYour Name 
1530*5113495bSYour Name typedef struct sSmeMaxAssocInd {
1531*5113495bSYour Name 	uint16_t mesgType;      /* eWNI_SME_MAX_ASSOC_EXCEEDED */
1532*5113495bSYour Name 	uint16_t mesgLen;
1533*5113495bSYour Name 	uint8_t sessionId;
1534*5113495bSYour Name 	/* the new peer that got rejected max assoc limit reached */
1535*5113495bSYour Name 	struct qdf_mac_addr peer_mac;
1536*5113495bSYour Name } tSmeMaxAssocInd, *tpSmeMaxAssocInd;
1537*5113495bSYour Name 
1538*5113495bSYour Name #define SIR_MAX_NAME_SIZE 64
1539*5113495bSYour Name #define SIR_MAX_TEXT_SIZE 32
1540*5113495bSYour Name 
1541*5113495bSYour Name typedef struct sSirName {
1542*5113495bSYour Name 	uint8_t num_name;
1543*5113495bSYour Name 	uint8_t name[SIR_MAX_NAME_SIZE];
1544*5113495bSYour Name } tSirName;
1545*5113495bSYour Name 
1546*5113495bSYour Name typedef struct sSirText {
1547*5113495bSYour Name 	uint8_t num_text;
1548*5113495bSYour Name 	uint8_t text[SIR_MAX_TEXT_SIZE];
1549*5113495bSYour Name } tSirText;
1550*5113495bSYour Name 
1551*5113495bSYour Name #define SIR_WPS_PROBRSP_VER_PRESENT    0x00000001
1552*5113495bSYour Name #define SIR_WPS_PROBRSP_STATE_PRESENT    0x00000002
1553*5113495bSYour Name #define SIR_WPS_PROBRSP_APSETUPLOCK_PRESENT    0x00000004
1554*5113495bSYour Name #define SIR_WPS_PROBRSP_SELECTEDREGISTRA_PRESENT    0x00000008
1555*5113495bSYour Name #define SIR_WPS_PROBRSP_DEVICEPASSWORDID_PRESENT    0x00000010
1556*5113495bSYour Name #define SIR_WPS_PROBRSP_SELECTEDREGISTRACFGMETHOD_PRESENT    0x00000020
1557*5113495bSYour Name #define SIR_WPS_PROBRSP_RESPONSETYPE_PRESENT    0x00000040
1558*5113495bSYour Name #define SIR_WPS_PROBRSP_UUIDE_PRESENT    0x00000080
1559*5113495bSYour Name #define SIR_WPS_PROBRSP_MANUFACTURE_PRESENT    0x00000100
1560*5113495bSYour Name #define SIR_WPS_PROBRSP_MODELNAME_PRESENT    0x00000200
1561*5113495bSYour Name #define SIR_WPS_PROBRSP_MODELNUMBER_PRESENT    0x00000400
1562*5113495bSYour Name #define SIR_WPS_PROBRSP_SERIALNUMBER_PRESENT    0x00000800
1563*5113495bSYour Name #define SIR_WPS_PROBRSP_PRIMARYDEVICETYPE_PRESENT    0x00001000
1564*5113495bSYour Name #define SIR_WPS_PROBRSP_DEVICENAME_PRESENT    0x00002000
1565*5113495bSYour Name #define SIR_WPS_PROBRSP_CONFIGMETHODS_PRESENT    0x00004000
1566*5113495bSYour Name #define SIR_WPS_PROBRSP_RF_BANDS_PRESENT    0x00008000
1567*5113495bSYour Name 
1568*5113495bSYour Name typedef struct sSirWPSProbeRspIE {
1569*5113495bSYour Name 	uint32_t FieldPresent;
1570*5113495bSYour Name 	uint32_t Version;       /* Version. 0x10 = version 1.0, 0x11 = etc. */
1571*5113495bSYour Name 	uint32_t wpsState;      /* 1 = unconfigured, 2 = configured. */
1572*5113495bSYour Name 	bool APSetupLocked;     /* Must be included if value is true */
1573*5113495bSYour Name 	/*
1574*5113495bSYour Name 	 * BOOL:  indicates if the user has recently activated a Registrar to
1575*5113495bSYour Name 	 * add an Enrollee.
1576*5113495bSYour Name 	 */
1577*5113495bSYour Name 	bool SelectedRegistra;
1578*5113495bSYour Name 	uint16_t DevicePasswordID;      /* Device Password ID */
1579*5113495bSYour Name 	/* Selected Registrar config method */
1580*5113495bSYour Name 	uint16_t SelectedRegistraCfgMethod;
1581*5113495bSYour Name 	uint8_t ResponseType;   /* Response type */
1582*5113495bSYour Name 	uint8_t UUID_E[16];     /* Unique identifier of the AP. */
1583*5113495bSYour Name 	tSirName Manufacture;
1584*5113495bSYour Name 	tSirText ModelName;
1585*5113495bSYour Name 	tSirText ModelNumber;
1586*5113495bSYour Name 	tSirText SerialNumber;
1587*5113495bSYour Name 	/* Device Category ID: 1Computer, 2Input Device, ... */
1588*5113495bSYour Name 	uint32_t PrimaryDeviceCategory;
1589*5113495bSYour Name 	/* Vendor specific OUI for Device Sub Category */
1590*5113495bSYour Name 	uint8_t PrimaryDeviceOUI[4];
1591*5113495bSYour Name 	/*
1592*5113495bSYour Name 	   Device Sub Category ID: 1-PC, 2-Server if Device Category ID
1593*5113495bSYour Name 	 * is computer
1594*5113495bSYour Name 	 */
1595*5113495bSYour Name 	uint32_t DeviceSubCategory;
1596*5113495bSYour Name 	tSirText DeviceName;
1597*5113495bSYour Name 	uint16_t ConfigMethod;  /* Configuration method */
1598*5113495bSYour Name 	uint8_t RFBand;         /* RF bands available on the AP */
1599*5113495bSYour Name } tSirWPSProbeRspIE;
1600*5113495bSYour Name 
1601*5113495bSYour Name #define SIR_WPS_BEACON_VER_PRESENT    0x00000001
1602*5113495bSYour Name #define SIR_WPS_BEACON_STATE_PRESENT    0x00000002
1603*5113495bSYour Name #define SIR_WPS_BEACON_APSETUPLOCK_PRESENT    0x00000004
1604*5113495bSYour Name #define SIR_WPS_BEACON_SELECTEDREGISTRA_PRESENT    0x00000008
1605*5113495bSYour Name #define SIR_WPS_BEACON_DEVICEPASSWORDID_PRESENT    0x00000010
1606*5113495bSYour Name #define SIR_WPS_BEACON_SELECTEDREGISTRACFGMETHOD_PRESENT    0x00000020
1607*5113495bSYour Name #define SIR_WPS_BEACON_UUIDE_PRESENT    0x00000080
1608*5113495bSYour Name #define SIR_WPS_BEACON_RF_BANDS_PRESENT    0x00000100
1609*5113495bSYour Name #define SIR_WPS_UUID_LEN 16
1610*5113495bSYour Name 
1611*5113495bSYour Name typedef struct sSirWPSBeaconIE {
1612*5113495bSYour Name 	uint32_t FieldPresent;
1613*5113495bSYour Name 	uint32_t Version;       /* Version. 0x10 = version 1.0, 0x11 = etc. */
1614*5113495bSYour Name 	uint32_t wpsState;      /* 1 = unconfigured, 2 = configured. */
1615*5113495bSYour Name 	bool APSetupLocked;     /* Must be included if value is true */
1616*5113495bSYour Name 	/*
1617*5113495bSYour Name 	 * BOOL:  indicates if the user has recently activated a Registrar to
1618*5113495bSYour Name 	 * add an Enrollee.
1619*5113495bSYour Name 	 */
1620*5113495bSYour Name 	bool SelectedRegistra;
1621*5113495bSYour Name 	uint16_t DevicePasswordID;      /* Device Password ID */
1622*5113495bSYour Name 	/* Selected Registrar config method */
1623*5113495bSYour Name 	uint16_t SelectedRegistraCfgMethod;
1624*5113495bSYour Name 	uint8_t UUID_E[SIR_WPS_UUID_LEN];     /* Unique identifier of the AP. */
1625*5113495bSYour Name 	uint8_t RFBand;         /* RF bands available on the AP */
1626*5113495bSYour Name } tSirWPSBeaconIE;
1627*5113495bSYour Name 
1628*5113495bSYour Name typedef struct sSirAPWPSIEs {
1629*5113495bSYour Name 	tSirWPSProbeRspIE SirWPSProbeRspIE;     /*WPS Set Probe Response IE */
1630*5113495bSYour Name 	tSirWPSBeaconIE SirWPSBeaconIE; /*WPS Set Beacon IE */
1631*5113495bSYour Name } tSirAPWPSIEs, *tpSiriAPWPSIEs;
1632*5113495bSYour Name 
1633*5113495bSYour Name struct update_config {
1634*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_UPDATE_CONFIG */
1635*5113495bSYour Name 	uint16_t length;
1636*5113495bSYour Name 	uint8_t vdev_id;
1637*5113495bSYour Name 	uint16_t capab;
1638*5113495bSYour Name 	uint32_t value;
1639*5113495bSYour Name };
1640*5113495bSYour Name 
1641*5113495bSYour Name /*
1642*5113495bSYour Name  * enum sir_update_session_param_type - session param type
1643*5113495bSYour Name  * @SIR_PARAM_SSID_HIDDEN: ssidHidden parameter
1644*5113495bSYour Name  */
1645*5113495bSYour Name enum sir_update_session_param_type {
1646*5113495bSYour Name 	SIR_PARAM_SSID_HIDDEN,
1647*5113495bSYour Name };
1648*5113495bSYour Name 
1649*5113495bSYour Name /*
1650*5113495bSYour Name  * struct sir_update_session_param
1651*5113495bSYour Name  * @message_type: SME message type
1652*5113495bSYour Name  * @length: size of struct sir_update_session_param
1653*5113495bSYour Name  * @vdev_id: vdev ID
1654*5113495bSYour Name  * @param_type: parameter to be updated
1655*5113495bSYour Name  * @param_val: Parameter value to update
1656*5113495bSYour Name  */
1657*5113495bSYour Name struct sir_update_session_param {
1658*5113495bSYour Name 	uint16_t message_type;
1659*5113495bSYour Name 	uint16_t length;
1660*5113495bSYour Name 	uint8_t vdev_id;
1661*5113495bSYour Name 	uint32_t param_type;
1662*5113495bSYour Name 	uint32_t param_val;
1663*5113495bSYour Name };
1664*5113495bSYour Name 
1665*5113495bSYour Name /**
1666*5113495bSYour Name  * struct sir_set_he_bss_color
1667*5113495bSYour Name  * @message_type: SME message type
1668*5113495bSYour Name  * @length: size of struct sir_set_he_bss_color
1669*5113495bSYour Name  * @vdev_id: vdev ID
1670*5113495bSYour Name  * @bss_color: bss color value
1671*5113495bSYour Name  */
1672*5113495bSYour Name struct sir_set_he_bss_color {
1673*5113495bSYour Name 	uint16_t message_type;
1674*5113495bSYour Name 	uint16_t length;
1675*5113495bSYour Name 	uint8_t vdev_id;
1676*5113495bSYour Name 	uint8_t bss_color;
1677*5113495bSYour Name };
1678*5113495bSYour Name 
1679*5113495bSYour Name /**
1680*5113495bSYour Name  * struct sir_cfg_obss_scan
1681*5113495bSYour Name  * @message_type: SME message type
1682*5113495bSYour Name  * @length: size of struct sir_cfg_obss_scan
1683*5113495bSYour Name  * @vdev_id: vdev ID
1684*5113495bSYour Name  * @is_scan_reconfig: true for NDP session
1685*5113495bSYour Name  */
1686*5113495bSYour Name struct sir_cfg_obss_scan {
1687*5113495bSYour Name 	uint16_t message_type;
1688*5113495bSYour Name 	uint16_t length;
1689*5113495bSYour Name 	uint8_t vdev_id;
1690*5113495bSYour Name 	bool is_scan_reconfig;
1691*5113495bSYour Name };
1692*5113495bSYour Name 
1693*5113495bSYour Name /**
1694*5113495bSYour Name  * struct sir_create_session - Used for creating session in monitor mode
1695*5113495bSYour Name  * @type: SME host message type.
1696*5113495bSYour Name  * @msg_len: Length of the message.
1697*5113495bSYour Name  * @bss_id: bss_id for creating the session.
1698*5113495bSYour Name  */
1699*5113495bSYour Name struct sir_create_session {
1700*5113495bSYour Name 	uint16_t type;
1701*5113495bSYour Name 	uint16_t msg_len;
1702*5113495bSYour Name 	uint8_t vdev_id;
1703*5113495bSYour Name 	struct qdf_mac_addr bss_id;
1704*5113495bSYour Name };
1705*5113495bSYour Name 
1706*5113495bSYour Name /**
1707*5113495bSYour Name  * struct sir_delete_session - Used for deleting session in monitor mode
1708*5113495bSYour Name  * @type: SME host message type.
1709*5113495bSYour Name  * @msg_len: Length of the message.
1710*5113495bSYour Name  * @vdev_id: vdev id.
1711*5113495bSYour Name  */
1712*5113495bSYour Name struct sir_delete_session {
1713*5113495bSYour Name 	uint16_t type;
1714*5113495bSYour Name 	uint16_t msg_len;
1715*5113495bSYour Name 	uint8_t vdev_id;
1716*5113495bSYour Name };
1717*5113495bSYour Name 
1718*5113495bSYour Name #ifdef QCA_HT_2040_COEX
1719*5113495bSYour Name struct set_ht2040_mode {
1720*5113495bSYour Name 	uint16_t messageType;
1721*5113495bSYour Name 	uint16_t length;
1722*5113495bSYour Name 	uint8_t cbMode;
1723*5113495bSYour Name 	bool obssEnabled;
1724*5113495bSYour Name 	struct qdf_mac_addr bssid;
1725*5113495bSYour Name 	uint8_t sessionId;      /* Session ID */
1726*5113495bSYour Name };
1727*5113495bSYour Name #endif
1728*5113495bSYour Name 
1729*5113495bSYour Name #define SIR_WPS_PBC_WALK_TIME   120     /* 120 Second */
1730*5113495bSYour Name 
1731*5113495bSYour Name typedef struct sSirWPSPBCSession {
1732*5113495bSYour Name 	struct sSirWPSPBCSession *next;
1733*5113495bSYour Name 	struct qdf_mac_addr addr;
1734*5113495bSYour Name 	uint8_t uuid_e[SIR_WPS_UUID_LEN];
1735*5113495bSYour Name 	uint32_t timestamp;
1736*5113495bSYour Name } tSirWPSPBCSession;
1737*5113495bSYour Name 
1738*5113495bSYour Name typedef struct sSirWPSPBCProbeReq {
1739*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
1740*5113495bSYour Name 	uint16_t probeReqIELen;
1741*5113495bSYour Name 	uint8_t probeReqIE[512];
1742*5113495bSYour Name } tSirWPSPBCProbeReq, *tpSirWPSPBCProbeReq;
1743*5113495bSYour Name 
1744*5113495bSYour Name /* probereq from peer, when wsc is enabled */
1745*5113495bSYour Name typedef struct sSirSmeProbeReqInd {
1746*5113495bSYour Name 	uint16_t messageType;   /*  eWNI_SME_WPS_PBC_PROBE_REQ_IND */
1747*5113495bSYour Name 	uint16_t length;
1748*5113495bSYour Name 	uint8_t sessionId;
1749*5113495bSYour Name 	struct qdf_mac_addr bssid;
1750*5113495bSYour Name 	tSirWPSPBCProbeReq WPSPBCProbeReq;
1751*5113495bSYour Name } tSirSmeProbeReqInd, *tpSirSmeProbeReqInd;
1752*5113495bSYour Name 
1753*5113495bSYour Name #define SIR_ROAM_SCAN_MAX_PB_REQ_SIZE    450
1754*5113495bSYour Name /* Occupied channel list remains static */
1755*5113495bSYour Name #define CHANNEL_LIST_STATIC                   1
1756*5113495bSYour Name /* Occupied channel list can be dynamic */
1757*5113495bSYour Name #define CHANNEL_LIST_DYNAMIC                  2
1758*5113495bSYour Name 
1759*5113495bSYour Name /* SME -> HAL - This is the host offload request. */
1760*5113495bSYour Name #define SIR_IPV6_NS_OFFLOAD                         2
1761*5113495bSYour Name #define SIR_OFFLOAD_DISABLE                         0
1762*5113495bSYour Name #define SIR_OFFLOAD_ENABLE                          1
1763*5113495bSYour Name 
1764*5113495bSYour Name struct sir_host_offload_req {
1765*5113495bSYour Name 	uint8_t offloadType;
1766*5113495bSYour Name 	uint8_t enableOrDisable;
1767*5113495bSYour Name 	uint32_t num_ns_offload_count;
1768*5113495bSYour Name 	union {
1769*5113495bSYour Name 		uint8_t hostIpv4Addr[QDF_IPV4_ADDR_SIZE];
1770*5113495bSYour Name 		uint8_t hostIpv6Addr[QDF_IPV6_ADDR_SIZE];
1771*5113495bSYour Name 	} params;
1772*5113495bSYour Name 	struct qdf_mac_addr bssid;
1773*5113495bSYour Name };
1774*5113495bSYour Name 
1775*5113495bSYour Name /* Packet Types. */
1776*5113495bSYour Name #define SIR_KEEP_ALIVE_NULL_PKT              1
1777*5113495bSYour Name #define SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP     2
1778*5113495bSYour Name #define SIR_KEEP_ALIVE_MGMT_FRAME            5
1779*5113495bSYour Name 
1780*5113495bSYour Name /* Keep Alive request. */
1781*5113495bSYour Name struct keep_alive_req {
1782*5113495bSYour Name 	uint8_t packetType;
1783*5113495bSYour Name 	uint32_t timePeriod;
1784*5113495bSYour Name 	tSirIpv4Addr hostIpv4Addr;
1785*5113495bSYour Name 	tSirIpv4Addr destIpv4Addr;
1786*5113495bSYour Name 	struct qdf_mac_addr dest_macaddr;
1787*5113495bSYour Name 	struct qdf_mac_addr bssid;
1788*5113495bSYour Name 	uint8_t sessionId;
1789*5113495bSYour Name };
1790*5113495bSYour Name 
1791*5113495bSYour Name /**
1792*5113495bSYour Name  * enum rxmgmt_flags - flags for received management frame.
1793*5113495bSYour Name  * @RXMGMT_FLAG_NONE: Default value to indicate no flags are set.
1794*5113495bSYour Name  * @RXMGMT_FLAG_EXTERNAL_AUTH: frame can be used for external authentication
1795*5113495bSYour Name  *			       by upper layers.
1796*5113495bSYour Name  */
1797*5113495bSYour Name enum rxmgmt_flags {
1798*5113495bSYour Name 	RXMGMT_FLAG_NONE,
1799*5113495bSYour Name 	RXMGMT_FLAG_EXTERNAL_AUTH = 1 << 1,
1800*5113495bSYour Name };
1801*5113495bSYour Name 
1802*5113495bSYour Name typedef struct sSirSmeMgmtFrameInd {
1803*5113495bSYour Name 	uint16_t frame_len;
1804*5113495bSYour Name 	uint32_t rx_freq;
1805*5113495bSYour Name 	uint8_t sessionId;
1806*5113495bSYour Name 	uint8_t frameType;
1807*5113495bSYour Name 	int8_t rxRssi;
1808*5113495bSYour Name 	enum rxmgmt_flags rx_flags;
1809*5113495bSYour Name 	QDF_FLEX_ARRAY(uint8_t, frameBuf);
1810*5113495bSYour Name } tSirSmeMgmtFrameInd, *tpSirSmeMgmtFrameInd;
1811*5113495bSYour Name 
1812*5113495bSYour Name typedef void (*sir_mgmt_frame_ind_callback)(tSirSmeMgmtFrameInd *frame_ind);
1813*5113495bSYour Name /**
1814*5113495bSYour Name  * struct sir_sme_mgmt_frame_cb_req - Register a
1815*5113495bSYour Name  * management frame callback req
1816*5113495bSYour Name  *
1817*5113495bSYour Name  * @message_type: message id
1818*5113495bSYour Name  * @length: msg length
1819*5113495bSYour Name  * @callback: callback for management frame indication
1820*5113495bSYour Name  */
1821*5113495bSYour Name struct sir_sme_mgmt_frame_cb_req {
1822*5113495bSYour Name 	uint16_t message_type;
1823*5113495bSYour Name 	uint16_t length;
1824*5113495bSYour Name 	sir_mgmt_frame_ind_callback callback;
1825*5113495bSYour Name };
1826*5113495bSYour Name 
1827*5113495bSYour Name typedef struct sSirSmeUnprotMgmtFrameInd {
1828*5113495bSYour Name 	uint8_t sessionId;
1829*5113495bSYour Name 	uint8_t frameType;
1830*5113495bSYour Name 	uint8_t frameLen;
1831*5113495bSYour Name 	QDF_FLEX_ARRAY(uint8_t, frameBuf);
1832*5113495bSYour Name } tSirSmeUnprotMgmtFrameInd, *tpSirSmeUnprotMgmtFrameInd;
1833*5113495bSYour Name 
1834*5113495bSYour Name #ifdef WLAN_FEATURE_EXTWOW_SUPPORT
1835*5113495bSYour Name 
1836*5113495bSYour Name typedef enum ext_wow_type {
1837*5113495bSYour Name 	EXT_WOW_TYPE_APP_TYPE1, /* wow type: only enable wakeup for app type1 */
1838*5113495bSYour Name 	EXT_WOW_TYPE_APP_TYPE2, /* wow type: only enable wakeup for app type2 */
1839*5113495bSYour Name 	EXT_WOW_TYPE_APP_TYPE1_2,  /* wow type: enable wakeup for app type1&2 */
1840*5113495bSYour Name } EXT_WOW_TYPE;
1841*5113495bSYour Name 
1842*5113495bSYour Name typedef struct {
1843*5113495bSYour Name 	uint8_t vdev_id;
1844*5113495bSYour Name 	EXT_WOW_TYPE type;
1845*5113495bSYour Name 	uint32_t wakeup_pin_num;
1846*5113495bSYour Name } tSirExtWoWParams, *tpSirExtWoWParams;
1847*5113495bSYour Name 
1848*5113495bSYour Name typedef struct {
1849*5113495bSYour Name 	uint8_t vdev_id;
1850*5113495bSYour Name 	struct qdf_mac_addr wakee_mac_addr;
1851*5113495bSYour Name 	uint8_t identification_id[8];
1852*5113495bSYour Name 	uint8_t password[16];
1853*5113495bSYour Name 	uint32_t id_length;
1854*5113495bSYour Name 	uint32_t pass_length;
1855*5113495bSYour Name } tSirAppType1Params, *tpSirAppType1Params;
1856*5113495bSYour Name 
1857*5113495bSYour Name typedef struct {
1858*5113495bSYour Name 	uint8_t vdev_id;
1859*5113495bSYour Name 
1860*5113495bSYour Name 	uint8_t rc4_key[16];
1861*5113495bSYour Name 	uint32_t rc4_key_len;
1862*5113495bSYour Name 
1863*5113495bSYour Name 	/** ip header parameter */
1864*5113495bSYour Name 	uint32_t ip_id;         /* NC id */
1865*5113495bSYour Name 	uint32_t ip_device_ip;  /* NC IP address */
1866*5113495bSYour Name 	uint32_t ip_server_ip;  /* Push server IP address */
1867*5113495bSYour Name 
1868*5113495bSYour Name 	/** tcp header parameter */
1869*5113495bSYour Name 	uint16_t tcp_src_port;  /* NC TCP port */
1870*5113495bSYour Name 	uint16_t tcp_dst_port;  /* Push server TCP port */
1871*5113495bSYour Name 	uint32_t tcp_seq;
1872*5113495bSYour Name 	uint32_t tcp_ack_seq;
1873*5113495bSYour Name 
1874*5113495bSYour Name 	uint32_t keepalive_init;        /* Initial ping interval */
1875*5113495bSYour Name 	uint32_t keepalive_min; /* Minimum ping interval */
1876*5113495bSYour Name 	uint32_t keepalive_max; /* Maximum ping interval */
1877*5113495bSYour Name 	uint32_t keepalive_inc; /* Increment of ping interval */
1878*5113495bSYour Name 
1879*5113495bSYour Name 	struct qdf_mac_addr gateway_mac;
1880*5113495bSYour Name 	uint32_t tcp_tx_timeout_val;
1881*5113495bSYour Name 	uint32_t tcp_rx_timeout_val;
1882*5113495bSYour Name } tSirAppType2Params, *tpSirAppType2Params;
1883*5113495bSYour Name #endif
1884*5113495bSYour Name 
1885*5113495bSYour Name #ifdef WLAN_FEATURE_ROAM_OFFLOAD
1886*5113495bSYour Name typedef struct {
1887*5113495bSYour Name 	uint8_t acvo_uapsd:1;
1888*5113495bSYour Name 	uint8_t acvi_uapsd:1;
1889*5113495bSYour Name 	uint8_t acbk_uapsd:1;
1890*5113495bSYour Name 	uint8_t acbe_uapsd:1;
1891*5113495bSYour Name 	uint8_t reserved:4;
1892*5113495bSYour Name } tSirAcUapsd, *tpSirAcUapsd;
1893*5113495bSYour Name #endif
1894*5113495bSYour Name 
1895*5113495bSYour Name /**
1896*5113495bSYour Name  * struct pmkid_mode_bits - Bit flags for PMKID usage in RSN IE
1897*5113495bSYour Name  * @fw_okc: Opportunistic key caching enable in firmware
1898*5113495bSYour Name  * @fw_pmksa_cache: PMKSA caching enable in firmware, remember previously
1899*5113495bSYour Name  *                  visited BSSID/PMK pairs
1900*5113495bSYour Name  */
1901*5113495bSYour Name struct pmkid_mode_bits {
1902*5113495bSYour Name 	uint32_t fw_okc:1;
1903*5113495bSYour Name 	uint32_t fw_pmksa_cache:1;
1904*5113495bSYour Name 	uint32_t unused:30;
1905*5113495bSYour Name };
1906*5113495bSYour Name 
1907*5113495bSYour Name /**
1908*5113495bSYour Name  * struct roam_init_params - Firmware roam module initialization parameters
1909*5113495bSYour Name  * @vdev_id: vdev for which the roaming has to be enabled/disabled
1910*5113495bSYour Name  * @enable:  flag to init/deinit roam module
1911*5113495bSYour Name  */
1912*5113495bSYour Name struct roam_init_params {
1913*5113495bSYour Name 	uint8_t vdev_id;
1914*5113495bSYour Name 	uint8_t enable;
1915*5113495bSYour Name };
1916*5113495bSYour Name 
1917*5113495bSYour Name /**
1918*5113495bSYour Name  * struct roam_sync_timeout_timer_info - Info related to roam sync timer
1919*5113495bSYour Name  * @vdev_id: Vdev id for which host waiting roam sync ind from fw
1920*5113495bSYour Name  */
1921*5113495bSYour Name struct roam_sync_timeout_timer_info {
1922*5113495bSYour Name 	uint8_t vdev_id;
1923*5113495bSYour Name };
1924*5113495bSYour Name 
1925*5113495bSYour Name struct roam_offload_scan_rsp {
1926*5113495bSYour Name 	uint8_t sessionId;
1927*5113495bSYour Name 	uint32_t reason;
1928*5113495bSYour Name };
1929*5113495bSYour Name 
1930*5113495bSYour Name /*---------------------------------------------------------------------------
1931*5113495bSYour Name    Packet Filtering Parameters
1932*5113495bSYour Name    ---------------------------------------------------------------------------*/
1933*5113495bSYour Name #define    SIR_MAX_FILTER_TEST_DATA_LEN       8
1934*5113495bSYour Name #define    SIR_MAX_FILTER_TEST_DATA_OFFSET  200
1935*5113495bSYour Name #define    SIR_MAX_NUM_MULTICAST_ADDRESS    240
1936*5113495bSYour Name 
1937*5113495bSYour Name /* */
1938*5113495bSYour Name /* Multicast Address List Parameters */
1939*5113495bSYour Name /* */
1940*5113495bSYour Name typedef struct sSirRcvFltMcAddrList {
1941*5113495bSYour Name 	uint32_t ulMulticastAddrCnt;
1942*5113495bSYour Name 	struct qdf_mac_addr multicastAddr[SIR_MAX_NUM_MULTICAST_ADDRESS];
1943*5113495bSYour Name 	struct qdf_mac_addr self_macaddr;
1944*5113495bSYour Name 	struct qdf_mac_addr bssid;
1945*5113495bSYour Name 	uint8_t action;
1946*5113495bSYour Name } tSirRcvFltMcAddrList, *tpSirRcvFltMcAddrList;
1947*5113495bSYour Name 
1948*5113495bSYour Name /**
1949*5113495bSYour Name  * struct sir_wifi_start_log - Structure to store the params sent to start/
1950*5113495bSYour Name  * stop logging
1951*5113495bSYour Name  * @name:          Attribute which indicates the type of logging like per packet
1952*5113495bSYour Name  *                 statistics, connectivity etc.
1953*5113495bSYour Name  * @verbose_level: Verbose level which can be 0,1,2,3
1954*5113495bSYour Name  * @is_iwpriv_command: Set 1 for iwpriv command
1955*5113495bSYour Name  * @ini_triggered: triggered using ini
1956*5113495bSYour Name  * @user_triggered: triggered by user
1957*5113495bSYour Name  * @size: pktlog buffer size
1958*5113495bSYour Name  * @is_pktlog_buff_clear: clear the pktlog buffer
1959*5113495bSYour Name  */
1960*5113495bSYour Name struct sir_wifi_start_log {
1961*5113495bSYour Name 	uint32_t ring_id;
1962*5113495bSYour Name 	uint32_t verbose_level;
1963*5113495bSYour Name 	uint32_t is_iwpriv_command;
1964*5113495bSYour Name 	bool ini_triggered;
1965*5113495bSYour Name 	uint8_t user_triggered;
1966*5113495bSYour Name 	int size;
1967*5113495bSYour Name 	bool is_pktlog_buff_clear;
1968*5113495bSYour Name };
1969*5113495bSYour Name 
1970*5113495bSYour Name 
1971*5113495bSYour Name /**
1972*5113495bSYour Name  * struct sir_pcl_list - Format of PCL
1973*5113495bSYour Name  * @pcl_list: List of preferred channels
1974*5113495bSYour Name  * @weight_list: Weights of the PCL
1975*5113495bSYour Name  * @pcl_len: Number of channels in the PCL
1976*5113495bSYour Name  */
1977*5113495bSYour Name struct sir_pcl_list {
1978*5113495bSYour Name 	uint32_t pcl_len;
1979*5113495bSYour Name 	uint8_t pcl_list[NUM_CHANNELS];
1980*5113495bSYour Name 	uint8_t weight_list[NUM_CHANNELS];
1981*5113495bSYour Name };
1982*5113495bSYour Name 
1983*5113495bSYour Name /**
1984*5113495bSYour Name  * struct sir_pcl_chan_weights - Params to get the valid weighed list
1985*5113495bSYour Name  * @pcl_list: Preferred channel list already sorted in the order of preference
1986*5113495bSYour Name  * @pcl_len: Length of the PCL
1987*5113495bSYour Name  * @saved_chan_list: Valid channel list updated as part of
1988*5113495bSYour Name  * WMA_UPDATE_CHAN_LIST_REQ
1989*5113495bSYour Name  * @saved_num_chan: Length of the valid channel list
1990*5113495bSYour Name  * @weighed_valid_list: Weights of the valid channel list. This will have one
1991*5113495bSYour Name  * to one mapping with valid_chan_list. FW expects channel order and size to be
1992*5113495bSYour Name  * as per the list provided in WMI_SCAN_CHAN_LIST_CMDID.
1993*5113495bSYour Name  * @weight_list: Weights assigned by policy manager
1994*5113495bSYour Name  */
1995*5113495bSYour Name struct sir_pcl_chan_weights {
1996*5113495bSYour Name 	uint8_t pcl_list[NUM_CHANNELS];
1997*5113495bSYour Name 	uint32_t pcl_len;
1998*5113495bSYour Name 	uint8_t saved_chan_list[NUM_CHANNELS];
1999*5113495bSYour Name 	uint32_t saved_num_chan;
2000*5113495bSYour Name 	uint8_t weighed_valid_list[NUM_CHANNELS];
2001*5113495bSYour Name 	uint8_t weight_list[NUM_CHANNELS];
2002*5113495bSYour Name };
2003*5113495bSYour Name 
2004*5113495bSYour Name /**
2005*5113495bSYour Name  * struct sir_hw_mode_params - HW mode params
2006*5113495bSYour Name  * @mac0_tx_ss: MAC0 Tx spatial stream
2007*5113495bSYour Name  * @mac0_rx_ss: MAC0 Rx spatial stream
2008*5113495bSYour Name  * @mac1_tx_ss: MAC1 Tx spatial stream
2009*5113495bSYour Name  * @mac1_rx_ss: MAC1 Rx spatial stream
2010*5113495bSYour Name  * @mac0_bw: MAC0 bandwidth
2011*5113495bSYour Name  * @mac1_bw: MAC1 bandwidth
2012*5113495bSYour Name  * @dbs_cap: DBS capabality
2013*5113495bSYour Name  * @agile_dfs_cap: Agile DFS capabality
2014*5113495bSYour Name  */
2015*5113495bSYour Name struct sir_hw_mode_params {
2016*5113495bSYour Name 	uint8_t mac0_tx_ss;
2017*5113495bSYour Name 	uint8_t mac0_rx_ss;
2018*5113495bSYour Name 	uint8_t mac1_tx_ss;
2019*5113495bSYour Name 	uint8_t mac1_rx_ss;
2020*5113495bSYour Name 	uint8_t mac0_bw;
2021*5113495bSYour Name 	uint8_t mac1_bw;
2022*5113495bSYour Name 	uint8_t dbs_cap;
2023*5113495bSYour Name 	uint8_t agile_dfs_cap;
2024*5113495bSYour Name 	uint8_t sbs_cap;
2025*5113495bSYour Name };
2026*5113495bSYour Name 
2027*5113495bSYour Name /**
2028*5113495bSYour Name  * struct sir_set_hw_mode_resp - HW mode response
2029*5113495bSYour Name  * @status: Status
2030*5113495bSYour Name  * @cfgd_hw_mode_index: Configured HW mode index
2031*5113495bSYour Name  * @num_vdev_mac_entries: Number of vdev-mac id entries
2032*5113495bSYour Name  * @vdev_mac_map: vdev id-mac id map
2033*5113495bSYour Name  */
2034*5113495bSYour Name struct sir_set_hw_mode_resp {
2035*5113495bSYour Name 	uint32_t status;
2036*5113495bSYour Name 	uint32_t cfgd_hw_mode_index;
2037*5113495bSYour Name 	uint32_t num_vdev_mac_entries;
2038*5113495bSYour Name 	struct policy_mgr_vdev_mac_map vdev_mac_map[MAX_VDEV_SUPPORTED];
2039*5113495bSYour Name };
2040*5113495bSYour Name 
2041*5113495bSYour Name /**
2042*5113495bSYour Name  * struct sir_dual_mac_config_resp - Dual MAC config response
2043*5113495bSYour Name  * @status: Status of setting the dual mac configuration
2044*5113495bSYour Name  */
2045*5113495bSYour Name struct sir_dual_mac_config_resp {
2046*5113495bSYour Name 	uint32_t status;
2047*5113495bSYour Name };
2048*5113495bSYour Name 
2049*5113495bSYour Name /**
2050*5113495bSYour Name  * enum set_antenna_mode_status - Status of set antenna mode
2051*5113495bSYour Name  * command
2052*5113495bSYour Name  * @SET_ANTENNA_MODE_STATUS_OK: command successful
2053*5113495bSYour Name  * @SET_ANTENNA_MODE_STATUS_EINVAL: invalid antenna mode
2054*5113495bSYour Name  * @SET_ANTENNA_MODE_STATUS_ECANCELED: mode change cancelled
2055*5113495bSYour Name  * @SET_ANTENNA_MODE_STATUS_ENOTSUP: mode not supported
2056*5113495bSYour Name  */
2057*5113495bSYour Name enum set_antenna_mode_status {
2058*5113495bSYour Name 	SET_ANTENNA_MODE_STATUS_OK,
2059*5113495bSYour Name 	SET_ANTENNA_MODE_STATUS_EINVAL,
2060*5113495bSYour Name 	SET_ANTENNA_MODE_STATUS_ECANCELED,
2061*5113495bSYour Name 	SET_ANTENNA_MODE_STATUS_ENOTSUP,
2062*5113495bSYour Name };
2063*5113495bSYour Name 
2064*5113495bSYour Name /**
2065*5113495bSYour Name  * struct sir_antenna_mode_resp - set antenna mode response
2066*5113495bSYour Name  * @status: Status of setting the antenna mode
2067*5113495bSYour Name  */
2068*5113495bSYour Name struct sir_antenna_mode_resp {
2069*5113495bSYour Name 	enum set_antenna_mode_status status;
2070*5113495bSYour Name };
2071*5113495bSYour Name 
2072*5113495bSYour Name typedef struct sSirWlanExcludeUnencryptParam {
2073*5113495bSYour Name 	bool excludeUnencrypt;
2074*5113495bSYour Name 	struct qdf_mac_addr bssid;
2075*5113495bSYour Name } tSirWlanExcludeUnencryptParam, *tpSirWlanExcludeUnencryptParam;
2076*5113495bSYour Name 
2077*5113495bSYour Name typedef enum {
2078*5113495bSYour Name 	P2P_SCAN_TYPE_SEARCH = 1,       /* P2P Search */
2079*5113495bSYour Name 	P2P_SCAN_TYPE_LISTEN    /* P2P Listen */
2080*5113495bSYour Name } tSirP2pScanType;
2081*5113495bSYour Name 
2082*5113495bSYour Name typedef struct sAniHandoffReq {
2083*5113495bSYour Name 	/* Common for all types are requests */
2084*5113495bSYour Name 	uint16_t msgType;       /* message type is same as the request type */
2085*5113495bSYour Name 	uint16_t msgLen;        /* length of the entire request */
2086*5113495bSYour Name 	uint8_t sessionId;
2087*5113495bSYour Name 	uint8_t bssid[QDF_MAC_ADDR_SIZE];
2088*5113495bSYour Name 	uint32_t ch_freq;
2089*5113495bSYour Name 	uint8_t handoff_src;
2090*5113495bSYour Name } tAniHandoffReq, *tpAniHandoffReq;
2091*5113495bSYour Name 
2092*5113495bSYour Name /**
2093*5113495bSYour Name  * sir_scan_event_type - scan event types used in LIM
2094*5113495bSYour Name  * @SIR_SCAN_EVENT_STARTED - scan command accepted by FW
2095*5113495bSYour Name  * @SIR_SCAN_EVENT_COMPLETED - scan has been completed by FW
2096*5113495bSYour Name  * @SIR_SCAN_EVENT_BSS_CHANNEL - FW is going to move to HOME channel
2097*5113495bSYour Name  * @SIR_SCAN_EVENT_FOREIGN_CHANNEL - FW is going to move to FOREIGN channel
2098*5113495bSYour Name  * @SIR_SCAN_EVENT_DEQUEUED - scan request got dequeued
2099*5113495bSYour Name  * @SIR_SCAN_EVENT_PREEMPTED - preempted by other high priority scan
2100*5113495bSYour Name  * @SIR_SCAN_EVENT_START_FAILED - scan start failed
2101*5113495bSYour Name  * @SIR_SCAN_EVENT_RESTARTED - scan restarted
2102*5113495bSYour Name  * @SIR_SCAN_EVENT_MAX - max value for event type
2103*5113495bSYour Name */
2104*5113495bSYour Name enum sir_scan_event_type {
2105*5113495bSYour Name 	SIR_SCAN_EVENT_STARTED = 0x1,
2106*5113495bSYour Name 	SIR_SCAN_EVENT_COMPLETED = 0x2,
2107*5113495bSYour Name 	SIR_SCAN_EVENT_BSS_CHANNEL = 0x4,
2108*5113495bSYour Name 	SIR_SCAN_EVENT_FOREIGN_CHANNEL = 0x8,
2109*5113495bSYour Name 	SIR_SCAN_EVENT_DEQUEUED = 0x10,
2110*5113495bSYour Name 	SIR_SCAN_EVENT_PREEMPTED = 0x20,
2111*5113495bSYour Name 	SIR_SCAN_EVENT_START_FAILED = 0x40,
2112*5113495bSYour Name 	SIR_SCAN_EVENT_RESTARTED = 0x80,
2113*5113495bSYour Name 	SIR_SCAN_EVENT_MAX = 0x8000
2114*5113495bSYour Name };
2115*5113495bSYour Name 
2116*5113495bSYour Name typedef struct sSirScanOffloadEvent {
2117*5113495bSYour Name 	enum sir_scan_event_type event;
2118*5113495bSYour Name 	tSirResultCodes reasonCode;
2119*5113495bSYour Name 	uint32_t chanFreq;
2120*5113495bSYour Name 	uint32_t requestor;
2121*5113495bSYour Name 	uint32_t scanId;
2122*5113495bSYour Name 	tSirP2pScanType p2pScanType;
2123*5113495bSYour Name 	uint8_t sessionId;
2124*5113495bSYour Name } tSirScanOffloadEvent, *tpSirScanOffloadEvent;
2125*5113495bSYour Name 
2126*5113495bSYour Name /**
2127*5113495bSYour Name  * struct sSirUpdateChanParam - channel parameters
2128*5113495bSYour Name  * @freq: Frequency of the channel
2129*5113495bSYour Name  * @pwr: power level
2130*5113495bSYour Name  * @dfsSet: is dfs supported or not
2131*5113495bSYour Name  * @half_rate: is the channel operating at 10MHz
2132*5113495bSYour Name  * @quarter_rate: is the channel operating at 5MHz
2133*5113495bSYour Name  * @nan_disabled: is NAN disabled on @freq
2134*5113495bSYour Name  */
2135*5113495bSYour Name typedef struct sSirUpdateChanParam {
2136*5113495bSYour Name 	uint32_t freq;
2137*5113495bSYour Name 	uint8_t pwr;
2138*5113495bSYour Name 	bool dfsSet;
2139*5113495bSYour Name 	bool half_rate;
2140*5113495bSYour Name 	bool quarter_rate;
2141*5113495bSYour Name 	bool nan_disabled;
2142*5113495bSYour Name } tSirUpdateChanParam, *tpSirUpdateChanParam;
2143*5113495bSYour Name 
2144*5113495bSYour Name typedef struct sSirUpdateChan {
2145*5113495bSYour Name 	uint8_t numChan;
2146*5113495bSYour Name 	uint8_t ht_en;
2147*5113495bSYour Name 	uint8_t vht_en;
2148*5113495bSYour Name 	uint8_t vht_24_en;
2149*5113495bSYour Name 	bool he_en;
2150*5113495bSYour Name 	bool eht_en;
2151*5113495bSYour Name 	QDF_FLEX_ARRAY(tSirUpdateChanParam, chanParam);
2152*5113495bSYour Name } tSirUpdateChanList, *tpSirUpdateChanList;
2153*5113495bSYour Name 
2154*5113495bSYour Name typedef enum eSirAddonPsReq {
2155*5113495bSYour Name 	eSIR_ADDON_NOTHING,
2156*5113495bSYour Name 	eSIR_ADDON_ENABLE_UAPSD,
2157*5113495bSYour Name 	eSIR_ADDON_DISABLE_UAPSD
2158*5113495bSYour Name } tSirAddonPsReq;
2159*5113495bSYour Name 
2160*5113495bSYour Name #ifdef FEATURE_WLAN_CH_AVOID
2161*5113495bSYour Name typedef struct sSirChAvoidUpdateReq {
2162*5113495bSYour Name 	uint32_t reserved_param;
2163*5113495bSYour Name } tSirChAvoidUpdateReq;
2164*5113495bSYour Name #endif /* FEATURE_WLAN_CH_AVOID */
2165*5113495bSYour Name 
2166*5113495bSYour Name struct link_speed_info {
2167*5113495bSYour Name 	/* MAC Address for the peer */
2168*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
2169*5113495bSYour Name 	uint32_t estLinkSpeed;  /* Linkspeed from firmware */
2170*5113495bSYour Name };
2171*5113495bSYour Name 
2172*5113495bSYour Name /**
2173*5113495bSYour Name  * struct sir_isolation_resp - isolation info related structure
2174*5113495bSYour Name  * @isolation_chain0: isolation value for chain 0
2175*5113495bSYour Name  * @isolation_chain1: isolation value for chain 1
2176*5113495bSYour Name  * @isolation_chain2: isolation value for chain 2
2177*5113495bSYour Name  * @isolation_chain3: isolation value for chain 3
2178*5113495bSYour Name  */
2179*5113495bSYour Name struct sir_isolation_resp {
2180*5113495bSYour Name 	uint32_t isolation_chain0:8,
2181*5113495bSYour Name 		 isolation_chain1:8,
2182*5113495bSYour Name 		 isolation_chain2:8,
2183*5113495bSYour Name 		 isolation_chain3:8;
2184*5113495bSYour Name };
2185*5113495bSYour Name 
2186*5113495bSYour Name typedef struct sSirAddPeriodicTxPtrn {
2187*5113495bSYour Name 	/* MAC Address for the adapter */
2188*5113495bSYour Name 	struct qdf_mac_addr mac_address;
2189*5113495bSYour Name 	uint8_t ucPtrnId;       /* Pattern ID */
2190*5113495bSYour Name 	uint16_t ucPtrnSize;    /* Pattern size */
2191*5113495bSYour Name 	uint32_t usPtrnIntervalMs;      /* In msec */
2192*5113495bSYour Name 	uint8_t ucPattern[PERIODIC_TX_PTRN_MAX_SIZE];   /* Pattern buffer */
2193*5113495bSYour Name } tSirAddPeriodicTxPtrn, *tpSirAddPeriodicTxPtrn;
2194*5113495bSYour Name 
2195*5113495bSYour Name typedef struct sSirDelPeriodicTxPtrn {
2196*5113495bSYour Name 	/* MAC Address for the adapter */
2197*5113495bSYour Name 	struct qdf_mac_addr mac_address;
2198*5113495bSYour Name 	uint8_t ucPtrnId;       /* Pattern ID */
2199*5113495bSYour Name } tSirDelPeriodicTxPtrn, *tpSirDelPeriodicTxPtrn;
2200*5113495bSYour Name 
2201*5113495bSYour Name #ifdef WLAN_FEATURE_EXTWOW_SUPPORT
2202*5113495bSYour Name typedef struct {
2203*5113495bSYour Name 	uint16_t mesgType;
2204*5113495bSYour Name 	uint16_t mesgLen;
2205*5113495bSYour Name 	bool status;
2206*5113495bSYour Name } tSirReadyToExtWoWInd, *tpSirReadyToExtWoWInd;
2207*5113495bSYour Name #endif
2208*5113495bSYour Name typedef struct sSirRateUpdateInd {
2209*5113495bSYour Name 	uint8_t nss;            /* 0: 1x1, 1: 2x2 */
2210*5113495bSYour Name 	struct qdf_mac_addr bssid;
2211*5113495bSYour Name 	enum QDF_OPMODE dev_mode;
2212*5113495bSYour Name 	int32_t bcastDataRate;  /* bcast rate unit Mbpsx10, -1:not used */
2213*5113495bSYour Name 
2214*5113495bSYour Name 	/*
2215*5113495bSYour Name 	 * 0 implies MCAST RA, positive value implies fixed rate,
2216*5113495bSYour Name 	 * -1 implies ignore this param
2217*5113495bSYour Name 	 */
2218*5113495bSYour Name 	int32_t reliableMcastDataRate;  /* unit Mbpsx10 */
2219*5113495bSYour Name 
2220*5113495bSYour Name 	/* TX flag to differentiate between HT20, HT40 etc */
2221*5113495bSYour Name 	enum tx_rate_info reliableMcastDataRateTxFlag;
2222*5113495bSYour Name 
2223*5113495bSYour Name 	/*
2224*5113495bSYour Name 	 * MCAST(or BCAST) fixed data rate in 2.4 GHz, unit Mbpsx10,
2225*5113495bSYour Name 	 * 0 implies ignore
2226*5113495bSYour Name 	 */
2227*5113495bSYour Name 	uint32_t mcastDataRate24GHz;
2228*5113495bSYour Name 
2229*5113495bSYour Name 	/* TX flag to differentiate between HT20, HT40 etc */
2230*5113495bSYour Name 	enum tx_rate_info mcastDataRate24GHzTxFlag;
2231*5113495bSYour Name 
2232*5113495bSYour Name 	/*
2233*5113495bSYour Name 	 * MCAST(or BCAST) fixed data rate in 5 GHz,
2234*5113495bSYour Name 	 * unit Mbpsx10, 0 implies ignore
2235*5113495bSYour Name 	 */
2236*5113495bSYour Name 	uint32_t mcastDataRate5GHz;
2237*5113495bSYour Name 
2238*5113495bSYour Name 	/* TX flag to differentiate between HT20, HT40 etc */
2239*5113495bSYour Name 	enum tx_rate_info mcastDataRate5GHzTxFlag;
2240*5113495bSYour Name 
2241*5113495bSYour Name } tSirRateUpdateInd, *tpSirRateUpdateInd;
2242*5113495bSYour Name 
2243*5113495bSYour Name #define SIR_DFS_MAX_20M_SUB_CH 8
2244*5113495bSYour Name #define SIR_80MHZ_START_CENTER_CH_DIFF 6
2245*5113495bSYour Name 
2246*5113495bSYour Name typedef struct sSirSmeDfsChannelList {
2247*5113495bSYour Name 	uint32_t nchannels;
2248*5113495bSYour Name 	/* Ch num including bonded channels on which the RADAR is present */
2249*5113495bSYour Name 	uint8_t channels[SIR_DFS_MAX_20M_SUB_CH];
2250*5113495bSYour Name } tSirSmeDfsChannelList, *tpSirSmeDfsChannelList;
2251*5113495bSYour Name 
2252*5113495bSYour Name typedef struct sSirChanChangeResponse {
2253*5113495bSYour Name 	uint8_t sessionId;
2254*5113495bSYour Name 	uint32_t new_op_freq;
2255*5113495bSYour Name 	uint8_t channelChangeStatus;
2256*5113495bSYour Name } tSirChanChangeResponse, *tpSirChanChangeResponse;
2257*5113495bSYour Name 
2258*5113495bSYour Name typedef struct sSirStartBeaconIndication {
2259*5113495bSYour Name 	uint16_t messageType;
2260*5113495bSYour Name 	uint16_t messageLen;
2261*5113495bSYour Name 	uint8_t beaconStartStatus;
2262*5113495bSYour Name 	uint8_t bssid[QDF_MAC_ADDR_SIZE];
2263*5113495bSYour Name } tSirStartBeaconIndication, *tpSirStartBeaconIndication;
2264*5113495bSYour Name 
2265*5113495bSYour Name /* additional IE type */
2266*5113495bSYour Name typedef enum tUpdateIEsType {
2267*5113495bSYour Name 	eUPDATE_IE_NONE,
2268*5113495bSYour Name 	eUPDATE_IE_PROBE_BCN,
2269*5113495bSYour Name 	eUPDATE_IE_PROBE_RESP,
2270*5113495bSYour Name 	eUPDATE_IE_ASSOC_RESP,
2271*5113495bSYour Name 
2272*5113495bSYour Name 	/* Add type above this line */
2273*5113495bSYour Name 	/* this is used to reset all buffer */
2274*5113495bSYour Name 	eUPDATE_IE_ALL,
2275*5113495bSYour Name 	eUPDATE_IE_MAX
2276*5113495bSYour Name } eUpdateIEsType;
2277*5113495bSYour Name 
2278*5113495bSYour Name /* Modify particular IE in addition IE for prob resp Bcn */
2279*5113495bSYour Name typedef struct sSirModifyIE {
2280*5113495bSYour Name 	struct qdf_mac_addr bssid;
2281*5113495bSYour Name 	uint16_t vdev_id;
2282*5113495bSYour Name 	bool notify;
2283*5113495bSYour Name 	uint8_t ieID;
2284*5113495bSYour Name 	uint8_t ieIDLen;        /*ie length as per spec */
2285*5113495bSYour Name 	uint16_t ieBufferlength;
2286*5113495bSYour Name 	uint8_t *pIEBuffer;
2287*5113495bSYour Name 	int32_t oui_length;
2288*5113495bSYour Name 
2289*5113495bSYour Name } tSirModifyIE, *tpSirModifyIE;
2290*5113495bSYour Name 
2291*5113495bSYour Name struct send_add_ba_req {
2292*5113495bSYour Name 	uint8_t mac_addr[QDF_MAC_ADDR_SIZE];
2293*5113495bSYour Name 	struct addba_send_params param;
2294*5113495bSYour Name };
2295*5113495bSYour Name 
2296*5113495bSYour Name /* Message format for Update IE message sent to PE  */
2297*5113495bSYour Name typedef struct sSirModifyIEsInd {
2298*5113495bSYour Name 	uint16_t msgType;
2299*5113495bSYour Name 	uint16_t msgLen;
2300*5113495bSYour Name 	tSirModifyIE modifyIE;
2301*5113495bSYour Name 	eUpdateIEsType updateType;
2302*5113495bSYour Name } tSirModifyIEsInd, *tpSirModifyIEsInd;
2303*5113495bSYour Name 
2304*5113495bSYour Name /* Message format for Update IE message sent to PE  */
2305*5113495bSYour Name typedef struct sSirUpdateIE {
2306*5113495bSYour Name 	struct qdf_mac_addr bssid;
2307*5113495bSYour Name 	uint16_t vdev_id;
2308*5113495bSYour Name 	bool append;
2309*5113495bSYour Name 	bool notify;
2310*5113495bSYour Name 	uint16_t ieBufferlength;
2311*5113495bSYour Name 	uint8_t *pAdditionIEBuffer;
2312*5113495bSYour Name } tSirUpdateIE, *tpSirUpdateIE;
2313*5113495bSYour Name 
2314*5113495bSYour Name /* Message format for Update IE message sent to PE  */
2315*5113495bSYour Name typedef struct sSirUpdateIEsInd {
2316*5113495bSYour Name 	uint16_t msgType;
2317*5113495bSYour Name 	uint16_t msgLen;
2318*5113495bSYour Name 	tSirUpdateIE updateIE;
2319*5113495bSYour Name 	eUpdateIEsType updateType;
2320*5113495bSYour Name } tSirUpdateIEsInd, *tpSirUpdateIEsInd;
2321*5113495bSYour Name 
2322*5113495bSYour Name /* Message format for requesting channel switch announcement to lower layers */
2323*5113495bSYour Name typedef struct sSirDfsCsaIeRequest {
2324*5113495bSYour Name 	uint16_t msgType;
2325*5113495bSYour Name 	uint16_t msgLen;
2326*5113495bSYour Name 	uint32_t target_chan_freq;
2327*5113495bSYour Name 	uint8_t csaIeRequired;
2328*5113495bSYour Name 	uint8_t bssid[QDF_MAC_ADDR_SIZE];
2329*5113495bSYour Name 	struct ch_params ch_params;
2330*5113495bSYour Name 	uint8_t  ch_switch_beacon_cnt;
2331*5113495bSYour Name 	uint8_t  ch_switch_mode;
2332*5113495bSYour Name 	uint8_t  dfs_ch_switch_disable;
2333*5113495bSYour Name 	uint32_t new_chan_cac_ms;
2334*5113495bSYour Name } tSirDfsCsaIeRequest, *tpSirDfsCsaIeRequest;
2335*5113495bSYour Name 
2336*5113495bSYour Name /* Indication from lower layer indicating the completion of first beacon send
2337*5113495bSYour Name  * after the beacon template update
2338*5113495bSYour Name  */
2339*5113495bSYour Name typedef struct sSirFirstBeaconTxCompleteInd {
2340*5113495bSYour Name 	uint16_t messageType;   /* eWNI_SME_MISSED_BEACON_IND */
2341*5113495bSYour Name 	uint16_t length;
2342*5113495bSYour Name 	uint8_t bss_idx;
2343*5113495bSYour Name } tSirFirstBeaconTxCompleteInd, *tpSirFirstBeaconTxCompleteInd;
2344*5113495bSYour Name 
2345*5113495bSYour Name typedef struct sSirSmeCSAIeTxCompleteRsp {
2346*5113495bSYour Name 	uint8_t sessionId;
2347*5113495bSYour Name 	uint8_t chanSwIeTxStatus;
2348*5113495bSYour Name } tSirSmeCSAIeTxCompleteRsp, *tpSirSmeCSAIeTxCompleteRsp;
2349*5113495bSYour Name 
2350*5113495bSYour Name /* Thermal Mitigation*/
2351*5113495bSYour Name 
2352*5113495bSYour Name typedef struct {
2353*5113495bSYour Name 	uint16_t minTempThreshold;
2354*5113495bSYour Name 	uint16_t maxTempThreshold;
2355*5113495bSYour Name } t_thermal_level_info, *tp_thermal_level_info;
2356*5113495bSYour Name 
2357*5113495bSYour Name typedef enum {
2358*5113495bSYour Name 	WLAN_WMA_THERMAL_LEVEL_0,
2359*5113495bSYour Name 	WLAN_WMA_THERMAL_LEVEL_1,
2360*5113495bSYour Name 	WLAN_WMA_THERMAL_LEVEL_2,
2361*5113495bSYour Name 	WLAN_WMA_THERMAL_LEVEL_3,
2362*5113495bSYour Name 	WLAN_WMA_THERMAL_LEVEL_4,
2363*5113495bSYour Name 	WLAN_WMA_THERMAL_LEVEL_5,
2364*5113495bSYour Name 	WLAN_WMA_MAX_THERMAL_LEVELS
2365*5113495bSYour Name } t_thermal_level;
2366*5113495bSYour Name 
2367*5113495bSYour Name #define WLAN_THROTTLE_DUTY_CYCLE_LEVEL_MAX (6)
2368*5113495bSYour Name 
2369*5113495bSYour Name typedef struct {
2370*5113495bSYour Name 	/* Array of thermal levels */
2371*5113495bSYour Name 	t_thermal_level_info thermalLevels[WLAN_WMA_MAX_THERMAL_LEVELS];
2372*5113495bSYour Name 	uint8_t thermalCurrLevel;
2373*5113495bSYour Name 	uint8_t thermalMgmtEnabled;
2374*5113495bSYour Name 	uint32_t throttlePeriod;
2375*5113495bSYour Name 	uint8_t throttle_duty_cycle_tbl[WLAN_THROTTLE_DUTY_CYCLE_LEVEL_MAX];
2376*5113495bSYour Name 	enum thermal_mgmt_action_code thermal_action;
2377*5113495bSYour Name } t_thermal_mgmt, *tp_thermal_mgmt;
2378*5113495bSYour Name 
2379*5113495bSYour Name struct tx_power_limit {
2380*5113495bSYour Name 	/* Thermal limits for 2g and 5g */
2381*5113495bSYour Name 	uint32_t txPower2g;
2382*5113495bSYour Name 	uint32_t txPower5g;
2383*5113495bSYour Name };
2384*5113495bSYour Name 
2385*5113495bSYour Name enum bad_peer_thresh_levels {
2386*5113495bSYour Name 	WLAN_WMA_IEEE80211_B_LEVEL = 0,
2387*5113495bSYour Name 	WLAN_WMA_IEEE80211_AG_LEVEL,
2388*5113495bSYour Name 	WLAN_WMA_IEEE80211_N_LEVEL,
2389*5113495bSYour Name 	WLAN_WMA_IEEE80211_AC_LEVEL,
2390*5113495bSYour Name 	WLAN_WMA_IEEE80211_AX_LEVEL,
2391*5113495bSYour Name 	WLAN_WMA_IEEE80211_MAX_LEVEL,
2392*5113495bSYour Name };
2393*5113495bSYour Name 
2394*5113495bSYour Name #define NUM_OF_RATE_THRESH_MAX    (4)
2395*5113495bSYour Name struct t_bad_peer_info {
2396*5113495bSYour Name 	uint32_t cond;
2397*5113495bSYour Name 	uint32_t delta;
2398*5113495bSYour Name 	uint32_t percentage;
2399*5113495bSYour Name 	uint32_t thresh[NUM_OF_RATE_THRESH_MAX];
2400*5113495bSYour Name 	uint32_t txlimit;
2401*5113495bSYour Name };
2402*5113495bSYour Name 
2403*5113495bSYour Name struct t_bad_peer_txtcl_config {
2404*5113495bSYour Name 	/* Array of thermal levels */
2405*5113495bSYour Name 	struct t_bad_peer_info threshold[WLAN_WMA_IEEE80211_MAX_LEVEL];
2406*5113495bSYour Name 	uint32_t enable;
2407*5113495bSYour Name 	uint32_t period;
2408*5113495bSYour Name 	uint32_t txq_limit;
2409*5113495bSYour Name 	uint32_t tgt_backoff;
2410*5113495bSYour Name 	uint32_t tgt_report_prd;
2411*5113495bSYour Name };
2412*5113495bSYour Name 
2413*5113495bSYour Name /* notify MODEM power state to FW */
2414*5113495bSYour Name typedef struct {
2415*5113495bSYour Name 	uint32_t param;
2416*5113495bSYour Name } tSirModemPowerStateInd, *tpSirModemPowerStateInd;
2417*5113495bSYour Name 
2418*5113495bSYour Name #ifdef WLAN_FEATURE_STATS_EXT
2419*5113495bSYour Name typedef struct {
2420*5113495bSYour Name 	uint32_t vdev_id;
2421*5113495bSYour Name 	uint32_t event_data_len;
2422*5113495bSYour Name 	uint8_t event_data[];
2423*5113495bSYour Name } tSirStatsExtEvent, *tpSirStatsExtEvent;
2424*5113495bSYour Name #endif
2425*5113495bSYour Name 
2426*5113495bSYour Name /**
2427*5113495bSYour Name  * struct sir_wisa_params - WISA Mode Parameters
2428*5113495bSYour Name  * @mode: WISA mode
2429*5113495bSYour Name  * @session_id: Session ID of vdev
2430*5113495bSYour Name  */
2431*5113495bSYour Name struct sir_wisa_params {
2432*5113495bSYour Name 	bool mode;
2433*5113495bSYour Name 	uint8_t vdev_id;
2434*5113495bSYour Name };
2435*5113495bSYour Name 
2436*5113495bSYour Name /**
2437*5113495bSYour Name  * typedef enum wifi_scan_flags - wifi scan flags
2438*5113495bSYour Name  * @WIFI_SCAN_FLAG_INTERRUPTED: Indicates that scan results are not complete
2439*5113495bSYour Name  *				because probes were not sent on some channels
2440*5113495bSYour Name  */
2441*5113495bSYour Name typedef enum {
2442*5113495bSYour Name 	WIFI_SCAN_FLAG_INTERRUPTED = 1,
2443*5113495bSYour Name } wifi_scan_flags;
2444*5113495bSYour Name 
2445*5113495bSYour Name typedef enum {
2446*5113495bSYour Name 	WIFI_BAND_UNSPECIFIED,
2447*5113495bSYour Name 	WIFI_BAND_BG = 1,       /* 2.4 GHz */
2448*5113495bSYour Name 	WIFI_BAND_A = 2,        /* 5 GHz without DFS */
2449*5113495bSYour Name 	WIFI_BAND_ABG = 3,      /* 2.4 GHz + 5 GHz; no DFS */
2450*5113495bSYour Name 	WIFI_BAND_A_DFS_ONLY = 4,       /* 5 GHz DFS only */
2451*5113495bSYour Name 	/* 5 is reserved */
2452*5113495bSYour Name 	WIFI_BAND_A_WITH_DFS = 6,       /* 5 GHz with DFS */
2453*5113495bSYour Name 	WIFI_BAND_ABG_WITH_DFS = 7,     /* 2.4 GHz + 5 GHz with DFS */
2454*5113495bSYour Name 
2455*5113495bSYour Name 	/* Keep it last */
2456*5113495bSYour Name 	WIFI_BAND_MAX
2457*5113495bSYour Name } tWifiBand;
2458*5113495bSYour Name 
2459*5113495bSYour Name #ifdef FEATURE_WLAN_EXTSCAN
2460*5113495bSYour Name 
2461*5113495bSYour Name #define WLAN_EXTSCAN_MAX_CHANNELS                 36
2462*5113495bSYour Name #define WLAN_EXTSCAN_MAX_BUCKETS                  16
2463*5113495bSYour Name #define WLAN_EXTSCAN_MAX_SIGNIFICANT_CHANGE_APS   64
2464*5113495bSYour Name 
2465*5113495bSYour Name typedef enum {
2466*5113495bSYour Name 	eSIR_EXTSCAN_INVALID,
2467*5113495bSYour Name 	eSIR_EXTSCAN_START_RSP,
2468*5113495bSYour Name 	eSIR_EXTSCAN_STOP_RSP,
2469*5113495bSYour Name 	eSIR_EXTSCAN_CACHED_RESULTS_RSP,
2470*5113495bSYour Name 	eSIR_EXTSCAN_SET_BSSID_HOTLIST_RSP,
2471*5113495bSYour Name 	eSIR_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
2472*5113495bSYour Name 	eSIR_EXTSCAN_SET_SIGNIFICANT_WIFI_CHANGE_RSP,
2473*5113495bSYour Name 	eSIR_EXTSCAN_RESET_SIGNIFICANT_WIFI_CHANGE_RSP,
2474*5113495bSYour Name 
2475*5113495bSYour Name 	eSIR_EXTSCAN_GET_CAPABILITIES_IND,
2476*5113495bSYour Name 	eSIR_EXTSCAN_HOTLIST_MATCH_IND,
2477*5113495bSYour Name 	eSIR_EXTSCAN_SIGNIFICANT_WIFI_CHANGE_RESULTS_IND,
2478*5113495bSYour Name 	eSIR_EXTSCAN_CACHED_RESULTS_IND,
2479*5113495bSYour Name 	eSIR_EXTSCAN_SCAN_RES_AVAILABLE_IND,
2480*5113495bSYour Name 	eSIR_EXTSCAN_SCAN_PROGRESS_EVENT_IND,
2481*5113495bSYour Name 	eSIR_EXTSCAN_FULL_SCAN_RESULT_IND,
2482*5113495bSYour Name 	eSIR_EPNO_NETWORK_FOUND_IND,
2483*5113495bSYour Name 	eSIR_PASSPOINT_NETWORK_FOUND_IND,
2484*5113495bSYour Name 	eSIR_EXTSCAN_SET_SSID_HOTLIST_RSP,
2485*5113495bSYour Name 	eSIR_EXTSCAN_RESET_SSID_HOTLIST_RSP,
2486*5113495bSYour Name 
2487*5113495bSYour Name 	/* Keep this last */
2488*5113495bSYour Name 	eSIR_EXTSCAN_CALLBACK_TYPE_MAX,
2489*5113495bSYour Name } tSirExtScanCallbackType;
2490*5113495bSYour Name 
2491*5113495bSYour Name /**
2492*5113495bSYour Name  * enum wifi_extscan_event_type - extscan event type
2493*5113495bSYour Name  * @WIFI_EXTSCAN_RESULTS_AVAILABLE: reported when REPORT_EVENTS_EACH_SCAN is set
2494*5113495bSYour Name  *		and a scan cycle completes. WIFI_SCAN_THRESHOLD_NUM_SCANS or
2495*5113495bSYour Name  *		WIFI_SCAN_THRESHOLD_PERCENT can be reported instead if the
2496*5113495bSYour Name  *		reason for the event is available; however, at most one of
2497*5113495bSYour Name  *		these events should be reported per scan.
2498*5113495bSYour Name  * @WIFI_EXTSCAN_THRESHOLD_NUM_SCANS: can be reported when
2499*5113495bSYour Name  *		REPORT_EVENTS_EACH_SCAN is not set and
2500*5113495bSYour Name  *		report_threshold_num_scans is reached.
2501*5113495bSYour Name  * @WIFI_EXTSCAN_THRESHOLD_PERCENT: can be reported when REPORT_EVENTS_EACH_SCAN
2502*5113495bSYour Name  *		is not set and report_threshold_percent is reached.
2503*5113495bSYour Name  * @WIFI_SCAN_DISABLED: reported when currently executing gscans are disabled
2504*5113495bSYour Name  *		start_gscan will need to be called again in order to continue
2505*5113495bSYour Name  *		scanning.
2506*5113495bSYour Name  * @WIFI_EXTSCAN_BUCKET_STARTED_EVENT: Bucket started event
2507*5113495bSYour Name  *		This event is consumed in driver only.
2508*5113495bSYour Name  * @WIFI_EXTSCAN_CYCLE_STARTED_EVENT: Cycle started event.
2509*5113495bSYour Name  *		This event is consumed in driver only.
2510*5113495bSYour Name  * @WIFI_EXTSCAN_CYCLE_COMPLETED_EVENT: Cycle complete event. This event
2511*5113495bSYour Name  *		triggers @WIFI_EXTSCAN_RESULTS_AVAILABLE to the user space.
2512*5113495bSYour Name  */
2513*5113495bSYour Name enum wifi_extscan_event_type {
2514*5113495bSYour Name 	WIFI_EXTSCAN_RESULTS_AVAILABLE,
2515*5113495bSYour Name 	WIFI_EXTSCAN_THRESHOLD_NUM_SCANS,
2516*5113495bSYour Name 	WIFI_EXTSCAN_THRESHOLD_PERCENT,
2517*5113495bSYour Name 	WIFI_SCAN_DISABLED,
2518*5113495bSYour Name 
2519*5113495bSYour Name 	WIFI_EXTSCAN_BUCKET_STARTED_EVENT = 0x10,
2520*5113495bSYour Name 	WIFI_EXTSCAN_CYCLE_STARTED_EVENT,
2521*5113495bSYour Name 	WIFI_EXTSCAN_CYCLE_COMPLETED_EVENT,
2522*5113495bSYour Name };
2523*5113495bSYour Name 
2524*5113495bSYour Name /**
2525*5113495bSYour Name  * enum extscan_configuration_flags - extscan config flags
2526*5113495bSYour Name  * @EXTSCAN_LP_EXTENDED_BATCHING: extended batching
2527*5113495bSYour Name  */
2528*5113495bSYour Name enum extscan_configuration_flags {
2529*5113495bSYour Name 	EXTSCAN_LP_EXTENDED_BATCHING = 0x00000001,
2530*5113495bSYour Name };
2531*5113495bSYour Name 
2532*5113495bSYour Name /**
2533*5113495bSYour Name  * struct ext_scan_capabilities_response - extscan capabilities response data
2534*5113495bSYour Name  * @requestId: request identifier
2535*5113495bSYour Name  * @status:    status
2536*5113495bSYour Name  * @max_scan_cache_size: total space allocated for scan (in bytes)
2537*5113495bSYour Name  * @max_scan_buckets: maximum number of channel buckets
2538*5113495bSYour Name  * @max_ap_cache_per_scan: maximum number of APs that can be stored per scan
2539*5113495bSYour Name  * @max_rssi_sample_size: number of RSSI samples used for averaging RSSI
2540*5113495bSYour Name  * @ax_scan_reporting_threshold: max possible report_threshold
2541*5113495bSYour Name  * @max_hotlist_bssids: maximum number of entries for hotlist APs
2542*5113495bSYour Name  * @max_significant_wifi_change_aps: maximum number of entries for
2543*5113495bSYour Name  *				significant wifi change APs
2544*5113495bSYour Name  * @max_bssid_history_entries: number of BSSID/RSSI entries that device can hold
2545*5113495bSYour Name  * @max_hotlist_ssids: maximum number of entries for hotlist SSIDs
2546*5113495bSYour Name  * @max_number_epno_networks: max number of epno entries
2547*5113495bSYour Name  * @max_number_epno_networks_by_ssid: max number of epno entries
2548*5113495bSYour Name  *			if ssid is specified, that is, epno entries for
2549*5113495bSYour Name  *			which an exact match is required,
2550*5113495bSYour Name  *			or entries corresponding to hidden ssids
2551*5113495bSYour Name  * @max_number_of_allow_listed_ssid: max number of allow listed SSIDs
2552*5113495bSYour Name  * @max_number_of_deny_listed_bssid: max number of deny listed BSSIDs
2553*5113495bSYour Name  */
2554*5113495bSYour Name struct ext_scan_capabilities_response {
2555*5113495bSYour Name 	uint32_t requestId;
2556*5113495bSYour Name 	uint32_t status;
2557*5113495bSYour Name 
2558*5113495bSYour Name 	uint32_t max_scan_cache_size;
2559*5113495bSYour Name 	uint32_t max_scan_buckets;
2560*5113495bSYour Name 	uint32_t max_ap_cache_per_scan;
2561*5113495bSYour Name 	uint32_t max_rssi_sample_size;
2562*5113495bSYour Name 	uint32_t max_scan_reporting_threshold;
2563*5113495bSYour Name 
2564*5113495bSYour Name 	uint32_t max_hotlist_bssids;
2565*5113495bSYour Name 	uint32_t max_significant_wifi_change_aps;
2566*5113495bSYour Name 
2567*5113495bSYour Name 	uint32_t max_bssid_history_entries;
2568*5113495bSYour Name 	uint32_t max_hotlist_ssids;
2569*5113495bSYour Name 	uint32_t max_number_epno_networks;
2570*5113495bSYour Name 	uint32_t max_number_epno_networks_by_ssid;
2571*5113495bSYour Name 	uint32_t max_number_of_allow_listed_ssid;
2572*5113495bSYour Name 	uint32_t max_number_of_deny_listed_bssid;
2573*5113495bSYour Name };
2574*5113495bSYour Name 
2575*5113495bSYour Name typedef struct {
2576*5113495bSYour Name 	/* Time of discovery */
2577*5113495bSYour Name 	uint64_t ts;
2578*5113495bSYour Name 
2579*5113495bSYour Name 	/* Null terminated SSID */
2580*5113495bSYour Name 	uint8_t ssid[WLAN_SSID_MAX_LEN + 1];
2581*5113495bSYour Name 
2582*5113495bSYour Name 	struct qdf_mac_addr bssid;
2583*5113495bSYour Name 
2584*5113495bSYour Name 	/* Frequency in MHz */
2585*5113495bSYour Name 	uint32_t channel;
2586*5113495bSYour Name 
2587*5113495bSYour Name 	/* RSSI in dBm */
2588*5113495bSYour Name 	int32_t rssi;
2589*5113495bSYour Name 
2590*5113495bSYour Name 	/* RTT in nanoseconds */
2591*5113495bSYour Name 	uint32_t rtt;
2592*5113495bSYour Name 
2593*5113495bSYour Name 	/* Standard deviation in rtt */
2594*5113495bSYour Name 	uint32_t rtt_sd;
2595*5113495bSYour Name 
2596*5113495bSYour Name 	/* Period advertised in the beacon */
2597*5113495bSYour Name 	uint16_t beaconPeriod;
2598*5113495bSYour Name 
2599*5113495bSYour Name 	/* Capabilities advertised in the beacon */
2600*5113495bSYour Name 	uint16_t capability;
2601*5113495bSYour Name 
2602*5113495bSYour Name 	uint16_t ieLength;
2603*5113495bSYour Name 
2604*5113495bSYour Name 	uint8_t ieData[];
2605*5113495bSYour Name } tSirWifiScanResult, *tpSirWifiScanResult;
2606*5113495bSYour Name 
2607*5113495bSYour Name /**
2608*5113495bSYour Name  * struct extscan_hotlist_match - extscan hotlist match
2609*5113495bSYour Name  * @requestId: request identifier
2610*5113495bSYour Name  * @numOfAps: number of bssids retrieved by the scan
2611*5113495bSYour Name  * @moreData: 0 - for last fragment
2612*5113495bSYour Name  *	      1 - still more fragment(s) coming
2613*5113495bSYour Name  * @ap: wifi scan result
2614*5113495bSYour Name  */
2615*5113495bSYour Name struct extscan_hotlist_match {
2616*5113495bSYour Name 	uint32_t    requestId;
2617*5113495bSYour Name 	bool        moreData;
2618*5113495bSYour Name 	bool        ap_found;
2619*5113495bSYour Name 	uint32_t    numOfAps;
2620*5113495bSYour Name 	tSirWifiScanResult   ap[];
2621*5113495bSYour Name };
2622*5113495bSYour Name 
2623*5113495bSYour Name /**
2624*5113495bSYour Name  * struct extscan_cached_scan_result - extscan cached scan result
2625*5113495bSYour Name  * @scan_id: a unique identifier for the scan unit
2626*5113495bSYour Name  * @flags: a bitmask with additional information about scan
2627*5113495bSYour Name  * @num_results: number of bssids retrieved by the scan
2628*5113495bSYour Name  * @buckets_scanned: bitmask of buckets scanned in current extscan cycle
2629*5113495bSYour Name  * @ap: wifi scan bssid results info
2630*5113495bSYour Name  */
2631*5113495bSYour Name struct extscan_cached_scan_result {
2632*5113495bSYour Name 	uint32_t    scan_id;
2633*5113495bSYour Name 	uint32_t    flags;
2634*5113495bSYour Name 	uint32_t    num_results;
2635*5113495bSYour Name 	uint32_t    buckets_scanned;
2636*5113495bSYour Name 	tSirWifiScanResult *ap;
2637*5113495bSYour Name };
2638*5113495bSYour Name 
2639*5113495bSYour Name /**
2640*5113495bSYour Name  * struct extscan_cached_scan_results - extscan cached scan results
2641*5113495bSYour Name  * @request_id: request identifier
2642*5113495bSYour Name  * @more_data: 0 - for last fragment
2643*5113495bSYour Name  *	       1 - still more fragment(s) coming
2644*5113495bSYour Name  * @num_scan_ids: number of scan ids
2645*5113495bSYour Name  * @result: wifi scan result
2646*5113495bSYour Name  */
2647*5113495bSYour Name struct extscan_cached_scan_results {
2648*5113495bSYour Name 	uint32_t    request_id;
2649*5113495bSYour Name 	bool        more_data;
2650*5113495bSYour Name 	uint32_t    num_scan_ids;
2651*5113495bSYour Name 	struct extscan_cached_scan_result  *result;
2652*5113495bSYour Name };
2653*5113495bSYour Name 
2654*5113495bSYour Name 
2655*5113495bSYour Name /**
2656*5113495bSYour Name  * struct tSirWifiFullScanResultEvent - extscan full scan event
2657*5113495bSYour Name  * @request_id: request identifier
2658*5113495bSYour Name  * @moreData: 0 - for last fragment
2659*5113495bSYour Name  *             1 - still more fragment(s) coming
2660*5113495bSYour Name  * @ap: bssid info
2661*5113495bSYour Name  *
2662*5113495bSYour Name  * Reported when each probe response is received, if report_events
2663*5113495bSYour Name  * enabled in struct wifi_scan_cmd_req_params
2664*5113495bSYour Name  */
2665*5113495bSYour Name typedef struct {
2666*5113495bSYour Name 	uint32_t            requestId;
2667*5113495bSYour Name 	bool                moreData;
2668*5113495bSYour Name 	tSirWifiScanResult  ap;
2669*5113495bSYour Name } tSirWifiFullScanResultEvent, *tpSirWifiFullScanResultEvent;
2670*5113495bSYour Name 
2671*5113495bSYour Name /**
2672*5113495bSYour Name  * struct pno_match_found - epno match found
2673*5113495bSYour Name  * @request_id: request identifier
2674*5113495bSYour Name  * @moreData: 0 - for last fragment
2675*5113495bSYour Name      * 1 - still more fragment(s) coming
2676*5113495bSYour Name  * @num_results: number of bssids, driver sends this event to upper layer
2677*5113495bSYour Name  *		 for every beacon, hence %num_results is always set to 1.
2678*5113495bSYour Name  * @ap: bssid info
2679*5113495bSYour Name  *
2680*5113495bSYour Name  * Reported when each beacon probe response is received with
2681*5113495bSYour Name  * epno match found tag.
2682*5113495bSYour Name      */
2683*5113495bSYour Name struct pno_match_found {
2684*5113495bSYour Name 	uint32_t            request_id;
2685*5113495bSYour Name 	bool                more_data;
2686*5113495bSYour Name 	uint32_t            num_results;
2687*5113495bSYour Name 	tSirWifiScanResult  ap[];
2688*5113495bSYour Name };
2689*5113495bSYour Name 
2690*5113495bSYour Name /**
2691*5113495bSYour Name  * struct sir_extscan_generic_response -
2692*5113495bSYour Name  *	Generic ExtScan Response structure
2693*5113495bSYour Name  * @request_id: ID of the request
2694*5113495bSYour Name  * @status: operation status returned by firmware
2695*5113495bSYour Name  */
2696*5113495bSYour Name struct sir_extscan_generic_response {
2697*5113495bSYour Name 	uint32_t request_id;
2698*5113495bSYour Name 	uint32_t status;
2699*5113495bSYour Name };
2700*5113495bSYour Name 
2701*5113495bSYour Name typedef struct {
2702*5113495bSYour Name 	struct qdf_mac_addr bssid;
2703*5113495bSYour Name 	uint32_t channel;
2704*5113495bSYour Name 	uint32_t numOfRssi;
2705*5113495bSYour Name 
2706*5113495bSYour Name 	/* Rssi history in db */
2707*5113495bSYour Name 	int32_t rssi[];
2708*5113495bSYour Name } tSirWifiSignificantChange, *tpSirWifiSignificantChange;
2709*5113495bSYour Name 
2710*5113495bSYour Name typedef struct {
2711*5113495bSYour Name 	uint32_t requestId;
2712*5113495bSYour Name 
2713*5113495bSYour Name 	bool moreData;
2714*5113495bSYour Name 	uint32_t numResults;
2715*5113495bSYour Name 	tSirWifiSignificantChange ap[];
2716*5113495bSYour Name } tSirWifiSignificantChangeEvent, *tpSirWifiSignificantChangeEvent;
2717*5113495bSYour Name 
2718*5113495bSYour Name typedef struct {
2719*5113495bSYour Name 	uint32_t requestId;
2720*5113495bSYour Name 	uint32_t numResultsAvailable;
2721*5113495bSYour Name } tSirExtScanResultsAvailableIndParams, *tpSirExtScanResultsAvailableIndParams;
2722*5113495bSYour Name 
2723*5113495bSYour Name typedef struct {
2724*5113495bSYour Name 	uint32_t requestId;
2725*5113495bSYour Name 	uint32_t status;
2726*5113495bSYour Name 	uint8_t scanEventType;
2727*5113495bSYour Name 	uint32_t   buckets_scanned;
2728*5113495bSYour Name } tSirExtScanOnScanEventIndParams, *tpSirExtScanOnScanEventIndParams;
2729*5113495bSYour Name 
2730*5113495bSYour Name #define MAX_EPNO_NETWORKS 64
2731*5113495bSYour Name 
2732*5113495bSYour Name #define SIR_PASSPOINT_LIST_MAX_NETWORKS 8
2733*5113495bSYour Name 
2734*5113495bSYour Name /**
2735*5113495bSYour Name  * struct wifi_passpoint_match - wifi passpoint network match
2736*5113495bSYour Name  * @id: network block identifier for the matched network
2737*5113495bSYour Name  * @anqp_len: length of ANQP blob
2738*5113495bSYour Name  * @ap: scan result, with channel and beacon information
2739*5113495bSYour Name  * @anqp: ANQP data, in the information_element format
2740*5113495bSYour Name  */
2741*5113495bSYour Name struct wifi_passpoint_match {
2742*5113495bSYour Name 	uint32_t  request_id;
2743*5113495bSYour Name 	uint32_t  id;
2744*5113495bSYour Name 	uint32_t  anqp_len;
2745*5113495bSYour Name 	tSirWifiScanResult ap;
2746*5113495bSYour Name 	uint8_t   anqp[];
2747*5113495bSYour Name };
2748*5113495bSYour Name #endif /* FEATURE_WLAN_EXTSCAN */
2749*5113495bSYour Name 
2750*5113495bSYour Name #ifdef FEATURE_WLAN_AUTO_SHUTDOWN
2751*5113495bSYour Name struct auto_shutdown_cmd {
2752*5113495bSYour Name 	uint32_t timer_val;
2753*5113495bSYour Name };
2754*5113495bSYour Name #endif
2755*5113495bSYour Name 
2756*5113495bSYour Name #ifdef WLAN_POWER_DEBUG
2757*5113495bSYour Name /**
2758*5113495bSYour Name  * struct power_stats_response - Power stats response
2759*5113495bSYour Name  * @cumulative_sleep_time_ms: cumulative sleep time in ms
2760*5113495bSYour Name  * @cumulative_total_on_time_ms: total awake time in ms
2761*5113495bSYour Name  * @deep_sleep_enter_counter: deep sleep enter counter
2762*5113495bSYour Name  * @last_deep_sleep_enter_tstamp_ms: last deep sleep enter timestamp
2763*5113495bSYour Name  * @debug_register_fmt: debug registers format
2764*5113495bSYour Name  * @num_debug_register: number of debug registers
2765*5113495bSYour Name  * @debug_registers: Pointer to the debug registers buffer
2766*5113495bSYour Name  */
2767*5113495bSYour Name struct power_stats_response {
2768*5113495bSYour Name 	uint32_t cumulative_sleep_time_ms;
2769*5113495bSYour Name 	uint32_t cumulative_total_on_time_ms;
2770*5113495bSYour Name 	uint32_t deep_sleep_enter_counter;
2771*5113495bSYour Name 	uint32_t last_deep_sleep_enter_tstamp_ms;
2772*5113495bSYour Name 	uint32_t debug_register_fmt;
2773*5113495bSYour Name 	uint32_t num_debug_register;
2774*5113495bSYour Name 	uint32_t *debug_registers;
2775*5113495bSYour Name };
2776*5113495bSYour Name #endif
2777*5113495bSYour Name 
2778*5113495bSYour Name #ifdef WLAN_FEATURE_BEACON_RECEPTION_STATS
2779*5113495bSYour Name #define MAX_BCNMISS_BITMAP 8
2780*5113495bSYour Name /**
2781*5113495bSYour Name  * struct bcn_reception_stats_rsp - beacon stats response
2782*5113495bSYour Name  * @total_bcn_cnt: total beacon count (tbtt instances)
2783*5113495bSYour Name  * @total_bmiss_cnt: Total beacon miss count in last 255 beacons, max 255
2784*5113495bSYour Name  * @bmiss_bitmap: This bitmap indicates the status of the last 255 beacons.
2785*5113495bSYour Name  * If a bit is set, that means the corresponding beacon was missed.
2786*5113495bSYour Name  * Bit 0 of bmiss_bitmap[0] represents the most recent beacon.
2787*5113495bSYour Name  * The total_bcn_cnt field indicates how many bits within bmiss_bitmap
2788*5113495bSYour Name  * are valid.
2789*5113495bSYour Name  */
2790*5113495bSYour Name struct bcn_reception_stats_rsp {
2791*5113495bSYour Name 	uint32_t vdev_id;
2792*5113495bSYour Name 	uint32_t total_bcn_cnt;
2793*5113495bSYour Name 	uint32_t total_bmiss_cnt;
2794*5113495bSYour Name 	uint32_t bmiss_bitmap[MAX_BCNMISS_BITMAP];
2795*5113495bSYour Name };
2796*5113495bSYour Name #endif
2797*5113495bSYour Name 
2798*5113495bSYour Name /**
2799*5113495bSYour Name  * struct lfr_firmware_status - LFR status in firmware
2800*5113495bSYour Name  * @is_disabled: Is LFR disabled in FW
2801*5113495bSYour Name  * @disable_lfr_event: Disable attempt done in FW
2802*5113495bSYour Name  */
2803*5113495bSYour Name struct lfr_firmware_status {
2804*5113495bSYour Name 	uint32_t is_disabled;
2805*5113495bSYour Name 	struct completion disable_lfr_event;
2806*5113495bSYour Name };
2807*5113495bSYour Name 
2808*5113495bSYour Name /**
2809*5113495bSYour Name  * struct rso_cmd_status - RSO Command status
2810*5113495bSYour Name  * @vdev_id: Vdev ID for which RSO command sent
2811*5113495bSYour Name  * @status: Status of RSO command sent to FW
2812*5113495bSYour Name  */
2813*5113495bSYour Name struct rso_cmd_status {
2814*5113495bSYour Name 	uint32_t vdev_id;
2815*5113495bSYour Name 	bool status;
2816*5113495bSYour Name };
2817*5113495bSYour Name 
2818*5113495bSYour Name enum {
2819*5113495bSYour Name 	SIR_AP_RX_DATA_OFFLOAD             = 0x00,
2820*5113495bSYour Name 	SIR_STA_RX_DATA_OFFLOAD            = 0x01,
2821*5113495bSYour Name };
2822*5113495bSYour Name 
2823*5113495bSYour Name /**
2824*5113495bSYour Name  * struct sir_set_vdev_ies_per_band
2825*5113495bSYour Name  * @msg_type: message type
2826*5113495bSYour Name  * @len: message length
2827*5113495bSYour Name  * @vdev_id: vdev id
2828*5113495bSYour Name  *
2829*5113495bSYour Name  * Message wrapper structure for eWNI_SME_SET_VDEV_IES_PER_BAND.
2830*5113495bSYour Name  */
2831*5113495bSYour Name struct sir_set_vdev_ies_per_band {
2832*5113495bSYour Name 	uint16_t msg_type;
2833*5113495bSYour Name 	uint16_t len;
2834*5113495bSYour Name 	uint32_t vdev_id;
2835*5113495bSYour Name 	uint16_t dot11_mode;
2836*5113495bSYour Name 	enum QDF_OPMODE device_mode;
2837*5113495bSYour Name };
2838*5113495bSYour Name 
2839*5113495bSYour Name /**
2840*5113495bSYour Name  * struct sir_set_ht_vht_cfg - ht, vht IE config
2841*5113495bSYour Name  * @msg_type: message type
2842*5113495bSYour Name  * @len: message length
2843*5113495bSYour Name  * @pdev_id: pdev id
2844*5113495bSYour Name  * @nss: Nss value
2845*5113495bSYour Name  * @dot11mode: Dot11 mode.
2846*5113495bSYour Name  *
2847*5113495bSYour Name  * Message wrapper structure for set HT/VHT IE req.
2848*5113495bSYour Name  */
2849*5113495bSYour Name struct sir_set_ht_vht_cfg {
2850*5113495bSYour Name 	uint16_t msg_type;
2851*5113495bSYour Name 	uint16_t len;
2852*5113495bSYour Name 	uint32_t pdev_id;
2853*5113495bSYour Name 	uint32_t nss;
2854*5113495bSYour Name 	uint32_t dot11mode;
2855*5113495bSYour Name };
2856*5113495bSYour Name 
2857*5113495bSYour Name #define WIFI_INVALID_PEER_ID            (-1)
2858*5113495bSYour Name #define WIFI_INVALID_VDEV_ID            (-1)
2859*5113495bSYour Name #define WIFI_MAX_AC                     (4)
2860*5113495bSYour Name #define RATE_STAT_MCS_MASK              (0xFF00)
2861*5113495bSYour Name #define RATE_STAT_GET_MCS_INDEX(x)      (((x) & RATE_STAT_MCS_MASK) >> 8)
2862*5113495bSYour Name 
2863*5113495bSYour Name typedef struct {
2864*5113495bSYour Name 	uint32_t paramId;
2865*5113495bSYour Name 	uint8_t ifaceId;
2866*5113495bSYour Name 	uint32_t rspId;
2867*5113495bSYour Name 	uint32_t moreResultToFollow;
2868*5113495bSYour Name 	uint32_t nr_received;
2869*5113495bSYour Name 	union {
2870*5113495bSYour Name 		uint32_t num_peers;
2871*5113495bSYour Name 		uint32_t num_radio;
2872*5113495bSYour Name 	};
2873*5113495bSYour Name 
2874*5113495bSYour Name 	uint32_t peer_event_number;
2875*5113495bSYour Name 	/* Variable  length field - Do not add anything after this */
2876*5113495bSYour Name 	uint8_t results[];
2877*5113495bSYour Name } tSirLLStatsResults, *tpSirLLStatsResults;
2878*5113495bSYour Name 
2879*5113495bSYour Name #ifdef WLAN_FEATURE_LINK_LAYER_STATS
2880*5113495bSYour Name /*---------------------------------------------------------------------------
2881*5113495bSYour Name    WLAN_HAL_LL_NOTIFY_STATS
2882*5113495bSYour Name    ---------------------------------------------------------------------------*/
2883*5113495bSYour Name 
2884*5113495bSYour Name /******************************LINK LAYER Statistics**********************/
2885*5113495bSYour Name 
2886*5113495bSYour Name typedef struct {
2887*5113495bSYour Name 	uint32_t reqId;
2888*5113495bSYour Name 	uint8_t staId;
2889*5113495bSYour Name 	uint32_t mpduSizeThreshold;
2890*5113495bSYour Name 	uint32_t aggressiveStatisticsGathering;
2891*5113495bSYour Name } tSirLLStatsSetReq, *tpSirLLStatsSetReq;
2892*5113495bSYour Name 
2893*5113495bSYour Name typedef struct {
2894*5113495bSYour Name 	uint32_t reqId;
2895*5113495bSYour Name 	uint8_t staId;
2896*5113495bSYour Name 	uint32_t paramIdMask;
2897*5113495bSYour Name 	bool is_mlo_req;
2898*5113495bSYour Name 	uint32_t mlo_vdev_id_bitmap;
2899*5113495bSYour Name } tSirLLStatsGetReq, *tpSirLLStatsGetReq;
2900*5113495bSYour Name 
2901*5113495bSYour Name typedef struct {
2902*5113495bSYour Name 	uint32_t reqId;
2903*5113495bSYour Name 	uint8_t staId;
2904*5113495bSYour Name 	uint32_t statsClearReqMask;
2905*5113495bSYour Name 	uint8_t stopReq;
2906*5113495bSYour Name } tSirLLStatsClearReq, *tpSirLLStatsClearReq;
2907*5113495bSYour Name 
2908*5113495bSYour Name typedef enum {
2909*5113495bSYour Name 	WIFI_DISCONNECTED = 0,
2910*5113495bSYour Name 	WIFI_AUTHENTICATING = 1,
2911*5113495bSYour Name 	WIFI_ASSOCIATING = 2,
2912*5113495bSYour Name 	WIFI_ASSOCIATED = 3,
2913*5113495bSYour Name 	WIFI_EAPOL_STARTED = 4, /* if done by firmware/driver */
2914*5113495bSYour Name 	WIFI_EAPOL_COMPLETED = 5,       /* if done by firmware/driver */
2915*5113495bSYour Name } tSirWifiConnectionState;
2916*5113495bSYour Name 
2917*5113495bSYour Name typedef enum {
2918*5113495bSYour Name 	WIFI_ROAMING_IDLE = 0,
2919*5113495bSYour Name 	WIFI_ROAMING_ACTIVE = 1,
2920*5113495bSYour Name } tSirWifiRoamState;
2921*5113495bSYour Name 
2922*5113495bSYour Name typedef enum {
2923*5113495bSYour Name 	WIFI_INTERFACE_STA = 0,
2924*5113495bSYour Name 	WIFI_INTERFACE_SOFTAP = 1,
2925*5113495bSYour Name 	WIFI_INTERFACE_IBSS = 2,
2926*5113495bSYour Name 	WIFI_INTERFACE_P2P_CLIENT = 3,
2927*5113495bSYour Name 	WIFI_INTERFACE_P2P_GO = 4,
2928*5113495bSYour Name 	WIFI_INTERFACE_NAN = 5,
2929*5113495bSYour Name 	WIFI_INTERFACE_MESH = 6,
2930*5113495bSYour Name 	WIFI_INTERFACE_NDI = 7,
2931*5113495bSYour Name } tSirWifiInterfaceMode;
2932*5113495bSYour Name 
2933*5113495bSYour Name /* set for QOS association */
2934*5113495bSYour Name #define WIFI_CAPABILITY_QOS          0x00000001
2935*5113495bSYour Name /* set for protected assoc (802.11 beacon frame control protected bit set) */
2936*5113495bSYour Name #define WIFI_CAPABILITY_PROTECTED    0x00000002
2937*5113495bSYour Name /* set if 802.11 Extended Capabilities element interworking bit is set */
2938*5113495bSYour Name #define WIFI_CAPABILITY_INTERWORKING 0x00000004
2939*5113495bSYour Name /* set for HS20 association */
2940*5113495bSYour Name #define WIFI_CAPABILITY_HS20         0x00000008
2941*5113495bSYour Name /* set is 802.11 Extended Capabilities element UTF-8 SSID bit is set */
2942*5113495bSYour Name #define WIFI_CAPABILITY_SSID_UTF8    0x00000010
2943*5113495bSYour Name /* set is 802.11 Country Element is present */
2944*5113495bSYour Name #define WIFI_CAPABILITY_COUNTRY      0x00000020
2945*5113495bSYour Name 
2946*5113495bSYour Name struct wifi_interface_info {
2947*5113495bSYour Name 	/* tSirWifiInterfaceMode */
2948*5113495bSYour Name 	/* interface mode */
2949*5113495bSYour Name 	uint8_t mode;
2950*5113495bSYour Name 	/* interface mac address (self) */
2951*5113495bSYour Name 	struct qdf_mac_addr macAddr;
2952*5113495bSYour Name 	/* tSirWifiConnectionState */
2953*5113495bSYour Name 	/* connection state (valid for STA, CLI only) */
2954*5113495bSYour Name 	uint8_t state;
2955*5113495bSYour Name 	/* tSirWifiRoamState */
2956*5113495bSYour Name 	/* roaming state */
2957*5113495bSYour Name 	uint32_t roaming;
2958*5113495bSYour Name 	/* WIFI_CAPABILITY_XXX (self) */
2959*5113495bSYour Name 	uint32_t capabilities;
2960*5113495bSYour Name 	/* null terminated SSID */
2961*5113495bSYour Name 	uint8_t ssid[33];
2962*5113495bSYour Name 	/* bssid */
2963*5113495bSYour Name 	struct qdf_mac_addr bssid;
2964*5113495bSYour Name 	/* country string advertised by AP */
2965*5113495bSYour Name 	uint8_t apCountryStr[REG_ALPHA2_LEN + 1];
2966*5113495bSYour Name 	/* country string for this association */
2967*5113495bSYour Name 	uint8_t countryStr[REG_ALPHA2_LEN + 1];
2968*5113495bSYour Name 	uint8_t time_slice_duty_cycle;
2969*5113495bSYour Name };
2970*5113495bSYour Name 
2971*5113495bSYour Name /**
2972*5113495bSYour Name  * struct wifi_channel_info - channel information
2973*5113495bSYour Name  * @width: channel width (20, 40, 80, 80+80, 160)
2974*5113495bSYour Name  * @center_freq: primary 20 MHz channel
2975*5113495bSYour Name  * @center_freq0: center frequency (MHz) first segment
2976*5113495bSYour Name  * @center_freq1: center frequency (MHz) second segment
2977*5113495bSYour Name  */
2978*5113495bSYour Name struct wifi_channel_info {
2979*5113495bSYour Name 	enum phy_ch_width width;
2980*5113495bSYour Name 	uint32_t center_freq;
2981*5113495bSYour Name 	uint32_t center_freq0;
2982*5113495bSYour Name 	uint32_t center_freq1;
2983*5113495bSYour Name };
2984*5113495bSYour Name 
2985*5113495bSYour Name /**
2986*5113495bSYour Name  * struct wifi_rate_info - wifi rate information
2987*5113495bSYour Name  * @preamble: 0:OFDM, 1:CCK, 2:HT 3:VHT 4..7 reserved
2988*5113495bSYour Name  * @nss: 0:1x1, 1:2x2, 3:3x3, 4:4x4
2989*5113495bSYour Name  * @bw: 0:20MHz, 1:40Mhz, 2:80Mhz, 3:160Mhz
2990*5113495bSYour Name  * @rate_or_mcs_index:
2991*5113495bSYour Name  * * OFDM/CCK: rate code per ieee std in units of 0.5mbps
2992*5113495bSYour Name  * * HT/VHT: mcs index
2993*5113495bSYour Name  * @reserved: reserved
2994*5113495bSYour Name  * @bitrate: bitrate units of 100 Kbps
2995*5113495bSYour Name  */
2996*5113495bSYour Name struct wifi_rate_info {
2997*5113495bSYour Name 	uint32_t preamble:3;
2998*5113495bSYour Name 	uint32_t nss:2;
2999*5113495bSYour Name 	uint32_t bw:3;
3000*5113495bSYour Name 	uint32_t rate_or_mcs_index:8;
3001*5113495bSYour Name 	uint32_t reserved:16;
3002*5113495bSYour Name 	uint32_t bitrate;
3003*5113495bSYour Name };
3004*5113495bSYour Name 
3005*5113495bSYour Name /**
3006*5113495bSYour Name  * struct wifi_channel_stats - channel statistics
3007*5113495bSYour Name  * @channel: channel for which the stats are applicable
3008*5113495bSYour Name  * @on_time: msecs the radio is awake
3009*5113495bSYour Name  * @cca_busy_time: secs the CCA register is busy excluding own tx_time
3010*5113495bSYour Name  * @tx_time: msecs the radio is transmitting on this channel
3011*5113495bSYour Name  * @rx_time: msecs the radio is in active receive on this channel
3012*5113495bSYour Name  */
3013*5113495bSYour Name struct wifi_channel_stats {
3014*5113495bSYour Name 	struct wifi_channel_info channel;
3015*5113495bSYour Name 	uint32_t on_time;
3016*5113495bSYour Name 	uint32_t cca_busy_time;
3017*5113495bSYour Name 	uint32_t tx_time;
3018*5113495bSYour Name 	uint32_t rx_time;
3019*5113495bSYour Name 
3020*5113495bSYour Name };
3021*5113495bSYour Name 
3022*5113495bSYour Name /**
3023*5113495bSYour Name  * struct wifi_radio_stats - per-radio statistics
3024*5113495bSYour Name  * @radio: wifi radio for which the stats are applicable
3025*5113495bSYour Name  * @on_time: msecs the radio is awake
3026*5113495bSYour Name  * @tx_time: msecs the radio is transmitting
3027*5113495bSYour Name  * @rx_time: msecs the radio is in active receive
3028*5113495bSYour Name  * @on_time_scan: msecs the radio is awake due to all scan
3029*5113495bSYour Name  * @on_time_nbd: msecs the radio is awake due to NAN
3030*5113495bSYour Name  * @on_time_gscan: msecs the radio is awake due to Gscan
3031*5113495bSYour Name  * @on_time_roam_scan: msecs the radio is awake due to roam scan
3032*5113495bSYour Name  * @on_time_pno_scan: msecs the radio is awake due to PNO scan
3033*5113495bSYour Name  * @on_time_hs20: msecs the radio is awake due to HS2.0 scans and GAS exchange
3034*5113495bSYour Name  * @on_time_host_scan: msecs the radio is awake due to Host initiated scan
3035*5113495bSYour Name  * @on_time_lpi_scan: msecs the radio is awake due to LPI scan
3036*5113495bSYour Name  * @total_num_tx_power_levels: @tx_time_per_power_level record count
3037*5113495bSYour Name  * @tx_time_per_power_level:  tx time (in milliseconds) per TPC level (0.5 dBm)
3038*5113495bSYour Name  * @more_channels: If more channels are there and will come in next event
3039*5113495bSYour Name  * @num_channels: @channels record count
3040*5113495bSYour Name  * @channels: per-channel statistics
3041*5113495bSYour Name  */
3042*5113495bSYour Name struct wifi_radio_stats {
3043*5113495bSYour Name 	uint32_t radio;
3044*5113495bSYour Name 	uint32_t on_time;
3045*5113495bSYour Name 	uint32_t tx_time;
3046*5113495bSYour Name 	uint32_t rx_time;
3047*5113495bSYour Name 	uint32_t on_time_scan;
3048*5113495bSYour Name 	uint32_t on_time_nbd;
3049*5113495bSYour Name 	uint32_t on_time_gscan;
3050*5113495bSYour Name 	uint32_t on_time_roam_scan;
3051*5113495bSYour Name 	uint32_t on_time_pno_scan;
3052*5113495bSYour Name 	uint32_t on_time_hs20;
3053*5113495bSYour Name 	uint32_t on_time_host_scan;
3054*5113495bSYour Name 	uint32_t on_time_lpi_scan;
3055*5113495bSYour Name 	uint32_t total_num_tx_power_levels;
3056*5113495bSYour Name 	uint32_t *tx_time_per_power_level;
3057*5113495bSYour Name 	uint32_t more_channels;
3058*5113495bSYour Name 	uint32_t num_channels;
3059*5113495bSYour Name 	struct wifi_channel_stats *channels;
3060*5113495bSYour Name };
3061*5113495bSYour Name 
3062*5113495bSYour Name /**
3063*5113495bSYour Name  * struct wifi_rate_stat - per rate statistics
3064*5113495bSYour Name  * @rate: rate information
3065*5113495bSYour Name  * @tx_mpdu: number of successfully transmitted data pkts (ACK rcvd)
3066*5113495bSYour Name  * @rx_mpdu: number of received data pkts
3067*5113495bSYour Name  * @mpdu_lost: number of data packet losses (no ACK)
3068*5113495bSYour Name  * @retries: total number of data pkt retries *
3069*5113495bSYour Name  * @retries_short: number of short data pkt retries
3070*5113495bSYour Name  * @retries_long: number of long data pkt retries
3071*5113495bSYour Name  */
3072*5113495bSYour Name struct wifi_rate_stat {
3073*5113495bSYour Name 	struct wifi_rate_info rate;
3074*5113495bSYour Name 	uint32_t tx_mpdu;
3075*5113495bSYour Name 	uint32_t rx_mpdu;
3076*5113495bSYour Name 	uint32_t mpdu_lost;
3077*5113495bSYour Name 	uint32_t retries;
3078*5113495bSYour Name 	uint32_t retries_short;
3079*5113495bSYour Name 	uint32_t retries_long;
3080*5113495bSYour Name };
3081*5113495bSYour Name 
3082*5113495bSYour Name /* wifi peer type */
3083*5113495bSYour Name typedef enum {
3084*5113495bSYour Name 	WIFI_PEER_STA,
3085*5113495bSYour Name 	WIFI_PEER_AP,
3086*5113495bSYour Name 	WIFI_PEER_P2P_GO,
3087*5113495bSYour Name 	WIFI_PEER_P2P_CLIENT,
3088*5113495bSYour Name 	WIFI_PEER_NAN,
3089*5113495bSYour Name 	WIFI_PEER_TDLS,
3090*5113495bSYour Name 	WIFI_PEER_INVALID,
3091*5113495bSYour Name } tSirWifiPeerType;
3092*5113495bSYour Name 
3093*5113495bSYour Name /**
3094*5113495bSYour Name  * struct wifi_peer_info - per peer information
3095*5113495bSYour Name  * @type: peer type (AP, TDLS, GO etc.)
3096*5113495bSYour Name  * @peer_macaddr: mac address
3097*5113495bSYour Name  * @capabilities: peer WIFI_CAPABILITY_XXX
3098*5113495bSYour Name  * @power_saving: peer power saving mode
3099*5113495bSYour Name  * @num_rate: number of rates
3100*5113495bSYour Name  * @rate_stats: per rate statistics, number of entries  = @num_rate
3101*5113495bSYour Name  */
3102*5113495bSYour Name struct wifi_peer_info {
3103*5113495bSYour Name 	enum wmi_peer_type type;
3104*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
3105*5113495bSYour Name 	uint32_t capabilities;
3106*5113495bSYour Name 	union {
3107*5113495bSYour Name 		uint32_t power_saving;
3108*5113495bSYour Name 		uint32_t num_rate;
3109*5113495bSYour Name 	};
3110*5113495bSYour Name 	struct wifi_rate_stat rate_stats[];
3111*5113495bSYour Name };
3112*5113495bSYour Name 
3113*5113495bSYour Name /**
3114*5113495bSYour Name  * struct wifi_interface_stats - Interface statistics
3115*5113495bSYour Name  * @info: struct containing the current state of the interface
3116*5113495bSYour Name  * @rts_succ_cnt: number of RTS/CTS sequence success
3117*5113495bSYour Name  * @rts_fail_cnt: number of RTS/CTS sequence failures
3118*5113495bSYour Name  * @ppdu_succ_cnt: number of PPDUs transmitted
3119*5113495bSYour Name  * @ppdu_fail_cnt: number of PPDUs that failed to transmit
3120*5113495bSYour Name  * @link_stats: link-level statistics
3121*5113495bSYour Name  * @ac_stats: per-Access Category statistics
3122*5113495bSYour Name  * @num_offload_stats: @offload_stats record count
3123*5113495bSYour Name  * @offload_stats: per-offload statistics
3124*5113495bSYour Name  * @powersave_stats: powersave statistics
3125*5113495bSYour Name  * @vdev_id: vdev id
3126*5113495bSYour Name  *
3127*5113495bSYour Name  * Statistics corresponding to 2nd most LSB in wifi statistics bitmap
3128*5113495bSYour Name  * for getting statistics
3129*5113495bSYour Name  */
3130*5113495bSYour Name struct wifi_interface_stats {
3131*5113495bSYour Name 	struct wifi_interface_info info;
3132*5113495bSYour Name 	uint32_t rts_succ_cnt;
3133*5113495bSYour Name 	uint32_t rts_fail_cnt;
3134*5113495bSYour Name 	uint32_t ppdu_succ_cnt;
3135*5113495bSYour Name 	uint32_t ppdu_fail_cnt;
3136*5113495bSYour Name 	wmi_iface_link_stats link_stats;
3137*5113495bSYour Name 	wmi_wmm_ac_stats ac_stats[WIFI_AC_MAX];
3138*5113495bSYour Name 	uint32_t num_offload_stats;
3139*5113495bSYour Name 	wmi_iface_offload_stats offload_stats[WMI_OFFLOAD_STATS_TYPE_MAX];
3140*5113495bSYour Name 	wmi_iface_powersave_stats powersave_stats;
3141*5113495bSYour Name 	uint8_t vdev_id;
3142*5113495bSYour Name };
3143*5113495bSYour Name 
3144*5113495bSYour Name /**
3145*5113495bSYour Name  * struct wifi_peer_stat - peer statistics
3146*5113495bSYour Name  * @num_peers: number of peers
3147*5113495bSYour Name  * @peer_info: per peer statistics
3148*5113495bSYour Name  *
3149*5113495bSYour Name  * Peer statistics - corresponding to 3rd most LSB in
3150*5113495bSYour Name  * wifi statistics bitmap for getting statistics
3151*5113495bSYour Name  */
3152*5113495bSYour Name struct wifi_peer_stat {
3153*5113495bSYour Name 	uint32_t num_peers;
3154*5113495bSYour Name 	struct wifi_peer_info peer_info[];
3155*5113495bSYour Name };
3156*5113495bSYour Name 
3157*5113495bSYour Name /* wifi statistics bitmap  for getting statistics */
3158*5113495bSYour Name #define WMI_LINK_STATS_RADIO          0x00000001
3159*5113495bSYour Name #define WMI_LINK_STATS_IFACE          0x00000002
3160*5113495bSYour Name #define WMI_LINK_STATS_ALL_PEER       0x00000004
3161*5113495bSYour Name #define WMI_LINK_STATS_PER_PEER       0x00000008
3162*5113495bSYour Name 
3163*5113495bSYour Name /* wifi statistics bitmap  for clearing statistics */
3164*5113495bSYour Name /* all radio statistics */
3165*5113495bSYour Name #define WIFI_STATS_RADIO              0x00000001
3166*5113495bSYour Name /* cca_busy_time (within radio statistics) */
3167*5113495bSYour Name #define WIFI_STATS_RADIO_CCA          0x00000002
3168*5113495bSYour Name /* all channel statistics (within radio statistics) */
3169*5113495bSYour Name #define WIFI_STATS_RADIO_CHANNELS     0x00000004
3170*5113495bSYour Name /* all scan statistics (within radio statistics) */
3171*5113495bSYour Name #define WIFI_STATS_RADIO_SCAN         0x00000008
3172*5113495bSYour Name /* all interface statistics */
3173*5113495bSYour Name #define WIFI_STATS_IFACE              0x00000010
3174*5113495bSYour Name /* all tx rate statistics (within interface statistics) */
3175*5113495bSYour Name #define WIFI_STATS_IFACE_TXRATE       0x00000020
3176*5113495bSYour Name /* all ac statistics (within interface statistics) */
3177*5113495bSYour Name #define WIFI_STATS_IFACE_AC           0x00000040
3178*5113495bSYour Name /* all contention (min, max, avg) statistics (within ac statistics) */
3179*5113495bSYour Name #define WIFI_STATS_IFACE_CONTENTION   0x00000080
3180*5113495bSYour Name /* All peer stats on this interface */
3181*5113495bSYour Name #define WIFI_STATS_IFACE_ALL_PEER      0x00000100
3182*5113495bSYour Name /* Clear particular peer stats depending on the peer_mac */
3183*5113495bSYour Name #define WIFI_STATS_IFACE_PER_PEER      0x00000200
3184*5113495bSYour Name 
3185*5113495bSYour Name /**
3186*5113495bSYour Name  * struct sir_wifi_iface_tx_fail - TX failure event
3187*5113495bSYour Name  * @tid: TX TID
3188*5113495bSYour Name  * @msdu_num: TX MSDU failed counter
3189*5113495bSYour Name  * @status: TX status from HTT message.
3190*5113495bSYour Name  *          Only failure status will be involved.
3191*5113495bSYour Name  */
3192*5113495bSYour Name struct sir_wifi_iface_tx_fail {
3193*5113495bSYour Name 	uint8_t  tid;
3194*5113495bSYour Name 	uint16_t msdu_num;
3195*5113495bSYour Name 	enum htt_tx_status status;
3196*5113495bSYour Name };
3197*5113495bSYour Name 
3198*5113495bSYour Name /**
3199*5113495bSYour Name  * struct sir_wifi_chan_cca_stats - channal CCA stats
3200*5113495bSYour Name  * @vdev_id: vdev ID
3201*5113495bSYour Name  * @idle_time: percentage of idle time, no TX, no RX, no interference
3202*5113495bSYour Name  * @tx_time: percentage of time transmitting packets
3203*5113495bSYour Name  * @rx_in_bss_time: percentage of time receiving packets in current BSS
3204*5113495bSYour Name  * @rx_out_bss_time: percentage of time receiving packets not in current BSS
3205*5113495bSYour Name  * @rx_busy_time: percentage of time interference detected
3206*5113495bSYour Name  * @rx_in_bad_cond_time: percentage of time receiving packets with errors
3207*5113495bSYour Name  *	or packets flagged as retransmission or seqnum discontinued.
3208*5113495bSYour Name  * @tx_in_bad_cond_time: percentage of time the device transmitted packets
3209*5113495bSYour Name  *	that haven't been ACKed.
3210*5113495bSYour Name  * @wlan_not_avail_time: percentage of time the chip is unable to
3211*5113495bSYour Name  *	work in normal conditions.
3212*5113495bSYour Name  */
3213*5113495bSYour Name struct sir_wifi_chan_cca_stats {
3214*5113495bSYour Name 	uint32_t vdev_id;
3215*5113495bSYour Name 	uint32_t idle_time;
3216*5113495bSYour Name 	uint32_t tx_time;
3217*5113495bSYour Name 	uint32_t rx_in_bss_time;
3218*5113495bSYour Name 	uint32_t rx_out_bss_time;
3219*5113495bSYour Name 	uint32_t rx_busy_time;
3220*5113495bSYour Name 	uint32_t rx_in_bad_cond_time;
3221*5113495bSYour Name 	uint32_t tx_in_bad_cond_time;
3222*5113495bSYour Name 	uint32_t wlan_not_avail_time;
3223*5113495bSYour Name };
3224*5113495bSYour Name 
3225*5113495bSYour Name #define WIFI_MAX_CHAINS                 8
3226*5113495bSYour Name 
3227*5113495bSYour Name /**
3228*5113495bSYour Name  * struct sir_wifi_peer_signal_stats - peer signal stats
3229*5113495bSYour Name  * @vdev_id: vdev ID
3230*5113495bSYour Name  * @peer_id: peer ID
3231*5113495bSYour Name  * @per_ant_snr: per antenna SNR
3232*5113495bSYour Name  * @nf: peer background noise
3233*5113495bSYour Name  * @per_ant_rx_mpdus: MPDUs received per antenna
3234*5113495bSYour Name  * @per_ant_tx_mpdus: MPDUs transferred per antenna
3235*5113495bSYour Name  * @num_chain: valid chain count
3236*5113495bSYour Name  */
3237*5113495bSYour Name struct sir_wifi_peer_signal_stats {
3238*5113495bSYour Name 	uint32_t vdev_id;
3239*5113495bSYour Name 	uint32_t peer_id;
3240*5113495bSYour Name 
3241*5113495bSYour Name 	/* per antenna SNR in current bss */
3242*5113495bSYour Name 	int32_t per_ant_snr[WIFI_MAX_CHAINS];
3243*5113495bSYour Name 
3244*5113495bSYour Name 	/* Background noise */
3245*5113495bSYour Name 	int32_t nf[WIFI_MAX_CHAINS];
3246*5113495bSYour Name 
3247*5113495bSYour Name 	uint32_t per_ant_rx_mpdus[WIFI_MAX_CHAINS];
3248*5113495bSYour Name 	uint32_t per_ant_tx_mpdus[WIFI_MAX_CHAINS];
3249*5113495bSYour Name 	uint32_t num_chain;
3250*5113495bSYour Name };
3251*5113495bSYour Name 
3252*5113495bSYour Name #define WIFI_VDEV_NUM           4
3253*5113495bSYour Name #define WFIF_MCS_NUM            10
3254*5113495bSYour Name #define WIFI_AGGR_NUM           8
3255*5113495bSYour Name #define WIFI_DELAY_SIZE         11
3256*5113495bSYour Name 
3257*5113495bSYour Name /**
3258*5113495bSYour Name  * struct sir_wifi_tx - per AC tx stats
3259*5113495bSYour Name  * @msdus: number of totoal MSDUs on MAC layer in the period
3260*5113495bSYour Name  * @mpdus: number of totoal MPDUs on MAC layer in the period
3261*5113495bSYour Name  * @ppdus: number of totoal PPDUs on PHY layer in the period
3262*5113495bSYour Name  * @bytes: bytes of tx data on MAC layer in the period
3263*5113495bSYour Name  * @drops: number of TX packets cancelled due to any reason in the period,
3264*5113495bSYour Name  *	such as WMM limitation/bandwidth limitation/radio congestion
3265*5113495bSYour Name  * @drop_bytes: bytes of dropped TX packets in the period
3266*5113495bSYour Name  * @retries: number of unacked transmissions of MPDUs
3267*5113495bSYour Name  * @failed: number of packets have not been ACKed despite retried
3268*5113495bSYour Name  * @aggr_len: length of the MPDU aggregation size buffer
3269*5113495bSYour Name  * @mpdu_aggr_size: histogram of MPDU aggregation size
3270*5113495bSYour Name  * @success_mcs_len: length of success mcs buffer
3271*5113495bSYour Name  * @success_mcs: histogram of successful received MPDUs encoding rate
3272*5113495bSYour Name  * @fail_mcs_len: length of failed mcs buffer
3273*5113495bSYour Name  * @fail_mcs: histogram of failed received MPDUs encoding rate
3274*5113495bSYour Name  * @delay_len: length of the delay histofram buffer
3275*5113495bSYour Name  * @delay: histogram of delays on MAC layer
3276*5113495bSYour Name  */
3277*5113495bSYour Name struct sir_wifi_tx {
3278*5113495bSYour Name 	uint32_t msdus;
3279*5113495bSYour Name 	uint32_t mpdus;
3280*5113495bSYour Name 	uint32_t ppdus;
3281*5113495bSYour Name 	uint32_t bytes;
3282*5113495bSYour Name 	uint32_t drops;
3283*5113495bSYour Name 	uint32_t drop_bytes;
3284*5113495bSYour Name 	uint32_t retries;
3285*5113495bSYour Name 	uint32_t failed;
3286*5113495bSYour Name 	uint32_t aggr_len;
3287*5113495bSYour Name 	uint32_t *mpdu_aggr_size;
3288*5113495bSYour Name 	uint32_t success_mcs_len;
3289*5113495bSYour Name 	uint32_t *success_mcs;
3290*5113495bSYour Name 	uint32_t fail_mcs_len;
3291*5113495bSYour Name 	uint32_t *fail_mcs;
3292*5113495bSYour Name 	uint32_t delay_len;
3293*5113495bSYour Name 	uint32_t *delay;
3294*5113495bSYour Name };
3295*5113495bSYour Name 
3296*5113495bSYour Name /**
3297*5113495bSYour Name  * struct sir_wifi_rx - per AC rx stats
3298*5113495bSYour Name  * @mpdus: number of RX packets on MAC layer
3299*5113495bSYour Name  * @bytes: bytes of RX packets on MAC layer
3300*5113495bSYour Name  * @ppdus: number of RX packets on PHY layer
3301*5113495bSYour Name  * @ppdu_bytes: bytes of RX packets on PHY layer
3302*5113495bSYour Name  * @mpdu_lost: number of discontinuity in seqnum
3303*5113495bSYour Name  * @mpdu_retry: number of RX packets flagged as retransmissions
3304*5113495bSYour Name  * @mpdu_dup: number of RX packets identified as duplicates
3305*5113495bSYour Name  * @mpdu_discard: number of RX packets discarded
3306*5113495bSYour Name  * @aggr_len: length of MPDU aggregation histogram buffer
3307*5113495bSYour Name  * @mpdu_aggr: histogram of MPDU aggregation size
3308*5113495bSYour Name  * @mcs_len: length of mcs histogram buffer
3309*5113495bSYour Name  * @mcs: histogram of encoding rate.
3310*5113495bSYour Name  */
3311*5113495bSYour Name struct sir_wifi_rx {
3312*5113495bSYour Name 	uint32_t mpdus;
3313*5113495bSYour Name 	uint32_t bytes;
3314*5113495bSYour Name 	uint32_t ppdus;
3315*5113495bSYour Name 	uint32_t ppdu_bytes;
3316*5113495bSYour Name 	uint32_t mpdu_lost;
3317*5113495bSYour Name 	uint32_t mpdu_retry;
3318*5113495bSYour Name 	uint32_t mpdu_dup;
3319*5113495bSYour Name 	uint32_t mpdu_discard;
3320*5113495bSYour Name 	uint32_t aggr_len;
3321*5113495bSYour Name 	uint32_t *mpdu_aggr;
3322*5113495bSYour Name 	uint32_t mcs_len;
3323*5113495bSYour Name 	uint32_t *mcs;
3324*5113495bSYour Name };
3325*5113495bSYour Name 
3326*5113495bSYour Name /**
3327*5113495bSYour Name  * struct sir_wifi_ll_ext_wmm_ac_stats - stats for WMM AC
3328*5113495bSYour Name  * @type: WMM AC type
3329*5113495bSYour Name  * @tx_stats: pointer to TX stats
3330*5113495bSYour Name  * @rx_stats: pointer to RX stats
3331*5113495bSYour Name  */
3332*5113495bSYour Name struct sir_wifi_ll_ext_wmm_ac_stats {
3333*5113495bSYour Name 	uint32_t type;
3334*5113495bSYour Name 	struct sir_wifi_tx *tx_stats;
3335*5113495bSYour Name 	struct sir_wifi_rx *rx_stats;
3336*5113495bSYour Name };
3337*5113495bSYour Name 
3338*5113495bSYour Name /**
3339*5113495bSYour Name  * struct sir_wifi_ll_ext_peer_stats - per peer stats
3340*5113495bSYour Name  * @peer_id: peer ID
3341*5113495bSYour Name  * @vdev_id: VDEV ID
3342*5113495bSYour Name  * @mac_address: MAC address
3343*5113495bSYour Name  * @sta_ps_inds: how many times STAs go to sleep
3344*5113495bSYour Name  * @sta_ps_durs: total sleep time of STAs (units in ms)
3345*5113495bSYour Name  * @rx_probe_reqs: number of probe requests received
3346*5113495bSYour Name  * @rx_oth_mgmts: number of other management frames received,
3347*5113495bSYour Name  *		  not including probe requests
3348*5113495bSYour Name  * @peer_signal_stat: signal stats
3349*5113495bSYour Name  * @ac_stats: WMM BE/BK/VI/VO stats
3350*5113495bSYour Name  */
3351*5113495bSYour Name struct sir_wifi_ll_ext_peer_stats {
3352*5113495bSYour Name 	uint32_t peer_id;
3353*5113495bSYour Name 	uint32_t vdev_id;
3354*5113495bSYour Name 	tSirMacAddr mac_address;
3355*5113495bSYour Name 	uint32_t sta_ps_inds;
3356*5113495bSYour Name 	uint32_t sta_ps_durs;
3357*5113495bSYour Name 	uint32_t rx_probe_reqs;
3358*5113495bSYour Name 	uint32_t rx_oth_mgmts;
3359*5113495bSYour Name 	struct sir_wifi_peer_signal_stats peer_signal_stats;
3360*5113495bSYour Name 	struct sir_wifi_ll_ext_wmm_ac_stats ac_stats[WIFI_MAX_AC];
3361*5113495bSYour Name };
3362*5113495bSYour Name 
3363*5113495bSYour Name /**
3364*5113495bSYour Name  * struct sir_wifi_ll_ext_stats - link layer stats report
3365*5113495bSYour Name  * @trigger_cond_id:  Indicate what triggered this event.
3366*5113495bSYour Name  *	1: timeout. 2: threshold
3367*5113495bSYour Name  * @cca_chgd_bitmap: Bitmap to indicate changed channel CCA stats
3368*5113495bSYour Name  *	which exceeded the thresholds
3369*5113495bSYour Name  * @sig_chgd_bitmap: Bitmap to indicate changed peer signal stats
3370*5113495bSYour Name  *	which exceeded the thresholds
3371*5113495bSYour Name  * @tx_chgd_bitmap: Bitmap to indicate changed TX counters
3372*5113495bSYour Name  *	which exceeded the thresholds
3373*5113495bSYour Name  * @rx_chgd_bitmap: Bitmap to indicate changed RX counters
3374*5113495bSYour Name  *	which exceeded the thresholds
3375*5113495bSYour Name  * @chan_cca_stats: channel CCA stats
3376*5113495bSYour Name  * @peer_signal_stats: peer signal stats
3377*5113495bSYour Name  * @tx_mpdu_aggr_array_len: length of TX MPDU aggregation buffer
3378*5113495bSYour Name  * @tx_succ_mcs_array_len: length of mcs buffer for ACKed MPDUs
3379*5113495bSYour Name  * @tx_fail_mcs_array_len: length of mcs buffer for no-ACKed MPDUs
3380*5113495bSYour Name  * @tx_delay_array_len: length of delay stats buffer
3381*5113495bSYour Name  * @rx_mpdu_aggr_array_len: length of RX MPDU aggregation buffer
3382*5113495bSYour Name  * @rx_mcs_array_len: length of RX mcs stats buffer
3383*5113495bSYour Name  * @peer_stats: peer stats
3384*5113495bSYour Name  * @cca: physical channel CCA stats
3385*5113495bSYour Name  * @stats: pointer to stats data buffer.
3386*5113495bSYour Name  *
3387*5113495bSYour Name  * Structure of the whole statistics is like this:
3388*5113495bSYour Name  *     ---------------------------------
3389*5113495bSYour Name  *     |      trigger_cond_i           |
3390*5113495bSYour Name  *     +-------------------------------+
3391*5113495bSYour Name  *     |      cca_chgd_bitmap          |
3392*5113495bSYour Name  *     +-------------------------------+
3393*5113495bSYour Name  *     |      sig_chgd_bitmap          |
3394*5113495bSYour Name  *     +-------------------------------+
3395*5113495bSYour Name  *     |      tx_chgd_bitmap           |
3396*5113495bSYour Name  *     +-------------------------------+
3397*5113495bSYour Name  *     |      rx_chgd_bitmap           |
3398*5113495bSYour Name  *     +-------------------------------+
3399*5113495bSYour Name  *     |      peer_num                 |
3400*5113495bSYour Name  *     +-------------------------------+
3401*5113495bSYour Name  *     |      channel_num              |
3402*5113495bSYour Name  *     +-------------------------------+
3403*5113495bSYour Name  *     |      tx_mpdu_aggr_array_len   |
3404*5113495bSYour Name  *     +-------------------------------+
3405*5113495bSYour Name  *     |      tx_succ_mcs_array_len    |
3406*5113495bSYour Name  *     +-------------------------------+
3407*5113495bSYour Name  *     |      tx_fail_mcs_array_len    |
3408*5113495bSYour Name  *     +-------------------------------+
3409*5113495bSYour Name  *     |      tx_delay_array_len       |
3410*5113495bSYour Name  *     +-------------------------------+
3411*5113495bSYour Name  *     |      rx_mpdu_aggr_array_len   |
3412*5113495bSYour Name  *     +-------------------------------+
3413*5113495bSYour Name  *     |      rx_mcs_array_len         |
3414*5113495bSYour Name  *     +-------------------------------+
3415*5113495bSYour Name  *     |      pointer to CCA stats     |
3416*5113495bSYour Name  *     +-------------------------------+
3417*5113495bSYour Name  *     |      pointer to peer stats    |
3418*5113495bSYour Name  *     +-------------------------------+
3419*5113495bSYour Name  *     |      CCA stats                |
3420*5113495bSYour Name  *     +-------------------------------+
3421*5113495bSYour Name  *     |      peer_stats               |----+
3422*5113495bSYour Name  *     +-------------------------------+    |
3423*5113495bSYour Name  *     |      per peer signals stats   |<---+
3424*5113495bSYour Name  *     |        peer0 ~ peern          |    |
3425*5113495bSYour Name  *     +-------------------------------+    |
3426*5113495bSYour Name  *     | TX aggr/mcs parameters array  |    |
3427*5113495bSYour Name  *     | Length of this buffer is      |    |
3428*5113495bSYour Name  *     | configurable for user layer.  |<-+ |
3429*5113495bSYour Name  *     +-------------------------------+  | |
3430*5113495bSYour Name  *     |      per peer tx stats        |--+ |
3431*5113495bSYour Name  *     |         BE                    | <--+
3432*5113495bSYour Name  *     |         BK                    |    |
3433*5113495bSYour Name  *     |         VI                    |    |
3434*5113495bSYour Name  *     |         VO                    |    |
3435*5113495bSYour Name  *     +-------------------------------+    |
3436*5113495bSYour Name  *     | TX aggr/mcs parameters array  |    |
3437*5113495bSYour Name  *     | Length of this buffer is      |    |
3438*5113495bSYour Name  *     | configurable for user layer.  |<-+ |
3439*5113495bSYour Name  *     +-------------------------------+  | |
3440*5113495bSYour Name  *     |      peer peer rx stats       |--+ |
3441*5113495bSYour Name  *     |         BE                    | <--+
3442*5113495bSYour Name  *     |         BE                    |
3443*5113495bSYour Name  *     |         BK                    |
3444*5113495bSYour Name  *     |         VI                    |
3445*5113495bSYour Name  *     |         VO                    |
3446*5113495bSYour Name  *     ---------------------------------
3447*5113495bSYour Name  */
3448*5113495bSYour Name struct sir_wifi_ll_ext_stats {
3449*5113495bSYour Name 	uint32_t trigger_cond_id;
3450*5113495bSYour Name 	uint32_t cca_chgd_bitmap;
3451*5113495bSYour Name 	uint32_t sig_chgd_bitmap;
3452*5113495bSYour Name 	uint32_t tx_chgd_bitmap;
3453*5113495bSYour Name 	uint32_t rx_chgd_bitmap;
3454*5113495bSYour Name 	uint8_t peer_num;
3455*5113495bSYour Name 	uint8_t channel_num;
3456*5113495bSYour Name 	uint32_t tx_mpdu_aggr_array_len;
3457*5113495bSYour Name 	uint32_t tx_succ_mcs_array_len;
3458*5113495bSYour Name 	uint32_t tx_fail_mcs_array_len;
3459*5113495bSYour Name 	uint32_t tx_delay_array_len;
3460*5113495bSYour Name 	uint32_t rx_mpdu_aggr_array_len;
3461*5113495bSYour Name 	uint32_t rx_mcs_array_len;
3462*5113495bSYour Name 	struct sir_wifi_ll_ext_peer_stats *peer_stats;
3463*5113495bSYour Name 	struct sir_wifi_chan_cca_stats *cca;
3464*5113495bSYour Name 	uint8_t stats[];
3465*5113495bSYour Name };
3466*5113495bSYour Name 
3467*5113495bSYour Name /**
3468*5113495bSYour Name  * struct sir_channel_cca_threshold - threshold for channel CCA
3469*5113495bSYour Name  * @idle_time: idle time, no TX, no RX, no interference
3470*5113495bSYour Name  * @tx_time: time transmitting packets
3471*5113495bSYour Name  * @rx_in_bss_time: time receiving packets in current BSSs
3472*5113495bSYour Name  * @rx_out_bss_time: time receiving packets not in current BSSs
3473*5113495bSYour Name  * @rx_busy_time: time interference detected
3474*5113495bSYour Name  * @rx_in_bad_cond_time: receiving packets with errors
3475*5113495bSYour Name  * @tx_in_bad_cond_time: time transmitted packets not been ACKed
3476*5113495bSYour Name  * @wlan_not_avail_time: wlan card cannot work
3477*5113495bSYour Name  */
3478*5113495bSYour Name struct sir_channel_cca_threshold {
3479*5113495bSYour Name 	uint32_t idle_time;
3480*5113495bSYour Name 	uint32_t tx_time;
3481*5113495bSYour Name 	uint32_t rx_in_bss_time;
3482*5113495bSYour Name 	uint32_t rx_out_bss_time;
3483*5113495bSYour Name 	uint32_t rx_busy_time;
3484*5113495bSYour Name 	uint32_t rx_in_bad_cond_time;
3485*5113495bSYour Name 	uint32_t tx_in_bad_cond_time;
3486*5113495bSYour Name 	uint32_t wlan_not_avail_time;
3487*5113495bSYour Name };
3488*5113495bSYour Name 
3489*5113495bSYour Name /**
3490*5113495bSYour Name  * struct sir_signal_threshold - threshold for per peer sigbal
3491*5113495bSYour Name  * @snr: signal to noise rate
3492*5113495bSYour Name  * @nf: noise floor
3493*5113495bSYour Name  */
3494*5113495bSYour Name struct sir_signal_threshold {
3495*5113495bSYour Name 	uint32_t snr;
3496*5113495bSYour Name 	uint32_t nf;
3497*5113495bSYour Name };
3498*5113495bSYour Name 
3499*5113495bSYour Name /**
3500*5113495bSYour Name  * struct sir_tx_threshold - threshold for TX
3501*5113495bSYour Name  * @msdu: TX MSDUs on MAC layer
3502*5113495bSYour Name  * @mpdu: TX MPDUs on MAC layer
3503*5113495bSYour Name  * @ppdu: TX PPDUs on MAC layer
3504*5113495bSYour Name  * @bytes: TX bytes on MAC layer
3505*5113495bSYour Name  * @msdu_drop: drooped MSDUs
3506*5113495bSYour Name  * @byte_drop: dropped Bytes
3507*5113495bSYour Name  * @mpdu_retry: MPDU not acked
3508*5113495bSYour Name  * @ppdu_fail: PPDUs which received no block ack
3509*5113495bSYour Name  * @aggregation: aggregation size
3510*5113495bSYour Name  * @succ_mcs: histogram of encoding rate for acked PPDUs
3511*5113495bSYour Name  * @fail_mcs: histogram of encoding rate for no-acked PPDUs
3512*5113495bSYour Name  */
3513*5113495bSYour Name struct sir_tx_threshold {
3514*5113495bSYour Name 	uint32_t msdu;
3515*5113495bSYour Name 	uint32_t mpdu;
3516*5113495bSYour Name 	uint32_t ppdu;
3517*5113495bSYour Name 	uint32_t bytes;
3518*5113495bSYour Name 	uint32_t msdu_drop;
3519*5113495bSYour Name 	uint32_t byte_drop;
3520*5113495bSYour Name 	uint32_t mpdu_retry;
3521*5113495bSYour Name 	uint32_t mpdu_fail;
3522*5113495bSYour Name 	uint32_t ppdu_fail;
3523*5113495bSYour Name 	uint32_t aggregation;
3524*5113495bSYour Name 	uint32_t succ_mcs;
3525*5113495bSYour Name 	uint32_t fail_mcs;
3526*5113495bSYour Name 	uint32_t delay;
3527*5113495bSYour Name };
3528*5113495bSYour Name 
3529*5113495bSYour Name /**
3530*5113495bSYour Name  * struct sir_rx_threshold - threshold for RX
3531*5113495bSYour Name  * @mpdu: RX MPDUs on MAC layer
3532*5113495bSYour Name  * @bytes: RX bytes on MAC layer
3533*5113495bSYour Name  * @ppdu: RX PPDU on PHY layer
3534*5113495bSYour Name  * @ppdu_bytes: RX bytes on PHY layer
3535*5113495bSYour Name  * @disorder: discontinuity in seqnum
3536*5113495bSYour Name  * @mpdu_retry: MPDUs flagged as retry
3537*5113495bSYour Name  * @mpdu_dup: MPDUs identified as duplicated
3538*5113495bSYour Name  * @aggregation: aggregation size
3539*5113495bSYour Name  * @mcs: histogram of encoding rate for PPDUs
3540*5113495bSYour Name  * @ps_inds: power save indication
3541*5113495bSYour Name  * @ps_durs: total time in power save
3542*5113495bSYour Name  * @probe_reqs: probe request received
3543*5113495bSYour Name  * @other_mgmt: other MGMT frames received
3544*5113495bSYour Name  */
3545*5113495bSYour Name struct sir_rx_threshold {
3546*5113495bSYour Name 	uint32_t mpdu;
3547*5113495bSYour Name 	uint32_t bytes;
3548*5113495bSYour Name 	uint32_t ppdu;
3549*5113495bSYour Name 	uint32_t ppdu_bytes;
3550*5113495bSYour Name 	uint32_t disorder;
3551*5113495bSYour Name 	uint32_t mpdu_lost;
3552*5113495bSYour Name 	uint32_t mpdu_retry;
3553*5113495bSYour Name 	uint32_t mpdu_dup;
3554*5113495bSYour Name 	uint32_t mpdu_discard;
3555*5113495bSYour Name 	uint32_t aggregation;
3556*5113495bSYour Name 	uint32_t mcs;
3557*5113495bSYour Name 	uint32_t ps_inds;
3558*5113495bSYour Name 	uint32_t ps_durs;
3559*5113495bSYour Name 	uint32_t probe_reqs;
3560*5113495bSYour Name 	uint32_t other_mgmt;
3561*5113495bSYour Name };
3562*5113495bSYour Name 
3563*5113495bSYour Name /**
3564*5113495bSYour Name  * struct sir_wifi_ll_ext_stats_threshold - Threshold for stats update
3565*5113495bSYour Name  * @period: MAC counter indication period (unit in ms)
3566*5113495bSYour Name  * @enable: if threshold mechanism is enabled or disabled
3567*5113495bSYour Name  * @enable_bitmap: whether dedicated threshold is enabed.
3568*5113495bSYour Name  *     Every MAC counter has a dedicated threshold. If the dedicated
3569*5113495bSYour Name  *     threshold is not set in the bitmap, global threshold will take
3570*5113495bSYour Name  *     effect.
3571*5113495bSYour Name  * @global: whether clobal threshold is enabled.
3572*5113495bSYour Name  *     When both global and dedicated threshold are disabled, MAC counter
3573*5113495bSYour Name  *     will indicate stats periodically.
3574*5113495bSYour Name  * @global_threshold: global threshold value
3575*5113495bSYour Name  * @cca_bitmap: bitmap for CCA.
3576*5113495bSYour Name  *     Bit0: idle time
3577*5113495bSYour Name  *     Bit1: tx time
3578*5113495bSYour Name  *     Bit2: RX in BSS
3579*5113495bSYour Name  *     Bit3: RX out of BSS
3580*5113495bSYour Name  *     Bit4: medium busy
3581*5113495bSYour Name  *     Bit5: RX bad
3582*5113495bSYour Name  *     Bit6: TX bad
3583*5113495bSYour Name  *     Bit7: WLAN card not available
3584*5113495bSYour Name  * @signal_bitmap:
3585*5113495bSYour Name  *     Bit0: Per channel SNR counter
3586*5113495bSYour Name  *     Bit1: Per channel noise floor counter
3587*5113495bSYour Name  * @tx_bitmap:  bitmap for TX counters
3588*5113495bSYour Name  *     Bit0: TX counter unit in MSDU
3589*5113495bSYour Name  *     Bit1: TX counter unit in MPDU
3590*5113495bSYour Name  *     Bit2: TX counter unit in PPDU
3591*5113495bSYour Name  *     Bit3: TX counter unit in byte
3592*5113495bSYour Name  *     Bit4: Dropped MSDUs
3593*5113495bSYour Name  *     Bit5: Dropped Bytes
3594*5113495bSYour Name  *     Bit6: MPDU retry counter
3595*5113495bSYour Name  *     Bit7: MPDU failure counter
3596*5113495bSYour Name  *     Bit8: PPDU failure counter
3597*5113495bSYour Name  *     Bit9: MPDU aggregation counter
3598*5113495bSYour Name  *     Bit10: MCS counter for ACKed MPDUs
3599*5113495bSYour Name  *     Bit11: MCS counter for Failed MPDUs
3600*5113495bSYour Name  *     Bit12: TX Delay counter
3601*5113495bSYour Name  * @rx_bitmap:bitmap for RX counters
3602*5113495bSYour Name  *     Bit0: MAC RX counter unit in MPDU
3603*5113495bSYour Name  *     Bit1: MAC RX counter unit in byte
3604*5113495bSYour Name  *     Bit2: PHY RX counter unit in PPDU
3605*5113495bSYour Name  *     Bit3: PHY RX counter unit in byte
3606*5113495bSYour Name  *     Bit4: Disorder counter
3607*5113495bSYour Name  *     Bit5: Retry counter
3608*5113495bSYour Name  *     Bit6: Duplication counter
3609*5113495bSYour Name  *     Bit7: Discard counter
3610*5113495bSYour Name  *     Bit8: MPDU aggregation size counter
3611*5113495bSYour Name  *     Bit9: MCS counter
3612*5113495bSYour Name  *     Bit10: Peer STA power state change (wake to sleep) counter
3613*5113495bSYour Name  *     Bit11: Peer STA power save counter, total time in PS mode
3614*5113495bSYour Name  *     Bit12: Probe request counter
3615*5113495bSYour Name  *     Bit13: Other management frames counter
3616*5113495bSYour Name  * @cca_thresh: CCA threshold
3617*5113495bSYour Name  * @signal_thresh: signal threshold
3618*5113495bSYour Name  * @tx_thresh: TX threshold
3619*5113495bSYour Name  * @rx_thresh: RX threshold
3620*5113495bSYour Name  *
3621*5113495bSYour Name  * Generally, Link layer statistics is reported periodically. But if the
3622*5113495bSYour Name  * variation of one stats of compared to the previous notification exceeds
3623*5113495bSYour Name  * a threshold, FW will report the new stats immediately.
3624*5113495bSYour Name  * This structure contains threshold for different counters.
3625*5113495bSYour Name  */
3626*5113495bSYour Name struct sir_ll_ext_stats_threshold {
3627*5113495bSYour Name 	uint32_t period;
3628*5113495bSYour Name 	uint32_t enable;
3629*5113495bSYour Name 	uint32_t enable_bitmap;
3630*5113495bSYour Name 	uint32_t global;
3631*5113495bSYour Name 	uint32_t global_threshold;
3632*5113495bSYour Name 	uint32_t cca_bitmap;
3633*5113495bSYour Name 	uint32_t signal_bitmap;
3634*5113495bSYour Name 	uint32_t tx_bitmap;
3635*5113495bSYour Name 	uint32_t rx_bitmap;
3636*5113495bSYour Name 	struct sir_channel_cca_threshold cca;
3637*5113495bSYour Name 	struct sir_signal_threshold signal;
3638*5113495bSYour Name 	struct sir_tx_threshold tx;
3639*5113495bSYour Name 	struct sir_rx_threshold rx;
3640*5113495bSYour Name };
3641*5113495bSYour Name 
3642*5113495bSYour Name #define LL_STATS_MIN_PERIOD          10
3643*5113495bSYour Name #define LL_STATS_INVALID_PERIOD      0xFFFFFFFF
3644*5113495bSYour Name 
3645*5113495bSYour Name /* Result ID for LL stats extension */
3646*5113495bSYour Name #define WMI_LL_STATS_EXT_PS_CHG             0x00000100
3647*5113495bSYour Name #define WMI_LL_STATS_EXT_TX_FAIL            0x00000200
3648*5113495bSYour Name #define WMI_LL_STATS_EXT_MAC_COUNTER        0x00000400
3649*5113495bSYour Name #endif /* WLAN_FEATURE_LINK_LAYER_STATS */
3650*5113495bSYour Name 
3651*5113495bSYour Name typedef struct sAniGetLinkStatus {
3652*5113495bSYour Name 	uint16_t msgType;       /* message type is same as the request type */
3653*5113495bSYour Name 	uint16_t msgLen;        /* length of the entire request */
3654*5113495bSYour Name 	uint8_t linkStatus;
3655*5113495bSYour Name 	uint8_t sessionId;
3656*5113495bSYour Name } tAniGetLinkStatus, *tpAniGetLinkStatus;
3657*5113495bSYour Name 
3658*5113495bSYour Name /**
3659*5113495bSYour Name  * struct sir_lost_link_info - lost link information structure.
3660*5113495bSYour Name  *
3661*5113495bSYour Name  * @vdev_id: vdev_id from WMA. some modules call sessionId.
3662*5113495bSYour Name  * @rssi: rssi at disconnection time.
3663*5113495bSYour Name  *
3664*5113495bSYour Name  * driver uses this structure to communicate information collected at
3665*5113495bSYour Name  * disconnection time.
3666*5113495bSYour Name  */
3667*5113495bSYour Name struct sir_lost_link_info {
3668*5113495bSYour Name 	uint32_t vdev_id;
3669*5113495bSYour Name 	int32_t rssi;
3670*5113495bSYour Name };
3671*5113495bSYour Name 
3672*5113495bSYour Name /* find the size of given member within a structure */
3673*5113495bSYour Name #ifndef member_size
3674*5113495bSYour Name #define member_size(type, member) (sizeof(((type *)0)->member))
3675*5113495bSYour Name #endif
3676*5113495bSYour Name 
3677*5113495bSYour Name #define RTT_INVALID                     0x00
3678*5113495bSYour Name #define RTT_TIMING_MEAS_CAPABILITY      0x01
3679*5113495bSYour Name #define RTT_FINE_TIME_MEAS_INITIATOR_CAPABILITY 0x02
3680*5113495bSYour Name #define RTT_FINE_TIME_MEAS_RESPONDER_CAPABILITY 0x03
3681*5113495bSYour Name 
3682*5113495bSYour Name /* number of neighbor reports that we can handle in Neighbor Report Response */
3683*5113495bSYour Name #define MAX_SUPPORTED_NEIGHBOR_RPT 15
3684*5113495bSYour Name 
3685*5113495bSYour Name /**
3686*5113495bSYour Name  * struct sir_stats_avg_factor
3687*5113495bSYour Name  * @vdev_id: session id
3688*5113495bSYour Name  * @stats_avg_factor: average factor
3689*5113495bSYour Name  */
3690*5113495bSYour Name struct sir_stats_avg_factor {
3691*5113495bSYour Name 	uint8_t vdev_id;
3692*5113495bSYour Name 	uint16_t stats_avg_factor;
3693*5113495bSYour Name };
3694*5113495bSYour Name 
3695*5113495bSYour Name /**
3696*5113495bSYour Name  * struct sir_guard_time_request
3697*5113495bSYour Name  * @vdev_id: session id
3698*5113495bSYour Name  * @guard_time: guard time
3699*5113495bSYour Name  */
3700*5113495bSYour Name struct sir_guard_time_request {
3701*5113495bSYour Name 	uint8_t vdev_id;
3702*5113495bSYour Name 	uint32_t guard_time;
3703*5113495bSYour Name };
3704*5113495bSYour Name 
3705*5113495bSYour Name /* Max number of rates allowed in Supported Rates IE */
3706*5113495bSYour Name #define MAX_NUM_SUPPORTED_RATES (8)
3707*5113495bSYour Name 
3708*5113495bSYour Name /**
3709*5113495bSYour Name  * struct rssi_breach_event - rssi breached event structure
3710*5113495bSYour Name  * @request_id: request id
3711*5113495bSYour Name  * @session_id: session id
3712*5113495bSYour Name  * @curr_rssi: current rssi
3713*5113495bSYour Name  * @curr_bssid: current bssid
3714*5113495bSYour Name  */
3715*5113495bSYour Name struct rssi_breach_event {
3716*5113495bSYour Name 	uint32_t     request_id;
3717*5113495bSYour Name 	uint32_t     session_id;
3718*5113495bSYour Name 	int8_t       curr_rssi;
3719*5113495bSYour Name 	struct qdf_mac_addr  curr_bssid;
3720*5113495bSYour Name };
3721*5113495bSYour Name 
3722*5113495bSYour Name /**
3723*5113495bSYour Name  * struct chip_pwr_save_fail_detected_params - chip power save failure detected
3724*5113495bSYour Name  * event params
3725*5113495bSYour Name  * @failure_reason_code:failure reason code
3726*5113495bSYour Name  * @wake_lock_bitmap:bitmap for modules voting against sleep for long duration.
3727*5113495bSYour Name  */
3728*5113495bSYour Name struct chip_pwr_save_fail_detected_params {
3729*5113495bSYour Name 	uint32_t     failure_reason_code;
3730*5113495bSYour Name 	uint32_t     wake_lock_bitmap[4];
3731*5113495bSYour Name };
3732*5113495bSYour Name 
3733*5113495bSYour Name #define MAX_NUM_FW_SEGMENTS 4
3734*5113495bSYour Name 
3735*5113495bSYour Name /**
3736*5113495bSYour Name  * DEFAULT_SCAN_IE_ID - Identifier for the collection of IE's added
3737*5113495bSYour Name  * by default to the probe request
3738*5113495bSYour Name  */
3739*5113495bSYour Name #define DEFAULT_SCAN_IE_ID 256
3740*5113495bSYour Name 
3741*5113495bSYour Name  /* MAX_DEFAULT_SCAN_IE_LEN - Maximum length of Default Scan IE's */
3742*5113495bSYour Name #define MAX_DEFAULT_SCAN_IE_LEN 2048
3743*5113495bSYour Name 
3744*5113495bSYour Name  /* Extended Capabilities IE header(IE Id + IE Length) length */
3745*5113495bSYour Name #define EXT_CAP_IE_HDR_LEN 2
3746*5113495bSYour Name 
3747*5113495bSYour Name /**
3748*5113495bSYour Name  * struct hdd_default_scan_ie - HDD default scan IE structure
3749*5113495bSYour Name  * @message_type: message type to be set with eWNI_SME_DEFAULT_SCAN_IE
3750*5113495bSYour Name  * @length: length of the struct hdd_default_scan_ie
3751*5113495bSYour Name  * @vdev_id: vdev_id
3752*5113495bSYour Name  * @ie_len: Default scan IE length
3753*5113495bSYour Name  * @ie_data: Pointer to default scan IE data
3754*5113495bSYour Name  */
3755*5113495bSYour Name struct hdd_default_scan_ie {
3756*5113495bSYour Name 	uint16_t message_type;
3757*5113495bSYour Name 	uint16_t length;
3758*5113495bSYour Name 	uint16_t vdev_id;
3759*5113495bSYour Name 	uint16_t ie_len;
3760*5113495bSYour Name 	uint8_t ie_data[MAX_DEFAULT_SCAN_IE_LEN];
3761*5113495bSYour Name };
3762*5113495bSYour Name 
3763*5113495bSYour Name /**
3764*5113495bSYour Name  * struct vdev_ie_info - IE info
3765*5113495bSYour Name  * @vdev_id - vdev for which the IE is being sent
3766*5113495bSYour Name  * @ie_id - ID of the IE
3767*5113495bSYour Name  * @length - length of the IE data
3768*5113495bSYour Name  * @band - indicates IE is intended for which band
3769*5113495bSYour Name  * @data - IE data
3770*5113495bSYour Name  *
3771*5113495bSYour Name  * This structure is used to store the IE information.
3772*5113495bSYour Name  */
3773*5113495bSYour Name struct vdev_ie_info {
3774*5113495bSYour Name 	uint32_t vdev_id;
3775*5113495bSYour Name 	uint32_t ie_id;
3776*5113495bSYour Name 	uint32_t length;
3777*5113495bSYour Name 	uint32_t band;
3778*5113495bSYour Name 	uint8_t *data;
3779*5113495bSYour Name };
3780*5113495bSYour Name 
3781*5113495bSYour Name /**
3782*5113495bSYour Name  * struct send_extcap_ie - used to pass send_extcap_ie msg from SME to PE
3783*5113495bSYour Name  * @type - MSG type
3784*5113495bSYour Name  * @length - length of the message
3785*5113495bSYour Name  * @seesion_id - session_id for which the message is intended for
3786*5113495bSYour Name  *
3787*5113495bSYour Name  * This structure is used to pass send_extcap_ie msg from SME to PE
3788*5113495bSYour Name  */
3789*5113495bSYour Name struct send_extcap_ie {
3790*5113495bSYour Name 	uint16_t msg_type; /* eWNI_SME_SET_IE_REQ */
3791*5113495bSYour Name 	uint16_t length;
3792*5113495bSYour Name 	uint8_t session_id;
3793*5113495bSYour Name };
3794*5113495bSYour Name 
3795*5113495bSYour Name typedef void (*antenna_mode_cb)(uint32_t status, void *context);
3796*5113495bSYour Name 
3797*5113495bSYour Name /**
3798*5113495bSYour Name  * struct cfg_action_frm_tb_ppdu - action frame TB PPDU cfg
3799*5113495bSYour Name  * @vdev_id - vdev id
3800*5113495bSYour Name  * @cfg - enable/disable
3801*5113495bSYour Name  * @frm_len - frame length
3802*5113495bSYour Name  * @data - frame data
3803*5113495bSYour Name  *
3804*5113495bSYour Name  * This structure is used to cfg action frame tb ppdu.
3805*5113495bSYour Name  */
3806*5113495bSYour Name struct cfg_action_frm_tb_ppdu {
3807*5113495bSYour Name 	uint8_t vdev_id;
3808*5113495bSYour Name 	uint8_t cfg;
3809*5113495bSYour Name 	uint8_t frm_len;
3810*5113495bSYour Name 	uint8_t *data;
3811*5113495bSYour Name };
3812*5113495bSYour Name 
3813*5113495bSYour Name /**
3814*5113495bSYour Name  * struct sir_nss_update_request
3815*5113495bSYour Name  * @msgType: nss update msg type
3816*5113495bSYour Name  * @msgLen: length of the msg
3817*5113495bSYour Name  * @new_nss: new spatial stream value
3818*5113495bSYour Name  * @ch_width: channel width - optional
3819*5113495bSYour Name  * @vdev_id: session id
3820*5113495bSYour Name  */
3821*5113495bSYour Name struct sir_nss_update_request {
3822*5113495bSYour Name 	uint16_t msgType;
3823*5113495bSYour Name 	uint16_t msgLen;
3824*5113495bSYour Name 	uint8_t  new_nss;
3825*5113495bSYour Name 	uint8_t ch_width;
3826*5113495bSYour Name 	uint32_t vdev_id;
3827*5113495bSYour Name };
3828*5113495bSYour Name 
3829*5113495bSYour Name /**
3830*5113495bSYour Name  * struct sir_sap_ch_width_update
3831*5113495bSYour Name  * @msgType: ch_width update msg type
3832*5113495bSYour Name  * @msgLen: length of the msg
3833*5113495bSYour Name  * @ch_width: channel width
3834*5113495bSYour Name  * @vdev_id: vdev id
3835*5113495bSYour Name  */
3836*5113495bSYour Name struct sir_sap_ch_width_update {
3837*5113495bSYour Name 	uint16_t msgType;
3838*5113495bSYour Name 	uint16_t msgLen;
3839*5113495bSYour Name 	enum phy_ch_width ch_width;
3840*5113495bSYour Name 	uint32_t vdev_id;
3841*5113495bSYour Name };
3842*5113495bSYour Name 
3843*5113495bSYour Name /**
3844*5113495bSYour Name  * enum sir_bcn_update_reason: bcn update reason
3845*5113495bSYour Name  * @REASON_DEFAULT: reason default
3846*5113495bSYour Name  * @REASON_NSS_UPDATE: If NSS is updated
3847*5113495bSYour Name  * @REASON_CONFIG_UPDATE: Config update
3848*5113495bSYour Name  * @REASON_SET_HT2040: HT2040 update
3849*5113495bSYour Name  * @REASON_COLOR_CHANGE: Color change
3850*5113495bSYour Name  * @REASON_CHANNEL_SWITCH: channel switch
3851*5113495bSYour Name  * @REASON_MLO_IE_UPDATE: mlo ie update
3852*5113495bSYour Name  * @REASON_RNR_UPDATE: SAP is changed, notify co-located SAP
3853*5113495bSYour Name  */
3854*5113495bSYour Name enum sir_bcn_update_reason {
3855*5113495bSYour Name 	REASON_DEFAULT = 0,
3856*5113495bSYour Name 	REASON_NSS_UPDATE = 1,
3857*5113495bSYour Name 	REASON_CONFIG_UPDATE = 2,
3858*5113495bSYour Name 	REASON_SET_HT2040 = 3,
3859*5113495bSYour Name 	REASON_COLOR_CHANGE = 4,
3860*5113495bSYour Name 	REASON_CHANNEL_SWITCH = 5,
3861*5113495bSYour Name 	REASON_MLO_IE_UPDATE = 6,
3862*5113495bSYour Name 	REASON_RNR_UPDATE = 7,
3863*5113495bSYour Name 	REASON_CH_WIDTH_UPDATE = 8,
3864*5113495bSYour Name };
3865*5113495bSYour Name 
3866*5113495bSYour Name /**
3867*5113495bSYour Name  * struct sir_bcn_update_rsp
3868*5113495bSYour Name  *
3869*5113495bSYour Name  * @vdev_id: session for which bcn was updated
3870*5113495bSYour Name  * @reason: bcn update reason
3871*5113495bSYour Name  * @status: status of the beacon sent to FW
3872*5113495bSYour Name  */
3873*5113495bSYour Name struct sir_bcn_update_rsp {
3874*5113495bSYour Name 	uint8_t vdev_id;
3875*5113495bSYour Name 	enum sir_bcn_update_reason reason;
3876*5113495bSYour Name 	QDF_STATUS status;
3877*5113495bSYour Name };
3878*5113495bSYour Name 
3879*5113495bSYour Name struct sir_qos_params {
3880*5113495bSYour Name 	uint8_t aifsn;
3881*5113495bSYour Name 	uint8_t cwmin;
3882*5113495bSYour Name 	uint8_t cwmax;
3883*5113495bSYour Name };
3884*5113495bSYour Name 
3885*5113495bSYour Name /**
3886*5113495bSYour Name  * struct sir_sme_ext_change_chan_req - channel change request
3887*5113495bSYour Name  * @message_type: message id
3888*5113495bSYour Name  * @length: msg length
3889*5113495bSYour Name  * @new_channel: new channel
3890*5113495bSYour Name  * @vdev_id: vdev id
3891*5113495bSYour Name  */
3892*5113495bSYour Name struct sir_sme_ext_cng_chan_req {
3893*5113495bSYour Name 	uint16_t  message_type; /* eWNI_SME_EXT_CHANGE_CHANNEL */
3894*5113495bSYour Name 	uint16_t  length;
3895*5113495bSYour Name 	uint32_t  new_ch_freq;
3896*5113495bSYour Name 	uint8_t   vdev_id;
3897*5113495bSYour Name };
3898*5113495bSYour Name 
3899*5113495bSYour Name #define IGNORE_NUD_FAIL                      0
3900*5113495bSYour Name #define DISCONNECT_AFTER_NUD_FAIL            1
3901*5113495bSYour Name #define ROAM_AFTER_NUD_FAIL                  2
3902*5113495bSYour Name #define DISCONNECT_AFTER_ROAM_FAIL           3
3903*5113495bSYour Name 
3904*5113495bSYour Name /**
3905*5113495bSYour Name  * struct sir_sme_ext_change_chan_ind.
3906*5113495bSYour Name  * @session_id: session id
3907*5113495bSYour Name  * @new_chan_freq: new channel frequency to change to
3908*5113495bSYour Name  */
3909*5113495bSYour Name struct sir_sme_ext_cng_chan_ind {
3910*5113495bSYour Name 	uint8_t  session_id;
3911*5113495bSYour Name 	uint32_t  new_chan_freq;
3912*5113495bSYour Name };
3913*5113495bSYour Name 
3914*5113495bSYour Name /**
3915*5113495bSYour Name  * struct stsf - the basic stsf structure
3916*5113495bSYour Name  *
3917*5113495bSYour Name  * @vdev_id: vdev id
3918*5113495bSYour Name  * @tsf_low: low 32bits of tsf
3919*5113495bSYour Name  * @tsf_high: high 32bits of tsf
3920*5113495bSYour Name  * @soc_timer_low: low 32bits of synced SOC timer value
3921*5113495bSYour Name  * @soc_timer_high: high 32bits of synced SOC timer value
3922*5113495bSYour Name  * @global_tsf_low: low 32bits of tsf64
3923*5113495bSYour Name  * @global_tsf_high: high 32bits of tsf64
3924*5113495bSYour Name  * @mac_id: MAC identifier
3925*5113495bSYour Name  * @mac_id_valid: Indicate if mac_id is valid or not
3926*5113495bSYour Name  * @tsf_id: TSF-ID corresponding to the TSF value
3927*5113495bSYour Name  * @tsf_id_valid: flag indicating whether TSD-ID is valid
3928*5113495bSYour Name  *
3929*5113495bSYour Name  * Driver uses this structure to store the tsf information.
3930*5113495bSYour Name  */
3931*5113495bSYour Name struct stsf {
3932*5113495bSYour Name 	uint32_t vdev_id;
3933*5113495bSYour Name 	uint32_t tsf_low;
3934*5113495bSYour Name 	uint32_t tsf_high;
3935*5113495bSYour Name 	uint32_t soc_timer_low;
3936*5113495bSYour Name 	uint32_t soc_timer_high;
3937*5113495bSYour Name 	uint32_t global_tsf_low;
3938*5113495bSYour Name 	uint32_t global_tsf_high;
3939*5113495bSYour Name 	uint32_t mac_id;
3940*5113495bSYour Name 	uint32_t mac_id_valid;
3941*5113495bSYour Name 	uint32_t tsf_id;
3942*5113495bSYour Name 	uint32_t tsf_id_valid;
3943*5113495bSYour Name };
3944*5113495bSYour Name 
3945*5113495bSYour Name /* ie + extn ie */
3946*5113495bSYour Name #define SIR_BCN_FLT_MAX_ELEMS_IE_LIST (8 + 8)
3947*5113495bSYour Name /**
3948*5113495bSYour Name  * struct beacon_filter_param - parameters for beacon filtering
3949*5113495bSYour Name  * @vdev_id: vdev id
3950*5113495bSYour Name  * @ie_map: bitwise map of IEs that needs to be filtered
3951*5113495bSYour Name  *
3952*5113495bSYour Name  */
3953*5113495bSYour Name struct beacon_filter_param {
3954*5113495bSYour Name 	uint32_t   vdev_id;
3955*5113495bSYour Name 	uint32_t   ie_map[SIR_BCN_FLT_MAX_ELEMS_IE_LIST];
3956*5113495bSYour Name };
3957*5113495bSYour Name 
3958*5113495bSYour Name /**
3959*5113495bSYour Name  * struct adaptive_dwelltime_params - the adaptive dwelltime params
3960*5113495bSYour Name  * @vdev_id: vdev id
3961*5113495bSYour Name  * @is_enabled: Adaptive dwell time is enabled/disabled
3962*5113495bSYour Name  * @dwelltime_mode: global default adaptive dwell mode
3963*5113495bSYour Name  * @lpf_weight: weight to calculate the average low pass
3964*5113495bSYour Name  * filter for channel congestion
3965*5113495bSYour Name  * @passive_mon_intval: intval to monitor wifi activity in passive scan in msec
3966*5113495bSYour Name  * @wifi_act_threshold: % of wifi activity used in passive scan 0-100
3967*5113495bSYour Name  *
3968*5113495bSYour Name  */
3969*5113495bSYour Name struct adaptive_dwelltime_params {
3970*5113495bSYour Name 	uint32_t  vdev_id;
3971*5113495bSYour Name 	bool      is_enabled;
3972*5113495bSYour Name 	uint8_t   dwelltime_mode;
3973*5113495bSYour Name 	uint8_t   lpf_weight;
3974*5113495bSYour Name 	uint8_t   passive_mon_intval;
3975*5113495bSYour Name 	uint8_t   wifi_act_threshold;
3976*5113495bSYour Name };
3977*5113495bSYour Name 
3978*5113495bSYour Name /**
3979*5113495bSYour Name  * enum obss_ht40_scancmd_type - obss scan command type
3980*5113495bSYour Name  * @HT40_OBSS_SCAN_PARAM_START: OBSS scan start
3981*5113495bSYour Name  * @HT40_OBSS_SCAN_PARAM_UPDATE: OBSS scan param update
3982*5113495bSYour Name  */
3983*5113495bSYour Name enum obss_ht40_scancmd_type {
3984*5113495bSYour Name 	HT40_OBSS_SCAN_PARAM_START,
3985*5113495bSYour Name 	HT40_OBSS_SCAN_PARAM_UPDATE
3986*5113495bSYour Name };
3987*5113495bSYour Name 
3988*5113495bSYour Name /**
3989*5113495bSYour Name  * struct sme_obss_ht40_scanind_msg - sme obss scan params
3990*5113495bSYour Name  * @msg_type: message type
3991*5113495bSYour Name  * @length: message length
3992*5113495bSYour Name  * @mac_addr: mac address
3993*5113495bSYour Name  */
3994*5113495bSYour Name struct sme_obss_ht40_scanind_msg {
3995*5113495bSYour Name 	uint16_t               msg_type;
3996*5113495bSYour Name 	uint16_t               length;
3997*5113495bSYour Name 	struct qdf_mac_addr    mac_addr;
3998*5113495bSYour Name };
3999*5113495bSYour Name 
4000*5113495bSYour Name /**
4001*5113495bSYour Name  * struct obss_ht40_scanind - ht40 obss scan request
4002*5113495bSYour Name  * @cmd: message type
4003*5113495bSYour Name  * @scan_type: message length
4004*5113495bSYour Name  * @obss_passive_dwelltime: obss passive dwelltime
4005*5113495bSYour Name  * @obss_active_dwelltime: obss active dwelltime
4006*5113495bSYour Name  * @obss_width_trigger_interval: scan interval
4007*5113495bSYour Name  * @obss_passive_total_per_channel: total passive scan time per channel
4008*5113495bSYour Name  * @obss_active_total_per_channel: total active scan time per channel
4009*5113495bSYour Name  * @bsswidth_ch_trans_delay: OBSS transition delay time
4010*5113495bSYour Name  * @obss_activity_threshold: OBSS activity threshold
4011*5113495bSYour Name  * @self_sta_idx: self sta identification
4012*5113495bSYour Name  * @bss_id: BSS index
4013*5113495bSYour Name  * @fortymhz_intolerent: Ht40mhz intolerance
4014*5113495bSYour Name  * @channel_count: channel count
4015*5113495bSYour Name  * @chan_freq_list: List of channel frequencies in MHz
4016*5113495bSYour Name  * @current_operatingclass: operating class
4017*5113495bSYour Name  * @iefield_len: ie's length
4018*5113495bSYour Name  * @iefiled: ie's information
4019*5113495bSYour Name  */
4020*5113495bSYour Name struct obss_ht40_scanind {
4021*5113495bSYour Name 	enum obss_ht40_scancmd_type cmd;
4022*5113495bSYour Name 	enum eSirScanType scan_type;
4023*5113495bSYour Name 	/* In TUs */
4024*5113495bSYour Name 	uint16_t obss_passive_dwelltime;
4025*5113495bSYour Name 	uint16_t obss_active_dwelltime;
4026*5113495bSYour Name 	/* In seconds */
4027*5113495bSYour Name 	uint16_t obss_width_trigger_interval;
4028*5113495bSYour Name 	/* In TU's */
4029*5113495bSYour Name 	uint16_t obss_passive_total_per_channel;
4030*5113495bSYour Name 	uint16_t obss_active_total_per_channel;
4031*5113495bSYour Name 	uint16_t bsswidth_ch_trans_delay;
4032*5113495bSYour Name 	uint16_t obss_activity_threshold;
4033*5113495bSYour Name 	uint8_t  self_sta_idx;
4034*5113495bSYour Name 	uint8_t bss_id;
4035*5113495bSYour Name 	uint8_t fortymhz_intolerent;
4036*5113495bSYour Name 	uint8_t channel_count;
4037*5113495bSYour Name 	uint32_t chan_freq_list[CFG_VALID_CHANNEL_LIST_LEN];
4038*5113495bSYour Name 	uint8_t current_operatingclass;
4039*5113495bSYour Name 	uint16_t iefield_len;
4040*5113495bSYour Name 	uint8_t  iefield[SIR_ROAM_SCAN_MAX_PB_REQ_SIZE];
4041*5113495bSYour Name };
4042*5113495bSYour Name 
4043*5113495bSYour Name /**
4044*5113495bSYour Name  * struct obss_scanparam - OBSS scan parameters
4045*5113495bSYour Name  * @obss_passive_dwelltime: message type
4046*5113495bSYour Name  * @obss_active_dwelltime: message length
4047*5113495bSYour Name  * @obss_width_trigger_interval: obss passive dwelltime
4048*5113495bSYour Name  * @obss_passive_total_per_channel: obss passive total scan time
4049*5113495bSYour Name  * @obss_active_total_per_channel: obss active total scan time
4050*5113495bSYour Name  * @bsswidth_ch_trans_delay: OBSS transition delay time
4051*5113495bSYour Name  * @obss_activity_threshold: OBSS activity threshold
4052*5113495bSYour Name  */
4053*5113495bSYour Name struct obss_scanparam {
4054*5113495bSYour Name 	uint16_t obss_passive_dwelltime;
4055*5113495bSYour Name 	uint16_t obss_active_dwelltime;
4056*5113495bSYour Name 	uint16_t obss_width_trigger_interval;
4057*5113495bSYour Name 	uint16_t obss_passive_total_per_channel;
4058*5113495bSYour Name 	uint16_t obss_active_total_per_channel;
4059*5113495bSYour Name 	uint16_t bsswidth_ch_trans_delay;
4060*5113495bSYour Name 	uint16_t obss_activity_threshold;
4061*5113495bSYour Name };
4062*5113495bSYour Name 
4063*5113495bSYour Name /**
4064*5113495bSYour Name  * struct sir_apf_set_offload - set apf filter instructions
4065*5113495bSYour Name  * @session_id: session identifier
4066*5113495bSYour Name  * @version: host apf version
4067*5113495bSYour Name  * @filter_id: Filter ID for APF filter
4068*5113495bSYour Name  * @total_length: The total length of the full instruction
4069*5113495bSYour Name  *                total_length equal to 0 means reset
4070*5113495bSYour Name  * @current_offset: current offset, 0 means start a new setting
4071*5113495bSYour Name  * @current_length: Length of current @program
4072*5113495bSYour Name  * @program: APF instructions
4073*5113495bSYour Name  */
4074*5113495bSYour Name struct sir_apf_set_offload {
4075*5113495bSYour Name 	uint8_t  session_id;
4076*5113495bSYour Name 	uint32_t version;
4077*5113495bSYour Name 	uint32_t filter_id;
4078*5113495bSYour Name 	uint32_t total_length;
4079*5113495bSYour Name 	uint32_t current_offset;
4080*5113495bSYour Name 	uint32_t current_length;
4081*5113495bSYour Name 	uint8_t  *program;
4082*5113495bSYour Name };
4083*5113495bSYour Name 
4084*5113495bSYour Name /**
4085*5113495bSYour Name  * struct sir_apf_offload_capabilities - get apf Capabilities
4086*5113495bSYour Name  * @apf_version: fw's implement version
4087*5113495bSYour Name  * @max_apf_filters: max filters that fw supports
4088*5113495bSYour Name  * @max_bytes_for_apf_inst: the max bytes that can be used as apf instructions
4089*5113495bSYour Name  */
4090*5113495bSYour Name struct sir_apf_get_offload {
4091*5113495bSYour Name 	uint32_t apf_version;
4092*5113495bSYour Name 	uint32_t max_apf_filters;
4093*5113495bSYour Name 	uint32_t max_bytes_for_apf_inst;
4094*5113495bSYour Name };
4095*5113495bSYour Name 
4096*5113495bSYour Name #ifdef WLAN_FEATURE_NAN
4097*5113495bSYour Name /**
4098*5113495bSYour Name  * enum ndp_end_type - NDP end type
4099*5113495bSYour Name  * @NDP_END_TYPE_UNSPECIFIED: type is unspecified
4100*5113495bSYour Name  * @NDP_END_TYPE_PEER_UNAVAILABLE: type is peer unavailable
4101*5113495bSYour Name  * @NDP_END_TYPE_OTA_FRAME: NDP end frame received from peer
4102*5113495bSYour Name  *
4103*5113495bSYour Name  */
4104*5113495bSYour Name enum ndp_end_type {
4105*5113495bSYour Name 	NDP_END_TYPE_UNSPECIFIED = 0x00,
4106*5113495bSYour Name 	NDP_END_TYPE_PEER_UNAVAILABLE = 0x01,
4107*5113495bSYour Name 	NDP_END_TYPE_OTA_FRAME = 0x02,
4108*5113495bSYour Name };
4109*5113495bSYour Name 
4110*5113495bSYour Name /**
4111*5113495bSYour Name  * enum ndp_end_reason_code - NDP end reason code
4112*5113495bSYour Name  * @NDP_END_REASON_UNSPECIFIED: reason is unspecified
4113*5113495bSYour Name  * @NDP_END_REASON_INACTIVITY: reason is peer inactivity
4114*5113495bSYour Name  * @NDP_END_REASON_PEER_DATA_END: data end indication received from peer
4115*5113495bSYour Name  *
4116*5113495bSYour Name  */
4117*5113495bSYour Name enum ndp_end_reason_code {
4118*5113495bSYour Name 	NDP_END_REASON_UNSPECIFIED = 0x00,
4119*5113495bSYour Name 	NDP_END_REASON_INACTIVITY = 0x01,
4120*5113495bSYour Name 	NDP_END_REASON_PEER_DATA_END = 0x02,
4121*5113495bSYour Name };
4122*5113495bSYour Name 
4123*5113495bSYour Name /**
4124*5113495bSYour Name  * enum nan_status_type - NDP status type
4125*5113495bSYour Name  * @NDP_RSP_STATUS_SUCCESS: request was successful
4126*5113495bSYour Name  * @NDP_RSP_STATUS_ERROR: request failed
4127*5113495bSYour Name  */
4128*5113495bSYour Name enum nan_status_type {
4129*5113495bSYour Name 	NDP_RSP_STATUS_SUCCESS = 0x00,
4130*5113495bSYour Name 	NDP_RSP_STATUS_ERROR = 0x01,
4131*5113495bSYour Name };
4132*5113495bSYour Name 
4133*5113495bSYour Name /**
4134*5113495bSYour Name  * enum nan_reason_code - NDP command rsp reason code value
4135*5113495bSYour Name  * @NDP_UNSUPPORTED_CONCURRENCY: Will be used in unsupported concurrency cases
4136*5113495bSYour Name  * @NDP_NAN_DATA_IFACE_CREATE_FAILED: ndi create failed
4137*5113495bSYour Name  * @NDP_NAN_DATA_IFACE_DELETE_FAILED: ndi delete failed
4138*5113495bSYour Name  * @NDP_DATA_INITIATOR_REQ_FAILED: data initiator request failed
4139*5113495bSYour Name  * @NDP_DATA_RESPONDER_REQ_FAILED: data responder request failed
4140*5113495bSYour Name  * @NDP_INVALID_SERVICE_INSTANCE_ID: invalid service instance id
4141*5113495bSYour Name  * @NDP_INVALID_NDP_INSTANCE_ID: invalid ndp instance id
4142*5113495bSYour Name  * @NDP_INVALID_RSP_CODE: invalid response code in ndp responder request
4143*5113495bSYour Name  * @NDP_INVALID_APP_INFO_LEN: invalid app info length
4144*5113495bSYour Name  * @NDP_NMF_REQ_FAIL: OTA nan mgmt frame failure for data request
4145*5113495bSYour Name  * @NDP_NMF_RSP_FAIL: OTA nan mgmt frame failure for data response
4146*5113495bSYour Name  * @NDP_NMF_CNF_FAIL: OTA nan mgmt frame failure for confirm
4147*5113495bSYour Name  * @NDP_END_FAILED: ndp end failed
4148*5113495bSYour Name  * @NDP_NMF_END_REQ_FAIL: OTA nan mgmt frame failure for data end
4149*5113495bSYour Name  * @NDP_VENDOR_SPECIFIC_ERROR: other vendor specific failures
4150*5113495bSYour Name  */
4151*5113495bSYour Name enum nan_reason_code {
4152*5113495bSYour Name 	NDP_UNSUPPORTED_CONCURRENCY = 9000,
4153*5113495bSYour Name 	NDP_NAN_DATA_IFACE_CREATE_FAILED = 9001,
4154*5113495bSYour Name 	NDP_NAN_DATA_IFACE_DELETE_FAILED = 9002,
4155*5113495bSYour Name 	NDP_DATA_INITIATOR_REQ_FAILED = 9003,
4156*5113495bSYour Name 	NDP_DATA_RESPONDER_REQ_FAILED = 9004,
4157*5113495bSYour Name 	NDP_INVALID_SERVICE_INSTANCE_ID = 9005,
4158*5113495bSYour Name 	NDP_INVALID_NDP_INSTANCE_ID = 9006,
4159*5113495bSYour Name 	NDP_INVALID_RSP_CODE = 9007,
4160*5113495bSYour Name 	NDP_INVALID_APP_INFO_LEN = 9008,
4161*5113495bSYour Name 	NDP_NMF_REQ_FAIL = 9009,
4162*5113495bSYour Name 	NDP_NMF_RSP_FAIL = 9010,
4163*5113495bSYour Name 	NDP_NMF_CNF_FAIL = 9011,
4164*5113495bSYour Name 	NDP_END_FAILED = 9012,
4165*5113495bSYour Name 	NDP_NMF_END_REQ_FAIL = 9013,
4166*5113495bSYour Name 	/* 9500 onwards vendor specific error codes */
4167*5113495bSYour Name 	NDP_VENDOR_SPECIFIC_ERROR = 9500,
4168*5113495bSYour Name };
4169*5113495bSYour Name 
4170*5113495bSYour Name /**
4171*5113495bSYour Name  * struct ndi_create_rsp - ndi create response params
4172*5113495bSYour Name  * @status: request status
4173*5113495bSYour Name  * @reason: reason if any
4174*5113495bSYour Name  *
4175*5113495bSYour Name  */
4176*5113495bSYour Name struct ndi_create_rsp {
4177*5113495bSYour Name 	uint32_t status;
4178*5113495bSYour Name 	uint32_t reason;
4179*5113495bSYour Name 	uint8_t sta_id;
4180*5113495bSYour Name };
4181*5113495bSYour Name 
4182*5113495bSYour Name /**
4183*5113495bSYour Name  * struct ndi_delete_rsp - ndi delete response params
4184*5113495bSYour Name  * @status: request status
4185*5113495bSYour Name  * @reason: reason if any
4186*5113495bSYour Name  *
4187*5113495bSYour Name  */
4188*5113495bSYour Name struct ndi_delete_rsp {
4189*5113495bSYour Name 	uint32_t status;
4190*5113495bSYour Name 	uint32_t reason;
4191*5113495bSYour Name };
4192*5113495bSYour Name 
4193*5113495bSYour Name /**
4194*5113495bSYour Name  * struct peer_ndp_map  - mapping of NDP instances to peer to VDEV
4195*5113495bSYour Name  * @vdev_id: session id of the interface over which ndp is being created
4196*5113495bSYour Name  * @peer_ndi_mac_addr: peer NDI mac address
4197*5113495bSYour Name  * @num_active_ndp_sessions: number of active NDP sessions on the peer
4198*5113495bSYour Name  * @type: NDP end indication type
4199*5113495bSYour Name  * @reason_code: NDP end indication reason code
4200*5113495bSYour Name  * @ndp_instance_id: NDP instance ID
4201*5113495bSYour Name  *
4202*5113495bSYour Name  */
4203*5113495bSYour Name struct peer_ndp_map {
4204*5113495bSYour Name 	uint32_t vdev_id;
4205*5113495bSYour Name 	struct qdf_mac_addr peer_ndi_mac_addr;
4206*5113495bSYour Name 	uint32_t num_active_ndp_sessions;
4207*5113495bSYour Name 	enum ndp_end_type type;
4208*5113495bSYour Name 	enum ndp_end_reason_code reason_code;
4209*5113495bSYour Name 	uint32_t ndp_instance_id;
4210*5113495bSYour Name };
4211*5113495bSYour Name 
4212*5113495bSYour Name #endif /* WLAN_FEATURE_NAN */
4213*5113495bSYour Name 
4214*5113495bSYour Name /**
4215*5113495bSYour Name  * struct sir_p2p_lo_start - p2p listen offload start
4216*5113495bSYour Name  * @vdev_id: vdev identifier
4217*5113495bSYour Name  * @ctl_flags: control flag
4218*5113495bSYour Name  * @freq: p2p listen frequency
4219*5113495bSYour Name  * @period: listen offload period
4220*5113495bSYour Name  * @interval: listen offload interval
4221*5113495bSYour Name  * @count: number listen offload intervals
4222*5113495bSYour Name  * @device_types: device types
4223*5113495bSYour Name  * @dev_types_len: device types length
4224*5113495bSYour Name  * @probe_resp_tmplt: probe response template
4225*5113495bSYour Name  * @probe_resp_len: probe response template length
4226*5113495bSYour Name  */
4227*5113495bSYour Name struct sir_p2p_lo_start {
4228*5113495bSYour Name 	uint32_t vdev_id;
4229*5113495bSYour Name 	uint32_t ctl_flags;
4230*5113495bSYour Name 	uint32_t freq;
4231*5113495bSYour Name 	uint32_t period;
4232*5113495bSYour Name 	uint32_t interval;
4233*5113495bSYour Name 	uint32_t count;
4234*5113495bSYour Name 	uint8_t  *device_types;
4235*5113495bSYour Name 	uint32_t dev_types_len;
4236*5113495bSYour Name 	uint8_t  *probe_resp_tmplt;
4237*5113495bSYour Name 	uint32_t probe_resp_len;
4238*5113495bSYour Name };
4239*5113495bSYour Name 
4240*5113495bSYour Name /**
4241*5113495bSYour Name  * struct sir_p2p_lo_event - P2P listen offload stop event
4242*5113495bSYour Name  * @vdev_id: vdev identifier
4243*5113495bSYour Name  * @reason_code: P2P listen offload stop reason
4244*5113495bSYour Name  */
4245*5113495bSYour Name struct sir_p2p_lo_event {
4246*5113495bSYour Name 	uint32_t vdev_id;
4247*5113495bSYour Name 	uint32_t reason_code;
4248*5113495bSYour Name };
4249*5113495bSYour Name 
4250*5113495bSYour Name /**
4251*5113495bSYour Name  * struct sir_hal_pwr_dbg_cmd - unit test command parameters
4252*5113495bSYour Name  * @pdev_id: pdev id
4253*5113495bSYour Name  * @module_id: module id
4254*5113495bSYour Name  * @num_args: number of arguments
4255*5113495bSYour Name  * @args: arguments
4256*5113495bSYour Name  */
4257*5113495bSYour Name struct sir_mac_pwr_dbg_cmd {
4258*5113495bSYour Name 	uint32_t pdev_id;
4259*5113495bSYour Name 	uint32_t module_id;
4260*5113495bSYour Name 	uint32_t num_args;
4261*5113495bSYour Name 	uint32_t args[MAX_POWER_DBG_ARGS_SUPPORTED];
4262*5113495bSYour Name };
4263*5113495bSYour Name 
4264*5113495bSYour Name /**
4265*5113495bSYour Name  * struct sme_send_disassoc_frm_req - send disassoc request frame
4266*5113495bSYour Name  * @msg_type: message type
4267*5113495bSYour Name  * @length: length of message
4268*5113495bSYour Name  * @vdev_id: vdev id
4269*5113495bSYour Name  * @peer_mac: peer mac address
4270*5113495bSYour Name  * @reason: reason for disassoc
4271*5113495bSYour Name  * @wait_for_ack: wait for acknowledgment
4272*5113495bSYour Name  **/
4273*5113495bSYour Name  struct sme_send_disassoc_frm_req {
4274*5113495bSYour Name 	uint16_t msg_type;
4275*5113495bSYour Name 	uint16_t length;
4276*5113495bSYour Name 	uint8_t vdev_id;
4277*5113495bSYour Name 	uint8_t peer_mac[6];
4278*5113495bSYour Name 	uint16_t reason;
4279*5113495bSYour Name 	uint8_t wait_for_ack;
4280*5113495bSYour Name  };
4281*5113495bSYour Name 
4282*5113495bSYour Name /**
4283*5113495bSYour Name  * struct sme_update_access_policy_vendor_ie - update vendor ie and access
4284*5113495bSYour Name  * policy
4285*5113495bSYour Name  * @msg_type: message id
4286*5113495bSYour Name  * @msg_len: message length
4287*5113495bSYour Name  * @vdev_id: vdev id
4288*5113495bSYour Name  * @ie: vendor ie
4289*5113495bSYour Name  * @access_policy: access policy for vendor ie
4290*5113495bSYour Name  */
4291*5113495bSYour Name struct sme_update_access_policy_vendor_ie {
4292*5113495bSYour Name 	uint16_t msg_type;
4293*5113495bSYour Name 	uint16_t length;
4294*5113495bSYour Name 	uint32_t vdev_id;
4295*5113495bSYour Name 	uint8_t ie[WLAN_MAX_IE_LEN + 2];
4296*5113495bSYour Name 	uint8_t access_policy;
4297*5113495bSYour Name };
4298*5113495bSYour Name 
4299*5113495bSYour Name /**
4300*5113495bSYour Name  * struct sme_tx_fail_cnt_threshold - tx failure count for disconnect to fw
4301*5113495bSYour Name  * @session_id: Session id
4302*5113495bSYour Name  * @tx_fail_cnt_threshold: Tx failure count to do disconnect
4303*5113495bSYour Name  */
4304*5113495bSYour Name struct sme_tx_fail_cnt_threshold {
4305*5113495bSYour Name 	uint8_t session_id;
4306*5113495bSYour Name 	uint32_t tx_fail_cnt_threshold;
4307*5113495bSYour Name };
4308*5113495bSYour Name 
4309*5113495bSYour Name /**
4310*5113495bSYour Name  * struct sme_short_retry_limit - transmission retry limit for short frames.
4311*5113495bSYour Name  * @session_id: Session id
4312*5113495bSYour Name  * @short_retry_limit: transmission retry limit for short frame.
4313*5113495bSYour Name  *
4314*5113495bSYour Name  */
4315*5113495bSYour Name struct sme_short_retry_limit {
4316*5113495bSYour Name 	uint8_t session_id;
4317*5113495bSYour Name 	uint32_t short_retry_limit;
4318*5113495bSYour Name };
4319*5113495bSYour Name 
4320*5113495bSYour Name /**
4321*5113495bSYour Name  * struct sme_long_retry_limit - transmission retry limit for long frames
4322*5113495bSYour Name  * @session_id: Session id
4323*5113495bSYour Name  * @short_retry_limit: transmission retry limit for long frames.
4324*5113495bSYour Name  *
4325*5113495bSYour Name  */
4326*5113495bSYour Name struct sme_long_retry_limit {
4327*5113495bSYour Name 	uint8_t session_id;
4328*5113495bSYour Name 	uint32_t long_retry_limit;
4329*5113495bSYour Name };
4330*5113495bSYour Name 
4331*5113495bSYour Name /**
4332*5113495bSYour Name  * struct sme_addba_accept - Allow/reject the addba request frame
4333*5113495bSYour Name  * @session_id: Session id
4334*5113495bSYour Name  * @addba_accept: Allow/reject the addba request frame
4335*5113495bSYour Name  */
4336*5113495bSYour Name struct sme_addba_accept {
4337*5113495bSYour Name 	uint8_t session_id;
4338*5113495bSYour Name 	uint8_t addba_accept;
4339*5113495bSYour Name };
4340*5113495bSYour Name 
4341*5113495bSYour Name /**
4342*5113495bSYour Name  * struct sme_sta_inactivity_timeout - set sta_inactivity_timeout
4343*5113495bSYour Name  * @session_id: session Id.
4344*5113495bSYour Name  * @sta_inactivity_timeout: Timeout to disconnect STA after there
4345*5113495bSYour Name  * is no activity.
4346*5113495bSYour Name  */
4347*5113495bSYour Name struct sme_sta_inactivity_timeout {
4348*5113495bSYour Name 	uint8_t session_id;
4349*5113495bSYour Name 	uint32_t sta_inactivity_timeout;
4350*5113495bSYour Name };
4351*5113495bSYour Name 
4352*5113495bSYour Name /**
4353*5113495bSYour Name  * struct sme_vdev_pause - Pause vdev for a defined time interval
4354*5113495bSYour Name  * @session_id: Session id
4355*5113495bSYour Name  * @vdev_pause_duration: vdev pause duration
4356*5113495bSYour Name  */
4357*5113495bSYour Name struct sme_vdev_pause {
4358*5113495bSYour Name 	uint8_t session_id;
4359*5113495bSYour Name 	uint8_t vdev_pause_duration;
4360*5113495bSYour Name };
4361*5113495bSYour Name 
4362*5113495bSYour Name /*
4363*5113495bSYour Name  * struct wow_pulse_mode - WoW Pulse set cmd struct
4364*5113495bSYour Name  * @wow_pulse_enable: enable or disable this feature
4365*5113495bSYour Name  * @wow_pulse_pin: GPIO PIN for Pulse
4366*5113495bSYour Name  * @wow_pulse_interval_low: Pulse interval low
4367*5113495bSYour Name  * @wow_pulse_interval_high: Pulse interval high
4368*5113495bSYour Name  * @wow_pulse_repeat_count: Pulse repeat count
4369*5113495bSYour Name  * @wow_pulse_init_state: Pulse init level
4370*5113495bSYour Name  *
4371*5113495bSYour Name  * SME uses this structure to configure wow pulse info
4372*5113495bSYour Name  * and send it to WMA
4373*5113495bSYour Name  */
4374*5113495bSYour Name struct wow_pulse_mode {
4375*5113495bSYour Name 	bool                       wow_pulse_enable;
4376*5113495bSYour Name 	uint8_t                    wow_pulse_pin;
4377*5113495bSYour Name 	uint16_t                   wow_pulse_interval_high;
4378*5113495bSYour Name 	uint16_t                   wow_pulse_interval_low;
4379*5113495bSYour Name 	uint32_t                   wow_pulse_repeat_count;
4380*5113495bSYour Name 	uint32_t                   wow_pulse_init_state;
4381*5113495bSYour Name };
4382*5113495bSYour Name 
4383*5113495bSYour Name 
4384*5113495bSYour Name /**
4385*5113495bSYour Name  * umac_send_mb_message_to_mac(): post message to umac
4386*5113495bSYour Name  * @msg: opaque message pointer
4387*5113495bSYour Name  *
4388*5113495bSYour Name  * Return: QDF status
4389*5113495bSYour Name  */
4390*5113495bSYour Name QDF_STATUS umac_send_mb_message_to_mac(void *msg);
4391*5113495bSYour Name 
4392*5113495bSYour Name /**
4393*5113495bSYour Name  * struct scan_chan_info - channel info
4394*5113495bSYour Name  * @freq: radio frequence
4395*5113495bSYour Name  * @cmd flag: cmd flag
4396*5113495bSYour Name  * @noise_floor: noise floor
4397*5113495bSYour Name  * @cycle_count: cycle count
4398*5113495bSYour Name  * @rx_clear_count: rx clear count
4399*5113495bSYour Name  * @tx_frame_count: TX frame count
4400*5113495bSYour Name  * @clock_freq: clock frequence MHZ
4401*5113495bSYour Name  * @cca_busy_subband_info: CCA busy for each possible 20Mhz subbands
4402*5113495bSYour Name  * of the wideband scan channel
4403*5113495bSYour Name  */
4404*5113495bSYour Name struct scan_chan_info {
4405*5113495bSYour Name 	uint32_t freq;
4406*5113495bSYour Name 	uint32_t cmd_flag;
4407*5113495bSYour Name 	uint32_t noise_floor;
4408*5113495bSYour Name 	uint32_t cycle_count;
4409*5113495bSYour Name 	uint32_t rx_clear_count;
4410*5113495bSYour Name 	uint32_t tx_frame_count;
4411*5113495bSYour Name 	uint32_t clock_freq;
4412*5113495bSYour Name 	struct wide_band_scan_chan_info subband_info;
4413*5113495bSYour Name };
4414*5113495bSYour Name 
4415*5113495bSYour Name /**
4416*5113495bSYour Name  * enum wow_resume_trigger - resume trigger override setting values
4417*5113495bSYour Name  * @WOW_RESUME_TRIGGER_DEFAULT: fw to use platform default resume trigger
4418*5113495bSYour Name  * @WOW_RESUME_TRIGGER_HTC_WAKEUP: force fw to use HTC Wakeup to resume
4419*5113495bSYour Name  * @WOW_RESUME_TRIGGER_GPIO: force fw to use GPIO to resume
4420*5113495bSYour Name  * @WOW_RESUME_TRIGGER_COUNT: number of resume trigger options
4421*5113495bSYour Name  */
4422*5113495bSYour Name enum wow_resume_trigger {
4423*5113495bSYour Name 	/* always first */
4424*5113495bSYour Name 	WOW_RESUME_TRIGGER_DEFAULT = 0,
4425*5113495bSYour Name 	WOW_RESUME_TRIGGER_HTC_WAKEUP,
4426*5113495bSYour Name 	WOW_RESUME_TRIGGER_GPIO,
4427*5113495bSYour Name 	/* always last */
4428*5113495bSYour Name 	WOW_RESUME_TRIGGER_COUNT
4429*5113495bSYour Name };
4430*5113495bSYour Name 
4431*5113495bSYour Name /**
4432*5113495bSYour Name  * enum wow_interface_pause - interface pause override setting values
4433*5113495bSYour Name  * @WOW_INTERFACE_PAUSE_DEFAULT: use platform default interface pause setting
4434*5113495bSYour Name  * @WOW_INTERFACE_PAUSE_ENABLE: force interface pause setting to enabled
4435*5113495bSYour Name  * @WOW_INTERFACE_PAUSE_DISABLE: force interface pause setting to disabled
4436*5113495bSYour Name  * @WOW_INTERFACE_PAUSE_COUNT: number of interface pause options
4437*5113495bSYour Name  */
4438*5113495bSYour Name enum wow_interface_pause {
4439*5113495bSYour Name 	/* always first */
4440*5113495bSYour Name 	WOW_INTERFACE_PAUSE_DEFAULT = 0,
4441*5113495bSYour Name 	WOW_INTERFACE_PAUSE_ENABLE,
4442*5113495bSYour Name 	WOW_INTERFACE_PAUSE_DISABLE,
4443*5113495bSYour Name 	/* always last */
4444*5113495bSYour Name 	WOW_INTERFACE_PAUSE_COUNT
4445*5113495bSYour Name };
4446*5113495bSYour Name 
4447*5113495bSYour Name /**
4448*5113495bSYour Name  * struct wow_enable_params - A collection of wow enable override parameters
4449*5113495bSYour Name  * @is_unit_test: true to notify fw this is a unit-test suspend
4450*5113495bSYour Name  * @interface_pause: used to override the interface pause indication sent to fw
4451*5113495bSYour Name  * @resume_trigger: used to force fw to use a particular resume method
4452*5113495bSYour Name  */
4453*5113495bSYour Name struct wow_enable_params {
4454*5113495bSYour Name 	bool is_unit_test;
4455*5113495bSYour Name 	enum wow_interface_pause interface_pause;
4456*5113495bSYour Name 	enum wow_resume_trigger resume_trigger;
4457*5113495bSYour Name };
4458*5113495bSYour Name 
4459*5113495bSYour Name #define HE_LTF_1X	0
4460*5113495bSYour Name #define HE_LTF_2X	1
4461*5113495bSYour Name #define HE_LTF_4X	2
4462*5113495bSYour Name 
4463*5113495bSYour Name #define HE_LTF_ALL	0x7
4464*5113495bSYour Name #define HE_SGI_MASK	0xFF00
4465*5113495bSYour Name 
4466*5113495bSYour Name #define AUTO_RATE_GI_400NS	8
4467*5113495bSYour Name #define AUTO_RATE_GI_800NS	9
4468*5113495bSYour Name #define AUTO_RATE_GI_1600NS	10
4469*5113495bSYour Name #define AUTO_RATE_GI_3200NS	11
4470*5113495bSYour Name 
4471*5113495bSYour Name #define AUTO_RATE_LDPC_DIS_BIT	16
4472*5113495bSYour Name 
4473*5113495bSYour Name #define SET_AUTO_RATE_SGI_VAL(set_val, bit_mask) \
4474*5113495bSYour Name 	(set_val = (set_val & HE_LTF_ALL) | bit_mask)
4475*5113495bSYour Name 
4476*5113495bSYour Name #define SET_AUTO_RATE_HE_LTF_VAL(set_val, bit_mask) \
4477*5113495bSYour Name 	(set_val = (set_val & HE_SGI_MASK) | bit_mask)
4478*5113495bSYour Name 
4479*5113495bSYour Name #define MSCS_OUI_TYPE "\x58"
4480*5113495bSYour Name #define MSCS_OUI_SIZE 1
4481*5113495bSYour Name 
4482*5113495bSYour Name #ifdef WLAN_FEATURE_11AX
4483*5113495bSYour Name #define HE_CAP_OUI_TYPE "\x23"
4484*5113495bSYour Name #define HE_CAP_OUI_SIZE 1
4485*5113495bSYour Name #define HE_OP_OUI_TYPE "\x24"
4486*5113495bSYour Name #define HE_OP_OUI_SIZE 1
4487*5113495bSYour Name 
4488*5113495bSYour Name #define HE_RU_ALLOC_INDX0_MASK (0x01 << 0)
4489*5113495bSYour Name #define HE_RU_ALLOC_INDX1_MASK (0x01 << 1)
4490*5113495bSYour Name #define HE_RU_ALLOC_INDX2_MASK (0x01 << 2)
4491*5113495bSYour Name #define HE_RU_ALLOC_INDX3_MASK (0x01 << 3)
4492*5113495bSYour Name 
4493*5113495bSYour Name /* 3 bits for NSS and 4 bits for RU Index */
4494*5113495bSYour Name #define HE_PPET_NSS_LEN 3
4495*5113495bSYour Name #define HE_PEPT_RU_IDX_LEN 4
4496*5113495bSYour Name #define HE_PPET_NSS_RU_LEN (HE_PPET_NSS_LEN + HE_PEPT_RU_IDX_LEN)
4497*5113495bSYour Name #define HE_PPET_SIZE 3
4498*5113495bSYour Name #define HE_BYTE_SIZE 8
4499*5113495bSYour Name 
4500*5113495bSYour Name struct ppet_hdr {
4501*5113495bSYour Name 	uint8_t nss:3;
4502*5113495bSYour Name 	uint8_t ru_idx_mask:4;
4503*5113495bSYour Name 	uint8_t remaining:1;
4504*5113495bSYour Name };
4505*5113495bSYour Name 
4506*5113495bSYour Name /* MAX PPET size = 7 bits + (max_nss X max_ru_number X 6) = 25 bytes */
4507*5113495bSYour Name #define HE_MAX_PPET_SIZE WNI_CFG_HE_PPET_LEN
4508*5113495bSYour Name 
4509*5113495bSYour Name #define HE_MAX_PHY_CAP_SIZE 3
4510*5113495bSYour Name 
4511*5113495bSYour Name #define HE_CH_WIDTH_GET_BIT(ch_wd, bit)      (((ch_wd) >> (bit)) & 1)
4512*5113495bSYour Name #define HE_CH_WIDTH_COMBINE(b0, b1, b2, b3, b4, b5, b6)             \
4513*5113495bSYour Name 	((uint8_t)(b0) | ((b1) << 1) | ((b2) << 2) |  ((b3) << 3) | \
4514*5113495bSYour Name 	((b4) << 4) | ((b5) << 5) | ((b6) << 6))
4515*5113495bSYour Name #define HE_CH_WIDTH_CLR_BIT(ch_wd, bit)      (((ch_wd) >> (bit)) & ~1)
4516*5113495bSYour Name 
4517*5113495bSYour Name /*
4518*5113495bSYour Name  * MCS values are interpreted as in IEEE 11ax-D1.4 spec onwards
4519*5113495bSYour Name  * +-----------------------------------------------------+
4520*5113495bSYour Name  * |  SS8  |  SS7  |  SS6  | SS5 | SS4 | SS3 | SS2 | SS1 |
4521*5113495bSYour Name  * +-----------------------------------------------------+
4522*5113495bSYour Name  * | 15-14 | 13-12 | 11-10 | 9-8 | 7-6 | 5-4 | 3-2 | 1-0 |
4523*5113495bSYour Name  * +-----------------------------------------------------+
4524*5113495bSYour Name  */
4525*5113495bSYour Name #define HE_MCS_NSS_SHIFT(nss)                 (((nss) - 1) << 1)
4526*5113495bSYour Name #define HE_MCS_MSK_4_NSS(nss)                 (3 << HE_MCS_NSS_SHIFT(nss))
4527*5113495bSYour Name #define HE_MCS_INV_MSK_4_NSS(nss)             (~HE_MCS_MSK_4_NSS(nss))
4528*5113495bSYour Name #define HE_GET_MCS_4_NSS(mcs_set, nss)             \
4529*5113495bSYour Name 	(((mcs_set) >> HE_MCS_NSS_SHIFT(nss)) & 3)
4530*5113495bSYour Name #define HE_SET_MCS_4_NSS(mcs_set, mcs, nss)        \
4531*5113495bSYour Name 	(((mcs_set) & HE_MCS_INV_MSK_4_NSS(nss)) | \
4532*5113495bSYour Name 	((mcs) << HE_MCS_NSS_SHIFT(nss)))
4533*5113495bSYour Name #define HE_MCS_IS_NSS_ENABLED(mcs_set, nss)        \
4534*5113495bSYour Name 	((HE_MCS_MSK_4_NSS(nss) & (mcs_set)) != HE_MCS_MSK_4_NSS(nss))
4535*5113495bSYour Name 
4536*5113495bSYour Name #define HE_MCS_ALL_DISABLED                   0xFFFF
4537*5113495bSYour Name 
4538*5113495bSYour Name #define HE_MCS_0_7     0x0
4539*5113495bSYour Name #define HE_MCS_0_9     0x1
4540*5113495bSYour Name #define HE_MCS_0_11    0x2
4541*5113495bSYour Name #define HE_MCS_DISABLE 0x3
4542*5113495bSYour Name 
4543*5113495bSYour Name #define HE_6G_MIN_MPDU_START_SAPCE_BIT_POS 0
4544*5113495bSYour Name #define HE_6G_MAX_AMPDU_LEN_EXP_BIT_POS 3
4545*5113495bSYour Name #define HE_6G_MAX_MPDU_LEN_BIT_POS 6
4546*5113495bSYour Name #define HE_6G_SMPS_BIT_POS 9
4547*5113495bSYour Name #define HE_6G_RD_RESP_BIT_POS 11
4548*5113495bSYour Name #define HE_6G_RX_ANT_PATTERN_BIT_POS 12
4549*5113495bSYour Name #define HE_6G_TX_ANT_PATTERN_BIT_POS 13
4550*5113495bSYour Name 
4551*5113495bSYour Name /*
4552*5113495bSYour Name  * Following formuala has been arrived at using karnaugh map and unit tested
4553*5113495bSYour Name  * with sample code. Take MCS for each NSS as 2 bit value first and solve for
4554*5113495bSYour Name  * 2 bit intersection of NSS. Use following table/Matrix as guide for solving
4555*5113495bSYour Name  * K-Maps
4556*5113495bSYour Name  * MCS 1\MCS 2    00         01         10         11
4557*5113495bSYour Name  *    00          00         00         00         11
4558*5113495bSYour Name  *    01          00         01         01         11
4559*5113495bSYour Name  *    10          00         01         10         11
4560*5113495bSYour Name  *    11          11         11         11         11
4561*5113495bSYour Name  * if output MCS is o1o0, then as per K-map reduction:
4562*5113495bSYour Name  * o0 = m1.m0 | n1.n0 | (~m1).m0.(n1^n0) | (~n1).n0.(m1^m0)
4563*5113495bSYour Name  * o1 = m1.m0 | n1.n0 | m1.(~m0).n1.(~n0)
4564*5113495bSYour Name  *
4565*5113495bSYour Name  * Please note: Calculating MCS intersection is 80211 protocol specific and
4566*5113495bSYour Name  * should be implemented in PE. WMA can use this macro rather than calling any
4567*5113495bSYour Name  * lim API to do the intersection.
4568*5113495bSYour Name  */
4569*5113495bSYour Name #define HE_INTERSECT_MCS_BITS_PER_NSS(m1, m0, n1, n0)                \
4570*5113495bSYour Name 	(((m1 & m0) | (n1 & n0) | (((~m1) & m0) & (n1 ^ n0))  |      \
4571*5113495bSYour Name 	(((~n1) & n0) & (m1 ^ m0))) | (((m1 & m0) | (n1 & n0) |      \
4572*5113495bSYour Name 	(m1 & ~m0 & n1 & ~n0)) << 1))
4573*5113495bSYour Name 
4574*5113495bSYour Name /* following takes MCS as 2 bits */
4575*5113495bSYour Name #define HE_INTERSECT_MCS_PER_NSS(mcs_1, mcs_2)                       \
4576*5113495bSYour Name 	HE_INTERSECT_MCS_BITS_PER_NSS((mcs_1 >> 1), (mcs_1 & 1),     \
4577*5113495bSYour Name 				      (mcs_2 >> 1), (mcs_2 & 1))
4578*5113495bSYour Name 
4579*5113495bSYour Name /* following takes MCS as 16 bits */
4580*5113495bSYour Name #define HE_INTERSECT_MCS(mcs_1, mcs_2)                             ( \
4581*5113495bSYour Name 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 1),         \
4582*5113495bSYour Name 		HE_GET_MCS_4_NSS(mcs_2, 1)) << HE_MCS_NSS_SHIFT(1) | \
4583*5113495bSYour Name 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 2),         \
4584*5113495bSYour Name 		HE_GET_MCS_4_NSS(mcs_2, 2)) << HE_MCS_NSS_SHIFT(2) | \
4585*5113495bSYour Name 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 3),         \
4586*5113495bSYour Name 		HE_GET_MCS_4_NSS(mcs_2, 3)) << HE_MCS_NSS_SHIFT(3) | \
4587*5113495bSYour Name 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 4),         \
4588*5113495bSYour Name 		HE_GET_MCS_4_NSS(mcs_2, 4)) << HE_MCS_NSS_SHIFT(4) | \
4589*5113495bSYour Name 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 5),         \
4590*5113495bSYour Name 		HE_GET_MCS_4_NSS(mcs_2, 5)) << HE_MCS_NSS_SHIFT(5) | \
4591*5113495bSYour Name 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 6),         \
4592*5113495bSYour Name 		HE_GET_MCS_4_NSS(mcs_2, 6)) << HE_MCS_NSS_SHIFT(6) | \
4593*5113495bSYour Name 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 7),         \
4594*5113495bSYour Name 		HE_GET_MCS_4_NSS(mcs_2, 7)) << HE_MCS_NSS_SHIFT(7) | \
4595*5113495bSYour Name 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 8),         \
4596*5113495bSYour Name 		HE_GET_MCS_4_NSS(mcs_2, 8)) << HE_MCS_NSS_SHIFT(8))
4597*5113495bSYour Name 
4598*5113495bSYour Name /**
4599*5113495bSYour Name  * struct he_capability - to store 11ax HE capabilities
4600*5113495bSYour Name  * @phy_cap: HE PHY capabilities
4601*5113495bSYour Name  * @mac_cap: HE MAC capabilities
4602*5113495bSYour Name  * @mcs: HE MCS
4603*5113495bSYour Name  * @ppet: HE PPE threshold
4604*5113495bSYour Name  */
4605*5113495bSYour Name struct he_capability {
4606*5113495bSYour Name 	uint32_t phy_cap[HE_MAX_PHY_CAP_SIZE];
4607*5113495bSYour Name 	uint32_t mac_cap;
4608*5113495bSYour Name 	uint32_t mcs;
4609*5113495bSYour Name 	struct wlan_psoc_host_ppe_threshold ppet;
4610*5113495bSYour Name };
4611*5113495bSYour Name #endif
4612*5113495bSYour Name 
4613*5113495bSYour Name #define HE_GET_NSS(mcs, nss)                                         \
4614*5113495bSYour Name 	do {                                                         \
4615*5113495bSYour Name 		(nss) = 0;                                           \
4616*5113495bSYour Name 		while ((((mcs) >> ((nss)*2)) & 3) != 3 && nss < 8)   \
4617*5113495bSYour Name 			(nss)++;                                     \
4618*5113495bSYour Name 	} while (0)
4619*5113495bSYour Name 
4620*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
4621*5113495bSYour Name #define EHT_MAX_PHY_CAP_SIZE 3
4622*5113495bSYour Name #define EHT_OP_OUI_TYPE "\x6a"
4623*5113495bSYour Name #define EHT_OP_OUI_SIZE 1
4624*5113495bSYour Name 
4625*5113495bSYour Name #define MLO_IE_OUI_TYPE "\x6b"
4626*5113495bSYour Name #define MLO_IE_OUI_SIZE 1
4627*5113495bSYour Name 
4628*5113495bSYour Name #define EHT_CAP_OUI_TYPE "\x6c"
4629*5113495bSYour Name #define EHT_CAP_OUI_SIZE 1
4630*5113495bSYour Name 
4631*5113495bSYour Name /**
4632*5113495bSYour Name  * struct eht_capability - to store 11be EHT capabilities
4633*5113495bSYour Name  * @phy_cap: EHT PHY capabilities
4634*5113495bSYour Name  * @mac_cap: EHT MAC capabilities
4635*5113495bSYour Name  * @mcs: EHT MCS
4636*5113495bSYour Name  */
4637*5113495bSYour Name struct eht_capability {
4638*5113495bSYour Name 	uint32_t phy_cap[EHT_MAX_PHY_CAP_SIZE];
4639*5113495bSYour Name 	uint32_t mac_cap;
4640*5113495bSYour Name 	uint32_t mcs;
4641*5113495bSYour Name };
4642*5113495bSYour Name #endif
4643*5113495bSYour Name /**
4644*5113495bSYour Name  * struct rsp_stats - arp packet stats
4645*5113495bSYour Name  * @arp_req_enqueue: fw tx count
4646*5113495bSYour Name  * @arp_req_tx_success: tx ack count
4647*5113495bSYour Name  * @arp_req_tx_failure: tx ack fail count
4648*5113495bSYour Name  * @arp_rsp_recvd: rx fw count
4649*5113495bSYour Name  * @out_of_order_arp_rsp_drop_cnt: out of order count
4650*5113495bSYour Name  * @dad_detected: dad detected
4651*5113495bSYour Name  * @connect_status: connection status
4652*5113495bSYour Name  * @ba_session_establishment_status: BA session status
4653*5113495bSYour Name  * @connect_stats_present: connectivity stats present or not
4654*5113495bSYour Name  * @tcp_ack_recvd: tcp syn ack's count
4655*5113495bSYour Name  * @icmpv4_rsp_recvd: icmpv4 responses count
4656*5113495bSYour Name  */
4657*5113495bSYour Name struct rsp_stats {
4658*5113495bSYour Name 	uint32_t vdev_id;
4659*5113495bSYour Name 	uint32_t arp_req_enqueue;
4660*5113495bSYour Name 	uint32_t arp_req_tx_success;
4661*5113495bSYour Name 	uint32_t arp_req_tx_failure;
4662*5113495bSYour Name 	uint32_t arp_rsp_recvd;
4663*5113495bSYour Name 	uint32_t out_of_order_arp_rsp_drop_cnt;
4664*5113495bSYour Name 	uint32_t dad_detected;
4665*5113495bSYour Name 	uint32_t connect_status;
4666*5113495bSYour Name 	uint32_t ba_session_establishment_status;
4667*5113495bSYour Name 	bool connect_stats_present;
4668*5113495bSYour Name 	uint32_t tcp_ack_recvd;
4669*5113495bSYour Name 	uint32_t icmpv4_rsp_recvd;
4670*5113495bSYour Name };
4671*5113495bSYour Name 
4672*5113495bSYour Name /**
4673*5113495bSYour Name  * struct set_arp_stats_params - set/reset arp stats
4674*5113495bSYour Name  * @vdev_id: session id
4675*5113495bSYour Name  * @flag: enable/disable stats
4676*5113495bSYour Name  * @pkt_type: type of packet(1 - arp)
4677*5113495bSYour Name  * @ip_addr: subnet ipv4 address in case of encrypted packets
4678*5113495bSYour Name  * @pkt_type_bitmap: pkt bitmap
4679*5113495bSYour Name  * @tcp_src_port: tcp src port for pkt tracking
4680*5113495bSYour Name  * @tcp_dst_port: tcp dst port for pkt tracking
4681*5113495bSYour Name  * @icmp_ipv4: target ipv4 address to track ping packets
4682*5113495bSYour Name  * @reserved: reserved
4683*5113495bSYour Name  */
4684*5113495bSYour Name struct set_arp_stats_params {
4685*5113495bSYour Name 	uint32_t vdev_id;
4686*5113495bSYour Name 	uint8_t flag;
4687*5113495bSYour Name 	uint8_t pkt_type;
4688*5113495bSYour Name 	uint32_t ip_addr;
4689*5113495bSYour Name 	uint32_t pkt_type_bitmap;
4690*5113495bSYour Name 	uint32_t tcp_src_port;
4691*5113495bSYour Name 	uint32_t tcp_dst_port;
4692*5113495bSYour Name 	uint32_t icmp_ipv4;
4693*5113495bSYour Name 	uint32_t reserved;
4694*5113495bSYour Name };
4695*5113495bSYour Name 
4696*5113495bSYour Name /**
4697*5113495bSYour Name  * struct get_arp_stats_params - get arp stats from firmware
4698*5113495bSYour Name  * @pkt_type: packet type(1 - ARP)
4699*5113495bSYour Name  * @vdev_id: session id
4700*5113495bSYour Name  */
4701*5113495bSYour Name struct get_arp_stats_params {
4702*5113495bSYour Name 	uint8_t pkt_type;
4703*5113495bSYour Name 	uint32_t vdev_id;
4704*5113495bSYour Name };
4705*5113495bSYour Name 
4706*5113495bSYour Name typedef void (*sme_rcpi_callback)(void *context, struct qdf_mac_addr mac_addr,
4707*5113495bSYour Name 				  int32_t rcpi, QDF_STATUS status);
4708*5113495bSYour Name /**
4709*5113495bSYour Name  * struct sme_rcpi_req - structure for querying rcpi info
4710*5113495bSYour Name  * @session_id: session for which rcpi is required
4711*5113495bSYour Name  * @measurement_type: type of measurement from enum rcpi_measurement_type
4712*5113495bSYour Name  * @rcpi_callback: callback function to be invoked for rcpi response
4713*5113495bSYour Name  * @rcpi_context: context info for rcpi callback
4714*5113495bSYour Name  * @mac_addr: peer addr for which rcpi is required
4715*5113495bSYour Name  */
4716*5113495bSYour Name struct sme_rcpi_req {
4717*5113495bSYour Name 	uint32_t session_id;
4718*5113495bSYour Name 	enum rcpi_measurement_type measurement_type;
4719*5113495bSYour Name 	sme_rcpi_callback rcpi_callback;
4720*5113495bSYour Name 	void *rcpi_context;
4721*5113495bSYour Name 	struct qdf_mac_addr mac_addr;
4722*5113495bSYour Name };
4723*5113495bSYour Name 
4724*5113495bSYour Name /*
4725*5113495bSYour Name  * @SCAN_REJECT_DEFAULT: default value
4726*5113495bSYour Name  * @CONNECTION_IN_PROGRESS: connection is in progress
4727*5113495bSYour Name  * @REASSOC_IN_PROGRESS: reassociation is in progress
4728*5113495bSYour Name  * @EAPOL_IN_PROGRESS: STA/P2P-CLI is in middle of EAPOL/WPS exchange
4729*5113495bSYour Name  * @SAP_EAPOL_IN_PROGRESS: SAP/P2P-GO is in middle of EAPOL/WPS exchange
4730*5113495bSYour Name  * @SAP_CONNECTION_IN_PROGRESS: SAP/P2P-GO is in middle of connection.
4731*5113495bSYour Name  * @NAN_ENABLE_DISABLE_IN_PROGRESS: NAN is in middle of enable/disable discovery
4732*5113495bSYour Name  */
4733*5113495bSYour Name enum scan_reject_states {
4734*5113495bSYour Name 	SCAN_REJECT_DEFAULT = 0,
4735*5113495bSYour Name 	CONNECTION_IN_PROGRESS,
4736*5113495bSYour Name 	REASSOC_IN_PROGRESS,
4737*5113495bSYour Name 	EAPOL_IN_PROGRESS,
4738*5113495bSYour Name 	SAP_EAPOL_IN_PROGRESS,
4739*5113495bSYour Name 	SAP_CONNECTION_IN_PROGRESS,
4740*5113495bSYour Name 	NAN_ENABLE_DISABLE_IN_PROGRESS,
4741*5113495bSYour Name };
4742*5113495bSYour Name 
4743*5113495bSYour Name /**
4744*5113495bSYour Name  * sir_sme_rx_aggr_hole_ind - sme rx aggr hole indication
4745*5113495bSYour Name  * @hole_cnt: num of holes detected
4746*5113495bSYour Name  * @hole_info_array: hole info
4747*5113495bSYour Name  */
4748*5113495bSYour Name struct sir_sme_rx_aggr_hole_ind {
4749*5113495bSYour Name 	uint32_t hole_cnt;
4750*5113495bSYour Name 	uint32_t hole_info_array[];
4751*5113495bSYour Name };
4752*5113495bSYour Name 
4753*5113495bSYour Name /**
4754*5113495bSYour Name  * struct sir_set_rx_reorder_timeout_val - rx reorder timeout
4755*5113495bSYour Name  * @rx_timeout_pri: reorder timeout for AC
4756*5113495bSYour Name  *                  rx_timeout_pri[0] : AC_VO
4757*5113495bSYour Name  *                  rx_timeout_pri[1] : AC_VI
4758*5113495bSYour Name  *                  rx_timeout_pri[2] : AC_BE
4759*5113495bSYour Name  *                  rx_timeout_pri[3] : AC_BK
4760*5113495bSYour Name  */
4761*5113495bSYour Name struct sir_set_rx_reorder_timeout_val {
4762*5113495bSYour Name 	uint32_t rx_timeout_pri[4];
4763*5113495bSYour Name };
4764*5113495bSYour Name 
4765*5113495bSYour Name /**
4766*5113495bSYour Name  * struct sir_peer_set_rx_blocksize - set rx blocksize
4767*5113495bSYour Name  * @vdev_id: vdev id
4768*5113495bSYour Name  * @peer_macaddr: peer mac address
4769*5113495bSYour Name  * @rx_block_ack_win_limit: windows size limitation
4770*5113495bSYour Name  */
4771*5113495bSYour Name struct sir_peer_set_rx_blocksize {
4772*5113495bSYour Name 	uint32_t vdev_id;
4773*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
4774*5113495bSYour Name 	uint32_t rx_block_ack_win_limit;
4775*5113495bSYour Name };
4776*5113495bSYour Name 
4777*5113495bSYour Name /**
4778*5113495bSYour Name  * struct sir_rssi_disallow_lst - Structure holding Rssi based avoid candidate
4779*5113495bSYour Name  * list
4780*5113495bSYour Name  * @node: Node pointer
4781*5113495bSYour Name  * @bssid: BSSID of the AP
4782*5113495bSYour Name  * @retry_delay: Retry delay received during last rejection in ms
4783*5113495bSYour Name  * @ expected_rssi: RSSI at which STA can initiate
4784*5113495bSYour Name  * @time_during_rejection: Timestamp during last rejection in millisec
4785*5113495bSYour Name  * @reject_reason: reason to add the BSSID to DLM
4786*5113495bSYour Name  * @source: Source of adding the BSSID to DLM
4787*5113495bSYour Name  * @original_timeout: original timeout sent by the AP
4788*5113495bSYour Name  * @received_time: Timestamp when the AP was added to the Denylist
4789*5113495bSYour Name  */
4790*5113495bSYour Name struct sir_rssi_disallow_lst {
4791*5113495bSYour Name 	qdf_list_node_t node;
4792*5113495bSYour Name 	struct qdf_mac_addr bssid;
4793*5113495bSYour Name 	uint32_t retry_delay;
4794*5113495bSYour Name 	int8_t expected_rssi;
4795*5113495bSYour Name 	qdf_time_t time_during_rejection;
4796*5113495bSYour Name 	enum dlm_reject_ap_reason reject_reason;
4797*5113495bSYour Name 	enum dlm_reject_ap_source source;
4798*5113495bSYour Name 	uint32_t original_timeout;
4799*5113495bSYour Name 	qdf_time_t received_time;
4800*5113495bSYour Name };
4801*5113495bSYour Name 
4802*5113495bSYour Name /**
4803*5113495bSYour Name  * struct chain_rssi_result - chain rssi result
4804*5113495bSYour Name  * num_chains_valid: valid chain num
4805*5113495bSYour Name  * @chain_rssi: chain rssi result as dBm unit
4806*5113495bSYour Name  * @chain_evm: error vector magnitude
4807*5113495bSYour Name  * @ant_id: antenna id
4808*5113495bSYour Name  */
4809*5113495bSYour Name #define CHAIN_MAX_NUM 8
4810*5113495bSYour Name struct chain_rssi_result {
4811*5113495bSYour Name 	uint32_t num_chains_valid;
4812*5113495bSYour Name 	uint32_t chain_rssi[CHAIN_MAX_NUM];
4813*5113495bSYour Name 	int32_t chain_evm[CHAIN_MAX_NUM];
4814*5113495bSYour Name 	uint32_t ant_id[CHAIN_MAX_NUM];
4815*5113495bSYour Name };
4816*5113495bSYour Name 
4817*5113495bSYour Name /**
4818*5113495bSYour Name  * struct get_chain_rssi_req_params - get chain rssi req params
4819*5113495bSYour Name  * @peer_macaddr: specific peer mac address
4820*5113495bSYour Name  * @session_id: session id
4821*5113495bSYour Name  */
4822*5113495bSYour Name struct get_chain_rssi_req_params {
4823*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr;
4824*5113495bSYour Name 	uint8_t session_id;
4825*5113495bSYour Name };
4826*5113495bSYour Name 
4827*5113495bSYour Name /*
4828*5113495bSYour Name  * struct sir_limit_off_chan - limit off-channel command parameters
4829*5113495bSYour Name  * @vdev_id: vdev id
4830*5113495bSYour Name  * @is_tos_active: status of the traffic (active/inactive)
4831*5113495bSYour Name  * @max_off_chan_time: max allowed off channel time
4832*5113495bSYour Name  * @rest_time: home channel time
4833*5113495bSYour Name  * @skip_dfs_chans: skip dfs channels during scan
4834*5113495bSYour Name  */
4835*5113495bSYour Name struct sir_limit_off_chan {
4836*5113495bSYour Name 	uint8_t vdev_id;
4837*5113495bSYour Name 	bool is_tos_active;
4838*5113495bSYour Name 	uint32_t max_off_chan_time;
4839*5113495bSYour Name 	uint32_t rest_time;
4840*5113495bSYour Name 	bool skip_dfs_chans;
4841*5113495bSYour Name };
4842*5113495bSYour Name 
4843*5113495bSYour Name typedef void (*roam_scan_stats_cb)(void *context,
4844*5113495bSYour Name 				   struct wmi_roam_scan_stats_res *res);
4845*5113495bSYour Name 
4846*5113495bSYour Name /**
4847*5113495bSYour Name  * struct sir_roam_scan_stats - Stores roam scan context
4848*5113495bSYour Name  * @vdev_id: vdev id
4849*5113495bSYour Name  * @cb: callback to be invoked for roam scan stats response
4850*5113495bSYour Name  * @context: context of callback
4851*5113495bSYour Name  */
4852*5113495bSYour Name struct sir_roam_scan_stats {
4853*5113495bSYour Name 	uint32_t vdev_id;
4854*5113495bSYour Name 	roam_scan_stats_cb cb;
4855*5113495bSYour Name 	void *context;
4856*5113495bSYour Name };
4857*5113495bSYour Name 
4858*5113495bSYour Name /**
4859*5113495bSYour Name  * struct sae_info - SAE info used for commit/confirm messages
4860*5113495bSYour Name  * @msg_type: Message type
4861*5113495bSYour Name  * @msg_len: length of message
4862*5113495bSYour Name  * @vdev_id: vdev id
4863*5113495bSYour Name  * @peer_mac_addr: peer MAC address
4864*5113495bSYour Name  * @ssid: SSID
4865*5113495bSYour Name  * @akm: key mgmt suite used
4866*5113495bSYour Name  */
4867*5113495bSYour Name struct sir_sae_info {
4868*5113495bSYour Name 	uint16_t msg_type;
4869*5113495bSYour Name 	uint16_t msg_len;
4870*5113495bSYour Name 	uint32_t vdev_id;
4871*5113495bSYour Name 	struct qdf_mac_addr peer_mac_addr;
4872*5113495bSYour Name 	tSirMacSSid ssid;
4873*5113495bSYour Name 	uint32_t akm;
4874*5113495bSYour Name };
4875*5113495bSYour Name 
4876*5113495bSYour Name /**
4877*5113495bSYour Name  * struct sir_sae_msg - SAE msg used for message posting
4878*5113495bSYour Name  * @message_type: message type
4879*5113495bSYour Name  * @length: message length
4880*5113495bSYour Name  * @vdev_id: vdev id
4881*5113495bSYour Name  * @sae_status: SAE status, 0: Success, Non-zero: Failure.
4882*5113495bSYour Name  * @pmkid: PMKID derived as part of SAE authentication
4883*5113495bSYour Name  * @peer_mac_addr: peer MAC address
4884*5113495bSYour Name  * @result_code: This carries the reason of the SAE auth failure.
4885*5113495bSYour Name  *               Currently, SAE authentication failure may happen due to
4886*5113495bSYour Name  *               1. Authentication failure detected as part of SAE auth frame
4887*5113495bSYour Name  *                  exchanges and validation.
4888*5113495bSYour Name  *               2. Deauth received from AP while SAE authentication is in
4889*5113495bSYour Name  *                  progress.
4890*5113495bSYour Name  */
4891*5113495bSYour Name struct sir_sae_msg {
4892*5113495bSYour Name 	uint16_t message_type;
4893*5113495bSYour Name 	uint16_t length;
4894*5113495bSYour Name 	uint16_t vdev_id;
4895*5113495bSYour Name 	uint8_t pmkid[PMKID_LEN];
4896*5113495bSYour Name 	uint8_t sae_status;
4897*5113495bSYour Name 	tSirMacAddr peer_mac_addr;
4898*5113495bSYour Name 	tSirResultCodes result_code;
4899*5113495bSYour Name };
4900*5113495bSYour Name 
4901*5113495bSYour Name #ifdef WLAN_FEATURE_MOTION_DETECTION
4902*5113495bSYour Name /**
4903*5113495bSYour Name  * struct sir_md_evt - motion detection event status
4904*5113495bSYour Name  * @vdev_id: vdev id
4905*5113495bSYour Name  * @status: md event status
4906*5113495bSYour Name  */
4907*5113495bSYour Name struct sir_md_evt {
4908*5113495bSYour Name 	uint8_t vdev_id;
4909*5113495bSYour Name 	uint32_t status;
4910*5113495bSYour Name };
4911*5113495bSYour Name 
4912*5113495bSYour Name /**
4913*5113495bSYour Name  * struct sir_md_bl_evt - motion detection baseline event values
4914*5113495bSYour Name  * @vdev_id: vdev id
4915*5113495bSYour Name  * @bl_baseline_value: baseline correlation value calculated during baselining
4916*5113495bSYour Name  * @bl_max_corr_reserved: max corr value obtained during baselining phase in %
4917*5113495bSYour Name  * @bl_min_corr_reserved: min corr value obtained during baselining phase in %
4918*5113495bSYour Name  */
4919*5113495bSYour Name struct sir_md_bl_evt {
4920*5113495bSYour Name 	uint8_t vdev_id;
4921*5113495bSYour Name 	uint32_t bl_baseline_value;
4922*5113495bSYour Name 	uint32_t bl_max_corr_reserved;
4923*5113495bSYour Name 	uint32_t bl_min_corr_reserved;
4924*5113495bSYour Name };
4925*5113495bSYour Name #endif /* WLAN_FEATURE_MOTION_DETECTION */
4926*5113495bSYour Name 
4927*5113495bSYour Name #ifdef WLAN_MWS_INFO_DEBUGFS
4928*5113495bSYour Name /**
4929*5113495bSYour Name  * struct sir_get_mws_coex_info - Get MWS coex info
4930*5113495bSYour Name  * @vdev_id: vdev id
4931*5113495bSYour Name  * @cmd_id: wmi mws-coex command IDs
4932*5113495bSYour Name  */
4933*5113495bSYour Name struct sir_get_mws_coex_info {
4934*5113495bSYour Name 	uint32_t vdev_id;
4935*5113495bSYour Name 	uint32_t cmd_id;
4936*5113495bSYour Name };
4937*5113495bSYour Name #endif /* WLAN_MWS_INFO_DEBUGFS */
4938*5113495bSYour Name 
4939*5113495bSYour Name /*
4940*5113495bSYour Name  * struct sir_update_session_txq_edca_param
4941*5113495bSYour Name  * @message_type: SME message type
4942*5113495bSYour Name  * @length: size of struct sir_update_session_txq_edca_param
4943*5113495bSYour Name  * @vdev_id: vdev ID
4944*5113495bSYour Name  * @txq_edca_params: txq edca parameter to update
4945*5113495bSYour Name  */
4946*5113495bSYour Name struct sir_update_session_txq_edca_param {
4947*5113495bSYour Name 	uint16_t message_type;
4948*5113495bSYour Name 	uint16_t length;
4949*5113495bSYour Name 	uint8_t vdev_id;
4950*5113495bSYour Name 	tSirMacEdcaParamRecord txq_edca_params;
4951*5113495bSYour Name };
4952*5113495bSYour Name 
4953*5113495bSYour Name /* struct channel_change_req - Change channel
4954*5113495bSYour Name  * request for SAP
4955*5113495bSYour Name  * @vdev_id: vdev id
4956*5113495bSYour Name  * @target_chan_freq: New channel frequency
4957*5113495bSYour Name  * @sec_ch_offset: second channel offset
4958*5113495bSYour Name  * @center_freq_seg0: channel center freq 0
4959*5113495bSYour Name  * @center_freq_seg1: channel center freq 1
4960*5113495bSYour Name  * @target_punc_bitmap: New channel puncturing bitmap
4961*5113495bSYour Name  * @dot11mode: dot11 mode
4962*5113495bSYour Name  * @nw_type: nw type
4963*5113495bSYour Name  * @cac_duration_ms:  cac duration in ms
4964*5113495bSYour Name  * @dfs_regdomain: dfs regdomain
4965*5113495bSYour Name  * @opr_rates: operational rates
4966*5113495bSYour Name  * @ext_rates: extended rates
4967*5113495bSYour Name  */
4968*5113495bSYour Name struct channel_change_req {
4969*5113495bSYour Name 	uint8_t vdev_id;
4970*5113495bSYour Name 	uint32_t target_chan_freq;
4971*5113495bSYour Name 	uint8_t sec_ch_offset;
4972*5113495bSYour Name 	enum phy_ch_width ch_width;
4973*5113495bSYour Name 	uint8_t center_freq_seg0;
4974*5113495bSYour Name 	uint8_t center_freq_seg1;
4975*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
4976*5113495bSYour Name 	uint16_t target_punc_bitmap;
4977*5113495bSYour Name #endif
4978*5113495bSYour Name 	uint32_t dot11mode;
4979*5113495bSYour Name 	tSirNwType nw_type;
4980*5113495bSYour Name 	uint32_t cac_duration_ms;
4981*5113495bSYour Name 	uint32_t dfs_regdomain;
4982*5113495bSYour Name 	tSirMacRateSet opr_rates;
4983*5113495bSYour Name 	tSirMacRateSet ext_rates;
4984*5113495bSYour Name };
4985*5113495bSYour Name 
4986*5113495bSYour Name /* struct start_bss_config - Start BSS
4987*5113495bSYour Name  * request configurations
4988*5113495bSYour Name  * @vdev_id: vdev id
4989*5113495bSYour Name  * @cmd_id: serialization command id
4990*5113495bSYour Name  * @ssId: ssid
4991*5113495bSYour Name  * @dtimPeriod: dtim period
4992*5113495bSYour Name  * @ssidHidden: hidden ssid parameter
4993*5113495bSYour Name  * @privacy: ssid privacy
4994*5113495bSYour Name  * @authType: authentication type
4995*5113495bSYour Name  * @rsnIE: RSN IE of the AP
4996*5113495bSYour Name  * @add_ie_params: additional IEs
4997*5113495bSYour Name  * @oper_ch_freq: operating frequency
4998*5113495bSYour Name  * @vht_channel_width: channel width
4999*5113495bSYour Name  * @center_freq_seg0: channel center freq 0
5000*5113495bSYour Name  * @center_freq_seg1: channel center freq 1
5001*5113495bSYour Name  * @sec_ch_offset: secondary channel offset
5002*5113495bSYour Name  * @wps_state: wps config
5003*5113495bSYour Name  * @dot11mode: dot11 mode
5004*5113495bSYour Name  * @nwType: nw type
5005*5113495bSYour Name  * @operationalRateSet: operational rates
5006*5113495bSYour Name  * @extendedRateSet: extended rates
5007*5113495bSYour Name  * @beacon_tx_rate: Tx rate for beacon
5008*5113495bSYour Name  * @cac_duration_ms: cac duration in ms
5009*5113495bSYour Name  * @dfs_regdomain: dfs regdomain
5010*5113495bSYour Name  */
5011*5113495bSYour Name struct start_bss_config {
5012*5113495bSYour Name 	uint8_t vdev_id;
5013*5113495bSYour Name 	uint32_t cmd_id;
5014*5113495bSYour Name 	tSirMacSSid ssId;
5015*5113495bSYour Name 	uint16_t beaconInterval;
5016*5113495bSYour Name 	uint32_t dtimPeriod;
5017*5113495bSYour Name 	uint8_t ssidHidden;
5018*5113495bSYour Name 
5019*5113495bSYour Name 	uint8_t privacy;
5020*5113495bSYour Name 	tAniAuthType authType;
5021*5113495bSYour Name 	tSirRSNie rsnIE;
5022*5113495bSYour Name 	struct add_ie_params add_ie_params;
5023*5113495bSYour Name 
5024*5113495bSYour Name 	uint32_t oper_ch_freq;
5025*5113495bSYour Name 	uint8_t vht_channel_width;
5026*5113495bSYour Name 	uint8_t center_freq_seg0;
5027*5113495bSYour Name 	uint8_t center_freq_seg1;
5028*5113495bSYour Name 	uint8_t sec_ch_offset;
5029*5113495bSYour Name 
5030*5113495bSYour Name 	uint8_t wps_state;
5031*5113495bSYour Name 	uint8_t dot11mode;
5032*5113495bSYour Name 	tSirNwType nwType;
5033*5113495bSYour Name 
5034*5113495bSYour Name 	tSirMacRateSet operationalRateSet;
5035*5113495bSYour Name 	tSirMacRateSet extendedRateSet;
5036*5113495bSYour Name 	uint16_t beacon_tx_rate;
5037*5113495bSYour Name 	uint32_t cac_duration_ms;
5038*5113495bSYour Name 	uint32_t dfs_regdomain;
5039*5113495bSYour Name };
5040*5113495bSYour Name 
5041*5113495bSYour Name #endif /* __SIR_API_H */
5042