|
@@ -52,6 +52,26 @@ static int wme_downgrade_ac(struct sk_buff *skb)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static u16 ieee80211_downgrade_queue(struct ieee80211_local *local,
|
|
|
+ struct sk_buff *skb)
|
|
|
+{
|
|
|
+ /* in case we are a client verify acm is not set for this ac */
|
|
|
+ while (unlikely(local->wmm_acm & BIT(skb->priority))) {
|
|
|
+ if (wme_downgrade_ac(skb)) {
|
|
|
+ /*
|
|
|
+ * This should not really happen. The AP has marked all
|
|
|
+ * lower ACs to require admission control which is not
|
|
|
+ * a reasonable configuration. Allow the frame to be
|
|
|
+ * transmitted using AC_BK as a workaround.
|
|
|
+ */
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* look up which queue to use for frames with this 1d tag */
|
|
|
+ return ieee802_1d_to_ac[skb->priority];
|
|
|
+}
|
|
|
+
|
|
|
/* Indicate which queue to use for this fully formed 802.11 frame */
|
|
|
u16 ieee80211_select_queue_80211(struct ieee80211_local *local,
|
|
|
struct sk_buff *skb,
|
|
@@ -139,26 +159,6 @@ u16 ieee80211_select_queue(struct ieee80211_sub_if_data *sdata,
|
|
|
return ieee80211_downgrade_queue(local, skb);
|
|
|
}
|
|
|
|
|
|
-u16 ieee80211_downgrade_queue(struct ieee80211_local *local,
|
|
|
- struct sk_buff *skb)
|
|
|
-{
|
|
|
- /* in case we are a client verify acm is not set for this ac */
|
|
|
- while (unlikely(local->wmm_acm & BIT(skb->priority))) {
|
|
|
- if (wme_downgrade_ac(skb)) {
|
|
|
- /*
|
|
|
- * This should not really happen. The AP has marked all
|
|
|
- * lower ACs to require admission control which is not
|
|
|
- * a reasonable configuration. Allow the frame to be
|
|
|
- * transmitted using AC_BK as a workaround.
|
|
|
- */
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /* look up which queue to use for frames with this 1d tag */
|
|
|
- return ieee802_1d_to_ac[skb->priority];
|
|
|
-}
|
|
|
-
|
|
|
void ieee80211_set_qos_hdr(struct ieee80211_sub_if_data *sdata,
|
|
|
struct sk_buff *skb)
|
|
|
{
|