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