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