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