1 /* 2 * Copyright (c) 2016-2019 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_time.h> 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 QCA_SUPPORT_SON 36 #include <wlan_son_tgt_api.h> 37 #endif 38 #ifdef WLAN_SA_API_ENABLE 39 #include "wlan_sa_api_utils_defs.h" 40 #endif 41 #ifdef WLAN_CONV_SPECTRAL_ENABLE 42 #include "wlan_spectral_public_structs.h" 43 #endif 44 #include <reg_services_public_struct.h> 45 46 #ifdef WLAN_CONV_CRYPTO_SUPPORTED 47 #include "wlan_crypto_global_def.h" 48 #endif 49 50 #ifdef WLAN_CFR_ENABLE 51 #include "wlan_cfr_utils_api.h" 52 #endif 53 54 #include <wlan_dfs_tgt_api.h> 55 #include <wlan_dfs_ioctl.h> 56 57 /* Number of dev type: Direct attach and Offload */ 58 #define MAX_DEV_TYPE 2 59 60 #ifdef WIFI_POS_CONVERGED 61 /* forward declarations */ 62 struct oem_data_req; 63 struct oem_data_rsp; 64 #endif /* WIFI_POS_CONVERGED */ 65 66 #ifdef DIRECT_BUF_RX_ENABLE 67 /* forward declarations for direct buf rx */ 68 struct direct_buf_rx_data; 69 /* Forward declaration for module_ring_params */ 70 struct module_ring_params; 71 #endif 72 73 #ifdef FEATURE_WLAN_TDLS 74 #include "wlan_tdls_public_structs.h" 75 #endif 76 77 #ifdef QCA_SUPPORT_CP_STATS 78 #include <wlan_cp_stats_mc_defs.h> 79 #endif /* QCA_SUPPORT_CP_STATS */ 80 81 #ifdef CMN_VDEV_MGR_TGT_IF_ENABLE 82 #include <wlan_vdev_mgr_tgt_if_tx_defs.h> 83 #include <wlan_vdev_mgr_tgt_if_rx_defs.h> 84 #endif /* CMN_VDEV_MGR_TGT_IF_ENABLE */ 85 86 #ifdef QCA_SUPPORT_CP_STATS 87 /** 88 * struct wlan_lmac_if_cp_stats_tx_ops - defines southbound tx callbacks for 89 * control plane statistics component 90 * @cp_stats_attach: function pointer to register events from FW 91 * @cp_stats_detach: function pointer to unregister events from FW 92 */ 93 struct wlan_lmac_if_cp_stats_tx_ops { 94 QDF_STATUS (*cp_stats_attach)(struct wlan_objmgr_psoc *psoc); 95 QDF_STATUS (*cp_stats_detach)(struct wlan_objmgr_psoc *posc); 96 #ifdef CONFIG_MCL 97 void (*inc_wake_lock_stats)(uint32_t reason, 98 struct wake_lock_stats *stats, 99 uint32_t *unspecified_wake_count); 100 QDF_STATUS (*send_req_stats)(struct wlan_objmgr_psoc *psoc, 101 enum stats_req_type type, 102 struct request_info *req); 103 #endif 104 }; 105 106 /** 107 * struct wlan_lmac_if_cp_stats_rx_ops - defines southbound rx callbacks for 108 * control plane statistics component 109 * @cp_stats_rx_event_handler: function pointer to rx FW events 110 */ 111 struct wlan_lmac_if_cp_stats_rx_ops { 112 QDF_STATUS (*cp_stats_rx_event_handler)(struct wlan_objmgr_vdev *vdev); 113 #ifdef CONFIG_MCL 114 QDF_STATUS (*process_stats_event)(struct wlan_objmgr_psoc *psoc, 115 struct stats_event *ev); 116 #endif 117 }; 118 #endif 119 120 /** 121 * struct wlan_lmac_if_mgmt_txrx_tx_ops - structure of tx function 122 * pointers for mgmt txrx component 123 * @mgmt_tx_send: function pointer to transmit mgmt tx frame 124 * @beacon_send: function pointer to transmit beacon frame 125 * @fd_action_frame_send: function pointer to transmit FD action frame 126 * @tx_drain_nbuf_op: function pointer for any umac nbuf realted ops for 127 * pending mgmt frames cleanup 128 */ 129 struct wlan_lmac_if_mgmt_txrx_tx_ops { 130 QDF_STATUS (*mgmt_tx_send)(struct wlan_objmgr_vdev *vdev, 131 qdf_nbuf_t nbuf, u_int32_t desc_id, 132 void *mgmt_tx_params); 133 QDF_STATUS (*beacon_send)(struct wlan_objmgr_vdev *vdev, 134 qdf_nbuf_t nbuf); 135 QDF_STATUS (*fd_action_frame_send)(struct wlan_objmgr_vdev *vdev, 136 qdf_nbuf_t nbuf); 137 void (*tx_drain_nbuf_op)(struct wlan_objmgr_pdev *pdev, 138 qdf_nbuf_t nbuf); 139 }; 140 141 /** 142 * struct wlan_lmac_if_scan_tx_ops - south bound tx function pointers for scan 143 * @scan_start: function to start scan 144 * @scan_cancel: function to cancel scan 145 * @pno_start: start pno scan 146 * @pno_stop: stop pno scan 147 * @scan_reg_ev_handler: function to register for scan events 148 * @scan_unreg_ev_handler: function to unregister for scan events 149 * 150 * scan module uses these functions to avail ol/da lmac services 151 */ 152 struct wlan_lmac_if_scan_tx_ops { 153 QDF_STATUS (*scan_start)(struct wlan_objmgr_pdev *pdev, 154 struct scan_start_request *req); 155 QDF_STATUS (*scan_cancel)(struct wlan_objmgr_pdev *pdev, 156 struct scan_cancel_param *req); 157 QDF_STATUS (*pno_start)(struct wlan_objmgr_psoc *psoc, 158 struct pno_scan_req_params *req); 159 QDF_STATUS (*pno_stop)(struct wlan_objmgr_psoc *psoc, 160 uint8_t vdev_id); 161 QDF_STATUS (*scan_reg_ev_handler)(struct wlan_objmgr_psoc *psoc, 162 void *arg); 163 QDF_STATUS (*scan_unreg_ev_handler)(struct wlan_objmgr_psoc *psoc, 164 void *arg); 165 QDF_STATUS (*set_chan_list)(struct wlan_objmgr_pdev *pdev, void *arg); 166 }; 167 168 /** 169 * struct wlan_lmac_if_ftm_tx_ops - south bound tx function pointers for ftm 170 * @ftm_attach: function to register event handlers with FW 171 * @ftm_detach: function to de-register event handlers with FW 172 * @ftm_cmd_send: function to send FTM commands to FW 173 * 174 * ftm module uses these functions to avail ol/da lmac services 175 */ 176 struct wlan_lmac_if_ftm_tx_ops { 177 QDF_STATUS (*ftm_attach)(struct wlan_objmgr_psoc *psoc); 178 QDF_STATUS (*ftm_detach)(struct wlan_objmgr_psoc *psoc); 179 QDF_STATUS (*ftm_cmd_send)(struct wlan_objmgr_pdev *pdev, 180 uint8_t *buf, uint32_t len, uint8_t mac_id); 181 }; 182 183 184 /** 185 * struct wlan_lmac_if_mlme_tx_ops - south bound tx function pointers for mlme 186 * @scan_sta_power_events: function to handle STA power events 187 * @scan_connection_lost: function to get scan connection lost 188 * @scan_end: function to end scan 189 * @get_wifi_iface_id: function to get wifi interface id 190 * @vdev_mlme_attach: function to register events 191 * @vdev_mlme_detach: function to unregister events 192 * @vdev_mgr_rsp_timer_init: function to initialize vdev response timer 193 * @vdev_mgr_rsp_timer_deinit: function to free vdev response timer 194 * @vdev_mgr_rsp_timer_mod: function to timer_mod vdev response timer 195 * @vdev_mgr_rsp_timer_stop: function to stop vdev response timer 196 * @vdev_create_send: function to send vdev create 197 * @vdev_start_send: function to send vdev start 198 * @vdev_up_send: function to send vdev up 199 * @vdev_delete_send: function to send vdev delete 200 * @vdev_stop_send: function to send vdev stop 201 * @vdev_down_send: function to send vdev down 202 * @vdev_set_param_send: function to send vdev parameter 203 * @vdev_set_nac_rssi_send: function to send nac rssi 204 * @vdev_set_neighbour_rx_cmd_send: function to send vdev neighbour rx cmd 205 * @vdev_sifs_trigger_send: function to send vdev sifs trigger 206 * @vdev_set_custom_aggr_size_cmd_send: function to send custom aggr size 207 * @vdev_config_ratemask_cmd_send: function to send ratemask 208 * @peer_flush_tids_send: function to flush peer tids 209 * @multiple_vdev_restart_req_cmd: function to send multiple vdev restart 210 * @beacon_send_cmd: function to send beacon 211 * @beacon_tmpl_send: function to send beacon template 212 * @vdev_bcn_miss_offload_send: function to send beacon miss offload 213 * @vdev_sta_ps_param_send: function to sent STA power save config 214 * @target_is_pre_lithium: function to get target type status 215 */ 216 struct wlan_lmac_if_mlme_tx_ops { 217 void (*scan_sta_power_events)(struct wlan_objmgr_pdev *pdev, 218 int event_type, int event_status); 219 void (*scan_connection_lost)(struct wlan_objmgr_pdev *pdev); 220 void (*scan_end)(struct wlan_objmgr_pdev *pdev); 221 uint32_t (*get_wifi_iface_id) (struct wlan_objmgr_pdev *pdev); 222 QDF_STATUS (*vdev_mlme_attach)(struct wlan_objmgr_psoc *psoc); 223 QDF_STATUS (*vdev_mlme_detach)(struct wlan_objmgr_psoc *psoc); 224 #ifdef CMN_VDEV_MGR_TGT_IF_ENABLE 225 QDF_STATUS (*vdev_mgr_rsp_timer_init)( 226 struct wlan_objmgr_vdev *vdev, 227 qdf_timer_t *rsp_timer); 228 QDF_STATUS (*vdev_mgr_rsp_timer_deinit)( 229 struct wlan_objmgr_vdev *vdev, 230 qdf_timer_t *rsp_timer); 231 QDF_STATUS (*vdev_mgr_rsp_timer_mod)( 232 struct wlan_objmgr_vdev *vdev, 233 struct vdev_response_timer *vdev_rsp, 234 int mseconds); 235 QDF_STATUS (*vdev_mgr_rsp_timer_stop)( 236 struct wlan_objmgr_vdev *vdev, 237 struct vdev_response_timer *vdev_rsp, 238 uint8_t clear_bit); 239 QDF_STATUS (*vdev_create_send)(struct wlan_objmgr_vdev *vdev, 240 struct vdev_create_params *param); 241 QDF_STATUS (*vdev_start_send)(struct wlan_objmgr_vdev *vdev, 242 struct vdev_start_params *param); 243 QDF_STATUS (*vdev_up_send)(struct wlan_objmgr_vdev *vdev, 244 struct vdev_up_params *param); 245 QDF_STATUS (*vdev_delete_send)(struct wlan_objmgr_vdev *vdev, 246 struct vdev_delete_params *param); 247 QDF_STATUS (*vdev_stop_send)(struct wlan_objmgr_vdev *vdev, 248 struct vdev_stop_params *param); 249 QDF_STATUS (*vdev_down_send)(struct wlan_objmgr_vdev *vdev, 250 struct vdev_down_params *param); 251 QDF_STATUS (*vdev_set_param_send)(struct wlan_objmgr_vdev *vdev, 252 struct vdev_set_params *param); 253 QDF_STATUS (*vdev_set_nac_rssi_send)( 254 struct wlan_objmgr_vdev *vdev, 255 struct vdev_scan_nac_rssi_params *param); 256 QDF_STATUS (*vdev_set_neighbour_rx_cmd_send)( 257 struct wlan_objmgr_vdev *vdev, 258 struct set_neighbour_rx_params *param, 259 uint8_t *mac); 260 QDF_STATUS (*vdev_sifs_trigger_send)( 261 struct wlan_objmgr_vdev *vdev, 262 struct sifs_trigger_param *param); 263 QDF_STATUS (*vdev_set_custom_aggr_size_cmd_send)( 264 struct wlan_objmgr_vdev *vdev, 265 struct set_custom_aggr_size_params *param); 266 QDF_STATUS (*vdev_config_ratemask_cmd_send)( 267 struct wlan_objmgr_vdev *vdev, 268 struct config_ratemask_params *param); 269 QDF_STATUS (*peer_flush_tids_send)( 270 struct wlan_objmgr_vdev *vdev, 271 struct peer_flush_params *param); 272 QDF_STATUS (*multiple_vdev_restart_req_cmd)( 273 struct wlan_objmgr_pdev *pdev, 274 struct multiple_vdev_restart_params *param); 275 QDF_STATUS (*beacon_cmd_send)(struct wlan_objmgr_vdev *vdev, 276 struct beacon_params *param); 277 QDF_STATUS (*beacon_tmpl_send)(struct wlan_objmgr_vdev *vdev, 278 struct beacon_tmpl_params *param); 279 QDF_STATUS (*vdev_bcn_miss_offload_send)(struct wlan_objmgr_vdev *vdev); 280 QDF_STATUS (*vdev_sta_ps_param_send)(struct wlan_objmgr_vdev *vdev, 281 struct sta_ps_params *param); 282 bool (*target_is_pre_lithium)(struct wlan_objmgr_psoc *psoc); 283 #endif 284 }; 285 286 /** 287 * struct wlan_lmac_if_scan_rx_ops - south bound rx function pointers for scan 288 * @scan_ev_handler: scan event handler 289 * @scan_set_max_active_scans: set max active scans allowed 290 * 291 * lmac modules uses this API to post scan events to scan module 292 */ 293 struct wlan_lmac_if_scan_rx_ops { 294 QDF_STATUS (*scan_ev_handler)(struct wlan_objmgr_psoc *psoc, 295 struct scan_event_info *event_info); 296 QDF_STATUS (*scan_set_max_active_scans)(struct wlan_objmgr_psoc *psoc, 297 uint32_t max_active_scans); 298 }; 299 300 #ifdef CONVERGED_P2P_ENABLE 301 302 /* forward declarations for p2p tx ops */ 303 struct p2p_ps_config; 304 struct p2p_lo_start; 305 struct p2p_set_mac_filter; 306 307 /** 308 * struct wlan_lmac_if_p2p_tx_ops - structure of tx function pointers 309 * for P2P component 310 * @set_ps: function pointer to set power save 311 * @lo_start: function pointer to start listen offload 312 * @lo_stop: function pointer to stop listen offload 313 * @set_noa: function pointer to disable/enable NOA 314 * @reg_lo_ev_handler: function pointer to register lo event handler 315 * @reg_noa_ev_handler: function pointer to register noa event handler 316 * @unreg_lo_ev_handler: function pointer to unregister lo event handler 317 * @unreg_noa_ev_handler:function pointer to unregister noa event handler 318 * @reg_mac_addr_rx_filter_handler: function pointer to register/unregister 319 * set mac addr status event callback. 320 * @set_mac_addr_rx_filter_cmd: function pointer to set mac addr rx filter 321 */ 322 struct wlan_lmac_if_p2p_tx_ops { 323 QDF_STATUS (*set_ps)(struct wlan_objmgr_psoc *psoc, 324 struct p2p_ps_config *ps_config); 325 #ifdef FEATURE_P2P_LISTEN_OFFLOAD 326 QDF_STATUS (*lo_start)(struct wlan_objmgr_psoc *psoc, 327 struct p2p_lo_start *lo_start); 328 QDF_STATUS (*lo_stop)(struct wlan_objmgr_psoc *psoc, 329 uint32_t vdev_id); 330 QDF_STATUS (*reg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc, 331 void *arg); 332 QDF_STATUS (*unreg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc, 333 void *arg); 334 #endif 335 QDF_STATUS (*set_noa)(struct wlan_objmgr_psoc *psoc, 336 uint32_t vdev_id, bool disable_noa); 337 QDF_STATUS (*reg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc, 338 void *arg); 339 QDF_STATUS (*unreg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc, 340 void *arg); 341 QDF_STATUS (*reg_mac_addr_rx_filter_handler)( 342 struct wlan_objmgr_psoc *psoc, bool reg); 343 QDF_STATUS (*set_mac_addr_rx_filter_cmd)( 344 struct wlan_objmgr_psoc *psoc, 345 struct p2p_set_mac_filter *param); 346 }; 347 #endif 348 349 #ifdef WLAN_ATF_ENABLE 350 351 /** 352 * struct wlan_lmac_if_atf_tx_ops - ATF specific tx function pointers 353 * @atf_node_unblock: Resume node 354 * @atf_set_enable_disable: Set atf enable/disable 355 * @atf_tokens_used: Get used atf tokens 356 * @atf_get_unused_txtoken: Get unused atf tokens 357 * @atf_peer_resume: Resume peer 358 * @atf_tokens_unassigned: Set unassigned atf tockens 359 * @atf_capable_peer: Set atf state change 360 * @atf_airtime_estimate: Get estimated airtime 361 * @atf_debug_peerstate: Get peer state 362 * @atf_enable_disable: Set atf peer stats enable/disable 363 * @atf_ssid_sched_policy: Set ssid schedule policy 364 * @atf_set: Set atf 365 * @atf_set_grouping: Set atf grouping 366 * @atf_set_group_ac: Set atf Group AC 367 * @atf_send_peer_request: Send peer requests 368 * @atf_set_bwf: Set bandwidth fairness 369 * @atf_peer_buf_held: Get buffer held 370 * @atf_get_peer_airtime: Get peer airtime 371 * @atf_get_chbusyper: Get channel busy 372 * @atf_open: ATF open 373 * @atf_register_event_handler ATF register wmi event handlers 374 * @atf_unregister_event_handler ATF unregister wmi event handlers 375 */ 376 struct wlan_lmac_if_atf_tx_ops { 377 void (*atf_node_unblock)(struct wlan_objmgr_pdev *pdev, 378 struct wlan_objmgr_peer *peer); 379 void (*atf_set_enable_disable)(struct wlan_objmgr_pdev *pdev, 380 uint8_t value); 381 uint8_t (*atf_tokens_used)(struct wlan_objmgr_pdev *pdev, 382 struct wlan_objmgr_peer *peer); 383 void (*atf_get_unused_txtoken)(struct wlan_objmgr_pdev *pdev, 384 struct wlan_objmgr_peer *peer, 385 int *unused_token); 386 void (*atf_peer_resume)(struct wlan_objmgr_pdev *pdev, 387 struct wlan_objmgr_peer *peer); 388 void (*atf_tokens_unassigned)(struct wlan_objmgr_pdev *pdev, 389 uint32_t tokens_unassigned); 390 void (*atf_capable_peer)(struct wlan_objmgr_pdev *pdev, 391 struct wlan_objmgr_peer *peer, 392 uint8_t val, uint8_t atfstate_change); 393 uint32_t (*atf_airtime_estimate)(struct wlan_objmgr_pdev *pdev, 394 struct wlan_objmgr_peer *peer, 395 uint32_t tput, 396 uint32_t *possible_tput); 397 uint32_t (*atf_debug_peerstate)(struct wlan_objmgr_pdev *pdev, 398 struct wlan_objmgr_peer *peer, 399 struct atf_peerstate *peerstate); 400 int32_t (*atf_enable_disable)(struct wlan_objmgr_vdev *vdev, 401 uint8_t value); 402 int32_t (*atf_ssid_sched_policy)(struct wlan_objmgr_vdev *vdev, 403 uint8_t value); 404 int32_t (*atf_set)(struct wlan_objmgr_pdev *pdev, 405 struct pdev_atf_req *atf_req, 406 uint8_t atf_tput_based); 407 int32_t (*atf_set_grouping)(struct wlan_objmgr_pdev *pdev, 408 struct pdev_atf_ssid_group_req *atf_grp_req, 409 uint8_t atf_tput_based); 410 int32_t (*atf_set_group_ac)(struct wlan_objmgr_pdev *pdev, 411 struct pdev_atf_group_wmm_ac_req *atf_acreq, 412 uint8_t atf_tput_based); 413 int32_t (*atf_send_peer_request)(struct wlan_objmgr_pdev *pdev, 414 struct pdev_atf_peer_ext_request *atfr, 415 uint8_t atf_tput_based); 416 int32_t (*atf_set_bwf)(struct wlan_objmgr_pdev *pdev, 417 struct pdev_bwf_req *bwf_req); 418 uint32_t (*atf_peer_buf_held)(struct wlan_objmgr_peer *peer); 419 uint32_t (*atf_get_peer_airtime)(struct wlan_objmgr_peer *peer); 420 uint32_t (*atf_get_chbusyper)(struct wlan_objmgr_pdev *pdev); 421 void (*atf_open)(struct wlan_objmgr_psoc *psoc); 422 void (*atf_register_event_handler)(struct wlan_objmgr_psoc *psoc); 423 void (*atf_unregister_event_handler)(struct wlan_objmgr_psoc *psoc); 424 }; 425 #endif 426 427 #ifdef WLAN_SUPPORT_FILS 428 /** 429 * struct wlan_lmac_if_fd_tx_ops - FILS Discovery specific Tx function pointers 430 * @fd_vdev_config_fils: Enable and configure FILS Discovery 431 * @fd_register_event_handler: Register swfda WMI event handler 432 * @fd_unregister_event_handler: Un-register swfda WMI event handler 433 */ 434 struct wlan_lmac_if_fd_tx_ops { 435 QDF_STATUS (*fd_vdev_config_fils)(struct wlan_objmgr_vdev *vdev, 436 uint32_t fd_period); 437 void (*fd_register_event_handler)(struct wlan_objmgr_psoc *psoc); 438 void (*fd_unregister_event_handler)(struct wlan_objmgr_psoc *psoc); 439 }; 440 #endif 441 442 #ifdef WLAN_SA_API_ENABLE 443 444 /** 445 * struct wlan_lmac_if_sa_api_tx_ops - SA API specific tx function pointers 446 */ 447 448 struct wlan_lmac_if_sa_api_tx_ops { 449 void (*sa_api_register_event_handler)(struct wlan_objmgr_psoc *psoc); 450 void (*sa_api_unregister_event_handler)(struct wlan_objmgr_psoc *posc); 451 void (*sa_api_enable_sa) (struct wlan_objmgr_pdev *pdev, 452 uint32_t enable, uint32_t mode, uint32_t rx_antenna); 453 void (*sa_api_set_rx_antenna) (struct wlan_objmgr_pdev *pdev, 454 uint32_t antenna); 455 void (*sa_api_set_tx_antenna) (struct wlan_objmgr_peer *peer, 456 uint32_t *antenna_array); 457 void (*sa_api_set_tx_default_antenna) (struct wlan_objmgr_pdev *pdev, 458 u_int32_t antenna); 459 void (*sa_api_set_training_info) (struct wlan_objmgr_peer *peer, 460 uint32_t *rate_array, 461 uint32_t *antenna_array, 462 uint32_t numpkts); 463 void (*sa_api_prepare_rateset)(struct wlan_objmgr_pdev *pdev, 464 struct wlan_objmgr_peer *peer, 465 struct sa_rate_info *rate_info); 466 void (*sa_api_set_node_config_ops) (struct wlan_objmgr_peer *peer, 467 uint32_t cmd_id, uint16_t args_count, 468 u_int32_t args_arr[]); 469 }; 470 471 #endif 472 473 #ifdef WLAN_CFR_ENABLE 474 /** 475 * struct wlan_lmac_if_cfr_tx_ops - CFR specific tx function pointers 476 * @cfr_init_pdev: Initialize CFR 477 * @cfr_deinit_pdev: De-initialize CFR 478 * @cfr_enable_cfr_timer: Function to enable CFR timer 479 * @cfr_start_capture: Function to start CFR capture 480 * @cfr_stop_capture: Function to stop CFR capture 481 */ 482 struct wlan_lmac_if_cfr_tx_ops { 483 int (*cfr_init_pdev)(struct wlan_objmgr_psoc *psoc, 484 struct wlan_objmgr_pdev *pdev); 485 int (*cfr_deinit_pdev)(struct wlan_objmgr_psoc *psoc, 486 struct wlan_objmgr_pdev *pdev); 487 int (*cfr_enable_cfr_timer)(struct wlan_objmgr_pdev *pdev, 488 uint32_t cfr_timer); 489 int (*cfr_start_capture)(struct wlan_objmgr_pdev *pdev, 490 struct wlan_objmgr_peer *peer, 491 struct cfr_capture_params *params); 492 int (*cfr_stop_capture)(struct wlan_objmgr_pdev *pdev, 493 struct wlan_objmgr_peer *peer); 494 }; 495 #endif /* WLAN_CFR_ENABLE */ 496 497 #ifdef WLAN_CONV_SPECTRAL_ENABLE 498 struct wmi_spectral_cmd_ops; 499 /** 500 * struct wlan_lmac_if_sptrl_tx_ops - Spectral south bound Tx operations 501 * @sptrlto_spectral_init: Initialize LMAC/target_if Spectral 502 * @sptrlto_spectral_deinit: De-initialize LMAC/target_if Spectral 503 * @sptrlto_set_spectral_config: Set Spectral configuration 504 * @sptrlto_get_spectral_config: Get Spectral configuration 505 * @sptrlto_start_spectral_scan: Start Spectral Scan 506 * @sptrlto_stop_spectral_scan: Stop Spectral Scan 507 * @sptrlto_is_spectral_active: Get whether Spectral is active 508 * @sptrlto_is_spectral_enabled: Get whether Spectral is enabled 509 * @sptrlto_set_icm_active: Set whether ICM is active or inactive 510 * @sptrlto_get_icm_active: Get whether ICM is active or inactive 511 * @sptrlto_get_nominal_nf: Get Nominal Noise Floor for the current 512 * frequency band 513 * @sptrlto_set_debug_level: Set Spectral debug level 514 * @sptrlto_get_debug_level: Get Spectral debug level 515 * @sptrlto_get_chaninfo: Get channel information 516 * @sptrlto_clear_chaninfo: Clear channel information 517 * @sptrlto_get_spectral_capinfo: Get Spectral capability information 518 * @sptrlto_get_spectral_diagstats: Get Spectral diagnostic statistics 519 * @sptrlto_register_netlink_cb: Register Spectral Netlink callbacks 520 * @sptrlto_use_nl_bcast: Get whether to use Netlink broadcast/unicast 521 * @sptrlto_deregister_netlink_cb: De-register Spectral Netlink callbacks 522 * @sptrlto_process_spectral_report: Process spectral report 523 **/ 524 struct wlan_lmac_if_sptrl_tx_ops { 525 void *(*sptrlto_pdev_spectral_init)(struct wlan_objmgr_pdev *pdev); 526 void (*sptrlto_pdev_spectral_deinit)(struct wlan_objmgr_pdev *pdev); 527 int (*sptrlto_set_spectral_config)(struct wlan_objmgr_pdev *pdev, 528 const u_int32_t threshtype, 529 const u_int32_t value); 530 void (*sptrlto_get_spectral_config)(struct wlan_objmgr_pdev *pdev, 531 struct spectral_config *sptrl_config 532 ); 533 int (*sptrlto_start_spectral_scan)(struct wlan_objmgr_pdev *pdev); 534 void (*sptrlto_stop_spectral_scan)(struct wlan_objmgr_pdev *pdev); 535 bool (*sptrlto_is_spectral_active)(struct wlan_objmgr_pdev *pdev); 536 bool (*sptrlto_is_spectral_enabled)(struct wlan_objmgr_pdev *pdev); 537 int (*sptrlto_set_debug_level)(struct wlan_objmgr_pdev *pdev, 538 u_int32_t debug_level); 539 u_int32_t (*sptrlto_get_debug_level)(struct wlan_objmgr_pdev *pdev); 540 void (*sptrlto_get_spectral_capinfo)(struct wlan_objmgr_pdev *pdev, 541 void *outdata); 542 void (*sptrlto_get_spectral_diagstats)(struct wlan_objmgr_pdev *pdev, 543 void *outdata); 544 void (*sptrlto_register_wmi_spectral_cmd_ops)( 545 struct wlan_objmgr_pdev *pdev, 546 struct wmi_spectral_cmd_ops *cmd_ops); 547 void (*sptrlto_register_netlink_cb)( 548 struct wlan_objmgr_pdev *pdev, 549 struct spectral_nl_cb *nl_cb); 550 bool (*sptrlto_use_nl_bcast)(struct wlan_objmgr_pdev *pdev); 551 void (*sptrlto_deregister_netlink_cb)(struct wlan_objmgr_pdev *pdev); 552 int (*sptrlto_process_spectral_report)( 553 struct wlan_objmgr_pdev *pdev, 554 void *payload); 555 }; 556 #endif /* WLAN_CONV_SPECTRAL_ENABLE */ 557 558 #ifdef WIFI_POS_CONVERGED 559 /* 560 * struct wlan_lmac_if_wifi_pos_tx_ops - structure of firmware tx function 561 * pointers for wifi_pos component 562 * @data_req_tx: function pointer to send wifi_pos req to firmware 563 */ 564 struct wlan_lmac_if_wifi_pos_tx_ops { 565 QDF_STATUS (*data_req_tx)(struct wlan_objmgr_psoc *psoc, 566 struct oem_data_req *req); 567 }; 568 #endif 569 570 #ifdef DIRECT_BUF_RX_ENABLE 571 /** 572 * struct wlan_lmac_if_direct_buf_rx_tx_ops - structire of direct buf rx txops 573 * @direct_buf_rx_module_register: Registration API callback for modules 574 * to register with direct buf rx framework 575 * @direct_buf_rx_module_unregister: Unregistration API to clean up module 576 * specific resources in DBR 577 * @direct_buf_rx_register_events: Registration of WMI events for direct 578 * buffer rx framework 579 * @direct_buf_rx_unregister_events: Unregistraton of WMI events for direct 580 * buffer rx framework 581 * @direct_buf_rx_print_ring_stat: Print ring status per module per pdev 582 * 583 * @direct_buf_rx_get_ring_params: Get ring parameters for module_id 584 */ 585 struct wlan_lmac_if_direct_buf_rx_tx_ops { 586 QDF_STATUS (*direct_buf_rx_module_register)( 587 struct wlan_objmgr_pdev *pdev, uint8_t mod_id, 588 int (*dbr_rsp_handler)(struct wlan_objmgr_pdev *pdev, 589 struct direct_buf_rx_data *dbr_data)); 590 QDF_STATUS (*direct_buf_rx_module_unregister)( 591 struct wlan_objmgr_pdev *pdev, uint8_t mod_id); 592 QDF_STATUS (*direct_buf_rx_register_events)( 593 struct wlan_objmgr_psoc *psoc); 594 QDF_STATUS (*direct_buf_rx_unregister_events)( 595 struct wlan_objmgr_psoc *psoc); 596 QDF_STATUS (*direct_buf_rx_print_ring_stat)( 597 struct wlan_objmgr_pdev *pdev); 598 QDF_STATUS (*direct_buf_rx_get_ring_params) 599 (struct wlan_objmgr_pdev *pdev, 600 struct module_ring_params *param, 601 int module_id); 602 }; 603 #endif 604 605 #ifdef FEATURE_WLAN_TDLS 606 /* fwd declarations for tdls tx ops */ 607 struct tdls_info; 608 struct tdls_peer_update_state; 609 struct tdls_channel_switch_params; 610 struct sta_uapsd_trig_params; 611 /** 612 * struct wlan_lmac_if_tdls_tx_ops - south bound tx function pointers for tdls 613 * @update_fw_state: function to update tdls firmware state 614 * @update_peer_state: function to update tdls peer state 615 * @set_offchan_mode: function to set tdls offchannel mode 616 * @tdls_reg_ev_handler: function to register for tdls events 617 * @tdls_unreg_ev_handler: function to unregister for tdls events 618 * @tdls_set_uapsd: function to set upasdt trigger command 619 * 620 * tdls module uses these functions to avail ol/da lmac services 621 */ 622 struct wlan_lmac_if_tdls_tx_ops { 623 QDF_STATUS (*update_fw_state)(struct wlan_objmgr_psoc *psoc, 624 struct tdls_info *req); 625 QDF_STATUS (*update_peer_state)(struct wlan_objmgr_psoc *psoc, 626 struct tdls_peer_update_state *param); 627 QDF_STATUS (*set_offchan_mode)(struct wlan_objmgr_psoc *psoc, 628 struct tdls_channel_switch_params *param); 629 QDF_STATUS (*tdls_reg_ev_handler)(struct wlan_objmgr_psoc *psoc, 630 void *arg); 631 QDF_STATUS (*tdls_unreg_ev_handler) (struct wlan_objmgr_psoc *psoc, 632 void *arg); 633 QDF_STATUS (*tdls_set_uapsd)(struct wlan_objmgr_psoc *psoc, 634 struct sta_uapsd_trig_params *params); 635 }; 636 637 /* fwd declarations for tdls rx ops */ 638 struct tdls_event_info; 639 /** 640 * struct wlan_lmac_if_tdls_rx_ops - south bound rx function pointers for tdls 641 * @tdls_ev_handler: function to handler tdls event 642 * 643 * lmac modules uses this API to post scan events to tdls module 644 */ 645 struct wlan_lmac_if_tdls_rx_ops { 646 QDF_STATUS (*tdls_ev_handler)(struct wlan_objmgr_psoc *psoc, 647 struct tdls_event_info *info); 648 }; 649 #endif 650 651 /** 652 * struct wlan_lmac_if_ftm_rx_ops - south bound rx function pointers for FTM 653 * @ftm_ev_handler: function to handle FTM event 654 * 655 * lmac modules uses this API to post FTM events to FTM module 656 */ 657 struct wlan_lmac_if_ftm_rx_ops { 658 QDF_STATUS (*ftm_ev_handler)(struct wlan_objmgr_pdev *pdev, 659 uint8_t *event_buf, uint32_t len); 660 }; 661 662 /** 663 * struct wlan_lmac_reg_if_tx_ops - structure of tx function 664 * pointers for regulatory component 665 * @register_master_handler: pointer to register event handler 666 * @unregister_master_handler: pointer to unregister event handler 667 * @register_11d_new_cc_handler: pointer to register 11d cc event handler 668 * @unregister_11d_new_cc_handler: pointer to unregister 11d cc event handler 669 */ 670 struct wlan_lmac_if_reg_tx_ops { 671 QDF_STATUS (*register_master_handler)(struct wlan_objmgr_psoc *psoc, 672 void *arg); 673 QDF_STATUS (*unregister_master_handler)(struct wlan_objmgr_psoc *psoc, 674 void *arg); 675 676 QDF_STATUS (*set_country_code)(struct wlan_objmgr_psoc *psoc, 677 void *arg); 678 QDF_STATUS (*fill_umac_legacy_chanlist)(struct wlan_objmgr_pdev *pdev, 679 struct regulatory_channel *cur_chan_list); 680 QDF_STATUS (*register_11d_new_cc_handler)( 681 struct wlan_objmgr_psoc *psoc, void *arg); 682 QDF_STATUS (*unregister_11d_new_cc_handler)( 683 struct wlan_objmgr_psoc *psoc, void *arg); 684 QDF_STATUS (*start_11d_scan)(struct wlan_objmgr_psoc *psoc, 685 struct reg_start_11d_scan_req *reg_start_11d_scan_req); 686 QDF_STATUS (*stop_11d_scan)(struct wlan_objmgr_psoc *psoc, 687 struct reg_stop_11d_scan_req *reg_stop_11d_scan_req); 688 bool (*is_there_serv_ready_extn)(struct wlan_objmgr_psoc *psoc); 689 QDF_STATUS (*set_user_country_code)(struct wlan_objmgr_psoc *psoc, 690 uint8_t pdev_id, 691 struct cc_regdmn_s *rd); 692 QDF_STATUS (*set_country_failed)(struct wlan_objmgr_pdev *pdev); 693 QDF_STATUS (*register_ch_avoid_event_handler)( 694 struct wlan_objmgr_psoc *psoc, void *arg); 695 QDF_STATUS (*unregister_ch_avoid_event_handler)( 696 struct wlan_objmgr_psoc *psoc, void *arg); 697 }; 698 699 /** 700 * struct wlan_lmac_if_dfs_tx_ops - Function pointer to call offload/lmac 701 * functions from DFS module. 702 * @dfs_enable: Enable DFS. 703 * @dfs_get_caps: Get DFS capabilities. 704 * @dfs_disable: Disable DFS 705 * @dfs_gettsf64: Get tsf64 value. 706 * @dfs_set_use_cac_prssi: Set use_cac_prssi value. 707 * @dfs_get_dfsdomain: Get DFS domain. 708 * @dfs_is_countryCode_CHINA: Check is country code CHINA. 709 * @dfs_get_thresholds: Get thresholds. 710 * @dfs_get_ext_busy: Get ext_busy. 711 * @dfs_get_target_type: Get target type. 712 * @dfs_is_countryCode_KOREA_ROC3: Check is county code Korea. 713 * @dfs_get_ah_devid: Get ah devid. 714 * @dfs_get_phymode_info: Get phymode info. 715 * @dfs_reg_ev_handler: Register dfs event handler. 716 * @dfs_process_emulate_bang_radar_cmd: Process emulate bang radar test command. 717 * @dfs_is_pdev_5ghz: Check if the given pdev is 5GHz. 718 * @dfs_set_phyerr_filter_offload: Config phyerr filter offload. 719 * @dfs_send_offload_enable_cmd: Send dfs offload enable command to fw. 720 * @dfs_host_dfs_check_support: To check Host DFS confirmation feature 721 * support. 722 * @dfs_send_avg_radar_params_to_fw: Send average radar parameters to FW. 723 * @dfs_send_usenol_pdev_param: Send usenol pdev param to FW. 724 * @dfs_send_subchan_marking_pdev_param: Send subchan marking pdev param to FW. 725 */ 726 727 struct wlan_lmac_if_dfs_tx_ops { 728 QDF_STATUS (*dfs_enable)(struct wlan_objmgr_pdev *pdev, 729 int *is_fastclk, 730 struct wlan_dfs_phyerr_param *param, 731 uint32_t dfsdomain); 732 QDF_STATUS (*dfs_get_caps)(struct wlan_objmgr_pdev *pdev, 733 struct wlan_dfs_caps *dfs_caps); 734 QDF_STATUS (*dfs_disable)(struct wlan_objmgr_pdev *pdev, 735 int no_cac); 736 QDF_STATUS (*dfs_gettsf64)(struct wlan_objmgr_pdev *pdev, 737 uint64_t *tsf64); 738 QDF_STATUS (*dfs_set_use_cac_prssi)(struct wlan_objmgr_pdev *pdev); 739 QDF_STATUS (*dfs_get_thresholds)(struct wlan_objmgr_pdev *pdev, 740 struct wlan_dfs_phyerr_param *param); 741 QDF_STATUS (*dfs_get_ext_busy)(struct wlan_objmgr_pdev *pdev, 742 int *dfs_ext_chan_busy); 743 QDF_STATUS (*dfs_get_target_type)(struct wlan_objmgr_pdev *pdev, 744 uint32_t *target_type); 745 QDF_STATUS (*dfs_get_ah_devid)(struct wlan_objmgr_pdev *pdev, 746 uint16_t *devid); 747 QDF_STATUS (*dfs_get_phymode_info)(struct wlan_objmgr_pdev *pdev, 748 uint32_t chan_mode, 749 uint32_t *mode_info, 750 bool is_2gvht_en); 751 QDF_STATUS (*dfs_reg_ev_handler)(struct wlan_objmgr_psoc *psoc); 752 QDF_STATUS (*dfs_process_emulate_bang_radar_cmd)( 753 struct wlan_objmgr_pdev *pdev, 754 struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test); 755 QDF_STATUS (*dfs_is_pdev_5ghz)(struct wlan_objmgr_pdev *pdev, 756 bool *is_5ghz); 757 QDF_STATUS (*dfs_set_phyerr_filter_offload)( 758 struct wlan_objmgr_pdev *pdev, 759 bool dfs_phyerr_filter_offload); 760 bool (*dfs_is_tgt_offload)(struct wlan_objmgr_psoc *psoc); 761 QDF_STATUS (*dfs_send_offload_enable_cmd)( 762 struct wlan_objmgr_pdev *pdev, 763 bool enable); 764 QDF_STATUS (*dfs_host_dfs_check_support)(struct wlan_objmgr_pdev *pdev, 765 bool *enabled); 766 QDF_STATUS (*dfs_send_avg_radar_params_to_fw)( 767 struct wlan_objmgr_pdev *pdev, 768 struct dfs_radar_found_params *params); 769 QDF_STATUS (*dfs_send_usenol_pdev_param)(struct wlan_objmgr_pdev *pdev, 770 bool usenol); 771 QDF_STATUS (*dfs_send_subchan_marking_pdev_param)( 772 struct wlan_objmgr_pdev *pdev, 773 bool subchanmark); 774 }; 775 776 /** 777 * struct wlan_lmac_if_target_tx_ops - Function pointers to call target 778 * functions from other modules. 779 * @tgt_is_tgt_type_ar900b: To check AR900B target type. 780 * @tgt_is_tgt_type_ipq4019: To check IPQ4019 target type. 781 * @tgt_is_tgt_type_qca9984: To check QCA9984 target type. 782 * @tgt_is_tgt_type_qca9888: To check QCA9888 target type. 783 * @tgt_get_tgt_type: Get target type 784 * @tgt_get_tgt_version: Get target version 785 * @tgt_get_tgt_revision: Get target revision 786 */ 787 struct wlan_lmac_if_target_tx_ops { 788 bool (*tgt_is_tgt_type_ar900b)(uint32_t); 789 bool (*tgt_is_tgt_type_ipq4019)(uint32_t); 790 bool (*tgt_is_tgt_type_qca9984)(uint32_t); 791 bool (*tgt_is_tgt_type_qca9888)(uint32_t); 792 uint32_t (*tgt_get_tgt_type)(struct wlan_objmgr_psoc *psoc); 793 uint32_t (*tgt_get_tgt_version)(struct wlan_objmgr_psoc *psoc); 794 uint32_t (*tgt_get_tgt_revision)(struct wlan_objmgr_psoc *psoc); 795 }; 796 797 #ifdef WLAN_OFFCHAN_TXRX_ENABLE 798 /** 799 * struct wlan_lmac_if_offchan_txrx_ops - Function pointers to check target 800 * capabilities related to offchan txrx. 801 * @offchan_data_tid_support: To check if target supports separate tid for 802 * offchan data tx. 803 */ 804 struct wlan_lmac_if_offchan_txrx_ops { 805 bool (*offchan_data_tid_support)(struct wlan_objmgr_pdev *pdev); 806 }; 807 #endif 808 809 #ifdef WLAN_SUPPORT_GREEN_AP 810 struct wlan_green_ap_egap_params; 811 /** 812 * struct wlan_lmac_if_green_ap_tx_ops - structure of tx function 813 * pointers for green ap component 814 * @enable_egap: function pointer to send enable egap indication to fw 815 * @ps_on_off_send: function pointer to send enable/disable green ap ps to fw 816 */ 817 struct wlan_lmac_if_green_ap_tx_ops { 818 QDF_STATUS (*enable_egap)(struct wlan_objmgr_pdev *pdev, 819 struct wlan_green_ap_egap_params *egap_params); 820 QDF_STATUS (*ps_on_off_send)(struct wlan_objmgr_pdev *pdev, 821 bool value, uint8_t pdev_id); 822 QDF_STATUS (*reset_dev)(struct wlan_objmgr_pdev *pdev); 823 uint16_t (*get_current_channel)(struct wlan_objmgr_pdev *pdev); 824 uint64_t (*get_current_channel_flags)(struct wlan_objmgr_pdev *pdev); 825 QDF_STATUS (*get_capab)(struct wlan_objmgr_pdev *pdev); 826 }; 827 #endif 828 829 /** 830 * struct wlan_lmac_if_tx_ops - south bound tx function pointers 831 * @mgmt_txrx_tx_ops: mgmt txrx tx ops 832 * @scan: scan tx ops 833 * @dfs_tx_ops: dfs tx ops. 834 * @green_ap_tx_ops: green_ap tx_ops 835 * @cp_stats_tx_ops: cp stats tx_ops 836 * 837 * Callback function tabled to be registered with umac. 838 * umac will use the functional table to send events/frames to lmac/wmi 839 */ 840 841 struct wlan_lmac_if_tx_ops { 842 /* Components to declare function pointers required by the module 843 * in component specific structure. 844 * The component specific ops structure can be declared in this file 845 * only 846 */ 847 struct wlan_lmac_if_mgmt_txrx_tx_ops mgmt_txrx_tx_ops; 848 struct wlan_lmac_if_scan_tx_ops scan; 849 #ifdef CONVERGED_P2P_ENABLE 850 struct wlan_lmac_if_p2p_tx_ops p2p; 851 #endif 852 #ifdef QCA_SUPPORT_SON 853 struct wlan_lmac_if_son_tx_ops son_tx_ops; 854 #endif 855 856 #ifdef WLAN_ATF_ENABLE 857 struct wlan_lmac_if_atf_tx_ops atf_tx_ops; 858 #endif 859 #ifdef QCA_SUPPORT_CP_STATS 860 struct wlan_lmac_if_cp_stats_tx_ops cp_stats_tx_ops; 861 #endif 862 #ifdef WLAN_SA_API_ENABLE 863 struct wlan_lmac_if_sa_api_tx_ops sa_api_tx_ops; 864 #endif 865 866 #ifdef WLAN_CFR_ENABLE 867 struct wlan_lmac_if_cfr_tx_ops cfr_tx_ops; 868 #endif 869 870 #ifdef WLAN_CONV_SPECTRAL_ENABLE 871 struct wlan_lmac_if_sptrl_tx_ops sptrl_tx_ops; 872 #endif 873 874 #ifdef WLAN_CONV_CRYPTO_SUPPORTED 875 struct wlan_lmac_if_crypto_tx_ops crypto_tx_ops; 876 #endif 877 878 #ifdef WIFI_POS_CONVERGED 879 struct wlan_lmac_if_wifi_pos_tx_ops wifi_pos_tx_ops; 880 #endif 881 struct wlan_lmac_if_reg_tx_ops reg_ops; 882 struct wlan_lmac_if_dfs_tx_ops dfs_tx_ops; 883 884 #ifdef FEATURE_WLAN_TDLS 885 struct wlan_lmac_if_tdls_tx_ops tdls_tx_ops; 886 #endif 887 888 #ifdef WLAN_SUPPORT_FILS 889 struct wlan_lmac_if_fd_tx_ops fd_tx_ops; 890 #endif 891 struct wlan_lmac_if_mlme_tx_ops mops; 892 struct wlan_lmac_if_target_tx_ops target_tx_ops; 893 894 #ifdef WLAN_OFFCHAN_TXRX_ENABLE 895 struct wlan_lmac_if_offchan_txrx_ops offchan_txrx_ops; 896 #endif 897 898 #ifdef DIRECT_BUF_RX_ENABLE 899 struct wlan_lmac_if_direct_buf_rx_tx_ops dbr_tx_ops; 900 #endif 901 902 #ifdef WLAN_SUPPORT_GREEN_AP 903 struct wlan_lmac_if_green_ap_tx_ops green_ap_tx_ops; 904 #endif 905 906 struct wlan_lmac_if_ftm_tx_ops ftm_tx_ops; 907 }; 908 909 /** 910 * struct wlan_lmac_if_mgmt_txrx_rx_ops - structure of rx function 911 * pointers for mgmt txrx component 912 * @mgmt_tx_completion_handler: function pointer to give tx completions 913 * to mgmt txrx comp. 914 * @mgmt_rx_frame_handler: function pointer to give rx frame to mgmt txrx comp. 915 * @mgmt_txrx_get_nbuf_from_desc_id: function pointer to get nbuf from desc id 916 * @mgmt_txrx_get_peer_from_desc_id: function pointer to get peer from desc id 917 * @mgmt_txrx_get_vdev_id_from_desc_id: function pointer to get vdev id from 918 * desc id 919 */ 920 struct wlan_lmac_if_mgmt_txrx_rx_ops { 921 QDF_STATUS (*mgmt_tx_completion_handler)( 922 struct wlan_objmgr_pdev *pdev, 923 uint32_t desc_id, uint32_t status, 924 void *tx_compl_params); 925 QDF_STATUS (*mgmt_rx_frame_handler)( 926 struct wlan_objmgr_psoc *psoc, 927 qdf_nbuf_t buf, 928 struct mgmt_rx_event_params *mgmt_rx_params); 929 qdf_nbuf_t (*mgmt_txrx_get_nbuf_from_desc_id)( 930 struct wlan_objmgr_pdev *pdev, 931 uint32_t desc_id); 932 struct wlan_objmgr_peer * (*mgmt_txrx_get_peer_from_desc_id)( 933 struct wlan_objmgr_pdev *pdev, uint32_t desc_id); 934 uint8_t (*mgmt_txrx_get_vdev_id_from_desc_id)( 935 struct wlan_objmgr_pdev *pdev, 936 uint32_t desc_id); 937 uint32_t (*mgmt_txrx_get_free_desc_pool_count)( 938 struct wlan_objmgr_pdev *pdev); 939 }; 940 941 struct wlan_lmac_if_reg_rx_ops { 942 QDF_STATUS (*master_list_handler)(struct cur_regulatory_info 943 *reg_info); 944 QDF_STATUS (*reg_11d_new_cc_handler)(struct wlan_objmgr_psoc *psoc, 945 struct reg_11d_new_country *reg_11d_new_cc); 946 QDF_STATUS (*reg_set_regdb_offloaded)(struct wlan_objmgr_psoc *psoc, 947 bool val); 948 QDF_STATUS (*reg_set_11d_offloaded)(struct wlan_objmgr_psoc *psoc, 949 bool val); 950 QDF_STATUS (*get_dfs_region)(struct wlan_objmgr_pdev *pdev, 951 enum dfs_reg *dfs_reg); 952 QDF_STATUS (*reg_ch_avoid_event_handler)(struct wlan_objmgr_psoc *psoc, 953 struct ch_avoid_ind_type *ch_avoid_ind); 954 uint32_t (*reg_freq_to_chan)(struct wlan_objmgr_pdev *pdev, 955 uint32_t freq); 956 QDF_STATUS (*reg_set_chan_144)(struct wlan_objmgr_pdev *pdev, 957 bool enable_ch_144); 958 bool (*reg_get_chan_144)(struct wlan_objmgr_pdev *pdev); 959 QDF_STATUS (*reg_program_default_cc)(struct wlan_objmgr_pdev *pdev, 960 uint16_t regdmn); 961 QDF_STATUS (*reg_get_current_regdomain)(struct wlan_objmgr_pdev *pdev, 962 struct cur_regdmn_info *cur_regdmn); 963 }; 964 965 #ifdef CONVERGED_P2P_ENABLE 966 967 /* forward declarations for p2p rx ops */ 968 struct p2p_noa_info; 969 struct p2p_lo_event; 970 struct p2p_set_mac_filter_evt; 971 972 /** 973 * struct wlan_lmac_if_p2p_rx_ops - structure of rx function pointers 974 * for P2P component 975 * @lo_ev_handler: function pointer to give listen offload event 976 * @noa_ev_handler: function pointer to give noa event 977 * @add_mac_addr_filter_evt_handler: function pointer to process add mac addr 978 * rx filter event 979 */ 980 struct wlan_lmac_if_p2p_rx_ops { 981 #ifdef FEATURE_P2P_LISTEN_OFFLOAD 982 QDF_STATUS (*lo_ev_handler)(struct wlan_objmgr_psoc *psoc, 983 struct p2p_lo_event *event_info); 984 #endif 985 QDF_STATUS (*noa_ev_handler)(struct wlan_objmgr_psoc *psoc, 986 struct p2p_noa_info *event_info); 987 QDF_STATUS (*add_mac_addr_filter_evt_handler)( 988 struct wlan_objmgr_psoc *psoc, 989 struct p2p_set_mac_filter_evt *event_info); 990 991 }; 992 #endif 993 994 #ifdef WLAN_ATF_ENABLE 995 996 /** 997 * struct wlan_lmac_if_atf_rx_ops - ATF south bound rx function pointers 998 * @atf_get_atf_commit: Get ATF commit state 999 * @atf_get_fmcap: Get firmware capability for ATF 1000 * @atf_get_obss_scale: Get OBSS scale 1001 * @atf_get_mode: Get mode of ATF 1002 * @atf_get_msdu_desc: Get msdu desc for ATF 1003 * @atf_get_max_vdevs: Get maximum vdevs for a Radio 1004 * @atf_get_peers: Get number of peers for a radio 1005 * @atf_get_tput_based: Get throughput based enabled/disabled 1006 * @atf_get_logging: Get logging enabled/disabled 1007 * @atf_update_buf_held: Set Num buf held by subgroup 1008 * @atf_get_ssidgroup: Get ssid group state 1009 * @atf_get_vdev_ac_blk_cnt: Get AC block count for vdev 1010 * @atf_get_peer_blk_txbitmap: Get peer tx traffic AC bitmap 1011 * @atf_get_vdev_blk_txtraffic: Get vdev tx traffic block state 1012 * @atf_get_sched: Get ATF scheduled policy 1013 * @atf_get_tx_tokens: Get Tx tokens 1014 * @atf_buf_distribute: Distribute Buffers 1015 * @atf_get_tx_tokens_common: Get common tx tokens 1016 * @atf_get_shadow_alloted_tx_tokens: Get shadow alloted tx tokens 1017 * @atf_get_peer_stats: Get atf peer stats 1018 * @atf_adjust_subgroup_txtokens: Adjust tokens based on actual duration 1019 * @atf_account_subgroup_txtokens: Estimate tx time & update subgroup tokens 1020 * @atf_subgroup_free_buf: On tx completion, update num buf held 1021 * @atf_update_subgroup_tidstate: TID state (Paused/unpaused) of node 1022 * @atf_get_subgroup_airtime: Get subgroup airtime 1023 * @atf_get_token_allocated: Get atf token allocated 1024 * @atf_get_token_utilized: Get atf token utilized 1025 * @atf_set_sched: Set ATF schedule policy 1026 * @atf_set_fmcap: Set firmware capability for ATF 1027 * @atf_set_obss_scale: Set ATF obss scale 1028 * @atf_set_msdu_desc: Set msdu desc 1029 * @atf_set_max_vdevs: Set maximum vdevs number 1030 * @atf_set_peers: Set peers number 1031 * @atf_set_peer_stats: Set peer stats 1032 * @atf_set_vdev_blk_txtraffic: Set Block/unblock vdev tx traffic 1033 * @atf_peer_blk_txtraffic: Block peer tx traffic 1034 * @atf_peer_unblk_txtraffic: Unblock peer tx traffic 1035 * @atf_set_token_allocated: Set atf token allocated 1036 * @atf_set_token_utilized: Set atf token utilized 1037 */ 1038 struct wlan_lmac_if_atf_rx_ops { 1039 uint8_t (*atf_get_atf_commit)(struct wlan_objmgr_pdev *pdev); 1040 uint32_t (*atf_get_fmcap)(struct wlan_objmgr_psoc *psoc); 1041 uint32_t (*atf_get_obss_scale)(struct wlan_objmgr_pdev *pdev); 1042 uint32_t (*atf_get_mode)(struct wlan_objmgr_psoc *psoc); 1043 uint32_t (*atf_get_msdu_desc)(struct wlan_objmgr_psoc *psoc); 1044 uint32_t (*atf_get_max_vdevs)(struct wlan_objmgr_psoc *psoc); 1045 uint32_t (*atf_get_peers)(struct wlan_objmgr_psoc *psoc); 1046 uint32_t (*atf_get_tput_based)(struct wlan_objmgr_pdev *pdev); 1047 uint32_t (*atf_get_logging)(struct wlan_objmgr_pdev *pdev); 1048 void* (*atf_update_buf_held)(struct wlan_objmgr_peer *peer, 1049 int8_t ac); 1050 uint32_t (*atf_get_ssidgroup)(struct wlan_objmgr_pdev *pdev); 1051 uint32_t (*atf_get_vdev_ac_blk_cnt)(struct wlan_objmgr_vdev *vdev); 1052 uint8_t (*atf_get_peer_blk_txbitmap)(struct wlan_objmgr_peer *peer); 1053 uint8_t (*atf_get_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev); 1054 uint32_t (*atf_get_sched)(struct wlan_objmgr_pdev *pdev); 1055 uint32_t (*atf_get_tx_tokens)(struct wlan_objmgr_peer *peer); 1056 uint32_t (*atf_buf_distribute)(struct wlan_objmgr_pdev *pdev, 1057 struct wlan_objmgr_peer *peer, 1058 int8_t ac); 1059 uint32_t (*atf_get_txtokens_common)(struct wlan_objmgr_pdev *pdev); 1060 uint32_t (*atf_get_shadow_alloted_tx_tokens)( 1061 struct wlan_objmgr_pdev *pdev); 1062 void (*atf_get_peer_stats)(struct wlan_objmgr_peer *peer, 1063 struct atf_stats *stats); 1064 QDF_STATUS 1065 (*atf_adjust_subgroup_txtokens)(struct wlan_objmgr_peer *pr, 1066 uint8_t ac, uint32_t actual_duration, 1067 uint32_t est_duration); 1068 QDF_STATUS 1069 (*atf_account_subgroup_txtokens)(struct wlan_objmgr_peer *pr, 1070 uint8_t ac, 1071 uint32_t duration); 1072 QDF_STATUS 1073 (*atf_subgroup_free_buf)(uint16_t buf_acc_size, void *bf_atf_sg); 1074 QDF_STATUS 1075 (*atf_update_subgroup_tidstate)(struct wlan_objmgr_peer *peer, 1076 uint8_t atf_nodepaused); 1077 uint8_t (*atf_get_subgroup_airtime)(struct wlan_objmgr_peer *peer, 1078 uint8_t ac); 1079 uint16_t (*atf_get_token_allocated)(struct wlan_objmgr_peer *peer); 1080 uint16_t (*atf_get_token_utilized)(struct wlan_objmgr_peer *peer); 1081 void (*atf_set_sched)(struct wlan_objmgr_pdev *pdev, uint32_t value); 1082 void (*atf_set_fmcap)(struct wlan_objmgr_psoc *psoc, uint32_t value); 1083 void (*atf_set_obss_scale)(struct wlan_objmgr_pdev *pdev, 1084 uint32_t value); 1085 void (*atf_set_msdu_desc)(struct wlan_objmgr_psoc *psoc, 1086 uint32_t value); 1087 void (*atf_set_max_vdevs)(struct wlan_objmgr_psoc *psoc, 1088 uint32_t value); 1089 void (*atf_set_peers)(struct wlan_objmgr_psoc *psoc, uint32_t value); 1090 void (*atf_set_peer_stats)(struct wlan_objmgr_peer *peer, 1091 struct atf_stats *stats); 1092 void (*atf_set_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev, 1093 uint8_t value); 1094 void (*atf_peer_blk_txtraffic)(struct wlan_objmgr_peer *peer, 1095 int8_t ac_id); 1096 void (*atf_peer_unblk_txtraffic)(struct wlan_objmgr_peer *peer, 1097 int8_t ac_id); 1098 void (*atf_set_token_allocated)(struct wlan_objmgr_peer *peer, 1099 uint16_t value); 1100 void (*atf_set_token_utilized)(struct wlan_objmgr_peer *peer, 1101 uint16_t value); 1102 }; 1103 #endif 1104 1105 #ifdef WLAN_SUPPORT_FILS 1106 /** 1107 * struct wlan_lmac_if_fd_rx_ops - FILS Discovery specific Rx function pointers 1108 * @fd_is_fils_enable: FILS enabled or not 1109 * @fd_alloc: Allocate FD buffer 1110 * @fd_stop: Stop and free deferred FD buffer 1111 * @fd_free: Free FD frame buffer 1112 * @fd_get_valid_fd_period: Get valid FD period 1113 * @fd_swfda_handler: SWFDA event handler 1114 */ 1115 struct wlan_lmac_if_fd_rx_ops { 1116 uint8_t (*fd_is_fils_enable)(struct wlan_objmgr_vdev *vdev); 1117 void (*fd_alloc)(struct wlan_objmgr_vdev *vdev); 1118 void (*fd_stop)(struct wlan_objmgr_vdev *vdev); 1119 void (*fd_free)(struct wlan_objmgr_vdev *vdev); 1120 uint32_t (*fd_get_valid_fd_period)(struct wlan_objmgr_vdev *vdev, 1121 uint8_t *is_modified); 1122 QDF_STATUS (*fd_swfda_handler)(struct wlan_objmgr_vdev *vdev); 1123 }; 1124 #endif 1125 1126 #ifdef WLAN_SA_API_ENABLE 1127 1128 /** 1129 * struct wlan_lmac_if_sa_api_rx_ops - SA API south bound rx function pointers 1130 */ 1131 struct wlan_lmac_if_sa_api_rx_ops { 1132 uint32_t (*sa_api_get_sa_supported)(struct wlan_objmgr_psoc *psoc); 1133 uint32_t (*sa_api_get_validate_sw)(struct wlan_objmgr_psoc *psoc); 1134 void (*sa_api_enable_sa)(struct wlan_objmgr_psoc *psoc, uint32_t value); 1135 uint32_t (*sa_api_get_sa_enable)(struct wlan_objmgr_psoc *psoc); 1136 void (*sa_api_peer_assoc_hanldler)(struct wlan_objmgr_pdev *pdev, 1137 struct wlan_objmgr_peer *peer, struct sa_rate_cap *); 1138 uint32_t (*sa_api_update_tx_feedback)(struct wlan_objmgr_pdev *pdev, 1139 struct wlan_objmgr_peer *peer, 1140 struct sa_tx_feedback *feedback); 1141 uint32_t (*sa_api_update_rx_feedback)(struct wlan_objmgr_pdev *pdev, 1142 struct wlan_objmgr_peer *peer, 1143 struct sa_rx_feedback *feedback); 1144 uint32_t (*sa_api_ucfg_set_param)(struct wlan_objmgr_pdev *pdev, 1145 char *val); 1146 uint32_t (*sa_api_ucfg_get_param)(struct wlan_objmgr_pdev *pdev, 1147 char *val); 1148 uint32_t (*sa_api_is_tx_feedback_enabled) 1149 (struct wlan_objmgr_pdev *pdev); 1150 uint32_t (*sa_api_is_rx_feedback_enabled) 1151 (struct wlan_objmgr_pdev *pdev); 1152 uint32_t (*sa_api_convert_rate_2g)(uint32_t rate); 1153 uint32_t (*sa_api_convert_rate_5g)(uint32_t rate); 1154 uint32_t (*sa_api_get_sa_mode)(struct wlan_objmgr_pdev *pdev); 1155 uint32_t (*sa_api_get_beacon_txantenna)(struct wlan_objmgr_pdev *pdev); 1156 uint32_t (*sa_api_cwm_action)(struct wlan_objmgr_pdev *pdev); 1157 }; 1158 #endif 1159 1160 #ifdef WLAN_CFR_ENABLE 1161 1162 /** 1163 * struct wlan_lmac_if_cfr_rx_ops - CFR south bound rx function pointers 1164 * @cfr_support_set: Set the CFR support based on FW advert 1165 * @cfr_info_send: Send cfr info to upper layers 1166 */ 1167 struct wlan_lmac_if_cfr_rx_ops { 1168 void (*cfr_support_set)(struct wlan_objmgr_psoc *psoc, uint32_t value); 1169 uint32_t (*cfr_info_send)(struct wlan_objmgr_pdev *pdev, void *head, 1170 size_t hlen, void *data, size_t dlen, 1171 void *tail, size_t tlen); 1172 }; 1173 #endif 1174 1175 #ifdef WLAN_CONV_SPECTRAL_ENABLE 1176 /** 1177 * struct wlan_lmac_if_sptrl_rx_ops - Spectral south bound Rx operations 1178 * 1179 * @sptrlro_get_target_handle: Get Spectral handle for target/LMAC private data 1180 * @sptrlro_spectral_is_feature_disabled: Check if spectral feature is disabled 1181 */ 1182 struct wlan_lmac_if_sptrl_rx_ops { 1183 void * (*sptrlro_get_target_handle)(struct wlan_objmgr_pdev *pdev); 1184 int16_t (*sptrlro_vdev_get_chan_freq)(struct wlan_objmgr_vdev *vdev); 1185 enum phy_ch_width (*sptrlro_vdev_get_ch_width)( 1186 struct wlan_objmgr_vdev *vdev); 1187 int (*sptrlro_vdev_get_sec20chan_freq_mhz)( 1188 struct wlan_objmgr_vdev *vdev, 1189 uint16_t *sec20chan_freq); 1190 bool (*sptrlro_spectral_is_feature_disabled)( 1191 struct wlan_objmgr_psoc *psoc); 1192 }; 1193 #endif /* WLAN_CONV_SPECTRAL_ENABLE */ 1194 1195 #ifdef WIFI_POS_CONVERGED 1196 /** 1197 * struct wlan_lmac_if_wifi_pos_rx_ops - structure of rx function 1198 * pointers for wifi_pos component 1199 * @oem_rsp_event_rx: callback for WMI_OEM_RESPONSE_EVENTID 1200 */ 1201 struct wlan_lmac_if_wifi_pos_rx_ops { 1202 int (*oem_rsp_event_rx)(struct wlan_objmgr_psoc *psoc, 1203 struct oem_data_rsp *oem_rsp); 1204 }; 1205 #endif 1206 1207 /** 1208 * struct wlan_lmac_if_dfs_rx_ops - Function pointers to call dfs functions 1209 * from lmac/offload. 1210 * @dfs_get_radars: Calls init radar table functions. 1211 * @dfs_process_phyerr: Process phyerr. 1212 * @dfs_destroy_object: Destroys the DFS object. 1213 * @dfs_radar_enable: Enables the radar. 1214 * @dfs_is_radar_enabled: Check if the radar is enabled. 1215 * @dfs_control: Used to process ioctls related to DFS. 1216 * @dfs_is_precac_timer_running: Check whether precac timer is running. 1217 * @dfs_find_vht80_chan_for_precac: Find VHT80 channel for precac. 1218 * @dfs_cancel_precac_timer: Cancel the precac timer. 1219 * @dfs_override_precac_timeout: Override the default precac timeout. 1220 * @dfs_set_precac_enable: Set precac enable flag. 1221 * @dfs_get_precac_enable: Get precac enable flag. 1222 * @dfs_set_precac_intermediate_chan: Set intermediate channel for precac. 1223 * @dfs_get_precac_intermediate_chan: Get intermediate channel for precac. 1224 * @dfs_precac_preferred_chan: Configure preferred channel during 1225 * precac. 1226 * dfs_get_precac_chan_state: Get precac status for given channel. 1227 * dfs_start_precac_timer: Start precac timer. 1228 * @dfs_get_override_precac_timeout: Get precac timeout. 1229 * @dfs_set_current_channel: Set DFS current channel. 1230 * @dfs_process_radar_ind: Process radar found indication. 1231 * @dfs_dfs_cac_complete_ind: Process cac complete indication. 1232 * @dfs_stop: Clear dfs timers. 1233 * @dfs_enable_stadfs: Enable/Disable STADFS capability. 1234 * @dfs_is_stadfs_enabled: Get STADFS capability value. 1235 * @dfs_process_phyerr_filter_offload:Process radar event. 1236 * @dfs_is_phyerr_filter_offload: Check whether phyerr filter is offload. 1237 * @dfs_action_on_status: Trigger the action to be taken based on 1238 * on host dfs status received from fw. 1239 * @dfs_override_status_timeout: Override the value of host dfs status 1240 * wait timeout. 1241 * @dfs_get_override_status_timeout: Get the value of host dfs status wait 1242 * timeout. 1243 * @dfs_reset_spoof_test: Checks if radar detection is enabled. 1244 * @dfs_is_disable_radar_marking_set: Check if dis_radar_marking param is set. 1245 */ 1246 struct wlan_lmac_if_dfs_rx_ops { 1247 QDF_STATUS (*dfs_get_radars)(struct wlan_objmgr_pdev *pdev); 1248 QDF_STATUS (*dfs_process_phyerr)(struct wlan_objmgr_pdev *pdev, 1249 void *buf, 1250 uint16_t datalen, 1251 uint8_t r_rssi, 1252 uint8_t r_ext_rssi, 1253 uint32_t r_rs_tstamp, 1254 uint64_t r_fulltsf); 1255 QDF_STATUS (*dfs_destroy_object)(struct wlan_objmgr_pdev *pdev); 1256 QDF_STATUS (*dfs_radar_enable)(struct wlan_objmgr_pdev *pdev, 1257 int no_cac, 1258 uint32_t opmode); 1259 void (*dfs_is_radar_enabled)(struct wlan_objmgr_pdev *pdev, 1260 int *ignore_dfs); 1261 QDF_STATUS (*dfs_control)(struct wlan_objmgr_pdev *pdev, 1262 u_int id, 1263 void *indata, 1264 uint32_t insize, 1265 void *outdata, 1266 uint32_t *outsize, 1267 int *error); 1268 QDF_STATUS (*dfs_is_precac_timer_running)(struct wlan_objmgr_pdev *pdev, 1269 bool *is_precac_timer_running 1270 ); 1271 QDF_STATUS 1272 (*dfs_find_vht80_chan_for_precac)(struct wlan_objmgr_pdev *pdev, 1273 uint32_t chan_mode, 1274 uint8_t ch_freq_seg1, 1275 uint32_t *cfreq1, 1276 uint32_t *cfreq2, 1277 uint32_t *phy_mode, 1278 bool *dfs_set_cfreq2, 1279 bool *set_agile); 1280 QDF_STATUS (*dfs_start_precac_timer)(struct wlan_objmgr_pdev *pdev); 1281 QDF_STATUS (*dfs_cancel_precac_timer)(struct wlan_objmgr_pdev *pdev); 1282 QDF_STATUS (*dfs_override_precac_timeout)( 1283 struct wlan_objmgr_pdev *pdev, 1284 int precac_timeout); 1285 QDF_STATUS (*dfs_set_precac_enable)(struct wlan_objmgr_pdev *pdev, 1286 uint32_t value); 1287 QDF_STATUS (*dfs_get_precac_enable)(struct wlan_objmgr_pdev *pdev, 1288 int *buff); 1289 #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT 1290 QDF_STATUS (*dfs_set_precac_intermediate_chan)(struct wlan_objmgr_pdev *pdev, 1291 uint32_t value); 1292 QDF_STATUS (*dfs_get_precac_intermediate_chan)(struct wlan_objmgr_pdev *pdev, 1293 int *buff); 1294 bool (*dfs_decide_precac_preferred_chan)(struct wlan_objmgr_pdev *pdev, 1295 uint8_t *pref_chan, 1296 enum wlan_phymode mode); 1297 enum precac_chan_state (*dfs_get_precac_chan_state)(struct wlan_objmgr_pdev *pdev, 1298 uint8_t precac_chan); 1299 #endif 1300 QDF_STATUS (*dfs_get_override_precac_timeout)( 1301 struct wlan_objmgr_pdev *pdev, 1302 int *precac_timeout); 1303 QDF_STATUS (*dfs_set_current_channel)(struct wlan_objmgr_pdev *pdev, 1304 uint16_t ic_freq, 1305 uint64_t ic_flags, 1306 uint16_t ic_flagext, 1307 uint8_t ic_ieee, 1308 uint8_t ic_vhtop_ch_freq_seg1, 1309 uint8_t ic_vhtop_ch_freq_seg2); 1310 #ifdef DFS_COMPONENT_ENABLE 1311 QDF_STATUS (*dfs_process_radar_ind)(struct wlan_objmgr_pdev *pdev, 1312 struct radar_found_info *radar_found); 1313 QDF_STATUS (*dfs_dfs_cac_complete_ind)(struct wlan_objmgr_pdev *pdev, 1314 uint32_t vdev_id); 1315 #endif 1316 QDF_STATUS (*dfs_stop)(struct wlan_objmgr_pdev *pdev); 1317 void (*dfs_enable_stadfs)(struct wlan_objmgr_pdev *pdev, bool val); 1318 bool (*dfs_is_stadfs_enabled)(struct wlan_objmgr_pdev *pdev); 1319 QDF_STATUS (*dfs_process_phyerr_filter_offload)( 1320 struct wlan_objmgr_pdev *pdev, 1321 struct radar_event_info *wlan_radar_info); 1322 QDF_STATUS (*dfs_is_phyerr_filter_offload)( 1323 struct wlan_objmgr_psoc *psoc, 1324 bool *is_phyerr_filter_offload); 1325 QDF_STATUS (*dfs_action_on_status)(struct wlan_objmgr_pdev *pdev, 1326 u_int32_t *dfs_status_check); 1327 QDF_STATUS (*dfs_override_status_timeout)( 1328 struct wlan_objmgr_pdev *pdev, 1329 int status_timeout); 1330 QDF_STATUS (*dfs_get_override_status_timeout)( 1331 struct wlan_objmgr_pdev *pdev, 1332 int *status_timeout); 1333 QDF_STATUS (*dfs_reset_spoof_test)(struct wlan_objmgr_pdev *pdev); 1334 QDF_STATUS (*dfs_is_disable_radar_marking_set)(struct wlan_objmgr_pdev 1335 *pdev, 1336 bool *disable_radar_marking); 1337 QDF_STATUS (*dfs_set_nol_subchannel_marking)( 1338 struct wlan_objmgr_pdev *pdev, 1339 bool value); 1340 QDF_STATUS (*dfs_get_nol_subchannel_marking)( 1341 struct wlan_objmgr_pdev *pdev, 1342 bool *value); 1343 QDF_STATUS (*dfs_set_bw_reduction)(struct wlan_objmgr_pdev *pdev, 1344 bool value); 1345 QDF_STATUS (*dfs_is_bw_reduction_needed)(struct wlan_objmgr_pdev *pdev, 1346 bool *bw_reduce); 1347 }; 1348 1349 /** 1350 * struct wlan_lmac_if_mlme_rx_ops: Function pointer to call MLME functions 1351 * @wlan_mlme_scan_start: function to start scan 1352 * @wlan_mlme_register_pm_event_handler: function to register pm event 1353 * @wlan_mlme_unregister_pm_event_handler: function unregister for pm event 1354 * @wlan_mlme_register_vdev_event_handler: function to register for vdev event 1355 * @wlan_mlme_unregister_vdev_event_handler: functiont o unregister for vdev 1356 * event 1357 * @wlan_mlme_send_probe_request: function to send probe 1358 * @wlan_mlme_resmgr_request_bsschan: function to request bsschan 1359 * @wlan_mlme_resmgr_request_offchan: function to request offchan 1360 * @wlan_mlme_resmgr_active: function to check resmgr status 1361 * @wlan_mlme_get_cw_inter_found: function to get cw interference 1362 * @wlan_mlme_set_home_channel: function to set home channel 1363 * @wlan_mlme_set_channel: function to set channel 1364 * @wlan_mlme_start_record_stats: functiont to start record stats 1365 * @wlan_mlme_end_record_stats: function to end recording of stats 1366 * @wlan_mlme_get_enh_rpt_ind: function to get enhanced repeater index 1367 * @wlan_mlme_pause: function to pause mlme 1368 * @wlan_mlme_unpause: function to unpause mlme 1369 * @wlan_mlme_vdev_pause_control: function to set vdev pause control 1370 * @wlan_mlme_sta_power_pause: function to set sta power pause 1371 * @wlan_mlme_sta_power_unpause: function to set sta power pause 1372 * @wlan_mlme_set_vdev_sleep: function to sleep vdev sleep 1373 * @wlan_mlme_set_vdev_wakeup: function to set vdev wakeup 1374 * @wlan_mlme_get_traffic_indication_timestamp: function to get tid timestamp 1375 * @wlan_mlme_get_acs_in_progress: function to get ACS progress 1376 * @wlan_mlme_end_scan: function to end scan 1377 * @mlme_get_rsp_timer: function to get vdev mgr response timer 1378 * @mlme_response_timeout_cb: function to trigger on response time expiry 1379 * @mlme_start_response: function to handle vdev start response 1380 * @mlme_stop_response: function to handle vdev stop response 1381 * @mlme_offload_bcn_tx_status_event_handle: function to get offload beacon tx 1382 * status 1383 * @mlme_tbttoffset_update_handle: function to handle tbttoffset event 1384 */ 1385 struct wlan_lmac_if_mlme_rx_ops { 1386 1387 void (*wlan_mlme_scan_start)(struct wlan_objmgr_pdev *pdev); 1388 void (*wlan_mlme_register_pm_event_handler)( 1389 struct wlan_objmgr_pdev *pdev, 1390 uint8_t vdev_id); 1391 void (*wlan_mlme_unregister_pm_event_handler)( 1392 struct wlan_objmgr_pdev *pdev, 1393 uint8_t vdev_id); 1394 QDF_STATUS (*wlan_mlme_register_vdev_event_handler)( 1395 struct wlan_objmgr_pdev *pdev, 1396 uint8_t vdev_id); 1397 QDF_STATUS (*wlan_mlme_unregister_vdev_event_handler)( 1398 struct wlan_objmgr_pdev *pdev, 1399 uint8_t vdev_id); 1400 int (*wlan_mlme_send_probe_request)(struct wlan_objmgr_pdev *pdev, 1401 uint8_t vdev_id, 1402 u_int8_t *destination, 1403 u_int8_t *bssid, 1404 u_int8_t *ssid, 1405 u_int32_t ssidlen, 1406 u_int8_t *ie, 1407 size_t len); 1408 int (*wlan_mlme_resmgr_request_bsschan)(struct wlan_objmgr_pdev *pdev); 1409 int (*wlan_mlme_resmgr_request_offchan)(struct wlan_objmgr_pdev *pdev, 1410 u_int32_t freq, 1411 u_int32_t flags, 1412 u_int32_t estimated_offchannel_time); 1413 int (*wlan_mlme_resmgr_active)(struct wlan_objmgr_pdev *pdev); 1414 int (*wlan_mlme_get_cw_inter_found)(struct wlan_objmgr_pdev *pdev); 1415 int (*wlan_mlme_set_home_channel)(struct wlan_objmgr_pdev *pdev, 1416 uint8_t vdev_id); 1417 int (*wlan_mlme_set_channel)(struct wlan_objmgr_pdev *pdev, 1418 u_int32_t freq, 1419 u_int32_t flags); 1420 void (*wlan_mlme_start_record_stats)(struct wlan_objmgr_pdev *pdev); 1421 void (*wlan_mlme_end_record_stats)(struct wlan_objmgr_pdev *pdev); 1422 int (*wlan_mlme_get_enh_rpt_ind)(struct wlan_objmgr_pdev *pdev); 1423 int (*wlan_mlme_pause)(struct wlan_objmgr_pdev *pdev); 1424 void (*wlan_mlme_unpause)(struct wlan_objmgr_pdev *pdev); 1425 int (*wlan_mlme_vdev_pause_control)(struct wlan_objmgr_pdev *pdev, 1426 uint8_t vdev_id); 1427 int (*wlan_mlme_sta_power_pause)( 1428 struct wlan_objmgr_pdev *pdev, 1429 uint8_t vdev_id, 1430 u_int32_t timeout); 1431 int (*wlan_mlme_sta_power_unpause)(struct wlan_objmgr_pdev *pdev, 1432 uint8_t vdev_id); 1433 int (*wlan_mlme_set_vdev_sleep)(struct wlan_objmgr_pdev *pdev, 1434 uint8_t vdev_id); 1435 int (*wlan_mlme_set_vdev_wakeup)(struct wlan_objmgr_pdev *pdev, 1436 uint8_t vdev_id); 1437 qdf_time_t (*wlan_mlme_get_traffic_indication_timestamp)( 1438 struct wlan_objmgr_pdev *pdev); 1439 int (*wlan_mlme_get_acs_in_progress)(struct wlan_objmgr_pdev *pdev, 1440 uint8_t vdev_id); 1441 void (*wlan_mlme_end_scan)(struct wlan_objmgr_pdev *pdev); 1442 1443 #ifdef CMN_VDEV_MGR_TGT_IF_ENABLE 1444 struct vdev_response_timer *(*vdev_mgr_get_response_timer_info)( 1445 struct wlan_objmgr_vdev *vdev); 1446 QDF_STATUS (*vdev_mgr_start_response)( 1447 struct wlan_objmgr_psoc *psoc, 1448 struct vdev_start_response *rsp); 1449 QDF_STATUS (*vdev_mgr_stop_response)( 1450 struct wlan_objmgr_psoc *psoc, 1451 struct vdev_stop_response *rsp); 1452 QDF_STATUS (*vdev_mgr_delete_response)( 1453 struct wlan_objmgr_psoc *psoc, 1454 struct vdev_delete_response *rsp); 1455 QDF_STATUS (*vdev_mgr_offload_bcn_tx_status_event_handle)( 1456 uint32_t vdev_id, 1457 uint32_t tx_status); 1458 QDF_STATUS (*vdev_mgr_tbttoffset_update_handle)( 1459 uint32_t num_vdevs, 1460 bool is_ext); 1461 #endif 1462 }; 1463 1464 #ifdef WLAN_SUPPORT_GREEN_AP 1465 struct wlan_lmac_if_green_ap_rx_ops { 1466 bool (*is_ps_enabled)(struct wlan_objmgr_pdev *pdev); 1467 bool (*is_dbg_print_enabled)(struct wlan_objmgr_pdev *pdev); 1468 QDF_STATUS (*ps_get)(struct wlan_objmgr_pdev *pdev, uint8_t *value); 1469 QDF_STATUS (*ps_set)(struct wlan_objmgr_pdev *pdev, uint8_t value); 1470 void (*suspend_handle)(struct wlan_objmgr_pdev *pdev); 1471 }; 1472 #endif 1473 1474 /** 1475 * struct wlan_lmac_if_rx_ops - south bound rx function pointers 1476 * @mgmt_txrx_tx_ops: mgmt txrx rx ops 1477 * @scan: scan rx ops 1478 * @dfs_rx_ops: dfs rx ops. 1479 * @cp_stats_rx_ops: cp stats rx ops 1480 * @cfr_rx_ops: cfr rx ops 1481 * 1482 * Callback function tabled to be registered with lmac/wmi. 1483 * lmac will use the functional table to send events/frames to umac 1484 */ 1485 struct wlan_lmac_if_rx_ops { 1486 /* Components to declare function pointers required by the module 1487 * in component specific structure. 1488 * The component specific ops structure can be declared in this file 1489 * only 1490 */ 1491 struct wlan_lmac_if_mgmt_txrx_rx_ops mgmt_txrx_rx_ops; 1492 struct wlan_lmac_if_scan_rx_ops scan; 1493 #ifdef CONVERGED_P2P_ENABLE 1494 struct wlan_lmac_if_p2p_rx_ops p2p; 1495 #endif 1496 1497 #ifdef WLAN_ATF_ENABLE 1498 struct wlan_lmac_if_atf_rx_ops atf_rx_ops; 1499 #endif 1500 #ifdef QCA_SUPPORT_CP_STATS 1501 struct wlan_lmac_if_cp_stats_rx_ops cp_stats_rx_ops; 1502 #endif 1503 #ifdef WLAN_SA_API_ENABLE 1504 struct wlan_lmac_if_sa_api_rx_ops sa_api_rx_ops; 1505 #endif 1506 1507 #ifdef WLAN_CFR_ENABLE 1508 struct wlan_lmac_if_cfr_rx_ops cfr_rx_ops; 1509 #endif 1510 1511 #ifdef WLAN_CONV_SPECTRAL_ENABLE 1512 struct wlan_lmac_if_sptrl_rx_ops sptrl_rx_ops; 1513 #endif 1514 1515 #ifdef WLAN_CONV_CRYPTO_SUPPORTED 1516 struct wlan_lmac_if_crypto_rx_ops crypto_rx_ops; 1517 #endif 1518 #ifdef WIFI_POS_CONVERGED 1519 struct wlan_lmac_if_wifi_pos_rx_ops wifi_pos_rx_ops; 1520 #endif 1521 struct wlan_lmac_if_reg_rx_ops reg_rx_ops; 1522 struct wlan_lmac_if_dfs_rx_ops dfs_rx_ops; 1523 #ifdef FEATURE_WLAN_TDLS 1524 struct wlan_lmac_if_tdls_rx_ops tdls_rx_ops; 1525 #endif 1526 1527 #ifdef WLAN_SUPPORT_FILS 1528 struct wlan_lmac_if_fd_rx_ops fd_rx_ops; 1529 #endif 1530 1531 struct wlan_lmac_if_mlme_rx_ops mops; 1532 1533 #ifdef WLAN_SUPPORT_GREEN_AP 1534 struct wlan_lmac_if_green_ap_rx_ops green_ap_rx_ops; 1535 #endif 1536 1537 struct wlan_lmac_if_ftm_rx_ops ftm_rx_ops; 1538 }; 1539 1540 /* Function pointer to call legacy tx_ops registration in OL/WMA. 1541 */ 1542 extern QDF_STATUS (*wlan_lmac_if_umac_tx_ops_register) 1543 (struct wlan_lmac_if_tx_ops *tx_ops); 1544 #endif /* _WLAN_LMAC_IF_DEF_H_ */ 1545