mt76: usb: move mt76u_check_sg in usb.c
authorLorenzo Bianconi <lorenzo@kernel.org>
Tue, 12 Feb 2019 13:42:39 +0000 (14:42 +0100)
committerFelix Fietkau <nbd@nbd.name>
Mon, 18 Feb 2019 18:55:52 +0000 (19:55 +0100)
Move mt76u_check_sg routine in usb.c and introduce sg_en variable
in mt76_usb in order to check if scatter-gather is supported by
mt76u layer

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/mt76x0/usb.c
drivers/net/wireless/mediatek/mt76/mt76x2/usb_init.c
drivers/net/wireless/mediatek/mt76/usb.c

index 13f6febc9b0fafa034ec377d3a22bd35654e20ae..0eb9152c5d18079f7da3b64774a134c39621a968 100644 (file)
@@ -379,6 +379,7 @@ struct mt76_usb {
        u16 out_max_packet;
        u8 in_ep[__MT_EP_IN_MAX];
        u16 in_max_packet;
+       bool sg_en;
 
        struct mt76u_mcu {
                struct mutex mutex;
@@ -726,16 +727,6 @@ static inline u8 q2ep(u8 qid)
        return qid + 1;
 }
 
-static inline bool mt76u_check_sg(struct mt76_dev *dev)
-{
-       struct usb_interface *intf = to_usb_interface(dev->dev);
-       struct usb_device *udev = interface_to_usbdev(intf);
-
-       return (udev->bus->sg_tablesize > 0 &&
-               (udev->bus->no_sg_constraint ||
-                udev->speed == USB_SPEED_WIRELESS));
-}
-
 static inline int
 mt76u_bulk_msg(struct mt76_dev *dev, void *data, int len, int timeout)
 {
index 2f259bc0ad9e53b6df8d473d82554d977d89d5d7..da9d05f6074db97d12a9ffbe43e9e49d326c37ab 100644 (file)
@@ -206,7 +206,7 @@ static int mt76x0u_register_device(struct mt76x02_dev *dev)
                goto out_err;
 
        /* check hw sg support in order to enable AMSDU */
-       if (mt76u_check_sg(&dev->mt76))
+       if (dev->mt76.usb.sg_en)
                hw->max_tx_fragments = MT_SG_MAX_SIZE;
        else
                hw->max_tx_fragments = 1;
index 006e430e374edb04dd927068dcd2fc9ae3f47acd..090aaf71b3ef0ac7ad053bd425df48206e7389b1 100644 (file)
@@ -228,7 +228,7 @@ int mt76x2u_register_device(struct mt76x02_dev *dev)
                goto fail;
 
        /* check hw sg support in order to enable AMSDU */
-       if (mt76u_check_sg(&dev->mt76))
+       if (dev->mt76.usb.sg_en)
                hw->max_tx_fragments = MT_SG_MAX_SIZE;
        else
                hw->max_tx_fragments = 1;
index d2c30a280c3aec2c9f9d7c813d57d8925c9dfa15..78b31b9ba8ad1f6cf319a8ed8ebc4d4dd20d0376 100644 (file)
@@ -241,6 +241,16 @@ mt76u_rd_rp(struct mt76_dev *dev, u32 base,
                return mt76u_req_rd_rp(dev, base, data, n);
 }
 
+static bool mt76u_check_sg(struct mt76_dev *dev)
+{
+       struct usb_interface *intf = to_usb_interface(dev->dev);
+       struct usb_device *udev = interface_to_usbdev(intf);
+
+       return (udev->bus->sg_tablesize > 0 &&
+               (udev->bus->no_sg_constraint ||
+                udev->speed == USB_SPEED_WIRELESS));
+}
+
 static int
 mt76u_set_endpoints(struct usb_interface *intf,
                    struct mt76_usb *usb)
@@ -535,7 +545,7 @@ static int mt76u_alloc_rx(struct mt76_dev *dev)
        if (!q->entry)
                return -ENOMEM;
 
-       if (mt76u_check_sg(dev)) {
+       if (dev->usb.sg_en) {
                q->buf_size = MT_RX_BUF_SIZE;
                nsgs = MT_SG_MAX_SIZE;
        } else {
@@ -880,6 +890,8 @@ int mt76u_init(struct mt76_dev *dev,
        dev->bus = &mt76u_ops;
        dev->queue_ops = &usb_queue_ops;
 
+       usb->sg_en = mt76u_check_sg(dev);
+
        return mt76u_set_endpoints(intf, usb);
 }
 EXPORT_SYMBOL_GPL(mt76u_init);