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