mt76: mt76u: add mt76_skb_adjust_pad utility routine
authorLorenzo Bianconi <lorenzo@kernel.org>
Wed, 15 Jul 2020 12:46:27 +0000 (14:46 +0200)
committerFelix Fietkau <nbd@nbd.name>
Tue, 21 Jul 2020 17:01:18 +0000 (19:01 +0200)
Introduce mt76_skb_adjust_pad to reuse the code adding sdio support to
mt7615 driver and remove code duplication. Move 4B header configuration
for usb devices out of mt76_skb_adjust_pad

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt76.h
drivers/net/wireless/mediatek/mt76/mt7615/usb.c
drivers/net/wireless/mediatek/mt76/mt7615/usb_mcu.c
drivers/net/wireless/mediatek/mt76/mt76x02_usb_core.c
drivers/net/wireless/mediatek/mt76/tx.c
drivers/net/wireless/mediatek/mt76/usb.c

index 532267056ff3129dab751a2f9ae3dad197fa07f2..8ee159d614ae1d376ed29409c301fe07ebd8ce9b 100644 (file)
@@ -1015,7 +1015,7 @@ mt76u_bulk_msg(struct mt76_dev *dev, void *data, int len, int *actual_len,
        return usb_bulk_msg(udev, pipe, data, len, actual_len, timeout);
 }
 
-int mt76u_skb_dma_info(struct sk_buff *skb, u32 info);
+int mt76_skb_adjust_pad(struct sk_buff *skb);
 int mt76u_vendor_request(struct mt76_dev *dev, u8 req,
                         u8 req_type, u16 val, u16 offset,
                         void *buf, size_t len);
index 1f1578895ed5856f74b5be8dc650d034052fb650..aba926f1eeb5baf5623530d7fdc0f36d297520a1 100644 (file)
@@ -252,7 +252,8 @@ mt7663u_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
 {
        struct mt7615_sta *msta = container_of(wcid, struct mt7615_sta, wcid);
        struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx_info->skb);
+       struct sk_buff *skb = tx_info->skb;
+       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 
        if ((info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE) &&
            !msta->rate_probe) {
@@ -262,9 +263,10 @@ mt7663u_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
                                     msta->rates);
                spin_unlock_bh(&dev->mt76.lock);
        }
-       mt7663u_mac_write_txwi(dev, wcid, qid, sta, tx_info->skb);
+       mt7663u_mac_write_txwi(dev, wcid, qid, sta, skb);
 
-       return mt76u_skb_dma_info(tx_info->skb, tx_info->skb->len);
+       put_unaligned_le32(skb->len, skb_push(skb, sizeof(skb->len)));
+       return mt76_skb_adjust_pad(skb);
 }
 
 static bool mt7663u_tx_status_data(struct mt76_dev *mdev, u8 *update)
index 39cd7dd95c9c65e534dff9224113bd99967e0c12..0b33df3e3bfec3eb83aa1b32236c08d03beea658 100644 (file)
@@ -28,7 +28,8 @@ mt7663u_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
        else
                ep = MT_EP_OUT_AC_BE;
 
-       ret = mt76u_skb_dma_info(skb, skb->len);
+       put_unaligned_le32(skb->len, skb_push(skb, sizeof(skb->len)));
+       ret = mt76_skb_adjust_pad(skb);
        if (ret < 0)
                goto out;
 
index 0180b6200b178bbc1a3129ea2e4cc1e1acaafd9e..37321e656776ce6ff080892d452bd417c77e6e02 100644 (file)
@@ -56,8 +56,9 @@ int mt76x02u_skb_dma_info(struct sk_buff *skb, int port, u32 flags)
         */
        info = FIELD_PREP(MT_TXD_INFO_LEN, round_up(skb->len, 4)) |
               FIELD_PREP(MT_TXD_INFO_DPORT, port) | flags;
+       put_unaligned_le32(info, skb_push(skb, sizeof(info)));
 
-       return mt76u_skb_dma_info(skb, info);
+       return mt76_skb_adjust_pad(skb);
 }
 
 int mt76x02u_tx_prepare_skb(struct mt76_dev *mdev, void *data,
index 5adf92d7a9f319902fe4494209336a12b32de473..3afd89ecd6c9d977e3ecb67b34ded208af8aa0d8 100644 (file)
@@ -677,3 +677,32 @@ u8 mt76_ac_to_hwq(u8 ac)
        return wmm_queue_map[ac];
 }
 EXPORT_SYMBOL_GPL(mt76_ac_to_hwq);
+
+int mt76_skb_adjust_pad(struct sk_buff *skb)
+{
+       struct sk_buff *iter, *last = skb;
+       u32 pad;
+
+       /* Add zero pad of 4 - 7 bytes */
+       pad = round_up(skb->len, 4) + 4 - skb->len;
+
+       /* First packet of a A-MSDU burst keeps track of the whole burst
+        * length, need to update length of it and the last packet.
+        */
+       skb_walk_frags(skb, iter) {
+               last = iter;
+               if (!iter->next) {
+                       skb->data_len += pad;
+                       skb->len += pad;
+                       break;
+               }
+       }
+
+       if (skb_pad(last, pad))
+               return -ENOMEM;
+
+       __skb_put(last, pad);
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(mt76_skb_adjust_pad);
index 84e2fd0a4fc1915c9997a25bb8015538ce28955d..5f19f9e51d9cf88f401ac2dfcf9b89b0d2513d72 100644 (file)
@@ -904,35 +904,6 @@ mt76u_tx_setup_buffers(struct mt76_dev *dev, struct sk_buff *skb,
        return urb->num_sgs;
 }
 
-int mt76u_skb_dma_info(struct sk_buff *skb, u32 info)
-{
-       struct sk_buff *iter, *last = skb;
-       u32 pad;
-
-       put_unaligned_le32(info, skb_push(skb, sizeof(info)));
-       /* Add zero pad of 4 - 7 bytes */
-       pad = round_up(skb->len, 4) + 4 - skb->len;
-
-       /* First packet of a A-MSDU burst keeps track of the whole burst
-        * length, need to update length of it and the last packet.
-        */
-       skb_walk_frags(skb, iter) {
-               last = iter;
-               if (!iter->next) {
-                       skb->data_len += pad;
-                       skb->len += pad;
-                       break;
-               }
-       }
-
-       if (skb_pad(last, pad))
-               return -ENOMEM;
-       __skb_put(last, pad);
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(mt76u_skb_dma_info);
-
 static int
 mt76u_tx_queue_skb(struct mt76_dev *dev, enum mt76_txq_id qid,
                   struct sk_buff *skb, struct mt76_wcid *wcid,