|
@@ -260,6 +260,8 @@ static int ath_set_channel(struct ath_softc *sc, struct ath9k_channel *hchan)
|
|
struct ath_hal *ah = sc->sc_ah;
|
|
struct ath_hal *ah = sc->sc_ah;
|
|
bool fastcc = true, stopped;
|
|
bool fastcc = true, stopped;
|
|
struct ieee80211_hw *hw = sc->hw;
|
|
struct ieee80211_hw *hw = sc->hw;
|
|
|
|
+ struct ieee80211_channel *channel = hw->conf.channel;
|
|
|
|
+ int r;
|
|
|
|
|
|
if (sc->sc_flags & SC_OP_INVALID)
|
|
if (sc->sc_flags & SC_OP_INVALID)
|
|
return -EIO;
|
|
return -EIO;
|
|
@@ -268,7 +270,6 @@ static int ath_set_channel(struct ath_softc *sc, struct ath9k_channel *hchan)
|
|
hchan->channelFlags != sc->sc_ah->ah_curchan->channelFlags ||
|
|
hchan->channelFlags != sc->sc_ah->ah_curchan->channelFlags ||
|
|
(sc->sc_flags & SC_OP_CHAINMASK_UPDATE) ||
|
|
(sc->sc_flags & SC_OP_CHAINMASK_UPDATE) ||
|
|
(sc->sc_flags & SC_OP_FULL_RESET)) {
|
|
(sc->sc_flags & SC_OP_FULL_RESET)) {
|
|
- int status;
|
|
|
|
/*
|
|
/*
|
|
* This is only performed if the channel settings have
|
|
* This is only performed if the channel settings have
|
|
* actually changed.
|
|
* actually changed.
|
|
@@ -290,22 +291,20 @@ static int ath_set_channel(struct ath_softc *sc, struct ath9k_channel *hchan)
|
|
fastcc = false;
|
|
fastcc = false;
|
|
|
|
|
|
DPRINTF(sc, ATH_DBG_CONFIG,
|
|
DPRINTF(sc, ATH_DBG_CONFIG,
|
|
- "(%u MHz) -> (%u MHz), cflags:%x, chanwidth: %d\n",
|
|
|
|
|
|
+ "(%u MHz) -> (%u MHz), chanwidth: %d\n",
|
|
sc->sc_ah->ah_curchan->channel,
|
|
sc->sc_ah->ah_curchan->channel,
|
|
- hchan->channel, hchan->channelFlags, sc->tx_chan_width);
|
|
|
|
|
|
+ channel->center_freq, sc->tx_chan_width);
|
|
|
|
|
|
spin_lock_bh(&sc->sc_resetlock);
|
|
spin_lock_bh(&sc->sc_resetlock);
|
|
- if (!ath9k_hw_reset(ah, hchan, sc->tx_chan_width,
|
|
|
|
- sc->sc_tx_chainmask, sc->sc_rx_chainmask,
|
|
|
|
- sc->sc_ht_extprotspacing, fastcc, &status)) {
|
|
|
|
|
|
+
|
|
|
|
+ r = ath9k_hw_reset(ah, hchan, fastcc);
|
|
|
|
+ if (r) {
|
|
DPRINTF(sc, ATH_DBG_FATAL,
|
|
DPRINTF(sc, ATH_DBG_FATAL,
|
|
- "Unable to reset channel %u (%uMhz) "
|
|
|
|
- "flags 0x%x hal status %u\n",
|
|
|
|
- ath9k_hw_mhz2ieee(ah, hchan->channel,
|
|
|
|
- hchan->channelFlags),
|
|
|
|
- hchan->channel, hchan->channelFlags, status);
|
|
|
|
|
|
+ "Unable to reset channel (%u Mhz) "
|
|
|
|
+ "reset status %u\n",
|
|
|
|
+ channel->center_freq, r);
|
|
spin_unlock_bh(&sc->sc_resetlock);
|
|
spin_unlock_bh(&sc->sc_resetlock);
|
|
- return -EIO;
|
|
|
|
|
|
+ return r;
|
|
}
|
|
}
|
|
spin_unlock_bh(&sc->sc_resetlock);
|
|
spin_unlock_bh(&sc->sc_resetlock);
|
|
|
|
|
|
@@ -1069,23 +1068,18 @@ fail:
|
|
static void ath_radio_enable(struct ath_softc *sc)
|
|
static void ath_radio_enable(struct ath_softc *sc)
|
|
{
|
|
{
|
|
struct ath_hal *ah = sc->sc_ah;
|
|
struct ath_hal *ah = sc->sc_ah;
|
|
- int status;
|
|
|
|
|
|
+ struct ieee80211_channel *channel = sc->hw->conf.channel;
|
|
|
|
+ int r;
|
|
|
|
|
|
spin_lock_bh(&sc->sc_resetlock);
|
|
spin_lock_bh(&sc->sc_resetlock);
|
|
- if (!ath9k_hw_reset(ah, ah->ah_curchan,
|
|
|
|
- sc->tx_chan_width,
|
|
|
|
- sc->sc_tx_chainmask,
|
|
|
|
- sc->sc_rx_chainmask,
|
|
|
|
- sc->sc_ht_extprotspacing,
|
|
|
|
- false, &status)) {
|
|
|
|
|
|
+
|
|
|
|
+ r = ath9k_hw_reset(ah, ah->ah_curchan, false);
|
|
|
|
+
|
|
|
|
+ if (r) {
|
|
DPRINTF(sc, ATH_DBG_FATAL,
|
|
DPRINTF(sc, ATH_DBG_FATAL,
|
|
- "Unable to reset channel %u (%uMhz) "
|
|
|
|
- "flags 0x%x hal status %u\n",
|
|
|
|
- ath9k_hw_mhz2ieee(ah,
|
|
|
|
- ah->ah_curchan->channel,
|
|
|
|
- ah->ah_curchan->channelFlags),
|
|
|
|
- ah->ah_curchan->channel,
|
|
|
|
- ah->ah_curchan->channelFlags, status);
|
|
|
|
|
|
+ "Unable to reset channel %u (%uMhz) ",
|
|
|
|
+ "reset status %u\n",
|
|
|
|
+ channel->center_freq, r);
|
|
}
|
|
}
|
|
spin_unlock_bh(&sc->sc_resetlock);
|
|
spin_unlock_bh(&sc->sc_resetlock);
|
|
|
|
|
|
@@ -1113,8 +1107,8 @@ static void ath_radio_enable(struct ath_softc *sc)
|
|
static void ath_radio_disable(struct ath_softc *sc)
|
|
static void ath_radio_disable(struct ath_softc *sc)
|
|
{
|
|
{
|
|
struct ath_hal *ah = sc->sc_ah;
|
|
struct ath_hal *ah = sc->sc_ah;
|
|
- int status;
|
|
|
|
-
|
|
|
|
|
|
+ struct ieee80211_channel *channel = sc->hw->conf.channel;
|
|
|
|
+ int r;
|
|
|
|
|
|
ieee80211_stop_queues(sc->hw);
|
|
ieee80211_stop_queues(sc->hw);
|
|
|
|
|
|
@@ -1130,20 +1124,12 @@ static void ath_radio_disable(struct ath_softc *sc)
|
|
ath_flushrecv(sc); /* flush recv queue */
|
|
ath_flushrecv(sc); /* flush recv queue */
|
|
|
|
|
|
spin_lock_bh(&sc->sc_resetlock);
|
|
spin_lock_bh(&sc->sc_resetlock);
|
|
- if (!ath9k_hw_reset(ah, ah->ah_curchan,
|
|
|
|
- sc->tx_chan_width,
|
|
|
|
- sc->sc_tx_chainmask,
|
|
|
|
- sc->sc_rx_chainmask,
|
|
|
|
- sc->sc_ht_extprotspacing,
|
|
|
|
- false, &status)) {
|
|
|
|
|
|
+ r = ath9k_hw_reset(ah, ah->ah_curchan, false);
|
|
|
|
+ if (r) {
|
|
DPRINTF(sc, ATH_DBG_FATAL,
|
|
DPRINTF(sc, ATH_DBG_FATAL,
|
|
"Unable to reset channel %u (%uMhz) "
|
|
"Unable to reset channel %u (%uMhz) "
|
|
- "flags 0x%x hal status %u\n",
|
|
|
|
- ath9k_hw_mhz2ieee(ah,
|
|
|
|
- ah->ah_curchan->channel,
|
|
|
|
- ah->ah_curchan->channelFlags),
|
|
|
|
- ah->ah_curchan->channel,
|
|
|
|
- ah->ah_curchan->channelFlags, status);
|
|
|
|
|
|
+ "reset status %u\n",
|
|
|
|
+ channel->center_freq, r);
|
|
}
|
|
}
|
|
spin_unlock_bh(&sc->sc_resetlock);
|
|
spin_unlock_bh(&sc->sc_resetlock);
|
|
|
|
|
|
@@ -1622,8 +1608,7 @@ int ath_reset(struct ath_softc *sc, bool retry_tx)
|
|
{
|
|
{
|
|
struct ath_hal *ah = sc->sc_ah;
|
|
struct ath_hal *ah = sc->sc_ah;
|
|
struct ieee80211_hw *hw = sc->hw;
|
|
struct ieee80211_hw *hw = sc->hw;
|
|
- int status;
|
|
|
|
- int error = 0;
|
|
|
|
|
|
+ int r;
|
|
|
|
|
|
ath9k_hw_set_interrupts(ah, 0);
|
|
ath9k_hw_set_interrupts(ah, 0);
|
|
ath_draintxq(sc, retry_tx);
|
|
ath_draintxq(sc, retry_tx);
|
|
@@ -1631,14 +1616,10 @@ int ath_reset(struct ath_softc *sc, bool retry_tx)
|
|
ath_flushrecv(sc);
|
|
ath_flushrecv(sc);
|
|
|
|
|
|
spin_lock_bh(&sc->sc_resetlock);
|
|
spin_lock_bh(&sc->sc_resetlock);
|
|
- if (!ath9k_hw_reset(ah, sc->sc_ah->ah_curchan,
|
|
|
|
- sc->tx_chan_width,
|
|
|
|
- sc->sc_tx_chainmask, sc->sc_rx_chainmask,
|
|
|
|
- sc->sc_ht_extprotspacing, false, &status)) {
|
|
|
|
|
|
+ r = ath9k_hw_reset(ah, sc->sc_ah->ah_curchan, false);
|
|
|
|
+ if (r)
|
|
DPRINTF(sc, ATH_DBG_FATAL,
|
|
DPRINTF(sc, ATH_DBG_FATAL,
|
|
- "Unable to reset hardware; hal status %u\n", status);
|
|
|
|
- error = -EIO;
|
|
|
|
- }
|
|
|
|
|
|
+ "Unable to reset hardware; reset status %u\n", r);
|
|
spin_unlock_bh(&sc->sc_resetlock);
|
|
spin_unlock_bh(&sc->sc_resetlock);
|
|
|
|
|
|
if (ath_startrecv(sc) != 0)
|
|
if (ath_startrecv(sc) != 0)
|
|
@@ -1669,7 +1650,7 @@ int ath_reset(struct ath_softc *sc, bool retry_tx)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- return error;
|
|
|
|
|
|
+ return r;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -1852,7 +1833,7 @@ static int ath9k_start(struct ieee80211_hw *hw)
|
|
struct ath_softc *sc = hw->priv;
|
|
struct ath_softc *sc = hw->priv;
|
|
struct ieee80211_channel *curchan = hw->conf.channel;
|
|
struct ieee80211_channel *curchan = hw->conf.channel;
|
|
struct ath9k_channel *init_channel;
|
|
struct ath9k_channel *init_channel;
|
|
- int error = 0, pos, status;
|
|
|
|
|
|
+ int r, pos;
|
|
|
|
|
|
DPRINTF(sc, ATH_DBG_CONFIG, "Starting driver with "
|
|
DPRINTF(sc, ATH_DBG_CONFIG, "Starting driver with "
|
|
"initial channel: %d MHz\n", curchan->center_freq);
|
|
"initial channel: %d MHz\n", curchan->center_freq);
|
|
@@ -1862,8 +1843,7 @@ static int ath9k_start(struct ieee80211_hw *hw)
|
|
pos = ath_get_channel(sc, curchan);
|
|
pos = ath_get_channel(sc, curchan);
|
|
if (pos == -1) {
|
|
if (pos == -1) {
|
|
DPRINTF(sc, ATH_DBG_FATAL, "Invalid channel: %d\n", curchan->center_freq);
|
|
DPRINTF(sc, ATH_DBG_FATAL, "Invalid channel: %d\n", curchan->center_freq);
|
|
- error = -EINVAL;
|
|
|
|
- goto error;
|
|
|
|
|
|
+ return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
sc->tx_chan_width = ATH9K_HT_MACMODE_20;
|
|
sc->tx_chan_width = ATH9K_HT_MACMODE_20;
|
|
@@ -1882,17 +1862,14 @@ static int ath9k_start(struct ieee80211_hw *hw)
|
|
* and then setup of the interrupt mask.
|
|
* and then setup of the interrupt mask.
|
|
*/
|
|
*/
|
|
spin_lock_bh(&sc->sc_resetlock);
|
|
spin_lock_bh(&sc->sc_resetlock);
|
|
- if (!ath9k_hw_reset(sc->sc_ah, init_channel,
|
|
|
|
- sc->tx_chan_width,
|
|
|
|
- sc->sc_tx_chainmask, sc->sc_rx_chainmask,
|
|
|
|
- sc->sc_ht_extprotspacing, false, &status)) {
|
|
|
|
|
|
+ r = ath9k_hw_reset(sc->sc_ah, init_channel, false);
|
|
|
|
+ if (r) {
|
|
DPRINTF(sc, ATH_DBG_FATAL,
|
|
DPRINTF(sc, ATH_DBG_FATAL,
|
|
- "Unable to reset hardware; hal status %u "
|
|
|
|
- "(freq %u flags 0x%x)\n", status,
|
|
|
|
- init_channel->channel, init_channel->channelFlags);
|
|
|
|
- error = -EIO;
|
|
|
|
|
|
+ "Unable to reset hardware; reset status %u "
|
|
|
|
+ "(freq %u MHz)\n", r,
|
|
|
|
+ curchan->center_freq);
|
|
spin_unlock_bh(&sc->sc_resetlock);
|
|
spin_unlock_bh(&sc->sc_resetlock);
|
|
- goto error;
|
|
|
|
|
|
+ return r;
|
|
}
|
|
}
|
|
spin_unlock_bh(&sc->sc_resetlock);
|
|
spin_unlock_bh(&sc->sc_resetlock);
|
|
|
|
|
|
@@ -1912,8 +1889,7 @@ static int ath9k_start(struct ieee80211_hw *hw)
|
|
if (ath_startrecv(sc) != 0) {
|
|
if (ath_startrecv(sc) != 0) {
|
|
DPRINTF(sc, ATH_DBG_FATAL,
|
|
DPRINTF(sc, ATH_DBG_FATAL,
|
|
"Unable to start recv logic\n");
|
|
"Unable to start recv logic\n");
|
|
- error = -EIO;
|
|
|
|
- goto error;
|
|
|
|
|
|
+ return -EIO;
|
|
}
|
|
}
|
|
|
|
|
|
/* Setup our intr mask. */
|
|
/* Setup our intr mask. */
|
|
@@ -1957,11 +1933,9 @@ static int ath9k_start(struct ieee80211_hw *hw)
|
|
ieee80211_wake_queues(sc->hw);
|
|
ieee80211_wake_queues(sc->hw);
|
|
|
|
|
|
#if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE)
|
|
#if defined(CONFIG_RFKILL) || defined(CONFIG_RFKILL_MODULE)
|
|
- error = ath_start_rfkill_poll(sc);
|
|
|
|
|
|
+ r = ath_start_rfkill_poll(sc);
|
|
#endif
|
|
#endif
|
|
-
|
|
|
|
-error:
|
|
|
|
- return error;
|
|
|
|
|
|
+ return r;
|
|
}
|
|
}
|
|
|
|
|
|
static int ath9k_tx(struct ieee80211_hw *hw,
|
|
static int ath9k_tx(struct ieee80211_hw *hw,
|