patch-2.4.20 linux-2.4.20/drivers/net/pcmcia/ray_cs.c
Next file: linux-2.4.20/drivers/net/pcmcia/smc91c92_cs.c
Previous file: linux-2.4.20/drivers/net/pcmcia/pcnet_cs.c
Back to the patch index
Back to the overall index
- Lines: 78
- Date:
Thu Nov 28 15:53:14 2002
- Orig file:
linux-2.4.19/drivers/net/pcmcia/ray_cs.c
- Orig date:
Fri Aug 2 17:39:44 2002
diff -urN linux-2.4.19/drivers/net/pcmcia/ray_cs.c linux-2.4.20/drivers/net/pcmcia/ray_cs.c
@@ -2,7 +2,7 @@
*
* A PCMCIA client driver for the Raylink wireless LAN card.
* The starting point for this module was the skeleton.c in the
- * PCMCIA 2.9.12 package written by David Hinds, dhinds@allegro.stanford.edu
+ * PCMCIA 2.9.12 package written by David Hinds, dahinds@users.sourceforge.net
*
*
* Copyright (c) 1998 Corey Thomas (corey@world.std.com)
@@ -48,6 +48,8 @@
#include <linux/if_arp.h>
#include <linux/ioport.h>
#include <linux/skbuff.h>
+#include <linux/ethtool.h>
+#include <asm/uaccess.h>
#include <pcmcia/version.h>
#include <pcmcia/cs_types.h>
@@ -1224,7 +1226,32 @@
}
}
} /* end encapsulate_frame */
+
+
/*===========================================================================*/
+
+static int netdev_ethtool_ioctl(struct net_device *dev, void *useraddr)
+{
+ u32 ethcmd;
+
+ if (copy_from_user(ðcmd, useraddr, sizeof(ethcmd)))
+ return -EFAULT;
+
+ switch (ethcmd) {
+ case ETHTOOL_GDRVINFO: {
+ struct ethtool_drvinfo info = {ETHTOOL_GDRVINFO};
+ strncpy(info.driver, "ray_cs", sizeof(info.driver)-1);
+ if (copy_to_user(useraddr, &info, sizeof(info)))
+ return -EFAULT;
+ return 0;
+ }
+ }
+
+ return -EOPNOTSUPP;
+}
+
+/*====================================================================*/
+
static int ray_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
{
ray_dev_t *local = (ray_dev_t *)dev->priv;
@@ -1242,6 +1269,10 @@
/* Validate the command */
switch (cmd)
{
+ case SIOCETHTOOL:
+ err = netdev_ethtool_ioctl(dev, (void *) ifr->ifr_data);
+ break;
+
#if WIRELESS_EXT > 7
/* --------------- WIRELESS EXTENSIONS --------------- */
/* Get name */
@@ -1316,9 +1347,12 @@
err = -E2BIG;
break;
}
- copy_from_user(card_essid,
- wrq->u.data.pointer,
- wrq->u.data.length);
+ if (copy_from_user(card_essid,
+ wrq->u.data.pointer,
+ wrq->u.data.length)) {
+ err = -EFAULT;
+ break;
+ }
card_essid[IW_ESSID_MAX_SIZE] = '\0';
/* Set the ESSID in the card */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)