blob: c919a68f941a95cf026d26b72d66f3aff86d7251 [file] [log] [blame]
/*
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
*
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all
* copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef _WLAN_LMAC_IF_DEF_H_
#define _WLAN_LMAC_IF_DEF_H_
#include <qdf_time.h>
#include "qdf_status.h"
#include "wlan_objmgr_cmn.h"
#ifdef DFS_COMPONENT_ENABLE
#include <wlan_dfs_public_struct.h>
#endif
#include "wlan_mgmt_txrx_utils_api.h"
#include "wlan_scan_public_structs.h"
#ifdef WLAN_ATF_ENABLE
#include "wlan_atf_utils_defs.h"
#endif
#ifdef QCA_SUPPORT_SON
#include <wlan_son_tgt_api.h>
#endif
#ifdef WLAN_SA_API_ENABLE
#include "wlan_sa_api_utils_defs.h"
#endif
#ifdef WLAN_CONV_SPECTRAL_ENABLE
#include "wlan_spectral_public_structs.h"
#endif
#include <reg_services_public_struct.h>
#ifdef WLAN_CONV_CRYPTO_SUPPORTED
#include "wlan_crypto_global_def.h"
#endif
#ifdef WLAN_CFR_ENABLE
#include "wlan_cfr_utils_api.h"
#endif
#include <wlan_dfs_tgt_api.h>
#include <wlan_dfs_ioctl.h>
/* Number of dev type: Direct attach and Offload */
#define MAX_DEV_TYPE 2
#ifdef WIFI_POS_CONVERGED
/* forward declarations */
struct oem_data_req;
struct oem_data_rsp;
#endif /* WIFI_POS_CONVERGED */
#ifdef DIRECT_BUF_RX_ENABLE
/* forward declarations for direct buf rx */
struct direct_buf_rx_data;
/* Forward declaration for module_ring_params */
struct module_ring_params;
/*Forward declaration for dbr_module_config */
struct dbr_module_config;
#endif
#ifdef FEATURE_WLAN_TDLS
#include "wlan_tdls_public_structs.h"
#endif
#ifdef QCA_SUPPORT_CP_STATS
#include <wlan_cp_stats_mc_defs.h>
#endif /* QCA_SUPPORT_CP_STATS */
#include <wlan_vdev_mgr_tgt_if_tx_defs.h>
#include <wlan_vdev_mgr_tgt_if_rx_defs.h>
#ifdef QCA_SUPPORT_CP_STATS
/**
* struct wlan_lmac_if_cp_stats_tx_ops - defines southbound tx callbacks for
* control plane statistics component
* @cp_stats_attach: function pointer to register events from FW
* @cp_stats_detach: function pointer to unregister events from FW
*/
struct wlan_lmac_if_cp_stats_tx_ops {
QDF_STATUS (*cp_stats_attach)(struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*cp_stats_detach)(struct wlan_objmgr_psoc *posc);
#ifdef CONFIG_MCL
void (*inc_wake_lock_stats)(uint32_t reason,
struct wake_lock_stats *stats,
uint32_t *unspecified_wake_count);
QDF_STATUS (*send_req_stats)(struct wlan_objmgr_psoc *psoc,
enum stats_req_type type,
struct request_info *req);
#endif
};
/**
* struct wlan_lmac_if_cp_stats_rx_ops - defines southbound rx callbacks for
* control plane statistics component
* @cp_stats_rx_event_handler: function pointer to rx FW events
*/
struct wlan_lmac_if_cp_stats_rx_ops {
QDF_STATUS (*cp_stats_rx_event_handler)(struct wlan_objmgr_vdev *vdev);
#ifdef CONFIG_MCL
QDF_STATUS (*process_stats_event)(struct wlan_objmgr_psoc *psoc,
struct stats_event *ev);
#endif
};
#endif
/**
* struct wlan_lmac_if_mgmt_txrx_tx_ops - structure of tx function
* pointers for mgmt txrx component
* @mgmt_tx_send: function pointer to transmit mgmt tx frame
* @beacon_send: function pointer to transmit beacon frame
* @fd_action_frame_send: function pointer to transmit FD action frame
* @tx_drain_nbuf_op: function pointer for any umac nbuf realted ops for
* pending mgmt frames cleanup
*/
struct wlan_lmac_if_mgmt_txrx_tx_ops {
QDF_STATUS (*mgmt_tx_send)(struct wlan_objmgr_vdev *vdev,
qdf_nbuf_t nbuf, u_int32_t desc_id,
void *mgmt_tx_params);
QDF_STATUS (*beacon_send)(struct wlan_objmgr_vdev *vdev,
qdf_nbuf_t nbuf);
QDF_STATUS (*fd_action_frame_send)(struct wlan_objmgr_vdev *vdev,
qdf_nbuf_t nbuf);
void (*tx_drain_nbuf_op)(struct wlan_objmgr_pdev *pdev,
qdf_nbuf_t nbuf);
};
/**
* struct wlan_lmac_if_scan_tx_ops - south bound tx function pointers for scan
* @scan_start: function to start scan
* @scan_cancel: function to cancel scan
* @pno_start: start pno scan
* @pno_stop: stop pno scan
* @scan_reg_ev_handler: function to register for scan events
* @scan_unreg_ev_handler: function to unregister for scan events
*
* scan module uses these functions to avail ol/da lmac services
*/
struct wlan_lmac_if_scan_tx_ops {
QDF_STATUS (*scan_start)(struct wlan_objmgr_pdev *pdev,
struct scan_start_request *req);
QDF_STATUS (*scan_cancel)(struct wlan_objmgr_pdev *pdev,
struct scan_cancel_param *req);
QDF_STATUS (*pno_start)(struct wlan_objmgr_psoc *psoc,
struct pno_scan_req_params *req);
QDF_STATUS (*pno_stop)(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
QDF_STATUS (*scan_reg_ev_handler)(struct wlan_objmgr_psoc *psoc,
void *arg);
QDF_STATUS (*scan_unreg_ev_handler)(struct wlan_objmgr_psoc *psoc,
void *arg);
QDF_STATUS (*set_chan_list)(struct wlan_objmgr_pdev *pdev, void *arg);
};
/**
* struct wlan_lmac_if_ftm_tx_ops - south bound tx function pointers for ftm
* @ftm_attach: function to register event handlers with FW
* @ftm_detach: function to de-register event handlers with FW
* @ftm_cmd_send: function to send FTM commands to FW
*
* ftm module uses these functions to avail ol/da lmac services
*/
struct wlan_lmac_if_ftm_tx_ops {
QDF_STATUS (*ftm_attach)(struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*ftm_detach)(struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*ftm_cmd_send)(struct wlan_objmgr_pdev *pdev,
uint8_t *buf, uint32_t len, uint8_t mac_id);
};
enum wlan_mlme_cfg_id;
/**
* struct wlan_lmac_if_mlme_tx_ops - south bound tx function pointers for mlme
* @scan_sta_power_events: function to handle STA power events
* @scan_connection_lost: function to get scan connection lost
* @scan_end: function to end scan
* @get_wifi_iface_id: function to get wifi interface id
* @vdev_mlme_attach: function to register events
* @vdev_mlme_detach: function to unregister events
* @vdev_mgr_rsp_timer_init: function to initialize vdev response timer
* @vdev_mgr_rsp_timer_mod: function to timer_mod vdev response timer
* @vdev_create_send: function to send vdev create
* @vdev_start_send: function to send vdev start
* @vdev_up_send: function to send vdev up
* @vdev_delete_send: function to send vdev delete
* @vdev_stop_send: function to send vdev stop
* @vdev_down_send: function to send vdev down
* @vdev_set_param_send: function to send vdev parameter
* @vdev_set_tx_rx_decap_type: function to send vdev tx rx cap/decap type
* @vdev_set_nac_rssi_send: function to send nac rssi
* @vdev_set_neighbour_rx_cmd_send: function to send vdev neighbour rx cmd
* @vdev_sifs_trigger_send: function to send vdev sifs trigger
* @vdev_set_custom_aggr_size_cmd_send: function to send custom aggr size
* @vdev_config_ratemask_cmd_send: function to send ratemask
* @peer_flush_tids_send: function to flush peer tids
* @multiple_vdev_restart_req_cmd: function to send multiple vdev restart
* @beacon_send_cmd: function to send beacon
* @beacon_tmpl_send: function to send beacon template
* @vdev_bcn_miss_offload_send: function to send beacon miss offload
* @vdev_sta_ps_param_send: function to sent STA power save config
* @peer_delete_all_send: function to send vdev delete all peer request
*/
struct wlan_lmac_if_mlme_tx_ops {
void (*scan_sta_power_events)(struct wlan_objmgr_pdev *pdev,
int event_type, int event_status);
void (*scan_connection_lost)(struct wlan_objmgr_pdev *pdev);
void (*scan_end)(struct wlan_objmgr_pdev *pdev);
uint32_t (*get_wifi_iface_id) (struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*vdev_mlme_attach)(struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*vdev_mlme_detach)(struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*vdev_mgr_rsp_timer_init)(
struct wlan_objmgr_vdev *vdev,
qdf_timer_t *rsp_timer);
QDF_STATUS (*vdev_mgr_rsp_timer_mod)(
struct wlan_objmgr_vdev *vdev,
struct vdev_response_timer *vdev_rsp,
int mseconds);
QDF_STATUS (*vdev_create_send)(struct wlan_objmgr_vdev *vdev,
struct vdev_create_params *param);
QDF_STATUS (*vdev_start_send)(struct wlan_objmgr_vdev *vdev,
struct vdev_start_params *param);
QDF_STATUS (*vdev_up_send)(struct wlan_objmgr_vdev *vdev,
struct vdev_up_params *param);
QDF_STATUS (*vdev_delete_send)(struct wlan_objmgr_vdev *vdev,
struct vdev_delete_params *param);
QDF_STATUS (*vdev_stop_send)(struct wlan_objmgr_vdev *vdev,
struct vdev_stop_params *param);
QDF_STATUS (*vdev_down_send)(struct wlan_objmgr_vdev *vdev,
struct vdev_down_params *param);
QDF_STATUS (*vdev_set_param_send)(struct wlan_objmgr_vdev *vdev,
struct vdev_set_params *param);
QDF_STATUS (*vdev_set_tx_rx_decap_type)(struct wlan_objmgr_vdev *vdev,
enum wlan_mlme_cfg_id param_id,
uint32_t value);
QDF_STATUS (*vdev_set_nac_rssi_send)(
struct wlan_objmgr_vdev *vdev,
struct vdev_scan_nac_rssi_params *param);
QDF_STATUS (*vdev_set_neighbour_rx_cmd_send)(
struct wlan_objmgr_vdev *vdev,
struct set_neighbour_rx_params *param,
uint8_t *mac);
QDF_STATUS (*vdev_sifs_trigger_send)(
struct wlan_objmgr_vdev *vdev,
struct sifs_trigger_param *param);
QDF_STATUS (*vdev_set_custom_aggr_size_cmd_send)(
struct wlan_objmgr_vdev *vdev,
struct set_custom_aggr_size_params *param);
QDF_STATUS (*vdev_config_ratemask_cmd_send)(
struct wlan_objmgr_vdev *vdev,
struct config_ratemask_params *param);
QDF_STATUS (*peer_flush_tids_send)(
struct wlan_objmgr_vdev *vdev,
struct peer_flush_params *param);
QDF_STATUS (*multiple_vdev_restart_req_cmd)(
struct wlan_objmgr_pdev *pdev,
struct multiple_vdev_restart_params *param);
QDF_STATUS (*beacon_cmd_send)(struct wlan_objmgr_vdev *vdev,
struct beacon_params *param);
QDF_STATUS (*beacon_tmpl_send)(struct wlan_objmgr_vdev *vdev,
struct beacon_tmpl_params *param);
QDF_STATUS (*vdev_bcn_miss_offload_send)(struct wlan_objmgr_vdev *vdev);
QDF_STATUS (*vdev_sta_ps_param_send)(struct wlan_objmgr_vdev *vdev,
struct sta_ps_params *param);
QDF_STATUS (*peer_delete_all_send)(
struct wlan_objmgr_vdev *vdev,
struct peer_delete_all_params *param);
};
/**
* struct wlan_lmac_if_scan_rx_ops - south bound rx function pointers for scan
* @scan_ev_handler: scan event handler
* @scan_set_max_active_scans: set max active scans allowed
*
* lmac modules uses this API to post scan events to scan module
*/
struct wlan_lmac_if_scan_rx_ops {
QDF_STATUS (*scan_ev_handler)(struct wlan_objmgr_psoc *psoc,
struct scan_event_info *event_info);
QDF_STATUS (*scan_set_max_active_scans)(struct wlan_objmgr_psoc *psoc,
uint32_t max_active_scans);
};
#ifdef CONVERGED_P2P_ENABLE
/* forward declarations for p2p tx ops */
struct p2p_ps_config;
struct p2p_lo_start;
struct p2p_set_mac_filter;
/**
* struct wlan_lmac_if_p2p_tx_ops - structure of tx function pointers
* for P2P component
* @set_ps: function pointer to set power save
* @lo_start: function pointer to start listen offload
* @lo_stop: function pointer to stop listen offload
* @set_noa: function pointer to disable/enable NOA
* @reg_lo_ev_handler: function pointer to register lo event handler
* @reg_noa_ev_handler: function pointer to register noa event handler
* @unreg_lo_ev_handler: function pointer to unregister lo event handler
* @unreg_noa_ev_handler:function pointer to unregister noa event handler
* @reg_mac_addr_rx_filter_handler: function pointer to register/unregister
* set mac addr status event callback.
* @set_mac_addr_rx_filter_cmd: function pointer to set mac addr rx filter
*/
struct wlan_lmac_if_p2p_tx_ops {
QDF_STATUS (*set_ps)(struct wlan_objmgr_psoc *psoc,
struct p2p_ps_config *ps_config);
#ifdef FEATURE_P2P_LISTEN_OFFLOAD
QDF_STATUS (*lo_start)(struct wlan_objmgr_psoc *psoc,
struct p2p_lo_start *lo_start);
QDF_STATUS (*lo_stop)(struct wlan_objmgr_psoc *psoc,
uint32_t vdev_id);
QDF_STATUS (*reg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc,
void *arg);
QDF_STATUS (*unreg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc,
void *arg);
#endif
QDF_STATUS (*set_noa)(struct wlan_objmgr_psoc *psoc,
uint32_t vdev_id, bool disable_noa);
QDF_STATUS (*reg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc,
void *arg);
QDF_STATUS (*unreg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc,
void *arg);
QDF_STATUS (*reg_mac_addr_rx_filter_handler)(
struct wlan_objmgr_psoc *psoc, bool reg);
QDF_STATUS (*set_mac_addr_rx_filter_cmd)(
struct wlan_objmgr_psoc *psoc,
struct p2p_set_mac_filter *param);
};
#endif
#ifdef WLAN_ATF_ENABLE
/**
* struct wlan_lmac_if_atf_tx_ops - ATF specific tx function pointers
* @atf_node_unblock: Resume node
* @atf_set_enable_disable: Set atf enable/disable
* @atf_tokens_used: Get used atf tokens
* @atf_get_unused_txtoken: Get unused atf tokens
* @atf_peer_resume: Resume peer
* @atf_tokens_unassigned: Set unassigned atf tockens
* @atf_capable_peer: Set atf state change
* @atf_airtime_estimate: Get estimated airtime
* @atf_debug_peerstate: Get peer state
* @atf_enable_disable: Set atf peer stats enable/disable
* @atf_ssid_sched_policy: Set ssid schedule policy
* @atf_set: Set atf
* @atf_set_grouping: Set atf grouping
* @atf_set_group_ac: Set atf Group AC
* @atf_send_peer_request: Send peer requests
* @atf_set_bwf: Set bandwidth fairness
* @atf_peer_buf_held: Get buffer held
* @atf_get_peer_airtime: Get peer airtime
* @atf_get_chbusyper: Get channel busy
* @atf_open: ATF open
* @atf_register_event_handler ATF register wmi event handlers
* @atf_unregister_event_handler ATF unregister wmi event handlers
*/
struct wlan_lmac_if_atf_tx_ops {
void (*atf_node_unblock)(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer);
void (*atf_set_enable_disable)(struct wlan_objmgr_pdev *pdev,
uint8_t value);
uint8_t (*atf_tokens_used)(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer);
void (*atf_get_unused_txtoken)(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer,
int *unused_token);
void (*atf_peer_resume)(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer);
void (*atf_tokens_unassigned)(struct wlan_objmgr_pdev *pdev,
uint32_t tokens_unassigned);
void (*atf_capable_peer)(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer,
uint8_t val, uint8_t atfstate_change);
uint32_t (*atf_airtime_estimate)(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer,
uint32_t tput,
uint32_t *possible_tput);
uint32_t (*atf_debug_peerstate)(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer,
struct atf_peerstate *peerstate);
int32_t (*atf_enable_disable)(struct wlan_objmgr_vdev *vdev,
uint8_t value);
int32_t (*atf_ssid_sched_policy)(struct wlan_objmgr_vdev *vdev,
uint8_t value);
int32_t (*atf_set)(struct wlan_objmgr_pdev *pdev,
struct pdev_atf_req *atf_req,
uint8_t atf_tput_based);
int32_t (*atf_set_grouping)(struct wlan_objmgr_pdev *pdev,
struct pdev_atf_ssid_group_req *atf_grp_req,
uint8_t atf_tput_based);
int32_t (*atf_set_group_ac)(struct wlan_objmgr_pdev *pdev,
struct pdev_atf_group_wmm_ac_req *atf_acreq,
uint8_t atf_tput_based);
int32_t (*atf_send_peer_request)(struct wlan_objmgr_pdev *pdev,
struct pdev_atf_peer_ext_request *atfr,
uint8_t atf_tput_based);
int32_t (*atf_set_bwf)(struct wlan_objmgr_pdev *pdev,
struct pdev_bwf_req *bwf_req);
uint32_t (*atf_peer_buf_held)(struct wlan_objmgr_peer *peer);
uint32_t (*atf_get_peer_airtime)(struct wlan_objmgr_peer *peer);
uint32_t (*atf_get_chbusyper)(struct wlan_objmgr_pdev *pdev);
void (*atf_open)(struct wlan_objmgr_psoc *psoc);
void (*atf_register_event_handler)(struct wlan_objmgr_psoc *psoc);
void (*atf_unregister_event_handler)(struct wlan_objmgr_psoc *psoc);
};
#endif
#ifdef WLAN_SUPPORT_FILS
/**
* struct wlan_lmac_if_fd_tx_ops - FILS Discovery specific Tx function pointers
* @fd_vdev_config_fils: Enable and configure FILS Discovery
* @fd_register_event_handler: Register swfda WMI event handler
* @fd_unregister_event_handler: Un-register swfda WMI event handler
* @fd_offload_tmpl_send: Send FD template to FW
*/
struct wlan_lmac_if_fd_tx_ops {
QDF_STATUS (*fd_vdev_config_fils)(struct wlan_objmgr_vdev *vdev,
uint32_t fd_period);
void (*fd_register_event_handler)(struct wlan_objmgr_psoc *psoc);
void (*fd_unregister_event_handler)(struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*fd_offload_tmpl_send)(struct wlan_objmgr_pdev *pdev,
struct fils_discovery_tmpl_params *fd_tmpl_param);
};
#endif
#ifdef WLAN_SA_API_ENABLE
/**
* struct wlan_lmac_if_sa_api_tx_ops - SA API specific tx function pointers
*/
struct wlan_lmac_if_sa_api_tx_ops {
void (*sa_api_register_event_handler)(struct wlan_objmgr_psoc *psoc);
void (*sa_api_unregister_event_handler)(struct wlan_objmgr_psoc *posc);
void (*sa_api_enable_sa) (struct wlan_objmgr_pdev *pdev,
uint32_t enable, uint32_t mode, uint32_t rx_antenna);
void (*sa_api_set_rx_antenna) (struct wlan_objmgr_pdev *pdev,
uint32_t antenna);
void (*sa_api_set_tx_antenna) (struct wlan_objmgr_peer *peer,
uint32_t *antenna_array);
void (*sa_api_set_tx_default_antenna) (struct wlan_objmgr_pdev *pdev,
u_int32_t antenna);
void (*sa_api_set_training_info) (struct wlan_objmgr_peer *peer,
uint32_t *rate_array,
uint32_t *antenna_array,
uint32_t numpkts);
void (*sa_api_prepare_rateset)(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer,
struct sa_rate_info *rate_info);
void (*sa_api_set_node_config_ops) (struct wlan_objmgr_peer *peer,
uint32_t cmd_id, uint16_t args_count,
u_int32_t args_arr[]);
};
#endif
#ifdef WLAN_CFR_ENABLE
/**
* struct wlan_lmac_if_cfr_tx_ops - CFR specific tx function pointers
* @cfr_init_pdev: Initialize CFR
* @cfr_deinit_pdev: De-initialize CFR
* @cfr_enable_cfr_timer: Function to enable CFR timer
* @cfr_start_capture: Function to start CFR capture
* @cfr_stop_capture: Function to stop CFR capture
*/
struct wlan_lmac_if_cfr_tx_ops {
int (*cfr_init_pdev)(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_pdev *pdev);
int (*cfr_deinit_pdev)(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_pdev *pdev);
int (*cfr_enable_cfr_timer)(struct wlan_objmgr_pdev *pdev,
uint32_t cfr_timer);
int (*cfr_start_capture)(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer,
struct cfr_capture_params *params);
int (*cfr_stop_capture)(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer);
};
#endif /* WLAN_CFR_ENABLE */
#ifdef WLAN_CONV_SPECTRAL_ENABLE
struct wmi_spectral_cmd_ops;
/**
* struct wlan_lmac_if_sptrl_tx_ops - Spectral south bound Tx operations
* @sptrlto_spectral_init: Initialize LMAC/target_if Spectral
* @sptrlto_spectral_deinit: De-initialize LMAC/target_if Spectral
* @sptrlto_set_spectral_config: Set Spectral configuration
* @sptrlto_get_spectral_config: Get Spectral configuration
* @sptrlto_start_spectral_scan: Start Spectral Scan
* @sptrlto_stop_spectral_scan: Stop Spectral Scan
* @sptrlto_is_spectral_active: Get whether Spectral is active
* @sptrlto_is_spectral_enabled: Get whether Spectral is enabled
* @sptrlto_set_icm_active: Set whether ICM is active or inactive
* @sptrlto_get_icm_active: Get whether ICM is active or inactive
* @sptrlto_get_nominal_nf: Get Nominal Noise Floor for the current
* frequency band
* @sptrlto_set_debug_level: Set Spectral debug level
* @sptrlto_get_debug_level: Get Spectral debug level
* @sptrlto_get_chaninfo: Get channel information
* @sptrlto_clear_chaninfo: Clear channel information
* @sptrlto_get_spectral_capinfo: Get Spectral capability information
* @sptrlto_get_spectral_diagstats: Get Spectral diagnostic statistics
* @sptrlto_register_netlink_cb: Register Spectral Netlink callbacks
* @sptrlto_use_nl_bcast: Get whether to use Netlink broadcast/unicast
* @sptrlto_deregister_netlink_cb: De-register Spectral Netlink callbacks
* @sptrlto_process_spectral_report: Process spectral report
**/
struct wlan_lmac_if_sptrl_tx_ops {
void *(*sptrlto_pdev_spectral_init)(struct wlan_objmgr_pdev *pdev);
void (*sptrlto_pdev_spectral_deinit)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*sptrlto_set_spectral_config)
(struct wlan_objmgr_pdev *pdev,
const u_int32_t threshtype,
const u_int32_t value,
const enum spectral_scan_mode smode,
enum spectral_cp_error_code *err);
QDF_STATUS (*sptrlto_get_spectral_config)
(struct wlan_objmgr_pdev *pdev,
struct spectral_config *sptrl_config,
enum spectral_scan_mode smode);
QDF_STATUS (*sptrlto_start_spectral_scan)
(struct wlan_objmgr_pdev *pdev,
const enum spectral_scan_mode smode,
enum spectral_cp_error_code *err);
QDF_STATUS (*sptrlto_stop_spectral_scan)
(struct wlan_objmgr_pdev *pdev,
const enum spectral_scan_mode smode,
enum spectral_cp_error_code *err);
bool (*sptrlto_is_spectral_active)(struct wlan_objmgr_pdev *pdev,
const enum spectral_scan_mode smode);
bool (*sptrlto_is_spectral_enabled)(struct wlan_objmgr_pdev *pdev,
enum spectral_scan_mode smode);
QDF_STATUS (*sptrlto_set_debug_level)(struct wlan_objmgr_pdev *pdev,
u_int32_t debug_level);
u_int32_t (*sptrlto_get_debug_level)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*sptrlto_get_spectral_capinfo)
(struct wlan_objmgr_pdev *pdev,
struct spectral_caps *scaps);
QDF_STATUS (*sptrlto_get_spectral_diagstats)
(struct wlan_objmgr_pdev *pdev,
struct spectral_diag_stats *stats);
void (*sptrlto_register_wmi_spectral_cmd_ops)(
struct wlan_objmgr_pdev *pdev,
struct wmi_spectral_cmd_ops *cmd_ops);
void (*sptrlto_register_netlink_cb)(
struct wlan_objmgr_pdev *pdev,
struct spectral_nl_cb *nl_cb);
bool (*sptrlto_use_nl_bcast)(struct wlan_objmgr_pdev *pdev);
void (*sptrlto_deregister_netlink_cb)(struct wlan_objmgr_pdev *pdev);
int (*sptrlto_process_spectral_report)(
struct wlan_objmgr_pdev *pdev,
void *payload);
};
#endif /* WLAN_CONV_SPECTRAL_ENABLE */
#ifdef WIFI_POS_CONVERGED
/*
* struct wlan_lmac_if_wifi_pos_tx_ops - structure of firmware tx function
* pointers for wifi_pos component
* @data_req_tx: function pointer to send wifi_pos req to firmware
* @wifi_pos_register_events: function pointer to register wifi_pos events
* @wifi_pos_deregister_events: function pointer to deregister wifi_pos events
*/
struct wlan_lmac_if_wifi_pos_tx_ops {
QDF_STATUS (*data_req_tx)(struct wlan_objmgr_pdev *pdev,
struct oem_data_req *req);
QDF_STATUS (*wifi_pos_register_events)(struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*wifi_pos_deregister_events)(struct wlan_objmgr_psoc *psoc);
};
#endif
#ifdef DIRECT_BUF_RX_ENABLE
/**
* struct wlan_lmac_if_direct_buf_rx_tx_ops - structire of direct buf rx txops
* @direct_buf_rx_module_register: Registration API callback for modules
* to register with direct buf rx framework
* @direct_buf_rx_module_unregister: Unregistration API to clean up module
* specific resources in DBR
* @direct_buf_rx_register_events: Registration of WMI events for direct
* buffer rx framework
* @direct_buf_rx_unregister_events: Unregistraton of WMI events for direct
* buffer rx framework
* @direct_buf_rx_print_ring_stat: Print ring status per module per pdev
*
* @direct_buf_rx_get_ring_params: Get ring parameters for module_id
*/
struct wlan_lmac_if_direct_buf_rx_tx_ops {
QDF_STATUS (*direct_buf_rx_module_register)(
struct wlan_objmgr_pdev *pdev, uint8_t mod_id,
struct dbr_module_config *dbr_config,
bool (*dbr_rsp_handler)
(struct wlan_objmgr_pdev *pdev,
struct direct_buf_rx_data *dbr_data));
QDF_STATUS (*direct_buf_rx_module_unregister)(
struct wlan_objmgr_pdev *pdev, uint8_t mod_id);
QDF_STATUS (*direct_buf_rx_register_events)(
struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*direct_buf_rx_unregister_events)(
struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*direct_buf_rx_print_ring_stat)(
struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*direct_buf_rx_get_ring_params)
(struct wlan_objmgr_pdev *pdev,
struct module_ring_params *param,
uint8_t module_id, uint8_t srng_id);
};
#endif
#ifdef FEATURE_WLAN_TDLS
/* fwd declarations for tdls tx ops */
struct tdls_info;
struct tdls_peer_update_state;
struct tdls_channel_switch_params;
struct sta_uapsd_trig_params;
/**
* struct wlan_lmac_if_tdls_tx_ops - south bound tx function pointers for tdls
* @update_fw_state: function to update tdls firmware state
* @update_peer_state: function to update tdls peer state
* @set_offchan_mode: function to set tdls offchannel mode
* @tdls_reg_ev_handler: function to register for tdls events
* @tdls_unreg_ev_handler: function to unregister for tdls events
*
* tdls module uses these functions to avail ol/da lmac services
*/
struct wlan_lmac_if_tdls_tx_ops {
QDF_STATUS (*update_fw_state)(struct wlan_objmgr_psoc *psoc,
struct tdls_info *req);
QDF_STATUS (*update_peer_state)(struct wlan_objmgr_psoc *psoc,
struct tdls_peer_update_state *param);
QDF_STATUS (*set_offchan_mode)(struct wlan_objmgr_psoc *psoc,
struct tdls_channel_switch_params *param);
QDF_STATUS (*tdls_reg_ev_handler)(struct wlan_objmgr_psoc *psoc,
void *arg);
QDF_STATUS (*tdls_unreg_ev_handler) (struct wlan_objmgr_psoc *psoc,
void *arg);
};
/* fwd declarations for tdls rx ops */
struct tdls_event_info;
/**
* struct wlan_lmac_if_tdls_rx_ops - south bound rx function pointers for tdls
* @tdls_ev_handler: function to handler tdls event
*
* lmac modules uses this API to post scan events to tdls module
*/
struct wlan_lmac_if_tdls_rx_ops {
QDF_STATUS (*tdls_ev_handler)(struct wlan_objmgr_psoc *psoc,
struct tdls_event_info *info);
};
#endif
/**
* struct wlan_lmac_if_ftm_rx_ops - south bound rx function pointers for FTM
* @ftm_ev_handler: function to handle FTM event
*
* lmac modules uses this API to post FTM events to FTM module
*/
struct wlan_lmac_if_ftm_rx_ops {
QDF_STATUS (*ftm_ev_handler)(struct wlan_objmgr_pdev *pdev,
uint8_t *event_buf, uint32_t len);
};
/**
* struct wlan_lmac_reg_if_tx_ops - structure of tx function
* pointers for regulatory component
* @register_master_handler: pointer to register event handler
* @unregister_master_handler: pointer to unregister event handler
* @register_11d_new_cc_handler: pointer to register 11d cc event handler
* @unregister_11d_new_cc_handler: pointer to unregister 11d cc event handler
*/
struct wlan_lmac_if_reg_tx_ops {
QDF_STATUS (*register_master_handler)(struct wlan_objmgr_psoc *psoc,
void *arg);
QDF_STATUS (*unregister_master_handler)(struct wlan_objmgr_psoc *psoc,
void *arg);
QDF_STATUS (*set_country_code)(struct wlan_objmgr_psoc *psoc,
void *arg);
QDF_STATUS (*fill_umac_legacy_chanlist)(struct wlan_objmgr_pdev *pdev,
struct regulatory_channel *cur_chan_list);
QDF_STATUS (*register_11d_new_cc_handler)(
struct wlan_objmgr_psoc *psoc, void *arg);
QDF_STATUS (*unregister_11d_new_cc_handler)(
struct wlan_objmgr_psoc *psoc, void *arg);
QDF_STATUS (*start_11d_scan)(struct wlan_objmgr_psoc *psoc,
struct reg_start_11d_scan_req *reg_start_11d_scan_req);
QDF_STATUS (*stop_11d_scan)(struct wlan_objmgr_psoc *psoc,
struct reg_stop_11d_scan_req *reg_stop_11d_scan_req);
bool (*is_there_serv_ready_extn)(struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*set_user_country_code)(struct wlan_objmgr_psoc *psoc,
uint8_t pdev_id,
struct cc_regdmn_s *rd);
QDF_STATUS (*set_country_failed)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*register_ch_avoid_event_handler)(
struct wlan_objmgr_psoc *psoc, void *arg);
QDF_STATUS (*unregister_ch_avoid_event_handler)(
struct wlan_objmgr_psoc *psoc, void *arg);
};
/**
* struct wlan_lmac_if_dfs_tx_ops - Function pointer to call offload/lmac
* functions from DFS module.
* @dfs_enable: Enable DFS.
* @dfs_get_caps: Get DFS capabilities.
* @dfs_disable: Disable DFS
* @dfs_gettsf64: Get tsf64 value.
* @dfs_set_use_cac_prssi: Set use_cac_prssi value.
* @dfs_get_dfsdomain: Get DFS domain.
* @dfs_is_countryCode_CHINA: Check is country code CHINA.
* @dfs_get_thresholds: Get thresholds.
* @dfs_get_ext_busy: Get ext_busy.
* @dfs_get_target_type: Get target type.
* @dfs_is_countryCode_KOREA_ROC3: Check is county code Korea.
* @dfs_get_ah_devid: Get ah devid.
* @dfs_get_phymode_info: Get phymode info.
* @dfs_reg_ev_handler: Register dfs event handler.
* @dfs_process_emulate_bang_radar_cmd: Process emulate bang radar test command.
* @dfs_agile_ch_cfg_cmd: Send Agile Channel Configuration command
* @dfs_ocac_abort_cmd: Send Off-Channel CAC abort command.
* @dfs_is_pdev_5ghz: Check if the given pdev is 5GHz.
* @dfs_set_phyerr_filter_offload: Config phyerr filter offload.
* @dfs_send_offload_enable_cmd: Send dfs offload enable command to fw.
* @dfs_host_dfs_check_support: To check Host DFS confirmation feature
* support.
* @dfs_send_avg_radar_params_to_fw: Send average radar parameters to FW.
* @dfs_send_usenol_pdev_param: Send usenol pdev param to FW.
* @dfs_send_subchan_marking_pdev_param: Send subchan marking pdev param to FW.
*/
struct wlan_lmac_if_dfs_tx_ops {
QDF_STATUS (*dfs_enable)(struct wlan_objmgr_pdev *pdev,
int *is_fastclk,
struct wlan_dfs_phyerr_param *param,
uint32_t dfsdomain);
QDF_STATUS (*dfs_get_caps)(struct wlan_objmgr_pdev *pdev,
struct wlan_dfs_caps *dfs_caps);
QDF_STATUS (*dfs_disable)(struct wlan_objmgr_pdev *pdev,
int no_cac);
QDF_STATUS (*dfs_gettsf64)(struct wlan_objmgr_pdev *pdev,
uint64_t *tsf64);
QDF_STATUS (*dfs_set_use_cac_prssi)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*dfs_get_thresholds)(struct wlan_objmgr_pdev *pdev,
struct wlan_dfs_phyerr_param *param);
QDF_STATUS (*dfs_get_ext_busy)(struct wlan_objmgr_pdev *pdev,
int *dfs_ext_chan_busy);
QDF_STATUS (*dfs_get_target_type)(struct wlan_objmgr_pdev *pdev,
uint32_t *target_type);
QDF_STATUS (*dfs_get_ah_devid)(struct wlan_objmgr_pdev *pdev,
uint16_t *devid);
QDF_STATUS (*dfs_get_phymode_info)(struct wlan_objmgr_pdev *pdev,
uint32_t chan_mode,
uint32_t *mode_info,
bool is_2gvht_en);
QDF_STATUS (*dfs_reg_ev_handler)(struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*dfs_process_emulate_bang_radar_cmd)(
struct wlan_objmgr_pdev *pdev,
struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test);
QDF_STATUS (*dfs_agile_ch_cfg_cmd)(
struct wlan_objmgr_pdev *pdev,
struct dfs_agile_cac_params *adfs_params);
QDF_STATUS (*dfs_ocac_abort_cmd)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*dfs_is_pdev_5ghz)(struct wlan_objmgr_pdev *pdev,
bool *is_5ghz);
QDF_STATUS (*dfs_set_phyerr_filter_offload)(
struct wlan_objmgr_pdev *pdev,
bool dfs_phyerr_filter_offload);
bool (*dfs_is_tgt_offload)(struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*dfs_send_offload_enable_cmd)(
struct wlan_objmgr_pdev *pdev,
bool enable);
QDF_STATUS (*dfs_host_dfs_check_support)(struct wlan_objmgr_pdev *pdev,
bool *enabled);
QDF_STATUS (*dfs_send_avg_radar_params_to_fw)(
struct wlan_objmgr_pdev *pdev,
struct dfs_radar_found_params *params);
QDF_STATUS (*dfs_send_usenol_pdev_param)(struct wlan_objmgr_pdev *pdev,
bool usenol);
QDF_STATUS (*dfs_send_subchan_marking_pdev_param)(
struct wlan_objmgr_pdev *pdev,
bool subchanmark);
};
/**
* struct wlan_lmac_if_target_tx_ops - Function pointers to call target
* functions from other modules.
* @tgt_is_tgt_type_ar900b: To check AR900B target type.
* @tgt_is_tgt_type_ipq4019: To check IPQ4019 target type.
* @tgt_is_tgt_type_qca9984: To check QCA9984 target type.
* @tgt_is_tgt_type_qca9888: To check QCA9888 target type.
* @tgt_is_tgt_type_adrastea: To check QCS40X target type.
* @tgt_get_tgt_type: Get target type
* @tgt_get_tgt_version: Get target version
* @tgt_get_tgt_revision: Get target revision
*/
struct wlan_lmac_if_target_tx_ops {
bool (*tgt_is_tgt_type_ar900b)(uint32_t);
bool (*tgt_is_tgt_type_ipq4019)(uint32_t);
bool (*tgt_is_tgt_type_qca9984)(uint32_t);
bool (*tgt_is_tgt_type_qca9888)(uint32_t);
bool (*tgt_is_tgt_type_adrastea)(uint32_t);
uint32_t (*tgt_get_tgt_type)(struct wlan_objmgr_psoc *psoc);
uint32_t (*tgt_get_tgt_version)(struct wlan_objmgr_psoc *psoc);
uint32_t (*tgt_get_tgt_revision)(struct wlan_objmgr_psoc *psoc);
};
#ifdef WLAN_OFFCHAN_TXRX_ENABLE
/**
* struct wlan_lmac_if_offchan_txrx_ops - Function pointers to check target
* capabilities related to offchan txrx.
* @offchan_data_tid_support: To check if target supports separate tid for
* offchan data tx.
*/
struct wlan_lmac_if_offchan_txrx_ops {
bool (*offchan_data_tid_support)(struct wlan_objmgr_pdev *pdev);
};
#endif
#ifdef WLAN_SUPPORT_GREEN_AP
struct wlan_green_ap_egap_params;
/**
* struct wlan_lmac_if_green_ap_tx_ops - structure of tx function
* pointers for green ap component
* @enable_egap: function pointer to send enable egap indication to fw
* @ps_on_off_send: function pointer to send enable/disable green ap ps to fw
*/
struct wlan_lmac_if_green_ap_tx_ops {
QDF_STATUS (*enable_egap)(struct wlan_objmgr_pdev *pdev,
struct wlan_green_ap_egap_params *egap_params);
QDF_STATUS (*ps_on_off_send)(struct wlan_objmgr_pdev *pdev,
bool value, uint8_t pdev_id);
QDF_STATUS (*reset_dev)(struct wlan_objmgr_pdev *pdev);
uint16_t (*get_current_channel)(struct wlan_objmgr_pdev *pdev);
uint64_t (*get_current_channel_flags)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*get_capab)(struct wlan_objmgr_pdev *pdev);
};
#endif
/**
* struct wlan_lmac_if_tx_ops - south bound tx function pointers
* @mgmt_txrx_tx_ops: mgmt txrx tx ops
* @scan: scan tx ops
* @dfs_tx_ops: dfs tx ops.
* @green_ap_tx_ops: green_ap tx_ops
* @cp_stats_tx_ops: cp stats tx_ops
*
* Callback function tabled to be registered with umac.
* umac will use the functional table to send events/frames to lmac/wmi
*/
struct wlan_lmac_if_tx_ops {
/* Components to declare function pointers required by the module
* in component specific structure.
* The component specific ops structure can be declared in this file
* only
*/
struct wlan_lmac_if_mgmt_txrx_tx_ops mgmt_txrx_tx_ops;
struct wlan_lmac_if_scan_tx_ops scan;
#ifdef CONVERGED_P2P_ENABLE
struct wlan_lmac_if_p2p_tx_ops p2p;
#endif
#ifdef QCA_SUPPORT_SON
struct wlan_lmac_if_son_tx_ops son_tx_ops;
#endif
#ifdef WLAN_ATF_ENABLE
struct wlan_lmac_if_atf_tx_ops atf_tx_ops;
#endif
#ifdef QCA_SUPPORT_CP_STATS
struct wlan_lmac_if_cp_stats_tx_ops cp_stats_tx_ops;
#endif
#ifdef WLAN_SA_API_ENABLE
struct wlan_lmac_if_sa_api_tx_ops sa_api_tx_ops;
#endif
#ifdef WLAN_CFR_ENABLE
struct wlan_lmac_if_cfr_tx_ops cfr_tx_ops;
#endif
#ifdef WLAN_CONV_SPECTRAL_ENABLE
struct wlan_lmac_if_sptrl_tx_ops sptrl_tx_ops;
#endif
#ifdef WLAN_CONV_CRYPTO_SUPPORTED
struct wlan_lmac_if_crypto_tx_ops crypto_tx_ops;
#endif
#ifdef WIFI_POS_CONVERGED
struct wlan_lmac_if_wifi_pos_tx_ops wifi_pos_tx_ops;
#endif
struct wlan_lmac_if_reg_tx_ops reg_ops;
struct wlan_lmac_if_dfs_tx_ops dfs_tx_ops;
#ifdef FEATURE_WLAN_TDLS
struct wlan_lmac_if_tdls_tx_ops tdls_tx_ops;
#endif
#ifdef WLAN_SUPPORT_FILS
struct wlan_lmac_if_fd_tx_ops fd_tx_ops;
#endif
struct wlan_lmac_if_mlme_tx_ops mops;
struct wlan_lmac_if_target_tx_ops target_tx_ops;
#ifdef WLAN_OFFCHAN_TXRX_ENABLE
struct wlan_lmac_if_offchan_txrx_ops offchan_txrx_ops;
#endif
#ifdef DIRECT_BUF_RX_ENABLE
struct wlan_lmac_if_direct_buf_rx_tx_ops dbr_tx_ops;
#endif
#ifdef WLAN_SUPPORT_GREEN_AP
struct wlan_lmac_if_green_ap_tx_ops green_ap_tx_ops;
#endif
struct wlan_lmac_if_ftm_tx_ops ftm_tx_ops;
};
/**
* struct wlan_lmac_if_mgmt_txrx_rx_ops - structure of rx function
* pointers for mgmt txrx component
* @mgmt_tx_completion_handler: function pointer to give tx completions
* to mgmt txrx comp.
* @mgmt_rx_frame_handler: function pointer to give rx frame to mgmt txrx comp.
* @mgmt_txrx_get_nbuf_from_desc_id: function pointer to get nbuf from desc id
* @mgmt_txrx_get_peer_from_desc_id: function pointer to get peer from desc id
* @mgmt_txrx_get_vdev_id_from_desc_id: function pointer to get vdev id from
* desc id
*/
struct wlan_lmac_if_mgmt_txrx_rx_ops {
QDF_STATUS (*mgmt_tx_completion_handler)(
struct wlan_objmgr_pdev *pdev,
uint32_t desc_id, uint32_t status,
void *tx_compl_params);
QDF_STATUS (*mgmt_rx_frame_handler)(
struct wlan_objmgr_psoc *psoc,
qdf_nbuf_t buf,
struct mgmt_rx_event_params *mgmt_rx_params);
qdf_nbuf_t (*mgmt_txrx_get_nbuf_from_desc_id)(
struct wlan_objmgr_pdev *pdev,
uint32_t desc_id);
struct wlan_objmgr_peer * (*mgmt_txrx_get_peer_from_desc_id)(
struct wlan_objmgr_pdev *pdev, uint32_t desc_id);
uint8_t (*mgmt_txrx_get_vdev_id_from_desc_id)(
struct wlan_objmgr_pdev *pdev,
uint32_t desc_id);
uint32_t (*mgmt_txrx_get_free_desc_pool_count)(
struct wlan_objmgr_pdev *pdev);
};
struct wlan_lmac_if_reg_rx_ops {
QDF_STATUS (*master_list_handler)(struct cur_regulatory_info
*reg_info);
QDF_STATUS (*reg_11d_new_cc_handler)(struct wlan_objmgr_psoc *psoc,
struct reg_11d_new_country *reg_11d_new_cc);
QDF_STATUS (*reg_set_regdb_offloaded)(struct wlan_objmgr_psoc *psoc,
bool val);
QDF_STATUS (*reg_set_11d_offloaded)(struct wlan_objmgr_psoc *psoc,
bool val);
QDF_STATUS (*get_dfs_region)(struct wlan_objmgr_pdev *pdev,
enum dfs_reg *dfs_reg);
QDF_STATUS (*reg_ch_avoid_event_handler)(struct wlan_objmgr_psoc *psoc,
struct ch_avoid_ind_type *ch_avoid_ind);
uint32_t (*reg_freq_to_chan)(struct wlan_objmgr_pdev *pdev,
uint32_t freq);
QDF_STATUS (*reg_set_chan_144)(struct wlan_objmgr_pdev *pdev,
bool enable_ch_144);
bool (*reg_get_chan_144)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*reg_program_default_cc)(struct wlan_objmgr_pdev *pdev,
uint16_t regdmn);
QDF_STATUS (*reg_get_current_regdomain)(struct wlan_objmgr_pdev *pdev,
struct cur_regdmn_info *cur_regdmn);
QDF_STATUS (*reg_enable_dfs_channels)(struct wlan_objmgr_pdev *pdev,
bool dfs_enable);
QDF_STATUS (*reg_modify_pdev_chan_range)(struct
wlan_objmgr_pdev *pdev);
bool (*reg_ignore_fw_reg_offload_ind)(struct wlan_objmgr_psoc *psoc);
};
#ifdef CONVERGED_P2P_ENABLE
/* forward declarations for p2p rx ops */
struct p2p_noa_info;
struct p2p_lo_event;
struct p2p_set_mac_filter_evt;
/**
* struct wlan_lmac_if_p2p_rx_ops - structure of rx function pointers
* for P2P component
* @lo_ev_handler: function pointer to give listen offload event
* @noa_ev_handler: function pointer to give noa event
* @add_mac_addr_filter_evt_handler: function pointer to process add mac addr
* rx filter event
*/
struct wlan_lmac_if_p2p_rx_ops {
#ifdef FEATURE_P2P_LISTEN_OFFLOAD
QDF_STATUS (*lo_ev_handler)(struct wlan_objmgr_psoc *psoc,
struct p2p_lo_event *event_info);
#endif
QDF_STATUS (*noa_ev_handler)(struct wlan_objmgr_psoc *psoc,
struct p2p_noa_info *event_info);
QDF_STATUS (*add_mac_addr_filter_evt_handler)(
struct wlan_objmgr_psoc *psoc,
struct p2p_set_mac_filter_evt *event_info);
};
#endif
#ifdef WLAN_ATF_ENABLE
/**
* struct wlan_lmac_if_atf_rx_ops - ATF south bound rx function pointers
* @atf_get_atf_commit: Get ATF commit state
* @atf_get_fmcap: Get firmware capability for ATF
* @atf_get_obss_scale: Get OBSS scale
* @atf_get_mode: Get mode of ATF
* @atf_get_msdu_desc: Get msdu desc for ATF
* @atf_get_max_vdevs: Get maximum vdevs for a Radio
* @atf_get_peers: Get number of peers for a radio
* @atf_get_tput_based: Get throughput based enabled/disabled
* @atf_get_logging: Get logging enabled/disabled
* @atf_update_buf_held: Set Num buf held by subgroup
* @atf_get_ssidgroup: Get ssid group state
* @atf_get_vdev_ac_blk_cnt: Get AC block count for vdev
* @atf_get_peer_blk_txbitmap: Get peer tx traffic AC bitmap
* @atf_get_vdev_blk_txtraffic: Get vdev tx traffic block state
* @atf_get_sched: Get ATF scheduled policy
* @atf_get_tx_tokens: Get Tx tokens
* @atf_buf_distribute: Distribute Buffers
* @atf_get_tx_tokens_common: Get common tx tokens
* @atf_get_shadow_alloted_tx_tokens: Get shadow alloted tx tokens
* @atf_get_peer_stats: Get atf peer stats
* @atf_adjust_subgroup_txtokens: Adjust tokens based on actual duration
* @atf_account_subgroup_txtokens: Estimate tx time & update subgroup tokens
* @atf_subgroup_free_buf: On tx completion, update num buf held
* @atf_update_subgroup_tidstate: TID state (Paused/unpaused) of node
* @atf_get_subgroup_airtime: Get subgroup airtime
* @atf_get_token_allocated: Get atf token allocated
* @atf_get_token_utilized: Get atf token utilized
* @atf_set_sched: Set ATF schedule policy
* @atf_set_fmcap: Set firmware capability for ATF
* @atf_set_obss_scale: Set ATF obss scale
* @atf_set_msdu_desc: Set msdu desc
* @atf_set_max_vdevs: Set maximum vdevs number
* @atf_set_peers: Set peers number
* @atf_set_peer_stats: Set peer stats
* @atf_set_vdev_blk_txtraffic: Set Block/unblock vdev tx traffic
* @atf_peer_blk_txtraffic: Block peer tx traffic
* @atf_peer_unblk_txtraffic: Unblock peer tx traffic
* @atf_set_token_allocated: Set atf token allocated
* @atf_set_token_utilized: Set atf token utilized
*/
struct wlan_lmac_if_atf_rx_ops {
uint8_t (*atf_get_atf_commit)(struct wlan_objmgr_pdev *pdev);
uint32_t (*atf_get_fmcap)(struct wlan_objmgr_psoc *psoc);
uint32_t (*atf_get_obss_scale)(struct wlan_objmgr_pdev *pdev);
uint32_t (*atf_get_mode)(struct wlan_objmgr_psoc *psoc);
uint32_t (*atf_get_msdu_desc)(struct wlan_objmgr_psoc *psoc);
uint32_t (*atf_get_max_vdevs)(struct wlan_objmgr_psoc *psoc);
uint32_t (*atf_get_peers)(struct wlan_objmgr_psoc *psoc);
uint32_t (*atf_get_tput_based)(struct wlan_objmgr_pdev *pdev);
uint32_t (*atf_get_logging)(struct wlan_objmgr_pdev *pdev);
void* (*atf_update_buf_held)(struct wlan_objmgr_peer *peer,
int8_t ac);
uint32_t (*atf_get_ssidgroup)(struct wlan_objmgr_pdev *pdev);
uint32_t (*atf_get_vdev_ac_blk_cnt)(struct wlan_objmgr_vdev *vdev);
uint8_t (*atf_get_peer_blk_txbitmap)(struct wlan_objmgr_peer *peer);
uint8_t (*atf_get_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev);
uint32_t (*atf_get_sched)(struct wlan_objmgr_pdev *pdev);
uint32_t (*atf_get_tx_tokens)(struct wlan_objmgr_peer *peer);
uint32_t (*atf_buf_distribute)(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer,
int8_t ac);
uint32_t (*atf_get_txtokens_common)(struct wlan_objmgr_pdev *pdev);
uint32_t (*atf_get_shadow_alloted_tx_tokens)(
struct wlan_objmgr_pdev *pdev);
void (*atf_get_peer_stats)(struct wlan_objmgr_peer *peer,
struct atf_stats *stats);
QDF_STATUS
(*atf_adjust_subgroup_txtokens)(struct wlan_objmgr_peer *pr,
uint8_t ac, uint32_t actual_duration,
uint32_t est_duration);
QDF_STATUS
(*atf_account_subgroup_txtokens)(struct wlan_objmgr_peer *pr,
uint8_t ac,
uint32_t duration);
QDF_STATUS
(*atf_subgroup_free_buf)(uint16_t buf_acc_size, void *bf_atf_sg);
QDF_STATUS
(*atf_update_subgroup_tidstate)(struct wlan_objmgr_peer *peer,
uint8_t atf_nodepaused);
uint8_t (*atf_get_subgroup_airtime)(struct wlan_objmgr_peer *peer,
uint8_t ac);
uint16_t (*atf_get_token_allocated)(struct wlan_objmgr_peer *peer);
uint16_t (*atf_get_token_utilized)(struct wlan_objmgr_peer *peer);
void (*atf_set_sched)(struct wlan_objmgr_pdev *pdev, uint32_t value);
void (*atf_set_fmcap)(struct wlan_objmgr_psoc *psoc, uint32_t value);
void (*atf_set_obss_scale)(struct wlan_objmgr_pdev *pdev,
uint32_t value);
void (*atf_set_msdu_desc)(struct wlan_objmgr_psoc *psoc,
uint32_t value);
void (*atf_set_max_vdevs)(struct wlan_objmgr_psoc *psoc,
uint32_t value);
void (*atf_set_peers)(struct wlan_objmgr_psoc *psoc, uint32_t value);
void (*atf_set_peer_stats)(struct wlan_objmgr_peer *peer,
struct atf_stats *stats);
void (*atf_set_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev,
uint8_t value);
void (*atf_peer_blk_txtraffic)(struct wlan_objmgr_peer *peer,
int8_t ac_id);
void (*atf_peer_unblk_txtraffic)(struct wlan_objmgr_peer *peer,
int8_t ac_id);
void (*atf_set_token_allocated)(struct wlan_objmgr_peer *peer,
uint16_t value);
void (*atf_set_token_utilized)(struct wlan_objmgr_peer *peer,
uint16_t value);
};
#endif
#ifdef WLAN_SUPPORT_FILS
/**
* struct wlan_lmac_if_fd_rx_ops - FILS Discovery specific Rx function pointers
* @fd_is_fils_enable: FILS enabled or not
* @fd_alloc: Allocate FD buffer
* @fd_stop: Stop and free deferred FD buffer
* @fd_free: Free FD frame buffer
* @fd_get_valid_fd_period: Get valid FD period
* @fd_swfda_handler: SWFDA event handler
* @fd_offload: Offload FD frame
*/
struct wlan_lmac_if_fd_rx_ops {
uint8_t (*fd_is_fils_enable)(struct wlan_objmgr_vdev *vdev);
void (*fd_alloc)(struct wlan_objmgr_vdev *vdev);
void (*fd_stop)(struct wlan_objmgr_vdev *vdev);
void (*fd_free)(struct wlan_objmgr_vdev *vdev);
uint32_t (*fd_get_valid_fd_period)(struct wlan_objmgr_vdev *vdev,
uint8_t *is_modified);
QDF_STATUS (*fd_swfda_handler)(struct wlan_objmgr_vdev *vdev);
QDF_STATUS (*fd_offload)(struct wlan_objmgr_vdev *vdev,
uint32_t vdev_id);
};
#endif
#ifdef WLAN_SA_API_ENABLE
/**
* struct wlan_lmac_if_sa_api_rx_ops - SA API south bound rx function pointers
*/
struct wlan_lmac_if_sa_api_rx_ops {
uint32_t (*sa_api_get_sa_supported)(struct wlan_objmgr_psoc *psoc);
uint32_t (*sa_api_get_validate_sw)(struct wlan_objmgr_psoc *psoc);
void (*sa_api_enable_sa)(struct wlan_objmgr_psoc *psoc, uint32_t value);
uint32_t (*sa_api_get_sa_enable)(struct wlan_objmgr_psoc *psoc);
void (*sa_api_peer_assoc_hanldler)(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer, struct sa_rate_cap *);
uint32_t (*sa_api_update_tx_feedback)(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer,
struct sa_tx_feedback *feedback);
uint32_t (*sa_api_update_rx_feedback)(struct wlan_objmgr_pdev *pdev,
struct wlan_objmgr_peer *peer,
struct sa_rx_feedback *feedback);
uint32_t (*sa_api_ucfg_set_param)(struct wlan_objmgr_pdev *pdev,
char *val);
uint32_t (*sa_api_ucfg_get_param)(struct wlan_objmgr_pdev *pdev,
char *val);
uint32_t (*sa_api_is_tx_feedback_enabled)
(struct wlan_objmgr_pdev *pdev);
uint32_t (*sa_api_is_rx_feedback_enabled)
(struct wlan_objmgr_pdev *pdev);
uint32_t (*sa_api_convert_rate_2g)(uint32_t rate);
uint32_t (*sa_api_convert_rate_5g)(uint32_t rate);
uint32_t (*sa_api_get_sa_mode)(struct wlan_objmgr_pdev *pdev);
uint32_t (*sa_api_get_beacon_txantenna)(struct wlan_objmgr_pdev *pdev);
uint32_t (*sa_api_cwm_action)(struct wlan_objmgr_pdev *pdev);
};
#endif
#ifdef WLAN_CFR_ENABLE
/**
* struct wlan_lmac_if_cfr_rx_ops - CFR south bound rx function pointers
* @cfr_support_set: Set the CFR support based on FW advert
* @cfr_info_send: Send cfr info to upper layers
*/
struct wlan_lmac_if_cfr_rx_ops {
void (*cfr_support_set)(struct wlan_objmgr_psoc *psoc, uint32_t value);
uint32_t (*cfr_info_send)(struct wlan_objmgr_pdev *pdev, void *head,
size_t hlen, void *data, size_t dlen,
void *tail, size_t tlen);
};
#endif
#ifdef WLAN_CONV_SPECTRAL_ENABLE
/**
* struct wlan_lmac_if_sptrl_rx_ops - Spectral south bound Rx operations
*
* @sptrlro_get_target_handle: Get Spectral handle for target/LMAC private data
* @sptrlro_vdev_get_chan_freq_seg2: Get secondary 80 center frequency
* @sptrlro_spectral_is_feature_disabled: Check if spectral feature is disabled
*/
struct wlan_lmac_if_sptrl_rx_ops {
void * (*sptrlro_get_target_handle)(struct wlan_objmgr_pdev *pdev);
int16_t (*sptrlro_vdev_get_chan_freq)(struct wlan_objmgr_vdev *vdev);
int16_t (*sptrlro_vdev_get_chan_freq_seg2)
(struct wlan_objmgr_vdev *vdev);
enum phy_ch_width (*sptrlro_vdev_get_ch_width)(
struct wlan_objmgr_vdev *vdev);
int (*sptrlro_vdev_get_sec20chan_freq_mhz)(
struct wlan_objmgr_vdev *vdev,
uint16_t *sec20chan_freq);
bool (*sptrlro_spectral_is_feature_disabled)(
struct wlan_objmgr_psoc *psoc);
};
#endif /* WLAN_CONV_SPECTRAL_ENABLE */
#ifdef WIFI_POS_CONVERGED
/**
* struct wlan_lmac_if_wifi_pos_rx_ops - structure of rx function
* pointers for wifi_pos component
* @oem_rsp_event_rx: callback for WMI_OEM_RESPONSE_EVENTID
*/
struct wlan_lmac_if_wifi_pos_rx_ops {
int (*oem_rsp_event_rx)(struct wlan_objmgr_psoc *psoc,
struct oem_data_rsp *oem_rsp);
};
#endif
/**
* struct wlan_lmac_if_dfs_rx_ops - Function pointers to call dfs functions
* from lmac/offload.
* @dfs_get_radars: Calls init radar table functions.
* @dfs_process_phyerr: Process phyerr.
* @dfs_destroy_object: Destroys the DFS object.
* @dfs_radar_enable: Enables the radar.
* @dfs_is_radar_enabled: Check if the radar is enabled.
* @dfs_control: Used to process ioctls related to DFS.
* @dfs_is_precac_timer_running: Check whether precac timer is running.
* @dfs_find_vht80_chan_for_precac: Find VHT80 channel for precac.
* @dfs_cancel_precac_timer: Cancel the precac timer.
* @dfs_override_precac_timeout: Override the default precac timeout.
* @dfs_set_precac_enable: Set precac enable flag.
* @dfs_get_legacy_precac_enable: Get the precac enable flag for
* partial offload (legacy) chipsets.
* @dfs_set_precac_intermediate_chan: Set intermediate channel for precac.
* @dfs_get_precac_intermediate_chan: Get intermediate channel for precac.
* @dfs_precac_preferred_chan: Configure preferred channel during
* precac.
* dfs_get_precac_chan_state: Get precac status for given channel.
* dfs_start_precac_timer: Start precac timer.
* @dfs_get_override_precac_timeout: Get precac timeout.
* @dfs_set_current_channel: Set DFS current channel.
* @dfs_process_radar_ind: Process radar found indication.
* @dfs_dfs_cac_complete_ind: Process cac complete indication.
* @dfs_agile_precac_start: Initiate Agile PreCAC run.
* @dfs_set_agile_precac_state: Set agile precac state.
* @dfs_reset_adfs_config: Reset agile dfs variables.
* @dfs_dfs_ocac_complete_ind: Process offchan cac complete indication.
* @dfs_stop: Clear dfs timers.
* @dfs_reinit_timers: Reinitialize DFS timers.
* @dfs_enable_stadfs: Enable/Disable STADFS capability.
* @dfs_is_stadfs_enabled: Get STADFS capability value.
* @dfs_process_phyerr_filter_offload:Process radar event.
* @dfs_is_phyerr_filter_offload: Check whether phyerr filter is offload.
* @dfs_action_on_status: Trigger the action to be taken based on
* on host dfs status received from fw.
* @dfs_override_status_timeout: Override the value of host dfs status
* wait timeout.
* @dfs_get_override_status_timeout: Get the value of host dfs status wait
* timeout.
* @dfs_reset_spoof_test: Checks if radar detection is enabled.
* @dfs_is_disable_radar_marking_set: Check if dis_radar_marking param is set.
* @dfs_allow_hw_pulses: Set or unset dfs_allow_hw_pulses which
* allow or disallow HW pulses.
* @dfs_is_hw_pulses_allowed: Check if HW pulses are allowed or not.
* @dfs_set_fw_adfs_support: Set the agile DFS FW support in DFS.
* @dfs_reset_dfs_prevchan: Reset DFS previous channel structure.
*/
struct wlan_lmac_if_dfs_rx_ops {
QDF_STATUS (*dfs_get_radars)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*dfs_process_phyerr)(struct wlan_objmgr_pdev *pdev,
void *buf,
uint16_t datalen,
uint8_t r_rssi,
uint8_t r_ext_rssi,
uint32_t r_rs_tstamp,
uint64_t r_fulltsf);
QDF_STATUS (*dfs_destroy_object)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*dfs_radar_enable)(struct wlan_objmgr_pdev *pdev,
int no_cac,
uint32_t opmode);
void (*dfs_is_radar_enabled)(struct wlan_objmgr_pdev *pdev,
int *ignore_dfs);
QDF_STATUS (*dfs_control)(struct wlan_objmgr_pdev *pdev,
u_int id,
void *indata,
uint32_t insize,
void *outdata,
uint32_t *outsize,
int *error);
QDF_STATUS (*dfs_is_precac_timer_running)(struct wlan_objmgr_pdev *pdev,
bool *is_precac_timer_running
);
QDF_STATUS
(*dfs_find_vht80_chan_for_precac)(struct wlan_objmgr_pdev *pdev,
uint32_t chan_mode,
uint8_t ch_freq_seg1,
uint32_t *cfreq1,
uint32_t *cfreq2,
uint32_t *phy_mode,
bool *dfs_set_cfreq2,
bool *set_agile);
QDF_STATUS (*dfs_agile_precac_start)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*dfs_set_agile_precac_state)(struct wlan_objmgr_pdev *pdev,
int agile_precac_state);
QDF_STATUS (*dfs_reset_adfs_config)(struct wlan_objmgr_psoc *psoc);
QDF_STATUS
(*dfs_dfs_ocac_complete_ind)(struct wlan_objmgr_pdev *pdev,
struct vdev_adfs_complete_status *ocac_st);
QDF_STATUS (*dfs_start_precac_timer)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*dfs_cancel_precac_timer)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*dfs_override_precac_timeout)(
struct wlan_objmgr_pdev *pdev,
int precac_timeout);
QDF_STATUS (*dfs_set_precac_enable)(struct wlan_objmgr_pdev *pdev,
uint32_t value);
QDF_STATUS
(*dfs_get_legacy_precac_enable)(struct wlan_objmgr_pdev *pdev,
bool *buff);
QDF_STATUS (*dfs_get_agile_precac_enable)(struct wlan_objmgr_pdev *pdev,
bool *buff);
#ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT
QDF_STATUS (*dfs_set_precac_intermediate_chan)(struct wlan_objmgr_pdev *pdev,
uint32_t value);
QDF_STATUS (*dfs_get_precac_intermediate_chan)(struct wlan_objmgr_pdev *pdev,
int *buff);
bool (*dfs_decide_precac_preferred_chan)(struct wlan_objmgr_pdev *pdev,
uint8_t *pref_chan,
enum wlan_phymode mode);
enum precac_chan_state (*dfs_get_precac_chan_state)(struct wlan_objmgr_pdev *pdev,
uint8_t precac_chan);
#endif
QDF_STATUS (*dfs_get_override_precac_timeout)(
struct wlan_objmgr_pdev *pdev,
int *precac_timeout);
QDF_STATUS (*dfs_set_current_channel)(struct wlan_objmgr_pdev *pdev,
uint16_t ic_freq,
uint64_t ic_flags,
uint16_t ic_flagext,
uint8_t ic_ieee,
uint8_t ic_vhtop_ch_freq_seg1,
uint8_t ic_vhtop_ch_freq_seg2);
#ifdef DFS_COMPONENT_ENABLE
QDF_STATUS (*dfs_process_radar_ind)(struct wlan_objmgr_pdev *pdev,
struct radar_found_info *radar_found);
QDF_STATUS (*dfs_dfs_cac_complete_ind)(struct wlan_objmgr_pdev *pdev,
uint32_t vdev_id);
#endif
QDF_STATUS (*dfs_stop)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*dfs_reinit_timers)(struct wlan_objmgr_pdev *pdev);
void (*dfs_enable_stadfs)(struct wlan_objmgr_pdev *pdev, bool val);
bool (*dfs_is_stadfs_enabled)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*dfs_process_phyerr_filter_offload)(
struct wlan_objmgr_pdev *pdev,
struct radar_event_info *wlan_radar_info);
QDF_STATUS (*dfs_is_phyerr_filter_offload)(
struct wlan_objmgr_psoc *psoc,
bool *is_phyerr_filter_offload);
QDF_STATUS (*dfs_action_on_status)(struct wlan_objmgr_pdev *pdev,
u_int32_t *dfs_status_check);
QDF_STATUS (*dfs_override_status_timeout)(
struct wlan_objmgr_pdev *pdev,
int status_timeout);
QDF_STATUS (*dfs_get_override_status_timeout)(
struct wlan_objmgr_pdev *pdev,
int *status_timeout);
QDF_STATUS (*dfs_reset_spoof_test)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*dfs_is_disable_radar_marking_set)(struct wlan_objmgr_pdev
*pdev,
bool *disable_radar_marking);
QDF_STATUS (*dfs_set_nol_subchannel_marking)(
struct wlan_objmgr_pdev *pdev,
bool value);
QDF_STATUS (*dfs_get_nol_subchannel_marking)(
struct wlan_objmgr_pdev *pdev,
bool *value);
QDF_STATUS (*dfs_set_bw_reduction)(struct wlan_objmgr_pdev *pdev,
bool value);
QDF_STATUS (*dfs_is_bw_reduction_needed)(struct wlan_objmgr_pdev *pdev,
bool *bw_reduce);
void (*dfs_allow_hw_pulses)(struct wlan_objmgr_pdev *pdev,
bool allow_hw_pulses);
bool (*dfs_is_hw_pulses_allowed)(struct wlan_objmgr_pdev *pdev);
void (*dfs_set_fw_adfs_support)(struct wlan_objmgr_pdev *pdev,
bool fw_adfs_support_160,
bool fw_adfs_support_non_160);
void (*dfs_reset_dfs_prevchan)(struct wlan_objmgr_pdev *pdev);
};
/**
* struct wlan_lmac_if_mlme_rx_ops: Function pointer to call MLME functions
* @wlan_mlme_scan_start: function to start scan
* @wlan_mlme_register_pm_event_handler: function to register pm event
* @wlan_mlme_unregister_pm_event_handler: function unregister for pm event
* @wlan_mlme_register_vdev_event_handler: function to register for vdev event
* @wlan_mlme_unregister_vdev_event_handler: functiont o unregister for vdev
* event
* @wlan_mlme_send_probe_request: function to send probe
* @wlan_mlme_resmgr_request_bsschan: function to request bsschan
* @wlan_mlme_resmgr_request_offchan: function to request offchan
* @wlan_mlme_resmgr_active: function to check resmgr status
* @wlan_mlme_get_cw_inter_found: function to get cw interference
* @wlan_mlme_set_home_channel: function to set home channel
* @wlan_mlme_set_channel: function to set channel
* @wlan_mlme_start_record_stats: functiont to start record stats
* @wlan_mlme_end_record_stats: function to end recording of stats
* @wlan_mlme_get_enh_rpt_ind: function to get enhanced repeater index
* @wlan_mlme_pause: function to pause mlme
* @wlan_mlme_unpause: function to unpause mlme
* @wlan_mlme_vdev_pause_control: function to set vdev pause control
* @wlan_mlme_sta_power_pause: function to set sta power pause
* @wlan_mlme_sta_power_unpause: function to set sta power pause
* @wlan_mlme_set_vdev_sleep: function to sleep vdev sleep
* @wlan_mlme_set_vdev_wakeup: function to set vdev wakeup
* @wlan_mlme_get_traffic_indication_timestamp: function to get tid timestamp
* @wlan_mlme_get_acs_in_progress: function to get ACS progress
* @wlan_mlme_end_scan: function to end scan
* @vdev_mgr_get_response_timer_info: function to get response timer info
* @vdev_mgr_start_response: function to handle start response
* @vdev_mgr_stop_response: function to handle stop response
* @vdev_mgr_delete_response: function to handle delete response
* @vdev_mgr_offload_bcn_tx_status_event_handle: function to handle offload
* beacon tx
* @vdev_mgr_tbttoffset_update_handle: function to handle tbtt offset event
* @vdev_mgr_peer_delete_all_response: function to handle vdev delete all peer
* event
* @vdev_mgr_get_wakelock_info: function to get wakelock info
*/
struct wlan_lmac_if_mlme_rx_ops {
void (*wlan_mlme_scan_start)(struct wlan_objmgr_pdev *pdev);
void (*wlan_mlme_register_pm_event_handler)(
struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id);
void (*wlan_mlme_unregister_pm_event_handler)(
struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id);
QDF_STATUS (*wlan_mlme_register_vdev_event_handler)(
struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id);
QDF_STATUS (*wlan_mlme_unregister_vdev_event_handler)(
struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id);
int (*wlan_mlme_send_probe_request)(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id,
u_int8_t *destination,
u_int8_t *bssid,
u_int8_t *ssid,
u_int32_t ssidlen,
u_int8_t *ie,
size_t len);
int (*wlan_mlme_resmgr_request_bsschan)(struct wlan_objmgr_pdev *pdev);
int (*wlan_mlme_resmgr_request_offchan)(struct wlan_objmgr_pdev *pdev,
u_int32_t freq,
u_int32_t flags,
u_int32_t estimated_offchannel_time);
int (*wlan_mlme_resmgr_active)(struct wlan_objmgr_pdev *pdev);
int (*wlan_mlme_get_cw_inter_found)(struct wlan_objmgr_pdev *pdev);
int (*wlan_mlme_set_home_channel)(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id);
int (*wlan_mlme_set_channel)(struct wlan_objmgr_pdev *pdev,
u_int32_t freq,
u_int32_t flags);
void (*wlan_mlme_start_record_stats)(struct wlan_objmgr_pdev *pdev);
void (*wlan_mlme_end_record_stats)(struct wlan_objmgr_pdev *pdev);
int (*wlan_mlme_get_enh_rpt_ind)(struct wlan_objmgr_pdev *pdev);
int (*wlan_mlme_pause)(struct wlan_objmgr_pdev *pdev);
void (*wlan_mlme_unpause)(struct wlan_objmgr_pdev *pdev);
int (*wlan_mlme_vdev_pause_control)(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id);
int (*wlan_mlme_sta_power_pause)(
struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id,
u_int32_t timeout);
int (*wlan_mlme_sta_power_unpause)(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id);
int (*wlan_mlme_set_vdev_sleep)(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id);
int (*wlan_mlme_set_vdev_wakeup)(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id);
qdf_time_t (*wlan_mlme_get_traffic_indication_timestamp)(
struct wlan_objmgr_pdev *pdev);
int (*wlan_mlme_get_acs_in_progress)(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id);
void (*wlan_mlme_end_scan)(struct wlan_objmgr_pdev *pdev);
struct vdev_response_timer *(*vdev_mgr_get_response_timer_info)(
struct wlan_objmgr_vdev *vdev);
QDF_STATUS (*vdev_mgr_start_response)(
struct wlan_objmgr_psoc *psoc,
struct vdev_start_response *rsp);
QDF_STATUS (*vdev_mgr_stop_response)(
struct wlan_objmgr_psoc *psoc,
struct vdev_stop_response *rsp);
QDF_STATUS (*vdev_mgr_delete_response)(
struct wlan_objmgr_psoc *psoc,
struct vdev_delete_response *rsp);
QDF_STATUS (*vdev_mgr_offload_bcn_tx_status_event_handle)(
uint32_t vdev_id,
uint32_t tx_status);
QDF_STATUS (*vdev_mgr_tbttoffset_update_handle)(
uint32_t num_vdevs,
bool is_ext);
QDF_STATUS (*vdev_mgr_peer_delete_all_response)(
struct wlan_objmgr_psoc *psoc,
struct peer_delete_all_response *rsp);
#ifdef FEATURE_VDEV_RSP_WAKELOCK
struct vdev_mlme_wakelock *(*vdev_mgr_get_wakelock_info)(
struct wlan_objmgr_vdev *vdev);
#endif
};
#ifdef WLAN_SUPPORT_GREEN_AP
struct wlan_lmac_if_green_ap_rx_ops {
bool (*is_ps_enabled)(struct wlan_objmgr_pdev *pdev);
bool (*is_dbg_print_enabled)(struct wlan_objmgr_pdev *pdev);
QDF_STATUS (*ps_get)(struct wlan_objmgr_pdev *pdev, uint8_t *value);
QDF_STATUS (*ps_set)(struct wlan_objmgr_pdev *pdev, uint8_t value);
void (*suspend_handle)(struct wlan_objmgr_pdev *pdev);
};
#endif
/**
* struct wlan_lmac_if_rx_ops - south bound rx function pointers
* @mgmt_txrx_tx_ops: mgmt txrx rx ops
* @scan: scan rx ops
* @dfs_rx_ops: dfs rx ops.
* @cp_stats_rx_ops: cp stats rx ops
* @cfr_rx_ops: cfr rx ops
*
* Callback function tabled to be registered with lmac/wmi.
* lmac will use the functional table to send events/frames to umac
*/
struct wlan_lmac_if_rx_ops {
/* Components to declare function pointers required by the module
* in component specific structure.
* The component specific ops structure can be declared in this file
* only
*/
struct wlan_lmac_if_mgmt_txrx_rx_ops mgmt_txrx_rx_ops;
struct wlan_lmac_if_scan_rx_ops scan;
#ifdef CONVERGED_P2P_ENABLE
struct wlan_lmac_if_p2p_rx_ops p2p;
#endif
#ifdef WLAN_ATF_ENABLE
struct wlan_lmac_if_atf_rx_ops atf_rx_ops;
#endif
#ifdef QCA_SUPPORT_CP_STATS
struct wlan_lmac_if_cp_stats_rx_ops cp_stats_rx_ops;
#endif
#ifdef WLAN_SA_API_ENABLE
struct wlan_lmac_if_sa_api_rx_ops sa_api_rx_ops;
#endif
#ifdef WLAN_CFR_ENABLE
struct wlan_lmac_if_cfr_rx_ops cfr_rx_ops;
#endif
#ifdef WLAN_CONV_SPECTRAL_ENABLE
struct wlan_lmac_if_sptrl_rx_ops sptrl_rx_ops;
#endif
#ifdef WLAN_CONV_CRYPTO_SUPPORTED
struct wlan_lmac_if_crypto_rx_ops crypto_rx_ops;
#endif
#ifdef WIFI_POS_CONVERGED
struct wlan_lmac_if_wifi_pos_rx_ops wifi_pos_rx_ops;
#endif
struct wlan_lmac_if_reg_rx_ops reg_rx_ops;
struct wlan_lmac_if_dfs_rx_ops dfs_rx_ops;
#ifdef FEATURE_WLAN_TDLS
struct wlan_lmac_if_tdls_rx_ops tdls_rx_ops;
#endif
#ifdef WLAN_SUPPORT_FILS
struct wlan_lmac_if_fd_rx_ops fd_rx_ops;
#endif
struct wlan_lmac_if_mlme_rx_ops mops;
#ifdef WLAN_SUPPORT_GREEN_AP
struct wlan_lmac_if_green_ap_rx_ops green_ap_rx_ops;
#endif
struct wlan_lmac_if_ftm_rx_ops ftm_rx_ops;
};
/* Function pointer to call legacy tx_ops registration in OL/WMA.
*/
extern QDF_STATUS (*wlan_lmac_if_umac_tx_ops_register)
(struct wlan_lmac_if_tx_ops *tx_ops);
#endif /* _WLAN_LMAC_IF_DEF_H_ */