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