Commit 78d41b35 authored by David S. Miller's avatar David S. Miller
parents 9bbc052d 2ae1b8b3
...@@ -2141,6 +2141,8 @@ static void ath9k_set_coverage_class(struct ieee80211_hw *hw, u8 coverage_class) ...@@ -2141,6 +2141,8 @@ static void ath9k_set_coverage_class(struct ieee80211_hw *hw, u8 coverage_class)
static void ath9k_flush(struct ieee80211_hw *hw, bool drop) static void ath9k_flush(struct ieee80211_hw *hw, bool drop)
{ {
struct ath_softc *sc = hw->priv; struct ath_softc *sc = hw->priv;
struct ath_hw *ah = sc->sc_ah;
struct ath_common *common = ath9k_hw_common(ah);
int timeout = 200; /* ms */ int timeout = 200; /* ms */
int i, j; int i, j;
...@@ -2149,6 +2151,12 @@ static void ath9k_flush(struct ieee80211_hw *hw, bool drop) ...@@ -2149,6 +2151,12 @@ static void ath9k_flush(struct ieee80211_hw *hw, bool drop)
cancel_delayed_work_sync(&sc->tx_complete_work); cancel_delayed_work_sync(&sc->tx_complete_work);
if (sc->sc_flags & SC_OP_INVALID) {
ath_dbg(common, ATH_DBG_ANY, "Device not present\n");
mutex_unlock(&sc->mutex);
return;
}
if (drop) if (drop)
timeout = 1; timeout = 1;
......
...@@ -2155,6 +2155,13 @@ int iwl_legacy_mac_config(struct ieee80211_hw *hw, u32 changed) ...@@ -2155,6 +2155,13 @@ int iwl_legacy_mac_config(struct ieee80211_hw *hw, u32 changed)
goto set_ch_out; goto set_ch_out;
} }
if (priv->iw_mode == NL80211_IFTYPE_ADHOC &&
!iwl_legacy_is_channel_ibss(ch_info)) {
IWL_DEBUG_MAC80211(priv, "leave - not IBSS channel\n");
ret = -EINVAL;
goto set_ch_out;
}
spin_lock_irqsave(&priv->lock, flags); spin_lock_irqsave(&priv->lock, flags);
for_each_context(priv, ctx) { for_each_context(priv, ctx) {
......
...@@ -1411,6 +1411,12 @@ iwl_legacy_is_channel_passive(const struct iwl_channel_info *ch) ...@@ -1411,6 +1411,12 @@ iwl_legacy_is_channel_passive(const struct iwl_channel_info *ch)
return (!(ch->flags & EEPROM_CHANNEL_ACTIVE)) ? 1 : 0; return (!(ch->flags & EEPROM_CHANNEL_ACTIVE)) ? 1 : 0;
} }
static inline int
iwl_legacy_is_channel_ibss(const struct iwl_channel_info *ch)
{
return (ch->flags & EEPROM_CHANNEL_IBSS) ? 1 : 0;
}
static inline void static inline void
__iwl_legacy_free_pages(struct iwl_priv *priv, struct page *page) __iwl_legacy_free_pages(struct iwl_priv *priv, struct page *page)
{ {
......
...@@ -1339,8 +1339,8 @@ int lbs_execute_next_command(struct lbs_private *priv) ...@@ -1339,8 +1339,8 @@ int lbs_execute_next_command(struct lbs_private *priv)
cpu_to_le16(PS_MODE_ACTION_EXIT_PS)) { cpu_to_le16(PS_MODE_ACTION_EXIT_PS)) {
lbs_deb_host( lbs_deb_host(
"EXEC_NEXT_CMD: ignore ENTER_PS cmd\n"); "EXEC_NEXT_CMD: ignore ENTER_PS cmd\n");
list_del(&cmdnode->list);
spin_lock_irqsave(&priv->driver_lock, flags); spin_lock_irqsave(&priv->driver_lock, flags);
list_del(&cmdnode->list);
lbs_complete_command(priv, cmdnode, 0); lbs_complete_command(priv, cmdnode, 0);
spin_unlock_irqrestore(&priv->driver_lock, flags); spin_unlock_irqrestore(&priv->driver_lock, flags);
...@@ -1352,8 +1352,8 @@ int lbs_execute_next_command(struct lbs_private *priv) ...@@ -1352,8 +1352,8 @@ int lbs_execute_next_command(struct lbs_private *priv)
(priv->psstate == PS_STATE_PRE_SLEEP)) { (priv->psstate == PS_STATE_PRE_SLEEP)) {
lbs_deb_host( lbs_deb_host(
"EXEC_NEXT_CMD: ignore EXIT_PS cmd in sleep\n"); "EXEC_NEXT_CMD: ignore EXIT_PS cmd in sleep\n");
list_del(&cmdnode->list);
spin_lock_irqsave(&priv->driver_lock, flags); spin_lock_irqsave(&priv->driver_lock, flags);
list_del(&cmdnode->list);
lbs_complete_command(priv, cmdnode, 0); lbs_complete_command(priv, cmdnode, 0);
spin_unlock_irqrestore(&priv->driver_lock, flags); spin_unlock_irqrestore(&priv->driver_lock, flags);
priv->needtowakeup = 1; priv->needtowakeup = 1;
...@@ -1366,7 +1366,9 @@ int lbs_execute_next_command(struct lbs_private *priv) ...@@ -1366,7 +1366,9 @@ int lbs_execute_next_command(struct lbs_private *priv)
"EXEC_NEXT_CMD: sending EXIT_PS\n"); "EXEC_NEXT_CMD: sending EXIT_PS\n");
} }
} }
spin_lock_irqsave(&priv->driver_lock, flags);
list_del(&cmdnode->list); list_del(&cmdnode->list);
spin_unlock_irqrestore(&priv->driver_lock, flags);
lbs_deb_host("EXEC_NEXT_CMD: sending command 0x%04x\n", lbs_deb_host("EXEC_NEXT_CMD: sending command 0x%04x\n",
le16_to_cpu(cmd->command)); le16_to_cpu(cmd->command));
lbs_submit_command(priv, cmdnode); lbs_submit_command(priv, cmdnode);
......
...@@ -237,6 +237,10 @@ ieee80211_tx_h_dynamic_ps(struct ieee80211_tx_data *tx) ...@@ -237,6 +237,10 @@ ieee80211_tx_h_dynamic_ps(struct ieee80211_tx_data *tx)
&local->dynamic_ps_disable_work); &local->dynamic_ps_disable_work);
} }
/* Don't restart the timer if we're not disassociated */
if (!ifmgd->associated)
return TX_CONTINUE;
mod_timer(&local->dynamic_ps_timer, jiffies + mod_timer(&local->dynamic_ps_timer, jiffies +
msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout)); msecs_to_jiffies(local->hw.conf.dynamic_ps_timeout));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment