aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl3945-base.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl3945-base.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl3945-base.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index a3ec4d0467a2..0f992d0f69ad 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -5601,6 +5601,10 @@ static void iwl3945_init_alive_start(struct iwl3945_priv *priv)
5601} 5601}
5602 5602
5603 5603
5604/* temporary */
5605static int iwl3945_mac_beacon_update(struct ieee80211_hw *hw,
5606 struct sk_buff *skb);
5607
5604/** 5608/**
5605 * iwl3945_alive_start - called after REPLY_ALIVE notification received 5609 * iwl3945_alive_start - called after REPLY_ALIVE notification received
5606 * from protocol/runtime uCode (initialization uCode's 5610 * from protocol/runtime uCode (initialization uCode's
@@ -5704,6 +5708,14 @@ static void iwl3945_alive_start(struct iwl3945_priv *priv)
5704 if (priv->error_recovering) 5708 if (priv->error_recovering)
5705 iwl3945_error_recovery(priv); 5709 iwl3945_error_recovery(priv);
5706 5710
5711 /* reassociate for ADHOC mode */
5712 if (priv->vif && (priv->iw_mode == NL80211_IFTYPE_ADHOC)) {
5713 struct sk_buff *beacon = ieee80211_beacon_get(priv->hw,
5714 priv->vif);
5715 if (beacon)
5716 iwl3945_mac_beacon_update(priv->hw, beacon);
5717 }
5718
5707 return; 5719 return;
5708 5720
5709 restart: 5721 restart:
@@ -6710,9 +6722,6 @@ static void iwl3945_config_ap(struct iwl3945_priv *priv)
6710 * clear sta table, add BCAST sta... */ 6722 * clear sta table, add BCAST sta... */
6711} 6723}
6712 6724
6713/* temporary */
6714static int iwl3945_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb);
6715
6716static int iwl3945_mac_config_interface(struct ieee80211_hw *hw, 6725static int iwl3945_mac_config_interface(struct ieee80211_hw *hw,
6717 struct ieee80211_vif *vif, 6726 struct ieee80211_vif *vif,
6718 struct ieee80211_if_conf *conf) 6727 struct ieee80211_if_conf *conf)
@@ -6734,7 +6743,9 @@ static int iwl3945_mac_config_interface(struct ieee80211_hw *hw,
6734 struct sk_buff *beacon = ieee80211_beacon_get(hw, vif); 6743 struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
6735 if (!beacon) 6744 if (!beacon)
6736 return -ENOMEM; 6745 return -ENOMEM;
6746 mutex_lock(&priv->mutex);
6737 rc = iwl3945_mac_beacon_update(hw, beacon); 6747 rc = iwl3945_mac_beacon_update(hw, beacon);
6748 mutex_unlock(&priv->mutex);
6738 if (rc) 6749 if (rc)
6739 return rc; 6750 return rc;
6740 } 6751 }
@@ -7188,18 +7199,15 @@ static int iwl3945_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *sk
7188 struct iwl3945_priv *priv = hw->priv; 7199 struct iwl3945_priv *priv = hw->priv;
7189 unsigned long flags; 7200 unsigned long flags;
7190 7201
7191 mutex_lock(&priv->mutex);
7192 IWL_DEBUG_MAC80211("enter\n"); 7202 IWL_DEBUG_MAC80211("enter\n");
7193 7203
7194 if (!iwl3945_is_ready_rf(priv)) { 7204 if (!iwl3945_is_ready_rf(priv)) {
7195 IWL_DEBUG_MAC80211("leave - RF not ready\n"); 7205 IWL_DEBUG_MAC80211("leave - RF not ready\n");
7196 mutex_unlock(&priv->mutex);
7197 return -EIO; 7206 return -EIO;
7198 } 7207 }
7199 7208
7200 if (priv->iw_mode != NL80211_IFTYPE_ADHOC) { 7209 if (priv->iw_mode != NL80211_IFTYPE_ADHOC) {
7201 IWL_DEBUG_MAC80211("leave - not IBSS\n"); 7210 IWL_DEBUG_MAC80211("leave - not IBSS\n");
7202 mutex_unlock(&priv->mutex);
7203 return -EIO; 7211 return -EIO;
7204 } 7212 }
7205 7213
@@ -7219,7 +7227,6 @@ static int iwl3945_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *sk
7219 7227
7220 iwl3945_post_associate(priv); 7228 iwl3945_post_associate(priv);
7221 7229
7222 mutex_unlock(&priv->mutex);
7223 7230
7224 return 0; 7231 return 0;
7225} 7232}