* Removes the internal CRC32 routine
* fixes the ethtool GETDRVINFO things to be on par with the recent changes (use strlcpy, and usb_make_path)
* A few additional cases on the callbacks to handle disconnects on other controllers
* Sane defaults for rx_buffers instead of bombing out
Ethtool/mii routines still are not working properly on 2.5 Plan to implement URB queueing on tx and rx at some point.
Index: ax8817x.c
===================================================================
RCS file: /home/dhollis/cvsroot/ax8817x/2.5/ax8817x.c,v
retrieving revision 1.8
retrieving revision 1.11
diff -u -r1.8 -r1.11
--- ax8817x.c 12 Jun 2003 13:02:44 -0000 1.8
+++ ax8817x.c 15 Jun 2003 19:00:02 -0000 1.11
@@ -1,7 +1,7 @@
/*
* ASIX AX8817x USB 2.0 10/100/HomePNA Ethernet controller driver
*
- * $Id: ax8817x.c,v 1.8 2003/06/12 13:02:44 dhollis Exp $
+ * $Id: ax8817x.c,v 1.11 2003/06/15 19:00:02 dhollis Exp $
*
* Copyright (c) 2002-2003 TiVo Inc.
*
@@ -10,6 +10,12 @@
*
* History
*
+ * 2003-06-15 - Dave Hollis <[EMAIL PROTECTED]> 2.0.0
+ * * Remove crc32 inline function, use core kernel instead
+ * * Set sane defaults for rx_buffers
+ * * Fix ethtool GETDRVINFO bits - use strlcpy and
+ * usb_make_path
+ *
* 2003-06-05 - Dave Hollis <[EMAIL PROTECTED]> 0.10.0
* * Port to 2.5 series kernels
* * Remove #if 0 blocks that are confirmed
@@ -58,29 +64,10 @@
#include <linux/ethtool.h>
#include <linux/skbuff.h>
#include <linux/mii.h>
+#include <linux/crc32.h>
#include <asm/uaccess.h>
#include <linux/version.h>
-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,70)
-#include <linux/crc32.h>
-#else /* for now, this is swiped out of various drivers in
drivers/net/... */
-static unsigned const ethernet_polynomial = 0x04c11db7U;
-static inline u32 ether_crc(int length, unsigned char *data)
-{
- int crc = -1;
- while (--length >= 0) {
- unsigned char current_octet = *data++;
- int bit;
- for (bit = 0; bit < 8; bit++, current_octet >>= 1) {
- crc = (crc << 1) ^
- ((crc < 0) ^ (current_octet & 1) ?
- ethernet_polynomial : 0);
- }
- }
- return crc;
-}
-#endif
-
/* Version Information */
#define DRIVER_VERSION "v2.0.0"
#define DRIVER_AUTHOR "TiVo, Inc."
@@ -127,7 +114,9 @@
#define AX_MAX_PHY_RETRY 50
-static int n_rx_urbs = 2;
+#define AX_RX_URBS_DEFAULT 2
+
+static int n_rx_urbs = AX_RX_URBS_DEFAULT;
MODULE_PARM(n_rx_urbs, "i");
MODULE_PARM_DESC(n_rx_urbs,
@@ -624,7 +613,10 @@
case -ENOENT: /* */
case -ECONNRESET: /* Async unlink */
case -ESHUTDOWN: /* Hardware gone */
- case -EILSEQ: /* Get this when you yank it out */
+ case -EILSEQ: /* Get this when you yank it out on UHCI */
+ case -ETIMEDOUT: /* OHCI */
+ case -EPROTO: /* EHCI */
+ case -EPIPE:
dev_kfree_skb_any(skb);
urb->context = NULL;
return;
@@ -960,7 +952,6 @@
{
struct ax8817x_info *ax_info;
int cmd;
- char tmp[128];
ax_info = net->priv;
if (get_user(cmd, (int *) uaddr))
@@ -970,13 +961,11 @@
case ETHTOOL_GDRVINFO:{
struct ethtool_drvinfo info = { ETHTOOL_GDRVINFO };
- strncpy(info.driver, DRIVER_NAME,
+ strlcpy(info.driver, DRIVER_NAME,
ETHTOOL_BUSINFO_LEN);
- strncpy(info.version, DRIVER_VERSION,
+ strlcpy(info.version, DRIVER_VERSION,
ETHTOOL_BUSINFO_LEN);
- sprintf(tmp, "usb%d:%d", ax_info->usb->bus->busnum,
- ax_info->usb->devnum);
- strncpy(info.bus_info, tmp, ETHTOOL_BUSINFO_LEN);
+ usb_make_path(ax_info->usb, info.bus_info,sizeof
info.bus_info);
if (copy_to_user(uaddr, &info, sizeof(info)))
return -EFAULT;
return 0;
@@ -1330,10 +1319,8 @@
{
int ret;
- if (n_rx_urbs <= 0) {
- err("%s: Non-positive URB count\n", __FUNCTION__);
- return -EINVAL;
- }
+ if (n_rx_urbs < 1)
+ n_rx_urbs = AX_RX_URBS_DEFAULT;
ret = usb_register(&ax8817x_driver);
if (ret < 0) {
