Commit 63a7de5d authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Felix Fietkau

mt76: usb: move mt76u_check_sg in usb.c

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: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent b3098121
...@@ -379,6 +379,7 @@ struct mt76_usb { ...@@ -379,6 +379,7 @@ struct mt76_usb {
u16 out_max_packet; u16 out_max_packet;
u8 in_ep[__MT_EP_IN_MAX]; u8 in_ep[__MT_EP_IN_MAX];
u16 in_max_packet; u16 in_max_packet;
bool sg_en;
struct mt76u_mcu { struct mt76u_mcu {
struct mutex mutex; struct mutex mutex;
...@@ -726,16 +727,6 @@ static inline u8 q2ep(u8 qid) ...@@ -726,16 +727,6 @@ static inline u8 q2ep(u8 qid)
return qid + 1; 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 static inline int
mt76u_bulk_msg(struct mt76_dev *dev, void *data, int len, int timeout) mt76u_bulk_msg(struct mt76_dev *dev, void *data, int len, int timeout)
{ {
......
...@@ -206,7 +206,7 @@ static int mt76x0u_register_device(struct mt76x02_dev *dev) ...@@ -206,7 +206,7 @@ static int mt76x0u_register_device(struct mt76x02_dev *dev)
goto out_err; goto out_err;
/* check hw sg support in order to enable AMSDU */ /* 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; hw->max_tx_fragments = MT_SG_MAX_SIZE;
else else
hw->max_tx_fragments = 1; hw->max_tx_fragments = 1;
......
...@@ -228,7 +228,7 @@ int mt76x2u_register_device(struct mt76x02_dev *dev) ...@@ -228,7 +228,7 @@ int mt76x2u_register_device(struct mt76x02_dev *dev)
goto fail; goto fail;
/* check hw sg support in order to enable AMSDU */ /* 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; hw->max_tx_fragments = MT_SG_MAX_SIZE;
else else
hw->max_tx_fragments = 1; hw->max_tx_fragments = 1;
......
...@@ -241,6 +241,16 @@ mt76u_rd_rp(struct mt76_dev *dev, u32 base, ...@@ -241,6 +241,16 @@ mt76u_rd_rp(struct mt76_dev *dev, u32 base,
return mt76u_req_rd_rp(dev, base, data, n); 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 static int
mt76u_set_endpoints(struct usb_interface *intf, mt76u_set_endpoints(struct usb_interface *intf,
struct mt76_usb *usb) struct mt76_usb *usb)
...@@ -535,7 +545,7 @@ static int mt76u_alloc_rx(struct mt76_dev *dev) ...@@ -535,7 +545,7 @@ static int mt76u_alloc_rx(struct mt76_dev *dev)
if (!q->entry) if (!q->entry)
return -ENOMEM; return -ENOMEM;
if (mt76u_check_sg(dev)) { if (dev->usb.sg_en) {
q->buf_size = MT_RX_BUF_SIZE; q->buf_size = MT_RX_BUF_SIZE;
nsgs = MT_SG_MAX_SIZE; nsgs = MT_SG_MAX_SIZE;
} else { } else {
...@@ -880,6 +890,8 @@ int mt76u_init(struct mt76_dev *dev, ...@@ -880,6 +890,8 @@ int mt76u_init(struct mt76_dev *dev,
dev->bus = &mt76u_ops; dev->bus = &mt76u_ops;
dev->queue_ops = &usb_queue_ops; dev->queue_ops = &usb_queue_ops;
usb->sg_en = mt76u_check_sg(dev);
return mt76u_set_endpoints(intf, usb); return mt76u_set_endpoints(intf, usb);
} }
EXPORT_SYMBOL_GPL(mt76u_init); EXPORT_SYMBOL_GPL(mt76u_init);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment