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 * 6 * Permission to use, copy, modify, and/or distribute this software for 7 * any purpose with or without fee is hereby granted, provided that the 8 * above copyright notice and this permission notice appear in all 9 * copies. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 12 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 13 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 14 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 15 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 16 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 17 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 18 * PERFORMANCE OF THIS SOFTWARE. 19 */ 20 21 #ifndef _WLAN_LMAC_IF_DEF_H_ 22 #define _WLAN_LMAC_IF_DEF_H_ 23 24 #include "qdf_status.h" 25 #include "wlan_objmgr_cmn.h" 26 #ifdef DFS_COMPONENT_ENABLE 27 #include <wlan_dfs_public_struct.h> 28 #endif 29 #include "wlan_mgmt_txrx_utils_api.h" 30 #include "wlan_scan_public_structs.h" 31 32 #ifdef WLAN_ATF_ENABLE 33 #include "wlan_atf_utils_defs.h" 34 #endif 35 #ifdef WLAN_SA_API_ENABLE 36 #include "wlan_sa_api_utils_defs.h" 37 #endif 38 #ifdef WLAN_CONV_SPECTRAL_ENABLE 39 #include "wlan_spectral_public_structs.h" 40 #endif 41 #include <reg_services_public_struct.h> 42 43 #include "wlan_crypto_global_def.h" 44 #include "wifi_pos_public_struct.h" 45 46 #ifdef WLAN_CFR_ENABLE 47 #include "wlan_cfr_utils_api.h" 48 #endif 49 50 #include <wlan_dfs_tgt_api.h> 51 #include <wlan_dfs_ioctl.h> 52 53 #ifdef WLAN_IOT_SIM_SUPPORT 54 #include <wlan_iot_sim_public_structs.h> 55 #endif 56 #include <wlan_mgmt_txrx_rx_reo_public_structs.h> 57 58 #ifdef IPA_OFFLOAD 59 #include <wlan_ipa_public_struct.h> 60 #endif 61 62 #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE 63 #include <wlan_mlo_mgr_link_switch.h> 64 #endif 65 66 /* Number of dev type: Direct attach and Offload */ 67 #define MAX_DEV_TYPE 2 68 69 #ifdef WIFI_POS_CONVERGED 70 /* forward declarations */ 71 struct oem_data_req; 72 struct oem_data_rsp; 73 #endif /* WIFI_POS_CONVERGED */ 74 75 #ifdef DIRECT_BUF_RX_ENABLE 76 /* forward declarations for direct buf rx */ 77 struct direct_buf_rx_data; 78 /* Forward declaration for module_ring_params */ 79 struct module_ring_params; 80 /*Forward declaration for dbr_module_config */ 81 struct dbr_module_config; 82 #endif 83 84 #ifdef FEATURE_WLAN_TDLS 85 #include "wlan_tdls_public_structs.h" 86 #endif 87 88 #include <wlan_vdev_mgr_tgt_if_tx_defs.h> 89 #include <wlan_vdev_mgr_tgt_if_rx_defs.h> 90 91 #ifdef DCS_INTERFERENCE_DETECTION 92 #include <wlan_dcs_tgt_api.h> 93 #endif 94 95 #ifdef WLAN_FEATURE_11BE_MLO 96 #include "wlan_mlo_mgr_public_structs.h" 97 #endif 98 #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_TWT_CONV_SUPPORTED) 99 #include "wlan_twt_public_structs.h" 100 #endif 101 102 #ifdef QCA_SUPPORT_CP_STATS 103 #include <wlan_cp_stats_public_structs.h> 104 105 #ifdef WLAN_FEATURE_DBAM_CONFIG 106 #include "wlan_coex_public_structs.h" 107 #endif 108 109 #ifdef WLAN_FEATURE_COAP 110 #include "wlan_coap_public_structs.h" 111 #endif 112 113 /** 114 * typedef cp_stats_event - Definition of cp stats event 115 * Define stats_event from external cp stats component to cp_stats_event 116 */ 117 typedef struct stats_event cp_stats_event; 118 /** 119 * typedef stats_request_type - Definition of stats_req_type enum 120 * Define stats_req_type from external cp stats component to stats_request_type 121 */ 122 typedef enum stats_req_type stats_request_type; 123 /** 124 * typedef stats_req_info - Definition of cp stats req info 125 * Define request_info from external cp stats component to stats_req_info 126 */ 127 typedef struct request_info stats_req_info; 128 /** 129 * typedef stats_wake_lock - Definition of cp stats wake lock 130 * Define wake_lock_stats from external cp stats component to stats_wake_lock 131 */ 132 typedef struct wake_lock_stats stats_wake_lock; 133 134 /** 135 * typedef stats_big_data_stats_event - Definition of big data cp stats 136 * Define big_data_stats_event from external cp stats component to 137 * big_data_stats_event 138 */ 139 typedef struct big_data_stats_event stats_big_data_stats_event; 140 141 /** 142 * struct wlan_lmac_if_cp_stats_tx_ops - defines southbound tx callbacks for 143 * control plane statistics component 144 * @cp_stats_attach: function pointer to register events from FW 145 * @cp_stats_detach: function pointer to unregister events from FW 146 * @cp_stats_legacy_attach: function pointer to register legacy stats events 147 * from FW 148 * @cp_stats_legacy_detach: function pointer to unregister legacy stats events 149 * from FW 150 * @inc_wake_lock_stats: function pointer to increase wake lock stats 151 * @send_req_stats: function pointer to send request stats command to FW 152 * @send_req_peer_stats: function pointer to send request peer stats command 153 * to FW 154 * @set_pdev_stats_update_period: function pointer to set pdev stats update 155 * period to FW 156 * @send_req_infra_cp_stats: function pointer to send infra cp stats request 157 * command to FW 158 * @send_req_big_data_stats: Function pointer to send big data stats 159 * @send_req_telemetry_cp_stats: API to send stats request to wmi 160 */ 161 struct wlan_lmac_if_cp_stats_tx_ops { 162 QDF_STATUS (*cp_stats_attach)(struct wlan_objmgr_psoc *psoc); 163 QDF_STATUS (*cp_stats_detach)(struct wlan_objmgr_psoc *posc); 164 QDF_STATUS (*cp_stats_legacy_attach)(struct wlan_objmgr_psoc *psoc); 165 QDF_STATUS (*cp_stats_legacy_detach)(struct wlan_objmgr_psoc *psoc); 166 void (*inc_wake_lock_stats)(uint32_t reason, 167 stats_wake_lock *stats, 168 uint32_t *unspecified_wake_count); 169 QDF_STATUS (*send_req_stats)(struct wlan_objmgr_psoc *psoc, 170 enum stats_req_type type, 171 stats_req_info *req); 172 QDF_STATUS (*send_req_peer_stats)(struct wlan_objmgr_psoc *psoc, 173 stats_req_info *req); 174 QDF_STATUS (*set_pdev_stats_update_period)( 175 struct wlan_objmgr_psoc *psoc, 176 uint8_t pdev_id, uint32_t val); 177 #ifdef WLAN_SUPPORT_INFRA_CTRL_PATH_STATS 178 QDF_STATUS (*send_req_infra_cp_stats)( 179 struct wlan_objmgr_psoc *psoc, 180 struct infra_cp_stats_cmd_info *req); 181 #endif 182 #ifdef WLAN_FEATURE_BIG_DATA_STATS 183 QDF_STATUS (*send_req_big_data_stats)( 184 struct wlan_objmgr_psoc *psoc, 185 stats_req_info *req); 186 #endif 187 #ifdef WLAN_CONFIG_TELEMETRY_AGENT 188 QDF_STATUS (*send_req_telemetry_cp_stats)( 189 struct wlan_objmgr_pdev *pdev, 190 struct infra_cp_stats_cmd_info *req); 191 #endif 192 }; 193 194 /** 195 * struct wlan_lmac_if_cp_stats_rx_ops - defines southbound rx callbacks for 196 * control plane statistics component 197 * @cp_stats_rx_event_handler: function pointer to rx FW events 198 * @process_stats_event: function pointer to process stats event 199 * @process_infra_stats_event: 200 * @process_big_data_stats_event: 201 * @twt_get_session_param_resp: 202 */ 203 struct wlan_lmac_if_cp_stats_rx_ops { 204 QDF_STATUS (*cp_stats_rx_event_handler)(struct wlan_objmgr_vdev *vdev); 205 QDF_STATUS (*process_stats_event)(struct wlan_objmgr_psoc *psoc, 206 struct stats_event *ev); 207 #ifdef WLAN_SUPPORT_INFRA_CTRL_PATH_STATS 208 QDF_STATUS 209 (*process_infra_stats_event)(struct wlan_objmgr_psoc *psoc, 210 struct infra_cp_stats_event *infra_event); 211 #endif /* WLAN_SUPPORT_INFRA_CTRL_PATH_STATS */ 212 #ifdef WLAN_FEATURE_BIG_DATA_STATS 213 QDF_STATUS (*process_big_data_stats_event)( 214 struct wlan_objmgr_psoc *psoc, 215 stats_big_data_stats_event *ev); 216 #endif 217 #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_TWT_CONV_SUPPORTED) 218 QDF_STATUS (*twt_get_session_param_resp)(struct wlan_objmgr_psoc *psoc, 219 struct twt_session_stats_info *params); 220 #endif 221 }; 222 #endif 223 224 #ifdef DCS_INTERFERENCE_DETECTION 225 /** 226 * struct wlan_target_if_dcs_tx_ops - south bound tx function pointers for dcs 227 * @dcs_attach: function to register event handlers with FW 228 * @dcs_detach: function to de-register event handlers with FW 229 * @dcs_cmd_send: function to send dcs commands to FW 230 */ 231 struct wlan_target_if_dcs_tx_ops { 232 QDF_STATUS (*dcs_attach)(struct wlan_objmgr_psoc *psoc); 233 QDF_STATUS (*dcs_detach)(struct wlan_objmgr_psoc *psoc); 234 QDF_STATUS (*dcs_cmd_send)(struct wlan_objmgr_psoc *psoc, 235 uint32_t pdev_id, 236 bool is_host_pdev_id, 237 uint32_t dcs_enable); 238 }; 239 240 /** 241 * struct wlan_target_if_dcs_rx_ops - defines southbound rx callbacks for 242 * dcs component 243 * @process_dcs_event: function pointer to rx FW events 244 */ 245 struct wlan_target_if_dcs_rx_ops { 246 QDF_STATUS (*process_dcs_event)(struct wlan_objmgr_psoc *psoc, 247 struct wlan_host_dcs_event *event); 248 }; 249 #endif 250 251 #ifdef WLAN_MLO_GLOBAL_SHMEM_SUPPORT 252 /** 253 * struct wlan_lmac_if_global_shmem_local_ops - local ops function pointer 254 * table of local shared mem arena 255 * @implemented: Whether functions pointers are implemented 256 * @init_shmem_arena_ctx: Initialize shmem arena context 257 * @deinit_shmem_arena_ctx: De-initialize shmem arena context 258 * @get_crash_reason_address: Get the address of the crash reason associated 259 * with chip_id 260 * @get_recovery_mode_address: Get the address of the recovery mode associated 261 * with chip_id 262 * @get_no_of_chips_from_crash_info: Get the number of chips participated in the 263 * mlo from global shmem crash info 264 */ 265 struct wlan_lmac_if_global_shmem_local_ops { 266 bool implemented; 267 268 QDF_STATUS (*init_shmem_arena_ctx)(void *arena_vaddr, 269 size_t arena_len, 270 uint8_t grp_id); 271 QDF_STATUS (*deinit_shmem_arena_ctx)(uint8_t grp_id); 272 void *(*get_crash_reason_address)(uint8_t grp_id, 273 uint8_t chip_id); 274 void *(*get_recovery_mode_address)(uint8_t grp_id, 275 uint8_t chip_id); 276 uint8_t (*get_no_of_chips_from_crash_info)(uint8_t grp_id); 277 }; 278 #endif 279 280 #ifdef WLAN_MGMT_RX_REO_SUPPORT 281 /** 282 * struct wlan_lmac_if_mgmt_rx_reo_low_level_ops - Low level function pointer 283 * table of MGMT Rx REO module 284 * @implemented: Whether functions pointers are implemented 285 * @get_num_links: Get number of links to be used by MGMT Rx REO module 286 * @get_valid_link_bitmap: Get valid link bitmap to be used by MGMT Rx 287 * REO module 288 * @get_snapshot_address: Get address of an MGMT Rx REO snapshot 289 * @get_snapshot_version: Get version of MGMT Rx REO snapshot 290 * @snapshot_is_valid: Check if a snapshot is valid 291 * @snapshot_get_mgmt_pkt_ctr: Get management packet counter from snapshot 292 * @snapshot_get_redundant_mgmt_pkt_ctr: Get redundant management packet counter 293 * from snapshot 294 * @snapshot_is_consistent: Check if a snapshot is consistent 295 * @snapshot_get_global_timestamp: Get global timestamp from snapshot 296 */ 297 struct wlan_lmac_if_mgmt_rx_reo_low_level_ops { 298 bool implemented; 299 int (*get_num_links)(uint8_t grp_id); 300 uint16_t (*get_valid_link_bitmap)(uint8_t grp_id); 301 void* (*get_snapshot_address) 302 (uint8_t grp_id, uint8_t link_id, 303 enum mgmt_rx_reo_shared_snapshot_id snapshot_id); 304 int8_t (*get_snapshot_version) 305 (uint8_t grp_id, 306 enum mgmt_rx_reo_shared_snapshot_id snapshot_id); 307 bool (*snapshot_is_valid)(uint32_t snapshot_low, 308 uint8_t snapshot_version); 309 uint16_t (*snapshot_get_mgmt_pkt_ctr)(uint32_t snapshot_low, 310 uint8_t snapshot_version); 311 uint16_t (*snapshot_get_redundant_mgmt_pkt_ctr)(uint32_t snapshot_high); 312 bool (*snapshot_is_consistent)(uint32_t snapshot_low, 313 uint32_t snapshot_high, 314 uint8_t snapshot_version); 315 uint32_t (*snapshot_get_global_timestamp)(uint32_t snapshot_low, 316 uint32_t snapshot_high, 317 uint8_t snapshot_version); 318 }; 319 320 /** 321 * struct wlan_lmac_if_mgmt_rx_reo_tx_ops - structure of tx function 322 * pointers for mgmt rx reo 323 * @get_num_active_hw_links: Get number of active MLO HW links 324 * @get_valid_hw_link_bitmap: Get valid MLO HW link bitmap 325 * @read_mgmt_rx_reo_snapshot: Read rx-reorder snapshots 326 * @get_mgmt_rx_reo_snapshot_info: Get rx-reorder snapshot info 327 * @mgmt_rx_reo_filter_config: Configure MGMT Rx REO filter 328 * @schedule_delivery: Schedule delivery of management frames 329 * @cancel_scheduled_delivery: Cancel schedule delivery of management frames 330 * @low_level_ops: Low level operations of MGMT Rx REO module 331 */ 332 struct wlan_lmac_if_mgmt_rx_reo_tx_ops { 333 QDF_STATUS (*get_num_active_hw_links)(struct wlan_objmgr_psoc *psoc, 334 int8_t *num_active_hw_links); 335 QDF_STATUS (*get_valid_hw_link_bitmap)(struct wlan_objmgr_psoc *psoc, 336 uint16_t *valid_hw_link_bitmap); 337 QDF_STATUS (*read_mgmt_rx_reo_snapshot) 338 (struct wlan_objmgr_pdev *pdev, 339 struct mgmt_rx_reo_snapshot_info *snapshot_info, 340 enum mgmt_rx_reo_shared_snapshot_id id, 341 struct mgmt_rx_reo_snapshot_params *value, 342 struct mgmt_rx_reo_shared_snapshot (*raw_snapshot) 343 [MGMT_RX_REO_SNAPSHOT_B2B_READ_SWAR_RETRY_LIMIT]); 344 QDF_STATUS (*get_mgmt_rx_reo_snapshot_info) 345 (struct wlan_objmgr_pdev *pdev, 346 enum mgmt_rx_reo_shared_snapshot_id id, 347 struct mgmt_rx_reo_snapshot_info *snapshot_info); 348 QDF_STATUS (*mgmt_rx_reo_filter_config)( 349 struct wlan_objmgr_pdev *pdev, 350 struct mgmt_rx_reo_filter *filter); 351 QDF_STATUS (*schedule_delivery)(struct wlan_objmgr_psoc *psoc); 352 QDF_STATUS (*cancel_scheduled_delivery)(struct wlan_objmgr_psoc *psoc); 353 struct wlan_lmac_if_mgmt_rx_reo_low_level_ops low_level_ops; 354 }; 355 356 /** 357 * struct wlan_lmac_if_mgmt_rx_reo_rx_ops - structure of rx function 358 * pointers for mgmt rx reo module 359 * @fw_consumed_event_handler: FW consumed event handler 360 * @host_drop_handler: Handler for the frames that gets dropped in Host before 361 * entering REO algorithm 362 * @release_frames: Release management frames 363 */ 364 struct wlan_lmac_if_mgmt_rx_reo_rx_ops { 365 QDF_STATUS (*fw_consumed_event_handler)( 366 struct wlan_objmgr_pdev *pdev, 367 struct mgmt_rx_reo_params *params); 368 QDF_STATUS (*host_drop_handler)( 369 struct wlan_objmgr_pdev *pdev, 370 struct mgmt_rx_reo_params *params); 371 QDF_STATUS (*release_frames)(struct wlan_objmgr_psoc *psoc); 372 }; 373 #endif 374 375 /** 376 * struct wlan_lmac_if_mgmt_txrx_tx_ops - structure of tx function 377 * pointers for mgmt txrx component 378 * @mgmt_tx_send: function pointer to transmit mgmt tx frame 379 * @beacon_send: function pointer to transmit beacon frame 380 * @fd_action_frame_send: function pointer to transmit FD action frame 381 * @tx_drain_nbuf_op: function pointer for any umac nbuf related ops for 382 * pending mgmt frames cleanup 383 * @reg_ev_handler: function pointer to register event handlers 384 * @unreg_ev_handler: function pointer to unregister event handlers 385 * @mgmt_rx_reo_tx_ops: management rx-reorder txops 386 * @rx_frame_legacy_handler: Legacy handler for Rx frames 387 */ 388 struct wlan_lmac_if_mgmt_txrx_tx_ops { 389 QDF_STATUS (*mgmt_tx_send)(struct wlan_objmgr_vdev *vdev, 390 qdf_nbuf_t nbuf, u_int32_t desc_id, 391 void *mgmt_tx_params); 392 QDF_STATUS (*beacon_send)(struct wlan_objmgr_vdev *vdev, 393 qdf_nbuf_t nbuf); 394 QDF_STATUS (*fd_action_frame_send)(struct wlan_objmgr_vdev *vdev, 395 qdf_nbuf_t nbuf); 396 void (*tx_drain_nbuf_op)(struct wlan_objmgr_pdev *pdev, 397 qdf_nbuf_t nbuf); 398 QDF_STATUS (*reg_ev_handler)(struct wlan_objmgr_psoc *psoc); 399 QDF_STATUS (*unreg_ev_handler)(struct wlan_objmgr_psoc *psoc); 400 QDF_STATUS (*rx_frame_legacy_handler)( 401 struct wlan_objmgr_pdev *pdev, 402 qdf_nbuf_t buf, 403 struct mgmt_rx_event_params *mgmt_rx_params); 404 #ifdef WLAN_MGMT_RX_REO_SUPPORT 405 struct wlan_lmac_if_mgmt_rx_reo_tx_ops mgmt_rx_reo_tx_ops; 406 #endif 407 }; 408 409 /** 410 * struct wlan_lmac_if_scan_tx_ops - south bound tx function pointers for scan 411 * @scan_start: function to start scan 412 * @scan_cancel: function to cancel scan 413 * @pno_start: start pno scan 414 * @pno_stop: stop pno scan 415 * @obss_disable: disable obss scan 416 * @scan_reg_ev_handler: function to register for scan events 417 * @scan_unreg_ev_handler: function to unregister for scan events 418 * @set_chan_list: 419 * @is_platform_eht_capable: 420 * 421 * scan module uses these functions to avail ol/da lmac services 422 */ 423 struct wlan_lmac_if_scan_tx_ops { 424 QDF_STATUS (*scan_start)(struct wlan_objmgr_pdev *pdev, 425 struct scan_start_request *req); 426 QDF_STATUS (*scan_cancel)(struct wlan_objmgr_pdev *pdev, 427 struct scan_cancel_param *req); 428 QDF_STATUS (*pno_start)(struct wlan_objmgr_psoc *psoc, 429 struct pno_scan_req_params *req); 430 QDF_STATUS (*pno_stop)(struct wlan_objmgr_psoc *psoc, 431 uint8_t vdev_id); 432 QDF_STATUS (*obss_disable)(struct wlan_objmgr_psoc *psoc, 433 uint8_t vdev_id); 434 QDF_STATUS (*scan_reg_ev_handler)(struct wlan_objmgr_psoc *psoc, 435 void *arg); 436 QDF_STATUS (*scan_unreg_ev_handler)(struct wlan_objmgr_psoc *psoc, 437 void *arg); 438 QDF_STATUS (*set_chan_list)(struct wlan_objmgr_pdev *pdev, void *arg); 439 bool (*is_platform_eht_capable)(struct wlan_objmgr_psoc *psoc, 440 uint8_t pdev_id); 441 }; 442 443 /** 444 * struct wlan_lmac_if_ftm_tx_ops - south bound tx function pointers for ftm 445 * @ftm_attach: function to register event handlers with FW 446 * @ftm_detach: function to de-register event handlers with FW 447 * @ftm_cmd_send: function to send FTM commands to FW 448 * 449 * ftm module uses these functions to avail ol/da lmac services 450 */ 451 struct wlan_lmac_if_ftm_tx_ops { 452 QDF_STATUS (*ftm_attach)(struct wlan_objmgr_psoc *psoc); 453 QDF_STATUS (*ftm_detach)(struct wlan_objmgr_psoc *psoc); 454 QDF_STATUS (*ftm_cmd_send)(struct wlan_objmgr_pdev *pdev, 455 uint8_t *buf, uint32_t len, uint8_t mac_id); 456 }; 457 458 enum wlan_mlme_cfg_id; 459 /** 460 * struct wlan_lmac_if_mlme_tx_ops - south bound tx function pointers for mlme 461 * @get_wifi_iface_id: function to get wifi interface id 462 * @vdev_mlme_attach: function to register events 463 * @vdev_mlme_detach: function to unregister events 464 * @vdev_create_send: function to send vdev create 465 * @vdev_start_send: function to send vdev start 466 * @vdev_up_send: function to send vdev up 467 * @vdev_delete_send: function to send vdev delete 468 * @vdev_stop_send: function to send vdev stop 469 * @vdev_down_send: function to send vdev down 470 * @vdev_set_param_send: function to send vdev parameter 471 * @vdev_set_tx_rx_decap_type: function to send vdev tx rx cap/decap type 472 * @vdev_set_nac_rssi_send: function to send nac rssi 473 * @vdev_set_neighbour_rx_cmd_send: function to send vdev neighbour rx cmd 474 * @vdev_sifs_trigger_send: function to send vdev sifs trigger 475 * @vdev_set_custom_aggr_size_cmd_send: function to send custom aggr size 476 * @vdev_config_ratemask_cmd_send: function to send ratemask 477 * @peer_flush_tids_send: function to flush peer tids 478 * @multiple_vdev_restart_req_cmd: function to send multiple vdev restart 479 * @multiple_vdev_set_param_cmd: function to send multiple vdev param 480 * @beacon_send_cmd: function to send beacon 481 * @beacon_cmd_send: 482 * @beacon_tmpl_send: function to send beacon template 483 * @vdev_fils_enable_send: 484 * @vdev_bcn_miss_offload_send: function to send beacon miss offload 485 * @vdev_sta_ps_param_send: function to sent STA power save config 486 * @peer_delete_all_send: function to send vdev delete all peer request 487 * @psoc_vdev_rsp_timer_init: function to initialize psoc vdev response timer 488 * @psoc_vdev_rsp_timer_deinit: function to deinitialize psoc vdev rsp timer 489 * @psoc_vdev_rsp_timer_inuse: function to determine whether the vdev rsp 490 * timer is inuse or not 491 * @psoc_vdev_rsp_timer_mod: function to modify the time of vdev rsp timer 492 * @psoc_wake_lock_init: Initialize psoc wake lock for vdev response timer 493 * @psoc_wake_lock_deinit: De-Initialize psoc wake lock for vdev response timer 494 * @vdev_mgr_rsp_timer_stop: 495 * @get_hw_link_id: Get hw_link_id for pdev 496 * @get_psoc_mlo_group_id: Get MLO Group ID for the psoc 497 * @get_psoc_mlo_chip_id: Get MLO chip ID for the psoc 498 * @target_if_mlo_setup_req: MLO setup request 499 * @target_if_mlo_ready: MLO ready event 500 * @target_if_mlo_teardown_req: MLO teardown 501 * @vdev_send_set_mac_addr: API to send set MAC address request to FW 502 * @vdev_peer_set_param_send: API to send peer param to FW 503 */ 504 struct wlan_lmac_if_mlme_tx_ops { 505 uint32_t (*get_wifi_iface_id) (struct wlan_objmgr_pdev *pdev); 506 QDF_STATUS (*vdev_mlme_attach)(struct wlan_objmgr_psoc *psoc); 507 QDF_STATUS (*vdev_mlme_detach)(struct wlan_objmgr_psoc *psoc); 508 QDF_STATUS (*vdev_create_send)(struct wlan_objmgr_vdev *vdev, 509 struct vdev_create_params *param); 510 QDF_STATUS (*vdev_start_send)(struct wlan_objmgr_vdev *vdev, 511 struct vdev_start_params *param); 512 QDF_STATUS (*vdev_up_send)(struct wlan_objmgr_vdev *vdev, 513 struct vdev_up_params *param); 514 QDF_STATUS (*vdev_delete_send)(struct wlan_objmgr_vdev *vdev, 515 struct vdev_delete_params *param); 516 QDF_STATUS (*vdev_stop_send)(struct wlan_objmgr_vdev *vdev, 517 struct vdev_stop_params *param); 518 QDF_STATUS (*vdev_down_send)(struct wlan_objmgr_vdev *vdev, 519 struct vdev_down_params *param); 520 QDF_STATUS (*vdev_set_param_send)(struct wlan_objmgr_vdev *vdev, 521 struct vdev_set_params *param); 522 QDF_STATUS (*vdev_set_tx_rx_decap_type)(struct wlan_objmgr_vdev *vdev, 523 enum wlan_mlme_cfg_id param_id, 524 uint32_t value); 525 QDF_STATUS (*vdev_set_nac_rssi_send)( 526 struct wlan_objmgr_vdev *vdev, 527 struct vdev_scan_nac_rssi_params *param); 528 QDF_STATUS (*vdev_set_neighbour_rx_cmd_send)( 529 struct wlan_objmgr_vdev *vdev, 530 struct set_neighbour_rx_params *param, 531 uint8_t *mac); 532 QDF_STATUS (*vdev_sifs_trigger_send)( 533 struct wlan_objmgr_vdev *vdev, 534 struct sifs_trigger_param *param); 535 QDF_STATUS (*vdev_set_custom_aggr_size_cmd_send)( 536 struct wlan_objmgr_vdev *vdev, 537 struct set_custom_aggr_size_params *param); 538 QDF_STATUS (*vdev_config_ratemask_cmd_send)( 539 struct wlan_objmgr_vdev *vdev, 540 struct config_ratemask_params *param); 541 QDF_STATUS (*peer_flush_tids_send)( 542 struct wlan_objmgr_vdev *vdev, 543 struct peer_flush_params *param); 544 QDF_STATUS (*multiple_vdev_restart_req_cmd)( 545 struct wlan_objmgr_pdev *pdev, 546 struct multiple_vdev_restart_params *param); 547 QDF_STATUS (*multiple_vdev_set_param_cmd)( 548 struct wlan_objmgr_pdev *pdev, 549 struct multiple_vdev_set_param *param); 550 QDF_STATUS (*beacon_cmd_send)(struct wlan_objmgr_vdev *vdev, 551 struct beacon_params *param); 552 QDF_STATUS (*beacon_tmpl_send)(struct wlan_objmgr_vdev *vdev, 553 struct beacon_tmpl_params *param); 554 #if defined(WLAN_SUPPORT_FILS) || defined(CONFIG_BAND_6GHZ) 555 QDF_STATUS (*vdev_fils_enable_send)(struct wlan_objmgr_vdev *vdev, 556 struct config_fils_params *param); 557 #endif 558 QDF_STATUS (*vdev_bcn_miss_offload_send)(struct wlan_objmgr_vdev *vdev); 559 QDF_STATUS (*vdev_sta_ps_param_send)(struct wlan_objmgr_vdev *vdev, 560 struct sta_ps_params *param); 561 QDF_STATUS (*peer_delete_all_send)( 562 struct wlan_objmgr_vdev *vdev, 563 struct peer_delete_all_params *param); 564 QDF_STATUS (*psoc_vdev_rsp_timer_init)( 565 struct wlan_objmgr_psoc *psoc, 566 uint8_t vdev_id); 567 void (*psoc_vdev_rsp_timer_deinit)( 568 struct wlan_objmgr_psoc *psoc, 569 uint8_t vdev_id); 570 QDF_STATUS (*psoc_vdev_rsp_timer_inuse)( 571 struct wlan_objmgr_psoc *psoc, 572 uint8_t vdev_id); 573 QDF_STATUS (*psoc_vdev_rsp_timer_mod)( 574 struct wlan_objmgr_psoc *psoc, 575 uint8_t vdev_id, 576 int mseconds); 577 void (*psoc_wake_lock_init)( 578 struct wlan_objmgr_psoc *psoc); 579 void (*psoc_wake_lock_deinit)( 580 struct wlan_objmgr_psoc *psoc); 581 QDF_STATUS (*vdev_mgr_rsp_timer_stop)( 582 struct wlan_objmgr_psoc *psoc, 583 struct vdev_response_timer *vdev_rsp, 584 enum wlan_vdev_mgr_tgt_if_rsp_bit clear_bit); 585 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP) 586 uint16_t (*get_hw_link_id)(struct wlan_objmgr_pdev *pdev); 587 uint8_t (*get_psoc_mlo_group_id)(struct wlan_objmgr_psoc *psoc); 588 uint8_t (*get_psoc_mlo_chip_id)(struct wlan_objmgr_psoc *psoc); 589 QDF_STATUS (*target_if_mlo_setup_req)(struct wlan_objmgr_pdev **pdev, 590 uint8_t num_pdevs, 591 uint8_t grp_id); 592 QDF_STATUS (*target_if_mlo_ready)(struct wlan_objmgr_pdev **pdev, 593 uint8_t num_pdevs); 594 QDF_STATUS (*target_if_mlo_teardown_req)(struct wlan_objmgr_pdev *pdev, 595 uint32_t grp_id, bool reset, 596 bool standby_active); 597 #endif 598 #ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE 599 QDF_STATUS (*vdev_send_set_mac_addr)(struct qdf_mac_addr mac_addr, 600 struct qdf_mac_addr mld_addr, 601 struct wlan_objmgr_vdev *vdev); 602 #endif 603 QDF_STATUS (*vdev_peer_set_param_send)(struct wlan_objmgr_vdev *vdev, 604 uint8_t *peer_mac_addr, 605 uint32_t param_id, 606 uint32_t param_value); 607 }; 608 609 /** 610 * struct wlan_lmac_if_scan_rx_ops - south bound rx function pointers for scan 611 * @scan_ev_handler: scan event handler 612 * @scan_set_max_active_scans: set max active scans allowed 613 * 614 * lmac modules uses this API to post scan events to scan module 615 */ 616 struct wlan_lmac_if_scan_rx_ops { 617 QDF_STATUS (*scan_ev_handler)(struct wlan_objmgr_psoc *psoc, 618 struct scan_event_info *event_info); 619 QDF_STATUS (*scan_set_max_active_scans)(struct wlan_objmgr_psoc *psoc, 620 uint32_t max_active_scans); 621 }; 622 623 #ifdef CONVERGED_P2P_ENABLE 624 625 /* forward declarations for p2p tx ops */ 626 struct p2p_ps_config; 627 struct p2p_lo_start; 628 629 /** 630 * struct wlan_lmac_if_p2p_tx_ops - structure of tx function pointers 631 * for P2P component 632 * @set_ps: function pointer to set power save 633 * @lo_start: function pointer to start listen offload 634 * @lo_stop: function pointer to stop listen offload 635 * @set_noa: function pointer to disable/enable NOA 636 * @reg_lo_ev_handler: function pointer to register lo event handler 637 * @reg_noa_ev_handler: function pointer to register noa event handler 638 * @unreg_lo_ev_handler: function pointer to unregister lo event handler 639 * @unreg_noa_ev_handler:function pointer to unregister noa event handler 640 * @reg_mac_addr_rx_filter_handler: function pointer to register/unregister 641 * set mac addr status event callback. 642 * @set_mac_addr_rx_filter_cmd: function pointer to set mac addr rx filter 643 * @reg_mcc_quota_ev_handler: function to register mcc_quota event handler 644 */ 645 struct wlan_lmac_if_p2p_tx_ops { 646 QDF_STATUS (*set_ps)(struct wlan_objmgr_psoc *psoc, 647 struct p2p_ps_config *ps_config); 648 #ifdef FEATURE_P2P_LISTEN_OFFLOAD 649 QDF_STATUS (*lo_start)(struct wlan_objmgr_psoc *psoc, 650 struct p2p_lo_start *lo_start); 651 QDF_STATUS (*lo_stop)(struct wlan_objmgr_psoc *psoc, 652 uint32_t vdev_id); 653 QDF_STATUS (*reg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc, 654 void *arg); 655 QDF_STATUS (*unreg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc, 656 void *arg); 657 #endif 658 QDF_STATUS (*set_noa)(struct wlan_objmgr_psoc *psoc, 659 uint32_t vdev_id, bool disable_noa); 660 QDF_STATUS (*reg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc, 661 void *arg); 662 QDF_STATUS (*unreg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc, 663 void *arg); 664 QDF_STATUS (*reg_mac_addr_rx_filter_handler)( 665 struct wlan_objmgr_psoc *psoc, bool reg); 666 QDF_STATUS (*set_mac_addr_rx_filter_cmd)( 667 struct wlan_objmgr_psoc *psoc, 668 struct set_rx_mac_filter *param); 669 #ifdef WLAN_FEATURE_MCC_QUOTA 670 QDF_STATUS (*reg_mcc_quota_ev_handler)(struct wlan_objmgr_psoc *psoc, 671 bool reg); 672 #endif 673 }; 674 #endif 675 676 #ifdef WLAN_ATF_ENABLE 677 678 /** 679 * struct wlan_lmac_if_atf_tx_ops - ATF specific tx function pointers 680 * @atf_enable_disable: Set atf peer stats enable/disable 681 * @atf_ssid_sched_policy: Set ssid schedule policy 682 * @atf_send_peer_list: Send atf list of peers 683 * @atf_set_grouping: Set atf grouping 684 * @atf_set_group_ac: Set atf Group AC 685 * @atf_send_peer_request: Send peer requests 686 * @atf_set_bwf: Set bandwidth fairness 687 * @atf_get_peer_airtime: Get peer airtime 688 * @atf_open: ATF open 689 * @atf_register_event_handler: ATF register wmi event handlers 690 * @atf_unregister_event_handler: ATF unregister wmi event handlers 691 * @atf_set_ppdu_stats: ATF set ppdu stats to get ATF stats 692 * @atf_send_peer_list_v2: Send atf list of peers with increased 693 * maximum peer support 694 * @atf_set_grouping_v2: Set atf grouping with increased maximum 695 * peer support 696 */ 697 struct wlan_lmac_if_atf_tx_ops { 698 int32_t (*atf_enable_disable)(struct wlan_objmgr_vdev *vdev, 699 uint8_t value); 700 int32_t (*atf_ssid_sched_policy)(struct wlan_objmgr_vdev *vdev, 701 uint8_t value); 702 int32_t (*atf_send_peer_list)(struct wlan_objmgr_pdev *pdev, 703 struct pdev_atf_req *atf_req, 704 uint8_t atf_tput_based); 705 int32_t (*atf_set_grouping)(struct wlan_objmgr_pdev *pdev, 706 struct pdev_atf_ssid_group_req *atf_grp_req, 707 uint8_t atf_tput_based); 708 int32_t (*atf_set_group_ac)(struct wlan_objmgr_pdev *pdev, 709 struct pdev_atf_group_wmm_ac_req *atf_acreq, 710 uint8_t atf_tput_based); 711 int32_t (*atf_send_peer_request)(struct wlan_objmgr_pdev *pdev, 712 struct pdev_atf_peer_ext_request *atfr, 713 uint8_t atf_tput_based); 714 int32_t (*atf_set_bwf)(struct wlan_objmgr_pdev *pdev, 715 struct pdev_bwf_req *bwf_req); 716 uint32_t (*atf_get_peer_airtime)(struct wlan_objmgr_peer *peer); 717 void (*atf_open)(struct wlan_objmgr_psoc *psoc); 718 void (*atf_register_event_handler)(struct wlan_objmgr_psoc *psoc); 719 void (*atf_unregister_event_handler)(struct wlan_objmgr_psoc *psoc); 720 void (*atf_set_ppdu_stats)(struct wlan_objmgr_pdev *pdev, 721 uint8_t value); 722 #ifdef WLAN_ATF_INCREASED_STA 723 int32_t (*atf_send_peer_list_v2)(struct wlan_objmgr_pdev *pdev, 724 struct pdev_atf_req_v2 *atf_req); 725 int32_t (*atf_set_grouping_v2)(struct wlan_objmgr_pdev *pdev, 726 struct pdev_atf_ssid_group_req_v2 *req); 727 #endif 728 }; 729 #endif 730 731 #ifdef WLAN_SUPPORT_FILS 732 /** 733 * struct wlan_lmac_if_fd_tx_ops - FILS Discovery specific Tx function pointers 734 * @fd_vdev_config_fils: Enable and configure FILS Discovery 735 * @fd_register_event_handler: Register swfda WMI event handler 736 * @fd_unregister_event_handler: Un-register swfda WMI event handler 737 * @fd_offload_tmpl_send: Send FD template to FW 738 */ 739 struct wlan_lmac_if_fd_tx_ops { 740 QDF_STATUS (*fd_vdev_config_fils)(struct wlan_objmgr_vdev *vdev, 741 uint32_t fd_period); 742 void (*fd_register_event_handler)(struct wlan_objmgr_psoc *psoc); 743 void (*fd_unregister_event_handler)(struct wlan_objmgr_psoc *psoc); 744 QDF_STATUS (*fd_offload_tmpl_send)(struct wlan_objmgr_pdev *pdev, 745 struct fils_discovery_tmpl_params *fd_tmpl_param); 746 }; 747 #endif 748 749 #ifdef WLAN_SA_API_ENABLE 750 751 /** 752 * struct wlan_lmac_if_sa_api_tx_ops - SA API specific tx function pointers 753 * @sa_api_register_event_handler: Register event handler for Smart Antenna 754 * @sa_api_unregister_event_handler: Unregister event handler for Smart Antenna 755 * @sa_api_enable_sa: Enable Smart Antenna 756 * @sa_api_set_rx_antenna: Set Rx antenna 757 * @sa_api_set_tx_antenna: Set Tx antenna 758 * @sa_api_set_tx_default_antenna: Set default Tx antenna 759 * @sa_api_set_training_info: Set Smart Antenna training metrics 760 * @sa_api_prepare_rateset: Prepare rest set 761 * @sa_api_set_node_config_ops: Set Peer config operations structure 762 */ 763 struct wlan_lmac_if_sa_api_tx_ops { 764 void (*sa_api_register_event_handler)(struct wlan_objmgr_psoc *psoc); 765 void (*sa_api_unregister_event_handler)(struct wlan_objmgr_psoc *posc); 766 void (*sa_api_enable_sa) (struct wlan_objmgr_pdev *pdev, 767 uint32_t enable, uint32_t mode, uint32_t rx_antenna); 768 void (*sa_api_set_rx_antenna) (struct wlan_objmgr_pdev *pdev, 769 uint32_t antenna); 770 void (*sa_api_set_tx_antenna) (struct wlan_objmgr_peer *peer, 771 uint32_t *antenna_array); 772 void (*sa_api_set_tx_default_antenna) (struct wlan_objmgr_pdev *pdev, 773 u_int32_t antenna); 774 void (*sa_api_set_training_info) (struct wlan_objmgr_peer *peer, 775 uint32_t *rate_array, 776 uint32_t *antenna_array, 777 uint32_t numpkts, 778 uint16_t minpkts, 779 uint16_t per_threshold); 780 void (*sa_api_prepare_rateset)(struct wlan_objmgr_pdev *pdev, 781 struct wlan_objmgr_peer *peer, 782 struct sa_rate_info *rate_info); 783 void (*sa_api_set_node_config_ops) (struct wlan_objmgr_peer *peer, 784 uint32_t cmd_id, uint16_t args_count, 785 u_int32_t args_arr[]); 786 }; 787 788 #endif 789 790 #ifdef WLAN_CFR_ENABLE 791 /** 792 * struct wlan_lmac_if_cfr_tx_ops - CFR specific tx function pointers 793 * @cfr_init_pdev: Initialize CFR 794 * @cfr_deinit_pdev: De-initialize CFR 795 * @cfr_enable_cfr_timer: Function to enable CFR timer 796 * @cfr_start_capture: Function to start CFR capture 797 * @cfr_stop_capture: Function to stop CFR capture 798 * @cfr_config_rcc: Function to set the Repetitive channel capture params 799 * @cfr_start_lut_timer: Function to start timer to flush aged-out LUT entries 800 * @cfr_stop_lut_timer: Function to stop timer to flush aged-out LUT entries 801 * @cfr_default_ta_ra_cfg: Function to configure default values for TA_RA mode 802 * @cfr_dump_lut_enh: Function to dump LUT entries 803 * @cfr_rx_tlv_process: Function to process PPDU status TLVs 804 * @cfr_update_global_cfg: Function to update the global config for 805 * a successful commit session. 806 * @cfr_subscribe_ppdu_desc: 807 */ 808 struct wlan_lmac_if_cfr_tx_ops { 809 QDF_STATUS (*cfr_init_pdev)(struct wlan_objmgr_psoc *psoc, 810 struct wlan_objmgr_pdev *pdev); 811 QDF_STATUS (*cfr_deinit_pdev)(struct wlan_objmgr_psoc *psoc, 812 struct wlan_objmgr_pdev *pdev); 813 int (*cfr_enable_cfr_timer)(struct wlan_objmgr_pdev *pdev, 814 uint32_t cfr_timer); 815 int (*cfr_start_capture)(struct wlan_objmgr_pdev *pdev, 816 struct wlan_objmgr_peer *peer, 817 struct cfr_capture_params *params); 818 int (*cfr_stop_capture)(struct wlan_objmgr_pdev *pdev, 819 struct wlan_objmgr_peer *peer); 820 #ifdef WLAN_ENH_CFR_ENABLE 821 QDF_STATUS (*cfr_config_rcc)(struct wlan_objmgr_pdev *pdev, 822 struct cfr_rcc_param *params); 823 void (*cfr_start_lut_timer)(struct wlan_objmgr_pdev *pdev); 824 void (*cfr_stop_lut_timer)(struct wlan_objmgr_pdev *pdev); 825 void (*cfr_default_ta_ra_cfg)(struct cfr_rcc_param *params, 826 bool allvalid, uint16_t reset_cfg); 827 void (*cfr_dump_lut_enh)(struct wlan_objmgr_pdev *pdev); 828 void (*cfr_rx_tlv_process)(struct wlan_objmgr_pdev *pdev, void *nbuf); 829 void (*cfr_update_global_cfg)(struct wlan_objmgr_pdev *pdev); 830 QDF_STATUS (*cfr_subscribe_ppdu_desc)(struct wlan_objmgr_pdev *pdev, 831 bool is_subscribe); 832 #endif 833 }; 834 #endif /* WLAN_CFR_ENABLE */ 835 836 #ifdef WLAN_CONV_SPECTRAL_ENABLE 837 struct spectral_wmi_ops; 838 struct spectral_tgt_ops; 839 /** 840 * struct wlan_lmac_if_sptrl_tx_ops - Spectral south bound Tx operations 841 * @sptrlto_pdev_spectral_init: Initialize target_if pdev Spectral object 842 * @sptrlto_pdev_spectral_deinit: De-initialize target_if pdev Spectral object 843 * @sptrlto_psoc_spectral_init: Initialize target_if psoc Spectral object 844 * @sptrlto_psoc_spectral_deinit: De-initialize target_if psoc Spectral object 845 * @sptrlto_set_spectral_config: Set Spectral configuration 846 * @sptrlto_get_spectral_config: Get Spectral configuration 847 * @sptrlto_start_spectral_scan: Start Spectral Scan 848 * @sptrlto_stop_spectral_scan: Stop Spectral Scan 849 * @sptrlto_is_spectral_active: Get whether Spectral is active 850 * @sptrlto_is_spectral_enabled: Get whether Spectral is enabled 851 * @sptrlto_set_icm_active: Set whether ICM is active or inactive 852 * @sptrlto_get_icm_active: Get whether ICM is active or inactive 853 * @sptrlto_get_nominal_nf: Get Nominal Noise Floor for the current 854 * frequency band 855 * @sptrlto_set_debug_level: Set Spectral debug level 856 * @sptrlto_get_debug_level: Get Spectral debug level 857 * @sptrlto_get_chaninfo: Get channel information 858 * @sptrlto_clear_chaninfo: Clear channel information 859 * @sptrlto_get_spectral_capinfo: Get Spectral capability information 860 * @sptrlto_get_spectral_diagstats: Get Spectral diagnostic statistics 861 * @sptrlto_register_spectral_wmi_ops: Register Spectral WMI operations 862 * @sptrlto_register_spectral_tgt_ops: Register Spectral target operations 863 * @sptrlto_register_netlink_cb: Register Spectral Netlink callbacks 864 * @sptrlto_use_nl_bcast: Get whether to use Netlink broadcast/unicast 865 * @sptrlto_deregister_netlink_cb: De-register Spectral Netlink callbacks 866 * @sptrlto_process_spectral_report: Process spectral report 867 * @sptrlto_set_dma_debug: Set DMA debug for Spectral 868 * @sptrlto_direct_dma_support: Whether Direct-DMA is supported on this radio 869 * @sptrlto_check_and_do_dbr_ring_debug: Start/Stop Spectral ring debug based 870 * on the previous state 871 * @sptrlto_check_and_do_dbr_buff_debug: Start/Stop Spectral buffer debug based 872 * on the previous state 873 * @sptrlto_register_events: Registration of WMI events for Spectral 874 * @sptrlto_unregister_events: Unregistration of WMI events for Spectral 875 * @sptrlto_init_pdev_feature_caps: Initialize spectral feature capabilities 876 **/ 877 struct wlan_lmac_if_sptrl_tx_ops { 878 void *(*sptrlto_pdev_spectral_init)(struct wlan_objmgr_pdev *pdev); 879 void (*sptrlto_pdev_spectral_deinit)(struct wlan_objmgr_pdev *pdev); 880 void *(*sptrlto_psoc_spectral_init)(struct wlan_objmgr_psoc *psoc); 881 void (*sptrlto_psoc_spectral_deinit)(struct wlan_objmgr_psoc *psoc); 882 QDF_STATUS (*sptrlto_set_spectral_config) 883 (struct wlan_objmgr_pdev *pdev, 884 const struct spectral_cp_param *param, 885 const enum spectral_scan_mode smode, 886 enum spectral_cp_error_code *err); 887 QDF_STATUS (*sptrlto_get_spectral_config) 888 (struct wlan_objmgr_pdev *pdev, 889 struct spectral_config *sptrl_config, 890 enum spectral_scan_mode smode); 891 QDF_STATUS (*sptrlto_start_spectral_scan) 892 (struct wlan_objmgr_pdev *pdev, 893 uint8_t vdev_id, 894 const enum spectral_scan_mode smode, 895 enum spectral_cp_error_code *err); 896 QDF_STATUS (*sptrlto_stop_spectral_scan) 897 (struct wlan_objmgr_pdev *pdev, 898 const enum spectral_scan_mode smode, 899 enum spectral_cp_error_code *err); 900 bool (*sptrlto_is_spectral_active)(struct wlan_objmgr_pdev *pdev, 901 const enum spectral_scan_mode smode); 902 bool (*sptrlto_is_spectral_enabled)(struct wlan_objmgr_pdev *pdev, 903 enum spectral_scan_mode smode); 904 QDF_STATUS (*sptrlto_set_debug_level)(struct wlan_objmgr_pdev *pdev, 905 u_int32_t debug_level); 906 u_int32_t (*sptrlto_get_debug_level)(struct wlan_objmgr_pdev *pdev); 907 QDF_STATUS (*sptrlto_get_spectral_capinfo) 908 (struct wlan_objmgr_pdev *pdev, 909 struct spectral_caps *scaps); 910 QDF_STATUS (*sptrlto_get_spectral_diagstats) 911 (struct wlan_objmgr_pdev *pdev, 912 struct spectral_diag_stats *stats); 913 QDF_STATUS (*sptrlto_register_spectral_wmi_ops)( 914 struct wlan_objmgr_psoc *psoc, 915 struct spectral_wmi_ops *wmi_ops); 916 QDF_STATUS (*sptrlto_register_spectral_tgt_ops)( 917 struct wlan_objmgr_psoc *psoc, 918 struct spectral_tgt_ops *tgt_ops); 919 void (*sptrlto_register_netlink_cb)( 920 struct wlan_objmgr_pdev *pdev, 921 struct spectral_nl_cb *nl_cb); 922 bool (*sptrlto_use_nl_bcast)(struct wlan_objmgr_pdev *pdev); 923 void (*sptrlto_deregister_netlink_cb)(struct wlan_objmgr_pdev *pdev); 924 int (*sptrlto_process_spectral_report)( 925 struct wlan_objmgr_pdev *pdev, 926 void *payload); 927 QDF_STATUS (*sptrlto_set_dma_debug)( 928 struct wlan_objmgr_pdev *pdev, 929 enum spectral_dma_debug dma_debug_type, 930 bool dma_debug_enable); 931 bool (*sptrlto_direct_dma_support)(struct wlan_objmgr_pdev *pdev); 932 QDF_STATUS (*sptrlto_check_and_do_dbr_ring_debug)( 933 struct wlan_objmgr_pdev *pdev); 934 QDF_STATUS (*sptrlto_check_and_do_dbr_buff_debug)( 935 struct wlan_objmgr_pdev *pdev); 936 QDF_STATUS (*sptrlto_register_events)(struct wlan_objmgr_psoc *psoc); 937 QDF_STATUS (*sptrlto_unregister_events)(struct wlan_objmgr_psoc *psoc); 938 QDF_STATUS (*sptrlto_init_pdev_feature_caps)( 939 struct wlan_objmgr_pdev *pdev); 940 }; 941 #endif /* WLAN_CONV_SPECTRAL_ENABLE */ 942 943 #ifdef WLAN_IOT_SIM_SUPPORT 944 /** 945 * struct wlan_lmac_if_iot_sim_tx_ops - iot_sim south bound Tx operations 946 * @iot_sim_send_cmd: To send wmi simulation command 947 **/ 948 struct wlan_lmac_if_iot_sim_tx_ops { 949 QDF_STATUS (*iot_sim_send_cmd)(struct wlan_objmgr_pdev *pdev, 950 struct simulation_test_params *param); 951 }; 952 #endif 953 954 #ifdef WIFI_POS_CONVERGED 955 /* 956 * struct wlan_lmac_if_wifi_pos_tx_ops - structure of firmware tx function 957 * pointers for wifi_pos component 958 * @wifi_pos_register_events: function pointer to register wifi_pos events 959 * @wifi_pos_deregister_events: function pointer to deregister wifi_pos events 960 * @data_req_tx: function pointer to send wifi_pos req to firmware 961 * @wifi_pos_convert_pdev_id_host_to_target: function pointer to get target 962 * pdev_id from host pdev_id. 963 * @wifi_pos_convert_pdev_id_target_to_host: function pointer to get host 964 * pdev_id from target pdev_id. 965 * @wifi_pos_get_vht_ch_width: Function pointer to get max supported bw by FW 966 * @wifi_pos_parse_measreq_chan_info: Parse channel info from LOWI measurement 967 * request buffer. 968 * @send_rtt_pasn_auth_status: Send PASN peers authentication status 969 * @send_rtt_pasn_deauth: Send PASN peer deauth command 970 */ 971 struct wlan_lmac_if_wifi_pos_tx_ops { 972 QDF_STATUS (*wifi_pos_register_events)(struct wlan_objmgr_psoc *psoc); 973 QDF_STATUS (*wifi_pos_deregister_events)(struct wlan_objmgr_psoc *psoc); 974 QDF_STATUS (*data_req_tx)(struct wlan_objmgr_pdev *pdev, 975 struct oem_data_req *req); 976 QDF_STATUS (*wifi_pos_convert_pdev_id_host_to_target)( 977 struct wlan_objmgr_psoc *psoc, uint32_t host_pdev_id, 978 uint32_t *target_pdev_id); 979 QDF_STATUS (*wifi_pos_convert_pdev_id_target_to_host)( 980 struct wlan_objmgr_psoc *psoc, uint32_t target_pdev_id, 981 uint32_t *host_pdev_id); 982 QDF_STATUS (*wifi_pos_get_vht_ch_width)(struct wlan_objmgr_psoc *psoc, 983 enum phy_ch_width *ch_width); 984 QDF_STATUS (*wifi_pos_parse_measreq_chan_info)( 985 struct wlan_objmgr_pdev *pdev, uint32_t data_len, 986 uint8_t *data, struct rtt_channel_info *chinfo); 987 QDF_STATUS (*send_rtt_pasn_auth_status) 988 (struct wlan_objmgr_psoc *psoc, 989 struct wlan_pasn_auth_status *data); 990 QDF_STATUS (*send_rtt_pasn_deauth)(struct wlan_objmgr_psoc *psoc, 991 struct qdf_mac_addr *peer_mac); 992 }; 993 #endif 994 995 #ifdef DIRECT_BUF_RX_ENABLE 996 /** 997 * struct wlan_lmac_if_direct_buf_rx_tx_ops - structure of direct buf rx txops 998 * @direct_buf_rx_module_register: Registration API callback for modules 999 * to register with direct buf rx framework 1000 * @direct_buf_rx_module_unregister: Unregistration API to clean up module 1001 * specific resources in DBR 1002 * @direct_buf_rx_register_events: Registration of WMI events for direct 1003 * buffer rx framework 1004 * @direct_buf_rx_unregister_events: Unregistraton of WMI events for direct 1005 * buffer rx framework 1006 * @direct_buf_rx_print_ring_stat: Print ring status per module per pdev 1007 * 1008 * @direct_buf_rx_get_ring_params: Get ring parameters for module_id 1009 * @direct_buf_rx_start_ring_debug: Start DBR ring debug 1010 * @direct_buf_rx_stop_ring_debug: Stop DBR ring debug 1011 * @direct_buf_rx_start_buffer_poisoning: Start DBR buffer poisoning 1012 * @direct_buf_rx_stop_buffer_poisoning: Stop DBR buffer poisoning 1013 */ 1014 struct wlan_lmac_if_direct_buf_rx_tx_ops { 1015 QDF_STATUS (*direct_buf_rx_module_register)( 1016 struct wlan_objmgr_pdev *pdev, uint8_t mod_id, 1017 struct dbr_module_config *dbr_config, 1018 bool (*dbr_rsp_handler) 1019 (struct wlan_objmgr_pdev *pdev, 1020 struct direct_buf_rx_data *dbr_data)); 1021 QDF_STATUS (*direct_buf_rx_module_unregister)( 1022 struct wlan_objmgr_pdev *pdev, uint8_t mod_id); 1023 QDF_STATUS (*direct_buf_rx_register_events)( 1024 struct wlan_objmgr_psoc *psoc); 1025 QDF_STATUS (*direct_buf_rx_unregister_events)( 1026 struct wlan_objmgr_psoc *psoc); 1027 QDF_STATUS (*direct_buf_rx_print_ring_stat)( 1028 struct wlan_objmgr_pdev *pdev); 1029 QDF_STATUS (*direct_buf_rx_get_ring_params) 1030 (struct wlan_objmgr_pdev *pdev, 1031 struct module_ring_params *param, 1032 uint8_t module_id, uint8_t srng_id); 1033 QDF_STATUS (*direct_buf_rx_start_ring_debug)( 1034 struct wlan_objmgr_pdev *pdev, uint8_t mod_id, 1035 uint32_t num_ring_debug_entries); 1036 QDF_STATUS (*direct_buf_rx_stop_ring_debug)( 1037 struct wlan_objmgr_pdev *pdev, uint8_t mod_id); 1038 QDF_STATUS (*direct_buf_rx_start_buffer_poisoning)( 1039 struct wlan_objmgr_pdev *pdev, uint8_t mod_id, uint32_t value); 1040 QDF_STATUS (*direct_buf_rx_stop_buffer_poisoning)( 1041 struct wlan_objmgr_pdev *pdev, uint8_t mod_id); 1042 }; 1043 #endif /* DIRECT_BUF_RX_ENABLE */ 1044 1045 #ifdef FEATURE_WLAN_TDLS 1046 /* fwd declarations for tdls tx ops */ 1047 struct tdls_info; 1048 struct tdls_peer_update_state; 1049 struct tdls_channel_switch_params; 1050 struct sta_uapsd_trig_params; 1051 /** 1052 * struct wlan_lmac_if_tdls_tx_ops - south bound tx function pointers for tdls 1053 * @update_fw_state: function to update tdls firmware state 1054 * @update_peer_state: function to update tdls peer state 1055 * @set_offchan_mode: function to set tdls offchannel mode 1056 * @tdls_reg_ev_handler: function to register for tdls events 1057 * @tdls_unreg_ev_handler: function to unregister for tdls events 1058 * 1059 * tdls module uses these functions to avail ol/da lmac services 1060 */ 1061 struct wlan_lmac_if_tdls_tx_ops { 1062 QDF_STATUS (*update_fw_state)(struct wlan_objmgr_psoc *psoc, 1063 struct tdls_info *req); 1064 QDF_STATUS (*update_peer_state)(struct wlan_objmgr_psoc *psoc, 1065 struct tdls_peer_update_state *param); 1066 QDF_STATUS (*set_offchan_mode)(struct wlan_objmgr_psoc *psoc, 1067 struct tdls_channel_switch_params *param); 1068 QDF_STATUS (*tdls_reg_ev_handler)(struct wlan_objmgr_psoc *psoc, 1069 void *arg); 1070 QDF_STATUS (*tdls_unreg_ev_handler) (struct wlan_objmgr_psoc *psoc, 1071 void *arg); 1072 }; 1073 1074 /* fwd declarations for tdls rx ops */ 1075 struct tdls_event_info; 1076 /** 1077 * struct wlan_lmac_if_tdls_rx_ops - south bound rx function pointers for tdls 1078 * @tdls_ev_handler: function to handler tdls event 1079 * 1080 * lmac modules uses this API to post scan events to tdls module 1081 */ 1082 struct wlan_lmac_if_tdls_rx_ops { 1083 QDF_STATUS (*tdls_ev_handler)(struct wlan_objmgr_psoc *psoc, 1084 struct tdls_event_info *info); 1085 }; 1086 #endif 1087 1088 /** 1089 * struct wlan_lmac_if_ftm_rx_ops - south bound rx function pointers for FTM 1090 * @ftm_ev_handler: function to handle FTM event 1091 * 1092 * lmac modules uses this API to post FTM events to FTM module 1093 */ 1094 struct wlan_lmac_if_ftm_rx_ops { 1095 QDF_STATUS (*ftm_ev_handler)(struct wlan_objmgr_pdev *pdev, 1096 uint8_t *event_buf, uint32_t len); 1097 }; 1098 1099 /** 1100 * struct wlan_lmac_if_reg_tx_ops - structure of tx function 1101 * pointers for regulatory component 1102 * @register_master_handler: pointer to register event handler 1103 * @unregister_master_handler: pointer to unregister event handler 1104 * @register_master_ext_handler: pointer to register ext event handler 1105 * @unregister_master_ext_handler: pointer to unregister ext event handler 1106 * @set_country_code: 1107 * @fill_umac_legacy_chanlist: 1108 * @set_wait_for_init_cc_response_event: Wake up the thread that is waiting for 1109 * the init cc response event. 1110 * @register_11d_new_cc_handler: pointer to register 11d cc event handler 1111 * @unregister_11d_new_cc_handler: pointer to unregister 11d cc event handler 1112 * @start_11d_scan: 1113 * @stop_11d_scan: 1114 * @is_there_serv_ready_extn: 1115 * @set_user_country_code: 1116 * @register_ch_avoid_event_handler: 1117 * @unregister_ch_avoid_event_handler: 1118 * @send_ctl_info: call-back function to send CTL info to firmware 1119 * @get_phy_id_from_pdev_id: 1120 * @get_pdev_id_from_phy_id: 1121 * @set_tpc_power: send transmit power control info to firmware 1122 * @get_opclass_tbl_idx: Get opclass table index value 1123 * @send_afc_ind: send AFC indication info to firmware. 1124 * @register_afc_event_handler: pointer to register afc event handler 1125 * @unregister_afc_event_handler: pointer to unregister afc event handler 1126 * @trigger_acs_for_afc: pointer to trigger acs for afc 1127 * @trigger_update_channel_list: pointer to trigger_update_channel_list 1128 * @reg_get_min_psd: 1129 * @is_chip_11be: 1130 * @register_rate2power_table_update_event_handler: pointer to register 1131 * rate2power table update event handler. 1132 * @unregister_rate2power_table_update_event_handler: pointer to unregister 1133 * rate2power table update event handler. 1134 * @end_r2p_table_update_wait: Call-back function to end the wait on r2p update 1135 * response from fw. 1136 * @is_80p80_supported: Callback function to check if the device supports a 1137 * 6GHz 80p80 channel. 1138 * @is_freq_80p80_supported: Callback function to check if the given primary 1139 * frequency supports 80P80 mode of operation. 1140 */ 1141 struct wlan_lmac_if_reg_tx_ops { 1142 QDF_STATUS (*register_master_handler)(struct wlan_objmgr_psoc *psoc, 1143 void *arg); 1144 QDF_STATUS (*unregister_master_handler)(struct wlan_objmgr_psoc *psoc, 1145 void *arg); 1146 QDF_STATUS (*register_master_ext_handler)(struct wlan_objmgr_psoc *psoc, 1147 void *arg); 1148 QDF_STATUS (*unregister_master_ext_handler) 1149 (struct wlan_objmgr_psoc *psoc, void *arg); 1150 void (*set_wait_for_init_cc_response_event) 1151 (struct wlan_objmgr_pdev *pdev, QDF_STATUS status); 1152 QDF_STATUS (*set_country_code)(struct wlan_objmgr_psoc *psoc, 1153 void *arg); 1154 QDF_STATUS (*fill_umac_legacy_chanlist)(struct wlan_objmgr_pdev *pdev, 1155 struct regulatory_channel *cur_chan_list); 1156 QDF_STATUS (*register_11d_new_cc_handler)( 1157 struct wlan_objmgr_psoc *psoc, void *arg); 1158 QDF_STATUS (*unregister_11d_new_cc_handler)( 1159 struct wlan_objmgr_psoc *psoc, void *arg); 1160 QDF_STATUS (*start_11d_scan)(struct wlan_objmgr_psoc *psoc, 1161 struct reg_start_11d_scan_req *reg_start_11d_scan_req); 1162 QDF_STATUS (*stop_11d_scan)(struct wlan_objmgr_psoc *psoc, 1163 struct reg_stop_11d_scan_req *reg_stop_11d_scan_req); 1164 bool (*is_there_serv_ready_extn)(struct wlan_objmgr_psoc *psoc); 1165 QDF_STATUS (*set_user_country_code)(struct wlan_objmgr_psoc *psoc, 1166 uint8_t pdev_id, 1167 struct cc_regdmn_s *rd); 1168 QDF_STATUS (*register_ch_avoid_event_handler)( 1169 struct wlan_objmgr_psoc *psoc, void *arg); 1170 QDF_STATUS (*unregister_ch_avoid_event_handler)( 1171 struct wlan_objmgr_psoc *psoc, void *arg); 1172 QDF_STATUS (*send_ctl_info)(struct wlan_objmgr_psoc *psoc, 1173 struct reg_ctl_params *params); 1174 QDF_STATUS (*get_phy_id_from_pdev_id)(struct wlan_objmgr_psoc *psoc, 1175 uint8_t pdev_id, uint8_t *phy_id); 1176 QDF_STATUS (*get_pdev_id_from_phy_id)(struct wlan_objmgr_psoc *psoc, 1177 uint8_t phy_id, uint8_t *pdev_id); 1178 QDF_STATUS (*set_tpc_power)(struct wlan_objmgr_psoc *psoc, 1179 uint8_t vdev_id, 1180 struct reg_tpc_power_info *param); 1181 QDF_STATUS (*get_opclass_tbl_idx)(struct wlan_objmgr_pdev *pdev, 1182 uint8_t *opclass_tbl_idx); 1183 #ifdef CONFIG_AFC_SUPPORT 1184 QDF_STATUS (*send_afc_ind)(struct wlan_objmgr_psoc *psoc, 1185 uint8_t pdev_id, 1186 struct reg_afc_resp_rx_ind_info *param); 1187 QDF_STATUS (*register_afc_event_handler)(struct wlan_objmgr_psoc *psoc, 1188 void *arg); 1189 QDF_STATUS (*unregister_afc_event_handler) 1190 (struct wlan_objmgr_psoc *psoc, void *arg); 1191 QDF_STATUS (*trigger_acs_for_afc)(struct wlan_objmgr_pdev *pdev); 1192 QDF_STATUS (*trigger_update_channel_list) 1193 (struct wlan_objmgr_pdev *pdev); 1194 QDF_STATUS (*reg_get_min_psd) (struct wlan_objmgr_pdev *pdev, 1195 qdf_freq_t primary_freq, 1196 qdf_freq_t cen320, 1197 uint16_t punc_pattern, uint16_t bw, 1198 int16_t *min_psd); 1199 #endif 1200 bool (*is_chip_11be)(struct wlan_objmgr_psoc *psoc, 1201 uint16_t phy_id); 1202 QDF_STATUS (*register_rate2power_table_update_event_handler)( 1203 struct wlan_objmgr_psoc *psoc, 1204 void *arg); 1205 QDF_STATUS (*unregister_rate2power_table_update_event_handler)( 1206 struct wlan_objmgr_psoc *psoc, 1207 void *arg); 1208 QDF_STATUS (*end_r2p_table_update_wait)( 1209 struct wlan_objmgr_psoc *psoc, 1210 uint32_t pdev_id); 1211 bool (*is_80p80_supported)(struct wlan_objmgr_pdev *pdev); 1212 bool (*is_freq_80p80_supported)(struct wlan_objmgr_pdev *pdev, 1213 qdf_freq_t freq); 1214 }; 1215 1216 /** 1217 * struct wlan_lmac_if_dfs_tx_ops - Function pointer to call offload/lmac 1218 * functions from DFS module. 1219 * @dfs_enable: Enable DFS. 1220 * @dfs_get_caps: Get DFS capabilities. 1221 * @dfs_disable: Disable DFS 1222 * @dfs_gettsf64: Get tsf64 value. 1223 * @dfs_set_use_cac_prssi: Set use_cac_prssi value. 1224 * @dfs_get_dfsdomain: Get DFS domain. 1225 * @dfs_is_countryCode_CHINA: Check is country code CHINA. 1226 * @dfs_get_thresholds: Get thresholds. 1227 * @dfs_get_ext_busy: Get ext_busy. 1228 * @dfs_get_target_type: Get target type. 1229 * @dfs_is_countryCode_KOREA_ROC3: Check is county code Korea. 1230 * @dfs_get_ah_devid: Get ah devid. 1231 * @dfs_get_phymode_info: Get phymode info. 1232 * @dfs_reg_ev_handler: Register dfs event handler. 1233 * @dfs_process_emulate_bang_radar_cmd: Process emulate bang radar test command. 1234 * @dfs_agile_ch_cfg_cmd: Send Agile Channel Configuration command 1235 * @dfs_ocac_abort_cmd: Send Off-Channel CAC abort command. 1236 * @dfs_is_pdev_5ghz: Check if the given pdev is 5GHz. 1237 * @dfs_set_phyerr_filter_offload: Config phyerr filter offload. 1238 * @dfs_is_tgt_offload: 1239 * @dfs_is_tgt_bangradar_320_supp: To check host DFS 320MHZ support or not 1240 * @dfs_is_tgt_radar_found_chan_freq_eq_center_freq: 1241 * Check if chan_freq parameter of the 1242 * radar found wmi event points to channel 1243 * center. 1244 * @dfs_send_offload_enable_cmd: Send dfs offload enable command to fw. 1245 * @dfs_host_dfs_check_support: To check Host DFS confirmation feature 1246 * support. 1247 * @dfs_send_avg_radar_params_to_fw: Send average radar parameters to FW. 1248 * @dfs_send_usenol_pdev_param: Send usenol pdev param to FW. 1249 * @dfs_send_subchan_marking_pdev_param: Send subchan marking pdev param to FW. 1250 * @dfs_check_mode_switch_state: Find if HW mode switch is in progress. 1251 */ 1252 1253 struct wlan_lmac_if_dfs_tx_ops { 1254 QDF_STATUS (*dfs_enable)(struct wlan_objmgr_pdev *pdev, 1255 int *is_fastclk, 1256 struct wlan_dfs_phyerr_param *param, 1257 uint32_t dfsdomain); 1258 QDF_STATUS (*dfs_get_caps)(struct wlan_objmgr_pdev *pdev, 1259 struct wlan_dfs_caps *dfs_caps); 1260 QDF_STATUS (*dfs_disable)(struct wlan_objmgr_pdev *pdev, 1261 int no_cac); 1262 QDF_STATUS (*dfs_gettsf64)(struct wlan_objmgr_pdev *pdev, 1263 uint64_t *tsf64); 1264 QDF_STATUS (*dfs_set_use_cac_prssi)(struct wlan_objmgr_pdev *pdev); 1265 QDF_STATUS (*dfs_get_thresholds)(struct wlan_objmgr_pdev *pdev, 1266 struct wlan_dfs_phyerr_param *param); 1267 QDF_STATUS (*dfs_get_ext_busy)(struct wlan_objmgr_pdev *pdev, 1268 int *dfs_ext_chan_busy); 1269 QDF_STATUS (*dfs_get_target_type)(struct wlan_objmgr_pdev *pdev, 1270 uint32_t *target_type); 1271 QDF_STATUS (*dfs_get_ah_devid)(struct wlan_objmgr_pdev *pdev, 1272 uint16_t *devid); 1273 QDF_STATUS (*dfs_get_phymode_info)(struct wlan_objmgr_pdev *pdev, 1274 uint32_t chan_mode, 1275 uint32_t *mode_info, 1276 bool is_2gvht_en); 1277 QDF_STATUS (*dfs_reg_ev_handler)(struct wlan_objmgr_psoc *psoc); 1278 QDF_STATUS (*dfs_process_emulate_bang_radar_cmd)( 1279 struct wlan_objmgr_pdev *pdev, 1280 struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test); 1281 QDF_STATUS (*dfs_agile_ch_cfg_cmd)( 1282 struct wlan_objmgr_pdev *pdev, 1283 struct dfs_agile_cac_params *adfs_params); 1284 QDF_STATUS (*dfs_ocac_abort_cmd)(struct wlan_objmgr_pdev *pdev); 1285 QDF_STATUS (*dfs_is_pdev_5ghz)(struct wlan_objmgr_pdev *pdev, 1286 bool *is_5ghz); 1287 QDF_STATUS (*dfs_set_phyerr_filter_offload)( 1288 struct wlan_objmgr_pdev *pdev, 1289 bool dfs_phyerr_filter_offload); 1290 bool (*dfs_is_tgt_offload)(struct wlan_objmgr_psoc *psoc); 1291 bool (*dfs_is_tgt_bangradar_320_supp)(struct wlan_objmgr_psoc *psoc); 1292 bool (*dfs_is_tgt_radar_found_chan_freq_eq_center_freq) 1293 (struct wlan_objmgr_psoc *psoc); 1294 QDF_STATUS (*dfs_send_offload_enable_cmd)( 1295 struct wlan_objmgr_pdev *pdev, 1296 bool enable); 1297 QDF_STATUS (*dfs_host_dfs_check_support)(struct wlan_objmgr_pdev *pdev, 1298 bool *enabled); 1299 QDF_STATUS (*dfs_send_avg_radar_params_to_fw)( 1300 struct wlan_objmgr_pdev *pdev, 1301 struct dfs_radar_found_params *params); 1302 QDF_STATUS (*dfs_send_usenol_pdev_param)(struct wlan_objmgr_pdev *pdev, 1303 bool usenol); 1304 QDF_STATUS (*dfs_send_subchan_marking_pdev_param)( 1305 struct wlan_objmgr_pdev *pdev, 1306 bool subchanmark); 1307 QDF_STATUS (*dfs_check_mode_switch_state)( 1308 struct wlan_objmgr_pdev *pdev, 1309 bool *is_hw_mode_switch_in_progress); 1310 }; 1311 1312 /** 1313 * struct wlan_lmac_if_target_tx_ops - Function pointers to call target 1314 * functions from other modules. 1315 * @tgt_is_tgt_type_ar900b: To check AR900B target type. 1316 * @tgt_is_tgt_type_qca9984: To check QCA9984 target type. 1317 * @tgt_is_tgt_type_qca9888: To check QCA9888 target type. 1318 * @tgt_is_tgt_type_adrastea: To check QCS40X target type. 1319 * @tgt_is_tgt_type_qcn9000: To check QCN9000 (Pine) target type. 1320 * @tgt_is_tgt_type_qcn6122: To check QCN6122 (Spruce) target type. 1321 * @tgt_is_tgt_type_qcn9160: To check QCN9160 target type. 1322 * @tgt_is_tgt_type_qcn7605: To check QCN7605 target type. 1323 * @tgt_is_tgt_type_qcn6432: To check QCN6432 (Pebble) target type. 1324 * @tgt_get_tgt_type: Get target type 1325 * @tgt_get_tgt_version: Get target version 1326 * @tgt_get_tgt_revision: Get target revision 1327 */ 1328 struct wlan_lmac_if_target_tx_ops { 1329 bool (*tgt_is_tgt_type_ar900b)(uint32_t); 1330 bool (*tgt_is_tgt_type_qca9984)(uint32_t); 1331 bool (*tgt_is_tgt_type_qca9888)(uint32_t); 1332 bool (*tgt_is_tgt_type_adrastea)(uint32_t); 1333 bool (*tgt_is_tgt_type_qcn9000)(uint32_t); 1334 bool (*tgt_is_tgt_type_qcn6122)(uint32_t); 1335 bool (*tgt_is_tgt_type_qcn9160)(uint32_t); 1336 bool (*tgt_is_tgt_type_qcn7605)(uint32_t); 1337 bool (*tgt_is_tgt_type_qcn6432)(uint32_t); 1338 uint32_t (*tgt_get_tgt_type)(struct wlan_objmgr_psoc *psoc); 1339 uint32_t (*tgt_get_tgt_version)(struct wlan_objmgr_psoc *psoc); 1340 uint32_t (*tgt_get_tgt_revision)(struct wlan_objmgr_psoc *psoc); 1341 }; 1342 1343 #ifdef WLAN_OFFCHAN_TXRX_ENABLE 1344 /** 1345 * struct wlan_lmac_if_offchan_txrx_ops - Function pointers to check target 1346 * capabilities related to offchan txrx. 1347 * @offchan_data_tid_support: To check if target supports separate tid for 1348 * offchan data tx. 1349 */ 1350 struct wlan_lmac_if_offchan_txrx_ops { 1351 bool (*offchan_data_tid_support)(struct wlan_objmgr_pdev *pdev); 1352 }; 1353 #endif 1354 1355 struct wlan_green_ap_egap_params; 1356 1357 #ifdef WLAN_SUPPORT_GAP_LL_PS_MODE 1358 /** 1359 * struct green_ap_ll_ps_cmd_param - structure of the parameter of 1360 * green AP low latency power save mode command 1361 * @state: SAP low power state.(0 = disable, 1 = enable) 1362 * @bcn_interval: beacon interval (in ms) 1363 * @cookie: Cookie ID. Unique identifier to track power save command. 1364 * The value is generated by wlan_green_ap_get_cookie_id(). 1365 */ 1366 1367 struct green_ap_ll_ps_cmd_param { 1368 uint8_t state; 1369 uint16_t bcn_interval; 1370 uint32_t cookie; 1371 }; 1372 1373 /** 1374 * struct wlan_green_ap_ll_ps_event_param - Green AP low latency Power Save 1375 * event parameter structure 1376 * @bcn_mult: Beacon multiplier 1377 * @dialog_token: Dialog token 1378 * @next_tsf: Next TSF 1379 */ 1380 struct wlan_green_ap_ll_ps_event_param { 1381 uint16_t bcn_mult; 1382 uint32_t dialog_token; 1383 uint64_t next_tsf; 1384 }; 1385 #endif 1386 1387 /** 1388 * struct wlan_lmac_if_green_ap_tx_ops - structure of tx function 1389 * pointers for green ap component 1390 * @enable_egap: function pointer to send enable egap indication to fw 1391 * @ps_on_off_send: function pointer to send enable/disable green ap ps to fw 1392 * @reset_dev: Function pointer to reset device 1393 * @get_current_channel: function pointer to get current channel 1394 * @get_current_channel_flags: function pointer to get current channel flags 1395 * @get_capab: function pointer to get green ap capabilities 1396 * @ll_ps: function pointer to send low latency power save command 1397 */ 1398 struct wlan_lmac_if_green_ap_tx_ops { 1399 QDF_STATUS (*enable_egap)(struct wlan_objmgr_pdev *pdev, 1400 struct wlan_green_ap_egap_params *egap_params); 1401 QDF_STATUS (*ps_on_off_send)(struct wlan_objmgr_pdev *pdev, 1402 bool value, uint8_t pdev_id); 1403 QDF_STATUS (*reset_dev)(struct wlan_objmgr_pdev *pdev); 1404 uint16_t (*get_current_channel)(struct wlan_objmgr_pdev *pdev); 1405 uint64_t (*get_current_channel_flags)(struct wlan_objmgr_pdev *pdev); 1406 QDF_STATUS (*get_capab)(struct wlan_objmgr_pdev *pdev); 1407 #ifdef WLAN_SUPPORT_GAP_LL_PS_MODE 1408 QDF_STATUS (*ll_ps)(struct wlan_objmgr_vdev *vdev, 1409 struct green_ap_ll_ps_cmd_param *ll_ps_params); 1410 #endif 1411 }; 1412 1413 #ifdef FEATURE_COEX 1414 struct coex_config_params; 1415 1416 /** 1417 * struct wlan_lmac_if_coex_tx_ops - south bound tx function pointers for coex 1418 * @coex_config_send: function pointer to send coex config to fw 1419 */ 1420 struct wlan_lmac_if_coex_tx_ops { 1421 QDF_STATUS (*coex_config_send)(struct wlan_objmgr_pdev *pdev, 1422 struct coex_config_params *param); 1423 }; 1424 #endif 1425 1426 #ifdef WLAN_FEATURE_DBAM_CONFIG 1427 /** 1428 * struct wlan_lmac_if_dbam_tx_ops - south bound tx function pointers for dbam 1429 * @set_dbam_config: function pointer to send dbam config to fw 1430 * @dbam_event_attach: 1431 * @dbam_event_detach: 1432 */ 1433 struct wlan_lmac_if_dbam_tx_ops { 1434 QDF_STATUS (*set_dbam_config)(struct wlan_objmgr_psoc *psoc, 1435 struct coex_dbam_config_params *param); 1436 QDF_STATUS (*dbam_event_attach)(struct wlan_objmgr_psoc *psoc); 1437 QDF_STATUS (*dbam_event_detach)(struct wlan_objmgr_psoc *psoc); 1438 }; 1439 1440 /** 1441 * struct wlan_lmac_if_dbam_rx_ops - defines southbound rx callback for dbam 1442 * @dbam_resp_event: function pointer to rx dbam response event from FW 1443 */ 1444 struct wlan_lmac_if_dbam_rx_ops { 1445 QDF_STATUS (*dbam_resp_event)(struct wlan_objmgr_psoc *psoc, 1446 enum coex_dbam_comp_status dbam_resp); 1447 }; 1448 #endif 1449 1450 #ifdef WLAN_FEATURE_GPIO_CFG 1451 struct gpio_config_params; 1452 struct gpio_output_params; 1453 1454 /** 1455 * struct wlan_lmac_if_gpio_tx_ops - south bound tx function pointers for gpio 1456 * @set_gpio_config: function pointert to send gpio config to fw 1457 * @set_gpio_output: function pointert to send gpio output to fw 1458 */ 1459 struct wlan_lmac_if_gpio_tx_ops { 1460 QDF_STATUS (*set_gpio_config)(struct wlan_objmgr_psoc *psoc, 1461 struct gpio_config_params *param); 1462 QDF_STATUS (*set_gpio_output)(struct wlan_objmgr_psoc *psoc, 1463 struct gpio_output_params *param); 1464 }; 1465 #endif 1466 1467 #ifdef IPA_OFFLOAD 1468 struct wlan_lmac_if_ipa_tx_ops { 1469 QDF_STATUS (*ipa_uc_offload_control_req)( 1470 struct wlan_objmgr_psoc *psoc, 1471 struct ipa_uc_offload_control_params *req); 1472 QDF_STATUS (*ipa_intrabss_control_req)( 1473 struct wlan_objmgr_psoc *psoc, 1474 struct ipa_intrabss_control_params *req); 1475 }; 1476 #endif 1477 /** 1478 * struct wlan_lmac_if_son_tx_ops: son tx operations 1479 * @son_send_null: send null packet 1480 * @get_peer_rate: get peer rate 1481 * @peer_ext_stats_enable: Enable peer ext stats 1482 */ 1483 struct wlan_lmac_if_son_tx_ops { 1484 /* Function pointer to enable/disable band steering */ 1485 QDF_STATUS (*son_send_null)(struct wlan_objmgr_pdev *pdev, 1486 u_int8_t *macaddr, 1487 struct wlan_objmgr_vdev *vdev); 1488 1489 u_int32_t (*get_peer_rate)(struct wlan_objmgr_peer *peer, 1490 u_int8_t type); 1491 1492 QDF_STATUS (*peer_ext_stats_enable)(struct wlan_objmgr_pdev *pdev, 1493 u_int8_t *peer_addr, 1494 struct wlan_objmgr_vdev *vdev, 1495 u_int32_t stats_count, 1496 u_int32_t enable); 1497 }; 1498 1499 /** 1500 * struct wlan_lmac_if_son_rx_ops - son rx operations 1501 * @deliver_event: deliver mlme and other mac events 1502 * @process_mgmt_frame: process mgmt frames 1503 * @config_set: route son config from cfg80211 1504 * @config_get: route son config from cfg80211 1505 * @config_ext_set_get: route extended configs from cfg80211 1506 */ 1507 struct wlan_lmac_if_son_rx_ops { 1508 int (*deliver_event)(struct wlan_objmgr_vdev *vdev, 1509 struct wlan_objmgr_peer *peer, 1510 uint32_t event, 1511 void *event_data); 1512 int (*process_mgmt_frame)(struct wlan_objmgr_vdev *vdev, 1513 struct wlan_objmgr_peer *peer, 1514 int subtype, u_int8_t *frame, 1515 u_int16_t frame_len, 1516 void *meta_data); 1517 int (*config_set)(struct wlan_objmgr_vdev *vdev, 1518 void *params); 1519 int (*config_get)(struct wlan_objmgr_vdev *vdev, 1520 void *params); 1521 int (*config_ext_set_get)(struct wlan_objmgr_vdev *vdev, 1522 void *params, 1523 void *wri); 1524 }; 1525 1526 #ifdef WLAN_FEATURE_11BE_MLO 1527 /** 1528 * struct wlan_lmac_if_mlo_tx_ops - south bound tx function pointers for mlo 1529 * @register_events: function to register event handlers with FW 1530 * @unregister_events: function to de-register event handlers with FW 1531 * @link_set_active: function to send mlo link set active command to FW 1532 * @request_link_state_info_cmd: function pointer to send link state info 1533 * @send_link_set_bss_params_cmd: function pointer to send link set bss cmd 1534 * @shmem_local_ops: operations specific to WLAN_MLO_GLOBAL_SHMEM_SUPPORT 1535 * @send_tid_to_link_mapping: function to send T2LM command to FW 1536 * @send_link_removal_cmd: function to send MLO link removal command to FW 1537 * @send_vdev_pause: function to send MLO vdev pause to FW 1538 * @peer_ptqm_migrate_send: API to send peer ptqm migration request to FW 1539 * @send_mlo_link_switch_cnf_cmd: Send link switch status to FW 1540 * @send_wsi_link_info_cmd: send WSI link stats to FW 1541 */ 1542 struct wlan_lmac_if_mlo_tx_ops { 1543 QDF_STATUS (*register_events)(struct wlan_objmgr_psoc *psoc); 1544 QDF_STATUS (*unregister_events)(struct wlan_objmgr_psoc *psoc); 1545 QDF_STATUS (*link_set_active)(struct wlan_objmgr_psoc *psoc, 1546 struct mlo_link_set_active_param *param); 1547 QDF_STATUS (*request_link_state_info_cmd)( 1548 struct wlan_objmgr_psoc *psoc, 1549 struct mlo_link_state_cmd_params *param); 1550 QDF_STATUS (*send_link_set_bss_params_cmd)( 1551 struct wlan_objmgr_psoc *psoc, 1552 struct mlo_link_bss_params *param); 1553 1554 #ifdef WLAN_MLO_GLOBAL_SHMEM_SUPPORT 1555 struct wlan_lmac_if_global_shmem_local_ops shmem_local_ops; 1556 #endif 1557 QDF_STATUS (*send_tid_to_link_mapping)(struct wlan_objmgr_vdev *vdev, 1558 struct wlan_t2lm_info *t2lm); 1559 QDF_STATUS (*send_link_removal_cmd)( 1560 struct wlan_objmgr_psoc *psoc, 1561 const struct mlo_link_removal_cmd_params *param); 1562 QDF_STATUS (*send_vdev_pause)(struct wlan_objmgr_psoc *psoc, 1563 struct mlo_vdev_pause *info); 1564 #ifdef QCA_SUPPORT_PRIMARY_LINK_MIGRATE 1565 QDF_STATUS (*peer_ptqm_migrate_send)( 1566 struct wlan_objmgr_vdev *vdev, 1567 struct peer_ptqm_migrate_params *param); 1568 #endif /* QCA_SUPPORT_PRIMARY_LINK_MIGRATE */ 1569 #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE 1570 QDF_STATUS 1571 (*send_mlo_link_switch_cnf_cmd)(struct wlan_objmgr_psoc *psoc, 1572 struct wlan_mlo_link_switch_cnf *params); 1573 #endif /* WLAN_FEATURE_11BE_MLO_ADV_FEATURE */ 1574 QDF_STATUS (*send_wsi_link_info_cmd)( 1575 struct wlan_objmgr_pdev *pdev, 1576 struct mlo_wsi_link_stats *param); 1577 }; 1578 1579 /** 1580 * struct wlan_lmac_if_mlo_rx_ops - defines southbound rx callbacks for mlo 1581 * @process_link_set_active_resp: function pointer to rx FW events 1582 * @process_mlo_vdev_tid_to_link_map_event: function pointer to rx T2LM event 1583 * @mlo_link_removal_handler: function pointer for MLO link removal handler 1584 * @process_mlo_link_state_info_event: function pointer for mlo link state 1585 * @mlo_link_disable_request_handler: function ptr for mlo link disable request 1586 * @mlo_link_switch_request_handler: Handler function pointer to deliver link 1587 * switch request params from FW to host. 1588 * @mlo_link_state_switch_event_handler: Function pointer to handle link state 1589 * switch event 1590 */ 1591 struct wlan_lmac_if_mlo_rx_ops { 1592 QDF_STATUS 1593 (*process_link_set_active_resp)(struct wlan_objmgr_psoc *psoc, 1594 struct mlo_link_set_active_resp *event); 1595 QDF_STATUS (*process_mlo_vdev_tid_to_link_map_event)( 1596 struct wlan_objmgr_psoc *psoc, 1597 struct mlo_vdev_host_tid_to_link_map_resp *event); 1598 QDF_STATUS (*mlo_link_removal_handler)( 1599 struct wlan_objmgr_psoc *psoc, 1600 struct mlo_link_removal_evt_params *evt_params); 1601 QDF_STATUS (*process_mlo_link_state_info_event)( 1602 struct wlan_objmgr_psoc *psoc, 1603 struct ml_link_state_info_event *event); 1604 QDF_STATUS (*mlo_link_disable_request_handler)( 1605 struct wlan_objmgr_psoc *psoc, 1606 void *evt_params); 1607 #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE 1608 QDF_STATUS 1609 (*mlo_link_switch_request_handler)(struct wlan_objmgr_psoc *psoc, 1610 void *evt_params); 1611 QDF_STATUS 1612 (*mlo_link_state_switch_event_handler)(struct wlan_objmgr_psoc *psoc, 1613 struct mlo_link_switch_state_info *info); 1614 #endif /* WLAN_FEATURE_11BE_MLO_ADV_FEATURE */ 1615 }; 1616 #endif 1617 1618 #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_TWT_CONV_SUPPORTED) 1619 /** 1620 * struct wlan_lmac_if_twt_tx_ops - defines southbound tx callbacks for 1621 * TWT (Target Wake Time) component 1622 * @enable_req: function pointer to send TWT enable command to FW 1623 * @disable_req: function pointer to send TWT disable command to FW 1624 * @setup_req: function pointer to send TWT add dialog command to FW 1625 * @teardown_req: function pointer to send TWT delete dialog command to FW 1626 * @pause_req: function pointer to send TWT pause dialog command to FW 1627 * @resume_req: function pointer to send TWT resume dialog command to FW 1628 * @nudge_req: function pointer to send TWT nudge dialog command to FW 1629 * @set_ac_param: function pointer to send TWT access category param to FW 1630 * @register_events: function pointer to register events from FW 1631 * @deregister_events: function pointer to deregister events from FW 1632 */ 1633 struct wlan_lmac_if_twt_tx_ops { 1634 QDF_STATUS (*enable_req)(struct wlan_objmgr_psoc *psoc, 1635 struct twt_enable_param *params); 1636 QDF_STATUS (*disable_req)(struct wlan_objmgr_psoc *psoc, 1637 struct twt_disable_param *params); 1638 QDF_STATUS (*setup_req)(struct wlan_objmgr_psoc *psoc, 1639 struct twt_add_dialog_param *params); 1640 QDF_STATUS (*teardown_req)(struct wlan_objmgr_psoc *psoc, 1641 struct twt_del_dialog_param *params); 1642 QDF_STATUS (*pause_req)(struct wlan_objmgr_psoc *psoc, 1643 struct twt_pause_dialog_cmd_param *params); 1644 QDF_STATUS (*resume_req)(struct wlan_objmgr_psoc *psoc, 1645 struct twt_resume_dialog_cmd_param *params); 1646 QDF_STATUS (*nudge_req)(struct wlan_objmgr_psoc *psoc, 1647 struct twt_nudge_dialog_cmd_param *params); 1648 QDF_STATUS (*set_ac_param)(struct wlan_objmgr_psoc *psoc, 1649 enum twt_traffic_ac twt_ac, uint8_t mac_id); 1650 QDF_STATUS (*register_events)(struct wlan_objmgr_psoc *psoc); 1651 QDF_STATUS (*deregister_events)(struct wlan_objmgr_psoc *psoc); 1652 }; 1653 1654 /** 1655 * struct wlan_lmac_if_twt_rx_ops - defines southbound xx callbacks for 1656 * TWT (Target Wake Time) component 1657 * @twt_enable_comp_cb: function pointer to process TWT enable event 1658 * @twt_disable_comp_cb: function pointer to process TWT disable event 1659 * @twt_setup_comp_cb: function pointer to process TWT add dialog event 1660 * @twt_teardown_comp_cb: function pointer to process TWT del dialog event 1661 * @twt_pause_comp_cb: function pointer to process TWT pause dialog event 1662 * @twt_resume_comp_cb: function pointer to process TWT resume dialog 1663 * event 1664 * @twt_nudge_comp_cb: function pointer to process TWT nudge dialog event 1665 * @twt_notify_comp_cb: function pointer to process TWT notify event 1666 * @twt_ack_comp_cb: function pointer to process TWT ack event 1667 */ 1668 struct wlan_lmac_if_twt_rx_ops { 1669 QDF_STATUS (*twt_enable_comp_cb)(struct wlan_objmgr_psoc *psoc, 1670 struct twt_enable_complete_event_param *event); 1671 QDF_STATUS (*twt_disable_comp_cb)(struct wlan_objmgr_psoc *psoc, 1672 struct twt_disable_complete_event_param *event); 1673 QDF_STATUS (*twt_setup_comp_cb)(struct wlan_objmgr_psoc *psoc, 1674 struct twt_add_dialog_complete_event *event); 1675 QDF_STATUS (*twt_teardown_comp_cb)(struct wlan_objmgr_psoc *psoc, 1676 struct twt_del_dialog_complete_event_param *event); 1677 QDF_STATUS (*twt_pause_comp_cb)(struct wlan_objmgr_psoc *psoc, 1678 struct twt_pause_dialog_complete_event_param *event); 1679 QDF_STATUS (*twt_resume_comp_cb)(struct wlan_objmgr_psoc *psoc, 1680 struct twt_resume_dialog_complete_event_param *event); 1681 QDF_STATUS (*twt_nudge_comp_cb)(struct wlan_objmgr_psoc *psoc, 1682 struct twt_nudge_dialog_complete_event_param *event); 1683 QDF_STATUS (*twt_notify_comp_cb)(struct wlan_objmgr_psoc *psoc, 1684 struct twt_notify_event_param *event); 1685 QDF_STATUS (*twt_ack_comp_cb)(struct wlan_objmgr_psoc *psoc, 1686 struct twt_ack_complete_event_param *params); 1687 }; 1688 #endif 1689 1690 #ifdef WLAN_FEATURE_SR 1691 struct wlan_lmac_if_spatial_reuse_tx_ops { 1692 QDF_STATUS (*send_cfg)(struct wlan_objmgr_vdev *vdev, uint8_t sr_ctrl, 1693 uint8_t non_srg_max_pd_offset); 1694 QDF_STATUS (*send_sr_prohibit_cfg)(struct wlan_objmgr_vdev *vdev, 1695 bool he_siga_val15_allowed); 1696 QDF_STATUS (*target_if_set_sr_enable_disable)( 1697 struct wlan_objmgr_vdev *vdev, 1698 struct wlan_objmgr_pdev *pdev, 1699 bool is_sr_enable, int32_t srg_pd_threshold, 1700 int32_t non_srg_pd_threshold); 1701 QDF_STATUS (*target_if_sr_update)(struct wlan_objmgr_pdev *pdev, 1702 uint8_t vdev_id, uint32_t val); 1703 }; 1704 #endif 1705 1706 #ifdef WLAN_FEATURE_COAP 1707 /** 1708 * struct wlan_lmac_if_coap_tx_ops - south bound tx function pointers for CoAP 1709 * @attach: function pointer to attach CoAP component 1710 * @detach: function pointer to detach CoAP component 1711 * @offload_reply_enable: function pointer to enable CoAP offload reply 1712 * @offload_reply_disable: function pointer to disable CoAP offload reply 1713 * @offload_periodic_tx_enable: function pointer to enable CoAP offload 1714 * periodic transmitting 1715 * @offload_periodic_tx_disable: function pointer to disable CoAP offload 1716 * periodic transmitting 1717 * @offload_cache_get: function pointer to get cached CoAP messages 1718 */ 1719 struct wlan_lmac_if_coap_tx_ops { 1720 QDF_STATUS (*attach)(struct wlan_objmgr_psoc *psoc); 1721 QDF_STATUS (*detach)(struct wlan_objmgr_psoc *psoc); 1722 QDF_STATUS (*offload_reply_enable)(struct wlan_objmgr_vdev *vdev, 1723 struct coap_offload_reply_param *param); 1724 QDF_STATUS (*offload_reply_disable)(struct wlan_objmgr_vdev *vdev, 1725 uint32_t req_id); 1726 QDF_STATUS (*offload_periodic_tx_enable)(struct wlan_objmgr_vdev *vdev, 1727 struct coap_offload_periodic_tx_param *param); 1728 QDF_STATUS (*offload_periodic_tx_disable)(struct wlan_objmgr_vdev *vdev, 1729 uint32_t req_id); 1730 QDF_STATUS (*offload_cache_get)(struct wlan_objmgr_vdev *vdev, 1731 uint32_t req_id); 1732 }; 1733 #endif 1734 1735 #ifdef CONFIG_SAWF 1736 /** 1737 * struct wlan_lmac_if_sawf_tx_ops - Target function pointers for SAWF 1738 * 1739 * @sawf_svc_create_send: function pointer to send SAWF SVC create 1740 * @sawf_svc_disable_send: function pointer to send SAWF SVC disable 1741 * @sawf_ul_svc_update_send: function pointer to update 1742 * peer uplink QoS parameters 1743 * @sawf_update_ul_params: function pointer to update flow uplink QoS parameters 1744 */ 1745 struct wlan_lmac_if_sawf_tx_ops { 1746 QDF_STATUS 1747 (*sawf_svc_create_send)(struct wlan_objmgr_pdev *pdev, void *params); 1748 QDF_STATUS 1749 (*sawf_svc_disable_send)(struct wlan_objmgr_pdev *pdev, void *params); 1750 QDF_STATUS 1751 (*sawf_ul_svc_update_send)(struct wlan_objmgr_pdev *pdev, 1752 uint8_t vdev_id, uint8_t *peer_mac, 1753 uint8_t ac, uint8_t add_or_sub, 1754 void *svc_params); 1755 QDF_STATUS 1756 (*sawf_update_ul_params)(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id, 1757 uint8_t *peer_mac, uint8_t tid, uint8_t ac, 1758 uint32_t service_interval, uint32_t burst_size, 1759 uint32_t min_tput, uint32_t max_latency, 1760 uint8_t add_or_sub); 1761 }; 1762 #endif 1763 1764 /** 1765 * struct wlan_lmac_if_tx_ops - south bound tx function pointers 1766 * @mgmt_txrx_tx_ops: mgmt txrx tx ops 1767 * @scan: scan tx ops 1768 * @p2p: P2P tx ops 1769 * @iot_sim_tx_ops: IoT sim tx ops 1770 * @son_tx_ops: SON tx ops 1771 * @atf_tx_ops: ATF tx ops 1772 * @cp_stats_tx_ops: cp stats tx_ops 1773 * @dcs_tx_ops: DCS tx ops 1774 * @sa_api_tx_ops: SA API tx ops 1775 * @cfr_tx_ops: CFR tx ops 1776 * @sptrl_tx_ops: Spectral tx ops 1777 * @crypto_tx_ops: Crypto tx ops 1778 * @wifi_pos_tx_ops: WiFi Positioning tx ops 1779 * @reg_ops: Regulatory tx ops 1780 * @dfs_tx_ops: dfs tx ops. 1781 * @tdls_tx_ops: TDLS tx ops 1782 * @fd_tx_ops: FILS tx ops 1783 * @mops: MLME tx ops 1784 * @target_tx_ops: Target tx ops 1785 * @offchan_txrx_ops: Off-channel tx ops 1786 * @dbr_tx_ops: Direct Buffer Rx tx ops 1787 * @green_ap_tx_ops: green_ap tx_ops 1788 * @ftm_tx_ops: FTM tx ops 1789 * @coex_ops: coex tx_ops 1790 * @dbam_tx_ops: coex dbam tx_ops 1791 * @gpio_ops: gpio tx_ops 1792 * @mlo_ops: MLO tx ops 1793 * @ipa_ops: IPA tx ops 1794 * @twt_tx_ops: TWT tx ops 1795 * @spatial_reuse_tx_ops: Spatial Reuse tx ops 1796 * @coap_ops: COAP tx ops 1797 * @sawf_tx_ops: SAWF tx ops 1798 * 1799 * Callback function tabled to be registered with umac. 1800 * umac will use the functional table to send events/frames to wmi 1801 */ 1802 1803 struct wlan_lmac_if_tx_ops { 1804 /* Components to declare function pointers required by the module 1805 * in component specific structure. 1806 * The component specific ops structure can be declared in this file 1807 * only 1808 */ 1809 struct wlan_lmac_if_mgmt_txrx_tx_ops mgmt_txrx_tx_ops; 1810 struct wlan_lmac_if_scan_tx_ops scan; 1811 #ifdef CONVERGED_P2P_ENABLE 1812 struct wlan_lmac_if_p2p_tx_ops p2p; 1813 #endif 1814 #ifdef WLAN_IOT_SIM_SUPPORT 1815 struct wlan_lmac_if_iot_sim_tx_ops iot_sim_tx_ops; 1816 #endif 1817 #if defined(QCA_SUPPORT_SON) || defined(WLAN_FEATURE_SON) 1818 struct wlan_lmac_if_son_tx_ops son_tx_ops; 1819 #endif 1820 #ifdef WLAN_ATF_ENABLE 1821 struct wlan_lmac_if_atf_tx_ops atf_tx_ops; 1822 #endif 1823 #ifdef QCA_SUPPORT_CP_STATS 1824 struct wlan_lmac_if_cp_stats_tx_ops cp_stats_tx_ops; 1825 #endif 1826 #ifdef DCS_INTERFERENCE_DETECTION 1827 struct wlan_target_if_dcs_tx_ops dcs_tx_ops; 1828 #endif 1829 #ifdef WLAN_SA_API_ENABLE 1830 struct wlan_lmac_if_sa_api_tx_ops sa_api_tx_ops; 1831 #endif 1832 1833 #ifdef WLAN_CFR_ENABLE 1834 struct wlan_lmac_if_cfr_tx_ops cfr_tx_ops; 1835 #endif 1836 1837 #ifdef WLAN_CONV_SPECTRAL_ENABLE 1838 struct wlan_lmac_if_sptrl_tx_ops sptrl_tx_ops; 1839 #endif 1840 1841 struct wlan_lmac_if_crypto_tx_ops crypto_tx_ops; 1842 1843 #ifdef WIFI_POS_CONVERGED 1844 struct wlan_lmac_if_wifi_pos_tx_ops wifi_pos_tx_ops; 1845 #endif 1846 struct wlan_lmac_if_reg_tx_ops reg_ops; 1847 struct wlan_lmac_if_dfs_tx_ops dfs_tx_ops; 1848 1849 #ifdef FEATURE_WLAN_TDLS 1850 struct wlan_lmac_if_tdls_tx_ops tdls_tx_ops; 1851 #endif 1852 1853 #ifdef WLAN_SUPPORT_FILS 1854 struct wlan_lmac_if_fd_tx_ops fd_tx_ops; 1855 #endif 1856 struct wlan_lmac_if_mlme_tx_ops mops; 1857 struct wlan_lmac_if_target_tx_ops target_tx_ops; 1858 1859 #ifdef WLAN_OFFCHAN_TXRX_ENABLE 1860 struct wlan_lmac_if_offchan_txrx_ops offchan_txrx_ops; 1861 #endif 1862 1863 #ifdef DIRECT_BUF_RX_ENABLE 1864 struct wlan_lmac_if_direct_buf_rx_tx_ops dbr_tx_ops; 1865 #endif 1866 1867 #ifdef WLAN_SUPPORT_GREEN_AP 1868 struct wlan_lmac_if_green_ap_tx_ops green_ap_tx_ops; 1869 #endif 1870 1871 struct wlan_lmac_if_ftm_tx_ops ftm_tx_ops; 1872 1873 #ifdef FEATURE_COEX 1874 struct wlan_lmac_if_coex_tx_ops coex_ops; 1875 #endif 1876 1877 #ifdef WLAN_FEATURE_DBAM_CONFIG 1878 struct wlan_lmac_if_dbam_tx_ops dbam_tx_ops; 1879 #endif 1880 1881 #ifdef WLAN_FEATURE_GPIO_CFG 1882 struct wlan_lmac_if_gpio_tx_ops gpio_ops; 1883 #endif 1884 1885 #ifdef WLAN_FEATURE_11BE_MLO 1886 struct wlan_lmac_if_mlo_tx_ops mlo_ops; 1887 #endif 1888 1889 #ifdef IPA_OFFLOAD 1890 struct wlan_lmac_if_ipa_tx_ops ipa_ops; 1891 #endif 1892 1893 #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_TWT_CONV_SUPPORTED) 1894 struct wlan_lmac_if_twt_tx_ops twt_tx_ops; 1895 #endif 1896 1897 #if defined WLAN_FEATURE_SR 1898 struct wlan_lmac_if_spatial_reuse_tx_ops spatial_reuse_tx_ops; 1899 #endif 1900 1901 #ifdef WLAN_FEATURE_COAP 1902 struct wlan_lmac_if_coap_tx_ops coap_ops; 1903 #endif 1904 #ifdef CONFIG_SAWF 1905 struct wlan_lmac_if_sawf_tx_ops sawf_tx_ops; 1906 #endif 1907 }; 1908 1909 /** 1910 * struct wlan_lmac_if_mgmt_txrx_rx_ops - structure of rx function 1911 * pointers for mgmt txrx component 1912 * @mgmt_tx_completion_handler: function pointer to give tx completions 1913 * to mgmt txrx comp. 1914 * @mgmt_rx_frame_handler: function pointer to give rx frame to mgmt txrx comp. 1915 * @mgmt_txrx_get_nbuf_from_desc_id: function pointer to get nbuf from desc id 1916 * @mgmt_txrx_get_peer_from_desc_id: function pointer to get peer from desc id 1917 * @mgmt_txrx_get_vdev_id_from_desc_id: function pointer to get vdev id from 1918 * desc id 1919 * @mgmt_txrx_get_free_desc_pool_count: 1920 * @mgmt_rx_frame_entry: Entry point for Rx frames into MGMT TxRx component 1921 * @mgmt_rx_reo_rx_ops: rxops of MGMT Rx REO module 1922 */ 1923 struct wlan_lmac_if_mgmt_txrx_rx_ops { 1924 QDF_STATUS (*mgmt_tx_completion_handler)( 1925 struct wlan_objmgr_pdev *pdev, 1926 uint32_t desc_id, uint32_t status, 1927 void *tx_compl_params); 1928 QDF_STATUS (*mgmt_rx_frame_handler)( 1929 struct wlan_objmgr_psoc *psoc, 1930 qdf_nbuf_t buf, 1931 struct mgmt_rx_event_params *mgmt_rx_params); 1932 qdf_nbuf_t (*mgmt_txrx_get_nbuf_from_desc_id)( 1933 struct wlan_objmgr_pdev *pdev, 1934 uint32_t desc_id); 1935 struct wlan_objmgr_peer * (*mgmt_txrx_get_peer_from_desc_id)( 1936 struct wlan_objmgr_pdev *pdev, uint32_t desc_id); 1937 uint8_t (*mgmt_txrx_get_vdev_id_from_desc_id)( 1938 struct wlan_objmgr_pdev *pdev, 1939 uint32_t desc_id); 1940 uint32_t (*mgmt_txrx_get_free_desc_pool_count)( 1941 struct wlan_objmgr_pdev *pdev); 1942 QDF_STATUS (*mgmt_rx_frame_entry)( 1943 struct wlan_objmgr_pdev *pdev, 1944 qdf_nbuf_t buf, 1945 struct mgmt_rx_event_params *mgmt_rx_params); 1946 #ifdef WLAN_MGMT_RX_REO_SUPPORT 1947 struct wlan_lmac_if_mgmt_rx_reo_rx_ops mgmt_rx_reo_rx_ops; 1948 #endif 1949 }; 1950 1951 /** 1952 * struct wlan_lmac_if_reg_rx_ops - structure of rx function pointers 1953 * @master_list_handler: 1954 * @master_list_ext_handler: 1955 * @afc_event_handler: 1956 * @reg_11d_new_cc_handler: 1957 * @reg_set_regdb_offloaded: 1958 * @reg_set_11d_offloaded: 1959 * @reg_set_6ghz_supported: 1960 * @reg_set_5dot9_ghz_supported: 1961 * @get_dfs_region: 1962 * @reg_ch_avoid_event_handler: 1963 * @reg_freq_to_chan: 1964 * @reg_set_chan_144: 1965 * @reg_get_chan_144: 1966 * @reg_program_default_cc: 1967 * @reg_get_current_regdomain: 1968 * @reg_enable_dfs_channels: 1969 * @reg_modify_pdev_chan_range: 1970 * @reg_update_pdev_wireless_modes: 1971 * @reg_is_range_only6g: 1972 * @reg_is_range_overlap_6g: 1973 * @reg_disable_chan_coex: 1974 * @reg_ignore_fw_reg_offload_ind: 1975 * @reg_get_unii_5g_bitmap: 1976 * @reg_set_ext_tpc_supported: 1977 * @reg_set_lower_6g_edge_ch_supp: 1978 * @reg_set_disable_upper_6g_edge_ch_supp: 1979 * @reg_display_super_chan_list: 1980 * @reg_display_super_chan_list: function pointer to print super channel list 1981 * @reg_set_afc_dev_type: 1982 * @reg_get_afc_dev_type: 1983 * @reg_set_eirp_preferred_support: 1984 * @reg_get_eirp_preferred_support: 1985 * @reg_r2p_table_update_response_handler: function pointer to handle 1986 * rate2power update response from fw. 1987 */ 1988 struct wlan_lmac_if_reg_rx_ops { 1989 QDF_STATUS (*master_list_handler)(struct cur_regulatory_info 1990 *reg_info); 1991 #ifdef CONFIG_BAND_6GHZ 1992 QDF_STATUS (*master_list_ext_handler)(struct cur_regulatory_info 1993 *reg_info); 1994 #ifdef CONFIG_AFC_SUPPORT 1995 QDF_STATUS (*afc_event_handler)(struct afc_regulatory_info *afc_info); 1996 #endif 1997 #endif 1998 QDF_STATUS (*reg_11d_new_cc_handler)(struct wlan_objmgr_psoc *psoc, 1999 struct reg_11d_new_country *reg_11d_new_cc); 2000 QDF_STATUS (*reg_set_regdb_offloaded)(struct wlan_objmgr_psoc *psoc, 2001 bool val); 2002 QDF_STATUS (*reg_set_11d_offloaded)(struct wlan_objmgr_psoc *psoc, 2003 bool val); 2004 QDF_STATUS (*reg_set_6ghz_supported)(struct wlan_objmgr_psoc *psoc, 2005 bool val); 2006 QDF_STATUS (*reg_set_5dot9_ghz_supported)(struct wlan_objmgr_psoc 2007 *psoc, bool val); 2008 QDF_STATUS (*get_dfs_region)(struct wlan_objmgr_pdev *pdev, 2009 enum dfs_reg *dfs_reg); 2010 QDF_STATUS (*reg_ch_avoid_event_handler)(struct wlan_objmgr_psoc *psoc, 2011 struct ch_avoid_ind_type *ch_avoid_ind); 2012 uint8_t (*reg_freq_to_chan)(struct wlan_objmgr_pdev *pdev, 2013 qdf_freq_t freq); 2014 QDF_STATUS (*reg_set_chan_144)(struct wlan_objmgr_pdev *pdev, 2015 bool enable_ch_144); 2016 bool (*reg_get_chan_144)(struct wlan_objmgr_pdev *pdev); 2017 #ifdef WLAN_REG_PARTIAL_OFFLOAD 2018 QDF_STATUS (*reg_program_default_cc)(struct wlan_objmgr_pdev *pdev, 2019 uint16_t regdmn); 2020 QDF_STATUS (*reg_get_current_regdomain)(struct wlan_objmgr_pdev *pdev, 2021 struct cur_regdmn_info *cur_regdmn); 2022 #endif 2023 QDF_STATUS (*reg_enable_dfs_channels)(struct wlan_objmgr_pdev *pdev, 2024 bool dfs_enable); 2025 QDF_STATUS (*reg_modify_pdev_chan_range)(struct 2026 wlan_objmgr_pdev *pdev); 2027 QDF_STATUS 2028 (*reg_update_pdev_wireless_modes)(struct wlan_objmgr_pdev *pdev, 2029 uint64_t wireless_modes); 2030 bool 2031 (*reg_is_range_only6g)(qdf_freq_t low_freq, qdf_freq_t high_freq); 2032 bool 2033 (*reg_is_range_overlap_6g)(qdf_freq_t low_freq, qdf_freq_t high_freq); 2034 QDF_STATUS (*reg_disable_chan_coex)(struct wlan_objmgr_pdev *pdev, 2035 uint8_t unii_5g_bitmap); 2036 bool (*reg_ignore_fw_reg_offload_ind)(struct wlan_objmgr_psoc *psoc); 2037 QDF_STATUS (*reg_get_unii_5g_bitmap)(struct wlan_objmgr_pdev *pdev, 2038 uint8_t *bitmap); 2039 QDF_STATUS (*reg_set_ext_tpc_supported)(struct wlan_objmgr_psoc *psoc, 2040 bool val); 2041 #if defined(CONFIG_BAND_6GHZ) 2042 QDF_STATUS 2043 (*reg_set_lower_6g_edge_ch_supp)(struct wlan_objmgr_psoc *psoc, 2044 bool val); 2045 QDF_STATUS 2046 (*reg_set_disable_upper_6g_edge_ch_supp)(struct wlan_objmgr_psoc *psoc, 2047 bool val); 2048 QDF_STATUS 2049 (*reg_display_super_chan_list)(struct wlan_objmgr_pdev *pdev); 2050 #endif 2051 2052 #ifdef CONFIG_AFC_SUPPORT 2053 QDF_STATUS 2054 (*reg_set_afc_dev_type)(struct wlan_objmgr_psoc *psoc, 2055 enum reg_afc_dev_deploy_type 2056 reg_afc_dev_type); 2057 QDF_STATUS 2058 (*reg_get_afc_dev_type)(struct wlan_objmgr_psoc *psoc, 2059 enum reg_afc_dev_deploy_type 2060 *reg_afc_dev_type); 2061 QDF_STATUS 2062 (*reg_set_eirp_preferred_support)( 2063 struct wlan_objmgr_psoc *psoc, 2064 bool reg_is_eirp_support_preferred); 2065 QDF_STATUS 2066 (*reg_get_eirp_preferred_support)( 2067 struct wlan_objmgr_psoc *psoc, 2068 bool *reg_is_eirp_support_preferred); 2069 #endif 2070 QDF_STATUS (*reg_r2p_table_update_response_handler)( 2071 struct wlan_objmgr_psoc *psoc, 2072 uint32_t pdev_id); 2073 }; 2074 2075 #ifdef CONVERGED_P2P_ENABLE 2076 2077 /* forward declarations for p2p rx ops */ 2078 struct p2p_noa_info; 2079 struct p2p_lo_event; 2080 struct p2p_set_mac_filter_evt; 2081 struct mcc_quota_info; 2082 2083 /** 2084 * struct wlan_lmac_if_p2p_rx_ops - structure of rx function pointers 2085 * for P2P component 2086 * @lo_ev_handler: function pointer to give listen offload event 2087 * @noa_ev_handler: function pointer to give noa event 2088 * @add_mac_addr_filter_evt_handler: function pointer to process add mac addr 2089 * rx filter event 2090 * @mcc_quota_ev_handler: function pointer to receive mcc quota event 2091 */ 2092 struct wlan_lmac_if_p2p_rx_ops { 2093 #ifdef FEATURE_P2P_LISTEN_OFFLOAD 2094 QDF_STATUS (*lo_ev_handler)(struct wlan_objmgr_psoc *psoc, 2095 struct p2p_lo_event *event_info); 2096 #endif 2097 QDF_STATUS (*noa_ev_handler)(struct wlan_objmgr_psoc *psoc, 2098 struct p2p_noa_info *event_info); 2099 QDF_STATUS (*add_mac_addr_filter_evt_handler)( 2100 struct wlan_objmgr_psoc *psoc, 2101 struct p2p_set_mac_filter_evt *event_info); 2102 #ifdef WLAN_FEATURE_MCC_QUOTA 2103 QDF_STATUS (*mcc_quota_ev_handler)(struct wlan_objmgr_psoc *psoc, 2104 struct mcc_quota_info *event_info); 2105 #endif 2106 }; 2107 #endif 2108 2109 #ifdef WLAN_ATF_ENABLE 2110 2111 /** 2112 * struct wlan_lmac_if_atf_rx_ops - ATF south bound rx function pointers 2113 * @atf_get_fmcap: Get firmware capability for ATF 2114 * @atf_get_mode: Get mode of ATF 2115 * @atf_is_enabled: Check atf_mode, fwcap & atf_commit flags 2116 * @atf_get_msdu_desc: Get msdu desc for ATF 2117 * @atf_get_max_vdevs: Get maximum vdevs for a Radio 2118 * @atf_get_peers: Get number of peers for a radio 2119 * @atf_get_tput_based: Get throughput based enabled/disabled 2120 * @atf_get_logging: Get logging enabled/disabled 2121 * @atf_get_ssidgroup: Get ssid group state 2122 * @atf_get_vdev_ac_blk_cnt: Get AC block count for vdev 2123 * @atf_get_peer_blk_txbitmap: Get peer tx traffic AC bitmap 2124 * @atf_get_vdev_blk_txtraffic: Get vdev tx traffic block state 2125 * @atf_get_sched: Get ATF scheduled policy 2126 * @atf_get_peer_stats: Get atf peer stats 2127 * @atf_get_token_allocated: Get atf token allocated 2128 * @atf_get_token_utilized: Get atf token utilized 2129 * @atf_set_sched: Set ATF schedule policy 2130 * @atf_set_fmcap: Set firmware capability for ATF 2131 * @atf_set_msdu_desc: Set msdu desc 2132 * @atf_set_max_vdevs: Set maximum vdevs number 2133 * @atf_set_peers: Set peers number 2134 * @atf_set_peer_stats: Set peer stats 2135 * @atf_set_vdev_blk_txtraffic: Set Block/unblock vdev tx traffic 2136 * @atf_peer_blk_txtraffic: Block peer tx traffic 2137 * @atf_peer_unblk_txtraffic: Unblock peer tx traffic 2138 * @atf_set_token_allocated: Set atf token allocated 2139 * @atf_set_token_utilized: Set atf token utilized 2140 * @atf_process_tx_ppdu_stats: Process Tx PPDU stats to get ATF stats 2141 * @atf_process_rx_ppdu_stats: Process Rx PPDU stats to get ATF stats 2142 * @atf_is_stats_enabled: Check ATF stats enabled or not 2143 * @atf_set_fw_max_client_512_support: Set Max Client Support based on WMI 2144 * service bit announcement from FW 2145 */ 2146 struct wlan_lmac_if_atf_rx_ops { 2147 uint32_t (*atf_get_fmcap)(struct wlan_objmgr_psoc *psoc); 2148 uint32_t (*atf_get_mode)(struct wlan_objmgr_psoc *psoc); 2149 bool (*atf_is_enabled)(struct wlan_objmgr_psoc *psoc, 2150 struct wlan_objmgr_pdev *pdev); 2151 uint32_t (*atf_get_msdu_desc)(struct wlan_objmgr_psoc *psoc); 2152 uint32_t (*atf_get_max_vdevs)(struct wlan_objmgr_psoc *psoc); 2153 uint32_t (*atf_get_peers)(struct wlan_objmgr_psoc *psoc); 2154 uint32_t (*atf_get_tput_based)(struct wlan_objmgr_pdev *pdev); 2155 uint32_t (*atf_get_logging)(struct wlan_objmgr_pdev *pdev); 2156 uint32_t (*atf_get_ssidgroup)(struct wlan_objmgr_pdev *pdev); 2157 uint32_t (*atf_get_vdev_ac_blk_cnt)(struct wlan_objmgr_vdev *vdev); 2158 uint8_t (*atf_get_peer_blk_txbitmap)(struct wlan_objmgr_peer *peer); 2159 uint8_t (*atf_get_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev); 2160 uint32_t (*atf_get_sched)(struct wlan_objmgr_pdev *pdev); 2161 void (*atf_get_peer_stats)(struct wlan_objmgr_peer *peer, 2162 struct atf_stats *stats); 2163 uint16_t (*atf_get_token_allocated)(struct wlan_objmgr_peer *peer); 2164 uint16_t (*atf_get_token_utilized)(struct wlan_objmgr_peer *peer); 2165 void (*atf_set_sched)(struct wlan_objmgr_pdev *pdev, uint32_t value); 2166 void (*atf_set_fmcap)(struct wlan_objmgr_psoc *psoc, uint32_t value); 2167 void (*atf_set_msdu_desc)(struct wlan_objmgr_psoc *psoc, 2168 uint32_t value); 2169 void (*atf_set_max_vdevs)(struct wlan_objmgr_psoc *psoc, 2170 uint32_t value); 2171 void (*atf_set_peers)(struct wlan_objmgr_psoc *psoc, uint32_t value); 2172 void (*atf_set_peer_stats)(struct wlan_objmgr_peer *peer, 2173 struct atf_stats *stats); 2174 void (*atf_set_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev, 2175 uint8_t value); 2176 void (*atf_peer_blk_txtraffic)(struct wlan_objmgr_peer *peer, 2177 int8_t ac_id); 2178 void (*atf_peer_unblk_txtraffic)(struct wlan_objmgr_peer *peer, 2179 int8_t ac_id); 2180 void (*atf_set_token_allocated)(struct wlan_objmgr_peer *peer, 2181 uint16_t value); 2182 void (*atf_set_token_utilized)(struct wlan_objmgr_peer *peer, 2183 uint16_t value); 2184 void (*atf_process_tx_ppdu_stats)(struct wlan_objmgr_pdev *pdev, 2185 qdf_nbuf_t msg); 2186 void (*atf_process_rx_ppdu_stats)(struct wlan_objmgr_pdev *pdev, 2187 qdf_nbuf_t msg); 2188 uint8_t (*atf_is_stats_enabled)(struct wlan_objmgr_pdev *pdev); 2189 #ifdef WLAN_ATF_INCREASED_STA 2190 void (*atf_set_fw_max_client_512_support)(struct wlan_objmgr_psoc *psoc, 2191 uint8_t val); 2192 #endif 2193 }; 2194 #endif 2195 2196 #ifdef WLAN_SUPPORT_FILS 2197 /** 2198 * struct wlan_lmac_if_fd_rx_ops - FILS Discovery specific Rx function pointers 2199 * @fd_is_fils_enable: FILS enabled or not 2200 * @fd_alloc: Allocate FD buffer 2201 * @fd_stop: Stop and free deferred FD buffer 2202 * @fd_free: Free FD frame buffer 2203 * @fd_get_valid_fd_period: Get valid FD period 2204 * @fd_swfda_handler: SWFDA event handler 2205 * @fd_offload: Offload FD frame 2206 * @fd_tmpl_update: Update the FD frame template 2207 */ 2208 struct wlan_lmac_if_fd_rx_ops { 2209 uint8_t (*fd_is_fils_enable)(struct wlan_objmgr_vdev *vdev); 2210 void (*fd_alloc)(struct wlan_objmgr_vdev *vdev); 2211 void (*fd_stop)(struct wlan_objmgr_vdev *vdev); 2212 void (*fd_free)(struct wlan_objmgr_vdev *vdev); 2213 uint32_t (*fd_get_valid_fd_period)(struct wlan_objmgr_vdev *vdev, 2214 uint8_t *is_modified); 2215 QDF_STATUS (*fd_swfda_handler)(struct wlan_objmgr_vdev *vdev); 2216 QDF_STATUS (*fd_offload)(struct wlan_objmgr_vdev *vdev, 2217 uint32_t vdev_id); 2218 QDF_STATUS (*fd_tmpl_update)(struct wlan_objmgr_vdev *vdev); 2219 }; 2220 #endif 2221 2222 #ifdef WLAN_SA_API_ENABLE 2223 2224 /** 2225 * struct wlan_lmac_if_sa_api_rx_ops - SA API south bound rx function pointers 2226 * @sa_api_get_sa_supported: 2227 * @sa_api_get_validate_sw: 2228 * @sa_api_enable_sa: 2229 * @sa_api_get_sa_enable: 2230 * @sa_api_peer_assoc_hanldler: 2231 * @sa_api_update_tx_feedback: 2232 * @sa_api_update_rx_feedback: 2233 * @sa_api_ucfg_set_param: 2234 * @sa_api_ucfg_get_param: 2235 * @sa_api_is_tx_feedback_enabled: 2236 * @sa_api_is_rx_feedback_enabled: 2237 * @sa_api_convert_rate_2g: 2238 * @sa_api_convert_rate_5g: 2239 * @sa_api_get_sa_mode: 2240 * @sa_api_get_beacon_txantenna: 2241 * @sa_api_cwm_action: 2242 */ 2243 struct wlan_lmac_if_sa_api_rx_ops { 2244 uint32_t (*sa_api_get_sa_supported)(struct wlan_objmgr_psoc *psoc); 2245 uint32_t (*sa_api_get_validate_sw)(struct wlan_objmgr_psoc *psoc); 2246 void (*sa_api_enable_sa)(struct wlan_objmgr_psoc *psoc, uint32_t value); 2247 uint32_t (*sa_api_get_sa_enable)(struct wlan_objmgr_psoc *psoc); 2248 void (*sa_api_peer_assoc_hanldler)(struct wlan_objmgr_pdev *pdev, 2249 struct wlan_objmgr_peer *peer, struct sa_rate_cap *); 2250 uint32_t (*sa_api_update_tx_feedback)(struct wlan_objmgr_pdev *pdev, 2251 struct wlan_objmgr_peer *peer, 2252 struct sa_tx_feedback *feedback); 2253 uint32_t (*sa_api_update_rx_feedback)(struct wlan_objmgr_pdev *pdev, 2254 struct wlan_objmgr_peer *peer, 2255 struct sa_rx_feedback *feedback); 2256 uint32_t (*sa_api_ucfg_set_param)(struct wlan_objmgr_pdev *pdev, 2257 char *val); 2258 uint32_t (*sa_api_ucfg_get_param)(struct wlan_objmgr_pdev *pdev, 2259 char *val); 2260 uint32_t (*sa_api_is_tx_feedback_enabled) 2261 (struct wlan_objmgr_pdev *pdev); 2262 uint32_t (*sa_api_is_rx_feedback_enabled) 2263 (struct wlan_objmgr_pdev *pdev); 2264 uint32_t (*sa_api_convert_rate_2g)(uint32_t rate); 2265 uint32_t (*sa_api_convert_rate_5g)(uint32_t rate); 2266 uint32_t (*sa_api_get_sa_mode)(struct wlan_objmgr_pdev *pdev); 2267 uint32_t (*sa_api_get_beacon_txantenna)(struct wlan_objmgr_pdev *pdev); 2268 uint32_t (*sa_api_cwm_action)(struct wlan_objmgr_pdev *pdev); 2269 }; 2270 #endif 2271 2272 #ifdef WLAN_CFR_ENABLE 2273 2274 /** 2275 * struct wlan_lmac_if_cfr_rx_ops - CFR south bound rx function pointers 2276 * @cfr_support_set: Set the CFR support based on FW advert 2277 * @cfr_info_send: Send cfr info to upper layers 2278 * @cfr_capture_count_support_set: Set the capture_count support based on FW 2279 * advert 2280 * @cfr_mo_marking_support_set: Set MO marking supported based on FW advert 2281 * @cfr_aoa_for_rcc_support_set: Set AoA for RCC support based on FW advert 2282 */ 2283 struct wlan_lmac_if_cfr_rx_ops { 2284 void (*cfr_support_set)(struct wlan_objmgr_psoc *psoc, uint32_t value); 2285 uint32_t (*cfr_info_send)(struct wlan_objmgr_pdev *pdev, void *head, 2286 size_t hlen, void *data, size_t dlen, 2287 void *tail, size_t tlen); 2288 QDF_STATUS (*cfr_capture_count_support_set)( 2289 struct wlan_objmgr_psoc *psoc, uint32_t value); 2290 QDF_STATUS (*cfr_mo_marking_support_set)(struct wlan_objmgr_psoc *psoc, 2291 uint32_t value); 2292 QDF_STATUS (*cfr_aoa_for_rcc_support_set)( 2293 struct wlan_objmgr_psoc *psoc, uint32_t value); 2294 }; 2295 #endif 2296 2297 #ifdef WLAN_CONV_SPECTRAL_ENABLE 2298 /** 2299 * struct wlan_lmac_if_sptrl_rx_ops - Spectral south bound Rx operations 2300 * 2301 * @sptrlro_get_pdev_target_handle: Get Spectral handle for pdev target 2302 * private data 2303 * @sptrlro_get_psoc_target_handle: Get Spectral handle for psoc target 2304 * private data 2305 * @sptrlro_vdev_get_chan_freq: 2306 * @sptrlro_vdev_get_chan_freq_seg2: Get secondary 80 center frequency 2307 * @sptrlro_vdev_get_ch_width: 2308 * @sptrlro_vdev_get_sec20chan_freq_mhz: 2309 * @sptrlro_spectral_is_feature_disabled_pdev: Check if spectral feature is 2310 * disabled for a given pdev 2311 * @sptrlro_spectral_is_feature_disabled_psoc: Check if spectral feature is 2312 * disabled for a given psoc 2313 */ 2314 struct wlan_lmac_if_sptrl_rx_ops { 2315 void * (*sptrlro_get_pdev_target_handle)(struct wlan_objmgr_pdev *pdev); 2316 void * (*sptrlro_get_psoc_target_handle)(struct wlan_objmgr_psoc *psoc); 2317 int16_t (*sptrlro_vdev_get_chan_freq)(struct wlan_objmgr_vdev *vdev); 2318 int16_t (*sptrlro_vdev_get_chan_freq_seg2) 2319 (struct wlan_objmgr_vdev *vdev); 2320 enum phy_ch_width (*sptrlro_vdev_get_ch_width)( 2321 struct wlan_objmgr_vdev *vdev); 2322 int (*sptrlro_vdev_get_sec20chan_freq_mhz)( 2323 struct wlan_objmgr_vdev *vdev, 2324 uint16_t *sec20chan_freq); 2325 bool (*sptrlro_spectral_is_feature_disabled_pdev)( 2326 struct wlan_objmgr_pdev *pdev); 2327 bool (*sptrlro_spectral_is_feature_disabled_psoc)( 2328 struct wlan_objmgr_psoc *psoc); 2329 }; 2330 #endif /* WLAN_CONV_SPECTRAL_ENABLE */ 2331 2332 #ifdef WLAN_IOT_SIM_SUPPORT 2333 struct iot_sim_cbacks; 2334 /** 2335 * struct wlan_lmac_if_iot_sim_rx_ops - iot_sim rx operations 2336 * @iot_sim_cmd_handler: Applies iot_sim rule in outgoing and incoming frames 2337 * @iot_sim_register_cb: callback registration with iot_sim 2338 */ 2339 struct wlan_lmac_if_iot_sim_rx_ops { 2340 QDF_STATUS (*iot_sim_cmd_handler)(struct wlan_objmgr_vdev *vdev, 2341 qdf_nbuf_t n_buf, 2342 struct beacon_tmpl_params *bcn_param, 2343 bool tx, 2344 struct mgmt_rx_event_params *param); 2345 QDF_STATUS (*iot_sim_register_cb)(struct wlan_objmgr_pdev *pdev, 2346 struct iot_sim_cbacks *cb); 2347 }; 2348 #endif 2349 2350 #ifdef WIFI_POS_CONVERGED 2351 /** 2352 * struct wlan_lmac_if_wifi_pos_rx_ops - structure of rx function 2353 * pointers for wifi_pos component 2354 * @oem_rsp_event_rx: callback for WMI_OEM_RESPONSE_EVENTID 2355 * @wifi_pos_ranging_peer_create_cb: Function pointer to handle PASN peer create 2356 * request 2357 * @wifi_pos_ranging_peer_create_rsp_cb: Function pointer to handle peer create 2358 * confirm event for PASN Peer. 2359 * @wifi_pos_ranging_peer_delete_cb: Ranging peer delete handle function 2360 * pointer. 2361 * @wifi_pos_vdev_delete_all_ranging_peers_rsp_cb: Callback to handle vdev 2362 * delete all ranging peers response 2363 * @wifi_pos_vdev_delete_all_ranging_peers_cb: Delete all ranging peers for 2364 * given vdev. This is called before vdev delete to cleanup all the ranging 2365 * peers of that vdev. 2366 */ 2367 struct wlan_lmac_if_wifi_pos_rx_ops { 2368 int (*oem_rsp_event_rx)(struct wlan_objmgr_psoc *psoc, 2369 struct oem_data_rsp *oem_rsp); 2370 QDF_STATUS (*wifi_pos_ranging_peer_create_cb) 2371 (struct wlan_objmgr_psoc *psoc, 2372 struct wlan_pasn_request *req, 2373 uint8_t vdev_id, 2374 uint8_t total_entries); 2375 QDF_STATUS (*wifi_pos_ranging_peer_create_rsp_cb) 2376 (struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, 2377 struct qdf_mac_addr *peer_mac, 2378 uint8_t status); 2379 QDF_STATUS (*wifi_pos_ranging_peer_delete_cb) 2380 (struct wlan_objmgr_psoc *psoc, 2381 struct wlan_pasn_request *info, 2382 uint8_t vdev_id, uint8_t num_peers); 2383 QDF_STATUS (*wifi_pos_vdev_delete_all_ranging_peers_rsp_cb) 2384 (struct wlan_objmgr_psoc *psoc, uint8_t vdev_id); 2385 QDF_STATUS (*wifi_pos_vdev_delete_all_ranging_peers_cb) 2386 (struct wlan_objmgr_vdev *vdev); 2387 }; 2388 #endif 2389 2390 /** 2391 * struct wlan_lmac_if_dfs_rx_ops - Function pointers to call dfs functions 2392 * from lmac/offload. 2393 * @dfs_get_radars: Calls init radar table functions. 2394 * @dfs_process_phyerr: Process phyerr. 2395 * @dfs_destroy_object: Destroys the DFS object. 2396 * @dfs_radar_enable: Enables the radar. 2397 * @dfs_is_radar_enabled: Check if the radar is enabled. 2398 * @dfs_control: Used to process ioctls related to DFS. 2399 * @dfs_is_precac_timer_running: Check whether precac timer is running. 2400 * @dfs_agile_precac_start: Initiate Agile PreCAC run. 2401 * @dfs_set_agile_precac_state: Set agile precac state. 2402 * @dfs_reset_adfs_config: Reset agile dfs variables. 2403 * @dfs_dfs_ocac_complete_ind: Process offchan cac complete indication. 2404 * @dfs_start_precac_timer: Start precac timer. 2405 * @dfs_cancel_precac_timer: Cancel the precac timer. 2406 * @dfs_override_precac_timeout: Override the default precac timeout. 2407 * @dfs_set_precac_enable: Set precac enable flag. 2408 * @dfs_get_agile_precac_enable: Get the agile precac enable flag 2409 * @dfs_set_precac_intermediate_chan: Set intermediate channel for precac. 2410 * @dfs_get_precac_intermediate_chan: Get intermediate channel for precac. 2411 * @dfs_decide_precac_preferred_chan_for_freq: 2412 * Configure preferred channel during 2413 * precac. 2414 * @dfs_get_precac_chan_state_for_freq: 2415 * Get precac status for given channel. 2416 * @dfs_get_override_precac_timeout: Get precac timeout. 2417 * @dfs_set_current_channel_for_freq: 2418 * @dfs_process_radar_ind: Process radar found indication. 2419 * @dfs_dfs_cac_complete_ind: Process cac complete indication. 2420 * @dfs_stop: Clear dfs timers. 2421 * @dfs_reinit_timers: Reinitialize DFS timers. 2422 * @dfs_enable_stadfs: Enable/Disable STADFS capability. 2423 * @dfs_is_stadfs_enabled: Get STADFS capability value. 2424 * @dfs_process_phyerr_filter_offload:Process radar event. 2425 * @dfs_is_phyerr_filter_offload: Check whether phyerr filter is offload. 2426 * @dfs_action_on_status: Trigger the action to be taken based on 2427 * on host dfs status received from fw. 2428 * @dfs_override_status_timeout: Override the value of host dfs status 2429 * wait timeout. 2430 * @dfs_get_override_status_timeout: Get the value of host dfs status wait 2431 * timeout. 2432 * @dfs_reset_spoof_test: Checks if radar detection is enabled. 2433 * @dfs_is_disable_radar_marking_set: Check if dis_radar_marking param is set. 2434 * @dfs_set_nol_subchannel_marking: 2435 * @dfs_get_nol_subchannel_marking: 2436 * @dfs_set_bw_expand: API to set BW Expansion feature. 2437 * @dfs_get_bw_expand: API to get the status of BW Expansion 2438 * feature. 2439 * @dfs_set_dfs_puncture: API to set DFS puncturing feature. 2440 * @dfs_get_dfs_puncture: API to get the status of DFS puncturing 2441 * feature. 2442 * @dfs_set_bw_reduction: 2443 * @dfs_is_bw_reduction_needed: 2444 * @dfs_allow_hw_pulses: Set or unset dfs_allow_hw_pulses which 2445 * allow or disallow HW pulses. 2446 * @dfs_is_hw_pulses_allowed: Check if HW pulses are allowed or not. 2447 * @dfs_set_fw_adfs_support: Set the agile DFS FW support in DFS. 2448 * @dfs_reset_dfs_prevchan: Reset DFS previous channel structure. 2449 * @dfs_init_tmp_psoc_nol: Init temporary PSOC NOL structure. 2450 * @dfs_deinit_tmp_psoc_nol: Deinit temporary PSOC NOL structure. 2451 * @dfs_save_dfs_nol_in_psoc: Copy DFS NOL data to the PSOC copy. 2452 * @dfs_reinit_nol_from_psoc_copy: Reinit DFS NOL from the PSOC NOL copy. 2453 * @dfs_reinit_precac_lists: Reinit precac lists from other pdev. 2454 * @dfs_complete_deferred_tasks: Process mode switch completion in DFS. 2455 * @dfs_set_rcac_enable: 2456 * @dfs_get_rcac_enable: 2457 * @dfs_set_rcac_freq: 2458 * @dfs_get_rcac_freq: 2459 * @dfs_is_agile_rcac_enabled: Checks if Agile RCAC is enabled. 2460 * @dfs_agile_sm_deliver_evt: API to post events to DFS Agile SM. 2461 * @dfs_set_postnol_freq: API to set frequency to switch, post NOL. 2462 * @dfs_set_postnol_mode: API to set phymode to switch to, post NOL. 2463 * @dfs_set_postnol_cfreq2: API to set secondary center frequency to 2464 * switch to, post NOL. 2465 * @dfs_get_postnol_freq: API to get frequency to switch, post NOL. 2466 * @dfs_get_postnol_mode: API to get phymode to switch to, post NOL. 2467 * @dfs_get_postnol_cfreq2: API to get secondary center frequency to 2468 * switch to, post NOL. 2469 */ 2470 struct wlan_lmac_if_dfs_rx_ops { 2471 QDF_STATUS (*dfs_get_radars)(struct wlan_objmgr_pdev *pdev); 2472 QDF_STATUS (*dfs_process_phyerr)(struct wlan_objmgr_pdev *pdev, 2473 void *buf, 2474 uint16_t datalen, 2475 uint8_t r_rssi, 2476 uint8_t r_ext_rssi, 2477 uint32_t r_rs_tstamp, 2478 uint64_t r_fulltsf); 2479 QDF_STATUS (*dfs_destroy_object)(struct wlan_objmgr_pdev *pdev); 2480 QDF_STATUS (*dfs_radar_enable)( 2481 struct wlan_objmgr_pdev *pdev, 2482 int no_cac, 2483 uint32_t opmode, 2484 bool enable); 2485 void (*dfs_is_radar_enabled)(struct wlan_objmgr_pdev *pdev, 2486 int *ignore_dfs); 2487 QDF_STATUS (*dfs_control)(struct wlan_objmgr_pdev *pdev, 2488 u_int id, 2489 void *indata, 2490 uint32_t insize, 2491 void *outdata, 2492 uint32_t *outsize, 2493 int *error); 2494 QDF_STATUS (*dfs_is_precac_timer_running)(struct wlan_objmgr_pdev *pdev, 2495 bool *is_precac_timer_running 2496 ); 2497 QDF_STATUS (*dfs_agile_precac_start)(struct wlan_objmgr_pdev *pdev); 2498 QDF_STATUS (*dfs_set_agile_precac_state)(struct wlan_objmgr_pdev *pdev, 2499 int agile_precac_state); 2500 QDF_STATUS (*dfs_reset_adfs_config)(struct wlan_objmgr_psoc *psoc); 2501 QDF_STATUS 2502 (*dfs_dfs_ocac_complete_ind)(struct wlan_objmgr_pdev *pdev, 2503 struct vdev_adfs_complete_status *ocac_st); 2504 QDF_STATUS (*dfs_start_precac_timer)(struct wlan_objmgr_pdev *pdev); 2505 QDF_STATUS (*dfs_cancel_precac_timer)(struct wlan_objmgr_pdev *pdev); 2506 QDF_STATUS (*dfs_override_precac_timeout)( 2507 struct wlan_objmgr_pdev *pdev, 2508 int precac_timeout); 2509 QDF_STATUS (*dfs_set_precac_enable)(struct wlan_objmgr_pdev *pdev, 2510 uint32_t value); 2511 QDF_STATUS (*dfs_get_agile_precac_enable)(struct wlan_objmgr_pdev *pdev, 2512 bool *buff); 2513 #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT 2514 QDF_STATUS (*dfs_set_precac_intermediate_chan)(struct wlan_objmgr_pdev *pdev, 2515 uint32_t value); 2516 QDF_STATUS (*dfs_get_precac_intermediate_chan)(struct wlan_objmgr_pdev *pdev, 2517 int *buff); 2518 #ifdef CONFIG_CHAN_FREQ_API 2519 bool (*dfs_decide_precac_preferred_chan_for_freq)(struct 2520 wlan_objmgr_pdev *pdev, 2521 uint16_t *pref_chan_freq, 2522 enum wlan_phymode mode); 2523 2524 enum precac_chan_state (*dfs_get_precac_chan_state_for_freq)(struct 2525 wlan_objmgr_pdev *pdev, 2526 uint16_t pcac_freq); 2527 #endif 2528 #endif 2529 QDF_STATUS (*dfs_get_override_precac_timeout)( 2530 struct wlan_objmgr_pdev *pdev, 2531 int *precac_timeout); 2532 #ifdef CONFIG_CHAN_FREQ_API 2533 QDF_STATUS 2534 (*dfs_set_current_channel_for_freq)(struct wlan_objmgr_pdev *pdev, 2535 uint16_t ic_freq, 2536 uint64_t ic_flags, 2537 uint16_t ic_flagext, 2538 uint8_t ic_ieee, 2539 uint8_t ic_vhtop_ch_freq_seg1, 2540 uint8_t ic_vhtop_ch_freq_seg2, 2541 uint16_t dfs_ch_mhz_freq_seg1, 2542 uint16_t dfs_ch_mhz_freq_seg2, 2543 uint16_t dfs_ch_punc_pattern, 2544 bool *is_channel_updated); 2545 #endif 2546 #ifdef DFS_COMPONENT_ENABLE 2547 QDF_STATUS (*dfs_process_radar_ind)(struct wlan_objmgr_pdev *pdev, 2548 struct radar_found_info *radar_found); 2549 QDF_STATUS (*dfs_dfs_cac_complete_ind)(struct wlan_objmgr_pdev *pdev, 2550 uint32_t vdev_id); 2551 #endif 2552 QDF_STATUS (*dfs_stop)(struct wlan_objmgr_pdev *pdev); 2553 QDF_STATUS (*dfs_reinit_timers)(struct wlan_objmgr_pdev *pdev); 2554 void (*dfs_enable_stadfs)(struct wlan_objmgr_pdev *pdev, bool val); 2555 bool (*dfs_is_stadfs_enabled)(struct wlan_objmgr_pdev *pdev); 2556 QDF_STATUS (*dfs_process_phyerr_filter_offload)( 2557 struct wlan_objmgr_pdev *pdev, 2558 struct radar_event_info *wlan_radar_info); 2559 QDF_STATUS (*dfs_is_phyerr_filter_offload)( 2560 struct wlan_objmgr_psoc *psoc, 2561 bool *is_phyerr_filter_offload); 2562 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST) 2563 QDF_STATUS (*dfs_action_on_status)(struct wlan_objmgr_pdev *pdev, 2564 u_int32_t *dfs_status_check); 2565 #endif 2566 QDF_STATUS (*dfs_override_status_timeout)( 2567 struct wlan_objmgr_pdev *pdev, 2568 int status_timeout); 2569 QDF_STATUS (*dfs_get_override_status_timeout)( 2570 struct wlan_objmgr_pdev *pdev, 2571 int *status_timeout); 2572 QDF_STATUS (*dfs_reset_spoof_test)(struct wlan_objmgr_pdev *pdev); 2573 QDF_STATUS (*dfs_is_disable_radar_marking_set)(struct wlan_objmgr_pdev 2574 *pdev, 2575 bool *disable_radar_marking); 2576 QDF_STATUS (*dfs_set_nol_subchannel_marking)( 2577 struct wlan_objmgr_pdev *pdev, 2578 bool value); 2579 QDF_STATUS (*dfs_get_nol_subchannel_marking)( 2580 struct wlan_objmgr_pdev *pdev, 2581 bool *value); 2582 QDF_STATUS (*dfs_set_bw_expand)( 2583 struct wlan_objmgr_pdev *pdev, 2584 bool value); 2585 QDF_STATUS (*dfs_get_bw_expand)( 2586 struct wlan_objmgr_pdev *pdev, 2587 bool *value); 2588 #ifdef QCA_DFS_BW_PUNCTURE 2589 QDF_STATUS (*dfs_set_dfs_puncture)( 2590 struct wlan_objmgr_pdev *pdev, 2591 bool value); 2592 QDF_STATUS (*dfs_get_dfs_puncture)( 2593 struct wlan_objmgr_pdev *pdev, 2594 bool *value); 2595 #endif 2596 QDF_STATUS (*dfs_set_bw_reduction)(struct wlan_objmgr_pdev *pdev, 2597 bool value); 2598 QDF_STATUS (*dfs_is_bw_reduction_needed)(struct wlan_objmgr_pdev *pdev, 2599 bool *bw_reduce); 2600 void (*dfs_allow_hw_pulses)(struct wlan_objmgr_pdev *pdev, 2601 bool allow_hw_pulses); 2602 bool (*dfs_is_hw_pulses_allowed)(struct wlan_objmgr_pdev *pdev); 2603 void (*dfs_set_fw_adfs_support)(struct wlan_objmgr_pdev *pdev, 2604 bool fw_adfs_support_160, 2605 bool fw_adfs_support_non_160, 2606 bool fw_adfs_support_320); 2607 void (*dfs_reset_dfs_prevchan)(struct wlan_objmgr_pdev *pdev); 2608 void (*dfs_init_tmp_psoc_nol)(struct wlan_objmgr_pdev *pdev, 2609 uint8_t num_radios); 2610 void (*dfs_deinit_tmp_psoc_nol)(struct wlan_objmgr_pdev *pdev); 2611 void (*dfs_save_dfs_nol_in_psoc)(struct wlan_objmgr_pdev *pdev, 2612 uint8_t pdev_id); 2613 void (*dfs_reinit_nol_from_psoc_copy)(struct wlan_objmgr_pdev *pdev, 2614 uint8_t pdev_id, 2615 uint16_t low_5ghz_freq, 2616 uint16_t high_5ghz_freq); 2617 void (*dfs_reinit_precac_lists)(struct wlan_objmgr_pdev *src_pdev, 2618 struct wlan_objmgr_pdev *dest_pdev, 2619 uint16_t low_5g_freq, 2620 uint16_t high_5g_freq); 2621 void (*dfs_complete_deferred_tasks)(struct wlan_objmgr_pdev *pdev); 2622 #ifdef QCA_SUPPORT_ADFS_RCAC 2623 QDF_STATUS (*dfs_set_rcac_enable)(struct wlan_objmgr_pdev *pdev, 2624 bool rcac_en); 2625 QDF_STATUS (*dfs_get_rcac_enable)(struct wlan_objmgr_pdev *pdev, 2626 bool *rcac_en); 2627 QDF_STATUS (*dfs_set_rcac_freq)(struct wlan_objmgr_pdev *pdev, 2628 qdf_freq_t rcac_freq); 2629 QDF_STATUS (*dfs_get_rcac_freq)(struct wlan_objmgr_pdev *pdev, 2630 qdf_freq_t *rcac_freq); 2631 bool (*dfs_is_agile_rcac_enabled)(struct wlan_objmgr_pdev *pdev); 2632 #endif 2633 #ifdef QCA_SUPPORT_AGILE_DFS 2634 void (*dfs_agile_sm_deliver_evt)(struct wlan_objmgr_pdev *pdev, 2635 enum dfs_agile_sm_evt event); 2636 #endif 2637 #ifdef QCA_SUPPORT_DFS_CHAN_POSTNOL 2638 QDF_STATUS (*dfs_set_postnol_freq)(struct wlan_objmgr_pdev *pdev, 2639 qdf_freq_t postnol_freq); 2640 QDF_STATUS (*dfs_set_postnol_mode)(struct wlan_objmgr_pdev *pdev, 2641 uint16_t postnol_mode); 2642 QDF_STATUS (*dfs_set_postnol_cfreq2)(struct wlan_objmgr_pdev *pdev, 2643 qdf_freq_t postnol_cfreq2); 2644 QDF_STATUS (*dfs_get_postnol_freq)(struct wlan_objmgr_pdev *pdev, 2645 qdf_freq_t *postnol_freq); 2646 QDF_STATUS (*dfs_get_postnol_mode)(struct wlan_objmgr_pdev *pdev, 2647 uint8_t *postnol_mode); 2648 QDF_STATUS (*dfs_get_postnol_cfreq2)(struct wlan_objmgr_pdev *pdev, 2649 qdf_freq_t *postnol_cfreq2); 2650 #endif 2651 }; 2652 2653 /** 2654 * struct wlan_lmac_if_mlme_rx_ops: Function pointer to call MLME functions 2655 * @vdev_mgr_start_response: function to handle start response 2656 * @vdev_mgr_stop_response: function to handle stop response 2657 * @vdev_mgr_delete_response: function to handle delete response 2658 * @vdev_mgr_offload_bcn_tx_status_event_handle: function to handle offload 2659 * beacon tx 2660 * @vdev_mgr_tbttoffset_update_handle: function to handle tbtt offset event 2661 * @vdev_mgr_peer_delete_all_response: function to handle vdev delete all peer 2662 * event 2663 * @psoc_get_wakelock_info: function to get wakelock info 2664 * @psoc_get_vdev_response_timer_info: function to get vdev response timer 2665 * structure for a specific vdev id 2666 * @vdev_mgr_multi_vdev_restart_resp: function to handle mvr response 2667 * @vdev_mgr_set_mac_addr_response: Callback to get response for set MAC address 2668 * command 2669 * @vdev_mgr_set_max_channel_switch_time: Set max channel switch time for the 2670 * given vdev list. 2671 * @vdev_mgr_quiet_offload: handle quiet status for given link mac addr or 2672 * mld addr and link id. 2673 * @vdev_mgr_csa_received: function to handle csa ie received event 2674 */ 2675 struct wlan_lmac_if_mlme_rx_ops { 2676 QDF_STATUS (*vdev_mgr_start_response)( 2677 struct wlan_objmgr_psoc *psoc, 2678 struct vdev_start_response *rsp); 2679 QDF_STATUS (*vdev_mgr_stop_response)( 2680 struct wlan_objmgr_psoc *psoc, 2681 struct vdev_stop_response *rsp); 2682 QDF_STATUS (*vdev_mgr_delete_response)( 2683 struct wlan_objmgr_psoc *psoc, 2684 struct vdev_delete_response *rsp); 2685 QDF_STATUS (*vdev_mgr_offload_bcn_tx_status_event_handle)( 2686 uint32_t vdev_id, 2687 uint32_t tx_status); 2688 QDF_STATUS (*vdev_mgr_tbttoffset_update_handle)( 2689 uint32_t num_vdevs, 2690 bool is_ext); 2691 QDF_STATUS (*vdev_mgr_peer_delete_all_response)( 2692 struct wlan_objmgr_psoc *psoc, 2693 struct peer_delete_all_response *rsp); 2694 QDF_STATUS (*vdev_mgr_multi_vdev_restart_resp)( 2695 struct wlan_objmgr_psoc *psoc, 2696 struct multi_vdev_restart_resp *rsp); 2697 #ifdef FEATURE_VDEV_OPS_WAKELOCK 2698 struct psoc_mlme_wakelock *(*psoc_get_wakelock_info)( 2699 struct wlan_objmgr_psoc *psoc); 2700 #endif 2701 struct vdev_response_timer *(*psoc_get_vdev_response_timer_info)( 2702 struct wlan_objmgr_psoc *psoc, 2703 uint8_t vdev_id); 2704 #ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE 2705 void (*vdev_mgr_set_mac_addr_response)(struct wlan_objmgr_vdev *vdev, 2706 uint8_t status); 2707 #endif 2708 void (*vdev_mgr_set_max_channel_switch_time) 2709 (struct wlan_objmgr_psoc *psoc, 2710 uint32_t *vdev_ids, uint32_t num_vdevs); 2711 #ifdef WLAN_FEATURE_11BE_MLO 2712 QDF_STATUS (*vdev_mgr_quiet_offload)( 2713 struct wlan_objmgr_psoc *psoc, 2714 struct vdev_sta_quiet_event *quiet_event); 2715 #endif 2716 QDF_STATUS (*vdev_mgr_csa_received)(struct wlan_objmgr_psoc *psoc, 2717 uint8_t vdev_id, 2718 struct csa_offload_params *csa_event); 2719 }; 2720 2721 #ifdef WLAN_SUPPORT_GREEN_AP 2722 struct wlan_lmac_if_green_ap_rx_ops { 2723 bool (*is_ps_enabled)(struct wlan_objmgr_pdev *pdev); 2724 bool (*is_dbg_print_enabled)(struct wlan_objmgr_pdev *pdev); 2725 QDF_STATUS (*ps_get)(struct wlan_objmgr_pdev *pdev, uint8_t *value); 2726 QDF_STATUS (*ps_set)(struct wlan_objmgr_pdev *pdev, uint8_t value); 2727 void (*suspend_handle)(struct wlan_objmgr_pdev *pdev); 2728 #if defined(WLAN_SUPPORT_GAP_LL_PS_MODE) 2729 QDF_STATUS (*ll_ps_cb)(struct wlan_green_ap_ll_ps_event_param 2730 *ll_ps_event_param); 2731 #endif 2732 }; 2733 #endif 2734 2735 /** 2736 * struct wlan_lmac_if_rx_ops - south bound rx function pointers 2737 * @mgmt_txrx_rx_ops: mgmt txrx rx ops 2738 * @scan: scan rx ops 2739 * @son_rx_ops: son rx ops 2740 * @p2p: p2p rx ops 2741 * @iot_sim_rx_ops: iot simulation rx ops 2742 * @atf_rx_ops: air time fairness rx ops 2743 * @cp_stats_rx_ops: cp stats rx ops 2744 * @dcs_rx_ops: dcs rx ops 2745 * @sa_api_rx_ops: sa api rx ops 2746 * @cfr_rx_ops: cfr rx ops 2747 * @sptrl_rx_ops: spectral rx ops 2748 * @crypto_rx_ops: crypto rx ops 2749 * @wifi_pos_rx_ops: wifi positioning rx ops 2750 * @reg_rx_ops: regulatory rx ops 2751 * @dfs_rx_ops: dfs rx ops 2752 * @tdls_rx_ops: tdls rx ops 2753 * @fd_rx_ops: fils rx ops 2754 * @mops: mlme rx ops 2755 * @green_ap_rx_ops: green ap rx ops 2756 * @ftm_rx_ops: ftm rx ops 2757 * @mlo_rx_ops: mlo rx ops 2758 * @twt_rx_ops: twt rx ops 2759 * @dbam_rx_ops: dbam rx ops 2760 * 2761 * Callback function tabled to be registered with lmac/wmi. 2762 * lmac will use the functional table to send events/frames to umac 2763 */ 2764 struct wlan_lmac_if_rx_ops { 2765 /* 2766 * Components to declare function pointers required by the module 2767 * in component specific structure. 2768 * The component specific ops structure can be declared in this file 2769 * only 2770 */ 2771 struct wlan_lmac_if_mgmt_txrx_rx_ops mgmt_txrx_rx_ops; 2772 struct wlan_lmac_if_scan_rx_ops scan; 2773 struct wlan_lmac_if_son_rx_ops son_rx_ops; 2774 2775 #ifdef CONVERGED_P2P_ENABLE 2776 struct wlan_lmac_if_p2p_rx_ops p2p; 2777 #endif 2778 #ifdef WLAN_IOT_SIM_SUPPORT 2779 struct wlan_lmac_if_iot_sim_rx_ops iot_sim_rx_ops; 2780 #endif 2781 #ifdef WLAN_ATF_ENABLE 2782 struct wlan_lmac_if_atf_rx_ops atf_rx_ops; 2783 #endif 2784 #ifdef QCA_SUPPORT_CP_STATS 2785 struct wlan_lmac_if_cp_stats_rx_ops cp_stats_rx_ops; 2786 #endif 2787 #ifdef DCS_INTERFERENCE_DETECTION 2788 struct wlan_target_if_dcs_rx_ops dcs_rx_ops; 2789 #endif 2790 #ifdef WLAN_SA_API_ENABLE 2791 struct wlan_lmac_if_sa_api_rx_ops sa_api_rx_ops; 2792 #endif 2793 2794 #ifdef WLAN_CFR_ENABLE 2795 struct wlan_lmac_if_cfr_rx_ops cfr_rx_ops; 2796 #endif 2797 2798 #ifdef WLAN_CONV_SPECTRAL_ENABLE 2799 struct wlan_lmac_if_sptrl_rx_ops sptrl_rx_ops; 2800 #endif 2801 2802 struct wlan_lmac_if_crypto_rx_ops crypto_rx_ops; 2803 #ifdef WIFI_POS_CONVERGED 2804 struct wlan_lmac_if_wifi_pos_rx_ops wifi_pos_rx_ops; 2805 #endif 2806 struct wlan_lmac_if_reg_rx_ops reg_rx_ops; 2807 struct wlan_lmac_if_dfs_rx_ops dfs_rx_ops; 2808 #ifdef FEATURE_WLAN_TDLS 2809 struct wlan_lmac_if_tdls_rx_ops tdls_rx_ops; 2810 #endif 2811 2812 #ifdef WLAN_SUPPORT_FILS 2813 struct wlan_lmac_if_fd_rx_ops fd_rx_ops; 2814 #endif 2815 2816 struct wlan_lmac_if_mlme_rx_ops mops; 2817 2818 #ifdef WLAN_SUPPORT_GREEN_AP 2819 struct wlan_lmac_if_green_ap_rx_ops green_ap_rx_ops; 2820 #endif 2821 2822 struct wlan_lmac_if_ftm_rx_ops ftm_rx_ops; 2823 #ifdef WLAN_FEATURE_11BE_MLO 2824 struct wlan_lmac_if_mlo_rx_ops mlo_rx_ops; 2825 #endif 2826 #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_TWT_CONV_SUPPORTED) 2827 struct wlan_lmac_if_twt_rx_ops twt_rx_ops; 2828 #endif 2829 #ifdef WLAN_FEATURE_DBAM_CONFIG 2830 struct wlan_lmac_if_dbam_rx_ops dbam_rx_ops; 2831 #endif 2832 }; 2833 2834 /* Function pointer to call legacy tx_ops registration in OL/WMA. 2835 */ 2836 extern QDF_STATUS (*wlan_lmac_if_umac_tx_ops_register) 2837 (struct wlan_lmac_if_tx_ops *tx_ops); 2838 2839 /* Function pointer to call legacy crypto rxpn registration in OL */ 2840 extern QDF_STATUS (*wlan_lmac_if_umac_crypto_rxpn_ops_register) 2841 (struct wlan_lmac_if_rx_ops *rx_ops); 2842 #ifdef WLAN_FEATURE_SON 2843 /** 2844 * wlan_lmac_if_son_mod_register_rx_ops() - SON Module lmac_if rx_ops 2845 * registration API 2846 * @rx_ops: lmac_if rx_ops function pointer table 2847 * 2848 * Function to register SON rx_ops with lmac_if. 2849 * 2850 * Return: void 2851 */ 2852 void wlan_lmac_if_son_mod_register_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops); 2853 #endif 2854 2855 #endif /* _WLAN_LMAC_IF_DEF_H_ */ 2856