xref: /wlan-dirver/qcacld-3.0/core/mac/src/pe/include/lim_ft.h (revision bc1d0241e54731b3c898668b1f9d07f070bc456c)
1 /*
2  * Copyright (c) 2011-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 /**=========================================================================
21 
22    Macros and Function prototypes FT and 802.11R purposes
23 
24    ========================================================================*/
25 
26 #ifndef __LIMFT_H__
27 #define __LIMFT_H__
28 
29 #include <cds_api.h>
30 #include <lim_global.h>
31 #include <ani_global.h>
32 #include <lim_ser_des_utils.h>
33 
34 /*-------------------------------------------------------------------------
35    Function declarations and documentation
36    ------------------------------------------------------------------------*/
37 void lim_ft_open(struct mac_context *mac, struct pe_session *pe_session);
38 void lim_ft_cleanup(struct mac_context *mac, struct pe_session *pe_session);
39 #ifdef WLAN_FEATURE_HOST_ROAM
40 void lim_ft_cleanup_pre_auth_info(struct mac_context *mac,
41 		struct pe_session *pe_session);
42 bool lim_process_ft_pre_auth_req(struct mac_context *mac,
43 				 tpSirFTPreAuthReq ft_pre_auth_req);
44 void lim_process_ft_preauth_rsp_timeout(struct mac_context *mac);
45 
46 /**
47  * lim_process_mlm_ft_reassoc_req() - Handle the Reassoc request
48  * @mac: Global MAC context
49  * @reassoc_req: reassoc req
50  *
51  *  This function handles the Reassoc Req from SME
52  *
53  *  Return: None
54  */
55 void lim_process_mlm_ft_reassoc_req(struct mac_context *mac,
56 				    tLimMlmReassocReq *reassoc_req);
57 void lim_perform_ft_pre_auth(struct mac_context *mac, QDF_STATUS status,
58 		uint32_t *data, struct pe_session *pe_session);
59 void lim_post_ft_pre_auth_rsp(struct mac_context *mac, QDF_STATUS status,
60 		uint8_t *auth_rsp, uint16_t auth_rsp_length,
61 		struct pe_session *pe_session);
62 void lim_handle_ft_pre_auth_rsp(struct mac_context *mac, QDF_STATUS status,
63 		uint8_t *auth_rsp, uint16_t auth_rsp_len,
64 		struct pe_session *pe_session);
65 QDF_STATUS lim_ft_setup_auth_session(struct mac_context *mac,
66 		struct pe_session *pe_session);
67 void lim_process_mlm_reassoc_cnf(struct mac_context *mac_ctx, uint32_t *msg);
68 /**
69  * lim_process_sta_mlm_add_bss_rsp_ft() - Handle ft add bss response
70  * @mac: Global MAC context
71  * @add_bss_rsp: Bss params rsp data
72  * @pe_session: PE Session
73  *
74  * Function to handle fast roaming add bss response in FT reassoc state,
75  * send reassociation Request.
76  *
77  * Return: None
78  */
79 void lim_process_sta_mlm_add_bss_rsp_ft(struct mac_context *mac,
80 					struct add_bss_rsp *add_bss_rsp,
81 					struct pe_session *pe_session);
82 void lim_process_mlm_reassoc_req(struct mac_context *mac_ctx,
83 				 tLimMlmReassocReq *reassoc_req);
84 
85 /**
86  * lim_preauth_scan_event_handler() - Process preauth scan events
87  * @mac_ctx:Pointer to global MAC structure
88  * @event: Scan event
89  * @vdev_id: vdev id
90  * @scan_id: scan id from WMA scan event.
91  *
92  * If scan event signifies failure or successful completion, operation
93  * is complete.
94  * If scan event signifies that STA is on foreign channel, send auth frame
95  *
96  * Return: void
97  */
98 void lim_preauth_scan_event_handler(struct mac_context *mac_ctx,
99 				    enum sir_scan_event_type event,
100 				    uint8_t vdev_id, uint32_t scan_id);
101 QDF_STATUS lim_send_preauth_scan_offload(struct mac_context *mac_ctx,
102 		struct pe_session *session_entry, tSirFTPreAuthReq *ft_preauth_req);
103 #else
104 static inline void lim_ft_cleanup_pre_auth_info(struct mac_context *mac,
105 		struct pe_session *pe_session)
106 {}
107 static inline void lim_process_ft_preauth_rsp_timeout(struct mac_context *mac)
108 {}
109 static inline
110 void lim_process_mlm_ft_reassoc_req(struct mac_context *mac,
111 				    tLimMlmReassocReq *reassoc_req)
112 {}
113 static inline void lim_handle_ft_pre_auth_rsp(struct mac_context *mac,
114 		QDF_STATUS status, uint8_t *auth_rsp,
115 		uint16_t auth_rsp_len, struct pe_session *pe_session)
116 {}
117 static inline void lim_process_mlm_reassoc_cnf(struct mac_context *mac_ctx,
118 		uint32_t *msg)
119 {}
120 static inline
121 void lim_process_sta_mlm_add_bss_rsp_ft(struct mac_context *mac,
122 					struct add_bss_rsp *add_bss_rsp,
123 					struct pe_session *pe_session)
124 {}
125 static inline void lim_process_mlm_reassoc_req(struct mac_context *mac_ctx,
126 					       tLimMlmReassocReq *reassoc_req)
127 {}
128 static inline void lim_preauth_scan_event_handler(struct mac_context *mac_ctx,
129 		enum sir_scan_event_type event,
130 		uint8_t vdev_id, uint32_t scan_id)
131 {}
132 static inline bool lim_process_ft_pre_auth_req(
133 		struct mac_context *mac, tpSirFTPreAuthReq ft_pre_auth_req)
134 {
135 	return false;
136 }
137 #endif
138 
139 #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
140 QDF_STATUS
141 lim_fill_ft_session(struct mac_context *mac,
142 		    struct bss_description *pbssDescription,
143 		    struct pe_session *ft_session,
144 		    struct pe_session *pe_session,
145 		    enum wlan_phymode bss_phymode);
146 
147 /**
148  * lim_ft_prepare_add_bss_req() - Create Add Bss Req to the new AP
149  * @mac: Global MAC context
150  * @add_bss_params: Bss params including rsp data
151  * @pe_session: PE Session
152  *
153  * This will be used when we are ready to FT to the new AP.
154  * The newly created ft Session entry is passed to this function
155  *
156  * Return: None
157  */
158 void lim_ft_prepare_add_bss_req(struct mac_context *mac,
159 				struct pe_session *ft_session,
160 				struct bss_description *bssDescription);
161 
162 QDF_STATUS lim_send_preauth_scan_offload(struct mac_context *mac_ctx,
163 		struct pe_session *session_entry, tSirFTPreAuthReq *ft_preauth_req);
164 #else
165 static inline QDF_STATUS
166 lim_fill_ft_session(struct mac_context *mac
167 		    struct bss_description *pbssDescription,
168 		    struct pe_session *ft_session,
169 		    struct pe_session *pe_session,
170 		    enum wlan_phymode bss_phymode)
171 {
172 	return QDF_STATUS_SUCCESS;
173 }
174 static inline void lim_ft_prepare_add_bss_req(struct mac_context *mac,
175 		struct pe_session *ft_session,
176 		struct bss_description *bssDescription)
177 {}
178 #endif
179 
180 QDF_STATUS lim_process_ft_aggr_qos_req(struct mac_context *mac,
181 		uint32_t *msg_buf);
182 void lim_process_ft_aggr_qos_rsp(struct mac_context *mac,
183 				 struct scheduler_msg *limMsg);
184 void lim_ft_cleanup_all_ft_sessions(struct mac_context *mac);
185 #endif /* __LIMFT_H__ */
186