*     but if the rate control is built-in then it must be set by the driver.
  *     See also the documentation for that flag.
  *
+ * @IEEE80211_HW_STA_MMPDU_TXQ: use the extra non-TID per-station TXQ for all
+ *     MMPDUs on station interfaces. This of course requires the driver to use
+ *     TXQs to start with.
+ *
  * @NUM_IEEE80211_HW_FLAGS: number of hardware flags, used for sizing arrays
  */
 enum ieee80211_hw_flags {
        IEEE80211_HW_DOESNT_SUPPORT_QOS_NDP,
        IEEE80211_HW_BUFF_MMPDU_TXQ,
        IEEE80211_HW_SUPPORTS_VHT_EXT_NSS_BW,
+       IEEE80211_HW_STA_MMPDU_TXQ,
 
        /* keep last, obviously */
        NUM_IEEE80211_HW_FLAGS
 
 
        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
        }
 
        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);