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