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