mac80211: add an option for station management TXQ

We have a TXQ abstraction for non-data packets that need
powersave buffering. Since the AP cannot sleep, in case
of station we can use this TXQ for all management frames,
regardless if they are bufferable. Add HW flag to allow
that.

Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Šī revīzija ir iekļauta:
Sara Sharon
2018-09-05 08:06:09 +03:00
revīziju iesūtīja Johannes Berg
vecāks add7453ad6
revīzija 0eeb2b674f
3 mainīti faili ar 17 papildinājumiem un 3 dzēšanām

Parādīt failu

@@ -217,6 +217,7 @@ static const char *hw_flag_names[] = {
FLAG(DOESNT_SUPPORT_QOS_NDP),
FLAG(BUFF_MMPDU_TXQ),
FLAG(SUPPORTS_VHT_EXT_NSS_BW),
FLAG(STA_MMPDU_TXQ),
#undef FLAG
};

Parādīt failu

@@ -1251,7 +1251,8 @@ static struct txq_info *ieee80211_get_txq(struct ieee80211_local *local,
if (unlikely(!ieee80211_is_data_present(hdr->frame_control))) {
if ((!ieee80211_is_mgmt(hdr->frame_control) ||
ieee80211_is_bufferable_mmpdu(hdr->frame_control)) &&
ieee80211_is_bufferable_mmpdu(hdr->frame_control) ||
vif->type == NL80211_IFTYPE_STATION) &&
sta && sta->uploaded) {
/*
* This will be NULL if the driver didn't set the
@@ -1456,9 +1457,16 @@ void ieee80211_txq_init(struct ieee80211_sub_if_data *sdata,
}
if (tid == IEEE80211_NUM_TIDS) {
/* Drivers need to opt in to the bufferable MMPDU TXQ */
if (!ieee80211_hw_check(&sdata->local->hw, BUFF_MMPDU_TXQ))
if (sdata->vif.type == NL80211_IFTYPE_STATION) {
/* Drivers need to opt in to the management MPDU TXQ */
if (!ieee80211_hw_check(&sdata->local->hw,
STA_MMPDU_TXQ))
return;
} else if (!ieee80211_hw_check(&sdata->local->hw,
BUFF_MMPDU_TXQ)) {
/* Drivers need to opt in to the bufferable MMPDU TXQ */
return;
}
txqi->txq.ac = IEEE80211_AC_VO;
} else {
txqi->txq.ac = ieee80211_ac_from_tid(tid);