wcn36xx: move set_tx_pdu inside set_tx_data/mgmt
[cascardo/linux.git] / drivers / net / wireless / ath / wcn36xx / txrx.c
index 277bc39..7f0d9e6 100644 (file)
@@ -115,9 +115,10 @@ static void wcn36xx_set_tx_data(struct wcn36xx_tx_bd *bd,
                                struct wcn36xx *wcn,
                                struct wcn36xx_vif **vif_priv,
                                struct wcn36xx_sta *sta_priv,
-                               struct ieee80211_hdr *hdr,
+                               struct sk_buff *skb,
                                bool bcast)
 {
+       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
        struct ieee80211_vif *vif = NULL;
        struct wcn36xx_vif *__vif_priv = NULL;
        bd->bd_rate = WCN36XX_BD_RATE_DATA;
@@ -158,14 +159,21 @@ static void wcn36xx_set_tx_data(struct wcn36xx_tx_bd *bd,
                bd->ack_policy = 1;
        }
        *vif_priv = __vif_priv;
+
+       wcn36xx_set_tx_pdu(bd,
+                          ieee80211_is_data_qos(hdr->frame_control) ?
+                          sizeof(struct ieee80211_qos_hdr) :
+                          sizeof(struct ieee80211_hdr_3addr),
+                          skb->len, sta_priv ? sta_priv->tid : 0);
 }
 
 static void wcn36xx_set_tx_mgmt(struct wcn36xx_tx_bd *bd,
                                struct wcn36xx *wcn,
                                struct wcn36xx_vif **vif_priv,
-                               struct ieee80211_hdr *hdr,
+                               struct sk_buff *skb,
                                bool bcast)
 {
+       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
        struct wcn36xx_vif *__vif_priv =
                get_vif_by_addr(wcn, hdr->addr2);
        bd->sta_index = __vif_priv->self_sta_index;
@@ -199,6 +207,12 @@ static void wcn36xx_set_tx_mgmt(struct wcn36xx_tx_bd *bd,
        } else
                bd->queue_id = WCN36XX_TX_U_WQ_ID;
        *vif_priv = __vif_priv;
+
+       wcn36xx_set_tx_pdu(bd,
+                          ieee80211_is_data_qos(hdr->frame_control) ?
+                          sizeof(struct ieee80211_qos_hdr) :
+                          sizeof(struct ieee80211_hdr_3addr),
+                          skb->len, WCN36XX_TID);
 }
 
 int wcn36xx_start_tx(struct wcn36xx *wcn,
@@ -260,22 +274,11 @@ int wcn36xx_start_tx(struct wcn36xx *wcn,
        }
 
        /* Data frames served first*/
-       if (is_low) {
-               wcn36xx_set_tx_data(bd, wcn, &vif_priv, sta_priv, hdr, bcast);
-               wcn36xx_set_tx_pdu(bd,
-                          ieee80211_is_data_qos(hdr->frame_control) ?
-                          sizeof(struct ieee80211_qos_hdr) :
-                          sizeof(struct ieee80211_hdr_3addr),
-                          skb->len, sta_priv ? sta_priv->tid : 0);
-       } else {
+       if (is_low)
+               wcn36xx_set_tx_data(bd, wcn, &vif_priv, sta_priv, skb, bcast);
+       else
                /* MGMT and CTRL frames are handeld here*/
-               wcn36xx_set_tx_mgmt(bd, wcn, &vif_priv, hdr, bcast);
-               wcn36xx_set_tx_pdu(bd,
-                          ieee80211_is_data_qos(hdr->frame_control) ?
-                          sizeof(struct ieee80211_qos_hdr) :
-                          sizeof(struct ieee80211_hdr_3addr),
-                          skb->len, WCN36XX_TID);
-       }
+               wcn36xx_set_tx_mgmt(bd, wcn, &vif_priv, skb, bcast);
 
        buff_to_be((u32 *)bd, sizeof(*bd)/sizeof(u32));
        bd->tx_bd_sign = 0xbdbdbdbd;