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

Commit 527871d7 authored by Johannes Berg's avatar Johannes Berg
Browse files

mac80211: make sta.wme indicate whether QoS is used



Indicating just the peer's capability is fairly pointless
if the local device doesn't support it. Make the variable
track both combined, and remove the 'local support' check
in the TX path.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent a73f8e21
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -1557,7 +1557,8 @@ struct ieee80211_sta_rates {
 * @supp_rates: Bitmap of supported rates (per band)
 * @supp_rates: Bitmap of supported rates (per band)
 * @ht_cap: HT capabilities of this STA; restricted to our own capabilities
 * @ht_cap: HT capabilities of this STA; restricted to our own capabilities
 * @vht_cap: VHT capabilities of this STA; restricted to our own capabilities
 * @vht_cap: VHT capabilities of this STA; restricted to our own capabilities
 * @wme: indicates whether the STA supports QoS/WME.
 * @wme: indicates whether the STA supports QoS/WME (if local devices does,
 *	otherwise always false)
 * @drv_priv: data area for driver use, will always be aligned to
 * @drv_priv: data area for driver use, will always be aligned to
 *	sizeof(void *), size is determined in hw information.
 *	sizeof(void *), size is determined in hw information.
 * @uapsd_queues: bitmap of queues configured for uapsd. Only valid
 * @uapsd_queues: bitmap of queues configured for uapsd. Only valid
+2 −1
Original line number Original line Diff line number Diff line
@@ -1073,7 +1073,8 @@ static int sta_apply_parameters(struct ieee80211_local *local,
			clear_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE);
			clear_sta_flag(sta, WLAN_STA_SHORT_PREAMBLE);
	}
	}


	if (mask & BIT(NL80211_STA_FLAG_WME))
	if (mask & BIT(NL80211_STA_FLAG_WME) &&
	    local->hw.queues >= IEEE80211_NUM_ACS)
		sta->sta.wme = set & BIT(NL80211_STA_FLAG_WME);
		sta->sta.wme = set & BIT(NL80211_STA_FLAG_WME);


	if (mask & BIT(NL80211_STA_FLAG_MFP)) {
	if (mask & BIT(NL80211_STA_FLAG_MFP)) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -1016,7 +1016,7 @@ static void ieee80211_update_sta_info(struct ieee80211_sub_if_data *sdata,
		}
		}
	}
	}


	if (sta && elems->wmm_info)
	if (sta && elems->wmm_info && local->hw.queues >= IEEE80211_NUM_ACS)
		sta->sta.wme = true;
		sta->sta.wme = true;


	if (sta && elems->ht_operation && elems->ht_cap_elem &&
	if (sta && elems->ht_operation && elems->ht_cap_elem &&
+1 −1
Original line number Original line Diff line number Diff line
@@ -2990,7 +2990,7 @@ static bool ieee80211_assoc_success(struct ieee80211_sub_if_data *sdata,
		sta->sta.mfp = false;
		sta->sta.mfp = false;
	}
	}


	sta->sta.wme = elems.wmm_param;
	sta->sta.wme = elems.wmm_param && local->hw.queues >= IEEE80211_NUM_ACS;


	err = sta_info_move_state(sta, IEEE80211_STA_ASSOC);
	err = sta_info_move_state(sta, IEEE80211_STA_ASSOC);
	if (!err && !(ifmgd->flags & IEEE80211_STA_CONTROL_PORT))
	if (!err && !(ifmgd->flags & IEEE80211_STA_CONTROL_PORT))
+2 −2
Original line number Original line Diff line number Diff line
@@ -2088,8 +2088,8 @@ static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata,
	if (ieee80211_vif_is_mesh(&sdata->vif))
	if (ieee80211_vif_is_mesh(&sdata->vif))
		wme_sta = true;
		wme_sta = true;


	/* receiver and we are QoS enabled, use a QoS type frame */
	/* receiver does QoS (which also means we do) use it */
	if (wme_sta && local->hw.queues >= IEEE80211_NUM_ACS) {
	if (wme_sta) {
		fc |= cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
		fc |= cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
		hdrlen += 2;
		hdrlen += 2;
	}
	}