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