xref: /wlan-driver/qca-wifi-host-cmn/os_if/linux/mlme/src/osif_cm_rsp.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2012-2015,2020-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 any
6*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
7*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
8*5113495bSYour Name  *
9*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5113495bSYour Name  */
17*5113495bSYour Name 
18*5113495bSYour Name /**
19*5113495bSYour Name  * DOC: osif_cm_rsp.h
20*5113495bSYour Name  *
21*5113495bSYour Name  * This header file maintains declarations of connect, disconnect, roam
22*5113495bSYour Name  * response apis.
23*5113495bSYour Name  */
24*5113495bSYour Name 
25*5113495bSYour Name #ifndef __OSIF_CM_RSP_H
26*5113495bSYour Name #define __OSIF_CM_RSP_H
27*5113495bSYour Name 
28*5113495bSYour Name #include "wlan_objmgr_vdev_obj.h"
29*5113495bSYour Name #include "wlan_cm_public_struct.h"
30*5113495bSYour Name 
31*5113495bSYour Name /**
32*5113495bSYour Name  * osif_disconnect_handler() - Indicate disconnect to userspace
33*5113495bSYour Name  * @vdev: vdev pointer
34*5113495bSYour Name  * @rsp: Disconnect response from connection manager
35*5113495bSYour Name  *
36*5113495bSYour Name  * This function indicates disconnect to the kernel which thus indicates
37*5113495bSYour Name  * to the userspace.
38*5113495bSYour Name  *
39*5113495bSYour Name  * Context: Any context
40*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS on successful indication to kernel,
41*5113495bSYour Name  * else QDF_STATUS with failure reason
42*5113495bSYour Name  */
43*5113495bSYour Name QDF_STATUS osif_disconnect_handler(struct wlan_objmgr_vdev *vdev,
44*5113495bSYour Name 				   struct wlan_cm_discon_rsp *rsp);
45*5113495bSYour Name 
46*5113495bSYour Name /**
47*5113495bSYour Name  * osif_cm_get_assoc_req_ie_data() - Get the assoc req IE offset and length
48*5113495bSYour Name  * if valid assoc req is present
49*5113495bSYour Name  * @assoc_req: assoc req info
50*5113495bSYour Name  * @ie_data_len: IE data length to be calculated
51*5113495bSYour Name  * @ie_data_ptr: IE data pointer to be calculated
52*5113495bSYour Name  *
53*5113495bSYour Name  * Return: void
54*5113495bSYour Name  */
55*5113495bSYour Name void osif_cm_get_assoc_req_ie_data(struct element_info *assoc_req,
56*5113495bSYour Name 				   size_t *ie_data_len,
57*5113495bSYour Name 				   const uint8_t **ie_data_ptr);
58*5113495bSYour Name 
59*5113495bSYour Name /**
60*5113495bSYour Name  * osif_cm_get_assoc_rsp_ie_data() - Get the assoc resp IE offset and length
61*5113495bSYour Name  * if valid assoc req is present
62*5113495bSYour Name  * @assoc_rsp: assoc response info
63*5113495bSYour Name  * @ie_data_len: IE data length to be calculated
64*5113495bSYour Name  * @ie_data_ptr: IE data pointer to be calculated
65*5113495bSYour Name  *
66*5113495bSYour Name  * Return: void
67*5113495bSYour Name  */
68*5113495bSYour Name void osif_cm_get_assoc_rsp_ie_data(struct element_info *assoc_rsp,
69*5113495bSYour Name 				   size_t *ie_data_len,
70*5113495bSYour Name 				   const uint8_t **ie_data_ptr);
71*5113495bSYour Name 
72*5113495bSYour Name /**
73*5113495bSYour Name  * osif_connect_handler() - API to send connect response to kernel
74*5113495bSYour Name  * @vdev: vdev pointer
75*5113495bSYour Name  * @rsp: Connection manager connect response
76*5113495bSYour Name  *
77*5113495bSYour Name  * The API is used to send connection response to kernel
78*5113495bSYour Name  *
79*5113495bSYour Name  * Context: Any context.
80*5113495bSYour Name  * Return: QDF_STATUS
81*5113495bSYour Name  */
82*5113495bSYour Name QDF_STATUS osif_connect_handler(struct wlan_objmgr_vdev *vdev,
83*5113495bSYour Name 				struct wlan_cm_connect_resp *rsp);
84*5113495bSYour Name 
85*5113495bSYour Name #ifdef CONN_MGR_ADV_FEATURE
86*5113495bSYour Name /**
87*5113495bSYour Name  * osif_indicate_reassoc_results() - API to send reassoc response to kernel
88*5113495bSYour Name  * @vdev: vdev pointer
89*5113495bSYour Name  * @osif_priv: OS private structure of vdev
90*5113495bSYour Name  * @rsp: Connection manager response
91*5113495bSYour Name  *
92*5113495bSYour Name  * The API is used to send reassoc response to kernel
93*5113495bSYour Name  *
94*5113495bSYour Name  * Context: Any context.
95*5113495bSYour Name  * Return: QDF_STATUS
96*5113495bSYour Name  */
97*5113495bSYour Name void osif_indicate_reassoc_results(struct wlan_objmgr_vdev *vdev,
98*5113495bSYour Name 				   struct vdev_osif_priv *osif_priv,
99*5113495bSYour Name 				   struct wlan_cm_connect_resp *rsp);
100*5113495bSYour Name 
101*5113495bSYour Name /**
102*5113495bSYour Name  * osif_pmksa_candidate_notify() - Roam pmksa candidate notify callback
103*5113495bSYour Name  * @vdev: vdev pointer
104*5113495bSYour Name  * @bssid: bssid
105*5113495bSYour Name  * @index: index
106*5113495bSYour Name  * @preauth: preauth flag
107*5113495bSYour Name  *
108*5113495bSYour Name  * Return: QDF_STATUS
109*5113495bSYour Name  */
110*5113495bSYour Name QDF_STATUS
111*5113495bSYour Name osif_pmksa_candidate_notify(struct wlan_objmgr_vdev *vdev,
112*5113495bSYour Name 			    struct qdf_mac_addr *bssid,
113*5113495bSYour Name 			    int index, bool preauth);
114*5113495bSYour Name #else
115*5113495bSYour Name static inline void
osif_indicate_reassoc_results(struct wlan_objmgr_vdev * vdev,struct vdev_osif_priv * osif_priv,struct wlan_cm_connect_resp * rsp)116*5113495bSYour Name osif_indicate_reassoc_results(struct wlan_objmgr_vdev *vdev,
117*5113495bSYour Name 			      struct vdev_osif_priv *osif_priv,
118*5113495bSYour Name 			      struct wlan_cm_connect_resp *rsp)
119*5113495bSYour Name {}
120*5113495bSYour Name #endif
121*5113495bSYour Name 
122*5113495bSYour Name /**
123*5113495bSYour Name  * osif_failed_candidate_handler() - API to indicate individual candidate
124*5113495bSYour Name  * connect failure resp
125*5113495bSYour Name  * @vdev: vdev pointer
126*5113495bSYour Name  * @rsp: Connection manager connect response for the candidate
127*5113495bSYour Name  *
128*5113495bSYour Name  * The API is is used indicate individual candidate connect failure resp for
129*5113495bSYour Name  * for tried all but last tried candidate. The last candidate will be sent in
130*5113495bSYour Name  * osif_connect_handler.
131*5113495bSYour Name  *
132*5113495bSYour Name  * Context: Any context.
133*5113495bSYour Name  * Return: QDF_STATUS
134*5113495bSYour Name  */
135*5113495bSYour Name QDF_STATUS osif_failed_candidate_handler(struct wlan_objmgr_vdev *vdev,
136*5113495bSYour Name 					 struct wlan_cm_connect_resp *rsp);
137*5113495bSYour Name 
138*5113495bSYour Name /**
139*5113495bSYour Name  * osif_cm_indicate_disconnect - notify osif that connection was dropped
140*5113495bSYour Name  * @vdev: pointer to vdev
141*5113495bSYour Name  * @dev: network device
142*5113495bSYour Name  * @reason: reason code for the disconnection, set it to 0 if unknown
143*5113495bSYour Name  * @locally_generated: disconnection was requested locally
144*5113495bSYour Name  * @ie: information elements of the deauth/disassoc frame (may be %NULL)
145*5113495bSYour Name  * @ie_len: length of IEs
146*5113495bSYour Name  * @link_id: MLO link id needed for dynamic link removal
147*5113495bSYour Name  * @gfp: allocation flags
148*5113495bSYour Name  *
149*5113495bSYour Name  * After it calls this function, the driver should enter an idle state
150*5113495bSYour Name  * and not try to connect to any AP any more.
151*5113495bSYour Name  */
152*5113495bSYour Name void
153*5113495bSYour Name osif_cm_indicate_disconnect(struct wlan_objmgr_vdev *vdev,
154*5113495bSYour Name 			    struct net_device *dev,
155*5113495bSYour Name 			    enum ieee80211_reasoncode reason,
156*5113495bSYour Name 			    bool locally_generated, const u8 *ie,
157*5113495bSYour Name 			    size_t ie_len, int link_id,
158*5113495bSYour Name 			    gfp_t gfp);
159*5113495bSYour Name 
160*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
161*5113495bSYour Name /**
162*5113495bSYour Name  * osif_get_partner_info_from_mlie() - API to get partner information
163*5113495bSYour Name  * from basic variant mlo ie
164*5113495bSYour Name  * @connect_rsp: Connection manager connect response for the candidate
165*5113495bSYour Name  * @partner_info: mlo partner info pointer
166*5113495bSYour Name  *
167*5113495bSYour Name  * The API is is used get partner information from basic variant ml ie.
168*5113495bSYour Name  *
169*5113495bSYour Name  * Context: Any context.
170*5113495bSYour Name  * Return: QDF_STATUS
171*5113495bSYour Name  */
172*5113495bSYour Name QDF_STATUS
173*5113495bSYour Name osif_get_partner_info_from_mlie(struct wlan_cm_connect_resp *connect_rsp,
174*5113495bSYour Name 				struct mlo_partner_info *partner_info);
175*5113495bSYour Name 
176*5113495bSYour Name /**
177*5113495bSYour Name  * osif_get_link_id_from_assoc_ml_ie() - API to get link id from assoc rsp
178*5113495bSYour Name  * ml ie.
179*5113495bSYour Name  * @rsp_link_info: pointer to mlo link info
180*5113495bSYour Name  * @assoc_partner_info: mlo partner info pointer
181*5113495bSYour Name  * @link_id: Link id information
182*5113495bSYour Name  *
183*5113495bSYour Name  * The API is used to get link id from assoc response basic variant mlo ie
184*5113495bSYour Name  *
185*5113495bSYour Name  * Context: Any context.
186*5113495bSYour Name  * Return: QDF_STATUS
187*5113495bSYour Name  */
188*5113495bSYour Name QDF_STATUS
189*5113495bSYour Name osif_get_link_id_from_assoc_ml_ie(struct mlo_link_info *rsp_link_info,
190*5113495bSYour Name 				  struct mlo_partner_info *assoc_partner_info,
191*5113495bSYour Name 				  uint8_t *link_id);
192*5113495bSYour Name 
193*5113495bSYour Name /**
194*5113495bSYour Name  * osif_get_chan_bss_from_kernel() - API to get chan bss from kernel
195*5113495bSYour Name  * @vdev: vdev pointer
196*5113495bSYour Name  * @rsp_link_info: pointer to mlo link info
197*5113495bSYour Name  * @rsp: Connection manager connect response for the candidate
198*5113495bSYour Name  *
199*5113495bSYour Name  * The API is used to get chan bss from kernel.
200*5113495bSYour Name  *
201*5113495bSYour Name  * Context: Any context.
202*5113495bSYour Name  * Return: QDF_STATUS
203*5113495bSYour Name  */
204*5113495bSYour Name struct cfg80211_bss *
205*5113495bSYour Name osif_get_chan_bss_from_kernel(struct wlan_objmgr_vdev *vdev,
206*5113495bSYour Name 			      struct mlo_link_info *rsp_link_info,
207*5113495bSYour Name 			      struct wlan_cm_connect_resp *rsp);
208*5113495bSYour Name #endif
209*5113495bSYour Name #endif /* __OSIF_CM_RSP_H */
210