|
@@ -448,6 +448,7 @@ static void ath9k_htc_tx_process(struct ath9k_htc_priv *priv,
|
|
|
struct ieee80211_conf *cur_conf = &priv->hw->conf;
|
|
|
bool txok;
|
|
|
int slot;
|
|
|
+ int hdrlen, padsize;
|
|
|
|
|
|
slot = strip_drv_header(priv, skb);
|
|
|
if (slot < 0) {
|
|
@@ -504,6 +505,15 @@ send_mac80211:
|
|
|
|
|
|
ath9k_htc_tx_clear_slot(priv, slot);
|
|
|
|
|
|
+ /* Remove padding before handing frame back to mac80211 */
|
|
|
+ hdrlen = ieee80211_get_hdrlen_from_skb(skb);
|
|
|
+
|
|
|
+ padsize = hdrlen & 3;
|
|
|
+ if (padsize && skb->len > hdrlen + padsize) {
|
|
|
+ memmove(skb->data + padsize, skb->data, hdrlen);
|
|
|
+ skb_pull(skb, padsize);
|
|
|
+ }
|
|
|
+
|
|
|
/* Send status to mac80211 */
|
|
|
ieee80211_tx_status(priv->hw, skb);
|
|
|
}
|