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     
 

Reply via email to