Merge tag 'wireless-drivers-next-for-davem-2017-11-03' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next
Kalle Valo says: ==================== wireless-drivers-next patches for 4.15 Mostly fixes this time, but also few new features. Major changes: wil6210 * remove ssid debugfs file rsi * add WOWLAN support for suspend, hibernate and shutdown states ath10k * add support for CCMP-256, GCMP and GCMP-256 ciphers on hardware where it's supported (QCA99x0 and QCA4019) ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
|
||||
#include <asm/unaligned.h>
|
||||
#include <linux/kernel.h>
|
||||
#include "hw.h"
|
||||
#include "ar9003_phy.h"
|
||||
#include "ar9003_eeprom.h"
|
||||
@@ -2946,14 +2947,12 @@ static const struct ar9300_eeprom *ar9300_eep_templates[] = {
|
||||
|
||||
static const struct ar9300_eeprom *ar9003_eeprom_struct_find_by_id(int id)
|
||||
{
|
||||
#define N_LOOP (sizeof(ar9300_eep_templates) / sizeof(ar9300_eep_templates[0]))
|
||||
int it;
|
||||
|
||||
for (it = 0; it < N_LOOP; it++)
|
||||
for (it = 0; it < ARRAY_SIZE(ar9300_eep_templates); it++)
|
||||
if (ar9300_eep_templates[it]->templateVersion == id)
|
||||
return ar9300_eep_templates[it];
|
||||
return NULL;
|
||||
#undef N_LOOP
|
||||
}
|
||||
|
||||
static int ath9k_hw_ar9300_check_eeprom(struct ath_hw *ah)
|
||||
|
@@ -480,7 +480,7 @@ EXPORT_SYMBOL(ath9k_hw_addrxbuf_edma);
|
||||
int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah, struct ath_rx_status *rxs,
|
||||
void *buf_addr)
|
||||
{
|
||||
struct ar9003_rxs *rxsp = (struct ar9003_rxs *) buf_addr;
|
||||
struct ar9003_rxs *rxsp = buf_addr;
|
||||
unsigned int phyerr;
|
||||
|
||||
if ((rxsp->status11 & AR_RxDone) == 0)
|
||||
@@ -610,7 +610,7 @@ void ath9k_hw_setup_statusring(struct ath_hw *ah, void *ts_start,
|
||||
ah->ts_paddr_start = ts_paddr_start;
|
||||
ah->ts_paddr_end = ts_paddr_start + (size * sizeof(struct ar9003_txs));
|
||||
ah->ts_size = size;
|
||||
ah->ts_ring = (struct ar9003_txs *) ts_start;
|
||||
ah->ts_ring = ts_start;
|
||||
|
||||
ath9k_hw_reset_txstatus_ring(ah);
|
||||
}
|
||||
|
@@ -750,14 +750,14 @@ void ath_reset_work(struct work_struct *work);
|
||||
bool ath_hw_check(struct ath_softc *sc);
|
||||
void ath_hw_pll_work(struct work_struct *work);
|
||||
void ath_paprd_calibrate(struct work_struct *work);
|
||||
void ath_ani_calibrate(unsigned long data);
|
||||
void ath_ani_calibrate(struct timer_list *t);
|
||||
void ath_start_ani(struct ath_softc *sc);
|
||||
void ath_stop_ani(struct ath_softc *sc);
|
||||
void ath_check_ani(struct ath_softc *sc);
|
||||
int ath_update_survey_stats(struct ath_softc *sc);
|
||||
void ath_update_survey_nf(struct ath_softc *sc, int channel);
|
||||
void ath9k_queue_reset(struct ath_softc *sc, enum ath_reset_type type);
|
||||
void ath_ps_full_sleep(unsigned long data);
|
||||
void ath_ps_full_sleep(struct timer_list *t);
|
||||
void __ath9k_flush(struct ieee80211_hw *hw, u32 queues, bool drop,
|
||||
bool sw_pending, bool timeout_override);
|
||||
|
||||
|
@@ -29,6 +29,7 @@ static int ath_set_channel(struct ath_softc *sc)
|
||||
struct cfg80211_chan_def *chandef = &sc->cur_chan->chandef;
|
||||
struct ieee80211_channel *chan = chandef->chan;
|
||||
int pos = chan->hw_value;
|
||||
unsigned long flags;
|
||||
int old_pos = -1;
|
||||
int r;
|
||||
|
||||
@@ -42,9 +43,9 @@ static int ath_set_channel(struct ath_softc *sc)
|
||||
chan->center_freq, chandef->width);
|
||||
|
||||
/* update survey stats for the old channel before switching */
|
||||
spin_lock_bh(&common->cc_lock);
|
||||
spin_lock_irqsave(&common->cc_lock, flags);
|
||||
ath_update_survey_stats(sc);
|
||||
spin_unlock_bh(&common->cc_lock);
|
||||
spin_unlock_irqrestore(&common->cc_lock, flags);
|
||||
|
||||
ath9k_cmn_get_channel(hw, ah, chandef);
|
||||
|
||||
@@ -1042,9 +1043,9 @@ static void ath_scan_channel_start(struct ath_softc *sc)
|
||||
mod_timer(&sc->offchannel.timer, jiffies + sc->offchannel.duration);
|
||||
}
|
||||
|
||||
static void ath_chanctx_timer(unsigned long data)
|
||||
static void ath_chanctx_timer(struct timer_list *t)
|
||||
{
|
||||
struct ath_softc *sc = (struct ath_softc *) data;
|
||||
struct ath_softc *sc = from_timer(sc, t, sched.timer);
|
||||
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
||||
|
||||
ath_dbg(common, CHAN_CTX,
|
||||
@@ -1053,9 +1054,9 @@ static void ath_chanctx_timer(unsigned long data)
|
||||
ath_chanctx_event(sc, NULL, ATH_CHANCTX_EVENT_TSF_TIMER);
|
||||
}
|
||||
|
||||
static void ath_offchannel_timer(unsigned long data)
|
||||
static void ath_offchannel_timer(struct timer_list *t)
|
||||
{
|
||||
struct ath_softc *sc = (struct ath_softc *)data;
|
||||
struct ath_softc *sc = from_timer(sc, t, offchannel.timer);
|
||||
struct ath_chanctx *ctx;
|
||||
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
||||
|
||||
@@ -1361,10 +1362,8 @@ void ath9k_init_channel_context(struct ath_softc *sc)
|
||||
{
|
||||
INIT_WORK(&sc->chanctx_work, ath_chanctx_work);
|
||||
|
||||
setup_timer(&sc->offchannel.timer, ath_offchannel_timer,
|
||||
(unsigned long)sc);
|
||||
setup_timer(&sc->sched.timer, ath_chanctx_timer,
|
||||
(unsigned long)sc);
|
||||
timer_setup(&sc->offchannel.timer, ath_offchannel_timer, 0);
|
||||
timer_setup(&sc->sched.timer, ath_chanctx_timer, 0);
|
||||
|
||||
init_completion(&sc->go_beacon);
|
||||
}
|
||||
|
@@ -916,7 +916,7 @@ static int open_file_regdump(struct inode *inode, struct file *file)
|
||||
u8 *buf;
|
||||
int i, j = 0;
|
||||
unsigned long num_regs, regdump_len, max_reg_offset;
|
||||
const struct reg_hole {
|
||||
static const struct reg_hole {
|
||||
u32 start;
|
||||
u32 end;
|
||||
} reg_hole_list[] = {
|
||||
@@ -1167,7 +1167,7 @@ static ssize_t write_file_tpc(struct file *file, const char __user *user_buf,
|
||||
if (kstrtoul(buf, 0, &val))
|
||||
return -EINVAL;
|
||||
|
||||
if (val < 0 || val > 1)
|
||||
if (val > 1)
|
||||
return -EINVAL;
|
||||
|
||||
tpc_enabled = !!val;
|
||||
|
@@ -326,7 +326,7 @@ void ath9k_dfs_process_phyerr(struct ath_softc *sc, void *data,
|
||||
if (ard.ext_rssi & 0x80)
|
||||
ard.ext_rssi = 0;
|
||||
|
||||
vdata_end = (char *)data + datalen;
|
||||
vdata_end = data + datalen;
|
||||
ard.pulse_bw_info = vdata_end[-1];
|
||||
ard.pulse_length_ext = vdata_end[-2];
|
||||
ard.pulse_length_pri = vdata_end[-3];
|
||||
|
@@ -191,9 +191,9 @@ static void ath_mci_ftp_adjust(struct ath_softc *sc)
|
||||
* 45ms, bt traffic will be given priority during 55% of this
|
||||
* period while wlan gets remaining 45%
|
||||
*/
|
||||
static void ath_btcoex_period_timer(unsigned long data)
|
||||
static void ath_btcoex_period_timer(struct timer_list *t)
|
||||
{
|
||||
struct ath_softc *sc = (struct ath_softc *) data;
|
||||
struct ath_softc *sc = from_timer(sc, t, btcoex.period_timer);
|
||||
struct ath_hw *ah = sc->sc_ah;
|
||||
struct ath_btcoex *btcoex = &sc->btcoex;
|
||||
enum ath_stomp_type stomp_type;
|
||||
@@ -252,9 +252,9 @@ skip_hw_wakeup:
|
||||
* Generic tsf based hw timer which configures weight
|
||||
* registers to time slice between wlan and bt traffic
|
||||
*/
|
||||
static void ath_btcoex_no_stomp_timer(unsigned long arg)
|
||||
static void ath_btcoex_no_stomp_timer(struct timer_list *t)
|
||||
{
|
||||
struct ath_softc *sc = (struct ath_softc *)arg;
|
||||
struct ath_softc *sc = from_timer(sc, t, btcoex.no_stomp_timer);
|
||||
struct ath_hw *ah = sc->sc_ah;
|
||||
struct ath_btcoex *btcoex = &sc->btcoex;
|
||||
|
||||
@@ -284,10 +284,8 @@ static void ath_init_btcoex_timer(struct ath_softc *sc)
|
||||
btcoex->btcoex_period / 100;
|
||||
btcoex->bt_stomp_type = ATH_BTCOEX_STOMP_LOW;
|
||||
|
||||
setup_timer(&btcoex->period_timer, ath_btcoex_period_timer,
|
||||
(unsigned long) sc);
|
||||
setup_timer(&btcoex->no_stomp_timer, ath_btcoex_no_stomp_timer,
|
||||
(unsigned long) sc);
|
||||
timer_setup(&btcoex->period_timer, ath_btcoex_period_timer, 0);
|
||||
timer_setup(&btcoex->no_stomp_timer, ath_btcoex_no_stomp_timer, 0);
|
||||
|
||||
spin_lock_init(&btcoex->btcoex_lock);
|
||||
}
|
||||
|
@@ -424,7 +424,7 @@ static int hif_usb_send_tx(struct hif_device_usb *hif_dev, struct sk_buff *skb)
|
||||
|
||||
static void hif_usb_start(void *hif_handle)
|
||||
{
|
||||
struct hif_device_usb *hif_dev = (struct hif_device_usb *)hif_handle;
|
||||
struct hif_device_usb *hif_dev = hif_handle;
|
||||
unsigned long flags;
|
||||
|
||||
hif_dev->flags |= HIF_USB_START;
|
||||
@@ -436,7 +436,7 @@ static void hif_usb_start(void *hif_handle)
|
||||
|
||||
static void hif_usb_stop(void *hif_handle)
|
||||
{
|
||||
struct hif_device_usb *hif_dev = (struct hif_device_usb *)hif_handle;
|
||||
struct hif_device_usb *hif_dev = hif_handle;
|
||||
struct tx_buf *tx_buf = NULL, *tx_buf_tmp = NULL;
|
||||
unsigned long flags;
|
||||
|
||||
@@ -457,7 +457,7 @@ static void hif_usb_stop(void *hif_handle)
|
||||
|
||||
static int hif_usb_send(void *hif_handle, u8 pipe_id, struct sk_buff *skb)
|
||||
{
|
||||
struct hif_device_usb *hif_dev = (struct hif_device_usb *)hif_handle;
|
||||
struct hif_device_usb *hif_dev = hif_handle;
|
||||
int ret = 0;
|
||||
|
||||
switch (pipe_id) {
|
||||
@@ -492,7 +492,7 @@ static inline bool check_index(struct sk_buff *skb, u8 idx)
|
||||
|
||||
static void hif_usb_sta_drain(void *hif_handle, u8 idx)
|
||||
{
|
||||
struct hif_device_usb *hif_dev = (struct hif_device_usb *)hif_handle;
|
||||
struct hif_device_usb *hif_dev = hif_handle;
|
||||
struct sk_buff *skb, *tmp;
|
||||
unsigned long flags;
|
||||
|
||||
|
@@ -584,7 +584,7 @@ void ath9k_htc_tx_clear_slot(struct ath9k_htc_priv *priv, int slot);
|
||||
void ath9k_htc_tx_drain(struct ath9k_htc_priv *priv);
|
||||
void ath9k_htc_txstatus(struct ath9k_htc_priv *priv, void *wmi_event);
|
||||
void ath9k_tx_failed_tasklet(unsigned long data);
|
||||
void ath9k_htc_tx_cleanup_timer(unsigned long data);
|
||||
void ath9k_htc_tx_cleanup_timer(struct timer_list *t);
|
||||
bool ath9k_htc_csa_is_finished(struct ath9k_htc_priv *priv);
|
||||
|
||||
int ath9k_rx_init(struct ath9k_htc_priv *priv);
|
||||
|
@@ -384,7 +384,7 @@ void ath9k_htc_set_tsfadjust(struct ath9k_htc_priv *priv,
|
||||
|
||||
static void ath9k_htc_beacon_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
|
||||
{
|
||||
bool *beacon_configured = (bool *)data;
|
||||
bool *beacon_configured = data;
|
||||
struct ath9k_htc_vif *avp = (struct ath9k_htc_vif *) vif->drv_priv;
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_STATION &&
|
||||
|
@@ -233,7 +233,7 @@ static void ath9k_reg_notifier(struct wiphy *wiphy,
|
||||
|
||||
static unsigned int ath9k_regread(void *hw_priv, u32 reg_offset)
|
||||
{
|
||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||
struct ath_hw *ah = hw_priv;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
|
||||
__be32 val, reg = cpu_to_be32(reg_offset);
|
||||
@@ -255,7 +255,7 @@ static unsigned int ath9k_regread(void *hw_priv, u32 reg_offset)
|
||||
static void ath9k_multi_regread(void *hw_priv, u32 *addr,
|
||||
u32 *val, u16 count)
|
||||
{
|
||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||
struct ath_hw *ah = hw_priv;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
|
||||
__be32 tmpaddr[8];
|
||||
@@ -301,7 +301,7 @@ static void ath9k_regwrite_multi(struct ath_common *common)
|
||||
|
||||
static void ath9k_regwrite_single(void *hw_priv, u32 val, u32 reg_offset)
|
||||
{
|
||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||
struct ath_hw *ah = hw_priv;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
|
||||
const __be32 buf[2] = {
|
||||
@@ -322,7 +322,7 @@ static void ath9k_regwrite_single(void *hw_priv, u32 val, u32 reg_offset)
|
||||
|
||||
static void ath9k_regwrite_buffer(void *hw_priv, u32 val, u32 reg_offset)
|
||||
{
|
||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||
struct ath_hw *ah = hw_priv;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
|
||||
|
||||
@@ -345,7 +345,7 @@ static void ath9k_regwrite_buffer(void *hw_priv, u32 val, u32 reg_offset)
|
||||
|
||||
static void ath9k_regwrite(void *hw_priv, u32 val, u32 reg_offset)
|
||||
{
|
||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||
struct ath_hw *ah = hw_priv;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
|
||||
|
||||
@@ -357,7 +357,7 @@ static void ath9k_regwrite(void *hw_priv, u32 val, u32 reg_offset)
|
||||
|
||||
static void ath9k_enable_regwrite_buffer(void *hw_priv)
|
||||
{
|
||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||
struct ath_hw *ah = hw_priv;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
|
||||
|
||||
@@ -366,7 +366,7 @@ static void ath9k_enable_regwrite_buffer(void *hw_priv)
|
||||
|
||||
static void ath9k_regwrite_flush(void *hw_priv)
|
||||
{
|
||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||
struct ath_hw *ah = hw_priv;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
|
||||
|
||||
@@ -383,7 +383,7 @@ static void ath9k_regwrite_flush(void *hw_priv)
|
||||
static void ath9k_reg_rmw_buffer(void *hw_priv,
|
||||
u32 reg_offset, u32 set, u32 clr)
|
||||
{
|
||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||
struct ath_hw *ah = hw_priv;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
|
||||
u32 rsp_status;
|
||||
@@ -421,7 +421,7 @@ static void ath9k_reg_rmw_buffer(void *hw_priv,
|
||||
|
||||
static void ath9k_reg_rmw_flush(void *hw_priv)
|
||||
{
|
||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||
struct ath_hw *ah = hw_priv;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
|
||||
u32 rsp_status;
|
||||
@@ -453,7 +453,7 @@ static void ath9k_reg_rmw_flush(void *hw_priv)
|
||||
|
||||
static void ath9k_enable_rmw_buffer(void *hw_priv)
|
||||
{
|
||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||
struct ath_hw *ah = hw_priv;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
|
||||
|
||||
@@ -466,7 +466,7 @@ static void ath9k_enable_rmw_buffer(void *hw_priv)
|
||||
static u32 ath9k_reg_rmw_single(void *hw_priv,
|
||||
u32 reg_offset, u32 set, u32 clr)
|
||||
{
|
||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||
struct ath_hw *ah = hw_priv;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
|
||||
struct register_rmw buf, buf_ret;
|
||||
@@ -490,7 +490,7 @@ static u32 ath9k_reg_rmw_single(void *hw_priv,
|
||||
|
||||
static u32 ath9k_reg_rmw(void *hw_priv, u32 reg_offset, u32 set, u32 clr)
|
||||
{
|
||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||
struct ath_hw *ah = hw_priv;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
|
||||
|
||||
@@ -654,8 +654,7 @@ static int ath9k_init_priv(struct ath9k_htc_priv *priv,
|
||||
INIT_DELAYED_WORK(&priv->ani_work, ath9k_htc_ani_work);
|
||||
INIT_WORK(&priv->ps_work, ath9k_ps_work);
|
||||
INIT_WORK(&priv->fatal_work, ath9k_fatal_work);
|
||||
setup_timer(&priv->tx.cleanup_timer, ath9k_htc_tx_cleanup_timer,
|
||||
(unsigned long)priv);
|
||||
timer_setup(&priv->tx.cleanup_timer, ath9k_htc_tx_cleanup_timer, 0);
|
||||
|
||||
/*
|
||||
* Cache line size is used to size and align various
|
||||
|
@@ -1483,7 +1483,7 @@ static void ath9k_htc_set_bssid(struct ath9k_htc_priv *priv)
|
||||
|
||||
static void ath9k_htc_bss_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
|
||||
{
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *)data;
|
||||
struct ath9k_htc_priv *priv = data;
|
||||
struct ath_common *common = ath9k_hw_common(priv->ah);
|
||||
struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
|
||||
|
||||
|
@@ -641,7 +641,7 @@ static struct sk_buff* ath9k_htc_tx_get_packet(struct ath9k_htc_priv *priv,
|
||||
|
||||
void ath9k_htc_txstatus(struct ath9k_htc_priv *priv, void *wmi_event)
|
||||
{
|
||||
struct wmi_event_txstatus *txs = (struct wmi_event_txstatus *)wmi_event;
|
||||
struct wmi_event_txstatus *txs = wmi_event;
|
||||
struct __wmi_event_txstatus *__txs;
|
||||
struct sk_buff *skb;
|
||||
struct ath9k_htc_tx_event *tx_pend;
|
||||
@@ -684,7 +684,7 @@ void ath9k_htc_txstatus(struct ath9k_htc_priv *priv, void *wmi_event)
|
||||
void ath9k_htc_txep(void *drv_priv, struct sk_buff *skb,
|
||||
enum htc_endpoint_id ep_id, bool txok)
|
||||
{
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) drv_priv;
|
||||
struct ath9k_htc_priv *priv = drv_priv;
|
||||
struct ath9k_htc_tx_ctl *tx_ctl;
|
||||
struct sk_buff_head *epid_queue;
|
||||
|
||||
@@ -752,9 +752,9 @@ static void ath9k_htc_tx_cleanup_queue(struct ath9k_htc_priv *priv,
|
||||
}
|
||||
}
|
||||
|
||||
void ath9k_htc_tx_cleanup_timer(unsigned long data)
|
||||
void ath9k_htc_tx_cleanup_timer(struct timer_list *t)
|
||||
{
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) data;
|
||||
struct ath9k_htc_priv *priv = from_timer(priv, t, tx.cleanup_timer);
|
||||
struct ath_common *common = ath9k_hw_common(priv->ah);
|
||||
struct ath9k_htc_tx_event *event, *tmp;
|
||||
struct sk_buff *skb;
|
||||
@@ -1103,7 +1103,7 @@ requeue:
|
||||
void ath9k_htc_rxep(void *drv_priv, struct sk_buff *skb,
|
||||
enum htc_endpoint_id ep_id)
|
||||
{
|
||||
struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *)drv_priv;
|
||||
struct ath9k_htc_priv *priv = drv_priv;
|
||||
struct ath_hw *ah = priv->ah;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath9k_htc_rxbuf *rxbuf = NULL, *tmp_buf = NULL;
|
||||
|
@@ -117,7 +117,7 @@ static const struct ath_ps_ops ath9k_ps_ops = {
|
||||
|
||||
static void ath9k_iowrite32(void *hw_priv, u32 val, u32 reg_offset)
|
||||
{
|
||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||
struct ath_hw *ah = hw_priv;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath_softc *sc = (struct ath_softc *) common->priv;
|
||||
|
||||
@@ -132,7 +132,7 @@ static void ath9k_iowrite32(void *hw_priv, u32 val, u32 reg_offset)
|
||||
|
||||
static unsigned int ath9k_ioread32(void *hw_priv, u32 reg_offset)
|
||||
{
|
||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||
struct ath_hw *ah = hw_priv;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath_softc *sc = (struct ath_softc *) common->priv;
|
||||
u32 val;
|
||||
@@ -172,7 +172,7 @@ static unsigned int __ath9k_reg_rmw(struct ath_softc *sc, u32 reg_offset,
|
||||
|
||||
static unsigned int ath9k_reg_rmw(void *hw_priv, u32 reg_offset, u32 set, u32 clr)
|
||||
{
|
||||
struct ath_hw *ah = (struct ath_hw *) hw_priv;
|
||||
struct ath_hw *ah = hw_priv;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ath_softc *sc = (struct ath_softc *) common->priv;
|
||||
unsigned long uninitialized_var(flags);
|
||||
@@ -275,7 +275,7 @@ int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
|
||||
if (!dd->dd_desc)
|
||||
return -ENOMEM;
|
||||
|
||||
ds = (u8 *) dd->dd_desc;
|
||||
ds = dd->dd_desc;
|
||||
ath_dbg(common, CONFIG, "%s DMA map: %p (%u) -> %llx (%u)\n",
|
||||
name, ds, (u32) dd->dd_desc_len,
|
||||
ito64(dd->dd_desc_paddr), /*XXX*/(u32) dd->dd_desc_len);
|
||||
@@ -369,7 +369,7 @@ static void ath9k_init_misc(struct ath_softc *sc)
|
||||
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
||||
int i = 0;
|
||||
|
||||
setup_timer(&common->ani.timer, ath_ani_calibrate, (unsigned long)sc);
|
||||
timer_setup(&common->ani.timer, ath_ani_calibrate, 0);
|
||||
|
||||
common->last_rssi = ATH_RSSI_DUMMY_MARKER;
|
||||
memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
|
||||
@@ -678,7 +678,7 @@ static int ath9k_init_softc(u16 devid, struct ath_softc *sc,
|
||||
tasklet_init(&sc->bcon_tasklet, ath9k_beacon_tasklet,
|
||||
(unsigned long)sc);
|
||||
|
||||
setup_timer(&sc->sleep_timer, ath_ps_full_sleep, (unsigned long)sc);
|
||||
timer_setup(&sc->sleep_timer, ath_ps_full_sleep, 0);
|
||||
INIT_WORK(&sc->hw_reset_work, ath_reset_work);
|
||||
INIT_WORK(&sc->paprd_work, ath_paprd_calibrate);
|
||||
INIT_DELAYED_WORK(&sc->hw_pll_work, ath_hw_pll_work);
|
||||
|
@@ -301,11 +301,11 @@ fail_paprd:
|
||||
* When the task is complete, it reschedules itself depending on the
|
||||
* appropriate interval that was calculated.
|
||||
*/
|
||||
void ath_ani_calibrate(unsigned long data)
|
||||
void ath_ani_calibrate(struct timer_list *t)
|
||||
{
|
||||
struct ath_softc *sc = (struct ath_softc *)data;
|
||||
struct ath_common *common = from_timer(common, t, ani.timer);
|
||||
struct ath_softc *sc = (struct ath_softc *)common->priv;
|
||||
struct ath_hw *ah = sc->sc_ah;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
bool longcal = false;
|
||||
bool shortcal = false;
|
||||
bool aniflag = false;
|
||||
@@ -367,10 +367,10 @@ void ath_ani_calibrate(unsigned long data)
|
||||
|
||||
/* Call ANI routine if necessary */
|
||||
if (aniflag) {
|
||||
spin_lock(&common->cc_lock);
|
||||
spin_lock_irqsave(&common->cc_lock, flags);
|
||||
ath9k_hw_ani_monitor(ah, ah->curchan);
|
||||
ath_update_survey_stats(sc);
|
||||
spin_unlock(&common->cc_lock);
|
||||
spin_unlock_irqrestore(&common->cc_lock, flags);
|
||||
}
|
||||
|
||||
/* Perform calibration if necessary */
|
||||
|
@@ -93,15 +93,16 @@ static bool ath9k_setpower(struct ath_softc *sc, enum ath9k_power_mode mode)
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ath_ps_full_sleep(unsigned long data)
|
||||
void ath_ps_full_sleep(struct timer_list *t)
|
||||
{
|
||||
struct ath_softc *sc = (struct ath_softc *) data;
|
||||
struct ath_softc *sc = from_timer(sc, t, sleep_timer);
|
||||
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
||||
unsigned long flags;
|
||||
bool reset;
|
||||
|
||||
spin_lock(&common->cc_lock);
|
||||
spin_lock_irqsave(&common->cc_lock, flags);
|
||||
ath_hw_cycle_counters_update(common);
|
||||
spin_unlock(&common->cc_lock);
|
||||
spin_unlock_irqrestore(&common->cc_lock, flags);
|
||||
|
||||
ath9k_hw_setrxabort(sc->sc_ah, 1);
|
||||
ath9k_hw_stopdmarecv(sc->sc_ah, &reset);
|
||||
@@ -394,10 +395,10 @@ void ath9k_tasklet(unsigned long data)
|
||||
|
||||
if ((ah->config.hw_hang_checks & HW_BB_WATCHDOG) &&
|
||||
(status & ATH9K_INT_BB_WATCHDOG)) {
|
||||
spin_lock(&common->cc_lock);
|
||||
spin_lock_irqsave(&common->cc_lock, flags);
|
||||
ath_hw_cycle_counters_update(common);
|
||||
ar9003_hw_bb_watchdog_dbg_info(ah);
|
||||
spin_unlock(&common->cc_lock);
|
||||
spin_unlock_irqrestore(&common->cc_lock, flags);
|
||||
|
||||
if (ar9003_hw_bb_watchdog_check(ah)) {
|
||||
type = RESET_TYPE_BB_WATCHDOG;
|
||||
@@ -1193,7 +1194,7 @@ void ath9k_calculate_summary_state(struct ath_softc *sc,
|
||||
|
||||
static void ath9k_tpc_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
|
||||
{
|
||||
int *power = (int *)data;
|
||||
int *power = data;
|
||||
|
||||
if (*power < vif->bss_conf.txpower)
|
||||
*power = vif->bss_conf.txpower;
|
||||
@@ -1955,12 +1956,13 @@ static int ath9k_get_survey(struct ieee80211_hw *hw, int idx,
|
||||
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
||||
struct ieee80211_supported_band *sband;
|
||||
struct ieee80211_channel *chan;
|
||||
unsigned long flags;
|
||||
int pos;
|
||||
|
||||
if (IS_ENABLED(CONFIG_ATH9K_TX99))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
spin_lock_bh(&common->cc_lock);
|
||||
spin_lock_irqsave(&common->cc_lock, flags);
|
||||
if (idx == 0)
|
||||
ath_update_survey_stats(sc);
|
||||
|
||||
@@ -1974,7 +1976,7 @@ static int ath9k_get_survey(struct ieee80211_hw *hw, int idx,
|
||||
sband = hw->wiphy->bands[NL80211_BAND_5GHZ];
|
||||
|
||||
if (!sband || idx >= sband->n_channels) {
|
||||
spin_unlock_bh(&common->cc_lock);
|
||||
spin_unlock_irqrestore(&common->cc_lock, flags);
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
@@ -1982,7 +1984,7 @@ static int ath9k_get_survey(struct ieee80211_hw *hw, int idx,
|
||||
pos = chan->hw_value;
|
||||
memcpy(survey, &sc->survey[pos], sizeof(*survey));
|
||||
survey->channel = chan;
|
||||
spin_unlock_bh(&common->cc_lock);
|
||||
spin_unlock_irqrestore(&common->cc_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -453,7 +453,7 @@ int ath_mci_setup(struct ath_softc *sc)
|
||||
mci->sched_buf.bf_len = ATH_MCI_SCHED_BUF_SIZE;
|
||||
|
||||
mci->gpm_buf.bf_len = ATH_MCI_GPM_BUF_SIZE;
|
||||
mci->gpm_buf.bf_addr = (u8 *)mci->sched_buf.bf_addr + mci->sched_buf.bf_len;
|
||||
mci->gpm_buf.bf_addr = mci->sched_buf.bf_addr + mci->sched_buf.bf_len;
|
||||
mci->gpm_buf.bf_paddr = mci->sched_buf.bf_paddr + mci->sched_buf.bf_len;
|
||||
|
||||
ret = ar9003_mci_setup(sc->sc_ah, mci->gpm_buf.bf_paddr,
|
||||
|
@@ -179,6 +179,9 @@ static ssize_t write_file_tx99(struct file *file, const char __user *user_buf,
|
||||
ssize_t len;
|
||||
int r;
|
||||
|
||||
if (count < 1)
|
||||
return -EINVAL;
|
||||
|
||||
if (sc->cur_chan->nvifs > 1)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
@@ -186,6 +189,8 @@ static ssize_t write_file_tx99(struct file *file, const char __user *user_buf,
|
||||
if (copy_from_user(buf, user_buf, len))
|
||||
return -EFAULT;
|
||||
|
||||
buf[len] = '\0';
|
||||
|
||||
if (strtobool(buf, &start))
|
||||
return -EINVAL;
|
||||
|
||||
|
@@ -159,7 +159,7 @@ void ath9k_wmi_event_tasklet(unsigned long data)
|
||||
|
||||
switch (cmd_id) {
|
||||
case WMI_SWBA_EVENTID:
|
||||
swba = (struct wmi_event_swba *) wmi_event;
|
||||
swba = wmi_event;
|
||||
ath9k_htc_swba(priv, swba);
|
||||
break;
|
||||
case WMI_FATAL_EVENTID:
|
||||
@@ -207,7 +207,7 @@ static void ath9k_wmi_rsp_callback(struct wmi *wmi, struct sk_buff *skb)
|
||||
static void ath9k_wmi_ctrl_rx(void *priv, struct sk_buff *skb,
|
||||
enum htc_endpoint_id epid)
|
||||
{
|
||||
struct wmi *wmi = (struct wmi *) priv;
|
||||
struct wmi *wmi = priv;
|
||||
struct wmi_cmd_hdr *hdr;
|
||||
u16 cmd_id;
|
||||
|
||||
|
Reference in New Issue
Block a user