xref: /wlan-driver/qcacld-3.0/core/hdd/inc/wlan_hdd_main.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 #if !defined(WLAN_HDD_MAIN_H)
21*5113495bSYour Name #define WLAN_HDD_MAIN_H
22*5113495bSYour Name /**
23*5113495bSYour Name  * DOC: wlan_hdd_main.h
24*5113495bSYour Name  *
25*5113495bSYour Name  * Linux HDD Adapter Type
26*5113495bSYour Name  */
27*5113495bSYour Name 
28*5113495bSYour Name /*
29*5113495bSYour Name  * The following terms were in use in prior versions of the driver but
30*5113495bSYour Name  * have now been replaced with terms that are aligned with the Linux
31*5113495bSYour Name  * Coding style. Macros are defined to hopefully prevent new instances
32*5113495bSYour Name  * from being introduced, primarily by code propagation.
33*5113495bSYour Name  */
34*5113495bSYour Name #define pHddCtx
35*5113495bSYour Name #define pAdapter
36*5113495bSYour Name #define pHostapdAdapter
37*5113495bSYour Name #define pHddApCtx
38*5113495bSYour Name #define pHddStaCtx
39*5113495bSYour Name #define pHostapdState
40*5113495bSYour Name #define pRoamInfo
41*5113495bSYour Name #define pScanInfo
42*5113495bSYour Name #define pBeaconIes
43*5113495bSYour Name 
44*5113495bSYour Name /*
45*5113495bSYour Name  * Include files
46*5113495bSYour Name  */
47*5113495bSYour Name 
48*5113495bSYour Name #include <linux/netdevice.h>
49*5113495bSYour Name #include <linux/skbuff.h>
50*5113495bSYour Name #include <net/cfg80211.h>
51*5113495bSYour Name #include <linux/ieee80211.h>
52*5113495bSYour Name #include <qdf_delayed_work.h>
53*5113495bSYour Name #include <qdf_list.h>
54*5113495bSYour Name #include <qdf_types.h>
55*5113495bSYour Name #include "sir_mac_prot_def.h"
56*5113495bSYour Name #include "csr_api.h"
57*5113495bSYour Name #include "wlan_dsc.h"
58*5113495bSYour Name #include <wlan_hdd_assoc.h>
59*5113495bSYour Name #include <wlan_hdd_wmm.h>
60*5113495bSYour Name #include <wlan_hdd_cfg.h>
61*5113495bSYour Name #include <linux/spinlock.h>
62*5113495bSYour Name #include <ani_system_defs.h>
63*5113495bSYour Name #if defined(CONFIG_HAS_WAKELOCK)
64*5113495bSYour Name #include <linux/wakelock.h>
65*5113495bSYour Name #endif
66*5113495bSYour Name #ifdef WLAN_FEATURE_TSF_PTP
67*5113495bSYour Name #include <linux/ptp_classify.h>
68*5113495bSYour Name #include <linux/ptp_clock_kernel.h>
69*5113495bSYour Name #endif
70*5113495bSYour Name #include <wlan_hdd_ftm.h>
71*5113495bSYour Name #include "wlan_hdd_tdls.h"
72*5113495bSYour Name #include "wlan_hdd_tsf.h"
73*5113495bSYour Name #include "wlan_hdd_cfg80211.h"
74*5113495bSYour Name #include "wlan_hdd_debugfs.h"
75*5113495bSYour Name #include <qdf_defer.h>
76*5113495bSYour Name #include "sap_api.h"
77*5113495bSYour Name #include "cdp_txrx_flow_ctrl_legacy.h"
78*5113495bSYour Name #include <cdp_txrx_peer_ops.h>
79*5113495bSYour Name #include <cdp_txrx_misc.h>
80*5113495bSYour Name #include "wlan_hdd_nan_datapath.h"
81*5113495bSYour Name #if defined(CONFIG_HL_SUPPORT)
82*5113495bSYour Name #include "wlan_tgt_def_config_hl.h"
83*5113495bSYour Name #else
84*5113495bSYour Name #include "wlan_tgt_def_config.h"
85*5113495bSYour Name #endif
86*5113495bSYour Name #include <wlan_objmgr_cmn.h>
87*5113495bSYour Name #include <wlan_objmgr_global_obj.h>
88*5113495bSYour Name #include <wlan_objmgr_psoc_obj.h>
89*5113495bSYour Name #include <wlan_objmgr_pdev_obj.h>
90*5113495bSYour Name #include <wlan_objmgr_vdev_obj.h>
91*5113495bSYour Name #include <wlan_objmgr_peer_obj.h>
92*5113495bSYour Name #include "wlan_pmo_ucfg_api.h"
93*5113495bSYour Name #ifdef WIFI_POS_CONVERGED
94*5113495bSYour Name #include "os_if_wifi_pos.h"
95*5113495bSYour Name #include "wifi_pos_api.h"
96*5113495bSYour Name #else
97*5113495bSYour Name #include "wlan_hdd_oemdata.h"
98*5113495bSYour Name #endif
99*5113495bSYour Name #include "wlan_hdd_he.h"
100*5113495bSYour Name 
101*5113495bSYour Name #include <net/neighbour.h>
102*5113495bSYour Name #include <net/netevent.h>
103*5113495bSYour Name #include "wlan_hdd_twt.h"
104*5113495bSYour Name #include "wma_sar_public_structs.h"
105*5113495bSYour Name #include "wlan_mlme_ucfg_api.h"
106*5113495bSYour Name #include "pld_common.h"
107*5113495bSYour Name #include "wlan_cm_roam_public_struct.h"
108*5113495bSYour Name 
109*5113495bSYour Name #ifdef WLAN_FEATURE_DP_BUS_BANDWIDTH
110*5113495bSYour Name #include "qdf_periodic_work.h"
111*5113495bSYour Name #endif
112*5113495bSYour Name 
113*5113495bSYour Name #if defined(CLD_PM_QOS) || defined(FEATURE_RUNTIME_PM)
114*5113495bSYour Name #include <linux/pm_qos.h>
115*5113495bSYour Name #endif
116*5113495bSYour Name 
117*5113495bSYour Name #include "wlan_hdd_sta_info.h"
118*5113495bSYour Name #include <wlan_hdd_cm_api.h>
119*5113495bSYour Name #include "wlan_hdd_mlo.h"
120*5113495bSYour Name #include "wlan_osif_features.h"
121*5113495bSYour Name #include "wlan_dp_public_struct.h"
122*5113495bSYour Name 
123*5113495bSYour Name /*
124*5113495bSYour Name  * Preprocessor definitions and constants
125*5113495bSYour Name  */
126*5113495bSYour Name 
127*5113495bSYour Name /* Milli seconds to delay SSR thread when an packet is getting processed */
128*5113495bSYour Name #define SSR_WAIT_SLEEP_TIME 200
129*5113495bSYour Name /* MAX iteration count to wait for dp tx to complete */
130*5113495bSYour Name #define MAX_SSR_WAIT_ITERATIONS 100
131*5113495bSYour Name #define MAX_SSR_PROTECT_LOG (16)
132*5113495bSYour Name 
133*5113495bSYour Name #define HDD_MAX_OEM_DATA_LEN 1024
134*5113495bSYour Name #define HDD_MAX_FILE_NAME_LEN 64
135*5113495bSYour Name #ifdef FEATURE_WLAN_APF
136*5113495bSYour Name /**
137*5113495bSYour Name  * struct hdd_apf_context - hdd Context for apf
138*5113495bSYour Name  * @magic: magic number
139*5113495bSYour Name  * @qdf_apf_event: Completion variable for APF get operations
140*5113495bSYour Name  * @capability_response: capabilities response received from fw
141*5113495bSYour Name  * @apf_enabled: True: APF Interpreter enabled, False: Disabled
142*5113495bSYour Name  * @cmd_in_progress: Flag that indicates an APF command is in progress
143*5113495bSYour Name  * @buf: Buffer to accumulate read memory chunks
144*5113495bSYour Name  * @buf_len: Length of the read memory requested
145*5113495bSYour Name  * @offset: APF work memory offset to fetch from
146*5113495bSYour Name  * @lock: APF Context lock
147*5113495bSYour Name  */
148*5113495bSYour Name struct hdd_apf_context {
149*5113495bSYour Name 	unsigned int magic;
150*5113495bSYour Name 	qdf_event_t qdf_apf_event;
151*5113495bSYour Name 	bool apf_enabled;
152*5113495bSYour Name 	bool cmd_in_progress;
153*5113495bSYour Name 	uint8_t *buf;
154*5113495bSYour Name 	uint32_t buf_len;
155*5113495bSYour Name 	uint32_t offset;
156*5113495bSYour Name 	qdf_spinlock_t lock;
157*5113495bSYour Name };
158*5113495bSYour Name #endif /* FEATURE_WLAN_APF */
159*5113495bSYour Name 
160*5113495bSYour Name #ifdef TX_MULTIQ_PER_AC
161*5113495bSYour Name #define TX_GET_QUEUE_IDX(ac, off) (((ac) * TX_QUEUES_PER_AC) + (off))
162*5113495bSYour Name #define TX_QUEUES_PER_AC 4
163*5113495bSYour Name #else
164*5113495bSYour Name #define TX_GET_QUEUE_IDX(ac, off) (ac)
165*5113495bSYour Name #define TX_QUEUES_PER_AC 1
166*5113495bSYour Name #endif
167*5113495bSYour Name 
168*5113495bSYour Name /** Number of Tx Queues */
169*5113495bSYour Name #if defined(QCA_LL_TX_FLOW_CONTROL_V2) || \
170*5113495bSYour Name 	defined(QCA_HL_NETDEV_FLOW_CONTROL) || \
171*5113495bSYour Name 	defined(QCA_LL_PDEV_TX_FLOW_CONTROL)
172*5113495bSYour Name /* Only one HI_PRIO queue */
173*5113495bSYour Name #define NUM_TX_QUEUES (4 * TX_QUEUES_PER_AC + 1)
174*5113495bSYour Name #else
175*5113495bSYour Name #define NUM_TX_QUEUES (4 * TX_QUEUES_PER_AC)
176*5113495bSYour Name #endif
177*5113495bSYour Name 
178*5113495bSYour Name #define NUM_RX_QUEUES 5
179*5113495bSYour Name 
180*5113495bSYour Name /*
181*5113495bSYour Name  * Number of DPTRACE records to dump when a cfg80211 disconnect with reason
182*5113495bSYour Name  * WLAN_REASON_DEAUTH_LEAVING DEAUTH is received from user-space.
183*5113495bSYour Name  */
184*5113495bSYour Name #define WLAN_DEAUTH_DPTRACE_DUMP_COUNT 100
185*5113495bSYour Name 
186*5113495bSYour Name /* HDD_IS_RATE_LIMIT_REQ: Macro helper to implement rate limiting
187*5113495bSYour Name  * @flag: The flag to determine if limiting is required or not
188*5113495bSYour Name  * @rate: The number of seconds within which if multiple commands come, the
189*5113495bSYour Name  *	  flag will be set to true
190*5113495bSYour Name  *
191*5113495bSYour Name  * If the function in which this macro is used is called multiple times within
192*5113495bSYour Name  * "rate" number of seconds, the "flag" will be set to true which can be used
193*5113495bSYour Name  * to reject/take appropriate action.
194*5113495bSYour Name  */
195*5113495bSYour Name #define HDD_IS_RATE_LIMIT_REQ(flag, rate)\
196*5113495bSYour Name 	do {\
197*5113495bSYour Name 		static ulong __last_ticks;\
198*5113495bSYour Name 		ulong __ticks = jiffies;\
199*5113495bSYour Name 		flag = false; \
200*5113495bSYour Name 		if (!time_after(__ticks,\
201*5113495bSYour Name 		    __last_ticks + rate * HZ)) {\
202*5113495bSYour Name 			flag = true; \
203*5113495bSYour Name 		} \
204*5113495bSYour Name 		else { \
205*5113495bSYour Name 			__last_ticks = __ticks;\
206*5113495bSYour Name 		} \
207*5113495bSYour Name 	} while (0)
208*5113495bSYour Name 
209*5113495bSYour Name /*
210*5113495bSYour Name  * API in_compat_syscall() is introduced in 4.6 kernel to check whether we're
211*5113495bSYour Name  * in a compat syscall or not. It is a new way to query the syscall type, which
212*5113495bSYour Name  * works properly on all architectures.
213*5113495bSYour Name  *
214*5113495bSYour Name  */
215*5113495bSYour Name #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0))
in_compat_syscall(void)216*5113495bSYour Name static inline bool in_compat_syscall(void) { return is_compat_task(); }
217*5113495bSYour Name #endif
218*5113495bSYour Name 
219*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0)) || \
220*5113495bSYour Name 	defined(CFG80211_REMOVE_IEEE80211_BACKPORT)
221*5113495bSYour Name #define HDD_NL80211_BAND_2GHZ   NL80211_BAND_2GHZ
222*5113495bSYour Name #define HDD_NL80211_BAND_5GHZ   NL80211_BAND_5GHZ
223*5113495bSYour Name #define HDD_NUM_NL80211_BANDS   NUM_NL80211_BANDS
224*5113495bSYour Name #else
225*5113495bSYour Name #define HDD_NL80211_BAND_2GHZ   IEEE80211_BAND_2GHZ
226*5113495bSYour Name #define HDD_NL80211_BAND_5GHZ   IEEE80211_BAND_5GHZ
227*5113495bSYour Name #define HDD_NUM_NL80211_BANDS   ((enum nl80211_band)IEEE80211_NUM_BANDS)
228*5113495bSYour Name #endif
229*5113495bSYour Name 
230*5113495bSYour Name #if defined(CONFIG_BAND_6GHZ) && (defined(CFG80211_6GHZ_BAND_SUPPORTED) || \
231*5113495bSYour Name 	(KERNEL_VERSION(5, 4, 0) <= LINUX_VERSION_CODE))
232*5113495bSYour Name #define HDD_NL80211_BAND_6GHZ   NL80211_BAND_6GHZ
233*5113495bSYour Name #endif
234*5113495bSYour Name 
235*5113495bSYour Name #define TSF_GPIO_PIN_INVALID 255
236*5113495bSYour Name 
237*5113495bSYour Name /** Length of the TX queue for the netdev */
238*5113495bSYour Name #define HDD_NETDEV_TX_QUEUE_LEN (3000)
239*5113495bSYour Name 
240*5113495bSYour Name /** Hdd Tx Time out value */
241*5113495bSYour Name #define HDD_TX_TIMEOUT          msecs_to_jiffies(5000)
242*5113495bSYour Name 
243*5113495bSYour Name #define HDD_TX_STALL_THRESHOLD 4
244*5113495bSYour Name 
245*5113495bSYour Name /** Hdd Default MTU */
246*5113495bSYour Name #define HDD_DEFAULT_MTU         (1500)
247*5113495bSYour Name 
248*5113495bSYour Name #ifdef QCA_CONFIG_SMP
249*5113495bSYour Name #define NUM_CPUS NR_CPUS
250*5113495bSYour Name #else
251*5113495bSYour Name #define NUM_CPUS 1
252*5113495bSYour Name #endif
253*5113495bSYour Name 
254*5113495bSYour Name #define ACS_COMPLETE_TIMEOUT 3000
255*5113495bSYour Name 
256*5113495bSYour Name #define HDD_PSOC_IDLE_SHUTDOWN_SUSPEND_DELAY (1000)
257*5113495bSYour Name /**
258*5113495bSYour Name  * enum hdd_adapter_flags - event bitmap flags registered net device
259*5113495bSYour Name  * @NET_DEVICE_REGISTERED: Adapter is registered with the kernel
260*5113495bSYour Name  * @WMM_INIT_DONE: Adapter is initialized
261*5113495bSYour Name  * @DEVICE_IFACE_OPENED: Adapter has been "opened" via the kernel
262*5113495bSYour Name  * @WDEV_ONLY_REGISTERED: Only WDEV is registered
263*5113495bSYour Name  */
264*5113495bSYour Name enum hdd_adapter_flags {
265*5113495bSYour Name 	NET_DEVICE_REGISTERED,
266*5113495bSYour Name 	WMM_INIT_DONE,
267*5113495bSYour Name 	DEVICE_IFACE_OPENED,
268*5113495bSYour Name 	WDEV_ONLY_REGISTERED,
269*5113495bSYour Name };
270*5113495bSYour Name 
271*5113495bSYour Name /**
272*5113495bSYour Name  * enum hdd_link_flags - Event bitmap flags specific to per link
273*5113495bSYour Name  * @SME_SESSION_OPENED: Firmware vdev has been created
274*5113495bSYour Name  * @SOFTAP_BSS_STARTED: Software Access Point (SAP) is running
275*5113495bSYour Name  * @SOFTAP_INIT_DONE: Software Access Point (SAP) is initialized
276*5113495bSYour Name  * @VENDOR_ACS_RESPONSE_PENDING: Waiting for event for vendor acs
277*5113495bSYour Name  */
278*5113495bSYour Name enum hdd_link_flags {
279*5113495bSYour Name 	SME_SESSION_OPENED,
280*5113495bSYour Name 	SOFTAP_BSS_STARTED,
281*5113495bSYour Name 	SOFTAP_INIT_DONE,
282*5113495bSYour Name 	VENDOR_ACS_RESPONSE_PENDING,
283*5113495bSYour Name };
284*5113495bSYour Name 
285*5113495bSYour Name /**
286*5113495bSYour Name  * enum hdd_nb_cmd_id - North bound command IDs received during SSR
287*5113495bSYour Name  * @NO_COMMAND: No NB command received during SSR
288*5113495bSYour Name  * @INTERFACE_DOWN: Received interface down during SSR
289*5113495bSYour Name  */
290*5113495bSYour Name enum hdd_nb_cmd_id {
291*5113495bSYour Name 	NO_COMMAND,
292*5113495bSYour Name 	INTERFACE_DOWN
293*5113495bSYour Name };
294*5113495bSYour Name 
295*5113495bSYour Name #define WLAN_WAIT_TIME_STATS       800
296*5113495bSYour Name #define WLAN_WAIT_TIME_LINK_STATUS 800
297*5113495bSYour Name 
298*5113495bSYour Name /** Maximum time(ms) to wait for mc thread suspend **/
299*5113495bSYour Name #define WLAN_WAIT_TIME_MCTHREAD_SUSPEND  1200
300*5113495bSYour Name 
301*5113495bSYour Name /** Maximum time(ms) to wait for target to be ready for suspend **/
302*5113495bSYour Name #define WLAN_WAIT_TIME_READY_TO_SUSPEND  2000
303*5113495bSYour Name 
304*5113495bSYour Name /* Scan Req Timeout */
305*5113495bSYour Name #define WLAN_WAIT_TIME_SCAN_REQ 100
306*5113495bSYour Name 
307*5113495bSYour Name #define WLAN_WAIT_TIME_APF     1000
308*5113495bSYour Name 
309*5113495bSYour Name #define WLAN_WAIT_TIME_FW_ROAM_STATS 1000
310*5113495bSYour Name 
311*5113495bSYour Name #define WLAN_WAIT_TIME_ANTENNA_ISOLATION 8000
312*5113495bSYour Name 
313*5113495bSYour Name /* Maximum time(ms) to wait for RSO CMD status event */
314*5113495bSYour Name #define WAIT_TIME_RSO_CMD_STATUS 2000
315*5113495bSYour Name 
316*5113495bSYour Name /* rcpi request timeout in milli seconds */
317*5113495bSYour Name #define WLAN_WAIT_TIME_RCPI 500
318*5113495bSYour Name 
319*5113495bSYour Name #define WLAN_WAIT_PEER_CLEANUP 5000
320*5113495bSYour Name 
321*5113495bSYour Name #define MAX_CFG_STRING_LEN  255
322*5113495bSYour Name 
323*5113495bSYour Name /* Maximum time(ms) to wait for external acs response */
324*5113495bSYour Name #define WLAN_VENDOR_ACS_WAIT_TIME 1000
325*5113495bSYour Name 
326*5113495bSYour Name /* Maximum time(ms) to wait for monitor mode vdev up event completion*/
327*5113495bSYour Name #define WLAN_MONITOR_MODE_VDEV_UP_EVT      SME_CMD_VDEV_START_BSS_TIMEOUT
328*5113495bSYour Name 
329*5113495bSYour Name /* Mac Address string length */
330*5113495bSYour Name #define MAC_ADDRESS_STR_LEN 18  /* Including null terminator */
331*5113495bSYour Name /* Max and min IEs length in bytes */
332*5113495bSYour Name #define MAX_GENIE_LEN (512)
333*5113495bSYour Name #define MIN_GENIE_LEN (2)
334*5113495bSYour Name 
335*5113495bSYour Name #define WPS_OUI_TYPE   "\x00\x50\xf2\x04"
336*5113495bSYour Name #define WPS_OUI_TYPE_SIZE  4
337*5113495bSYour Name 
338*5113495bSYour Name #define P2P_OUI_TYPE   "\x50\x6f\x9a\x09"
339*5113495bSYour Name #define P2P_OUI_TYPE_SIZE  4
340*5113495bSYour Name 
341*5113495bSYour Name #define OSEN_OUI_TYPE   "\x50\x6f\x9a\x12"
342*5113495bSYour Name #define OSEN_OUI_TYPE_SIZE  4
343*5113495bSYour Name 
344*5113495bSYour Name #ifdef WLAN_FEATURE_WFD
345*5113495bSYour Name #define WFD_OUI_TYPE   "\x50\x6f\x9a\x0a"
346*5113495bSYour Name #define WFD_OUI_TYPE_SIZE  4
347*5113495bSYour Name #endif
348*5113495bSYour Name 
349*5113495bSYour Name #define MBO_OUI_TYPE   "\x50\x6f\x9a\x16"
350*5113495bSYour Name #define MBO_OUI_TYPE_SIZE  4
351*5113495bSYour Name 
352*5113495bSYour Name #define QCN_OUI_TYPE   "\x8c\xfd\xf0\x01"
353*5113495bSYour Name #define QCN_OUI_TYPE_SIZE  4
354*5113495bSYour Name 
355*5113495bSYour Name #define wlan_hdd_get_wps_ie_ptr(ie, ie_len) \
356*5113495bSYour Name 	wlan_get_vendor_ie_ptr_from_oui(WPS_OUI_TYPE, WPS_OUI_TYPE_SIZE, \
357*5113495bSYour Name 	ie, ie_len)
358*5113495bSYour Name 
359*5113495bSYour Name #define hdd_alert(params...) QDF_TRACE_FATAL(QDF_MODULE_ID_HDD, params)
360*5113495bSYour Name #define hdd_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_HDD, params)
361*5113495bSYour Name #define hdd_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_HDD, params)
362*5113495bSYour Name #define hdd_info(params...) QDF_TRACE_INFO(QDF_MODULE_ID_HDD, params)
363*5113495bSYour Name #define hdd_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_HDD, params)
364*5113495bSYour Name 
365*5113495bSYour Name #define hdd_nofl_alert(params...) \
366*5113495bSYour Name 	QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_HDD, params)
367*5113495bSYour Name #define hdd_nofl_err(params...) \
368*5113495bSYour Name 	QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_HDD, params)
369*5113495bSYour Name #define hdd_nofl_warn(params...) \
370*5113495bSYour Name 	QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_HDD, params)
371*5113495bSYour Name #define hdd_nofl_info(params...) \
372*5113495bSYour Name 	QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_HDD, params)
373*5113495bSYour Name #define hdd_nofl_debug(params...) \
374*5113495bSYour Name 	QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_HDD, params)
375*5113495bSYour Name 
376*5113495bSYour Name #define hdd_alert_rl(params...) QDF_TRACE_FATAL_RL(QDF_MODULE_ID_HDD, params)
377*5113495bSYour Name #define hdd_err_rl(params...) QDF_TRACE_ERROR_RL(QDF_MODULE_ID_HDD, params)
378*5113495bSYour Name #define hdd_warn_rl(params...) QDF_TRACE_WARN_RL(QDF_MODULE_ID_HDD, params)
379*5113495bSYour Name #define hdd_info_rl(params...) QDF_TRACE_INFO_RL(QDF_MODULE_ID_HDD, params)
380*5113495bSYour Name #define hdd_debug_rl(params...) QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_HDD, params)
381*5113495bSYour Name 
382*5113495bSYour Name #define hdd_enter() QDF_TRACE_ENTER(QDF_MODULE_ID_HDD, "enter")
383*5113495bSYour Name #define hdd_enter_dev(dev) \
384*5113495bSYour Name 	QDF_TRACE_ENTER(QDF_MODULE_ID_HDD, "enter(%s)", (dev)->name)
385*5113495bSYour Name #define hdd_exit() QDF_TRACE_EXIT(QDF_MODULE_ID_HDD, "exit")
386*5113495bSYour Name 
387*5113495bSYour Name #define WLAN_HDD_GET_PRIV_PTR(__dev__) \
388*5113495bSYour Name 		(struct hdd_adapter *)(netdev_priv((__dev__)))
389*5113495bSYour Name 
390*5113495bSYour Name #define MAX_NO_OF_2_4_CHANNELS 14
391*5113495bSYour Name 
392*5113495bSYour Name #define WLAN_HDD_PUBLIC_ACTION_FRAME_OFFSET 24
393*5113495bSYour Name 
394*5113495bSYour Name #define WLAN_HDD_IS_SOCIAL_CHANNEL(center_freq)	\
395*5113495bSYour Name 	(((center_freq) == 2412) || ((center_freq) == 2437) || \
396*5113495bSYour Name 	((center_freq) == 2462))
397*5113495bSYour Name 
398*5113495bSYour Name #define WLAN_HDD_QOS_ACTION_FRAME 1
399*5113495bSYour Name #define WLAN_HDD_QOS_MAP_CONFIGURE 4
400*5113495bSYour Name #define HDD_SAP_WAKE_LOCK_DURATION WAKELOCK_DURATION_RECOMMENDED
401*5113495bSYour Name 
402*5113495bSYour Name /* SAP client disconnect wake lock duration in milli seconds */
403*5113495bSYour Name #define HDD_SAP_CLIENT_DISCONNECT_WAKE_LOCK_DURATION \
404*5113495bSYour Name 	WAKELOCK_DURATION_RECOMMENDED
405*5113495bSYour Name 
406*5113495bSYour Name #define HDD_CFG_REQUEST_FIRMWARE_RETRIES (3)
407*5113495bSYour Name #define HDD_CFG_REQUEST_FIRMWARE_DELAY (20)
408*5113495bSYour Name 
409*5113495bSYour Name #define MAX_USER_COMMAND_SIZE 4096
410*5113495bSYour Name #define DNS_DOMAIN_NAME_MAX_LEN 255
411*5113495bSYour Name #define ICMPv6_ADDR_LEN 16
412*5113495bSYour Name 
413*5113495bSYour Name 
414*5113495bSYour Name #define HDD_MIN_TX_POWER (-100) /* minimum tx power */
415*5113495bSYour Name #define HDD_MAX_TX_POWER (+100) /* maximum tx power */
416*5113495bSYour Name 
417*5113495bSYour Name /* If IPA UC data path is enabled, target should reserve extra tx descriptors
418*5113495bSYour Name  * for IPA data path.
419*5113495bSYour Name  * Then host data path should allow less TX packet pumping in case
420*5113495bSYour Name  * IPA data path enabled
421*5113495bSYour Name  */
422*5113495bSYour Name #define WLAN_TFC_IPAUC_TX_DESC_RESERVE   100
423*5113495bSYour Name 
424*5113495bSYour Name /*
425*5113495bSYour Name  * NET_NAME_UNKNOWN is only introduced after Kernel 3.17, to have a macro
426*5113495bSYour Name  * here if the Kernel version is less than 3.17 to avoid the interleave
427*5113495bSYour Name  * conditional compilation.
428*5113495bSYour Name  */
429*5113495bSYour Name #if !((LINUX_VERSION_CODE >= KERNEL_VERSION(3, 17, 0)) ||\
430*5113495bSYour Name 	defined(WITH_BACKPORTS))
431*5113495bSYour Name #define NET_NAME_UNKNOWN	0
432*5113495bSYour Name #endif
433*5113495bSYour Name 
434*5113495bSYour Name #define PRE_CAC_SSID "pre_cac_ssid"
435*5113495bSYour Name 
436*5113495bSYour Name #define SCAN_REJECT_THRESHOLD_TIME 300000 /* Time is in msec, equal to 5 mins */
437*5113495bSYour Name #define SCAN_REJECT_THRESHOLD 15
438*5113495bSYour Name 
439*5113495bSYour Name /* Default Psoc id */
440*5113495bSYour Name #define DEFAULT_PSOC_ID 1
441*5113495bSYour Name 
442*5113495bSYour Name /* wait time for nud stats in milliseconds */
443*5113495bSYour Name #define WLAN_WAIT_TIME_NUD_STATS 800
444*5113495bSYour Name /* nud stats skb max length */
445*5113495bSYour Name #define WLAN_NUD_STATS_LEN 800
446*5113495bSYour Name /* ARP packet type for NUD debug stats */
447*5113495bSYour Name #define WLAN_NUD_STATS_ARP_PKT_TYPE 1
448*5113495bSYour Name /* Assigned size of driver memory dump is 4096 bytes */
449*5113495bSYour Name #define DRIVER_MEM_DUMP_SIZE    4096
450*5113495bSYour Name 
451*5113495bSYour Name /* MAX OS Q block time value in msec
452*5113495bSYour Name  * Prevent from permanent stall, resume OS Q if timer expired
453*5113495bSYour Name  */
454*5113495bSYour Name #define WLAN_HDD_TX_FLOW_CONTROL_OS_Q_BLOCK_TIME 1000
455*5113495bSYour Name #define WLAN_SAP_HDD_TX_FLOW_CONTROL_OS_Q_BLOCK_TIME 100
456*5113495bSYour Name #define WLAN_HDD_TX_FLOW_CONTROL_MAX_24BAND_CH   14
457*5113495bSYour Name 
458*5113495bSYour Name #ifndef NUM_TX_RX_HISTOGRAM
459*5113495bSYour Name #define NUM_TX_RX_HISTOGRAM 128
460*5113495bSYour Name #endif
461*5113495bSYour Name 
462*5113495bSYour Name #define NUM_TX_RX_HISTOGRAM_MASK (NUM_TX_RX_HISTOGRAM - 1)
463*5113495bSYour Name 
464*5113495bSYour Name #define HDD_NOISE_FLOOR_DBM (-96)
465*5113495bSYour Name 
466*5113495bSYour Name #define INTF_MACADDR_MASK       0x7
467*5113495bSYour Name 
468*5113495bSYour Name /**
469*5113495bSYour Name  * typedef wlan_net_dev_ref_dbgid - Debug IDs to detect net device reference
470*5113495bSYour Name  *                                  leaks.
471*5113495bSYour Name  * NOTE: New values added to the enum must also be reflected in function
472*5113495bSYour Name  * net_dev_ref_debug_string_from_id()
473*5113495bSYour Name  */
474*5113495bSYour Name typedef enum {
475*5113495bSYour Name 	NET_DEV_HOLD_ID_RESERVED = 0,
476*5113495bSYour Name 	NET_DEV_HOLD_GET_STA_CONNECTION_IN_PROGRESS = 1,
477*5113495bSYour Name 	NET_DEV_HOLD_CHECK_DFS_CHANNEL_FOR_ADAPTER = 2,
478*5113495bSYour Name 	NET_DEV_HOLD_GET_SAP_OPERATING_BAND = 3,
479*5113495bSYour Name 	NET_DEV_HOLD_RECOVERY_NOTIFIER_CALL = 4,
480*5113495bSYour Name 	NET_DEV_HOLD_IS_ANY_STA_CONNECTING = 5,
481*5113495bSYour Name 	NET_DEV_HOLD_SAP_DESTROY_CTX_ALL = 6,
482*5113495bSYour Name 	NET_DEV_HOLD_DRV_CMD_MAX_TX_POWER = 7,
483*5113495bSYour Name 	NET_DEV_HOLD_IPA_SET_TX_FLOW_INFO = 8,
484*5113495bSYour Name 	NET_DEV_HOLD_SET_RPS_CPU_MASK = 9,
485*5113495bSYour Name 	NET_DEV_HOLD_DFS_INDICATE_RADAR = 10,
486*5113495bSYour Name 	NET_DEV_HOLD_MAX_STA_INTERFACE_UP_COUNT_REACHED = 11,
487*5113495bSYour Name 	NET_DEV_HOLD_IS_CHAN_SWITCH_IN_PROGRESS = 12,
488*5113495bSYour Name 	NET_DEV_HOLD_STA_DESTROY_CTX_ALL = 13,
489*5113495bSYour Name 	NET_DEV_HOLD_CHECK_FOR_EXISTING_MACADDR = 14,
490*5113495bSYour Name 	NET_DEV_HOLD_DEINIT_ALL_ADAPTERS = 15,
491*5113495bSYour Name 	NET_DEV_HOLD_STOP_ALL_ADAPTERS = 16,
492*5113495bSYour Name 	NET_DEV_HOLD_RESET_ALL_ADAPTERS = 17,
493*5113495bSYour Name 	NET_DEV_HOLD_IS_ANY_INTERFACE_OPEN = 18,
494*5113495bSYour Name 	NET_DEV_HOLD_START_ALL_ADAPTERS = 19,
495*5113495bSYour Name 	NET_DEV_HOLD_GET_ADAPTER_BY_RAND_MACADDR = 20,
496*5113495bSYour Name 	NET_DEV_HOLD_GET_ADAPTER_BY_MACADDR = 21,
497*5113495bSYour Name 	NET_DEV_HOLD_GET_ADAPTER_BY_VDEV = 22,
498*5113495bSYour Name 	NET_DEV_HOLD_ADAPTER_GET_BY_REFERENCE = 23,
499*5113495bSYour Name 	NET_DEV_HOLD_GET_ADAPTER_BY_IFACE_NAME = 24,
500*5113495bSYour Name 	NET_DEV_HOLD_GET_ADAPTER = 25,
501*5113495bSYour Name 	NET_DEV_HOLD_GET_OPERATING_CHAN_FREQ = 26,
502*5113495bSYour Name 	NET_DEV_HOLD_UNREGISTER_WEXT_ALL_ADAPTERS = 27,
503*5113495bSYour Name 	NET_DEV_HOLD_ABORT_MAC_SCAN_ALL_ADAPTERS = 28,
504*5113495bSYour Name 	NET_DEV_HOLD_ABORT_SCHED_SCAN_ALL_ADAPTERS = 29,
505*5113495bSYour Name 	NET_DEV_HOLD_GET_FIRST_VALID_ADAPTER = 30,
506*5113495bSYour Name 	NET_DEV_HOLD_CLEAR_RPS_CPU_MASK = 31,
507*5113495bSYour Name 	NET_DEV_HOLD_BUS_BW_WORK_HANDLER = 32,
508*5113495bSYour Name 	NET_DEV_HOLD_DISPLAY_NETIF_QUEUE_HISTORY_COMPACT = 33,
509*5113495bSYour Name 	NET_DEV_HOLD_DISPLAY_NETIF_QUEUE_HISTORY = 34,
510*5113495bSYour Name 	NET_DEV_HOLD_CLEAR_NETIF_QUEUE_HISTORY = 35,
511*5113495bSYour Name 	NET_DEV_HOLD_UNSAFE_CHANNEL_RESTART_SAP = 36,
512*5113495bSYour Name 	NET_DEV_HOLD_INDICATE_MGMT_FRAME = 37,
513*5113495bSYour Name 	NET_DEV_HOLD_STATE_INFO_DUMP = 38,
514*5113495bSYour Name 	NET_DEV_HOLD_DISABLE_ROAMING = 39,
515*5113495bSYour Name 	NET_DEV_HOLD_ENABLE_ROAMING = 40,
516*5113495bSYour Name 	NET_DEV_HOLD_AUTO_SHUTDOWN_ENABLE = 41,
517*5113495bSYour Name 	NET_DEV_HOLD_GET_CON_SAP_ADAPTER = 42,
518*5113495bSYour Name 	NET_DEV_HOLD_IS_ANY_ADAPTER_CONNECTED = 43,
519*5113495bSYour Name 	NET_DEV_HOLD_IS_ROAMING_IN_PROGRESS = 44,
520*5113495bSYour Name 	NET_DEV_HOLD_DEL_P2P_INTERFACE = 45,
521*5113495bSYour Name 	NET_DEV_HOLD_IS_NDP_ALLOWED = 46,
522*5113495bSYour Name 	NET_DEV_HOLD_NDI_OPEN = 47,
523*5113495bSYour Name 	NET_DEV_HOLD_SEND_OEM_REG_RSP_NLINK_MSG = 48,
524*5113495bSYour Name 	NET_DEV_HOLD_PERIODIC_STA_STATS_DISPLAY = 49,
525*5113495bSYour Name 	NET_DEV_HOLD_SUSPEND_WLAN = 50,
526*5113495bSYour Name 	NET_DEV_HOLD_RESUME_WLAN = 51,
527*5113495bSYour Name 	NET_DEV_HOLD_SSR_RESTART_SAP = 52,
528*5113495bSYour Name 	NET_DEV_HOLD_SEND_DEFAULT_SCAN_IES = 53,
529*5113495bSYour Name 	NET_DEV_HOLD_CFG80211_SUSPEND_WLAN = 54,
530*5113495bSYour Name 	NET_DEV_HOLD_COUNTRY_CHANGE_UPDATE_STA = 55,
531*5113495bSYour Name 	NET_DEV_HOLD_COUNTRY_CHANGE_UPDATE_SAP = 56,
532*5113495bSYour Name 	NET_DEV_HOLD_CACHE_STATION_STATS_CB = 57,
533*5113495bSYour Name 	NET_DEV_HOLD_DISPLAY_TXRX_STATS = 58,
534*5113495bSYour Name 	NET_DEV_HOLD_BUS_BW_MGR = 59,
535*5113495bSYour Name 	NET_DEV_HOLD_START_PRE_CAC_TRANS = 60,
536*5113495bSYour Name 	NET_DEV_HOLD_IS_ANY_STA_CONNECTED = 61,
537*5113495bSYour Name 	NET_DEV_HOLD_GET_ADAPTER_BY_BSSID = 62,
538*5113495bSYour Name 	NET_DEV_HOLD_ALLOW_NEW_INTF = 63,
539*5113495bSYour Name 
540*5113495bSYour Name 	/* Keep it at the end */
541*5113495bSYour Name 	NET_DEV_HOLD_ID_MAX
542*5113495bSYour Name } wlan_net_dev_ref_dbgid;
543*5113495bSYour Name 
544*5113495bSYour Name struct hdd_tx_rx_stats {
545*5113495bSYour Name 	struct {
546*5113495bSYour Name 		/* start_xmit stats */
547*5113495bSYour Name 		__u32    tx_classified_ac[WLAN_MAX_AC];
548*5113495bSYour Name 		__u32    tx_dropped_ac[WLAN_MAX_AC];
549*5113495bSYour Name #ifdef TX_MULTIQ_PER_AC
550*5113495bSYour Name 		/* Neither valid socket nor skb->hash */
551*5113495bSYour Name 		uint32_t inv_sk_and_skb_hash;
552*5113495bSYour Name 		/* skb->hash already calculated */
553*5113495bSYour Name 		uint32_t qselect_existing_skb_hash;
554*5113495bSYour Name 		/* valid tx queue id in socket */
555*5113495bSYour Name 		uint32_t qselect_sk_tx_map;
556*5113495bSYour Name 		/* skb->hash calculated in select queue */
557*5113495bSYour Name 		uint32_t qselect_skb_hash_calc;
558*5113495bSYour Name #endif
559*5113495bSYour Name 	} per_cpu[NUM_CPUS];
560*5113495bSYour Name 
561*5113495bSYour Name 	/* txflow stats */
562*5113495bSYour Name 	bool     is_txflow_paused;
563*5113495bSYour Name 	__u32    txflow_pause_cnt;
564*5113495bSYour Name 	__u32    txflow_unpause_cnt;
565*5113495bSYour Name 	__u32    txflow_timer_cnt;
566*5113495bSYour Name 
567*5113495bSYour Name };
568*5113495bSYour Name 
569*5113495bSYour Name /**
570*5113495bSYour Name  * struct hdd_pmf_stats - Protected Management Frame statistics
571*5113495bSYour Name  * @num_unprot_deauth_rx: Number of unprotected deauth frames received
572*5113495bSYour Name  * @num_unprot_disassoc_rx: Number of unprotected disassoc frames received
573*5113495bSYour Name  */
574*5113495bSYour Name struct hdd_pmf_stats {
575*5113495bSYour Name 	uint8_t num_unprot_deauth_rx;
576*5113495bSYour Name 	uint8_t num_unprot_disassoc_rx;
577*5113495bSYour Name };
578*5113495bSYour Name 
579*5113495bSYour Name /**
580*5113495bSYour Name  * struct hdd_peer_stats - Peer stats at HDD level
581*5113495bSYour Name  * @rx_count: RX count
582*5113495bSYour Name  * @rx_bytes: RX bytes
583*5113495bSYour Name  * @fcs_count: FCS err count
584*5113495bSYour Name  */
585*5113495bSYour Name struct hdd_peer_stats {
586*5113495bSYour Name 	uint32_t rx_count;
587*5113495bSYour Name 	uint64_t rx_bytes;
588*5113495bSYour Name 	uint32_t fcs_count;
589*5113495bSYour Name };
590*5113495bSYour Name 
591*5113495bSYour Name #define HDD_MAX_PER_PEER_RATES 16
592*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO)
593*5113495bSYour Name /**
594*5113495bSYour Name  * struct wlan_hdd_station_stats_info - Station stats info
595*5113495bSYour Name  * @signal: Signal strength of last received PPDU
596*5113495bSYour Name  * @signal_avg: Average signal strength
597*5113495bSYour Name  * @chain_signal_avg: Per-chain signal strength average
598*5113495bSYour Name  * @rxrate: Last unicast data frame rx rate
599*5113495bSYour Name  * @txrate: Current unicasr tx rate
600*5113495bSYour Name  * @rx_bytes: Total received bytes (MPDU length)
601*5113495bSYour Name  * @tx_bytes: Total transmitted bytes (MPDU length)
602*5113495bSYour Name  * @rx_packets: Total received packets (MSDUs and MMPDUs)
603*5113495bSYour Name  * @tx_packets: Total transmitted packets (MSDUs and MMPDUs)
604*5113495bSYour Name  * @tx_retries: Cumulative retry count (MPDU)
605*5113495bSYour Name  * @tx_failed: Number of failed transmissions (MPDUs)
606*5113495bSYour Name  * @rx_mpdu_count: Number of MPDUs received from this station
607*5113495bSYour Name  * @fcs_err_count: Number of MPDUs received from this station with an FCS error
608*5113495bSYour Name  */
609*5113495bSYour Name struct wlan_hdd_station_stats_info {
610*5113495bSYour Name 	int8_t signal;
611*5113495bSYour Name 	int8_t signal_avg;
612*5113495bSYour Name 	int8_t chain_signal_avg[IEEE80211_MAX_CHAINS];
613*5113495bSYour Name 	struct rate_info txrate;
614*5113495bSYour Name 	struct rate_info rxrate;
615*5113495bSYour Name 	uint64_t rx_bytes;
616*5113495bSYour Name 	uint64_t tx_bytes;
617*5113495bSYour Name 	uint32_t rx_packets;
618*5113495bSYour Name 	uint32_t tx_packets;
619*5113495bSYour Name 	uint32_t tx_retries;
620*5113495bSYour Name 	uint32_t tx_failed;
621*5113495bSYour Name 	uint32_t rx_mpdu_count;
622*5113495bSYour Name 	uint32_t fcs_err_count;
623*5113495bSYour Name };
624*5113495bSYour Name 
625*5113495bSYour Name /**
626*5113495bSYour Name  * struct wlan_hdd_mlo_iface_stats_info - mlo iface stats info
627*5113495bSYour Name  * @link_id: mlo link_id
628*5113495bSYour Name  * @freq: frequency of the mlo link
629*5113495bSYour Name  * @radio_id: radio id of the mlo link
630*5113495bSYour Name  */
631*5113495bSYour Name struct wlan_hdd_mlo_iface_stats_info {
632*5113495bSYour Name 	uint8_t link_id;
633*5113495bSYour Name 	uint32_t freq;
634*5113495bSYour Name 	uint32_t radio_id;
635*5113495bSYour Name };
636*5113495bSYour Name 
637*5113495bSYour Name /**
638*5113495bSYour Name  * struct wlan_hdd_peer_info - hdd per peer info
639*5113495bSYour Name  * @type: peer type (AP, TDLS, GO etc.)
640*5113495bSYour Name  * @peer_mac: peer mac address
641*5113495bSYour Name  * @capabilities: peer WIFI_CAPABILITY_XXX
642*5113495bSYour Name  * @power_saving: peer power saving mode
643*5113495bSYour Name  * @num_rate: number of rates
644*5113495bSYour Name  * @rate_stats: per rate statistics, num entries = HDD_MAX_PER_PEER_RATES
645*5113495bSYour Name  * @stats_cached: whether peer stats cached into link_info struct
646*5113495bSYour Name  * @link_id: IEEE link id for the link
647*5113495bSYour Name  */
648*5113495bSYour Name struct wlan_hdd_peer_info {
649*5113495bSYour Name 	enum wmi_peer_type type;
650*5113495bSYour Name 	struct qdf_mac_addr peer_mac;
651*5113495bSYour Name 	uint32_t capabilities;
652*5113495bSYour Name 	union {
653*5113495bSYour Name 		uint32_t power_saving;
654*5113495bSYour Name 		uint32_t num_rate;
655*5113495bSYour Name 	};
656*5113495bSYour Name 	struct wifi_rate_stat rate_stats[HDD_MAX_PER_PEER_RATES];
657*5113495bSYour Name 	bool stats_cached;
658*5113495bSYour Name 	uint32_t link_id;
659*5113495bSYour Name };
660*5113495bSYour Name #endif
661*5113495bSYour Name 
662*5113495bSYour Name #define MAX_SUBTYPES_TRACKED	4
663*5113495bSYour Name 
664*5113495bSYour Name struct hdd_stats {
665*5113495bSYour Name 	tCsrSummaryStatsInfo summary_stat;
666*5113495bSYour Name 	tCsrGlobalClassAStatsInfo class_a_stat;
667*5113495bSYour Name 	tCsrGlobalClassDStatsInfo class_d_stat;
668*5113495bSYour Name 	struct csr_per_chain_rssi_stats_info  per_chain_rssi_stats;
669*5113495bSYour Name 	struct hdd_tx_rx_stats tx_rx_stats;
670*5113495bSYour Name 	struct hdd_peer_stats peer_stats;
671*5113495bSYour Name 	struct hdd_pmf_stats hdd_pmf_stats;
672*5113495bSYour Name 	struct pmf_bcn_protect_stats bcn_protect_stats;
673*5113495bSYour Name };
674*5113495bSYour Name 
675*5113495bSYour Name /**
676*5113495bSYour Name  * struct hdd_roaming_info - HDD Internal Roaming Information
677*5113495bSYour Name  * @bssid: BSSID to which we are connected
678*5113495bSYour Name  * @peer_mac: Peer MAC address for IBSS connection
679*5113495bSYour Name  * @roam_id: Unique identifier for a roaming instance
680*5113495bSYour Name  * @roam_status: Current roam command status
681*5113495bSYour Name  */
682*5113495bSYour Name struct hdd_roaming_info {
683*5113495bSYour Name 	tSirMacAddr bssid;
684*5113495bSYour Name 	tSirMacAddr peer_mac;
685*5113495bSYour Name 	uint32_t roam_id;
686*5113495bSYour Name 	eRoamCmdStatus roam_status;
687*5113495bSYour Name };
688*5113495bSYour Name 
689*5113495bSYour Name #ifdef FEATURE_WLAN_WAPI
690*5113495bSYour Name /* Define WAPI macros for Length, BKID count etc*/
691*5113495bSYour Name #define MAX_NUM_AKM_SUITES    16
692*5113495bSYour Name 
693*5113495bSYour Name /** WAPI AUTH mode definition */
694*5113495bSYour Name enum wapi_auth_mode {
695*5113495bSYour Name 	WAPI_AUTH_MODE_OPEN = 0,
696*5113495bSYour Name 	WAPI_AUTH_MODE_PSK = 1,
697*5113495bSYour Name 	WAPI_AUTH_MODE_CERT
698*5113495bSYour Name } __packed;
699*5113495bSYour Name 
700*5113495bSYour Name #define WPA_GET_LE16(a) ((u16) (((a)[1] << 8) | (a)[0]))
701*5113495bSYour Name #define WPA_GET_BE24(a) ((u32) ((a[0] << 16) | (a[1] << 8) | a[2]))
702*5113495bSYour Name #define WAPI_PSK_AKM_SUITE  0x02721400
703*5113495bSYour Name #define WAPI_CERT_AKM_SUITE 0x01721400
704*5113495bSYour Name 
705*5113495bSYour Name /**
706*5113495bSYour Name  * struct hdd_wapi_info - WAPI Information structure definition
707*5113495bSYour Name  * @wapi_mode: Is WAPI enabled on this adapter?
708*5113495bSYour Name  * @is_wapi_sta: Is the STA associated with WAPI?
709*5113495bSYour Name  * @wapi_auth_mode: WAPI authentication mode used by this adapter
710*5113495bSYour Name  */
711*5113495bSYour Name struct hdd_wapi_info {
712*5113495bSYour Name 	bool wapi_mode;
713*5113495bSYour Name 	bool is_wapi_sta;
714*5113495bSYour Name 	enum wapi_auth_mode wapi_auth_mode;
715*5113495bSYour Name };
716*5113495bSYour Name #endif /* FEATURE_WLAN_WAPI */
717*5113495bSYour Name 
718*5113495bSYour Name struct hdd_beacon_data {
719*5113495bSYour Name 	u8 *head;
720*5113495bSYour Name 	u8 *tail;
721*5113495bSYour Name 	u8 *proberesp_ies;
722*5113495bSYour Name 	u8 *assocresp_ies;
723*5113495bSYour Name 	int head_len;
724*5113495bSYour Name 	int tail_len;
725*5113495bSYour Name 	int proberesp_ies_len;
726*5113495bSYour Name 	int assocresp_ies_len;
727*5113495bSYour Name 	int dtim_period;
728*5113495bSYour Name };
729*5113495bSYour Name 
730*5113495bSYour Name /**
731*5113495bSYour Name  * struct hdd_mon_set_ch_info - Holds monitor mode channel switch params
732*5113495bSYour Name  * @freq: Channel frequency.
733*5113495bSYour Name  * @cb_mode: Channel bonding
734*5113495bSYour Name  * @channel_width: Channel width 0/1/2 for 20/40/80MHz respectively.
735*5113495bSYour Name  * @phy_mode: PHY mode
736*5113495bSYour Name  */
737*5113495bSYour Name struct hdd_mon_set_ch_info {
738*5113495bSYour Name 	uint32_t freq;
739*5113495bSYour Name 	uint8_t cb_mode;
740*5113495bSYour Name 	uint32_t channel_width;
741*5113495bSYour Name 	eCsrPhyMode phy_mode;
742*5113495bSYour Name };
743*5113495bSYour Name 
744*5113495bSYour Name /**
745*5113495bSYour Name  * struct hdd_station_ctx -- STA-specific information
746*5113495bSYour Name  * @roam_profile: current roaming profile
747*5113495bSYour Name  * @conn_info: current connection information
748*5113495bSYour Name  * @cache_conn_info: prev connection info
749*5113495bSYour Name  * @reg_phymode: reg phymode
750*5113495bSYour Name  * @ch_info: monitor mode channel information
751*5113495bSYour Name  * @ap_supports_immediate_power_save: Does the current AP allow our STA
752*5113495bSYour Name  *    to immediately go into power save?
753*5113495bSYour Name  * @user_cfg_chn_width: max channel bandwidth set by user space
754*5113495bSYour Name  */
755*5113495bSYour Name struct hdd_station_ctx {
756*5113495bSYour Name 	uint32_t reg_phymode;
757*5113495bSYour Name 	struct csr_roam_profile roam_profile;
758*5113495bSYour Name 	struct hdd_connection_info conn_info;
759*5113495bSYour Name 	struct hdd_connection_info cache_conn_info;
760*5113495bSYour Name 	struct hdd_mon_set_ch_info ch_info;
761*5113495bSYour Name 	bool ap_supports_immediate_power_save;
762*5113495bSYour Name 	uint8_t user_cfg_chn_width;
763*5113495bSYour Name };
764*5113495bSYour Name 
765*5113495bSYour Name /**
766*5113495bSYour Name  * enum bss_state - current state of the BSS
767*5113495bSYour Name  * @BSS_STOP: BSS is stopped
768*5113495bSYour Name  * @BSS_START: BSS is started
769*5113495bSYour Name  */
770*5113495bSYour Name enum bss_state {
771*5113495bSYour Name 	BSS_STOP,
772*5113495bSYour Name 	BSS_START,
773*5113495bSYour Name };
774*5113495bSYour Name 
775*5113495bSYour Name /**
776*5113495bSYour Name  * struct hdd_hostapd_state - hostapd-related state information
777*5113495bSYour Name  * @bss_state: Current state of the BSS
778*5113495bSYour Name  * @qdf_event: Event to synchronize actions between hostapd thread and
779*5113495bSYour Name  *    internal callback threads
780*5113495bSYour Name  * @qdf_stop_bss_event: Event to synchronize Stop BSS. When Stop BSS
781*5113495bSYour Name  *    is issued userspace thread can wait on this event. The event will
782*5113495bSYour Name  *    be set when the Stop BSS processing in UMAC has completed.
783*5113495bSYour Name  * @qdf_sta_disassoc_event: Event to synchronize STA Disassociation.
784*5113495bSYour Name  *    When a STA is disassociated userspace thread can wait on this
785*5113495bSYour Name  *    event. The event will be set when the STA Disassociation
786*5113495bSYour Name  *    processing in UMAC has completed.
787*5113495bSYour Name  * @qdf_sta_eap_frm_done_event: Event to synchronize P2P GO disassoc
788*5113495bSYour Name  *    frame and EAP frame.
789*5113495bSYour Name  * @qdf_status: Used to communicate state from other threads to the
790*5113495bSYour Name  *    userspace thread.
791*5113495bSYour Name  */
792*5113495bSYour Name struct hdd_hostapd_state {
793*5113495bSYour Name 	enum bss_state bss_state;
794*5113495bSYour Name 	qdf_event_t qdf_event;
795*5113495bSYour Name 	qdf_event_t qdf_stop_bss_event;
796*5113495bSYour Name 	qdf_event_t qdf_sta_disassoc_event;
797*5113495bSYour Name 	qdf_event_t qdf_sta_eap_frm_done_event;
798*5113495bSYour Name 	QDF_STATUS qdf_status;
799*5113495bSYour Name };
800*5113495bSYour Name 
801*5113495bSYour Name /**
802*5113495bSYour Name  * enum bss_stop_reason - reasons why a BSS is stopped.
803*5113495bSYour Name  * @BSS_STOP_REASON_INVALID: no reason specified explicitly.
804*5113495bSYour Name  * @BSS_STOP_DUE_TO_MCC_SCC_SWITCH: BSS stopped due to host
805*5113495bSYour Name  *  driver is trying to switch AP role to a different channel
806*5113495bSYour Name  *  to maintain SCC mode with the STA role on the same card.
807*5113495bSYour Name  *  this usually happens when STA is connected to an external
808*5113495bSYour Name  *  AP that runs on a different channel
809*5113495bSYour Name  * @BSS_STOP_DUE_TO_VENDOR_CONFIG_CHAN: BSS stopped due to
810*5113495bSYour Name  *  vendor subcmd set sap config channel
811*5113495bSYour Name  */
812*5113495bSYour Name enum bss_stop_reason {
813*5113495bSYour Name 	BSS_STOP_REASON_INVALID = 0,
814*5113495bSYour Name 	BSS_STOP_DUE_TO_MCC_SCC_SWITCH = 1,
815*5113495bSYour Name 	BSS_STOP_DUE_TO_VENDOR_CONFIG_CHAN = 2,
816*5113495bSYour Name };
817*5113495bSYour Name 
818*5113495bSYour Name /**
819*5113495bSYour Name  * struct hdd_rate_info - rate_info in HDD
820*5113495bSYour Name  * @rate: tx/rx rate (kbps)
821*5113495bSYour Name  * @mode: 0->11abg legacy, 1->HT, 2->VHT (refer to sir_sme_phy_mode)
822*5113495bSYour Name  * @nss: number of streams
823*5113495bSYour Name  * @mcs: mcs index for HT/VHT mode
824*5113495bSYour Name  * @rate_flags: rate flags for last tx/rx
825*5113495bSYour Name  *
826*5113495bSYour Name  * rate info in HDD
827*5113495bSYour Name  */
828*5113495bSYour Name struct hdd_rate_info {
829*5113495bSYour Name 	uint32_t rate;
830*5113495bSYour Name 	uint8_t mode;
831*5113495bSYour Name 	uint8_t nss;
832*5113495bSYour Name 	uint8_t mcs;
833*5113495bSYour Name 	enum tx_rate_info rate_flags;
834*5113495bSYour Name };
835*5113495bSYour Name 
836*5113495bSYour Name enum hdd_work_status {
837*5113495bSYour Name 	HDD_WORK_UNINITIALIZED,
838*5113495bSYour Name 	HDD_WORK_INITIALIZED,
839*5113495bSYour Name };
840*5113495bSYour Name 
841*5113495bSYour Name /**
842*5113495bSYour Name  * struct hdd_fw_txrx_stats - fw txrx status in HDD
843*5113495bSYour Name  *                            (refer to station_info struct in Kernel)
844*5113495bSYour Name  * @tx_packets: packets transmitted to this station
845*5113495bSYour Name  * @tx_bytes: bytes transmitted to this station
846*5113495bSYour Name  * @rx_packets: packets received from this station
847*5113495bSYour Name  * @rx_bytes: bytes received from this station
848*5113495bSYour Name  * @tx_retries: cumulative retry counts
849*5113495bSYour Name  * @tx_failed: the number of failed frames
850*5113495bSYour Name  * @tx_succeed: the number of succeed frames
851*5113495bSYour Name  * @rssi: The signal strength (dbm)
852*5113495bSYour Name  * @tx_rate: last used tx rate info
853*5113495bSYour Name  * @rx_rate: last used rx rate info
854*5113495bSYour Name  *
855*5113495bSYour Name  * fw txrx status in HDD
856*5113495bSYour Name  */
857*5113495bSYour Name struct hdd_fw_txrx_stats {
858*5113495bSYour Name 	uint32_t tx_packets;
859*5113495bSYour Name 	uint64_t tx_bytes;
860*5113495bSYour Name 	uint32_t rx_packets;
861*5113495bSYour Name 	uint64_t rx_bytes;
862*5113495bSYour Name 	uint32_t tx_retries;
863*5113495bSYour Name 	uint32_t tx_failed;
864*5113495bSYour Name 	uint32_t tx_succeed;
865*5113495bSYour Name 	int8_t rssi;
866*5113495bSYour Name 	struct hdd_rate_info tx_rate;
867*5113495bSYour Name 	struct hdd_rate_info rx_rate;
868*5113495bSYour Name };
869*5113495bSYour Name 
870*5113495bSYour Name /**
871*5113495bSYour Name  * struct hdd_ap_ctx - SAP/P2PGO specific information
872*5113495bSYour Name  * @hostapd_state: state control information
873*5113495bSYour Name  * @dfs_cac_block_tx: Is data tramsmission blocked due to DFS CAC?
874*5113495bSYour Name  * @ap_active: Are any stations active?
875*5113495bSYour Name  * @disable_intrabss_fwd: Prevent forwarding between stations
876*5113495bSYour Name  * @broadcast_sta_id: Station ID assigned after BSS starts
877*5113495bSYour Name  * @privacy: The privacy bits of configuration
878*5113495bSYour Name  * @encryption_type: The encryption being used
879*5113495bSYour Name  * @group_key: Group Encryption Key
880*5113495bSYour Name  * @wep_key: WEP key array
881*5113495bSYour Name  * @wep_def_key_idx: WEP default key index
882*5113495bSYour Name  * @sap_context: Pointer to context maintained by SAP (opaque to HDD)
883*5113495bSYour Name  * @sap_config: SAP configuration
884*5113495bSYour Name  * @operating_chan_freq: channel upon which the SAP is operating
885*5113495bSYour Name  * @beacon: Beacon information
886*5113495bSYour Name  * @vendor_acs_timer: Timer for ACS
887*5113495bSYour Name  * @vendor_acs_timer_initialized: Is @vendor_acs_timer initialized?
888*5113495bSYour Name  * @bss_stop_reason: Reason why the BSS was stopped
889*5113495bSYour Name  * @acs_in_progress: In progress acs flag for an adapter
890*5113495bSYour Name  * @ch_switch_in_progress: channel change in progress or not
891*5113495bSYour Name  * @client_count: client count per dot11_mode
892*5113495bSYour Name  * @country_ie_updated: country ie is updated or not by hdd hostapd
893*5113495bSYour Name  * @during_auth_offload: auth mgmt frame is offloading to hostapd
894*5113495bSYour Name  * @reg_punc_bitmap: puncturing bitmap
895*5113495bSYour Name  */
896*5113495bSYour Name struct hdd_ap_ctx {
897*5113495bSYour Name 	struct hdd_hostapd_state hostapd_state;
898*5113495bSYour Name 	bool dfs_cac_block_tx;
899*5113495bSYour Name 	bool ap_active;
900*5113495bSYour Name 	bool disable_intrabss_fwd;
901*5113495bSYour Name 	uint8_t broadcast_sta_id;
902*5113495bSYour Name 	uint8_t privacy;
903*5113495bSYour Name 	eCsrEncryptionType encryption_type;
904*5113495bSYour Name 	uint8_t wep_def_key_idx;
905*5113495bSYour Name 	struct sap_context *sap_context;
906*5113495bSYour Name 	struct sap_config sap_config;
907*5113495bSYour Name 	uint32_t operating_chan_freq;
908*5113495bSYour Name 	struct hdd_beacon_data *beacon;
909*5113495bSYour Name 	qdf_mc_timer_t vendor_acs_timer;
910*5113495bSYour Name 	bool vendor_acs_timer_initialized;
911*5113495bSYour Name 	enum bss_stop_reason bss_stop_reason;
912*5113495bSYour Name 	qdf_atomic_t acs_in_progress;
913*5113495bSYour Name 	qdf_atomic_t ch_switch_in_progress;
914*5113495bSYour Name 	uint16_t client_count[QCA_WLAN_802_11_MODE_INVALID];
915*5113495bSYour Name 	bool country_ie_updated;
916*5113495bSYour Name 	bool during_auth_offload;
917*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
918*5113495bSYour Name 	uint16_t reg_punc_bitmap;
919*5113495bSYour Name #endif
920*5113495bSYour Name };
921*5113495bSYour Name 
922*5113495bSYour Name /**
923*5113495bSYour Name  * struct hdd_scan_info - Per-adapter scan information
924*5113495bSYour Name  * @scan_add_ie: Additional IE for scan
925*5113495bSYour Name  * @default_scan_ies: Default scan IEs
926*5113495bSYour Name  * @default_scan_ies_len: Length of @default_scan_ies
927*5113495bSYour Name  * @scan_mode: Scan mode
928*5113495bSYour Name  */
929*5113495bSYour Name struct hdd_scan_info {
930*5113495bSYour Name 	tSirAddie scan_add_ie;
931*5113495bSYour Name 	uint8_t *default_scan_ies;
932*5113495bSYour Name 	uint16_t default_scan_ies_len;
933*5113495bSYour Name 	tSirScanType scan_mode;
934*5113495bSYour Name };
935*5113495bSYour Name 
936*5113495bSYour Name #define WLAN_HDD_MAX_MC_ADDR_LIST CFG_TGT_MAX_MULTICAST_FILTER_ENTRIES
937*5113495bSYour Name 
938*5113495bSYour Name struct hdd_multicast_addr_list {
939*5113495bSYour Name 	uint8_t mc_cnt;
940*5113495bSYour Name 	uint8_t addr[WLAN_HDD_MAX_MC_ADDR_LIST][ETH_ALEN];
941*5113495bSYour Name };
942*5113495bSYour Name 
943*5113495bSYour Name #define WLAN_HDD_MAX_HISTORY_ENTRY 25
944*5113495bSYour Name 
945*5113495bSYour Name /**
946*5113495bSYour Name  * struct hdd_netif_queue_stats - netif queue operation statistics
947*5113495bSYour Name  * @pause_count: pause counter
948*5113495bSYour Name  * @unpause_count: unpause counter
949*5113495bSYour Name  * @total_pause_time: amount of time in paused state
950*5113495bSYour Name  */
951*5113495bSYour Name struct hdd_netif_queue_stats {
952*5113495bSYour Name 	u32 pause_count;
953*5113495bSYour Name 	u32 unpause_count;
954*5113495bSYour Name 	qdf_time_t total_pause_time;
955*5113495bSYour Name };
956*5113495bSYour Name 
957*5113495bSYour Name /**
958*5113495bSYour Name  * struct hdd_netif_queue_history - netif queue operation history
959*5113495bSYour Name  * @time: timestamp
960*5113495bSYour Name  * @netif_action: action type
961*5113495bSYour Name  * @netif_reason: reason type
962*5113495bSYour Name  * @pause_map: pause map
963*5113495bSYour Name  * @tx_q_state: state of the netdev TX queues
964*5113495bSYour Name  */
965*5113495bSYour Name struct hdd_netif_queue_history {
966*5113495bSYour Name 	qdf_time_t time;
967*5113495bSYour Name 	uint16_t netif_action;
968*5113495bSYour Name 	uint16_t netif_reason;
969*5113495bSYour Name 	uint32_t pause_map;
970*5113495bSYour Name 	unsigned long tx_q_state[NUM_TX_QUEUES];
971*5113495bSYour Name };
972*5113495bSYour Name 
973*5113495bSYour Name /**
974*5113495bSYour Name  * struct hdd_chan_change_params - channel related information
975*5113495bSYour Name  * @chan_freq: operating channel frequency
976*5113495bSYour Name  * @chan_params: channel parameters
977*5113495bSYour Name  */
978*5113495bSYour Name struct hdd_chan_change_params {
979*5113495bSYour Name 	uint32_t chan_freq;
980*5113495bSYour Name 	struct ch_params chan_params;
981*5113495bSYour Name };
982*5113495bSYour Name 
983*5113495bSYour Name /**
984*5113495bSYour Name  * struct hdd_runtime_pm_context - context to prevent/allow runtime pm
985*5113495bSYour Name  * @dfs: dfs context to prevent/allow runtime pm
986*5113495bSYour Name  * @connect: connect context to prevent/allow runtime pm
987*5113495bSYour Name  * @user: user context to prevent/allow runtime pm
988*5113495bSYour Name  * @is_user_wakelock_acquired: boolean to check if user wakelock status
989*5113495bSYour Name  * @monitor_mode: monitor mode context to prevent/allow runtime pm
990*5113495bSYour Name  * @wow_unit_test: wow unit test mode context to prevent/allow runtime pm
991*5113495bSYour Name  * @system_suspend: system suspend context to prevent/allow runtime pm
992*5113495bSYour Name  * @dyn_mac_addr_update: update mac addr context to prevent/allow runtime pm
993*5113495bSYour Name  * @vdev_destroy: vdev destroy context to prevent/allow runtime pm
994*5113495bSYour Name  * @oem_data_cmd: OEM data context to prevent/allow runtime pm
995*5113495bSYour Name  *
996*5113495bSYour Name  * Runtime PM control for underlying activities
997*5113495bSYour Name  */
998*5113495bSYour Name struct hdd_runtime_pm_context {
999*5113495bSYour Name 	qdf_runtime_lock_t dfs;
1000*5113495bSYour Name 	qdf_runtime_lock_t connect;
1001*5113495bSYour Name 	qdf_runtime_lock_t user;
1002*5113495bSYour Name 	bool is_user_wakelock_acquired;
1003*5113495bSYour Name 	qdf_runtime_lock_t monitor_mode;
1004*5113495bSYour Name 	qdf_runtime_lock_t wow_unit_test;
1005*5113495bSYour Name 	qdf_runtime_lock_t system_suspend;
1006*5113495bSYour Name 	qdf_runtime_lock_t dyn_mac_addr_update;
1007*5113495bSYour Name 	qdf_runtime_lock_t vdev_destroy;
1008*5113495bSYour Name 	qdf_runtime_lock_t oem_data_cmd;
1009*5113495bSYour Name };
1010*5113495bSYour Name 
1011*5113495bSYour Name /*
1012*5113495bSYour Name  * WLAN_HDD_ADAPTER_MAGIC is a magic number used to identify net devices
1013*5113495bSYour Name  * belonging to this driver from net devices belonging to other devices.
1014*5113495bSYour Name  * Therefore, the magic number must be unique relative to the numbers for
1015*5113495bSYour Name  * other drivers in the system. If WLAN_HDD_ADAPTER_MAGIC is already defined
1016*5113495bSYour Name  * (e.g. by compiler argument), then use that. If it's not already defined,
1017*5113495bSYour Name  * then use the first 4 characters of MULTI_IF_NAME to construct the magic
1018*5113495bSYour Name  * number. If MULTI_IF_NAME is not defined, then use a default magic number.
1019*5113495bSYour Name  */
1020*5113495bSYour Name #ifndef WLAN_HDD_ADAPTER_MAGIC
1021*5113495bSYour Name #ifdef MULTI_IF_NAME
1022*5113495bSYour Name #define WLAN_HDD_ADAPTER_MAGIC                                          \
1023*5113495bSYour Name 	(MULTI_IF_NAME[0] == 0 ? 0x574c414e :                           \
1024*5113495bSYour Name 	(MULTI_IF_NAME[1] == 0 ? (MULTI_IF_NAME[0] << 24) :             \
1025*5113495bSYour Name 	(MULTI_IF_NAME[2] == 0 ? (MULTI_IF_NAME[0] << 24) |             \
1026*5113495bSYour Name 		(MULTI_IF_NAME[1] << 16) :                              \
1027*5113495bSYour Name 	(MULTI_IF_NAME[0] << 24) | (MULTI_IF_NAME[1] << 16) |           \
1028*5113495bSYour Name 	(MULTI_IF_NAME[2] << 8) | MULTI_IF_NAME[3])))
1029*5113495bSYour Name #else
1030*5113495bSYour Name #define WLAN_HDD_ADAPTER_MAGIC 0x574c414e       /* ASCII "WLAN" */
1031*5113495bSYour Name #endif
1032*5113495bSYour Name #endif
1033*5113495bSYour Name 
1034*5113495bSYour Name /**
1035*5113495bSYour Name  * struct rcpi_info - rcpi info
1036*5113495bSYour Name  * @rcpi: computed value in dB
1037*5113495bSYour Name  * @mac_addr: peer mac addr for which rcpi is computed
1038*5113495bSYour Name  */
1039*5113495bSYour Name struct rcpi_info {
1040*5113495bSYour Name 	int32_t rcpi;
1041*5113495bSYour Name 	struct qdf_mac_addr mac_addr;
1042*5113495bSYour Name };
1043*5113495bSYour Name 
1044*5113495bSYour Name struct hdd_context;
1045*5113495bSYour Name 
1046*5113495bSYour Name #ifdef MULTI_CLIENT_LL_SUPPORT
1047*5113495bSYour Name /* Max host clients which can request the FW arbiter with the latency level */
1048*5113495bSYour Name #define WLM_MAX_HOST_CLIENT 5
1049*5113495bSYour Name 
1050*5113495bSYour Name /**
1051*5113495bSYour Name  * struct wlm_multi_client_info_table - To store multi client id information
1052*5113495bSYour Name  * @client_id: host id for a client
1053*5113495bSYour Name  * @port_id: client id coming from upper layer
1054*5113495bSYour Name  * @in_use: set true for a client when host receives vendor cmd for that client
1055*5113495bSYour Name  */
1056*5113495bSYour Name struct wlm_multi_client_info_table {
1057*5113495bSYour Name 	uint32_t client_id;
1058*5113495bSYour Name 	uint32_t port_id;
1059*5113495bSYour Name 	bool in_use;
1060*5113495bSYour Name };
1061*5113495bSYour Name #endif
1062*5113495bSYour Name 
1063*5113495bSYour Name /**
1064*5113495bSYour Name  * enum udp_qos_upgrade - Enumeration of the various User priority (UP) types
1065*5113495bSYour Name  *			  UDP QoS upgrade request
1066*5113495bSYour Name  * @UDP_QOS_UPGRADE_NONE: Do not upgrade UDP QoS AC
1067*5113495bSYour Name  * @UDP_QOS_UPGRADE_BK_BE: Upgrade UDP QoS for BK/BE only
1068*5113495bSYour Name  * @UDP_QOS_UPGRADE_ALL: Upgrade UDP QoS for all packets
1069*5113495bSYour Name  * @UDP_QOS_UPGRADE_MAX: Max enum limit, not to add new beyond this
1070*5113495bSYour Name  */
1071*5113495bSYour Name enum udp_qos_upgrade {
1072*5113495bSYour Name 	UDP_QOS_UPGRADE_NONE,
1073*5113495bSYour Name 	UDP_QOS_UPGRADE_BK_BE,
1074*5113495bSYour Name 	UDP_QOS_UPGRADE_ALL,
1075*5113495bSYour Name 	UDP_QOS_UPGRADE_MAX
1076*5113495bSYour Name };
1077*5113495bSYour Name 
1078*5113495bSYour Name #define WLAN_HDD_DEFLINK_IDX	0
1079*5113495bSYour Name 
1080*5113495bSYour Name /**
1081*5113495bSYour Name  * struct wlan_hdd_link_info - Data structure to store the link specific info
1082*5113495bSYour Name  * @adapter: Reverse pointer to HDD adapter
1083*5113495bSYour Name  * @vdev_id: Unique value to identify VDEV. Equal to WLAN_UMAC_VDEV_ID_MAX
1084*5113495bSYour Name  *           for invalid VDEVs.
1085*5113495bSYour Name  * @vdev_lock: Lock to protect VDEV pointer access.
1086*5113495bSYour Name  * @vdev: Pointer to VDEV objmgr.
1087*5113495bSYour Name  * @vdev_destroy_event: vdev_destroy_event is moved from the qdf_event
1088*5113495bSYour Name  *                      to linux event consciously, Lets take example
1089*5113495bSYour Name  *                      when sap interface is waiting on the
1090*5113495bSYour Name  *                      session_close event and then there is a SSR
1091*5113495bSYour Name  *                      the wait event is completed the interface down
1092*5113495bSYour Name  *                      is returned and the next command to the driver
1093*5113495bSYour Name  *                      will be hdd_hostapd_uinit-->
1094*5113495bSYour Name  *                      hdd_deinit_ap_mode-->
1095*5113495bSYour Name  *                      hdd_hostapd_deinit_sap_session where in the
1096*5113495bSYour Name  *                      sap_ctx would be freed.  During the SSR if the
1097*5113495bSYour Name  *                      same sap context is used it would result in
1098*5113495bSYour Name  *                      null pointer de-reference.
1099*5113495bSYour Name  * @link_addr: Link MAC address
1100*5113495bSYour Name  * @session: union of @ap and @station specific structs
1101*5113495bSYour Name  * @session.station: station mode information
1102*5113495bSYour Name  * @session.ap: ap mode specific information
1103*5113495bSYour Name  * @acs_complete_event: acs complete event
1104*5113495bSYour Name  * @rssi: The signal strength (dBm)
1105*5113495bSYour Name  * @snr: SNR measured from @rssi
1106*5113495bSYour Name  * @rssi_on_disconnect: Rssi at disconnection time in STA mode
1107*5113495bSYour Name  * @rssi_send: Notify RSSI over lpass
1108*5113495bSYour Name  * @is_mlo_vdev_active: is the mlo vdev currently active
1109*5113495bSYour Name  * @estimated_linkspeed: estimated link speed
1110*5113495bSYour Name  * @hdd_stats: HDD statistics
1111*5113495bSYour Name  * @big_data_stats: Big data stats
1112*5113495bSYour Name  * @ll_iface_stats: Link Layer interface stats
1113*5113495bSYour Name  * @hdd_sinfo: hdd vdev station stats that will be sent to userspace
1114*5113495bSYour Name  * @mlo_peer_info: mlo peer stats info
1115*5113495bSYour Name  * @mscs_prev_tx_vo_pkts: count of prev VO AC packets transmitted
1116*5113495bSYour Name  * @mscs_counter: Counter on MSCS action frames sent
1117*5113495bSYour Name  * @link_flags: a bitmap of hdd_link_flags
1118*5113495bSYour Name  * @chan_change_notify_work: Channel change notify work
1119*5113495bSYour Name  */
1120*5113495bSYour Name struct wlan_hdd_link_info {
1121*5113495bSYour Name 	struct hdd_adapter *adapter;
1122*5113495bSYour Name 	uint8_t vdev_id;
1123*5113495bSYour Name 	qdf_spinlock_t vdev_lock;
1124*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev;
1125*5113495bSYour Name 	struct completion vdev_destroy_event;
1126*5113495bSYour Name 	struct qdf_mac_addr link_addr;
1127*5113495bSYour Name 
1128*5113495bSYour Name 	union {
1129*5113495bSYour Name 		struct hdd_station_ctx station;
1130*5113495bSYour Name 		struct hdd_ap_ctx ap;
1131*5113495bSYour Name 	} session;
1132*5113495bSYour Name 
1133*5113495bSYour Name 	qdf_event_t acs_complete_event;
1134*5113495bSYour Name 
1135*5113495bSYour Name 	int8_t rssi;
1136*5113495bSYour Name 	uint8_t snr;
1137*5113495bSYour Name 	int32_t rssi_on_disconnect;
1138*5113495bSYour Name #ifdef WLAN_FEATURE_LPSS
1139*5113495bSYour Name 	bool rssi_send;
1140*5113495bSYour Name #endif
1141*5113495bSYour Name 	bool is_mlo_vdev_active;
1142*5113495bSYour Name 	uint32_t estimated_linkspeed;
1143*5113495bSYour Name 	struct hdd_stats hdd_stats;
1144*5113495bSYour Name #ifdef WLAN_FEATURE_BIG_DATA_STATS
1145*5113495bSYour Name 	struct big_data_stats_event big_data_stats;
1146*5113495bSYour Name #endif
1147*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC)
1148*5113495bSYour Name 	struct wifi_interface_stats ll_iface_stats;
1149*5113495bSYour Name 	struct wlan_hdd_station_stats_info hdd_sinfo;
1150*5113495bSYour Name 	struct wlan_hdd_peer_info mlo_peer_info;
1151*5113495bSYour Name #endif
1152*5113495bSYour Name 
1153*5113495bSYour Name #ifdef WLAN_FEATURE_MSCS
1154*5113495bSYour Name 	unsigned long mscs_prev_tx_vo_pkts;
1155*5113495bSYour Name 	uint32_t mscs_counter;
1156*5113495bSYour Name #endif /* WLAN_FEATURE_MSCS */
1157*5113495bSYour Name 
1158*5113495bSYour Name 	unsigned long link_flags;
1159*5113495bSYour Name 	qdf_work_t chan_change_notify_work;
1160*5113495bSYour Name };
1161*5113495bSYour Name 
1162*5113495bSYour Name /**
1163*5113495bSYour Name  * struct wlan_hdd_tx_power - Structure to store connection tx power info
1164*5113495bSYour Name  * @tx_pwr: connection tx power sent by firmware
1165*5113495bSYour Name  * @tx_pwr_cached_timestamp: timestamp when tx_pwr is cached into adapter
1166*5113495bSYour Name  */
1167*5113495bSYour Name struct wlan_hdd_tx_power {
1168*5113495bSYour Name 	int tx_pwr;
1169*5113495bSYour Name 	uint32_t tx_pwr_cached_timestamp;
1170*5113495bSYour Name };
1171*5113495bSYour Name 
1172*5113495bSYour Name /**
1173*5113495bSYour Name  * struct hdd_adapter - hdd vdev/net_device context
1174*5113495bSYour Name  * @magic: Magic cookie for adapter sanity verification.  Note that this
1175*5113495bSYour Name  *         needs to be at the beginning of the private data structure so
1176*5113495bSYour Name  *         that it will exist at the beginning of dev->priv and hence
1177*5113495bSYour Name  *         will always be in mapped memory
1178*5113495bSYour Name  * @node: list node for membership in the adapter list
1179*5113495bSYour Name  * @hdd_ctx:
1180*5113495bSYour Name  * @dev: Handle to the network device
1181*5113495bSYour Name  * @device_mode:
1182*5113495bSYour Name  * @ipv4_notifier_work: IPv4 notifier callback for handling ARP offload on
1183*5113495bSYour Name  *                      change in IP
1184*5113495bSYour Name  * @ipv6_notifier_work: IPv6 notifier callback for handling NS offload on
1185*5113495bSYour Name  *                      change in IP
1186*5113495bSYour Name  * @wdev: TODO Move this to sta Ctx
1187*5113495bSYour Name  * @ops: ops checks if Opportunistic Power Save is Enable or Not
1188*5113495bSYour Name  * @ctw: stores CT Window value once we receive Opps command from
1189*5113495bSYour Name  *       wpa_supplicant then using CT Window value we need to Enable
1190*5113495bSYour Name  *       Opportunistic Power Save
1191*5113495bSYour Name  * @allow_power_save: STA/CLI powersave enable/disable from userspace
1192*5113495bSYour Name  * @mac_addr: Current MAC Address for the adapter
1193*5113495bSYour Name  * @mld_addr: MLD address for adapter
1194*5113495bSYour Name  * @event_flags: a bitmap of hdd_adapter_flags
1195*5113495bSYour Name  * @curr_link_info_map: Current mapping of link info in adapter array
1196*5113495bSYour Name  * @active_links: a bitmap of active links in @link_info array
1197*5113495bSYour Name  * @num_links_on_create: No of active links set on initial hdd_open_adapter().
1198*5113495bSYour Name  * @is_ll_stats_req_pending: atomic variable to check active stats req
1199*5113495bSYour Name  * @sta_stats_cached_timestamp: last updated stats timestamp
1200*5113495bSYour Name  * @qdf_monitor_mode_vdev_up_event: QDF event for monitor mode vdev up
1201*5113495bSYour Name  * @disconnect_comp_var: completion variable for disconnect callback
1202*5113495bSYour Name  * @linkup_event_var: completion variable for Linkup Event
1203*5113495bSYour Name  * @is_link_up_service_needed: Track whether the linkup handling is needed
1204*5113495bSYour Name  * @hdd_wmm_status: WMM Status
1205*5113495bSYour Name  * @sta_info:
1206*5113495bSYour Name  * @cache_sta_info:
1207*5113495bSYour Name  * @sta_info_list:
1208*5113495bSYour Name  * @cache_sta_info_list:
1209*5113495bSYour Name  * @cache_sta_count: number of currently cached stations
1210*5113495bSYour Name  * @wapi_info:
1211*5113495bSYour Name  * @sap_stop_bss_work:
1212*5113495bSYour Name  * @tsf: structure containing tsf related information
1213*5113495bSYour Name  * @mc_addr_list: multicast address list
1214*5113495bSYour Name  * @mc_list_lock: spin lock for multicast list
1215*5113495bSYour Name  * @addr_filter_pattern:
1216*5113495bSYour Name  * @scan_info:
1217*5113495bSYour Name  * @psb_changed: Flag to ensure PSB is configured through framework
1218*5113495bSYour Name  * @configured_psb: UAPSD psb value configured through framework
1219*5113495bSYour Name  * @scan_block_work:
1220*5113495bSYour Name  * @blocked_scan_request_q:
1221*5113495bSYour Name  * @blocked_scan_request_q_lock:
1222*5113495bSYour Name  * @tx_flow_control_timer:
1223*5113495bSYour Name  * @tx_flow_timer_initialized:
1224*5113495bSYour Name  * @tx_flow_low_watermark:
1225*5113495bSYour Name  * @tx_flow_hi_watermark_offset:
1226*5113495bSYour Name  * @dscp_to_up_map: DSCP to UP QoS Mapping
1227*5113495bSYour Name  * @is_link_layer_stats_set:
1228*5113495bSYour Name  * @ll_stats_failure_count:
1229*5113495bSYour Name  * @link_status:
1230*5113495bSYour Name  * @upgrade_udp_qos_threshold: The threshold for user priority upgrade for
1231*5113495bSYour Name  *			       any UDP packet.
1232*5113495bSYour Name  * @udp_qos_upgrade_type: UDP QoS packet upgrade request type
1233*5113495bSYour Name  * @temperature: variable for temperature in Celsius
1234*5113495bSYour Name  * @ocb_mac_address: MAC addresses used for OCB interfaces
1235*5113495bSYour Name  * @ocb_mac_addr_count:
1236*5113495bSYour Name  * @pause_map: BITMAP indicating pause reason
1237*5113495bSYour Name  * @subqueue_pause_map:
1238*5113495bSYour Name  * @pause_map_lock:
1239*5113495bSYour Name  * @start_time:
1240*5113495bSYour Name  * @last_time:
1241*5113495bSYour Name  * @total_pause_time:
1242*5113495bSYour Name  * @total_unpause_time:
1243*5113495bSYour Name  * @history_index:
1244*5113495bSYour Name  * @queue_oper_history:
1245*5113495bSYour Name  * @queue_oper_stats:
1246*5113495bSYour Name  * @debugfs_phy: debugfs entry
1247*5113495bSYour Name  * @lfr_fw_status:
1248*5113495bSYour Name  * @active_ac:
1249*5113495bSYour Name  * @mon_chan_freq:
1250*5113495bSYour Name  * @mon_bandwidth:
1251*5113495bSYour Name  * @latency_level: 0 - normal, 1 - xr, 2 - low, 3 - ultralow
1252*5113495bSYour Name  * @multi_client_ll_support: to check multi client ll support in driver
1253*5113495bSYour Name  * @client_info: To store multi client id information
1254*5113495bSYour Name  * @multi_ll_response_cookie: cookie for multi client ll command
1255*5113495bSYour Name  * @multi_ll_req_in_progress: to check multi client ll request in progress
1256*5113495bSYour Name  * @multi_ll_resp_expected: to decide whether host will wait for multi client
1257*5113495bSYour Name  *                          event or not
1258*5113495bSYour Name  * @monitor_mode_vdev_up_in_progress:
1259*5113495bSYour Name  * @rcpi: rcpi information
1260*5113495bSYour Name  * @send_mode_change:
1261*5113495bSYour Name  * @apf_context:
1262*5113495bSYour Name  * @csr_file:
1263*5113495bSYour Name  * @motion_detection_mode:
1264*5113495bSYour Name  * @motion_det_cfg:
1265*5113495bSYour Name  * @motion_det_in_progress:
1266*5113495bSYour Name  * @motion_det_baseline_value:
1267*5113495bSYour Name  * @last_disconnect_reason: Last disconnected internal reason code
1268*5113495bSYour Name  * as per enum qca_disconnect_reason_codes
1269*5113495bSYour Name  * @connect_req_status: Last disconnected internal status code
1270*5113495bSYour Name  *                          as per enum qca_sta_connect_fail_reason_codes
1271*5113495bSYour Name  * @peer_cleanup_done:
1272*5113495bSYour Name  * @oem_data_in_progress:
1273*5113495bSYour Name  * @cookie:
1274*5113495bSYour Name  * @response_expected:
1275*5113495bSYour Name  * @handle_feature_update: Handle feature update only if it is triggered
1276*5113495bSYour Name  *			   by hdd_netdev_feature_update
1277*5113495bSYour Name  * @tso_csum_feature_enabled: Indicate if TSO and checksum offload features
1278*5113495bSYour Name  *                            are enabled or not
1279*5113495bSYour Name  * @netdev_features_update_work: work for handling the netdev features update
1280*5113495bSYour Name  * for the adapter.
1281*5113495bSYour Name  * @netdev_features_update_work_status: status for netdev_features_update_work
1282*5113495bSYour Name  * @net_dev_hold_ref_count:
1283*5113495bSYour Name  * @delete_in_progress: Flag to indicate that the adapter delete is in
1284*5113495bSYour Name  * progress, and any operation using rtnl lock inside
1285*5113495bSYour Name  * the driver can be avoided/skipped.
1286*5113495bSYour Name  * @is_virtual_iface: Indicates that netdev is called from virtual interface
1287*5113495bSYour Name  * @mon_adapter: hdd_adapter of monitor mode.
1288*5113495bSYour Name  * @mlo_adapter_info:
1289*5113495bSYour Name  * @set_mac_addr_req_ctx: Set MAC address command request context
1290*5113495bSYour Name  * @delta_qtime: delta between host qtime and monotonic time
1291*5113495bSYour Name  * @traffic_end_ind_en: traffic end indication feature enable/disable
1292*5113495bSYour Name  * @is_dbam_configured:
1293*5113495bSYour Name  * @user_phy_mode: phy mode is set per vdev
1294*5113495bSYour Name  * @deflink: Default link pointing to the 0th index of the linkinfo array
1295*5113495bSYour Name  * @link_info: Data structure to hold link specific information
1296*5113495bSYour Name  * @tx_power: Structure to hold connection tx Power info
1297*5113495bSYour Name  * @tx_latency_cfg: configuration for per-link transmit latency statistics
1298*5113495bSYour Name  * @link_state_cached_timestamp: link state cached timestamp
1299*5113495bSYour Name  * @keep_alive_interval: user configured STA keep alive interval
1300*5113495bSYour Name  */
1301*5113495bSYour Name struct hdd_adapter {
1302*5113495bSYour Name 	uint32_t magic;
1303*5113495bSYour Name 	qdf_list_node_t node;
1304*5113495bSYour Name 
1305*5113495bSYour Name 	struct hdd_context *hdd_ctx;
1306*5113495bSYour Name 
1307*5113495bSYour Name 	struct net_device *dev;
1308*5113495bSYour Name 
1309*5113495bSYour Name 	enum QDF_OPMODE device_mode;
1310*5113495bSYour Name 
1311*5113495bSYour Name 	struct work_struct ipv4_notifier_work;
1312*5113495bSYour Name #ifdef WLAN_NS_OFFLOAD
1313*5113495bSYour Name 	/* IPv6 notifier callback for handling NS offload on change in IP */
1314*5113495bSYour Name 	struct work_struct ipv6_notifier_work;
1315*5113495bSYour Name #endif
1316*5113495bSYour Name 
1317*5113495bSYour Name 	/* TODO Move this to sta Ctx */
1318*5113495bSYour Name 	struct wireless_dev wdev;
1319*5113495bSYour Name 
1320*5113495bSYour Name 	uint8_t ops;
1321*5113495bSYour Name 	uint32_t ctw;
1322*5113495bSYour Name 	bool allow_power_save;
1323*5113495bSYour Name 
1324*5113495bSYour Name 	struct qdf_mac_addr mac_addr;
1325*5113495bSYour Name #ifndef WLAN_HDD_MULTI_VDEV_SINGLE_NDEV
1326*5113495bSYour Name 	struct qdf_mac_addr mld_addr;
1327*5113495bSYour Name #endif
1328*5113495bSYour Name 	unsigned long event_flags;
1329*5113495bSYour Name 	uint8_t curr_link_info_map[WLAN_MAX_ML_BSS_LINKS];
1330*5113495bSYour Name 	unsigned long active_links;
1331*5113495bSYour Name 	uint8_t num_links_on_create;
1332*5113495bSYour Name 
1333*5113495bSYour Name 	qdf_atomic_t is_ll_stats_req_pending;
1334*5113495bSYour Name 
1335*5113495bSYour Name #ifdef FEATURE_CLUB_LL_STATS_AND_GET_STATION
1336*5113495bSYour Name 	uint32_t sta_stats_cached_timestamp;
1337*5113495bSYour Name #endif
1338*5113495bSYour Name 
1339*5113495bSYour Name #ifdef FEATURE_MONITOR_MODE_SUPPORT
1340*5113495bSYour Name 	qdf_event_t qdf_monitor_mode_vdev_up_event;
1341*5113495bSYour Name #endif
1342*5113495bSYour Name 
1343*5113495bSYour Name 	/* TODO: move these to sta ctx. These may not be used in AP */
1344*5113495bSYour Name 	struct completion disconnect_comp_var;
1345*5113495bSYour Name 	struct completion linkup_event_var;
1346*5113495bSYour Name 
1347*5113495bSYour Name 	bool is_link_up_service_needed;
1348*5113495bSYour Name 
1349*5113495bSYour Name 	struct hdd_wmm_status hdd_wmm_status;
1350*5113495bSYour Name 
1351*5113495bSYour Name 	/* TODO: Will be removed as a part of next phase of clean up */
1352*5113495bSYour Name 	struct hdd_station_info sta_info[WLAN_MAX_STA_COUNT];
1353*5113495bSYour Name 	struct hdd_station_info cache_sta_info[WLAN_MAX_STA_COUNT];
1354*5113495bSYour Name 
1355*5113495bSYour Name 	/* TODO: _list from name will be removed after clean up */
1356*5113495bSYour Name 	struct hdd_sta_info_obj sta_info_list;
1357*5113495bSYour Name 	struct hdd_sta_info_obj cache_sta_info_list;
1358*5113495bSYour Name 	qdf_atomic_t cache_sta_count;
1359*5113495bSYour Name 
1360*5113495bSYour Name #ifdef FEATURE_WLAN_WAPI
1361*5113495bSYour Name 	struct hdd_wapi_info wapi_info;
1362*5113495bSYour Name #endif
1363*5113495bSYour Name 
1364*5113495bSYour Name 	struct work_struct  sap_stop_bss_work;
1365*5113495bSYour Name 
1366*5113495bSYour Name #ifdef WLAN_FEATURE_TSF
1367*5113495bSYour Name 	struct hdd_vdev_tsf tsf;
1368*5113495bSYour Name #endif
1369*5113495bSYour Name 	struct hdd_multicast_addr_list mc_addr_list;
1370*5113495bSYour Name 	qdf_spinlock_t mc_list_lock;
1371*5113495bSYour Name 	uint8_t addr_filter_pattern;
1372*5113495bSYour Name 
1373*5113495bSYour Name 	struct hdd_scan_info scan_info;
1374*5113495bSYour Name 
1375*5113495bSYour Name 	uint8_t psb_changed;
1376*5113495bSYour Name 	uint8_t configured_psb;
1377*5113495bSYour Name 
1378*5113495bSYour Name 	struct work_struct scan_block_work;
1379*5113495bSYour Name 	qdf_list_t blocked_scan_request_q;
1380*5113495bSYour Name 	qdf_mutex_t blocked_scan_request_q_lock;
1381*5113495bSYour Name 
1382*5113495bSYour Name #if  defined(QCA_LL_LEGACY_TX_FLOW_CONTROL) || \
1383*5113495bSYour Name 				defined(QCA_HL_NETDEV_FLOW_CONTROL)
1384*5113495bSYour Name 	qdf_mc_timer_t tx_flow_control_timer;
1385*5113495bSYour Name 	bool tx_flow_timer_initialized;
1386*5113495bSYour Name #endif /* QCA_LL_LEGACY_TX_FLOW_CONTROL || QCA_HL_NETDEV_FLOW_CONTROL */
1387*5113495bSYour Name #ifdef QCA_LL_LEGACY_TX_FLOW_CONTROL
1388*5113495bSYour Name 	unsigned int tx_flow_low_watermark;
1389*5113495bSYour Name 	unsigned int tx_flow_hi_watermark_offset;
1390*5113495bSYour Name #endif /* QCA_LL_LEGACY_TX_FLOW_CONTROL */
1391*5113495bSYour Name 
1392*5113495bSYour Name 	enum sme_qos_wmmuptype dscp_to_up_map[WLAN_MAX_DSCP + 1];
1393*5113495bSYour Name 
1394*5113495bSYour Name #ifdef WLAN_FEATURE_LINK_LAYER_STATS
1395*5113495bSYour Name 	bool is_link_layer_stats_set;
1396*5113495bSYour Name 	uint8_t ll_stats_failure_count;
1397*5113495bSYour Name #endif
1398*5113495bSYour Name 	uint8_t link_status;
1399*5113495bSYour Name 	uint8_t upgrade_udp_qos_threshold;
1400*5113495bSYour Name 	enum udp_qos_upgrade udp_qos_upgrade_type;
1401*5113495bSYour Name 
1402*5113495bSYour Name 	int temperature;
1403*5113495bSYour Name 
1404*5113495bSYour Name #ifdef WLAN_FEATURE_DSRC
1405*5113495bSYour Name 	struct qdf_mac_addr ocb_mac_address[QDF_MAX_CONCURRENCY_PERSONA];
1406*5113495bSYour Name 	int ocb_mac_addr_count;
1407*5113495bSYour Name #endif
1408*5113495bSYour Name 
1409*5113495bSYour Name 	uint32_t pause_map;
1410*5113495bSYour Name 	uint32_t subqueue_pause_map;
1411*5113495bSYour Name 	spinlock_t pause_map_lock;
1412*5113495bSYour Name 	qdf_time_t start_time;
1413*5113495bSYour Name 	qdf_time_t last_time;
1414*5113495bSYour Name 	qdf_time_t total_pause_time;
1415*5113495bSYour Name 	qdf_time_t total_unpause_time;
1416*5113495bSYour Name 	uint8_t history_index;
1417*5113495bSYour Name 	struct hdd_netif_queue_history
1418*5113495bSYour Name 		 queue_oper_history[WLAN_HDD_MAX_HISTORY_ENTRY];
1419*5113495bSYour Name 	struct hdd_netif_queue_stats queue_oper_stats[WLAN_REASON_TYPE_MAX];
1420*5113495bSYour Name 
1421*5113495bSYour Name 	struct dentry *debugfs_phy;
1422*5113495bSYour Name 	struct lfr_firmware_status lfr_fw_status;
1423*5113495bSYour Name 	uint8_t active_ac;
1424*5113495bSYour Name 	uint32_t mon_chan_freq;
1425*5113495bSYour Name 	uint32_t mon_bandwidth;
1426*5113495bSYour Name 	uint16_t latency_level;
1427*5113495bSYour Name #ifdef MULTI_CLIENT_LL_SUPPORT
1428*5113495bSYour Name 	bool multi_client_ll_support;
1429*5113495bSYour Name 	struct wlm_multi_client_info_table client_info[WLM_MAX_HOST_CLIENT];
1430*5113495bSYour Name 	void *multi_ll_response_cookie;
1431*5113495bSYour Name 	bool multi_ll_req_in_progress;
1432*5113495bSYour Name 	bool multi_ll_resp_expected;
1433*5113495bSYour Name #endif
1434*5113495bSYour Name #ifdef FEATURE_MONITOR_MODE_SUPPORT
1435*5113495bSYour Name 	bool monitor_mode_vdev_up_in_progress;
1436*5113495bSYour Name #endif
1437*5113495bSYour Name 
1438*5113495bSYour Name 	struct rcpi_info rcpi;
1439*5113495bSYour Name 	bool send_mode_change;
1440*5113495bSYour Name #ifdef FEATURE_WLAN_APF
1441*5113495bSYour Name 	struct hdd_apf_context apf_context;
1442*5113495bSYour Name #endif /* FEATURE_WLAN_APF */
1443*5113495bSYour Name 
1444*5113495bSYour Name #ifdef WLAN_DEBUGFS
1445*5113495bSYour Name 	struct hdd_debugfs_file_info csr_file[HDD_DEBUGFS_FILE_ID_MAX];
1446*5113495bSYour Name #endif /* WLAN_DEBUGFS */
1447*5113495bSYour Name 
1448*5113495bSYour Name #ifdef WLAN_FEATURE_MOTION_DETECTION
1449*5113495bSYour Name 	bool motion_detection_mode;
1450*5113495bSYour Name 	bool motion_det_cfg;
1451*5113495bSYour Name 	bool motion_det_in_progress;
1452*5113495bSYour Name 	uint32_t motion_det_baseline_value;
1453*5113495bSYour Name #endif /* WLAN_FEATURE_MOTION_DETECTION */
1454*5113495bSYour Name 	enum qca_disconnect_reason_codes last_disconnect_reason;
1455*5113495bSYour Name 	enum wlan_status_code connect_req_status;
1456*5113495bSYour Name 	qdf_event_t peer_cleanup_done;
1457*5113495bSYour Name #ifdef FEATURE_OEM_DATA
1458*5113495bSYour Name 	bool oem_data_in_progress;
1459*5113495bSYour Name 	void *cookie;
1460*5113495bSYour Name 	bool response_expected;
1461*5113495bSYour Name #endif
1462*5113495bSYour Name 	bool handle_feature_update;
1463*5113495bSYour Name 
1464*5113495bSYour Name 	bool tso_csum_feature_enabled;
1465*5113495bSYour Name 
1466*5113495bSYour Name 	qdf_work_t netdev_features_update_work;
1467*5113495bSYour Name 	enum hdd_work_status netdev_features_update_work_status;
1468*5113495bSYour Name 	qdf_atomic_t net_dev_hold_ref_count[NET_DEV_HOLD_ID_MAX];
1469*5113495bSYour Name 	bool delete_in_progress;
1470*5113495bSYour Name 	bool is_virtual_iface;
1471*5113495bSYour Name #ifdef WLAN_FEATURE_PKT_CAPTURE
1472*5113495bSYour Name 	struct hdd_adapter *mon_adapter;
1473*5113495bSYour Name #endif
1474*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC)
1475*5113495bSYour Name 	struct hdd_mlo_adapter_info mlo_adapter_info;
1476*5113495bSYour Name #endif
1477*5113495bSYour Name #ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
1478*5113495bSYour Name 	void *set_mac_addr_req_ctx;
1479*5113495bSYour Name #endif
1480*5113495bSYour Name 	int64_t delta_qtime;
1481*5113495bSYour Name #ifdef DP_TRAFFIC_END_INDICATION
1482*5113495bSYour Name 	bool traffic_end_ind_en;
1483*5113495bSYour Name #endif
1484*5113495bSYour Name #ifdef WLAN_FEATURE_DBAM_CONFIG
1485*5113495bSYour Name 	bool is_dbam_configured;
1486*5113495bSYour Name #endif
1487*5113495bSYour Name 	enum qca_wlan_vendor_phy_mode user_phy_mode;
1488*5113495bSYour Name 	struct wlan_hdd_link_info *deflink;
1489*5113495bSYour Name 	struct wlan_hdd_link_info link_info[WLAN_MAX_ML_BSS_LINKS];
1490*5113495bSYour Name 	struct wlan_hdd_tx_power tx_power;
1491*5113495bSYour Name #ifdef WLAN_FEATURE_TX_LATENCY_STATS
1492*5113495bSYour Name 	struct cdp_tx_latency_config tx_latency_cfg;
1493*5113495bSYour Name #endif
1494*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
1495*5113495bSYour Name 	qdf_time_t link_state_cached_timestamp;
1496*5113495bSYour Name #endif
1497*5113495bSYour Name 	uint16_t keep_alive_interval;
1498*5113495bSYour Name };
1499*5113495bSYour Name 
1500*5113495bSYour Name #define WLAN_HDD_GET_STATION_CTX_PTR(link_info) (&(link_info)->session.station)
1501*5113495bSYour Name #define WLAN_HDD_GET_AP_CTX_PTR(link_info) (&(link_info)->session.ap)
1502*5113495bSYour Name #define WLAN_HDD_GET_CTX(adapter) ((adapter)->hdd_ctx)
1503*5113495bSYour Name #define WLAN_HDD_GET_HOSTAP_STATE_PTR(link_info) \
1504*5113495bSYour Name 		(&(WLAN_HDD_GET_AP_CTX_PTR((link_info))->hostapd_state))
1505*5113495bSYour Name #define WLAN_HDD_GET_SAP_CTX_PTR(link_info) \
1506*5113495bSYour Name 		(WLAN_HDD_GET_AP_CTX_PTR((link_info))->sap_context)
1507*5113495bSYour Name 
1508*5113495bSYour Name #ifdef WLAN_FEATURE_NAN
1509*5113495bSYour Name #define WLAN_HDD_IS_NDP_ENABLED(hdd_ctx) ((hdd_ctx)->nan_datapath_enabled)
1510*5113495bSYour Name #else
1511*5113495bSYour Name /* WLAN_HDD_GET_NDP_CTX_PTR and WLAN_HDD_GET_NDP_WEXT_STATE_PTR are not defined
1512*5113495bSYour Name  * intentionally so that all references to these must be within NDP code.
1513*5113495bSYour Name  * non-NDP code can call WLAN_HDD_IS_NDP_ENABLED(), and when it is enabled,
1514*5113495bSYour Name  * invoke NDP code to do all work.
1515*5113495bSYour Name  */
1516*5113495bSYour Name #define WLAN_HDD_IS_NDP_ENABLED(hdd_ctx) (false)
1517*5113495bSYour Name #endif
1518*5113495bSYour Name 
1519*5113495bSYour Name /* Set mac address locally administered bit */
1520*5113495bSYour Name #define WLAN_HDD_RESET_LOCALLY_ADMINISTERED_BIT(macaddr) (macaddr[0] &= 0xFD)
1521*5113495bSYour Name 
1522*5113495bSYour Name #define HDD_DEFAULT_MCC_P2P_QUOTA    70
1523*5113495bSYour Name #define HDD_RESET_MCC_P2P_QUOTA      50
1524*5113495bSYour Name 
1525*5113495bSYour Name /*
1526*5113495bSYour Name  * struct hdd_priv_data - driver ioctl private data payload
1527*5113495bSYour Name  * @buf: pointer to command buffer (may be in userspace)
1528*5113495bSYour Name  * @used_len: length of the command/data currently in @buf
1529*5113495bSYour Name  * @total_len: total length of the @buf memory allocation
1530*5113495bSYour Name  */
1531*5113495bSYour Name struct hdd_priv_data {
1532*5113495bSYour Name 	uint8_t *buf;
1533*5113495bSYour Name 	int used_len;
1534*5113495bSYour Name 	int total_len;
1535*5113495bSYour Name };
1536*5113495bSYour Name 
1537*5113495bSYour Name #define  MAX_MOD_LOGLEVEL 10
1538*5113495bSYour Name struct fw_log_info {
1539*5113495bSYour Name 	uint8_t enable;
1540*5113495bSYour Name 	uint8_t dl_type;
1541*5113495bSYour Name 	uint8_t dl_report;
1542*5113495bSYour Name 	uint8_t dl_loglevel;
1543*5113495bSYour Name 	uint8_t index;
1544*5113495bSYour Name 	uint32_t dl_mod_loglevel[MAX_MOD_LOGLEVEL];
1545*5113495bSYour Name 
1546*5113495bSYour Name };
1547*5113495bSYour Name 
1548*5113495bSYour Name /**
1549*5113495bSYour Name  * enum antenna_mode - number of TX/RX chains
1550*5113495bSYour Name  * @HDD_ANTENNA_MODE_INVALID: Invalid mode place holder
1551*5113495bSYour Name  * @HDD_ANTENNA_MODE_1X1: Number of TX/RX chains equals 1
1552*5113495bSYour Name  * @HDD_ANTENNA_MODE_2X2: Number of TX/RX chains equals 2
1553*5113495bSYour Name  * @HDD_ANTENNA_MODE_MAX: Place holder for max mode
1554*5113495bSYour Name  */
1555*5113495bSYour Name enum antenna_mode {
1556*5113495bSYour Name 	HDD_ANTENNA_MODE_INVALID,
1557*5113495bSYour Name 	HDD_ANTENNA_MODE_1X1,
1558*5113495bSYour Name 	HDD_ANTENNA_MODE_2X2,
1559*5113495bSYour Name 	HDD_ANTENNA_MODE_MAX
1560*5113495bSYour Name };
1561*5113495bSYour Name 
1562*5113495bSYour Name /**
1563*5113495bSYour Name  * enum smps_mode - SM power save mode
1564*5113495bSYour Name  * @HDD_SMPS_MODE_STATIC: Static power save
1565*5113495bSYour Name  * @HDD_SMPS_MODE_DYNAMIC: Dynamic power save
1566*5113495bSYour Name  * @HDD_SMPS_MODE_RESERVED: Reserved
1567*5113495bSYour Name  * @HDD_SMPS_MODE_DISABLED: Disable power save
1568*5113495bSYour Name  * @HDD_SMPS_MODE_MAX: Place holder for max mode
1569*5113495bSYour Name  */
1570*5113495bSYour Name enum smps_mode {
1571*5113495bSYour Name 	HDD_SMPS_MODE_STATIC,
1572*5113495bSYour Name 	HDD_SMPS_MODE_DYNAMIC,
1573*5113495bSYour Name 	HDD_SMPS_MODE_RESERVED,
1574*5113495bSYour Name 	HDD_SMPS_MODE_DISABLED,
1575*5113495bSYour Name 	HDD_SMPS_MODE_MAX
1576*5113495bSYour Name };
1577*5113495bSYour Name 
1578*5113495bSYour Name #ifdef WLAN_FEATURE_OFFLOAD_PACKETS
1579*5113495bSYour Name /**
1580*5113495bSYour Name  * struct hdd_offloaded_packets - request id to pattern id mapping
1581*5113495bSYour Name  * @request_id: request id
1582*5113495bSYour Name  * @pattern_id: pattern id
1583*5113495bSYour Name  *
1584*5113495bSYour Name  */
1585*5113495bSYour Name struct hdd_offloaded_packets {
1586*5113495bSYour Name 	uint32_t request_id;
1587*5113495bSYour Name 	uint8_t  pattern_id;
1588*5113495bSYour Name };
1589*5113495bSYour Name 
1590*5113495bSYour Name /**
1591*5113495bSYour Name  * struct hdd_offloaded_packets_ctx - offloaded packets context
1592*5113495bSYour Name  * @op_table: request id to pattern id table
1593*5113495bSYour Name  * @op_lock: mutex lock
1594*5113495bSYour Name  */
1595*5113495bSYour Name struct hdd_offloaded_packets_ctx {
1596*5113495bSYour Name 	struct hdd_offloaded_packets op_table[MAXNUM_PERIODIC_TX_PTRNS];
1597*5113495bSYour Name 	struct mutex op_lock;
1598*5113495bSYour Name };
1599*5113495bSYour Name #endif
1600*5113495bSYour Name 
1601*5113495bSYour Name /**
1602*5113495bSYour Name  * enum driver_modules_status - Driver Modules status
1603*5113495bSYour Name  * @DRIVER_MODULES_UNINITIALIZED: Driver CDS modules uninitialized
1604*5113495bSYour Name  * @DRIVER_MODULES_ENABLED: Driver CDS modules opened
1605*5113495bSYour Name  * @DRIVER_MODULES_CLOSED: Driver CDS modules closed
1606*5113495bSYour Name  */
1607*5113495bSYour Name enum driver_modules_status {
1608*5113495bSYour Name 	DRIVER_MODULES_UNINITIALIZED,
1609*5113495bSYour Name 	DRIVER_MODULES_ENABLED,
1610*5113495bSYour Name 	DRIVER_MODULES_CLOSED
1611*5113495bSYour Name };
1612*5113495bSYour Name 
1613*5113495bSYour Name /**
1614*5113495bSYour Name  * struct acs_dfs_policy - Define ACS policies
1615*5113495bSYour Name  * @acs_dfs_mode: Dfs mode enabled/disabled.
1616*5113495bSYour Name  * @acs_chan_freq: pre defined channel frequency to avoid ACS.
1617*5113495bSYour Name  */
1618*5113495bSYour Name struct acs_dfs_policy {
1619*5113495bSYour Name 	enum dfs_mode acs_dfs_mode;
1620*5113495bSYour Name 	uint32_t acs_chan_freq;
1621*5113495bSYour Name };
1622*5113495bSYour Name 
1623*5113495bSYour Name /**
1624*5113495bSYour Name  * enum suspend_fail_reason - Reasons a WLAN suspend might fail
1625*5113495bSYour Name  * @SUSPEND_FAIL_IPA: IPA in progress
1626*5113495bSYour Name  * @SUSPEND_FAIL_RADAR: radar scan in progress
1627*5113495bSYour Name  * @SUSPEND_FAIL_ROAM: roaming in progress
1628*5113495bSYour Name  * @SUSPEND_FAIL_SCAN: scan in progress
1629*5113495bSYour Name  * @SUSPEND_FAIL_INITIAL_WAKEUP: received initial wakeup from firmware
1630*5113495bSYour Name  * @SUSPEND_FAIL_MAX_COUNT: the number of wakeup reasons, always at the end
1631*5113495bSYour Name  */
1632*5113495bSYour Name enum suspend_fail_reason {
1633*5113495bSYour Name 	SUSPEND_FAIL_IPA,
1634*5113495bSYour Name 	SUSPEND_FAIL_RADAR,
1635*5113495bSYour Name 	SUSPEND_FAIL_ROAM,
1636*5113495bSYour Name 	SUSPEND_FAIL_SCAN,
1637*5113495bSYour Name 	SUSPEND_FAIL_INITIAL_WAKEUP,
1638*5113495bSYour Name 	SUSPEND_FAIL_MAX_COUNT
1639*5113495bSYour Name };
1640*5113495bSYour Name 
1641*5113495bSYour Name /**
1642*5113495bSYour Name  * struct suspend_resume_stats - counters for suspend/resume events
1643*5113495bSYour Name  * @suspends: number of suspends completed
1644*5113495bSYour Name  * @resumes: number of resumes completed
1645*5113495bSYour Name  * @suspend_fail: counters for failed suspend reasons
1646*5113495bSYour Name  */
1647*5113495bSYour Name struct suspend_resume_stats {
1648*5113495bSYour Name 	uint32_t suspends;
1649*5113495bSYour Name 	uint32_t resumes;
1650*5113495bSYour Name 	uint32_t suspend_fail[SUSPEND_FAIL_MAX_COUNT];
1651*5113495bSYour Name };
1652*5113495bSYour Name 
1653*5113495bSYour Name /**
1654*5113495bSYour Name  * enum hdd_sta_smps_param - SMPS parameters to configure from hdd
1655*5113495bSYour Name  * @HDD_STA_SMPS_PARAM_UPPER_RSSI_THRESH: RSSI threshold to enter Dynamic SMPS
1656*5113495bSYour Name  * mode from inactive mode
1657*5113495bSYour Name  * @HDD_STA_SMPS_PARAM_STALL_RSSI_THRESH:  RSSI threshold to enter
1658*5113495bSYour Name  * Stalled-D-SMPS mode from D-SMPS mode or to enter D-SMPS mode from
1659*5113495bSYour Name  * Stalled-D-SMPS mode
1660*5113495bSYour Name  * @HDD_STA_SMPS_PARAM_LOWER_RSSI_THRESH:  RSSI threshold to disable SMPS modes
1661*5113495bSYour Name  * @HDD_STA_SMPS_PARAM_UPPER_BRSSI_THRESH: Upper threshold for beacon-RSSI.
1662*5113495bSYour Name  * Used to reduce RX chainmask.
1663*5113495bSYour Name  * @HDD_STA_SMPS_PARAM_LOWER_BRSSI_THRESH:  Lower threshold for beacon-RSSI.
1664*5113495bSYour Name  * Used to increase RX chainmask.
1665*5113495bSYour Name  * @HDD_STA_SMPS_PARAM_DTIM_1CHRX_ENABLE: Enable/Disable DTIM 1chRx feature
1666*5113495bSYour Name  */
1667*5113495bSYour Name enum hdd_sta_smps_param {
1668*5113495bSYour Name 	HDD_STA_SMPS_PARAM_UPPER_RSSI_THRESH = 0,
1669*5113495bSYour Name 	HDD_STA_SMPS_PARAM_STALL_RSSI_THRESH = 1,
1670*5113495bSYour Name 	HDD_STA_SMPS_PARAM_LOWER_RSSI_THRESH = 2,
1671*5113495bSYour Name 	HDD_STA_SMPS_PARAM_UPPER_BRSSI_THRESH = 3,
1672*5113495bSYour Name 	HDD_STA_SMPS_PARAM_LOWER_BRSSI_THRESH = 4,
1673*5113495bSYour Name 	HDD_STA_SMPS_PARAM_DTIM_1CHRX_ENABLE = 5
1674*5113495bSYour Name };
1675*5113495bSYour Name 
1676*5113495bSYour Name /**
1677*5113495bSYour Name  * enum RX_OFFLOAD - Receive offload modes
1678*5113495bSYour Name  * @CFG_LRO_ENABLED: Large Rx offload
1679*5113495bSYour Name  * @CFG_GRO_ENABLED: Generic Rx Offload
1680*5113495bSYour Name  */
1681*5113495bSYour Name enum RX_OFFLOAD {
1682*5113495bSYour Name 	CFG_LRO_ENABLED = 1,
1683*5113495bSYour Name 	CFG_GRO_ENABLED,
1684*5113495bSYour Name };
1685*5113495bSYour Name 
1686*5113495bSYour Name /* One per STA: 1 for BCMC_STA_ID, 1 for each SAP_SELF_STA_ID,
1687*5113495bSYour Name  * 1 for WDS_STAID
1688*5113495bSYour Name  */
1689*5113495bSYour Name #define HDD_MAX_ADAPTERS (WLAN_MAX_STA_COUNT + QDF_MAX_NO_OF_SAP_MODE + 2)
1690*5113495bSYour Name 
1691*5113495bSYour Name #ifdef DISABLE_CHANNEL_LIST
1692*5113495bSYour Name 
1693*5113495bSYour Name /**
1694*5113495bSYour Name  * struct hdd_cache_channel_info - Structure of the channel info
1695*5113495bSYour Name  * which needs to be cached
1696*5113495bSYour Name  * @freq: frequency
1697*5113495bSYour Name  * @reg_status: Current regulatory status of the channel
1698*5113495bSYour Name  * Enable
1699*5113495bSYour Name  * Disable
1700*5113495bSYour Name  * DFS
1701*5113495bSYour Name  * Invalid
1702*5113495bSYour Name  * @wiphy_status: Current wiphy status
1703*5113495bSYour Name  */
1704*5113495bSYour Name struct hdd_cache_channel_info {
1705*5113495bSYour Name 	qdf_freq_t freq;
1706*5113495bSYour Name 	enum channel_state reg_status;
1707*5113495bSYour Name 	uint32_t wiphy_status;
1708*5113495bSYour Name };
1709*5113495bSYour Name 
1710*5113495bSYour Name /**
1711*5113495bSYour Name  * struct hdd_cache_channels - Structure of the channels to be cached
1712*5113495bSYour Name  * @num_channels: Number of channels to be cached
1713*5113495bSYour Name  * @channel_info: Structure of the channel info
1714*5113495bSYour Name  */
1715*5113495bSYour Name struct hdd_cache_channels {
1716*5113495bSYour Name 	uint32_t num_channels;
1717*5113495bSYour Name 	struct hdd_cache_channel_info *channel_info;
1718*5113495bSYour Name };
1719*5113495bSYour Name #endif
1720*5113495bSYour Name 
1721*5113495bSYour Name /**
1722*5113495bSYour Name  * struct hdd_dynamic_mac - hdd structure to handle dynamic mac address changes
1723*5113495bSYour Name  * @dynamic_mac: Dynamically configured mac, this contains the mac on which
1724*5113495bSYour Name  * current interface is up
1725*5113495bSYour Name  * @is_provisioned_mac: is this mac from provisioned list
1726*5113495bSYour Name  * @bit_position: holds the bit mask position from where this mac is assigned,
1727*5113495bSYour Name  * if mac is assigned from provisioned this field contains the position from
1728*5113495bSYour Name  * provisioned_intf_addr_mask else contains the position from
1729*5113495bSYour Name  * derived_intf_addr_mask
1730*5113495bSYour Name  */
1731*5113495bSYour Name struct hdd_dynamic_mac {
1732*5113495bSYour Name 	struct qdf_mac_addr dynamic_mac;
1733*5113495bSYour Name 	bool is_provisioned_mac;
1734*5113495bSYour Name 	uint8_t bit_position;
1735*5113495bSYour Name };
1736*5113495bSYour Name 
1737*5113495bSYour Name /**
1738*5113495bSYour Name  * struct hdd_fw_ver_info - FW version info structure
1739*5113495bSYour Name  * @major_spid: FW version - major spid.
1740*5113495bSYour Name  * @minor_spid: FW version - minor spid
1741*5113495bSYour Name  * @siid:       FW version - siid
1742*5113495bSYour Name  * @sub_id:     FW version - sub id
1743*5113495bSYour Name  * @rel_id:     FW version - release id
1744*5113495bSYour Name  * @crmid:      FW version - crmid
1745*5113495bSYour Name  */
1746*5113495bSYour Name 
1747*5113495bSYour Name struct hdd_fw_ver_info {
1748*5113495bSYour Name 	uint32_t major_spid;
1749*5113495bSYour Name 	uint32_t minor_spid;
1750*5113495bSYour Name 	uint32_t siid;
1751*5113495bSYour Name 	uint32_t sub_id;
1752*5113495bSYour Name 	uint32_t rel_id;
1753*5113495bSYour Name 	uint32_t crmid;
1754*5113495bSYour Name };
1755*5113495bSYour Name 
1756*5113495bSYour Name /*
1757*5113495bSYour Name  * The logic for get current index of history is dependent on this
1758*5113495bSYour Name  * value being power of 2.
1759*5113495bSYour Name  */
1760*5113495bSYour Name #define WLAN_HDD_ADAPTER_OPS_HISTORY_MAX 4
1761*5113495bSYour Name QDF_COMPILE_TIME_ASSERT(adapter_ops_history_size,
1762*5113495bSYour Name 			(WLAN_HDD_ADAPTER_OPS_HISTORY_MAX &
1763*5113495bSYour Name 			 (WLAN_HDD_ADAPTER_OPS_HISTORY_MAX - 1)) == 0);
1764*5113495bSYour Name 
1765*5113495bSYour Name /**
1766*5113495bSYour Name  * enum hdd_adapter_ops_event - events for adapter ops history
1767*5113495bSYour Name  * @WLAN_HDD_ADAPTER_OPS_WORK_POST: adapter ops work posted
1768*5113495bSYour Name  * @WLAN_HDD_ADAPTER_OPS_WORK_SCHED: adapter ops work scheduled
1769*5113495bSYour Name  */
1770*5113495bSYour Name enum hdd_adapter_ops_event {
1771*5113495bSYour Name 	WLAN_HDD_ADAPTER_OPS_WORK_POST,
1772*5113495bSYour Name 	WLAN_HDD_ADAPTER_OPS_WORK_SCHED,
1773*5113495bSYour Name };
1774*5113495bSYour Name 
1775*5113495bSYour Name /**
1776*5113495bSYour Name  * struct hdd_adapter_ops_record - record of adapter ops history
1777*5113495bSYour Name  * @timestamp: time of the occurrence of event
1778*5113495bSYour Name  * @event: event
1779*5113495bSYour Name  * @vdev_id: vdev id corresponding to the event
1780*5113495bSYour Name  */
1781*5113495bSYour Name struct hdd_adapter_ops_record {
1782*5113495bSYour Name 	uint64_t timestamp;
1783*5113495bSYour Name 	enum hdd_adapter_ops_event event;
1784*5113495bSYour Name 	int vdev_id;
1785*5113495bSYour Name };
1786*5113495bSYour Name 
1787*5113495bSYour Name /**
1788*5113495bSYour Name  * struct hdd_adapter_ops_history - history of adapter ops
1789*5113495bSYour Name  * @index: index to store the next event
1790*5113495bSYour Name  * @entry: array of events
1791*5113495bSYour Name  */
1792*5113495bSYour Name struct hdd_adapter_ops_history {
1793*5113495bSYour Name 	qdf_atomic_t index;
1794*5113495bSYour Name 	struct hdd_adapter_ops_record entry[WLAN_HDD_ADAPTER_OPS_HISTORY_MAX];
1795*5113495bSYour Name };
1796*5113495bSYour Name 
1797*5113495bSYour Name /**
1798*5113495bSYour Name  * struct hdd_dual_sta_policy - Concurrent STA policy configuration
1799*5113495bSYour Name  * @dual_sta_policy: Possible values are defined in enum
1800*5113495bSYour Name  * qca_wlan_concurrent_sta_policy_config
1801*5113495bSYour Name  * @primary_vdev_id: specified iface is the primary STA iface, say 0 means
1802*5113495bSYour Name  * vdev 0 is acting as primary interface
1803*5113495bSYour Name  */
1804*5113495bSYour Name struct hdd_dual_sta_policy {
1805*5113495bSYour Name 	uint8_t dual_sta_policy;
1806*5113495bSYour Name 	uint8_t primary_vdev_id;
1807*5113495bSYour Name };
1808*5113495bSYour Name 
1809*5113495bSYour Name #ifdef FEATURE_CNSS_HW_SECURE_DISABLE
1810*5113495bSYour Name /**
1811*5113495bSYour Name  * hdd_get_wlan_driver_status() - get status of soft driver unload
1812*5113495bSYour Name  *
1813*5113495bSYour Name  * Return: true if wifi is disabled by soft driver unload, else false
1814*5113495bSYour Name  */
1815*5113495bSYour Name bool hdd_get_wlan_driver_status(void);
1816*5113495bSYour Name #else
hdd_get_wlan_driver_status(void)1817*5113495bSYour Name static inline bool hdd_get_wlan_driver_status(void)
1818*5113495bSYour Name {
1819*5113495bSYour Name 	return false;
1820*5113495bSYour Name }
1821*5113495bSYour Name #endif
1822*5113495bSYour Name 
1823*5113495bSYour Name /**
1824*5113495bSYour Name  * struct hdd_lpc_info - Local packet capture information
1825*5113495bSYour Name  * @lpc_wk: local packet capture work
1826*5113495bSYour Name  * @lpc_wk_scheduled: flag to indicate if lpc work is scheduled or not
1827*5113495bSYour Name  * @mon_adapter: monitor adapter
1828*5113495bSYour Name  */
1829*5113495bSYour Name struct hdd_lpc_info {
1830*5113495bSYour Name 	qdf_work_t lpc_wk;
1831*5113495bSYour Name 	bool lpc_wk_scheduled;
1832*5113495bSYour Name 	struct hdd_adapter *mon_adapter;
1833*5113495bSYour Name };
1834*5113495bSYour Name 
1835*5113495bSYour Name /**
1836*5113495bSYour Name  * enum wlan_state_ctrl_str_id - state control param string id
1837*5113495bSYour Name  * @WLAN_OFF_STR: Turn OFF WiFi
1838*5113495bSYour Name  * @WLAN_ON_STR: Turn ON WiFi
1839*5113495bSYour Name  * @WLAN_ENABLE_STR: Enable WiFi
1840*5113495bSYour Name  * @WLAN_DISABLE_STR: Disable Wifi
1841*5113495bSYour Name  * @WLAN_WAIT_FOR_READY_STR: Driver should wait for ongoing recovery
1842*5113495bSYour Name  * @WLAN_FORCE_DISABLE_STR: Disable Wifi by soft driver unload
1843*5113495bSYour Name  */
1844*5113495bSYour Name enum wlan_state_ctrl_str_id {
1845*5113495bSYour Name 	WLAN_OFF_STR   = 0,
1846*5113495bSYour Name 	WLAN_ON_STR,
1847*5113495bSYour Name 	WLAN_ENABLE_STR,
1848*5113495bSYour Name 	WLAN_DISABLE_STR,
1849*5113495bSYour Name 	WLAN_WAIT_FOR_READY_STR,
1850*5113495bSYour Name 	WLAN_FORCE_DISABLE_STR
1851*5113495bSYour Name };
1852*5113495bSYour Name 
1853*5113495bSYour Name #define MAX_TGT_HW_NAME_LEN 32
1854*5113495bSYour Name 
1855*5113495bSYour Name /**
1856*5113495bSYour Name  * struct hdd_context - hdd shared driver and psoc/device context
1857*5113495bSYour Name  * @psoc: object manager psoc context
1858*5113495bSYour Name  * @pdev: object manager pdev context
1859*5113495bSYour Name  * @mac_handle: opaque handle to MAC context
1860*5113495bSYour Name  * @wiphy: Linux wiphy
1861*5113495bSYour Name  * @hdd_adapter_lock: lock for @hdd_adapters
1862*5113495bSYour Name  * @hdd_adapters: list of all instantiated adapters
1863*5113495bSYour Name  * @is_therm_cmd_supp: get temperature command enable or disable
1864*5113495bSYour Name  * @fw: pointer to firmware image data
1865*5113495bSYour Name  * @cfg: pointer to configuration data
1866*5113495bSYour Name  * @parent_dev: pointer to parent device
1867*5113495bSYour Name  * @config: Config values read from qcom_cfg.ini file
1868*5113495bSYour Name  * @channels_2ghz: pointer for wiphy 2 GHz channels
1869*5113495bSYour Name  * @channels_5ghz: pointer for wiphy 5 GHz channels
1870*5113495bSYour Name  * @iftype_data_2g: Interface data for 2 GHz band
1871*5113495bSYour Name  * @iftype_data_5g: Interface data for 5 GHz band
1872*5113495bSYour Name  * @iftype_data_6g: Interface data for 6 GHz band
1873*5113495bSYour Name  * @mc_sus_event_var: Completion variable to indicate Mc Thread Suspended
1874*5113495bSYour Name  * @is_scheduler_suspended: true if the MC Thread is suspended
1875*5113495bSYour Name  * @is_ol_rx_thread_suspended: true if the RX Thread is suspended
1876*5113495bSYour Name  * @hdd_wlan_suspended: true if the HDD is suspended
1877*5113495bSYour Name  * @suspended: unused???
1878*5113495bSYour Name  * @is_pktlog_enabled: true if pktlog is enabled, used to start pktlog after
1879*5113495bSYour Name  *                     SSR/PDR if previously enabled
1880*5113495bSYour Name  * @sap_lock: Lock to avoid race condition during start/stop bss
1881*5113495bSYour Name  * @oem_app_registered: OEM App registered or not
1882*5113495bSYour Name  * @oem_pid: OEM App Process ID when registered
1883*5113495bSYour Name  * @concurrency_mode: Concurrency Parameters
1884*5113495bSYour Name  * @no_of_open_sessions: number of open sessions per operating mode
1885*5113495bSYour Name  * @no_of_active_sessions: number of active sessions per operating mode
1886*5113495bSYour Name  * @p2p_device_address: P2P Device MAC Address for the adapter
1887*5113495bSYour Name  * @sap_wake_lock: Soft AP wakelock
1888*5113495bSYour Name  * @is_wiphy_suspended: Flag keeps track of wiphy suspend/resume
1889*5113495bSYour Name  * @ready_to_suspend: completed when ready to suspend
1890*5113495bSYour Name  * @target_type: defining the solution type
1891*5113495bSYour Name  * @target_fw_version: firmware version
1892*5113495bSYour Name  * @target_fw_vers_ext: firmware version extension
1893*5113495bSYour Name  * @fw_version_info: detailed firmware version information
1894*5113495bSYour Name  * @target_hw_version:  the chip/rom version
1895*5113495bSYour Name  * @target_hw_revision: the chip/rom revision
1896*5113495bSYour Name  * @target_hw_name: chip/rom name
1897*5113495bSYour Name  * @reg: regulatory information
1898*5113495bSYour Name  * @unsafe_channel_count: number of unsafe channels
1899*5113495bSYour Name  * @unsafe_channel_list: list of unsafe channels
1900*5113495bSYour Name  * @restriction_mask: channel avoidance restrictions mask
1901*5113495bSYour Name  * @max_intf_count: maximum number of supported interfaces
1902*5113495bSYour Name  * @lpss_support: Is LPSS offload supported
1903*5113495bSYour Name  * @ap_arpns_support: Is AP ARP/NS offload supported
1904*5113495bSYour Name  * @ioctl_scan_mode: scan mode
1905*5113495bSYour Name  * @sta_ap_intf_check_work: workqueue for interface check
1906*5113495bSYour Name  * @dev_dfs_cac_status: DFS CAC status
1907*5113495bSYour Name  * @bt_coex_mode_set: Has BT coex mode been set
1908*5113495bSYour Name  * @skip_acs_scan_timer: timer used to skip ACS scan
1909*5113495bSYour Name  * @skip_acs_scan_status: status of skip ACS scan
1910*5113495bSYour Name  * @last_acs_freq_list: ACS frequency list
1911*5113495bSYour Name  * @num_of_channels: number of channels in @last_acs_freq_list
1912*5113495bSYour Name  * @acs_skip_lock: use to synchronize "skip ACS scan" feature
1913*5113495bSYour Name  * @sap_dfs_wakelock : SAP DFS wakelock
1914*5113495bSYour Name  * @sap_dfs_ref_cnt: SAP DFS reference count
1915*5113495bSYour Name  * @is_extwow_app_type1_param_set: is extwow app type1 param set
1916*5113495bSYour Name  * @is_extwow_app_type2_param_set: is extwow app type2 param set
1917*5113495bSYour Name  * @ext_scan_start_since_boot: Time since boot up to extscan start (in micro
1918*5113495bSYour Name  *                             seconds)
1919*5113495bSYour Name  * @miracast_value: value of driver miracast command
1920*5113495bSYour Name  * @ipv6_notifier: IPv6 notifier callback for handling NS offload on change
1921*5113495bSYour Name  *                 in IP
1922*5113495bSYour Name  * @ns_offload_enable: Is NS offload enabled
1923*5113495bSYour Name  * @ipv4_notifier: IPv4 notifier callback for handling ARP offload on change
1924*5113495bSYour Name  *                 in IP
1925*5113495bSYour Name  * @pm_qos_notifier: Device PM QoS notifier
1926*5113495bSYour Name  * @runtime_pm_prevented: Is PM prevented
1927*5113495bSYour Name  * @pm_qos_lock: Lock for PM QoS data
1928*5113495bSYour Name  * @num_rf_chains: number of rf chains supported by target
1929*5113495bSYour Name  * @ht_tx_stbc_supported: Is HT Tx STBC supported by target
1930*5113495bSYour Name  * @op_ctx: Offloaded packets context
1931*5113495bSYour Name  * @mcc_mode: Is Multi-channel Concurrency enabled
1932*5113495bSYour Name  * @memdump_lock: Lock for memdump data
1933*5113495bSYour Name  * @driver_dump_size: Size of the memdump data buffer
1934*5113495bSYour Name  * @driver_dump_mem: memdump data buffer
1935*5113495bSYour Name  * @connection_in_progress: Is connection in progress
1936*5113495bSYour Name  * @connection_status_lock: Lock for connection status
1937*5113495bSYour Name  * @fine_time_meas_cap_target: place to store FTM capab of target. This
1938*5113495bSYour Name  *                             allows changing of FTM capab at runtime
1939*5113495bSYour Name  *                             and intersecting it with target capab before
1940*5113495bSYour Name  *                             updating.
1941*5113495bSYour Name  * @current_antenna_mode: Current number of TX X RX chains being used
1942*5113495bSYour Name  * @radio_index: the radio index assigned by cnss_logger
1943*5113495bSYour Name  * @hbw_requested: Has high bandwidth been requested
1944*5113495bSYour Name  * @pm_qos_request: Is PM QoS requested
1945*5113495bSYour Name  * @nan_datapath_enabled: Is NAN datapath enabled
1946*5113495bSYour Name  * @driver_status: Present state of driver cds modules
1947*5113495bSYour Name  * @psoc_idle_timeout_work: delayed work for psoc idle shutdown
1948*5113495bSYour Name  * @pm_notifier: PM notifier of hdd modules
1949*5113495bSYour Name  * @acs_policy: ACS DFS policy
1950*5113495bSYour Name  * @wmi_max_len: MTU of the WMI interface
1951*5113495bSYour Name  * @suspend_resume_stats: Suspend/Resume statistics
1952*5113495bSYour Name  * @runtime_context: Runtime PM context
1953*5113495bSYour Name  * @chan_info: scan channel information
1954*5113495bSYour Name  * @chan_info_lock: lock for @chan_info
1955*5113495bSYour Name  * @tdls_source_bitmap: bit map to set/reset TDLS by different sources
1956*5113495bSYour Name  * @tdls_umac_comp_active: Is the TDLS component active
1957*5113495bSYour Name  * @tdls_nap_active: Is napier specific tdls data path enabled
1958*5113495bSYour Name  * @beacon_probe_rsp_cnt_per_scan:
1959*5113495bSYour Name  * @last_scan_reject_vdev_id:
1960*5113495bSYour Name  * @last_scan_reject_reason:
1961*5113495bSYour Name  * @last_scan_reject_timestamp:
1962*5113495bSYour Name  * @scan_reject_cnt:
1963*5113495bSYour Name  * @dfs_cac_offload:
1964*5113495bSYour Name  * @reg_offload:
1965*5113495bSYour Name  * @rcpi_enabled:
1966*5113495bSYour Name  * @coex_avoid_freq_list:
1967*5113495bSYour Name  * @dnbs_avoid_freq_list:
1968*5113495bSYour Name  * @avoid_freq_lock:  Lock to control access to dnbs and coex avoid freq list
1969*5113495bSYour Name  * @tsf: structure containing tsf related information
1970*5113495bSYour Name  * @bt_a2dp_active:
1971*5113495bSYour Name  * @bt_vo_active:
1972*5113495bSYour Name  * @bt_profile_con:
1973*5113495bSYour Name  * @curr_band:
1974*5113495bSYour Name  * @imps_enabled:
1975*5113495bSYour Name  * @user_configured_pkt_filter_rules:
1976*5113495bSYour Name  * @is_fils_roaming_supported:
1977*5113495bSYour Name  * @receive_offload_cb:
1978*5113495bSYour Name  * @vendor_disable_lro_flag:
1979*5113495bSYour Name  * @force_rsne_override:
1980*5113495bSYour Name  * @monitor_mode_wakelock:
1981*5113495bSYour Name  * @lte_coex_ant_share:
1982*5113495bSYour Name  * @obss_scan_offload:
1983*5113495bSYour Name  * @sscan_pid:
1984*5113495bSYour Name  * @track_arp_ip:
1985*5113495bSYour Name  * @hw_bd_id: defining the board related information
1986*5113495bSYour Name  * @hw_bd_info:
1987*5113495bSYour Name  * @twt_state:
1988*5113495bSYour Name  * @twt_disable_comp_evt:
1989*5113495bSYour Name  * @twt_enable_comp_evt:
1990*5113495bSYour Name  * @apf_version:
1991*5113495bSYour Name  * @apf_enabled_v2:
1992*5113495bSYour Name  * @original_channels:
1993*5113495bSYour Name  * @cache_channel_lock:
1994*5113495bSYour Name  * @sar_version:
1995*5113495bSYour Name  * @dynamic_mac_list:
1996*5113495bSYour Name  * @dynamic_nss_chains_support: Per vdev dynamic nss chains update capability
1997*5113495bSYour Name  * @hw_macaddr:
1998*5113495bSYour Name  * @provisioned_mac_addr:
1999*5113495bSYour Name  * @derived_mac_addr:
2000*5113495bSYour Name  * @num_provisioned_addr:
2001*5113495bSYour Name  * @num_derived_addr:
2002*5113495bSYour Name  * @provisioned_intf_addr_mask:
2003*5113495bSYour Name  * @derived_intf_addr_mask:
2004*5113495bSYour Name  * @sar_cmd_params: SAR command params to be configured to the FW
2005*5113495bSYour Name  * @sar_safety_timer:
2006*5113495bSYour Name  * @sar_safety_unsolicited_work:
2007*5113495bSYour Name  * @sar_safety_req_resp_event:
2008*5113495bSYour Name  * @sar_safety_req_resp_event_in_progress:
2009*5113495bSYour Name  * @runtime_resume_start_time_stamp:
2010*5113495bSYour Name  * @runtime_suspend_done_time_stamp:
2011*5113495bSYour Name  * @pm_qos_req:
2012*5113495bSYour Name  * @qos_cpu_mask: voted cpu core mask
2013*5113495bSYour Name  * @pm_qos_req: pm_qos request for all cpu cores
2014*5113495bSYour Name  * @roam_ch_from_fw_supported:
2015*5113495bSYour Name  * @dutycycle_off_percent:
2016*5113495bSYour Name  * @pm_qos_request_flags:
2017*5113495bSYour Name  * @country_change_work: work for updating vdev when country changes
2018*5113495bSYour Name  * @current_pcie_gen_speed: current pcie gen speed
2019*5113495bSYour Name  * @adapter_ops_wq: High priority workqueue for handling adapter operations
2020*5113495bSYour Name  * @adapter_ops_history:
2021*5113495bSYour Name  * @ll_stats_per_chan_rx_tx_time:
2022*5113495bSYour Name  * @is_get_station_clubbed_in_ll_stats_req:
2023*5113495bSYour Name  * @multi_client_thermal_mitigation: Multi client thermal mitigation by fw
2024*5113495bSYour Name  * @is_dual_mac_cfg_updated: indicate whether dual mac cfg has been updated
2025*5113495bSYour Name  * @is_regulatory_update_in_progress:
2026*5113495bSYour Name  * @regulatory_update_event:
2027*5113495bSYour Name  * @regulatory_status_lock:
2028*5113495bSYour Name  * @is_fw_dbg_log_levels_configured:
2029*5113495bSYour Name  * @twt_en_dis_work: work to send twt enable/disable cmd on MCC/SCC concurrency
2030*5113495bSYour Name  * @is_wifi3_0_target:
2031*5113495bSYour Name  * @dump_in_progress: Stores value of dump in progress
2032*5113495bSYour Name  * @dual_sta_policy: Concurrent STA policy configuration
2033*5113495bSYour Name  * @is_therm_stats_in_progress:
2034*5113495bSYour Name  * @is_vdev_macaddr_dynamic_update_supported:
2035*5113495bSYour Name  * @power_type:
2036*5113495bSYour Name  * @is_wlan_disabled: if wlan is disabled by userspace
2037*5113495bSYour Name  * @oem_data:
2038*5113495bSYour Name  * @oem_data_len:
2039*5113495bSYour Name  * @file_name:
2040*5113495bSYour Name  * @dbam_mode:
2041*5113495bSYour Name  * @last_pagefault_ssr_time: Time when last recovery was triggered because of
2042*5113495bSYour Name  * @host wakeup from fw with reason as pagefault
2043*5113495bSYour Name  * @bridgeaddr: Bridge MAC address
2044*5113495bSYour Name  * @is_mlo_per_link_stats_supported: Per link mlo stats is supported or not
2045*5113495bSYour Name  * @num_mlo_peers: Total number of MLO peers
2046*5113495bSYour Name  * @more_peer_data: more mlo peer data in peer stats
2047*5113495bSYour Name  * @lpc_info: Local packet capture info
2048*5113495bSYour Name  */
2049*5113495bSYour Name struct hdd_context {
2050*5113495bSYour Name 	struct wlan_objmgr_psoc *psoc;
2051*5113495bSYour Name 	struct wlan_objmgr_pdev *pdev;
2052*5113495bSYour Name 	mac_handle_t mac_handle;
2053*5113495bSYour Name 	struct wiphy *wiphy;
2054*5113495bSYour Name 	qdf_spinlock_t hdd_adapter_lock;
2055*5113495bSYour Name 	qdf_list_t hdd_adapters;
2056*5113495bSYour Name 	bool is_therm_cmd_supp;
2057*5113495bSYour Name 	const struct firmware *fw;
2058*5113495bSYour Name 	const struct firmware *cfg;
2059*5113495bSYour Name 	struct device *parent_dev;
2060*5113495bSYour Name 	struct hdd_config *config;
2061*5113495bSYour Name 
2062*5113495bSYour Name 	/* Pointer for wiphy 2G/5G band channels */
2063*5113495bSYour Name 	struct ieee80211_channel *channels_2ghz;
2064*5113495bSYour Name 	struct ieee80211_channel *channels_5ghz;
2065*5113495bSYour Name 
2066*5113495bSYour Name #if defined(WLAN_FEATURE_11AX) && \
2067*5113495bSYour Name 	(defined(CFG80211_SBAND_IFTYPE_DATA_BACKPORT) || \
2068*5113495bSYour Name 	 (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)))
2069*5113495bSYour Name 	struct ieee80211_sband_iftype_data *iftype_data_2g;
2070*5113495bSYour Name 	struct ieee80211_sband_iftype_data *iftype_data_5g;
2071*5113495bSYour Name #if defined(CONFIG_BAND_6GHZ) && (defined(CFG80211_6GHZ_BAND_SUPPORTED) || \
2072*5113495bSYour Name 		(KERNEL_VERSION(5, 4, 0) <= LINUX_VERSION_CODE))
2073*5113495bSYour Name 	struct ieee80211_sband_iftype_data *iftype_data_6g;
2074*5113495bSYour Name #endif
2075*5113495bSYour Name #endif
2076*5113495bSYour Name 	struct completion mc_sus_event_var;
2077*5113495bSYour Name 	bool is_scheduler_suspended;
2078*5113495bSYour Name 
2079*5113495bSYour Name #ifdef WLAN_DP_LEGACY_OL_RX_THREAD
2080*5113495bSYour Name 	bool is_ol_rx_thread_suspended;
2081*5113495bSYour Name #endif
2082*5113495bSYour Name 
2083*5113495bSYour Name 	bool hdd_wlan_suspended;
2084*5113495bSYour Name 	bool suspended;
2085*5113495bSYour Name 	bool is_pktlog_enabled;
2086*5113495bSYour Name 	struct mutex sap_lock;
2087*5113495bSYour Name 
2088*5113495bSYour Name #ifdef FEATURE_OEM_DATA_SUPPORT
2089*5113495bSYour Name 	bool oem_app_registered;
2090*5113495bSYour Name 	int32_t oem_pid;
2091*5113495bSYour Name #endif
2092*5113495bSYour Name 
2093*5113495bSYour Name 	uint32_t concurrency_mode;
2094*5113495bSYour Name 
2095*5113495bSYour Name 	uint8_t no_of_open_sessions[QDF_MAX_NO_OF_MODE];
2096*5113495bSYour Name 	uint8_t no_of_active_sessions[QDF_MAX_NO_OF_MODE];
2097*5113495bSYour Name 	struct qdf_mac_addr p2p_device_address;
2098*5113495bSYour Name 	qdf_wake_lock_t sap_wake_lock;
2099*5113495bSYour Name 	bool is_wiphy_suspended;
2100*5113495bSYour Name 	struct completion ready_to_suspend;
2101*5113495bSYour Name 	uint32_t target_type;
2102*5113495bSYour Name 	uint32_t target_fw_version;
2103*5113495bSYour Name 	uint32_t target_fw_vers_ext;
2104*5113495bSYour Name 	struct hdd_fw_ver_info fw_version_info;
2105*5113495bSYour Name 	uint32_t target_hw_version;
2106*5113495bSYour Name 	uint32_t target_hw_revision;
2107*5113495bSYour Name 	char target_hw_name[MAX_TGT_HW_NAME_LEN];
2108*5113495bSYour Name 	struct regulatory reg;
2109*5113495bSYour Name #ifdef FEATURE_WLAN_CH_AVOID
2110*5113495bSYour Name 	uint16_t unsafe_channel_count;
2111*5113495bSYour Name 	uint16_t unsafe_channel_list[NUM_CHANNELS];
2112*5113495bSYour Name #endif /* FEATURE_WLAN_CH_AVOID */
2113*5113495bSYour Name #ifdef FEATURE_WLAN_CH_AVOID_EXT
2114*5113495bSYour Name 	uint32_t restriction_mask;
2115*5113495bSYour Name #endif
2116*5113495bSYour Name 
2117*5113495bSYour Name 	uint8_t max_intf_count;
2118*5113495bSYour Name #ifdef WLAN_FEATURE_LPSS
2119*5113495bSYour Name 	uint8_t lpss_support;
2120*5113495bSYour Name #endif
2121*5113495bSYour Name 	uint8_t ap_arpns_support;
2122*5113495bSYour Name 	tSirScanType ioctl_scan_mode;
2123*5113495bSYour Name 
2124*5113495bSYour Name #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
2125*5113495bSYour Name 	qdf_work_t sta_ap_intf_check_work;
2126*5113495bSYour Name #endif
2127*5113495bSYour Name 
2128*5113495bSYour Name 	uint8_t dev_dfs_cac_status;
2129*5113495bSYour Name 
2130*5113495bSYour Name 	bool bt_coex_mode_set;
2131*5113495bSYour Name #ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE
2132*5113495bSYour Name 	qdf_mc_timer_t skip_acs_scan_timer;
2133*5113495bSYour Name 	uint8_t skip_acs_scan_status;
2134*5113495bSYour Name 	uint32_t *last_acs_freq_list;
2135*5113495bSYour Name 	uint8_t num_of_channels;
2136*5113495bSYour Name 	qdf_spinlock_t acs_skip_lock;
2137*5113495bSYour Name #endif
2138*5113495bSYour Name 
2139*5113495bSYour Name 	qdf_wake_lock_t sap_dfs_wakelock;
2140*5113495bSYour Name 	atomic_t sap_dfs_ref_cnt;
2141*5113495bSYour Name 
2142*5113495bSYour Name #ifdef WLAN_FEATURE_EXTWOW_SUPPORT
2143*5113495bSYour Name 	bool is_extwow_app_type1_param_set;
2144*5113495bSYour Name 	bool is_extwow_app_type2_param_set;
2145*5113495bSYour Name #endif
2146*5113495bSYour Name 
2147*5113495bSYour Name 	uint64_t ext_scan_start_since_boot;
2148*5113495bSYour Name 	uint8_t miracast_value;
2149*5113495bSYour Name 
2150*5113495bSYour Name #ifdef WLAN_NS_OFFLOAD
2151*5113495bSYour Name 	/* IPv6 notifier callback for handling NS offload on change in IP */
2152*5113495bSYour Name 	struct notifier_block ipv6_notifier;
2153*5113495bSYour Name #endif
2154*5113495bSYour Name 	bool ns_offload_enable;
2155*5113495bSYour Name 	/* IPv4 notifier callback for handling ARP offload on change in IP */
2156*5113495bSYour Name 	struct notifier_block ipv4_notifier;
2157*5113495bSYour Name 
2158*5113495bSYour Name #ifdef FEATURE_RUNTIME_PM
2159*5113495bSYour Name 	struct notifier_block pm_qos_notifier;
2160*5113495bSYour Name 	bool runtime_pm_prevented;
2161*5113495bSYour Name 	qdf_spinlock_t pm_qos_lock;
2162*5113495bSYour Name #endif
2163*5113495bSYour Name 	uint32_t  num_rf_chains;
2164*5113495bSYour Name 	uint8_t   ht_tx_stbc_supported;
2165*5113495bSYour Name #ifdef WLAN_FEATURE_OFFLOAD_PACKETS
2166*5113495bSYour Name 	struct hdd_offloaded_packets_ctx op_ctx;
2167*5113495bSYour Name #endif
2168*5113495bSYour Name 	bool mcc_mode;
2169*5113495bSYour Name 	struct mutex memdump_lock;
2170*5113495bSYour Name 	uint16_t driver_dump_size;
2171*5113495bSYour Name 	uint8_t *driver_dump_mem;
2172*5113495bSYour Name 
2173*5113495bSYour Name 	bool connection_in_progress;
2174*5113495bSYour Name 	qdf_spinlock_t connection_status_lock;
2175*5113495bSYour Name 
2176*5113495bSYour Name 	uint32_t fine_time_meas_cap_target;
2177*5113495bSYour Name 	enum antenna_mode current_antenna_mode;
2178*5113495bSYour Name 
2179*5113495bSYour Name 	int radio_index;
2180*5113495bSYour Name 	bool hbw_requested;
2181*5113495bSYour Name 	bool pm_qos_request;
2182*5113495bSYour Name #ifdef WLAN_FEATURE_NAN
2183*5113495bSYour Name 	bool nan_datapath_enabled;
2184*5113495bSYour Name #endif
2185*5113495bSYour Name 	enum driver_modules_status driver_status;
2186*5113495bSYour Name 	struct qdf_delayed_work psoc_idle_timeout_work;
2187*5113495bSYour Name 	struct notifier_block pm_notifier;
2188*5113495bSYour Name 	struct acs_dfs_policy acs_policy;
2189*5113495bSYour Name 	uint16_t wmi_max_len;
2190*5113495bSYour Name 	struct suspend_resume_stats suspend_resume_stats;
2191*5113495bSYour Name 	struct hdd_runtime_pm_context runtime_context;
2192*5113495bSYour Name 	struct scan_chan_info *chan_info;
2193*5113495bSYour Name 	struct mutex chan_info_lock;
2194*5113495bSYour Name 	unsigned long tdls_source_bitmap;
2195*5113495bSYour Name 	bool tdls_umac_comp_active;
2196*5113495bSYour Name 	bool tdls_nap_active;
2197*5113495bSYour Name 	uint8_t beacon_probe_rsp_cnt_per_scan;
2198*5113495bSYour Name 	uint8_t last_scan_reject_vdev_id;
2199*5113495bSYour Name 	enum scan_reject_states last_scan_reject_reason;
2200*5113495bSYour Name 	unsigned long last_scan_reject_timestamp;
2201*5113495bSYour Name 	uint8_t scan_reject_cnt;
2202*5113495bSYour Name 	bool dfs_cac_offload;
2203*5113495bSYour Name 	bool reg_offload;
2204*5113495bSYour Name 	bool rcpi_enabled;
2205*5113495bSYour Name #ifdef FEATURE_WLAN_CH_AVOID
2206*5113495bSYour Name 	struct ch_avoid_ind_type coex_avoid_freq_list;
2207*5113495bSYour Name 	struct ch_avoid_ind_type dnbs_avoid_freq_list;
2208*5113495bSYour Name 	/* Lock to control access to dnbs and coex avoid freq list */
2209*5113495bSYour Name 	struct mutex avoid_freq_lock;
2210*5113495bSYour Name #endif
2211*5113495bSYour Name #ifdef WLAN_FEATURE_TSF
2212*5113495bSYour Name 	struct hdd_ctx_tsf tsf;
2213*5113495bSYour Name #endif
2214*5113495bSYour Name 
2215*5113495bSYour Name 	uint8_t bt_a2dp_active:1;
2216*5113495bSYour Name 	uint8_t bt_vo_active:1;
2217*5113495bSYour Name 	uint8_t bt_profile_con:1;
2218*5113495bSYour Name 	enum band_info curr_band;
2219*5113495bSYour Name 	bool imps_enabled;
2220*5113495bSYour Name #ifdef WLAN_FEATURE_PACKET_FILTERING
2221*5113495bSYour Name 	int user_configured_pkt_filter_rules;
2222*5113495bSYour Name #endif
2223*5113495bSYour Name 	bool is_fils_roaming_supported;
2224*5113495bSYour Name 	QDF_STATUS (*receive_offload_cb)(struct hdd_adapter *,
2225*5113495bSYour Name 					 struct sk_buff *);
2226*5113495bSYour Name 	qdf_atomic_t vendor_disable_lro_flag;
2227*5113495bSYour Name 	bool force_rsne_override;
2228*5113495bSYour Name 	qdf_wake_lock_t monitor_mode_wakelock;
2229*5113495bSYour Name 	bool lte_coex_ant_share;
2230*5113495bSYour Name 	bool obss_scan_offload;
2231*5113495bSYour Name 	int sscan_pid;
2232*5113495bSYour Name 	uint32_t track_arp_ip;
2233*5113495bSYour Name 
2234*5113495bSYour Name 	/* defining the board related information */
2235*5113495bSYour Name 	uint32_t hw_bd_id;
2236*5113495bSYour Name 	struct board_info hw_bd_info;
2237*5113495bSYour Name #ifdef WLAN_SUPPORT_TWT
2238*5113495bSYour Name 	enum twt_status twt_state;
2239*5113495bSYour Name 	qdf_event_t twt_disable_comp_evt;
2240*5113495bSYour Name 	qdf_event_t twt_enable_comp_evt;
2241*5113495bSYour Name #endif
2242*5113495bSYour Name #ifdef FEATURE_WLAN_APF
2243*5113495bSYour Name 	uint32_t apf_version;
2244*5113495bSYour Name 	bool apf_enabled_v2;
2245*5113495bSYour Name #endif
2246*5113495bSYour Name 
2247*5113495bSYour Name #ifdef DISABLE_CHANNEL_LIST
2248*5113495bSYour Name 	struct hdd_cache_channels *original_channels;
2249*5113495bSYour Name 	qdf_mutex_t cache_channel_lock;
2250*5113495bSYour Name #endif
2251*5113495bSYour Name 	enum sar_version sar_version;
2252*5113495bSYour Name 	struct hdd_dynamic_mac dynamic_mac_list[QDF_MAX_CONCURRENCY_PERSONA];
2253*5113495bSYour Name 	bool dynamic_nss_chains_support;
2254*5113495bSYour Name 	struct qdf_mac_addr hw_macaddr;
2255*5113495bSYour Name 	struct qdf_mac_addr provisioned_mac_addr[QDF_MAX_CONCURRENCY_PERSONA];
2256*5113495bSYour Name 	struct qdf_mac_addr derived_mac_addr[QDF_MAX_CONCURRENCY_PERSONA];
2257*5113495bSYour Name 	uint32_t num_provisioned_addr;
2258*5113495bSYour Name 	uint32_t num_derived_addr;
2259*5113495bSYour Name 	unsigned long provisioned_intf_addr_mask;
2260*5113495bSYour Name 	unsigned long derived_intf_addr_mask;
2261*5113495bSYour Name 
2262*5113495bSYour Name 	struct sar_limit_cmd_params *sar_cmd_params;
2263*5113495bSYour Name #ifdef SAR_SAFETY_FEATURE
2264*5113495bSYour Name 	qdf_mc_timer_t sar_safety_timer;
2265*5113495bSYour Name 	struct qdf_delayed_work sar_safety_unsolicited_work;
2266*5113495bSYour Name 	qdf_event_t sar_safety_req_resp_event;
2267*5113495bSYour Name 	qdf_atomic_t sar_safety_req_resp_event_in_progress;
2268*5113495bSYour Name #endif
2269*5113495bSYour Name 
2270*5113495bSYour Name 	qdf_time_t runtime_resume_start_time_stamp;
2271*5113495bSYour Name 	qdf_time_t runtime_suspend_done_time_stamp;
2272*5113495bSYour Name #if defined(CLD_PM_QOS) && defined(CLD_DEV_PM_QOS)
2273*5113495bSYour Name 	struct dev_pm_qos_request pm_qos_req[NR_CPUS];
2274*5113495bSYour Name 	struct cpumask qos_cpu_mask;
2275*5113495bSYour Name #elif defined(CLD_PM_QOS)
2276*5113495bSYour Name 	struct pm_qos_request pm_qos_req;
2277*5113495bSYour Name #endif
2278*5113495bSYour Name 	bool roam_ch_from_fw_supported;
2279*5113495bSYour Name #ifdef FW_THERMAL_THROTTLE_SUPPORT
2280*5113495bSYour Name 	uint8_t dutycycle_off_percent;
2281*5113495bSYour Name #endif
2282*5113495bSYour Name 	uint8_t pm_qos_request_flags;
2283*5113495bSYour Name 	qdf_work_t country_change_work;
2284*5113495bSYour Name 	int current_pcie_gen_speed;
2285*5113495bSYour Name 	qdf_workqueue_t *adapter_ops_wq;
2286*5113495bSYour Name 	struct hdd_adapter_ops_history adapter_ops_history;
2287*5113495bSYour Name 	bool ll_stats_per_chan_rx_tx_time;
2288*5113495bSYour Name #ifdef FEATURE_CLUB_LL_STATS_AND_GET_STATION
2289*5113495bSYour Name 	bool is_get_station_clubbed_in_ll_stats_req;
2290*5113495bSYour Name #endif
2291*5113495bSYour Name #ifdef FEATURE_WPSS_THERMAL_MITIGATION
2292*5113495bSYour Name 	bool multi_client_thermal_mitigation;
2293*5113495bSYour Name #endif
2294*5113495bSYour Name 	bool is_dual_mac_cfg_updated;
2295*5113495bSYour Name 	bool is_regulatory_update_in_progress;
2296*5113495bSYour Name 	qdf_event_t regulatory_update_event;
2297*5113495bSYour Name 	qdf_mutex_t regulatory_status_lock;
2298*5113495bSYour Name 	bool is_fw_dbg_log_levels_configured;
2299*5113495bSYour Name #ifdef WLAN_SUPPORT_TWT
2300*5113495bSYour Name 	qdf_work_t twt_en_dis_work;
2301*5113495bSYour Name #endif
2302*5113495bSYour Name 	bool is_wifi3_0_target;
2303*5113495bSYour Name 	bool dump_in_progress;
2304*5113495bSYour Name 	struct hdd_dual_sta_policy dual_sta_policy;
2305*5113495bSYour Name #ifdef THERMAL_STATS_SUPPORT
2306*5113495bSYour Name 	bool is_therm_stats_in_progress;
2307*5113495bSYour Name #endif
2308*5113495bSYour Name #ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
2309*5113495bSYour Name 	bool is_vdev_macaddr_dynamic_update_supported;
2310*5113495bSYour Name #endif
2311*5113495bSYour Name #ifdef CONFIG_WLAN_FREQ_LIST
2312*5113495bSYour Name 	uint8_t power_type;
2313*5113495bSYour Name #endif
2314*5113495bSYour Name 	bool is_wlan_disabled;
2315*5113495bSYour Name 
2316*5113495bSYour Name 	uint8_t oem_data[HDD_MAX_OEM_DATA_LEN];
2317*5113495bSYour Name 	uint8_t oem_data_len;
2318*5113495bSYour Name 	uint8_t file_name[HDD_MAX_FILE_NAME_LEN];
2319*5113495bSYour Name #ifdef WLAN_FEATURE_DBAM_CONFIG
2320*5113495bSYour Name 	enum coex_dbam_config_mode dbam_mode;
2321*5113495bSYour Name #endif
2322*5113495bSYour Name 	qdf_time_t last_pagefault_ssr_time;
2323*5113495bSYour Name 	uint8_t bridgeaddr[QDF_MAC_ADDR_SIZE];
2324*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
2325*5113495bSYour Name 	bool is_mlo_per_link_stats_supported;
2326*5113495bSYour Name 	uint8_t num_mlo_peers;
2327*5113495bSYour Name 	uint32_t more_peer_data;
2328*5113495bSYour Name #endif
2329*5113495bSYour Name #ifdef WLAN_FEATURE_LOCAL_PKT_CAPTURE
2330*5113495bSYour Name 	struct hdd_lpc_info lpc_info;
2331*5113495bSYour Name #endif
2332*5113495bSYour Name };
2333*5113495bSYour Name 
2334*5113495bSYour Name /**
2335*5113495bSYour Name  * struct hdd_vendor_acs_chan_params - vendor acs channel parameters
2336*5113495bSYour Name  * @pcl_count: pcl list count
2337*5113495bSYour Name  * @vendor_pcl_list: pointer to pcl frequency (MHz) list
2338*5113495bSYour Name  * @vendor_weight_list: pointer to pcl weight list
2339*5113495bSYour Name  */
2340*5113495bSYour Name struct hdd_vendor_acs_chan_params {
2341*5113495bSYour Name 	uint32_t pcl_count;
2342*5113495bSYour Name 	uint32_t *vendor_pcl_list;
2343*5113495bSYour Name 	uint8_t *vendor_weight_list;
2344*5113495bSYour Name };
2345*5113495bSYour Name 
2346*5113495bSYour Name /**
2347*5113495bSYour Name  * struct hdd_external_acs_timer_context - acs timer context
2348*5113495bSYour Name  * @reason: reason for acs trigger
2349*5113495bSYour Name  * @adapter: hdd adapter for acs
2350*5113495bSYour Name  */
2351*5113495bSYour Name struct hdd_external_acs_timer_context {
2352*5113495bSYour Name 	int8_t reason;
2353*5113495bSYour Name 	struct hdd_adapter *adapter;
2354*5113495bSYour Name };
2355*5113495bSYour Name 
2356*5113495bSYour Name /**
2357*5113495bSYour Name  * struct hdd_vendor_chan_info - vendor channel info
2358*5113495bSYour Name  * @band: channel operating band
2359*5113495bSYour Name  * @pri_chan_freq: primary channel freq in MHz
2360*5113495bSYour Name  * @ht_sec_chan_freq: secondary channel freq in MHz
2361*5113495bSYour Name  * @vht_seg0_center_chan_freq: segment0 for vht in MHz
2362*5113495bSYour Name  * @vht_seg1_center_chan_freq: vht segment 1 in MHz
2363*5113495bSYour Name  * @chan_width: channel width
2364*5113495bSYour Name  */
2365*5113495bSYour Name struct hdd_vendor_chan_info {
2366*5113495bSYour Name 	uint8_t band;
2367*5113495bSYour Name 	uint32_t pri_chan_freq;
2368*5113495bSYour Name 	uint32_t ht_sec_chan_freq;
2369*5113495bSYour Name 	uint32_t vht_seg0_center_chan_freq;
2370*5113495bSYour Name 	uint32_t vht_seg1_center_chan_freq;
2371*5113495bSYour Name 	uint8_t chan_width;
2372*5113495bSYour Name };
2373*5113495bSYour Name 
2374*5113495bSYour Name /**
2375*5113495bSYour Name  * struct  hdd_channel_info - standard channel info
2376*5113495bSYour Name  * @freq: Freq in Mhz
2377*5113495bSYour Name  * @flags: channel info flags
2378*5113495bSYour Name  * @flagext: extended channel info flags
2379*5113495bSYour Name  * @ieee_chan_number: channel number
2380*5113495bSYour Name  * @max_reg_power: max tx power according to regulatory
2381*5113495bSYour Name  * @max_radio_power: max radio power
2382*5113495bSYour Name  * @min_radio_power: min radio power
2383*5113495bSYour Name  * @reg_class_id: regulatory class
2384*5113495bSYour Name  * @max_antenna_gain: max antenna gain allowed on channel
2385*5113495bSYour Name  * @vht_center_freq_seg0: vht center freq segment 0
2386*5113495bSYour Name  * @vht_center_freq_seg1: vht center freq segment 1
2387*5113495bSYour Name  */
2388*5113495bSYour Name struct hdd_channel_info {
2389*5113495bSYour Name 	u_int16_t freq;
2390*5113495bSYour Name 	u_int32_t flags;
2391*5113495bSYour Name 	u_int16_t flagext;
2392*5113495bSYour Name 	u_int8_t ieee_chan_number;
2393*5113495bSYour Name 	int8_t max_reg_power;
2394*5113495bSYour Name 	int8_t max_radio_power;
2395*5113495bSYour Name 	int8_t min_radio_power;
2396*5113495bSYour Name 	u_int8_t reg_class_id;
2397*5113495bSYour Name 	u_int8_t max_antenna_gain;
2398*5113495bSYour Name 	u_int8_t vht_center_freq_seg0;
2399*5113495bSYour Name 	u_int8_t vht_center_freq_seg1;
2400*5113495bSYour Name };
2401*5113495bSYour Name 
2402*5113495bSYour Name /**
2403*5113495bSYour Name  * struct hdd_chwidth_info - channel width related info
2404*5113495bSYour Name  * @sir_chwidth_valid: If nl_chan_width is valid in Sir
2405*5113495bSYour Name  * @sir_chwidth: enum eSirMacHTChannelWidth
2406*5113495bSYour Name  * @ch_bw: enum hw_mode_bandwidth
2407*5113495bSYour Name  * @ch_bw_str: ch_bw in string format
2408*5113495bSYour Name  * @phy_chwidth: enum phy_ch_width
2409*5113495bSYour Name  * @bonding_mode: WNI_CFG_CHANNEL_BONDING_MODE_DISABLE or
2410*5113495bSYour Name  *		  WNI_CFG_CHANNEL_BONDING_MODE_ENABLE
2411*5113495bSYour Name  */
2412*5113495bSYour Name struct hdd_chwidth_info {
2413*5113495bSYour Name 	bool sir_chwidth_valid;
2414*5113495bSYour Name 	enum eSirMacHTChannelWidth sir_chwidth;
2415*5113495bSYour Name 	enum hw_mode_bandwidth ch_bw;
2416*5113495bSYour Name 	char *ch_bw_str;
2417*5113495bSYour Name 	enum phy_ch_width phy_chwidth;
2418*5113495bSYour Name 	int bonding_mode;
2419*5113495bSYour Name };
2420*5113495bSYour Name 
2421*5113495bSYour Name /**
2422*5113495bSYour Name  * struct mac_addr_set_priv: Set MAC addr private context
2423*5113495bSYour Name  * @fw_resp_status: F/W response status
2424*5113495bSYour Name  * @pending_rsp_cnt: Pending response count
2425*5113495bSYour Name  */
2426*5113495bSYour Name struct mac_addr_set_priv {
2427*5113495bSYour Name 	uint32_t fw_resp_status;
2428*5113495bSYour Name 	qdf_atomic_t pending_rsp_cnt;
2429*5113495bSYour Name };
2430*5113495bSYour Name 
2431*5113495bSYour Name /*
2432*5113495bSYour Name  * Function declarations and documentation
2433*5113495bSYour Name  */
2434*5113495bSYour Name 
2435*5113495bSYour Name /**
2436*5113495bSYour Name  * wlan_hdd_history_get_next_index() - get next index to store the history
2437*5113495bSYour Name  *				       entry
2438*5113495bSYour Name  * @curr_idx: current index
2439*5113495bSYour Name  * @max_entries: max entries in the history
2440*5113495bSYour Name  *
2441*5113495bSYour Name  * Returns: The index at which record is to be stored in history
2442*5113495bSYour Name  */
wlan_hdd_history_get_next_index(qdf_atomic_t * curr_idx,uint32_t max_entries)2443*5113495bSYour Name static inline uint32_t wlan_hdd_history_get_next_index(qdf_atomic_t *curr_idx,
2444*5113495bSYour Name 						       uint32_t max_entries)
2445*5113495bSYour Name {
2446*5113495bSYour Name 	uint32_t idx = qdf_atomic_inc_return(curr_idx);
2447*5113495bSYour Name 
2448*5113495bSYour Name 	return idx & (max_entries - 1);
2449*5113495bSYour Name }
2450*5113495bSYour Name 
2451*5113495bSYour Name /**
2452*5113495bSYour Name  * hdd_adapter_ops_record_event() - record an entry in the adapter ops history
2453*5113495bSYour Name  * @hdd_ctx: pointer to hdd context
2454*5113495bSYour Name  * @event: event
2455*5113495bSYour Name  * @vdev_id: vdev id corresponding to event
2456*5113495bSYour Name  *
2457*5113495bSYour Name  * Returns: None
2458*5113495bSYour Name  */
2459*5113495bSYour Name static inline void
hdd_adapter_ops_record_event(struct hdd_context * hdd_ctx,enum hdd_adapter_ops_event event,int vdev_id)2460*5113495bSYour Name hdd_adapter_ops_record_event(struct hdd_context *hdd_ctx,
2461*5113495bSYour Name 			     enum hdd_adapter_ops_event event,
2462*5113495bSYour Name 			     int vdev_id)
2463*5113495bSYour Name {
2464*5113495bSYour Name 	struct hdd_adapter_ops_history *adapter_hist;
2465*5113495bSYour Name 	struct hdd_adapter_ops_record *record;
2466*5113495bSYour Name 	uint32_t idx;
2467*5113495bSYour Name 
2468*5113495bSYour Name 	adapter_hist = &hdd_ctx->adapter_ops_history;
2469*5113495bSYour Name 
2470*5113495bSYour Name 	idx = wlan_hdd_history_get_next_index(&adapter_hist->index,
2471*5113495bSYour Name 					      WLAN_HDD_ADAPTER_OPS_HISTORY_MAX);
2472*5113495bSYour Name 
2473*5113495bSYour Name 	record = &adapter_hist->entry[idx];
2474*5113495bSYour Name 	record->event = event;
2475*5113495bSYour Name 	record->vdev_id = vdev_id;
2476*5113495bSYour Name 	record->timestamp = qdf_get_log_timestamp();
2477*5113495bSYour Name }
2478*5113495bSYour Name 
2479*5113495bSYour Name /**
2480*5113495bSYour Name  * hdd_validate_channel_and_bandwidth() - Validate the channel-bandwidth combo
2481*5113495bSYour Name  * @adapter: HDD adapter
2482*5113495bSYour Name  * @chan_freq: Channel frequency
2483*5113495bSYour Name  * @chan_bw: Bandwidth
2484*5113495bSYour Name  *
2485*5113495bSYour Name  * Checks if the given bandwidth is valid for the given channel number.
2486*5113495bSYour Name  *
2487*5113495bSYour Name  * Return: 0 for success, non-zero for failure
2488*5113495bSYour Name  */
2489*5113495bSYour Name int hdd_validate_channel_and_bandwidth(struct hdd_adapter *adapter,
2490*5113495bSYour Name 				       qdf_freq_t chan_freq,
2491*5113495bSYour Name 				       enum phy_ch_width chan_bw);
2492*5113495bSYour Name 
2493*5113495bSYour Name /**
2494*5113495bSYour Name  * hdd_get_front_adapter() - Get the first adapter from the adapter list
2495*5113495bSYour Name  * @hdd_ctx: pointer to the HDD context
2496*5113495bSYour Name  * @out_adapter: double pointer to pass the next adapter
2497*5113495bSYour Name  *
2498*5113495bSYour Name  * Return: QDF_STATUS
2499*5113495bSYour Name  */
2500*5113495bSYour Name QDF_STATUS hdd_get_front_adapter(struct hdd_context *hdd_ctx,
2501*5113495bSYour Name 				 struct hdd_adapter **out_adapter);
2502*5113495bSYour Name 
2503*5113495bSYour Name /**
2504*5113495bSYour Name  * hdd_get_next_adapter() - Get the next adapter from the adapter list
2505*5113495bSYour Name  * @hdd_ctx: pointer to the HDD context
2506*5113495bSYour Name  * @current_adapter: pointer to the current adapter
2507*5113495bSYour Name  * @out_adapter: double pointer to pass the next adapter
2508*5113495bSYour Name  *
2509*5113495bSYour Name  * Return: QDF_STATUS
2510*5113495bSYour Name  */
2511*5113495bSYour Name QDF_STATUS hdd_get_next_adapter(struct hdd_context *hdd_ctx,
2512*5113495bSYour Name 				struct hdd_adapter *current_adapter,
2513*5113495bSYour Name 				struct hdd_adapter **out_adapter);
2514*5113495bSYour Name 
2515*5113495bSYour Name /**
2516*5113495bSYour Name  * hdd_get_front_adapter_no_lock() - Get the first adapter from the adapter list
2517*5113495bSYour Name  * This API does not use any lock in it's implementation. It is the caller's
2518*5113495bSYour Name  * directive to ensure concurrency safety.
2519*5113495bSYour Name  * @hdd_ctx: pointer to the HDD context
2520*5113495bSYour Name  * @out_adapter: double pointer to pass the next adapter
2521*5113495bSYour Name  *
2522*5113495bSYour Name  * Return: QDF_STATUS
2523*5113495bSYour Name  */
2524*5113495bSYour Name QDF_STATUS hdd_get_front_adapter_no_lock(struct hdd_context *hdd_ctx,
2525*5113495bSYour Name 					 struct hdd_adapter **out_adapter);
2526*5113495bSYour Name 
2527*5113495bSYour Name /**
2528*5113495bSYour Name  * hdd_get_next_adapter_no_lock() - Get the next adapter from the adapter list
2529*5113495bSYour Name  * This API does not use any lock in it's implementation. It is the caller's
2530*5113495bSYour Name  * directive to ensure concurrency safety.
2531*5113495bSYour Name  * @hdd_ctx: pointer to the HDD context
2532*5113495bSYour Name  * @current_adapter: pointer to the current adapter
2533*5113495bSYour Name  * @out_adapter: double pointer to pass the next adapter
2534*5113495bSYour Name  *
2535*5113495bSYour Name  * Return: QDF_STATUS
2536*5113495bSYour Name  */
2537*5113495bSYour Name QDF_STATUS hdd_get_next_adapter_no_lock(struct hdd_context *hdd_ctx,
2538*5113495bSYour Name 					struct hdd_adapter *current_adapter,
2539*5113495bSYour Name 					struct hdd_adapter **out_adapter);
2540*5113495bSYour Name 
2541*5113495bSYour Name /**
2542*5113495bSYour Name  * hdd_remove_adapter() - Remove the adapter from the adapter list
2543*5113495bSYour Name  * @hdd_ctx: pointer to the HDD context
2544*5113495bSYour Name  * @adapter: pointer to the adapter to be removed
2545*5113495bSYour Name  *
2546*5113495bSYour Name  * Return: QDF_STATUS
2547*5113495bSYour Name  */
2548*5113495bSYour Name QDF_STATUS hdd_remove_adapter(struct hdd_context *hdd_ctx,
2549*5113495bSYour Name 			      struct hdd_adapter *adapter);
2550*5113495bSYour Name 
2551*5113495bSYour Name /**
2552*5113495bSYour Name  * hdd_remove_front_adapter() - Remove the first adapter from the adapter list
2553*5113495bSYour Name  * @hdd_ctx: pointer to the HDD context
2554*5113495bSYour Name  * @out_adapter: pointer to the adapter to be removed
2555*5113495bSYour Name  *
2556*5113495bSYour Name  * Return: QDF_STATUS
2557*5113495bSYour Name  */
2558*5113495bSYour Name QDF_STATUS hdd_remove_front_adapter(struct hdd_context *hdd_ctx,
2559*5113495bSYour Name 				    struct hdd_adapter **out_adapter);
2560*5113495bSYour Name 
2561*5113495bSYour Name /**
2562*5113495bSYour Name  * hdd_add_adapter_back() - Add an adapter to the adapter list
2563*5113495bSYour Name  * @hdd_ctx: pointer to the HDD context
2564*5113495bSYour Name  * @adapter: pointer to the adapter to be added
2565*5113495bSYour Name  *
2566*5113495bSYour Name  * Return: QDF_STATUS
2567*5113495bSYour Name  */
2568*5113495bSYour Name QDF_STATUS hdd_add_adapter_back(struct hdd_context *hdd_ctx,
2569*5113495bSYour Name 				struct hdd_adapter *adapter);
2570*5113495bSYour Name 
2571*5113495bSYour Name /**
2572*5113495bSYour Name  * hdd_add_adapter_front() - Add an adapter to the head of the adapter list
2573*5113495bSYour Name  * @hdd_ctx: pointer to the HDD context
2574*5113495bSYour Name  * @adapter: pointer to the adapter to be added
2575*5113495bSYour Name  *
2576*5113495bSYour Name  * Return: QDF_STATUS
2577*5113495bSYour Name  */
2578*5113495bSYour Name QDF_STATUS hdd_add_adapter_front(struct hdd_context *hdd_ctx,
2579*5113495bSYour Name 				 struct hdd_adapter *adapter);
2580*5113495bSYour Name 
2581*5113495bSYour Name /**
2582*5113495bSYour Name  * typedef hdd_adapter_iterate_cb() - Iteration callback function
2583*5113495bSYour Name  * @link_info: Link info pointer in HDD adapter
2584*5113495bSYour Name  * @context: user context supplied to the iterator
2585*5113495bSYour Name  *
2586*5113495bSYour Name  * This specifies the type of a callback function to supply to
2587*5113495bSYour Name  * hdd_adapter_iterate().
2588*5113495bSYour Name  *
2589*5113495bSYour Name  * Return:
2590*5113495bSYour Name  * * QDF_STATUS_SUCCESS if further iteration should continue
2591*5113495bSYour Name  * * QDF_STATUS_E_ABORTED if further iteration should be aborted
2592*5113495bSYour Name  */
2593*5113495bSYour Name typedef QDF_STATUS
2594*5113495bSYour Name (*hdd_adapter_iterate_cb)(struct wlan_hdd_link_info *link_info, void *context);
2595*5113495bSYour Name 
2596*5113495bSYour Name /**
2597*5113495bSYour Name  * hdd_adapter_iterate() - Safely iterate over all adapters
2598*5113495bSYour Name  * @cb: callback function to invoke for each adapter
2599*5113495bSYour Name  * @context: user-supplied context to pass to @cb
2600*5113495bSYour Name  *
2601*5113495bSYour Name  * This function will iterate over all of the adapters known to the system in
2602*5113495bSYour Name  * a safe manner, invoking the callback function for each adapter.
2603*5113495bSYour Name  * The callback function will be invoked in the same context/thread as the
2604*5113495bSYour Name  * caller without any additional locks in force.
2605*5113495bSYour Name  * Iteration continues until either the callback has been invoked for all
2606*5113495bSYour Name  * adapters or a callback returns a value of QDF_STATUS_E_ABORTED to indicate
2607*5113495bSYour Name  * that further iteration should cease.
2608*5113495bSYour Name  *
2609*5113495bSYour Name  * Return:
2610*5113495bSYour Name  * * QDF_STATUS_E_ABORTED if any callback function returns that value
2611*5113495bSYour Name  * * QDF_STATUS_E_FAILURE if the callback was not invoked for all adapters due
2612*5113495bSYour Name  * to concurrency (i.e. adapter was deleted while iterating)
2613*5113495bSYour Name  * * QDF_STATUS_SUCCESS if @cb was invoked for each adapter and none returned
2614*5113495bSYour Name  * an error
2615*5113495bSYour Name  */
2616*5113495bSYour Name QDF_STATUS hdd_adapter_iterate(hdd_adapter_iterate_cb cb,
2617*5113495bSYour Name 			       void *context);
2618*5113495bSYour Name 
2619*5113495bSYour Name /**
2620*5113495bSYour Name  * hdd_adapter_dev_hold_debug - Debug API to call dev_hold
2621*5113495bSYour Name  * @adapter: hdd_adapter pointer
2622*5113495bSYour Name  * @dbgid: Debug ID corresponding to API that is requesting the dev_hold
2623*5113495bSYour Name  *
2624*5113495bSYour Name  * Return: none
2625*5113495bSYour Name  */
2626*5113495bSYour Name void hdd_adapter_dev_hold_debug(struct hdd_adapter *adapter,
2627*5113495bSYour Name 				wlan_net_dev_ref_dbgid dbgid);
2628*5113495bSYour Name 
2629*5113495bSYour Name /**
2630*5113495bSYour Name  * hdd_adapter_dev_put_debug - Debug API to call dev_put
2631*5113495bSYour Name  * @adapter: hdd_adapter pointer
2632*5113495bSYour Name  * @dbgid: Debug ID corresponding to API that is requesting the dev_put
2633*5113495bSYour Name  *
2634*5113495bSYour Name  * Return: none
2635*5113495bSYour Name  */
2636*5113495bSYour Name void hdd_adapter_dev_put_debug(struct hdd_adapter *adapter,
2637*5113495bSYour Name 			       wlan_net_dev_ref_dbgid dbgid);
2638*5113495bSYour Name 
2639*5113495bSYour Name /**
2640*5113495bSYour Name  * hdd_validate_next_adapter - API to check for infinite loop
2641*5113495bSYour Name  *                             in the adapter list traversal
2642*5113495bSYour Name  * @curr: current adapter pointer
2643*5113495bSYour Name  * @next: next adapter pointer
2644*5113495bSYour Name  * @dbg_id: Debug ID corresponding to API that is requesting the dev_put
2645*5113495bSYour Name  *
2646*5113495bSYour Name  * Return: None
2647*5113495bSYour Name  */
2648*5113495bSYour Name void hdd_validate_next_adapter(struct hdd_adapter **curr,
2649*5113495bSYour Name 			       struct hdd_adapter **next,
2650*5113495bSYour Name 			       wlan_net_dev_ref_dbgid dbg_id);
2651*5113495bSYour Name 
2652*5113495bSYour Name /**
2653*5113495bSYour Name  * __hdd_take_ref_and_fetch_front_adapter_safe - Helper macro to lock, fetch
2654*5113495bSYour Name  * front and next adapters, take ref and unlock.
2655*5113495bSYour Name  * @hdd_ctx: the global HDD context
2656*5113495bSYour Name  * @adapter: an hdd_adapter pointer to use as a cursor
2657*5113495bSYour Name  * @next_adapter: hdd_adapter pointer to next adapter
2658*5113495bSYour Name  * @dbgid: debug ID to detect reference leaks
2659*5113495bSYour Name  */
2660*5113495bSYour Name #define __hdd_take_ref_and_fetch_front_adapter_safe(hdd_ctx, adapter, \
2661*5113495bSYour Name 						    next_adapter, dbgid) \
2662*5113495bSYour Name 	qdf_spin_lock_bh(&hdd_ctx->hdd_adapter_lock), \
2663*5113495bSYour Name 	hdd_get_front_adapter_no_lock(hdd_ctx, &adapter), \
2664*5113495bSYour Name 	(adapter) ? hdd_adapter_dev_hold_debug(adapter, dbgid) : (false), \
2665*5113495bSYour Name 	hdd_get_next_adapter_no_lock(hdd_ctx, adapter, &next_adapter), \
2666*5113495bSYour Name 	(next_adapter) ? hdd_adapter_dev_hold_debug(next_adapter, dbgid) : \
2667*5113495bSYour Name 			 (false), \
2668*5113495bSYour Name 	qdf_spin_unlock_bh(&hdd_ctx->hdd_adapter_lock)
2669*5113495bSYour Name 
2670*5113495bSYour Name /**
2671*5113495bSYour Name  * __hdd_take_ref_and_fetch_next_adapter_safe - Helper macro to lock, fetch next
2672*5113495bSYour Name  * adapter, take ref and unlock.
2673*5113495bSYour Name  * @hdd_ctx: the global HDD context
2674*5113495bSYour Name  * @adapter: hdd_adapter pointer to use as a cursor
2675*5113495bSYour Name  * @next_adapter: hdd_adapter pointer to next adapter
2676*5113495bSYour Name  * @dbgid: debug ID to detect reference leaks
2677*5113495bSYour Name  */
2678*5113495bSYour Name #define __hdd_take_ref_and_fetch_next_adapter_safe(hdd_ctx, adapter, \
2679*5113495bSYour Name 						   next_adapter, dbgid) \
2680*5113495bSYour Name 	qdf_spin_lock_bh(&hdd_ctx->hdd_adapter_lock), \
2681*5113495bSYour Name 	adapter = next_adapter, \
2682*5113495bSYour Name 	hdd_get_next_adapter_no_lock(hdd_ctx, adapter, &next_adapter), \
2683*5113495bSYour Name 	hdd_validate_next_adapter(&adapter, &next_adapter, dbgid), \
2684*5113495bSYour Name 	(next_adapter) ? hdd_adapter_dev_hold_debug(next_adapter, dbgid) : \
2685*5113495bSYour Name 			 (false), \
2686*5113495bSYour Name 	qdf_spin_unlock_bh(&hdd_ctx->hdd_adapter_lock)
2687*5113495bSYour Name 
2688*5113495bSYour Name /**
2689*5113495bSYour Name  * __hdd_is_adapter_valid - Helper macro to return true/false for valid adapter.
2690*5113495bSYour Name  * @_adapter: an hdd_adapter pointer to use as a cursor
2691*5113495bSYour Name  */
2692*5113495bSYour Name #define __hdd_is_adapter_valid(_adapter) !!_adapter
2693*5113495bSYour Name 
2694*5113495bSYour Name /**
2695*5113495bSYour Name  * hdd_for_each_adapter_dev_held_safe - Adapter iterator with dev_hold called
2696*5113495bSYour Name  *                                      in a delete safe manner
2697*5113495bSYour Name  * @hdd_ctx: the global HDD context
2698*5113495bSYour Name  * @adapter: an hdd_adapter pointer to use as a cursor
2699*5113495bSYour Name  * @next_adapter: hdd_adapter pointer to the next adapter
2700*5113495bSYour Name  * @dbgid: reference count debugging id
2701*5113495bSYour Name  *
2702*5113495bSYour Name  * This iterator will take the reference of the netdev associated with the
2703*5113495bSYour Name  * given adapter so as to prevent it from being removed in other context. It
2704*5113495bSYour Name  * also takes the reference of the next adapter if exist. This avoids infinite
2705*5113495bSYour Name  * loop due to deletion of the adapter list entry inside the loop. Deletion of
2706*5113495bSYour Name  * list entry will make the list entry to point to self. If the control goes
2707*5113495bSYour Name  * inside the loop body then the dev_hold has been invoked.
2708*5113495bSYour Name  *
2709*5113495bSYour Name  *                           ***** NOTE *****
2710*5113495bSYour Name  * Before the end of each iteration, hdd_adapter_dev_put_debug(adapter, dbgid)
2711*5113495bSYour Name  * must be called. Not calling this will keep hold of a reference, thus
2712*5113495bSYour Name  * preventing unregister of the netdevice. If the loop is terminated in
2713*5113495bSYour Name  * between with return/goto/break statements,
2714*5113495bSYour Name  * hdd_adapter_dev_put_debug(next_adapter, dbgid) must be done along with
2715*5113495bSYour Name  * hdd_adapter_dev_put_debug(adapter, dbgid) before termination of the loop.
2716*5113495bSYour Name  *
2717*5113495bSYour Name  * Usage example:
2718*5113495bSYour Name  *  hdd_for_each_adapter_dev_held_safe(hdd_ctx, adapter, next_adapter, dbgid) {
2719*5113495bSYour Name  *        <work involving adapter>
2720*5113495bSYour Name  *        <some more work>
2721*5113495bSYour Name  *        hdd_adapter_dev_put_debug(adapter, dbgid)
2722*5113495bSYour Name  *  }
2723*5113495bSYour Name  */
2724*5113495bSYour Name #define hdd_for_each_adapter_dev_held_safe(hdd_ctx, adapter, next_adapter, \
2725*5113495bSYour Name 					   dbgid) \
2726*5113495bSYour Name 	for (__hdd_take_ref_and_fetch_front_adapter_safe(hdd_ctx, adapter, \
2727*5113495bSYour Name 							 next_adapter, dbgid); \
2728*5113495bSYour Name 	     __hdd_is_adapter_valid(adapter); \
2729*5113495bSYour Name 	     __hdd_take_ref_and_fetch_next_adapter_safe(hdd_ctx, adapter, \
2730*5113495bSYour Name 							next_adapter, dbgid))
2731*5113495bSYour Name 
2732*5113495bSYour Name /* Helper MACROS and APIs definition to iterate
2733*5113495bSYour Name  * link info array in HDD adapter.
2734*5113495bSYour Name  */
2735*5113495bSYour Name #define __hdd_adapter_is_active_link(adapter, link_idx) \
2736*5113495bSYour Name 			qdf_atomic_test_bit(link_idx, &(adapter)->active_links)
2737*5113495bSYour Name 
2738*5113495bSYour Name #define hdd_adapter_get_link_info_if_active(adapter, link_idx) \
2739*5113495bSYour Name 		__hdd_adapter_is_active_link((adapter), (link_idx)) ? \
2740*5113495bSYour Name 			&((adapter)->link_info[(link_idx)]) : NULL
2741*5113495bSYour Name 
2742*5113495bSYour Name #define __hdd_is_link_info_valid(_link_info) !!_link_info
2743*5113495bSYour Name 
2744*5113495bSYour Name #define __hdd_adapter_get_first_active_link_info(adapter, link_info) \
2745*5113495bSYour Name 	link_info = NULL, \
2746*5113495bSYour Name 	hdd_adapter_get_next_active_link_info(adapter, &link_info)
2747*5113495bSYour Name 
2748*5113495bSYour Name 
2749*5113495bSYour Name static inline uint8_t
hdd_adapter_get_index_of_link_info(struct wlan_hdd_link_info * link_info)2750*5113495bSYour Name hdd_adapter_get_index_of_link_info(struct wlan_hdd_link_info *link_info)
2751*5113495bSYour Name {
2752*5113495bSYour Name 	return (link_info - &link_info->adapter->link_info[0]);
2753*5113495bSYour Name }
2754*5113495bSYour Name 
2755*5113495bSYour Name static inline void
hdd_adapter_get_next_active_link_info(struct hdd_adapter * adapter,struct wlan_hdd_link_info ** link_info)2756*5113495bSYour Name hdd_adapter_get_next_active_link_info(struct hdd_adapter *adapter,
2757*5113495bSYour Name 				      struct wlan_hdd_link_info **link_info)
2758*5113495bSYour Name {
2759*5113495bSYour Name 	uint8_t link_idx = WLAN_HDD_DEFLINK_IDX;
2760*5113495bSYour Name 	uint8_t link_idx_max;
2761*5113495bSYour Name 
2762*5113495bSYour Name 	if (!link_info || !adapter)
2763*5113495bSYour Name 		return;
2764*5113495bSYour Name 
2765*5113495bSYour Name 	/* If @link_info already points to valid link info address, get the
2766*5113495bSYour Name 	 * index of that link info and get the next valid link info which is
2767*5113495bSYour Name 	 * set to active.
2768*5113495bSYour Name 	 * If @link_info points to invalid address, then start the search
2769*5113495bSYour Name 	 * for active link info from WLAN_HDD_DEFLINK_IDX index.
2770*5113495bSYour Name 	 */
2771*5113495bSYour Name 	if (*link_info)
2772*5113495bSYour Name 		link_idx = hdd_adapter_get_index_of_link_info(*link_info) + 1;
2773*5113495bSYour Name 
2774*5113495bSYour Name 	*link_info = NULL;
2775*5113495bSYour Name 	link_idx_max = QDF_ARRAY_SIZE(adapter->link_info);
2776*5113495bSYour Name 	while (link_idx < link_idx_max && !(*link_info)) {
2777*5113495bSYour Name 		*link_info = hdd_adapter_get_link_info_if_active(adapter,
2778*5113495bSYour Name 								 link_idx);
2779*5113495bSYour Name 		link_idx++;
2780*5113495bSYour Name 	}
2781*5113495bSYour Name }
2782*5113495bSYour Name 
2783*5113495bSYour Name /**
2784*5113495bSYour Name  * hdd_adapter_for_each_active_link_info() - Link info iterator which loops
2785*5113495bSYour Name  * through the link info array elements which are set to active.
2786*5113495bSYour Name  * @adapter: HDD adapter to iterate for each active link info pointer.
2787*5113495bSYour Name  * @link_info: Pointer of active link info.
2788*5113495bSYour Name  *
2789*5113495bSYour Name  * The "active_links" bitmap in @adapter says which indices are active
2790*5113495bSYour Name  * in the link info array.
2791*5113495bSYour Name  * The MACRO iterates through all the active link info elements in link info
2792*5113495bSYour Name  * array and ends loop when no more active link info entries are present.
2793*5113495bSYour Name  * The @link_info points next active link info pointer on each iteration or
2794*5113495bSYour Name  * NULL value at the end of the loop.
2795*5113495bSYour Name  *
2796*5113495bSYour Name  * Callers to take reference of adapter if needed.
2797*5113495bSYour Name  */
2798*5113495bSYour Name #define hdd_adapter_for_each_active_link_info(adapter, link_info) \
2799*5113495bSYour Name 	for (__hdd_adapter_get_first_active_link_info(adapter, link_info); \
2800*5113495bSYour Name 	     __hdd_is_link_info_valid(link_info); \
2801*5113495bSYour Name 	     hdd_adapter_get_next_active_link_info(adapter, &link_info))
2802*5113495bSYour Name 
2803*5113495bSYour Name #define __hdd_adapter_get_firstlink(adapter, __link_info)	\
2804*5113495bSYour Name 		(__link_info = adapter ? &((adapter)->link_info[0]) : NULL)
2805*5113495bSYour Name 
2806*5113495bSYour Name #define __hdd_is_link_info_idx_valid(adapter, __link_info) \
2807*5113495bSYour Name 	((__link_info - &(adapter)->link_info[0]) < \
2808*5113495bSYour Name 					QDF_ARRAY_SIZE((adapter)->link_info))
2809*5113495bSYour Name 
2810*5113495bSYour Name #define __hdd_adapter_next_link_info(link_info)	((link_info)++)
2811*5113495bSYour Name 
2812*5113495bSYour Name /**
2813*5113495bSYour Name  * hdd_adapter_for_each_link_info() - Link info iterator for all
2814*5113495bSYour Name  * link_info fields.
2815*5113495bSYour Name  * @adapter: HDD adapter to iterate each link_info.
2816*5113495bSYour Name  * @link_info: Pointer to each link info element in the array.
2817*5113495bSYour Name  *
2818*5113495bSYour Name  * The function iterates from the start index of link_info array
2819*5113495bSYour Name  * in @adapter till the end of the link_info array.
2820*5113495bSYour Name  *
2821*5113495bSYour Name  * Callers to take reference of adapter if needed.
2822*5113495bSYour Name  */
2823*5113495bSYour Name 
2824*5113495bSYour Name #define hdd_adapter_for_each_link_info(adapter, link_info) \
2825*5113495bSYour Name 	for (__hdd_adapter_get_firstlink(adapter, link_info); \
2826*5113495bSYour Name 	     __hdd_is_link_info_valid(link_info) && \
2827*5113495bSYour Name 	     __hdd_is_link_info_idx_valid(adapter, link_info); \
2828*5113495bSYour Name 	     __hdd_adapter_next_link_info(link_info))
2829*5113495bSYour Name 
2830*5113495bSYour Name /**
2831*5113495bSYour Name  * wlan_hdd_get_link_info_from_objmgr() - Fetch adapter from objmgr
2832*5113495bSYour Name  * @vdev: the vdev whose corresponding adapter has to be fetched
2833*5113495bSYour Name  *
2834*5113495bSYour Name  * Return: Address of link info pointer in HDD adapter corresponding to VDEV
2835*5113495bSYour Name  */
2836*5113495bSYour Name struct wlan_hdd_link_info *
2837*5113495bSYour Name wlan_hdd_get_link_info_from_objmgr(struct wlan_objmgr_vdev *vdev);
2838*5113495bSYour Name 
2839*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC) && \
2840*5113495bSYour Name 	defined(WLAN_HDD_MULTI_VDEV_SINGLE_NDEV)
2841*5113495bSYour Name /**
2842*5113495bSYour Name  * hdd_adapter_disable_all_links() - Reset the links on stop adapter.
2843*5113495bSYour Name  * @adapter: HDD adapter
2844*5113495bSYour Name  * @clear_macaddr: Clears mac address if set to true
2845*5113495bSYour Name  *
2846*5113495bSYour Name  * Resets the MAC address in each link info and resets the link info
2847*5113495bSYour Name  * mapping in adapter array.
2848*5113495bSYour Name  *
2849*5113495bSYour Name  * Return: void
2850*5113495bSYour Name  */
2851*5113495bSYour Name void
2852*5113495bSYour Name hdd_adapter_disable_all_links(struct hdd_adapter *adapter, bool clear_macaddr);
2853*5113495bSYour Name #else
2854*5113495bSYour Name static inline void
hdd_adapter_disable_all_links(struct hdd_adapter * adapter,bool clear_macaddr)2855*5113495bSYour Name hdd_adapter_disable_all_links(struct hdd_adapter *adapter, bool clear_macaddr)
2856*5113495bSYour Name {
2857*5113495bSYour Name }
2858*5113495bSYour Name #endif
2859*5113495bSYour Name 
2860*5113495bSYour Name struct hdd_adapter *hdd_open_adapter(struct hdd_context *hdd_ctx,
2861*5113495bSYour Name 				     uint8_t session_type,
2862*5113495bSYour Name 				     const char *name, tSirMacAddr mac_addr,
2863*5113495bSYour Name 				     unsigned char name_assign_type,
2864*5113495bSYour Name 				     bool rtnl_held,
2865*5113495bSYour Name 				     struct hdd_adapter_create_param *params);
2866*5113495bSYour Name 
2867*5113495bSYour Name QDF_STATUS hdd_open_adapter_no_trans(struct hdd_context *hdd_ctx,
2868*5113495bSYour Name 				     enum QDF_OPMODE op_mode,
2869*5113495bSYour Name 				     const char *iface_name,
2870*5113495bSYour Name 				     uint8_t *mac_addr_bytes,
2871*5113495bSYour Name 				     struct hdd_adapter_create_param *params);
2872*5113495bSYour Name /**
2873*5113495bSYour Name  * hdd_close_adapter() - remove and free @adapter from the adapter list
2874*5113495bSYour Name  * @hdd_ctx: The Hdd context containing the adapter list
2875*5113495bSYour Name  * @adapter: the adapter to remove and free
2876*5113495bSYour Name  * @rtnl_held: if the caller is already holding the RTNL lock
2877*5113495bSYour Name  *
2878*5113495bSYour Name  * Return: None
2879*5113495bSYour Name  */
2880*5113495bSYour Name void hdd_close_adapter(struct hdd_context *hdd_ctx,
2881*5113495bSYour Name 		       struct hdd_adapter *adapter,
2882*5113495bSYour Name 		       bool rtnl_held);
2883*5113495bSYour Name 
2884*5113495bSYour Name /**
2885*5113495bSYour Name  * hdd_close_all_adapters() - remove and free all adapters from the adapter list
2886*5113495bSYour Name  * @hdd_ctx: The Hdd context containing the adapter list
2887*5113495bSYour Name  * @rtnl_held: if the caller is already holding the RTNL lock
2888*5113495bSYour Name  *
2889*5113495bSYour Name  * Return: None
2890*5113495bSYour Name  */
2891*5113495bSYour Name void hdd_close_all_adapters(struct hdd_context *hdd_ctx, bool rtnl_held);
2892*5113495bSYour Name 
2893*5113495bSYour Name QDF_STATUS hdd_stop_all_adapters(struct hdd_context *hdd_ctx);
2894*5113495bSYour Name void hdd_deinit_all_adapters(struct hdd_context *hdd_ctx, bool rtnl_held);
2895*5113495bSYour Name QDF_STATUS hdd_reset_all_adapters(struct hdd_context *hdd_ctx);
2896*5113495bSYour Name QDF_STATUS hdd_start_all_adapters(struct hdd_context *hdd_ctx, bool rtnl_held);
2897*5113495bSYour Name 
2898*5113495bSYour Name /**
2899*5113495bSYour Name  * hdd_get_link_info_by_vdev() - Return link info with the given vdev id
2900*5113495bSYour Name  * @hdd_ctx: hdd context.
2901*5113495bSYour Name  * @vdev_id: vdev id for the link info to get.
2902*5113495bSYour Name  *
2903*5113495bSYour Name  * This function is used to get the link info with provided vdev id
2904*5113495bSYour Name  *
2905*5113495bSYour Name  * Return: adapter pointer if found
2906*5113495bSYour Name  *
2907*5113495bSYour Name  */
2908*5113495bSYour Name struct wlan_hdd_link_info *
2909*5113495bSYour Name hdd_get_link_info_by_vdev(struct hdd_context *hdd_ctx, uint32_t vdev_id);
2910*5113495bSYour Name 
2911*5113495bSYour Name /**
2912*5113495bSYour Name  * hdd_adapter_get_by_reference() - Return adapter with the given reference
2913*5113495bSYour Name  * @hdd_ctx: hdd context
2914*5113495bSYour Name  * @reference: reference for the adapter to get
2915*5113495bSYour Name  *
2916*5113495bSYour Name  * This function is used to get the adapter with provided reference.
2917*5113495bSYour Name  * The adapter reference will be held until being released by calling
2918*5113495bSYour Name  * hdd_adapter_put().
2919*5113495bSYour Name  *
2920*5113495bSYour Name  * Return: adapter pointer if found
2921*5113495bSYour Name  *
2922*5113495bSYour Name  */
2923*5113495bSYour Name struct hdd_adapter *hdd_adapter_get_by_reference(struct hdd_context *hdd_ctx,
2924*5113495bSYour Name 						 struct hdd_adapter *reference);
2925*5113495bSYour Name 
2926*5113495bSYour Name /**
2927*5113495bSYour Name  * hdd_adapter_put() - Release reference to adapter
2928*5113495bSYour Name  * @adapter: adapter reference
2929*5113495bSYour Name  *
2930*5113495bSYour Name  * Release reference to adapter previously acquired via
2931*5113495bSYour Name  * hdd_adapter_get_*() function
2932*5113495bSYour Name  */
2933*5113495bSYour Name void hdd_adapter_put(struct hdd_adapter *adapter);
2934*5113495bSYour Name 
2935*5113495bSYour Name /**
2936*5113495bSYour Name  * hdd_get_link_info_by_link_addr() - Get the link info pointer where
2937*5113495bSYour Name  * the link address matches.
2938*5113495bSYour Name  * @hdd_ctx: HDD context pointer
2939*5113495bSYour Name  * @link_addr: Link address to search
2940*5113495bSYour Name  *
2941*5113495bSYour Name  * In the given @adapter search for @link_addr in each entry of link_info
2942*5113495bSYour Name  * array, and return the matching link_info pointer.
2943*5113495bSYour Name  *
2944*5113495bSYour Name  * Return: NULL / Valid link info pointer
2945*5113495bSYour Name  */
2946*5113495bSYour Name struct wlan_hdd_link_info *
2947*5113495bSYour Name hdd_get_link_info_by_link_addr(struct hdd_context *hdd_ctx,
2948*5113495bSYour Name 			       struct qdf_mac_addr *link_addr);
2949*5113495bSYour Name 
2950*5113495bSYour Name struct hdd_adapter *hdd_get_adapter_by_macaddr(struct hdd_context *hdd_ctx,
2951*5113495bSYour Name 					       tSirMacAddr mac_addr);
2952*5113495bSYour Name 
2953*5113495bSYour Name /**
2954*5113495bSYour Name  * hdd_get_link_info_home_channel() - return home channel of adapter
2955*5113495bSYour Name  * @link_info: Pointer of link_info in @adapter
2956*5113495bSYour Name  *
2957*5113495bSYour Name  * This function returns operation channel of station/p2p-cli if
2958*5113495bSYour Name  * connected, returns operation channel of sap/p2p-go if started.
2959*5113495bSYour Name  *
2960*5113495bSYour Name  * Return: home channel if connected/started or invalid channel 0
2961*5113495bSYour Name  */
2962*5113495bSYour Name uint32_t hdd_get_link_info_home_channel(struct wlan_hdd_link_info *link_info);
2963*5113495bSYour Name 
2964*5113495bSYour Name /**
2965*5113495bSYour Name  * hdd_get_link_info_width() - return current bandwidth of adapter
2966*5113495bSYour Name  * @link_info: Pointer of link_info in @adapter
2967*5113495bSYour Name  *
2968*5113495bSYour Name  * This function returns current bandwidth of station/p2p-cli if
2969*5113495bSYour Name  * connected, returns current bandwidth of sap/p2p-go if started.
2970*5113495bSYour Name  *
2971*5113495bSYour Name  * Return: bandwidth if connected/started or invalid bandwidth 0
2972*5113495bSYour Name  */
2973*5113495bSYour Name enum phy_ch_width hdd_get_link_info_width(struct wlan_hdd_link_info *link_info);
2974*5113495bSYour Name 
2975*5113495bSYour Name /*
2976*5113495bSYour Name  * hdd_get_adapter_by_rand_macaddr() - find Random mac adapter
2977*5113495bSYour Name  * @hdd_ctx: hdd context
2978*5113495bSYour Name  * @mac_addr: random mac addr
2979*5113495bSYour Name  *
2980*5113495bSYour Name  * Find the Adapter based on random mac addr. Adapter's vdev
2981*5113495bSYour Name  * have active random mac list.
2982*5113495bSYour Name  *
2983*5113495bSYour Name  * Return: adapter ptr or null
2984*5113495bSYour Name  */
2985*5113495bSYour Name struct hdd_adapter *
2986*5113495bSYour Name hdd_get_adapter_by_rand_macaddr(struct hdd_context *hdd_ctx,
2987*5113495bSYour Name 				tSirMacAddr mac_addr);
2988*5113495bSYour Name 
2989*5113495bSYour Name /**
2990*5113495bSYour Name  * hdd_adapter_update_mlo_mgr_mac_addr() - Update each link address to MLO mgr.
2991*5113495bSYour Name  * @adapter: HDD adapter
2992*5113495bSYour Name  *
2993*5113495bSYour Name  * Update MLO manager with each link address and corresponding VDEV ID.
2994*5113495bSYour Name  * Only update for ML-STA adapter types.
2995*5113495bSYour Name  *
2996*5113495bSYour Name  * Return: void
2997*5113495bSYour Name  */
2998*5113495bSYour Name void hdd_adapter_update_mlo_mgr_mac_addr(struct hdd_adapter *adapter);
2999*5113495bSYour Name 
3000*5113495bSYour Name /**
3001*5113495bSYour Name  * hdd_is_vdev_in_conn_state() - Check whether the vdev is in
3002*5113495bSYour Name  * connected/started state.
3003*5113495bSYour Name  * @link_info: Pointer to link_info in adapter
3004*5113495bSYour Name  *
3005*5113495bSYour Name  * This function will give whether the vdev in the adapter is in
3006*5113495bSYour Name  * connected/started state.
3007*5113495bSYour Name  *
3008*5113495bSYour Name  * Return: True/false
3009*5113495bSYour Name  */
3010*5113495bSYour Name bool hdd_is_vdev_in_conn_state(struct wlan_hdd_link_info *link_info);
3011*5113495bSYour Name 
3012*5113495bSYour Name /**
3013*5113495bSYour Name  * hdd_adapter_deregister_fc() - Deregisters flow control
3014*5113495bSYour Name  * callbacks
3015*5113495bSYour Name  * @adapter: HDD adapter
3016*5113495bSYour Name  *
3017*5113495bSYour Name  * The function call deregisters flow control callbacks
3018*5113495bSYour Name  *
3019*5113495bSYour Name  * Return: void
3020*5113495bSYour Name  */
3021*5113495bSYour Name void hdd_adapter_deregister_fc(struct hdd_adapter *adapter);
3022*5113495bSYour Name 
3023*5113495bSYour Name #ifdef WLAN_OPEN_SOURCE
3024*5113495bSYour Name /**
3025*5113495bSYour Name  * hdd_cancel_ip_notifier_work() - Cancel scheduled IP
3026*5113495bSYour Name  * notifier deferred work
3027*5113495bSYour Name  * @adapter: HDD adapter
3028*5113495bSYour Name  *
3029*5113495bSYour Name  * The API calls cancel work for IPv4 and IPv6 notifier
3030*5113495bSYour Name  * deferred task
3031*5113495bSYour Name  *
3032*5113495bSYour Name  * Return: void
3033*5113495bSYour Name  */
3034*5113495bSYour Name void hdd_cancel_ip_notifier_work(struct hdd_adapter *adapter);
3035*5113495bSYour Name #else
3036*5113495bSYour Name static inline
hdd_cancel_ip_notifier_work(struct hdd_adapter * adapter)3037*5113495bSYour Name void hdd_cancel_ip_notifier_work(struct hdd_adapter *adapter)
3038*5113495bSYour Name {
3039*5113495bSYour Name }
3040*5113495bSYour Name #endif
3041*5113495bSYour Name 
3042*5113495bSYour Name /**
3043*5113495bSYour Name  * hdd_vdev_create() - Create the vdev in the firmware
3044*5113495bSYour Name  * @link_info: Link info pointer in HDD adapter
3045*5113495bSYour Name  *
3046*5113495bSYour Name  * This function will create the vdev in the firmware
3047*5113495bSYour Name  *
3048*5113495bSYour Name  * Return: 0 when the vdev create is sent to firmware or -EINVAL when
3049*5113495bSYour Name  * there is a failure to send the command.
3050*5113495bSYour Name  */
3051*5113495bSYour Name int hdd_vdev_create(struct wlan_hdd_link_info *link_info);
3052*5113495bSYour Name 
3053*5113495bSYour Name /**
3054*5113495bSYour Name  * hdd_vdev_destroy() - Destroy the vdev in the firmware
3055*5113495bSYour Name  * @link_info: Link info pointer in HDD adapter
3056*5113495bSYour Name  *
3057*5113495bSYour Name  * This function will destroy the vdev in the firmware
3058*5113495bSYour Name  *
3059*5113495bSYour Name  * Return: 0 when the vdev destroy is sent to firmware
3060*5113495bSYour Name  * or -EINVAL when there is a failure to send the command.
3061*5113495bSYour Name  */
3062*5113495bSYour Name int hdd_vdev_destroy(struct wlan_hdd_link_info *link_info);
3063*5113495bSYour Name 
3064*5113495bSYour Name /**
3065*5113495bSYour Name  * hdd_vdev_ready() - Configure FW post VDEV create
3066*5113495bSYour Name  * @vdev: VDEV object.
3067*5113495bSYour Name  * @bridgeaddr: Bridge MAC address
3068*5113495bSYour Name  *
3069*5113495bSYour Name  * The function is used send configuration to the FW
3070*5113495bSYour Name  * post VDEV creation.
3071*5113495bSYour Name  * The caller to ensure to hold the VDEV reference
3072*5113495bSYour Name  *
3073*5113495bSYour Name  * Return: 0 on success, negative value on failure.
3074*5113495bSYour Name  */
3075*5113495bSYour Name int hdd_vdev_ready(struct wlan_objmgr_vdev *vdev,
3076*5113495bSYour Name 		   struct qdf_mac_addr *bridgeaddr);
3077*5113495bSYour Name 
3078*5113495bSYour Name /**
3079*5113495bSYour Name  * hdd_init_station_mode() - Initialize STA mode adapter
3080*5113495bSYour Name  * post vdev creation.
3081*5113495bSYour Name  * @link_info: Link info pointer in HDD adapter
3082*5113495bSYour Name  *
3083*5113495bSYour Name  * The function initializes the adapter post vdev
3084*5113495bSYour Name  * create for STA mode type adapters on start
3085*5113495bSYour Name  * adapter.
3086*5113495bSYour Name  *
3087*5113495bSYour Name  * Return: QDF_STATUS
3088*5113495bSYour Name  */
3089*5113495bSYour Name QDF_STATUS hdd_init_station_mode(struct wlan_hdd_link_info *link_info);
3090*5113495bSYour Name 
3091*5113495bSYour Name struct hdd_adapter *hdd_get_adapter(struct hdd_context *hdd_ctx,
3092*5113495bSYour Name 			enum QDF_OPMODE mode);
3093*5113495bSYour Name 
3094*5113495bSYour Name /**
3095*5113495bSYour Name  * hdd_get_device_mode() - Get device mode
3096*5113495bSYour Name  * @vdev_id: vdev id
3097*5113495bSYour Name  *
3098*5113495bSYour Name  * Return: Device mode
3099*5113495bSYour Name  */
3100*5113495bSYour Name enum QDF_OPMODE hdd_get_device_mode(uint32_t vdev_id);
3101*5113495bSYour Name 
3102*5113495bSYour Name /**
3103*5113495bSYour Name  * hdd_deinit_session() - Cleanup session context in
3104*5113495bSYour Name  * adapter
3105*5113495bSYour Name  * @adapter: HDD adapter
3106*5113495bSYour Name  *
3107*5113495bSYour Name  * The API cleans up session context and scan IEs
3108*5113495bSYour Name  * in link_info and adapter.
3109*5113495bSYour Name  *
3110*5113495bSYour Name  * Return: None
3111*5113495bSYour Name  */
3112*5113495bSYour Name void hdd_deinit_session(struct hdd_adapter *adapter);
3113*5113495bSYour Name 
3114*5113495bSYour Name void hdd_deinit_adapter(struct hdd_context *hdd_ctx,
3115*5113495bSYour Name 			struct hdd_adapter *adapter,
3116*5113495bSYour Name 			bool rtnl_held);
3117*5113495bSYour Name QDF_STATUS hdd_stop_adapter(struct hdd_context *hdd_ctx,
3118*5113495bSYour Name 			    struct hdd_adapter *adapter);
3119*5113495bSYour Name 
3120*5113495bSYour Name /**
3121*5113495bSYour Name  * hdd_set_station_ops() - update net_device ops
3122*5113495bSYour Name  * @dev: Handle to struct net_device to be updated.
3123*5113495bSYour Name  * Return: None
3124*5113495bSYour Name  */
3125*5113495bSYour Name void hdd_set_station_ops(struct net_device *dev);
3126*5113495bSYour Name 
3127*5113495bSYour Name /**
3128*5113495bSYour Name  * wlan_hdd_get_intf_addr() - Get address for the interface
3129*5113495bSYour Name  * @hdd_ctx: Pointer to hdd context
3130*5113495bSYour Name  * @interface_type: type of the interface for which address is queried
3131*5113495bSYour Name  *
3132*5113495bSYour Name  * This function is used to get mac address for every new interface
3133*5113495bSYour Name  *
3134*5113495bSYour Name  * Return: If addr is present then return pointer to MAC address
3135*5113495bSYour Name  *         else NULL
3136*5113495bSYour Name  */
3137*5113495bSYour Name 
3138*5113495bSYour Name uint8_t *wlan_hdd_get_intf_addr(struct hdd_context *hdd_ctx,
3139*5113495bSYour Name 				enum QDF_OPMODE interface_type);
3140*5113495bSYour Name void wlan_hdd_release_intf_addr(struct hdd_context *hdd_ctx,
3141*5113495bSYour Name 				uint8_t *releaseAddr);
3142*5113495bSYour Name 
3143*5113495bSYour Name /**
3144*5113495bSYour Name  * hdd_get_operating_chan_freq() - return operating channel of the device mode
3145*5113495bSYour Name  * @hdd_ctx:	Pointer to the HDD context.
3146*5113495bSYour Name  * @mode:	Device mode for which operating channel is required.
3147*5113495bSYour Name  *              Supported modes:
3148*5113495bSYour Name  *			QDF_STA_MODE,
3149*5113495bSYour Name  *			QDF_P2P_CLIENT_MODE,
3150*5113495bSYour Name  *			QDF_SAP_MODE,
3151*5113495bSYour Name  *			QDF_P2P_GO_MODE.
3152*5113495bSYour Name  *
3153*5113495bSYour Name  * This API returns the operating channel of the requested device mode
3154*5113495bSYour Name  *
3155*5113495bSYour Name  * Return: channel frequency, or
3156*5113495bSYour Name  *         0 if the requested device mode is not found.
3157*5113495bSYour Name  */
3158*5113495bSYour Name uint32_t hdd_get_operating_chan_freq(struct hdd_context *hdd_ctx,
3159*5113495bSYour Name 				     enum QDF_OPMODE mode);
3160*5113495bSYour Name 
3161*5113495bSYour Name void hdd_set_conparam(int32_t con_param);
3162*5113495bSYour Name enum QDF_GLOBAL_MODE hdd_get_conparam(void);
3163*5113495bSYour Name 
3164*5113495bSYour Name /**
3165*5113495bSYour Name  * wlan_hdd_reset_prob_rspies() - Reset probe response IEs
3166*5113495bSYour Name  * @link_info: Link info pointer in HDD adapter.
3167*5113495bSYour Name  *
3168*5113495bSYour Name  * Reset the probe response IEs for the VDEV pointer by link info.
3169*5113495bSYour Name  *
3170*5113495bSYour Name  * Return: void
3171*5113495bSYour Name  */
3172*5113495bSYour Name void wlan_hdd_reset_prob_rspies(struct wlan_hdd_link_info *link_info);
3173*5113495bSYour Name void hdd_prevent_suspend(uint32_t reason);
3174*5113495bSYour Name 
3175*5113495bSYour Name /*
3176*5113495bSYour Name  * hdd_get_first_valid_adapter() - Get the first valid adapter from adapter list
3177*5113495bSYour Name  *
3178*5113495bSYour Name  * This function is used to fetch the first valid adapter from the adapter
3179*5113495bSYour Name  * list. If there is no valid adapter then it returns NULL
3180*5113495bSYour Name  *
3181*5113495bSYour Name  * @hdd_ctx: HDD context handler
3182*5113495bSYour Name  *
3183*5113495bSYour Name  * Return: NULL if no valid adapter found in the adapter list
3184*5113495bSYour Name  *
3185*5113495bSYour Name  */
3186*5113495bSYour Name struct hdd_adapter *hdd_get_first_valid_adapter(struct hdd_context *hdd_ctx);
3187*5113495bSYour Name 
3188*5113495bSYour Name void hdd_allow_suspend(uint32_t reason);
3189*5113495bSYour Name void hdd_prevent_suspend_timeout(uint32_t timeout, uint32_t reason);
3190*5113495bSYour Name 
3191*5113495bSYour Name /**
3192*5113495bSYour Name  * wlan_hdd_validate_context() - check the HDD context
3193*5113495bSYour Name  * @hdd_ctx: Global HDD context pointer
3194*5113495bSYour Name  *
3195*5113495bSYour Name  * Return: 0 if the context is valid. Error code otherwise
3196*5113495bSYour Name  */
3197*5113495bSYour Name #define wlan_hdd_validate_context(hdd_ctx) \
3198*5113495bSYour Name 	__wlan_hdd_validate_context(hdd_ctx, __func__)
3199*5113495bSYour Name 
3200*5113495bSYour Name int __wlan_hdd_validate_context(struct hdd_context *hdd_ctx, const char *func);
3201*5113495bSYour Name 
3202*5113495bSYour Name /**
3203*5113495bSYour Name  * hdd_validate_adapter() - Validate the given adapter
3204*5113495bSYour Name  * @adapter: the adapter to validate
3205*5113495bSYour Name  *
3206*5113495bSYour Name  * This function validates the given adapter, and ensures that it is open.
3207*5113495bSYour Name  *
3208*5113495bSYour Name  * Return: Errno
3209*5113495bSYour Name  */
3210*5113495bSYour Name #define hdd_validate_adapter(adapter) \
3211*5113495bSYour Name 	__hdd_validate_adapter(adapter, __func__)
3212*5113495bSYour Name 
3213*5113495bSYour Name int __hdd_validate_adapter(struct hdd_adapter *adapter, const char *func);
3214*5113495bSYour Name 
3215*5113495bSYour Name /**
3216*5113495bSYour Name  * wlan_hdd_validate_vdev_id() - ensure the given vdev Id is valid
3217*5113495bSYour Name  * @vdev_id: the vdev Id to validate
3218*5113495bSYour Name  *
3219*5113495bSYour Name  * Return: Errno
3220*5113495bSYour Name  */
3221*5113495bSYour Name #define wlan_hdd_validate_vdev_id(vdev_id) \
3222*5113495bSYour Name 	__wlan_hdd_validate_vdev_id(vdev_id, __func__)
3223*5113495bSYour Name 
3224*5113495bSYour Name int __wlan_hdd_validate_vdev_id(uint8_t vdev_id, const char *func);
3225*5113495bSYour Name 
3226*5113495bSYour Name /**
3227*5113495bSYour Name  * hdd_is_valid_mac_address() - validate MAC address
3228*5113495bSYour Name  * @mac_addr:	Pointer to the input MAC address
3229*5113495bSYour Name  *
3230*5113495bSYour Name  * This function validates whether the given MAC address is valid or not
3231*5113495bSYour Name  * Expected MAC address is of the format XX:XX:XX:XX:XX:XX
3232*5113495bSYour Name  * where X is the hexa decimal digit character and separated by ':'
3233*5113495bSYour Name  * This algorithm works even if MAC address is not separated by ':'
3234*5113495bSYour Name  *
3235*5113495bSYour Name  * This code checks given input string mac contains exactly 12 hexadecimal
3236*5113495bSYour Name  * digits and a separator colon : appears in the input string only after
3237*5113495bSYour Name  * an even number of hex digits.
3238*5113495bSYour Name  *
3239*5113495bSYour Name  * Return: true for valid and false for invalid
3240*5113495bSYour Name  */
3241*5113495bSYour Name bool hdd_is_valid_mac_address(const uint8_t *mac_addr);
3242*5113495bSYour Name 
3243*5113495bSYour Name bool wlan_hdd_validate_modules_state(struct hdd_context *hdd_ctx);
3244*5113495bSYour Name 
3245*5113495bSYour Name /**
3246*5113495bSYour Name  * wlan_hdd_validate_mac_address() - Function to validate mac address
3247*5113495bSYour Name  * @mac_addr: input mac address
3248*5113495bSYour Name  *
3249*5113495bSYour Name  * Return QDF_STATUS
3250*5113495bSYour Name  */
3251*5113495bSYour Name #define wlan_hdd_validate_mac_address(mac_addr) \
3252*5113495bSYour Name 	__wlan_hdd_validate_mac_address(mac_addr, __func__)
3253*5113495bSYour Name 
3254*5113495bSYour Name QDF_STATUS __wlan_hdd_validate_mac_address(struct qdf_mac_addr *mac_addr,
3255*5113495bSYour Name 					   const char *func);
3256*5113495bSYour Name 
3257*5113495bSYour Name /**
3258*5113495bSYour Name  * hdd_is_any_adapter_connected() - Check if any adapter is in connected state
3259*5113495bSYour Name  * @hdd_ctx: the global hdd context
3260*5113495bSYour Name  *
3261*5113495bSYour Name  * Returns: true, if any of the adapters is in connected state,
3262*5113495bSYour Name  *	    false, if none of the adapters is in connected state.
3263*5113495bSYour Name  */
3264*5113495bSYour Name bool hdd_is_any_adapter_connected(struct hdd_context *hdd_ctx);
3265*5113495bSYour Name 
3266*5113495bSYour Name /**
3267*5113495bSYour Name  * hdd_init_adapter_ops_wq() - Init global workqueue for adapter operations.
3268*5113495bSYour Name  * @hdd_ctx: pointer to HDD context
3269*5113495bSYour Name  *
3270*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS if workqueue is allocated,
3271*5113495bSYour Name  *	   QDF_STATUS_E_NOMEM if workqueue aloocation fails.
3272*5113495bSYour Name  */
3273*5113495bSYour Name QDF_STATUS hdd_init_adapter_ops_wq(struct hdd_context *hdd_ctx);
3274*5113495bSYour Name 
3275*5113495bSYour Name /**
3276*5113495bSYour Name  * hdd_deinit_adapter_ops_wq() - Deinit global workqueue for adapter operations.
3277*5113495bSYour Name  * @hdd_ctx: pointer to HDD context
3278*5113495bSYour Name  *
3279*5113495bSYour Name  * Return: None
3280*5113495bSYour Name  */
3281*5113495bSYour Name void hdd_deinit_adapter_ops_wq(struct hdd_context *hdd_ctx);
3282*5113495bSYour Name 
3283*5113495bSYour Name /**
3284*5113495bSYour Name  * hdd_adapter_feature_update_work_init() - Init per adapter work for netdev
3285*5113495bSYour Name  *					    feature update
3286*5113495bSYour Name  * @adapter: pointer to adapter structure
3287*5113495bSYour Name  *
3288*5113495bSYour Name  * Return: QDF_STATUS
3289*5113495bSYour Name  */
3290*5113495bSYour Name QDF_STATUS hdd_adapter_feature_update_work_init(struct hdd_adapter *adapter);
3291*5113495bSYour Name 
3292*5113495bSYour Name /**
3293*5113495bSYour Name  * hdd_adapter_feature_update_work_deinit() - Deinit per adapter work for
3294*5113495bSYour Name  *					      netdev feature update
3295*5113495bSYour Name  * @adapter: pointer to adapter structure
3296*5113495bSYour Name  *
3297*5113495bSYour Name  * Return: QDF_STATUS
3298*5113495bSYour Name  */
3299*5113495bSYour Name void hdd_adapter_feature_update_work_deinit(struct hdd_adapter *adapter);
3300*5113495bSYour Name 
3301*5113495bSYour Name int hdd_qdf_trace_enable(QDF_MODULE_ID module_id, uint32_t bitmask);
3302*5113495bSYour Name 
3303*5113495bSYour Name int hdd_init(void);
3304*5113495bSYour Name void hdd_deinit(void);
3305*5113495bSYour Name 
3306*5113495bSYour Name /**
3307*5113495bSYour Name  * hdd_wlan_startup() - HDD init function
3308*5113495bSYour Name  * @hdd_ctx: the HDD context corresponding to the psoc to startup
3309*5113495bSYour Name  *
3310*5113495bSYour Name  * Return: Errno
3311*5113495bSYour Name  */
3312*5113495bSYour Name int hdd_wlan_startup(struct hdd_context *hdd_ctx);
3313*5113495bSYour Name 
3314*5113495bSYour Name /**
3315*5113495bSYour Name  * hdd_wlan_exit() - HDD WLAN exit function
3316*5113495bSYour Name  * @hdd_ctx: pointer to the HDD Context
3317*5113495bSYour Name  *
3318*5113495bSYour Name  * Return: None
3319*5113495bSYour Name  */
3320*5113495bSYour Name void hdd_wlan_exit(struct hdd_context *hdd_ctx);
3321*5113495bSYour Name 
3322*5113495bSYour Name /**
3323*5113495bSYour Name  * hdd_psoc_create_vdevs() - create the default vdevs for a psoc
3324*5113495bSYour Name  * @hdd_ctx: the HDD context for the psoc to operate against
3325*5113495bSYour Name  *
3326*5113495bSYour Name  * Return: QDF_STATUS
3327*5113495bSYour Name  */
3328*5113495bSYour Name QDF_STATUS hdd_psoc_create_vdevs(struct hdd_context *hdd_ctx);
3329*5113495bSYour Name 
3330*5113495bSYour Name /*
3331*5113495bSYour Name  * hdd_context_create() - Allocate and inialize HDD context.
3332*5113495bSYour Name  * @dev: Device Pointer to the underlying device
3333*5113495bSYour Name  *
3334*5113495bSYour Name  * Allocate and initialize HDD context. HDD context is allocated as part of
3335*5113495bSYour Name  * wiphy allocation and then context is initialized.
3336*5113495bSYour Name  *
3337*5113495bSYour Name  * Return: HDD context on success and ERR_PTR on failure
3338*5113495bSYour Name  */
3339*5113495bSYour Name struct hdd_context *hdd_context_create(struct device *dev);
3340*5113495bSYour Name 
3341*5113495bSYour Name /**
3342*5113495bSYour Name  * hdd_context_destroy() - Destroy HDD context
3343*5113495bSYour Name  * @hdd_ctx: HDD context to be destroyed.
3344*5113495bSYour Name  *
3345*5113495bSYour Name  * Free config and HDD context as well as destroy all the resources.
3346*5113495bSYour Name  *
3347*5113495bSYour Name  * Return: None
3348*5113495bSYour Name  */
3349*5113495bSYour Name void hdd_context_destroy(struct hdd_context *hdd_ctx);
3350*5113495bSYour Name 
3351*5113495bSYour Name int hdd_wlan_notify_modem_power_state(int state);
3352*5113495bSYour Name 
3353*5113495bSYour Name void wlan_hdd_send_svc_nlink_msg(int radio, int type, void *data, int len);
3354*5113495bSYour Name #ifdef FEATURE_WLAN_AUTO_SHUTDOWN
3355*5113495bSYour Name void wlan_hdd_auto_shutdown_enable(struct hdd_context *hdd_ctx, bool enable);
3356*5113495bSYour Name #else
3357*5113495bSYour Name static inline void
wlan_hdd_auto_shutdown_enable(struct hdd_context * hdd_ctx,bool enable)3358*5113495bSYour Name wlan_hdd_auto_shutdown_enable(struct hdd_context *hdd_ctx, bool enable)
3359*5113495bSYour Name {
3360*5113495bSYour Name }
3361*5113495bSYour Name #endif
3362*5113495bSYour Name 
3363*5113495bSYour Name struct hdd_adapter *
3364*5113495bSYour Name hdd_get_con_sap_adapter(struct hdd_adapter *this_sap_adapter,
3365*5113495bSYour Name 			bool check_start_bss);
3366*5113495bSYour Name 
3367*5113495bSYour Name bool hdd_is_5g_supported(struct hdd_context *hdd_ctx);
3368*5113495bSYour Name 
3369*5113495bSYour Name /**
3370*5113495bSYour Name  * hdd_is_2g_supported() - check if 2GHz channels are supported
3371*5113495bSYour Name  * @hdd_ctx:	Pointer to the hdd context
3372*5113495bSYour Name  *
3373*5113495bSYour Name  * HDD function to know if 2GHz channels are supported
3374*5113495bSYour Name  *
3375*5113495bSYour Name  * Return:  true if 2GHz channels are supported
3376*5113495bSYour Name  */
3377*5113495bSYour Name bool hdd_is_2g_supported(struct hdd_context *hdd_ctx);
3378*5113495bSYour Name 
3379*5113495bSYour Name /**
3380*5113495bSYour Name  * wlan_hdd_scan_abort() - abort ongoing scan
3381*5113495bSYour Name  * @link_info: Link info pointer in HDD adapter
3382*5113495bSYour Name  *
3383*5113495bSYour Name  * Return: 0 for success, non zero for failure
3384*5113495bSYour Name  */
3385*5113495bSYour Name int wlan_hdd_scan_abort(struct wlan_hdd_link_info *link_info);
3386*5113495bSYour Name 
3387*5113495bSYour Name /**
3388*5113495bSYour Name  * hdd_indicate_active_ndp_cnt() - Callback to indicate active ndp count to hdd
3389*5113495bSYour Name  * if ndp connection is on NDI established
3390*5113495bSYour Name  * @psoc: pointer to psoc object
3391*5113495bSYour Name  * @vdev_id: vdev id
3392*5113495bSYour Name  * @cnt: number of active ndp sessions
3393*5113495bSYour Name  *
3394*5113495bSYour Name  * This HDD callback registered with policy manager to indicates number of active
3395*5113495bSYour Name  * ndp sessions to hdd.
3396*5113495bSYour Name  *
3397*5113495bSYour Name  * Return:  none
3398*5113495bSYour Name  */
3399*5113495bSYour Name void hdd_indicate_active_ndp_cnt(struct wlan_objmgr_psoc *psoc,
3400*5113495bSYour Name 				 uint8_t vdev_id, uint8_t cnt);
3401*5113495bSYour Name 
3402*5113495bSYour Name #ifdef WLAN_FEATURE_ROAM_OFFLOAD
roaming_offload_enabled(struct hdd_context * hdd_ctx)3403*5113495bSYour Name static inline bool roaming_offload_enabled(struct hdd_context *hdd_ctx)
3404*5113495bSYour Name {
3405*5113495bSYour Name 	bool is_roam_offload;
3406*5113495bSYour Name 
3407*5113495bSYour Name 	ucfg_mlme_get_roaming_offload(hdd_ctx->psoc, &is_roam_offload);
3408*5113495bSYour Name 
3409*5113495bSYour Name 	return is_roam_offload;
3410*5113495bSYour Name }
3411*5113495bSYour Name #else
roaming_offload_enabled(struct hdd_context * hdd_ctx)3412*5113495bSYour Name static inline bool roaming_offload_enabled(struct hdd_context *hdd_ctx)
3413*5113495bSYour Name {
3414*5113495bSYour Name 	return false;
3415*5113495bSYour Name }
3416*5113495bSYour Name #endif
3417*5113495bSYour Name 
3418*5113495bSYour Name #ifdef WLAN_FEATURE_HOST_ROAM
hdd_driver_roaming_supported(struct hdd_context * hdd_ctx)3419*5113495bSYour Name static inline bool hdd_driver_roaming_supported(struct hdd_context *hdd_ctx)
3420*5113495bSYour Name {
3421*5113495bSYour Name 	bool lfr_enabled;
3422*5113495bSYour Name 
3423*5113495bSYour Name 	ucfg_mlme_is_lfr_enabled(hdd_ctx->psoc, &lfr_enabled);
3424*5113495bSYour Name 
3425*5113495bSYour Name 	return lfr_enabled;
3426*5113495bSYour Name }
3427*5113495bSYour Name #else
hdd_driver_roaming_supported(struct hdd_context * hdd_ctx)3428*5113495bSYour Name static inline bool hdd_driver_roaming_supported(struct hdd_context *hdd_ctx)
3429*5113495bSYour Name {
3430*5113495bSYour Name 	return false;
3431*5113495bSYour Name }
3432*5113495bSYour Name #endif
3433*5113495bSYour Name 
hdd_roaming_supported(struct hdd_context * hdd_ctx)3434*5113495bSYour Name static inline bool hdd_roaming_supported(struct hdd_context *hdd_ctx)
3435*5113495bSYour Name {
3436*5113495bSYour Name 	bool val;
3437*5113495bSYour Name 
3438*5113495bSYour Name 	val = hdd_driver_roaming_supported(hdd_ctx) ||
3439*5113495bSYour Name 		roaming_offload_enabled(hdd_ctx);
3440*5113495bSYour Name 
3441*5113495bSYour Name 	return val;
3442*5113495bSYour Name }
3443*5113495bSYour Name 
3444*5113495bSYour Name #ifdef WLAN_NS_OFFLOAD
3445*5113495bSYour Name static inline void
hdd_adapter_flush_ipv6_notifier_work(struct hdd_adapter * adapter)3446*5113495bSYour Name hdd_adapter_flush_ipv6_notifier_work(struct hdd_adapter *adapter)
3447*5113495bSYour Name {
3448*5113495bSYour Name 	flush_work(&adapter->ipv6_notifier_work);
3449*5113495bSYour Name }
3450*5113495bSYour Name #else
3451*5113495bSYour Name static inline void
hdd_adapter_flush_ipv6_notifier_work(struct hdd_adapter * adapter)3452*5113495bSYour Name hdd_adapter_flush_ipv6_notifier_work(struct hdd_adapter *adapter)
3453*5113495bSYour Name {
3454*5113495bSYour Name }
3455*5113495bSYour Name #endif
3456*5113495bSYour Name 
3457*5113495bSYour Name #ifdef CFG80211_SCAN_RANDOM_MAC_ADDR
hdd_scan_random_mac_addr_supported(void)3458*5113495bSYour Name static inline bool hdd_scan_random_mac_addr_supported(void)
3459*5113495bSYour Name {
3460*5113495bSYour Name 	return true;
3461*5113495bSYour Name }
3462*5113495bSYour Name #else
hdd_scan_random_mac_addr_supported(void)3463*5113495bSYour Name static inline bool hdd_scan_random_mac_addr_supported(void)
3464*5113495bSYour Name {
3465*5113495bSYour Name 	return false;
3466*5113495bSYour Name }
3467*5113495bSYour Name #endif
3468*5113495bSYour Name 
3469*5113495bSYour Name #ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
hdd_dynamic_mac_addr_supported(struct hdd_context * hdd_ctx)3470*5113495bSYour Name static inline bool hdd_dynamic_mac_addr_supported(struct hdd_context *hdd_ctx)
3471*5113495bSYour Name {
3472*5113495bSYour Name 	return hdd_ctx->is_vdev_macaddr_dynamic_update_supported;
3473*5113495bSYour Name }
3474*5113495bSYour Name #else
hdd_dynamic_mac_addr_supported(struct hdd_context * hdd_ctx)3475*5113495bSYour Name static inline bool hdd_dynamic_mac_addr_supported(struct hdd_context *hdd_ctx)
3476*5113495bSYour Name {
3477*5113495bSYour Name 	return false;
3478*5113495bSYour Name }
3479*5113495bSYour Name #endif
3480*5113495bSYour Name 
3481*5113495bSYour Name /**
3482*5113495bSYour Name  * hdd_adapter_get_link_info_ptr() - To get the pointer of link_info
3483*5113495bSYour Name  * in adapter.
3484*5113495bSYour Name  * @adapter: HDD adapter
3485*5113495bSYour Name  * @link_idx: Index of link_info in @adapter.
3486*5113495bSYour Name  *
3487*5113495bSYour Name  * The API returns link_info in @adapter pointed at @link_idx in the array.
3488*5113495bSYour Name  *
3489*5113495bSYour Name  * Return: Pointer to wlan_hdd_link_info or NULL.
3490*5113495bSYour Name  */
3491*5113495bSYour Name static inline struct wlan_hdd_link_info *
hdd_adapter_get_link_info_ptr(struct hdd_adapter * adapter,uint8_t link_idx)3492*5113495bSYour Name hdd_adapter_get_link_info_ptr(struct hdd_adapter *adapter, uint8_t link_idx)
3493*5113495bSYour Name {
3494*5113495bSYour Name 	if (!adapter || (link_idx >= QDF_ARRAY_SIZE(adapter->link_info)))
3495*5113495bSYour Name 		return NULL;
3496*5113495bSYour Name 
3497*5113495bSYour Name 	return &adapter->link_info[link_idx];
3498*5113495bSYour Name }
3499*5113495bSYour Name 
3500*5113495bSYour Name /**
3501*5113495bSYour Name  * hdd_start_vendor_acs(): Start vendor ACS procedure
3502*5113495bSYour Name  * @adapter: pointer to SAP adapter struct
3503*5113495bSYour Name  *
3504*5113495bSYour Name  * This function sends the ACS config to the ACS daemon and
3505*5113495bSYour Name  * starts the vendor ACS timer to wait for the next command.
3506*5113495bSYour Name  *
3507*5113495bSYour Name  * Return: Status of vendor ACS procedure
3508*5113495bSYour Name  */
3509*5113495bSYour Name int hdd_start_vendor_acs(struct hdd_adapter *adapter);
3510*5113495bSYour Name 
3511*5113495bSYour Name /**
3512*5113495bSYour Name  * hdd_acs_response_timeout_handler() - timeout handler for acs_timer
3513*5113495bSYour Name  * @context: timeout handler context
3514*5113495bSYour Name  *
3515*5113495bSYour Name  * Return: None
3516*5113495bSYour Name  */
3517*5113495bSYour Name void hdd_acs_response_timeout_handler(void *context);
3518*5113495bSYour Name 
3519*5113495bSYour Name /**
3520*5113495bSYour Name  * wlan_hdd_cfg80211_start_acs(): Start ACS Procedure for SAP
3521*5113495bSYour Name  * @link_info: Link info pointer in HDD adapter
3522*5113495bSYour Name  *
3523*5113495bSYour Name  * This function starts the ACS procedure if there are no
3524*5113495bSYour Name  * constraints like MBSSID DFS restrictions.
3525*5113495bSYour Name  *
3526*5113495bSYour Name  * Return: Status of ACS Start procedure
3527*5113495bSYour Name  */
3528*5113495bSYour Name int wlan_hdd_cfg80211_start_acs(struct wlan_hdd_link_info *link_info);
3529*5113495bSYour Name 
3530*5113495bSYour Name /**
3531*5113495bSYour Name  * wlan_hdd_trim_acs_channel_list() - Trims ACS channel list with
3532*5113495bSYour Name  * intersection of PCL
3533*5113495bSYour Name  * @pcl: preferred channel list
3534*5113495bSYour Name  * @pcl_count: Preferred channel list count
3535*5113495bSYour Name  * @org_freq_list: ACS channel list from user space
3536*5113495bSYour Name  * @org_ch_list_count: ACS channel count from user space
3537*5113495bSYour Name  *
3538*5113495bSYour Name  * Return: None
3539*5113495bSYour Name  */
3540*5113495bSYour Name void wlan_hdd_trim_acs_channel_list(uint32_t *pcl, uint8_t pcl_count,
3541*5113495bSYour Name 				    uint32_t *org_freq_list,
3542*5113495bSYour Name 				    uint8_t *org_ch_list_count);
3543*5113495bSYour Name 
3544*5113495bSYour Name /**
3545*5113495bSYour Name  * wlan_hdd_handle_zero_acs_list() - Handle worst case of ACS channel
3546*5113495bSYour Name  * trimmed to zero
3547*5113495bSYour Name  * @hdd_ctx: struct hdd_context
3548*5113495bSYour Name  * @acs_freq_list: Calculated ACS channel list
3549*5113495bSYour Name  * @acs_ch_list_count: Calculated ACS channel count
3550*5113495bSYour Name  * @org_freq_list: ACS channel list from user space
3551*5113495bSYour Name  * @org_ch_list_count: ACS channel count from user space
3552*5113495bSYour Name  *
3553*5113495bSYour Name  * When all channels in the ACS freq list is filtered out by
3554*5113495bSYour Name  * wlan_hdd_trim_acs_channel_list(), the hostapd start will fail.
3555*5113495bSYour Name  * This happens when PCL is PM_24G_SCC_CH_SBS_CH, and SAP ACS range
3556*5113495bSYour Name  * includes 5 GHz channel list. One example is STA active on 6 GHz
3557*5113495bSYour Name  * chan. Hostapd start SAP on 5 GHz ACS range. The intersection of PCL
3558*5113495bSYour Name  * and ACS range is zero.  Instead of ACS failure, this API selects
3559*5113495bSYour Name  * one channel from ACS range and report to Hostapd. When hostapd do
3560*5113495bSYour Name  * start_ap, the driver will force SCC to 6 GHz or move SAP to 2 GHz
3561*5113495bSYour Name  * based on SAP's configuration.
3562*5113495bSYour Name  *
3563*5113495bSYour Name  * Return: None
3564*5113495bSYour Name  */
3565*5113495bSYour Name void wlan_hdd_handle_zero_acs_list(struct hdd_context *hdd_ctx,
3566*5113495bSYour Name 				   uint32_t *acs_freq_list,
3567*5113495bSYour Name 				   uint8_t *acs_ch_list_count,
3568*5113495bSYour Name 				   uint32_t *org_freq_list,
3569*5113495bSYour Name 				   uint8_t org_ch_list_count);
3570*5113495bSYour Name 
3571*5113495bSYour Name /**
3572*5113495bSYour Name  * hdd_cfg80211_update_acs_config() - update acs config to application
3573*5113495bSYour Name  * @adapter: hdd adapter
3574*5113495bSYour Name  * @reason: channel change reason
3575*5113495bSYour Name  *
3576*5113495bSYour Name  * Return: 0 for success else error code
3577*5113495bSYour Name  */
3578*5113495bSYour Name int hdd_cfg80211_update_acs_config(struct hdd_adapter *adapter,
3579*5113495bSYour Name 				   uint8_t reason);
3580*5113495bSYour Name 
3581*5113495bSYour Name /**
3582*5113495bSYour Name  * hdd_update_acs_timer_reason() - update acs timer start reason
3583*5113495bSYour Name  * @adapter: hdd adapter
3584*5113495bSYour Name  * @reason: channel change reason
3585*5113495bSYour Name  *
3586*5113495bSYour Name  * Return: 0 for success
3587*5113495bSYour Name  */
3588*5113495bSYour Name int hdd_update_acs_timer_reason(struct hdd_adapter *adapter, uint8_t reason);
3589*5113495bSYour Name 
3590*5113495bSYour Name /**
3591*5113495bSYour Name  * hdd_switch_sap_channel() - Move SAP to the given channel
3592*5113495bSYour Name  * @link_info: Pointer of link_info in adapter
3593*5113495bSYour Name  * @channel: Channel
3594*5113495bSYour Name  * @forced: Force to switch channel, ignore SCC/MCC check
3595*5113495bSYour Name  *
3596*5113495bSYour Name  * Moves the SAP interface by invoking the function which
3597*5113495bSYour Name  * executes the callback to perform channel switch using (E)CSA.
3598*5113495bSYour Name  *
3599*5113495bSYour Name  * Return: QDF_STATUS
3600*5113495bSYour Name  */
3601*5113495bSYour Name QDF_STATUS hdd_switch_sap_channel(struct wlan_hdd_link_info *link_info,
3602*5113495bSYour Name 				  uint8_t channel, bool forced);
3603*5113495bSYour Name 
3604*5113495bSYour Name /**
3605*5113495bSYour Name  * hdd_switch_sap_chan_freq() - Move SAP to the given channel
3606*5113495bSYour Name  * @adapter: AP adapter
3607*5113495bSYour Name  * @chan_freq: Channel frequency
3608*5113495bSYour Name  * @ch_width: channel bandwidth
3609*5113495bSYour Name  * @forced: Force to switch channel, ignore SCC/MCC check
3610*5113495bSYour Name  *
3611*5113495bSYour Name  * Moves the SAP interface by invoking the function which
3612*5113495bSYour Name  * executes the callback to perform channel switch using (E)CSA.
3613*5113495bSYour Name  *
3614*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS if successfully
3615*5113495bSYour Name  */
3616*5113495bSYour Name QDF_STATUS hdd_switch_sap_chan_freq(struct hdd_adapter *adapter,
3617*5113495bSYour Name 				    qdf_freq_t chan_freq,
3618*5113495bSYour Name 				    enum phy_ch_width ch_width,
3619*5113495bSYour Name 				    bool forced);
3620*5113495bSYour Name 
3621*5113495bSYour Name #if defined(FEATURE_WLAN_CH_AVOID)
3622*5113495bSYour Name QDF_STATUS hdd_unsafe_channel_restart_sap(struct hdd_context *hdd_ctx);
3623*5113495bSYour Name 
3624*5113495bSYour Name void hdd_ch_avoid_ind(struct hdd_context *hdd_ctxt,
3625*5113495bSYour Name 		      struct unsafe_ch_list *unsafe_chan_list,
3626*5113495bSYour Name 		      struct ch_avoid_ind_type *avoid_freq_list);
3627*5113495bSYour Name #else
3628*5113495bSYour Name static inline
hdd_unsafe_channel_restart_sap(struct hdd_context * hdd_ctx)3629*5113495bSYour Name QDF_STATUS hdd_unsafe_channel_restart_sap(struct hdd_context *hdd_ctx)
3630*5113495bSYour Name {
3631*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
3632*5113495bSYour Name }
3633*5113495bSYour Name 
3634*5113495bSYour Name static inline
hdd_ch_avoid_ind(struct hdd_context * hdd_ctxt,struct unsafe_ch_list * unsafe_chan_list,struct ch_avoid_ind_type * avoid_freq_list)3635*5113495bSYour Name void hdd_ch_avoid_ind(struct hdd_context *hdd_ctxt,
3636*5113495bSYour Name 		      struct unsafe_ch_list *unsafe_chan_list,
3637*5113495bSYour Name 		      struct ch_avoid_ind_type *avoid_freq_list)
3638*5113495bSYour Name {
3639*5113495bSYour Name }
3640*5113495bSYour Name #endif
3641*5113495bSYour Name 
3642*5113495bSYour Name /**
3643*5113495bSYour Name  * hdd_free_mac_address_lists() - Free both the MAC address lists
3644*5113495bSYour Name  * @hdd_ctx: HDD context
3645*5113495bSYour Name  *
3646*5113495bSYour Name  * This API clears/memset provisioned address list and
3647*5113495bSYour Name  * derived address list
3648*5113495bSYour Name  *
3649*5113495bSYour Name  */
3650*5113495bSYour Name void hdd_free_mac_address_lists(struct hdd_context *hdd_ctx);
3651*5113495bSYour Name 
3652*5113495bSYour Name /**
3653*5113495bSYour Name  * hdd_update_macaddr() - update mac address
3654*5113495bSYour Name  * @hdd_ctx:	hdd contxt
3655*5113495bSYour Name  * @hw_macaddr:	mac address
3656*5113495bSYour Name  * @generate_mac_auto: Indicates whether the first address is
3657*5113495bSYour Name  * provisioned address or derived address.
3658*5113495bSYour Name  *
3659*5113495bSYour Name  * Mac address for multiple virtual interface is found as following
3660*5113495bSYour Name  * i) The mac address of the first interface is just the actual hw mac address.
3661*5113495bSYour Name  * ii) MSM 3 or 4 bits of byte5 of the actual mac address are used to
3662*5113495bSYour Name  *     define the mac address for the remaining interfaces and locally
3663*5113495bSYour Name  *     admistered bit is set. INTF_MACADDR_MASK is based on the number of
3664*5113495bSYour Name  *     supported virtual interfaces, right now this is 0x07 (meaning 8
3665*5113495bSYour Name  *     interface).
3666*5113495bSYour Name  *     Byte[3] of second interface will be hw_macaddr[3](bit5..7) + 1,
3667*5113495bSYour Name  *     for third interface it will be hw_macaddr[3](bit5..7) + 2, etc.
3668*5113495bSYour Name  *
3669*5113495bSYour Name  * Return: None
3670*5113495bSYour Name  */
3671*5113495bSYour Name void hdd_update_macaddr(struct hdd_context *hdd_ctx,
3672*5113495bSYour Name 			struct qdf_mac_addr hw_macaddr, bool generate_mac_auto);
3673*5113495bSYour Name 
3674*5113495bSYour Name /**
3675*5113495bSYour Name  * hdd_store_nss_chains_cfg_in_vdev() - Store the per vdev ini cfg in vdev_obj
3676*5113495bSYour Name  * @hdd_ctx: HDD context passed from caller
3677*5113495bSYour Name  * @vdev: VDEV passed with caller holding reference.
3678*5113495bSYour Name  *
3679*5113495bSYour Name  * This function will store the per vdev nss params to the particular mlme
3680*5113495bSYour Name  * vdev obj.
3681*5113495bSYour Name  * Caller shall acquire the reference for vdev objmgr and release on return.
3682*5113495bSYour Name  *
3683*5113495bSYour Name  * Return: None
3684*5113495bSYour Name  */
3685*5113495bSYour Name void
3686*5113495bSYour Name hdd_store_nss_chains_cfg_in_vdev(struct hdd_context *hdd_ctx,
3687*5113495bSYour Name 				 struct wlan_objmgr_vdev *vdev);
3688*5113495bSYour Name 
3689*5113495bSYour Name /**
3690*5113495bSYour Name  * wlan_hdd_set_roaming_state() - Enable or disable roaming
3691*5113495bSYour Name  * on all STAs except the input one
3692*5113495bSYour Name  * @cur_link_info: Current link info pointer in HDD adapter
3693*5113495bSYour Name  * @rso_op_requestor: roam disable requestor
3694*5113495bSYour Name  * @enab_roam: Set to true to enable roaming or else set false
3695*5113495bSYour Name  *
3696*5113495bSYour Name  * This function loops through all adapters and enables or
3697*5113495bSYour Name  * disables roaming on each STA mode adapter except the
3698*5113495bSYour Name  * current adapter passed from the caller.
3699*5113495bSYour Name  * If @enab_roam is true, roaming is enabled or else
3700*5113495bSYour Name  * roaming is disabled
3701*5113495bSYour Name  *
3702*5113495bSYour Name  * Return: None
3703*5113495bSYour Name  */
3704*5113495bSYour Name void
3705*5113495bSYour Name wlan_hdd_set_roaming_state(struct wlan_hdd_link_info *cur_link_info,
3706*5113495bSYour Name 			   enum wlan_cm_rso_control_requestor rso_op_requestor,
3707*5113495bSYour Name 			   bool enab_roam);
3708*5113495bSYour Name 
3709*5113495bSYour Name QDF_STATUS hdd_post_cds_enable_config(struct hdd_context *hdd_ctx);
3710*5113495bSYour Name 
3711*5113495bSYour Name QDF_STATUS hdd_abort_mac_scan_all_adapters(struct hdd_context *hdd_ctx);
3712*5113495bSYour Name 
3713*5113495bSYour Name void wlan_hdd_stop_sap(struct hdd_adapter *ap_adapter);
3714*5113495bSYour Name 
3715*5113495bSYour Name /**
3716*5113495bSYour Name  * wlan_hdd_start_sap() - this function starts bss of SAP.
3717*5113495bSYour Name  * @link_info: Link info pointer in SAP/GO adapter
3718*5113495bSYour Name  * @reinit: true if this is a re-init, otherwise initial int
3719*5113495bSYour Name  *
3720*5113495bSYour Name  * This function will process the starting of sap adapter.
3721*5113495bSYour Name  *
3722*5113495bSYour Name  * Return: None
3723*5113495bSYour Name  */
3724*5113495bSYour Name void wlan_hdd_start_sap(struct wlan_hdd_link_info *link_info, bool reinit);
3725*5113495bSYour Name 
3726*5113495bSYour Name /**
3727*5113495bSYour Name  * wlan_hdd_set_sap_beacon_protection() - this function will set beacon
3728*5113495bSYour Name  * protection for SAP.
3729*5113495bSYour Name  * @hdd_ctx: pointer to HDD context
3730*5113495bSYour Name  * @link_info: Link info pointer
3731*5113495bSYour Name  * @beacon: pointer to beacon data structure
3732*5113495bSYour Name  *
3733*5113495bSYour Name  * This function will enable beacon protection and cache the value in vdev
3734*5113495bSYour Name  * priv object.
3735*5113495bSYour Name  *
3736*5113495bSYour Name  * Return: None
3737*5113495bSYour Name  */
3738*5113495bSYour Name void wlan_hdd_set_sap_beacon_protection(struct hdd_context *hdd_ctx,
3739*5113495bSYour Name 					struct wlan_hdd_link_info *link_info,
3740*5113495bSYour Name 					struct hdd_beacon_data *beacon);
3741*5113495bSYour Name #ifdef QCA_CONFIG_SMP
3742*5113495bSYour Name int wlan_hdd_get_cpu(void);
3743*5113495bSYour Name #else
wlan_hdd_get_cpu(void)3744*5113495bSYour Name static inline int wlan_hdd_get_cpu(void)
3745*5113495bSYour Name {
3746*5113495bSYour Name 	return 0;
3747*5113495bSYour Name }
3748*5113495bSYour Name #endif
3749*5113495bSYour Name 
3750*5113495bSYour Name void wlan_hdd_txrx_pause_cb(uint8_t vdev_id,
3751*5113495bSYour Name 	enum netif_action_type action, enum netif_reason_type reason);
3752*5113495bSYour Name 
3753*5113495bSYour Name #ifdef QCA_HL_NETDEV_FLOW_CONTROL
3754*5113495bSYour Name void wlan_hdd_mod_fc_timer(struct hdd_adapter *adapter,
3755*5113495bSYour Name 			   enum netif_action_type action);
3756*5113495bSYour Name #else
wlan_hdd_mod_fc_timer(struct hdd_adapter * adapter,enum netif_action_type action)3757*5113495bSYour Name static inline void wlan_hdd_mod_fc_timer(struct hdd_adapter *adapter,
3758*5113495bSYour Name 					 enum netif_action_type action)
3759*5113495bSYour Name {
3760*5113495bSYour Name }
3761*5113495bSYour Name #endif /* QCA_HL_NETDEV_FLOW_CONTROL */
3762*5113495bSYour Name 
3763*5113495bSYour Name /**
3764*5113495bSYour Name  * hdd_wlan_dump_stats() - display dump Stats
3765*5113495bSYour Name  * @adapter: adapter handle
3766*5113495bSYour Name  * @stats_id: stats id from user
3767*5113495bSYour Name  *
3768*5113495bSYour Name  * Return: 0 => success, error code on failure
3769*5113495bSYour Name  */
3770*5113495bSYour Name int hdd_wlan_dump_stats(struct hdd_adapter *adapter, int stats_id);
3771*5113495bSYour Name 
3772*5113495bSYour Name /**
3773*5113495bSYour Name  * hdd_wlan_clear_stats() - clear Stats
3774*5113495bSYour Name  * @adapter: adapter handle
3775*5113495bSYour Name  * @stats_id: stats id from user
3776*5113495bSYour Name  *
3777*5113495bSYour Name  * Return: 0 => success, error code on failure
3778*5113495bSYour Name  */
3779*5113495bSYour Name int hdd_wlan_clear_stats(struct hdd_adapter *adapter, int stats_id);
3780*5113495bSYour Name 
3781*5113495bSYour Name /**
3782*5113495bSYour Name  * hdd_cb_handle_to_context() - turn an HDD handle into an HDD context
3783*5113495bSYour Name  * @hdd_handle: HDD handle to be converted
3784*5113495bSYour Name  *
3785*5113495bSYour Name  * Return: HDD context referenced by @hdd_handle
3786*5113495bSYour Name  */
3787*5113495bSYour Name static inline
hdd_cb_handle_to_context(hdd_cb_handle hdd_handle)3788*5113495bSYour Name struct hdd_context *hdd_cb_handle_to_context(hdd_cb_handle hdd_handle)
3789*5113495bSYour Name {
3790*5113495bSYour Name 	return (struct hdd_context *)hdd_handle;
3791*5113495bSYour Name }
3792*5113495bSYour Name 
3793*5113495bSYour Name /**
3794*5113495bSYour Name  * wlan_hdd_display_netif_queue_history() - display netif queue history
3795*5113495bSYour Name  * @context: opaque handle to hdd context
3796*5113495bSYour Name  * @verb_lvl: Verbosity levels for stats
3797*5113495bSYour Name  *
3798*5113495bSYour Name  * Return: none
3799*5113495bSYour Name  */
3800*5113495bSYour Name void
3801*5113495bSYour Name wlan_hdd_display_netif_queue_history(hdd_cb_handle context,
3802*5113495bSYour Name 				     enum qdf_stats_verbosity_level verb_lvl);
3803*5113495bSYour Name 
3804*5113495bSYour Name /**
3805*5113495bSYour Name  * wlan_hdd_display_adapter_netif_queue_history() - display adapter based netif
3806*5113495bSYour Name  * queue history
3807*5113495bSYour Name  * @adapter: hdd adapter
3808*5113495bSYour Name  *
3809*5113495bSYour Name  * Return: none
3810*5113495bSYour Name  */
3811*5113495bSYour Name void
3812*5113495bSYour Name wlan_hdd_display_adapter_netif_queue_history(struct hdd_adapter *adapter);
3813*5113495bSYour Name 
3814*5113495bSYour Name void wlan_hdd_clear_netif_queue_history(struct hdd_context *hdd_ctx);
3815*5113495bSYour Name const char *hdd_get_fwpath(void);
3816*5113495bSYour Name void hdd_indicate_mgmt_frame(tSirSmeMgmtFrameInd *frame_ind);
3817*5113495bSYour Name 
3818*5113495bSYour Name /**
3819*5113495bSYour Name  * hdd_get_adapter_by_iface_name() - Return adapter with given interface name
3820*5113495bSYour Name  * @hdd_ctx: hdd context.
3821*5113495bSYour Name  * @iface_name: interface name
3822*5113495bSYour Name  *
3823*5113495bSYour Name  * This function is used to get the adapter with given interface name
3824*5113495bSYour Name  *
3825*5113495bSYour Name  * Return: adapter pointer if found, NULL otherwise
3826*5113495bSYour Name  *
3827*5113495bSYour Name  */
3828*5113495bSYour Name struct hdd_adapter *hdd_get_adapter_by_iface_name(struct hdd_context *hdd_ctx,
3829*5113495bSYour Name 						  const char *iface_name);
3830*5113495bSYour Name 
3831*5113495bSYour Name /**
3832*5113495bSYour Name  * hdd_get_adapter_by_ifindex() - Return adapter associated with an ifndex
3833*5113495bSYour Name  * @hdd_ctx: hdd context.
3834*5113495bSYour Name  * @if_index: netdev interface index
3835*5113495bSYour Name  *
3836*5113495bSYour Name  * This function is used to get the adapter associated with a netdev with the
3837*5113495bSYour Name  * given interface index.
3838*5113495bSYour Name  *
3839*5113495bSYour Name  * Return: adapter pointer if found, NULL otherwise
3840*5113495bSYour Name  *
3841*5113495bSYour Name  */
3842*5113495bSYour Name struct hdd_adapter *hdd_get_adapter_by_ifindex(struct hdd_context *hdd_ctx,
3843*5113495bSYour Name 					       uint32_t if_index);
3844*5113495bSYour Name 
3845*5113495bSYour Name enum phy_ch_width hdd_map_nl_chan_width(enum nl80211_chan_width ch_width);
3846*5113495bSYour Name 
3847*5113495bSYour Name /**
3848*5113495bSYour Name  * hdd_nl_to_qdf_iface_type() - map nl80211_iftype to QDF_OPMODE
3849*5113495bSYour Name  * @nl_type: the input NL80211 interface type to map
3850*5113495bSYour Name  * @out_qdf_type: the output, equivalent QDF operating mode
3851*5113495bSYour Name  *
3852*5113495bSYour Name  * Return: QDF_STATUS
3853*5113495bSYour Name  */
3854*5113495bSYour Name QDF_STATUS hdd_nl_to_qdf_iface_type(enum nl80211_iftype nl_type,
3855*5113495bSYour Name 				    enum QDF_OPMODE *out_qdf_type);
3856*5113495bSYour Name 
3857*5113495bSYour Name /**
3858*5113495bSYour Name  * wlan_hdd_find_opclass() - Find operating class for a channel
3859*5113495bSYour Name  * @mac_handle: global MAC handle
3860*5113495bSYour Name  * @channel: channel id
3861*5113495bSYour Name  * @bw_offset: bandwidth offset
3862*5113495bSYour Name  *
3863*5113495bSYour Name  * Function invokes sme api to find the operating class
3864*5113495bSYour Name  *
3865*5113495bSYour Name  * Return: operating class
3866*5113495bSYour Name  */
3867*5113495bSYour Name uint8_t wlan_hdd_find_opclass(mac_handle_t mac_handle, uint8_t channel,
3868*5113495bSYour Name 			      uint8_t bw_offset);
3869*5113495bSYour Name 
3870*5113495bSYour Name int hdd_update_config(struct hdd_context *hdd_ctx);
3871*5113495bSYour Name 
3872*5113495bSYour Name /**
3873*5113495bSYour Name  * hdd_update_components_config() - Initialize driver per module ini parameters
3874*5113495bSYour Name  * @hdd_ctx: HDD Context
3875*5113495bSYour Name  *
3876*5113495bSYour Name  * API is used to initialize components configuration parameters
3877*5113495bSYour Name  * Return: 0 for success, errno for failure
3878*5113495bSYour Name  */
3879*5113495bSYour Name int hdd_update_components_config(struct hdd_context *hdd_ctx);
3880*5113495bSYour Name 
3881*5113495bSYour Name /**
3882*5113495bSYour Name  * hdd_chan_change_notify_work_handler() - Function to notify hostapd about
3883*5113495bSYour Name  * channel change
3884*5113495bSYour Name  * @work: work pointer
3885*5113495bSYour Name  *
3886*5113495bSYour Name  * This function is used to notify hostapd about the channel change
3887*5113495bSYour Name  *
3888*5113495bSYour Name  * Return: None
3889*5113495bSYour Name  *
3890*5113495bSYour Name  */
3891*5113495bSYour Name void hdd_chan_change_notify_work_handler(void *work);
3892*5113495bSYour Name 
3893*5113495bSYour Name int wlan_hdd_set_channel(struct wiphy *wiphy,
3894*5113495bSYour Name 		struct net_device *dev,
3895*5113495bSYour Name 		struct cfg80211_chan_def *chandef,
3896*5113495bSYour Name 		enum nl80211_channel_type channel_type);
3897*5113495bSYour Name 
3898*5113495bSYour Name /**
3899*5113495bSYour Name  * wlan_hdd_cfg80211_start_bss() - start bss
3900*5113495bSYour Name  * @link_info: Link info pointer in hostapd adapter
3901*5113495bSYour Name  * @params: Pointer to start bss beacon parameters
3902*5113495bSYour Name  * @ssid: Pointer ssid
3903*5113495bSYour Name  * @ssid_len: Length of ssid
3904*5113495bSYour Name  * @hidden_ssid: Hidden SSID parameter
3905*5113495bSYour Name  * @check_for_concurrency: Flag to indicate if check for concurrency is needed
3906*5113495bSYour Name  *
3907*5113495bSYour Name  * Return: 0 for success non-zero for failure
3908*5113495bSYour Name  */
3909*5113495bSYour Name int wlan_hdd_cfg80211_start_bss(struct wlan_hdd_link_info *link_info,
3910*5113495bSYour Name 				struct cfg80211_beacon_data *params,
3911*5113495bSYour Name 				const u8 *ssid, size_t ssid_len,
3912*5113495bSYour Name 				enum nl80211_hidden_ssid hidden_ssid,
3913*5113495bSYour Name 				bool check_for_concurrency);
3914*5113495bSYour Name 
3915*5113495bSYour Name #if !defined(REMOVE_PKT_LOG)
3916*5113495bSYour Name int hdd_process_pktlog_command(struct hdd_context *hdd_ctx, uint32_t set_value,
3917*5113495bSYour Name 			       int set_value2);
3918*5113495bSYour Name int hdd_pktlog_enable_disable(struct hdd_context *hdd_ctx, bool enable,
3919*5113495bSYour Name 			      uint8_t user_triggered, int size);
3920*5113495bSYour Name 
3921*5113495bSYour Name #else
3922*5113495bSYour Name static inline
hdd_pktlog_enable_disable(struct hdd_context * hdd_ctx,bool enable,uint8_t user_triggered,int size)3923*5113495bSYour Name int hdd_pktlog_enable_disable(struct hdd_context *hdd_ctx, bool enable,
3924*5113495bSYour Name 			      uint8_t user_triggered, int size)
3925*5113495bSYour Name {
3926*5113495bSYour Name 	return 0;
3927*5113495bSYour Name }
3928*5113495bSYour Name 
3929*5113495bSYour Name static inline
hdd_process_pktlog_command(struct hdd_context * hdd_ctx,uint32_t set_value,int set_value2)3930*5113495bSYour Name int hdd_process_pktlog_command(struct hdd_context *hdd_ctx,
3931*5113495bSYour Name 			       uint32_t set_value, int set_value2)
3932*5113495bSYour Name {
3933*5113495bSYour Name 	return 0;
3934*5113495bSYour Name }
3935*5113495bSYour Name #endif /* REMOVE_PKT_LOG */
3936*5113495bSYour Name 
3937*5113495bSYour Name #if defined(FEATURE_SG) && !defined(CONFIG_HL_SUPPORT)
3938*5113495bSYour Name /**
3939*5113495bSYour Name  * hdd_set_sg_flags() - enable SG flag in the network device
3940*5113495bSYour Name  * @hdd_ctx: HDD context
3941*5113495bSYour Name  * @wlan_dev: network device structure
3942*5113495bSYour Name  *
3943*5113495bSYour Name  * This function enables the SG feature flag in the
3944*5113495bSYour Name  * given network device.
3945*5113495bSYour Name  *
3946*5113495bSYour Name  * Return: none
3947*5113495bSYour Name  */
hdd_set_sg_flags(struct hdd_context * hdd_ctx,struct net_device * wlan_dev)3948*5113495bSYour Name static inline void hdd_set_sg_flags(struct hdd_context *hdd_ctx,
3949*5113495bSYour Name 				struct net_device *wlan_dev)
3950*5113495bSYour Name {
3951*5113495bSYour Name 	hdd_debug("SG Enabled");
3952*5113495bSYour Name 	wlan_dev->features |= NETIF_F_SG;
3953*5113495bSYour Name }
3954*5113495bSYour Name #else
hdd_set_sg_flags(struct hdd_context * hdd_ctx,struct net_device * wlan_dev)3955*5113495bSYour Name static inline void hdd_set_sg_flags(struct hdd_context *hdd_ctx,
3956*5113495bSYour Name 				struct net_device *wlan_dev){}
3957*5113495bSYour Name #endif
3958*5113495bSYour Name 
3959*5113495bSYour Name /**
3960*5113495bSYour Name  * hdd_set_netdev_flags() - set netdev flags for adapter as per ini config
3961*5113495bSYour Name  * @adapter: hdd adapter context
3962*5113495bSYour Name  *
3963*5113495bSYour Name  * This function sets netdev feature flags for the adapter.
3964*5113495bSYour Name  *
3965*5113495bSYour Name  * Return: none
3966*5113495bSYour Name  */
3967*5113495bSYour Name void hdd_set_netdev_flags(struct hdd_adapter *adapter);
3968*5113495bSYour Name 
3969*5113495bSYour Name #ifdef FEATURE_TSO
3970*5113495bSYour Name /**
3971*5113495bSYour Name  * hdd_get_tso_csum_feature_flags() - Return TSO and csum flags if enabled
3972*5113495bSYour Name  *
3973*5113495bSYour Name  * Return: Enabled feature flags set, 0 on failure
3974*5113495bSYour Name  */
hdd_get_tso_csum_feature_flags(void)3975*5113495bSYour Name static inline netdev_features_t hdd_get_tso_csum_feature_flags(void)
3976*5113495bSYour Name {
3977*5113495bSYour Name 	netdev_features_t netdev_features = 0;
3978*5113495bSYour Name 	ol_txrx_soc_handle soc = cds_get_context(QDF_MODULE_ID_SOC);
3979*5113495bSYour Name 
3980*5113495bSYour Name 	if (!soc) {
3981*5113495bSYour Name 		hdd_err("soc handle is NULL");
3982*5113495bSYour Name 		return 0;
3983*5113495bSYour Name 	}
3984*5113495bSYour Name 
3985*5113495bSYour Name 	if (cdp_cfg_get(soc, cfg_dp_enable_ip_tcp_udp_checksum_offload)) {
3986*5113495bSYour Name 		netdev_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
3987*5113495bSYour Name 
3988*5113495bSYour Name 		if (cdp_cfg_get(soc, cfg_dp_tso_enable)) {
3989*5113495bSYour Name 			/*
3990*5113495bSYour Name 			 * Enable TSO only if IP/UDP/TCP TX checksum flag is
3991*5113495bSYour Name 			 * enabled.
3992*5113495bSYour Name 			 */
3993*5113495bSYour Name 			netdev_features |= NETIF_F_TSO | NETIF_F_TSO6 |
3994*5113495bSYour Name 					   NETIF_F_SG;
3995*5113495bSYour Name 		}
3996*5113495bSYour Name 	}
3997*5113495bSYour Name 	return netdev_features;
3998*5113495bSYour Name }
3999*5113495bSYour Name 
4000*5113495bSYour Name /**
4001*5113495bSYour Name  * hdd_set_tso_flags() - enable TSO flags in the network device
4002*5113495bSYour Name  * @hdd_ctx: HDD context
4003*5113495bSYour Name  * @wlan_dev: network device structure
4004*5113495bSYour Name  *
4005*5113495bSYour Name  * This function enables the TSO related feature flags in the
4006*5113495bSYour Name  * given network device.
4007*5113495bSYour Name  *
4008*5113495bSYour Name  * Return: none
4009*5113495bSYour Name  */
hdd_set_tso_flags(struct hdd_context * hdd_ctx,struct net_device * wlan_dev)4010*5113495bSYour Name static inline void hdd_set_tso_flags(struct hdd_context *hdd_ctx,
4011*5113495bSYour Name 	 struct net_device *wlan_dev)
4012*5113495bSYour Name {
4013*5113495bSYour Name 	hdd_debug("TSO Enabled");
4014*5113495bSYour Name 
4015*5113495bSYour Name 	wlan_dev->features |= hdd_get_tso_csum_feature_flags();
4016*5113495bSYour Name }
4017*5113495bSYour Name #else
hdd_set_tso_flags(struct hdd_context * hdd_ctx,struct net_device * wlan_dev)4018*5113495bSYour Name static inline void hdd_set_tso_flags(struct hdd_context *hdd_ctx,
4019*5113495bSYour Name 	 struct net_device *wlan_dev)
4020*5113495bSYour Name {
4021*5113495bSYour Name 	hdd_set_sg_flags(hdd_ctx, wlan_dev);
4022*5113495bSYour Name }
4023*5113495bSYour Name 
hdd_get_tso_csum_feature_flags(void)4024*5113495bSYour Name static inline netdev_features_t hdd_get_tso_csum_feature_flags(void)
4025*5113495bSYour Name {
4026*5113495bSYour Name 	return 0;
4027*5113495bSYour Name }
4028*5113495bSYour Name #endif /* FEATURE_TSO */
4029*5113495bSYour Name 
4030*5113495bSYour Name /**
4031*5113495bSYour Name  * wlan_hdd_get_host_log_nl_proto() - Get host log netlink protocol
4032*5113495bSYour Name  * @hdd_ctx: HDD context
4033*5113495bSYour Name  *
4034*5113495bSYour Name  * This function returns with host log netlink protocol settings
4035*5113495bSYour Name  *
4036*5113495bSYour Name  * Return: none
4037*5113495bSYour Name  */
4038*5113495bSYour Name #ifdef WLAN_LOGGING_SOCK_SVC_ENABLE
wlan_hdd_get_host_log_nl_proto(struct hdd_context * hdd_ctx)4039*5113495bSYour Name static inline int wlan_hdd_get_host_log_nl_proto(struct hdd_context *hdd_ctx)
4040*5113495bSYour Name {
4041*5113495bSYour Name 	return hdd_ctx->config->host_log_custom_nl_proto;
4042*5113495bSYour Name }
4043*5113495bSYour Name #else
wlan_hdd_get_host_log_nl_proto(struct hdd_context * hdd_ctx)4044*5113495bSYour Name static inline int wlan_hdd_get_host_log_nl_proto(struct hdd_context *hdd_ctx)
4045*5113495bSYour Name {
4046*5113495bSYour Name 	return NETLINK_USERSOCK;
4047*5113495bSYour Name }
4048*5113495bSYour Name #endif
4049*5113495bSYour Name 
4050*5113495bSYour Name #ifdef CONFIG_CNSS_LOGGER
4051*5113495bSYour Name /**
4052*5113495bSYour Name  * wlan_hdd_nl_init() - wrapper function to CNSS_LOGGER case
4053*5113495bSYour Name  * @hdd_ctx:	the hdd context pointer
4054*5113495bSYour Name  *
4055*5113495bSYour Name  * The nl_srv_init() will call to cnss_logger_device_register() and
4056*5113495bSYour Name  * expect to get a radio_index from cnss_logger module and assign to
4057*5113495bSYour Name  * hdd_ctx->radio_index, then to maintain the consistency to original
4058*5113495bSYour Name  * design, adding the radio_index check here, then return the error
4059*5113495bSYour Name  * code if radio_index is not assigned correctly, which means the nl_init
4060*5113495bSYour Name  * from cnss_logger is failed.
4061*5113495bSYour Name  *
4062*5113495bSYour Name  * Return: 0 if successfully, otherwise error code
4063*5113495bSYour Name  */
wlan_hdd_nl_init(struct hdd_context * hdd_ctx)4064*5113495bSYour Name static inline int wlan_hdd_nl_init(struct hdd_context *hdd_ctx)
4065*5113495bSYour Name {
4066*5113495bSYour Name 	int proto;
4067*5113495bSYour Name 
4068*5113495bSYour Name 	proto = wlan_hdd_get_host_log_nl_proto(hdd_ctx);
4069*5113495bSYour Name 	hdd_ctx->radio_index = nl_srv_init(hdd_ctx->wiphy, proto);
4070*5113495bSYour Name 
4071*5113495bSYour Name 	/* radio_index is assigned from 0, so only >=0 will be valid index  */
4072*5113495bSYour Name 	if (hdd_ctx->radio_index >= 0)
4073*5113495bSYour Name 		return 0;
4074*5113495bSYour Name 	else
4075*5113495bSYour Name 		return -EINVAL;
4076*5113495bSYour Name }
4077*5113495bSYour Name #else
4078*5113495bSYour Name /**
4079*5113495bSYour Name  * wlan_hdd_nl_init() - wrapper function to non CNSS_LOGGER case
4080*5113495bSYour Name  * @hdd_ctx:	the hdd context pointer
4081*5113495bSYour Name  *
4082*5113495bSYour Name  * In case of non CNSS_LOGGER case, the nl_srv_init() will initialize
4083*5113495bSYour Name  * the netlink socket and return the success or not.
4084*5113495bSYour Name  *
4085*5113495bSYour Name  * Return: the return value from  nl_srv_init()
4086*5113495bSYour Name  */
wlan_hdd_nl_init(struct hdd_context * hdd_ctx)4087*5113495bSYour Name static inline int wlan_hdd_nl_init(struct hdd_context *hdd_ctx)
4088*5113495bSYour Name {
4089*5113495bSYour Name 	int proto;
4090*5113495bSYour Name 
4091*5113495bSYour Name 	proto = wlan_hdd_get_host_log_nl_proto(hdd_ctx);
4092*5113495bSYour Name 	return nl_srv_init(hdd_ctx->wiphy, proto);
4093*5113495bSYour Name }
4094*5113495bSYour Name #endif
4095*5113495bSYour Name 
4096*5113495bSYour Name QDF_STATUS hdd_sme_close_session_callback(uint8_t vdev_id);
4097*5113495bSYour Name 
4098*5113495bSYour Name int hdd_register_cb(struct hdd_context *hdd_ctx);
4099*5113495bSYour Name void hdd_deregister_cb(struct hdd_context *hdd_ctx);
4100*5113495bSYour Name 
4101*5113495bSYour Name #ifdef WLAN_HDD_MULTI_VDEV_SINGLE_NDEV
4102*5113495bSYour Name static inline struct qdf_mac_addr *
hdd_adapter_get_netdev_mac_addr(struct hdd_adapter * adapter)4103*5113495bSYour Name hdd_adapter_get_netdev_mac_addr(struct hdd_adapter *adapter)
4104*5113495bSYour Name {
4105*5113495bSYour Name 	return &adapter->mac_addr;
4106*5113495bSYour Name }
4107*5113495bSYour Name #else
4108*5113495bSYour Name static inline struct qdf_mac_addr *
hdd_adapter_get_netdev_mac_addr(struct hdd_adapter * adapter)4109*5113495bSYour Name hdd_adapter_get_netdev_mac_addr(struct hdd_adapter *adapter)
4110*5113495bSYour Name {
4111*5113495bSYour Name 	if (hdd_adapter_is_ml_adapter(adapter) ||
4112*5113495bSYour Name 	    hdd_adapter_is_link_adapter(adapter))
4113*5113495bSYour Name 		return &adapter->mld_addr;
4114*5113495bSYour Name 
4115*5113495bSYour Name 	return &adapter->mac_addr;
4116*5113495bSYour Name }
4117*5113495bSYour Name #endif
4118*5113495bSYour Name 
4119*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC) && \
4120*5113495bSYour Name 	defined(WLAN_HDD_MULTI_VDEV_SINGLE_NDEV)
4121*5113495bSYour Name /**
4122*5113495bSYour Name  * hdd_adapter_fill_link_address() - Fill derived
4123*5113495bSYour Name  * link address in adapter
4124*5113495bSYour Name  * @adapter: HDD adapter
4125*5113495bSYour Name  *
4126*5113495bSYour Name  * The API takes MLD address of @adapter and calls link address
4127*5113495bSYour Name  * derive API and fills the derived link address in each link.
4128*5113495bSYour Name  *
4129*5113495bSYour Name  * Return: QDF_STATUS
4130*5113495bSYour Name  */
4131*5113495bSYour Name QDF_STATUS hdd_adapter_fill_link_address(struct hdd_adapter *adapter);
4132*5113495bSYour Name #else
4133*5113495bSYour Name static inline
hdd_adapter_fill_link_address(struct hdd_adapter * adapter)4134*5113495bSYour Name QDF_STATUS hdd_adapter_fill_link_address(struct hdd_adapter *adapter)
4135*5113495bSYour Name {
4136*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
4137*5113495bSYour Name }
4138*5113495bSYour Name #endif
4139*5113495bSYour Name 
4140*5113495bSYour Name /**
4141*5113495bSYour Name  * hdd_adapter_get_link_mac_addr() - Returns the appropriate
4142*5113495bSYour Name  * MAC address pointer in adapter.
4143*5113495bSYour Name  * @link_info: Link info in HDD adapter.
4144*5113495bSYour Name  *
4145*5113495bSYour Name  * If WLAN_HDD_MULTI_VDEV_SINGLE_NDEV flag is enabled, then MAC address pointer
4146*5113495bSYour Name  * returned is based on following conditions:
4147*5113495bSYour Name  *      -if adapter of link info is non-ml:
4148*5113495bSYour Name  *              Return pointer of mac_addr in adapter.
4149*5113495bSYour Name  *      -else if link_addr in @link_info is NULL:
4150*5113495bSYour Name  *              Return pointer of mac_addr in adapter.
4151*5113495bSYour Name  *      -else
4152*5113495bSYour Name  *              Return pointer of link_addr in @link_info.
4153*5113495bSYour Name  *
4154*5113495bSYour Name  * If WLAN_HDD_MULTI_VDEV_SINGLE_NDEV flag is not enabled, then return pointer
4155*5113495bSYour Name  * of mac_addr in adapter.
4156*5113495bSYour Name  *
4157*5113495bSYour Name  * Return: MAC address pointer based on adapter type.
4158*5113495bSYour Name  */
4159*5113495bSYour Name struct qdf_mac_addr *
4160*5113495bSYour Name hdd_adapter_get_link_mac_addr(struct wlan_hdd_link_info *link_info);
4161*5113495bSYour Name 
4162*5113495bSYour Name /**
4163*5113495bSYour Name  * hdd_adapter_check_duplicate_session() - Check for duplicate
4164*5113495bSYour Name  * session on start adapter.
4165*5113495bSYour Name  * @adapter: HDD adapter
4166*5113495bSYour Name  *
4167*5113495bSYour Name  * The API passes list of addresses contained in @adapter to
4168*5113495bSYour Name  * sme_check_for_duplicate_session() to check the status
4169*5113495bSYour Name  * of existing peer with same MAC address.
4170*5113495bSYour Name  *
4171*5113495bSYour Name  * Return: QDF_STATUS
4172*5113495bSYour Name  */
4173*5113495bSYour Name QDF_STATUS hdd_adapter_check_duplicate_session(struct hdd_adapter *adapter);
4174*5113495bSYour Name 
4175*5113495bSYour Name /**
4176*5113495bSYour Name  * hdd_adapter_reset_station_ctx() - Resets station context with appropriate
4177*5113495bSYour Name  * initial value.
4178*5113495bSYour Name  * @adapter: HDD adapter
4179*5113495bSYour Name  *
4180*5113495bSYour Name  * Return: void
4181*5113495bSYour Name  */
4182*5113495bSYour Name void hdd_adapter_reset_station_ctx(struct hdd_adapter *adapter);
4183*5113495bSYour Name 
4184*5113495bSYour Name /**
4185*5113495bSYour Name  * hdd_start_station_adapter()- Start the Station Adapter
4186*5113495bSYour Name  * @adapter: HDD adapter
4187*5113495bSYour Name  *
4188*5113495bSYour Name  * This function initializes the adapter for the station mode.
4189*5113495bSYour Name  *
4190*5113495bSYour Name  * Return: 0 on success or errno on failure.
4191*5113495bSYour Name  */
4192*5113495bSYour Name int hdd_start_station_adapter(struct hdd_adapter *adapter);
4193*5113495bSYour Name 
4194*5113495bSYour Name /**
4195*5113495bSYour Name  * hdd_start_ap_adapter()- Start AP Adapter
4196*5113495bSYour Name  * @adapter: HDD adapter
4197*5113495bSYour Name  * @rtnl_held: True if rtnl lock is taken, otherwise false
4198*5113495bSYour Name  *
4199*5113495bSYour Name  * This function initializes the adapter for the AP mode.
4200*5113495bSYour Name  *
4201*5113495bSYour Name  * Return: 0 on success errno on failure.
4202*5113495bSYour Name  */
4203*5113495bSYour Name int hdd_start_ap_adapter(struct hdd_adapter *adapter, bool rtnl_held);
4204*5113495bSYour Name int hdd_configure_cds(struct hdd_context *hdd_ctx);
4205*5113495bSYour Name int hdd_set_fw_params(struct hdd_adapter *adapter);
4206*5113495bSYour Name 
4207*5113495bSYour Name #ifdef MULTI_CLIENT_LL_SUPPORT
4208*5113495bSYour Name /**
4209*5113495bSYour Name  * wlan_hdd_deinit_multi_client_info_table() - to deinit multi client info table
4210*5113495bSYour Name  * @adapter: hdd vdev/net_device context
4211*5113495bSYour Name  *
4212*5113495bSYour Name  * Return: none
4213*5113495bSYour Name  */
4214*5113495bSYour Name void wlan_hdd_deinit_multi_client_info_table(struct hdd_adapter *adapter);
4215*5113495bSYour Name #else
4216*5113495bSYour Name static inline void
wlan_hdd_deinit_multi_client_info_table(struct hdd_adapter * adapter)4217*5113495bSYour Name wlan_hdd_deinit_multi_client_info_table(struct hdd_adapter *adapter)
4218*5113495bSYour Name {}
4219*5113495bSYour Name #endif
4220*5113495bSYour Name 
4221*5113495bSYour Name /**
4222*5113495bSYour Name  * hdd_wlan_start_modules() - Single driver state machine for starting modules
4223*5113495bSYour Name  * @hdd_ctx: HDD context
4224*5113495bSYour Name  * @reinit: flag to indicate from SSR or normal path
4225*5113495bSYour Name  *
4226*5113495bSYour Name  * This function maintains the driver state machine it will be invoked from
4227*5113495bSYour Name  * startup, reinit and change interface. Depending on the driver state shall
4228*5113495bSYour Name  * perform the opening of the modules.
4229*5113495bSYour Name  *
4230*5113495bSYour Name  * Return: Errno
4231*5113495bSYour Name  */
4232*5113495bSYour Name int hdd_wlan_start_modules(struct hdd_context *hdd_ctx, bool reinit);
4233*5113495bSYour Name 
4234*5113495bSYour Name /**
4235*5113495bSYour Name  * hdd_wlan_stop_modules - Single driver state machine for stopping modules
4236*5113495bSYour Name  * @hdd_ctx: HDD context
4237*5113495bSYour Name  * @ftm_mode: ftm mode
4238*5113495bSYour Name  *
4239*5113495bSYour Name  * This function maintains the driver state machine it will be invoked from
4240*5113495bSYour Name  * exit, shutdown and con_mode change handler. Depending on the driver state
4241*5113495bSYour Name  * shall perform the stopping/closing of the modules.
4242*5113495bSYour Name  *
4243*5113495bSYour Name  * Return: Errno
4244*5113495bSYour Name  */
4245*5113495bSYour Name int hdd_wlan_stop_modules(struct hdd_context *hdd_ctx, bool ftm_mode);
4246*5113495bSYour Name 
4247*5113495bSYour Name /**
4248*5113495bSYour Name  * hdd_psoc_idle_timer_start() - start the idle psoc detection timer
4249*5113495bSYour Name  * @hdd_ctx: the hdd context for which the timer should be started
4250*5113495bSYour Name  *
4251*5113495bSYour Name  * Return: None
4252*5113495bSYour Name  */
4253*5113495bSYour Name void hdd_psoc_idle_timer_start(struct hdd_context *hdd_ctx);
4254*5113495bSYour Name 
4255*5113495bSYour Name /**
4256*5113495bSYour Name  * hdd_psoc_idle_timer_stop() - stop the idle psoc detection timer
4257*5113495bSYour Name  * @hdd_ctx: the hdd context for which the timer should be stopped
4258*5113495bSYour Name  *
4259*5113495bSYour Name  * Return: None
4260*5113495bSYour Name  */
4261*5113495bSYour Name void hdd_psoc_idle_timer_stop(struct hdd_context *hdd_ctx);
4262*5113495bSYour Name 
4263*5113495bSYour Name /**
4264*5113495bSYour Name  * hdd_trigger_psoc_idle_restart() - trigger restart of a previously shutdown
4265*5113495bSYour Name  *                                   idle psoc, if needed
4266*5113495bSYour Name  * @hdd_ctx: the hdd context which should be restarted
4267*5113495bSYour Name  *
4268*5113495bSYour Name  * This API does nothing if the given psoc is already active.
4269*5113495bSYour Name  *
4270*5113495bSYour Name  * Return: Errno
4271*5113495bSYour Name  */
4272*5113495bSYour Name int hdd_trigger_psoc_idle_restart(struct hdd_context *hdd_ctx);
4273*5113495bSYour Name 
4274*5113495bSYour Name int hdd_start_adapter(struct hdd_adapter *adapter, bool rtnl_held);
4275*5113495bSYour Name void hdd_populate_random_mac_addr(struct hdd_context *hdd_ctx, uint32_t num);
4276*5113495bSYour Name /**
4277*5113495bSYour Name  * hdd_is_interface_up()- Check if the given interface is up
4278*5113495bSYour Name  * @adapter: interface to check
4279*5113495bSYour Name  *
4280*5113495bSYour Name  * Checks whether the given interface was brought up by userspace.
4281*5113495bSYour Name  *
4282*5113495bSYour Name  * Return: true if interface was opened else false
4283*5113495bSYour Name  */
4284*5113495bSYour Name bool hdd_is_interface_up(struct hdd_adapter *adapter);
4285*5113495bSYour Name 
4286*5113495bSYour Name #ifdef WLAN_FEATURE_FASTPATH
4287*5113495bSYour Name void hdd_enable_fastpath(struct hdd_context *hdd_ctx,
4288*5113495bSYour Name 			 void *context);
4289*5113495bSYour Name #else
hdd_enable_fastpath(struct hdd_context * hdd_ctx,void * context)4290*5113495bSYour Name static inline void hdd_enable_fastpath(struct hdd_context *hdd_ctx,
4291*5113495bSYour Name 				       void *context)
4292*5113495bSYour Name {
4293*5113495bSYour Name }
4294*5113495bSYour Name #endif
4295*5113495bSYour Name void hdd_wlan_update_target_info(struct hdd_context *hdd_ctx, void *context);
4296*5113495bSYour Name 
4297*5113495bSYour Name enum  sap_acs_dfs_mode wlan_hdd_get_dfs_mode(enum dfs_mode mode);
4298*5113495bSYour Name 
4299*5113495bSYour Name /**
4300*5113495bSYour Name  * hdd_clone_local_unsafe_chan() - clone hdd ctx unsafe chan list
4301*5113495bSYour Name  * @hdd_ctx: hdd context pointer
4302*5113495bSYour Name  * @local_unsafe_list: copied unsafe chan list array
4303*5113495bSYour Name  * @local_unsafe_list_count: channel number in returned local_unsafe_list
4304*5113495bSYour Name  *
4305*5113495bSYour Name  * The function will allocate memory and make a copy the current unsafe
4306*5113495bSYour Name  * channels from hdd ctx. The caller need to free the local_unsafe_list
4307*5113495bSYour Name  * memory after use.
4308*5113495bSYour Name  *
4309*5113495bSYour Name  * Return: 0 if successfully clone unsafe chan list.
4310*5113495bSYour Name  */
4311*5113495bSYour Name int hdd_clone_local_unsafe_chan(struct hdd_context *hdd_ctx,
4312*5113495bSYour Name 	uint16_t **local_unsafe_list, uint16_t *local_unsafe_list_count);
4313*5113495bSYour Name 
4314*5113495bSYour Name /**
4315*5113495bSYour Name  * hdd_local_unsafe_channel_updated() - check unsafe chan list same or not
4316*5113495bSYour Name  * @hdd_ctx: hdd context pointer
4317*5113495bSYour Name  * @local_unsafe_list: unsafe chan list to be compared with hdd_ctx's list
4318*5113495bSYour Name  * @local_unsafe_list_count: channel number in local_unsafe_list
4319*5113495bSYour Name  * @restriction_mask: restriction mask is to differentiate current channel
4320*5113495bSYour Name  * list different from previous channel list
4321*5113495bSYour Name  *
4322*5113495bSYour Name  * The function checked the input channel is same as current unsafe chan
4323*5113495bSYour Name  * list in hdd_ctx.
4324*5113495bSYour Name  *
4325*5113495bSYour Name  * Return: true if input channel list is same as the list in hdd_ctx
4326*5113495bSYour Name  */
4327*5113495bSYour Name bool hdd_local_unsafe_channel_updated(struct hdd_context *hdd_ctx,
4328*5113495bSYour Name 	uint16_t *local_unsafe_list, uint16_t local_unsafe_list_count,
4329*5113495bSYour Name 	uint32_t restriction_mask);
4330*5113495bSYour Name 
4331*5113495bSYour Name int hdd_enable_disable_ca_event(struct hdd_context *hddctx,
4332*5113495bSYour Name 				uint8_t set_value);
4333*5113495bSYour Name 
4334*5113495bSYour Name /**
4335*5113495bSYour Name  * wlan_hdd_undo_acs : Do cleanup of DO_ACS
4336*5113495bSYour Name  * @link_info: Pointer of link_info in adapter
4337*5113495bSYour Name  *
4338*5113495bSYour Name  * This function handle cleanup of what was done in DO_ACS, including free
4339*5113495bSYour Name  * memory.
4340*5113495bSYour Name  *
4341*5113495bSYour Name  * Return: void
4342*5113495bSYour Name  */
4343*5113495bSYour Name void wlan_hdd_undo_acs(struct wlan_hdd_link_info *link_info);
4344*5113495bSYour Name 
4345*5113495bSYour Name /**
4346*5113495bSYour Name  * wlan_hdd_set_restriction_mask() - set restriction mask for hdd context
4347*5113495bSYour Name  * @hdd_ctx: hdd context pointer
4348*5113495bSYour Name  *
4349*5113495bSYour Name  * Return: None
4350*5113495bSYour Name  */
4351*5113495bSYour Name void wlan_hdd_set_restriction_mask(struct hdd_context *hdd_ctx);
4352*5113495bSYour Name 
4353*5113495bSYour Name /**
4354*5113495bSYour Name  * wlan_hdd_get_restriction_mask() - get restriction mask from hdd context
4355*5113495bSYour Name  * @hdd_ctx: hdd context pointer
4356*5113495bSYour Name  *
4357*5113495bSYour Name  * Return: restriction_mask
4358*5113495bSYour Name  */
4359*5113495bSYour Name uint32_t wlan_hdd_get_restriction_mask(struct hdd_context *hdd_ctx);
4360*5113495bSYour Name 
4361*5113495bSYour Name #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0))
4362*5113495bSYour Name static inline int
hdd_wlan_nla_put_u64(struct sk_buff * skb,int attrtype,u64 value)4363*5113495bSYour Name hdd_wlan_nla_put_u64(struct sk_buff *skb, int attrtype, u64 value)
4364*5113495bSYour Name {
4365*5113495bSYour Name 	return nla_put_u64(skb, attrtype, value);
4366*5113495bSYour Name }
4367*5113495bSYour Name #else
4368*5113495bSYour Name static inline int
hdd_wlan_nla_put_u64(struct sk_buff * skb,int attrtype,u64 value)4369*5113495bSYour Name hdd_wlan_nla_put_u64(struct sk_buff *skb, int attrtype, u64 value)
4370*5113495bSYour Name {
4371*5113495bSYour Name 	return nla_put_u64_64bit(skb, attrtype, value, NL80211_ATTR_PAD);
4372*5113495bSYour Name }
4373*5113495bSYour Name #endif
4374*5113495bSYour Name 
4375*5113495bSYour Name /**
4376*5113495bSYour Name  * hdd_roam_profile() - Get adapter's roam profile
4377*5113495bSYour Name  * @link_info: Link info pointer in HDD adapter
4378*5113495bSYour Name  *
4379*5113495bSYour Name  * Given an adapter this function returns a pointer to its roam profile.
4380*5113495bSYour Name  *
4381*5113495bSYour Name  * NOTE WELL: Caller is responsible for ensuring this interface is only
4382*5113495bSYour Name  * invoked for STA-type interfaces
4383*5113495bSYour Name  *
4384*5113495bSYour Name  * Return: pointer to the adapter's roam profile
4385*5113495bSYour Name  */
4386*5113495bSYour Name static inline struct csr_roam_profile *
hdd_roam_profile(struct wlan_hdd_link_info * link_info)4387*5113495bSYour Name hdd_roam_profile(struct wlan_hdd_link_info *link_info)
4388*5113495bSYour Name {
4389*5113495bSYour Name 	struct hdd_station_ctx *sta_ctx;
4390*5113495bSYour Name 
4391*5113495bSYour Name 	sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(link_info);
4392*5113495bSYour Name 	return &sta_ctx->roam_profile;
4393*5113495bSYour Name }
4394*5113495bSYour Name 
4395*5113495bSYour Name /**
4396*5113495bSYour Name  * hdd_is_roaming_in_progress() - check if roaming is in progress
4397*5113495bSYour Name  * @hdd_ctx: Global HDD context
4398*5113495bSYour Name  *
4399*5113495bSYour Name  * Checks if roaming is in progress on any of the adapters
4400*5113495bSYour Name  *
4401*5113495bSYour Name  * Return: true if roaming is in progress else false
4402*5113495bSYour Name  */
4403*5113495bSYour Name bool hdd_is_roaming_in_progress(struct hdd_context *hdd_ctx);
4404*5113495bSYour Name 
4405*5113495bSYour Name /**
4406*5113495bSYour Name  * hdd_is_connection_in_progress() - check if connection is in progress
4407*5113495bSYour Name  * @out_vdev_id: id of vdev where connection is occurring
4408*5113495bSYour Name  * @out_reason: scan reject reason
4409*5113495bSYour Name  *
4410*5113495bSYour Name  * Go through each adapter and check if connection is in progress.
4411*5113495bSYour Name  * Output parameters @out_vdev_id and @out_reason will only be written
4412*5113495bSYour Name  * when a connection is in progress.
4413*5113495bSYour Name  *
4414*5113495bSYour Name  * Return: true if connection is in progress else false
4415*5113495bSYour Name  */
4416*5113495bSYour Name bool hdd_is_connection_in_progress(uint8_t *out_vdev_id,
4417*5113495bSYour Name 				   enum scan_reject_states *out_reason);
4418*5113495bSYour Name 
4419*5113495bSYour Name /**
4420*5113495bSYour Name  * hdd_restart_sap() - to restart SAP in driver internally
4421*5113495bSYour Name  * @link_info: Link info pointer of SAP adapter
4422*5113495bSYour Name  *
4423*5113495bSYour Name  * Return: None
4424*5113495bSYour Name  */
4425*5113495bSYour Name void hdd_restart_sap(struct wlan_hdd_link_info *link_info);
4426*5113495bSYour Name bool hdd_set_connection_in_progress(bool value);
4427*5113495bSYour Name 
4428*5113495bSYour Name /**
4429*5113495bSYour Name  * wlan_hdd_init_chan_info() - initialize channel info variables
4430*5113495bSYour Name  * @hdd_ctx: hdd ctx
4431*5113495bSYour Name  *
4432*5113495bSYour Name  * This API initialize channel info variables
4433*5113495bSYour Name  *
4434*5113495bSYour Name  * Return: None
4435*5113495bSYour Name  */
4436*5113495bSYour Name void wlan_hdd_init_chan_info(struct hdd_context *hdd_ctx);
4437*5113495bSYour Name 
4438*5113495bSYour Name /**
4439*5113495bSYour Name  * wlan_hdd_deinit_chan_info() - deinitialize channel info variables
4440*5113495bSYour Name  * @hdd_ctx: hdd ctx
4441*5113495bSYour Name  *
4442*5113495bSYour Name  * This API deinitialize channel info variables
4443*5113495bSYour Name  *
4444*5113495bSYour Name  * Return: None
4445*5113495bSYour Name  */
4446*5113495bSYour Name void wlan_hdd_deinit_chan_info(struct hdd_context *hdd_ctx);
4447*5113495bSYour Name 
4448*5113495bSYour Name /**
4449*5113495bSYour Name  * hdd_is_any_interface_open() - Check for interface up
4450*5113495bSYour Name  * @hdd_ctx: HDD context
4451*5113495bSYour Name  *
4452*5113495bSYour Name  * Return: true if any interface is open
4453*5113495bSYour Name  */
4454*5113495bSYour Name bool hdd_is_any_interface_open(struct hdd_context *hdd_ctx);
4455*5113495bSYour Name 
4456*5113495bSYour Name #ifdef WIFI_POS_CONVERGED
4457*5113495bSYour Name /**
4458*5113495bSYour Name  * hdd_send_peer_status_ind_to_app() - wrapper to call legacy or new wifi_pos
4459*5113495bSYour Name  * function to send peer status to a registered application
4460*5113495bSYour Name  * @peer_mac: MAC address of peer
4461*5113495bSYour Name  * @peer_status: ePeerConnected or ePeerDisconnected
4462*5113495bSYour Name  * @peer_timing_meas_cap: 0: RTT/RTT2, 1: RTT3. Default is 0
4463*5113495bSYour Name  * @vdev_id: ID of the underlying vdev
4464*5113495bSYour Name  * @chan_info: operating channel information
4465*5113495bSYour Name  * @dev_mode: dev mode for which indication is sent
4466*5113495bSYour Name  *
4467*5113495bSYour Name  * Return: none
4468*5113495bSYour Name  */
hdd_send_peer_status_ind_to_app(struct qdf_mac_addr * peer_mac,uint8_t peer_status,uint8_t peer_timing_meas_cap,uint8_t vdev_id,struct oem_channel_info * chan_info,enum QDF_OPMODE dev_mode)4469*5113495bSYour Name static inline void hdd_send_peer_status_ind_to_app(
4470*5113495bSYour Name 					struct qdf_mac_addr *peer_mac,
4471*5113495bSYour Name 					uint8_t peer_status,
4472*5113495bSYour Name 					uint8_t peer_timing_meas_cap,
4473*5113495bSYour Name 					uint8_t vdev_id,
4474*5113495bSYour Name 					struct oem_channel_info *chan_info,
4475*5113495bSYour Name 					enum QDF_OPMODE dev_mode)
4476*5113495bSYour Name {
4477*5113495bSYour Name 	struct wifi_pos_ch_info ch_info;
4478*5113495bSYour Name 
4479*5113495bSYour Name 	if (!chan_info) {
4480*5113495bSYour Name 		os_if_wifi_pos_send_peer_status(peer_mac, peer_status,
4481*5113495bSYour Name 						peer_timing_meas_cap, vdev_id,
4482*5113495bSYour Name 						NULL, dev_mode);
4483*5113495bSYour Name 		return;
4484*5113495bSYour Name 	}
4485*5113495bSYour Name 
4486*5113495bSYour Name 	/* chan_id is obsoleted by mhz */
4487*5113495bSYour Name 	ch_info.chan_id = 0;
4488*5113495bSYour Name 	ch_info.mhz = chan_info->mhz;
4489*5113495bSYour Name 	ch_info.band_center_freq1 = chan_info->band_center_freq1;
4490*5113495bSYour Name 	ch_info.band_center_freq2 = chan_info->band_center_freq2;
4491*5113495bSYour Name 	ch_info.info = chan_info->info;
4492*5113495bSYour Name 	ch_info.reg_info_1 = chan_info->reg_info_1;
4493*5113495bSYour Name 	ch_info.reg_info_2 = chan_info->reg_info_2;
4494*5113495bSYour Name 	ch_info.nss = chan_info->nss;
4495*5113495bSYour Name 	ch_info.rate_flags = chan_info->rate_flags;
4496*5113495bSYour Name 	ch_info.sec_ch_offset = chan_info->sec_ch_offset;
4497*5113495bSYour Name 	ch_info.ch_width = chan_info->ch_width;
4498*5113495bSYour Name 	os_if_wifi_pos_send_peer_status(peer_mac, peer_status,
4499*5113495bSYour Name 					peer_timing_meas_cap, vdev_id,
4500*5113495bSYour Name 					&ch_info, dev_mode);
4501*5113495bSYour Name }
4502*5113495bSYour Name #else
hdd_send_peer_status_ind_to_app(struct qdf_mac_addr * peer_mac,uint8_t peer_status,uint8_t peer_timing_meas_cap,uint8_t vdev_id,struct oem_channel_info * chan_info,enum QDF_OPMODE dev_mode)4503*5113495bSYour Name static inline void hdd_send_peer_status_ind_to_app(
4504*5113495bSYour Name 					struct qdf_mac_addr *peer_mac,
4505*5113495bSYour Name 					uint8_t peer_status,
4506*5113495bSYour Name 					uint8_t peer_timing_meas_cap,
4507*5113495bSYour Name 					uint8_t vdev_id,
4508*5113495bSYour Name 					struct oem_channel_info *chan_info,
4509*5113495bSYour Name 					enum QDF_OPMODE dev_mode)
4510*5113495bSYour Name {
4511*5113495bSYour Name 	hdd_send_peer_status_ind_to_oem_app(peer_mac, peer_status,
4512*5113495bSYour Name 			peer_timing_meas_cap, vdev_id, chan_info, dev_mode);
4513*5113495bSYour Name }
4514*5113495bSYour Name #endif /* WIFI_POS_CONVERGENCE */
4515*5113495bSYour Name 
4516*5113495bSYour Name /**
4517*5113495bSYour Name  * wlan_hdd_send_mcc_vdev_quota()- Send mcc vdev quota value to FW
4518*5113495bSYour Name  * @adapter: Adapter data
4519*5113495bSYour Name  * @sval:    mcc vdev quota value
4520*5113495bSYour Name  *
4521*5113495bSYour Name  * Send mcc vdev quota value value to FW
4522*5113495bSYour Name  *
4523*5113495bSYour Name  * Return: 0 success else failure
4524*5113495bSYour Name  */
4525*5113495bSYour Name int wlan_hdd_send_mcc_vdev_quota(struct hdd_adapter *adapter, int sval);
4526*5113495bSYour Name 
4527*5113495bSYour Name /**
4528*5113495bSYour Name  * wlan_hdd_send_mcc_latency()- Send MCC latency to FW
4529*5113495bSYour Name  * @adapter: Adapter data
4530*5113495bSYour Name  * @sval:    MCC latency value
4531*5113495bSYour Name  *
4532*5113495bSYour Name  * Send MCC latency value to FW
4533*5113495bSYour Name  *
4534*5113495bSYour Name  * Return: 0 success else failure
4535*5113495bSYour Name  */
4536*5113495bSYour Name int wlan_hdd_send_mcc_latency(struct hdd_adapter *adapter, int sval);
4537*5113495bSYour Name 
4538*5113495bSYour Name /**
4539*5113495bSYour Name  * wlan_hdd_get_link_info_from_vdev()- Get link info from vdev id
4540*5113495bSYour Name  * and PSOC object data
4541*5113495bSYour Name  * @psoc: Psoc object data
4542*5113495bSYour Name  * @vdev_id: vdev id
4543*5113495bSYour Name  *
4544*5113495bSYour Name  * Get link info from vdev id and PSOC object data
4545*5113495bSYour Name  *
4546*5113495bSYour Name  * Return: link info pointer
4547*5113495bSYour Name  */
4548*5113495bSYour Name struct wlan_hdd_link_info *
4549*5113495bSYour Name wlan_hdd_get_link_info_from_vdev(struct wlan_objmgr_psoc *psoc,
4550*5113495bSYour Name 				 uint8_t vdev_id);
4551*5113495bSYour Name 
4552*5113495bSYour Name /**
4553*5113495bSYour Name  * hdd_unregister_notifiers()- unregister kernel notifiers
4554*5113495bSYour Name  * @hdd_ctx: Hdd Context
4555*5113495bSYour Name  *
4556*5113495bSYour Name  * Unregister netdev notifiers like Netdevice,IPv4 and IPv6.
4557*5113495bSYour Name  *
4558*5113495bSYour Name  */
4559*5113495bSYour Name void hdd_unregister_notifiers(struct hdd_context *hdd_ctx);
4560*5113495bSYour Name 
4561*5113495bSYour Name /**
4562*5113495bSYour Name  * hdd_dbs_scan_selection_init() - initialization for DBS scan selection config
4563*5113495bSYour Name  * @hdd_ctx: HDD context
4564*5113495bSYour Name  *
4565*5113495bSYour Name  * This function sends the DBS scan selection config configuration to the
4566*5113495bSYour Name  * firmware via WMA
4567*5113495bSYour Name  *
4568*5113495bSYour Name  * Return: 0 - success, < 0 - failure
4569*5113495bSYour Name  */
4570*5113495bSYour Name int hdd_dbs_scan_selection_init(struct hdd_context *hdd_ctx);
4571*5113495bSYour Name 
4572*5113495bSYour Name /**
4573*5113495bSYour Name  * hdd_update_scan_config - API to update scan configuration parameters
4574*5113495bSYour Name  * @hdd_ctx: HDD context
4575*5113495bSYour Name  *
4576*5113495bSYour Name  * Return: 0 if success else err
4577*5113495bSYour Name  */
4578*5113495bSYour Name int hdd_update_scan_config(struct hdd_context *hdd_ctx);
4579*5113495bSYour Name 
4580*5113495bSYour Name /**
4581*5113495bSYour Name  * hdd_start_complete()- complete the start event
4582*5113495bSYour Name  * @ret: return value for complete event.
4583*5113495bSYour Name  *
4584*5113495bSYour Name  * complete the startup event and set the return in
4585*5113495bSYour Name  * global variable
4586*5113495bSYour Name  *
4587*5113495bSYour Name  * Return: void
4588*5113495bSYour Name  */
4589*5113495bSYour Name 
4590*5113495bSYour Name void hdd_start_complete(int ret);
4591*5113495bSYour Name 
4592*5113495bSYour Name /**
4593*5113495bSYour Name  * hdd_chip_pwr_save_fail_detected_cb() - chip power save failure detected
4594*5113495bSYour Name  * callback
4595*5113495bSYour Name  * @hdd_handle: HDD handle
4596*5113495bSYour Name  * @data: chip power save failure detected data
4597*5113495bSYour Name  *
4598*5113495bSYour Name  * This function reads the chip power save failure detected data and fill in
4599*5113495bSYour Name  * the skb with NL attributes and send up the NL event.
4600*5113495bSYour Name  * This callback execute in atomic context and must not invoke any
4601*5113495bSYour Name  * blocking calls.
4602*5113495bSYour Name  *
4603*5113495bSYour Name  * Return: none
4604*5113495bSYour Name  */
4605*5113495bSYour Name 
4606*5113495bSYour Name void hdd_chip_pwr_save_fail_detected_cb(hdd_handle_t hdd_handle,
4607*5113495bSYour Name 				struct chip_pwr_save_fail_detected_params
4608*5113495bSYour Name 				*data);
4609*5113495bSYour Name 
4610*5113495bSYour Name /**
4611*5113495bSYour Name  * hdd_update_ie_allowlist_attr() - Copy probe req ie allowlist attrs from cfg
4612*5113495bSYour Name  * @ie_allowlist: output parameter
4613*5113495bSYour Name  * @hdd_ctx: pointer to hdd context
4614*5113495bSYour Name  *
4615*5113495bSYour Name  * Return: None
4616*5113495bSYour Name  */
4617*5113495bSYour Name void hdd_update_ie_allowlist_attr(struct probe_req_allowlist_attr *ie_allowlist,
4618*5113495bSYour Name 				  struct hdd_context *hdd_ctx);
4619*5113495bSYour Name 
4620*5113495bSYour Name /**
4621*5113495bSYour Name  * hdd_get_rssi_snr_by_bssid() - gets the rssi and snr by bssid from scan cache
4622*5113495bSYour Name  * @mac_handle: MAC handle
4623*5113495bSYour Name  * @bssid: bssid to look for in scan cache
4624*5113495bSYour Name  * @rssi: rssi value found
4625*5113495bSYour Name  * @snr: snr value found
4626*5113495bSYour Name  *
4627*5113495bSYour Name  * Return: QDF_STATUS
4628*5113495bSYour Name  */
4629*5113495bSYour Name int hdd_get_rssi_snr_by_bssid(mac_handle_t mac_handle, const uint8_t *bssid,
4630*5113495bSYour Name 			      int8_t *rssi, int8_t *snr);
4631*5113495bSYour Name 
4632*5113495bSYour Name /**
4633*5113495bSYour Name  * hdd_reset_limit_off_chan() - reset limit off-channel command parameters
4634*5113495bSYour Name  * @adapter: HDD adapter
4635*5113495bSYour Name  *
4636*5113495bSYour Name  * Return: 0 on success and non zero value on failure
4637*5113495bSYour Name  */
4638*5113495bSYour Name int hdd_reset_limit_off_chan(struct hdd_adapter *adapter);
4639*5113495bSYour Name 
4640*5113495bSYour Name #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
hdd_dev_setup_destructor(struct net_device * dev)4641*5113495bSYour Name static inline void hdd_dev_setup_destructor(struct net_device *dev)
4642*5113495bSYour Name {
4643*5113495bSYour Name 	dev->destructor = free_netdev;
4644*5113495bSYour Name }
4645*5113495bSYour Name #else
hdd_dev_setup_destructor(struct net_device * dev)4646*5113495bSYour Name static inline void hdd_dev_setup_destructor(struct net_device *dev)
4647*5113495bSYour Name {
4648*5113495bSYour Name 	dev->needs_free_netdev = true;
4649*5113495bSYour Name }
4650*5113495bSYour Name #endif /* KERNEL_VERSION(4, 12, 0) */
4651*5113495bSYour Name 
4652*5113495bSYour Name /**
4653*5113495bSYour Name  * hdd_update_score_config - API to update candidate scoring related params
4654*5113495bSYour Name  * configuration parameters
4655*5113495bSYour Name  * @hdd_ctx: hdd context
4656*5113495bSYour Name  *
4657*5113495bSYour Name  * Return: QDF_STATUS
4658*5113495bSYour Name  */
4659*5113495bSYour Name QDF_STATUS hdd_update_score_config(struct hdd_context *hdd_ctx);
4660*5113495bSYour Name 
4661*5113495bSYour Name /**
4662*5113495bSYour Name  * hdd_get_stainfo() - get stainfo for the specified peer
4663*5113495bSYour Name  * @astainfo: array of the station info in which the sta info
4664*5113495bSYour Name  * corresponding to mac_addr needs to be searched
4665*5113495bSYour Name  * @mac_addr: mac address of requested peer
4666*5113495bSYour Name  *
4667*5113495bSYour Name  * This function find the stainfo for the peer with mac_addr
4668*5113495bSYour Name  *
4669*5113495bSYour Name  * Return: stainfo if found, NULL if not found
4670*5113495bSYour Name  */
4671*5113495bSYour Name struct hdd_station_info *hdd_get_stainfo(struct hdd_station_info *astainfo,
4672*5113495bSYour Name 					 struct qdf_mac_addr mac_addr);
4673*5113495bSYour Name 
4674*5113495bSYour Name /**
4675*5113495bSYour Name  * hdd_component_psoc_open() - Open the legacy components
4676*5113495bSYour Name  * @psoc: Pointer to psoc object
4677*5113495bSYour Name  *
4678*5113495bSYour Name  * This function opens the legacy components and initializes the
4679*5113495bSYour Name  * component's private objects.
4680*5113495bSYour Name  *
4681*5113495bSYour Name  * Return: QDF_STATUS
4682*5113495bSYour Name  */
4683*5113495bSYour Name QDF_STATUS hdd_component_psoc_open(struct wlan_objmgr_psoc *psoc);
4684*5113495bSYour Name 
4685*5113495bSYour Name /**
4686*5113495bSYour Name  * hdd_component_psoc_close() - Close the legacy components
4687*5113495bSYour Name  * @psoc: Pointer to psoc object
4688*5113495bSYour Name  *
4689*5113495bSYour Name  * This function closes the legacy components and resets the
4690*5113495bSYour Name  * component's private objects.
4691*5113495bSYour Name  *
4692*5113495bSYour Name  * Return: None
4693*5113495bSYour Name  */
4694*5113495bSYour Name void hdd_component_psoc_close(struct wlan_objmgr_psoc *psoc);
4695*5113495bSYour Name 
4696*5113495bSYour Name /**
4697*5113495bSYour Name  * hdd_component_psoc_enable() - Trigger psoc enable for CLD Components
4698*5113495bSYour Name  * @psoc: Pointer to psoc object
4699*5113495bSYour Name  *
4700*5113495bSYour Name  * Return: None
4701*5113495bSYour Name  */
4702*5113495bSYour Name void hdd_component_psoc_enable(struct wlan_objmgr_psoc *psoc);
4703*5113495bSYour Name 
4704*5113495bSYour Name /**
4705*5113495bSYour Name  * hdd_component_psoc_disable() - Trigger psoc disable for CLD Components
4706*5113495bSYour Name  * @psoc: Pointer to psoc object
4707*5113495bSYour Name  *
4708*5113495bSYour Name  * Return: None
4709*5113495bSYour Name  */
4710*5113495bSYour Name void hdd_component_psoc_disable(struct wlan_objmgr_psoc *psoc);
4711*5113495bSYour Name 
4712*5113495bSYour Name /**
4713*5113495bSYour Name  * hdd_component_pdev_open() - Trigger pdev open for CLD Components
4714*5113495bSYour Name  * @pdev: Pointer to pdev object
4715*5113495bSYour Name  *
4716*5113495bSYour Name  * Return: QDF_STATUS
4717*5113495bSYour Name  */
4718*5113495bSYour Name QDF_STATUS hdd_component_pdev_open(struct wlan_objmgr_pdev *pdev);
4719*5113495bSYour Name 
4720*5113495bSYour Name /**
4721*5113495bSYour Name  * hdd_component_pdev_close() - Trigger pdev close for CLD Components
4722*5113495bSYour Name  * @pdev: Pointer to pdev object
4723*5113495bSYour Name  *
4724*5113495bSYour Name  * Return: None
4725*5113495bSYour Name  */
4726*5113495bSYour Name void hdd_component_pdev_close(struct wlan_objmgr_pdev *pdev);
4727*5113495bSYour Name 
4728*5113495bSYour Name #ifdef WLAN_FEATURE_MEMDUMP_ENABLE
4729*5113495bSYour Name int hdd_driver_memdump_init(void);
4730*5113495bSYour Name void hdd_driver_memdump_deinit(void);
4731*5113495bSYour Name 
4732*5113495bSYour Name /**
4733*5113495bSYour Name  * hdd_driver_mem_cleanup() - Frees memory allocated for
4734*5113495bSYour Name  * driver dump
4735*5113495bSYour Name  *
4736*5113495bSYour Name  * This function  frees driver dump memory.
4737*5113495bSYour Name  *
4738*5113495bSYour Name  * Return: None
4739*5113495bSYour Name  */
4740*5113495bSYour Name void hdd_driver_mem_cleanup(void);
4741*5113495bSYour Name 
4742*5113495bSYour Name #else /* WLAN_FEATURE_MEMDUMP_ENABLE */
hdd_driver_memdump_init(void)4743*5113495bSYour Name static inline int hdd_driver_memdump_init(void)
4744*5113495bSYour Name {
4745*5113495bSYour Name 	return 0;
4746*5113495bSYour Name }
hdd_driver_memdump_deinit(void)4747*5113495bSYour Name static inline void hdd_driver_memdump_deinit(void)
4748*5113495bSYour Name {
4749*5113495bSYour Name }
4750*5113495bSYour Name 
hdd_driver_mem_cleanup(void)4751*5113495bSYour Name static inline void hdd_driver_mem_cleanup(void)
4752*5113495bSYour Name {
4753*5113495bSYour Name }
4754*5113495bSYour Name #endif /* WLAN_FEATURE_MEMDUMP_ENABLE */
4755*5113495bSYour Name 
4756*5113495bSYour Name #ifdef FEATURE_MONITOR_MODE_SUPPORT
4757*5113495bSYour Name /**
4758*5113495bSYour Name  * wlan_hdd_set_mon_chan() - Set capture channel on the monitor mode interface.
4759*5113495bSYour Name  * @adapter: Handle to adapter
4760*5113495bSYour Name  * @freq: Monitor mode frequency (MHz)
4761*5113495bSYour Name  * @bandwidth: Capture channel bandwidth
4762*5113495bSYour Name  *
4763*5113495bSYour Name  * Return: 0 on success else error code.
4764*5113495bSYour Name  */
4765*5113495bSYour Name int wlan_hdd_set_mon_chan(struct hdd_adapter *adapter, qdf_freq_t freq,
4766*5113495bSYour Name 			  uint32_t bandwidth);
4767*5113495bSYour Name #else
4768*5113495bSYour Name static inline
wlan_hdd_set_mon_chan(struct hdd_adapter * adapter,qdf_freq_t freq,uint32_t bandwidth)4769*5113495bSYour Name int wlan_hdd_set_mon_chan(struct hdd_adapter *adapter, qdf_freq_t freq,
4770*5113495bSYour Name 			  uint32_t bandwidth)
4771*5113495bSYour Name {
4772*5113495bSYour Name 	return 0;
4773*5113495bSYour Name }
4774*5113495bSYour Name #endif
4775*5113495bSYour Name 
4776*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC) && \
4777*5113495bSYour Name 	!defined(WLAN_HDD_MULTI_VDEV_SINGLE_NDEV)
4778*5113495bSYour Name /**
4779*5113495bSYour Name  *  hdd_set_mld_address() - Set the MLD address of the adapter
4780*5113495bSYour Name  *  @adapter: Handle to adapter
4781*5113495bSYour Name  *  @mac_addr: MAC address to be copied
4782*5113495bSYour Name  *
4783*5113495bSYour Name  *  The function copies the MAC address sent in @mac_addr to
4784*5113495bSYour Name  *  the adapter's MLD address and the MLD address of each
4785*5113495bSYour Name  *  link adapter mapped of the @adapter.
4786*5113495bSYour Name  *  The mode of operation must be 11be capable and @adapter
4787*5113495bSYour Name  *  has to be ML type.
4788*5113495bSYour Name  *
4789*5113495bSYour Name  *  Return: void
4790*5113495bSYour Name  */
4791*5113495bSYour Name void
4792*5113495bSYour Name hdd_set_mld_address(struct hdd_adapter *adapter,
4793*5113495bSYour Name 		    const struct qdf_mac_addr *mac_addr);
4794*5113495bSYour Name #else
4795*5113495bSYour Name static inline void
hdd_set_mld_address(struct hdd_adapter * adapter,const struct qdf_mac_addr * mac_addr)4796*5113495bSYour Name hdd_set_mld_address(struct hdd_adapter *adapter,
4797*5113495bSYour Name 		    const struct qdf_mac_addr *mac_addr)
4798*5113495bSYour Name {
4799*5113495bSYour Name }
4800*5113495bSYour Name #endif
4801*5113495bSYour Name 
4802*5113495bSYour Name /**
4803*5113495bSYour Name  * hdd_wlan_get_version() - Get version information
4804*5113495bSYour Name  * @hdd_ctx: Global HDD context
4805*5113495bSYour Name  * @version_len: length of the version buffer size
4806*5113495bSYour Name  * @version: the buffer to the version string
4807*5113495bSYour Name  *
4808*5113495bSYour Name  * This function is used to get Wlan Driver, Firmware, Hardware Version
4809*5113495bSYour Name  * & the Board related information.
4810*5113495bSYour Name  *
4811*5113495bSYour Name  * Return: the length of the version string
4812*5113495bSYour Name  */
4813*5113495bSYour Name uint32_t hdd_wlan_get_version(struct hdd_context *hdd_ctx,
4814*5113495bSYour Name 			      const size_t version_len, uint8_t *version);
4815*5113495bSYour Name /**
4816*5113495bSYour Name  * hdd_assemble_rate_code() - assemble rate code to be sent to FW
4817*5113495bSYour Name  * @preamble: rate preamble
4818*5113495bSYour Name  * @nss: number of streams
4819*5113495bSYour Name  * @rate: rate index
4820*5113495bSYour Name  *
4821*5113495bSYour Name  * Rate code assembling is different for targets which are 11ax capable.
4822*5113495bSYour Name  * Check for the target support and assemble the rate code accordingly.
4823*5113495bSYour Name  *
4824*5113495bSYour Name  * Return: assembled rate code
4825*5113495bSYour Name  */
4826*5113495bSYour Name int hdd_assemble_rate_code(uint8_t preamble, uint8_t nss, uint8_t rate);
4827*5113495bSYour Name 
4828*5113495bSYour Name /**
4829*5113495bSYour Name  * hdd_update_country_code - Update country code
4830*5113495bSYour Name  * @hdd_ctx: HDD context
4831*5113495bSYour Name  *
4832*5113495bSYour Name  * Update country code based on module parameter country_code
4833*5113495bSYour Name  *
4834*5113495bSYour Name  * Return: 0 on success and errno on failure
4835*5113495bSYour Name  */
4836*5113495bSYour Name int hdd_update_country_code(struct hdd_context *hdd_ctx);
4837*5113495bSYour Name 
4838*5113495bSYour Name /**
4839*5113495bSYour Name  * hdd_set_11ax_rate() - set 11ax rate
4840*5113495bSYour Name  * @adapter: adapter being modified
4841*5113495bSYour Name  * @value: new 11ax rate code
4842*5113495bSYour Name  * @sap_config: pointer to SAP config to check HW mode
4843*5113495bSYour Name  *		this will be NULL for call from STA persona
4844*5113495bSYour Name  *
4845*5113495bSYour Name  * Return: 0 on success, negative errno on failure
4846*5113495bSYour Name  */
4847*5113495bSYour Name int hdd_set_11ax_rate(struct hdd_adapter *adapter, int value,
4848*5113495bSYour Name 		      struct sap_config *sap_config);
4849*5113495bSYour Name 
4850*5113495bSYour Name /**
4851*5113495bSYour Name  * hdd_update_hw_sw_info() - API to update the HW/SW information
4852*5113495bSYour Name  * @hdd_ctx: Global HDD context
4853*5113495bSYour Name  *
4854*5113495bSYour Name  * API to update the HW and SW information in the driver
4855*5113495bSYour Name  *
4856*5113495bSYour Name  * Note:
4857*5113495bSYour Name  * All the version/revision information would only be retrieved after
4858*5113495bSYour Name  * firmware download
4859*5113495bSYour Name  *
4860*5113495bSYour Name  * Return: None
4861*5113495bSYour Name  */
4862*5113495bSYour Name void hdd_update_hw_sw_info(struct hdd_context *hdd_ctx);
4863*5113495bSYour Name 
4864*5113495bSYour Name /**
4865*5113495bSYour Name  * hdd_context_get_mac_handle() - get mac handle from hdd context
4866*5113495bSYour Name  * @hdd_ctx: Global HDD context pointer
4867*5113495bSYour Name  *
4868*5113495bSYour Name  * Retrieves the global MAC handle from the HDD context
4869*5113495bSYour Name  *
4870*5113495bSYour Name  * Return: The global MAC handle (which may be NULL)
4871*5113495bSYour Name  */
4872*5113495bSYour Name static inline
hdd_context_get_mac_handle(struct hdd_context * hdd_ctx)4873*5113495bSYour Name mac_handle_t hdd_context_get_mac_handle(struct hdd_context *hdd_ctx)
4874*5113495bSYour Name {
4875*5113495bSYour Name 	return hdd_ctx ? hdd_ctx->mac_handle : NULL;
4876*5113495bSYour Name }
4877*5113495bSYour Name 
4878*5113495bSYour Name /**
4879*5113495bSYour Name  * hdd_adapter_get_mac_handle() - get mac handle from hdd adapter
4880*5113495bSYour Name  * @adapter: HDD adapter pointer
4881*5113495bSYour Name  *
4882*5113495bSYour Name  * Retrieves the global MAC handle given an HDD adapter
4883*5113495bSYour Name  *
4884*5113495bSYour Name  * Return: The global MAC handle (which may be NULL)
4885*5113495bSYour Name  */
4886*5113495bSYour Name static inline
hdd_adapter_get_mac_handle(struct hdd_adapter * adapter)4887*5113495bSYour Name mac_handle_t hdd_adapter_get_mac_handle(struct hdd_adapter *adapter)
4888*5113495bSYour Name {
4889*5113495bSYour Name 	return adapter ?
4890*5113495bSYour Name 		hdd_context_get_mac_handle(adapter->hdd_ctx) : NULL;
4891*5113495bSYour Name }
4892*5113495bSYour Name 
4893*5113495bSYour Name /**
4894*5113495bSYour Name  * hdd_handle_to_context() - turn an HDD handle into an HDD context
4895*5113495bSYour Name  * @hdd_handle: HDD handle to be converted
4896*5113495bSYour Name  *
4897*5113495bSYour Name  * Return: HDD context referenced by @hdd_handle
4898*5113495bSYour Name  */
4899*5113495bSYour Name static inline
hdd_handle_to_context(hdd_handle_t hdd_handle)4900*5113495bSYour Name struct hdd_context *hdd_handle_to_context(hdd_handle_t hdd_handle)
4901*5113495bSYour Name {
4902*5113495bSYour Name 	return (struct hdd_context *)hdd_handle;
4903*5113495bSYour Name }
4904*5113495bSYour Name 
4905*5113495bSYour Name /**
4906*5113495bSYour Name  * wlan_hdd_free_cache_channels() - Free the cache channels list
4907*5113495bSYour Name  * @hdd_ctx: Pointer to HDD context
4908*5113495bSYour Name  *
4909*5113495bSYour Name  * Return: None
4910*5113495bSYour Name  */
4911*5113495bSYour Name void wlan_hdd_free_cache_channels(struct hdd_context *hdd_ctx);
4912*5113495bSYour Name 
4913*5113495bSYour Name /**
4914*5113495bSYour Name  * hdd_update_dynamic_mac() - Updates the dynamic MAC list
4915*5113495bSYour Name  * @hdd_ctx: Pointer to HDD context
4916*5113495bSYour Name  * @curr_mac_addr: Current interface mac address
4917*5113495bSYour Name  * @new_mac_addr: New mac address which needs to be updated
4918*5113495bSYour Name  *
4919*5113495bSYour Name  * This function updates newly configured MAC address to the
4920*5113495bSYour Name  * dynamic MAC address list corresponding to the current
4921*5113495bSYour Name  * adapter MAC address
4922*5113495bSYour Name  *
4923*5113495bSYour Name  * Return: None
4924*5113495bSYour Name  */
4925*5113495bSYour Name void hdd_update_dynamic_mac(struct hdd_context *hdd_ctx,
4926*5113495bSYour Name 			    struct qdf_mac_addr *curr_mac_addr,
4927*5113495bSYour Name 			    struct qdf_mac_addr *new_mac_addr);
4928*5113495bSYour Name 
4929*5113495bSYour Name #ifdef WLAN_FEATURE_MOTION_DETECTION
4930*5113495bSYour Name /**
4931*5113495bSYour Name  * hdd_md_host_evt_cb - Callback for Motion Detection Event
4932*5113495bSYour Name  * @ctx: HDD context
4933*5113495bSYour Name  * @event: motion detect event
4934*5113495bSYour Name  *
4935*5113495bSYour Name  * Callback for Motion Detection Event. Re-enables Motion
4936*5113495bSYour Name  * Detection again upon event
4937*5113495bSYour Name  *
4938*5113495bSYour Name  * Return: QDF_STATUS QDF_STATUS_SUCCESS on Success and
4939*5113495bSYour Name  * QDF_STATUS_E_FAILURE on failure
4940*5113495bSYour Name  */
4941*5113495bSYour Name QDF_STATUS hdd_md_host_evt_cb(void *ctx, struct sir_md_evt *event);
4942*5113495bSYour Name 
4943*5113495bSYour Name /**
4944*5113495bSYour Name  * hdd_md_bl_evt_cb - Callback for Motion Detection Baseline Event
4945*5113495bSYour Name  * @ctx: HDD context
4946*5113495bSYour Name  * @event: motion detect baseline event
4947*5113495bSYour Name  *
4948*5113495bSYour Name  * Callback for Motion Detection Baseline Event
4949*5113495bSYour Name  *
4950*5113495bSYour Name  * Return: QDF_STATUS QDF_STATUS_SUCCESS on Success and
4951*5113495bSYour Name  * QDF_STATUS_E_FAILURE on failure
4952*5113495bSYour Name  */
4953*5113495bSYour Name QDF_STATUS hdd_md_bl_evt_cb(void *ctx, struct sir_md_bl_evt *event);
4954*5113495bSYour Name #endif /* WLAN_FEATURE_MOTION_DETECTION */
4955*5113495bSYour Name 
4956*5113495bSYour Name /**
4957*5113495bSYour Name  * hdd_hidden_ssid_enable_roaming() - enable roaming after hidden ssid rsp
4958*5113495bSYour Name  * @hdd_handle: Hdd handler
4959*5113495bSYour Name  * @vdev_id: Vdev Id
4960*5113495bSYour Name  *
4961*5113495bSYour Name  * This is a wrapper function to enable roaming after getting hidden
4962*5113495bSYour Name  * ssid rsp
4963*5113495bSYour Name  */
4964*5113495bSYour Name void hdd_hidden_ssid_enable_roaming(hdd_handle_t hdd_handle, uint8_t vdev_id);
4965*5113495bSYour Name 
4966*5113495bSYour Name /**
4967*5113495bSYour Name  * hdd_psoc_idle_shutdown - perform idle shutdown after interface inactivity
4968*5113495bSYour Name  *                          timeout
4969*5113495bSYour Name  * @dev: pointer to struct device
4970*5113495bSYour Name  *
4971*5113495bSYour Name  * Return: 0 for success non-zero error code for failure
4972*5113495bSYour Name  */
4973*5113495bSYour Name int hdd_psoc_idle_shutdown(struct device *dev);
4974*5113495bSYour Name 
4975*5113495bSYour Name /**
4976*5113495bSYour Name  * hdd_psoc_idle_restart - perform idle restart after idle shutdown
4977*5113495bSYour Name  * @dev: pointer to struct device
4978*5113495bSYour Name  *
4979*5113495bSYour Name  * Return: 0 for success non-zero error code for failure
4980*5113495bSYour Name  */
4981*5113495bSYour Name int hdd_psoc_idle_restart(struct device *dev);
4982*5113495bSYour Name 
4983*5113495bSYour Name /**
4984*5113495bSYour Name  * hdd_adapter_is_ap() - whether adapter is ap or not
4985*5113495bSYour Name  * @adapter: adapter to check
4986*5113495bSYour Name  * Return: true if it is AP
4987*5113495bSYour Name  */
4988*5113495bSYour Name bool hdd_adapter_is_ap(struct hdd_adapter *adapter);
4989*5113495bSYour Name 
4990*5113495bSYour Name /**
4991*5113495bSYour Name  * hdd_common_roam_callback() - common sme roam callback
4992*5113495bSYour Name  * @psoc: Object Manager Psoc
4993*5113495bSYour Name  * @session_id: session id for which callback is called
4994*5113495bSYour Name  * @roam_info: pointer to roam info
4995*5113495bSYour Name  * @roam_status: roam status
4996*5113495bSYour Name  * @roam_result: roam result
4997*5113495bSYour Name  *
4998*5113495bSYour Name  * Return: QDF_STATUS enumeration
4999*5113495bSYour Name  */
5000*5113495bSYour Name QDF_STATUS hdd_common_roam_callback(struct wlan_objmgr_psoc *psoc,
5001*5113495bSYour Name 				    uint8_t session_id,
5002*5113495bSYour Name 				    struct csr_roam_info *roam_info,
5003*5113495bSYour Name 				    eRoamCmdStatus roam_status,
5004*5113495bSYour Name 				    eCsrRoamResult roam_result);
5005*5113495bSYour Name 
5006*5113495bSYour Name #ifdef WLAN_FEATURE_PKT_CAPTURE
5007*5113495bSYour Name /**
5008*5113495bSYour Name  * wlan_hdd_is_mon_concurrency() - check if MONITOR and STA concurrency
5009*5113495bSYour Name  * is UP when packet capture mode is enabled.
5010*5113495bSYour Name  *
5011*5113495bSYour Name  * Return: True - if STA and monitor concurrency is there, else False
5012*5113495bSYour Name  *
5013*5113495bSYour Name  */
5014*5113495bSYour Name bool wlan_hdd_is_mon_concurrency(void);
5015*5113495bSYour Name 
5016*5113495bSYour Name /**
5017*5113495bSYour Name  * wlan_hdd_del_monitor() - delete monitor interface
5018*5113495bSYour Name  * @hdd_ctx: pointer to hdd context
5019*5113495bSYour Name  * @adapter: adapter to be deleted
5020*5113495bSYour Name  * @rtnl_held: rtnl lock held
5021*5113495bSYour Name  *
5022*5113495bSYour Name  * This function is invoked to delete monitor interface.
5023*5113495bSYour Name  *
5024*5113495bSYour Name  * Return: None
5025*5113495bSYour Name  */
5026*5113495bSYour Name void wlan_hdd_del_monitor(struct hdd_context *hdd_ctx,
5027*5113495bSYour Name 			  struct hdd_adapter *adapter, bool rtnl_held);
5028*5113495bSYour Name 
5029*5113495bSYour Name /**
5030*5113495bSYour Name  * wlan_hdd_del_p2p_interface() - delete p2p interface
5031*5113495bSYour Name  * @hdd_ctx: pointer to hdd context
5032*5113495bSYour Name  *
5033*5113495bSYour Name  * This function is invoked to delete p2p interface.
5034*5113495bSYour Name  *
5035*5113495bSYour Name  * Return: None
5036*5113495bSYour Name  */
5037*5113495bSYour Name void
5038*5113495bSYour Name wlan_hdd_del_p2p_interface(struct hdd_context *hdd_ctx);
5039*5113495bSYour Name 
5040*5113495bSYour Name /**
5041*5113495bSYour Name  * hdd_reset_monitor_interface() - reset monitor interface flags
5042*5113495bSYour Name  * @sta_adapter: station adapter
5043*5113495bSYour Name  *
5044*5113495bSYour Name  * Return: void
5045*5113495bSYour Name  */
5046*5113495bSYour Name void hdd_reset_monitor_interface(struct hdd_adapter *sta_adapter);
5047*5113495bSYour Name 
5048*5113495bSYour Name /**
5049*5113495bSYour Name  * hdd_is_pkt_capture_mon_enable() - Is packet capture monitor mode enable
5050*5113495bSYour Name  * @sta_adapter: station adapter
5051*5113495bSYour Name  *
5052*5113495bSYour Name  * Return: status of packet capture monitor adapter
5053*5113495bSYour Name  */
5054*5113495bSYour Name struct hdd_adapter *
5055*5113495bSYour Name hdd_is_pkt_capture_mon_enable(struct hdd_adapter *sta_adapter);
5056*5113495bSYour Name #else
5057*5113495bSYour Name static inline
wlan_hdd_del_monitor(struct hdd_context * hdd_ctx,struct hdd_adapter * adapter,bool rtnl_held)5058*5113495bSYour Name void wlan_hdd_del_monitor(struct hdd_context *hdd_ctx,
5059*5113495bSYour Name 			  struct hdd_adapter *adapter, bool rtnl_held)
5060*5113495bSYour Name {
5061*5113495bSYour Name }
5062*5113495bSYour Name 
5063*5113495bSYour Name static inline
wlan_hdd_is_mon_concurrency(void)5064*5113495bSYour Name bool wlan_hdd_is_mon_concurrency(void)
5065*5113495bSYour Name {
5066*5113495bSYour Name 	return false;
5067*5113495bSYour Name }
5068*5113495bSYour Name 
5069*5113495bSYour Name static inline
wlan_hdd_del_p2p_interface(struct hdd_context * hdd_ctx)5070*5113495bSYour Name void wlan_hdd_del_p2p_interface(struct hdd_context *hdd_ctx)
5071*5113495bSYour Name {
5072*5113495bSYour Name }
5073*5113495bSYour Name 
hdd_reset_monitor_interface(struct hdd_adapter * sta_adapter)5074*5113495bSYour Name static inline void hdd_reset_monitor_interface(struct hdd_adapter *sta_adapter)
5075*5113495bSYour Name {
5076*5113495bSYour Name }
5077*5113495bSYour Name 
hdd_is_pkt_capture_mon_enable(struct hdd_adapter * adapter)5078*5113495bSYour Name static inline int hdd_is_pkt_capture_mon_enable(struct hdd_adapter *adapter)
5079*5113495bSYour Name {
5080*5113495bSYour Name 	return 0;
5081*5113495bSYour Name }
5082*5113495bSYour Name #endif /* WLAN_FEATURE_PKT_CAPTURE */
5083*5113495bSYour Name /**
5084*5113495bSYour Name  * wlan_hdd_is_session_type_monitor() - check if session type is MONITOR
5085*5113495bSYour Name  * @session_type: session type
5086*5113495bSYour Name  *
5087*5113495bSYour Name  * Return: True - if session type for adapter is monitor, else False
5088*5113495bSYour Name  *
5089*5113495bSYour Name  */
5090*5113495bSYour Name bool wlan_hdd_is_session_type_monitor(uint8_t session_type);
5091*5113495bSYour Name 
5092*5113495bSYour Name /**
5093*5113495bSYour Name  * wlan_hdd_add_monitor_check() - check for monitor intf and add if needed
5094*5113495bSYour Name  * @hdd_ctx: pointer to hdd context
5095*5113495bSYour Name  * @adapter: output pointer to hold created monitor adapter
5096*5113495bSYour Name  * @name: name of the interface
5097*5113495bSYour Name  * @rtnl_held: True if RTNL lock is held
5098*5113495bSYour Name  * @name_assign_type: the name of assign type of the netdev
5099*5113495bSYour Name  * @is_rx_mon: if monitor mode is getting enabled
5100*5113495bSYour Name  *
5101*5113495bSYour Name  * Return: 0 - on success
5102*5113495bSYour Name  *         err code - on failure
5103*5113495bSYour Name  */
5104*5113495bSYour Name int wlan_hdd_add_monitor_check(struct hdd_context *hdd_ctx,
5105*5113495bSYour Name 			       struct hdd_adapter **adapter,
5106*5113495bSYour Name 			       const char *name, bool rtnl_held,
5107*5113495bSYour Name 			       unsigned char name_assign_type,
5108*5113495bSYour Name 			       bool is_rx_mon);
5109*5113495bSYour Name 
5110*5113495bSYour Name #ifdef CONFIG_WLAN_DEBUG_CRASH_INJECT
5111*5113495bSYour Name /**
5112*5113495bSYour Name  * hdd_crash_inject() - Inject a crash
5113*5113495bSYour Name  * @adapter: Adapter upon which the command was received
5114*5113495bSYour Name  * @v1: first value to inject
5115*5113495bSYour Name  * @v2: second value to inject
5116*5113495bSYour Name  *
5117*5113495bSYour Name  * This function is the handler for the crash inject debug feature.
5118*5113495bSYour Name  * This feature only exists for internal testing and must not be
5119*5113495bSYour Name  * enabled on a production device.
5120*5113495bSYour Name  *
5121*5113495bSYour Name  * Return: 0 on success and errno on failure
5122*5113495bSYour Name  */
5123*5113495bSYour Name int hdd_crash_inject(struct hdd_adapter *adapter, uint32_t v1, uint32_t v2);
5124*5113495bSYour Name #else
5125*5113495bSYour Name static inline
hdd_crash_inject(struct hdd_adapter * adapter,uint32_t v1,uint32_t v2)5126*5113495bSYour Name int hdd_crash_inject(struct hdd_adapter *adapter, uint32_t v1, uint32_t v2)
5127*5113495bSYour Name {
5128*5113495bSYour Name 	return -ENOTSUPP;
5129*5113495bSYour Name }
5130*5113495bSYour Name #endif
5131*5113495bSYour Name 
5132*5113495bSYour Name #ifdef FEATURE_MONITOR_MODE_SUPPORT
5133*5113495bSYour Name 
5134*5113495bSYour Name void hdd_sme_monitor_mode_callback(uint8_t vdev_id);
5135*5113495bSYour Name 
5136*5113495bSYour Name QDF_STATUS hdd_monitor_mode_vdev_status(struct hdd_adapter *adapter);
5137*5113495bSYour Name 
5138*5113495bSYour Name QDF_STATUS hdd_monitor_mode_qdf_create_event(struct hdd_adapter *adapter,
5139*5113495bSYour Name 					     uint8_t session_type);
5140*5113495bSYour Name #else
hdd_sme_monitor_mode_callback(uint8_t vdev_id)5141*5113495bSYour Name static inline void hdd_sme_monitor_mode_callback(uint8_t vdev_id) {}
5142*5113495bSYour Name 
5143*5113495bSYour Name static inline QDF_STATUS
hdd_monitor_mode_vdev_status(struct hdd_adapter * adapter)5144*5113495bSYour Name hdd_monitor_mode_vdev_status(struct hdd_adapter *adapter)
5145*5113495bSYour Name {
5146*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
5147*5113495bSYour Name }
5148*5113495bSYour Name 
5149*5113495bSYour Name static inline QDF_STATUS
hdd_monitor_mode_qdf_create_event(struct hdd_adapter * adapter,uint8_t session_type)5150*5113495bSYour Name hdd_monitor_mode_qdf_create_event(struct hdd_adapter *adapter,
5151*5113495bSYour Name 				  uint8_t session_type)
5152*5113495bSYour Name {
5153*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
5154*5113495bSYour Name }
5155*5113495bSYour Name #endif
5156*5113495bSYour Name 
5157*5113495bSYour Name /**
5158*5113495bSYour Name  * hdd_cleanup_conn_info() - Cleanup connectin info
5159*5113495bSYour Name  * @link_info: pointer to link_info struct in adapter
5160*5113495bSYour Name  *
5161*5113495bSYour Name  * This function frees the memory allocated for the connection
5162*5113495bSYour Name  * info structure
5163*5113495bSYour Name  *
5164*5113495bSYour Name  * Return: none
5165*5113495bSYour Name  */
5166*5113495bSYour Name void hdd_cleanup_conn_info(struct wlan_hdd_link_info *link_info);
5167*5113495bSYour Name 
5168*5113495bSYour Name #ifdef FEATURE_WLAN_RESIDENT_DRIVER
5169*5113495bSYour Name extern char *country_code;
5170*5113495bSYour Name extern int con_mode;
5171*5113495bSYour Name extern const struct kernel_param_ops con_mode_ops;
5172*5113495bSYour Name extern int con_mode_ftm;
5173*5113495bSYour Name extern const struct kernel_param_ops con_mode_ftm_ops;
5174*5113495bSYour Name #endif
5175*5113495bSYour Name 
5176*5113495bSYour Name /**
5177*5113495bSYour Name  * hdd_driver_load() - Perform the driver-level load operation
5178*5113495bSYour Name  *
5179*5113495bSYour Name  * Note: this is used in both static and DLKM driver builds
5180*5113495bSYour Name  *
5181*5113495bSYour Name  * Return: Errno
5182*5113495bSYour Name  */
5183*5113495bSYour Name int hdd_driver_load(void);
5184*5113495bSYour Name 
5185*5113495bSYour Name /**
5186*5113495bSYour Name  * hdd_driver_unload() - Performs the driver-level unload operation
5187*5113495bSYour Name  *
5188*5113495bSYour Name  * Note: this is used in both static and DLKM driver builds
5189*5113495bSYour Name  *
5190*5113495bSYour Name  * Return: None
5191*5113495bSYour Name  */
5192*5113495bSYour Name void hdd_driver_unload(void);
5193*5113495bSYour Name 
5194*5113495bSYour Name /**
5195*5113495bSYour Name  * hdd_init_start_completion() - Init the completion variable to wait on ON/OFF
5196*5113495bSYour Name  *
5197*5113495bSYour Name  * Return: None
5198*5113495bSYour Name  */
5199*5113495bSYour Name void hdd_init_start_completion(void);
5200*5113495bSYour Name 
5201*5113495bSYour Name #if defined(CLD_PM_QOS) && defined(WLAN_FEATURE_LL_MODE)
5202*5113495bSYour Name /**
5203*5113495bSYour Name  * hdd_beacon_latency_event_cb() - Callback function to get latency level
5204*5113495bSYour Name  * @latency_level: latency level received from firmware
5205*5113495bSYour Name  *
5206*5113495bSYour Name  * Return: None
5207*5113495bSYour Name  */
5208*5113495bSYour Name void hdd_beacon_latency_event_cb(uint32_t latency_level);
5209*5113495bSYour Name #else
hdd_beacon_latency_event_cb(uint32_t latency_level)5210*5113495bSYour Name static inline void hdd_beacon_latency_event_cb(uint32_t latency_level)
5211*5113495bSYour Name {
5212*5113495bSYour Name }
5213*5113495bSYour Name #endif
5214*5113495bSYour Name 
5215*5113495bSYour Name #if defined(CLD_PM_QOS) || defined(FEATURE_RUNTIME_PM)
5216*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 7, 0))
5217*5113495bSYour Name /**
5218*5113495bSYour Name  * wlan_hdd_get_default_pm_qos_cpu_latency() - get default PM QOS CPU latency
5219*5113495bSYour Name  *
5220*5113495bSYour Name  * Return: PM QOS CPU latency value
5221*5113495bSYour Name  */
wlan_hdd_get_default_pm_qos_cpu_latency(void)5222*5113495bSYour Name static inline unsigned long wlan_hdd_get_default_pm_qos_cpu_latency(void)
5223*5113495bSYour Name {
5224*5113495bSYour Name 	return PM_QOS_CPU_LATENCY_DEFAULT_VALUE;
5225*5113495bSYour Name }
5226*5113495bSYour Name #else
wlan_hdd_get_default_pm_qos_cpu_latency(void)5227*5113495bSYour Name static inline unsigned long wlan_hdd_get_default_pm_qos_cpu_latency(void)
5228*5113495bSYour Name {
5229*5113495bSYour Name 	return PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE;
5230*5113495bSYour Name }
5231*5113495bSYour Name #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 7, 0) */
5232*5113495bSYour Name #endif /* defined(CLD_PM_QOS) || defined(FEATURE_RUNTIME_PM) */
5233*5113495bSYour Name 
5234*5113495bSYour Name /**
5235*5113495bSYour Name  * hdd_get_wifi_standard() - Get wifi standard
5236*5113495bSYour Name  * @hdd_ctx: hdd context pointer
5237*5113495bSYour Name  * @dot11_mode: hdd dot11 mode
5238*5113495bSYour Name  * @band_capability: band capability bitmap
5239*5113495bSYour Name  *
5240*5113495bSYour Name  * Return: WMI_HOST_WIFI_STANDARD
5241*5113495bSYour Name  */
5242*5113495bSYour Name WMI_HOST_WIFI_STANDARD
5243*5113495bSYour Name hdd_get_wifi_standard(struct hdd_context *hdd_ctx,
5244*5113495bSYour Name 		      enum hdd_dot11_mode dot11_mode, uint32_t band_capability);
5245*5113495bSYour Name 
5246*5113495bSYour Name /**
5247*5113495bSYour Name  * hdd_is_runtime_pm_enabled - if runtime pm enabled
5248*5113495bSYour Name  * @hdd_ctx: hdd context
5249*5113495bSYour Name  *
5250*5113495bSYour Name  * Return: true if runtime pm enabled. false if disabled.
5251*5113495bSYour Name  */
5252*5113495bSYour Name bool hdd_is_runtime_pm_enabled(struct hdd_context *hdd_ctx);
5253*5113495bSYour Name 
5254*5113495bSYour Name /**
5255*5113495bSYour Name  * hdd_netdev_update_features() - Update the netdev features
5256*5113495bSYour Name  * @adapter: adapter associated with the net_device
5257*5113495bSYour Name  *
5258*5113495bSYour Name  * This func holds the rtnl_lock. Do not call with rtnl_lock held.
5259*5113495bSYour Name  *
5260*5113495bSYour Name  * Return: None
5261*5113495bSYour Name  */
5262*5113495bSYour Name void hdd_netdev_update_features(struct hdd_adapter *adapter);
5263*5113495bSYour Name 
5264*5113495bSYour Name /**
5265*5113495bSYour Name  * hdd_stop_no_trans() - HDD stop function
5266*5113495bSYour Name  * @dev:	Pointer to net_device structure
5267*5113495bSYour Name  *
5268*5113495bSYour Name  * This is called in response to ifconfig down. Vdev sync transaction
5269*5113495bSYour Name  * should be started before calling this API.
5270*5113495bSYour Name  *
5271*5113495bSYour Name  * Return: 0 for success; non-zero for failure
5272*5113495bSYour Name  */
5273*5113495bSYour Name int hdd_stop_no_trans(struct net_device *dev);
5274*5113495bSYour Name 
5275*5113495bSYour Name #if defined(CLD_PM_QOS)
5276*5113495bSYour Name /**
5277*5113495bSYour Name  * wlan_hdd_set_pm_qos_request() - Function to set pm_qos config in wlm mode
5278*5113495bSYour Name  * @hdd_ctx: HDD context
5279*5113495bSYour Name  * @pm_qos_request: pm_qos_request flag
5280*5113495bSYour Name  *
5281*5113495bSYour Name  * Return: None
5282*5113495bSYour Name  */
5283*5113495bSYour Name void wlan_hdd_set_pm_qos_request(struct hdd_context *hdd_ctx,
5284*5113495bSYour Name 				 bool pm_qos_request);
5285*5113495bSYour Name #else
5286*5113495bSYour Name static inline
wlan_hdd_set_pm_qos_request(struct hdd_context * hdd_ctx,bool pm_qos_request)5287*5113495bSYour Name void wlan_hdd_set_pm_qos_request(struct hdd_context *hdd_ctx,
5288*5113495bSYour Name 				 bool pm_qos_request)
5289*5113495bSYour Name {
5290*5113495bSYour Name }
5291*5113495bSYour Name #endif
5292*5113495bSYour Name 
5293*5113495bSYour Name /**
5294*5113495bSYour Name  * hdd_nl80211_chwidth_to_chwidth - Get sir chan width from nl chan width
5295*5113495bSYour Name  * @nl80211_chwidth: enum nl80211_chan_width
5296*5113495bSYour Name  *
5297*5113495bSYour Name  * Return: enum eSirMacHTChannelWidth or -INVAL for unsupported nl chan width
5298*5113495bSYour Name  */
5299*5113495bSYour Name enum eSirMacHTChannelWidth
5300*5113495bSYour Name hdd_nl80211_chwidth_to_chwidth(uint8_t nl80211_chwidth);
5301*5113495bSYour Name 
5302*5113495bSYour Name /**
5303*5113495bSYour Name  * hdd_chwidth_to_nl80211_chwidth - Get nl chan width from sir chan width
5304*5113495bSYour Name  * @chwidth: enum eSirMacHTChannelWidth
5305*5113495bSYour Name  *
5306*5113495bSYour Name  * Return: enum nl80211_chan_width or 0xFF for unsupported sir chan width
5307*5113495bSYour Name  */
5308*5113495bSYour Name uint8_t hdd_chwidth_to_nl80211_chwidth(enum eSirMacHTChannelWidth chwidth);
5309*5113495bSYour Name 
5310*5113495bSYour Name /**
5311*5113495bSYour Name  * hdd_phy_chwidth_to_nl80211_chwidth() - Get nl chan width from phy chan width
5312*5113495bSYour Name  * @chwidth: enum phy_ch_width
5313*5113495bSYour Name  *
5314*5113495bSYour Name  * Return: enum nl80211_chan_width or 0xFF for unsupported phy chan width
5315*5113495bSYour Name  */
5316*5113495bSYour Name uint8_t hdd_phy_chwidth_to_nl80211_chwidth(enum phy_ch_width chwidth);
5317*5113495bSYour Name 
5318*5113495bSYour Name /**
5319*5113495bSYour Name  * wlan_hdd_get_channel_bw() - get channel bandwidth
5320*5113495bSYour Name  * @width: input channel width in nl80211_chan_width value
5321*5113495bSYour Name  *
5322*5113495bSYour Name  * Return: channel width value defined by driver
5323*5113495bSYour Name  */
5324*5113495bSYour Name enum hw_mode_bandwidth wlan_hdd_get_channel_bw(enum nl80211_chan_width width);
5325*5113495bSYour Name 
5326*5113495bSYour Name /**
5327*5113495bSYour Name  * hdd_ch_width_str() - Get string for channel width
5328*5113495bSYour Name  * @ch_width: channel width from connect info
5329*5113495bSYour Name  *
5330*5113495bSYour Name  * Return: User readable string for channel width
5331*5113495bSYour Name  */
5332*5113495bSYour Name uint8_t *hdd_ch_width_str(enum phy_ch_width ch_width);
5333*5113495bSYour Name 
5334*5113495bSYour Name /**
5335*5113495bSYour Name  * hdd_we_set_ch_width - Function to update channel width
5336*5113495bSYour Name  * @link_info: Link info pointer in HDD adapter.
5337*5113495bSYour Name  * @ch_width: enum eSirMacHTChannelWidth
5338*5113495bSYour Name  *
5339*5113495bSYour Name  * Return: 0 for success otherwise failure
5340*5113495bSYour Name  */
5341*5113495bSYour Name int hdd_we_set_ch_width(struct wlan_hdd_link_info *link_info, int ch_width);
5342*5113495bSYour Name 
5343*5113495bSYour Name /**
5344*5113495bSYour Name  * hdd_stop_adapter_ext: close/delete the vdev session in host/fw.
5345*5113495bSYour Name  * @hdd_ctx: HDD context
5346*5113495bSYour Name  * @adapter: Pointer to hdd_adapter
5347*5113495bSYour Name  *
5348*5113495bSYour Name  * Close/delete the vdev session in host/firmware.
5349*5113495bSYour Name  */
5350*5113495bSYour Name QDF_STATUS hdd_stop_adapter_ext(struct hdd_context *hdd_ctx,
5351*5113495bSYour Name 				struct hdd_adapter *adapter);
5352*5113495bSYour Name 
5353*5113495bSYour Name /**
5354*5113495bSYour Name  * hdd_check_for_net_dev_ref_leak: check for vdev reference leak in driver
5355*5113495bSYour Name  * @adapter: Pointer to hdd_adapter
5356*5113495bSYour Name  *
5357*5113495bSYour Name  * various function take netdev reference to get protected against netdev
5358*5113495bSYour Name  * getting deleted in parallel, check if all those references are cleanly
5359*5113495bSYour Name  * released.
5360*5113495bSYour Name  */
5361*5113495bSYour Name void hdd_check_for_net_dev_ref_leak(struct hdd_adapter *adapter);
5362*5113495bSYour Name 
5363*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_HDD_MULTI_VDEV_SINGLE_NDEV)
5364*5113495bSYour Name 
5365*5113495bSYour Name /**
5366*5113495bSYour Name  * hdd_link_switch_vdev_mac_addr_update() - API to update OSIF/HDD on VDEV
5367*5113495bSYour Name  * mac addr update due to link switch.
5368*5113495bSYour Name  * @ieee_old_link_id: Current  IEEE link ID of VDEV prior to link switch
5369*5113495bSYour Name  * @ieee_new_link_id: New IEEE link ID of VDEV post link switch
5370*5113495bSYour Name  * @vdev_id: VDEV undergoing link switch.
5371*5113495bSYour Name  *
5372*5113495bSYour Name  * Check if both @ieee_old_link_id and @ieee_new_link_id are part of adapter
5373*5113495bSYour Name  * corresponding to @vdev_id. Then take necessary actions to support link switch
5374*5113495bSYour Name  * MAC update and update DP to change link MAC address to new link's address.
5375*5113495bSYour Name  *
5376*5113495bSYour Name  * Return: QDF_STATUS
5377*5113495bSYour Name  */
5378*5113495bSYour Name QDF_STATUS
5379*5113495bSYour Name hdd_link_switch_vdev_mac_addr_update(int32_t ieee_old_link_id,
5380*5113495bSYour Name 				     int32_t ieee_new_link_id, uint8_t vdev_id);
5381*5113495bSYour Name 
5382*5113495bSYour Name /**
5383*5113495bSYour Name  * hdd_get_link_info_by_ieee_link_id() - Find link info pointer matching with
5384*5113495bSYour Name  * IEEE link ID.
5385*5113495bSYour Name  * @adapter: HDD adapter
5386*5113495bSYour Name  * @link_id: IEEE link ID to search for.
5387*5113495bSYour Name  *
5388*5113495bSYour Name  * Search the station ctx connection info for matching link ID in @adapter and
5389*5113495bSYour Name  * return the link info pointer on match. The IEEE link ID is updated in station
5390*5113495bSYour Name  * context during MLO connection and reset on disconnection.
5391*5113495bSYour Name  *
5392*5113495bSYour Name  * Return: link info pointer
5393*5113495bSYour Name  */
5394*5113495bSYour Name struct wlan_hdd_link_info *
5395*5113495bSYour Name hdd_get_link_info_by_ieee_link_id(struct hdd_adapter *adapter, int32_t link_id);
5396*5113495bSYour Name #endif
5397*5113495bSYour Name 
5398*5113495bSYour Name #ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
5399*5113495bSYour Name /**
5400*5113495bSYour Name  * hdd_dynamic_mac_address_set(): API to set MAC address, when interface
5401*5113495bSYour Name  *                                is up.
5402*5113495bSYour Name  * @link_info: Link info pointer in HDD adapter
5403*5113495bSYour Name  * @mac_addr: MAC address to set
5404*5113495bSYour Name  * @mld_addr: MLD address to set
5405*5113495bSYour Name  * @update_self_peer: Set to true to update self peer's address
5406*5113495bSYour Name  *
5407*5113495bSYour Name  * This API is used to update the current VDEV MAC address.
5408*5113495bSYour Name  *
5409*5113495bSYour Name  * Return: 0 for success. non zero valure for failure.
5410*5113495bSYour Name  */
5411*5113495bSYour Name int hdd_dynamic_mac_address_set(struct wlan_hdd_link_info *link_info,
5412*5113495bSYour Name 				struct qdf_mac_addr mac_addr,
5413*5113495bSYour Name 				struct qdf_mac_addr mld_addr,
5414*5113495bSYour Name 				bool update_self_peer);
5415*5113495bSYour Name 
5416*5113495bSYour Name /**
5417*5113495bSYour Name  * hdd_is_dynamic_set_mac_addr_allowed() - API to check dynamic MAC address
5418*5113495bSYour Name  *				           update is allowed or not
5419*5113495bSYour Name  * @adapter: Pointer to the adapter structure
5420*5113495bSYour Name  *
5421*5113495bSYour Name  * Return: true or false
5422*5113495bSYour Name  */
5423*5113495bSYour Name bool hdd_is_dynamic_set_mac_addr_allowed(struct hdd_adapter *adapter);
5424*5113495bSYour Name 
5425*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC)
5426*5113495bSYour Name /**
5427*5113495bSYour Name  * hdd_update_vdev_mac_address() - Update VDEV MAC address dynamically
5428*5113495bSYour Name  * @adapter: Pointer to HDD adapter
5429*5113495bSYour Name  * @mac_addr: MAC address to be updated
5430*5113495bSYour Name  *
5431*5113495bSYour Name  * API to update VDEV MAC address during interface is in UP state.
5432*5113495bSYour Name  *
5433*5113495bSYour Name  * Return: 0 for Success. Error code for failure
5434*5113495bSYour Name  */
5435*5113495bSYour Name int hdd_update_vdev_mac_address(struct hdd_adapter *adapter,
5436*5113495bSYour Name 				struct qdf_mac_addr mac_addr);
5437*5113495bSYour Name #else
hdd_update_vdev_mac_address(struct hdd_adapter * adapter,struct qdf_mac_addr mac_addr)5438*5113495bSYour Name static inline int hdd_update_vdev_mac_address(struct hdd_adapter *adapter,
5439*5113495bSYour Name 					      struct qdf_mac_addr mac_addr)
5440*5113495bSYour Name {
5441*5113495bSYour Name 	struct qdf_mac_addr mld_addr = QDF_MAC_ADDR_ZERO_INIT;
5442*5113495bSYour Name 
5443*5113495bSYour Name 	return hdd_dynamic_mac_address_set(adapter->deflink, mac_addr,
5444*5113495bSYour Name 					   mld_addr, true);
5445*5113495bSYour Name }
5446*5113495bSYour Name #endif /* WLAN_FEATURE_11BE_MLO */
5447*5113495bSYour Name #else
hdd_update_vdev_mac_address(struct hdd_adapter * adapter,struct qdf_mac_addr mac_addr)5448*5113495bSYour Name static inline int hdd_update_vdev_mac_address(struct hdd_adapter *adapter,
5449*5113495bSYour Name 					      struct qdf_mac_addr mac_addr)
5450*5113495bSYour Name {
5451*5113495bSYour Name 	return 0;
5452*5113495bSYour Name }
5453*5113495bSYour Name 
5454*5113495bSYour Name static inline int
hdd_dynamic_mac_address_set(struct wlan_hdd_link_info * link_info,struct qdf_mac_addr mac_addr,struct qdf_mac_addr mld_addr,bool update_self_peer)5455*5113495bSYour Name hdd_dynamic_mac_address_set(struct wlan_hdd_link_info *link_info,
5456*5113495bSYour Name 			    struct qdf_mac_addr mac_addr,
5457*5113495bSYour Name 			    struct qdf_mac_addr mld_addr,
5458*5113495bSYour Name 			    bool update_self_peer)
5459*5113495bSYour Name {
5460*5113495bSYour Name 	return 0;
5461*5113495bSYour Name }
5462*5113495bSYour Name 
5463*5113495bSYour Name static inline bool
hdd_is_dynamic_set_mac_addr_allowed(struct hdd_adapter * adapter)5464*5113495bSYour Name hdd_is_dynamic_set_mac_addr_allowed(struct hdd_adapter *adapter)
5465*5113495bSYour Name {
5466*5113495bSYour Name 	return false;
5467*5113495bSYour Name }
5468*5113495bSYour Name 
5469*5113495bSYour Name #endif /* WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE */
5470*5113495bSYour Name 
5471*5113495bSYour Name #if defined(WLAN_FEATURE_ROAM_OFFLOAD) && \
5472*5113495bSYour Name defined(FEATURE_RX_LINKSPEED_ROAM_TRIGGER)
5473*5113495bSYour Name /**
5474*5113495bSYour Name  * wlan_hdd_link_speed_update() - Update link speed to F/W
5475*5113495bSYour Name  * @psoc: pointer to soc
5476*5113495bSYour Name  * @vdev_id: Vdev ID
5477*5113495bSYour Name  * @is_link_speed_good: true means good link speed,  false means bad link speed
5478*5113495bSYour Name  *
5479*5113495bSYour Name  * Return: None
5480*5113495bSYour Name  */
5481*5113495bSYour Name void wlan_hdd_link_speed_update(struct wlan_objmgr_psoc *psoc,
5482*5113495bSYour Name 				uint8_t vdev_id,
5483*5113495bSYour Name 				bool is_link_speed_good);
5484*5113495bSYour Name #else
wlan_hdd_link_speed_update(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,bool is_link_speed_good)5485*5113495bSYour Name static inline void wlan_hdd_link_speed_update(struct wlan_objmgr_psoc *psoc,
5486*5113495bSYour Name 					      uint8_t vdev_id,
5487*5113495bSYour Name 					      bool is_link_speed_good)
5488*5113495bSYour Name {}
5489*5113495bSYour Name #endif
5490*5113495bSYour Name 
5491*5113495bSYour Name /**
5492*5113495bSYour Name  * hdd_update_multicast_list() - update the multicast list
5493*5113495bSYour Name  * @vdev: pointer to VDEV object
5494*5113495bSYour Name  *
5495*5113495bSYour Name  * Return: none
5496*5113495bSYour Name  */
5497*5113495bSYour Name void hdd_update_multicast_list(struct wlan_objmgr_vdev *vdev);
5498*5113495bSYour Name 
5499*5113495bSYour Name /**
5500*5113495bSYour Name  * hdd_set_sar_init_index() - Set SAR safety index at init.
5501*5113495bSYour Name  * @hdd_ctx: HDD context
5502*5113495bSYour Name  *
5503*5113495bSYour Name  */
5504*5113495bSYour Name #ifdef SAR_SAFETY_FEATURE
5505*5113495bSYour Name void hdd_set_sar_init_index(struct hdd_context *hdd_ctx);
5506*5113495bSYour Name #else
hdd_set_sar_init_index(struct hdd_context * hdd_ctx)5507*5113495bSYour Name static inline void hdd_set_sar_init_index(struct hdd_context *hdd_ctx)
5508*5113495bSYour Name {}
5509*5113495bSYour Name #endif
5510*5113495bSYour Name /**
5511*5113495bSYour Name  * hdd_send_coex_traffic_shaping_mode() - Send coex traffic shaping mode
5512*5113495bSYour Name  * to FW
5513*5113495bSYour Name  * @vdev_id: vdev ID
5514*5113495bSYour Name  * @mode: traffic shaping mode
5515*5113495bSYour Name  *
5516*5113495bSYour Name  * This function is used to send coex traffic shaping mode to FW
5517*5113495bSYour Name  *
5518*5113495bSYour Name  * Return: 0 on success and -EINVAL on failure
5519*5113495bSYour Name  */
5520*5113495bSYour Name int hdd_send_coex_traffic_shaping_mode(uint8_t vdev_id, uint8_t mode);
5521*5113495bSYour Name 
5522*5113495bSYour Name #ifdef WLAN_FEATURE_LOCAL_PKT_CAPTURE
5523*5113495bSYour Name /**
5524*5113495bSYour Name  * wlan_hdd_lpc_handle_concurrency() - Handle local packet capture
5525*5113495bSYour Name  * concurrency scenario
5526*5113495bSYour Name  * @hdd_ctx: hdd_ctx
5527*5113495bSYour Name  * @is_virtual_iface: is virtual interface
5528*5113495bSYour Name  *
5529*5113495bSYour Name  * This function takes care of handling concurrency scenario
5530*5113495bSYour Name  * If STA+Mon present and SAP is coming up, terminate Mon and let SAP come up
5531*5113495bSYour Name  * If STA+Mon present and P2P is coming up, terminate Mon and let P2P come up
5532*5113495bSYour Name  * If STA+Mon present and NAN is coming up, terminate Mon and let NAN come up
5533*5113495bSYour Name  *
5534*5113495bSYour Name  * Return: none
5535*5113495bSYour Name  */
5536*5113495bSYour Name void wlan_hdd_lpc_handle_concurrency(struct hdd_context *hdd_ctx,
5537*5113495bSYour Name 				     bool is_virtual_iface);
5538*5113495bSYour Name 
5539*5113495bSYour Name /**
5540*5113495bSYour Name  * hdd_lpc_is_work_scheduled() - function to return if lpc wq scheduled
5541*5113495bSYour Name  * @hdd_ctx: hdd_ctx
5542*5113495bSYour Name  *
5543*5113495bSYour Name  * Return: true if scheduled; false otherwise
5544*5113495bSYour Name  */
5545*5113495bSYour Name bool hdd_lpc_is_work_scheduled(struct hdd_context *hdd_ctx);
5546*5113495bSYour Name 
5547*5113495bSYour Name #else
5548*5113495bSYour Name static inline void
wlan_hdd_lpc_handle_concurrency(struct hdd_context * hdd_ctx,bool is_virtual_iface)5549*5113495bSYour Name wlan_hdd_lpc_handle_concurrency(struct hdd_context *hdd_ctx,
5550*5113495bSYour Name 				bool is_virtual_iface)
5551*5113495bSYour Name {}
5552*5113495bSYour Name 
5553*5113495bSYour Name static inline bool
hdd_lpc_is_work_scheduled(struct hdd_context * hdd_ctx)5554*5113495bSYour Name hdd_lpc_is_work_scheduled(struct hdd_context *hdd_ctx)
5555*5113495bSYour Name {
5556*5113495bSYour Name 	return false;
5557*5113495bSYour Name }
5558*5113495bSYour Name #endif
5559*5113495bSYour Name 
5560*5113495bSYour Name /**
5561*5113495bSYour Name  * hdd_allow_new_intf() - Allow new intf created or not
5562*5113495bSYour Name  * @hdd_ctx: hdd context
5563*5113495bSYour Name  * @mode: qdf opmode of new interface
5564*5113495bSYour Name  *
5565*5113495bSYour Name  * Return: true if allowed, otherwise false
5566*5113495bSYour Name  */
5567*5113495bSYour Name bool hdd_allow_new_intf(struct hdd_context *hdd_ctx,
5568*5113495bSYour Name 			enum QDF_OPMODE mode);
5569*5113495bSYour Name #endif /* end #if !defined(WLAN_HDD_MAIN_H) */
5570