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