#include "mac.h"
#include <net/cfg80211.h>
#include <net/mac80211.h>
#include <linux/etherdevice.h>
#include <linux/acpi.h>
#include <linux/of.h>
#include <linux/bitfield.h>
#include "hif.h"
#include "core.h"
#include "debug.h"
#include "wmi.h"
#include "htt.h"
#include "txrx.h"
#include "testmode.h"
#include "wmi-tlv.h"
#include "wmi-ops.h"
#include "wow.h"
#include "leds.h"
static struct ieee80211_rate ath10k_rates[] = …;
static struct ieee80211_rate ath10k_rates_rev2[] = …;
static const struct cfg80211_sar_freq_ranges ath10k_sar_freq_ranges[] = …;
static const struct cfg80211_sar_capa ath10k_sar_capa = …;
#define ATH10K_MAC_FIRST_OFDM_RATE_IDX …
#define ath10k_a_rates …
#define ath10k_a_rates_size …
#define ath10k_g_rates …
#define ath10k_g_rates_size …
#define ath10k_g_rates_rev2 …
#define ath10k_g_rates_rev2_size …
#define ath10k_wmi_legacy_rates …
static bool ath10k_mac_bitrate_is_cck(int bitrate)
{ … }
static u8 ath10k_mac_bitrate_to_rate(int bitrate)
{ … }
u8 ath10k_mac_hw_rate_to_idx(const struct ieee80211_supported_band *sband,
u8 hw_rate, bool cck)
{ … }
u8 ath10k_mac_bitrate_to_idx(const struct ieee80211_supported_band *sband,
u32 bitrate)
{ … }
static int ath10k_mac_get_rate_hw_value(int bitrate)
{ … }
static int ath10k_mac_get_max_vht_mcs_map(u16 mcs_map, int nss)
{ … }
static u32
ath10k_mac_max_ht_nss(const u8 ht_mcs_mask[IEEE80211_HT_MCS_MASK_LEN])
{ … }
static u32
ath10k_mac_max_vht_nss(const u16 vht_mcs_mask[NL80211_VHT_NSS_MAX])
{ … }
int ath10k_mac_ext_resource_config(struct ath10k *ar, u32 val)
{ … }
static int ath10k_send_key(struct ath10k_vif *arvif,
struct ieee80211_key_conf *key,
enum set_key_cmd cmd,
const u8 *macaddr, u32 flags)
{ … }
static int ath10k_install_key(struct ath10k_vif *arvif,
struct ieee80211_key_conf *key,
enum set_key_cmd cmd,
const u8 *macaddr, u32 flags)
{ … }
static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif,
const u8 *addr)
{ … }
static int ath10k_clear_peer_keys(struct ath10k_vif *arvif,
const u8 *addr)
{ … }
bool ath10k_mac_is_peer_wep_key_set(struct ath10k *ar, const u8 *addr,
u8 keyidx)
{ … }
static int ath10k_clear_vdev_key(struct ath10k_vif *arvif,
struct ieee80211_key_conf *key)
{ … }
static int ath10k_mac_vif_update_wep_key(struct ath10k_vif *arvif,
struct ieee80211_key_conf *key)
{ … }
static inline enum wmi_phy_mode
chan_to_phymode(const struct cfg80211_chan_def *chandef)
{ … }
static u8 ath10k_parse_mpdudensity(u8 mpdudensity)
{ … }
int ath10k_mac_vif_chan(struct ieee80211_vif *vif,
struct cfg80211_chan_def *def)
{ … }
static void ath10k_mac_num_chanctxs_iter(struct ieee80211_hw *hw,
struct ieee80211_chanctx_conf *conf,
void *data)
{ … }
static int ath10k_mac_num_chanctxs(struct ath10k *ar)
{ … }
static void
ath10k_mac_get_any_chandef_iter(struct ieee80211_hw *hw,
struct ieee80211_chanctx_conf *conf,
void *data)
{ … }
static void ath10k_wait_for_peer_delete_done(struct ath10k *ar, u32 vdev_id,
const u8 *addr)
{ … }
static int ath10k_peer_create(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
u32 vdev_id,
const u8 *addr,
enum wmi_peer_type peer_type)
{ … }
static int ath10k_mac_set_kickout(struct ath10k_vif *arvif)
{ … }
static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value)
{ … }
static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
{ … }
static void ath10k_peer_map_cleanup(struct ath10k *ar, struct ath10k_peer *peer)
{ … }
static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id)
{ … }
static void ath10k_peer_cleanup_all(struct ath10k *ar)
{ … }
static int ath10k_mac_tdls_peer_update(struct ath10k *ar, u32 vdev_id,
struct ieee80211_sta *sta,
enum wmi_tdls_peer_state state)
{ … }
void ath10k_mac_vif_beacon_free(struct ath10k_vif *arvif)
{ … }
static void ath10k_mac_vif_beacon_cleanup(struct ath10k_vif *arvif)
{ … }
static inline int ath10k_vdev_setup_sync(struct ath10k *ar)
{ … }
static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id)
{ … }
static int ath10k_monitor_vdev_stop(struct ath10k *ar)
{ … }
static int ath10k_monitor_vdev_create(struct ath10k *ar)
{ … }
static int ath10k_monitor_vdev_delete(struct ath10k *ar)
{ … }
static int ath10k_monitor_start(struct ath10k *ar)
{ … }
static int ath10k_monitor_stop(struct ath10k *ar)
{ … }
static bool ath10k_mac_monitor_vdev_is_needed(struct ath10k *ar)
{ … }
static bool ath10k_mac_monitor_vdev_is_allowed(struct ath10k *ar)
{ … }
static int ath10k_monitor_recalc(struct ath10k *ar)
{ … }
static bool ath10k_mac_can_set_cts_prot(struct ath10k_vif *arvif)
{ … }
static int ath10k_mac_set_cts_prot(struct ath10k_vif *arvif)
{ … }
static int ath10k_recalc_rtscts_prot(struct ath10k_vif *arvif)
{ … }
static int ath10k_start_cac(struct ath10k *ar)
{ … }
static int ath10k_stop_cac(struct ath10k *ar)
{ … }
static void ath10k_mac_has_radar_iter(struct ieee80211_hw *hw,
struct ieee80211_chanctx_conf *conf,
void *data)
{ … }
static bool ath10k_mac_has_radar_enabled(struct ath10k *ar)
{ … }
static void ath10k_recalc_radar_detection(struct ath10k *ar)
{ … }
static int ath10k_vdev_stop(struct ath10k_vif *arvif)
{ … }
static int ath10k_vdev_start_restart(struct ath10k_vif *arvif,
const struct cfg80211_chan_def *chandef,
bool restart)
{ … }
static int ath10k_vdev_start(struct ath10k_vif *arvif,
const struct cfg80211_chan_def *def)
{ … }
static int ath10k_vdev_restart(struct ath10k_vif *arvif,
const struct cfg80211_chan_def *def)
{ … }
static int ath10k_mac_setup_bcn_p2p_ie(struct ath10k_vif *arvif,
struct sk_buff *bcn)
{ … }
static int ath10k_mac_remove_vendor_ie(struct sk_buff *skb, unsigned int oui,
u8 oui_type, size_t ie_offset)
{ … }
static int ath10k_mac_setup_bcn_tmpl(struct ath10k_vif *arvif)
{ … }
static int ath10k_mac_setup_prb_tmpl(struct ath10k_vif *arvif)
{ … }
static int ath10k_mac_vif_fix_hidden_ssid(struct ath10k_vif *arvif)
{ … }
static void ath10k_control_beaconing(struct ath10k_vif *arvif,
struct ieee80211_bss_conf *info)
{ … }
static void ath10k_control_ibss(struct ath10k_vif *arvif,
struct ieee80211_vif *vif)
{ … }
static int ath10k_mac_vif_recalc_ps_wake_threshold(struct ath10k_vif *arvif)
{ … }
static int ath10k_mac_vif_recalc_ps_poll_count(struct ath10k_vif *arvif)
{ … }
static int ath10k_mac_num_vifs_started(struct ath10k *ar)
{ … }
static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif)
{ … }
static int ath10k_mac_vif_disable_keepalive(struct ath10k_vif *arvif)
{ … }
static void ath10k_mac_vif_ap_csa_count_down(struct ath10k_vif *arvif)
{ … }
static void ath10k_mac_vif_ap_csa_work(struct work_struct *work)
{ … }
static void ath10k_mac_handle_beacon_iter(void *data, u8 *mac,
struct ieee80211_vif *vif)
{ … }
void ath10k_mac_handle_beacon(struct ath10k *ar, struct sk_buff *skb)
{ … }
static void ath10k_mac_handle_beacon_miss_iter(void *data, u8 *mac,
struct ieee80211_vif *vif)
{ … }
void ath10k_mac_handle_beacon_miss(struct ath10k *ar, u32 vdev_id)
{ … }
static void ath10k_mac_vif_sta_connection_loss_work(struct work_struct *work)
{ … }
static u32 ath10k_peer_assoc_h_listen_intval(struct ath10k *ar,
struct ieee80211_vif *vif)
{ … }
static void ath10k_peer_assoc_h_basic(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct wmi_peer_assoc_complete_arg *arg)
{ … }
static void ath10k_peer_assoc_h_crypto(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct wmi_peer_assoc_complete_arg *arg)
{ … }
static void ath10k_peer_assoc_h_rates(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct wmi_peer_assoc_complete_arg *arg)
{ … }
static bool
ath10k_peer_assoc_h_ht_masked(const u8 ht_mcs_mask[IEEE80211_HT_MCS_MASK_LEN])
{ … }
static bool
ath10k_peer_assoc_h_vht_masked(const u16 vht_mcs_mask[NL80211_VHT_NSS_MAX])
{ … }
static void ath10k_peer_assoc_h_ht(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct wmi_peer_assoc_complete_arg *arg)
{ … }
static int ath10k_peer_assoc_qos_ap(struct ath10k *ar,
struct ath10k_vif *arvif,
struct ieee80211_sta *sta)
{ … }
static u16
ath10k_peer_assoc_h_vht_limit(u16 tx_mcs_set,
const u16 vht_mcs_limit[NL80211_VHT_NSS_MAX])
{ … }
static u32 get_160mhz_nss_from_maxrate(int rate)
{ … }
static void ath10k_peer_assoc_h_vht(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct wmi_peer_assoc_complete_arg *arg)
{ … }
static void ath10k_peer_assoc_h_qos(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct wmi_peer_assoc_complete_arg *arg)
{ … }
static bool ath10k_mac_sta_has_ofdm_only(struct ieee80211_sta *sta)
{ … }
static enum wmi_phy_mode ath10k_mac_get_phymode_vht(struct ath10k *ar,
struct ieee80211_sta *sta)
{ … }
static void ath10k_peer_assoc_h_phymode(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct wmi_peer_assoc_complete_arg *arg)
{ … }
static int ath10k_peer_assoc_prepare(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct wmi_peer_assoc_complete_arg *arg)
{ … }
static const u32 ath10k_smps_map[] = …;
static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif,
const u8 *addr,
const struct ieee80211_sta_ht_cap *ht_cap)
{ … }
static int ath10k_mac_vif_recalc_txbf(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_sta_vht_cap vht_cap)
{ … }
static bool ath10k_mac_is_connected(struct ath10k *ar)
{ … }
static int ath10k_mac_txpower_setup(struct ath10k *ar, int txpower)
{ … }
static int ath10k_mac_txpower_recalc(struct ath10k *ar)
{ … }
static int ath10k_mac_set_sar_power(struct ath10k *ar)
{ … }
static int ath10k_mac_set_sar_specs(struct ieee80211_hw *hw,
const struct cfg80211_sar_specs *sar)
{ … }
static void ath10k_bss_assoc(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_bss_conf *bss_conf)
{ … }
static void ath10k_bss_disassoc(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
static int ath10k_new_peer_tid_config(struct ath10k *ar,
struct ieee80211_sta *sta,
struct ath10k_vif *arvif)
{ … }
static int ath10k_station_assoc(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
bool reassoc)
{ … }
static int ath10k_station_disassoc(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
static int ath10k_update_channel_list(struct ath10k *ar)
{ … }
static enum wmi_dfs_region
ath10k_mac_get_dfs_region(enum nl80211_dfs_regions dfs_region)
{ … }
static void ath10k_regd_update(struct ath10k *ar)
{ … }
static void ath10k_mac_update_channel_list(struct ath10k *ar,
struct ieee80211_supported_band *band)
{ … }
static void ath10k_reg_notifier(struct wiphy *wiphy,
struct regulatory_request *request)
{ … }
static void ath10k_stop_radar_confirmation(struct ath10k *ar)
{ … }
enum ath10k_mac_tx_path { … };
void ath10k_mac_tx_lock(struct ath10k *ar, int reason)
{ … }
static void ath10k_mac_tx_unlock_iter(void *data, u8 *mac,
struct ieee80211_vif *vif)
{ … }
void ath10k_mac_tx_unlock(struct ath10k *ar, int reason)
{ … }
void ath10k_mac_vif_tx_lock(struct ath10k_vif *arvif, int reason)
{ … }
void ath10k_mac_vif_tx_unlock(struct ath10k_vif *arvif, int reason)
{ … }
static void ath10k_mac_vif_handle_tx_pause(struct ath10k_vif *arvif,
enum wmi_tlv_tx_pause_id pause_id,
enum wmi_tlv_tx_pause_action action)
{ … }
struct ath10k_mac_tx_pause { … };
static void ath10k_mac_handle_tx_pause_iter(void *data, u8 *mac,
struct ieee80211_vif *vif)
{ … }
void ath10k_mac_handle_tx_pause_vdev(struct ath10k *ar, u32 vdev_id,
enum wmi_tlv_tx_pause_id pause_id,
enum wmi_tlv_tx_pause_action action)
{ … }
static enum ath10k_hw_txrx_mode
ath10k_mac_tx_h_get_txmode(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct sk_buff *skb)
{ … }
static bool ath10k_tx_h_use_hwcrypto(struct ieee80211_vif *vif,
struct sk_buff *skb)
{ … }
static void ath10k_tx_h_nwifi(struct ieee80211_hw *hw, struct sk_buff *skb)
{ … }
static void ath10k_tx_h_8023(struct sk_buff *skb)
{ … }
static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar,
struct ieee80211_vif *vif,
struct sk_buff *skb)
{ … }
static void ath10k_mac_tx_h_fill_cb(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_txq *txq,
struct ieee80211_sta *sta,
struct sk_buff *skb, u16 airtime)
{ … }
bool ath10k_mac_tx_frm_has_freq(struct ath10k *ar)
{ … }
static int ath10k_mac_tx_wmi_mgmt(struct ath10k *ar, struct sk_buff *skb)
{ … }
static enum ath10k_mac_tx_path
ath10k_mac_tx_h_get_txpath(struct ath10k *ar,
struct sk_buff *skb,
enum ath10k_hw_txrx_mode txmode)
{ … }
static int ath10k_mac_tx_submit(struct ath10k *ar,
enum ath10k_hw_txrx_mode txmode,
enum ath10k_mac_tx_path txpath,
struct sk_buff *skb)
{ … }
static int ath10k_mac_tx(struct ath10k *ar,
struct ieee80211_vif *vif,
enum ath10k_hw_txrx_mode txmode,
enum ath10k_mac_tx_path txpath,
struct sk_buff *skb, bool noque_offchan)
{ … }
void ath10k_offchan_tx_purge(struct ath10k *ar)
{ … }
void ath10k_offchan_tx_work(struct work_struct *work)
{ … }
void ath10k_mgmt_over_wmi_tx_purge(struct ath10k *ar)
{ … }
void ath10k_mgmt_over_wmi_tx_work(struct work_struct *work)
{ … }
static void ath10k_mac_txq_init(struct ieee80211_txq *txq)
{ … }
static void ath10k_mac_txq_unref(struct ath10k *ar, struct ieee80211_txq *txq)
{ … }
struct ieee80211_txq *ath10k_mac_txq_lookup(struct ath10k *ar,
u16 peer_id,
u8 tid)
{ … }
static bool ath10k_mac_tx_can_push(struct ieee80211_hw *hw,
struct ieee80211_txq *txq)
{ … }
#define IEEE80211_ATF_OVERHEAD …
#define IEEE80211_ATF_OVERHEAD_IFS …
static u16 ath10k_mac_update_airtime(struct ath10k *ar,
struct ieee80211_txq *txq,
struct sk_buff *skb)
{ … }
int ath10k_mac_tx_push_txq(struct ieee80211_hw *hw,
struct ieee80211_txq *txq)
{ … }
static int ath10k_mac_schedule_txq(struct ieee80211_hw *hw, u32 ac)
{ … }
void ath10k_mac_tx_push_pending(struct ath10k *ar)
{ … }
EXPORT_SYMBOL(…);
void __ath10k_scan_finish(struct ath10k *ar)
{ … }
void ath10k_scan_finish(struct ath10k *ar)
{ … }
static int ath10k_scan_stop(struct ath10k *ar)
{ … }
static void ath10k_scan_abort(struct ath10k *ar)
{ … }
void ath10k_scan_timeout_work(struct work_struct *work)
{ … }
static int ath10k_start_scan(struct ath10k *ar,
const struct wmi_start_scan_arg *arg)
{ … }
static void ath10k_mac_op_tx(struct ieee80211_hw *hw,
struct ieee80211_tx_control *control,
struct sk_buff *skb)
{ … }
static void ath10k_mac_op_wake_tx_queue(struct ieee80211_hw *hw,
struct ieee80211_txq *txq)
{ … }
void ath10k_drain_tx(struct ath10k *ar)
{ … }
void ath10k_halt(struct ath10k *ar)
{ … }
static int ath10k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
{ … }
static bool ath10k_check_chain_mask(struct ath10k *ar, u32 cm, const char *dbg)
{ … }
static int ath10k_mac_get_vht_cap_bf_sts(struct ath10k *ar)
{ … }
static int ath10k_mac_get_vht_cap_bf_sound_dim(struct ath10k *ar)
{ … }
static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar)
{ … }
static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar)
{ … }
static void ath10k_mac_setup_ht_vht_cap(struct ath10k *ar)
{ … }
static int __ath10k_set_antenna(struct ath10k *ar, u32 tx_ant, u32 rx_ant)
{ … }
static int ath10k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
{ … }
static int __ath10k_fetch_bb_timing_dt(struct ath10k *ar,
struct wmi_bb_timing_cfg_arg *bb_timing)
{ … }
static int ath10k_mac_rfkill_config(struct ath10k *ar)
{ … }
int ath10k_mac_rfkill_enable_radio(struct ath10k *ar, bool enable)
{ … }
static int ath10k_start(struct ieee80211_hw *hw)
{ … }
static void ath10k_stop(struct ieee80211_hw *hw, bool suspend)
{ … }
static int ath10k_config_ps(struct ath10k *ar)
{ … }
static int ath10k_config(struct ieee80211_hw *hw, u32 changed)
{ … }
static u32 get_nss_from_chainmask(u16 chain_mask)
{ … }
static int ath10k_mac_set_txbf_conf(struct ath10k_vif *arvif)
{ … }
static void ath10k_update_vif_offload(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
static int ath10k_add_interface(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
static void ath10k_mac_vif_tx_unlock_all(struct ath10k_vif *arvif)
{ … }
static void ath10k_remove_interface(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
#define SUPPORTED_FILTERS …
static void ath10k_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *total_flags,
u64 multicast)
{ … }
static void ath10k_recalculate_mgmt_rate(struct ath10k *ar,
struct ieee80211_vif *vif,
struct cfg80211_chan_def *def)
{ … }
static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_bss_conf *info,
u64 changed)
{ … }
static void ath10k_mac_op_set_coverage_class(struct ieee80211_hw *hw, s16 value)
{ … }
struct ath10k_mac_tdls_iter_data { … };
static void ath10k_mac_tdls_vif_stations_count_iter(void *data,
struct ieee80211_sta *sta)
{ … }
static int ath10k_mac_tdls_vif_stations_count(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
static int ath10k_hw_scan(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_scan_request *hw_req)
{ … }
static void ath10k_cancel_hw_scan(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
static void ath10k_set_key_h_def_keyidx(struct ath10k *ar,
struct ath10k_vif *arvif,
enum set_key_cmd cmd,
struct ieee80211_key_conf *key)
{ … }
static int ath10k_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 void ath10k_set_default_unicast_key(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
int keyidx)
{ … }
static void ath10k_sta_rc_update_wk(struct work_struct *wk)
{ … }
static int ath10k_mac_inc_num_stations(struct ath10k_vif *arvif,
struct ieee80211_sta *sta)
{ … }
static void ath10k_mac_dec_num_stations(struct ath10k_vif *arvif,
struct ieee80211_sta *sta)
{ … }
static int ath10k_sta_set_txpwr(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
struct ath10k_mac_iter_tid_conf_data { … };
static bool
ath10k_mac_bitrate_mask_has_single_rate(struct ath10k *ar,
enum nl80211_band band,
const struct cfg80211_bitrate_mask *mask,
int *vht_num_rates)
{ … }
static int
ath10k_mac_bitrate_mask_get_single_rate(struct ath10k *ar,
enum nl80211_band band,
const struct cfg80211_bitrate_mask *mask,
u8 *rate, u8 *nss, bool vht_only)
{ … }
static int ath10k_mac_validate_rate_mask(struct ath10k *ar,
struct ieee80211_sta *sta,
u32 rate_ctrl_flag, u8 nss)
{ … }
static int
ath10k_mac_tid_bitrate_config(struct ath10k *ar,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
u32 *rate_ctrl_flag, u8 *rate_ctrl,
enum nl80211_tx_rate_setting txrate_type,
const struct cfg80211_bitrate_mask *mask)
{ … }
static int ath10k_mac_set_tid_config(struct ath10k *ar, struct ieee80211_sta *sta,
struct ieee80211_vif *vif, u32 changed,
struct wmi_per_peer_per_tid_cfg_arg *arg)
{ … }
static int
ath10k_mac_parse_tid_config(struct ath10k *ar,
struct ieee80211_sta *sta,
struct ieee80211_vif *vif,
struct cfg80211_tid_cfg *tid_conf,
struct wmi_per_peer_per_tid_cfg_arg *arg)
{ … }
static int ath10k_mac_reset_tid_config(struct ath10k *ar,
struct ieee80211_sta *sta,
struct ath10k_vif *arvif,
u8 tids)
{ … }
static void ath10k_sta_tid_cfg_wk(struct work_struct *wk)
{ … }
static void ath10k_mac_vif_stations_tid_conf(void *data,
struct ieee80211_sta *sta)
{ … }
static int ath10k_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 int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif,
u16 ac, bool enable)
{ … }
static int ath10k_conf_tx(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
unsigned int link_id, u16 ac,
const struct ieee80211_tx_queue_params *params)
{ … }
static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_channel *chan,
int duration,
enum ieee80211_roc_type type)
{ … }
static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
static int ath10k_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
{ … }
static int ath10k_mac_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value)
{ … }
void ath10k_mac_wait_tx_complete(struct ath10k *ar)
{ … }
static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
u32 queues, bool drop)
{ … }
static int ath10k_tx_last_beacon(struct ieee80211_hw *hw)
{ … }
static void ath10k_reconfig_complete(struct ieee80211_hw *hw,
enum ieee80211_reconfig_type reconfig_type)
{ … }
static void
ath10k_mac_update_bss_chan_survey(struct ath10k *ar,
struct ieee80211_channel *channel)
{ … }
static int ath10k_get_survey(struct ieee80211_hw *hw, int idx,
struct survey_info *survey)
{ … }
static bool
ath10k_mac_bitrate_mask_get_single_nss(struct ath10k *ar,
enum nl80211_band band,
const struct cfg80211_bitrate_mask *mask,
int *nss)
{ … }
static int ath10k_mac_set_fixed_rate_params(struct ath10k_vif *arvif,
u8 rate, u8 nss, u8 sgi, u8 ldpc)
{ … }
static bool
ath10k_mac_can_set_bitrate_mask(struct ath10k *ar,
enum nl80211_band band,
const struct cfg80211_bitrate_mask *mask,
bool allow_pfr)
{ … }
static bool ath10k_mac_set_vht_bitrate_mask_fixup(struct ath10k *ar,
struct ath10k_vif *arvif,
struct ieee80211_sta *sta)
{ … }
static void ath10k_mac_set_bitrate_mask_iter(void *data,
struct ieee80211_sta *sta)
{ … }
static void ath10k_mac_clr_bitrate_mask_iter(void *data,
struct ieee80211_sta *sta)
{ … }
static int ath10k_mac_op_set_bitrate_mask(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
const struct cfg80211_bitrate_mask *mask)
{ … }
static void ath10k_sta_rc_update(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
u32 changed)
{ … }
static void ath10k_offset_tsf(struct ieee80211_hw *hw,
struct ieee80211_vif *vif, s64 tsf_offset)
{ … }
static int ath10k_ampdu_action(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_ampdu_params *params)
{ … }
static void
ath10k_mac_update_rx_channel(struct ath10k *ar,
struct ieee80211_chanctx_conf *ctx,
struct ieee80211_vif_chanctx_switch *vifs,
int n_vifs)
{ … }
static void
ath10k_mac_update_vif_chan(struct ath10k *ar,
struct ieee80211_vif_chanctx_switch *vifs,
int n_vifs)
{ … }
static int
ath10k_mac_op_add_chanctx(struct ieee80211_hw *hw,
struct ieee80211_chanctx_conf *ctx)
{ … }
static void
ath10k_mac_op_remove_chanctx(struct ieee80211_hw *hw,
struct ieee80211_chanctx_conf *ctx)
{ … }
struct ath10k_mac_change_chanctx_arg { … };
static void
ath10k_mac_change_chanctx_cnt_iter(void *data, u8 *mac,
struct ieee80211_vif *vif)
{ … }
static void
ath10k_mac_change_chanctx_fill_iter(void *data, u8 *mac,
struct ieee80211_vif *vif)
{ … }
static void
ath10k_mac_op_change_chanctx(struct ieee80211_hw *hw,
struct ieee80211_chanctx_conf *ctx,
u32 changed)
{ … }
static int
ath10k_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
ath10k_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
ath10k_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 void ath10k_mac_op_sta_pre_rcu_remove(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
static const struct ath10k_index_ht_data_rate_type supported_ht_mcs_rate_nss1[] = …;
static const struct ath10k_index_ht_data_rate_type supported_ht_mcs_rate_nss2[] = …;
static const struct ath10k_index_vht_data_rate_type supported_vht_mcs_rate_nss1[] = …;
static const struct ath10k_index_vht_data_rate_type supported_vht_mcs_rate_nss2[] = …;
static void ath10k_mac_get_rate_flags_ht(struct ath10k *ar, u32 rate, u8 nss, u8 mcs,
u8 *flags, u8 *bw)
{ … }
static void ath10k_mac_get_rate_flags_vht(struct ath10k *ar, u32 rate, u8 nss, u8 mcs,
u8 *flags, u8 *bw)
{ … }
static void ath10k_mac_get_rate_flags(struct ath10k *ar, u32 rate,
enum ath10k_phy_mode mode, u8 nss, u8 mcs,
u8 *flags, u8 *bw)
{ … }
static void ath10k_mac_parse_bitrate(struct ath10k *ar, u32 rate_code,
u32 bitrate_kbps, struct rate_info *rate)
{ … }
static void ath10k_mac_sta_get_peer_stats_info(struct ath10k *ar,
struct ieee80211_sta *sta,
struct station_info *sinfo)
{ … }
static void ath10k_sta_statistics(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct station_info *sinfo)
{ … }
static int ath10k_mac_op_set_tid_config(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct cfg80211_tid_config *tid_config)
{ … }
static int ath10k_mac_op_reset_tid_config(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
u8 tids)
{ … }
static const struct ieee80211_ops ath10k_ops = …;
#define CHAN2G(_channel, _freq, _flags) …
#define CHAN5G(_channel, _freq, _flags) …
static const struct ieee80211_channel ath10k_2ghz_channels[] = …;
static const struct ieee80211_channel ath10k_5ghz_channels[] = …;
struct ath10k *ath10k_mac_create(size_t priv_size)
{ … }
void ath10k_mac_destroy(struct ath10k *ar)
{ … }
static const struct ieee80211_iface_limit ath10k_if_limits[] = …;
static const struct ieee80211_iface_limit ath10k_10x_if_limits[] = …;
static const struct ieee80211_iface_combination ath10k_if_comb[] = …;
static const struct ieee80211_iface_combination ath10k_10x_if_comb[] = …;
static const struct ieee80211_iface_limit ath10k_tlv_if_limit[] = …;
static const struct ieee80211_iface_limit ath10k_tlv_qcs_if_limit[] = …;
static const struct ieee80211_iface_limit ath10k_tlv_if_limit_ibss[] = …;
static struct ieee80211_iface_combination ath10k_tlv_if_comb[] = …;
static struct ieee80211_iface_combination ath10k_tlv_qcs_if_comb[] = …;
static const struct ieee80211_iface_limit ath10k_10_4_if_limits[] = …;
static const struct ieee80211_iface_combination ath10k_10_4_if_comb[] = …;
static const struct
ieee80211_iface_combination ath10k_10_4_bcn_int_if_comb[] = …;
static void ath10k_get_arvif_iter(void *data, u8 *mac,
struct ieee80211_vif *vif)
{ … }
struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id)
{ … }
#define WRD_METHOD …
#define WRDD_WIFI …
static u32 ath10k_mac_wrdd_get_mcc(struct ath10k *ar, union acpi_object *wrdd)
{ … }
static int ath10k_mac_get_wrdd_regulatory(struct ath10k *ar, u16 *rd)
{ … }
static int ath10k_mac_init_rd(struct ath10k *ar)
{ … }
int ath10k_mac_register(struct ath10k *ar)
{ … }
void ath10k_mac_unregister(struct ath10k *ar)
{ … }