Commit c261344d authored by Arnd Bergmann's avatar Arnd Bergmann Committed by David S. Miller

usbnet: use eth%d name for known ethernet devices

The documentation for the USB ethernet devices suggests that
only some devices are supposed to use usb0 as the network interface
name instead of eth0. The logic used there, and documented in
Kconfig for CDC is that eth0 will be used when the mac address
is a globally assigned one, but usb0 is used for the locally
managed range that is typically used on point-to-point links.

Unfortunately, this has caused a lot of pain on the smsc95xx
device that is used on the popular pandaboard without an
EEPROM to store the MAC address, which causes the driver to
call random_ether_address().

Obviously, there should be a proper MAC addressed assigned to
the device, and discussions are ongoing about how to solve
this, but this patch at least makes sure that the default
interface naming gets a little saner and matches what the
user can expect based on the documentation, including for
new devices.

The approach taken here is to flag whether a device might be a
point-to-point link with the new FLAG_POINTTOPOINT setting in
the usbnet driver_info. A driver can set both FLAG_POINTTOPOINT
and FLAG_ETHER if it is not sure (e.g. cdc_ether), or just one
of the two.  The usbnet framework only looks at the MAC address
for device naming if both flags are set, otherwise it trusts the
flag.
Signed-off-by: default avatarArnd Bergmann <arnd.bergmann@linaro.org>
Tested-by: default avatarAndy Green <andy.green@linaro.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1591cb60
...@@ -340,7 +340,7 @@ static int eem_rx_fixup(struct usbnet *dev, struct sk_buff *skb) ...@@ -340,7 +340,7 @@ static int eem_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
static const struct driver_info eem_info = { static const struct driver_info eem_info = {
.description = "CDC EEM Device", .description = "CDC EEM Device",
.flags = FLAG_ETHER, .flags = FLAG_ETHER | FLAG_POINTTOPOINT,
.bind = eem_bind, .bind = eem_bind,
.rx_fixup = eem_rx_fixup, .rx_fixup = eem_rx_fixup,
.tx_fixup = eem_tx_fixup, .tx_fixup = eem_tx_fixup,
......
...@@ -452,7 +452,7 @@ static int cdc_manage_power(struct usbnet *dev, int on) ...@@ -452,7 +452,7 @@ static int cdc_manage_power(struct usbnet *dev, int on)
static const struct driver_info cdc_info = { static const struct driver_info cdc_info = {
.description = "CDC Ethernet Device", .description = "CDC Ethernet Device",
.flags = FLAG_ETHER, .flags = FLAG_ETHER | FLAG_POINTTOPOINT,
// .check_connect = cdc_check_connect, // .check_connect = cdc_check_connect,
.bind = usbnet_cdc_bind, .bind = usbnet_cdc_bind,
.unbind = usbnet_cdc_unbind, .unbind = usbnet_cdc_unbind,
......
...@@ -1237,7 +1237,7 @@ static int cdc_ncm_manage_power(struct usbnet *dev, int status) ...@@ -1237,7 +1237,7 @@ static int cdc_ncm_manage_power(struct usbnet *dev, int status)
static const struct driver_info cdc_ncm_info = { static const struct driver_info cdc_ncm_info = {
.description = "CDC NCM", .description = "CDC NCM",
.flags = FLAG_NO_SETINT | FLAG_MULTI_PACKET, .flags = FLAG_POINTTOPOINT | FLAG_NO_SETINT | FLAG_MULTI_PACKET,
.bind = cdc_ncm_bind, .bind = cdc_ncm_bind,
.unbind = cdc_ncm_unbind, .unbind = cdc_ncm_unbind,
.check_connect = cdc_ncm_check_connect, .check_connect = cdc_ncm_check_connect,
......
...@@ -89,6 +89,7 @@ static int always_connected (struct usbnet *dev) ...@@ -89,6 +89,7 @@ static int always_connected (struct usbnet *dev)
static const struct driver_info ali_m5632_info = { static const struct driver_info ali_m5632_info = {
.description = "ALi M5632", .description = "ALi M5632",
.flags = FLAG_POINTTOPOINT,
}; };
#endif #endif
...@@ -110,6 +111,7 @@ static const struct driver_info ali_m5632_info = { ...@@ -110,6 +111,7 @@ static const struct driver_info ali_m5632_info = {
static const struct driver_info an2720_info = { static const struct driver_info an2720_info = {
.description = "AnchorChips/Cypress 2720", .description = "AnchorChips/Cypress 2720",
.flags = FLAG_POINTTOPOINT,
// no reset available! // no reset available!
// no check_connect available! // no check_connect available!
...@@ -132,6 +134,7 @@ static const struct driver_info an2720_info = { ...@@ -132,6 +134,7 @@ static const struct driver_info an2720_info = {
static const struct driver_info belkin_info = { static const struct driver_info belkin_info = {
.description = "Belkin, eTEK, or compatible", .description = "Belkin, eTEK, or compatible",
.flags = FLAG_POINTTOPOINT,
}; };
#endif /* CONFIG_USB_BELKIN */ #endif /* CONFIG_USB_BELKIN */
...@@ -157,6 +160,7 @@ static const struct driver_info belkin_info = { ...@@ -157,6 +160,7 @@ static const struct driver_info belkin_info = {
static const struct driver_info epson2888_info = { static const struct driver_info epson2888_info = {
.description = "Epson USB Device", .description = "Epson USB Device",
.check_connect = always_connected, .check_connect = always_connected,
.flags = FLAG_POINTTOPOINT,
.in = 4, .out = 3, .in = 4, .out = 3,
}; };
...@@ -173,6 +177,7 @@ static const struct driver_info epson2888_info = { ...@@ -173,6 +177,7 @@ static const struct driver_info epson2888_info = {
#define HAVE_HARDWARE #define HAVE_HARDWARE
static const struct driver_info kc2190_info = { static const struct driver_info kc2190_info = {
.description = "KC Technology KC-190", .description = "KC Technology KC-190",
.flags = FLAG_POINTTOPOINT,
}; };
#endif /* CONFIG_USB_KC2190 */ #endif /* CONFIG_USB_KC2190 */
...@@ -200,16 +205,19 @@ static const struct driver_info kc2190_info = { ...@@ -200,16 +205,19 @@ static const struct driver_info kc2190_info = {
static const struct driver_info linuxdev_info = { static const struct driver_info linuxdev_info = {
.description = "Linux Device", .description = "Linux Device",
.check_connect = always_connected, .check_connect = always_connected,
.flags = FLAG_POINTTOPOINT,
}; };
static const struct driver_info yopy_info = { static const struct driver_info yopy_info = {
.description = "Yopy", .description = "Yopy",
.check_connect = always_connected, .check_connect = always_connected,
.flags = FLAG_POINTTOPOINT,
}; };
static const struct driver_info blob_info = { static const struct driver_info blob_info = {
.description = "Boot Loader OBject", .description = "Boot Loader OBject",
.check_connect = always_connected, .check_connect = always_connected,
.flags = FLAG_POINTTOPOINT,
}; };
#endif /* CONFIG_USB_ARMLINUX */ #endif /* CONFIG_USB_ARMLINUX */
......
...@@ -193,7 +193,7 @@ static int genelink_bind(struct usbnet *dev, struct usb_interface *intf) ...@@ -193,7 +193,7 @@ static int genelink_bind(struct usbnet *dev, struct usb_interface *intf)
static const struct driver_info genelink_info = { static const struct driver_info genelink_info = {
.description = "Genesys GeneLink", .description = "Genesys GeneLink",
.flags = FLAG_FRAMING_GL | FLAG_NO_SETINT, .flags = FLAG_POINTTOPOINT | FLAG_FRAMING_GL | FLAG_NO_SETINT,
.bind = genelink_bind, .bind = genelink_bind,
.rx_fixup = genelink_rx_fixup, .rx_fixup = genelink_rx_fixup,
.tx_fixup = genelink_tx_fixup, .tx_fixup = genelink_tx_fixup,
......
...@@ -560,7 +560,7 @@ static int net1080_bind(struct usbnet *dev, struct usb_interface *intf) ...@@ -560,7 +560,7 @@ static int net1080_bind(struct usbnet *dev, struct usb_interface *intf)
static const struct driver_info net1080_info = { static const struct driver_info net1080_info = {
.description = "NetChip TurboCONNECT", .description = "NetChip TurboCONNECT",
.flags = FLAG_FRAMING_NC, .flags = FLAG_POINTTOPOINT | FLAG_FRAMING_NC,
.bind = net1080_bind, .bind = net1080_bind,
.reset = net1080_reset, .reset = net1080_reset,
.check_connect = net1080_check_connect, .check_connect = net1080_check_connect,
......
...@@ -96,7 +96,7 @@ static int pl_reset(struct usbnet *dev) ...@@ -96,7 +96,7 @@ static int pl_reset(struct usbnet *dev)
static const struct driver_info prolific_info = { static const struct driver_info prolific_info = {
.description = "Prolific PL-2301/PL-2302", .description = "Prolific PL-2301/PL-2302",
.flags = FLAG_NO_SETINT, .flags = FLAG_POINTTOPOINT | FLAG_NO_SETINT,
/* some PL-2302 versions seem to fail usb_set_interface() */ /* some PL-2302 versions seem to fail usb_set_interface() */
.reset = pl_reset, .reset = pl_reset,
}; };
......
...@@ -573,7 +573,7 @@ EXPORT_SYMBOL_GPL(rndis_tx_fixup); ...@@ -573,7 +573,7 @@ EXPORT_SYMBOL_GPL(rndis_tx_fixup);
static const struct driver_info rndis_info = { static const struct driver_info rndis_info = {
.description = "RNDIS device", .description = "RNDIS device",
.flags = FLAG_ETHER | FLAG_FRAMING_RN | FLAG_NO_SETINT, .flags = FLAG_ETHER | FLAG_POINTTOPOINT | FLAG_FRAMING_RN | FLAG_NO_SETINT,
.bind = rndis_bind, .bind = rndis_bind,
.unbind = rndis_unbind, .unbind = rndis_unbind,
.status = rndis_status, .status = rndis_status,
......
...@@ -1380,7 +1380,8 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod) ...@@ -1380,7 +1380,8 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
// else "eth%d" when there's reasonable doubt. userspace // else "eth%d" when there's reasonable doubt. userspace
// can rename the link if it knows better. // can rename the link if it knows better.
if ((dev->driver_info->flags & FLAG_ETHER) != 0 && if ((dev->driver_info->flags & FLAG_ETHER) != 0 &&
(net->dev_addr [0] & 0x02) == 0) ((dev->driver_info->flags & FLAG_POINTTOPOINT) == 0 ||
(net->dev_addr [0] & 0x02) == 0))
strcpy (net->name, "eth%d"); strcpy (net->name, "eth%d");
/* WLAN devices should always be named "wlan%d" */ /* WLAN devices should always be named "wlan%d" */
if ((dev->driver_info->flags & FLAG_WLAN) != 0) if ((dev->driver_info->flags & FLAG_WLAN) != 0)
......
...@@ -102,7 +102,7 @@ static int always_connected (struct usbnet *dev) ...@@ -102,7 +102,7 @@ static int always_connected (struct usbnet *dev)
static const struct driver_info zaurus_sl5x00_info = { static const struct driver_info zaurus_sl5x00_info = {
.description = "Sharp Zaurus SL-5x00", .description = "Sharp Zaurus SL-5x00",
.flags = FLAG_FRAMING_Z, .flags = FLAG_POINTTOPOINT | FLAG_FRAMING_Z,
.check_connect = always_connected, .check_connect = always_connected,
.bind = zaurus_bind, .bind = zaurus_bind,
.unbind = usbnet_cdc_unbind, .unbind = usbnet_cdc_unbind,
...@@ -112,7 +112,7 @@ static const struct driver_info zaurus_sl5x00_info = { ...@@ -112,7 +112,7 @@ static const struct driver_info zaurus_sl5x00_info = {
static const struct driver_info zaurus_pxa_info = { static const struct driver_info zaurus_pxa_info = {
.description = "Sharp Zaurus, PXA-2xx based", .description = "Sharp Zaurus, PXA-2xx based",
.flags = FLAG_FRAMING_Z, .flags = FLAG_POINTTOPOINT | FLAG_FRAMING_Z,
.check_connect = always_connected, .check_connect = always_connected,
.bind = zaurus_bind, .bind = zaurus_bind,
.unbind = usbnet_cdc_unbind, .unbind = usbnet_cdc_unbind,
...@@ -122,7 +122,7 @@ static const struct driver_info zaurus_pxa_info = { ...@@ -122,7 +122,7 @@ static const struct driver_info zaurus_pxa_info = {
static const struct driver_info olympus_mxl_info = { static const struct driver_info olympus_mxl_info = {
.description = "Olympus R1000", .description = "Olympus R1000",
.flags = FLAG_FRAMING_Z, .flags = FLAG_POINTTOPOINT | FLAG_FRAMING_Z,
.check_connect = always_connected, .check_connect = always_connected,
.bind = zaurus_bind, .bind = zaurus_bind,
.unbind = usbnet_cdc_unbind, .unbind = usbnet_cdc_unbind,
...@@ -258,7 +258,7 @@ static int blan_mdlm_bind(struct usbnet *dev, struct usb_interface *intf) ...@@ -258,7 +258,7 @@ static int blan_mdlm_bind(struct usbnet *dev, struct usb_interface *intf)
static const struct driver_info bogus_mdlm_info = { static const struct driver_info bogus_mdlm_info = {
.description = "pseudo-MDLM (BLAN) device", .description = "pseudo-MDLM (BLAN) device",
.flags = FLAG_FRAMING_Z, .flags = FLAG_POINTTOPOINT | FLAG_FRAMING_Z,
.check_connect = always_connected, .check_connect = always_connected,
.tx_fixup = zaurus_tx_fixup, .tx_fixup = zaurus_tx_fixup,
.bind = blan_mdlm_bind, .bind = blan_mdlm_bind,
......
...@@ -97,6 +97,8 @@ struct driver_info { ...@@ -97,6 +97,8 @@ struct driver_info {
#define FLAG_LINK_INTR 0x0800 /* updates link (carrier) status */ #define FLAG_LINK_INTR 0x0800 /* updates link (carrier) status */
#define FLAG_POINTTOPOINT 0x1000 /* possibly use "usb%d" names */
/* /*
* Indicates to usbnet, that USB driver accumulates multiple IP packets. * Indicates to usbnet, that USB driver accumulates multiple IP packets.
* Affects statistic (counters) and short packet handling. * Affects statistic (counters) and short packet handling.
......
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