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