|
@@ -2546,9 +2546,6 @@ static void iwl3945_connection_init_rx_config(struct iwl3945_priv *priv)
|
|
|
|
|
|
static int iwl3945_set_mode(struct iwl3945_priv *priv, int mode)
|
|
|
{
|
|
|
- if (!iwl3945_is_ready_rf(priv))
|
|
|
- return -EAGAIN;
|
|
|
-
|
|
|
if (mode == IEEE80211_IF_TYPE_IBSS) {
|
|
|
const struct iwl3945_channel_info *ch_info;
|
|
|
|
|
@@ -2563,13 +2560,6 @@ static int iwl3945_set_mode(struct iwl3945_priv *priv, int mode)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- cancel_delayed_work(&priv->scan_check);
|
|
|
- if (iwl3945_scan_cancel_timeout(priv, 100)) {
|
|
|
- IWL_WARNING("Aborted scan still in progress after 100ms\n");
|
|
|
- IWL_DEBUG_MAC80211("leaving - scan abort failed.\n");
|
|
|
- return -EAGAIN;
|
|
|
- }
|
|
|
-
|
|
|
priv->iw_mode = mode;
|
|
|
|
|
|
iwl3945_connection_init_rx_config(priv);
|
|
@@ -2577,6 +2567,17 @@ static int iwl3945_set_mode(struct iwl3945_priv *priv, int mode)
|
|
|
|
|
|
iwl3945_clear_stations_table(priv);
|
|
|
|
|
|
+ /* dont commit rxon if rf-kill is on*/
|
|
|
+ if (!iwl3945_is_ready_rf(priv))
|
|
|
+ return -EAGAIN;
|
|
|
+
|
|
|
+ cancel_delayed_work(&priv->scan_check);
|
|
|
+ if (iwl3945_scan_cancel_timeout(priv, 100)) {
|
|
|
+ IWL_WARNING("Aborted scan still in progress after 100ms\n");
|
|
|
+ IWL_DEBUG_MAC80211("leaving - scan abort failed.\n");
|
|
|
+ return -EAGAIN;
|
|
|
+ }
|
|
|
+
|
|
|
iwl3945_commit_rxon(priv);
|
|
|
|
|
|
return 0;
|
|
@@ -7020,6 +7021,12 @@ static void iwl3945_mac_stop(struct ieee80211_hw *hw)
|
|
|
* RXON_FILTER_ASSOC_MSK BIT
|
|
|
*/
|
|
|
priv->is_open = 0;
|
|
|
+ if (!iwl3945_is_ready_rf(priv)) {
|
|
|
+ IWL_DEBUG_MAC80211("leave - RF not ready\n");
|
|
|
+ mutex_unlock(&priv->mutex);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
iwl3945_scan_cancel_timeout(priv, 100);
|
|
|
cancel_delayed_work(&priv->post_associate);
|
|
|
priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
|
|
@@ -7291,6 +7298,9 @@ static int iwl3945_mac_config_interface(struct ieee80211_hw *hw, int if_id,
|
|
|
priv->ibss_beacon = conf->beacon;
|
|
|
}
|
|
|
|
|
|
+ if (iwl3945_is_rfkill(priv))
|
|
|
+ goto done;
|
|
|
+
|
|
|
if (conf->bssid && !is_zero_ether_addr(conf->bssid) &&
|
|
|
!is_multicast_ether_addr(conf->bssid)) {
|
|
|
/* If there is currently a HW scan going on in the background
|
|
@@ -7325,6 +7335,7 @@ static int iwl3945_mac_config_interface(struct ieee80211_hw *hw, int if_id,
|
|
|
iwl3945_commit_rxon(priv);
|
|
|
}
|
|
|
|
|
|
+ done:
|
|
|
spin_lock_irqsave(&priv->lock, flags);
|
|
|
if (!conf->ssid_len)
|
|
|
memset(priv->essid, 0, IW_ESSID_MAX_SIZE);
|
|
@@ -7361,11 +7372,12 @@ static void iwl3945_mac_remove_interface(struct ieee80211_hw *hw,
|
|
|
|
|
|
mutex_lock(&priv->mutex);
|
|
|
|
|
|
- iwl3945_scan_cancel_timeout(priv, 100);
|
|
|
- cancel_delayed_work(&priv->post_associate);
|
|
|
- priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
|
|
|
- iwl3945_commit_rxon(priv);
|
|
|
-
|
|
|
+ if (iwl3945_is_ready_rf(priv)) {
|
|
|
+ iwl3945_scan_cancel_timeout(priv, 100);
|
|
|
+ cancel_delayed_work(&priv->post_associate);
|
|
|
+ priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
|
|
|
+ iwl3945_commit_rxon(priv);
|
|
|
+ }
|
|
|
if (priv->interface_id == conf->if_id) {
|
|
|
priv->interface_id = 0;
|
|
|
memset(priv->bssid, 0, ETH_ALEN);
|
|
@@ -7636,6 +7648,12 @@ static void iwl3945_mac_reset_tsf(struct ieee80211_hw *hw)
|
|
|
|
|
|
spin_unlock_irqrestore(&priv->lock, flags);
|
|
|
|
|
|
+ if (!iwl3945_is_ready_rf(priv)) {
|
|
|
+ IWL_DEBUG_MAC80211("leave - not ready\n");
|
|
|
+ mutex_unlock(&priv->mutex);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
/* we are restarting association process
|
|
|
* clear RXON_FILTER_ASSOC_MSK bit
|
|
|
*/
|
|
@@ -7653,12 +7671,6 @@ static void iwl3945_mac_reset_tsf(struct ieee80211_hw *hw)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (!iwl3945_is_ready_rf(priv)) {
|
|
|
- IWL_DEBUG_MAC80211("leave - not ready\n");
|
|
|
- mutex_unlock(&priv->mutex);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
priv->only_active_channel = 0;
|
|
|
|
|
|
iwl3945_set_rate(priv);
|