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