xref: /wlan-driver/qcacld-3.0/core/hdd/inc/wlan_hdd_assoc.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2013-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name #if !defined(WLAN_HDD_ASSOC_H__)
21*5113495bSYour Name #define WLAN_HDD_ASSOC_H__
22*5113495bSYour Name 
23*5113495bSYour Name /**
24*5113495bSYour Name  * DOC: wlan_hdd_assoc.h
25*5113495bSYour Name  *
26*5113495bSYour Name  */
27*5113495bSYour Name 
28*5113495bSYour Name /* Include files */
29*5113495bSYour Name #include <sme_api.h>
30*5113495bSYour Name #include <wlan_defs.h>
31*5113495bSYour Name #include "cdp_txrx_peer_ops.h"
32*5113495bSYour Name #include <net/cfg80211.h>
33*5113495bSYour Name #include <linux/ieee80211.h>
34*5113495bSYour Name 
35*5113495bSYour Name #define HDD_TIME_STRING_LEN 24
36*5113495bSYour Name 
37*5113495bSYour Name /* Timeout (in ms) for Link to Up before Registering Station */
38*5113495bSYour Name #define ASSOC_LINKUP_TIMEOUT 60
39*5113495bSYour Name 
40*5113495bSYour Name #define INVALID_PEER_IDX -1
41*5113495bSYour Name 
42*5113495bSYour Name /**
43*5113495bSYour Name  * enum eConnectionState - connection state values at HDD
44*5113495bSYour Name  * @eConnectionState_NotConnected: Not associated in Infra
45*5113495bSYour Name  * @eConnectionState_NdiDisconnected: NDI in disconnected state - no peers
46*5113495bSYour Name  * @eConnectionState_NdiConnected: NDI in connected state - at least one peer
47*5113495bSYour Name  */
48*5113495bSYour Name typedef enum {
49*5113495bSYour Name 	eConnectionState_NotConnected,
50*5113495bSYour Name 	eConnectionState_NdiDisconnected,
51*5113495bSYour Name 	eConnectionState_NdiConnected,
52*5113495bSYour Name } eConnectionState;
53*5113495bSYour Name 
54*5113495bSYour Name /**
55*5113495bSYour Name  * enum peer_status - Peer status
56*5113495bSYour Name  * @ePeerConnected: peer connected
57*5113495bSYour Name  * @ePeerDisconnected: peer disconnected
58*5113495bSYour Name  */
59*5113495bSYour Name enum peer_status {
60*5113495bSYour Name 	ePeerConnected = 1,
61*5113495bSYour Name 	ePeerDisconnected
62*5113495bSYour Name };
63*5113495bSYour Name 
64*5113495bSYour Name /**
65*5113495bSYour Name  * struct hdd_conn_flag - connection flags
66*5113495bSYour Name  * @ht_present: ht element present or not
67*5113495bSYour Name  * @vht_present: vht element present or not
68*5113495bSYour Name  * @eht_present: eht element present or not
69*5113495bSYour Name  * @hs20_present: hs20 element present or not
70*5113495bSYour Name  * @ht_op_present: ht operation present or not
71*5113495bSYour Name  * @vht_op_present: vht operation present or not
72*5113495bSYour Name  * @he_present: he operation present or not
73*5113495bSYour Name  * @eht_op_present: eht operation present or not
74*5113495bSYour Name  */
75*5113495bSYour Name struct hdd_conn_flag {
76*5113495bSYour Name 	uint8_t ht_present:1;
77*5113495bSYour Name 	uint8_t vht_present:1;
78*5113495bSYour Name 	uint8_t eht_present:1;
79*5113495bSYour Name 	uint8_t hs20_present:1;
80*5113495bSYour Name 	uint8_t ht_op_present:1;
81*5113495bSYour Name 	uint8_t vht_op_present:1;
82*5113495bSYour Name 	uint8_t he_present:1;
83*5113495bSYour Name 	uint8_t eht_op_present:1;
84*5113495bSYour Name };
85*5113495bSYour Name 
86*5113495bSYour Name /*defines for tx_BF_cap_info */
87*5113495bSYour Name #define TX_BF_CAP_INFO_TX_BF			0x00000001
88*5113495bSYour Name #define TX_BF_CAP_INFO_RX_STAG_RED_SOUNDING	0x00000002
89*5113495bSYour Name #define TX_BF_CAP_INFO_TX_STAG_RED_SOUNDING	0x00000004
90*5113495bSYour Name #define TX_BF_CAP_INFO_RX_ZFL			0x00000008
91*5113495bSYour Name #define TX_BF_CAP_INFO_TX_ZFL			0x00000010
92*5113495bSYour Name #define TX_BF_CAP_INFO_IMP_TX_BF		0x00000020
93*5113495bSYour Name #define TX_BF_CAP_INFO_CALIBRATION		0x000000c0
94*5113495bSYour Name #define TX_BF_CAP_INFO_CALIBRATION_SHIFT	6
95*5113495bSYour Name #define TX_BF_CAP_INFO_EXP_CSIT_BF		0x00000100
96*5113495bSYour Name #define TX_BF_CAP_INFO_EXP_UNCOMP_STEER_MAT	0x00000200
97*5113495bSYour Name #define TX_BF_CAP_INFO_EXP_BF_CSI_FB		0x00001c00
98*5113495bSYour Name #define TX_BF_CAP_INFO_EXP_BF_CSI_FB_SHIFT	10
99*5113495bSYour Name #define TX_BF_CAP_INFO_EXP_UNCMP_STEER_MAT	0x0000e000
100*5113495bSYour Name #define TX_BF_CAP_INFO_EXP_UNCMP_STEER_MAT_SHIFT 13
101*5113495bSYour Name #define TX_BF_CAP_INFO_EXP_CMP_STEER_MAT_FB	0x00070000
102*5113495bSYour Name #define TX_BF_CAP_INFO_EXP_CMP_STEER_MAT_FB_SHIFT 16
103*5113495bSYour Name #define TX_BF_CAP_INFO_CSI_NUM_BF_ANT		0x00180000
104*5113495bSYour Name #define TX_BF_CAP_INFO_CSI_NUM_BF_ANT_SHIFT	18
105*5113495bSYour Name #define TX_BF_CAP_INFO_UNCOMP_STEER_MAT_BF_ANT	0x00600000
106*5113495bSYour Name #define TX_BF_CAP_INFO_UNCOMP_STEER_MAT_BF_ANT_SHIFT 20
107*5113495bSYour Name #define TX_BF_CAP_INFO_COMP_STEER_MAT_BF_ANT	0x01800000
108*5113495bSYour Name #define TX_BF_CAP_INFO_COMP_STEER_MAT_BF_ANT_SHIFT 22
109*5113495bSYour Name #define TX_BF_CAP_INFO_RSVD			0xfe000000
110*5113495bSYour Name 
111*5113495bSYour Name /* defines for antenna selection info */
112*5113495bSYour Name #define ANTENNA_SEL_INFO			0x01
113*5113495bSYour Name #define ANTENNA_SEL_INFO_EXP_CSI_FB_TX		0x02
114*5113495bSYour Name #define ANTENNA_SEL_INFO_ANT_ID_FB_TX		0x04
115*5113495bSYour Name #define ANTENNA_SEL_INFO_EXP_CSI_FB		0x08
116*5113495bSYour Name #define ANTENNA_SEL_INFO_ANT_ID_FB		0x10
117*5113495bSYour Name #define ANTENNA_SEL_INFO_RX_AS			0x20
118*5113495bSYour Name #define ANTENNA_SEL_INFO_TX_SOUNDING_PPDU	0x40
119*5113495bSYour Name #define ANTENNA_SEL_INFO_RSVD			0x80
120*5113495bSYour Name 
121*5113495bSYour Name /**
122*5113495bSYour Name  * struct hdd_connection_info - structure to store connection information
123*5113495bSYour Name  * @conn_state: connection state of the NIC
124*5113495bSYour Name  * @bssid: BSSID
125*5113495bSYour Name  * @ssid: SSID Info
126*5113495bSYour Name  * @peer_macaddr:Peer Mac Address of the IBSS Stations
127*5113495bSYour Name  * @auth_type: Auth Type
128*5113495bSYour Name  * @uc_encrypt_type: Unicast Encryption Type
129*5113495bSYour Name  * @is_authenticated: Remembers authenticated state
130*5113495bSYour Name  * @dot11mode: dot11mode
131*5113495bSYour Name  * @proxy_arp_service: proxy arp service
132*5113495bSYour Name  * @ptk_installed: ptk installed state
133*5113495bSYour Name  * @gtk_installed: gtk installed state
134*5113495bSYour Name  * @nss: number of spatial streams negotiated
135*5113495bSYour Name  * @rate_flags: rate flags for current connection
136*5113495bSYour Name  * @chan_freq: channel frequency
137*5113495bSYour Name  * @txrate: txrate structure holds nss & datarate info
138*5113495bSYour Name  * @rxrate: rx rate info
139*5113495bSYour Name  * @noise: holds noise information
140*5113495bSYour Name  * @ht_caps: holds ht capabilities info
141*5113495bSYour Name  * @vht_caps: holds vht capabilities info
142*5113495bSYour Name  * @conn_flag: flag conn info params is present or not
143*5113495bSYour Name  * @hs20vendor_ie: holds passpoint/hs20 info
144*5113495bSYour Name  * @ht_operation: HT operation info
145*5113495bSYour Name  * @vht_operation: VHT operation info
146*5113495bSYour Name  * @he_operation: HE operation info
147*5113495bSYour Name  * @he_oper_len: length of @he_operation
148*5113495bSYour Name  * @roam_count: roaming counter
149*5113495bSYour Name  * @signal: holds rssi info
150*5113495bSYour Name  * @assoc_status_code: holds assoc fail reason
151*5113495bSYour Name  * @congestion: holds congestion percentage
152*5113495bSYour Name  * @last_ssid: holds last ssid
153*5113495bSYour Name  * @last_auth_type: holds last auth type
154*5113495bSYour Name  * @auth_time: last authentication established time
155*5113495bSYour Name  * @connect_time: last association established time
156*5113495bSYour Name  * @ch_width: channel width of operating channel
157*5113495bSYour Name  * @max_tx_bitrate: Max tx bitrate supported by the AP
158*5113495bSYour Name  * to which currently sta is connected.
159*5113495bSYour Name  * @prev_ap_bcn_ie: ap beacon IE information to which sta is currently connected
160*5113495bSYour Name  * @ieee_link_id: AP Link Id valid for MLO connection
161*5113495bSYour Name  * @eht_operation: EHT operation info
162*5113495bSYour Name  * @eht_oper_len: length of @eht_operation
163*5113495bSYour Name  */
164*5113495bSYour Name struct hdd_connection_info {
165*5113495bSYour Name 	eConnectionState conn_state;
166*5113495bSYour Name 	struct qdf_mac_addr bssid;
167*5113495bSYour Name 	tCsrSSIDInfo ssid;
168*5113495bSYour Name 	struct qdf_mac_addr peer_macaddr[MAX_PEERS];
169*5113495bSYour Name 	enum csr_akm_type auth_type;
170*5113495bSYour Name 	eCsrEncryptionType uc_encrypt_type;
171*5113495bSYour Name 	uint8_t is_authenticated;
172*5113495bSYour Name 	uint32_t dot11mode;
173*5113495bSYour Name 	uint8_t proxy_arp_service;
174*5113495bSYour Name 	bool ptk_installed;
175*5113495bSYour Name 	bool gtk_installed;
176*5113495bSYour Name 	uint8_t nss;
177*5113495bSYour Name 	uint32_t rate_flags;
178*5113495bSYour Name 	uint32_t chan_freq;
179*5113495bSYour Name 	struct rate_info txrate;
180*5113495bSYour Name 	struct rate_info rxrate;
181*5113495bSYour Name 	int8_t noise;
182*5113495bSYour Name 	struct ieee80211_ht_cap ht_caps;
183*5113495bSYour Name 	struct ieee80211_vht_cap vht_caps;
184*5113495bSYour Name 	struct hdd_conn_flag conn_flag;
185*5113495bSYour Name 	tDot11fIEhs20vendor_ie hs20vendor_ie;
186*5113495bSYour Name 	struct ieee80211_ht_operation ht_operation;
187*5113495bSYour Name 	struct ieee80211_vht_operation vht_operation;
188*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)) \
189*5113495bSYour Name      && defined(WLAN_FEATURE_11AX)
190*5113495bSYour Name 	struct ieee80211_he_operation *he_operation;
191*5113495bSYour Name 	uint32_t he_oper_len;
192*5113495bSYour Name #endif
193*5113495bSYour Name 	uint32_t roam_count;
194*5113495bSYour Name 	int8_t signal;
195*5113495bSYour Name 	int32_t assoc_status_code;
196*5113495bSYour Name 	tCsrSSIDInfo last_ssid;
197*5113495bSYour Name 	enum csr_akm_type last_auth_type;
198*5113495bSYour Name 	char auth_time[HDD_TIME_STRING_LEN];
199*5113495bSYour Name 	char connect_time[HDD_TIME_STRING_LEN];
200*5113495bSYour Name 	enum phy_ch_width ch_width;
201*5113495bSYour Name 	struct rate_info max_tx_bitrate;
202*5113495bSYour Name 	struct element_info prev_ap_bcn_ie;
203*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
204*5113495bSYour Name 	int32_t ieee_link_id;
205*5113495bSYour Name #endif
206*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)) && \
207*5113495bSYour Name 	defined(WLAN_FEATURE_11BE)
208*5113495bSYour Name 	struct ieee80211_eht_operation eht_operation;
209*5113495bSYour Name 	uint32_t eht_oper_len;
210*5113495bSYour Name #endif
211*5113495bSYour Name };
212*5113495bSYour Name 
213*5113495bSYour Name /* Forward declarations */
214*5113495bSYour Name struct hdd_adapter;
215*5113495bSYour Name struct hdd_station_ctx;
216*5113495bSYour Name struct hdd_context;
217*5113495bSYour Name struct wlan_hdd_link_info;
218*5113495bSYour Name 
219*5113495bSYour Name /*
220*5113495bSYour Name  * hdd_is_fils_connection: API to determine if connection is FILS
221*5113495bSYour Name  * @hdd_ctx: hdd context
222*5113495bSYour Name  * @adapter: hdd adapter
223*5113495bSYour Name  *
224*5113495bSYour Name  * Return: true if fils connection else false
225*5113495bSYour Name  */
226*5113495bSYour Name bool hdd_is_fils_connection(struct hdd_context *hdd_ctx,
227*5113495bSYour Name 			    struct hdd_adapter *adapter);
228*5113495bSYour Name 
229*5113495bSYour Name /**
230*5113495bSYour Name  * hdd_conn_set_authenticated() - set authentication state
231*5113495bSYour Name  * @link_info: Link info pointer in HDD adapter
232*5113495bSYour Name  * @auth_state: authentication state
233*5113495bSYour Name  *
234*5113495bSYour Name  * This function updates the global HDD station context
235*5113495bSYour Name  * authentication state. And to start auto powersave timer
236*5113495bSYour Name  * if ptk installed case and open security case.
237*5113495bSYour Name  *
238*5113495bSYour Name  * Return: none
239*5113495bSYour Name  */
240*5113495bSYour Name void hdd_conn_set_authenticated(struct wlan_hdd_link_info *link_info,
241*5113495bSYour Name 				uint8_t auth_state);
242*5113495bSYour Name 
243*5113495bSYour Name /**
244*5113495bSYour Name  * hdd_conn_set_connection_state() - set connection state
245*5113495bSYour Name  * @adapter: pointer to the adapter
246*5113495bSYour Name  * @conn_state: connection state
247*5113495bSYour Name  *
248*5113495bSYour Name  * This function updates the global HDD station context connection state.
249*5113495bSYour Name  *
250*5113495bSYour Name  * Return: none
251*5113495bSYour Name  */
252*5113495bSYour Name void hdd_conn_set_connection_state(struct hdd_adapter *adapter,
253*5113495bSYour Name 				   eConnectionState conn_state);
254*5113495bSYour Name 
255*5113495bSYour Name /**
256*5113495bSYour Name  * hdd_conn_get_connected_band() - get current connection radio band
257*5113495bSYour Name  * @link_info: pointer to the link_info structure
258*5113495bSYour Name  *
259*5113495bSYour Name  * Return: BAND_2G or BAND_5G based on current AP connection
260*5113495bSYour Name  *      BAND_ALL if not connected
261*5113495bSYour Name  */
262*5113495bSYour Name enum band_info
263*5113495bSYour Name hdd_conn_get_connected_band(struct wlan_hdd_link_info *link_info);
264*5113495bSYour Name 
265*5113495bSYour Name /**
266*5113495bSYour Name  * hdd_get_sta_connection_in_progress() - get STA for which connection
267*5113495bSYour Name  *                                        is in progress
268*5113495bSYour Name  * @hdd_ctx: hdd context
269*5113495bSYour Name  *
270*5113495bSYour Name  * Return: Link info pointer in adapter for which connection is in progress
271*5113495bSYour Name  */
272*5113495bSYour Name struct wlan_hdd_link_info *
273*5113495bSYour Name hdd_get_sta_connection_in_progress(struct hdd_context *hdd_ctx);
274*5113495bSYour Name 
275*5113495bSYour Name /**
276*5113495bSYour Name  * hdd_abort_ongoing_sta_connection() - Disconnect the sta for which the
277*5113495bSYour Name  * connection is in progress.
278*5113495bSYour Name  *
279*5113495bSYour Name  * @hdd_ctx: hdd context
280*5113495bSYour Name  *
281*5113495bSYour Name  * Return: none
282*5113495bSYour Name  */
283*5113495bSYour Name void hdd_abort_ongoing_sta_connection(struct hdd_context *hdd_ctx);
284*5113495bSYour Name 
285*5113495bSYour Name /**
286*5113495bSYour Name  * hdd_abort_ongoing_sta_sae_connection() - Disconnect the sta for which the
287*5113495bSYour Name  * sae connection is in progress.
288*5113495bSYour Name  *
289*5113495bSYour Name  * @hdd_ctx: hdd context
290*5113495bSYour Name  *
291*5113495bSYour Name  * Return: none
292*5113495bSYour Name  */
293*5113495bSYour Name void hdd_abort_ongoing_sta_sae_connection(struct hdd_context *hdd_ctx);
294*5113495bSYour Name 
295*5113495bSYour Name /**
296*5113495bSYour Name  * hdd_is_any_sta_connected() - check if any sta in connected state
297*5113495bSYour Name  * @hdd_ctx: hdd context
298*5113495bSYour Name  *
299*5113495bSYour Name  * Return: true if any connected sta
300*5113495bSYour Name  */
301*5113495bSYour Name bool hdd_is_any_sta_connected(struct hdd_context *hdd_ctx);
302*5113495bSYour Name 
303*5113495bSYour Name /**
304*5113495bSYour Name  * hdd_get_first_connected_sta_vdev_id() - check if any sta in connected state
305*5113495bSYour Name  * and exteact the vdev id of connected STA.
306*5113495bSYour Name  * @hdd_ctx: hdd context
307*5113495bSYour Name  * @vdev_id: pointer to vdev id
308*5113495bSYour Name  *
309*5113495bSYour Name  * Return: QDF_STATUS enumeration
310*5113495bSYour Name  */
311*5113495bSYour Name QDF_STATUS hdd_get_first_connected_sta_vdev_id(struct hdd_context *hdd_ctx,
312*5113495bSYour Name 					       uint32_t *vdev_id);
313*5113495bSYour Name 
314*5113495bSYour Name /**
315*5113495bSYour Name  * hdd_sme_roam_callback() - hdd sme roam callback
316*5113495bSYour Name  * @context: pointer to link info context in HDD adapter
317*5113495bSYour Name  * @roam_info: pointer to roam info
318*5113495bSYour Name  * @roam_status: roam status
319*5113495bSYour Name  * @roam_result: roam result
320*5113495bSYour Name  *
321*5113495bSYour Name  * Return: QDF_STATUS enumeration
322*5113495bSYour Name  */
323*5113495bSYour Name QDF_STATUS hdd_sme_roam_callback(void *context,
324*5113495bSYour Name 				 struct csr_roam_info *roam_info,
325*5113495bSYour Name 				 eRoamCmdStatus roam_status,
326*5113495bSYour Name 				 eCsrRoamResult roam_result);
327*5113495bSYour Name 
328*5113495bSYour Name #ifdef FEATURE_WLAN_TDLS
329*5113495bSYour Name /**
330*5113495bSYour Name  * hdd_roam_register_tdlssta() - register new TDLS station
331*5113495bSYour Name  * @adapter: pointer to adapter
332*5113495bSYour Name  * @peerMac: pointer to peer MAC address
333*5113495bSYour Name  * @qos: Quality of service
334*5113495bSYour Name  *
335*5113495bSYour Name  * Construct the txrx_desc and register the new STA with the Data Plane.
336*5113495bSYour Name  * This is called as part of ADD_STA in the TDLS setup.
337*5113495bSYour Name  *
338*5113495bSYour Name  * Return: QDF_STATUS enumeration
339*5113495bSYour Name  */
340*5113495bSYour Name QDF_STATUS hdd_roam_register_tdlssta(struct hdd_adapter *adapter,
341*5113495bSYour Name 				     const uint8_t *peerMac, uint8_t qos);
342*5113495bSYour Name #endif
343*5113495bSYour Name 
344*5113495bSYour Name #ifdef FEATURE_WLAN_ESE
345*5113495bSYour Name /**
346*5113495bSYour Name  * hdd_indicate_ese_bcn_report_no_results() - beacon report no scan results
347*5113495bSYour Name  * @adapter: pointer to adapter
348*5113495bSYour Name  * @measurementToken: measurement token
349*5113495bSYour Name  * @flag: flag
350*5113495bSYour Name  * @numBss: number of bss
351*5113495bSYour Name  *
352*5113495bSYour Name  * If the measurement is none and no scan results found,
353*5113495bSYour Name  * indicate the supplicant about measurement done.
354*5113495bSYour Name  *
355*5113495bSYour Name  * Return: none
356*5113495bSYour Name  */
357*5113495bSYour Name void
358*5113495bSYour Name hdd_indicate_ese_bcn_report_no_results(const struct hdd_adapter *adapter,
359*5113495bSYour Name 					    const uint16_t measurementToken,
360*5113495bSYour Name 					    const bool flag,
361*5113495bSYour Name 					    const uint8_t numBss);
362*5113495bSYour Name #endif /* FEATURE_WLAN_ESE */
363*5113495bSYour Name 
364*5113495bSYour Name /**
365*5113495bSYour Name  * hdd_change_peer_state() - change peer state
366*5113495bSYour Name  * @link_info: Link info pointer of VDEV in adapter
367*5113495bSYour Name  * @peer_mac_addr: Peer MAC address
368*5113495bSYour Name  * @sta_state: peer state
369*5113495bSYour Name  *
370*5113495bSYour Name  * Return: QDF status
371*5113495bSYour Name  */
372*5113495bSYour Name QDF_STATUS hdd_change_peer_state(struct wlan_hdd_link_info *link_info,
373*5113495bSYour Name 				 uint8_t *peer_mac_addr,
374*5113495bSYour Name 				 enum ol_txrx_peer_state sta_state);
375*5113495bSYour Name 
376*5113495bSYour Name /**
377*5113495bSYour Name  * hdd_update_dp_vdev_flags() - update datapath vdev flags
378*5113495bSYour Name  * @cbk_data: callback data
379*5113495bSYour Name  * @vdev_id: virtual interface id
380*5113495bSYour Name  * @vdev_param: vdev parameter
381*5113495bSYour Name  * @is_link_up: link state up or down
382*5113495bSYour Name  *
383*5113495bSYour Name  * Return: QDF status
384*5113495bSYour Name  */
385*5113495bSYour Name QDF_STATUS hdd_update_dp_vdev_flags(void *cbk_data,
386*5113495bSYour Name 				    uint8_t vdev_id,
387*5113495bSYour Name 				    uint32_t vdev_param,
388*5113495bSYour Name 				    bool is_link_up);
389*5113495bSYour Name 
390*5113495bSYour Name /**
391*5113495bSYour Name  * hdd_roam_register_sta() - register station
392*5113495bSYour Name  * @link_info: Link info pointer in HDD adapter
393*5113495bSYour Name  * @bssid: bssid of the connection
394*5113495bSYour Name  * @is_auth_required: is upper layer authenticatoin required
395*5113495bSYour Name  *
396*5113495bSYour Name  * Return: QDF_STATUS enumeration
397*5113495bSYour Name  */
398*5113495bSYour Name QDF_STATUS hdd_roam_register_sta(struct wlan_hdd_link_info *link_info,
399*5113495bSYour Name 				 struct qdf_mac_addr *bssid,
400*5113495bSYour Name 				 bool is_auth_required);
401*5113495bSYour Name 
402*5113495bSYour Name /**
403*5113495bSYour Name  * hdd_save_peer() - Save peer MAC address in adapter peer table.
404*5113495bSYour Name  * @sta_ctx: pointer to hdd station context
405*5113495bSYour Name  * @peer_mac_addr: mac address of new peer
406*5113495bSYour Name  *
407*5113495bSYour Name  * This information is passed to iwconfig later. The peer that joined
408*5113495bSYour Name  * last is passed as information to iwconfig.
409*5113495bSYour Name  *
410*5113495bSYour Name  * Return: true if success, false otherwise
411*5113495bSYour Name  */
412*5113495bSYour Name bool hdd_save_peer(struct hdd_station_ctx *sta_ctx,
413*5113495bSYour Name 		   struct qdf_mac_addr *peer_mac_addr);
414*5113495bSYour Name 
415*5113495bSYour Name /**
416*5113495bSYour Name  * hdd_delete_peer() - removes peer from hdd station context peer table
417*5113495bSYour Name  * @sta_ctx: pointer to hdd station context
418*5113495bSYour Name  * @peer_mac_addr: mac address of peer to be deleted
419*5113495bSYour Name  *
420*5113495bSYour Name  * Return: None
421*5113495bSYour Name  */
422*5113495bSYour Name void hdd_delete_peer(struct hdd_station_ctx *sta_ctx,
423*5113495bSYour Name 		     struct qdf_mac_addr *peer_mac_addr);
424*5113495bSYour Name 
425*5113495bSYour Name /**
426*5113495bSYour Name  * hdd_copy_ht_caps()- copy ht caps info from roam ht caps
427*5113495bSYour Name  * info to source ht_cap info of type ieee80211_ht_cap.
428*5113495bSYour Name  * @hdd_ht_cap: pointer to Source ht_cap info of type ieee80211_ht_cap
429*5113495bSYour Name  * @roam_ht_cap: pointer to roam ht_caps info
430*5113495bSYour Name  *
431*5113495bSYour Name  * Return: None
432*5113495bSYour Name  */
433*5113495bSYour Name 
434*5113495bSYour Name void hdd_copy_ht_caps(struct ieee80211_ht_cap *hdd_ht_cap,
435*5113495bSYour Name 		      tDot11fIEHTCaps *roam_ht_cap);
436*5113495bSYour Name 
437*5113495bSYour Name /**
438*5113495bSYour Name  * hdd_add_beacon_filter() - add beacon filter
439*5113495bSYour Name  * @adapter: Pointer to the hdd adapter
440*5113495bSYour Name  *
441*5113495bSYour Name  * Return: 0 on success and errno on failure
442*5113495bSYour Name  */
443*5113495bSYour Name int hdd_add_beacon_filter(struct hdd_adapter *adapter);
444*5113495bSYour Name 
445*5113495bSYour Name /**
446*5113495bSYour Name  * hdd_copy_vht_caps()- copy vht caps info from roam vht caps
447*5113495bSYour Name  * info to source vht_cap info of type ieee80211_vht_cap.
448*5113495bSYour Name  * @hdd_vht_cap: pointer to Source vht_cap info of type ieee80211_vht_cap
449*5113495bSYour Name  * @roam_vht_cap: pointer to roam vht_caps info
450*5113495bSYour Name  *
451*5113495bSYour Name  * Return: None
452*5113495bSYour Name  */
453*5113495bSYour Name void hdd_copy_vht_caps(struct ieee80211_vht_cap *hdd_vht_cap,
454*5113495bSYour Name 		       tDot11fIEVHTCaps *roam_vht_cap);
455*5113495bSYour Name 
456*5113495bSYour Name /**
457*5113495bSYour Name  * hdd_roam_profile_init() - initialize adapter roam profile
458*5113495bSYour Name  * @link_info: Link info pointer in HDD adapter
459*5113495bSYour Name  *
460*5113495bSYour Name  * This function initializes the roam profile that is embedded within
461*5113495bSYour Name  * the adapter.
462*5113495bSYour Name  *
463*5113495bSYour Name  * Return: void
464*5113495bSYour Name  */
465*5113495bSYour Name void hdd_roam_profile_init(struct wlan_hdd_link_info *link_info);
466*5113495bSYour Name 
467*5113495bSYour Name /**
468*5113495bSYour Name  * hdd_any_valid_peer_present() - Check if any valid peer is present
469*5113495bSYour Name  * @link_info: Pointer of link_info in adapter struct
470*5113495bSYour Name  *
471*5113495bSYour Name  * Check if there is any peer present with non-zero mac address other than
472*5113495bSYour Name  * broadcast address.
473*5113495bSYour Name  *
474*5113495bSYour Name  * Return: True if there is any valid peer present
475*5113495bSYour Name  */
476*5113495bSYour Name bool hdd_any_valid_peer_present(struct wlan_hdd_link_info *link_info);
477*5113495bSYour Name 
478*5113495bSYour Name /**
479*5113495bSYour Name  * hdd_cm_register_cb() - Sets legacy callbacks to osif
480*5113495bSYour Name  *
481*5113495bSYour Name  * API to set legacy callbacks to osif
482*5113495bSYour Name  * Context: Any context.
483*5113495bSYour Name  *
484*5113495bSYour Name  * Return: QDF_STATUS
485*5113495bSYour Name  */
486*5113495bSYour Name QDF_STATUS hdd_cm_register_cb(void);
487*5113495bSYour Name 
488*5113495bSYour Name /**
489*5113495bSYour Name  * hdd_cm_unregister_cb - Resets legacy callbacks to osif
490*5113495bSYour Name  *
491*5113495bSYour Name  * API to reset legacy callbacks to osif
492*5113495bSYour Name  * Context: Any context.
493*5113495bSYour Name  *
494*5113495bSYour Name  * Return: QDF_STATUS
495*5113495bSYour Name  */
496*5113495bSYour Name void hdd_cm_unregister_cb(void);
497*5113495bSYour Name 
498*5113495bSYour Name /**
499*5113495bSYour Name  * hdd_conn_remove_connect_info() - remove connection info
500*5113495bSYour Name  * @sta_ctx: pointer to global HDD station context
501*5113495bSYour Name  *
502*5113495bSYour Name  * Return: none
503*5113495bSYour Name  */
504*5113495bSYour Name void hdd_conn_remove_connect_info(struct hdd_station_ctx *sta_ctx);
505*5113495bSYour Name 
506*5113495bSYour Name /**
507*5113495bSYour Name  * hdd_clear_roam_profile_ie() - Clear Roam Profile IEs
508*5113495bSYour Name  * @adapter: adapter who's IEs are to be cleared
509*5113495bSYour Name  *
510*5113495bSYour Name  * Return: None
511*5113495bSYour Name  */
512*5113495bSYour Name void hdd_clear_roam_profile_ie(struct hdd_adapter *adapter);
513*5113495bSYour Name 
514*5113495bSYour Name /**
515*5113495bSYour Name  * hdd_remove_beacon_filter() - remove beacon filter
516*5113495bSYour Name  * @adapter: Pointer to the hdd adapter
517*5113495bSYour Name  *
518*5113495bSYour Name  * Return: 0 on success and errno on failure
519*5113495bSYour Name  */
520*5113495bSYour Name int hdd_remove_beacon_filter(struct hdd_adapter *adapter);
521*5113495bSYour Name 
522*5113495bSYour Name /**
523*5113495bSYour Name  * hdd_copy_ht_operation()- copy HT operation element to
524*5113495bSYour Name  * hdd station context.
525*5113495bSYour Name  * @hdd_sta_ctx: pointer to hdd station context
526*5113495bSYour Name  * @ht_ops: pointer to ht operation
527*5113495bSYour Name  *
528*5113495bSYour Name  * Return: None
529*5113495bSYour Name  */
530*5113495bSYour Name void hdd_copy_ht_operation(struct hdd_station_ctx *hdd_sta_ctx,
531*5113495bSYour Name 			   tDot11fIEHTInfo *ht_ops);
532*5113495bSYour Name 
533*5113495bSYour Name /**
534*5113495bSYour Name  * hdd_copy_vht_operation()- copy VHT operations element to
535*5113495bSYour Name  * hdd station context.
536*5113495bSYour Name  * @hdd_sta_ctx: pointer to hdd station context
537*5113495bSYour Name  * @vht_ops: pointer to vht operation
538*5113495bSYour Name  *
539*5113495bSYour Name  * Return: None
540*5113495bSYour Name  */
541*5113495bSYour Name void hdd_copy_vht_operation(struct hdd_station_ctx *hdd_sta_ctx,
542*5113495bSYour Name 			    tDot11fIEVHTOperation *vht_ops);
543*5113495bSYour Name 
544*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)) && \
545*5113495bSYour Name 	defined(WLAN_FEATURE_11BE)
546*5113495bSYour Name /**
547*5113495bSYour Name  * hdd_copy_eht_operation()- copy EHT operations element to
548*5113495bSYour Name  * hdd station context.
549*5113495bSYour Name  * @hdd_sta_ctx: pointer to hdd station context
550*5113495bSYour Name  * @eht_ops: pointer to eht operation
551*5113495bSYour Name  *
552*5113495bSYour Name  * Return: None
553*5113495bSYour Name  */
554*5113495bSYour Name void hdd_copy_eht_operation(struct hdd_station_ctx *hdd_sta_ctx,
555*5113495bSYour Name 			    tDot11fIEeht_op *eht_ops);
556*5113495bSYour Name 
557*5113495bSYour Name #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0)) && \
558*5113495bSYour Name 	defined(WLAN_FEATURE_11BE)
559*5113495bSYour Name void hdd_copy_eht_operation(struct hdd_station_ctx *hdd_sta_ctx,
560*5113495bSYour Name 			    tDot11fIEeht_op *eht_ops);
561*5113495bSYour Name #else
hdd_copy_eht_operation(struct hdd_station_ctx * hdd_sta_ctx,tDot11fIEeht_op * eht_ops)562*5113495bSYour Name static inline void hdd_copy_eht_operation(struct hdd_station_ctx *hdd_sta_ctx,
563*5113495bSYour Name 					  tDot11fIEeht_op *eht_ops)
564*5113495bSYour Name {
565*5113495bSYour Name }
566*5113495bSYour Name #endif
567*5113495bSYour Name 
568*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)) && \
569*5113495bSYour Name      defined(WLAN_FEATURE_11AX)
570*5113495bSYour Name /**
571*5113495bSYour Name  * hdd_copy_he_operation()- copy HE operations element to
572*5113495bSYour Name  * hdd station context.
573*5113495bSYour Name  * @hdd_sta_ctx: pointer to hdd station context
574*5113495bSYour Name  * @he_operation: pointer to he operation
575*5113495bSYour Name  *
576*5113495bSYour Name  * Return: None
577*5113495bSYour Name  */
578*5113495bSYour Name void hdd_copy_he_operation(struct hdd_station_ctx *hdd_sta_ctx,
579*5113495bSYour Name 			   tDot11fIEhe_op *he_operation);
580*5113495bSYour Name #else
hdd_copy_he_operation(struct hdd_station_ctx * hdd_sta_ctx,tDot11fIEhe_op * he_operation)581*5113495bSYour Name static inline void hdd_copy_he_operation(struct hdd_station_ctx *hdd_sta_ctx,
582*5113495bSYour Name 					 tDot11fIEhe_op *he_operation)
583*5113495bSYour Name {
584*5113495bSYour Name }
585*5113495bSYour Name #endif
586*5113495bSYour Name 
587*5113495bSYour Name /**
588*5113495bSYour Name  * hdd_is_roam_sync_in_progress()- Check if roam offloaded
589*5113495bSYour Name  * @hdd_ctx: Pointer to hdd context
590*5113495bSYour Name  * @vdev_id: Vdev id
591*5113495bSYour Name  *
592*5113495bSYour Name  * Return: roam sync status if roaming offloaded else false
593*5113495bSYour Name  */
594*5113495bSYour Name bool hdd_is_roam_sync_in_progress(struct hdd_context *hdd_ctx, uint8_t vdev_id);
595*5113495bSYour Name 
596*5113495bSYour Name #ifdef WLAN_FEATURE_HOST_ROAM
597*5113495bSYour Name /**
598*5113495bSYour Name  * wlan_hdd_ft_set_key_delay() - hdd set key delayed for FT mode
599*5113495bSYour Name  * @vdev: vdev
600*5113495bSYour Name  *
601*5113495bSYour Name  * Return: void
602*5113495bSYour Name  */
603*5113495bSYour Name void wlan_hdd_ft_set_key_delay(struct wlan_objmgr_vdev *vdev);
604*5113495bSYour Name #else
605*5113495bSYour Name static inline void
wlan_hdd_ft_set_key_delay(struct wlan_objmgr_vdev * vdev)606*5113495bSYour Name wlan_hdd_ft_set_key_delay(struct wlan_objmgr_vdev *vdev)
607*5113495bSYour Name {
608*5113495bSYour Name }
609*5113495bSYour Name #endif
610*5113495bSYour Name 
611*5113495bSYour Name #ifdef FEATURE_WLAN_WAPI
612*5113495bSYour Name /**
613*5113495bSYour Name  * hdd_translate_wapi_to_csr_auth_type() - Translate WAPI to CSR auth type
614*5113495bSYour Name  * @auth_suite: auth suite
615*5113495bSYour Name  *
616*5113495bSYour Name  * Return: enum csr_akm_type enumeration
617*5113495bSYour Name  */
618*5113495bSYour Name enum csr_akm_type hdd_translate_wapi_to_csr_auth_type(uint8_t auth_suite[4]);
619*5113495bSYour Name 
620*5113495bSYour Name /**
621*5113495bSYour Name  * hdd_translate_wapi_to_csr_encryption_type() -
622*5113495bSYour Name  *	Translate WAPI to CSR encryption type
623*5113495bSYour Name  * @cipher_suite: cipher suite
624*5113495bSYour Name  *
625*5113495bSYour Name  * Return: eCsrEncryptionType enumeration
626*5113495bSYour Name  */
627*5113495bSYour Name eCsrEncryptionType
628*5113495bSYour Name hdd_translate_wapi_to_csr_encryption_type(uint8_t cipher_suite[4]);
629*5113495bSYour Name #else
hdd_translate_wapi_to_csr_auth_type(uint8_t auth_suite[4])630*5113495bSYour Name enum csr_akm_type hdd_translate_wapi_to_csr_auth_type(uint8_t auth_suite[4])
631*5113495bSYour Name {
632*5113495bSYour Name 	return eCSR_AUTH_TYPE_UNKNOWN;
633*5113495bSYour Name }
634*5113495bSYour Name 
635*5113495bSYour Name eCsrEncryptionType
hdd_translate_wapi_to_csr_encryption_type(uint8_t cipher_suite[4])636*5113495bSYour Name hdd_translate_wapi_to_csr_encryption_type(uint8_t cipher_suite[4])
637*5113495bSYour Name {
638*5113495bSYour Name 	return eCSR_AUTH_TYPE_UNKNOWN;
639*5113495bSYour Name }
640*5113495bSYour Name #endif
641*5113495bSYour Name 
642*5113495bSYour Name /**
643*5113495bSYour Name  * hdd_convert_ch_width_to_cdp_peer_bw() - Convert ch_width to DP format
644*5113495bSYour Name  * @ch_width: ch_width
645*5113495bSYour Name  *
646*5113495bSYour Name  * Return: cdp_peer_bw enumeration
647*5113495bSYour Name  */
648*5113495bSYour Name enum cdp_peer_bw
649*5113495bSYour Name hdd_convert_ch_width_to_cdp_peer_bw(enum phy_ch_width ch_width);
650*5113495bSYour Name 
651*5113495bSYour Name #endif
652