Commit 0aa419ec authored by Emmanuel Grumbach's avatar Emmanuel Grumbach Committed by Johannes Berg

mac80211: allow the driver not to pass the tid to ieee80211_sta_uapsd_trigger

iwlwifi will check internally that the tid maps to an AC
that is trigger enabled, but can't know what tid exactly.
Allow the driver to pass a generic tid and make mac80211
assume that a trigger frame was received.
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent b473b8f1
...@@ -4087,6 +4087,10 @@ void ieee80211_sta_pspoll(struct ieee80211_sta *sta); ...@@ -4087,6 +4087,10 @@ void ieee80211_sta_pspoll(struct ieee80211_sta *sta);
* This must be used in conjunction with ieee80211_sta_ps_transition() * This must be used in conjunction with ieee80211_sta_ps_transition()
* and possibly ieee80211_sta_pspoll(); calls to all three must be * and possibly ieee80211_sta_pspoll(); calls to all three must be
* serialized. * serialized.
* %IEEE80211_NUM_TIDS can be passed as the tid if the tid is unknown.
* In this case, mac80211 will not check that this tid maps to an AC
* that is trigger enabled and assume that the caller did the proper
* checks.
*/ */
void ieee80211_sta_uapsd_trigger(struct ieee80211_sta *sta, u8 tid); void ieee80211_sta_uapsd_trigger(struct ieee80211_sta *sta, u8 tid);
......
...@@ -1394,13 +1394,14 @@ void ieee80211_sta_uapsd_trigger(struct ieee80211_sta *pubsta, u8 tid) ...@@ -1394,13 +1394,14 @@ void ieee80211_sta_uapsd_trigger(struct ieee80211_sta *pubsta, u8 tid)
u8 ac = ieee802_1d_to_ac[tid & 7]; u8 ac = ieee802_1d_to_ac[tid & 7];
/* /*
* If this AC is not trigger-enabled do nothing. * If this AC is not trigger-enabled do nothing unless the
* driver is calling us after it already checked.
* *
* NB: This could/should check a separate bitmap of trigger- * NB: This could/should check a separate bitmap of trigger-
* enabled queues, but for now we only implement uAPSD w/o * enabled queues, but for now we only implement uAPSD w/o
* TSPEC changes to the ACs, so they're always the same. * TSPEC changes to the ACs, so they're always the same.
*/ */
if (!(sta->sta.uapsd_queues & BIT(ac))) if (!(sta->sta.uapsd_queues & BIT(ac)) && tid != IEEE80211_NUM_TIDS)
return; return;
/* if we are in a service period, do nothing */ /* if we are in a service period, do nothing */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment