1  /*
2   * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
3   * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4   *
5   * Permission to use, copy, modify, and/or distribute this software for
6   * any purpose with or without fee is hereby granted, provided that the
7   * above copyright notice and this permission notice appear in all
8   * copies.
9   *
10   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11   * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12   * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13   * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14   * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15   * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16   * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17   * PERFORMANCE OF THIS SOFTWARE.
18   */
19  
20  /**
21   * DOC: wlan_hdd_cfg80211.h
22   *
23   * WLAN host device driver cfg80211 functions declaration
24   */
25  
26  #if !defined(HDD_CFG80211_H__)
27  #define HDD_CFG80211_H__
28  
29  #include <wlan_cfg80211_scan.h>
30  #include <wlan_cfg80211.h>
31  #include <wlan_cfg80211_tdls.h>
32  #include <qca_vendor.h>
33  #include <wlan_cfg80211_spectral.h>
34  
35  struct hdd_context;
36  struct wlan_hdd_link_info;
37  
38  #ifdef WLAN_FEATURE_11BE_MLO
39  #define EHT_OPMODE_SUPPORTED 2
40  #else
41  #define EHT_OPMODE_SUPPORTED 1
42  #endif
43  
44  /* QCA_NL80211_VENDOR_SUBCMD_ROAM policy */
45  extern const struct nla_policy wlan_hdd_set_roam_param_policy[
46  			QCA_WLAN_VENDOR_ATTR_ROAMING_PARAM_MAX + 1];
47  
48  /* QCA_NL80211_VENDOR_SUBCMD_GET_WIFI_INFO policy */
49  extern const struct nla_policy qca_wlan_vendor_get_wifi_info_policy[
50  			QCA_WLAN_VENDOR_ATTR_WIFI_INFO_GET_MAX + 1];
51  
52  /* QCA_NL80211_VENDOR_SUBCMD_SET_WIFI_CONFIGURATION policy */
53  extern const struct nla_policy wlan_hdd_wifi_config_policy[
54  			QCA_WLAN_VENDOR_ATTR_CONFIG_MAX + 1];
55  
56  /* QCA_NL80211_VENDOR_SUBCMD_WIFI_LOGGER_START policy */
57  extern const struct nla_policy qca_wlan_vendor_wifi_logger_start_policy[
58  			QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_START_MAX + 1];
59  
60  /* QCA_NL80211_VENDOR_SUBCMD_ND_OFFLOAD policy */
61  extern const struct nla_policy ns_offload_set_policy[
62  			QCA_WLAN_VENDOR_ATTR_ND_OFFLOAD_MAX + 1];
63  
64  /* QCA_NL80211_VENDOR_SUBCMD_GET_PREFERRED_FREQ_LIST policy */
65  extern const struct nla_policy get_preferred_freq_list_policy[
66  			QCA_WLAN_VENDOR_ATTR_GET_PREFERRED_FREQ_LIST_MAX + 1];
67  
68  /* QCA_NL80211_VENDOR_SUBCMD_SET_PROBABLE_OPER_CHANNEL policy */
69  extern const struct nla_policy set_probable_oper_channel_policy[
70  			QCA_WLAN_VENDOR_ATTR_PROBABLE_OPER_CHANNEL_MAX + 1];
71  
72  /* QCA_NL80211_VENDOR_SUBCMD_NO_DFS_FLAG policy */
73  extern const struct nla_policy wlan_hdd_set_no_dfs_flag_config_policy[
74  			QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG_MAX + 1];
75  
76  /* QCA_NL80211_VENDOR_SUBCMD_GET_RING_DATA policy */
77  extern const struct nla_policy qca_wlan_vendor_wifi_logger_get_ring_data_policy[
78  			QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_GET_RING_DATA_MAX + 1];
79  
80  /* QCA_NL80211_VENDOR_SUBCMD_OFFLOADED_PACKETS policy */
81  extern const struct nla_policy offloaded_packet_policy[
82  			QCA_WLAN_VENDOR_ATTR_OFFLOADED_PACKETS_MAX + 1];
83  
84  /* QCA_NL80211_VENDOR_SUBCMD_SETBAND policy */
85  extern const struct nla_policy setband_policy[QCA_WLAN_VENDOR_ATTR_MAX + 1];
86  
87  /* QCA_NL80211_VENDOR_SUBCMD_ACS_POLICY policy */
88  extern const struct nla_policy wlan_hdd_set_acs_dfs_config_policy[
89  			QCA_WLAN_VENDOR_ATTR_ACS_DFS_MAX + 1];
90  
91  /* QCA_NL80211_VENDOR_SUBCMD_STA_CONNECT_ROAM_POLICY policy */
92  extern const struct nla_policy wlan_hdd_set_sta_roam_config_policy[
93  			QCA_WLAN_VENDOR_ATTR_STA_CONNECT_ROAM_POLICY_MAX + 1];
94  
95  /* QCA_NL80211_VENDOR_SUBCMD_WISA  policy */
96  extern const struct nla_policy wlan_hdd_wisa_cmd_policy[
97  			QCA_WLAN_VENDOR_ATTR_WISA_MAX + 1];
98  
99  /* value for initial part of frames and number of bytes to be compared */
100  #define GAS_INITIAL_REQ "\x04\x0a"
101  #define GAS_INITIAL_REQ_SIZE 2
102  
103  #define GAS_INITIAL_RSP "\x04\x0b"
104  #define GAS_INITIAL_RSP_SIZE 2
105  
106  #define GAS_COMEBACK_REQ "\x04\x0c"
107  #define GAS_COMEBACK_REQ_SIZE 2
108  
109  #define GAS_COMEBACK_RSP "\x04\x0d"
110  #define GAS_COMEBACK_RSP_SIZE 2
111  
112  #define P2P_PUBLIC_ACTION_FRAME "\x04\x09\x50\x6f\x9a\x09"
113  #define P2P_PUBLIC_ACTION_FRAME_SIZE 6
114  
115  #define P2P_ACTION_FRAME "\x7f\x50\x6f\x9a\x09"
116  #define P2P_ACTION_FRAME_SIZE 5
117  
118  #define SA_QUERY_FRAME_REQ "\x08\x00"
119  #define SA_QUERY_FRAME_REQ_SIZE 2
120  
121  #define SA_QUERY_FRAME_RSP "\x08\x01"
122  #define SA_QUERY_FRAME_RSP_SIZE 2
123  
124  #define WNM_BSS_ACTION_FRAME "\x0a\x07"
125  #define WNM_BSS_ACTION_FRAME_SIZE 2
126  
127  #define WNM_NOTIFICATION_FRAME "\x0a\x1a"
128  #define WNM_NOTIFICATION_FRAME_SIZE 2
129  
130  #define WPA_OUI_TYPE   "\x00\x50\xf2\x01"
131  #define DENYLIST_OUI_TYPE   "\x00\x50\x00\x00"
132  #define ALLOWLIST_OUI_TYPE   "\x00\x50\x00\x01"
133  #define WPA_OUI_TYPE_SIZE  4
134  #define WMM_OUI_TYPE   "\x00\x50\xf2\x02\x01"
135  #define WMM_OUI_TYPE_SIZE  5
136  
137  #define VENDOR1_AP_OUI_TYPE "\x00\xE0\x4C"
138  #define VENDOR1_AP_OUI_TYPE_SIZE 3
139  
140  #define BASIC_RATE_MASK   0x80
141  #define RATE_MASK         0x7f
142  
143  #ifndef NL80211_AUTHTYPE_FILS_SK
144  #define NL80211_AUTHTYPE_FILS_SK 5
145  #endif
146  #ifndef NL80211_AUTHTYPE_FILS_SK_PFS
147  #define NL80211_AUTHTYPE_FILS_SK_PFS 6
148  #endif
149  #ifndef NL80211_AUTHTYPE_FILS_PK
150  #define NL80211_AUTHTYPE_FILS_PK 7
151  #endif
152  #ifndef WLAN_AKM_SUITE_FILS_SHA256
153  #define WLAN_AKM_SUITE_FILS_SHA256 0x000FAC0E
154  #endif
155  #ifndef WLAN_AKM_SUITE_FILS_SHA384
156  #define WLAN_AKM_SUITE_FILS_SHA384 0x000FAC0F
157  #endif
158  #ifndef WLAN_AKM_SUITE_FT_FILS_SHA256
159  #define WLAN_AKM_SUITE_FT_FILS_SHA256 0x000FAC10
160  #endif
161  #ifndef WLAN_AKM_SUITE_FT_FILS_SHA384
162  #define WLAN_AKM_SUITE_FT_FILS_SHA384 0x000FAC11
163  #endif
164  #ifndef WLAN_AKM_SUITE_DPP_RSN
165  #define WLAN_AKM_SUITE_DPP_RSN 0x506f9a02
166  #endif
167  
168  #ifndef WLAN_AKM_SUITE_OWE
169  #define WLAN_AKM_SUITE_OWE 0x000FAC12
170  #endif
171  
172  #ifndef WLAN_AKM_SUITE_EAP_SHA256
173  #define WLAN_AKM_SUITE_EAP_SHA256 0x000FAC0B
174  #endif
175  
176  #ifndef WLAN_AKM_SUITE_EAP_SHA384
177  #define WLAN_AKM_SUITE_EAP_SHA384 0x000FAC0C
178  #endif
179  
180  #ifndef WLAN_AKM_SUITE_SAE
181  #define WLAN_AKM_SUITE_SAE 0x000FAC08
182  #endif
183  
184  #ifndef WLAN_AKM_SUITE_FT_SAE
185  #define WLAN_AKM_SUITE_FT_SAE 0x000FAC09
186  #endif
187  
188  #ifndef WLAN_AKM_SUITE_FT_EAP_SHA_384
189  #define WLAN_AKM_SUITE_FT_EAP_SHA_384 0x000FAC0D
190  #endif
191  
192  #ifndef WLAN_AKM_SUITE_SAE_EXT_KEY
193  #define WLAN_AKM_SUITE_SAE_EXT_KEY 0x000FAC18
194  #endif
195  
196  #ifndef WLAN_AKM_SUITE_FT_SAE_EXT_KEY
197  #define WLAN_AKM_SUITE_FT_SAE_EXT_KEY 0x000FAC19
198  #endif
199  
200  #ifdef FEATURE_WLAN_TDLS
201  #define WLAN_IS_TDLS_SETUP_ACTION(action) \
202  	((TDLS_SETUP_REQUEST <= action) && \
203  	(TDLS_SETUP_CONFIRM >= action))
204  #if !defined(TDLS_MGMT_VERSION2)
205  #define TDLS_MGMT_VERSION2 0
206  #endif
207  
208  #endif
209  
210  #define HDD_SET_BIT(__param, __val)    ((__param) |= (1 << (__val)))
211  
212  #define MAX_SCAN_SSID 10
213  
214  #define IS_CHANNEL_VALID(channel) ((channel >= 0 && channel < 15) \
215  			|| (channel >= 36 && channel <= 184))
216  
217  #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 12, 0)) \
218  	|| defined(BACKPORTED_CHANNEL_SWITCH_PRESENT)
219  #define CHANNEL_SWITCH_SUPPORTED
220  #endif
221  
222  #if defined(CFG80211_DEL_STA_V2) || (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)) || defined(WITH_BACKPORTS)
223  #define USE_CFG80211_DEL_STA_V2
224  #endif
225  
226  /**
227   * typedef eDFS_CAC_STATUS - CAC status
228   *
229   * @DFS_CAC_NEVER_DONE: CAC never done
230   * @DFS_CAC_IN_PROGRESS: CAC is in progress
231   * @DFS_CAC_ALREADY_DONE: CAC already done
232   */
233  typedef enum {
234  	DFS_CAC_NEVER_DONE,
235  	DFS_CAC_IN_PROGRESS,
236  	DFS_CAC_ALREADY_DONE,
237  } eDFS_CAC_STATUS;
238  
239  #define MAX_REQUEST_ID			0xFFFFFFFF
240  
241  /* Feature defines */
242  #define WIFI_FEATURE_INFRA              0x0001  /* Basic infrastructure mode */
243  #define WIFI_FEATURE_INFRA_5G           0x0002  /* Support for 5 GHz Band */
244  #define WIFI_FEATURE_HOTSPOT            0x0004  /* Support for GAS/ANQP */
245  #define WIFI_FEATURE_P2P                0x0008  /* Wifi-Direct */
246  #define WIFI_FEATURE_SOFT_AP            0x0010  /* Soft AP */
247  #define WIFI_FEATURE_EXTSCAN            0x0020  /* Extended Scan APIs */
248  #define WIFI_FEATURE_NAN                0x0040  /* Neighbor Awareness
249  						 * Networking
250  						 */
251  #define WIFI_FEATURE_D2D_RTT		0x0080  /* Device-to-device RTT */
252  #define WIFI_FEATURE_D2AP_RTT           0x0100  /* Device-to-AP RTT */
253  #define WIFI_FEATURE_BATCH_SCAN         0x0200  /* Batched Scan (legacy) */
254  #define WIFI_FEATURE_PNO                0x0400  /* Preferred network offload */
255  #define WIFI_FEATURE_ADDITIONAL_STA     0x0800  /* Support for two STAs */
256  #define WIFI_FEATURE_TDLS               0x1000  /* Tunnel directed link
257  						 * setup
258  						 */
259  #define WIFI_FEATURE_TDLS_OFFCHANNEL	0x2000  /* Support for TDLS off
260  						 * channel
261  						 */
262  #define WIFI_FEATURE_EPR                0x4000  /* Enhanced power reporting */
263  #define WIFI_FEATURE_AP_STA             0x8000  /* Support for AP STA
264  						 * Concurrency
265  						 */
266  #define WIFI_FEATURE_LINK_LAYER_STATS   0x10000  /* Link layer stats */
267  #define WIFI_FEATURE_LOGGER             0x20000  /* WiFi Logger */
268  #define WIFI_FEATURE_HAL_EPNO           0x40000  /* WiFi PNO enhanced */
269  #define WIFI_FEATURE_RSSI_MONITOR       0x80000  /* RSSI Monitor */
270  #define WIFI_FEATURE_MKEEP_ALIVE        0x100000  /* WiFi mkeep_alive */
271  #define WIFI_FEATURE_CONFIG_NDO         0x200000  /* ND offload configure */
272  #define WIFI_FEATURE_TX_TRANSMIT_POWER  0x400000  /* Tx transmit power levels */
273  #define WIFI_FEATURE_CONTROL_ROAMING    0x800000  /* Enable/Disable roaming */
274  #define WIFI_FEATURE_IE_ALLOWLIST       0x1000000 /* Support Probe IE allow
275  						   * listing
276  						   */
277  #define WIFI_FEATURE_SCAN_RAND          0x2000000 /* Support MAC & Probe Sequence Number randomization */
278  #define WIFI_FEATURE_SET_LATENCY_MODE   0x40000000 /* Set latency mode */
279  /* Support changing MAC address without iface reset(down and up) */
280  #define WIFI_FEATURE_DYNAMIC_SET_MAC    0x10000000
281  
282  /* Support Tx Power Limit setting */
283  #define WIFI_FEATURE_SET_TX_POWER_LIMIT 0x4000000
284  
285  /* Add more features here */
286  #define WIFI_TDLS_SUPPORT			BIT(0)
287  #define WIFI_TDLS_EXTERNAL_CONTROL_SUPPORT	BIT(1)
288  #define WIFI_TDLS_OFFCHANNEL_SUPPORT		BIT(2)
289  #define WIFI_TDLS_WIDER_BW_SUPPORT		BIT(3)
290  
291  #define CFG_NON_AGG_RETRY_MAX                  (64)
292  #define CFG_AGG_RETRY_MAX                      (64)
293  #define CFG_CTRL_RETRY_MAX                     (31)
294  #define CFG_PROPAGATION_DELAY_MAX              (63)
295  #define CFG_PROPAGATION_DELAY_BASE             (64)
296  #define CFG_AGG_RETRY_MIN                      (5)
297  #define CFG_NON_AGG_RETRY_MIN                  (5)
298  
299  #define CFG_NO_SUPPORT_UL_MUMIMO		(0)
300  #define CFG_FULL_BW_SUPPORT_UL_MUMIMO		(1)
301  #define CFG_PARTIAL_BW_SUPPORT_UL_MUMIMO	(2)
302  #define CFG_FULL_PARTIAL_BW_SUPPORT_UL_MUMIMO	(3)
303  
304  #define PCL_CHANNEL_SUPPORT_GO			BIT(0)
305  #define PCL_CHANNEL_SUPPORT_CLI			BIT(1)
306  #define PCL_CHANNEL_EXCLUDE_IN_GO_NEG		BIT(3)
307  
308  #define CONNECTIVITY_CHECK_SET_ARP \
309  	QCA_WLAN_VENDOR_CONNECTIVITY_CHECK_SET_ARP
310  #define CONNECTIVITY_CHECK_SET_DNS \
311  	QCA_WLAN_VENDOR_CONNECTIVITY_CHECK_SET_DNS
312  #define CONNECTIVITY_CHECK_SET_TCP_HANDSHAKE \
313  	QCA_WLAN_VENDOR_CONNECTIVITY_CHECK_SET_TCP_HANDSHAKE
314  #define CONNECTIVITY_CHECK_SET_ICMPV4 \
315  	QCA_WLAN_VENDOR_CONNECTIVITY_CHECK_SET_ICMPV4
316  #define CONNECTIVITY_CHECK_SET_ICMPV6 \
317  	QCA_WLAN_VENDOR_CONNECTIVITY_CHECK_SET_ICMPV6
318  #define CONNECTIVITY_CHECK_SET_TCP_SYN \
319  	QCA_WLAN_VENDOR_CONNECTIVITY_CHECK_SET_TCP_SYN
320  #define CONNECTIVITY_CHECK_SET_TCP_SYN_ACK \
321  	QCA_WLAN_VENDOR_CONNECTIVITY_CHECK_SET_TCP_SYN_ACK
322  #define CONNECTIVITY_CHECK_SET_TCP_ACK \
323  	QCA_WLAN_VENDOR_CONNECTIVITY_CHECK_SET_TCP_ACK
324  
325  extern const struct nla_policy
326  wlan_hdd_wifi_test_config_policy[
327  	QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_MAX + 1];
328  
329  #define RSNXE_DEFAULT 0
330  #define RSNXE_OVERRIDE_1 1
331  #define RSNXE_OVERRIDE_2 2
332  #define CSA_DEFAULT 0
333  #define CSA_IGNORE 1
334  #define SA_QUERY_TIMEOUT_DEFAULT 0
335  #define SA_QUERY_TIMEOUT_IGNORE 1
336  #define FILS_DISCV_FRAMES_DISABLE 0
337  #define FILS_DISCV_FRAMES_ENABLE 1
338  #define H2E_RSNXE_DEFAULT 0
339  #define H2E_RSNXE_IGNORE 1
340  
341  #define FEATURE_VENDOR_SUBCMD_WIFI_TEST_CONFIGURATION                    \
342  {                                                                        \
343  	.info.vendor_id = QCA_NL80211_VENDOR_ID,                         \
344  	.info.subcmd =                                                   \
345  		QCA_NL80211_VENDOR_SUBCMD_WIFI_TEST_CONFIGURATION,       \
346  	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |                            \
347  		WIPHY_VENDOR_CMD_NEED_NETDEV |                           \
348  		WIPHY_VENDOR_CMD_NEED_RUNNING,                           \
349  	.doit = wlan_hdd_cfg80211_set_wifi_test_config,                  \
350  	vendor_command_policy(wlan_hdd_wifi_test_config_policy,          \
351  			      QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_MAX) \
352  },
353  
354  extern const struct nla_policy
355  	qca_wlan_vendor_set_nud_stats_policy
356  	[QCA_ATTR_NUD_STATS_SET_MAX + 1];
357  
358  #define FEATURE_VENDOR_SUBCMD_NUD_STATS_SET				    \
359  {									    \
360  		.info.vendor_id = QCA_NL80211_VENDOR_ID,		    \
361  		.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_NUD_STATS_SET,     \
362  		.flags = WIPHY_VENDOR_CMD_NEED_WDEV |			    \
363  			WIPHY_VENDOR_CMD_NEED_NETDEV |			    \
364  			WIPHY_VENDOR_CMD_NEED_RUNNING,			    \
365  		.doit = wlan_hdd_cfg80211_set_nud_stats,		    \
366  		vendor_command_policy(qca_wlan_vendor_set_nud_stats_policy, \
367  				      QCA_ATTR_NUD_STATS_SET_MAX)	    \
368  },
369  
370  extern const struct nla_policy
371  	qca_wlan_vendor_set_trace_level_policy
372  	[QCA_WLAN_VENDOR_ATTR_SET_TRACE_LEVEL_MAX + 1];
373  
374  #define FEATURE_VENDOR_SUBCMD_SET_TRACE_LEVEL				\
375  {									\
376  	.info.vendor_id = QCA_NL80211_VENDOR_ID,			\
377  	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_SET_TRACE_LEVEL,	\
378  	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				\
379  		 WIPHY_VENDOR_CMD_NEED_NETDEV |				\
380  		 WIPHY_VENDOR_CMD_NEED_RUNNING,				\
381  	.doit = wlan_hdd_cfg80211_set_trace_level,			\
382  	vendor_command_policy(qca_wlan_vendor_set_trace_level_policy,	\
383  			      QCA_WLAN_VENDOR_ATTR_SET_TRACE_LEVEL_MAX)	\
384  },
385  
386  /**
387   * hdd_cfg80211_wiphy_alloc() - Allocate wiphy
388   *
389   * Allocate wiphy and hdd context.
390   *
391   * Return: hdd context on success and NULL on failure.
392   */
393  struct hdd_context *hdd_cfg80211_wiphy_alloc(void);
394  
395  int wlan_hdd_cfg80211_scan(struct wiphy *wiphy,
396  			   struct cfg80211_scan_request *request);
397  
398  int wlan_hdd_cfg80211_init(struct device *dev,
399  			   struct wiphy *wiphy, struct hdd_config *config);
400  
401  void wlan_hdd_cfg80211_deinit(struct wiphy *wiphy);
402  
403  void wlan_hdd_update_wiphy(struct hdd_context *hdd_ctx);
404  
405  void wlan_hdd_update_11n_mode(struct hdd_context *hdd_ctx);
406  
407  /**
408   * wlan_hdd_update_wiphy_supported_band() - Updates wiphy band info when
409   * receive FW ready event
410   * @hdd_ctx: HDD context
411   *
412   * Updates wiphy band info
413   *
414   * Return: QDF Status
415   */
416  QDF_STATUS wlan_hdd_update_wiphy_supported_band(struct hdd_context *hdd_ctx);
417  
418  int wlan_hdd_cfg80211_register(struct wiphy *wiphy);
419  
420  /**
421   * wlan_hdd_cfg80211_register_frames() - register frame types and callbacks
422   * with the PE.
423   * @adapter: pointer to adapter
424   *
425   * This function is used by HDD to register frame types which are interested
426   * by supplicant, callbacks for rx frame indication and ack.
427   *
428   * Return: 0 on success and non zero value on failure
429   */
430  int wlan_hdd_cfg80211_register_frames(struct hdd_adapter *adapter);
431  
432  void wlan_hdd_cfg80211_deregister_frames(struct hdd_adapter *adapter);
433  
434  void hdd_reg_notifier(struct wiphy *wiphy,
435  				 struct regulatory_request *request);
436  
437  /*
438   * FUNCTION: wlan_hdd_validate_operation_channel
439   * called by wlan_hdd_cfg80211_start_bss() and
440   * wlan_hdd_set_channel()
441   * @hdd_ctx: Global HDD context
442   *
443   * This function validates whether given channel is part of valid
444   * channel list.
445   */
446  QDF_STATUS wlan_hdd_validate_operation_channel(struct hdd_context *hdd_ctx,
447  					       uint32_t ch_freq);
448  
449  /**
450   * hdd_select_cbmode() - select channel bonding mode
451   * @adapter: Pointer to adapter
452   * @oper_freq: Operating frequency (MHz)
453   * @sec_ch_2g_freq: secondary channel freq
454   * @ch_params: channel info struct to populate
455   *
456   * Return: none
457   */
458  void hdd_select_cbmode(struct hdd_adapter *adapter, qdf_freq_t oper_freq,
459  		       qdf_freq_t sec_ch_2g_freq, struct ch_params *ch_params);
460  
461  /**
462   * wlan_hdd_is_ap_supports_immediate_power_save() - to find certain vendor APs
463   *				which do not support immediate power-save.
464   * @ies: beacon IE of the AP which STA is connecting/connected to
465   * @length: beacon IE length only
466   *
467   * This API takes the IE of connected/connecting AP and determines that
468   * whether it has specific vendor OUI. If it finds then it will return false to
469   * notify that AP doesn't support immediate power-save.
470   *
471   * Return: true or false based on findings
472   */
473  bool wlan_hdd_is_ap_supports_immediate_power_save(uint8_t *ies, int length);
474  
475  /**
476   * wlan_hdd_del_station() - delete station wrapper
477   * @adapter: pointer to the hdd adapter
478   * @mac: pointer to mac addr
479   *
480   * Return: Errno
481   */
482  int wlan_hdd_del_station(struct hdd_adapter *adapter, const uint8_t *mac);
483  
484  #if defined(USE_CFG80211_DEL_STA_V2)
485  int wlan_hdd_cfg80211_del_station(struct wiphy *wiphy,
486  				  struct net_device *dev,
487  				  struct station_del_parameters *param);
488  #else
489  #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0))
490  int wlan_hdd_cfg80211_del_station(struct wiphy *wiphy,
491  				  struct net_device *dev,
492  				  const uint8_t *mac);
493  #else
494  int wlan_hdd_cfg80211_del_station(struct wiphy *wiphy,
495  				  struct net_device *dev,
496  				  uint8_t *mac);
497  #endif
498  #endif /* USE_CFG80211_DEL_STA_V2 */
499  
500  int wlan_hdd_send_avoid_freq_event(struct hdd_context *hdd_ctx,
501  				   struct ch_avoid_ind_type *avoid_freq_list);
502  
503  /**
504   * wlan_hdd_send_hang_reason_event() - Send hang reason to the userspace
505   * @hdd_ctx: Pointer to hdd context
506   * @reason: cds recovery reason
507   * @data: Hang Data
508   * @data_len: Hang Data len
509   *
510   * Return: 0 on success or failure reason
511   */
512  int wlan_hdd_send_hang_reason_event(struct hdd_context *hdd_ctx,
513  				    uint32_t reason, uint8_t *data,
514  				    size_t data_len);
515  
516  int wlan_hdd_send_avoid_freq_for_dnbs(struct hdd_context *hdd_ctx,
517  				      qdf_freq_t op_freq);
518  
519  /**
520   * wlan_hdd_rso_cmd_status_cb() - HDD callback to read RSO command status
521   * @hdd_handle: opaque handle for the hdd context
522   * @rso_status: rso command status
523   *
524   * This callback function is invoked by firmware to update
525   * the RSO(ROAM SCAN OFFLOAD) command status.
526   *
527   * Return: None
528   */
529  void wlan_hdd_rso_cmd_status_cb(hdd_handle_t hdd_handle,
530  				struct rso_cmd_status *rso_status);
531  
532  /**
533   * wlan_hdd_cfg80211_acs_ch_select_evt: Callback function for ACS evt
534   * @link_info: Link info pointer in HDD adapter
535   * @store_acs_freq: Store current ACS frequecy flag
536   *
537   * This is a callback function on ACS procedure is completed.
538   * This function send the ACS selected channel information to hostapd
539   *
540   * Return: None
541   */
542  void wlan_hdd_cfg80211_acs_ch_select_evt(struct wlan_hdd_link_info *link_info,
543  					 bool store_acs_freq);
544  
545  #ifdef WLAN_CFR_ENABLE
546  /*
547   * hdd_cfr_data_send_nl_event() - send cfr data through nl event
548   * @vdev_id: vdev id
549   * @pid: process pid to which send data event unicast way
550   * @data: pointer to the cfr data
551   * @data_len: length of data
552   *
553   * Return: void
554   */
555  void hdd_cfr_data_send_nl_event(uint8_t vdev_id, uint32_t pid,
556  				const void *data, uint32_t data_len);
557  
558  #define FEATURE_CFR_DATA_VENDOR_EVENTS                                  \
559  [QCA_NL80211_VENDOR_SUBCMD_PEER_CFR_CAPTURE_CFG_INDEX] = {              \
560          .vendor_id = QCA_NL80211_VENDOR_ID,                             \
561          .subcmd = QCA_NL80211_VENDOR_SUBCMD_PEER_CFR_CAPTURE_CFG,       \
562  },
563  #else
564  #define FEATURE_CFR_DATA_VENDOR_EVENTS
565  #endif
566  
567  #ifdef WLAN_FEATURE_ROAM_OFFLOAD
568  /**
569   * hdd_send_roam_scan_ch_list_event() - roam scan ch list event to user space
570   * @hdd_ctx: HDD context
571   * @vdev_id: vdev id
572   * @buf_len: length of frequency list
573   * @buf: pointer to buffer of frequency list
574   *
575   * Return: None
576   */
577  void hdd_send_roam_scan_ch_list_event(struct hdd_context *hdd_ctx,
578  				      uint8_t vdev_id, uint16_t buf_len,
579  				      uint8_t *buf);
580  #else
581  static inline
hdd_send_roam_scan_ch_list_event(struct hdd_context * hdd_ctx,uint8_t vdev_id,uint16_t buf_len,uint8_t * buf)582  void hdd_send_roam_scan_ch_list_event(struct hdd_context *hdd_ctx,
583  				      uint8_t vdev_id, uint16_t buf_len,
584  				      uint8_t *buf)
585  {
586  }
587  #endif
588  
589  /**
590   * wlan_hdd_cfg80211_update_apies() - update ap mode ies
591   * @link_info: Link info pointer in hostapd adapter
592   *
593   * Return: 0 for success non-zero for failure
594   */
595  int wlan_hdd_cfg80211_update_apies(struct wlan_hdd_link_info *link_info);
596  
597  int wlan_hdd_sap_cfg_dfs_override(struct hdd_adapter *adapter);
598  
599  int wlan_hdd_enable_dfs_chan_scan(struct hdd_context *hdd_ctx,
600  				  bool enable_dfs_channels);
601  
602  /**
603   * wlan_hdd_cfg80211_update_band() - Update band of operation
604   * @hdd_ctx: The global HDD context
605   * @wiphy: The wiphy being configured
606   * @new_band: The new bad of operation
607   *
608   * This function is called from the supplicant through a
609   * private ioctl to change the band value
610   *
611   * Return: 0 on success, else a negative errno if the operation could
612   *         not be completed
613   */
614  int wlan_hdd_cfg80211_update_band(struct hdd_context *hdd_ctx,
615  				  struct wiphy *wiphy,
616  				  enum band_info new_band);
617  
618  /**
619   * wlan_hdd_change_hw_mode_for_given_chnl() - change HW mode for given channel
620   * @adapter: pointer to adapter
621   * @chan_freq: given channel frequency
622   * @reason: reason for HW mode change is needed
623   *
624   * This API decides and sets hardware mode to DBS based on given channel.
625   * For example, some of the platforms require DBS hardware mode to operate
626   * in 2.4G channel
627   *
628   * Return: 0 for success and non-zero for failure
629   */
630  int wlan_hdd_change_hw_mode_for_given_chnl(struct hdd_adapter *adapter,
631  					   uint32_t chan_freq,
632  					   enum policy_mgr_conn_update_reason reason);
633  
634  /**
635   * enum hdd_rate_info_bw: an HDD internal rate bandwidth representation
636   * @HDD_RATE_BW_5: 5MHz
637   * @HDD_RATE_BW_10: 10MHz
638   * @HDD_RATE_BW_20: 20MHz
639   * @HDD_RATE_BW_40: 40MHz
640   * @HDD_RATE_BW_80: 80MHz
641   * @HDD_RATE_BW_160: 160 MHz
642   * @HDD_RATE_BW_320: 320 MHz
643   */
644  enum hdd_rate_info_bw {
645  	HDD_RATE_BW_5,
646  	HDD_RATE_BW_10,
647  	HDD_RATE_BW_20,
648  	HDD_RATE_BW_40,
649  	HDD_RATE_BW_80,
650  	HDD_RATE_BW_160,
651  	HDD_RATE_BW_320,
652  };
653  
654  /**
655   * enum hdd_chain_mode : Representation of Number of chains available.
656   * @HDD_CHAIN_MODE_1X1: Chain mask Not Configurable as only one chain available
657   * @HDD_CHAIN_MODE_2X2: Chain mask configurable as both chains available
658   */
659  enum hdd_chain_mode {
660  	HDD_CHAIN_MODE_1X1 = 1,
661  	HDD_CHAIN_MODE_2X2 = 3,
662  };
663  
664  /**
665   * enum hdd_ba_mode: Representation of Number to configure BA mode
666   * @HDD_BA_MODE_AUTO: Auto mode
667   * @HDD_BA_MODE_MANUAL: Manual mode
668   * @HDD_BA_MODE_64: For buffer size 64
669   * @HDD_BA_MODE_256: For buffer size 256
670   * @HDD_BA_MODE_128: placeholder, not valid
671   * @HDD_BA_MODE_512: For buffer size 512
672   * @HDD_BA_MODE_1024: For buffer size 1024
673   */
674  enum hdd_ba_mode {
675  	HDD_BA_MODE_AUTO,
676  	HDD_BA_MODE_MANUAL,
677  	HDD_BA_MODE_64,
678  	HDD_BA_MODE_256,
679  	HDD_BA_MODE_128,
680  	HDD_BA_MODE_512,
681  	HDD_BA_MODE_1024,
682  };
683  
684  /**
685   * hdd_set_rate_bw(): Set the bandwidth for the given rate_info
686   * @info: The rate info for which the bandwidth should be set
687   * @hdd_bw: HDD representation of a rate info bandwidth
688   */
689  void hdd_set_rate_bw(struct rate_info *info, enum hdd_rate_info_bw hdd_bw);
690  
691  /*
692   * hdd_get_sap_operating_band_by_link_info: Get operating channel of link info
693   * for sap.
694   * @link_info: Pointer to link_info in adapter
695   *
696   * Return : Corresponding band for SAP operating channel
697   */
698  
699  uint8_t
700  hdd_get_sap_operating_band_by_link_info(struct wlan_hdd_link_info *link_info);
701  
702  /*
703   * hdd_get_sap_operating_band:  Get current operating channel
704   * for sap.
705   * @hdd_ctx: hdd context
706   *
707   * Return : Corresponding band for SAP operating channel
708   */
709  uint8_t hdd_get_sap_operating_band(struct hdd_context *hdd_ctx);
710  
711  /**
712   * wlan_hdd_merge_avoid_freqs(): Merge two tHddAvoidFreqList
713   * @destFreqList: Destination list in which merged frequency
714   * list will be available.
715   * @srcFreqList: Source frequency list.
716   *
717   * Merges two avoid_frequency lists
718   */
719  int wlan_hdd_merge_avoid_freqs(struct ch_avoid_ind_type *destFreqList,
720  		struct ch_avoid_ind_type *srcFreqList);
721  
722  
723  /**
724   * hdd_bt_activity_cb() - callback function to receive bt activity
725   * @hdd_handle: Opaque handle to the HDD context
726   * @bt_activity: specifies the kind of bt activity
727   *
728   * Return: none
729   */
730  void hdd_bt_activity_cb(hdd_handle_t hdd_handle, uint32_t bt_activity);
731  
732  #ifdef WLAN_FEATURE_GTK_OFFLOAD
733  /**
734   * wlan_hdd_save_gtk_offload_params() - Save gtk offload parameters in STA
735   *                                      context for offload operations.
736   * @adapter: Adapter context
737   * @kck_ptr: KCK buffer pointer
738   * @kck_len: KCK length
739   * @kek_ptr: KEK buffer pointer
740   * @kek_len: KEK length
741   * @replay_ctr: Pointer to 64 bit long replay counter
742   * @big_endian: true if replay_ctr is in big endian format
743   *
744   * Return: None
745   */
746  void wlan_hdd_save_gtk_offload_params(struct hdd_adapter *adapter,
747  				      uint8_t *kck_ptr, uint8_t  kck_len,
748  				      uint8_t *kek_ptr, uint32_t kek_len,
749  				      uint8_t *replay_ctr, bool big_endian);
750  #else
wlan_hdd_save_gtk_offload_params(struct hdd_adapter * adapter,uint8_t * kck_ptr,uint8_t kck_len,uint8_t * kek_ptr,uint32_t kek_len,uint8_t * replay_ctr,bool big_endian)751  void wlan_hdd_save_gtk_offload_params(struct hdd_adapter *adapter,
752  				      uint8_t *kck_ptr, uint8_t kck_len,
753  				      uint8_t *kek_ptr, uint32_t kek_len,
754  				      uint8_t *replay_ctr, bool big_endian)
755  {}
756  #endif
757  
758  
759  /**
760   * wlan_hdd_flush_pmksa_cache() - flush pmksa cache for adapter
761   * @link_info: link_info pointer in adapter
762   *
763   * Return: qdf status
764   */
765  QDF_STATUS wlan_hdd_flush_pmksa_cache(struct wlan_hdd_link_info *link_info);
766  
767  /*
768   * wlan_hdd_send_mode_change_event() - API to send hw mode change event to
769   * userspace
770   *
771   * Return : 0 on success and errno on failure
772   */
773  int wlan_hdd_send_mode_change_event(void);
774  
775  /**
776   * wlan_hdd_restore_channels() - Restore the channels which were cached
777   * and disabled in wlan_hdd_disable_channels api.
778   * @hdd_ctx: Pointer to the HDD context
779   *
780   * Return: 0 on success, Error code on failure
781   */
782  int wlan_hdd_restore_channels(struct hdd_context *hdd_ctx);
783  
784  /*
785   * wlan_hdd_send_sta_authorized_event: Function to send station authorized
786   * event to user space in case of SAP
787   * @adapter: Pointer to the adapter
788   * @hdd_ctx: HDD Context
789   * @mac_addr: MAC address of the STA for which the Authorized event needs to
790   * be sent
791   * This api is used to send station authorized event to user space
792   */
793  QDF_STATUS wlan_hdd_send_sta_authorized_event(
794  					struct hdd_adapter *adapter,
795  					struct hdd_context *hdd_ctx,
796  					const struct qdf_mac_addr *mac_addr);
797  
798  /**
799   * hdd_set_dynamic_antenna_mode() - set dynamic antenna mode
800   * @link_info: Link info pointer in HDD adapter
801   * @num_rx_chains: number of chains to be used for receiving data
802   * @num_tx_chains: number of chains to be used for transmitting data
803   *
804   * This function will set dynamic antenna mode
805   *
806   * Return: 0 for success
807   */
808  int hdd_set_dynamic_antenna_mode(struct wlan_hdd_link_info *link_info,
809  				 uint8_t num_rx_chains, uint8_t num_tx_chains);
810  
811  #ifdef MULTI_CLIENT_LL_SUPPORT
812  /**
813   * hdd_get_multi_client_ll_support() - get multi client ll support flag
814   * @adapter: hdd adapter
815   *
816   * Return: none
817   */
818  bool hdd_get_multi_client_ll_support(struct hdd_adapter *adapter);
819  
820  /**
821   * wlan_hdd_set_wlm_client_latency_level() - Set latency level to FW
822   * @adapter: pointer to network adapter
823   * @port_id: port id for which host sends latency level to FW
824   * @latency_level: level to be set in fw
825   *
826   * Return: QDF_STATUS
827   */
828  QDF_STATUS wlan_hdd_set_wlm_client_latency_level(struct hdd_adapter *adapter,
829  						 uint32_t port_id,
830  						 uint16_t latency_level);
831  
832  /**
833   * wlan_hdd_set_wlm_latency_level() - Set latency level to FW
834   * @adapter: pointer to network adapter
835   * @latency_level: level to be set in fw
836   * @client_id_bitmap: client id bitmap
837   * @force_reset: flag to reset latency level in fw
838   *
839   * Return: QDF_STATUS
840   */
841  QDF_STATUS wlan_hdd_set_wlm_latency_level(struct hdd_adapter *adapter,
842  					  uint16_t latency_level,
843  					  uint32_t client_id_bitmap,
844  					  bool force_reset);
845  
846  /**
847   * wlan_hdd_get_set_client_info_id() - to update client info table
848   * @adapter: pointer to network adapter
849   * @port_id: port id for which host receives set latency level vendor command
850   * @client_id: client id for a given port id
851   *
852   * Return: QDF_STATUS
853   */
854  QDF_STATUS wlan_hdd_get_set_client_info_id(struct hdd_adapter *adapter,
855  					   uint32_t port_id,
856  					   uint32_t *client_id);
857  
858  /**
859   * wlan_hdd_get_client_id_bitmap() - to calculate client id bitmap
860   * @adapter: pointer to network adapter
861   *
862   * Return: client id bitmap
863   */
864  uint8_t wlan_hdd_get_client_id_bitmap(struct hdd_adapter *adapter);
865  
866  /**
867   * hdd_latency_level_event_handler_cb() - Function to be invoked for low latency
868   * event
869   * @event_data: event data
870   * @vdev_id: vdev id
871   *
872   * Return: none
873   */
874  void
875  hdd_latency_level_event_handler_cb(const struct latency_level_data *event_data,
876  				   uint8_t vdev_id);
877  #else
878  static inline
wlan_hdd_set_wlm_client_latency_level(struct hdd_adapter * adapter,uint32_t port_id,uint16_t latency_level)879  QDF_STATUS wlan_hdd_set_wlm_client_latency_level(struct hdd_adapter *adapter,
880  						 uint32_t port_id,
881  						 uint16_t latency_level)
882  {
883  	return QDF_STATUS_E_FAILURE;
884  }
885  
886  static inline
wlan_hdd_set_wlm_latency_level(struct hdd_adapter * adapter,uint16_t latency_level,uint32_t client_id_bitmap,bool force_reset)887  QDF_STATUS wlan_hdd_set_wlm_latency_level(struct hdd_adapter *adapter,
888  					  uint16_t latency_level,
889  					  uint32_t client_id_bitmap,
890  					  bool force_reset)
891  {
892  	return QDF_STATUS_E_FAILURE;
893  }
894  
wlan_hdd_get_client_id_bitmap(struct hdd_adapter * adapter)895  static inline uint8_t wlan_hdd_get_client_id_bitmap(struct hdd_adapter *adapter)
896  {
897  	return 0;
898  }
899  
900  static inline
wlan_hdd_get_set_client_info_id(struct hdd_adapter * adapter,uint32_t port_id,uint32_t * client_id)901  QDF_STATUS wlan_hdd_get_set_client_info_id(struct hdd_adapter *adapter,
902  					   uint32_t port_id,
903  					   uint32_t *client_id)
904  {
905  	return QDF_STATUS_E_FAILURE;
906  }
907  
hdd_get_multi_client_ll_support(struct hdd_adapter * adapter)908  static inline bool hdd_get_multi_client_ll_support(struct hdd_adapter *adapter)
909  {
910  	return false;
911  }
912  
913  static inline void
hdd_latency_level_event_handler_cb(const void * event_data,uint8_t vdev_id)914  hdd_latency_level_event_handler_cb(const void *event_data,
915  				   uint8_t vdev_id)
916  {
917  }
918  #endif
919  
920  /**
921   * hdd_convert_cfgdot11mode_to_80211mode() - Function to convert cfg dot11 mode
922   *  to 80211 mode
923   * @mode: cfg dot11 mode
924   *
925   * Return: 80211 mode
926   */
927  enum qca_wlan_802_11_mode
928  hdd_convert_cfgdot11mode_to_80211mode(enum csr_cfgdot11mode mode);
929  
930  /**
931   * hdd_convert_phymode_to_80211mode() - Function to convert eCsrPhyMode
932   *					to 80211 mode
933   * @mode: eCsrPhyMode
934   *
935   * Return: 80211 mode
936   */
937  enum qca_wlan_802_11_mode
938  hdd_convert_phymode_to_80211mode(eCsrPhyMode mode);
939  
940  /**
941   * hdd_send_update_owe_info_event - Send update OWE info event
942   * @adapter: Pointer to adapter
943   * @sta_addr: MAC address of peer STA
944   * @owe_ie: OWE IE
945   * @owe_ie_len: Length of OWE IE
946   *
947   * Send update OWE info event to hostapd
948   *
949   * Return: none
950   */
951  #if defined(CFG80211_EXTERNAL_DH_UPDATE_SUPPORT) || \
952  (LINUX_VERSION_CODE > KERNEL_VERSION(5, 2, 0))
953  void hdd_send_update_owe_info_event(struct hdd_adapter *adapter,
954  				    uint8_t sta_addr[],
955  				    uint8_t *owe_ie,
956  				    uint32_t owe_ie_len);
957  #else
hdd_send_update_owe_info_event(struct hdd_adapter * adapter,uint8_t sta_addr[],uint8_t * owe_ie,uint32_t owe_ie_len)958  static inline void hdd_send_update_owe_info_event(struct hdd_adapter *adapter,
959  						  uint8_t sta_addr[],
960  						  uint8_t *owe_ie,
961  						  uint32_t owe_ie_len)
962  {
963  }
964  #endif
965  
966  /**
967   * hdd_set_phy_mode() - set phy mode
968   * @adapter: Handle to hdd_adapter
969   * @vendor_phy_mode: phy mode to set
970   *
971   * Return: 0 on success, negative errno on failure
972   */
973  int hdd_set_phy_mode(struct hdd_adapter *adapter,
974  		     enum qca_wlan_vendor_phy_mode vendor_phy_mode);
975  
976  /**
977   * hdd_set_mac_chan_width() - set channel width
978   * @link_info: Link info in HDD adapter
979   * @chwidth: given channel width
980   * @link_id: mlo link id
981   * @is_restore: is restore
982   *
983   * Return: 0 on success, negative errno on failure
984   */
985  int hdd_set_mac_chan_width(struct wlan_hdd_link_info *link_info,
986  			   enum eSirMacHTChannelWidth chwidth,
987  			   uint8_t link_id, bool is_restore);
988  
989  /**
990   * hdd_is_legacy_connection() - Is adapter connection is legacy
991   * @link_info: Pointer to link_info in hdd_adapter
992   *
993   * Return: true if connection mode is legacy, false otherwise.
994   */
995  bool hdd_is_legacy_connection(struct wlan_hdd_link_info *link_info);
996  
997  struct hdd_hostapd_state;
998  
999  /**
1000   * hdd_softap_deauth_all_sta() - Deauth all sta in the sta list
1001   * @adapter: pointer to adapter structure
1002   * @hapd_state: pointer to hostapd state structure
1003   * @param: pointer to del sta params
1004   *
1005   * Return: QDF_STATUS on success, corresponding QDF failure status on failure
1006   */
1007  QDF_STATUS hdd_softap_deauth_all_sta(struct hdd_adapter *adapter,
1008  				     struct hdd_hostapd_state *hapd_state,
1009  				     struct csr_del_sta_params *param);
1010  
1011  /**
1012   * wlan_hdd_cfg80211_rx_control_port() - notification about a received control
1013   * port frame
1014   *
1015   * @dev: net device pointer
1016   * @ta_addr: transmitter address
1017   * @skb: skbuf with the control port frame
1018   * @unencrypted: Whether the frame is unencrypted
1019   *
1020   * Wrapper function for call to kernel function cfg80211_rx_control_port()
1021   *
1022   * Return: none
1023   */
1024  bool wlan_hdd_cfg80211_rx_control_port(struct net_device *dev,
1025  				       u8 *ta_addr,
1026  				       struct sk_buff *skb,
1027  				       bool unencrypted);
1028  
1029  #ifdef WLAN_FEATURE_DBAM_CONFIG
1030  /**
1031   * hdd_send_dbam_config() - send DBAM config
1032   * @adapter: hdd adapter
1033   * @dbam_mode: dbam mode configuration
1034   *
1035   * Return: 0 on success, negative errno on failure
1036   */
1037  int hdd_send_dbam_config(struct hdd_adapter *adapter,
1038  			 enum coex_dbam_config_mode dbam_mode);
1039  #endif
1040  
1041  #ifdef WLAN_FEATURE_11BE_MLO
1042  /**
1043   * wlan_hdd_send_key_vdev() - api to send vdev keys
1044   * @vdev: vdev pointer
1045   * @key_index: key index value
1046   * @pairwise: pairwise keys
1047   * @cipher_type: cipher type value
1048   *
1049   * Api to send vdev keys for mlo link
1050   *
1051   * Return: none
1052   */
1053  QDF_STATUS wlan_hdd_send_key_vdev(struct wlan_objmgr_vdev *vdev,
1054  				  u8 key_index, bool pairwise,
1055  				  enum wlan_crypto_cipher_type cipher_type);
1056  
1057  /**
1058   * wlan_hdd_mlo_copy_partner_addr_from_mlie  - Copy the Partner link mac
1059   * address from the ML IE
1060   * @vdev: vdev pointer
1061   * @partner_mac: pointer to the mac address to be filled
1062   *
1063   * Return: QDF_STATUS
1064   */
1065  QDF_STATUS
1066  wlan_hdd_mlo_copy_partner_addr_from_mlie(struct wlan_objmgr_vdev *vdev,
1067  					 struct qdf_mac_addr *partner_mac);
1068  #else
1069  static inline
wlan_hdd_send_key_vdev(struct wlan_objmgr_vdev * vdev,u8 key_index,bool pairwise,enum wlan_crypto_cipher_type cipher_type)1070  QDF_STATUS wlan_hdd_send_key_vdev(struct wlan_objmgr_vdev *vdev,
1071  				  u8 key_index, bool pairwise,
1072  				  enum wlan_crypto_cipher_type cipher_type)
1073  {
1074  	return QDF_STATUS_E_NOSUPPORT;
1075  }
1076  
1077  static inline QDF_STATUS
wlan_hdd_mlo_copy_partner_addr_from_mlie(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * partner_mac)1078  wlan_hdd_mlo_copy_partner_addr_from_mlie(struct wlan_objmgr_vdev *vdev,
1079  					 struct qdf_mac_addr *partner_mac)
1080  {
1081  	return QDF_STATUS_E_NOSUPPORT;
1082  }
1083  #endif /* WLAN_FEATURE_11BE_MLO */
1084  
1085  /**
1086   * wlan_key_get_link_vdev() - get vdev per link id
1087   * @adapter: hdd adapter object
1088   * @id: reference dbg id
1089   * @link_id: link id
1090   *
1091   * Return: pointer of wlan_objmgr_vdev or NULL if fail
1092   */
1093  struct wlan_objmgr_vdev *wlan_key_get_link_vdev(struct hdd_adapter *adapter,
1094  						wlan_objmgr_ref_dbgid id,
1095  						int link_id);
1096  /**
1097   * wlan_key_put_link_vdev() - put link vdev reference
1098   * @link_vdev: the pointer to link vdev
1099   * @id: reference dbg id
1100   *
1101   * Return: void
1102   */
1103  void wlan_key_put_link_vdev(struct wlan_objmgr_vdev *link_vdev,
1104  			    wlan_objmgr_ref_dbgid id);
1105  
1106  #if defined(WLAN_FEATURE_11BE_MLO)
1107  /**
1108   * hdd_tid_to_link_map() - to get t2lm info
1109   * @vdev: Pointer to vdev
1110   * @t2lm: T2LM info
1111   * @dev: Pointer to net_device structure
1112   *
1113   * Return: QDF_STATUS
1114   */
1115  QDF_STATUS hdd_tid_to_link_map(struct wlan_objmgr_vdev *vdev,
1116  			       struct wlan_t2lm_info *t2lm,
1117  			       struct net_device *dev);
1118  
1119  /**
1120   * hdd_mlo_dev_t2lm_notify_link_update() - Send update T2LM info event
1121   * @vdev: Pointer to vdev
1122   * @t2lm: T2LM info
1123   *
1124   * Send update T2LM info event to userspace
1125   *
1126   * Return: QDF_STATUS
1127   */
1128  QDF_STATUS hdd_mlo_dev_t2lm_notify_link_update(struct wlan_objmgr_vdev *vdev,
1129  					       struct wlan_t2lm_info *t2lm);
1130  #else
1131  static inline
hdd_mlo_dev_t2lm_notify_link_update(struct wlan_objmgr_vdev * vdev,struct wlan_t2lm_info * t2lm)1132  QDF_STATUS hdd_mlo_dev_t2lm_notify_link_update(struct wlan_objmgr_vdev *vdev,
1133  					       struct wlan_t2lm_info *t2lm)
1134  {
1135  	return QDF_STATUS_SUCCESS;
1136  }
1137  #endif
1138  
1139  /** hdd_set_vdev_phy_mode() - Set vdev phy mode
1140   * @adapter: adapter pointer
1141   * @vendor_phy_mode: vendor phy mode
1142   *
1143   * Return: 0 for success
1144   */
1145  int hdd_set_vdev_phy_mode(struct hdd_adapter *adapter,
1146  			  enum qca_wlan_vendor_phy_mode vendor_phy_mode);
1147  
1148  #if defined(WLAN_FEATURE_11BE_MLO) && \
1149  	defined(CFG80211_SINGLE_NETDEV_MULTI_LINK_SUPPORT)
1150  /**
1151   * wlan_hdd_ml_sap_get_peer  - Get ML SAP peer
1152   * @vdev: vdev pointer
1153   * @peer_mld: Peer MLD address
1154   *
1155   * Return: Peer object
1156   */
1157  struct wlan_objmgr_peer *
1158  wlan_hdd_ml_sap_get_peer(struct wlan_objmgr_vdev *vdev,
1159  			 const uint8_t *peer_mld);
1160  #else
1161  static inline struct wlan_objmgr_peer *
wlan_hdd_ml_sap_get_peer(struct wlan_objmgr_vdev * vdev,const uint8_t * peer_mld)1162  wlan_hdd_ml_sap_get_peer(struct wlan_objmgr_vdev *vdev,
1163  			 const uint8_t *peer_mld)
1164  {
1165  	return NULL;
1166  }
1167  #endif /* WLAN_FEATURE_11BE_MLO && CFG80211_SINGLE_NETDEV_MULTI_LINK_SUPPORT */
1168  
1169  /**
1170   * hdd_vdev_send_sta_keep_alive_interval - Send sta keep alive interval to fw
1171   * @link_info: Link info pointer.
1172   * @hdd_ctx: HDD context pointer
1173   * @keep_alive_interval: STA keep alive interval
1174   *
1175   * Return: 0 on success, negative on failure
1176   */
1177  int hdd_vdev_send_sta_keep_alive_interval(struct wlan_hdd_link_info *link_info,
1178  					  struct hdd_context *hdd_ctx,
1179  					  uint16_t keep_alive_interval);
1180  
1181  /**
1182   * wlan_hdd_save_sta_keep_alive_interval() - Save STA keep alive interval
1183   * @adapter: HDD adapter pointer
1184   * @sta_alive_interval: STA keep alive interval
1185   *
1186   * Return: None.
1187   */
1188  void wlan_hdd_save_sta_keep_alive_interval(struct hdd_adapter *adapter,
1189  					   uint16_t sta_alive_interval);
1190  #endif
1191