Index: chromeos/compat-wireless/drivers/net/wireless/iwlwifi/iwl3945-base.c |
diff --git a/chromeos/compat-wireless/drivers/net/wireless/iwlwifi/iwl3945-base.c b/chromeos/compat-wireless/drivers/net/wireless/iwlwifi/iwl3945-base.c |
index 70c4b8fba0ee89093c56c056e7152b927da5a37c..d31661c1ce778259996b5428f9cff95b87f1a3db 100644 |
--- a/chromeos/compat-wireless/drivers/net/wireless/iwlwifi/iwl3945-base.c |
+++ b/chromeos/compat-wireless/drivers/net/wireless/iwlwifi/iwl3945-base.c |
@@ -3018,7 +3018,7 @@ void iwl3945_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif) |
clear_bit(STATUS_SCANNING, &priv->status); |
/* inform mac80211 scan aborted */ |
- queue_work(priv->workqueue, &priv->scan_completed); |
+ queue_work(priv->workqueue, &priv->abort_scan); |
} |
static void iwl3945_bg_restart(struct work_struct *data) |
@@ -3391,6 +3391,55 @@ static int iwl3945_mac_sta_add(struct ieee80211_hw *hw, |
return 0; |
} |
+ |
+static void iwl3945_configure_filter(struct ieee80211_hw *hw, |
+ unsigned int changed_flags, |
+ unsigned int *total_flags, |
+ u64 multicast) |
+{ |
+ struct iwl_priv *priv = hw->priv; |
+ __le32 filter_or = 0, filter_nand = 0; |
+ |
+#define CHK(test, flag) do { \ |
+ if (*total_flags & (test)) \ |
+ filter_or |= (flag); \ |
+ else \ |
+ filter_nand |= (flag); \ |
+ } while (0) |
+ |
+ IWL_DEBUG_MAC80211(priv, "Enter: changed: 0x%x, total: 0x%x\n", |
+ changed_flags, *total_flags); |
+ |
+ CHK(FIF_OTHER_BSS | FIF_PROMISC_IN_BSS, RXON_FILTER_PROMISC_MSK); |
+ CHK(FIF_CONTROL, RXON_FILTER_CTL2HOST_MSK); |
+ CHK(FIF_BCN_PRBRESP_PROMISC, RXON_FILTER_BCON_AWARE_MSK); |
+ |
+#undef CHK |
+ |
+ mutex_lock(&priv->mutex); |
+ |
+ priv->staging_rxon.filter_flags &= ~filter_nand; |
+ priv->staging_rxon.filter_flags |= filter_or; |
+ |
+ /* |
+ * Committing directly here breaks for some reason, |
+ * but we'll eventually commit the filter flags |
+ * change anyway. |
+ */ |
+ |
+ mutex_unlock(&priv->mutex); |
+ |
+ /* |
+ * Receiving all multicast frames is always enabled by the |
+ * default flags setup in iwl_connection_init_rx_config() |
+ * since we currently do not support programming multicast |
+ * filters into the device. |
+ */ |
+ *total_flags &= FIF_OTHER_BSS | FIF_ALLMULTI | FIF_PROMISC_IN_BSS | |
+ FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL; |
+} |
+ |
+ |
/***************************************************************************** |
* |
* sysfs attributes |
@@ -3796,7 +3845,7 @@ static struct ieee80211_ops iwl3945_hw_ops = { |
.add_interface = iwl_mac_add_interface, |
.remove_interface = iwl_mac_remove_interface, |
.config = iwl_mac_config, |
- .configure_filter = iwl_configure_filter, |
+ .configure_filter = iwl3945_configure_filter, |
.set_key = iwl3945_mac_set_key, |
.conf_tx = iwl_mac_conf_tx, |
.reset_tsf = iwl_mac_reset_tsf, |