ChangeSet 1.811.1.16, 2002/12/16 11:55:18-08:00, [EMAIL PROTECTED]

[PATCH] usbnet:  framing, sync with 2.5

This patch matches the 2.5 patch I just submitted, except that
it keeps Pavel's table-based crc32 code since <linux/crc32.h>
says it's not for "bulk data" (which is what this driver does).
Plus some changes (ethtool) were forward ports from pre1.

- Addresses two issues Toby Milne reported against the Zaurus:
    (a) if skbs had extra framing added (z, net1080, gl620a),
        the original size (now too small) was used on tx;
    (b) added FLAG_FRAMING_Z so rx packets had enough space

- Stubs in some PXA-250 support for non-Zaurus PDAs.
    This is currently commented out; so far those PDAs
    only run Linux for bleeding edge developers.

- Minor cleanups.


diff -Nru a/drivers/usb/Config.in b/drivers/usb/Config.in
--- a/drivers/usb/Config.in     Mon Dec 16 16:33:49 2002
+++ b/drivers/usb/Config.in     Mon Dec 16 16:33:49 2002
@@ -100,7 +100,7 @@
       dep_tristate '  USB KLSI KL5USB101-based ethernet device support 
(EXPERIMENTAL)' CONFIG_USB_KAWETH $CONFIG_USB $CONFIG_NET $CONFIG_EXPERIMENTAL
       dep_tristate '  USB CATC NetMate-based Ethernet device support (EXPERIMENTAL)' 
CONFIG_USB_CATC $CONFIG_USB $CONFIG_NET $CONFIG_EXPERIMENTAL
       dep_tristate '  USB Communication Class Ethernet device support (EXPERIMENTAL)' 
CONFIG_USB_CDCETHER $CONFIG_USB $CONFIG_NET $CONFIG_EXPERIMENTAL
-      dep_tristate '  USB-to-USB Networking cable device support (EXPERIMENTAL)' 
CONFIG_USB_USBNET $CONFIG_USB $CONFIG_NET $CONFIG_EXPERIMENTAL
+      dep_tristate '  USB-to-USB Networking cables, Linux PDAs, ... (EXPERIMENTAL)' 
+CONFIG_USB_USBNET $CONFIG_USB $CONFIG_NET $CONFIG_EXPERIMENTAL
    fi
 
    comment 'USB port drivers'
diff -Nru a/drivers/usb/usbnet.c b/drivers/usb/usbnet.c
--- a/drivers/usb/usbnet.c      Mon Dec 16 16:33:49 2002
+++ b/drivers/usb/usbnet.c      Mon Dec 16 16:33:49 2002
@@ -35,7 +35,7 @@
  *     - GeneSys GL620USB-A
  *     - NetChip 1080 (interoperates with NetChip Win32 drivers)
  *     - Prolific PL-2301/2302 (replaces "plusb" driver)
- *     - SA-1100 (and similar) Linux PDAs like iPaq, Yopy, and Zaurus
+ *     - PXA-250 or SA-1100 Linux PDAs like iPaq, Yopy, and Zaurus
  *
  * USB devices can implement their side of this protocol at the cost
  * of two bulk endpoints; it's not restricted to "cable" applications.
@@ -63,8 +63,7 @@
  *
  * - SA-1100 PDAs ... the standard ARM Linux SA-1100 support works nicely,
  *   as found in www.handhelds.org and other kernels.  The Sharp/Lineo
- *   kernels use different drivers, which also work here, but they've made
- *   "uhci-hcd" (2.5) die.
+ *   kernels use different drivers, which also talk to this code.
  *
  * Interop with more Win32 drivers may be a good thing.
  *
@@ -118,7 +117,10 @@
  * 07-may-2002 Generalize/cleanup keventd support, handling rx stalls (mostly
  *             for USB 2.0 TTs) and memory shortages (potential) too. (db)
  *             Use "locally assigned" IEEE802 address space. (Brad Hards)
- * 18-oct-2002  Support for Zaurus (Pavel Machek), related cleanup (db).
+ * 18-oct-2002 Support for Zaurus (Pavel Machek), related cleanup (db).
+ * 15-dec-2002 Partial sync with 2.5 code: cleanups and stubbed PXA-250
+ *             support (db), fix for framing issues on Z, net1080, and
+ *             gl620a (Toby Milne)
  *
  *-------------------------------------------------------------------------*/
 
@@ -172,6 +174,8 @@
  * Nineteen USB 1.1 max size bulk transactions per frame (ms), max.
  * Several dozen bytes of IPv4 data can fit in two such transactions.
  * One maximum size Ethernet packet takes twenty four of them.
+ * For high speed, each frame comfortably fits almost 36 max size
+ * Ethernet packets (so queues should be bigger).
  */
 #ifdef REALLY_QUEUE
 #define        RX_QLEN         4
@@ -243,6 +247,7 @@
        int             flags;
 #define FLAG_FRAMING_NC        0x0001          /* guard against device dropouts */ 
 #define FLAG_FRAMING_GL        0x0002          /* genelink batches packets */
+#define FLAG_FRAMING_Z 0x0004          /* zaurus adds a trailer */
 #define FLAG_NO_SETINT 0x0010          /* device can't set_interface() */
 
        /* reset device ... can sleep */
@@ -553,7 +558,7 @@
        }
 
        // fill irq urb
-       FILL_INT_URB (priv->irq_urb, dev->udev,
+       usb_fill_int_urb (priv->irq_urb, dev->udev,
                usb_rcvintpipe (dev->udev, GENELINK_INTERRUPT_PIPE),
                priv->irq_buf, INTERRUPT_BUFSIZE,
                gl_interrupt_complete, 0,
@@ -1245,13 +1250,34 @@
 
 
 
+#ifdef CONFIG_USB_PXA
+
+/*-------------------------------------------------------------------------
+ *
+ * PXA250 and PXA210 use XScale cores (ARM v5TE) with better USB support,
+ * and different USB endpoint numbering than the SA1100 devices.
+ *
+ *-------------------------------------------------------------------------*/
+
+static const struct driver_info        pxa_info = {
+       .description =  "PXA-250 Linux Device",
+       .check_connect = always_connected,
+
+       .in = 1, .out = 2,
+       .epsize = 64,
+};
+
+#endif /* CONFIG_USB_PXA */
+
+
+
 #ifdef CONFIG_USB_SA1100
 
 /*-------------------------------------------------------------------------
  *
  * Intel's SA-1100 chip integrates basic USB support, and is used
  * in PDAs like some iPaqs, the Yopy, some Zaurus models, and more.
- * When they run Linux, arch/arm/sa1100/usb-eth.c may be used to
+ * When they run Linux, arch/arm/mach-sa1100/usb-eth.c may be used to
  * network using minimal USB framing data.
  *
  * This describes the driver currently in standard ARM Linux kernels.
@@ -1283,16 +1309,17 @@
 /*-------------------------------------------------------------------------
  *
  * Zaurus is also a SA-1110 based PDA, but one using a different driver
- * for its USB slave/target controller than the case above.
+ * (and framing) for its USB slave/gadget controller than the case above.
  *
- * The key differences are that (a) it's got a msft-friendly configuration,
- * and (b) the linux-friendly framing adds a crc32 to cope with some
- * memory corruption observed with usb-to-memory DMA in some cases.
- * (SA-1100 has a lot of nasty USB errata that need working around.)
+ * For the current version of that driver, the main way that framing is
+ * nonstandard (also from perspective of the CDC ethernet model!) is a
+ * crc32, added to help detect when some sa1100 usb-to-memory DMA errata
+ * haven't been fully worked around.
  *
  *-------------------------------------------------------------------------*/
 
-// FIXME try <linux/crc32.h> instead
+// NOTE: so far on 2.4 <linux/crc32.h> isn't for "bulk data" like this.
+// On 2.5 crc32_le() handles this for us.
 
 static const u32 crc32_table [256] = {
     0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 
0xe963a535, 0x9e6495a3,
@@ -1373,22 +1400,25 @@
 
 static const struct driver_info        zaurus_sl5x00_info = {
        .description =  "Sharp Zaurus SL-5x00",
+       .flags =        FLAG_FRAMING_Z,
        .check_connect = always_connected,
        .tx_fixup =     zaurus_tx_fixup,
 
-       // SA-1100 fixed function endpoints
        .in = 2, .out = 1,
        .epsize = 64,
 };
 static const struct driver_info        zaurus_sla300_info = {
        .description =  "Sharp Zaurus SL-A300",
+       .flags =        FLAG_FRAMING_Z,
        .check_connect = always_connected,
        .tx_fixup =     zaurus_tx_fixup,
 
-       // two of the many PXA-250 fixed function endpoints
        .in = 1, .out = 2,
        .epsize = 64,
 };
+
+// SL-5600 and C-700 are PXA based; should resemble A300
+
 #endif
 
 
@@ -1431,7 +1461,7 @@
 
 /*-------------------------------------------------------------------------*/
 
-/* urb completions are currently in_irq; avoid doing real work then. */
+/* urb completions may be in_irq; avoid doing real work then. */
 
 static void defer_bh (struct usbnet *dev, struct sk_buff *skb)
 {
@@ -1485,6 +1515,11 @@
                size = GL_RCV_BUF_SIZE;
        else
 #endif
+#ifdef CONFIG_USB_ZAURUS
+       if (dev->driver_info->flags & FLAG_FRAMING_Z)
+               size = 6 + (sizeof (struct ethhdr) + dev->net.mtu);
+       else
+#endif
                size = (sizeof (struct ethhdr) + dev->net.mtu);
 
        if ((skb = alloc_skb (size, flags)) == 0) {
@@ -1500,15 +1535,10 @@
        entry->state = rx_start;
        entry->length = 0;
 
-       FILL_BULK_URB (urb, dev->udev,
+       usb_fill_bulk_urb (urb, dev->udev,
                usb_rcvbulkpipe (dev->udev, dev->driver_info->in),
                skb->data, size, rx_complete, skb);
        urb->transfer_flags |= USB_ASYNC_UNLINK;
-#if 0
-       // Idle-but-posted reads with UHCI really chew up
-       // PCI bandwidth unless FSBR is disabled
-       urb->transfer_flags |= USB_NO_FSBR;
-#endif
 
        spin_lock_irqsave (&dev->rxq.lock, lockflags);
 
@@ -1552,8 +1582,6 @@
        if (skb->len) {
                int     status;
 
-// FIXME: eth_copy_and_csum "small" packets to new SKB (small < ~200 bytes) ?
-
                skb->dev = &dev->net;
                skb->protocol = eth_type_trans (skb, &dev->net);
                dev->stats.rx_packets++;
@@ -1932,7 +1960,7 @@
 static int usbnet_start_xmit (struct sk_buff *skb, struct net_device *net)
 {
        struct usbnet           *dev = (struct usbnet *) net->priv;
-       int                     length = skb->len;
+       int                     length;
        int                     retval = NET_XMIT_SUCCESS;
        struct urb              *urb = 0;
        struct skb_data         *entry;
@@ -1952,6 +1980,7 @@
                        goto drop;
                }
        }
+       length = skb->len;
 
        if (!(urb = ALLOC_URB (0, GFP_ATOMIC))) {
                dbg ("no urb");
@@ -1966,6 +1995,7 @@
 
        // FIXME: reorganize a bit, so that fixup() fills out NetChip
        // framing too. (Packet ID update needs the spinlock...)
+       // [ BETTER:  we already own net->xmit_lock, that's enough ]
 
 #ifdef CONFIG_USB_NET1080
        if (info->flags & FLAG_FRAMING_NC) {
@@ -1982,11 +2012,10 @@
        if ((length % EP_SIZE (dev)) == 0)
                skb->len++;
 
-       FILL_BULK_URB (urb, dev->udev,
+       usb_fill_bulk_urb (urb, dev->udev,
                        usb_sndbulkpipe (dev->udev, info->out),
                        skb->data, skb->len, tx_complete, skb);
        urb->transfer_flags |= USB_ASYNC_UNLINK;
-       // FIXME urb->timeout = ... jiffies ... ;
 
        spin_lock_irqsave (&dev->txq.lock, flags);
 
@@ -2302,6 +2331,18 @@
 },
 #endif
 
+#ifdef CONFIG_USB_PXA
+/*
+ * PXA250 or PXA210 ...  these use a "usb-eth" driver much like
+ * the sa1100 one.
+ */
+{
+       // Compaq "Itsy" vendor/product id, version "2.0"
+       USB_DEVICE_VER (0x049F, 0x505A, 0x0200, 0x0200),
+       .driver_info =  (unsigned long) &pxa_info,
+}, 
+#endif
+
 #ifdef CONFIG_USB_SA1100
 /*
  * SA-1100 using standard ARM Linux kernels, or compatible.
@@ -2310,7 +2351,8 @@
  */
 {
        // 1183 = 0x049F, both used as hex values?
-       USB_DEVICE (0x049F, 0x505A),    // iPaq: Compaq "Itsy"
+       // Compaq "Itsy" vendor/product id, version "0.0"
+       USB_DEVICE_VER (0x049F, 0x505A, 0, 0),
        .driver_info =  (unsigned long) &linuxdev_info,
 }, {
        USB_DEVICE (0x0E7E, 0x1001),    // G.Mate "Yopy"
@@ -2344,8 +2386,6 @@
        .driver_info =  (unsigned long) &zaurus_sla300_info,
 },
 #endif
-
-/* KC2190 from www.sepoong.co.kr "InstaNET" */
 
        { },            // END
 };


-------------------------------------------------------
This sf.net email is sponsored by:
With Great Power, Comes Great Responsibility 
Learn to use your power at OSDN's High Performance Computing Channel
http://hpc.devchannel.org/
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to