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_update_buf_held = tgt_atf_update_buf_held; 118 atf_rx_ops->atf_get_ssidgroup = tgt_atf_get_ssidgroup; 119 atf_rx_ops->atf_get_vdev_ac_blk_cnt = tgt_atf_get_vdev_ac_blk_cnt; 120 atf_rx_ops->atf_get_peer_blk_txbitmap = tgt_atf_get_peer_blk_txbitmap; 121 atf_rx_ops->atf_get_vdev_blk_txtraffic = tgt_atf_get_vdev_blk_txtraffic; 122 atf_rx_ops->atf_get_sched = tgt_atf_get_sched; 123 atf_rx_ops->atf_get_tx_tokens = tgt_atf_get_tx_tokens; 124 atf_rx_ops->atf_account_subgroup_txtokens = 125 tgt_atf_account_subgroup_txtokens; 126 atf_rx_ops->atf_adjust_subgroup_txtokens = 127 tgt_atf_adjust_subgroup_txtokens; 128 atf_rx_ops->atf_get_subgroup_airtime = tgt_atf_get_subgroup_airtime; 129 atf_rx_ops->atf_subgroup_free_buf = tgt_atf_subgroup_free_buf; 130 atf_rx_ops->atf_update_subgroup_tidstate = 131 tgt_atf_update_subgroup_tidstate; 132 atf_rx_ops->atf_buf_distribute = tgt_atf_buf_distribute; 133 atf_rx_ops->atf_get_shadow_alloted_tx_tokens = 134 tgt_atf_get_shadow_alloted_tx_tokens; 135 atf_rx_ops->atf_get_txtokens_common = tgt_atf_get_txtokens_common; 136 atf_rx_ops->atf_get_peer_stats = tgt_atf_get_peer_stats; 137 atf_rx_ops->atf_get_token_allocated = tgt_atf_get_token_allocated; 138 atf_rx_ops->atf_get_token_utilized = tgt_atf_get_token_utilized; 139 140 atf_rx_ops->atf_set_sched = tgt_atf_set_sched; 141 atf_rx_ops->atf_set_fmcap = tgt_atf_set_fmcap; 142 atf_rx_ops->atf_set_obss_scale = tgt_atf_set_obss_scale; 143 atf_rx_ops->atf_set_msdu_desc = tgt_atf_set_msdu_desc; 144 atf_rx_ops->atf_set_max_vdevs = tgt_atf_set_max_vdevs; 145 atf_rx_ops->atf_set_peers = tgt_atf_set_peers; 146 atf_rx_ops->atf_set_peer_stats = tgt_atf_set_peer_stats; 147 atf_rx_ops->atf_set_vdev_blk_txtraffic = tgt_atf_set_vdev_blk_txtraffic; 148 atf_rx_ops->atf_peer_blk_txtraffic = tgt_atf_peer_blk_txtraffic; 149 atf_rx_ops->atf_peer_unblk_txtraffic = tgt_atf_peer_unblk_txtraffic; 150 atf_rx_ops->atf_set_token_allocated = tgt_atf_set_token_allocated; 151 atf_rx_ops->atf_set_token_utilized = tgt_atf_set_token_utilized; 152 } 153 #else 154 static void 155 wlan_lmac_if_atf_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 156 { 157 } 158 #endif 159 160 #ifdef WLAN_SUPPORT_FILS 161 static void 162 wlan_lmac_if_fd_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 163 { 164 struct wlan_lmac_if_fd_rx_ops *fd_rx_ops = &rx_ops->fd_rx_ops; 165 166 fd_rx_ops->fd_is_fils_enable = tgt_fd_is_fils_enable; 167 fd_rx_ops->fd_alloc = tgt_fd_alloc; 168 fd_rx_ops->fd_stop = tgt_fd_stop; 169 fd_rx_ops->fd_free = tgt_fd_free; 170 fd_rx_ops->fd_get_valid_fd_period = tgt_fd_get_valid_fd_period; 171 fd_rx_ops->fd_swfda_handler = tgt_fd_swfda_handler; 172 } 173 #else 174 static void 175 wlan_lmac_if_fd_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 176 { 177 } 178 #endif 179 180 #ifdef WLAN_SA_API_ENABLE 181 /** 182 * wlan_lmac_if_sa_api_rx_ops_register() - Function to register SA_API RX ops. 183 */ 184 static void 185 wlan_lmac_if_sa_api_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 186 { 187 struct wlan_lmac_if_sa_api_rx_ops *sa_api_rx_ops = &rx_ops->sa_api_rx_ops; 188 189 /* SA API rx ops */ 190 sa_api_rx_ops->sa_api_get_sa_supported = tgt_sa_api_get_sa_supported; 191 sa_api_rx_ops->sa_api_get_validate_sw = tgt_sa_api_get_validate_sw; 192 sa_api_rx_ops->sa_api_enable_sa = tgt_sa_api_enable_sa; 193 sa_api_rx_ops->sa_api_get_sa_enable = tgt_sa_api_get_sa_enable; 194 195 sa_api_rx_ops->sa_api_peer_assoc_hanldler = tgt_sa_api_peer_assoc_hanldler; 196 sa_api_rx_ops->sa_api_update_tx_feedback = tgt_sa_api_update_tx_feedback; 197 sa_api_rx_ops->sa_api_update_rx_feedback = tgt_sa_api_update_rx_feedback; 198 199 sa_api_rx_ops->sa_api_ucfg_set_param = tgt_sa_api_ucfg_set_param; 200 sa_api_rx_ops->sa_api_ucfg_get_param = tgt_sa_api_ucfg_get_param; 201 202 sa_api_rx_ops->sa_api_is_tx_feedback_enabled = tgt_sa_api_is_tx_feedback_enabled; 203 sa_api_rx_ops->sa_api_is_rx_feedback_enabled = tgt_sa_api_is_rx_feedback_enabled; 204 205 sa_api_rx_ops->sa_api_convert_rate_2g = tgt_sa_api_convert_rate_2g; 206 sa_api_rx_ops->sa_api_convert_rate_5g = tgt_sa_api_convert_rate_5g; 207 sa_api_rx_ops->sa_api_get_sa_mode = tgt_sa_api_get_sa_mode; 208 209 sa_api_rx_ops->sa_api_get_beacon_txantenna = tgt_sa_api_get_beacon_txantenna; 210 sa_api_rx_ops->sa_api_cwm_action = tgt_sa_api_cwm_action; 211 } 212 #else 213 static void 214 wlan_lmac_if_sa_api_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 215 { 216 } 217 #endif 218 219 220 #ifdef WLAN_CONV_CRYPTO_SUPPORTED 221 static void 222 wlan_lmac_if_crypto_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 223 { 224 wlan_crypto_register_crypto_rx_ops(&rx_ops->crypto_rx_ops); 225 } 226 #else 227 static void 228 wlan_lmac_if_crypto_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 229 { 230 } 231 #endif 232 233 #ifdef WIFI_POS_CONVERGED 234 static void wlan_lmac_if_umac_rx_ops_register_wifi_pos( 235 struct wlan_lmac_if_rx_ops *rx_ops) 236 { 237 target_if_wifi_pos_register_rx_ops(rx_ops); 238 } 239 #else 240 static void wlan_lmac_if_umac_rx_ops_register_wifi_pos( 241 struct wlan_lmac_if_rx_ops *rx_ops) 242 { 243 } 244 #endif /* WIFI_POS_CONVERGED */ 245 246 #ifdef WLAN_FEATURE_NAN_CONVERGENCE 247 static void wlan_lmac_if_register_nan_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops) 248 { 249 target_if_nan_register_rx_ops(rx_ops); 250 } 251 #else 252 static void wlan_lmac_if_register_nan_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops) 253 { 254 } 255 #endif /* WLAN_FEATURE_NAN_CONVERGENCE */ 256 257 static void wlan_lmac_if_umac_reg_rx_ops_register( 258 struct wlan_lmac_if_rx_ops *rx_ops) 259 { 260 rx_ops->reg_rx_ops.master_list_handler = 261 tgt_reg_process_master_chan_list; 262 263 rx_ops->reg_rx_ops.reg_11d_new_cc_handler = 264 tgt_reg_process_11d_new_country; 265 266 rx_ops->reg_rx_ops.reg_set_regdb_offloaded = 267 tgt_reg_set_regdb_offloaded; 268 269 rx_ops->reg_rx_ops.reg_set_11d_offloaded = 270 tgt_reg_set_11d_offloaded; 271 272 rx_ops->reg_rx_ops.get_dfs_region = 273 wlan_reg_get_dfs_region; 274 275 rx_ops->reg_rx_ops.reg_ch_avoid_event_handler = 276 tgt_reg_process_ch_avoid_event; 277 278 rx_ops->reg_rx_ops.reg_freq_to_chan = 279 wlan_reg_freq_to_chan; 280 281 rx_ops->reg_rx_ops.reg_set_chan_144 = 282 ucfg_reg_modify_chan_144; 283 284 rx_ops->reg_rx_ops.reg_get_chan_144 = 285 ucfg_reg_get_en_chan_144; 286 287 rx_ops->reg_rx_ops.reg_program_default_cc = 288 ucfg_reg_program_default_cc; 289 290 rx_ops->reg_rx_ops.reg_get_current_regdomain = 291 wlan_reg_get_curr_regdomain; 292 } 293 294 #ifdef CONVERGED_P2P_ENABLE 295 #ifdef FEATURE_P2P_LISTEN_OFFLOAD 296 static void wlan_lmac_if_umac_rx_ops_register_p2p( 297 struct wlan_lmac_if_rx_ops *rx_ops) 298 { 299 rx_ops->p2p.lo_ev_handler = tgt_p2p_lo_event_cb; 300 rx_ops->p2p.noa_ev_handler = tgt_p2p_noa_event_cb; 301 } 302 #else 303 static void wlan_lmac_if_umac_rx_ops_register_p2p( 304 struct wlan_lmac_if_rx_ops *rx_ops) 305 { 306 rx_ops->p2p.noa_ev_handler = tgt_p2p_noa_event_cb; 307 } 308 #endif 309 #else 310 static void wlan_lmac_if_umac_rx_ops_register_p2p( 311 struct wlan_lmac_if_rx_ops *rx_ops) 312 { 313 } 314 #endif 315 316 #ifdef DFS_COMPONENT_ENABLE 317 #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT 318 static inline void 319 register_precac_auto_chan_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops) 320 { 321 if (!rx_ops) 322 return; 323 rx_ops->dfs_set_precac_intermediate_chan = 324 ucfg_dfs_set_precac_intermediate_chan; 325 rx_ops->dfs_get_precac_intermediate_chan = 326 ucfg_dfs_get_precac_intermediate_chan; 327 rx_ops->dfs_get_precac_chan_state = ucfg_dfs_get_precac_chan_state; 328 } 329 #else 330 static inline void 331 register_precac_auto_chan_rx_ops(struct wlan_lmac_if_dfs_rx_ops *rx_ops) 332 { 333 } 334 #endif 335 336 static QDF_STATUS 337 wlan_lmac_if_umac_dfs_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 338 { 339 struct wlan_lmac_if_dfs_rx_ops *dfs_rx_ops; 340 341 dfs_rx_ops = &rx_ops->dfs_rx_ops; 342 343 dfs_rx_ops->dfs_get_radars = tgt_dfs_get_radars; 344 dfs_rx_ops->dfs_process_phyerr = tgt_dfs_process_phyerr; 345 dfs_rx_ops->dfs_destroy_object = tgt_dfs_destroy_object; 346 dfs_rx_ops->dfs_radar_enable = tgt_dfs_radar_enable; 347 dfs_rx_ops->dfs_is_radar_enabled = tgt_dfs_is_radar_enabled; 348 dfs_rx_ops->dfs_control = tgt_dfs_control; 349 dfs_rx_ops->dfs_is_precac_timer_running = 350 tgt_dfs_is_precac_timer_running; 351 dfs_rx_ops->dfs_find_vht80_chan_for_precac = 352 tgt_dfs_find_vht80_chan_for_precac; 353 dfs_rx_ops->dfs_start_precac_timer = utils_dfs_start_precac_timer; 354 dfs_rx_ops->dfs_cancel_precac_timer = utils_dfs_cancel_precac_timer; 355 dfs_rx_ops->dfs_override_precac_timeout = 356 ucfg_dfs_override_precac_timeout; 357 dfs_rx_ops->dfs_set_precac_enable = ucfg_dfs_set_precac_enable; 358 dfs_rx_ops->dfs_get_precac_enable = ucfg_dfs_get_precac_enable; 359 dfs_rx_ops->dfs_get_override_precac_timeout = 360 ucfg_dfs_get_override_precac_timeout; 361 dfs_rx_ops->dfs_set_current_channel = tgt_dfs_set_current_channel; 362 dfs_rx_ops->dfs_process_radar_ind = tgt_dfs_process_radar_ind; 363 dfs_rx_ops->dfs_dfs_cac_complete_ind = tgt_dfs_cac_complete; 364 dfs_rx_ops->dfs_stop = tgt_dfs_stop; 365 dfs_rx_ops->dfs_process_phyerr_filter_offload = 366 tgt_dfs_process_phyerr_filter_offload; 367 dfs_rx_ops->dfs_is_phyerr_filter_offload = 368 tgt_dfs_is_phyerr_filter_offload; 369 dfs_rx_ops->dfs_action_on_status = tgt_dfs_action_on_status_from_fw; 370 dfs_rx_ops->dfs_override_status_timeout = 371 ucfg_dfs_set_override_status_timeout; 372 dfs_rx_ops->dfs_get_override_status_timeout = 373 ucfg_dfs_get_override_status_timeout; 374 dfs_rx_ops->dfs_reset_spoof_test = 375 tgt_dfs_reset_spoof_test; 376 377 register_precac_auto_chan_rx_ops(dfs_rx_ops); 378 379 return QDF_STATUS_SUCCESS; 380 } 381 #else 382 static QDF_STATUS 383 wlan_lmac_if_umac_dfs_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 384 { 385 return QDF_STATUS_SUCCESS; 386 } 387 #endif 388 389 #ifdef CONVERGED_TDLS_ENABLE 390 static QDF_STATUS 391 wlan_lmac_if_umac_tdls_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 392 { 393 rx_ops->tdls_rx_ops.tdls_ev_handler = tgt_tdls_event_handler; 394 395 return QDF_STATUS_SUCCESS; 396 } 397 #else 398 static QDF_STATUS 399 wlan_lmac_if_umac_tdls_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 400 { 401 return QDF_STATUS_SUCCESS; 402 } 403 #endif 404 405 #ifdef WLAN_SUPPORT_GREEN_AP 406 static QDF_STATUS 407 wlan_lmac_if_umac_green_ap_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 408 { 409 rx_ops->green_ap_rx_ops.is_ps_enabled = wlan_green_ap_is_ps_enabled; 410 rx_ops->green_ap_rx_ops.is_dbg_print_enabled = 411 ucfg_green_ap_get_debug_prints; 412 rx_ops->green_ap_rx_ops.ps_set = ucfg_green_ap_set_ps_config; 413 rx_ops->green_ap_rx_ops.ps_get = ucfg_green_ap_get_ps_config; 414 rx_ops->green_ap_rx_ops.suspend_handle = wlan_green_ap_suspend_handle; 415 416 return QDF_STATUS_SUCCESS; 417 } 418 #else 419 static QDF_STATUS 420 wlan_lmac_if_umac_green_ap_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 421 { 422 return QDF_STATUS_SUCCESS; 423 } 424 #endif 425 426 #ifdef QCA_WIFI_FTM 427 static QDF_STATUS 428 wlan_lmac_if_umac_ftm_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 429 { 430 struct wlan_lmac_if_ftm_rx_ops *ftm_rx_ops; 431 432 ftm_rx_ops = &rx_ops->ftm_rx_ops; 433 434 ftm_rx_ops->ftm_ev_handler = wlan_ftm_process_utf_event; 435 436 return QDF_STATUS_SUCCESS; 437 } 438 #else 439 static QDF_STATUS 440 wlan_lmac_if_umac_ftm_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 441 { 442 return QDF_STATUS_SUCCESS; 443 } 444 #endif 445 /** 446 * wlan_lmac_if_umac_rx_ops_register() - UMAC rx handler register 447 * @rx_ops: Pointer to rx_ops structure to be populated 448 * 449 * Register umac RX callabacks which will be called by DA/OL/WMA/WMI 450 * 451 * Return: QDF_STATUS_SUCCESS - in case of success 452 */ 453 QDF_STATUS 454 wlan_lmac_if_umac_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops) 455 { 456 /* Component specific public api's to be called to register 457 * respective callbacks 458 * Ex: rx_ops->fp = function; 459 */ 460 struct wlan_lmac_if_mgmt_txrx_rx_ops *mgmt_txrx_rx_ops; 461 462 if (!rx_ops) { 463 qdf_print("%s: lmac if rx ops pointer is NULL", __func__); 464 return QDF_STATUS_E_INVAL; 465 } 466 467 /* mgmt txrx rx ops */ 468 mgmt_txrx_rx_ops = &rx_ops->mgmt_txrx_rx_ops; 469 470 mgmt_txrx_rx_ops->mgmt_tx_completion_handler = 471 tgt_mgmt_txrx_tx_completion_handler; 472 mgmt_txrx_rx_ops->mgmt_rx_frame_handler = 473 tgt_mgmt_txrx_rx_frame_handler; 474 mgmt_txrx_rx_ops->mgmt_txrx_get_nbuf_from_desc_id = 475 tgt_mgmt_txrx_get_nbuf_from_desc_id; 476 mgmt_txrx_rx_ops->mgmt_txrx_get_peer_from_desc_id = 477 tgt_mgmt_txrx_get_peer_from_desc_id; 478 mgmt_txrx_rx_ops->mgmt_txrx_get_vdev_id_from_desc_id = 479 tgt_mgmt_txrx_get_vdev_id_from_desc_id; 480 mgmt_txrx_rx_ops->mgmt_txrx_get_free_desc_pool_count = 481 tgt_mgmt_txrx_get_free_desc_pool_count; 482 483 /* scan rx ops */ 484 rx_ops->scan.scan_ev_handler = tgt_scan_event_handler; 485 rx_ops->scan.scan_set_max_active_scans = tgt_scan_set_max_active_scans; 486 487 wlan_lmac_if_atf_rx_ops_register(rx_ops); 488 489 wlan_lmac_if_cp_stats_rx_ops_register(rx_ops); 490 491 wlan_lmac_if_sa_api_rx_ops_register(rx_ops); 492 493 wlan_lmac_if_crypto_rx_ops_register(rx_ops); 494 /* wifi_pos rx ops */ 495 wlan_lmac_if_umac_rx_ops_register_wifi_pos(rx_ops); 496 497 /* tdls rx ops */ 498 wlan_lmac_if_umac_tdls_rx_ops_register(rx_ops); 499 500 wlan_lmac_if_register_nan_rx_ops(rx_ops); 501 502 wlan_lmac_if_umac_reg_rx_ops_register(rx_ops); 503 504 /* p2p rx ops */ 505 wlan_lmac_if_umac_rx_ops_register_p2p(rx_ops); 506 507 /* DFS rx_ops */ 508 wlan_lmac_if_umac_dfs_rx_ops_register(rx_ops); 509 510 wlan_lmac_if_umac_green_ap_rx_ops_register(rx_ops); 511 512 /* FTM rx_ops */ 513 wlan_lmac_if_umac_ftm_rx_ops_register(rx_ops); 514 515 /* FILS Discovery */ 516 wlan_lmac_if_fd_rx_ops_register(rx_ops); 517 518 return QDF_STATUS_SUCCESS; 519 } 520 521 /** 522 * wlan_lmac_if_set_umac_txops_registration_cb() - tx registration 523 * callback assignment 524 * @dev_type: Dev type can be either Direct attach or Offload 525 * @handler: handler to be called for LMAC tx ops registration 526 * 527 * API to assign appropriate tx registration callback handler based on the 528 * device type(Offload or Direct attach) 529 * 530 * Return: QDF_STATUS_SUCCESS - in case of success 531 */ 532 QDF_STATUS wlan_lmac_if_set_umac_txops_registration_cb(QDF_STATUS (*handler) 533 (struct wlan_lmac_if_tx_ops *)) 534 { 535 wlan_lmac_if_umac_tx_ops_register = handler; 536 return QDF_STATUS_SUCCESS; 537 } 538 qdf_export_symbol(wlan_lmac_if_set_umac_txops_registration_cb); 539 540