Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b5b51509 authored by David S. Miller's avatar David S. Miller
Browse files
parents dcfcb256 45ba564d
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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;
+8 −10
Original line number Diff line number Diff line
@@ -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);
}
+8 −0
Original line number Diff line number Diff line
@@ -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.
+9 −10
Original line number Diff line number Diff line
@@ -520,8 +520,8 @@ 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"))
	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) {
+1 −0
Original line number Diff line number Diff line
@@ -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,