Commit ada17513 authored by Mohamed Abbas's avatar Mohamed Abbas Committed by John W. Linville

iwlagn: fix resume for ADHOC network

 ieee80211_notify_mac only reconnect BSS networks. Since IBSS does
 not need any auth or assoc steps we can just resume to the same
 condition before suspend. This patch will reestablish the ad-hoc
 network once it comes back from resume.

http://www.intellinuxwireless.org/bugzilla/show_bug.cgi?id=1774Signed-off-by: default avatarMohamed Abbas <mohamed.abbas@intel.com>
Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 1e87d680
...@@ -2002,6 +2002,10 @@ static int iwl_read_ucode(struct iwl_priv *priv) ...@@ -2002,6 +2002,10 @@ static int iwl_read_ucode(struct iwl_priv *priv)
return ret; return ret;
} }
/* temporary */
static int iwl_mac_beacon_update(struct ieee80211_hw *hw,
struct sk_buff *skb);
/** /**
* iwl_alive_start - called after REPLY_ALIVE notification received * iwl_alive_start - called after REPLY_ALIVE notification received
* from protocol/runtime uCode (initialization uCode's * from protocol/runtime uCode (initialization uCode's
...@@ -2084,6 +2088,15 @@ static void iwl_alive_start(struct iwl_priv *priv) ...@@ -2084,6 +2088,15 @@ static void iwl_alive_start(struct iwl_priv *priv)
iwl_power_update_mode(priv, 1); iwl_power_update_mode(priv, 1);
/* reassociate for ADHOC mode */
if (priv->vif && (priv->iw_mode == NL80211_IFTYPE_ADHOC)) {
struct sk_buff *beacon = ieee80211_beacon_get(priv->hw,
priv->vif);
if (beacon)
iwl_mac_beacon_update(priv->hw, beacon);
}
if (test_and_clear_bit(STATUS_MODE_PENDING, &priv->status)) if (test_and_clear_bit(STATUS_MODE_PENDING, &priv->status))
iwl_set_mode(priv, priv->iw_mode); iwl_set_mode(priv, priv->iw_mode);
...@@ -2930,8 +2943,6 @@ static void iwl_config_ap(struct iwl_priv *priv) ...@@ -2930,8 +2943,6 @@ static void iwl_config_ap(struct iwl_priv *priv)
* clear sta table, add BCAST sta... */ * clear sta table, add BCAST sta... */
} }
/* temporary */
static int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb);
static int iwl_mac_config_interface(struct ieee80211_hw *hw, static int iwl_mac_config_interface(struct ieee80211_hw *hw,
struct ieee80211_vif *vif, struct ieee80211_vif *vif,
...@@ -2953,7 +2964,9 @@ static int iwl_mac_config_interface(struct ieee80211_hw *hw, ...@@ -2953,7 +2964,9 @@ static int iwl_mac_config_interface(struct ieee80211_hw *hw,
struct sk_buff *beacon = ieee80211_beacon_get(hw, vif); struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
if (!beacon) if (!beacon)
return -ENOMEM; return -ENOMEM;
mutex_lock(&priv->mutex);
rc = iwl_mac_beacon_update(hw, beacon); rc = iwl_mac_beacon_update(hw, beacon);
mutex_unlock(&priv->mutex);
if (rc) if (rc)
return rc; return rc;
} }
...@@ -3529,18 +3542,15 @@ static int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb) ...@@ -3529,18 +3542,15 @@ static int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb)
unsigned long flags; unsigned long flags;
__le64 timestamp; __le64 timestamp;
mutex_lock(&priv->mutex);
IWL_DEBUG_MAC80211("enter\n"); IWL_DEBUG_MAC80211("enter\n");
if (!iwl_is_ready_rf(priv)) { if (!iwl_is_ready_rf(priv)) {
IWL_DEBUG_MAC80211("leave - RF not ready\n"); IWL_DEBUG_MAC80211("leave - RF not ready\n");
mutex_unlock(&priv->mutex);
return -EIO; return -EIO;
} }
if (priv->iw_mode != NL80211_IFTYPE_ADHOC) { if (priv->iw_mode != NL80211_IFTYPE_ADHOC) {
IWL_DEBUG_MAC80211("leave - not IBSS\n"); IWL_DEBUG_MAC80211("leave - not IBSS\n");
mutex_unlock(&priv->mutex);
return -EIO; return -EIO;
} }
...@@ -3562,7 +3572,6 @@ static int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb) ...@@ -3562,7 +3572,6 @@ static int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb)
iwl_post_associate(priv); iwl_post_associate(priv);
mutex_unlock(&priv->mutex);
return 0; return 0;
} }
......
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