1 /* 2 * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. 3 * 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 #ifndef _WLAN_LMAC_IF_DEF_H_ 21 #define _WLAN_LMAC_IF_DEF_H_ 22 23 #include "qdf_status.h" 24 #include "wlan_objmgr_cmn.h" 25 #ifdef DFS_COMPONENT_ENABLE 26 #include <wlan_dfs_public_struct.h> 27 #endif 28 #include "wlan_mgmt_txrx_utils_api.h" 29 #include "wlan_scan_public_structs.h" 30 31 #ifdef WLAN_ATF_ENABLE 32 #include "wlan_atf_utils_defs.h" 33 #endif 34 #ifdef QCA_SUPPORT_SON 35 #include <wlan_son_tgt_api.h> 36 #endif 37 #ifdef WLAN_SA_API_ENABLE 38 #include "wlan_sa_api_utils_defs.h" 39 #endif 40 #ifdef WLAN_CONV_SPECTRAL_ENABLE 41 #include "wlan_spectral_public_structs.h" 42 #endif 43 #include <reg_services_public_struct.h> 44 45 #ifdef WLAN_CONV_CRYPTO_SUPPORTED 46 #include "wlan_crypto_global_def.h" 47 #endif 48 49 #ifdef WLAN_CFR_ENABLE 50 #include "wlan_cfr_utils_api.h" 51 #endif 52 53 #include <wlan_dfs_tgt_api.h> 54 #include <wlan_dfs_ioctl.h> 55 56 #ifdef WLAN_IOT_SIM_SUPPORT 57 #include <wlan_iot_sim_public_structs.h> 58 #endif 59 60 /* Number of dev type: Direct attach and Offload */ 61 #define MAX_DEV_TYPE 2 62 63 #ifdef WIFI_POS_CONVERGED 64 /* forward declarations */ 65 struct oem_data_req; 66 struct oem_data_rsp; 67 #endif /* WIFI_POS_CONVERGED */ 68 69 #ifdef DIRECT_BUF_RX_ENABLE 70 /* forward declarations for direct buf rx */ 71 struct direct_buf_rx_data; 72 /* Forward declaration for module_ring_params */ 73 struct module_ring_params; 74 /*Forward declaration for dbr_module_config */ 75 struct dbr_module_config; 76 #endif 77 78 #ifdef FEATURE_WLAN_TDLS 79 #include "wlan_tdls_public_structs.h" 80 #endif 81 82 #include <wlan_vdev_mgr_tgt_if_tx_defs.h> 83 #include <wlan_vdev_mgr_tgt_if_rx_defs.h> 84 85 #ifdef DCS_INTERFERENCE_DETECTION 86 #include <wlan_dcs_tgt_api.h> 87 #endif 88 89 #ifdef QCA_SUPPORT_CP_STATS 90 91 /** 92 * typedef cp_stats_event - Definition of cp stats event 93 * Define stats_event from external cp stats component to cp_stats_event 94 */ 95 typedef struct stats_event cp_stats_event; 96 /** 97 * typedef stats_request_type - Definition of stats_req_type enum 98 * Define stats_req_type from external cp stats component to stats_request_type 99 */ 100 typedef enum stats_req_type stats_request_type; 101 /** 102 * typedef stats_req_info - Definition of cp stats req info 103 * Define request_info from external cp stats component to stats_req_info 104 */ 105 typedef struct request_info stats_req_info; 106 /** 107 * typedef stats_wake_lock - Definition of cp stats wake lock 108 * Define wake_lock_stats from external cp stats component to stats_wake_lock 109 */ 110 typedef struct wake_lock_stats stats_wake_lock; 111 112 /** 113 * struct wlan_lmac_if_cp_stats_tx_ops - defines southbound tx callbacks for 114 * control plane statistics component 115 * @cp_stats_attach: function pointer to register events from FW 116 * @cp_stats_detach: function pointer to unregister events from FW 117 */ 118 struct wlan_lmac_if_cp_stats_tx_ops { 119 QDF_STATUS (*cp_stats_attach)(struct wlan_objmgr_psoc *psoc); 120 QDF_STATUS (*cp_stats_detach)(struct wlan_objmgr_psoc *posc); 121 void (*inc_wake_lock_stats)(uint32_t reason, 122 stats_wake_lock *stats, 123 uint32_t *unspecified_wake_count); 124 QDF_STATUS (*send_req_stats)(struct wlan_objmgr_psoc *psoc, 125 enum stats_req_type type, 126 stats_req_info *req); 127 }; 128 129 /** 130 * struct wlan_lmac_if_cp_stats_rx_ops - defines southbound rx callbacks for 131 * control plane statistics component 132 * @cp_stats_rx_event_handler: function pointer to rx FW events 133 */ 134 struct wlan_lmac_if_cp_stats_rx_ops { 135 QDF_STATUS (*cp_stats_rx_event_handler)(struct wlan_objmgr_vdev *vdev); 136 QDF_STATUS (*process_stats_event)(struct wlan_objmgr_psoc *psoc, 137 cp_stats_event *ev); 138 }; 139 #endif 140 141 #ifdef DCS_INTERFERENCE_DETECTION 142 /** 143 * struct wlan_target_if_dcs_tx_ops - south bound tx function pointers for dcs 144 * @dcs_attach: function to register event handlers with FW 145 * @dcs_detach: function to de-register event handlers with FW 146 * @dcs_cmd_send: function to send dcs commands to FW 147 */ 148 struct wlan_target_if_dcs_tx_ops { 149 QDF_STATUS (*dcs_attach)(struct wlan_objmgr_psoc *psoc); 150 QDF_STATUS (*dcs_detach)(struct wlan_objmgr_psoc *psoc); 151 QDF_STATUS (*dcs_cmd_send)(struct wlan_objmgr_psoc *psoc, 152 uint32_t pdev_id, 153 bool is_host_pdev_id, 154 uint32_t dcs_enable); 155 }; 156 157 /** 158 * struct wlan_target_if_dcs_rx_ops - defines southbound rx callbacks for 159 * dcs component 160 * @process_dcs_event: function pointer to rx FW events 161 */ 162 struct wlan_target_if_dcs_rx_ops { 163 QDF_STATUS (*process_dcs_event)(struct wlan_objmgr_psoc *psoc, 164 struct dcs_stats_event *event); 165 }; 166 #endif 167 168 /** 169 * struct wlan_lmac_if_mgmt_txrx_tx_ops - structure of tx function 170 * pointers for mgmt txrx component 171 * @mgmt_tx_send: function pointer to transmit mgmt tx frame 172 * @beacon_send: function pointer to transmit beacon frame 173 * @fd_action_frame_send: function pointer to transmit FD action frame 174 * @tx_drain_nbuf_op: function pointer for any umac nbuf realted ops for 175 * pending mgmt frames cleanup 176 */ 177 struct wlan_lmac_if_mgmt_txrx_tx_ops { 178 QDF_STATUS (*mgmt_tx_send)(struct wlan_objmgr_vdev *vdev, 179 qdf_nbuf_t nbuf, u_int32_t desc_id, 180 void *mgmt_tx_params); 181 QDF_STATUS (*beacon_send)(struct wlan_objmgr_vdev *vdev, 182 qdf_nbuf_t nbuf); 183 QDF_STATUS (*fd_action_frame_send)(struct wlan_objmgr_vdev *vdev, 184 qdf_nbuf_t nbuf); 185 void (*tx_drain_nbuf_op)(struct wlan_objmgr_pdev *pdev, 186 qdf_nbuf_t nbuf); 187 }; 188 189 /** 190 * struct wlan_lmac_if_scan_tx_ops - south bound tx function pointers for scan 191 * @scan_start: function to start scan 192 * @scan_cancel: function to cancel scan 193 * @pno_start: start pno scan 194 * @pno_stop: stop pno scan 195 * @scan_reg_ev_handler: function to register for scan events 196 * @scan_unreg_ev_handler: function to unregister for scan events 197 * 198 * scan module uses these functions to avail ol/da lmac services 199 */ 200 struct wlan_lmac_if_scan_tx_ops { 201 QDF_STATUS (*scan_start)(struct wlan_objmgr_pdev *pdev, 202 struct scan_start_request *req); 203 QDF_STATUS (*scan_cancel)(struct wlan_objmgr_pdev *pdev, 204 struct scan_cancel_param *req); 205 QDF_STATUS (*pno_start)(struct wlan_objmgr_psoc *psoc, 206 struct pno_scan_req_params *req); 207 QDF_STATUS (*pno_stop)(struct wlan_objmgr_psoc *psoc, 208 uint8_t vdev_id); 209 QDF_STATUS (*scan_reg_ev_handler)(struct wlan_objmgr_psoc *psoc, 210 void *arg); 211 QDF_STATUS (*scan_unreg_ev_handler)(struct wlan_objmgr_psoc *psoc, 212 void *arg); 213 QDF_STATUS (*set_chan_list)(struct wlan_objmgr_pdev *pdev, void *arg); 214 }; 215 216 /** 217 * struct wlan_lmac_if_ftm_tx_ops - south bound tx function pointers for ftm 218 * @ftm_attach: function to register event handlers with FW 219 * @ftm_detach: function to de-register event handlers with FW 220 * @ftm_cmd_send: function to send FTM commands to FW 221 * 222 * ftm module uses these functions to avail ol/da lmac services 223 */ 224 struct wlan_lmac_if_ftm_tx_ops { 225 QDF_STATUS (*ftm_attach)(struct wlan_objmgr_psoc *psoc); 226 QDF_STATUS (*ftm_detach)(struct wlan_objmgr_psoc *psoc); 227 QDF_STATUS (*ftm_cmd_send)(struct wlan_objmgr_pdev *pdev, 228 uint8_t *buf, uint32_t len, uint8_t mac_id); 229 }; 230 231 enum wlan_mlme_cfg_id; 232 /** 233 * struct wlan_lmac_if_mlme_tx_ops - south bound tx function pointers for mlme 234 * @get_wifi_iface_id: function to get wifi interface id 235 * @vdev_mlme_attach: function to register events 236 * @vdev_mlme_detach: function to unregister events 237 * @vdev_create_send: function to send vdev create 238 * @vdev_start_send: function to send vdev start 239 * @vdev_up_send: function to send vdev up 240 * @vdev_delete_send: function to send vdev delete 241 * @vdev_stop_send: function to send vdev stop 242 * @vdev_down_send: function to send vdev down 243 * @vdev_set_param_send: function to send vdev parameter 244 * @vdev_set_tx_rx_decap_type: function to send vdev tx rx cap/decap type 245 * @vdev_set_nac_rssi_send: function to send nac rssi 246 * @vdev_set_neighbour_rx_cmd_send: function to send vdev neighbour rx cmd 247 * @vdev_sifs_trigger_send: function to send vdev sifs trigger 248 * @vdev_set_custom_aggr_size_cmd_send: function to send custom aggr size 249 * @vdev_config_ratemask_cmd_send: function to send ratemask 250 * @peer_flush_tids_send: function to flush peer tids 251 * @multiple_vdev_restart_req_cmd: function to send multiple vdev restart 252 * @beacon_send_cmd: function to send beacon 253 * @beacon_tmpl_send: function to send beacon template 254 * @vdev_bcn_miss_offload_send: function to send beacon miss offload 255 * @vdev_sta_ps_param_send: function to sent STA power save config 256 * @peer_delete_all_send: function to send vdev delete all peer request 257 * @psoc_vdev_rsp_timer_init: function to initialize psoc vdev response timer 258 * @psoc_vdev_rsp_timer_deinit: function to deinitialize psoc vdev rsp timer 259 * @psoc_vdev_rsp_timer_inuse: function to determine whether the vdev rsp 260 * timer is inuse or not 261 * @psoc_vdev_rsp_timer_mod: function to modify the time of vdev rsp timer 262 * @psoc_wake_lock_init: Initialize psoc wake lock for vdev response timer 263 * @psoc_wake_lock_deinit: De-Initialize psoc wake lock for vdev response timer 264 */ 265 struct wlan_lmac_if_mlme_tx_ops { 266 uint32_t (*get_wifi_iface_id) (struct wlan_objmgr_pdev *pdev); 267 QDF_STATUS (*vdev_mlme_attach)(struct wlan_objmgr_psoc *psoc); 268 QDF_STATUS (*vdev_mlme_detach)(struct wlan_objmgr_psoc *psoc); 269 QDF_STATUS (*vdev_create_send)(struct wlan_objmgr_vdev *vdev, 270 struct vdev_create_params *param); 271 QDF_STATUS (*vdev_start_send)(struct wlan_objmgr_vdev *vdev, 272 struct vdev_start_params *param); 273 QDF_STATUS (*vdev_up_send)(struct wlan_objmgr_vdev *vdev, 274 struct vdev_up_params *param); 275 QDF_STATUS (*vdev_delete_send)(struct wlan_objmgr_vdev *vdev, 276 struct vdev_delete_params *param); 277 QDF_STATUS (*vdev_stop_send)(struct wlan_objmgr_vdev *vdev, 278 struct vdev_stop_params *param); 279 QDF_STATUS (*vdev_down_send)(struct wlan_objmgr_vdev *vdev, 280 struct vdev_down_params *param); 281 QDF_STATUS (*vdev_set_param_send)(struct wlan_objmgr_vdev *vdev, 282 struct vdev_set_params *param); 283 QDF_STATUS (*vdev_set_tx_rx_decap_type)(struct wlan_objmgr_vdev *vdev, 284 enum wlan_mlme_cfg_id param_id, 285 uint32_t value); 286 QDF_STATUS (*vdev_set_nac_rssi_send)( 287 struct wlan_objmgr_vdev *vdev, 288 struct vdev_scan_nac_rssi_params *param); 289 QDF_STATUS (*vdev_set_neighbour_rx_cmd_send)( 290 struct wlan_objmgr_vdev *vdev, 291 struct set_neighbour_rx_params *param, 292 uint8_t *mac); 293 QDF_STATUS (*vdev_sifs_trigger_send)( 294 struct wlan_objmgr_vdev *vdev, 295 struct sifs_trigger_param *param); 296 QDF_STATUS (*vdev_set_custom_aggr_size_cmd_send)( 297 struct wlan_objmgr_vdev *vdev, 298 struct set_custom_aggr_size_params *param); 299 QDF_STATUS (*vdev_config_ratemask_cmd_send)( 300 struct wlan_objmgr_vdev *vdev, 301 struct config_ratemask_params *param); 302 QDF_STATUS (*peer_flush_tids_send)( 303 struct wlan_objmgr_vdev *vdev, 304 struct peer_flush_params *param); 305 QDF_STATUS (*multiple_vdev_restart_req_cmd)( 306 struct wlan_objmgr_pdev *pdev, 307 struct multiple_vdev_restart_params *param); 308 QDF_STATUS (*beacon_cmd_send)(struct wlan_objmgr_vdev *vdev, 309 struct beacon_params *param); 310 QDF_STATUS (*beacon_tmpl_send)(struct wlan_objmgr_vdev *vdev, 311 struct beacon_tmpl_params *param); 312 #if defined(WLAN_SUPPORT_FILS) || defined(CONFIG_BAND_6GHZ) 313 QDF_STATUS (*vdev_fils_enable_send)(struct wlan_objmgr_vdev *vdev, 314 struct config_fils_params *param); 315 #endif 316 QDF_STATUS (*vdev_bcn_miss_offload_send)(struct wlan_objmgr_vdev *vdev); 317 QDF_STATUS (*vdev_sta_ps_param_send)(struct wlan_objmgr_vdev *vdev, 318 struct sta_ps_params *param); 319 QDF_STATUS (*peer_delete_all_send)( 320 struct wlan_objmgr_vdev *vdev, 321 struct peer_delete_all_params *param); 322 QDF_STATUS (*psoc_vdev_rsp_timer_init)( 323 struct wlan_objmgr_psoc *psoc, 324 uint8_t vdev_id); 325 void (*psoc_vdev_rsp_timer_deinit)( 326 struct wlan_objmgr_psoc *psoc, 327 uint8_t vdev_id); 328 QDF_STATUS (*psoc_vdev_rsp_timer_inuse)( 329 struct wlan_objmgr_psoc *psoc, 330 uint8_t vdev_id); 331 QDF_STATUS (*psoc_vdev_rsp_timer_mod)( 332 struct wlan_objmgr_psoc *psoc, 333 uint8_t vdev_id, 334 int mseconds); 335 void (*psoc_wake_lock_init)( 336 struct wlan_objmgr_psoc *psoc); 337 void (*psoc_wake_lock_deinit)( 338 struct wlan_objmgr_psoc *psoc); 339 QDF_STATUS (*vdev_mgr_rsp_timer_stop)( 340 struct wlan_objmgr_psoc *psoc, 341 struct vdev_response_timer *vdev_rsp, 342 enum wlan_vdev_mgr_tgt_if_rsp_bit clear_bit); 343 }; 344 345 /** 346 * struct wlan_lmac_if_scan_rx_ops - south bound rx function pointers for scan 347 * @scan_ev_handler: scan event handler 348 * @scan_set_max_active_scans: set max active scans allowed 349 * 350 * lmac modules uses this API to post scan events to scan module 351 */ 352 struct wlan_lmac_if_scan_rx_ops { 353 QDF_STATUS (*scan_ev_handler)(struct wlan_objmgr_psoc *psoc, 354 struct scan_event_info *event_info); 355 QDF_STATUS (*scan_set_max_active_scans)(struct wlan_objmgr_psoc *psoc, 356 uint32_t max_active_scans); 357 }; 358 359 #ifdef CONVERGED_P2P_ENABLE 360 361 /* forward declarations for p2p tx ops */ 362 struct p2p_ps_config; 363 struct p2p_lo_start; 364 struct p2p_set_mac_filter; 365 366 /** 367 * struct wlan_lmac_if_p2p_tx_ops - structure of tx function pointers 368 * for P2P component 369 * @set_ps: function pointer to set power save 370 * @lo_start: function pointer to start listen offload 371 * @lo_stop: function pointer to stop listen offload 372 * @set_noa: function pointer to disable/enable NOA 373 * @reg_lo_ev_handler: function pointer to register lo event handler 374 * @reg_noa_ev_handler: function pointer to register noa event handler 375 * @unreg_lo_ev_handler: function pointer to unregister lo event handler 376 * @unreg_noa_ev_handler:function pointer to unregister noa event handler 377 * @reg_mac_addr_rx_filter_handler: function pointer to register/unregister 378 * set mac addr status event callback. 379 * @set_mac_addr_rx_filter_cmd: function pointer to set mac addr rx filter 380 */ 381 struct wlan_lmac_if_p2p_tx_ops { 382 QDF_STATUS (*set_ps)(struct wlan_objmgr_psoc *psoc, 383 struct p2p_ps_config *ps_config); 384 #ifdef FEATURE_P2P_LISTEN_OFFLOAD 385 QDF_STATUS (*lo_start)(struct wlan_objmgr_psoc *psoc, 386 struct p2p_lo_start *lo_start); 387 QDF_STATUS (*lo_stop)(struct wlan_objmgr_psoc *psoc, 388 uint32_t vdev_id); 389 QDF_STATUS (*reg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc, 390 void *arg); 391 QDF_STATUS (*unreg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc, 392 void *arg); 393 #endif 394 QDF_STATUS (*set_noa)(struct wlan_objmgr_psoc *psoc, 395 uint32_t vdev_id, bool disable_noa); 396 QDF_STATUS (*reg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc, 397 void *arg); 398 QDF_STATUS (*unreg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc, 399 void *arg); 400 QDF_STATUS (*reg_mac_addr_rx_filter_handler)( 401 struct wlan_objmgr_psoc *psoc, bool reg); 402 QDF_STATUS (*set_mac_addr_rx_filter_cmd)( 403 struct wlan_objmgr_psoc *psoc, 404 struct p2p_set_mac_filter *param); 405 }; 406 #endif 407 408 #ifdef WLAN_ATF_ENABLE 409 410 /** 411 * struct wlan_lmac_if_atf_tx_ops - ATF specific tx function pointers 412 * @atf_node_unblock: Resume node 413 * @atf_set_enable_disable: Set atf enable/disable 414 * @atf_tokens_used: Get used atf tokens 415 * @atf_get_unused_txtoken: Get unused atf tokens 416 * @atf_peer_resume: Resume peer 417 * @atf_tokens_unassigned: Set unassigned atf tockens 418 * @atf_capable_peer: Set atf state change 419 * @atf_airtime_estimate: Get estimated airtime 420 * @atf_debug_peerstate: Get peer state 421 * @atf_enable_disable: Set atf peer stats enable/disable 422 * @atf_ssid_sched_policy: Set ssid schedule policy 423 * @atf_set: Set atf 424 * @atf_set_grouping: Set atf grouping 425 * @atf_set_group_ac: Set atf Group AC 426 * @atf_send_peer_request: Send peer requests 427 * @atf_set_bwf: Set bandwidth fairness 428 * @atf_peer_buf_held: Get buffer held 429 * @atf_get_peer_airtime: Get peer airtime 430 * @atf_get_chbusyper: Get channel busy 431 * @atf_open: ATF open 432 * @atf_register_event_handler ATF register wmi event handlers 433 * @atf_unregister_event_handler ATF unregister wmi event handlers 434 */ 435 struct wlan_lmac_if_atf_tx_ops { 436 void (*atf_node_unblock)(struct wlan_objmgr_pdev *pdev, 437 struct wlan_objmgr_peer *peer); 438 void (*atf_set_enable_disable)(struct wlan_objmgr_pdev *pdev, 439 uint8_t value); 440 uint8_t (*atf_tokens_used)(struct wlan_objmgr_pdev *pdev, 441 struct wlan_objmgr_peer *peer); 442 void (*atf_get_unused_txtoken)(struct wlan_objmgr_pdev *pdev, 443 struct wlan_objmgr_peer *peer, 444 int *unused_token); 445 void (*atf_peer_resume)(struct wlan_objmgr_pdev *pdev, 446 struct wlan_objmgr_peer *peer); 447 void (*atf_tokens_unassigned)(struct wlan_objmgr_pdev *pdev, 448 uint32_t tokens_unassigned); 449 void (*atf_capable_peer)(struct wlan_objmgr_pdev *pdev, 450 struct wlan_objmgr_peer *peer, 451 uint8_t val, uint8_t atfstate_change); 452 uint32_t (*atf_airtime_estimate)(struct wlan_objmgr_pdev *pdev, 453 struct wlan_objmgr_peer *peer, 454 uint32_t tput, 455 uint32_t *possible_tput); 456 uint32_t (*atf_debug_peerstate)(struct wlan_objmgr_pdev *pdev, 457 struct wlan_objmgr_peer *peer, 458 struct atf_peerstate *peerstate); 459 int32_t (*atf_enable_disable)(struct wlan_objmgr_vdev *vdev, 460 uint8_t value); 461 int32_t (*atf_ssid_sched_policy)(struct wlan_objmgr_vdev *vdev, 462 uint8_t value); 463 int32_t (*atf_set)(struct wlan_objmgr_pdev *pdev, 464 struct pdev_atf_req *atf_req, 465 uint8_t atf_tput_based); 466 int32_t (*atf_set_grouping)(struct wlan_objmgr_pdev *pdev, 467 struct pdev_atf_ssid_group_req *atf_grp_req, 468 uint8_t atf_tput_based); 469 int32_t (*atf_set_group_ac)(struct wlan_objmgr_pdev *pdev, 470 struct pdev_atf_group_wmm_ac_req *atf_acreq, 471 uint8_t atf_tput_based); 472 int32_t (*atf_send_peer_request)(struct wlan_objmgr_pdev *pdev, 473 struct pdev_atf_peer_ext_request *atfr, 474 uint8_t atf_tput_based); 475 int32_t (*atf_set_bwf)(struct wlan_objmgr_pdev *pdev, 476 struct pdev_bwf_req *bwf_req); 477 uint32_t (*atf_peer_buf_held)(struct wlan_objmgr_peer *peer); 478 uint32_t (*atf_get_peer_airtime)(struct wlan_objmgr_peer *peer); 479 uint32_t (*atf_get_chbusyper)(struct wlan_objmgr_pdev *pdev); 480 void (*atf_open)(struct wlan_objmgr_psoc *psoc); 481 void (*atf_register_event_handler)(struct wlan_objmgr_psoc *psoc); 482 void (*atf_unregister_event_handler)(struct wlan_objmgr_psoc *psoc); 483 }; 484 #endif 485 486 #ifdef WLAN_SUPPORT_FILS 487 /** 488 * struct wlan_lmac_if_fd_tx_ops - FILS Discovery specific Tx function pointers 489 * @fd_vdev_config_fils: Enable and configure FILS Discovery 490 * @fd_register_event_handler: Register swfda WMI event handler 491 * @fd_unregister_event_handler: Un-register swfda WMI event handler 492 * @fd_offload_tmpl_send: Send FD template to FW 493 */ 494 struct wlan_lmac_if_fd_tx_ops { 495 QDF_STATUS (*fd_vdev_config_fils)(struct wlan_objmgr_vdev *vdev, 496 uint32_t fd_period); 497 void (*fd_register_event_handler)(struct wlan_objmgr_psoc *psoc); 498 void (*fd_unregister_event_handler)(struct wlan_objmgr_psoc *psoc); 499 QDF_STATUS (*fd_offload_tmpl_send)(struct wlan_objmgr_pdev *pdev, 500 struct fils_discovery_tmpl_params *fd_tmpl_param); 501 }; 502 #endif 503 504 #ifdef WLAN_SA_API_ENABLE 505 506 /** 507 * struct wlan_lmac_if_sa_api_tx_ops - SA API specific tx function pointers 508 */ 509 510 struct wlan_lmac_if_sa_api_tx_ops { 511 void (*sa_api_register_event_handler)(struct wlan_objmgr_psoc *psoc); 512 void (*sa_api_unregister_event_handler)(struct wlan_objmgr_psoc *posc); 513 void (*sa_api_enable_sa) (struct wlan_objmgr_pdev *pdev, 514 uint32_t enable, uint32_t mode, uint32_t rx_antenna); 515 void (*sa_api_set_rx_antenna) (struct wlan_objmgr_pdev *pdev, 516 uint32_t antenna); 517 void (*sa_api_set_tx_antenna) (struct wlan_objmgr_peer *peer, 518 uint32_t *antenna_array); 519 void (*sa_api_set_tx_default_antenna) (struct wlan_objmgr_pdev *pdev, 520 u_int32_t antenna); 521 void (*sa_api_set_training_info) (struct wlan_objmgr_peer *peer, 522 uint32_t *rate_array, 523 uint32_t *antenna_array, 524 uint32_t numpkts); 525 void (*sa_api_prepare_rateset)(struct wlan_objmgr_pdev *pdev, 526 struct wlan_objmgr_peer *peer, 527 struct sa_rate_info *rate_info); 528 void (*sa_api_set_node_config_ops) (struct wlan_objmgr_peer *peer, 529 uint32_t cmd_id, uint16_t args_count, 530 u_int32_t args_arr[]); 531 }; 532 533 #endif 534 535 #ifdef WLAN_CFR_ENABLE 536 /** 537 * struct wlan_lmac_if_cfr_tx_ops - CFR specific tx function pointers 538 * @cfr_init_pdev: Initialize CFR 539 * @cfr_deinit_pdev: De-initialize CFR 540 * @cfr_enable_cfr_timer: Function to enable CFR timer 541 * @cfr_start_capture: Function to start CFR capture 542 * @cfr_stop_capture: Function to stop CFR capture 543 * @cfr_config_rcc: Function to set the Repetitive channel capture params 544 * @cfr_start_lut_timer: Function to start timer to flush aged-out LUT entries 545 * @cfr_stop_lut_timer: Function to stop timer to flush aged-out LUT entries 546 * @cfr_default_ta_ra_cfg: Function to configure default values for TA_RA mode 547 * @cfr_dump_lut_enh: Function to dump LUT entries 548 * @cfr_rx_tlv_process: Function to process PPDU status TLVs 549 * @cfr_update_global_cfg: Function to update the global config for 550 * a successful commit session. 551 */ 552 struct wlan_lmac_if_cfr_tx_ops { 553 int (*cfr_init_pdev)(struct wlan_objmgr_psoc *psoc, 554 struct wlan_objmgr_pdev *pdev); 555 int (*cfr_deinit_pdev)(struct wlan_objmgr_psoc *psoc, 556 struct wlan_objmgr_pdev *pdev); 557 int (*cfr_enable_cfr_timer)(struct wlan_objmgr_pdev *pdev, 558 uint32_t cfr_timer); 559 int (*cfr_start_capture)(struct wlan_objmgr_pdev *pdev, 560 struct wlan_objmgr_peer *peer, 561 struct cfr_capture_params *params); 562 int (*cfr_stop_capture)(struct wlan_objmgr_pdev *pdev, 563 struct wlan_objmgr_peer *peer); 564 #ifdef WLAN_ENH_CFR_ENABLE 565 QDF_STATUS (*cfr_config_rcc)(struct wlan_objmgr_pdev *pdev, 566 struct cfr_rcc_param *params); 567 void (*cfr_start_lut_timer)(struct wlan_objmgr_pdev *pdev); 568 void (*cfr_stop_lut_timer)(struct wlan_objmgr_pdev *pdev); 569 void (*cfr_default_ta_ra_cfg)(struct cfr_rcc_param *params, 570 bool allvalid, uint16_t reset_cfg); 571 void (*cfr_dump_lut_enh)(struct wlan_objmgr_pdev *pdev); 572 void (*cfr_rx_tlv_process)(struct wlan_objmgr_pdev *pdev, void *nbuf); 573 void (*cfr_update_global_cfg)(struct wlan_objmgr_pdev *pdev); 574 QDF_STATUS (*cfr_subscribe_ppdu_desc)(struct wlan_objmgr_pdev *pdev, 575 bool is_subscribe); 576 #endif 577 }; 578 #endif /* WLAN_CFR_ENABLE */ 579 580 #ifdef WLAN_CONV_SPECTRAL_ENABLE 581 struct spectral_wmi_ops; 582 struct spectral_tgt_ops; 583 /** 584 * struct wlan_lmac_if_sptrl_tx_ops - Spectral south bound Tx operations 585 * @sptrlto_pdev_spectral_init: Initialize target_if pdev Spectral object 586 * @sptrlto_pdev_spectral_deinit: De-initialize target_if pdev Spectral object 587 * @sptrlto_psoc_spectral_init: Initialize target_if psoc Spectral object 588 * @sptrlto_psoc_spectral_deinit: De-initialize target_if psoc Spectral object 589 * @sptrlto_set_spectral_config: Set Spectral configuration 590 * @sptrlto_get_spectral_config: Get Spectral configuration 591 * @sptrlto_start_spectral_scan: Start Spectral Scan 592 * @sptrlto_stop_spectral_scan: Stop Spectral Scan 593 * @sptrlto_is_spectral_active: Get whether Spectral is active 594 * @sptrlto_is_spectral_enabled: Get whether Spectral is enabled 595 * @sptrlto_set_icm_active: Set whether ICM is active or inactive 596 * @sptrlto_get_icm_active: Get whether ICM is active or inactive 597 * @sptrlto_get_nominal_nf: Get Nominal Noise Floor for the current 598 * frequency band 599 * @sptrlto_set_debug_level: Set Spectral debug level 600 * @sptrlto_get_debug_level: Get Spectral debug level 601 * @sptrlto_get_chaninfo: Get channel information 602 * @sptrlto_clear_chaninfo: Clear channel information 603 * @sptrlto_get_spectral_capinfo: Get Spectral capability information 604 * @sptrlto_get_spectral_diagstats: Get Spectral diagnostic statistics 605 * @sptrlto_register_spectral_wmi_ops: Register Spectral WMI operations 606 * @sptrlto_register_spectral_tgt_ops: Register Spectral target operations 607 * @sptrlto_register_netlink_cb: Register Spectral Netlink callbacks 608 * @sptrlto_use_nl_bcast: Get whether to use Netlink broadcast/unicast 609 * @sptrlto_deregister_netlink_cb: De-register Spectral Netlink callbacks 610 * @sptrlto_process_spectral_report: Process spectral report 611 * @sptrlto_set_dma_debug: Set DMA debug for Spectral 612 * @sptrlto_direct_dma_support: Whether Direct-DMA is supported on this radio 613 * @sptrlto_check_and_do_dbr_ring_debug: Start/Stop Spectral ring debug based 614 * on the previous state 615 * @sptrlto_check_and_do_dbr_buff_debug: Start/Stop Spectral buffer debug based 616 * on the previous state 617 * @sptrlto_register_events: Registration of WMI events for Spectral 618 * @sptrlto_unregister_events: Unregistration of WMI events for Spectral 619 **/ 620 struct wlan_lmac_if_sptrl_tx_ops { 621 void *(*sptrlto_pdev_spectral_init)(struct wlan_objmgr_pdev *pdev); 622 void (*sptrlto_pdev_spectral_deinit)(struct wlan_objmgr_pdev *pdev); 623 void *(*sptrlto_psoc_spectral_init)(struct wlan_objmgr_psoc *psoc); 624 void (*sptrlto_psoc_spectral_deinit)(struct wlan_objmgr_psoc *psoc); 625 QDF_STATUS (*sptrlto_set_spectral_config) 626 (struct wlan_objmgr_pdev *pdev, 627 const struct spectral_cp_param *param, 628 const enum spectral_scan_mode smode, 629 enum spectral_cp_error_code *err); 630 QDF_STATUS (*sptrlto_get_spectral_config) 631 (struct wlan_objmgr_pdev *pdev, 632 struct spectral_config *sptrl_config, 633 enum spectral_scan_mode smode); 634 QDF_STATUS (*sptrlto_start_spectral_scan) 635 (struct wlan_objmgr_pdev *pdev, 636 const enum spectral_scan_mode smode, 637 enum spectral_cp_error_code *err); 638 QDF_STATUS (*sptrlto_stop_spectral_scan) 639 (struct wlan_objmgr_pdev *pdev, 640 const enum spectral_scan_mode smode, 641 enum spectral_cp_error_code *err); 642 bool (*sptrlto_is_spectral_active)(struct wlan_objmgr_pdev *pdev, 643 const enum spectral_scan_mode smode); 644 bool (*sptrlto_is_spectral_enabled)(struct wlan_objmgr_pdev *pdev, 645 enum spectral_scan_mode smode); 646 QDF_STATUS (*sptrlto_set_debug_level)(struct wlan_objmgr_pdev *pdev, 647 u_int32_t debug_level); 648 u_int32_t (*sptrlto_get_debug_level)(struct wlan_objmgr_pdev *pdev); 649 QDF_STATUS (*sptrlto_get_spectral_capinfo) 650 (struct wlan_objmgr_pdev *pdev, 651 struct spectral_caps *scaps); 652 QDF_STATUS (*sptrlto_get_spectral_diagstats) 653 (struct wlan_objmgr_pdev *pdev, 654 struct spectral_diag_stats *stats); 655 QDF_STATUS (*sptrlto_register_spectral_wmi_ops)( 656 struct wlan_objmgr_psoc *psoc, 657 struct spectral_wmi_ops *wmi_ops); 658 QDF_STATUS (*sptrlto_register_spectral_tgt_ops)( 659 struct wlan_objmgr_psoc *psoc, 660 struct spectral_tgt_ops *tgt_ops); 661 void (*sptrlto_register_netlink_cb)( 662 struct wlan_objmgr_pdev *pdev, 663 struct spectral_nl_cb *nl_cb); 664 bool (*sptrlto_use_nl_bcast)(struct wlan_objmgr_pdev *pdev); 665 void (*sptrlto_deregister_netlink_cb)(struct wlan_objmgr_pdev *pdev); 666 int (*sptrlto_process_spectral_report)( 667 struct wlan_objmgr_pdev *pdev, 668 void *payload); 669 QDF_STATUS (*sptrlto_set_dma_debug)( 670 struct wlan_objmgr_pdev *pdev, 671 enum spectral_dma_debug dma_debug_type, 672 bool dma_debug_enable); 673 bool (*sptrlto_direct_dma_support)(struct wlan_objmgr_pdev *pdev); 674 QDF_STATUS (*sptrlto_check_and_do_dbr_ring_debug)( 675 struct wlan_objmgr_pdev *pdev); 676 QDF_STATUS (*sptrlto_check_and_do_dbr_buff_debug)( 677 struct wlan_objmgr_pdev *pdev); 678 QDF_STATUS (*sptrlto_register_events)(struct wlan_objmgr_psoc *psoc); 679 QDF_STATUS (*sptrlto_unregister_events)(struct wlan_objmgr_psoc *psoc); 680 }; 681 #endif /* WLAN_CONV_SPECTRAL_ENABLE */ 682 683 #ifdef WLAN_IOT_SIM_SUPPORT 684 /** 685 * struct wlan_lmac_if_iot_sim_tx_ops - iot_sim south bound Tx operations 686 * @iot_sim_send_cmd: To send wmi simulation command 687 **/ 688 struct wlan_lmac_if_iot_sim_tx_ops { 689 QDF_STATUS (*iot_sim_send_cmd)(struct wlan_objmgr_pdev *pdev, 690 struct simulation_test_params *param); 691 }; 692 #endif 693 694 #ifdef WIFI_POS_CONVERGED 695 /* 696 * struct wlan_lmac_if_wifi_pos_tx_ops - structure of firmware tx function 697 * pointers for wifi_pos component 698 * @data_req_tx: function pointer to send wifi_pos req to firmware 699 * @wifi_pos_register_events: function pointer to register wifi_pos events 700 * @wifi_pos_deregister_events: function pointer to deregister wifi_pos events 701 */ 702 struct wlan_lmac_if_wifi_pos_tx_ops { 703 QDF_STATUS (*data_req_tx)(struct wlan_objmgr_pdev *pdev, 704 struct oem_data_req *req); 705 QDF_STATUS (*wifi_pos_register_events)(struct wlan_objmgr_psoc *psoc); 706 QDF_STATUS (*wifi_pos_deregister_events)(struct wlan_objmgr_psoc *psoc); 707 }; 708 #endif 709 710 #ifdef DIRECT_BUF_RX_ENABLE 711 /** 712 * struct wlan_lmac_if_direct_buf_rx_tx_ops - structire of direct buf rx txops 713 * @direct_buf_rx_module_register: Registration API callback for modules 714 * to register with direct buf rx framework 715 * @direct_buf_rx_module_unregister: Unregistration API to clean up module 716 * specific resources in DBR 717 * @direct_buf_rx_register_events: Registration of WMI events for direct 718 * buffer rx framework 719 * @direct_buf_rx_unregister_events: Unregistraton of WMI events for direct 720 * buffer rx framework 721 * @direct_buf_rx_print_ring_stat: Print ring status per module per pdev 722 * 723 * @direct_buf_rx_get_ring_params: Get ring parameters for module_id 724 * @direct_buf_rx_start_ring_debug: Start DBR ring debug 725 * @direct_buf_rx_stop_ring_debug: Stop DBR ring debug 726 * @direct_buf_rx_start_buffer_poisoning: Start DBR buffer poisoning 727 * @direct_buf_rx_stop_buffer_poisoning: Stop DBR buffer poisoning 728 */ 729 struct wlan_lmac_if_direct_buf_rx_tx_ops { 730 QDF_STATUS (*direct_buf_rx_module_register)( 731 struct wlan_objmgr_pdev *pdev, uint8_t mod_id, 732 struct dbr_module_config *dbr_config, 733 bool (*dbr_rsp_handler) 734 (struct wlan_objmgr_pdev *pdev, 735 struct direct_buf_rx_data *dbr_data)); 736 QDF_STATUS (*direct_buf_rx_module_unregister)( 737 struct wlan_objmgr_pdev *pdev, uint8_t mod_id); 738 QDF_STATUS (*direct_buf_rx_register_events)( 739 struct wlan_objmgr_psoc *psoc); 740 QDF_STATUS (*direct_buf_rx_unregister_events)( 741 struct wlan_objmgr_psoc *psoc); 742 QDF_STATUS (*direct_buf_rx_print_ring_stat)( 743 struct wlan_objmgr_pdev *pdev); 744 QDF_STATUS (*direct_buf_rx_get_ring_params) 745 (struct wlan_objmgr_pdev *pdev, 746 struct module_ring_params *param, 747 uint8_t module_id, uint8_t srng_id); 748 QDF_STATUS (*direct_buf_rx_start_ring_debug)( 749 struct wlan_objmgr_pdev *pdev, uint8_t mod_id, 750 uint32_t num_ring_debug_entries); 751 QDF_STATUS (*direct_buf_rx_stop_ring_debug)( 752 struct wlan_objmgr_pdev *pdev, uint8_t mod_id); 753 QDF_STATUS (*direct_buf_rx_start_buffer_poisoning)( 754 struct wlan_objmgr_pdev *pdev, uint8_t mod_id, uint32_t value); 755 QDF_STATUS (*direct_buf_rx_stop_buffer_poisoning)( 756 struct wlan_objmgr_pdev *pdev, uint8_t mod_id); 757 }; 758 #endif /* DIRECT_BUF_RX_ENABLE */ 759 760 #ifdef FEATURE_WLAN_TDLS 761 /* fwd declarations for tdls tx ops */ 762 struct tdls_info; 763 struct tdls_peer_update_state; 764 struct tdls_channel_switch_params; 765 struct sta_uapsd_trig_params; 766 /** 767 * struct wlan_lmac_if_tdls_tx_ops - south bound tx function pointers for tdls 768 * @update_fw_state: function to update tdls firmware state 769 * @update_peer_state: function to update tdls peer state 770 * @set_offchan_mode: function to set tdls offchannel mode 771 * @tdls_reg_ev_handler: function to register for tdls events 772 * @tdls_unreg_ev_handler: function to unregister for tdls events 773 * 774 * tdls module uses these functions to avail ol/da lmac services 775 */ 776 struct wlan_lmac_if_tdls_tx_ops { 777 QDF_STATUS (*update_fw_state)(struct wlan_objmgr_psoc *psoc, 778 struct tdls_info *req); 779 QDF_STATUS (*update_peer_state)(struct wlan_objmgr_psoc *psoc, 780 struct tdls_peer_update_state *param); 781 QDF_STATUS (*set_offchan_mode)(struct wlan_objmgr_psoc *psoc, 782 struct tdls_channel_switch_params *param); 783 QDF_STATUS (*tdls_reg_ev_handler)(struct wlan_objmgr_psoc *psoc, 784 void *arg); 785 QDF_STATUS (*tdls_unreg_ev_handler) (struct wlan_objmgr_psoc *psoc, 786 void *arg); 787 }; 788 789 /* fwd declarations for tdls rx ops */ 790 struct tdls_event_info; 791 /** 792 * struct wlan_lmac_if_tdls_rx_ops - south bound rx function pointers for tdls 793 * @tdls_ev_handler: function to handler tdls event 794 * 795 * lmac modules uses this API to post scan events to tdls module 796 */ 797 struct wlan_lmac_if_tdls_rx_ops { 798 QDF_STATUS (*tdls_ev_handler)(struct wlan_objmgr_psoc *psoc, 799 struct tdls_event_info *info); 800 }; 801 #endif 802 803 /** 804 * struct wlan_lmac_if_ftm_rx_ops - south bound rx function pointers for FTM 805 * @ftm_ev_handler: function to handle FTM event 806 * 807 * lmac modules uses this API to post FTM events to FTM module 808 */ 809 struct wlan_lmac_if_ftm_rx_ops { 810 QDF_STATUS (*ftm_ev_handler)(struct wlan_objmgr_pdev *pdev, 811 uint8_t *event_buf, uint32_t len); 812 }; 813 814 /** 815 * struct wlan_lmac_reg_if_tx_ops - structure of tx function 816 * pointers for regulatory component 817 * @register_master_handler: pointer to register event handler 818 * @unregister_master_handler: pointer to unregister event handler 819 * @register_11d_new_cc_handler: pointer to register 11d cc event handler 820 * @unregister_11d_new_cc_handler: pointer to unregister 11d cc event handler 821 * @send_ctl_info: call-back function to send CTL info to firmware 822 */ 823 struct wlan_lmac_if_reg_tx_ops { 824 QDF_STATUS (*register_master_handler)(struct wlan_objmgr_psoc *psoc, 825 void *arg); 826 QDF_STATUS (*unregister_master_handler)(struct wlan_objmgr_psoc *psoc, 827 void *arg); 828 829 QDF_STATUS (*set_country_code)(struct wlan_objmgr_psoc *psoc, 830 void *arg); 831 QDF_STATUS (*fill_umac_legacy_chanlist)(struct wlan_objmgr_pdev *pdev, 832 struct regulatory_channel *cur_chan_list); 833 QDF_STATUS (*register_11d_new_cc_handler)( 834 struct wlan_objmgr_psoc *psoc, void *arg); 835 QDF_STATUS (*unregister_11d_new_cc_handler)( 836 struct wlan_objmgr_psoc *psoc, void *arg); 837 QDF_STATUS (*start_11d_scan)(struct wlan_objmgr_psoc *psoc, 838 struct reg_start_11d_scan_req *reg_start_11d_scan_req); 839 QDF_STATUS (*stop_11d_scan)(struct wlan_objmgr_psoc *psoc, 840 struct reg_stop_11d_scan_req *reg_stop_11d_scan_req); 841 bool (*is_there_serv_ready_extn)(struct wlan_objmgr_psoc *psoc); 842 QDF_STATUS (*set_user_country_code)(struct wlan_objmgr_psoc *psoc, 843 uint8_t pdev_id, 844 struct cc_regdmn_s *rd); 845 QDF_STATUS (*set_country_failed)(struct wlan_objmgr_pdev *pdev); 846 QDF_STATUS (*register_ch_avoid_event_handler)( 847 struct wlan_objmgr_psoc *psoc, void *arg); 848 QDF_STATUS (*unregister_ch_avoid_event_handler)( 849 struct wlan_objmgr_psoc *psoc, void *arg); 850 QDF_STATUS (*send_ctl_info)(struct wlan_objmgr_psoc *psoc, 851 struct reg_ctl_params *params); 852 QDF_STATUS (*get_phy_id_from_pdev_id)(struct wlan_objmgr_psoc *psoc, 853 uint8_t pdev_id, uint8_t *phy_id); 854 QDF_STATUS (*get_pdev_id_from_phy_id)(struct wlan_objmgr_psoc *psoc, 855 uint8_t phy_id, uint8_t *pdev_id); 856 }; 857 858 /** 859 * struct wlan_lmac_if_dfs_tx_ops - Function pointer to call offload/lmac 860 * functions from DFS module. 861 * @dfs_enable: Enable DFS. 862 * @dfs_get_caps: Get DFS capabilities. 863 * @dfs_disable: Disable DFS 864 * @dfs_gettsf64: Get tsf64 value. 865 * @dfs_set_use_cac_prssi: Set use_cac_prssi value. 866 * @dfs_get_dfsdomain: Get DFS domain. 867 * @dfs_is_countryCode_CHINA: Check is country code CHINA. 868 * @dfs_get_thresholds: Get thresholds. 869 * @dfs_get_ext_busy: Get ext_busy. 870 * @dfs_get_target_type: Get target type. 871 * @dfs_is_countryCode_KOREA_ROC3: Check is county code Korea. 872 * @dfs_get_ah_devid: Get ah devid. 873 * @dfs_get_phymode_info: Get phymode info. 874 * @dfs_reg_ev_handler: Register dfs event handler. 875 * @dfs_process_emulate_bang_radar_cmd: Process emulate bang radar test command. 876 * @dfs_agile_ch_cfg_cmd: Send Agile Channel Configuration command 877 * @dfs_ocac_abort_cmd: Send Off-Channel CAC abort command. 878 * @dfs_is_pdev_5ghz: Check if the given pdev is 5GHz. 879 * @dfs_set_phyerr_filter_offload: Config phyerr filter offload. 880 * @dfs_send_offload_enable_cmd: Send dfs offload enable command to fw. 881 * @dfs_host_dfs_check_support: To check Host DFS confirmation feature 882 * support. 883 * @dfs_send_avg_radar_params_to_fw: Send average radar parameters to FW. 884 * @dfs_send_usenol_pdev_param: Send usenol pdev param to FW. 885 * @dfs_send_subchan_marking_pdev_param: Send subchan marking pdev param to FW. 886 * @dfs_check_mode_switch_state: Find if HW mode switch is in progress. 887 */ 888 889 struct wlan_lmac_if_dfs_tx_ops { 890 QDF_STATUS (*dfs_enable)(struct wlan_objmgr_pdev *pdev, 891 int *is_fastclk, 892 struct wlan_dfs_phyerr_param *param, 893 uint32_t dfsdomain); 894 QDF_STATUS (*dfs_get_caps)(struct wlan_objmgr_pdev *pdev, 895 struct wlan_dfs_caps *dfs_caps); 896 QDF_STATUS (*dfs_disable)(struct wlan_objmgr_pdev *pdev, 897 int no_cac); 898 QDF_STATUS (*dfs_gettsf64)(struct wlan_objmgr_pdev *pdev, 899 uint64_t *tsf64); 900 QDF_STATUS (*dfs_set_use_cac_prssi)(struct wlan_objmgr_pdev *pdev); 901 QDF_STATUS (*dfs_get_thresholds)(struct wlan_objmgr_pdev *pdev, 902 struct wlan_dfs_phyerr_param *param); 903 QDF_STATUS (*dfs_get_ext_busy)(struct wlan_objmgr_pdev *pdev, 904 int *dfs_ext_chan_busy); 905 QDF_STATUS (*dfs_get_target_type)(struct wlan_objmgr_pdev *pdev, 906 uint32_t *target_type); 907 QDF_STATUS (*dfs_get_ah_devid)(struct wlan_objmgr_pdev *pdev, 908 uint16_t *devid); 909 QDF_STATUS (*dfs_get_phymode_info)(struct wlan_objmgr_pdev *pdev, 910 uint32_t chan_mode, 911 uint32_t *mode_info, 912 bool is_2gvht_en); 913 QDF_STATUS (*dfs_reg_ev_handler)(struct wlan_objmgr_psoc *psoc); 914 QDF_STATUS (*dfs_process_emulate_bang_radar_cmd)( 915 struct wlan_objmgr_pdev *pdev, 916 struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test); 917 QDF_STATUS (*dfs_agile_ch_cfg_cmd)( 918 struct wlan_objmgr_pdev *pdev, 919 struct dfs_agile_cac_params *adfs_params); 920 QDF_STATUS (*dfs_ocac_abort_cmd)(struct wlan_objmgr_pdev *pdev); 921 QDF_STATUS (*dfs_is_pdev_5ghz)(struct wlan_objmgr_pdev *pdev, 922 bool *is_5ghz); 923 QDF_STATUS (*dfs_set_phyerr_filter_offload)( 924 struct wlan_objmgr_pdev *pdev, 925 bool dfs_phyerr_filter_offload); 926 bool (*dfs_is_tgt_offload)(struct wlan_objmgr_psoc *psoc); 927 QDF_STATUS (*dfs_send_offload_enable_cmd)( 928 struct wlan_objmgr_pdev *pdev, 929 bool enable); 930 QDF_STATUS (*dfs_host_dfs_check_support)(struct wlan_objmgr_pdev *pdev, 931 bool *enabled); 932 QDF_STATUS (*dfs_send_avg_radar_params_to_fw)( 933 struct wlan_objmgr_pdev *pdev, 934 struct dfs_radar_found_params *params); 935 QDF_STATUS (*dfs_send_usenol_pdev_param)(struct wlan_objmgr_pdev *pdev, 936 bool usenol); 937 QDF_STATUS (*dfs_send_subchan_marking_pdev_param)( 938 struct wlan_objmgr_pdev *pdev, 939 bool subchanmark); 940 QDF_STATUS (*dfs_check_mode_switch_state)( 941 struct wlan_objmgr_pdev *pdev, 942 bool *is_hw_mode_switch_in_progress); 943 }; 944 945 /** 946 * struct wlan_lmac_if_target_tx_ops - Function pointers to call target 947 * functions from other modules. 948 * @tgt_is_tgt_type_ar900b: To check AR900B target type. 949 * @tgt_is_tgt_type_ipq4019: To check IPQ4019 target type. 950 * @tgt_is_tgt_type_qca9984: To check QCA9984 target type. 951 * @tgt_is_tgt_type_qca9888: To check QCA9888 target type. 952 * @tgt_is_tgt_type_adrastea: To check QCS40X target type. 953 * @tgt_is_tgt_type_qcn9000: To check QCN9000 (Pine) target type. 954 * @tgt_get_tgt_type: Get target type 955 * @tgt_get_tgt_version: Get target version 956 * @tgt_get_tgt_revision: Get target revision 957 */ 958 struct wlan_lmac_if_target_tx_ops { 959 bool (*tgt_is_tgt_type_ar900b)(uint32_t); 960 bool (*tgt_is_tgt_type_ipq4019)(uint32_t); 961 bool (*tgt_is_tgt_type_qca9984)(uint32_t); 962 bool (*tgt_is_tgt_type_qca9888)(uint32_t); 963 bool (*tgt_is_tgt_type_adrastea)(uint32_t); 964 bool (*tgt_is_tgt_type_qcn9000)(uint32_t); 965 uint32_t (*tgt_get_tgt_type)(struct wlan_objmgr_psoc *psoc); 966 uint32_t (*tgt_get_tgt_version)(struct wlan_objmgr_psoc *psoc); 967 uint32_t (*tgt_get_tgt_revision)(struct wlan_objmgr_psoc *psoc); 968 }; 969 970 #ifdef WLAN_OFFCHAN_TXRX_ENABLE 971 /** 972 * struct wlan_lmac_if_offchan_txrx_ops - Function pointers to check target 973 * capabilities related to offchan txrx. 974 * @offchan_data_tid_support: To check if target supports separate tid for 975 * offchan data tx. 976 */ 977 struct wlan_lmac_if_offchan_txrx_ops { 978 bool (*offchan_data_tid_support)(struct wlan_objmgr_pdev *pdev); 979 }; 980 #endif 981 982 #ifdef WLAN_SUPPORT_GREEN_AP 983 struct wlan_green_ap_egap_params; 984 /** 985 * struct wlan_lmac_if_green_ap_tx_ops - structure of tx function 986 * pointers for green ap component 987 * @enable_egap: function pointer to send enable egap indication to fw 988 * @ps_on_off_send: function pointer to send enable/disable green ap ps to fw 989 */ 990 struct wlan_lmac_if_green_ap_tx_ops { 991 QDF_STATUS (*enable_egap)(struct wlan_objmgr_pdev *pdev, 992 struct wlan_green_ap_egap_params *egap_params); 993 QDF_STATUS (*ps_on_off_send)(struct wlan_objmgr_pdev *pdev, 994 bool value, uint8_t pdev_id); 995 QDF_STATUS (*reset_dev)(struct wlan_objmgr_pdev *pdev); 996 uint16_t (*get_current_channel)(struct wlan_objmgr_pdev *pdev); 997 uint64_t (*get_current_channel_flags)(struct wlan_objmgr_pdev *pdev); 998 QDF_STATUS (*get_capab)(struct wlan_objmgr_pdev *pdev); 999 }; 1000 #endif 1001 1002 #ifdef FEATURE_COEX 1003 struct coex_config_params; 1004 1005 /** 1006 * struct wlan_lmac_if_coex_tx_ops - south bound tx function pointers for coex 1007 * @coex_config_send: function pointer to send coex config to fw 1008 */ 1009 struct wlan_lmac_if_coex_tx_ops { 1010 QDF_STATUS (*coex_config_send)(struct wlan_objmgr_pdev *pdev, 1011 struct coex_config_params *param); 1012 }; 1013 #endif 1014 1015 /** 1016 * struct wlan_lmac_if_tx_ops - south bound tx function pointers 1017 * @mgmt_txrx_tx_ops: mgmt txrx tx ops 1018 * @scan: scan tx ops 1019 * @dfs_tx_ops: dfs tx ops. 1020 * @green_ap_tx_ops: green_ap tx_ops 1021 * @cp_stats_tx_ops: cp stats tx_ops 1022 * @coex_ops: coex tx_ops 1023 * 1024 * Callback function tabled to be registered with umac. 1025 * umac will use the functional table to send events/frames to wmi 1026 */ 1027 1028 struct wlan_lmac_if_tx_ops { 1029 /* Components to declare function pointers required by the module 1030 * in component specific structure. 1031 * The component specific ops structure can be declared in this file 1032 * only 1033 */ 1034 struct wlan_lmac_if_mgmt_txrx_tx_ops mgmt_txrx_tx_ops; 1035 struct wlan_lmac_if_scan_tx_ops scan; 1036 #ifdef CONVERGED_P2P_ENABLE 1037 struct wlan_lmac_if_p2p_tx_ops p2p; 1038 #endif 1039 #ifdef WLAN_IOT_SIM_SUPPORT 1040 struct wlan_lmac_if_iot_sim_tx_ops iot_sim_tx_ops; 1041 #endif 1042 #ifdef QCA_SUPPORT_SON 1043 struct wlan_lmac_if_son_tx_ops son_tx_ops; 1044 #endif 1045 1046 #ifdef WLAN_ATF_ENABLE 1047 struct wlan_lmac_if_atf_tx_ops atf_tx_ops; 1048 #endif 1049 #ifdef QCA_SUPPORT_CP_STATS 1050 struct wlan_lmac_if_cp_stats_tx_ops cp_stats_tx_ops; 1051 #endif 1052 #ifdef DCS_INTERFERENCE_DETECTION 1053 struct wlan_target_if_dcs_tx_ops dcs_tx_ops; 1054 #endif 1055 #ifdef WLAN_SA_API_ENABLE 1056 struct wlan_lmac_if_sa_api_tx_ops sa_api_tx_ops; 1057 #endif 1058 1059 #ifdef WLAN_CFR_ENABLE 1060 struct wlan_lmac_if_cfr_tx_ops cfr_tx_ops; 1061 #endif 1062 1063 #ifdef WLAN_CONV_SPECTRAL_ENABLE 1064 struct wlan_lmac_if_sptrl_tx_ops sptrl_tx_ops; 1065 #endif 1066 1067 #ifdef WLAN_CONV_CRYPTO_SUPPORTED 1068 struct wlan_lmac_if_crypto_tx_ops crypto_tx_ops; 1069 #endif 1070 1071 #ifdef WIFI_POS_CONVERGED 1072 struct wlan_lmac_if_wifi_pos_tx_ops wifi_pos_tx_ops; 1073 #endif 1074 struct wlan_lmac_if_reg_tx_ops reg_ops; 1075 struct wlan_lmac_if_dfs_tx_ops dfs_tx_ops; 1076 1077 #ifdef FEATURE_WLAN_TDLS 1078 struct wlan_lmac_if_tdls_tx_ops tdls_tx_ops; 1079 #endif 1080 1081 #ifdef WLAN_SUPPORT_FILS 1082 struct wlan_lmac_if_fd_tx_ops fd_tx_ops; 1083 #endif 1084 struct wlan_lmac_if_mlme_tx_ops mops; 1085 struct wlan_lmac_if_target_tx_ops target_tx_ops; 1086 1087 #ifdef WLAN_OFFCHAN_TXRX_ENABLE 1088 struct wlan_lmac_if_offchan_txrx_ops offchan_txrx_ops; 1089 #endif 1090 1091 #ifdef DIRECT_BUF_RX_ENABLE 1092 struct wlan_lmac_if_direct_buf_rx_tx_ops dbr_tx_ops; 1093 #endif 1094 1095 #ifdef WLAN_SUPPORT_GREEN_AP 1096 struct wlan_lmac_if_green_ap_tx_ops green_ap_tx_ops; 1097 #endif 1098 1099 struct wlan_lmac_if_ftm_tx_ops ftm_tx_ops; 1100 1101 #ifdef FEATURE_COEX 1102 struct wlan_lmac_if_coex_tx_ops coex_ops; 1103 #endif 1104 }; 1105 1106 /** 1107 * struct wlan_lmac_if_mgmt_txrx_rx_ops - structure of rx function 1108 * pointers for mgmt txrx component 1109 * @mgmt_tx_completion_handler: function pointer to give tx completions 1110 * to mgmt txrx comp. 1111 * @mgmt_rx_frame_handler: function pointer to give rx frame to mgmt txrx comp. 1112 * @mgmt_txrx_get_nbuf_from_desc_id: function pointer to get nbuf from desc id 1113 * @mgmt_txrx_get_peer_from_desc_id: function pointer to get peer from desc id 1114 * @mgmt_txrx_get_vdev_id_from_desc_id: function pointer to get vdev id from 1115 * desc id 1116 */ 1117 struct wlan_lmac_if_mgmt_txrx_rx_ops { 1118 QDF_STATUS (*mgmt_tx_completion_handler)( 1119 struct wlan_objmgr_pdev *pdev, 1120 uint32_t desc_id, uint32_t status, 1121 void *tx_compl_params); 1122 QDF_STATUS (*mgmt_rx_frame_handler)( 1123 struct wlan_objmgr_psoc *psoc, 1124 qdf_nbuf_t buf, 1125 struct mgmt_rx_event_params *mgmt_rx_params); 1126 qdf_nbuf_t (*mgmt_txrx_get_nbuf_from_desc_id)( 1127 struct wlan_objmgr_pdev *pdev, 1128 uint32_t desc_id); 1129 struct wlan_objmgr_peer * (*mgmt_txrx_get_peer_from_desc_id)( 1130 struct wlan_objmgr_pdev *pdev, uint32_t desc_id); 1131 uint8_t (*mgmt_txrx_get_vdev_id_from_desc_id)( 1132 struct wlan_objmgr_pdev *pdev, 1133 uint32_t desc_id); 1134 uint32_t (*mgmt_txrx_get_free_desc_pool_count)( 1135 struct wlan_objmgr_pdev *pdev); 1136 }; 1137 1138 struct wlan_lmac_if_reg_rx_ops { 1139 QDF_STATUS (*master_list_handler)(struct cur_regulatory_info 1140 *reg_info); 1141 QDF_STATUS (*reg_11d_new_cc_handler)(struct wlan_objmgr_psoc *psoc, 1142 struct reg_11d_new_country *reg_11d_new_cc); 1143 QDF_STATUS (*reg_set_regdb_offloaded)(struct wlan_objmgr_psoc *psoc, 1144 bool val); 1145 QDF_STATUS (*reg_set_11d_offloaded)(struct wlan_objmgr_psoc *psoc, 1146 bool val); 1147 QDF_STATUS (*reg_set_6ghz_supported)(struct wlan_objmgr_psoc *psoc, 1148 bool val); 1149 QDF_STATUS (*get_dfs_region)(struct wlan_objmgr_pdev *pdev, 1150 enum dfs_reg *dfs_reg); 1151 QDF_STATUS (*reg_ch_avoid_event_handler)(struct wlan_objmgr_psoc *psoc, 1152 struct ch_avoid_ind_type *ch_avoid_ind); 1153 uint8_t (*reg_freq_to_chan)(struct wlan_objmgr_pdev *pdev, 1154 qdf_freq_t freq); 1155 QDF_STATUS (*reg_set_chan_144)(struct wlan_objmgr_pdev *pdev, 1156 bool enable_ch_144); 1157 bool (*reg_get_chan_144)(struct wlan_objmgr_pdev *pdev); 1158 QDF_STATUS (*reg_program_default_cc)(struct wlan_objmgr_pdev *pdev, 1159 uint16_t regdmn); 1160 QDF_STATUS (*reg_get_current_regdomain)(struct wlan_objmgr_pdev *pdev, 1161 struct cur_regdmn_info *cur_regdmn); 1162 QDF_STATUS (*reg_enable_dfs_channels)(struct wlan_objmgr_pdev *pdev, 1163 bool dfs_enable); 1164 QDF_STATUS (*reg_modify_pdev_chan_range)(struct 1165 wlan_objmgr_pdev *pdev); 1166 QDF_STATUS 1167 (*reg_update_pdev_wireless_modes)(struct wlan_objmgr_pdev *pdev, 1168 uint32_t wireless_modes); 1169 bool 1170 (*reg_is_range_only6g)(qdf_freq_t low_freq, qdf_freq_t high_freq); 1171 QDF_STATUS (*reg_disable_chan_coex)(struct wlan_objmgr_pdev *pdev, 1172 uint8_t unii_5g_bitmap); 1173 bool (*reg_ignore_fw_reg_offload_ind)(struct wlan_objmgr_psoc *psoc); 1174 QDF_STATUS (*reg_get_unii_5g_bitmap)(struct wlan_objmgr_pdev *pdev, 1175 uint8_t *bitmap); 1176 }; 1177 1178 #ifdef CONVERGED_P2P_ENABLE 1179 1180 /* forward declarations for p2p rx ops */ 1181 struct p2p_noa_info; 1182 struct p2p_lo_event; 1183 struct p2p_set_mac_filter_evt; 1184 1185 /** 1186 * struct wlan_lmac_if_p2p_rx_ops - structure of rx function pointers 1187 * for P2P component 1188 * @lo_ev_handler: function pointer to give listen offload event 1189 * @noa_ev_handler: function pointer to give noa event 1190 * @add_mac_addr_filter_evt_handler: function pointer to process add mac addr 1191 * rx filter event 1192 */ 1193 struct wlan_lmac_if_p2p_rx_ops { 1194 #ifdef FEATURE_P2P_LISTEN_OFFLOAD 1195 QDF_STATUS (*lo_ev_handler)(struct wlan_objmgr_psoc *psoc, 1196 struct p2p_lo_event *event_info); 1197 #endif 1198 QDF_STATUS (*noa_ev_handler)(struct wlan_objmgr_psoc *psoc, 1199 struct p2p_noa_info *event_info); 1200 QDF_STATUS (*add_mac_addr_filter_evt_handler)( 1201 struct wlan_objmgr_psoc *psoc, 1202 struct p2p_set_mac_filter_evt *event_info); 1203 1204 }; 1205 #endif 1206 1207 #ifdef WLAN_ATF_ENABLE 1208 1209 /** 1210 * struct wlan_lmac_if_atf_rx_ops - ATF south bound rx function pointers 1211 * @atf_get_atf_commit: Get ATF commit state 1212 * @atf_get_fmcap: Get firmware capability for ATF 1213 * @atf_get_obss_scale: Get OBSS scale 1214 * @atf_get_mode: Get mode of ATF 1215 * @atf_get_msdu_desc: Get msdu desc for ATF 1216 * @atf_get_max_vdevs: Get maximum vdevs for a Radio 1217 * @atf_get_peers: Get number of peers for a radio 1218 * @atf_get_tput_based: Get throughput based enabled/disabled 1219 * @atf_get_logging: Get logging enabled/disabled 1220 * @atf_update_buf_held: Set Num buf held by subgroup 1221 * @atf_get_ssidgroup: Get ssid group state 1222 * @atf_get_vdev_ac_blk_cnt: Get AC block count for vdev 1223 * @atf_get_peer_blk_txbitmap: Get peer tx traffic AC bitmap 1224 * @atf_get_vdev_blk_txtraffic: Get vdev tx traffic block state 1225 * @atf_get_sched: Get ATF scheduled policy 1226 * @atf_get_tx_tokens: Get Tx tokens 1227 * @atf_buf_distribute: Distribute Buffers 1228 * @atf_get_tx_tokens_common: Get common tx tokens 1229 * @atf_get_shadow_alloted_tx_tokens: Get shadow alloted tx tokens 1230 * @atf_get_peer_stats: Get atf peer stats 1231 * @atf_adjust_subgroup_txtokens: Adjust tokens based on actual duration 1232 * @atf_account_subgroup_txtokens: Estimate tx time & update subgroup tokens 1233 * @atf_subgroup_free_buf: On tx completion, update num buf held 1234 * @atf_update_subgroup_tidstate: TID state (Paused/unpaused) of node 1235 * @atf_get_subgroup_airtime: Get subgroup airtime 1236 * @atf_get_token_allocated: Get atf token allocated 1237 * @atf_get_token_utilized: Get atf token utilized 1238 * @atf_set_sched: Set ATF schedule policy 1239 * @atf_set_fmcap: Set firmware capability for ATF 1240 * @atf_set_obss_scale: Set ATF obss scale 1241 * @atf_set_msdu_desc: Set msdu desc 1242 * @atf_set_max_vdevs: Set maximum vdevs number 1243 * @atf_set_peers: Set peers number 1244 * @atf_set_peer_stats: Set peer stats 1245 * @atf_set_vdev_blk_txtraffic: Set Block/unblock vdev tx traffic 1246 * @atf_peer_blk_txtraffic: Block peer tx traffic 1247 * @atf_peer_unblk_txtraffic: Unblock peer tx traffic 1248 * @atf_set_token_allocated: Set atf token allocated 1249 * @atf_set_token_utilized: Set atf token utilized 1250 */ 1251 struct wlan_lmac_if_atf_rx_ops { 1252 uint8_t (*atf_get_atf_commit)(struct wlan_objmgr_pdev *pdev); 1253 uint32_t (*atf_get_fmcap)(struct wlan_objmgr_psoc *psoc); 1254 uint32_t (*atf_get_obss_scale)(struct wlan_objmgr_pdev *pdev); 1255 uint32_t (*atf_get_mode)(struct wlan_objmgr_psoc *psoc); 1256 uint32_t (*atf_get_msdu_desc)(struct wlan_objmgr_psoc *psoc); 1257 uint32_t (*atf_get_max_vdevs)(struct wlan_objmgr_psoc *psoc); 1258 uint32_t (*atf_get_peers)(struct wlan_objmgr_psoc *psoc); 1259 uint32_t (*atf_get_tput_based)(struct wlan_objmgr_pdev *pdev); 1260 uint32_t (*atf_get_logging)(struct wlan_objmgr_pdev *pdev); 1261 void* (*atf_update_buf_held)(struct wlan_objmgr_peer *peer, 1262 int8_t ac); 1263 uint32_t (*atf_get_ssidgroup)(struct wlan_objmgr_pdev *pdev); 1264 uint32_t (*atf_get_vdev_ac_blk_cnt)(struct wlan_objmgr_vdev *vdev); 1265 uint8_t (*atf_get_peer_blk_txbitmap)(struct wlan_objmgr_peer *peer); 1266 uint8_t (*atf_get_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev); 1267 uint32_t (*atf_get_sched)(struct wlan_objmgr_pdev *pdev); 1268 uint32_t (*atf_get_tx_tokens)(struct wlan_objmgr_peer *peer); 1269 uint32_t (*atf_buf_distribute)(struct wlan_objmgr_pdev *pdev, 1270 struct wlan_objmgr_peer *peer, 1271 int8_t ac); 1272 uint32_t (*atf_get_txtokens_common)(struct wlan_objmgr_pdev *pdev); 1273 uint32_t (*atf_get_shadow_alloted_tx_tokens)( 1274 struct wlan_objmgr_pdev *pdev); 1275 void (*atf_get_peer_stats)(struct wlan_objmgr_peer *peer, 1276 struct atf_stats *stats); 1277 QDF_STATUS 1278 (*atf_adjust_subgroup_txtokens)(struct wlan_objmgr_peer *pr, 1279 uint8_t ac, uint32_t actual_duration, 1280 uint32_t est_duration); 1281 QDF_STATUS 1282 (*atf_account_subgroup_txtokens)(struct wlan_objmgr_peer *pr, 1283 uint8_t ac, 1284 uint32_t duration); 1285 QDF_STATUS 1286 (*atf_subgroup_free_buf)(uint16_t buf_acc_size, void *bf_atf_sg); 1287 QDF_STATUS 1288 (*atf_update_subgroup_tidstate)(struct wlan_objmgr_peer *peer, 1289 uint8_t atf_nodepaused); 1290 uint8_t (*atf_get_subgroup_airtime)(struct wlan_objmgr_peer *peer, 1291 uint8_t ac); 1292 uint16_t (*atf_get_token_allocated)(struct wlan_objmgr_peer *peer); 1293 uint16_t (*atf_get_token_utilized)(struct wlan_objmgr_peer *peer); 1294 void (*atf_set_sched)(struct wlan_objmgr_pdev *pdev, uint32_t value); 1295 void (*atf_set_fmcap)(struct wlan_objmgr_psoc *psoc, uint32_t value); 1296 void (*atf_set_obss_scale)(struct wlan_objmgr_pdev *pdev, 1297 uint32_t value); 1298 void (*atf_set_msdu_desc)(struct wlan_objmgr_psoc *psoc, 1299 uint32_t value); 1300 void (*atf_set_max_vdevs)(struct wlan_objmgr_psoc *psoc, 1301 uint32_t value); 1302 void (*atf_set_peers)(struct wlan_objmgr_psoc *psoc, uint32_t value); 1303 void (*atf_set_peer_stats)(struct wlan_objmgr_peer *peer, 1304 struct atf_stats *stats); 1305 void (*atf_set_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev, 1306 uint8_t value); 1307 void (*atf_peer_blk_txtraffic)(struct wlan_objmgr_peer *peer, 1308 int8_t ac_id); 1309 void (*atf_peer_unblk_txtraffic)(struct wlan_objmgr_peer *peer, 1310 int8_t ac_id); 1311 void (*atf_set_token_allocated)(struct wlan_objmgr_peer *peer, 1312 uint16_t value); 1313 void (*atf_set_token_utilized)(struct wlan_objmgr_peer *peer, 1314 uint16_t value); 1315 }; 1316 #endif 1317 1318 #ifdef WLAN_SUPPORT_FILS 1319 /** 1320 * struct wlan_lmac_if_fd_rx_ops - FILS Discovery specific Rx function pointers 1321 * @fd_is_fils_enable: FILS enabled or not 1322 * @fd_alloc: Allocate FD buffer 1323 * @fd_stop: Stop and free deferred FD buffer 1324 * @fd_free: Free FD frame buffer 1325 * @fd_get_valid_fd_period: Get valid FD period 1326 * @fd_swfda_handler: SWFDA event handler 1327 * @fd_offload: Offload FD frame 1328 * @fd_tmpl_update: Update the FD frame template 1329 */ 1330 struct wlan_lmac_if_fd_rx_ops { 1331 uint8_t (*fd_is_fils_enable)(struct wlan_objmgr_vdev *vdev); 1332 void (*fd_alloc)(struct wlan_objmgr_vdev *vdev); 1333 void (*fd_stop)(struct wlan_objmgr_vdev *vdev); 1334 void (*fd_free)(struct wlan_objmgr_vdev *vdev); 1335 uint32_t (*fd_get_valid_fd_period)(struct wlan_objmgr_vdev *vdev, 1336 uint8_t *is_modified); 1337 QDF_STATUS (*fd_swfda_handler)(struct wlan_objmgr_vdev *vdev); 1338 QDF_STATUS (*fd_offload)(struct wlan_objmgr_vdev *vdev, 1339 uint32_t vdev_id); 1340 QDF_STATUS (*fd_tmpl_update)(struct wlan_objmgr_vdev *vdev); 1341 }; 1342 #endif 1343 1344 #ifdef WLAN_SA_API_ENABLE 1345 1346 /** 1347 * struct wlan_lmac_if_sa_api_rx_ops - SA API south bound rx function pointers 1348 */ 1349 struct wlan_lmac_if_sa_api_rx_ops { 1350 uint32_t (*sa_api_get_sa_supported)(struct wlan_objmgr_psoc *psoc); 1351 uint32_t (*sa_api_get_validate_sw)(struct wlan_objmgr_psoc *psoc); 1352 void (*sa_api_enable_sa)(struct wlan_objmgr_psoc *psoc, uint32_t value); 1353 uint32_t (*sa_api_get_sa_enable)(struct wlan_objmgr_psoc *psoc); 1354 void (*sa_api_peer_assoc_hanldler)(struct wlan_objmgr_pdev *pdev, 1355 struct wlan_objmgr_peer *peer, struct sa_rate_cap *); 1356 uint32_t (*sa_api_update_tx_feedback)(struct wlan_objmgr_pdev *pdev, 1357 struct wlan_objmgr_peer *peer, 1358 struct sa_tx_feedback *feedback); 1359 uint32_t (*sa_api_update_rx_feedback)(struct wlan_objmgr_pdev *pdev, 1360 struct wlan_objmgr_peer *peer, 1361 struct sa_rx_feedback *feedback); 1362 uint32_t (*sa_api_ucfg_set_param)(struct wlan_objmgr_pdev *pdev, 1363 char *val); 1364 uint32_t (*sa_api_ucfg_get_param)(struct wlan_objmgr_pdev *pdev, 1365 char *val); 1366 uint32_t (*sa_api_is_tx_feedback_enabled) 1367 (struct wlan_objmgr_pdev *pdev); 1368 uint32_t (*sa_api_is_rx_feedback_enabled) 1369 (struct wlan_objmgr_pdev *pdev); 1370 uint32_t (*sa_api_convert_rate_2g)(uint32_t rate); 1371 uint32_t (*sa_api_convert_rate_5g)(uint32_t rate); 1372 uint32_t (*sa_api_get_sa_mode)(struct wlan_objmgr_pdev *pdev); 1373 uint32_t (*sa_api_get_beacon_txantenna)(struct wlan_objmgr_pdev *pdev); 1374 uint32_t (*sa_api_cwm_action)(struct wlan_objmgr_pdev *pdev); 1375 }; 1376 #endif 1377 1378 #ifdef WLAN_CFR_ENABLE 1379 1380 /** 1381 * struct wlan_lmac_if_cfr_rx_ops - CFR south bound rx function pointers 1382 * @cfr_support_set: Set the CFR support based on FW advert 1383 * @cfr_info_send: Send cfr info to upper layers 1384 */ 1385 struct wlan_lmac_if_cfr_rx_ops { 1386 void (*cfr_support_set)(struct wlan_objmgr_psoc *psoc, uint32_t value); 1387 uint32_t (*cfr_info_send)(struct wlan_objmgr_pdev *pdev, void *head, 1388 size_t hlen, void *data, size_t dlen, 1389 void *tail, size_t tlen); 1390 }; 1391 #endif 1392 1393 #ifdef WLAN_CONV_SPECTRAL_ENABLE 1394 /** 1395 * struct wlan_lmac_if_sptrl_rx_ops - Spectral south bound Rx operations 1396 * 1397 * @sptrlro_get_pdev_target_handle: Get Spectral handle for pdev target 1398 * private data 1399 * @sptrlro_get_psoc_target_handle: Get Spectral handle for psoc target 1400 * private data 1401 * @sptrlro_vdev_get_chan_freq_seg2: Get secondary 80 center frequency 1402 * @sptrlro_spectral_is_feature_disabled: Check if spectral feature is disabled 1403 */ 1404 struct wlan_lmac_if_sptrl_rx_ops { 1405 void * (*sptrlro_get_pdev_target_handle)(struct wlan_objmgr_pdev *pdev); 1406 void * (*sptrlro_get_psoc_target_handle)(struct wlan_objmgr_psoc *psoc); 1407 int16_t (*sptrlro_vdev_get_chan_freq)(struct wlan_objmgr_vdev *vdev); 1408 int16_t (*sptrlro_vdev_get_chan_freq_seg2) 1409 (struct wlan_objmgr_vdev *vdev); 1410 enum phy_ch_width (*sptrlro_vdev_get_ch_width)( 1411 struct wlan_objmgr_vdev *vdev); 1412 int (*sptrlro_vdev_get_sec20chan_freq_mhz)( 1413 struct wlan_objmgr_vdev *vdev, 1414 uint16_t *sec20chan_freq); 1415 bool (*sptrlro_spectral_is_feature_disabled)( 1416 struct wlan_objmgr_psoc *psoc); 1417 }; 1418 #endif /* WLAN_CONV_SPECTRAL_ENABLE */ 1419 1420 #ifdef WLAN_IOT_SIM_SUPPORT 1421 struct iot_sim_cbacks; 1422 /** 1423 * wlan_lmac_if_iot_sim_rx_ops: iot_sim rx operations 1424 * iot_sim_cmd_handler: Applies iot_sim rule in outgoing and incoming frames 1425 * iot_sim_register_cb: callback registration with iot_sim 1426 **/ 1427 struct wlan_lmac_if_iot_sim_rx_ops { 1428 QDF_STATUS (*iot_sim_cmd_handler)(struct wlan_objmgr_vdev *vdev, 1429 qdf_nbuf_t n_buf, 1430 struct beacon_tmpl_params *param, 1431 bool tx); 1432 QDF_STATUS (*iot_sim_register_cb)(struct wlan_objmgr_pdev *pdev, 1433 struct iot_sim_cbacks *cb); 1434 }; 1435 #endif 1436 1437 #ifdef WIFI_POS_CONVERGED 1438 /** 1439 * struct wlan_lmac_if_wifi_pos_rx_ops - structure of rx function 1440 * pointers for wifi_pos component 1441 * @oem_rsp_event_rx: callback for WMI_OEM_RESPONSE_EVENTID 1442 */ 1443 struct wlan_lmac_if_wifi_pos_rx_ops { 1444 int (*oem_rsp_event_rx)(struct wlan_objmgr_psoc *psoc, 1445 struct oem_data_rsp *oem_rsp); 1446 }; 1447 #endif 1448 1449 /** 1450 * struct wlan_lmac_if_dfs_rx_ops - Function pointers to call dfs functions 1451 * from lmac/offload. 1452 * @dfs_get_radars: Calls init radar table functions. 1453 * @dfs_process_phyerr: Process phyerr. 1454 * @dfs_destroy_object: Destroys the DFS object. 1455 * @dfs_radar_enable: Enables the radar. 1456 * @dfs_is_radar_enabled: Check if the radar is enabled. 1457 * @dfs_control: Used to process ioctls related to DFS. 1458 * @dfs_is_precac_timer_running: Check whether precac timer is running. 1459 * @dfs_find_vht80_chan_for_precac: Find VHT80 channel for precac. 1460 * @dfs_cancel_precac_timer: Cancel the precac timer. 1461 * @dfs_override_precac_timeout: Override the default precac timeout. 1462 * @dfs_set_precac_enable: Set precac enable flag. 1463 * @dfs_get_legacy_precac_enable: Get the precac enable flag for 1464 * partial offload (legacy) chipsets. 1465 * @dfs_set_precac_intermediate_chan: Set intermediate channel for precac. 1466 * @dfs_get_precac_intermediate_chan: Get intermediate channel for precac. 1467 * @dfs_precac_preferred_chan: Configure preferred channel during 1468 * precac. 1469 * dfs_get_precac_chan_state: Get precac status for given channel. 1470 * dfs_start_precac_timer: Start precac timer. 1471 * @dfs_get_override_precac_timeout: Get precac timeout. 1472 * @dfs_set_current_channel: Set DFS current channel. 1473 * @dfs_process_radar_ind: Process radar found indication. 1474 * @dfs_dfs_cac_complete_ind: Process cac complete indication. 1475 * @dfs_agile_precac_start: Initiate Agile PreCAC run. 1476 * @dfs_set_agile_precac_state: Set agile precac state. 1477 * @dfs_reset_adfs_config: Reset agile dfs variables. 1478 * @dfs_dfs_ocac_complete_ind: Process offchan cac complete indication. 1479 * @dfs_stop: Clear dfs timers. 1480 * @dfs_reinit_timers: Reinitialize DFS timers. 1481 * @dfs_enable_stadfs: Enable/Disable STADFS capability. 1482 * @dfs_is_stadfs_enabled: Get STADFS capability value. 1483 * @dfs_process_phyerr_filter_offload:Process radar event. 1484 * @dfs_is_phyerr_filter_offload: Check whether phyerr filter is offload. 1485 * @dfs_action_on_status: Trigger the action to be taken based on 1486 * on host dfs status received from fw. 1487 * @dfs_override_status_timeout: Override the value of host dfs status 1488 * wait timeout. 1489 * @dfs_get_override_status_timeout: Get the value of host dfs status wait 1490 * timeout. 1491 * @dfs_reset_spoof_test: Checks if radar detection is enabled. 1492 * @dfs_is_disable_radar_marking_set: Check if dis_radar_marking param is set. 1493 * @dfs_allow_hw_pulses: Set or unset dfs_allow_hw_pulses which 1494 * allow or disallow HW pulses. 1495 * @dfs_is_hw_pulses_allowed: Check if HW pulses are allowed or not. 1496 * @dfs_set_fw_adfs_support: Set the agile DFS FW support in DFS. 1497 * @dfs_reset_dfs_prevchan: Reset DFS previous channel structure. 1498 * @dfs_init_tmp_psoc_nol: Init temporary PSOC NOL structure. 1499 * @dfs_deinit_tmp_psoc_nol: Deinit temporary PSOC NOL structure. 1500 * @dfs_save_dfs_nol_in_psoc: Copy DFS NOL data to the PSOC copy. 1501 * @dfs_reinit_nol_from_psoc_copy: Reinit DFS NOL from the PSOC NOL copy. 1502 * @dfs_reinit_precac_lists: Reinit precac lists from other pdev. 1503 * @dfs_complete_deferred_tasks: Process mode switch completion in DFS. 1504 * @dfs_rcac_sm_deliver_evt: API to post events to DFS rolling CAC SM. 1505 */ 1506 struct wlan_lmac_if_dfs_rx_ops { 1507 QDF_STATUS (*dfs_get_radars)(struct wlan_objmgr_pdev *pdev); 1508 QDF_STATUS (*dfs_process_phyerr)(struct wlan_objmgr_pdev *pdev, 1509 void *buf, 1510 uint16_t datalen, 1511 uint8_t r_rssi, 1512 uint8_t r_ext_rssi, 1513 uint32_t r_rs_tstamp, 1514 uint64_t r_fulltsf); 1515 QDF_STATUS (*dfs_destroy_object)(struct wlan_objmgr_pdev *pdev); 1516 QDF_STATUS (*dfs_radar_enable)( 1517 struct wlan_objmgr_pdev *pdev, 1518 int no_cac, 1519 uint32_t opmode, 1520 bool enable); 1521 void (*dfs_is_radar_enabled)(struct wlan_objmgr_pdev *pdev, 1522 int *ignore_dfs); 1523 QDF_STATUS (*dfs_control)(struct wlan_objmgr_pdev *pdev, 1524 u_int id, 1525 void *indata, 1526 uint32_t insize, 1527 void *outdata, 1528 uint32_t *outsize, 1529 int *error); 1530 QDF_STATUS (*dfs_is_precac_timer_running)(struct wlan_objmgr_pdev *pdev, 1531 bool *is_precac_timer_running 1532 ); 1533 #ifdef CONFIG_CHAN_NUM_API 1534 QDF_STATUS 1535 (*dfs_find_vht80_chan_for_precac)(struct wlan_objmgr_pdev *pdev, 1536 uint32_t chan_mode, 1537 uint8_t ch_freq_seg1, 1538 uint32_t *cfreq1, 1539 uint32_t *cfreq2, 1540 uint32_t *phy_mode, 1541 bool *dfs_set_cfreq2, 1542 bool *set_agile); 1543 #endif 1544 #ifdef CONFIG_CHAN_FREQ_API 1545 QDF_STATUS 1546 (*dfs_find_vht80_chan_for_precac_for_freq)(struct wlan_objmgr_pdev 1547 *pdev, 1548 uint32_t chan_mode, 1549 uint16_t ch_freq_seg1, 1550 uint32_t *cfreq1, 1551 uint32_t *cfreq2, 1552 uint32_t *phy_mode, 1553 bool *dfs_set_cfreq2, 1554 bool *set_agile); 1555 #endif 1556 QDF_STATUS (*dfs_agile_precac_start)(struct wlan_objmgr_pdev *pdev); 1557 QDF_STATUS (*dfs_set_agile_precac_state)(struct wlan_objmgr_pdev *pdev, 1558 int agile_precac_state); 1559 QDF_STATUS (*dfs_reset_adfs_config)(struct wlan_objmgr_psoc *psoc); 1560 QDF_STATUS 1561 (*dfs_dfs_ocac_complete_ind)(struct wlan_objmgr_pdev *pdev, 1562 struct vdev_adfs_complete_status *ocac_st); 1563 QDF_STATUS (*dfs_start_precac_timer)(struct wlan_objmgr_pdev *pdev); 1564 QDF_STATUS (*dfs_cancel_precac_timer)(struct wlan_objmgr_pdev *pdev); 1565 QDF_STATUS (*dfs_override_precac_timeout)( 1566 struct wlan_objmgr_pdev *pdev, 1567 int precac_timeout); 1568 QDF_STATUS (*dfs_set_precac_enable)(struct wlan_objmgr_pdev *pdev, 1569 uint32_t value); 1570 QDF_STATUS 1571 (*dfs_get_legacy_precac_enable)(struct wlan_objmgr_pdev *pdev, 1572 bool *buff); 1573 QDF_STATUS (*dfs_get_agile_precac_enable)(struct wlan_objmgr_pdev *pdev, 1574 bool *buff); 1575 #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT 1576 QDF_STATUS (*dfs_set_precac_intermediate_chan)(struct wlan_objmgr_pdev *pdev, 1577 uint32_t value); 1578 QDF_STATUS (*dfs_get_precac_intermediate_chan)(struct wlan_objmgr_pdev *pdev, 1579 int *buff); 1580 #ifdef CONFIG_CHAN_NUM_API 1581 bool (*dfs_decide_precac_preferred_chan)(struct wlan_objmgr_pdev *pdev, 1582 uint8_t *pref_chan, 1583 enum wlan_phymode mode); 1584 #endif 1585 #ifdef CONFIG_CHAN_FREQ_API 1586 bool (*dfs_decide_precac_preferred_chan_for_freq)(struct 1587 wlan_objmgr_pdev *pdev, 1588 uint16_t *pref_chan_freq, 1589 enum wlan_phymode mode); 1590 #endif 1591 1592 #ifdef CONFIG_CHAN_NUM_API 1593 enum precac_chan_state (*dfs_get_precac_chan_state)(struct wlan_objmgr_pdev *pdev, 1594 uint8_t precac_chan); 1595 #endif 1596 1597 #ifdef CONFIG_CHAN_FREQ_API 1598 enum precac_chan_state (*dfs_get_precac_chan_state_for_freq)(struct 1599 wlan_objmgr_pdev *pdev, 1600 uint16_t pcac_freq); 1601 #endif 1602 #endif 1603 QDF_STATUS (*dfs_get_override_precac_timeout)( 1604 struct wlan_objmgr_pdev *pdev, 1605 int *precac_timeout); 1606 #ifdef CONFIG_CHAN_NUM_API 1607 QDF_STATUS (*dfs_set_current_channel)(struct wlan_objmgr_pdev *pdev, 1608 uint16_t ic_freq, 1609 uint64_t ic_flags, 1610 uint16_t ic_flagext, 1611 uint8_t ic_ieee, 1612 uint8_t ic_vhtop_ch_freq_seg1, 1613 uint8_t ic_vhtop_ch_freq_seg2); 1614 #endif 1615 #ifdef CONFIG_CHAN_FREQ_API 1616 QDF_STATUS 1617 (*dfs_set_current_channel_for_freq)(struct wlan_objmgr_pdev *pdev, 1618 uint16_t ic_freq, 1619 uint64_t ic_flags, 1620 uint16_t ic_flagext, 1621 uint8_t ic_ieee, 1622 uint8_t ic_vhtop_ch_freq_seg1, 1623 uint8_t ic_vhtop_ch_freq_seg2, 1624 uint16_t dfs_ch_mhz_freq_seg1, 1625 uint16_t dfs_ch_mhz_freq_seg2, 1626 bool *is_channel_updated); 1627 #endif 1628 #ifdef DFS_COMPONENT_ENABLE 1629 QDF_STATUS (*dfs_process_radar_ind)(struct wlan_objmgr_pdev *pdev, 1630 struct radar_found_info *radar_found); 1631 QDF_STATUS (*dfs_dfs_cac_complete_ind)(struct wlan_objmgr_pdev *pdev, 1632 uint32_t vdev_id); 1633 #endif 1634 QDF_STATUS (*dfs_stop)(struct wlan_objmgr_pdev *pdev); 1635 QDF_STATUS (*dfs_reinit_timers)(struct wlan_objmgr_pdev *pdev); 1636 void (*dfs_enable_stadfs)(struct wlan_objmgr_pdev *pdev, bool val); 1637 bool (*dfs_is_stadfs_enabled)(struct wlan_objmgr_pdev *pdev); 1638 QDF_STATUS (*dfs_process_phyerr_filter_offload)( 1639 struct wlan_objmgr_pdev *pdev, 1640 struct radar_event_info *wlan_radar_info); 1641 QDF_STATUS (*dfs_is_phyerr_filter_offload)( 1642 struct wlan_objmgr_psoc *psoc, 1643 bool *is_phyerr_filter_offload); 1644 QDF_STATUS (*dfs_action_on_status)(struct wlan_objmgr_pdev *pdev, 1645 u_int32_t *dfs_status_check); 1646 QDF_STATUS (*dfs_override_status_timeout)( 1647 struct wlan_objmgr_pdev *pdev, 1648 int status_timeout); 1649 QDF_STATUS (*dfs_get_override_status_timeout)( 1650 struct wlan_objmgr_pdev *pdev, 1651 int *status_timeout); 1652 QDF_STATUS (*dfs_reset_spoof_test)(struct wlan_objmgr_pdev *pdev); 1653 QDF_STATUS (*dfs_is_disable_radar_marking_set)(struct wlan_objmgr_pdev 1654 *pdev, 1655 bool *disable_radar_marking); 1656 QDF_STATUS (*dfs_set_nol_subchannel_marking)( 1657 struct wlan_objmgr_pdev *pdev, 1658 bool value); 1659 QDF_STATUS (*dfs_get_nol_subchannel_marking)( 1660 struct wlan_objmgr_pdev *pdev, 1661 bool *value); 1662 QDF_STATUS (*dfs_set_bw_reduction)(struct wlan_objmgr_pdev *pdev, 1663 bool value); 1664 QDF_STATUS (*dfs_is_bw_reduction_needed)(struct wlan_objmgr_pdev *pdev, 1665 bool *bw_reduce); 1666 void (*dfs_allow_hw_pulses)(struct wlan_objmgr_pdev *pdev, 1667 bool allow_hw_pulses); 1668 bool (*dfs_is_hw_pulses_allowed)(struct wlan_objmgr_pdev *pdev); 1669 void (*dfs_set_fw_adfs_support)(struct wlan_objmgr_pdev *pdev, 1670 bool fw_adfs_support_160, 1671 bool fw_adfs_support_non_160); 1672 void (*dfs_reset_dfs_prevchan)(struct wlan_objmgr_pdev *pdev); 1673 void (*dfs_init_tmp_psoc_nol)(struct wlan_objmgr_pdev *pdev, 1674 uint8_t num_radios); 1675 void (*dfs_deinit_tmp_psoc_nol)(struct wlan_objmgr_pdev *pdev); 1676 void (*dfs_save_dfs_nol_in_psoc)(struct wlan_objmgr_pdev *pdev, 1677 uint8_t pdev_id); 1678 void (*dfs_reinit_nol_from_psoc_copy)(struct wlan_objmgr_pdev *pdev, 1679 uint8_t pdev_id, 1680 uint16_t low_5ghz_freq, 1681 uint16_t high_5ghz_freq); 1682 void (*dfs_reinit_precac_lists)(struct wlan_objmgr_pdev *src_pdev, 1683 struct wlan_objmgr_pdev *dest_pdev, 1684 uint16_t low_5g_freq, 1685 uint16_t high_5g_freq); 1686 void (*dfs_complete_deferred_tasks)(struct wlan_objmgr_pdev *pdev); 1687 #ifdef QCA_SUPPORT_ADFS_RCAC 1688 QDF_STATUS (*dfs_set_rcac_enable)(struct wlan_objmgr_pdev *pdev, 1689 bool rcac_en); 1690 QDF_STATUS (*dfs_get_rcac_enable)(struct wlan_objmgr_pdev *pdev, 1691 bool *rcac_en); 1692 QDF_STATUS (*dfs_set_rcac_freq)(struct wlan_objmgr_pdev *pdev, 1693 qdf_freq_t rcac_freq); 1694 QDF_STATUS (*dfs_get_rcac_freq)(struct wlan_objmgr_pdev *pdev, 1695 qdf_freq_t *rcac_freq); 1696 void (*dfs_rcac_sm_deliver_evt)(struct wlan_objmgr_pdev *pdev, 1697 enum dfs_rcac_sm_evt event); 1698 bool (*dfs_is_agile_rcac_enabled)(struct wlan_objmgr_pdev *pdev); 1699 #endif 1700 }; 1701 1702 /** 1703 * struct wlan_lmac_if_mlme_rx_ops: Function pointer to call MLME functions 1704 * @vdev_mgr_start_response: function to handle start response 1705 * @vdev_mgr_stop_response: function to handle stop response 1706 * @vdev_mgr_delete_response: function to handle delete response 1707 * @vdev_mgr_offload_bcn_tx_status_event_handle: function to handle offload 1708 * beacon tx 1709 * @vdev_mgr_tbttoffset_update_handle: function to handle tbtt offset event 1710 * @vdev_mgr_peer_delete_all_response: function to handle vdev delete all peer 1711 * event 1712 * @psoc_get_wakelock_info: function to get wakelock info 1713 * @psoc_get_vdev_response_timer_info: function to get vdev response timer 1714 * structure for a specific vdev id 1715 * @vdev_mgr_multi_vdev_restart_resp: function to handle mvr response 1716 */ 1717 struct wlan_lmac_if_mlme_rx_ops { 1718 QDF_STATUS (*vdev_mgr_start_response)( 1719 struct wlan_objmgr_psoc *psoc, 1720 struct vdev_start_response *rsp); 1721 QDF_STATUS (*vdev_mgr_stop_response)( 1722 struct wlan_objmgr_psoc *psoc, 1723 struct vdev_stop_response *rsp); 1724 QDF_STATUS (*vdev_mgr_delete_response)( 1725 struct wlan_objmgr_psoc *psoc, 1726 struct vdev_delete_response *rsp); 1727 QDF_STATUS (*vdev_mgr_offload_bcn_tx_status_event_handle)( 1728 uint32_t vdev_id, 1729 uint32_t tx_status); 1730 QDF_STATUS (*vdev_mgr_tbttoffset_update_handle)( 1731 uint32_t num_vdevs, 1732 bool is_ext); 1733 QDF_STATUS (*vdev_mgr_peer_delete_all_response)( 1734 struct wlan_objmgr_psoc *psoc, 1735 struct peer_delete_all_response *rsp); 1736 QDF_STATUS (*vdev_mgr_multi_vdev_restart_resp)( 1737 struct wlan_objmgr_psoc *psoc, 1738 struct multi_vdev_restart_resp *rsp); 1739 #ifdef FEATURE_VDEV_RSP_WAKELOCK 1740 struct vdev_mlme_wakelock *(*psoc_get_wakelock_info)( 1741 struct wlan_objmgr_psoc *psoc); 1742 #endif 1743 struct vdev_response_timer *(*psoc_get_vdev_response_timer_info)( 1744 struct wlan_objmgr_psoc *psoc, 1745 uint8_t vdev_id); 1746 }; 1747 1748 #ifdef WLAN_SUPPORT_GREEN_AP 1749 struct wlan_lmac_if_green_ap_rx_ops { 1750 bool (*is_ps_enabled)(struct wlan_objmgr_pdev *pdev); 1751 bool (*is_dbg_print_enabled)(struct wlan_objmgr_pdev *pdev); 1752 QDF_STATUS (*ps_get)(struct wlan_objmgr_pdev *pdev, uint8_t *value); 1753 QDF_STATUS (*ps_set)(struct wlan_objmgr_pdev *pdev, uint8_t value); 1754 void (*suspend_handle)(struct wlan_objmgr_pdev *pdev); 1755 }; 1756 #endif 1757 1758 /** 1759 * struct wlan_lmac_if_rx_ops - south bound rx function pointers 1760 * @mgmt_txrx_tx_ops: mgmt txrx rx ops 1761 * @scan: scan rx ops 1762 * @dfs_rx_ops: dfs rx ops. 1763 * @cp_stats_rx_ops: cp stats rx ops 1764 * @cfr_rx_ops: cfr rx ops 1765 * 1766 * Callback function tabled to be registered with lmac/wmi. 1767 * lmac will use the functional table to send events/frames to umac 1768 */ 1769 struct wlan_lmac_if_rx_ops { 1770 /* Components to declare function pointers required by the module 1771 * in component specific structure. 1772 * The component specific ops structure can be declared in this file 1773 * only 1774 */ 1775 struct wlan_lmac_if_mgmt_txrx_rx_ops mgmt_txrx_rx_ops; 1776 struct wlan_lmac_if_scan_rx_ops scan; 1777 1778 #ifdef CONVERGED_P2P_ENABLE 1779 struct wlan_lmac_if_p2p_rx_ops p2p; 1780 #endif 1781 #ifdef WLAN_IOT_SIM_SUPPORT 1782 struct wlan_lmac_if_iot_sim_rx_ops iot_sim_rx_ops; 1783 #endif 1784 #ifdef WLAN_ATF_ENABLE 1785 struct wlan_lmac_if_atf_rx_ops atf_rx_ops; 1786 #endif 1787 #ifdef QCA_SUPPORT_CP_STATS 1788 struct wlan_lmac_if_cp_stats_rx_ops cp_stats_rx_ops; 1789 #endif 1790 #ifdef DCS_INTERFERENCE_DETECTION 1791 struct wlan_target_if_dcs_rx_ops dcs_rx_ops; 1792 #endif 1793 #ifdef WLAN_SA_API_ENABLE 1794 struct wlan_lmac_if_sa_api_rx_ops sa_api_rx_ops; 1795 #endif 1796 1797 #ifdef WLAN_CFR_ENABLE 1798 struct wlan_lmac_if_cfr_rx_ops cfr_rx_ops; 1799 #endif 1800 1801 #ifdef WLAN_CONV_SPECTRAL_ENABLE 1802 struct wlan_lmac_if_sptrl_rx_ops sptrl_rx_ops; 1803 #endif 1804 1805 #ifdef WLAN_CONV_CRYPTO_SUPPORTED 1806 struct wlan_lmac_if_crypto_rx_ops crypto_rx_ops; 1807 #endif 1808 #ifdef WIFI_POS_CONVERGED 1809 struct wlan_lmac_if_wifi_pos_rx_ops wifi_pos_rx_ops; 1810 #endif 1811 struct wlan_lmac_if_reg_rx_ops reg_rx_ops; 1812 struct wlan_lmac_if_dfs_rx_ops dfs_rx_ops; 1813 #ifdef FEATURE_WLAN_TDLS 1814 struct wlan_lmac_if_tdls_rx_ops tdls_rx_ops; 1815 #endif 1816 1817 #ifdef WLAN_SUPPORT_FILS 1818 struct wlan_lmac_if_fd_rx_ops fd_rx_ops; 1819 #endif 1820 1821 struct wlan_lmac_if_mlme_rx_ops mops; 1822 1823 #ifdef WLAN_SUPPORT_GREEN_AP 1824 struct wlan_lmac_if_green_ap_rx_ops green_ap_rx_ops; 1825 #endif 1826 1827 struct wlan_lmac_if_ftm_rx_ops ftm_rx_ops; 1828 }; 1829 1830 /* Function pointer to call legacy tx_ops registration in OL/WMA. 1831 */ 1832 extern QDF_STATUS (*wlan_lmac_if_umac_tx_ops_register) 1833 (struct wlan_lmac_if_tx_ops *tx_ops); 1834 #endif /* _WLAN_LMAC_IF_DEF_H_ */ 1835