diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-agn.c')
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 14 | 
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 818367b57ba..bdff56583e1 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c @@ -31,6 +31,7 @@  #include <linux/module.h>  #include <linux/init.h>  #include <linux/pci.h> +#include <linux/slab.h>  #include <linux/dma-mapping.h>  #include <linux/delay.h>  #include <linux/sched.h> @@ -1258,7 +1259,15 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)  	/* Ack/clear/reset pending uCode interrupts.  	 * Note:  Some bits in CSR_INT are "OR" of bits in CSR_FH_INT_STATUS,  	 */ -	iwl_write32(priv, CSR_INT, priv->inta); +	/* There is a hardware bug in the interrupt mask function that some +	 * interrupts (i.e. CSR_INT_BIT_SCD) can still be generated even if +	 * they are disabled in the CSR_INT_MASK register. Furthermore the +	 * ICT interrupt handling mechanism has another bug that might cause +	 * these unmasked interrupts fail to be detected. We workaround the +	 * hardware bugs here by ACKing all the possible interrupts so that +	 * interrupt coalescing can still be achieved. +	 */ +	iwl_write32(priv, CSR_INT, priv->inta | ~priv->inta_mask);  	inta = priv->inta; @@ -2644,7 +2653,7 @@ static int iwl_mac_setup_register(struct iwl_priv *priv)  		BIT(NL80211_IFTYPE_STATION) |  		BIT(NL80211_IFTYPE_ADHOC); -	hw->wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY | +	hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY |  			    WIPHY_FLAG_DISABLE_BEACON_HINTS;  	/* @@ -3322,6 +3331,7 @@ static void iwl_cancel_deferred_work(struct iwl_priv *priv)  	cancel_delayed_work_sync(&priv->init_alive_start);  	cancel_delayed_work(&priv->scan_check); +	cancel_work_sync(&priv->start_internal_scan);  	cancel_delayed_work(&priv->alive_start);  	cancel_work_sync(&priv->beacon_update);  	del_timer_sync(&priv->statistics_periodic);  |