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