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