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