#include <linux/nl80211.h>
#include <linux/delay.h>
#include "ath9k.h"
#include "btcoex.h"
static void ath9k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
u32 queues, bool drop);
u8 ath9k_parse_mpdudensity(u8 mpdudensity)
{ … }
static bool ath9k_has_pending_frames(struct ath_softc *sc, struct ath_txq *txq,
bool sw_pending)
{ … }
static bool ath9k_setpower(struct ath_softc *sc, enum ath9k_power_mode mode)
{ … }
void ath_ps_full_sleep(struct timer_list *t)
{ … }
void ath9k_ps_wakeup(struct ath_softc *sc)
{ … }
void ath9k_ps_restore(struct ath_softc *sc)
{ … }
static void __ath_cancel_work(struct ath_softc *sc)
{ … }
void ath_cancel_work(struct ath_softc *sc)
{ … }
void ath_restart_work(struct ath_softc *sc)
{ … }
static bool ath_prepare_reset(struct ath_softc *sc)
{ … }
static bool ath_complete_reset(struct ath_softc *sc, bool start)
{ … }
static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan)
{ … }
static void ath_node_attach(struct ath_softc *sc, struct ieee80211_sta *sta,
struct ieee80211_vif *vif)
{ … }
static void ath_node_detach(struct ath_softc *sc, struct ieee80211_sta *sta)
{ … }
void ath9k_tasklet(struct tasklet_struct *t)
{ … }
irqreturn_t ath_isr(int irq, void *dev)
{ … }
int ath_reset(struct ath_softc *sc, struct ath9k_channel *hchan)
{ … }
void ath9k_queue_reset(struct ath_softc *sc, enum ath_reset_type type)
{ … }
void ath_reset_work(struct work_struct *work)
{ … }
static int ath9k_start(struct ieee80211_hw *hw)
{ … }
static void ath9k_tx(struct ieee80211_hw *hw,
struct ieee80211_tx_control *control,
struct sk_buff *skb)
{ … }
static bool ath9k_txq_list_has_key(struct list_head *txq_list, u32 keyix)
{ … }
static bool ath9k_txq_has_key(struct ath_softc *sc, u32 keyix)
{ … }
static void ath9k_pending_key_del(struct ath_softc *sc, u8 keyix)
{ … }
static void ath9k_stop(struct ieee80211_hw *hw, bool suspend)
{ … }
static bool ath9k_uses_beacons(int type)
{ … }
static void ath9k_vif_iter_set_beacon(struct ath9k_vif_iter_data *iter_data,
struct ieee80211_vif *vif)
{ … }
static void ath9k_vif_iter(struct ath9k_vif_iter_data *iter_data,
u8 *mac, struct ieee80211_vif *vif)
{ … }
static void ath9k_update_bssid_mask(struct ath_softc *sc,
struct ath_chanctx *ctx,
struct ath9k_vif_iter_data *iter_data)
{ … }
void ath9k_calculate_iter_data(struct ath_softc *sc,
struct ath_chanctx *ctx,
struct ath9k_vif_iter_data *iter_data)
{ … }
static void ath9k_set_assoc_state(struct ath_softc *sc,
struct ieee80211_vif *vif, bool changed)
{ … }
#ifdef CONFIG_ATH9K_CHANNEL_CONTEXT
static void ath9k_set_offchannel_state(struct ath_softc *sc)
{ … }
#endif
void ath9k_calculate_summary_state(struct ath_softc *sc,
struct ath_chanctx *ctx)
{ … }
static void ath9k_tpc_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
{ … }
void ath9k_set_txpower(struct ath_softc *sc, struct ieee80211_vif *vif)
{ … }
static void ath9k_assign_hw_queues(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
static int ath9k_add_interface(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
static int ath9k_change_interface(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
enum nl80211_iftype new_type,
bool p2p)
{ … }
static void ath9k_remove_interface(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
static void ath9k_enable_ps(struct ath_softc *sc)
{ … }
static void ath9k_disable_ps(struct ath_softc *sc)
{ … }
static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
{ … }
#define SUPPORTED_FILTERS …
static void ath9k_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *total_flags,
u64 multicast)
{ … }
static int ath9k_sta_add(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
static void ath9k_del_ps_key(struct ath_softc *sc,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
static int ath9k_sta_remove(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
static int ath9k_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 void ath9k_sta_set_tx_filter(struct ath_hw *ah,
struct ath_node *an,
bool set)
{ … }
static void ath9k_sta_notify(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
enum sta_notify_cmd cmd,
struct ieee80211_sta *sta)
{ … }
static int ath9k_conf_tx(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
unsigned int link_id, u16 queue,
const struct ieee80211_tx_queue_params *params)
{ … }
static int ath9k_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 ath9k_bss_info_changed(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_bss_conf *bss_conf,
u64 changed)
{ … }
static u64 ath9k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
{ … }
static void ath9k_set_tsf(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
u64 tsf)
{ … }
static void ath9k_reset_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
{ … }
static int ath9k_ampdu_action(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_ampdu_params *params)
{ … }
static int ath9k_get_survey(struct ieee80211_hw *hw, int idx,
struct survey_info *survey)
{ … }
static void ath9k_enable_dynack(struct ath_softc *sc)
{ … }
static void ath9k_set_coverage_class(struct ieee80211_hw *hw,
s16 coverage_class)
{ … }
static bool ath9k_has_tx_pending(struct ath_softc *sc,
bool sw_pending)
{ … }
static void ath9k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
u32 queues, bool drop)
{ … }
void __ath9k_flush(struct ieee80211_hw *hw, u32 queues, bool drop,
bool sw_pending, bool timeout_override)
{ … }
static bool ath9k_tx_frames_pending(struct ieee80211_hw *hw)
{ … }
static int ath9k_tx_last_beacon(struct ieee80211_hw *hw)
{ … }
static int ath9k_get_stats(struct ieee80211_hw *hw,
struct ieee80211_low_level_stats *stats)
{ … }
static u32 fill_chainmask(u32 cap, u32 new)
{ … }
static bool validate_antenna_mask(struct ath_hw *ah, u32 val)
{ … }
static int ath9k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
{ … }
static int ath9k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
{ … }
static void ath9k_sw_scan_start(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
const u8 *mac_addr)
{ … }
static void ath9k_sw_scan_complete(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
#ifdef CONFIG_ATH9K_CHANNEL_CONTEXT
static void ath9k_cancel_pending_offchannel(struct ath_softc *sc)
{ … }
static int ath9k_hw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
struct ieee80211_scan_request *hw_req)
{ … }
static void ath9k_cancel_hw_scan(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
static int ath9k_remain_on_channel(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_channel *chan, int duration,
enum ieee80211_roc_type type)
{ … }
static int ath9k_cancel_remain_on_channel(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ … }
static int ath9k_add_chanctx(struct ieee80211_hw *hw,
struct ieee80211_chanctx_conf *conf)
{ … }
static void ath9k_remove_chanctx(struct ieee80211_hw *hw,
struct ieee80211_chanctx_conf *conf)
{ … }
static void ath9k_change_chanctx(struct ieee80211_hw *hw,
struct ieee80211_chanctx_conf *conf,
u32 changed)
{ … }
static int ath9k_assign_vif_chanctx(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_bss_conf *link_conf,
struct ieee80211_chanctx_conf *conf)
{ … }
static void ath9k_unassign_vif_chanctx(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_bss_conf *link_conf,
struct ieee80211_chanctx_conf *conf)
{ … }
static void ath9k_mgd_prepare_tx(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_prep_tx_info *info)
{ … }
void ath9k_fill_chanctx_ops(void)
{ … }
#endif
static int ath9k_get_txpower(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
int *dbm)
{ … }
struct ieee80211_ops ath9k_ops = …;