| Index: chromeos/compat-wireless/drivers/net/wireless/iwlwifi/iwl-agn.c
|
| diff --git a/chromeos/compat-wireless/drivers/net/wireless/iwlwifi/iwl-agn.c b/chromeos/compat-wireless/drivers/net/wireless/iwlwifi/iwl-agn.c
|
| index 42dc39dff7b353f80847759ceb8b5c7fb180ccd2..e69a61a0efcd4c84546df06389c25d5b36b12a25 100644
|
| --- a/chromeos/compat-wireless/drivers/net/wireless/iwlwifi/iwl-agn.c
|
| +++ b/chromeos/compat-wireless/drivers/net/wireless/iwlwifi/iwl-agn.c
|
| @@ -3667,6 +3667,49 @@ out_exit:
|
| IWL_DEBUG_MAC80211(priv, "leave\n");
|
| }
|
|
|
| +static void iwlagn_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;
|
| +
|
| + iwlcore_commit_rxon(priv);
|
| +
|
| + 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;
|
| +}
|
| +
|
| static void iwl_mac_flush(struct ieee80211_hw *hw, bool drop)
|
| {
|
| struct iwl_priv *priv = hw->priv;
|
| @@ -3867,7 +3910,7 @@ static struct ieee80211_ops iwl_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 = iwlagn_configure_filter,
|
| .set_key = iwl_mac_set_key,
|
| .update_tkip_key = iwl_mac_update_tkip_key,
|
| .conf_tx = iwl_mac_conf_tx,
|
|
|