xref: /wlan-dirver/qca-wifi-host-cmn/umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c (revision d78dedc9dd8c4ee677ac1649d1d42f2a7c3cc1b7)
1 /*
2  * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
3  *
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 #endif /* WIFI_POS_CONVERGED */
37 #ifdef WLAN_FEATURE_NAN_CONVERGENCE
38 #include "target_if_nan.h"
39 #endif /* WLAN_FEATURE_NAN_CONVERGENCE */
40 #include "wlan_reg_tgt_api.h"
41 #ifdef CONVERGED_P2P_ENABLE
42 #include "wlan_p2p_tgt_api.h"
43 #endif
44 #ifdef CONVERGED_TDLS_ENABLE
45 #include "wlan_tdls_tgt_api.h"
46 #endif
47 
48 #ifdef WLAN_CONV_CRYPTO_SUPPORTED
49 #include "wlan_crypto_global_api.h"
50 #endif
51 #ifdef DFS_COMPONENT_ENABLE
52 #include <wlan_dfs_tgt_api.h>
53 #include <wlan_dfs_utils_api.h>
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 #endif /* QCA_SUPPORT_CP_STATS */
69 
70 /* Function pointer for OL/WMA specific UMAC tx_ops
71  * registration.
72  */
73 QDF_STATUS (*wlan_lmac_if_umac_tx_ops_register)
74 				(struct wlan_lmac_if_tx_ops *tx_ops);
75 qdf_export_symbol(wlan_lmac_if_umac_tx_ops_register);
76 
77 #ifdef QCA_SUPPORT_CP_STATS
78 /**
79  * wlan_lmac_if_cp_stats_rx_ops_register() - API to register cp stats Rx Ops
80  * @rx_ops:	pointer to lmac rx ops
81  *
82  * This API will be used to register function pointers for FW events
83  *
84  * Return: void
85  */
86 static void
87 wlan_lmac_if_cp_stats_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
88 {
89 	tgt_cp_stats_register_rx_ops(rx_ops);
90 }
91 #else
92 static void
93 wlan_lmac_if_cp_stats_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
94 {
95 }
96 #endif /* QCA_SUPPORT_CP_STATS */
97 
98 #ifdef WLAN_ATF_ENABLE
99 /**
100  * wlan_lmac_if_atf_rx_ops_register() - Function to register ATF RX ops.
101  */
102 static void
103 wlan_lmac_if_atf_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
104 {
105 	struct wlan_lmac_if_atf_rx_ops *atf_rx_ops = &rx_ops->atf_rx_ops;
106 
107 	/* ATF rx ops */
108 	atf_rx_ops->atf_get_atf_commit = tgt_atf_get_atf_commit;
109 	atf_rx_ops->atf_get_fmcap = tgt_atf_get_fmcap;
110 	atf_rx_ops->atf_get_obss_scale = tgt_atf_get_obss_scale;
111 	atf_rx_ops->atf_get_mode = tgt_atf_get_mode;
112 	atf_rx_ops->atf_get_msdu_desc = tgt_atf_get_msdu_desc;
113 	atf_rx_ops->atf_get_max_vdevs = tgt_atf_get_max_vdevs;
114 	atf_rx_ops->atf_get_peers = tgt_atf_get_peers;
115 	atf_rx_ops->atf_get_tput_based = tgt_atf_get_tput_based;
116 	atf_rx_ops->atf_get_logging = tgt_atf_get_logging;
117 	atf_rx_ops->atf_get_txbuf_share = tgt_atf_get_txbuf_share;
118 	atf_rx_ops->atf_get_txbuf_max = tgt_atf_get_txbuf_max;
119 	atf_rx_ops->atf_get_txbuf_min = tgt_atf_get_txbuf_min;
120 	atf_rx_ops->atf_get_ssidgroup = tgt_atf_get_ssidgroup;
121 	atf_rx_ops->atf_get_tx_block_count = tgt_atf_get_tx_block_count;
122 	atf_rx_ops->atf_get_peer_blk_txtraffic = tgt_atf_get_peer_blk_txtraffic;
123 	atf_rx_ops->atf_get_vdev_blk_txtraffic = tgt_atf_get_vdev_blk_txtraffic;
124 	atf_rx_ops->atf_get_sched = tgt_atf_get_sched;
125 	atf_rx_ops->atf_get_tx_tokens = tgt_atf_get_tx_tokens;
126 	atf_rx_ops->atf_get_shadow_tx_tokens = tgt_atf_get_shadow_tx_tokens;
127 	atf_rx_ops->atf_get_shadow_alloted_tx_tokens =
128 					tgt_atf_get_shadow_alloted_tx_tokens;
129 	atf_rx_ops->atf_get_txtokens_common = tgt_atf_get_txtokens_common;
130 	atf_rx_ops->atf_get_peer_stats = tgt_atf_get_peer_stats;
131 	atf_rx_ops->atf_get_token_allocated = tgt_atf_get_token_allocated;
132 	atf_rx_ops->atf_get_token_utilized = tgt_atf_get_token_utilized;
133 
134 	atf_rx_ops->atf_set_sched = tgt_atf_set_sched;
135 	atf_rx_ops->atf_set_fmcap = tgt_atf_set_fmcap;
136 	atf_rx_ops->atf_set_obss_scale = tgt_atf_set_obss_scale;
137 	atf_rx_ops->atf_set_mode = tgt_atf_set_mode;
138 	atf_rx_ops->atf_set_msdu_desc = tgt_atf_set_msdu_desc;
139 	atf_rx_ops->atf_set_max_vdevs = tgt_atf_set_max_vdevs;
140 	atf_rx_ops->atf_set_peers = tgt_atf_set_peers;
141 	atf_rx_ops->atf_set_peer_stats = tgt_atf_set_peer_stats;
142 	atf_rx_ops->atf_set_vdev_blk_txtraffic = tgt_atf_set_vdev_blk_txtraffic;
143 	atf_rx_ops->atf_set_peer_blk_txtraffic = tgt_atf_set_peer_blk_txtraffic;
144 	atf_rx_ops->atf_set_tx_block_count = tgt_atf_set_tx_block_count;
145 	atf_rx_ops->atf_set_token_allocated = tgt_atf_set_token_allocated;
146 	atf_rx_ops->atf_set_token_utilized = tgt_atf_set_token_utilized;
147 }
148 #else
149 static void
150 wlan_lmac_if_atf_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
151 {
152 }
153 #endif
154 
155 #ifdef WLAN_SUPPORT_FILS
156 static void
157 wlan_lmac_if_fd_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
158 {
159 	struct wlan_lmac_if_fd_rx_ops *fd_rx_ops = &rx_ops->fd_rx_ops;
160 
161 	fd_rx_ops->fd_is_fils_enable = tgt_fd_is_fils_enable;
162 	fd_rx_ops->fd_alloc = tgt_fd_alloc;
163 	fd_rx_ops->fd_stop = tgt_fd_stop;
164 	fd_rx_ops->fd_free = tgt_fd_free;
165 	fd_rx_ops->fd_get_valid_fd_period = tgt_fd_get_valid_fd_period;
166 	fd_rx_ops->fd_swfda_handler = tgt_fd_swfda_handler;
167 }
168 #else
169 static void
170 wlan_lmac_if_fd_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
171 {
172 }
173 #endif
174 
175 #ifdef WLAN_SA_API_ENABLE
176 /**
177  * wlan_lmac_if_sa_api_rx_ops_register() - Function to register SA_API RX ops.
178  */
179 static void
180 wlan_lmac_if_sa_api_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
181 {
182 	struct wlan_lmac_if_sa_api_rx_ops *sa_api_rx_ops = &rx_ops->sa_api_rx_ops;
183 
184 	/* SA API rx ops */
185 	sa_api_rx_ops->sa_api_get_sa_supported = tgt_sa_api_get_sa_supported;
186 	sa_api_rx_ops->sa_api_get_validate_sw  = tgt_sa_api_get_validate_sw;
187 	sa_api_rx_ops->sa_api_enable_sa        = tgt_sa_api_enable_sa;
188 	sa_api_rx_ops->sa_api_get_sa_enable    = tgt_sa_api_get_sa_enable;
189 
190 	sa_api_rx_ops->sa_api_peer_assoc_hanldler = tgt_sa_api_peer_assoc_hanldler;
191 	sa_api_rx_ops->sa_api_update_tx_feedback = tgt_sa_api_update_tx_feedback;
192 	sa_api_rx_ops->sa_api_update_rx_feedback = tgt_sa_api_update_rx_feedback;
193 
194 	sa_api_rx_ops->sa_api_ucfg_set_param = tgt_sa_api_ucfg_set_param;
195 	sa_api_rx_ops->sa_api_ucfg_get_param = tgt_sa_api_ucfg_get_param;
196 
197 	sa_api_rx_ops->sa_api_is_tx_feedback_enabled = tgt_sa_api_is_tx_feedback_enabled;
198 	sa_api_rx_ops->sa_api_is_rx_feedback_enabled = tgt_sa_api_is_rx_feedback_enabled;
199 
200 	sa_api_rx_ops->sa_api_convert_rate_2g = tgt_sa_api_convert_rate_2g;
201 	sa_api_rx_ops->sa_api_convert_rate_5g = tgt_sa_api_convert_rate_5g;
202 	sa_api_rx_ops->sa_api_get_sa_mode = tgt_sa_api_get_sa_mode;
203 
204 	sa_api_rx_ops->sa_api_get_beacon_txantenna = tgt_sa_api_get_beacon_txantenna;
205 	sa_api_rx_ops->sa_api_cwm_action = tgt_sa_api_cwm_action;
206 }
207 #else
208 static void
209 wlan_lmac_if_sa_api_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
210 {
211 }
212 #endif
213 
214 
215 #ifdef WLAN_CONV_CRYPTO_SUPPORTED
216 static void
217 wlan_lmac_if_crypto_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
218 {
219 	wlan_crypto_register_crypto_rx_ops(&rx_ops->crypto_rx_ops);
220 }
221 #else
222 static void
223 wlan_lmac_if_crypto_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
224 {
225 }
226 #endif
227 
228 #ifdef WIFI_POS_CONVERGED
229 static void wlan_lmac_if_umac_rx_ops_register_wifi_pos(
230 				struct wlan_lmac_if_rx_ops *rx_ops)
231 {
232 	target_if_wifi_pos_register_rx_ops(rx_ops);
233 }
234 #else
235 static void wlan_lmac_if_umac_rx_ops_register_wifi_pos(
236 				struct wlan_lmac_if_rx_ops *rx_ops)
237 {
238 }
239 #endif /* WIFI_POS_CONVERGED */
240 
241 #ifdef WLAN_FEATURE_NAN_CONVERGENCE
242 static void wlan_lmac_if_register_nan_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops)
243 {
244 	target_if_nan_register_rx_ops(rx_ops);
245 }
246 #else
247 static void wlan_lmac_if_register_nan_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops)
248 {
249 }
250 #endif /* WLAN_FEATURE_NAN_CONVERGENCE */
251 
252 static void wlan_lmac_if_umac_reg_rx_ops_register(
253 	struct wlan_lmac_if_rx_ops *rx_ops)
254 {
255 	rx_ops->reg_rx_ops.master_list_handler =
256 		tgt_reg_process_master_chan_list;
257 
258 	rx_ops->reg_rx_ops.reg_11d_new_cc_handler =
259 		tgt_reg_process_11d_new_country;
260 
261 	rx_ops->reg_rx_ops.reg_set_regdb_offloaded =
262 		tgt_reg_set_regdb_offloaded;
263 
264 	rx_ops->reg_rx_ops.reg_set_11d_offloaded =
265 		tgt_reg_set_11d_offloaded;
266 
267 	rx_ops->reg_rx_ops.get_dfs_region =
268 		wlan_reg_get_dfs_region;
269 
270 	rx_ops->reg_rx_ops.reg_ch_avoid_event_handler =
271 		tgt_reg_process_ch_avoid_event;
272 
273 	rx_ops->reg_rx_ops.reg_freq_to_chan =
274 		wlan_reg_freq_to_chan;
275 
276 	rx_ops->reg_rx_ops.reg_set_chan_144 =
277 		ucfg_reg_modify_chan_144;
278 
279 	rx_ops->reg_rx_ops.reg_get_chan_144 =
280 		ucfg_reg_get_en_chan_144;
281 
282 	rx_ops->reg_rx_ops.reg_program_default_cc =
283 		ucfg_reg_program_default_cc;
284 
285 	rx_ops->reg_rx_ops.reg_get_current_regdomain =
286 		wlan_reg_get_curr_regdomain;
287 }
288 
289 #ifdef CONVERGED_P2P_ENABLE
290 static void wlan_lmac_if_umac_rx_ops_register_p2p(
291 				struct wlan_lmac_if_rx_ops *rx_ops)
292 {
293 	rx_ops->p2p.lo_ev_handler = tgt_p2p_lo_event_cb;
294 	rx_ops->p2p.noa_ev_handler = tgt_p2p_noa_event_cb;
295 }
296 #else
297 static void wlan_lmac_if_umac_rx_ops_register_p2p(
298 				struct wlan_lmac_if_rx_ops *rx_ops)
299 {
300 }
301 #endif
302 
303 #ifdef DFS_COMPONENT_ENABLE
304 static QDF_STATUS
305 wlan_lmac_if_umac_dfs_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
306 {
307 	struct wlan_lmac_if_dfs_rx_ops *dfs_rx_ops;
308 
309 	dfs_rx_ops = &rx_ops->dfs_rx_ops;
310 
311 	dfs_rx_ops->dfs_get_radars = tgt_dfs_get_radars;
312 	dfs_rx_ops->dfs_process_phyerr = tgt_dfs_process_phyerr;
313 	dfs_rx_ops->dfs_destroy_object = tgt_dfs_destroy_object;
314 	dfs_rx_ops->dfs_radar_enable = tgt_dfs_radar_enable;
315 	dfs_rx_ops->dfs_is_radar_enabled = tgt_dfs_is_radar_enabled;
316 	dfs_rx_ops->dfs_control = tgt_dfs_control;
317 	dfs_rx_ops->dfs_is_precac_timer_running =
318 		tgt_dfs_is_precac_timer_running;
319 	dfs_rx_ops->dfs_find_vht80_chan_for_precac =
320 		tgt_dfs_find_vht80_chan_for_precac;
321 	dfs_rx_ops->dfs_cancel_precac_timer = utils_dfs_cancel_precac_timer;
322 	dfs_rx_ops->dfs_override_precac_timeout =
323 		ucfg_dfs_override_precac_timeout;
324 	dfs_rx_ops->dfs_set_precac_enable = ucfg_dfs_set_precac_enable;
325 	dfs_rx_ops->dfs_get_precac_enable = ucfg_dfs_get_precac_enable;
326 	dfs_rx_ops->dfs_get_override_precac_timeout =
327 		ucfg_dfs_get_override_precac_timeout;
328 	dfs_rx_ops->dfs_set_current_channel = tgt_dfs_set_current_channel;
329 	dfs_rx_ops->dfs_process_radar_ind = tgt_dfs_process_radar_ind;
330 	dfs_rx_ops->dfs_dfs_cac_complete_ind = tgt_dfs_cac_complete;
331 	dfs_rx_ops->dfs_stop = tgt_dfs_stop;
332 	dfs_rx_ops->dfs_process_phyerr_filter_offload =
333 		tgt_dfs_process_phyerr_filter_offload;
334 	dfs_rx_ops->dfs_is_phyerr_filter_offload =
335 		tgt_dfs_is_phyerr_filter_offload;
336 	dfs_rx_ops->dfs_action_on_status = tgt_dfs_action_on_status_from_fw;
337 	dfs_rx_ops->dfs_override_status_timeout =
338 		ucfg_dfs_set_override_status_timeout;
339 	dfs_rx_ops->dfs_get_override_status_timeout =
340 		ucfg_dfs_get_override_status_timeout;
341 	dfs_rx_ops->dfs_reset_spoof_test =
342 		tgt_dfs_reset_spoof_test;
343 
344 	return QDF_STATUS_SUCCESS;
345 }
346 #else
347 static QDF_STATUS
348 wlan_lmac_if_umac_dfs_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
349 {
350 	return QDF_STATUS_SUCCESS;
351 }
352 #endif
353 
354 #ifdef CONVERGED_TDLS_ENABLE
355 static QDF_STATUS
356 wlan_lmac_if_umac_tdls_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
357 {
358 	rx_ops->tdls_rx_ops.tdls_ev_handler = tgt_tdls_event_handler;
359 
360 	return QDF_STATUS_SUCCESS;
361 }
362 #else
363 static QDF_STATUS
364 wlan_lmac_if_umac_tdls_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
365 {
366 	return QDF_STATUS_SUCCESS;
367 }
368 #endif
369 
370 #ifdef WLAN_SUPPORT_GREEN_AP
371 static QDF_STATUS
372 wlan_lmac_if_umac_green_ap_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
373 {
374 	rx_ops->green_ap_rx_ops.is_ps_enabled = wlan_green_ap_is_ps_enabled;
375 	rx_ops->green_ap_rx_ops.is_dbg_print_enabled =
376 					ucfg_green_ap_get_debug_prints;
377 	rx_ops->green_ap_rx_ops.ps_set = ucfg_green_ap_set_ps_config;
378 	rx_ops->green_ap_rx_ops.ps_get = ucfg_green_ap_get_ps_config;
379 	rx_ops->green_ap_rx_ops.suspend_handle = wlan_green_ap_suspend_handle;
380 
381 	return QDF_STATUS_SUCCESS;
382 }
383 #else
384 static QDF_STATUS
385 wlan_lmac_if_umac_green_ap_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
386 {
387 	return QDF_STATUS_SUCCESS;
388 }
389 #endif
390 
391 static QDF_STATUS
392 wlan_lmac_if_umac_ftm_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
393 {
394 	struct wlan_lmac_if_ftm_rx_ops *ftm_rx_ops;
395 
396 	ftm_rx_ops = &rx_ops->ftm_rx_ops;
397 
398 	ftm_rx_ops->ftm_ev_handler = wlan_ftm_process_utf_event;
399 
400 	return QDF_STATUS_SUCCESS;
401 }
402 
403 /**
404  * wlan_lmac_if_umac_rx_ops_register() - UMAC rx handler register
405  * @rx_ops: Pointer to rx_ops structure to be populated
406  *
407  * Register umac RX callabacks which will be called by DA/OL/WMA/WMI
408  *
409  * Return: QDF_STATUS_SUCCESS - in case of success
410  */
411 QDF_STATUS
412 wlan_lmac_if_umac_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
413 {
414 	/* Component specific public api's to be called to register
415 	 * respective callbacks
416 	 * Ex: rx_ops->fp = function;
417 	 */
418 	struct wlan_lmac_if_mgmt_txrx_rx_ops *mgmt_txrx_rx_ops;
419 
420 	if (!rx_ops) {
421 		qdf_print("%s: lmac if rx ops pointer is NULL", __func__);
422 		return QDF_STATUS_E_INVAL;
423 	}
424 
425 	/* mgmt txrx rx ops */
426 	mgmt_txrx_rx_ops = &rx_ops->mgmt_txrx_rx_ops;
427 
428 	mgmt_txrx_rx_ops->mgmt_tx_completion_handler =
429 			tgt_mgmt_txrx_tx_completion_handler;
430 	mgmt_txrx_rx_ops->mgmt_rx_frame_handler =
431 			tgt_mgmt_txrx_rx_frame_handler;
432 	mgmt_txrx_rx_ops->mgmt_txrx_get_nbuf_from_desc_id =
433 			tgt_mgmt_txrx_get_nbuf_from_desc_id;
434 	mgmt_txrx_rx_ops->mgmt_txrx_get_peer_from_desc_id =
435 			tgt_mgmt_txrx_get_peer_from_desc_id;
436 	mgmt_txrx_rx_ops->mgmt_txrx_get_vdev_id_from_desc_id =
437 			tgt_mgmt_txrx_get_vdev_id_from_desc_id;
438 	mgmt_txrx_rx_ops->mgmt_txrx_get_free_desc_pool_count =
439 			tgt_mgmt_txrx_get_free_desc_pool_count;
440 
441 	/* scan rx ops */
442 	rx_ops->scan.scan_ev_handler = tgt_scan_event_handler;
443 	rx_ops->scan.scan_set_max_active_scans = tgt_scan_set_max_active_scans;
444 
445 	wlan_lmac_if_atf_rx_ops_register(rx_ops);
446 
447 	wlan_lmac_if_cp_stats_rx_ops_register(rx_ops);
448 
449 	wlan_lmac_if_sa_api_rx_ops_register(rx_ops);
450 
451 	wlan_lmac_if_crypto_rx_ops_register(rx_ops);
452 	/* wifi_pos rx ops */
453 	wlan_lmac_if_umac_rx_ops_register_wifi_pos(rx_ops);
454 
455 	/* tdls rx ops */
456 	wlan_lmac_if_umac_tdls_rx_ops_register(rx_ops);
457 
458 	wlan_lmac_if_register_nan_rx_ops(rx_ops);
459 
460 	wlan_lmac_if_umac_reg_rx_ops_register(rx_ops);
461 
462 	/* p2p rx ops */
463 	wlan_lmac_if_umac_rx_ops_register_p2p(rx_ops);
464 
465 	/* DFS rx_ops */
466 	wlan_lmac_if_umac_dfs_rx_ops_register(rx_ops);
467 
468 	wlan_lmac_if_umac_green_ap_rx_ops_register(rx_ops);
469 
470 	/* FTM rx_ops */
471 	wlan_lmac_if_umac_ftm_rx_ops_register(rx_ops);
472 
473 	/* FILS Discovery */
474 	wlan_lmac_if_fd_rx_ops_register(rx_ops);
475 
476 	return QDF_STATUS_SUCCESS;
477 }
478 
479 /**
480  * wlan_lmac_if_set_umac_txops_registration_cb() - tx registration
481  * callback assignment
482  * @dev_type: Dev type can be either Direct attach or Offload
483  * @handler: handler to be called for LMAC tx ops registration
484  *
485  * API to assign appropriate tx registration callback handler based on the
486  * device type(Offload or Direct attach)
487  *
488  * Return: QDF_STATUS_SUCCESS - in case of success
489  */
490 QDF_STATUS wlan_lmac_if_set_umac_txops_registration_cb(QDF_STATUS (*handler)
491 				(struct wlan_lmac_if_tx_ops *))
492 {
493 	wlan_lmac_if_umac_tx_ops_register = handler;
494 	return QDF_STATUS_SUCCESS;
495 }
496 qdf_export_symbol(wlan_lmac_if_set_umac_txops_registration_cb);
497 
498