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