linux/drivers/net/wireless/ath/ath11k/mac.c

// SPDX-License-Identifier: BSD-3-Clause-Clear
/*
 * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
 * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
 */

#include <net/mac80211.h>
#include <net/cfg80211.h>
#include <linux/etherdevice.h>
#include <linux/bitfield.h>
#include <linux/inetdevice.h>
#include <net/if_inet6.h>
#include <net/ipv6.h>

#include "mac.h"
#include "core.h"
#include "debug.h"
#include "wmi.h"
#include "hw.h"
#include "dp_tx.h"
#include "dp_rx.h"
#include "testmode.h"
#include "peer.h"
#include "debugfs_sta.h"
#include "hif.h"
#include "wow.h"

#define CHAN2G(_channel, _freq, _flags)

#define CHAN5G(_channel, _freq, _flags)

#define CHAN6G(_channel, _freq, _flags)

static const struct ieee80211_channel ath11k_2ghz_channels[] =;

static const struct ieee80211_channel ath11k_5ghz_channels[] =;

static const struct ieee80211_channel ath11k_6ghz_channels[] =;

static struct ieee80211_rate ath11k_legacy_rates[] =;

static const int
ath11k_phymodes[NUM_NL80211_BANDS][ATH11K_CHAN_WIDTH_NUM] =;

const struct htt_rx_ring_tlv_filter ath11k_mac_mon_status_filter_default =;

#define ATH11K_MAC_FIRST_OFDM_RATE_IDX
#define ath11k_g_rates
#define ath11k_g_rates_size
#define ath11k_a_rates
#define ath11k_a_rates_size

#define ATH11K_MAC_SCAN_CMD_EVT_OVERHEAD

/* Overhead due to the processing of channel switch events from FW */
#define ATH11K_SCAN_CHANNEL_SWITCH_WMI_EVT_OVERHEAD

static const u32 ath11k_smps_map[] =;

enum nl80211_he_ru_alloc ath11k_mac_phy_he_ru_to_nl80211_he_ru_alloc(u16 ru_phy)
{}

enum nl80211_he_ru_alloc ath11k_mac_he_ru_tones_to_nl80211_he_ru_alloc(u16 ru_tones)
{}

enum nl80211_he_gi ath11k_mac_he_gi_to_nl80211_he_gi(u8 sgi)
{}

u8 ath11k_mac_bw_to_mac80211_bw(u8 bw)
{}

enum ath11k_supported_bw ath11k_mac_mac80211_bw_to_ath11k_bw(enum rate_info_bw bw)
{}

int ath11k_mac_hw_ratecode_to_legacy_rate(u8 hw_rc, u8 preamble, u8 *rateidx,
					  u16 *rate)
{}

static int get_num_chains(u32 mask)
{}

u8 ath11k_mac_bitrate_to_idx(const struct ieee80211_supported_band *sband,
			     u32 bitrate)
{}

static u32
ath11k_mac_max_ht_nss(const u8 *ht_mcs_mask)
{}

static u32
ath11k_mac_max_vht_nss(const u16 *vht_mcs_mask)
{}

static u32
ath11k_mac_max_he_nss(const u16 *he_mcs_mask)
{}

static u8 ath11k_parse_mpdudensity(u8 mpdudensity)
{}

static int ath11k_mac_vif_chan(struct ieee80211_vif *vif,
			       struct cfg80211_chan_def *def)
{}

static bool ath11k_mac_bitrate_is_cck(int bitrate)
{}

u8 ath11k_mac_hw_rate_to_idx(const struct ieee80211_supported_band *sband,
			     u8 hw_rate, bool cck)
{}

static u8 ath11k_mac_bitrate_to_rate(int bitrate)
{}

static void ath11k_get_arvif_iter(void *data, u8 *mac,
				  struct ieee80211_vif *vif)
{}

struct ath11k_vif *ath11k_mac_get_arvif(struct ath11k *ar, u32 vdev_id)
{}

struct ath11k_vif *ath11k_mac_get_arvif_by_vdev_id(struct ath11k_base *ab,
						   u32 vdev_id)
{}

struct ath11k *ath11k_mac_get_ar_by_vdev_id(struct ath11k_base *ab, u32 vdev_id)
{}

struct ath11k *ath11k_mac_get_ar_by_pdev_id(struct ath11k_base *ab, u32 pdev_id)
{}

struct ath11k_vif *ath11k_mac_get_vif_up(struct ath11k_base *ab)
{}

static bool ath11k_mac_band_match(enum nl80211_band band1, enum WMI_HOST_WLAN_BAND band2)
{}

u8 ath11k_mac_get_target_pdev_id_from_vif(struct ath11k_vif *arvif)
{}

u8 ath11k_mac_get_target_pdev_id(struct ath11k *ar)
{}

static void ath11k_pdev_caps_update(struct ath11k *ar)
{}

static int ath11k_mac_txpower_recalc(struct ath11k *ar)
{}

static int ath11k_recalc_rtscts_prot(struct ath11k_vif *arvif)
{}

static int ath11k_mac_set_kickout(struct ath11k_vif *arvif)
{}

void ath11k_mac_peer_cleanup_all(struct ath11k *ar)
{}

static inline int ath11k_mac_vdev_setup_sync(struct ath11k *ar)
{}

static void
ath11k_mac_get_any_chandef_iter(struct ieee80211_hw *hw,
				struct ieee80211_chanctx_conf *conf,
				void *data)
{}

static int ath11k_mac_monitor_vdev_start(struct ath11k *ar, int vdev_id,
					 struct cfg80211_chan_def *chandef)
{}

static int ath11k_mac_monitor_vdev_stop(struct ath11k *ar)
{}

static int ath11k_mac_monitor_vdev_create(struct ath11k *ar)
{}

static int ath11k_mac_monitor_vdev_delete(struct ath11k *ar)
{}

static int ath11k_mac_monitor_start(struct ath11k *ar)
{}

static int ath11k_mac_monitor_stop(struct ath11k *ar)
{}

static int ath11k_mac_vif_setup_ps(struct ath11k_vif *arvif)
{}

static int ath11k_mac_config_ps(struct ath11k *ar)
{}

static int ath11k_mac_op_config(struct ieee80211_hw *hw, u32 changed)
{}

static void ath11k_mac_setup_nontx_vif_rsnie(struct ath11k_vif *arvif,
					     bool tx_arvif_rsnie_present,
					     const u8 *profile, u8 profile_len)
{}

static bool ath11k_mac_set_nontx_vif_params(struct ath11k_vif *tx_arvif,
					    struct ath11k_vif *arvif,
					    struct sk_buff *bcn)
{}

static int ath11k_mac_setup_bcn_p2p_ie(struct ath11k_vif *arvif,
				       struct sk_buff *bcn)
{}

static int ath11k_mac_remove_vendor_ie(struct sk_buff *skb, unsigned int oui,
				       u8 oui_type, size_t ie_offset)
{}

static int ath11k_mac_set_vif_params(struct ath11k_vif *arvif,
				     struct sk_buff *bcn)
{}

static int ath11k_mac_setup_bcn_tmpl_ema(struct ath11k_vif *arvif)
{}

static int ath11k_mac_setup_bcn_tmpl_mbssid(struct ath11k_vif *arvif)
{}

static int ath11k_mac_setup_bcn_tmpl(struct ath11k_vif *arvif)
{}

void ath11k_mac_bcn_tx_event(struct ath11k_vif *arvif)
{}

static void ath11k_control_beaconing(struct ath11k_vif *arvif,
				     struct ieee80211_bss_conf *info)
{}

static void ath11k_mac_handle_beacon_iter(void *data, u8 *mac,
					  struct ieee80211_vif *vif)
{}

void ath11k_mac_handle_beacon(struct ath11k *ar, struct sk_buff *skb)
{}

static void ath11k_mac_handle_beacon_miss_iter(void *data, u8 *mac,
					       struct ieee80211_vif *vif)
{}

void ath11k_mac_handle_beacon_miss(struct ath11k *ar, u32 vdev_id)
{}

static void ath11k_mac_vif_sta_connection_loss_work(struct work_struct *work)
{}

static void ath11k_peer_assoc_h_basic(struct ath11k *ar,
				      struct ieee80211_vif *vif,
				      struct ieee80211_sta *sta,
				      struct peer_assoc_params *arg)
{}

static void ath11k_peer_assoc_h_crypto(struct ath11k *ar,
				       struct ieee80211_vif *vif,
				       struct ieee80211_sta *sta,
				       struct peer_assoc_params *arg)
{}

static void ath11k_peer_assoc_h_rates(struct ath11k *ar,
				      struct ieee80211_vif *vif,
				      struct ieee80211_sta *sta,
				      struct peer_assoc_params *arg)
{}

static bool
ath11k_peer_assoc_h_ht_masked(const u8 *ht_mcs_mask)
{}

static bool
ath11k_peer_assoc_h_vht_masked(const u16 *vht_mcs_mask)
{}

static void ath11k_peer_assoc_h_ht(struct ath11k *ar,
				   struct ieee80211_vif *vif,
				   struct ieee80211_sta *sta,
				   struct peer_assoc_params *arg)
{}

static int ath11k_mac_get_max_vht_mcs_map(u16 mcs_map, int nss)
{}

static u16
ath11k_peer_assoc_h_vht_limit(u16 tx_mcs_set,
			      const u16 vht_mcs_limit[NL80211_VHT_NSS_MAX])
{}

static u8 ath11k_get_nss_160mhz(struct ath11k *ar,
				u8 max_nss)
{}

static void ath11k_peer_assoc_h_vht(struct ath11k *ar,
				    struct ieee80211_vif *vif,
				    struct ieee80211_sta *sta,
				    struct peer_assoc_params *arg)
{}

static int ath11k_mac_get_max_he_mcs_map(u16 mcs_map, int nss)
{}

static u16 ath11k_peer_assoc_h_he_limit(u16 tx_mcs_set,
					const u16 he_mcs_limit[NL80211_HE_NSS_MAX])
{}

static bool
ath11k_peer_assoc_h_he_masked(const u16 *he_mcs_mask)
{}

static void ath11k_peer_assoc_h_he(struct ath11k *ar,
				   struct ieee80211_vif *vif,
				   struct ieee80211_sta *sta,
				   struct peer_assoc_params *arg)
{}

static void ath11k_peer_assoc_h_he_6ghz(struct ath11k *ar,
					struct ieee80211_vif *vif,
					struct ieee80211_sta *sta,
					struct peer_assoc_params *arg)
{}

static void ath11k_peer_assoc_h_smps(struct ieee80211_sta *sta,
				     struct peer_assoc_params *arg)
{}

static void ath11k_peer_assoc_h_qos(struct ath11k *ar,
				    struct ieee80211_vif *vif,
				    struct ieee80211_sta *sta,
				    struct peer_assoc_params *arg)
{}

static int ath11k_peer_assoc_qos_ap(struct ath11k *ar,
				    struct ath11k_vif *arvif,
				    struct ieee80211_sta *sta)
{}

static bool ath11k_mac_sta_has_ofdm_only(struct ieee80211_sta *sta)
{}

static enum wmi_phy_mode ath11k_mac_get_phymode_vht(struct ath11k *ar,
						    struct ieee80211_sta *sta)
{}

static enum wmi_phy_mode ath11k_mac_get_phymode_he(struct ath11k *ar,
						   struct ieee80211_sta *sta)
{}

static void ath11k_peer_assoc_h_phymode(struct ath11k *ar,
					struct ieee80211_vif *vif,
					struct ieee80211_sta *sta,
					struct peer_assoc_params *arg)
{}

static void ath11k_peer_assoc_prepare(struct ath11k *ar,
				      struct ieee80211_vif *vif,
				      struct ieee80211_sta *sta,
				      struct peer_assoc_params *arg,
				      bool reassoc)
{}

static int ath11k_setup_peer_smps(struct ath11k *ar, struct ath11k_vif *arvif,
				  const u8 *addr,
				  const struct ieee80211_sta_ht_cap *ht_cap,
				  u16 he_6ghz_capa)
{}

static bool ath11k_mac_set_he_txbf_conf(struct ath11k_vif *arvif)
{}

static bool ath11k_mac_vif_recalc_sta_he_txbf(struct ath11k *ar,
					      struct ieee80211_vif *vif,
					      struct ieee80211_sta_he_cap *he_cap)
{}

static void ath11k_bss_assoc(struct ieee80211_hw *hw,
			     struct ieee80211_vif *vif,
			     struct ieee80211_bss_conf *bss_conf)
{}

static void ath11k_bss_disassoc(struct ieee80211_hw *hw,
				struct ieee80211_vif *vif)
{}

static u32 ath11k_mac_get_rate_hw_value(int bitrate)
{}

static void ath11k_recalculate_mgmt_rate(struct ath11k *ar,
					 struct ieee80211_vif *vif,
					 struct cfg80211_chan_def *def)
{}

static int ath11k_mac_fils_discovery(struct ath11k_vif *arvif,
				     struct ieee80211_bss_conf *info)
{}

static int ath11k_mac_config_obss_pd(struct ath11k *ar,
				     struct ieee80211_he_obss_pd *he_obss_pd)
{}

static bool ath11k_mac_supports_station_tpc(struct ath11k *ar,
					    struct ath11k_vif *arvif,
					    const struct cfg80211_chan_def *chandef)
{}

static void ath11k_mac_op_bss_info_changed(struct ieee80211_hw *hw,
					   struct ieee80211_vif *vif,
					   struct ieee80211_bss_conf *info,
					   u64 changed)
{}

void __ath11k_mac_scan_finish(struct ath11k *ar)
{}

void ath11k_mac_scan_finish(struct ath11k *ar)
{}

static int ath11k_scan_stop(struct ath11k *ar)
{}

static void ath11k_scan_abort(struct ath11k *ar)
{}

static void ath11k_scan_timeout_work(struct work_struct *work)
{}

static int ath11k_start_scan(struct ath11k *ar,
			     struct scan_req_params *arg)
{}

static int ath11k_mac_op_hw_scan(struct ieee80211_hw *hw,
				 struct ieee80211_vif *vif,
				 struct ieee80211_scan_request *hw_req)
{}

static void ath11k_mac_op_cancel_hw_scan(struct ieee80211_hw *hw,
					 struct ieee80211_vif *vif)
{}

static int ath11k_install_key(struct ath11k_vif *arvif,
			      struct ieee80211_key_conf *key,
			      enum set_key_cmd cmd,
			      const u8 *macaddr, u32 flags)
{}

static int ath11k_clear_peer_keys(struct ath11k_vif *arvif,
				  const u8 *addr)
{}

static int ath11k_mac_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
				 struct ieee80211_vif *vif, struct ieee80211_sta *sta,
				 struct ieee80211_key_conf *key)
{}

static int
ath11k_mac_bitrate_mask_num_ht_rates(struct ath11k *ar,
				     enum nl80211_band band,
				     const struct cfg80211_bitrate_mask *mask)
{}

static int
ath11k_mac_bitrate_mask_num_vht_rates(struct ath11k *ar,
				      enum nl80211_band band,
				      const struct cfg80211_bitrate_mask *mask)
{}

static int
ath11k_mac_bitrate_mask_num_he_rates(struct ath11k *ar,
				     enum nl80211_band band,
				     const struct cfg80211_bitrate_mask *mask)
{}

static int
ath11k_mac_set_peer_vht_fixed_rate(struct ath11k_vif *arvif,
				   struct ieee80211_sta *sta,
				   const struct cfg80211_bitrate_mask *mask,
				   enum nl80211_band band)
{}

static int
ath11k_mac_set_peer_he_fixed_rate(struct ath11k_vif *arvif,
				  struct ieee80211_sta *sta,
				  const struct cfg80211_bitrate_mask *mask,
				  enum nl80211_band band)
{}

static int
ath11k_mac_set_peer_ht_fixed_rate(struct ath11k_vif *arvif,
				  struct ieee80211_sta *sta,
				  const struct cfg80211_bitrate_mask *mask,
				  enum nl80211_band band)
{}

static int ath11k_station_assoc(struct ath11k *ar,
				struct ieee80211_vif *vif,
				struct ieee80211_sta *sta,
				bool reassoc)
{}

static int ath11k_station_disassoc(struct ath11k *ar,
				   struct ieee80211_vif *vif,
				   struct ieee80211_sta *sta)
{}

static u32 ath11k_mac_max_nss(const u8 *ht_mcs_mask, const u16 *vht_mcs_mask,
			      const u16 *he_mcs_mask)
{}

static void ath11k_sta_rc_update_wk(struct work_struct *wk)
{}

static void ath11k_sta_set_4addr_wk(struct work_struct *wk)
{}

static int ath11k_mac_inc_num_stations(struct ath11k_vif *arvif,
				       struct ieee80211_sta *sta)
{}

static void ath11k_mac_dec_num_stations(struct ath11k_vif *arvif,
					struct ieee80211_sta *sta)
{}

static u32 ath11k_mac_ieee80211_sta_bw_to_wmi(struct ath11k *ar,
					      struct ieee80211_sta *sta)
{}

static int ath11k_mac_op_sta_set_txpwr(struct ieee80211_hw *hw,
				       struct ieee80211_vif *vif,
				       struct ieee80211_sta *sta)
{}

static void ath11k_mac_op_sta_set_4addr(struct ieee80211_hw *hw,
					struct ieee80211_vif *vif,
					struct ieee80211_sta *sta, bool enabled)
{}

static void ath11k_mac_op_sta_rc_update(struct ieee80211_hw *hw,
					struct ieee80211_vif *vif,
					struct ieee80211_sta *sta,
					u32 changed)
{}

static int ath11k_conf_tx_uapsd(struct ath11k *ar, struct ieee80211_vif *vif,
				u16 ac, bool enable)
{}

static int ath11k_mac_op_conf_tx(struct ieee80211_hw *hw,
				 struct ieee80211_vif *vif,
				 unsigned int link_id, u16 ac,
				 const struct ieee80211_tx_queue_params *params)
{}

static struct ieee80211_sta_ht_cap
ath11k_create_ht_cap(struct ath11k *ar, u32 ar_ht_cap, u32 rate_cap_rx_chainmask)
{}

static int ath11k_mac_set_txbf_conf(struct ath11k_vif *arvif)
{}

static void ath11k_set_vht_txbf_cap(struct ath11k *ar, u32 *vht_cap)
{}

static struct ieee80211_sta_vht_cap
ath11k_create_vht_cap(struct ath11k *ar, u32 rate_cap_tx_chainmask,
		      u32 rate_cap_rx_chainmask)
{}

static void ath11k_mac_setup_ht_vht_cap(struct ath11k *ar,
					struct ath11k_pdev_cap *cap,
					u32 *ht_cap_info)
{}

static int ath11k_check_chain_mask(struct ath11k *ar, u32 ant, bool is_tx_ant)
{}

static void ath11k_gen_ppe_thresh(struct ath11k_ppe_threshold *fw_ppet,
				  u8 *he_ppet)
{}

static void
ath11k_mac_filter_he_cap_mesh(struct ieee80211_he_cap_elem *he_cap_elem)
{}

static __le16 ath11k_mac_setup_he_6ghz_cap(struct ath11k_pdev_cap *pcap,
					   struct ath11k_band_cap *bcap)
{}

static void ath11k_mac_set_hemcsmap(struct ath11k *ar,
				    struct ath11k_pdev_cap *cap,
				    struct ieee80211_sta_he_cap *he_cap,
				    int band)
{}

static int ath11k_mac_copy_he_cap(struct ath11k *ar,
				  struct ath11k_pdev_cap *cap,
				  struct ieee80211_sband_iftype_data *data,
				  int band)
{}

static void ath11k_mac_setup_he_cap(struct ath11k *ar,
				    struct ath11k_pdev_cap *cap)
{}

static int __ath11k_set_antenna(struct ath11k *ar, u32 tx_ant, u32 rx_ant)
{}

static void ath11k_mgmt_over_wmi_tx_drop(struct ath11k *ar, struct sk_buff *skb)
{}

static void ath11k_mac_tx_mgmt_free(struct ath11k *ar, int buf_id)
{}

int ath11k_mac_tx_mgmt_pending_free(int buf_id, void *skb, void *ctx)
{}

static int ath11k_mac_vif_txmgmt_idr_remove(int buf_id, void *skb, void *ctx)
{}

static int ath11k_mac_mgmt_tx_wmi(struct ath11k *ar, struct ath11k_vif *arvif,
				  struct sk_buff *skb)
{}

static void ath11k_mgmt_over_wmi_tx_purge(struct ath11k *ar)
{}

static void ath11k_mgmt_over_wmi_tx_work(struct work_struct *work)
{}

static int ath11k_mac_mgmt_tx(struct ath11k *ar, struct sk_buff *skb,
			      bool is_prb_rsp)
{}

static void ath11k_mac_op_tx(struct ieee80211_hw *hw,
			     struct ieee80211_tx_control *control,
			     struct sk_buff *skb)
{}

void ath11k_mac_drain_tx(struct ath11k *ar)
{}

static int ath11k_mac_config_mon_status_default(struct ath11k *ar, bool enable)
{}

static void ath11k_mac_wait_reconfigure(struct ath11k_base *ab)
{}

static int ath11k_mac_op_start(struct ieee80211_hw *hw)
{}

static void ath11k_mac_op_stop(struct ieee80211_hw *hw, bool suspend)
{}

static int ath11k_mac_setup_vdev_params_mbssid(struct ath11k_vif *arvif,
					       u32 *flags, u32 *tx_vdev_id)
{}

static int ath11k_mac_setup_vdev_create_params(struct ath11k_vif *arvif,
					       struct vdev_create_params *params)
{}

static void ath11k_mac_op_update_vif_offload(struct ieee80211_hw *hw,
					     struct ieee80211_vif *vif)
{}

static bool ath11k_mac_vif_ap_active_any(struct ath11k_base *ab)
{}

void ath11k_mac_11d_scan_start(struct ath11k *ar, u32 vdev_id)
{}

void ath11k_mac_11d_scan_stop(struct ath11k *ar)
{}

void ath11k_mac_11d_scan_stop_all(struct ath11k_base *ab)
{}

static int ath11k_mac_vdev_delete(struct ath11k *ar, struct ath11k_vif *arvif)
{}

static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw,
				       struct ieee80211_vif *vif)
{}

static int ath11k_mac_vif_unref(int buf_id, void *skb, void *ctx)
{}

static void ath11k_mac_op_remove_interface(struct ieee80211_hw *hw,
					   struct ieee80211_vif *vif)
{}

/* FIXME: Has to be verified. */
#define SUPPORTED_FILTERS

static void ath11k_mac_op_configure_filter(struct ieee80211_hw *hw,
					   unsigned int changed_flags,
					   unsigned int *total_flags,
					   u64 multicast)
{}

static int ath11k_mac_op_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
{}

static int ath11k_mac_op_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
{}

static int ath11k_mac_op_ampdu_action(struct ieee80211_hw *hw,
				      struct ieee80211_vif *vif,
				      struct ieee80211_ampdu_params *params)
{}

static int ath11k_mac_op_add_chanctx(struct ieee80211_hw *hw,
				     struct ieee80211_chanctx_conf *ctx)
{}

static void ath11k_mac_op_remove_chanctx(struct ieee80211_hw *hw,
					 struct ieee80211_chanctx_conf *ctx)
{}

static int
ath11k_mac_vdev_start_restart(struct ath11k_vif *arvif,
			      struct ieee80211_chanctx_conf *ctx,
			      bool restart)
{}

static int ath11k_mac_vdev_stop(struct ath11k_vif *arvif)
{}

static int ath11k_mac_vdev_start(struct ath11k_vif *arvif,
				 struct ieee80211_chanctx_conf *ctx)
{}

static int ath11k_mac_vdev_restart(struct ath11k_vif *arvif,
				   struct ieee80211_chanctx_conf *ctx)
{}

struct ath11k_mac_change_chanctx_arg {};

static void
ath11k_mac_change_chanctx_cnt_iter(void *data, u8 *mac,
				   struct ieee80211_vif *vif)
{}

static void
ath11k_mac_change_chanctx_fill_iter(void *data, u8 *mac,
				    struct ieee80211_vif *vif)
{}

static void
ath11k_mac_update_vif_chan(struct ath11k *ar,
			   struct ieee80211_vif_chanctx_switch *vifs,
			   int n_vifs)
{}

static void
ath11k_mac_update_active_vif_chan(struct ath11k *ar,
				  struct ieee80211_chanctx_conf *ctx)
{}

static void ath11k_mac_op_change_chanctx(struct ieee80211_hw *hw,
					 struct ieee80211_chanctx_conf *ctx,
					 u32 changed)
{}

static int ath11k_mac_start_vdev_delay(struct ieee80211_hw *hw,
				       struct ieee80211_vif *vif)
{}

static int ath11k_mac_stop_vdev_early(struct ieee80211_hw *hw,
				      struct ieee80211_vif *vif)
{}

static u8 ath11k_mac_get_num_pwr_levels(struct cfg80211_chan_def *chan_def)
{}

static u16 ath11k_mac_get_6ghz_start_frequency(struct cfg80211_chan_def *chan_def)
{}

static u16 ath11k_mac_get_seg_freq(struct cfg80211_chan_def *chan_def,
				   u16 start_seq, u8 seq)
{}

static void ath11k_mac_get_psd_channel(struct ath11k *ar,
				       u16 step_freq,
				       u16 *start_freq,
				       u16 *center_freq,
				       u8 i,
				       struct ieee80211_channel **temp_chan,
				       s8 *tx_power)
{}

static void ath11k_mac_get_eirp_power(struct ath11k *ar,
				      u16 *start_freq,
				      u16 *center_freq,
				      u8 i,
				      struct ieee80211_channel **temp_chan,
				      struct cfg80211_chan_def *def,
				      s8 *tx_power)
{}

void ath11k_mac_fill_reg_tpc_info(struct ath11k *ar,
				  struct ieee80211_vif *vif,
				  struct ieee80211_chanctx_conf *ctx)
{}

static void ath11k_mac_parse_tx_pwr_env(struct ath11k *ar,
					struct ieee80211_vif *vif,
					struct ieee80211_chanctx_conf *ctx)
{}

static int
ath11k_mac_op_assign_vif_chanctx(struct ieee80211_hw *hw,
				 struct ieee80211_vif *vif,
				 struct ieee80211_bss_conf *link_conf,
				 struct ieee80211_chanctx_conf *ctx)
{}

static void
ath11k_mac_op_unassign_vif_chanctx(struct ieee80211_hw *hw,
				   struct ieee80211_vif *vif,
				   struct ieee80211_bss_conf *link_conf,
				   struct ieee80211_chanctx_conf *ctx)
{}

static int
ath11k_mac_op_switch_vif_chanctx(struct ieee80211_hw *hw,
				 struct ieee80211_vif_chanctx_switch *vifs,
				 int n_vifs,
				 enum ieee80211_chanctx_switch_mode mode)
{}

static int
ath11k_set_vdev_param_to_all_vifs(struct ath11k *ar, int param, u32 value)
{}

/* mac80211 stores device specific RTS/Fragmentation threshold value,
 * this is set interface specific to firmware from ath11k driver
 */
static int ath11k_mac_op_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
{}

static int ath11k_mac_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
{}

static int ath11k_mac_flush_tx_complete(struct ath11k *ar)
{}

int ath11k_mac_wait_tx_complete(struct ath11k *ar)
{}

static void ath11k_mac_op_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
				u32 queues, bool drop)
{}

static bool
ath11k_mac_has_single_legacy_rate(struct ath11k *ar,
				  enum nl80211_band band,
				  const struct cfg80211_bitrate_mask *mask)
{}

static __le16
ath11k_mac_get_tx_mcs_map(const struct ieee80211_sta_he_cap *he_cap)
{}

static bool
ath11k_mac_bitrate_mask_get_single_nss(struct ath11k *ar,
				       struct ath11k_vif *arvif,
				       enum nl80211_band band,
				       const struct cfg80211_bitrate_mask *mask,
				       int *nss)
{}

static int
ath11k_mac_get_single_legacy_rate(struct ath11k *ar,
				  enum nl80211_band band,
				  const struct cfg80211_bitrate_mask *mask,
				  u32 *rate, u8 *nss)
{}

static int
ath11k_mac_set_fixed_rate_gi_ltf(struct ath11k_vif *arvif, u8 he_gi, u8 he_ltf)
{}

static int
ath11k_mac_set_auto_rate_gi_ltf(struct ath11k_vif *arvif, u16 he_gi, u8 he_ltf)
{}

static int ath11k_mac_set_rate_params(struct ath11k_vif *arvif,
				      u32 rate, u8 nss, u8 sgi, u8 ldpc,
				      u8 he_gi, u8 he_ltf, bool he_fixed_rate)
{}

static bool
ath11k_mac_vht_mcs_range_present(struct ath11k *ar,
				 enum nl80211_band band,
				 const struct cfg80211_bitrate_mask *mask)
{}

static bool
ath11k_mac_he_mcs_range_present(struct ath11k *ar,
				enum nl80211_band band,
				const struct cfg80211_bitrate_mask *mask)
{}

static void ath11k_mac_set_bitrate_mask_iter(void *data,
					     struct ieee80211_sta *sta)
{}

static void ath11k_mac_disable_peer_fixed_rate(void *data,
					       struct ieee80211_sta *sta)
{}

static bool
ath11k_mac_validate_vht_he_fixed_rate_settings(struct ath11k *ar, enum nl80211_band band,
					       const struct cfg80211_bitrate_mask *mask)
{}

static int
ath11k_mac_op_set_bitrate_mask(struct ieee80211_hw *hw,
			       struct ieee80211_vif *vif,
			       const struct cfg80211_bitrate_mask *mask)
{}

static void
ath11k_mac_op_reconfig_complete(struct ieee80211_hw *hw,
				enum ieee80211_reconfig_type reconfig_type)
{}

static void
ath11k_mac_update_bss_chan_survey(struct ath11k *ar,
				  struct ieee80211_channel *channel)
{}

static int ath11k_mac_op_get_survey(struct ieee80211_hw *hw, int idx,
				    struct survey_info *survey)
{}

static void ath11k_mac_put_chain_rssi(struct station_info *sinfo,
				      struct ath11k_sta *arsta,
				      char *pre,
				      bool clear)
{}

static void ath11k_mac_op_sta_statistics(struct ieee80211_hw *hw,
					 struct ieee80211_vif *vif,
					 struct ieee80211_sta *sta,
					 struct station_info *sinfo)
{}

#if IS_ENABLED(CONFIG_IPV6)
static void ath11k_generate_ns_mc_addr(struct ath11k *ar,
				       struct ath11k_arp_ns_offload *offload)
{}

static void ath11k_mac_op_ipv6_changed(struct ieee80211_hw *hw,
				       struct ieee80211_vif *vif,
				       struct inet6_dev *idev)
{}
#endif

static void ath11k_mac_op_set_rekey_data(struct ieee80211_hw *hw,
					 struct ieee80211_vif *vif,
					 struct cfg80211_gtk_rekey_data *data)
{}

static int ath11k_mac_op_set_bios_sar_specs(struct ieee80211_hw *hw,
					    const struct cfg80211_sar_specs *sar)
{}

static int ath11k_mac_op_cancel_remain_on_channel(struct ieee80211_hw *hw,
						  struct ieee80211_vif *vif)
{}

static int ath11k_mac_op_remain_on_channel(struct ieee80211_hw *hw,
					   struct ieee80211_vif *vif,
					   struct ieee80211_channel *chan,
					   int duration,
					   enum ieee80211_roc_type type)
{}

static int ath11k_fw_stats_request(struct ath11k *ar,
				   struct stats_request_params *req_param)
{}

static int ath11k_mac_op_get_txpower(struct ieee80211_hw *hw,
				     struct ieee80211_vif *vif,
				     int *dbm)
{}

static int ath11k_mac_station_add(struct ath11k *ar,
				  struct ieee80211_vif *vif,
				  struct ieee80211_sta *sta)
{}

static int ath11k_mac_station_remove(struct ath11k *ar,
				     struct ieee80211_vif *vif,
				     struct ieee80211_sta *sta)
{}

static int ath11k_mac_op_sta_state(struct ieee80211_hw *hw,
				   struct ieee80211_vif *vif,
				   struct ieee80211_sta *sta,
				   enum ieee80211_sta_state old_state,
				   enum ieee80211_sta_state new_state)
{}

static const struct ieee80211_ops ath11k_ops =;

static void ath11k_mac_update_ch_list(struct ath11k *ar,
				      struct ieee80211_supported_band *band,
				      u32 freq_low, u32 freq_high)
{}

static u32 ath11k_get_phy_id(struct ath11k *ar, u32 band)
{}

static int ath11k_mac_setup_channels_rates(struct ath11k *ar,
					   u32 supported_bands)
{}

static void ath11k_mac_setup_mac_address_list(struct ath11k *ar)
{}

static int ath11k_mac_setup_iface_combinations(struct ath11k *ar)
{}

static const u8 ath11k_if_types_ext_capa[] =;

static const u8 ath11k_if_types_ext_capa_sta[] =;

static const u8 ath11k_if_types_ext_capa_ap[] =;

static const struct wiphy_iftype_ext_capab ath11k_iftypes_ext_capa[] =;

static void __ath11k_mac_unregister(struct ath11k *ar)
{}

void ath11k_mac_unregister(struct ath11k_base *ab)
{}

static int __ath11k_mac_register(struct ath11k *ar)
{}

int ath11k_mac_register(struct ath11k_base *ab)
{}

int ath11k_mac_allocate(struct ath11k_base *ab)
{}

void ath11k_mac_destroy(struct ath11k_base *ab)
{}

int ath11k_mac_vif_set_keepalive(struct ath11k_vif *arvif,
				 enum wmi_sta_keepalive_method method,
				 u32 interval)
{}