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_ADHOC) |
 | 
				
			||||||
		BIT(NL80211_IFTYPE_MESH_POINT);
 | 
							BIT(NL80211_IFTYPE_MESH_POINT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						hw->wiphy->ps_default = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	hw->queues = 4;
 | 
						hw->queues = 4;
 | 
				
			||||||
	hw->max_rates = 4;
 | 
						hw->max_rates = 4;
 | 
				
			||||||
	hw->channel_change_time = 5000;
 | 
						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 */
 | 
						/* check if the TID waits for addBA response */
 | 
				
			||||||
	spin_lock_bh(&sta->lock);
 | 
						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);
 | 
							spin_unlock_bh(&sta->lock);
 | 
				
			||||||
		*state = HT_AGG_STATE_IDLE;
 | 
							*state = HT_AGG_STATE_IDLE;
 | 
				
			||||||
#ifdef CONFIG_MAC80211_HT_DEBUG
 | 
					#ifdef CONFIG_MAC80211_HT_DEBUG
 | 
				
			||||||
		printk(KERN_DEBUG "timer expired on tid %d but we are not "
 | 
							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
 | 
					#endif
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -666,21 +668,21 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	state = &sta->ampdu_mlme.tid_state_tx[tid];
 | 
						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);
 | 
						spin_lock_bh(&sta->lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!(*state & HT_ADDBA_REQUESTED_MSK))
 | 
						if (!(*state & HT_ADDBA_REQUESTED_MSK))
 | 
				
			||||||
		goto timer_still_needed;
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (mgmt->u.action.u.addba_resp.dialog_token !=
 | 
						if (mgmt->u.action.u.addba_resp.dialog_token !=
 | 
				
			||||||
		sta->ampdu_mlme.tid_tx[tid]->dialog_token) {
 | 
							sta->ampdu_mlme.tid_tx[tid]->dialog_token) {
 | 
				
			||||||
#ifdef CONFIG_MAC80211_HT_DEBUG
 | 
					#ifdef CONFIG_MAC80211_HT_DEBUG
 | 
				
			||||||
		printk(KERN_DEBUG "wrong addBA response token, tid %d\n", tid);
 | 
							printk(KERN_DEBUG "wrong addBA response token, tid %d\n", tid);
 | 
				
			||||||
#endif /* CONFIG_MAC80211_HT_DEBUG */
 | 
					#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
 | 
					#ifdef CONFIG_MAC80211_HT_DEBUG
 | 
				
			||||||
	printk(KERN_DEBUG "switched off addBA timer for tid %d \n", tid);
 | 
						printk(KERN_DEBUG "switched off addBA timer for tid %d \n", tid);
 | 
				
			||||||
#endif /* CONFIG_MAC80211_HT_DEBUG */
 | 
					#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);
 | 
							___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:
 | 
					 out:
 | 
				
			||||||
	spin_unlock_bh(&sta->lock);
 | 
						spin_unlock_bh(&sta->lock);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -661,6 +661,14 @@ struct ieee80211_local {
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	bool suspended;
 | 
						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
 | 
						 * quiescing is true during the suspend process _only_ to
 | 
				
			||||||
	 * ease timer cancelling etc.
 | 
						 * ease timer cancelling etc.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -520,8 +520,8 @@ EXPORT_SYMBOL_GPL(ieee80211_iterate_active_interfaces_atomic);
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static bool ieee80211_can_queue_work(struct ieee80211_local *local)
 | 
					static bool ieee80211_can_queue_work(struct ieee80211_local *local)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
        if (WARN(local->suspended, "queueing ieee80211 work while "
 | 
						if (WARN(local->suspended && !local->resuming,
 | 
				
			||||||
		 "going to suspend\n"))
 | 
							 "queueing ieee80211 work while going to suspend\n"))
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
| 
						 | 
					@ -1025,13 +1025,9 @@ int ieee80211_reconfig(struct ieee80211_local *local)
 | 
				
			||||||
	struct sta_info *sta;
 | 
						struct sta_info *sta;
 | 
				
			||||||
	unsigned long flags;
 | 
						unsigned long flags;
 | 
				
			||||||
	int res;
 | 
						int res;
 | 
				
			||||||
	bool from_suspend = local->suspended;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						if (local->suspended)
 | 
				
			||||||
	 * We're going to start the hardware, at that point
 | 
							local->resuming = true;
 | 
				
			||||||
	 * we are no longer suspended and can RX frames.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	local->suspended = false;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* restart hardware */
 | 
						/* restart hardware */
 | 
				
			||||||
	if (local->open_count) {
 | 
						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.
 | 
						 * If this is for hw restart things are still running.
 | 
				
			||||||
	 * We may want to change that later, however.
 | 
						 * We may want to change that later, however.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (!from_suspend)
 | 
						if (!local->suspended)
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_PM
 | 
					#ifdef CONFIG_PM
 | 
				
			||||||
 | 
						/* first set suspended false, then resuming */
 | 
				
			||||||
	local->suspended = false;
 | 
						local->suspended = false;
 | 
				
			||||||
 | 
						mb();
 | 
				
			||||||
 | 
						local->resuming = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	list_for_each_entry(sdata, &local->interfaces, list) {
 | 
						list_for_each_entry(sdata, &local->interfaces, list) {
 | 
				
			||||||
		switch(sdata->vif.type) {
 | 
							switch(sdata->vif.type) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1189,6 +1189,7 @@ static long rfkill_fop_ioctl(struct file *file, unsigned int cmd,
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct file_operations rfkill_fops = {
 | 
					static const struct file_operations rfkill_fops = {
 | 
				
			||||||
 | 
						.owner		= THIS_MODULE,
 | 
				
			||||||
	.open		= rfkill_fop_open,
 | 
						.open		= rfkill_fop_open,
 | 
				
			||||||
	.read		= rfkill_fop_read,
 | 
						.read		= rfkill_fop_read,
 | 
				
			||||||
	.write		= rfkill_fop_write,
 | 
						.write		= rfkill_fop_write,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue