mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
This commit is contained in:
		
						commit
						b5b5150977
					
				
					 5 changed files with 28 additions and 20 deletions
				
			
		| 
						 | 
				
			
			@ -1555,6 +1555,8 @@ void ath_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
 | 
			
		|||
		BIT(NL80211_IFTYPE_ADHOC) |
 | 
			
		||||
		BIT(NL80211_IFTYPE_MESH_POINT);
 | 
			
		||||
 | 
			
		||||
	hw->wiphy->ps_default = false;
 | 
			
		||||
 | 
			
		||||
	hw->queues = 4;
 | 
			
		||||
	hw->max_rates = 4;
 | 
			
		||||
	hw->channel_change_time = 5000;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -173,12 +173,14 @@ static void sta_addba_resp_timer_expired(unsigned long data)
 | 
			
		|||
 | 
			
		||||
	/* check if the TID waits for addBA response */
 | 
			
		||||
	spin_lock_bh(&sta->lock);
 | 
			
		||||
	if (!(*state & HT_ADDBA_REQUESTED_MSK)) {
 | 
			
		||||
	if ((*state & (HT_ADDBA_REQUESTED_MSK | HT_ADDBA_RECEIVED_MSK)) !=
 | 
			
		||||
						HT_ADDBA_REQUESTED_MSK) {
 | 
			
		||||
		spin_unlock_bh(&sta->lock);
 | 
			
		||||
		*state = HT_AGG_STATE_IDLE;
 | 
			
		||||
#ifdef CONFIG_MAC80211_HT_DEBUG
 | 
			
		||||
		printk(KERN_DEBUG "timer expired on tid %d but we are not "
 | 
			
		||||
				"expecting addBA response there", tid);
 | 
			
		||||
				"(or no longer) expecting addBA response there",
 | 
			
		||||
			tid);
 | 
			
		||||
#endif
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -666,21 +668,21 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local,
 | 
			
		|||
 | 
			
		||||
	state = &sta->ampdu_mlme.tid_state_tx[tid];
 | 
			
		||||
 | 
			
		||||
	del_timer_sync(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer);
 | 
			
		||||
 | 
			
		||||
	spin_lock_bh(&sta->lock);
 | 
			
		||||
 | 
			
		||||
	if (!(*state & HT_ADDBA_REQUESTED_MSK))
 | 
			
		||||
		goto timer_still_needed;
 | 
			
		||||
		goto out;
 | 
			
		||||
 | 
			
		||||
	if (mgmt->u.action.u.addba_resp.dialog_token !=
 | 
			
		||||
		sta->ampdu_mlme.tid_tx[tid]->dialog_token) {
 | 
			
		||||
#ifdef CONFIG_MAC80211_HT_DEBUG
 | 
			
		||||
		printk(KERN_DEBUG "wrong addBA response token, tid %d\n", tid);
 | 
			
		||||
#endif /* CONFIG_MAC80211_HT_DEBUG */
 | 
			
		||||
		goto timer_still_needed;
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	del_timer(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer);
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_MAC80211_HT_DEBUG
 | 
			
		||||
	printk(KERN_DEBUG "switched off addBA timer for tid %d \n", tid);
 | 
			
		||||
#endif /* CONFIG_MAC80211_HT_DEBUG */
 | 
			
		||||
| 
						 | 
				
			
			@ -699,10 +701,6 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local,
 | 
			
		|||
		___ieee80211_stop_tx_ba_session(sta, tid, WLAN_BACK_INITIATOR);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	goto out;
 | 
			
		||||
 | 
			
		||||
 timer_still_needed:
 | 
			
		||||
	add_timer(&sta->ampdu_mlme.tid_tx[tid]->addba_resp_timer);
 | 
			
		||||
 out:
 | 
			
		||||
	spin_unlock_bh(&sta->lock);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -661,6 +661,14 @@ struct ieee80211_local {
 | 
			
		|||
	 */
 | 
			
		||||
	bool suspended;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Resuming is true while suspended, but when we're reprogramming the
 | 
			
		||||
	 * hardware -- at that time it's allowed to use ieee80211_queue_work()
 | 
			
		||||
	 * again even though some other parts of the stack are still suspended
 | 
			
		||||
	 * and we still drop received frames to avoid waking the stack.
 | 
			
		||||
	 */
 | 
			
		||||
	bool resuming;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * quiescing is true during the suspend process _only_ to
 | 
			
		||||
	 * ease timer cancelling etc.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -520,9 +520,9 @@ EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces_atomic);
 | 
			
		|||
 */
 | 
			
		||||
static bool ieee80211_can_queue_work(struct ieee80211_local *local)
 | 
			
		||||
{
 | 
			
		||||
        if (WARN(local->suspended, "queueing ieee80211 work while "
 | 
			
		||||
		 "going to suspend\n"))
 | 
			
		||||
                return false;
 | 
			
		||||
	if (WARN(local->suspended && !local->resuming,
 | 
			
		||||
		 "queueing ieee80211 work while going to suspend\n"))
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1025,13 +1025,9 @@ int ieee80211_reconfig(struct ieee80211_local *local)
 | 
			
		|||
	struct sta_info *sta;
 | 
			
		||||
	unsigned long flags;
 | 
			
		||||
	int res;
 | 
			
		||||
	bool from_suspend = local->suspended;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * We're going to start the hardware, at that point
 | 
			
		||||
	 * we are no longer suspended and can RX frames.
 | 
			
		||||
	 */
 | 
			
		||||
	local->suspended = false;
 | 
			
		||||
	if (local->suspended)
 | 
			
		||||
		local->resuming = true;
 | 
			
		||||
 | 
			
		||||
	/* restart hardware */
 | 
			
		||||
	if (local->open_count) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1129,11 +1125,14 @@ int ieee80211_reconfig(struct ieee80211_local *local)
 | 
			
		|||
	 * If this is for hw restart things are still running.
 | 
			
		||||
	 * We may want to change that later, however.
 | 
			
		||||
	 */
 | 
			
		||||
	if (!from_suspend)
 | 
			
		||||
	if (!local->suspended)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_PM
 | 
			
		||||
	/* first set suspended false, then resuming */
 | 
			
		||||
	local->suspended = false;
 | 
			
		||||
	mb();
 | 
			
		||||
	local->resuming = false;
 | 
			
		||||
 | 
			
		||||
	list_for_each_entry(sdata, &local->interfaces, list) {
 | 
			
		||||
		switch(sdata->vif.type) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1189,6 +1189,7 @@ static long rfkill_fop_ioctl(struct file *file, unsigned int cmd,
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
static const struct file_operations rfkill_fops = {
 | 
			
		||||
	.owner		= THIS_MODULE,
 | 
			
		||||
	.open		= rfkill_fop_open,
 | 
			
		||||
	.read		= rfkill_fop_read,
 | 
			
		||||
	.write		= rfkill_fop_write,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue