You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.
===================================================================
[EMAIL PROTECTED], 2003-08-29 07:56:36-04:00, [EMAIL PROTECTED]
Add ethtool_ops support to usbnet
usbnet.c | 98 +++++++++++++++++++++++++++------------------------------------
1 files changed, 42 insertions(+), 56 deletions(-)
diff -Nru a/drivers/usb/net/usbnet.c b/drivers/usb/net/usbnet.c
--- a/drivers/usb/net/usbnet.c Fri Aug 29 08:02:47 2003
+++ b/drivers/usb/net/usbnet.c Fri Aug 29 08:02:47 2003
@@ -298,6 +298,8 @@
/*-------------------------------------------------------------------------*/
+static struct ethtool_ops usbnet_ethtool_ops;
+
/* mostly for PDA style devices, which are always connected if present */
static int always_connected (struct usbnet *dev)
{
@@ -383,10 +385,10 @@
#ifdef CONFIG_USB_AX8817X
-#define NEED_MII
/* ASIX AX8817X based USB 2.0 Ethernet Devices */
#define HAVE_HARDWARE
+#define NEED_MII
#include <linux/crc32.h>
@@ -2415,79 +2417,54 @@
/*-------------------------------------------------------------------------*/
-static inline int
-usbnet_ethtool_ioctl (struct net_device *net, void __user *useraddr)
+static void usbnet_get_drvinfo (struct net_device *net, struct ethtool_drvinfo *info)
{
- struct usbnet *dev = (struct usbnet *) net->priv;
- u32 cmd;
+ struct usbnet *dev = net->priv;
- if (get_user (cmd, (u32 *)useraddr))
- return -EFAULT;
- switch (cmd) {
-
- case ETHTOOL_GDRVINFO: { /* get driver info */
- struct ethtool_drvinfo info;
-
- memset (&info, 0, sizeof info);
- info.cmd = ETHTOOL_GDRVINFO;
- strncpy (info.driver, driver_name, sizeof info.driver);
- strncpy (info.version, DRIVER_VERSION, sizeof info.version);
- strncpy (info.fw_version, dev->driver_info->description,
- sizeof info.fw_version);
- usb_make_path (dev->udev, info.bus_info, sizeof info.bus_info);
- if (copy_to_user (useraddr, &info, sizeof (info)))
- return -EFAULT;
- return 0;
- }
+ strncpy (info->driver, driver_name, sizeof info->driver);
+ strncpy (info->version, DRIVER_VERSION, sizeof info->version);
+ strncpy (info->fw_version, dev->driver_info->description,
+ sizeof info->fw_version);
+ usb_make_path (dev->udev, info->bus_info, sizeof info->bus_info);
+}
- case ETHTOOL_GLINK: /* get link status */
- if (dev->driver_info->check_connect) {
- struct ethtool_value edata = { ETHTOOL_GLINK };
-
- edata.data = dev->driver_info->check_connect (dev) == 0;
- if (copy_to_user (useraddr, &edata, sizeof (edata)))
- return -EFAULT;
- return 0;
- }
- break;
+static u32 usbnet_get_link (struct net_device *net)
+{
+ struct usbnet *dev = net->priv;
- case ETHTOOL_GMSGLVL: { /* get message-level */
- struct ethtool_value edata = {ETHTOOL_GMSGLVL};
+ /* If a check_connect is defined, return it's results */
+ if (dev->driver_info->check_connect)
+ return dev->driver_info->check_connect (dev) == 0;
- edata.data = dev->msg_level;
- if (copy_to_user (useraddr, &edata, sizeof (edata)))
- return -EFAULT;
- return 0;
- }
+ /* Otherwise, we're up to avoid breaking scripts */
+ return 1;
+}
- case ETHTOOL_SMSGLVL: { /* set message-level */
- struct ethtool_value edata;
+static u32 usbnet_get_msglevel (struct net_device *net)
+{
+ struct usbnet *dev = net->priv;
- if (copy_from_user (&edata, useraddr, sizeof (edata)))
- return -EFAULT;
- dev->msg_level = edata.data;
- return 0;
- }
-
- /* could also map RINGPARAM to RX/TX QLEN */
+ return dev->msg_level;
+}
- }
- /* Note that the ethtool user space code requires EOPNOTSUPP */
- return -EOPNOTSUPP;
+static void usbnet_set_msglevel (struct net_device *net, u32 level)
+{
+ struct usbnet *dev = net->priv;
+
+ dev->msg_level = level;
}
static int usbnet_ioctl (struct net_device *net, struct ifreq *rq, int cmd)
{
- if (cmd == SIOCETHTOOL)
- return usbnet_ethtool_ioctl (net, (void __user *)rq->ifr_data);
-
#ifdef NEED_MII
- struct usbnet *dev = (struct usbnet *)net->priv;
+ {
+ struct usbnet *dev = net->priv;
if (dev->mii.mdio_read != NULL && dev->mii.mdio_write != NULL)
return generic_mii_ioctl(&dev->mii,
(struct mii_ioctl_data *) &rq->ifr_data,
cmd, NULL);
+ }
#endif
return -EOPNOTSUPP;
}
@@ -2887,6 +2864,7 @@
net->watchdog_timeo = TX_TIMEOUT_JIFFIES;
net->tx_timeout = usbnet_tx_timeout;
net->do_ioctl = usbnet_ioctl;
+ net->ethtool_ops = &usbnet_ethtool_ops;
// allow device-specific bind/init procedures
// NOTE net->name still not usable ...
@@ -3163,6 +3141,14 @@
.id_table = products,
.probe = usbnet_probe,
.disconnect = usbnet_disconnect,
+};
+
+/* Default ethtool_ops assigned. Devices can override in their bind() routine */
+static struct ethtool_ops usbnet_ethtool_ops = {
+ .get_drvinfo = usbnet_get_drvinfo,
+ .get_link = usbnet_get_link,
+ .get_msglevel = usbnet_get_msglevel,
+ .set_msglevel = usbnet_set_msglevel,
};
/*-------------------------------------------------------------------------*/
===================================================================
This BitKeeper patch contains the following changesets:
+
## Wrapped with gzip_uu ##
M'XL( .= 3S\ ZU6[V_;-A#]+/X5!P18X\R625&290<.TM5!9VQK G?=EW40
M](.V"<N2(4I.NSG_^XZ2G%B)LZ;[EMAIL PROTECTED]'?O'N\>+SF!#TKD(R->9DDB%3F!
MGS-5W/_>2])/YFJS7IA1ML;-69;[EMAIL PROTECTED](D]%TE=YU"]5V+-,AR#R
M)BBB)6Q%KD8&,_G]2O%Y(T;&[EMAIL PROTECTED]'-,[EMAIL PROTECTED]>HR+D5B
MKO(L6)I9OMC=;^\L2AECED.YXS)G9WF<VSOFTC#&U]@:#.>A.R2+7"PNZW#4
MW [GU+,\2BV+#G9\Z#%*)L!,BP\\H+Q/O;XU!#H8.>Z(NSUJCRB%YI27QPH"
M/S+H4?(3?+_J-R2"UW$,[EMAIL PROTECTED];XV4:!*C>;+"[EMAIL PROTECTED] +FXJ"_ (V9<Z0W#P4
MC?2^\HL0&E!R<41SG$O=+]W%?IW0C![DVW3(!CM&&:6[R+(%"VV/!9;@;LC_
MLTHM7B1M<>N.#!ESL#P[QAUN599X+N*X0[Y=-XF#K8Q[X>4FB$*1)";&_JD-
M]-<710_01)[C[CCG [>R$:-VVT7.B/(7N<BVH.>X_YN/[EMAIL PROTECTED] X\
M]=12)B!<@/@D52'3Q1X+,HN*1$&0"T#&)DS$$*3QOCL0!2ED^);+6/0QD\XF
M"YFE 4;*%(JED#F$,HU/.S OTTCOF6CBNM'7T,MOJV\TY<VS/?\&@T\YEMPB
MJ@@*B>*+O(R*ULVJN?V#I7/RD4RXYP+#:&^(CY-8S&4JX-W5U<3_;3HE$\MF
M'M).\:D!#?TVD_&><($_<;Z5Z3R#TR:O7H_%5D8"SO"]^UC/'G^F/SLZB\7J
M+):%68P&7F> ,Z2"L2;M76RP8N=5@ W,TQ$V [>*2*/-9SC5C+V+NK#=IL!^
M&JP%BI!_BVP.AXC.^9-0W1#L61<FL^D?5S,??]Y/K]\]"F]01^+GM_X]!0K?
M9_*;M$)%N=QH5W2)8;0X'R(U+1[>7P<KX:.KEW!:497XV6W08:DJSD?"]LM(
M<:?K9'/ D8]U<[EMAIL PROTECTED]/QZX;Z#B8QNB?P70. 41+
M$:[EMAIL PROTECTED](15'F*<CBE<)W52:[EMAIL PROTECTED],^,>2\.6NK;"V>#A:N"?\"
MLJ+JX 0%6HL<@*-%NJP1>8WW-;^5"MUQ*U[AQ2\W>DX$E<'#7 0K/2#JEM7Z
MFL2L*:_+ZV.[]K/57:M%(K8B^=X*NRX,=*J!A2E;!< ,?I6B$3708C32Q>,>
MN;+J!:JZU3$JR(L$?B1&6PMN-YI0D:<+KI^.'C;5$\_P EK$#JD>"7?XZE5#
MRJBV#T?;&'XX-MVFG+D.>.1.J\-F3\0\0)[EMAIL PROTECTED]@(?%OPJ0Z?'O$/QGI
M>586>D*B%;YFU*)$/*QY,"[EMAIL PROTECTED];D+Z1CQ!Z:;^];]XCR'Y9P]1QF&K!
9[O]#K6Z-*M?CP'.XRWA,[EMAIL PROTECTED]@@L)0L