diff options
Diffstat (limited to 'drivers/net/wireless/iwlegacy/3945-mac.c')
| -rw-r--r-- | drivers/net/wireless/iwlegacy/3945-mac.c | 26 | 
1 files changed, 9 insertions, 17 deletions
diff --git a/drivers/net/wireless/iwlegacy/3945-mac.c b/drivers/net/wireless/iwlegacy/3945-mac.c index 9581d07a424..dc1d20cf64e 100644 --- a/drivers/net/wireless/iwlegacy/3945-mac.c +++ b/drivers/net/wireless/iwlegacy/3945-mac.c @@ -1248,14 +1248,7 @@ il3945_rx_handle(struct il_priv *il)  		len = le32_to_cpu(pkt->len_n_flags) & IL_RX_FRAME_SIZE_MSK;  		len += sizeof(u32);	/* account for status word */ -		/* Reclaim a command buffer only if this packet is a response -		 *   to a (driver-originated) command. -		 * If the packet (e.g. Rx frame) originated from uCode, -		 *   there is no command buffer to reclaim. -		 * Ucode should set SEQ_RX_FRAME bit if ucode-originated, -		 *   but apparently a few don't get set; catch them here. */ -		reclaim = !(pkt->hdr.sequence & SEQ_RX_FRAME) && -		    pkt->hdr.cmd != N_STATS && pkt->hdr.cmd != C_TX; +		reclaim = il_need_reclaim(il, pkt);  		/* Based on type of command response or notification,  		 *   handle those that need handling via function in @@ -1495,12 +1488,14 @@ il3945_irq_tasklet(struct il_priv *il)  	if (inta & CSR_INT_BIT_WAKEUP) {  		D_ISR("Wakeup interrupt\n");  		il_rx_queue_update_write_ptr(il, &il->rxq); + +		spin_lock_irqsave(&il->lock, flags);  		il_txq_update_write_ptr(il, &il->txq[0]);  		il_txq_update_write_ptr(il, &il->txq[1]);  		il_txq_update_write_ptr(il, &il->txq[2]);  		il_txq_update_write_ptr(il, &il->txq[3]);  		il_txq_update_write_ptr(il, &il->txq[4]); -		il_txq_update_write_ptr(il, &il->txq[5]); +		spin_unlock_irqrestore(&il->lock, flags);  		il->isr_stats.wakeup++;  		handled |= CSR_INT_BIT_WAKEUP; @@ -1595,7 +1590,7 @@ il3945_get_channels_for_scan(struct il_priv *il, enum ieee80211_band band,  		 *  and use long active_dwell time.  		 */  		if (!is_active || il_is_channel_passive(ch_info) || -		    (chan->flags & IEEE80211_CHAN_PASSIVE_SCAN)) { +		    (chan->flags & IEEE80211_CHAN_NO_IR)) {  			scan_ch->type = 0;	/* passive */  			if (IL_UCODE_API(il->ucode_ver) == 1)  				scan_ch->active_dwell = @@ -2396,8 +2391,7 @@ __il3945_up(struct il_priv *il)  		clear_bit(S_RFKILL, &il->status);  	else {  		set_bit(S_RFKILL, &il->status); -		IL_WARN("Radio disabled by HW RF Kill switch\n"); -		return -ENODEV; +		return -ERFKILL;  	}  	_il_wr(il, CSR_INT, 0xFFFFFFFF); @@ -3575,9 +3569,9 @@ il3945_setup_mac(struct il_priv *il)  	hw->wiphy->interface_modes =  	    BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC); -	hw->wiphy->flags |= -	    WIPHY_FLAG_CUSTOM_REGULATORY | WIPHY_FLAG_DISABLE_BEACON_HINTS | -	    WIPHY_FLAG_IBSS_RSN; +	hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN; +	hw->wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG | +				       REGULATORY_DISABLE_BEACON_HINTS;  	hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT; @@ -3811,7 +3805,6 @@ out_iounmap:  out_pci_release_regions:  	pci_release_regions(pdev);  out_pci_disable_device: -	pci_set_drvdata(pdev, NULL);  	pci_disable_device(pdev);  out_ieee80211_free_hw:  	ieee80211_free_hw(il->hw); @@ -3888,7 +3881,6 @@ il3945_pci_remove(struct pci_dev *pdev)  	iounmap(il->hw_base);  	pci_release_regions(pdev);  	pci_disable_device(pdev); -	pci_set_drvdata(pdev, NULL);  	il_free_channel_map(il);  	il_free_geos(il);  | 
