linux: add patches for cdc drivers
This commit is contained in:
parent
6a16ed4465
commit
5e0deee8e9
@ -0,0 +1,47 @@
|
||||
From f7c6b17c9330c3362b5c90f19aeda90221fbd4a6 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Miguel=20Rodr=C3=ADguez=20P=C3=A9rez?=
|
||||
<miguel@det.uvigo.gal>
|
||||
Date: Wed, 15 Jul 2020 20:40:56 +0200
|
||||
Subject: [PATCH] net: cdc_ether: use dev->intf to get interface information
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
usbnet_cdc_update_filter was getting the interface number from the
|
||||
usb_interface struct in cdc_state->control. However, cdc_ncm does
|
||||
not initialize that structure in its bind function, but uses
|
||||
cdc_ncm_ctx instead. Getting intf directly from struct usbnet solves
|
||||
the problem.
|
||||
|
||||
Signed-off-by: Miguel Rodríguez Pérez <miguel@det.uvigo.gal>
|
||||
Signed-off-by: Bjørn Mork <bjorn@mork.no>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/usb/cdc_ether.c | 4 +---
|
||||
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c
|
||||
index eee402a59..0ba1c7b2c 100644
|
||||
--- a/drivers/net/usb/cdc_ether.c
|
||||
+++ b/drivers/net/usb/cdc_ether.c
|
||||
@@ -65,8 +65,6 @@ static const u8 mbm_guid[16] = {
|
||||
|
||||
static void usbnet_cdc_update_filter(struct usbnet *dev)
|
||||
{
|
||||
- struct cdc_state *info = (void *) &dev->data;
|
||||
- struct usb_interface *intf = info->control;
|
||||
struct net_device *net = dev->net;
|
||||
|
||||
u16 cdc_filter = USB_CDC_PACKET_TYPE_DIRECTED
|
||||
@@ -86,7 +84,7 @@ static void usbnet_cdc_update_filter(struct usbnet *dev)
|
||||
USB_CDC_SET_ETHERNET_PACKET_FILTER,
|
||||
USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
cdc_filter,
|
||||
- intf->cur_altsetting->desc.bInterfaceNumber,
|
||||
+ dev->intf->cur_altsetting->desc.bInterfaceNumber,
|
||||
NULL,
|
||||
0,
|
||||
USB_CTRL_SET_TIMEOUT
|
||||
--
|
||||
2.31.0
|
||||
|
||||
@ -0,0 +1,56 @@
|
||||
From dab43f02d394275ac9f5bde9800ff58863c4f18f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Miguel=20Rodr=C3=ADguez=20P=C3=A9rez?=
|
||||
<miguel@det.uvigo.gal>
|
||||
Date: Wed, 15 Jul 2020 20:40:57 +0200
|
||||
Subject: [PATCH] net: cdc_ether: export usbnet_cdc_update_filter
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This makes the function available to other drivers, like cdc_ncm.
|
||||
|
||||
Signed-off-by: Miguel Rodríguez Pérez <miguel@det.uvigo.gal>
|
||||
Acked-by: Oliver Neukum <oneukum@suse.com>
|
||||
Signed-off-by: Bjørn Mork <bjorn@mork.no>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/usb/cdc_ether.c | 3 ++-
|
||||
include/linux/usb/usbnet.h | 1 +
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c
|
||||
index 0ba1c7b2c..251396f84 100644
|
||||
--- a/drivers/net/usb/cdc_ether.c
|
||||
+++ b/drivers/net/usb/cdc_ether.c
|
||||
@@ -63,7 +63,7 @@ static const u8 mbm_guid[16] = {
|
||||
0xa6, 0x07, 0xc0, 0xff, 0xcb, 0x7e, 0x39, 0x2a,
|
||||
};
|
||||
|
||||
-static void usbnet_cdc_update_filter(struct usbnet *dev)
|
||||
+void usbnet_cdc_update_filter(struct usbnet *dev)
|
||||
{
|
||||
struct net_device *net = dev->net;
|
||||
|
||||
@@ -90,6 +90,7 @@ static void usbnet_cdc_update_filter(struct usbnet *dev)
|
||||
USB_CTRL_SET_TIMEOUT
|
||||
);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(usbnet_cdc_update_filter);
|
||||
|
||||
/* probes control interface, claims data interface, collects the bulk
|
||||
* endpoints, activates data interface (if needed), maybe sets MTU.
|
||||
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
|
||||
index fc6ed1311..dc7b69248 100644
|
||||
--- a/include/linux/usb/usbnet.h
|
||||
+++ b/include/linux/usb/usbnet.h
|
||||
@@ -209,6 +209,7 @@ struct cdc_state {
|
||||
struct usb_interface *data;
|
||||
};
|
||||
|
||||
+extern void usbnet_cdc_update_filter(struct usbnet *dev);
|
||||
extern int usbnet_generic_cdc_bind(struct usbnet *, struct usb_interface *);
|
||||
extern int usbnet_ether_cdc_bind(struct usbnet *dev, struct usb_interface *intf);
|
||||
extern int usbnet_cdc_bind(struct usbnet *, struct usb_interface *);
|
||||
--
|
||||
2.31.0
|
||||
|
||||
@ -0,0 +1,51 @@
|
||||
From b635f33a8bc91274be85b574b807c0321101d047 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
|
||||
Date: Wed, 15 Jul 2020 20:40:58 +0200
|
||||
Subject: [PATCH] net: usbnet: export usbnet_set_rx_mode()
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This function can be reused by other usbnet minidrivers.
|
||||
|
||||
Signed-off-by: Bjørn Mork <bjorn@mork.no>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/usb/usbnet.c | 3 ++-
|
||||
include/linux/usb/usbnet.h | 1 +
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
|
||||
index 414a9ebf5..b3500d5ef 100644
|
||||
--- a/drivers/net/usb/usbnet.c
|
||||
+++ b/drivers/net/usb/usbnet.c
|
||||
@@ -1111,12 +1111,13 @@ static void __handle_link_change(struct usbnet *dev)
|
||||
clear_bit(EVENT_LINK_CHANGE, &dev->flags);
|
||||
}
|
||||
|
||||
-static void usbnet_set_rx_mode(struct net_device *net)
|
||||
+void usbnet_set_rx_mode(struct net_device *net)
|
||||
{
|
||||
struct usbnet *dev = netdev_priv(net);
|
||||
|
||||
usbnet_defer_kevent(dev, EVENT_SET_RX_MODE);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(usbnet_set_rx_mode);
|
||||
|
||||
static void __handle_set_rx_mode(struct usbnet *dev)
|
||||
{
|
||||
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
|
||||
index dc7b69248..7921433d1 100644
|
||||
--- a/include/linux/usb/usbnet.h
|
||||
+++ b/include/linux/usb/usbnet.h
|
||||
@@ -276,6 +276,7 @@ extern int usbnet_set_link_ksettings(struct net_device *net,
|
||||
extern u32 usbnet_get_link(struct net_device *net);
|
||||
extern u32 usbnet_get_msglevel(struct net_device *);
|
||||
extern void usbnet_set_msglevel(struct net_device *, u32);
|
||||
+extern void usbnet_set_rx_mode(struct net_device *net);
|
||||
extern void usbnet_get_drvinfo(struct net_device *, struct ethtool_drvinfo *);
|
||||
extern int usbnet_nway_reset(struct net_device *net);
|
||||
|
||||
--
|
||||
2.31.0
|
||||
|
||||
@ -0,0 +1,37 @@
|
||||
From 0da7e4a985fc2ccdc67aff1ddaa70af51a603e89 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Miguel=20Rodr=C3=ADguez=20P=C3=A9rez?=
|
||||
<miguel@det.uvigo.gal>
|
||||
Date: Wed, 15 Jul 2020 20:40:59 +0200
|
||||
Subject: [PATCH] net: cdc_ncm: add .ndo_set_rx_mode to cdc_ncm_netdev_ops
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The cdc_ncm driver overrides the net_device_ops structure used by usbnet
|
||||
to be able to hook into .ndo_change_mtu. However, the structure was
|
||||
missing the .ndo_set_rx_mode field, preventing the driver from
|
||||
hooking into usbnet's set_rx_mode. This patch adds the missing callback to
|
||||
usbnet_set_rx_mode in net_device_ops.
|
||||
|
||||
Signed-off-by: Miguel Rodríguez Pérez <miguel@det.uvigo.gal>
|
||||
Signed-off-by: Bjørn Mork <bjorn@mork.no>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/usb/cdc_ncm.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
|
||||
index 1c9a1b94f..983a91b02 100644
|
||||
--- a/drivers/net/usb/cdc_ncm.c
|
||||
+++ b/drivers/net/usb/cdc_ncm.c
|
||||
@@ -761,6 +761,7 @@ static const struct net_device_ops cdc_ncm_netdev_ops = {
|
||||
.ndo_stop = usbnet_stop,
|
||||
.ndo_start_xmit = usbnet_start_xmit,
|
||||
.ndo_tx_timeout = usbnet_tx_timeout,
|
||||
+ .ndo_set_rx_mode = usbnet_set_rx_mode,
|
||||
.ndo_get_stats64 = usbnet_get_stats64,
|
||||
.ndo_change_mtu = cdc_ncm_change_mtu,
|
||||
.ndo_set_mac_address = eth_mac_addr,
|
||||
--
|
||||
2.31.0
|
||||
|
||||
@ -0,0 +1,52 @@
|
||||
From 1e033efbccb3b8422df5a20db211ac32985e7190 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Miguel=20Rodr=C3=ADguez=20P=C3=A9rez?=
|
||||
<miguel@det.uvigo.gal>
|
||||
Date: Wed, 15 Jul 2020 20:41:00 +0200
|
||||
Subject: [PATCH] net: cdc_ncm: hook into set_rx_mode to admit multicast
|
||||
traffic
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
We set set_rx_mode to usbnet_cdc_update_filter provided
|
||||
by cdc_ether that simply admits all multicast traffic
|
||||
if there is more than one multicast filter configured.
|
||||
|
||||
Signed-off-by: Miguel Rodríguez Pérez <miguel@det.uvigo.gal>
|
||||
Signed-off-by: Bjørn Mork <bjorn@mork.no>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/usb/cdc_ncm.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
|
||||
index 983a91b02..4961e9eca 100644
|
||||
--- a/drivers/net/usb/cdc_ncm.c
|
||||
+++ b/drivers/net/usb/cdc_ncm.c
|
||||
@@ -1672,6 +1672,7 @@ static const struct driver_info cdc_ncm_info = {
|
||||
.status = cdc_ncm_status,
|
||||
.rx_fixup = cdc_ncm_rx_fixup,
|
||||
.tx_fixup = cdc_ncm_tx_fixup,
|
||||
+ .set_rx_mode = usbnet_cdc_update_filter,
|
||||
};
|
||||
|
||||
/* Same as cdc_ncm_info, but with FLAG_WWAN */
|
||||
@@ -1685,6 +1686,7 @@ static const struct driver_info wwan_info = {
|
||||
.status = cdc_ncm_status,
|
||||
.rx_fixup = cdc_ncm_rx_fixup,
|
||||
.tx_fixup = cdc_ncm_tx_fixup,
|
||||
+ .set_rx_mode = usbnet_cdc_update_filter,
|
||||
};
|
||||
|
||||
/* Same as wwan_info, but with FLAG_NOARP */
|
||||
@@ -1698,6 +1700,7 @@ static const struct driver_info wwan_noarp_info = {
|
||||
.status = cdc_ncm_status,
|
||||
.rx_fixup = cdc_ncm_rx_fixup,
|
||||
.tx_fixup = cdc_ncm_tx_fixup,
|
||||
+ .set_rx_mode = usbnet_cdc_update_filter,
|
||||
};
|
||||
|
||||
static const struct usb_device_id cdc_devs[] = {
|
||||
--
|
||||
2.31.0
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
From 3232773edafa76c65109948024e70531846fa8ae Mon Sep 17 00:00:00 2001
|
||||
From: jjm2473 <1129525450@qq.com>
|
||||
Date: Thu, 16 Mar 2023 12:08:20 +0800
|
||||
Subject: [PATCH] usbnet: support get speed
|
||||
|
||||
---
|
||||
drivers/net/usb/usbnet.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
|
||||
index b8b9df82f..414a9ebf5 100644
|
||||
--- a/drivers/net/usb/usbnet.c
|
||||
+++ b/drivers/net/usb/usbnet.c
|
||||
@@ -952,8 +952,11 @@ int usbnet_get_link_ksettings(struct net_device *net,
|
||||
{
|
||||
struct usbnet *dev = netdev_priv(net);
|
||||
|
||||
- if (!dev->mii.mdio_read)
|
||||
- return -EOPNOTSUPP;
|
||||
+ if (!dev->mii.mdio_read) {
|
||||
+ cmd->base.speed = dev->tx_speed/1000000U;
|
||||
+ cmd->base.duplex = DUPLEX_FULL;
|
||||
+ return 0;
|
||||
+ }
|
||||
|
||||
mii_ethtool_get_link_ksettings(&dev->mii, cmd);
|
||||
|
||||
--
|
||||
2.31.0
|
||||
|
||||
Loading…
Reference in New Issue
Block a user