1 /*
2 * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3 * Copyright (c) 2021-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 #include "qdf_mem.h"
21 #include <qdf_module.h>
22 #include "wlan_lmac_if_def.h"
23 #include "wlan_lmac_if_api.h"
24 #include "wlan_mgmt_txrx_tgt_api.h"
25 #include "wlan_scan_tgt_api.h"
26 #include <wlan_reg_services_api.h>
27 #include <wlan_reg_ucfg_api.h>
28 #ifdef WLAN_ATF_ENABLE
29 #include "wlan_atf_tgt_api.h"
30 #endif
31 #ifdef WLAN_SA_API_ENABLE
32 #include "wlan_sa_api_tgt_api.h"
33 #endif
34 #ifdef WIFI_POS_CONVERGED
35 #include "target_if_wifi_pos.h"
36 #include "target_if_wifi_pos_rx_ops.h"
37 #endif /* WIFI_POS_CONVERGED */
38 #include "wlan_reg_tgt_api.h"
39 #ifdef CONVERGED_P2P_ENABLE
40 #include "wlan_p2p_tgt_api.h"
41 #endif
42 #ifdef FEATURE_WLAN_TDLS
43 #include "wlan_tdls_tgt_api.h"
44 #endif
45
46 #include "wlan_crypto_global_api.h"
47 #ifdef DFS_COMPONENT_ENABLE
48 #include <wlan_dfs_tgt_api.h>
49 #include <wlan_objmgr_vdev_obj.h>
50 #include <wlan_dfs_utils_api.h>
51 #if defined(QCA_SUPPORT_DFS_CHAN_POSTNOL) || defined(QCA_DFS_BW_EXPAND)
52 #include <dfs_postnol_ucfg.h>
53 #endif
54 #endif
55
56 #ifdef WLAN_SUPPORT_GREEN_AP
57 #include <wlan_green_ap_api.h>
58 #include <wlan_green_ap_ucfg_api.h>
59 #endif
60 #include <wlan_ftm_ucfg_api.h>
61
62 #ifdef WLAN_SUPPORT_FILS
63 #include <wlan_fd_tgt_api.h>
64 #endif
65
66 #ifdef QCA_SUPPORT_CP_STATS
67 #include <wlan_cp_stats_tgt_api.h>
68 #include <wlan_cp_stats_utils_api.h>
69 #endif /* QCA_SUPPORT_CP_STATS */
70 #include <wlan_vdev_mgr_tgt_if_rx_api.h>
71
72 #ifdef WLAN_CFR_ENABLE
73 #include "wlan_cfr_tgt_api.h"
74 #endif
75
76 #ifdef WIFI_POS_CONVERGED
77 #include "wifi_pos_api.h"
78 #endif
79
80 #include "wlan_mgmt_txrx_rx_reo_tgt_api.h"
81
82 #ifdef WLAN_FEATURE_11BE_MLO
83 #include "wlan_mlo_mgr_cmn.h"
84 #include <wlan_mlo_t2lm.h>
85 #endif
86
87 #include <wlan_twt_tgt_if_rx_api.h>
88 #ifdef WLAN_FEATURE_MCC_QUOTA
89 #include <wlan_p2p_mcc_quota_tgt_api.h>
90 #endif
91
92 #ifdef WLAN_FEATURE_DBAM_CONFIG
93 #include "target_if_coex.h"
94 #endif
95 #if defined(WIFI_POS_CONVERGED) && defined(WLAN_FEATURE_RTT_11AZ_SUPPORT)
96 #include <wifi_pos_pasn_api.h>
97 #endif
98
99 #include "target_if.h"
100
101 /* Function pointer for OL/WMA specific UMAC tx_ops
102 * registration.
103 */
104 QDF_STATUS (*wlan_lmac_if_umac_tx_ops_register)
105 (struct wlan_lmac_if_tx_ops *tx_ops);
106 qdf_export_symbol(wlan_lmac_if_umac_tx_ops_register);
107
108 /* Function pointer to call legacy crypto rxpn registration in OL */
109 QDF_STATUS (*wlan_lmac_if_umac_crypto_rxpn_ops_register)
110 (struct wlan_lmac_if_rx_ops *rx_ops);
111 qdf_export_symbol(wlan_lmac_if_umac_crypto_rxpn_ops_register);
112
113 static void
tgt_vdev_mgr_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)114 tgt_vdev_mgr_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
115 {
116 tgt_vdev_mgr_register_rx_ops(rx_ops);
117 }
118
119 #ifdef QCA_SUPPORT_CP_STATS
120 #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_TWT_CONV_SUPPORTED)
121 /**
122 * wlan_target_if_cp_stats_rx_ops_register() - register cp_stats rx ops
123 * @rx_ops: lmac rx_ops
124 *
125 * Return: none
126 */
127 static void
wlan_target_if_cp_stats_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)128 wlan_target_if_cp_stats_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
129 {
130 rx_ops->cp_stats_rx_ops.twt_get_session_param_resp =
131 tgt_cp_stats_twt_get_session_evt_handler;
132 }
133 #else
134 static void
wlan_target_if_cp_stats_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)135 wlan_target_if_cp_stats_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
136 {
137 }
138 #endif
139
140 /**
141 * wlan_lmac_if_cp_stats_rx_ops_register() - API to register cp stats Rx Ops
142 * @rx_ops: pointer to lmac rx ops
143 *
144 * This API will be used to register function pointers for FW events
145 *
146 * Return: void
147 */
148 static void
wlan_lmac_if_cp_stats_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)149 wlan_lmac_if_cp_stats_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
150 {
151 wlan_target_if_cp_stats_rx_ops_register(rx_ops);
152 tgt_cp_stats_register_rx_ops(rx_ops);
153 }
154 #else
155 static void
wlan_lmac_if_cp_stats_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)156 wlan_lmac_if_cp_stats_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
157 {
158 }
159 #endif /* QCA_SUPPORT_CP_STATS */
160
161 #ifdef DCS_INTERFERENCE_DETECTION
162 /**
163 * wlan_target_if_dcs_rx_ops_register() - API to register dcs Rx Ops
164 * @rx_ops: pointer to lmac rx ops
165 *
166 * This API will be used to register function pointers for FW events
167 *
168 * Return: void
169 */
170 static void
wlan_target_if_dcs_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)171 wlan_target_if_dcs_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
172 {
173 rx_ops->dcs_rx_ops.process_dcs_event = tgt_dcs_process_event;
174 }
175 #else
176 static void
wlan_target_if_dcs_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)177 wlan_target_if_dcs_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
178 {
179 }
180 #endif /* DCS_INTERFERENCE_DETECTION */
181
182 #ifdef WLAN_ATF_ENABLE
183 #ifdef WLAN_ATF_INCREASED_STA
184 static void
wlan_lmac_if_atf_rx_ops_max_clients(struct wlan_lmac_if_atf_rx_ops * atf_rx_ops)185 wlan_lmac_if_atf_rx_ops_max_clients(struct wlan_lmac_if_atf_rx_ops *atf_rx_ops)
186 {
187 atf_rx_ops->atf_set_fw_max_client_512_support =
188 tgt_atf_set_fw_cap_max_client_512_support;
189 }
190 #else
191 static void
wlan_lmac_if_atf_rx_ops_max_clients(struct wlan_lmac_if_atf_rx_ops * atf_rx_ops)192 wlan_lmac_if_atf_rx_ops_max_clients(struct wlan_lmac_if_atf_rx_ops *atf_rx_ops)
193 {
194 }
195 #endif /* WLAN_ATF_INCREASED_STA */
196
197 /**
198 * wlan_lmac_if_atf_rx_ops_register() - Function to register ATF RX ops.
199 * @rx_ops: Pointer to wlan_lmac_if_rx_ops
200 */
201 static void
wlan_lmac_if_atf_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)202 wlan_lmac_if_atf_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
203 {
204 struct wlan_lmac_if_atf_rx_ops *atf_rx_ops = &rx_ops->atf_rx_ops;
205
206 /* ATF rx ops */
207 atf_rx_ops->atf_get_fmcap = tgt_atf_get_fmcap;
208 atf_rx_ops->atf_get_mode = tgt_atf_get_mode;
209 atf_rx_ops->atf_is_enabled = tgt_atf_is_enabled;
210 atf_rx_ops->atf_get_msdu_desc = tgt_atf_get_msdu_desc;
211 atf_rx_ops->atf_get_max_vdevs = tgt_atf_get_max_vdevs;
212 atf_rx_ops->atf_get_peers = tgt_atf_get_peers;
213 atf_rx_ops->atf_get_tput_based = tgt_atf_get_tput_based;
214 atf_rx_ops->atf_get_logging = tgt_atf_get_logging;
215 atf_rx_ops->atf_get_ssidgroup = tgt_atf_get_ssidgroup;
216 atf_rx_ops->atf_get_vdev_ac_blk_cnt = tgt_atf_get_vdev_ac_blk_cnt;
217 atf_rx_ops->atf_get_peer_blk_txbitmap = tgt_atf_get_peer_blk_txbitmap;
218 atf_rx_ops->atf_get_vdev_blk_txtraffic = tgt_atf_get_vdev_blk_txtraffic;
219 atf_rx_ops->atf_get_sched = tgt_atf_get_sched;
220 atf_rx_ops->atf_get_peer_stats = tgt_atf_get_peer_stats;
221 atf_rx_ops->atf_get_token_allocated = tgt_atf_get_token_allocated;
222 atf_rx_ops->atf_get_token_utilized = tgt_atf_get_token_utilized;
223
224 atf_rx_ops->atf_set_sched = tgt_atf_set_sched;
225 atf_rx_ops->atf_set_fmcap = tgt_atf_set_fmcap;
226 atf_rx_ops->atf_set_msdu_desc = tgt_atf_set_msdu_desc;
227 atf_rx_ops->atf_set_max_vdevs = tgt_atf_set_max_vdevs;
228 atf_rx_ops->atf_set_peers = tgt_atf_set_peers;
229 atf_rx_ops->atf_set_peer_stats = tgt_atf_set_peer_stats;
230 atf_rx_ops->atf_set_vdev_blk_txtraffic = tgt_atf_set_vdev_blk_txtraffic;
231 atf_rx_ops->atf_peer_blk_txtraffic = tgt_atf_peer_blk_txtraffic;
232 atf_rx_ops->atf_peer_unblk_txtraffic = tgt_atf_peer_unblk_txtraffic;
233 atf_rx_ops->atf_set_token_allocated = tgt_atf_set_token_allocated;
234 atf_rx_ops->atf_set_token_utilized = tgt_atf_set_token_utilized;
235 atf_rx_ops->atf_process_tx_ppdu_stats = tgt_atf_process_tx_ppdu_stats;
236 atf_rx_ops->atf_process_rx_ppdu_stats = tgt_atf_process_rx_ppdu_stats;
237 atf_rx_ops->atf_is_stats_enabled = tgt_atf_is_stats_enabled;
238 wlan_lmac_if_atf_rx_ops_max_clients(atf_rx_ops);
239 }
240 #else
241 static void
wlan_lmac_if_atf_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)242 wlan_lmac_if_atf_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
243 {
244 }
245 #endif
246
247 #ifdef WLAN_SUPPORT_FILS
248 static void
wlan_lmac_if_fd_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)249 wlan_lmac_if_fd_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
250 {
251 struct wlan_lmac_if_fd_rx_ops *fd_rx_ops = &rx_ops->fd_rx_ops;
252
253 fd_rx_ops->fd_is_fils_enable = tgt_fd_is_fils_enable;
254 fd_rx_ops->fd_alloc = tgt_fd_alloc;
255 fd_rx_ops->fd_stop = tgt_fd_stop;
256 fd_rx_ops->fd_free = tgt_fd_free;
257 fd_rx_ops->fd_get_valid_fd_period = tgt_fd_get_valid_fd_period;
258 fd_rx_ops->fd_swfda_handler = tgt_fd_swfda_handler;
259 fd_rx_ops->fd_offload = tgt_fd_offload;
260 fd_rx_ops->fd_tmpl_update = tgt_fd_tmpl_update;
261 }
262 #else
263 static void
wlan_lmac_if_fd_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)264 wlan_lmac_if_fd_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
265 {
266 }
267 #endif
268
269 #ifdef WLAN_SA_API_ENABLE
270 /**
271 * wlan_lmac_if_sa_api_rx_ops_register() - Function to register SA_API RX ops.
272 * @rx_ops: Pointer to wlan_lmac_if_rx_ops
273 */
274 static void
wlan_lmac_if_sa_api_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)275 wlan_lmac_if_sa_api_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
276 {
277 struct wlan_lmac_if_sa_api_rx_ops *sa_api_rx_ops = &rx_ops->sa_api_rx_ops;
278
279 /* SA API rx ops */
280 sa_api_rx_ops->sa_api_get_sa_supported = tgt_sa_api_get_sa_supported;
281 sa_api_rx_ops->sa_api_get_validate_sw = tgt_sa_api_get_validate_sw;
282 sa_api_rx_ops->sa_api_enable_sa = tgt_sa_api_enable_sa;
283 sa_api_rx_ops->sa_api_get_sa_enable = tgt_sa_api_get_sa_enable;
284
285 sa_api_rx_ops->sa_api_peer_assoc_hanldler = tgt_sa_api_peer_assoc_hanldler;
286 sa_api_rx_ops->sa_api_update_tx_feedback = tgt_sa_api_update_tx_feedback;
287 sa_api_rx_ops->sa_api_update_rx_feedback = tgt_sa_api_update_rx_feedback;
288
289 sa_api_rx_ops->sa_api_ucfg_set_param = tgt_sa_api_ucfg_set_param;
290 sa_api_rx_ops->sa_api_ucfg_get_param = tgt_sa_api_ucfg_get_param;
291
292 sa_api_rx_ops->sa_api_is_tx_feedback_enabled = tgt_sa_api_is_tx_feedback_enabled;
293 sa_api_rx_ops->sa_api_is_rx_feedback_enabled = tgt_sa_api_is_rx_feedback_enabled;
294
295 sa_api_rx_ops->sa_api_convert_rate_2g = tgt_sa_api_convert_rate_2g;
296 sa_api_rx_ops->sa_api_convert_rate_5g = tgt_sa_api_convert_rate_5g;
297 sa_api_rx_ops->sa_api_get_sa_mode = tgt_sa_api_get_sa_mode;
298
299 sa_api_rx_ops->sa_api_get_beacon_txantenna = tgt_sa_api_get_beacon_txantenna;
300 sa_api_rx_ops->sa_api_cwm_action = tgt_sa_api_cwm_action;
301 }
302 #else
303 static void
wlan_lmac_if_sa_api_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)304 wlan_lmac_if_sa_api_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
305 {
306 }
307 #endif
308
309 #ifdef WLAN_CFR_ENABLE
310 /**
311 * wlan_lmac_if_cfr_rx_ops_register() - Function to register CFR RX ops
312 * @rx_ops: Pointer to wlan_lmac_if_rx_ops
313 */
314 static void
wlan_lmac_if_cfr_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)315 wlan_lmac_if_cfr_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
316 {
317 struct wlan_lmac_if_cfr_rx_ops *cfr_rx_ops = &rx_ops->cfr_rx_ops;
318
319 /* CFR rx ops */
320 cfr_rx_ops->cfr_support_set = tgt_cfr_support_set;
321 cfr_rx_ops->cfr_info_send = tgt_cfr_info_send;
322 cfr_rx_ops->cfr_capture_count_support_set =
323 tgt_cfr_capture_count_support_set;
324 cfr_rx_ops->cfr_mo_marking_support_set = tgt_cfr_mo_marking_support_set;
325 cfr_rx_ops->cfr_aoa_for_rcc_support_set =
326 tgt_cfr_aoa_for_rcc_support_set;
327 }
328 #else
329 static void
wlan_lmac_if_cfr_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)330 wlan_lmac_if_cfr_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
331 {
332 }
333 #endif
334
335 static void
wlan_lmac_if_crypto_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)336 wlan_lmac_if_crypto_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
337 {
338 wlan_crypto_register_crypto_rx_ops(&rx_ops->crypto_rx_ops);
339 if (wlan_lmac_if_umac_crypto_rxpn_ops_register)
340 wlan_lmac_if_umac_crypto_rxpn_ops_register(rx_ops);
341 }
342
343 #if defined(WIFI_POS_CONVERGED) && defined(WLAN_FEATURE_RTT_11AZ_SUPPORT)
344 static void
wlan_lmac_if_wifi_pos_rx_ops(struct wlan_lmac_if_rx_ops * rx_ops)345 wlan_lmac_if_wifi_pos_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops)
346 {
347 struct wlan_lmac_if_wifi_pos_rx_ops *wifi_pos_rx_ops =
348 &rx_ops->wifi_pos_rx_ops;
349
350 wifi_pos_rx_ops->wifi_pos_ranging_peer_create_cb =
351 wifi_pos_handle_ranging_peer_create;
352 wifi_pos_rx_ops->wifi_pos_ranging_peer_create_rsp_cb =
353 wifi_pos_handle_ranging_peer_create_rsp;
354 wifi_pos_rx_ops->wifi_pos_ranging_peer_delete_cb =
355 wifi_pos_handle_ranging_peer_delete;
356 wifi_pos_rx_ops->wifi_pos_vdev_delete_all_ranging_peers_rsp_cb =
357 wifi_pos_vdev_delete_all_ranging_peers_rsp;
358 }
359 #else
360 static inline void
wlan_lmac_if_wifi_pos_rx_ops(struct wlan_lmac_if_rx_ops * rx_ops)361 wlan_lmac_if_wifi_pos_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops)
362 {}
363 #endif
364
365 #ifdef WIFI_POS_CONVERGED
366 static void
wlan_lmac_if_umac_rx_ops_register_wifi_pos(struct wlan_lmac_if_rx_ops * rx_ops)367 wlan_lmac_if_umac_rx_ops_register_wifi_pos(struct wlan_lmac_if_rx_ops *rx_ops)
368 {
369 wifi_pos_register_rx_ops(rx_ops);
370 wlan_lmac_if_wifi_pos_rx_ops(rx_ops);
371 }
372 #else
wlan_lmac_if_umac_rx_ops_register_wifi_pos(struct wlan_lmac_if_rx_ops * rx_ops)373 static void wlan_lmac_if_umac_rx_ops_register_wifi_pos(
374 struct wlan_lmac_if_rx_ops *rx_ops)
375 {
376 }
377 #endif /* WIFI_POS_CONVERGED */
378
379 #ifdef CONFIG_BAND_6GHZ
wlan_lmac_if_register_master_list_ext_handler(struct wlan_lmac_if_rx_ops * rx_ops)380 static void wlan_lmac_if_register_master_list_ext_handler(
381 struct wlan_lmac_if_rx_ops *rx_ops)
382 {
383 rx_ops->reg_rx_ops.master_list_ext_handler =
384 tgt_reg_process_master_chan_list_ext;
385 }
386
wlan_lmac_if_register_super_chan_display(struct wlan_lmac_if_rx_ops * rx_ops)387 static void wlan_lmac_if_register_super_chan_display(
388 struct wlan_lmac_if_rx_ops *rx_ops)
389 {
390 rx_ops->reg_rx_ops.reg_display_super_chan_list =
391 wlan_reg_display_super_chan_list;
392 }
393
394 #ifdef CONFIG_AFC_SUPPORT
wlan_lmac_if_register_afc_handlers(struct wlan_lmac_if_rx_ops * rx_ops)395 static void wlan_lmac_if_register_afc_handlers(
396 struct wlan_lmac_if_rx_ops *rx_ops)
397 {
398 rx_ops->reg_rx_ops.afc_event_handler = tgt_reg_process_afc_event;
399 rx_ops->reg_rx_ops.reg_set_afc_dev_type = tgt_reg_set_afc_dev_type;
400 rx_ops->reg_rx_ops.reg_get_afc_dev_type = tgt_reg_get_afc_dev_type;
401 rx_ops->reg_rx_ops.reg_set_eirp_preferred_support =
402 tgt_reg_set_eirp_preferred_support;
403 rx_ops->reg_rx_ops.reg_get_eirp_preferred_support =
404 tgt_reg_get_eirp_preferred_support;
405 }
406 #else
wlan_lmac_if_register_afc_handlers(struct wlan_lmac_if_rx_ops * rx_ops)407 static inline void wlan_lmac_if_register_afc_handlers(
408 struct wlan_lmac_if_rx_ops *rx_ops)
409 {
410 }
411 #endif
412
413 #else
wlan_lmac_if_register_master_list_ext_handler(struct wlan_lmac_if_rx_ops * rx_ops)414 static inline void wlan_lmac_if_register_master_list_ext_handler(
415 struct wlan_lmac_if_rx_ops *rx_ops)
416 {
417 }
418
wlan_lmac_if_register_afc_handlers(struct wlan_lmac_if_rx_ops * rx_ops)419 static inline void wlan_lmac_if_register_afc_handlers(
420 struct wlan_lmac_if_rx_ops *rx_ops)
421 {
422 }
423
wlan_lmac_if_register_super_chan_display(struct wlan_lmac_if_rx_ops * rx_ops)424 static inline void wlan_lmac_if_register_super_chan_display(
425 struct wlan_lmac_if_rx_ops *rx_ops)
426 {
427 }
428 #endif
429
430 #if defined(CONFIG_BAND_6GHZ)
wlan_lmac_if_register_6g_edge_chan_supp(struct wlan_lmac_if_rx_ops * rx_ops)431 static void wlan_lmac_if_register_6g_edge_chan_supp(
432 struct wlan_lmac_if_rx_ops *rx_ops)
433 {
434 rx_ops->reg_rx_ops.reg_set_lower_6g_edge_ch_supp =
435 tgt_reg_set_lower_6g_edge_ch_supp;
436
437 rx_ops->reg_rx_ops.reg_set_disable_upper_6g_edge_ch_supp =
438 tgt_reg_set_disable_upper_6g_edge_ch_supp;
439 }
440 #else
wlan_lmac_if_register_6g_edge_chan_supp(struct wlan_lmac_if_rx_ops * rx_ops)441 static inline void wlan_lmac_if_register_6g_edge_chan_supp(
442 struct wlan_lmac_if_rx_ops *rx_ops)
443 {
444 }
445 #endif
446
447 #ifdef WLAN_REG_PARTIAL_OFFLOAD
448 /**
449 * wlan_lmac_if_umac_reg_rx_ops_register_po() - Function to register Reg RX ops
450 * for Partial Offload
451 * @rx_ops: Pointer to wlan_lmac_if_rx_ops
452 *
453 * Return: void
454 */
wlan_lmac_if_umac_reg_rx_ops_register_po(struct wlan_lmac_if_rx_ops * rx_ops)455 static void wlan_lmac_if_umac_reg_rx_ops_register_po(
456 struct wlan_lmac_if_rx_ops *rx_ops)
457 {
458 rx_ops->reg_rx_ops.reg_program_default_cc =
459 ucfg_reg_program_default_cc;
460
461 rx_ops->reg_rx_ops.reg_get_current_regdomain =
462 wlan_reg_get_curr_regdomain;
463 }
464 #else
wlan_lmac_if_umac_reg_rx_ops_register_po(struct wlan_lmac_if_rx_ops * rx_ops)465 static void wlan_lmac_if_umac_reg_rx_ops_register_po(
466 struct wlan_lmac_if_rx_ops *rx_ops)
467 {
468 }
469 #endif
470
wlan_lmac_if_umac_reg_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)471 static void wlan_lmac_if_umac_reg_rx_ops_register(
472 struct wlan_lmac_if_rx_ops *rx_ops)
473 {
474 rx_ops->reg_rx_ops.master_list_handler =
475 tgt_reg_process_master_chan_list;
476
477 wlan_lmac_if_register_master_list_ext_handler(rx_ops);
478
479 rx_ops->reg_rx_ops.reg_11d_new_cc_handler =
480 tgt_reg_process_11d_new_country;
481
482 rx_ops->reg_rx_ops.reg_set_regdb_offloaded =
483 tgt_reg_set_regdb_offloaded;
484
485 rx_ops->reg_rx_ops.reg_set_11d_offloaded =
486 tgt_reg_set_11d_offloaded;
487
488 rx_ops->reg_rx_ops.reg_set_6ghz_supported =
489 tgt_reg_set_6ghz_supported;
490
491 rx_ops->reg_rx_ops.reg_set_5dot9_ghz_supported =
492 tgt_reg_set_5dot9_ghz_supported;
493
494 rx_ops->reg_rx_ops.get_dfs_region =
495 wlan_reg_get_dfs_region;
496
497 rx_ops->reg_rx_ops.reg_ch_avoid_event_handler =
498 tgt_reg_process_ch_avoid_event;
499
500 rx_ops->reg_rx_ops.reg_freq_to_chan =
501 wlan_reg_freq_to_chan;
502
503 rx_ops->reg_rx_ops.reg_set_chan_144 =
504 ucfg_reg_modify_chan_144;
505
506 rx_ops->reg_rx_ops.reg_get_chan_144 =
507 ucfg_reg_get_en_chan_144;
508
509 wlan_lmac_if_umac_reg_rx_ops_register_po(rx_ops);
510
511 rx_ops->reg_rx_ops.reg_enable_dfs_channels =
512 ucfg_reg_enable_dfs_channels;
513
514 rx_ops->reg_rx_ops.reg_modify_pdev_chan_range =
515 wlan_reg_modify_pdev_chan_range;
516
517 rx_ops->reg_rx_ops.reg_update_pdev_wireless_modes =
518 wlan_reg_update_pdev_wireless_modes;
519
520 rx_ops->reg_rx_ops.reg_is_range_only6g =
521 wlan_reg_is_range_only6g;
522
523 rx_ops->reg_rx_ops.reg_is_range_overlap_6g =
524 wlan_reg_is_range_overlap_6g;
525
526 rx_ops->reg_rx_ops.reg_ignore_fw_reg_offload_ind =
527 tgt_reg_ignore_fw_reg_offload_ind;
528
529 rx_ops->reg_rx_ops.reg_disable_chan_coex =
530 wlan_reg_disable_chan_coex;
531
532 rx_ops->reg_rx_ops.reg_get_unii_5g_bitmap =
533 ucfg_reg_get_unii_5g_bitmap;
534
535 rx_ops->reg_rx_ops.reg_set_ext_tpc_supported =
536 tgt_reg_set_ext_tpc_supported;
537
538 wlan_lmac_if_register_6g_edge_chan_supp(rx_ops);
539
540 wlan_lmac_if_register_afc_handlers(rx_ops);
541
542 wlan_lmac_if_register_super_chan_display(rx_ops);
543
544 rx_ops->reg_rx_ops.reg_r2p_table_update_response_handler =
545 tgt_reg_process_r2p_table_update_response;
546 }
547
548 #ifdef CONVERGED_P2P_ENABLE
549 #ifdef WLAN_FEATURE_MCC_QUOTA
550 static inline void
wlan_lmac_if_umac_rx_ops_register_p2p_mcc_quota(struct wlan_lmac_if_rx_ops * rx_ops)551 wlan_lmac_if_umac_rx_ops_register_p2p_mcc_quota(struct wlan_lmac_if_rx_ops *rx_ops)
552 {
553 rx_ops->p2p.mcc_quota_ev_handler = tgt_p2p_mcc_quota_event_cb;
554 }
555 #else
wlan_lmac_if_umac_rx_ops_register_p2p_mcc_quota(struct wlan_lmac_if_rx_ops * rx_ops)556 static inline void wlan_lmac_if_umac_rx_ops_register_p2p_mcc_quota(
557 struct wlan_lmac_if_rx_ops *rx_ops)
558 {
559 }
560 #endif
561
562 #ifdef FEATURE_P2P_LISTEN_OFFLOAD
563 static inline void
wlan_lmac_if_umac_rx_ops_register_p2p_listen_offload(struct wlan_lmac_if_rx_ops * rx_ops)564 wlan_lmac_if_umac_rx_ops_register_p2p_listen_offload(struct wlan_lmac_if_rx_ops *rx_ops)
565 {
566 rx_ops->p2p.lo_ev_handler = tgt_p2p_lo_event_cb;
567 }
568 #else
569 static inline void
wlan_lmac_if_umac_rx_ops_register_p2p_listen_offload(struct wlan_lmac_if_rx_ops * rx_ops)570 wlan_lmac_if_umac_rx_ops_register_p2p_listen_offload(struct wlan_lmac_if_rx_ops *rx_ops)
571 {
572 }
573 #endif
574
wlan_lmac_if_umac_rx_ops_register_p2p(struct wlan_lmac_if_rx_ops * rx_ops)575 static void wlan_lmac_if_umac_rx_ops_register_p2p(
576 struct wlan_lmac_if_rx_ops *rx_ops)
577 {
578 wlan_lmac_if_umac_rx_ops_register_p2p_listen_offload(rx_ops);
579 rx_ops->p2p.noa_ev_handler = tgt_p2p_noa_event_cb;
580 rx_ops->p2p.add_mac_addr_filter_evt_handler =
581 tgt_p2p_add_mac_addr_status_event_cb;
582 wlan_lmac_if_umac_rx_ops_register_p2p_mcc_quota(rx_ops);
583 }
584 #else
wlan_lmac_if_umac_rx_ops_register_p2p(struct wlan_lmac_if_rx_ops * rx_ops)585 static void wlan_lmac_if_umac_rx_ops_register_p2p(
586 struct wlan_lmac_if_rx_ops *rx_ops)
587 {
588 }
589 #endif
590
591 /*
592 * register_precac_auto_chan_rx_ops_freq() - Register auto chan switch rx ops
593 * for frequency based channel APIs.
594 * rx_ops: Pointer to wlan_lmac_if_dfs_rx_ops
595 */
596 #ifdef DFS_COMPONENT_ENABLE
597 #if defined(WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT) && defined(CONFIG_CHAN_FREQ_API)
598 static inline void
register_precac_auto_chan_rx_ops_freq(struct wlan_lmac_if_dfs_rx_ops * rx_ops)599 register_precac_auto_chan_rx_ops_freq(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
600 {
601 if (!rx_ops)
602 return;
603 rx_ops->dfs_get_precac_chan_state_for_freq =
604 ucfg_dfs_get_precac_chan_state_for_freq;
605 }
606 #else
607 static inline void
register_precac_auto_chan_rx_ops_freq(struct wlan_lmac_if_dfs_rx_ops * rx_ops)608 register_precac_auto_chan_rx_ops_freq(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
609 {
610 }
611 #endif
612 #endif
613
614 #ifdef DFS_COMPONENT_ENABLE
615 #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT
616 static inline void
register_precac_auto_chan_rx_ops(struct wlan_lmac_if_dfs_rx_ops * rx_ops)617 register_precac_auto_chan_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
618 {
619 if (!rx_ops)
620 return;
621 rx_ops->dfs_set_precac_intermediate_chan =
622 ucfg_dfs_set_precac_intermediate_chan;
623 rx_ops->dfs_get_precac_intermediate_chan =
624 ucfg_dfs_get_precac_intermediate_chan;
625 }
626 #else
627 static inline void
register_precac_auto_chan_rx_ops(struct wlan_lmac_if_dfs_rx_ops * rx_ops)628 register_precac_auto_chan_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
629 {
630 }
631 #endif
632
633 /*
634 * register_dfs_rx_ops_for_freq() - Register DFS rx ops for frequency based
635 * channel APIs.
636 * rx_ops: Pointer to wlan_lmac_if_dfs_rx_ops.
637 */
638 #ifdef CONFIG_CHAN_FREQ_API
register_dfs_rx_ops_for_freq(struct wlan_lmac_if_dfs_rx_ops * rx_ops)639 static void register_dfs_rx_ops_for_freq(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
640 {
641 if (!rx_ops)
642 return;
643 rx_ops->dfs_set_current_channel_for_freq =
644 tgt_dfs_set_current_channel_for_freq;
645 }
646 #endif
647
648 /*
649 * register_rcac_dfs_rx_ops() - Register DFS RX-Ops for RCAC specific
650 * APIs.
651 * @rx_ops: Pointer to wlan_lmac_if_dfs_rx_ops.
652 */
653 #ifdef QCA_SUPPORT_ADFS_RCAC
register_rcac_dfs_rx_ops(struct wlan_lmac_if_dfs_rx_ops * rx_ops)654 static void register_rcac_dfs_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
655 {
656 if (!rx_ops)
657 return;
658 rx_ops->dfs_set_rcac_enable = ucfg_dfs_set_rcac_enable;
659 rx_ops->dfs_get_rcac_enable = ucfg_dfs_get_rcac_enable;
660 rx_ops->dfs_set_rcac_freq = ucfg_dfs_set_rcac_freq;
661 rx_ops->dfs_get_rcac_freq = ucfg_dfs_get_rcac_freq;
662 rx_ops->dfs_is_agile_rcac_enabled = ucfg_dfs_is_agile_rcac_enabled;
663 }
664 #else
665 static inline void
register_rcac_dfs_rx_ops(struct wlan_lmac_if_dfs_rx_ops * rx_ops)666 register_rcac_dfs_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
667 {
668 }
669 #endif
670
671 /*
672 * register_agile_dfs_rx_ops() - Register Rx-Ops for Agile Specific APIs
673 * @rx_ops: Pointer to wlan_lmac_if_dfs_rx_ops.
674 */
675 #ifdef QCA_SUPPORT_AGILE_DFS
register_agile_dfs_rx_ops(struct wlan_lmac_if_dfs_rx_ops * rx_ops)676 static void register_agile_dfs_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
677 {
678 if (!rx_ops)
679 return;
680 rx_ops->dfs_agile_sm_deliver_evt = utils_dfs_agile_sm_deliver_evt;
681 }
682 #else
683 static inline void
register_agile_dfs_rx_ops(struct wlan_lmac_if_dfs_rx_ops * rx_ops)684 register_agile_dfs_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
685 {
686 }
687 #endif
688
689 #ifdef QCA_SUPPORT_DFS_CHAN_POSTNOL
690 /* register_dfs_chan_postnol_rx_ops() - Register DFS Rx-Ops for postNOL
691 * channel change APIs.
692 * @rx_ops: Pointer to wlan_lmac_if_dfs_rx_ops.
693 */
694 static void
register_dfs_chan_postnol_rx_ops(struct wlan_lmac_if_dfs_rx_ops * rx_ops)695 register_dfs_chan_postnol_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
696 {
697 if (!rx_ops)
698 return;
699
700 rx_ops->dfs_set_postnol_freq = ucfg_dfs_set_postnol_freq;
701 rx_ops->dfs_set_postnol_mode = ucfg_dfs_set_postnol_mode;
702 rx_ops->dfs_set_postnol_cfreq2 = ucfg_dfs_set_postnol_cfreq2;
703 rx_ops->dfs_get_postnol_freq = ucfg_dfs_get_postnol_freq;
704 rx_ops->dfs_get_postnol_mode = ucfg_dfs_get_postnol_mode;
705 rx_ops->dfs_get_postnol_cfreq2 = ucfg_dfs_get_postnol_cfreq2;
706 }
707 #else
708 static inline void
register_dfs_chan_postnol_rx_ops(struct wlan_lmac_if_dfs_rx_ops * rx_ops)709 register_dfs_chan_postnol_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
710 {
711 }
712 #endif
713
714 #ifdef QCA_DFS_BW_EXPAND
715 /* register_dfs_bw_expand_rx_ops() - Register DFS Rx-Ops for BW Expand
716 * @rx_ops: Pointer to wlan_lmac_if_dfs_rx_ops.
717 */
718 static void
register_dfs_bw_expand_rx_ops(struct wlan_lmac_if_dfs_rx_ops * rx_ops)719 register_dfs_bw_expand_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
720 {
721 if (!rx_ops)
722 return;
723
724 rx_ops->dfs_set_bw_expand = ucfg_dfs_set_bw_expand;
725 rx_ops->dfs_get_bw_expand = ucfg_dfs_get_bw_expand;
726 }
727 #else
728 static inline void
register_dfs_bw_expand_rx_ops(struct wlan_lmac_if_dfs_rx_ops * rx_ops)729 register_dfs_bw_expand_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
730 {
731 }
732 #endif
733
734 #if defined(QCA_DFS_BW_PUNCTURE) && !defined(CONFIG_REG_CLIENT)
735 /* register_dfs_puncture_rx_ops() - Register DFS Rx-Ops for DFS puncture.
736 * @rx_ops: Pointer to wlan_lmac_if_dfs_rx_ops.
737 */
738 static void
register_dfs_puncture_rx_ops(struct wlan_lmac_if_dfs_rx_ops * rx_ops)739 register_dfs_puncture_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
740 {
741 if (!rx_ops)
742 return;
743
744 rx_ops->dfs_set_dfs_puncture = ucfg_dfs_set_dfs_puncture;
745 rx_ops->dfs_get_dfs_puncture = ucfg_dfs_get_dfs_puncture;
746 }
747 #else
748 static inline void
register_dfs_puncture_rx_ops(struct wlan_lmac_if_dfs_rx_ops * rx_ops)749 register_dfs_puncture_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops)
750 {
751 }
752 #endif
753
754 #ifdef WLAN_MGMT_RX_REO_SUPPORT
755 static QDF_STATUS
wlan_lmac_if_mgmt_rx_reo_rx_ops_register(struct wlan_lmac_if_mgmt_txrx_rx_ops * mgmt_txrx_rx_ops)756 wlan_lmac_if_mgmt_rx_reo_rx_ops_register(
757 struct wlan_lmac_if_mgmt_txrx_rx_ops *mgmt_txrx_rx_ops)
758 {
759 struct wlan_lmac_if_mgmt_rx_reo_rx_ops *mgmt_rx_reo_rx_ops;
760
761 mgmt_rx_reo_rx_ops = &mgmt_txrx_rx_ops->mgmt_rx_reo_rx_ops;
762 mgmt_rx_reo_rx_ops->fw_consumed_event_handler =
763 tgt_mgmt_rx_reo_fw_consumed_event_handler;
764 mgmt_rx_reo_rx_ops->host_drop_handler =
765 tgt_mgmt_rx_reo_host_drop_handler;
766 mgmt_rx_reo_rx_ops->release_frames = tgt_mgmt_rx_reo_release_frames;
767
768 return QDF_STATUS_SUCCESS;
769 }
770 #else
771 static QDF_STATUS
wlan_lmac_if_mgmt_rx_reo_rx_ops_register(struct wlan_lmac_if_mgmt_txrx_rx_ops * mgmt_txrx_rx_ops)772 wlan_lmac_if_mgmt_rx_reo_rx_ops_register(
773 struct wlan_lmac_if_mgmt_txrx_rx_ops *mgmt_txrx_rx_ops)
774 {
775 return QDF_STATUS_SUCCESS;
776 }
777 #endif
778
779 static QDF_STATUS
wlan_lmac_if_mgmt_txrx_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)780 wlan_lmac_if_mgmt_txrx_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
781 {
782 struct wlan_lmac_if_mgmt_txrx_rx_ops *mgmt_txrx_rx_ops;
783
784 if (!rx_ops) {
785 qdf_print("lmac if rx ops pointer is NULL");
786 return QDF_STATUS_E_NULL_VALUE;
787 }
788
789 /* mgmt txrx rx ops */
790 mgmt_txrx_rx_ops = &rx_ops->mgmt_txrx_rx_ops;
791
792 mgmt_txrx_rx_ops->mgmt_tx_completion_handler =
793 tgt_mgmt_txrx_tx_completion_handler;
794 mgmt_txrx_rx_ops->mgmt_rx_frame_handler =
795 tgt_mgmt_txrx_rx_frame_handler;
796 mgmt_txrx_rx_ops->mgmt_txrx_get_nbuf_from_desc_id =
797 tgt_mgmt_txrx_get_nbuf_from_desc_id;
798 mgmt_txrx_rx_ops->mgmt_txrx_get_peer_from_desc_id =
799 tgt_mgmt_txrx_get_peer_from_desc_id;
800 mgmt_txrx_rx_ops->mgmt_txrx_get_vdev_id_from_desc_id =
801 tgt_mgmt_txrx_get_vdev_id_from_desc_id;
802 mgmt_txrx_rx_ops->mgmt_txrx_get_free_desc_pool_count =
803 tgt_mgmt_txrx_get_free_desc_pool_count;
804 mgmt_txrx_rx_ops->mgmt_rx_frame_entry =
805 tgt_mgmt_txrx_rx_frame_entry;
806
807 return wlan_lmac_if_mgmt_rx_reo_rx_ops_register(mgmt_txrx_rx_ops);
808 }
809
810 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
dfs_action_on_status_assign(struct wlan_lmac_if_dfs_rx_ops * dfs_rx_ops)811 static void dfs_action_on_status_assign(
812 struct wlan_lmac_if_dfs_rx_ops *dfs_rx_ops)
813 {
814 dfs_rx_ops->dfs_action_on_status = tgt_dfs_action_on_status_from_fw;
815 }
816 #else
dfs_action_on_status_assign(struct wlan_lmac_if_dfs_rx_ops * dfs_rx_ops)817 static inline void dfs_action_on_status_assign(
818 struct wlan_lmac_if_dfs_rx_ops *dfs_rx_ops)
819 {
820 }
821 #endif
822
823 static QDF_STATUS
wlan_lmac_if_umac_dfs_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)824 wlan_lmac_if_umac_dfs_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
825 {
826 struct wlan_lmac_if_dfs_rx_ops *dfs_rx_ops;
827
828 dfs_rx_ops = &rx_ops->dfs_rx_ops;
829
830 dfs_rx_ops->dfs_get_radars = tgt_dfs_get_radars;
831 dfs_rx_ops->dfs_process_phyerr = tgt_dfs_process_phyerr;
832 dfs_rx_ops->dfs_destroy_object = tgt_dfs_destroy_object;
833 dfs_rx_ops->dfs_radar_enable = tgt_dfs_radar_enable;
834 dfs_rx_ops->dfs_is_radar_enabled = tgt_dfs_is_radar_enabled;
835 dfs_rx_ops->dfs_control = tgt_dfs_control;
836 dfs_rx_ops->dfs_is_precac_timer_running =
837 tgt_dfs_is_precac_timer_running;
838 dfs_rx_ops->dfs_agile_precac_start =
839 tgt_dfs_agile_precac_start;
840 dfs_rx_ops->dfs_set_agile_precac_state =
841 tgt_dfs_set_agile_precac_state;
842 dfs_rx_ops->dfs_start_precac_timer = utils_dfs_start_precac_timer;
843 dfs_rx_ops->dfs_cancel_precac_timer = utils_dfs_cancel_precac_timer;
844 dfs_rx_ops->dfs_reset_adfs_config = ucfg_dfs_reset_agile_config;
845 dfs_rx_ops->dfs_override_precac_timeout =
846 ucfg_dfs_override_precac_timeout;
847 dfs_rx_ops->dfs_set_precac_enable = ucfg_dfs_set_precac_enable;
848 dfs_rx_ops->dfs_get_agile_precac_enable =
849 ucfg_dfs_get_agile_precac_enable;
850 dfs_rx_ops->dfs_get_override_precac_timeout =
851 ucfg_dfs_get_override_precac_timeout;
852 dfs_rx_ops->dfs_process_radar_ind = tgt_dfs_process_radar_ind;
853 dfs_rx_ops->dfs_dfs_cac_complete_ind = tgt_dfs_cac_complete;
854 dfs_rx_ops->dfs_dfs_ocac_complete_ind = tgt_dfs_ocac_complete;
855 dfs_rx_ops->dfs_stop = tgt_dfs_stop;
856 dfs_rx_ops->dfs_reinit_timers = ucfg_dfs_reinit_timers;
857 dfs_rx_ops->dfs_enable_stadfs = tgt_dfs_enable_stadfs;
858 dfs_rx_ops->dfs_is_stadfs_enabled = tgt_dfs_is_stadfs_enabled;
859 dfs_rx_ops->dfs_process_phyerr_filter_offload =
860 tgt_dfs_process_phyerr_filter_offload;
861 dfs_rx_ops->dfs_is_phyerr_filter_offload =
862 tgt_dfs_is_phyerr_filter_offload;
863
864 dfs_action_on_status_assign(dfs_rx_ops);
865
866 dfs_rx_ops->dfs_override_status_timeout =
867 ucfg_dfs_set_override_status_timeout;
868 dfs_rx_ops->dfs_get_override_status_timeout =
869 ucfg_dfs_get_override_status_timeout;
870 dfs_rx_ops->dfs_reset_spoof_test =
871 tgt_dfs_reset_spoof_test;
872 dfs_rx_ops->dfs_is_disable_radar_marking_set =
873 utils_dfs_get_disable_radar_marking;
874 dfs_rx_ops->dfs_set_nol_subchannel_marking =
875 ucfg_dfs_set_nol_subchannel_marking;
876 dfs_rx_ops->dfs_get_nol_subchannel_marking =
877 ucfg_dfs_get_nol_subchannel_marking;
878 dfs_rx_ops->dfs_set_bw_reduction =
879 utils_dfs_bw_reduce;
880 dfs_rx_ops->dfs_is_bw_reduction_needed =
881 utils_dfs_is_bw_reduce;
882 dfs_rx_ops->dfs_allow_hw_pulses =
883 ucfg_dfs_allow_hw_pulses;
884 dfs_rx_ops->dfs_is_hw_pulses_allowed =
885 ucfg_dfs_is_hw_pulses_allowed;
886 dfs_rx_ops->dfs_set_fw_adfs_support =
887 tgt_dfs_set_fw_adfs_support;
888 dfs_rx_ops->dfs_reset_dfs_prevchan =
889 utils_dfs_reset_dfs_prevchan;
890 dfs_rx_ops->dfs_init_tmp_psoc_nol =
891 tgt_dfs_init_tmp_psoc_nol;
892 dfs_rx_ops->dfs_deinit_tmp_psoc_nol =
893 tgt_dfs_deinit_tmp_psoc_nol;
894 dfs_rx_ops->dfs_save_dfs_nol_in_psoc =
895 tgt_dfs_save_dfs_nol_in_psoc;
896 dfs_rx_ops->dfs_reinit_nol_from_psoc_copy =
897 tgt_dfs_reinit_nol_from_psoc_copy;
898 dfs_rx_ops->dfs_reinit_precac_lists =
899 tgt_dfs_reinit_precac_lists;
900 dfs_rx_ops->dfs_complete_deferred_tasks =
901 tgt_dfs_complete_deferred_tasks;
902 register_precac_auto_chan_rx_ops(dfs_rx_ops);
903 register_precac_auto_chan_rx_ops_freq(dfs_rx_ops);
904 register_dfs_rx_ops_for_freq(dfs_rx_ops);
905 register_rcac_dfs_rx_ops(dfs_rx_ops);
906 register_agile_dfs_rx_ops(dfs_rx_ops);
907 register_dfs_chan_postnol_rx_ops(dfs_rx_ops);
908 register_dfs_bw_expand_rx_ops(dfs_rx_ops);
909 register_dfs_puncture_rx_ops(dfs_rx_ops);
910
911 return QDF_STATUS_SUCCESS;
912 }
913 #else
914 static QDF_STATUS
wlan_lmac_if_umac_dfs_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)915 wlan_lmac_if_umac_dfs_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
916 {
917 return QDF_STATUS_SUCCESS;
918 }
919 #endif
920
921 #ifdef FEATURE_WLAN_TDLS
922 static QDF_STATUS
wlan_lmac_if_umac_tdls_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)923 wlan_lmac_if_umac_tdls_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
924 {
925 rx_ops->tdls_rx_ops.tdls_ev_handler = tgt_tdls_event_handler;
926
927 return QDF_STATUS_SUCCESS;
928 }
929 #else
930 static QDF_STATUS
wlan_lmac_if_umac_tdls_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)931 wlan_lmac_if_umac_tdls_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
932 {
933 return QDF_STATUS_SUCCESS;
934 }
935 #endif
936
937 #ifdef WLAN_SUPPORT_GREEN_AP
938 static QDF_STATUS
wlan_lmac_if_umac_green_ap_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)939 wlan_lmac_if_umac_green_ap_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
940 {
941 rx_ops->green_ap_rx_ops.is_ps_enabled = wlan_green_ap_is_ps_enabled;
942 rx_ops->green_ap_rx_ops.is_dbg_print_enabled =
943 ucfg_green_ap_get_debug_prints;
944 rx_ops->green_ap_rx_ops.ps_set = ucfg_green_ap_set_ps_config;
945 rx_ops->green_ap_rx_ops.ps_get = ucfg_green_ap_get_ps_config;
946 rx_ops->green_ap_rx_ops.suspend_handle = wlan_green_ap_suspend_handle;
947
948 return QDF_STATUS_SUCCESS;
949 }
950 #else
951 static QDF_STATUS
wlan_lmac_if_umac_green_ap_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)952 wlan_lmac_if_umac_green_ap_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
953 {
954 return QDF_STATUS_SUCCESS;
955 }
956 #endif
957
958 #ifdef QCA_WIFI_FTM
959 static QDF_STATUS
wlan_lmac_if_umac_ftm_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)960 wlan_lmac_if_umac_ftm_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
961 {
962 struct wlan_lmac_if_ftm_rx_ops *ftm_rx_ops;
963
964 ftm_rx_ops = &rx_ops->ftm_rx_ops;
965
966 ftm_rx_ops->ftm_ev_handler = wlan_ftm_process_utf_event;
967
968 return QDF_STATUS_SUCCESS;
969 }
970 #else
971 static QDF_STATUS
wlan_lmac_if_umac_ftm_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)972 wlan_lmac_if_umac_ftm_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
973 {
974 return QDF_STATUS_SUCCESS;
975 }
976 #endif
977
978 #ifdef WLAN_FEATURE_11BE_MLO
979 #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
980 static inline void
wlan_lmac_if_mlo_rx_link_switch_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)981 wlan_lmac_if_mlo_rx_link_switch_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
982 {
983 rx_ops->mlo_rx_ops.mlo_link_switch_request_handler =
984 mlo_mgr_link_switch_request_params;
985 rx_ops->mlo_rx_ops.mlo_link_state_switch_event_handler =
986 mlo_mgr_link_state_switch_info_handler;
987 }
988 #else
989 static inline void
wlan_lmac_if_mlo_rx_link_switch_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)990 wlan_lmac_if_mlo_rx_link_switch_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
991 {
992 }
993 #endif /* WLAN_FEATURE_11BE_MLO_ADV_FEATURE */
994
995 /**
996 * wlan_lmac_if_mlo_mgr_rx_ops_register() - API to register mlo mgr Rx Ops
997 * @rx_ops: pointer to lmac rx ops
998 *
999 * This API will be used to register function pointers for FW events
1000 *
1001 * Return: void
1002 */
1003 static void
wlan_lmac_if_mlo_mgr_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)1004 wlan_lmac_if_mlo_mgr_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
1005 {
1006 /* register handler for received mlo related events */
1007 rx_ops->mlo_rx_ops.process_link_set_active_resp =
1008 mlo_process_link_set_active_resp;
1009 rx_ops->mlo_rx_ops.process_mlo_vdev_tid_to_link_map_event =
1010 wlan_mlo_vdev_tid_to_link_map_event;
1011 rx_ops->mlo_rx_ops.process_mlo_link_state_info_event =
1012 wlan_handle_ml_link_state_info_event;
1013 rx_ops->mlo_rx_ops.mlo_link_disable_request_handler =
1014 wlan_mlo_link_disable_request_handler;
1015
1016 wlan_lmac_if_mlo_rx_link_switch_ops_register(rx_ops);
1017 }
1018 #else
1019 static void
wlan_lmac_if_mlo_mgr_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)1020 wlan_lmac_if_mlo_mgr_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
1021 {
1022 }
1023 #endif /* WLAN_FEATURE_11BE_MLO */
1024
1025 #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_TWT_CONV_SUPPORTED)
1026 static
wlan_lmac_if_twt_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)1027 void wlan_lmac_if_twt_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
1028 {
1029 tgt_twt_register_rx_ops(rx_ops);
1030 }
1031 #else
1032 static
wlan_lmac_if_twt_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)1033 void wlan_lmac_if_twt_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
1034 {
1035 }
1036 #endif /* WLAN_SUPPORT_TWT && WLAN_TWT_CONV_SUPPORTED */
1037
1038 #ifdef WLAN_FEATURE_DBAM_CONFIG
1039 static void
wlan_lmac_if_dbam_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)1040 wlan_lmac_if_dbam_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
1041 {
1042 rx_ops->dbam_rx_ops.dbam_resp_event = target_if_dbam_process_event;
1043 }
1044 #else
1045 static void
wlan_lmac_if_dbam_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)1046 wlan_lmac_if_dbam_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
1047 {
1048 }
1049 #endif /* WLAN_FEATURE_DBAM_CONFIG */
1050
1051 /**
1052 * wlan_lmac_if_umac_rx_ops_register() - UMAC rx handler register
1053 * @rx_ops: Pointer to rx_ops structure to be populated
1054 *
1055 * Register umac RX callabacks which will be called by DA/OL/WMA/WMI
1056 *
1057 * Return: QDF_STATUS_SUCCESS - in case of success
1058 */
1059 QDF_STATUS
wlan_lmac_if_umac_rx_ops_register(struct wlan_lmac_if_rx_ops * rx_ops)1060 wlan_lmac_if_umac_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
1061 {
1062 /* Component specific public api's to be called to register
1063 * respective callbacks
1064 * Ex: rx_ops->fp = function;
1065 */
1066
1067 if (!rx_ops) {
1068 qdf_print("lmac if rx ops pointer is NULL");
1069 return QDF_STATUS_E_INVAL;
1070 }
1071
1072 wlan_lmac_if_mgmt_txrx_rx_ops_register(rx_ops);
1073
1074 /* scan rx ops */
1075 rx_ops->scan.scan_ev_handler = tgt_scan_event_handler;
1076 rx_ops->scan.scan_set_max_active_scans = tgt_scan_set_max_active_scans;
1077
1078 wlan_lmac_if_atf_rx_ops_register(rx_ops);
1079
1080 wlan_lmac_if_cp_stats_rx_ops_register(rx_ops);
1081
1082 wlan_target_if_dcs_rx_ops_register(rx_ops);
1083
1084 wlan_lmac_if_sa_api_rx_ops_register(rx_ops);
1085
1086 wlan_lmac_if_cfr_rx_ops_register(rx_ops);
1087
1088 wlan_lmac_if_crypto_rx_ops_register(rx_ops);
1089 /* wifi_pos rx ops */
1090 wlan_lmac_if_umac_rx_ops_register_wifi_pos(rx_ops);
1091
1092 /* tdls rx ops */
1093 wlan_lmac_if_umac_tdls_rx_ops_register(rx_ops);
1094
1095 wlan_lmac_if_umac_reg_rx_ops_register(rx_ops);
1096
1097 /* p2p rx ops */
1098 wlan_lmac_if_umac_rx_ops_register_p2p(rx_ops);
1099
1100 /* DFS rx_ops */
1101 wlan_lmac_if_umac_dfs_rx_ops_register(rx_ops);
1102
1103 wlan_lmac_if_umac_green_ap_rx_ops_register(rx_ops);
1104
1105 /* FTM rx_ops */
1106 wlan_lmac_if_umac_ftm_rx_ops_register(rx_ops);
1107
1108 /* FILS Discovery */
1109 wlan_lmac_if_fd_rx_ops_register(rx_ops);
1110
1111 /* MLME rx_ops */
1112 tgt_vdev_mgr_rx_ops_register(rx_ops);
1113
1114 wlan_lmac_if_mlo_mgr_rx_ops_register(rx_ops);
1115
1116 wlan_lmac_if_twt_rx_ops_register(rx_ops);
1117
1118 wlan_lmac_if_dbam_rx_ops_register(rx_ops);
1119
1120 return QDF_STATUS_SUCCESS;
1121 }
1122
wlan_lmac_if_set_umac_txops_registration_cb(QDF_STATUS (* handler)(struct wlan_lmac_if_tx_ops *))1123 QDF_STATUS wlan_lmac_if_set_umac_txops_registration_cb(QDF_STATUS (*handler)
1124 (struct wlan_lmac_if_tx_ops *))
1125 {
1126 wlan_lmac_if_umac_tx_ops_register = handler;
1127 return QDF_STATUS_SUCCESS;
1128 }
1129 qdf_export_symbol(wlan_lmac_if_set_umac_txops_registration_cb);
1130
wlan_lmac_if_set_umac_crypto_rxpn_ops_registration_cb(QDF_STATUS (* handler)(struct wlan_lmac_if_rx_ops *))1131 QDF_STATUS wlan_lmac_if_set_umac_crypto_rxpn_ops_registration_cb(
1132 QDF_STATUS (*handler)(struct wlan_lmac_if_rx_ops *))
1133 {
1134 wlan_lmac_if_umac_crypto_rxpn_ops_register = handler;
1135 return QDF_STATUS_SUCCESS;
1136 }
1137 qdf_export_symbol(wlan_lmac_if_set_umac_crypto_rxpn_ops_registration_cb);
1138