vserver 1.9.5.x5
[linux-2.6.git] / drivers / usb / net / usbnet.c
1 /*
2  * USB Networking Links
3  * Copyright (C) 2000-2003 by David Brownell <dbrownell@users.sourceforge.net>
4  * Copyright (C) 2002 Pavel Machek <pavel@ucw.cz>
5  * Copyright (C) 2003 David Hollis <dhollis@davehollis.com>
6  * Copyright (c) 2002-2003 TiVo Inc.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  */
22
23 /*
24  * This is a generic "USB networking" framework that works with several
25  * kinds of full and high speed networking devices:
26  *
27  *   + USB host-to-host "network cables", used for IP-over-USB links.
28  *     These are often used for Laplink style connectivity products.
29  *      - AnchorChip 2720
30  *      - Belkin, eTEK (interops with Win32 drivers)
31  *      - GeneSys GL620USB-A
32  *      - NetChip 1080 (interoperates with NetChip Win32 drivers)
33  *      - Prolific PL-2301/2302 (replaces "plusb" driver)
34  *      - KC Technology KC2190
35  *
36  *   + Smart USB devices can support such links directly, using Internet
37  *     standard protocols instead of proprietary host-to-device links.
38  *      - Linux PDAs like iPaq, Yopy, and Zaurus
39  *      - The BLOB boot loader (for diskless booting)
40  *      - Linux "gadgets", perhaps using PXA-2xx or Net2280 controllers
41  *      - Devices using EPSON's sample USB firmware
42  *      - CDC-Ethernet class devices, such as many cable modems
43  *
44  *   + Adapters to networks such as Ethernet.
45  *      - AX8817X based USB 2.0 products
46  *
47  * Links to these devices can be bridged using Linux Ethernet bridging.
48  * With minor exceptions, these all use similar USB framing for network
49  * traffic, but need different protocols for control traffic.
50  *
51  * USB devices can implement their side of this protocol at the cost
52  * of two bulk endpoints; it's not restricted to "cable" applications.
53  * See the SA1110, Zaurus, or EPSON device/client support in this driver;
54  * slave/target drivers such as "usb-eth" (on most SA-1100 PDAs) or
55  * "g_ether" (in the Linux "gadget" framework) implement that behavior
56  * within devices.
57  *
58  *
59  * CHANGELOG:
60  *
61  * 13-sep-2000  experimental, new
62  * 10-oct-2000  usb_device_id table created. 
63  * 28-oct-2000  misc fixes; mostly, discard more TTL-mangled rx packets.
64  * 01-nov-2000  usb_device_id table and probing api update by
65  *              Adam J. Richter <adam@yggdrasil.com>.
66  * 18-dec-2000  (db) tx watchdog, "net1080" renaming to "usbnet", device_info
67  *              and prolific support, isolate net1080-specific bits, cleanup.
68  *              fix unlink_urbs oops in D3 PM resume code path.
69  *
70  * 02-feb-2001  (db) fix tx skb sharing, packet length, match_flags, ...
71  * 08-feb-2001  stubbed in "linuxdev", maybe the SA-1100 folk can use it;
72  *              AnchorChips 2720 support (from spec) for testing;
73  *              fix bit-ordering problem with ethernet multicast addr
74  * 19-feb-2001  Support for clearing halt conditions. SA1100 UDC support
75  *              updates. Oleg Drokin (green@iXcelerator.com)
76  * 25-mar-2001  More SA-1100 updates, including workaround for ip problem
77  *              expecting cleared skb->cb and framing change to match latest
78  *              handhelds.org version (Oleg).  Enable device IDs from the
79  *              Win32 Belkin driver; other cleanups (db).
80  * 16-jul-2001  Bugfixes for uhci oops-on-unplug, Belkin support, various
81  *              cleanups for problems not yet seen in the field. (db)
82  * 17-oct-2001  Handle "Advance USBNET" product, like Belkin/eTEK devices,
83  *              from Ioannis Mavroukakis <i.mavroukakis@btinternet.com>;
84  *              rx unlinks somehow weren't async; minor cleanup.
85  * 03-nov-2001  Merged GeneSys driver; original code from Jiun-Jie Huang
86  *              <huangjj@genesyslogic.com.tw>, updated by Stanislav Brabec
87  *              <utx@penguin.cz>.  Made framing options (NetChip/GeneSys)
88  *              tie mostly to (sub)driver info.  Workaround some PL-2302
89  *              chips that seem to reject SET_INTERFACE requests.
90  *
91  * 06-apr-2002  Added ethtool support, based on a patch from Brad Hards.
92  *              Level of diagnostics is more configurable; they use device
93  *              location (usb_device->devpath) instead of address (2.5).
94  *              For tx_fixup, memflags can't be NOIO.
95  * 07-may-2002  Generalize/cleanup keventd support, handling rx stalls (mostly
96  *              for USB 2.0 TTs) and memory shortages (potential) too. (db)
97  *              Use "locally assigned" IEEE802 address space. (Brad Hards)
98  * 18-oct-2002  Support for Zaurus (Pavel Machek), related cleanup (db).
99  * 14-dec-2002  Remove Zaurus-private crc32 code (Pavel); 2.5 oops fix,
100  *              cleanups and stubbed PXA-250 support (db), fix for framing
101  *              issues on Z, net1080, and gl620a (Toby Milne)
102  *
103  * 31-mar-2003  Use endpoint descriptors:  high speed support, simpler sa1100
104  *              vs pxa25x, and CDC Ethernet.  Throttle down log floods on
105  *              disconnect; other cleanups. (db)  Flush net1080 fifos
106  *              after several sequential framing errors. (Johannes Erdfelt)
107  * 22-aug-2003  AX8817X support (Dave Hollis).
108  * 14-jun-2004  Trivial patch for AX8817X based Buffalo LUA-U2-KTX in Japan
109  *              (Neil Bortnak)
110  * 03-nov-2004  Trivial patch for KC2190 (KC-190) chip. (Jonathan McDowell)
111  *
112  *-------------------------------------------------------------------------*/
113
114 // #define      DEBUG                   // error path messages, extra info
115 // #define      VERBOSE                 // more; success messages
116
117 #include <linux/config.h>
118 #ifdef  CONFIG_USB_DEBUG
119 #   define DEBUG
120 #endif
121 #include <linux/module.h>
122 #include <linux/kmod.h>
123 #include <linux/sched.h>
124 #include <linux/init.h>
125 #include <linux/netdevice.h>
126 #include <linux/etherdevice.h>
127 #include <linux/random.h>
128 #include <linux/ethtool.h>
129 #include <linux/workqueue.h>
130 #include <linux/mii.h>
131 #include <asm/uaccess.h>
132 #include <asm/unaligned.h>
133 #include <linux/usb.h>
134 #include <asm/io.h>
135 #include <asm/scatterlist.h>
136 #include <linux/mm.h>
137 #include <linux/dma-mapping.h>
138
139 #define DRIVER_VERSION          "03-Nov-2004"
140
141
142 /*-------------------------------------------------------------------------*/
143
144 /*
145  * Nineteen USB 1.1 max size bulk transactions per frame (ms), max.
146  * Several dozen bytes of IPv4 data can fit in two such transactions.
147  * One maximum size Ethernet packet takes twenty four of them.
148  * For high speed, each frame comfortably fits almost 36 max size
149  * Ethernet packets (so queues should be bigger).
150  */
151 #define RX_QLEN(dev) (((dev)->udev->speed == USB_SPEED_HIGH) ? 60 : 4)
152 #define TX_QLEN(dev) (((dev)->udev->speed == USB_SPEED_HIGH) ? 60 : 4)
153
154 // packets are always ethernet inside
155 // ... except they can be bigger (limit of 64K with NetChip framing)
156 #define MIN_PACKET      sizeof(struct ethhdr)
157 #define MAX_PACKET      32768
158
159 // reawaken network queue this soon after stopping; else watchdog barks
160 #define TX_TIMEOUT_JIFFIES      (5*HZ)
161
162 // throttle rx/tx briefly after some faults, so khubd might disconnect()
163 // us (it polls at HZ/4 usually) before we report too many false errors.
164 #define THROTTLE_JIFFIES        (HZ/8)
165
166 // for vendor-specific control operations
167 #define CONTROL_TIMEOUT_MS      (500)                   /* msec */
168 #define CONTROL_TIMEOUT_JIFFIES ((CONTROL_TIMEOUT_MS * HZ)/1000)
169
170 // between wakeups
171 #define UNLINK_TIMEOUT_MS       3
172
173 /*-------------------------------------------------------------------------*/
174
175 // randomly generated ethernet address
176 static u8       node_id [ETH_ALEN];
177
178 // state we keep for each device we handle
179 struct usbnet {
180         // housekeeping
181         struct usb_device       *udev;
182         struct driver_info      *driver_info;
183         wait_queue_head_t       *wait;
184
185         // i/o info: pipes etc
186         unsigned                in, out;
187         unsigned                maxpacket;
188         struct timer_list       delay;
189
190         // protocol/interface state
191         struct net_device       *net;
192         struct net_device_stats stats;
193         int                     msg_level;
194         unsigned long           data [5];
195
196         struct mii_if_info      mii;
197
198         // various kinds of pending driver work
199         struct sk_buff_head     rxq;
200         struct sk_buff_head     txq;
201         struct sk_buff_head     done;
202         struct tasklet_struct   bh;
203
204         struct work_struct      kevent;
205         unsigned long           flags;
206 #               define EVENT_TX_HALT    0
207 #               define EVENT_RX_HALT    1
208 #               define EVENT_RX_MEMORY  2
209 };
210
211 // device-specific info used by the driver
212 struct driver_info {
213         char            *description;
214
215         int             flags;
216 /* framing is CDC Ethernet, not writing ZLPs (hw issues), or optionally: */
217 #define FLAG_FRAMING_NC 0x0001          /* guard against device dropouts */ 
218 #define FLAG_FRAMING_GL 0x0002          /* genelink batches packets */
219 #define FLAG_FRAMING_Z  0x0004          /* zaurus adds a trailer */
220 #define FLAG_FRAMING_RN 0x0008          /* RNDIS batches, plus huge header */
221
222 #define FLAG_NO_SETINT  0x0010          /* device can't set_interface() */
223 #define FLAG_ETHER      0x0020          /* maybe use "eth%d" names */
224
225         /* init device ... can sleep, or cause probe() failure */
226         int     (*bind)(struct usbnet *, struct usb_interface *);
227
228         /* cleanup device ... can sleep, but can't fail */
229         void    (*unbind)(struct usbnet *, struct usb_interface *);
230
231         /* reset device ... can sleep */
232         int     (*reset)(struct usbnet *);
233
234         /* see if peer is connected ... can sleep */
235         int     (*check_connect)(struct usbnet *);
236
237         /* fixup rx packet (strip framing) */
238         int     (*rx_fixup)(struct usbnet *dev, struct sk_buff *skb);
239
240         /* fixup tx packet (add framing) */
241         struct sk_buff  *(*tx_fixup)(struct usbnet *dev,
242                                 struct sk_buff *skb, int flags);
243
244         // FIXME -- also an interrupt mechanism
245         // useful for at least PL2301/2302 and GL620USB-A
246         // and CDC use them to report 'is it connected' changes
247
248         /* for new devices, use the descriptor-reading code instead */
249         int             in;             /* rx endpoint */
250         int             out;            /* tx endpoint */
251
252         unsigned long   data;           /* Misc driver specific data */
253 };
254
255 // we record the state for each of our queued skbs
256 enum skb_state {
257         illegal = 0,
258         tx_start, tx_done,
259         rx_start, rx_done, rx_cleanup
260 };
261
262 struct skb_data {       // skb->cb is one of these
263         struct urb              *urb;
264         struct usbnet           *dev;
265         enum skb_state          state;
266         size_t                  length;
267 };
268
269 static const char driver_name [] = "usbnet";
270
271 /* use ethtool to change the level for any given device */
272 static int msg_level = 1;
273 module_param (msg_level, int, 0);
274 MODULE_PARM_DESC (msg_level, "Initial message level (default = 1)");
275
276
277 #define RUN_CONTEXT (in_irq () ? "in_irq" \
278                         : (in_interrupt () ? "in_interrupt" : "can sleep"))
279
280 #ifdef DEBUG
281 #define devdbg(usbnet, fmt, arg...) \
282         printk(KERN_DEBUG "%s: " fmt "\n" , (usbnet)->net->name , ## arg)
283 #else
284 #define devdbg(usbnet, fmt, arg...) do {} while(0)
285 #endif
286
287 #define deverr(usbnet, fmt, arg...) \
288         printk(KERN_ERR "%s: " fmt "\n" , (usbnet)->net->name , ## arg)
289 #define devwarn(usbnet, fmt, arg...) \
290         printk(KERN_WARNING "%s: " fmt "\n" , (usbnet)->net->name , ## arg)
291
292 #define devinfo(usbnet, fmt, arg...) \
293         do { if ((usbnet)->msg_level >= 1) \
294         printk(KERN_INFO "%s: " fmt "\n" , (usbnet)->net->name , ## arg); \
295         } while (0)
296
297 /*-------------------------------------------------------------------------*/
298
299 static void usbnet_get_drvinfo (struct net_device *, struct ethtool_drvinfo *);
300 static u32 usbnet_get_link (struct net_device *);
301 static u32 usbnet_get_msglevel (struct net_device *);
302 static void usbnet_set_msglevel (struct net_device *, u32);
303
304 /* mostly for PDA style devices, which are always connected if present */
305 static int always_connected (struct usbnet *dev)
306 {
307         return 0;
308 }
309
310 /* handles CDC Ethernet and many other network "bulk data" interfaces */
311 static int
312 get_endpoints (struct usbnet *dev, struct usb_interface *intf)
313 {
314         int                             tmp;
315         struct usb_host_interface       *alt;
316         struct usb_host_endpoint        *in, *out;
317
318         for (tmp = 0; tmp < intf->num_altsetting; tmp++) {
319                 unsigned        ep;
320
321                 in = out = NULL;
322                 alt = intf->altsetting + tmp;
323
324                 /* take the first altsetting with in-bulk + out-bulk;
325                  * ignore other endpoints and altsetttings.
326                  */
327                 for (ep = 0; ep < alt->desc.bNumEndpoints; ep++) {
328                         struct usb_host_endpoint        *e;
329
330                         e = alt->endpoint + ep;
331                         if (e->desc.bmAttributes != USB_ENDPOINT_XFER_BULK)
332                                 continue;
333                         if (e->desc.bEndpointAddress & USB_DIR_IN) {
334                                 if (!in)
335                                         in = e;
336                         } else {
337                                 if (!out)
338                                         out = e;
339                         }
340                         if (in && out)
341                                 goto found;
342                 }
343         }
344         return -EINVAL;
345
346 found:
347         if (alt->desc.bAlternateSetting != 0
348                         || !(dev->driver_info->flags & FLAG_NO_SETINT)) {
349                 tmp = usb_set_interface (dev->udev, alt->desc.bInterfaceNumber,
350                                 alt->desc.bAlternateSetting);
351                 if (tmp < 0)
352                         return tmp;
353         }
354         
355         dev->in = usb_rcvbulkpipe (dev->udev,
356                         in->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
357         dev->out = usb_sndbulkpipe (dev->udev,
358                         out->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
359         return 0;
360 }
361
362 static void skb_return (struct usbnet *dev, struct sk_buff *skb)
363 {
364         int     status;
365
366         skb->dev = dev->net;
367         skb->protocol = eth_type_trans (skb, dev->net);
368         dev->stats.rx_packets++;
369         dev->stats.rx_bytes += skb->len;
370
371 #ifdef  VERBOSE
372         devdbg (dev, "< rx, len %d, type 0x%x",
373                 skb->len + sizeof (struct ethhdr), skb->protocol);
374 #endif
375         memset (skb->cb, 0, sizeof (struct skb_data));
376         status = netif_rx (skb);
377         if (status != NET_RX_SUCCESS)
378                 devdbg (dev, "netif_rx status %d", status);
379 }
380
381 \f
382 #ifdef  CONFIG_USB_ALI_M5632
383 #define HAVE_HARDWARE
384
385 /*-------------------------------------------------------------------------
386  *
387  * ALi M5632 driver ... does high speed
388  *
389  *-------------------------------------------------------------------------*/
390
391 static const struct driver_info ali_m5632_info = {
392         .description =  "ALi M5632",
393 };
394
395
396 #endif
397
398 \f
399 #ifdef  CONFIG_USB_AN2720
400 #define HAVE_HARDWARE
401
402 /*-------------------------------------------------------------------------
403  *
404  * AnchorChips 2720 driver ... http://www.cypress.com
405  *
406  * This doesn't seem to have a way to detect whether the peer is
407  * connected, or need any reset handshaking.  It's got pretty big
408  * internal buffers (handles most of a frame's worth of data).
409  * Chip data sheets don't describe any vendor control messages.
410  *
411  *-------------------------------------------------------------------------*/
412
413 static const struct driver_info an2720_info = {
414         .description =  "AnchorChips/Cypress 2720",
415         // no reset available!
416         // no check_connect available!
417
418         .in = 2, .out = 2,              // direction distinguishes these
419 };
420
421 #endif  /* CONFIG_USB_AN2720 */
422
423 \f
424 #ifdef CONFIG_USB_AX8817X
425 /* ASIX AX8817X based USB 2.0 Ethernet Devices */
426
427 #define HAVE_HARDWARE
428 #define NEED_MII
429
430 #include <linux/crc32.h>
431
432 #define AX_CMD_SET_SW_MII               0x06
433 #define AX_CMD_READ_MII_REG             0x07
434 #define AX_CMD_WRITE_MII_REG            0x08
435 #define AX_CMD_SET_HW_MII               0x0a
436 #define AX_CMD_READ_EEPROM              0x0b
437 #define AX_CMD_WRITE_EEPROM             0x0c
438 #define AX_CMD_WRITE_RX_CTL             0x10
439 #define AX_CMD_READ_IPG012              0x11
440 #define AX_CMD_WRITE_IPG0               0x12
441 #define AX_CMD_WRITE_IPG1               0x13
442 #define AX_CMD_WRITE_IPG2               0x14
443 #define AX_CMD_WRITE_MULTI_FILTER       0x16
444 #define AX_CMD_READ_NODE_ID             0x17
445 #define AX_CMD_READ_PHY_ID              0x19
446 #define AX_CMD_WRITE_MEDIUM_MODE        0x1b
447 #define AX_CMD_READ_MONITOR_MODE        0x1c
448 #define AX_CMD_WRITE_MONITOR_MODE       0x1d
449 #define AX_CMD_WRITE_GPIOS              0x1f
450
451 #define AX_MONITOR_MODE                 0x01
452 #define AX_MONITOR_LINK                 0x02
453 #define AX_MONITOR_MAGIC                0x04
454 #define AX_MONITOR_HSFS                 0x10
455
456 #define AX_MCAST_FILTER_SIZE            8
457 #define AX_MAX_MCAST                    64
458
459 #define AX_INTERRUPT_BUFSIZE            8
460
461 /* This structure cannot exceed sizeof(unsigned long [5]) AKA 20 bytes */
462 struct ax8817x_data {
463         u8 multi_filter[AX_MCAST_FILTER_SIZE];
464         struct urb *int_urb;
465         u8 *int_buf;
466 };
467
468 static int ax8817x_read_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
469                             u16 size, void *data)
470 {
471         return usb_control_msg(
472                 dev->udev,
473                 usb_rcvctrlpipe(dev->udev, 0),
474                 cmd,
475                 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
476                 value,
477                 index,
478                 data,
479                 size,
480                 CONTROL_TIMEOUT_JIFFIES);
481 }
482
483 static int ax8817x_write_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index,
484                              u16 size, void *data)
485 {
486         return usb_control_msg(
487                 dev->udev,
488                 usb_sndctrlpipe(dev->udev, 0),
489                 cmd,
490                 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
491                 value,
492                 index,
493                 data,
494                 size,
495                 CONTROL_TIMEOUT_JIFFIES);
496 }
497
498 static void ax8817x_async_cmd_callback(struct urb *urb, struct pt_regs *regs)
499 {
500         struct usb_ctrlrequest *req = (struct usb_ctrlrequest *)urb->context;
501
502         if (urb->status < 0)
503                 printk(KERN_DEBUG "ax8817x_async_cmd_callback() failed with %d",
504                         urb->status);
505
506         kfree(req);
507         usb_free_urb(urb);
508 }
509
510 static void ax8817x_interrupt_complete(struct urb *urb, struct pt_regs *regs)
511 {
512         struct usbnet *dev = (struct usbnet *)urb->context;
513         struct ax8817x_data *data = (struct ax8817x_data *)&dev->data;
514         int link;
515
516         if (urb->status < 0) {
517                 printk(KERN_DEBUG "ax8817x_interrupt_complete() failed with %d",
518                         urb->status);
519         } else {
520                 if (data->int_buf[5] == 0x90) {
521                         link = data->int_buf[2] & 0x01;
522                         if (netif_carrier_ok(dev->net) != link) {
523                                 if (link)
524                                         netif_carrier_on(dev->net);
525                                 else
526                                         netif_carrier_off(dev->net);
527                                 devdbg(dev, "ax8817x - Link Status is: %d", link);
528                         }
529                 }
530                 usb_submit_urb(data->int_urb, GFP_ATOMIC);
531         }
532 }
533
534 static void ax8817x_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, u16 index,
535                                     u16 size, void *data)
536 {
537         struct usb_ctrlrequest *req;
538         int status;
539         struct urb *urb;
540
541         if ((urb = usb_alloc_urb(0, GFP_ATOMIC)) == NULL) {
542                 devdbg(dev, "Error allocating URB in write_cmd_async!");
543                 return;
544         }
545
546         if ((req = kmalloc(sizeof(struct usb_ctrlrequest), GFP_ATOMIC)) == NULL) {
547                 deverr(dev, "Failed to allocate memory for control request");
548                 usb_free_urb(urb);
549                 return;
550         }
551
552         req->bRequestType = USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE;
553         req->bRequest = cmd;
554         req->wValue = cpu_to_le16(value);
555         req->wIndex = cpu_to_le16(index); 
556         req->wLength = cpu_to_le16(size);
557
558         usb_fill_control_urb(urb, dev->udev,
559                              usb_sndctrlpipe(dev->udev, 0),
560                              (void *)req, data, size,
561                              ax8817x_async_cmd_callback, req);
562
563         if((status = usb_submit_urb(urb, GFP_ATOMIC)) < 0) {
564                 deverr(dev, "Error submitting the control message: status=%d", status);
565                 kfree(req);
566                 usb_free_urb(urb);
567         }
568 }
569
570 static void ax8817x_set_multicast(struct net_device *net)
571 {
572         struct usbnet *dev = netdev_priv(net);
573         struct ax8817x_data *data = (struct ax8817x_data *)&dev->data;
574         u8 rx_ctl = 0x8c;
575
576         if (net->flags & IFF_PROMISC) {
577                 rx_ctl |= 0x01;
578         } else if (net->flags & IFF_ALLMULTI
579                    || net->mc_count > AX_MAX_MCAST) {
580                 rx_ctl |= 0x02;
581         } else if (net->mc_count == 0) {
582                 /* just broadcast and directed */
583         } else {
584                 /* We use the 20 byte dev->data
585                  * for our 8 byte filter buffer
586                  * to avoid allocating memory that
587                  * is tricky to free later */
588                 struct dev_mc_list *mc_list = net->mc_list;
589                 u32 crc_bits;
590                 int i;
591
592                 memset(data->multi_filter, 0, AX_MCAST_FILTER_SIZE);
593
594                 /* Build the multicast hash filter. */
595                 for (i = 0; i < net->mc_count; i++) {
596                         crc_bits =
597                             ether_crc(ETH_ALEN,
598                                       mc_list->dmi_addr) >> 26;
599                         data->multi_filter[crc_bits >> 3] |=
600                             1 << (crc_bits & 7);
601                         mc_list = mc_list->next;
602                 }
603
604                 ax8817x_write_cmd_async(dev, AX_CMD_WRITE_MULTI_FILTER, 0, 0,
605                                    AX_MCAST_FILTER_SIZE, data->multi_filter);
606
607                 rx_ctl |= 0x10;
608         }
609
610         ax8817x_write_cmd_async(dev, AX_CMD_WRITE_RX_CTL, rx_ctl, 0, 0, NULL);
611 }
612
613 static int ax8817x_mdio_read(struct net_device *netdev, int phy_id, int loc)
614 {
615         struct usbnet *dev = netdev_priv(netdev);
616         u16 res;
617         u8 buf[1];
618
619         ax8817x_write_cmd(dev, AX_CMD_SET_SW_MII, 0, 0, 0, &buf);
620         ax8817x_read_cmd(dev, AX_CMD_READ_MII_REG, phy_id, (__u16)loc, 2, (u16 *)&res);
621         ax8817x_write_cmd(dev, AX_CMD_SET_HW_MII, 0, 0, 0, &buf);
622
623         return res & 0xffff;
624 }
625
626 static void ax8817x_mdio_write(struct net_device *netdev, int phy_id, int loc, int val)
627 {
628         struct usbnet *dev = netdev_priv(netdev);
629         u16 res = val;
630         u8 buf[1];
631
632         ax8817x_write_cmd(dev, AX_CMD_SET_SW_MII, 0, 0, 0, &buf);
633         ax8817x_write_cmd(dev, AX_CMD_WRITE_MII_REG, phy_id, (__u16)loc, 2, (u16 *)&res);
634         ax8817x_write_cmd(dev, AX_CMD_SET_HW_MII, 0, 0, 0, &buf);
635 }
636
637 static void ax8817x_get_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
638 {
639         struct usbnet *dev = netdev_priv(net);
640         u8 opt;
641
642         if (ax8817x_read_cmd(dev, AX_CMD_READ_MONITOR_MODE, 0, 0, 1, &opt) < 0) {
643                 wolinfo->supported = 0;
644                 wolinfo->wolopts = 0;
645                 return;
646         }
647         wolinfo->supported = WAKE_PHY | WAKE_MAGIC;
648         wolinfo->wolopts = 0;
649         if (opt & AX_MONITOR_MODE) {
650                 if (opt & AX_MONITOR_LINK)
651                         wolinfo->wolopts |= WAKE_PHY;
652                 if (opt & AX_MONITOR_MAGIC)
653                         wolinfo->wolopts |= WAKE_MAGIC;
654         }
655 }
656
657 static int ax8817x_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
658 {
659         struct usbnet *dev = netdev_priv(net);
660         u8 opt = 0;
661         u8 buf[1];
662
663         if (wolinfo->wolopts & WAKE_PHY)
664                 opt |= AX_MONITOR_LINK;
665         if (wolinfo->wolopts & WAKE_MAGIC)
666                 opt |= AX_MONITOR_MAGIC;
667         if (opt != 0)
668                 opt |= AX_MONITOR_MODE;
669
670         if (ax8817x_write_cmd(dev, AX_CMD_WRITE_MONITOR_MODE,
671                               opt, 0, 0, &buf) < 0)
672                 return -EINVAL;
673
674         return 0;
675 }
676
677 static int ax8817x_get_eeprom(struct net_device *net,
678                               struct ethtool_eeprom *eeprom, u8 *data)
679 {
680         struct usbnet *dev = netdev_priv(net);
681         u16 *ebuf = (u16 *)data;
682         int i;
683
684         /* Crude hack to ensure that we don't overwrite memory
685          * if an odd length is supplied
686          */
687         if (eeprom->len % 2)
688                 return -EINVAL;
689
690         /* ax8817x returns 2 bytes from eeprom on read */
691         for (i=0; i < eeprom->len / 2; i++) {
692                 if (ax8817x_read_cmd(dev, AX_CMD_READ_EEPROM, 
693                         eeprom->offset + i, 0, 2, &ebuf[i]) < 0)
694                         return -EINVAL;
695         }
696         return i * 2;
697 }
698
699 static void ax8817x_get_drvinfo (struct net_device *net,
700                                  struct ethtool_drvinfo *info)
701 {
702         /* Inherit standard device info */
703         usbnet_get_drvinfo(net, info);
704         info->eedump_len = 0x3e;
705 }
706
707 static int ax8817x_get_settings(struct net_device *net, struct ethtool_cmd *cmd)
708 {
709         struct usbnet *dev = netdev_priv(net);
710
711         return mii_ethtool_gset(&dev->mii,cmd);
712 }
713
714 static int ax8817x_set_settings(struct net_device *net, struct ethtool_cmd *cmd)
715 {
716         struct usbnet *dev = netdev_priv(net);
717
718         return mii_ethtool_sset(&dev->mii,cmd);
719 }
720
721 /* We need to override some ethtool_ops so we require our
722    own structure so we don't interfere with other usbnet
723    devices that may be connected at the same time. */
724 static struct ethtool_ops ax8817x_ethtool_ops = {
725         .get_drvinfo            = ax8817x_get_drvinfo,
726         .get_link               = ethtool_op_get_link,
727         .get_msglevel           = usbnet_get_msglevel,
728         .set_msglevel           = usbnet_set_msglevel,
729         .get_wol                = ax8817x_get_wol,
730         .set_wol                = ax8817x_set_wol,
731         .get_eeprom             = ax8817x_get_eeprom,
732         .get_settings           = ax8817x_get_settings,
733         .set_settings           = ax8817x_set_settings,
734 };
735
736 static int ax8817x_bind(struct usbnet *dev, struct usb_interface *intf)
737 {
738         int ret;
739         u8 buf[6];
740         int i;
741         unsigned long gpio_bits = dev->driver_info->data;
742         struct ax8817x_data *data = (struct ax8817x_data *)dev->data;
743
744         dev->in = usb_rcvbulkpipe(dev->udev, 3);
745         dev->out = usb_sndbulkpipe(dev->udev, 2);
746
747         // allocate irq urb
748         if ((data->int_urb = usb_alloc_urb (0, GFP_KERNEL)) == NULL) {
749                 dbg ("%s: cannot allocate interrupt URB",
750                         dev->net->name);
751                 return -ENOMEM;
752         }
753         
754         if ((data->int_buf = kmalloc(AX_INTERRUPT_BUFSIZE, GFP_KERNEL)) == NULL) {
755                 dbg ("%s: cannot allocate memory for interrupt buffer",
756                         dev->net->name);
757                 usb_free_urb(data->int_urb);
758                 return -ENOMEM;
759         }
760         memset(data->int_buf, 0, AX_INTERRUPT_BUFSIZE);
761
762         usb_fill_int_urb (data->int_urb, dev->udev,
763                 usb_rcvintpipe (dev->udev, 1),
764                 data->int_buf, AX_INTERRUPT_BUFSIZE,
765                 ax8817x_interrupt_complete, dev,
766                 dev->udev->speed == USB_SPEED_HIGH ? 8 : 100);
767
768         /* Toggle the GPIOs in a manufacturer/model specific way */
769         for (i = 2; i >= 0; i--) {
770                 if ((ret = ax8817x_write_cmd(dev, AX_CMD_WRITE_GPIOS,
771                                         (gpio_bits >> (i * 8)) & 0xff, 0, 0,
772                                         buf)) < 0)
773                         return ret;
774                 msleep(5);
775         }
776
777         if ((ret = ax8817x_write_cmd(dev, AX_CMD_WRITE_RX_CTL, 0x80, 0, 0, buf)) < 0) {
778                 dbg("send AX_CMD_WRITE_RX_CTL failed: %d", ret);
779                 return ret;
780         }
781
782         /* Get the MAC address */
783         memset(buf, 0, ETH_ALEN);
784         if ((ret = ax8817x_read_cmd(dev, AX_CMD_READ_NODE_ID, 0, 0, 6, buf)) < 0) {
785                 dbg("read AX_CMD_READ_NODE_ID failed: %d", ret);
786                 return ret;
787         }
788         memcpy(dev->net->dev_addr, buf, ETH_ALEN);
789
790         /* Get the PHY id */
791         if ((ret = ax8817x_read_cmd(dev, AX_CMD_READ_PHY_ID, 0, 0, 2, buf)) < 0) {
792                 dbg("error on read AX_CMD_READ_PHY_ID: %02x", ret);
793                 return ret;
794         } else if (ret < 2) {
795                 /* this should always return 2 bytes */
796                 dbg("AX_CMD_READ_PHY_ID returned less than 2 bytes: ret=%02x", ret);
797                 return -EIO;
798         }
799
800         /* Initialize MII structure */
801         dev->mii.dev = dev->net;
802         dev->mii.mdio_read = ax8817x_mdio_read;
803         dev->mii.mdio_write = ax8817x_mdio_write;
804         dev->mii.phy_id_mask = 0x3f;
805         dev->mii.reg_num_mask = 0x1f;
806         dev->mii.phy_id = buf[1];
807
808         dev->net->set_multicast_list = ax8817x_set_multicast;
809         dev->net->ethtool_ops = &ax8817x_ethtool_ops;
810
811         ax8817x_mdio_write(dev->net, dev->mii.phy_id, MII_BMCR,
812                         cpu_to_le16(BMCR_RESET));
813         ax8817x_mdio_write(dev->net, dev->mii.phy_id, MII_ADVERTISE,
814                         cpu_to_le16(ADVERTISE_ALL | ADVERTISE_CSMA | 0x0400));
815         mii_nway_restart(&dev->mii);
816
817         if((ret = usb_submit_urb(data->int_urb, GFP_KERNEL)) < 0) {
818                 dbg("Failed to submit interrupt URB: %02x", ret);
819                 usb_free_urb(data->int_urb);
820                 return ret;
821         }
822
823         return 0;
824 }
825
826 static void ax8817x_unbind(struct usbnet *dev, struct usb_interface *intf)
827 {
828         struct ax8817x_data *data = (struct ax8817x_data *)dev->data;
829
830         usb_kill_urb(data->int_urb);
831         usb_free_urb(data->int_urb);
832         kfree(data->int_buf);
833 }
834
835 static const struct driver_info ax8817x_info = {
836         .description = "ASIX AX8817x USB 2.0 Ethernet",
837         .bind = ax8817x_bind,
838         .unbind = ax8817x_unbind,
839         .flags =  FLAG_ETHER,
840         .data = 0x00130103,
841 };
842
843 static const struct driver_info dlink_dub_e100_info = {
844         .description = "DLink DUB-E100 USB Ethernet",
845         .bind = ax8817x_bind,
846         .unbind = ax8817x_unbind,
847         .flags =  FLAG_ETHER,
848         .data = 0x009f9d9f,
849 };
850
851 static const struct driver_info netgear_fa120_info = {
852         .description = "Netgear FA-120 USB Ethernet",
853         .bind = ax8817x_bind,
854         .unbind = ax8817x_unbind,
855         .flags =  FLAG_ETHER,
856         .data = 0x00130103,
857 };
858
859 static const struct driver_info hawking_uf200_info = {
860         .description = "Hawking UF200 USB Ethernet",
861         .bind = ax8817x_bind,
862         .unbind = ax8817x_unbind,
863         .flags =  FLAG_ETHER,
864         .data = 0x001f1d1f,
865 };
866
867 #endif /* CONFIG_USB_AX8817X */
868
869
870 \f
871 #ifdef  CONFIG_USB_BELKIN
872 #define HAVE_HARDWARE
873
874 /*-------------------------------------------------------------------------
875  *
876  * Belkin F5U104 ... two NetChip 2280 devices + Atmel microcontroller
877  *
878  * ... also two eTEK designs, including one sold as "Advance USBNET"
879  *
880  *-------------------------------------------------------------------------*/
881
882 static const struct driver_info belkin_info = {
883         .description =  "Belkin, eTEK, or compatible",
884 };
885
886 #endif  /* CONFIG_USB_BELKIN */
887
888
889 \f
890 /*-------------------------------------------------------------------------
891  *
892  * Communications Device Class declarations.
893  * Used by CDC Ethernet, and some CDC variants
894  *
895  *-------------------------------------------------------------------------*/
896
897 #ifdef  CONFIG_USB_CDCETHER
898 #define NEED_GENERIC_CDC
899 #endif
900
901 #ifdef  CONFIG_USB_ZAURUS
902 /* Ethernet variant uses funky framing, broken ethernet addressing */
903 #define NEED_GENERIC_CDC
904 #endif
905
906 #ifdef  CONFIG_USB_RNDIS
907 /* ACM variant uses even funkier framing, complex control RPC scheme */
908 #define NEED_GENERIC_CDC
909 #endif
910
911
912 #ifdef  NEED_GENERIC_CDC
913
914 /* "Header Functional Descriptor" from CDC spec  5.2.3.1 */
915 struct header_desc {
916         u8      bLength;
917         u8      bDescriptorType;
918         u8      bDescriptorSubType;
919
920         u16     bcdCDC;
921 } __attribute__ ((packed));
922
923 /* "Union Functional Descriptor" from CDC spec 5.2.3.X */
924 struct union_desc {
925         u8      bLength;
926         u8      bDescriptorType;
927         u8      bDescriptorSubType;
928
929         u8      bMasterInterface0;
930         u8      bSlaveInterface0;
931         /* ... and there could be other slave interfaces */
932 } __attribute__ ((packed));
933
934 /* "Ethernet Networking Functional Descriptor" from CDC spec 5.2.3.16 */
935 struct ether_desc {
936         u8      bLength;
937         u8      bDescriptorType;
938         u8      bDescriptorSubType;
939
940         u8      iMACAddress;
941         u32     bmEthernetStatistics;
942         __le16  wMaxSegmentSize;
943         __le16  wNumberMCFilters;
944         u8      bNumberPowerFilters;
945 } __attribute__ ((packed));
946
947 struct cdc_state {
948         struct header_desc      *header;
949         struct union_desc       *u;
950         struct ether_desc       *ether;
951         struct usb_interface    *control;
952         struct usb_interface    *data;
953 };
954
955 static struct usb_driver usbnet_driver;
956
957 /*
958  * probes control interface, claims data interface, collects the bulk
959  * endpoints, activates data interface (if needed), maybe sets MTU.
960  * all pure cdc, except for certain firmware workarounds.
961  */
962 static int generic_cdc_bind (struct usbnet *dev, struct usb_interface *intf)
963 {
964         u8                              *buf = intf->cur_altsetting->extra;
965         int                             len = intf->cur_altsetting->extralen;
966         struct usb_interface_descriptor *d;
967         struct cdc_state                *info = (void *) &dev->data;
968         int                             status;
969         int                             rndis;
970
971         if (sizeof dev->data < sizeof *info)
972                 return -EDOM;
973
974         /* expect strict spec conformance for the descriptors, but
975          * cope with firmware which stores them in the wrong place
976          */
977         if (len == 0 && dev->udev->actconfig->extralen) {
978                 /* Motorola SB4100 (and others: Brad Hards says it's
979                  * from a Broadcom design) put CDC descriptors here
980                  */
981                 buf = dev->udev->actconfig->extra;
982                 len = dev->udev->actconfig->extralen;
983                 if (len)
984                         dev_dbg (&intf->dev,
985                                 "CDC descriptors on config\n");
986         }
987
988         /* this assumes that if there's a non-RNDIS vendor variant
989          * of cdc-acm, it'll fail RNDIS requests cleanly.
990          */
991         rndis = (intf->cur_altsetting->desc.bInterfaceProtocol == 0xff);
992
993         memset (info, 0, sizeof *info);
994         info->control = intf;
995         while (len > 3) {
996                 if (buf [1] != USB_DT_CS_INTERFACE)
997                         goto next_desc;
998
999                 /* use bDescriptorSubType to identify the CDC descriptors.
1000                  * We expect devices with CDC header and union descriptors.
1001                  * For CDC Ethernet we need the ethernet descriptor.
1002                  * For RNDIS, ignore two (pointless) CDC modem descriptors
1003                  * in favor of a complicated OID-based RPC scheme doing what
1004                  * CDC Ethernet achieves with a simple descriptor.
1005                  */
1006                 switch (buf [2]) {
1007                 case 0x00:              /* Header, mostly useless */
1008                         if (info->header) {
1009                                 dev_dbg (&intf->dev, "extra CDC header\n");
1010                                 goto bad_desc;
1011                         }
1012                         info->header = (void *) buf;
1013                         if (info->header->bLength != sizeof *info->header) {
1014                                 dev_dbg (&intf->dev, "CDC header len %u\n",
1015                                         info->header->bLength);
1016                                 goto bad_desc;
1017                         }
1018                         break;
1019                 case 0x06:              /* Union (groups interfaces) */
1020                         if (info->u) {
1021                                 dev_dbg (&intf->dev, "extra CDC union\n");
1022                                 goto bad_desc;
1023                         }
1024                         info->u = (void *) buf;
1025                         if (info->u->bLength != sizeof *info->u) {
1026                                 dev_dbg (&intf->dev, "CDC union len %u\n",
1027                                         info->u->bLength);
1028                                 goto bad_desc;
1029                         }
1030
1031                         /* we need a master/control interface (what we're
1032                          * probed with) and a slave/data interface; union
1033                          * descriptors sort this all out.
1034                          */
1035                         info->control = usb_ifnum_to_if(dev->udev,
1036                                                 info->u->bMasterInterface0);
1037                         info->data = usb_ifnum_to_if(dev->udev,
1038                                                 info->u->bSlaveInterface0);
1039                         if (!info->control || !info->data) {
1040                                 dev_dbg (&intf->dev,
1041                                         "master #%u/%p slave #%u/%p\n",
1042                                         info->u->bMasterInterface0,
1043                                         info->control,
1044                                         info->u->bSlaveInterface0,
1045                                         info->data);
1046                                 goto bad_desc;
1047                         }
1048                         if (info->control != intf) {
1049                                 dev_dbg (&intf->dev, "bogus CDC Union\n");
1050                                 /* Ambit USB Cable Modem (and maybe others)
1051                                  * interchanges master and slave interface.
1052                                  */
1053                                 if (info->data == intf) {
1054                                         info->data = info->control;
1055                                         info->control = intf;
1056                                 } else
1057                                         goto bad_desc;
1058                         }
1059
1060                         /* a data interface altsetting does the real i/o */
1061                         d = &info->data->cur_altsetting->desc;
1062                         if (d->bInterfaceClass != USB_CLASS_CDC_DATA) {
1063                                 dev_dbg (&intf->dev, "slave class %u\n",
1064                                         d->bInterfaceClass);
1065                                 goto bad_desc;
1066                         }
1067                         break;
1068                 case 0x0F:              /* Ethernet Networking */
1069                         if (info->ether) {
1070                                 dev_dbg (&intf->dev, "extra CDC ether\n");
1071                                 goto bad_desc;
1072                         }
1073                         info->ether = (void *) buf;
1074                         if (info->ether->bLength != sizeof *info->ether) {
1075                                 dev_dbg (&intf->dev, "CDC ether len %u\n",
1076                                         info->u->bLength);
1077                                 goto bad_desc;
1078                         }
1079                         dev->net->mtu = le16_to_cpup (
1080                                                 &info->ether->wMaxSegmentSize)
1081                                         - ETH_HLEN;
1082                         /* because of Zaurus, we may be ignoring the host
1083                          * side link address we were given.
1084                          */
1085                         break;
1086                 }
1087 next_desc:
1088                 len -= buf [0]; /* bLength */
1089                 buf += buf [0];
1090         }
1091
1092         if (!info->header || !info->u || (!rndis && !info->ether)) {
1093                 dev_dbg (&intf->dev, "missing cdc %s%s%sdescriptor\n",
1094                         info->header ? "" : "header ",
1095                         info->u ? "" : "union ",
1096                         info->ether ? "" : "ether ");
1097                 goto bad_desc;
1098         }
1099
1100         /* claim data interface and set it up ... with side effects.
1101          * network traffic can't flow until an altsetting is enabled.
1102          */
1103         status = usb_driver_claim_interface (&usbnet_driver, info->data, dev);
1104         if (status < 0)
1105                 return status;
1106         status = get_endpoints (dev, info->data);
1107         if (status < 0) {
1108                 /* ensure immediate exit from usbnet_disconnect */
1109                 usb_set_intfdata(info->data, NULL);
1110                 usb_driver_release_interface (&usbnet_driver, info->data);
1111                 return status;
1112         }
1113         return 0;
1114
1115 bad_desc:
1116         dev_info (&dev->udev->dev, "bad CDC descriptors\n");
1117         return -ENODEV;
1118 }
1119
1120 static void cdc_unbind (struct usbnet *dev, struct usb_interface *intf)
1121 {
1122         struct cdc_state                *info = (void *) &dev->data;
1123
1124         /* disconnect master --> disconnect slave */
1125         if (intf == info->control && info->data) {
1126                 /* ensure immediate exit from usbnet_disconnect */
1127                 usb_set_intfdata(info->data, NULL);
1128                 usb_driver_release_interface (&usbnet_driver, info->data);
1129                 info->data = NULL;
1130         }
1131
1132         /* and vice versa (just in case) */
1133         else if (intf == info->data && info->control) {
1134                 /* ensure immediate exit from usbnet_disconnect */
1135                 usb_set_intfdata(info->control, NULL);
1136                 usb_driver_release_interface (&usbnet_driver, info->control);
1137                 info->control = NULL;
1138         }
1139 }
1140
1141 #endif  /* NEED_GENERIC_CDC */
1142
1143 \f
1144 #ifdef  CONFIG_USB_CDCETHER
1145 #define HAVE_HARDWARE
1146
1147 /*-------------------------------------------------------------------------
1148  *
1149  * Communications Device Class, Ethernet Control model
1150  * 
1151  * Takes two interfaces.  The DATA interface is inactive till an altsetting
1152  * is selected.  Configuration data includes class descriptors.
1153  *
1154  * This should interop with whatever the 2.4 "CDCEther.c" driver
1155  * (by Brad Hards) talked with.
1156  *
1157  *-------------------------------------------------------------------------*/
1158
1159 #include <linux/ctype.h>
1160
1161 static u8 nibble (unsigned char c)
1162 {
1163         if (likely (isdigit (c)))
1164                 return c - '0';
1165         c = toupper (c);
1166         if (likely (isxdigit (c)))
1167                 return 10 + c - 'A';
1168         return 0;
1169 }
1170
1171 static inline int
1172 get_ethernet_addr (struct usbnet *dev, struct ether_desc *e)
1173 {
1174         int             tmp, i;
1175         unsigned char   buf [13];
1176
1177         tmp = usb_string (dev->udev, e->iMACAddress, buf, sizeof buf);
1178         if (tmp != 12) {
1179                 dev_dbg (&dev->udev->dev,
1180                         "bad MAC string %d fetch, %d\n", e->iMACAddress, tmp);
1181                 if (tmp >= 0)
1182                         tmp = -EINVAL;
1183                 return tmp;
1184         }
1185         for (i = tmp = 0; i < 6; i++, tmp += 2)
1186                 dev->net->dev_addr [i] =
1187                          (nibble (buf [tmp]) << 4) + nibble (buf [tmp + 1]);
1188         return 0;
1189 }
1190
1191 static int cdc_bind (struct usbnet *dev, struct usb_interface *intf)
1192 {
1193         int                             status;
1194         struct cdc_state                *info = (void *) &dev->data;
1195
1196         status = generic_cdc_bind (dev, intf);
1197         if (status < 0)
1198                 return status;
1199
1200         status = get_ethernet_addr (dev, info->ether);
1201         if (status < 0) {
1202                 usb_set_intfdata(info->data, NULL);
1203                 usb_driver_release_interface (&usbnet_driver, info->data);
1204                 return status;
1205         }
1206
1207         /* FIXME cdc-ether has some multicast code too, though it complains
1208          * in routine cases.  info->ether describes the multicast support.
1209          */
1210         return 0;
1211 }
1212
1213 static const struct driver_info cdc_info = {
1214         .description =  "CDC Ethernet Device",
1215         .flags =        FLAG_ETHER,
1216         // .check_connect = cdc_check_connect,
1217         .bind =         cdc_bind,
1218         .unbind =       cdc_unbind,
1219 };
1220
1221 #endif  /* CONFIG_USB_CDCETHER */
1222
1223
1224 \f
1225 #ifdef  CONFIG_USB_EPSON2888
1226 #define HAVE_HARDWARE
1227
1228 /*-------------------------------------------------------------------------
1229  *
1230  * EPSON USB clients
1231  *
1232  * This is the same idea as Linux PDAs (below) except the firmware in the
1233  * device might not be Tux-powered.  Epson provides reference firmware that
1234  * implements this interface.  Product developers can reuse or modify that
1235  * code, such as by using their own product and vendor codes.
1236  *
1237  * Support was from Juro Bystricky <bystricky.juro@erd.epson.com>
1238  *
1239  *-------------------------------------------------------------------------*/
1240
1241 static const struct driver_info epson2888_info = {
1242         .description =  "Epson USB Device",
1243         .check_connect = always_connected,
1244
1245         .in = 4, .out = 3,
1246 };
1247
1248 #endif  /* CONFIG_USB_EPSON2888 */
1249
1250 \f
1251 #ifdef CONFIG_USB_GENESYS
1252 #define HAVE_HARDWARE
1253
1254 /*-------------------------------------------------------------------------
1255  *
1256  * GeneSys GL620USB-A (www.genesyslogic.com.tw)
1257  *
1258  * ... should partially interop with the Win32 driver for this hardware
1259  * The GeneSys docs imply there's some NDIS issue motivating this framing.
1260  *
1261  * Some info from GeneSys:
1262  *  - GL620USB-A is full duplex; GL620USB is only half duplex for bulk.
1263  *    (Some cables, like the BAFO-100c, use the half duplex version.)
1264  *  - For the full duplex model, the low bit of the version code says
1265  *    which side is which ("left/right").
1266  *  - For the half duplex type, a control/interrupt handshake settles
1267  *    the transfer direction.  (That's disabled here, partially coded.)
1268  *    A control URB would block until other side writes an interrupt.
1269  *
1270  * Original code from Jiun-Jie Huang <huangjj@genesyslogic.com.tw>
1271  * and merged into "usbnet" by Stanislav Brabec <utx@penguin.cz>.
1272  *
1273  *-------------------------------------------------------------------------*/
1274
1275 // control msg write command
1276 #define GENELINK_CONNECT_WRITE                  0xF0
1277 // interrupt pipe index
1278 #define GENELINK_INTERRUPT_PIPE                 0x03
1279 // interrupt read buffer size
1280 #define INTERRUPT_BUFSIZE                       0x08
1281 // interrupt pipe interval value
1282 #define GENELINK_INTERRUPT_INTERVAL             0x10
1283 // max transmit packet number per transmit
1284 #define GL_MAX_TRANSMIT_PACKETS                 32
1285 // max packet length
1286 #define GL_MAX_PACKET_LEN                       1514
1287 // max receive buffer size 
1288 #define GL_RCV_BUF_SIZE         \
1289         (((GL_MAX_PACKET_LEN + 4) * GL_MAX_TRANSMIT_PACKETS) + 4)
1290
1291 struct gl_packet {
1292         u32             packet_length;
1293         char            packet_data [1];
1294 };
1295
1296 struct gl_header {
1297         u32                     packet_count;
1298         struct gl_packet        packets;
1299 };
1300
1301 #ifdef  GENELINK_ACK
1302
1303 // FIXME:  this code is incomplete, not debugged; it doesn't
1304 // handle interrupts correctly.  interrupts should be generic
1305 // code like all other device I/O, anyway.
1306
1307 struct gl_priv { 
1308         struct urb      *irq_urb;
1309         char            irq_buf [INTERRUPT_BUFSIZE];
1310 };
1311
1312 static inline int gl_control_write (struct usbnet *dev, u8 request, u16 value)
1313 {
1314         int retval;
1315
1316         retval = usb_control_msg (dev->udev,
1317                       usb_sndctrlpipe (dev->udev, 0),
1318                       request,
1319                       USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
1320                       value, 
1321                       0,                        // index
1322                       0,                        // data buffer
1323                       0,                        // size
1324                       CONTROL_TIMEOUT_JIFFIES);
1325         return retval;
1326 }
1327
1328 static void gl_interrupt_complete (struct urb *urb, struct pt_regs *regs)
1329 {
1330         int status = urb->status;
1331         
1332         switch (status) {
1333         case 0:
1334                 /* success */
1335                 break;
1336         case -ECONNRESET:
1337         case -ENOENT:
1338         case -ESHUTDOWN:
1339                 /* this urb is terminated, clean up */
1340                 dbg("%s - urb shutting down with status: %d",
1341                                 __FUNCTION__, status);
1342                 return;
1343         default:
1344                 dbg("%s - nonzero urb status received: %d",
1345                                 __FUNCTION__, urb->status);
1346         }
1347
1348         status = usb_submit_urb (urb, GFP_ATOMIC);
1349         if (status)
1350                 err ("%s - usb_submit_urb failed with result %d",
1351                      __FUNCTION__, status);
1352 }
1353
1354 static int gl_interrupt_read (struct usbnet *dev)
1355 {
1356         struct gl_priv  *priv = dev->priv_data;
1357         int             retval;
1358
1359         // issue usb interrupt read
1360         if (priv && priv->irq_urb) {
1361                 // submit urb
1362                 if ((retval = usb_submit_urb (priv->irq_urb, GFP_KERNEL)) != 0)
1363                         dbg ("gl_interrupt_read: submit fail - %X...", retval);
1364                 else
1365                         dbg ("gl_interrupt_read: submit success...");
1366         }
1367
1368         return 0;
1369 }
1370
1371 // check whether another side is connected
1372 static int genelink_check_connect (struct usbnet *dev)
1373 {
1374         int                     retval;
1375
1376         dbg ("genelink_check_connect...");
1377
1378         // detect whether another side is connected
1379         if ((retval = gl_control_write (dev, GENELINK_CONNECT_WRITE, 0)) != 0) {
1380                 dbg ("%s: genelink_check_connect write fail - %X",
1381                         dev->net->name, retval);
1382                 return retval;
1383         }
1384
1385         // usb interrupt read to ack another side 
1386         if ((retval = gl_interrupt_read (dev)) != 0) {
1387                 dbg ("%s: genelink_check_connect read fail - %X",
1388                         dev->net->name, retval);
1389                 return retval;
1390         }
1391
1392         dbg ("%s: genelink_check_connect read success", dev->net->name);
1393         return 0;
1394 }
1395
1396 // allocate and initialize the private data for genelink
1397 static int genelink_init (struct usbnet *dev)
1398 {
1399         struct gl_priv *priv;
1400
1401         // allocate the private data structure
1402         if ((priv = kmalloc (sizeof *priv, GFP_KERNEL)) == 0) {
1403                 dbg ("%s: cannot allocate private data per device",
1404                         dev->net->name);
1405                 return -ENOMEM;
1406         }
1407
1408         // allocate irq urb
1409         if ((priv->irq_urb = usb_alloc_urb (0, GFP_KERNEL)) == 0) {
1410                 dbg ("%s: cannot allocate private irq urb per device",
1411                         dev->net->name);
1412                 kfree (priv);
1413                 return -ENOMEM;
1414         }
1415
1416         // fill irq urb
1417         usb_fill_int_urb (priv->irq_urb, dev->udev,
1418                 usb_rcvintpipe (dev->udev, GENELINK_INTERRUPT_PIPE),
1419                 priv->irq_buf, INTERRUPT_BUFSIZE,
1420                 gl_interrupt_complete, 0,
1421                 GENELINK_INTERRUPT_INTERVAL);
1422
1423         // set private data pointer
1424         dev->priv_data = priv;
1425
1426         return 0;
1427 }
1428
1429 // release the private data
1430 static int genelink_free (struct usbnet *dev)
1431 {
1432         struct gl_priv  *priv = dev->priv_data;
1433
1434         if (!priv) 
1435                 return 0;
1436
1437 // FIXME:  can't cancel here; it's synchronous, and
1438 // should have happened earlier in any case (interrupt
1439 // handling needs to be generic)
1440
1441         // cancel irq urb first
1442         usb_kill_urb (priv->irq_urb);
1443
1444         // free irq urb
1445         usb_free_urb (priv->irq_urb);
1446
1447         // free the private data structure
1448         kfree (priv);
1449
1450         return 0;
1451 }
1452
1453 #endif
1454
1455 static int genelink_rx_fixup (struct usbnet *dev, struct sk_buff *skb)
1456 {
1457         struct gl_header        *header;
1458         struct gl_packet        *packet;
1459         struct sk_buff          *gl_skb;
1460         u32                     size;
1461
1462         header = (struct gl_header *) skb->data;
1463
1464         // get the packet count of the received skb
1465         le32_to_cpus (&header->packet_count);
1466         if ((header->packet_count > GL_MAX_TRANSMIT_PACKETS)
1467                         || (header->packet_count < 0)) {
1468                 dbg ("genelink: invalid received packet count %d",
1469                         header->packet_count);
1470                 return 0;
1471         }
1472
1473         // set the current packet pointer to the first packet
1474         packet = &header->packets;
1475
1476         // decrement the length for the packet count size 4 bytes
1477         skb_pull (skb, 4);
1478
1479         while (header->packet_count > 1) {
1480                 // get the packet length
1481                 size = packet->packet_length;
1482
1483                 // this may be a broken packet
1484                 if (size > GL_MAX_PACKET_LEN) {
1485                         dbg ("genelink: invalid rx length %d", size);
1486                         return 0;
1487                 }
1488
1489                 // allocate the skb for the individual packet
1490                 gl_skb = alloc_skb (size, GFP_ATOMIC);
1491                 if (gl_skb) {
1492
1493                         // copy the packet data to the new skb
1494                         memcpy(skb_put(gl_skb, size), packet->packet_data, size);
1495                         skb_return (dev, skb);
1496                 }
1497
1498                 // advance to the next packet
1499                 packet = (struct gl_packet *)
1500                         &packet->packet_data [size];
1501                 header->packet_count--;
1502
1503                 // shift the data pointer to the next gl_packet
1504                 skb_pull (skb, size + 4);
1505         }
1506
1507         // skip the packet length field 4 bytes
1508         skb_pull (skb, 4);
1509
1510         if (skb->len > GL_MAX_PACKET_LEN) {
1511                 dbg ("genelink: invalid rx length %d", skb->len);
1512                 return 0;
1513         }
1514         return 1;
1515 }
1516
1517 static struct sk_buff *
1518 genelink_tx_fixup (struct usbnet *dev, struct sk_buff *skb, int flags)
1519 {
1520         int     padlen;
1521         int     length = skb->len;
1522         int     headroom = skb_headroom (skb);
1523         int     tailroom = skb_tailroom (skb);
1524         u32     *packet_count;
1525         u32     *packet_len;
1526
1527         // FIXME:  magic numbers, bleech
1528         padlen = ((skb->len + (4 + 4*1)) % 64) ? 0 : 1;
1529
1530         if ((!skb_cloned (skb))
1531                         && ((headroom + tailroom) >= (padlen + (4 + 4*1)))) {
1532                 if ((headroom < (4 + 4*1)) || (tailroom < padlen)) {
1533                         skb->data = memmove (skb->head + (4 + 4*1),
1534                                              skb->data, skb->len);
1535                         skb->tail = skb->data + skb->len;
1536                 }
1537         } else {
1538                 struct sk_buff  *skb2;
1539                 skb2 = skb_copy_expand (skb, (4 + 4*1) , padlen, flags);
1540                 dev_kfree_skb_any (skb);
1541                 skb = skb2;
1542                 if (!skb)
1543                         return NULL;
1544         }
1545
1546         // attach the packet count to the header
1547         packet_count = (u32 *) skb_push (skb, (4 + 4*1));
1548         packet_len = packet_count + 1;
1549
1550         // FIXME little endian?
1551         *packet_count = 1;
1552         *packet_len = length;
1553
1554         // add padding byte
1555         if ((skb->len % dev->maxpacket) == 0)
1556                 skb_put (skb, 1);
1557
1558         return skb;
1559 }
1560
1561 static const struct driver_info genelink_info = {
1562         .description =  "Genesys GeneLink",
1563         .flags =        FLAG_FRAMING_GL | FLAG_NO_SETINT,
1564         .rx_fixup =     genelink_rx_fixup,
1565         .tx_fixup =     genelink_tx_fixup,
1566
1567         .in = 1, .out = 2,
1568
1569 #ifdef  GENELINK_ACK
1570         .check_connect =genelink_check_connect,
1571 #endif
1572 };
1573
1574 #endif /* CONFIG_USB_GENESYS */
1575
1576
1577 \f
1578 #ifdef  CONFIG_USB_NET1080
1579 #define HAVE_HARDWARE
1580
1581 /*-------------------------------------------------------------------------
1582  *
1583  * Netchip 1080 driver ... http://www.netchip.com
1584  * Used in LapLink cables
1585  *
1586  *-------------------------------------------------------------------------*/
1587
1588 #define dev_packet_id   data[0]
1589 #define frame_errors    data[1]
1590
1591 /*
1592  * NetChip framing of ethernet packets, supporting additional error
1593  * checks for links that may drop bulk packets from inside messages.
1594  * Odd USB length == always short read for last usb packet.
1595  *      - nc_header
1596  *      - Ethernet header (14 bytes)
1597  *      - payload
1598  *      - (optional padding byte, if needed so length becomes odd)
1599  *      - nc_trailer
1600  *
1601  * This framing is to be avoided for non-NetChip devices.
1602  */
1603
1604 struct nc_header {              // packed:
1605         u16     hdr_len;                // sizeof nc_header (LE, all)
1606         u16     packet_len;             // payload size (including ethhdr)
1607         u16     packet_id;              // detects dropped packets
1608 #define MIN_HEADER      6
1609
1610         // all else is optional, and must start with:
1611         // u16  vendorId;               // from usb-if
1612         // u16  productId;
1613 } __attribute__((__packed__));
1614
1615 #define PAD_BYTE        ((unsigned char)0xAC)
1616
1617 struct nc_trailer {
1618         u16     packet_id;
1619 } __attribute__((__packed__));
1620
1621 // packets may use FLAG_FRAMING_NC and optional pad
1622 #define FRAMED_SIZE(mtu) (sizeof (struct nc_header) \
1623                                 + sizeof (struct ethhdr) \
1624                                 + (mtu) \
1625                                 + 1 \
1626                                 + sizeof (struct nc_trailer))
1627
1628 #define MIN_FRAMED      FRAMED_SIZE(0)
1629
1630
1631 /*
1632  * Zero means no timeout; else, how long a 64 byte bulk packet may be queued
1633  * before the hardware drops it.  If that's done, the driver will need to
1634  * frame network packets to guard against the dropped USB packets.  The win32
1635  * driver sets this for both sides of the link.
1636  */
1637 #define NC_READ_TTL_MS  ((u8)255)       // ms
1638
1639 /*
1640  * We ignore most registers and EEPROM contents.
1641  */
1642 #define REG_USBCTL      ((u8)0x04)
1643 #define REG_TTL         ((u8)0x10)
1644 #define REG_STATUS      ((u8)0x11)
1645
1646 /*
1647  * Vendor specific requests to read/write data
1648  */
1649 #define REQUEST_REGISTER        ((u8)0x10)
1650 #define REQUEST_EEPROM          ((u8)0x11)
1651
1652 static int
1653 nc_vendor_read (struct usbnet *dev, u8 req, u8 regnum, u16 *retval_ptr)
1654 {
1655         int status = usb_control_msg (dev->udev,
1656                 usb_rcvctrlpipe (dev->udev, 0),
1657                 req,
1658                 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1659                 0, regnum,
1660                 retval_ptr, sizeof *retval_ptr,
1661                 CONTROL_TIMEOUT_JIFFIES);
1662         if (status > 0)
1663                 status = 0;
1664         if (!status)
1665                 le16_to_cpus (retval_ptr);
1666         return status;
1667 }
1668
1669 static inline int
1670 nc_register_read (struct usbnet *dev, u8 regnum, u16 *retval_ptr)
1671 {
1672         return nc_vendor_read (dev, REQUEST_REGISTER, regnum, retval_ptr);
1673 }
1674
1675 // no retval ... can become async, usable in_interrupt()
1676 static void
1677 nc_vendor_write (struct usbnet *dev, u8 req, u8 regnum, u16 value)
1678 {
1679         usb_control_msg (dev->udev,
1680                 usb_sndctrlpipe (dev->udev, 0),
1681                 req,
1682                 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1683                 value, regnum,
1684                 NULL, 0,                        // data is in setup packet
1685                 CONTROL_TIMEOUT_JIFFIES);
1686 }
1687
1688 static inline void
1689 nc_register_write (struct usbnet *dev, u8 regnum, u16 value)
1690 {
1691         nc_vendor_write (dev, REQUEST_REGISTER, regnum, value);
1692 }
1693
1694
1695 #if 0
1696 static void nc_dump_registers (struct usbnet *dev)
1697 {
1698         u8      reg;
1699         u16     *vp = kmalloc (sizeof (u16));
1700
1701         if (!vp) {
1702                 dbg ("no memory?");
1703                 return;
1704         }
1705
1706         dbg ("%s registers:", dev->net->name);
1707         for (reg = 0; reg < 0x20; reg++) {
1708                 int retval;
1709
1710                 // reading some registers is trouble
1711                 if (reg >= 0x08 && reg <= 0xf)
1712                         continue;
1713                 if (reg >= 0x12 && reg <= 0x1e)
1714                         continue;
1715
1716                 retval = nc_register_read (dev, reg, vp);
1717                 if (retval < 0)
1718                         dbg ("%s reg [0x%x] ==> error %d",
1719                                 dev->net->name, reg, retval);
1720                 else
1721                         dbg ("%s reg [0x%x] = 0x%x",
1722                                 dev->net->name, reg, *vp);
1723         }
1724         kfree (vp);
1725 }
1726 #endif
1727
1728
1729 /*-------------------------------------------------------------------------*/
1730
1731 /*
1732  * Control register
1733  */
1734
1735 #define USBCTL_WRITABLE_MASK    0x1f0f
1736 // bits 15-13 reserved, r/o
1737 #define USBCTL_ENABLE_LANG      (1 << 12)
1738 #define USBCTL_ENABLE_MFGR      (1 << 11)
1739 #define USBCTL_ENABLE_PROD      (1 << 10)
1740 #define USBCTL_ENABLE_SERIAL    (1 << 9)
1741 #define USBCTL_ENABLE_DEFAULTS  (1 << 8)
1742 // bits 7-4 reserved, r/o
1743 #define USBCTL_FLUSH_OTHER      (1 << 3)
1744 #define USBCTL_FLUSH_THIS       (1 << 2)
1745 #define USBCTL_DISCONN_OTHER    (1 << 1)
1746 #define USBCTL_DISCONN_THIS     (1 << 0)
1747
1748 static inline void nc_dump_usbctl (struct usbnet *dev, u16 usbctl)
1749 {
1750 #ifdef DEBUG
1751         devdbg (dev, "net1080 %s-%s usbctl 0x%x:%s%s%s%s%s;"
1752                         " this%s%s;"
1753                         " other%s%s; r/o 0x%x",
1754                 dev->udev->bus->bus_name, dev->udev->devpath,
1755                 usbctl,
1756                 (usbctl & USBCTL_ENABLE_LANG) ? " lang" : "",
1757                 (usbctl & USBCTL_ENABLE_MFGR) ? " mfgr" : "",
1758                 (usbctl & USBCTL_ENABLE_PROD) ? " prod" : "",
1759                 (usbctl & USBCTL_ENABLE_SERIAL) ? " serial" : "",
1760                 (usbctl & USBCTL_ENABLE_DEFAULTS) ? " defaults" : "",
1761
1762                 (usbctl & USBCTL_FLUSH_OTHER) ? " FLUSH" : "",
1763                 (usbctl & USBCTL_DISCONN_OTHER) ? " DIS" : "",
1764                 (usbctl & USBCTL_FLUSH_THIS) ? " FLUSH" : "",
1765                 (usbctl & USBCTL_DISCONN_THIS) ? " DIS" : "",
1766                 usbctl & ~USBCTL_WRITABLE_MASK
1767                 );
1768 #endif
1769 }
1770
1771 /*-------------------------------------------------------------------------*/
1772
1773 /*
1774  * Status register
1775  */
1776
1777 #define STATUS_PORT_A           (1 << 15)
1778
1779 #define STATUS_CONN_OTHER       (1 << 14)
1780 #define STATUS_SUSPEND_OTHER    (1 << 13)
1781 #define STATUS_MAILBOX_OTHER    (1 << 12)
1782 #define STATUS_PACKETS_OTHER(n) (((n) >> 8) && 0x03)
1783
1784 #define STATUS_CONN_THIS        (1 << 6)
1785 #define STATUS_SUSPEND_THIS     (1 << 5)
1786 #define STATUS_MAILBOX_THIS     (1 << 4)
1787 #define STATUS_PACKETS_THIS(n)  (((n) >> 0) && 0x03)
1788
1789 #define STATUS_UNSPEC_MASK      0x0c8c
1790 #define STATUS_NOISE_MASK       ((u16)~(0x0303|STATUS_UNSPEC_MASK))
1791
1792
1793 static inline void nc_dump_status (struct usbnet *dev, u16 status)
1794 {
1795 #ifdef DEBUG
1796         devdbg (dev, "net1080 %s-%s status 0x%x:"
1797                         " this (%c) PKT=%d%s%s%s;"
1798                         " other PKT=%d%s%s%s; unspec 0x%x",
1799                 dev->udev->bus->bus_name, dev->udev->devpath,
1800                 status,
1801
1802                 // XXX the packet counts don't seem right
1803                 // (1 at reset, not 0); maybe UNSPEC too
1804
1805                 (status & STATUS_PORT_A) ? 'A' : 'B',
1806                 STATUS_PACKETS_THIS (status),
1807                 (status & STATUS_CONN_THIS) ? " CON" : "",
1808                 (status & STATUS_SUSPEND_THIS) ? " SUS" : "",
1809                 (status & STATUS_MAILBOX_THIS) ? " MBOX" : "",
1810
1811                 STATUS_PACKETS_OTHER (status),
1812                 (status & STATUS_CONN_OTHER) ? " CON" : "",
1813                 (status & STATUS_SUSPEND_OTHER) ? " SUS" : "",
1814                 (status & STATUS_MAILBOX_OTHER) ? " MBOX" : "",
1815
1816                 status & STATUS_UNSPEC_MASK
1817                 );
1818 #endif
1819 }
1820
1821 /*-------------------------------------------------------------------------*/
1822
1823 /*
1824  * TTL register
1825  */
1826
1827 #define TTL_THIS(ttl)   (0x00ff & ttl)
1828 #define TTL_OTHER(ttl)  (0x00ff & (ttl >> 8))
1829 #define MK_TTL(this,other)      ((u16)(((other)<<8)|(0x00ff&(this))))
1830
1831 static inline void nc_dump_ttl (struct usbnet *dev, u16 ttl)
1832 {
1833 #ifdef DEBUG
1834         devdbg (dev, "net1080 %s-%s ttl 0x%x this = %d, other = %d",
1835                 dev->udev->bus->bus_name, dev->udev->devpath,
1836                 ttl,
1837
1838                 TTL_THIS (ttl),
1839                 TTL_OTHER (ttl)
1840                 );
1841 #endif
1842 }
1843
1844 /*-------------------------------------------------------------------------*/
1845
1846 static int net1080_reset (struct usbnet *dev)
1847 {
1848         u16             usbctl, status, ttl;
1849         u16             *vp = kmalloc (sizeof (u16), GFP_KERNEL);
1850         int             retval;
1851
1852         if (!vp)
1853                 return -ENOMEM;
1854
1855         // nc_dump_registers (dev);
1856
1857         if ((retval = nc_register_read (dev, REG_STATUS, vp)) < 0) {
1858                 dbg ("can't read %s-%s status: %d",
1859                         dev->udev->bus->bus_name, dev->udev->devpath, retval);
1860                 goto done;
1861         }
1862         status = *vp;
1863         // nc_dump_status (dev, status);
1864
1865         if ((retval = nc_register_read (dev, REG_USBCTL, vp)) < 0) {
1866                 dbg ("can't read USBCTL, %d", retval);
1867                 goto done;
1868         }
1869         usbctl = *vp;
1870         // nc_dump_usbctl (dev, usbctl);
1871
1872         nc_register_write (dev, REG_USBCTL,
1873                         USBCTL_FLUSH_THIS | USBCTL_FLUSH_OTHER);
1874
1875         if ((retval = nc_register_read (dev, REG_TTL, vp)) < 0) {
1876                 dbg ("can't read TTL, %d", retval);
1877                 goto done;
1878         }
1879         ttl = *vp;
1880         // nc_dump_ttl (dev, ttl);
1881
1882         nc_register_write (dev, REG_TTL,
1883                         MK_TTL (NC_READ_TTL_MS, TTL_OTHER (ttl)) );
1884         dbg ("%s: assigned TTL, %d ms", dev->net->name, NC_READ_TTL_MS);
1885
1886         if (dev->msg_level >= 2)
1887                 devinfo (dev, "port %c, peer %sconnected",
1888                         (status & STATUS_PORT_A) ? 'A' : 'B',
1889                         (status & STATUS_CONN_OTHER) ? "" : "dis"
1890                         );
1891         retval = 0;
1892
1893 done:
1894         kfree (vp);
1895         return retval;
1896 }
1897
1898 static int net1080_check_connect (struct usbnet *dev)
1899 {
1900         int                     retval;
1901         u16                     status;
1902         u16                     *vp = kmalloc (sizeof (u16), GFP_KERNEL);
1903
1904         if (!vp)
1905                 return -ENOMEM;
1906         retval = nc_register_read (dev, REG_STATUS, vp);
1907         status = *vp;
1908         kfree (vp);
1909         if (retval != 0) {
1910                 dbg ("%s net1080_check_conn read - %d", dev->net->name, retval);
1911                 return retval;
1912         }
1913         if ((status & STATUS_CONN_OTHER) != STATUS_CONN_OTHER)
1914                 return -ENOLINK;
1915         return 0;
1916 }
1917
1918 static void nc_flush_complete (struct urb *urb, struct pt_regs *regs)
1919 {
1920         kfree (urb->context);
1921         usb_free_urb(urb);
1922 }
1923
1924 static void nc_ensure_sync (struct usbnet *dev)
1925 {
1926         dev->frame_errors++;
1927         if (dev->frame_errors > 5) {
1928                 struct urb              *urb;
1929                 struct usb_ctrlrequest  *req;
1930                 int                     status;
1931
1932                 /* Send a flush */
1933                 urb = usb_alloc_urb (0, SLAB_ATOMIC);
1934                 if (!urb)
1935                         return;
1936
1937                 req = kmalloc (sizeof *req, GFP_ATOMIC);
1938                 if (!req) {
1939                         usb_free_urb (urb);
1940                         return;
1941                 }
1942
1943                 req->bRequestType = USB_DIR_OUT
1944                         | USB_TYPE_VENDOR
1945                         | USB_RECIP_DEVICE;
1946                 req->bRequest = REQUEST_REGISTER;
1947                 req->wValue = cpu_to_le16 (USBCTL_FLUSH_THIS
1948                                 | USBCTL_FLUSH_OTHER);
1949                 req->wIndex = cpu_to_le16 (REG_USBCTL);
1950                 req->wLength = cpu_to_le16 (0);
1951
1952                 /* queue an async control request, we don't need
1953                  * to do anything when it finishes except clean up.
1954                  */
1955                 usb_fill_control_urb (urb, dev->udev,
1956                         usb_sndctrlpipe (dev->udev, 0),
1957                         (unsigned char *) req,
1958                         NULL, 0,
1959                         nc_flush_complete, req);
1960                 status = usb_submit_urb (urb, GFP_ATOMIC);
1961                 if (status) {
1962                         kfree (req);
1963                         usb_free_urb (urb);
1964                         return;
1965                 }
1966
1967                 devdbg (dev, "flush net1080; too many framing errors");
1968                 dev->frame_errors = 0;
1969         }
1970 }
1971
1972 static int net1080_rx_fixup (struct usbnet *dev, struct sk_buff *skb)
1973 {
1974         struct nc_header        *header;
1975         struct nc_trailer       *trailer;
1976
1977         if (!(skb->len & 0x01)
1978                         || MIN_FRAMED > skb->len
1979                         || skb->len > FRAMED_SIZE (dev->net->mtu)) {
1980                 dev->stats.rx_frame_errors++;
1981                 dbg ("rx framesize %d range %d..%d mtu %d", skb->len,
1982                         (int)MIN_FRAMED, (int)FRAMED_SIZE (dev->net->mtu),
1983                         dev->net->mtu);
1984                 nc_ensure_sync (dev);
1985                 return 0;
1986         }
1987
1988         header = (struct nc_header *) skb->data;
1989         le16_to_cpus (&header->hdr_len);
1990         le16_to_cpus (&header->packet_len);
1991         if (FRAMED_SIZE (header->packet_len) > MAX_PACKET) {
1992                 dev->stats.rx_frame_errors++;
1993                 dbg ("packet too big, %d", header->packet_len);
1994                 nc_ensure_sync (dev);
1995                 return 0;
1996         } else if (header->hdr_len < MIN_HEADER) {
1997                 dev->stats.rx_frame_errors++;
1998                 dbg ("header too short, %d", header->hdr_len);
1999                 nc_ensure_sync (dev);
2000                 return 0;
2001         } else if (header->hdr_len > MIN_HEADER) {
2002                 // out of band data for us?
2003                 dbg ("header OOB, %d bytes",
2004                         header->hdr_len - MIN_HEADER);
2005                 nc_ensure_sync (dev);
2006                 // switch (vendor/product ids) { ... }
2007         }
2008         skb_pull (skb, header->hdr_len);
2009
2010         trailer = (struct nc_trailer *)
2011                 (skb->data + skb->len - sizeof *trailer);
2012         skb_trim (skb, skb->len - sizeof *trailer);
2013
2014         if ((header->packet_len & 0x01) == 0) {
2015                 if (skb->data [header->packet_len] != PAD_BYTE) {
2016                         dev->stats.rx_frame_errors++;
2017                         dbg ("bad pad");
2018                         return 0;
2019                 }
2020                 skb_trim (skb, skb->len - 1);
2021         }
2022         if (skb->len != header->packet_len) {
2023                 dev->stats.rx_frame_errors++;
2024                 dbg ("bad packet len %d (expected %d)",
2025                         skb->len, header->packet_len);
2026                 nc_ensure_sync (dev);
2027                 return 0;
2028         }
2029         if (header->packet_id != get_unaligned (&trailer->packet_id)) {
2030                 dev->stats.rx_fifo_errors++;
2031                 dbg ("(2+ dropped) rx packet_id mismatch 0x%x 0x%x",
2032                         header->packet_id, trailer->packet_id);
2033                 return 0;
2034         }
2035 #if 0
2036         devdbg (dev, "frame <rx h %d p %d id %d", header->hdr_len,
2037                 header->packet_len, header->packet_id);
2038 #endif
2039         dev->frame_errors = 0;
2040         return 1;
2041 }
2042
2043 static struct sk_buff *
2044 net1080_tx_fixup (struct usbnet *dev, struct sk_buff *skb, int flags)
2045 {
2046         int                     padlen;
2047         struct sk_buff          *skb2;
2048
2049         padlen = ((skb->len + sizeof (struct nc_header)
2050                         + sizeof (struct nc_trailer)) & 0x01) ? 0 : 1;
2051         if (!skb_cloned (skb)) {
2052                 int     headroom = skb_headroom (skb);
2053                 int     tailroom = skb_tailroom (skb);
2054
2055                 if ((padlen + sizeof (struct nc_trailer)) <= tailroom
2056                             && sizeof (struct nc_header) <= headroom)
2057                         /* There's enough head and tail room */
2058                         return skb;
2059
2060                 if ((sizeof (struct nc_header) + padlen
2061                                         + sizeof (struct nc_trailer)) <
2062                                 (headroom + tailroom)) {
2063                         /* There's enough total room, so just readjust */
2064                         skb->data = memmove (skb->head
2065                                                 + sizeof (struct nc_header),
2066                                             skb->data, skb->len);
2067                         skb->tail = skb->data + skb->len;
2068                         return skb;
2069                 }
2070         }
2071
2072         /* Create a new skb to use with the correct size */
2073         skb2 = skb_copy_expand (skb,
2074                                 sizeof (struct nc_header),
2075                                 sizeof (struct nc_trailer) + padlen,
2076                                 flags);
2077         dev_kfree_skb_any (skb);
2078         return skb2;
2079 }
2080
2081 static const struct driver_info net1080_info = {
2082         .description =  "NetChip TurboCONNECT",
2083         .flags =        FLAG_FRAMING_NC,
2084         .reset =        net1080_reset,
2085         .check_connect =net1080_check_connect,
2086         .rx_fixup =     net1080_rx_fixup,
2087         .tx_fixup =     net1080_tx_fixup,
2088 };
2089
2090 #endif /* CONFIG_USB_NET1080 */
2091
2092
2093 \f
2094 #ifdef CONFIG_USB_PL2301
2095 #define HAVE_HARDWARE
2096
2097 /*-------------------------------------------------------------------------
2098  *
2099  * Prolific PL-2301/PL-2302 driver ... http://www.prolifictech.com
2100  *
2101  * The protocol and handshaking used here should be bug-compatible
2102  * with the Linux 2.2 "plusb" driver, by Deti Fliegl.
2103  *
2104  *-------------------------------------------------------------------------*/
2105
2106 /*
2107  * Bits 0-4 can be used for software handshaking; they're set from
2108  * one end, cleared from the other, "read" with the interrupt byte.
2109  */
2110 #define PL_S_EN         (1<<7)          /* (feature only) suspend enable */
2111 /* reserved bit -- rx ready (6) ? */
2112 #define PL_TX_READY     (1<<5)          /* (interrupt only) transmit ready */
2113 #define PL_RESET_OUT    (1<<4)          /* reset output pipe */
2114 #define PL_RESET_IN     (1<<3)          /* reset input pipe */
2115 #define PL_TX_C         (1<<2)          /* transmission complete */
2116 #define PL_TX_REQ       (1<<1)          /* transmission received */
2117 #define PL_PEER_E       (1<<0)          /* peer exists */
2118
2119 static inline int
2120 pl_vendor_req (struct usbnet *dev, u8 req, u8 val, u8 index)
2121 {
2122         return usb_control_msg (dev->udev,
2123                 usb_rcvctrlpipe (dev->udev, 0),
2124                 req,
2125                 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
2126                 val, index,
2127                 NULL, 0,
2128                 CONTROL_TIMEOUT_JIFFIES);
2129 }
2130
2131 static inline int
2132 pl_clear_QuickLink_features (struct usbnet *dev, int val)
2133 {
2134         return pl_vendor_req (dev, 1, (u8) val, 0);
2135 }
2136
2137 static inline int
2138 pl_set_QuickLink_features (struct usbnet *dev, int val)
2139 {
2140         return pl_vendor_req (dev, 3, (u8) val, 0);
2141 }
2142
2143 /*-------------------------------------------------------------------------*/
2144
2145 static int pl_reset (struct usbnet *dev)
2146 {
2147         /* some units seem to need this reset, others reject it utterly.
2148          * FIXME be more like "naplink" or windows drivers.
2149          */
2150         (void) pl_set_QuickLink_features (dev,
2151                 PL_S_EN|PL_RESET_OUT|PL_RESET_IN|PL_PEER_E);
2152         return 0;
2153 }
2154
2155 static const struct driver_info prolific_info = {
2156         .description =  "Prolific PL-2301/PL-2302",
2157         .flags =        FLAG_NO_SETINT,
2158                 /* some PL-2302 versions seem to fail usb_set_interface() */
2159         .reset =        pl_reset,
2160 };
2161
2162 #endif /* CONFIG_USB_PL2301 */
2163
2164 \f
2165 #ifdef CONFIG_USB_KC2190
2166 #define HAVE_HARDWARE
2167 static const struct driver_info kc2190_info = {
2168         .description =  "KC Technology KC-190",
2169 };
2170 #endif /* CONFIG_USB_KC2190 */
2171
2172 \f
2173 #ifdef  CONFIG_USB_ARMLINUX
2174 #define HAVE_HARDWARE
2175
2176 /*-------------------------------------------------------------------------
2177  *
2178  * Intel's SA-1100 chip integrates basic USB support, and is used
2179  * in PDAs like some iPaqs, the Yopy, some Zaurus models, and more.
2180  * When they run Linux, arch/arm/mach-sa1100/usb-eth.c may be used to
2181  * network using minimal USB framing data.
2182  *
2183  * This describes the driver currently in standard ARM Linux kernels.
2184  * The Zaurus uses a different driver (see later).
2185  *
2186  * PXA25x and PXA210 use XScale cores (ARM v5TE) with better USB support
2187  * and different USB endpoint numbering than the SA1100 devices.  The
2188  * mach-pxa/usb-eth.c driver re-uses the device ids from mach-sa1100
2189  * so we rely on the endpoint descriptors.
2190  *
2191  *-------------------------------------------------------------------------*/
2192
2193 static const struct driver_info linuxdev_info = {
2194         .description =  "Linux Device",
2195         .check_connect = always_connected,
2196 };
2197
2198 static const struct driver_info yopy_info = {
2199         .description =  "Yopy",
2200         .check_connect = always_connected,
2201 };
2202
2203 static const struct driver_info blob_info = {
2204         .description =  "Boot Loader OBject",
2205         .check_connect = always_connected,
2206 };
2207
2208 #endif  /* CONFIG_USB_ARMLINUX */
2209
2210 \f
2211 #ifdef CONFIG_USB_ZAURUS
2212 #define HAVE_HARDWARE
2213
2214 #include <linux/crc32.h>
2215
2216 /*-------------------------------------------------------------------------
2217  *
2218  * Zaurus is also a SA-1110 based PDA, but one using a different driver
2219  * (and framing) for its USB slave/gadget controller than the case above.
2220  *
2221  * For the current version of that driver, the main way that framing is
2222  * nonstandard (also from perspective of the CDC ethernet model!) is a
2223  * crc32, added to help detect when some sa1100 usb-to-memory DMA errata
2224  * haven't been fully worked around.
2225  *
2226  * PXA based models use the same framing, and also can't implement
2227  * set_interface properly.
2228  *
2229  *-------------------------------------------------------------------------*/
2230
2231 static struct sk_buff *
2232 zaurus_tx_fixup (struct usbnet *dev, struct sk_buff *skb, int flags)
2233 {
2234         int                     padlen;
2235         struct sk_buff          *skb2;
2236
2237         padlen = 2;
2238         if (!skb_cloned (skb)) {
2239                 int     tailroom = skb_tailroom (skb);
2240                 if ((padlen + 4) <= tailroom)
2241                         goto done;
2242         }
2243         skb2 = skb_copy_expand (skb, 0, 4 + padlen, flags);
2244         dev_kfree_skb_any (skb);
2245         skb = skb2;
2246         if (skb) {
2247                 u32             fcs;
2248 done:
2249                 fcs = crc32_le (~0, skb->data, skb->len);
2250                 fcs = ~fcs;
2251
2252                 *skb_put (skb, 1) = fcs       & 0xff;
2253                 *skb_put (skb, 1) = (fcs>> 8) & 0xff;
2254                 *skb_put (skb, 1) = (fcs>>16) & 0xff;
2255                 *skb_put (skb, 1) = (fcs>>24) & 0xff;
2256         }
2257         return skb;
2258 }
2259
2260 static const struct driver_info zaurus_sl5x00_info = {
2261         .description =  "Sharp Zaurus SL-5x00",
2262         .flags =        FLAG_FRAMING_Z,
2263         .check_connect = always_connected,
2264         .bind =         generic_cdc_bind,
2265         .unbind =       cdc_unbind,
2266         .tx_fixup =     zaurus_tx_fixup,
2267 };
2268 #define ZAURUS_STRONGARM_INFO   ((unsigned long)&zaurus_sl5x00_info)
2269
2270 static const struct driver_info zaurus_pxa_info = {
2271         .description =  "Sharp Zaurus, PXA-2xx based",
2272         .flags =        FLAG_FRAMING_Z,
2273         .check_connect = always_connected,
2274         .bind =         generic_cdc_bind,
2275         .unbind =       cdc_unbind,
2276         .tx_fixup =     zaurus_tx_fixup,
2277 };
2278 #define ZAURUS_PXA_INFO         ((unsigned long)&zaurus_pxa_info)
2279
2280 static const struct driver_info olympus_mxl_info = {
2281         .description =  "Olympus R1000",
2282         .flags =        FLAG_FRAMING_Z,
2283         .check_connect = always_connected,
2284         .bind =         generic_cdc_bind,
2285         .unbind =       cdc_unbind,
2286         .tx_fixup =     zaurus_tx_fixup,
2287 };
2288 #define OLYMPUS_MXL_INFO        ((unsigned long)&olympus_mxl_info)
2289
2290 #else
2291
2292 /* blacklist all those devices */
2293 #define ZAURUS_STRONGARM_INFO   0
2294 #define ZAURUS_PXA_INFO         0
2295 #define OLYMPUS_MXL_INFO        0
2296
2297 #endif
2298
2299 \f
2300 /*-------------------------------------------------------------------------
2301  *
2302  * Network Device Driver (peer link to "Host Device", from USB host)
2303  *
2304  *-------------------------------------------------------------------------*/
2305
2306 static int usbnet_change_mtu (struct net_device *net, int new_mtu)
2307 {
2308         struct usbnet   *dev = netdev_priv(net);
2309
2310         if (new_mtu <= MIN_PACKET || new_mtu > MAX_PACKET)
2311                 return -EINVAL;
2312 #ifdef  CONFIG_USB_NET1080
2313         if (((dev->driver_info->flags) & FLAG_FRAMING_NC)) {
2314                 if (FRAMED_SIZE (new_mtu) > MAX_PACKET)
2315                         return -EINVAL;
2316         }
2317 #endif
2318 #ifdef  CONFIG_USB_GENESYS
2319         if (((dev->driver_info->flags) & FLAG_FRAMING_GL)
2320                         && new_mtu > GL_MAX_PACKET_LEN)
2321                 return -EINVAL;
2322 #endif
2323         // no second zero-length packet read wanted after mtu-sized packets
2324         if (((new_mtu + sizeof (struct ethhdr)) % dev->maxpacket) == 0)
2325                 return -EDOM;
2326         net->mtu = new_mtu;
2327         return 0;
2328 }
2329
2330 /*-------------------------------------------------------------------------*/
2331
2332 static struct net_device_stats *usbnet_get_stats (struct net_device *net)
2333 {
2334         struct usbnet   *dev = netdev_priv(net);
2335         return &dev->stats;
2336 }
2337
2338 /*-------------------------------------------------------------------------*/
2339
2340 /* some LK 2.4 HCDs oopsed if we freed or resubmitted urbs from
2341  * completion callbacks.  2.5 should have fixed those bugs...
2342  */
2343
2344 static void defer_bh (struct usbnet *dev, struct sk_buff *skb)
2345 {
2346         struct sk_buff_head     *list = skb->list;
2347         unsigned long           flags;
2348
2349         spin_lock_irqsave (&list->lock, flags);
2350         __skb_unlink (skb, list);
2351         spin_unlock (&list->lock);
2352         spin_lock (&dev->done.lock);
2353         __skb_queue_tail (&dev->done, skb);
2354         if (dev->done.qlen == 1)
2355                 tasklet_schedule (&dev->bh);
2356         spin_unlock_irqrestore (&dev->done.lock, flags);
2357 }
2358
2359 /* some work can't be done in tasklets, so we use keventd
2360  *
2361  * NOTE:  annoying asymmetry:  if it's active, schedule_work() fails,
2362  * but tasklet_schedule() doesn't.  hope the failure is rare.
2363  */
2364 static void defer_kevent (struct usbnet *dev, int work)
2365 {
2366         set_bit (work, &dev->flags);
2367         if (!schedule_work (&dev->kevent))
2368                 deverr (dev, "kevent %d may have been dropped", work);
2369         else
2370                 devdbg (dev, "kevent %d scheduled", work);
2371 }
2372
2373 /*-------------------------------------------------------------------------*/
2374
2375 static void rx_complete (struct urb *urb, struct pt_regs *regs);
2376
2377 static void rx_submit (struct usbnet *dev, struct urb *urb, int flags)
2378 {
2379         struct sk_buff          *skb;
2380         struct skb_data         *entry;
2381         int                     retval = 0;
2382         unsigned long           lockflags;
2383         size_t                  size;
2384
2385 #ifdef CONFIG_USB_NET1080
2386         if (dev->driver_info->flags & FLAG_FRAMING_NC)
2387                 size = FRAMED_SIZE (dev->net->mtu);
2388         else
2389 #endif
2390 #ifdef CONFIG_USB_GENESYS
2391         if (dev->driver_info->flags & FLAG_FRAMING_GL)
2392                 size = GL_RCV_BUF_SIZE;
2393         else
2394 #endif
2395 #ifdef CONFIG_USB_ZAURUS
2396         if (dev->driver_info->flags & FLAG_FRAMING_Z)
2397                 size = 6 + (sizeof (struct ethhdr) + dev->net->mtu);
2398         else
2399 #endif
2400 #ifdef CONFIG_USB_RNDIS
2401         if (dev->driver_info->flags & FLAG_FRAMING_RN)
2402                 size = RNDIS_MAX_TRANSFER;
2403         else
2404 #endif
2405                 size = (sizeof (struct ethhdr) + dev->net->mtu);
2406
2407         if ((skb = alloc_skb (size, flags)) == NULL) {
2408                 devdbg (dev, "no rx skb");
2409                 defer_kevent (dev, EVENT_RX_MEMORY);
2410                 usb_free_urb (urb);
2411                 return;
2412         }
2413
2414         entry = (struct skb_data *) skb->cb;
2415         entry->urb = urb;
2416         entry->dev = dev;
2417         entry->state = rx_start;
2418         entry->length = 0;
2419
2420         usb_fill_bulk_urb (urb, dev->udev, dev->in,
2421                 skb->data, size, rx_complete, skb);
2422         urb->transfer_flags |= URB_ASYNC_UNLINK;
2423
2424         spin_lock_irqsave (&dev->rxq.lock, lockflags);
2425
2426         if (netif_running (dev->net)
2427                         && netif_device_present (dev->net)
2428                         && !test_bit (EVENT_RX_HALT, &dev->flags)) {
2429                 switch (retval = usb_submit_urb (urb, GFP_ATOMIC)){ 
2430                 case -EPIPE:
2431                         defer_kevent (dev, EVENT_RX_HALT);
2432                         break;
2433                 case -ENOMEM:
2434                         defer_kevent (dev, EVENT_RX_MEMORY);
2435                         break;
2436                 case -ENODEV:
2437                         devdbg (dev, "device gone");
2438                         netif_device_detach (dev->net);
2439                         break;
2440                 default:
2441                         devdbg (dev, "rx submit, %d", retval);
2442                         tasklet_schedule (&dev->bh);
2443                         break;
2444                 case 0:
2445                         __skb_queue_tail (&dev->rxq, skb);
2446                 }
2447         } else {
2448                 devdbg (dev, "rx: stopped");
2449                 retval = -ENOLINK;
2450         }
2451         spin_unlock_irqrestore (&dev->rxq.lock, lockflags);
2452         if (retval) {
2453                 dev_kfree_skb_any (skb);
2454                 usb_free_urb (urb);
2455         }
2456 }
2457
2458
2459 /*-------------------------------------------------------------------------*/
2460
2461 static inline void rx_process (struct usbnet *dev, struct sk_buff *skb)
2462 {
2463         if (dev->driver_info->rx_fixup
2464                         && !dev->driver_info->rx_fixup (dev, skb))
2465                 goto error;
2466         // else network stack removes extra byte if we forced a short packet
2467
2468         if (skb->len)
2469                 skb_return (dev, skb);
2470         else {
2471                 devdbg (dev, "drop");
2472 error:
2473                 dev->stats.rx_errors++;
2474                 skb_queue_tail (&dev->done, skb);
2475         }
2476 }
2477
2478 /*-------------------------------------------------------------------------*/
2479
2480 static void rx_complete (struct urb *urb, struct pt_regs *regs)
2481 {
2482         struct sk_buff          *skb = (struct sk_buff *) urb->context;
2483         struct skb_data         *entry = (struct skb_data *) skb->cb;
2484         struct usbnet           *dev = entry->dev;
2485         int                     urb_status = urb->status;
2486
2487         skb_put (skb, urb->actual_length);
2488         entry->state = rx_done;
2489         entry->urb = NULL;
2490
2491         switch (urb_status) {
2492             // success
2493             case 0:
2494                 if (MIN_PACKET > skb->len || skb->len > MAX_PACKET) {
2495                         entry->state = rx_cleanup;
2496                         dev->stats.rx_errors++;
2497                         dev->stats.rx_length_errors++;
2498                         devdbg (dev, "rx length %d", skb->len);
2499                 }
2500                 break;
2501
2502             // stalls need manual reset. this is rare ... except that
2503             // when going through USB 2.0 TTs, unplug appears this way.
2504             // we avoid the highspeed version of the ETIMEOUT/EILSEQ
2505             // storm, recovering as needed.
2506             case -EPIPE:
2507                 dev->stats.rx_errors++;
2508                 defer_kevent (dev, EVENT_RX_HALT);
2509                 // FALLTHROUGH
2510
2511             // software-driven interface shutdown
2512             case -ECONNRESET:           // async unlink
2513             case -ESHUTDOWN:            // hardware gone
2514 #ifdef  VERBOSE
2515                 devdbg (dev, "rx shutdown, code %d", urb_status);
2516 #endif
2517                 goto block;
2518
2519             // we get controller i/o faults during khubd disconnect() delays.
2520             // throttle down resubmits, to avoid log floods; just temporarily,
2521             // so we still recover when the fault isn't a khubd delay.
2522             case -EPROTO:               // ehci
2523             case -ETIMEDOUT:            // ohci
2524             case -EILSEQ:               // uhci
2525                 dev->stats.rx_errors++;
2526                 if (!timer_pending (&dev->delay)) {
2527                         mod_timer (&dev->delay, jiffies + THROTTLE_JIFFIES);
2528                         devdbg (dev, "rx throttle %d", urb_status);
2529                 }
2530 block:
2531                 entry->state = rx_cleanup;
2532                 entry->urb = urb;
2533                 urb = NULL;
2534                 break;
2535
2536             // data overrun ... flush fifo?
2537             case -EOVERFLOW:
2538                 dev->stats.rx_over_errors++;
2539                 // FALLTHROUGH
2540             
2541             default:
2542                 entry->state = rx_cleanup;
2543                 dev->stats.rx_errors++;
2544                 devdbg (dev, "rx status %d", urb_status);
2545                 break;
2546         }
2547
2548         defer_bh (dev, skb);
2549
2550         if (urb) {
2551                 if (netif_running (dev->net)
2552                                 && !test_bit (EVENT_RX_HALT, &dev->flags)) {
2553                         rx_submit (dev, urb, GFP_ATOMIC);
2554                         return;
2555                 }
2556                 usb_free_urb (urb);
2557         }
2558 #ifdef  VERBOSE
2559         devdbg (dev, "no read resubmitted");
2560 #endif /* VERBOSE */
2561 }
2562
2563 /*-------------------------------------------------------------------------*/
2564
2565 // unlink pending rx/tx; completion handlers do all other cleanup
2566
2567 static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q)
2568 {
2569         unsigned long           flags;
2570         struct sk_buff          *skb, *skbnext;
2571         int                     count = 0;
2572
2573         spin_lock_irqsave (&q->lock, flags);
2574         for (skb = q->next; skb != (struct sk_buff *) q; skb = skbnext) {
2575                 struct skb_data         *entry;
2576                 struct urb              *urb;
2577                 int                     retval;
2578
2579                 entry = (struct skb_data *) skb->cb;
2580                 urb = entry->urb;
2581                 skbnext = skb->next;
2582
2583                 // during some PM-driven resume scenarios,
2584                 // these (async) unlinks complete immediately
2585                 retval = usb_unlink_urb (urb);
2586                 if (retval != -EINPROGRESS && retval != 0)
2587                         devdbg (dev, "unlink urb err, %d", retval);
2588                 else
2589                         count++;
2590         }
2591         spin_unlock_irqrestore (&q->lock, flags);
2592         return count;
2593 }
2594
2595
2596 /*-------------------------------------------------------------------------*/
2597
2598 // precondition: never called in_interrupt
2599
2600 static int usbnet_stop (struct net_device *net)
2601 {
2602         struct usbnet           *dev = netdev_priv(net);
2603         int                     temp;
2604         DECLARE_WAIT_QUEUE_HEAD (unlink_wakeup); 
2605         DECLARE_WAITQUEUE (wait, current);
2606
2607         netif_stop_queue (net);
2608
2609         if (dev->msg_level >= 2)
2610                 devinfo (dev, "stop stats: rx/tx %ld/%ld, errs %ld/%ld",
2611                         dev->stats.rx_packets, dev->stats.tx_packets, 
2612                         dev->stats.rx_errors, dev->stats.tx_errors
2613                         );
2614
2615         // ensure there are no more active urbs
2616         add_wait_queue (&unlink_wakeup, &wait);
2617         dev->wait = &unlink_wakeup;
2618         temp = unlink_urbs (dev, &dev->txq) + unlink_urbs (dev, &dev->rxq);
2619
2620         // maybe wait for deletions to finish.
2621         while (skb_queue_len (&dev->rxq)
2622                         && skb_queue_len (&dev->txq)
2623                         && skb_queue_len (&dev->done)) {
2624                 msleep(UNLINK_TIMEOUT_MS);
2625                 devdbg (dev, "waited for %d urb completions", temp);
2626         }
2627         dev->wait = NULL;
2628         remove_wait_queue (&unlink_wakeup, &wait); 
2629
2630         /* deferred work (task, timer, softirq) must also stop.
2631          * can't flush_scheduled_work() until we drop rtnl (later),
2632          * else workers could deadlock; so make workers a NOP.
2633          */
2634         dev->flags = 0;
2635         del_timer_sync (&dev->delay);
2636         tasklet_kill (&dev->bh);
2637
2638         return 0;
2639 }
2640
2641 /*-------------------------------------------------------------------------*/
2642
2643 // posts reads, and enables write queuing
2644
2645 // precondition: never called in_interrupt
2646
2647 static int usbnet_open (struct net_device *net)
2648 {
2649         struct usbnet           *dev = netdev_priv(net);
2650         int                     retval = 0;
2651         struct driver_info      *info = dev->driver_info;
2652
2653         // put into "known safe" state
2654         if (info->reset && (retval = info->reset (dev)) < 0) {
2655                 devinfo (dev, "open reset fail (%d) usbnet usb-%s-%s, %s",
2656                         retval,
2657                         dev->udev->bus->bus_name, dev->udev->devpath,
2658                         info->description);
2659                 goto done;
2660         }
2661
2662         // insist peer be connected
2663         if (info->check_connect && (retval = info->check_connect (dev)) < 0) {
2664                 devdbg (dev, "can't open; %d", retval);
2665                 goto done;
2666         }
2667
2668         netif_start_queue (net);
2669         if (dev->msg_level >= 2) {
2670                 char    *framing;
2671
2672                 if (dev->driver_info->flags & FLAG_FRAMING_NC)
2673                         framing = "NetChip";
2674                 else if (dev->driver_info->flags & FLAG_FRAMING_GL)
2675                         framing = "GeneSys";
2676                 else if (dev->driver_info->flags & FLAG_FRAMING_Z)
2677                         framing = "Zaurus";
2678                 else if (dev->driver_info->flags & FLAG_FRAMING_RN)
2679                         framing = "RNDIS";
2680                 else
2681                         framing = "simple";
2682
2683                 devinfo (dev, "open: enable queueing "
2684                                 "(rx %d, tx %d) mtu %d %s framing",
2685                         RX_QLEN (dev), TX_QLEN (dev), dev->net->mtu,
2686                         framing);
2687         }
2688
2689         // delay posting reads until we're fully open
2690         tasklet_schedule (&dev->bh);
2691 done:
2692         return retval;
2693 }
2694
2695 /*-------------------------------------------------------------------------*/
2696
2697 static void usbnet_get_drvinfo (struct net_device *net, struct ethtool_drvinfo *info)
2698 {
2699         struct usbnet *dev = netdev_priv(net);
2700
2701         strncpy (info->driver, driver_name, sizeof info->driver);
2702         strncpy (info->version, DRIVER_VERSION, sizeof info->version);
2703         strncpy (info->fw_version, dev->driver_info->description,
2704                 sizeof info->fw_version);
2705         usb_make_path (dev->udev, info->bus_info, sizeof info->bus_info);
2706 }
2707
2708 static u32 usbnet_get_link (struct net_device *net)
2709 {
2710         struct usbnet *dev = netdev_priv(net);
2711
2712         /* If a check_connect is defined, return it's results */
2713         if (dev->driver_info->check_connect)
2714                 return dev->driver_info->check_connect (dev) == 0;
2715
2716         /* Otherwise, we're up to avoid breaking scripts */
2717         return 1;
2718 }
2719
2720 static u32 usbnet_get_msglevel (struct net_device *net)
2721 {
2722         struct usbnet *dev = netdev_priv(net);
2723
2724         return dev->msg_level;
2725 }
2726
2727 static void usbnet_set_msglevel (struct net_device *net, u32 level)
2728 {
2729         struct usbnet *dev = netdev_priv(net);
2730
2731         dev->msg_level = level;
2732 }
2733
2734 static int usbnet_ioctl (struct net_device *net, struct ifreq *rq, int cmd)
2735 {
2736 #ifdef NEED_MII
2737         {
2738         struct usbnet *dev = netdev_priv(net);
2739
2740         if (dev->mii.mdio_read != NULL && dev->mii.mdio_write != NULL)
2741                 return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL);
2742         }
2743 #endif
2744         return -EOPNOTSUPP;
2745 }
2746
2747 /*-------------------------------------------------------------------------*/
2748
2749 /* work that cannot be done in interrupt context uses keventd.
2750  *
2751  * NOTE:  with 2.5 we could do more of this using completion callbacks,
2752  * especially now that control transfers can be queued.
2753  */
2754 static void
2755 kevent (void *data)
2756 {
2757         struct usbnet           *dev = data;
2758         int                     status;
2759
2760         /* usb_clear_halt() needs a thread context */
2761         if (test_bit (EVENT_TX_HALT, &dev->flags)) {
2762                 unlink_urbs (dev, &dev->txq);
2763                 status = usb_clear_halt (dev->udev, dev->out);
2764                 if (status < 0 && status != -EPIPE)
2765                         deverr (dev, "can't clear tx halt, status %d",
2766                                 status);
2767                 else {
2768                         clear_bit (EVENT_TX_HALT, &dev->flags);
2769                         netif_wake_queue (dev->net);
2770                 }
2771         }
2772         if (test_bit (EVENT_RX_HALT, &dev->flags)) {
2773                 unlink_urbs (dev, &dev->rxq);
2774                 status = usb_clear_halt (dev->udev, dev->in);
2775                 if (status < 0 && status != -EPIPE)
2776                         deverr (dev, "can't clear rx halt, status %d",
2777                                 status);
2778                 else {
2779                         clear_bit (EVENT_RX_HALT, &dev->flags);
2780                         tasklet_schedule (&dev->bh);
2781                 }
2782         }
2783
2784         /* tasklet could resubmit itself forever if memory is tight */
2785         if (test_bit (EVENT_RX_MEMORY, &dev->flags)) {
2786                 struct urb      *urb = NULL;
2787
2788                 if (netif_running (dev->net))
2789                         urb = usb_alloc_urb (0, GFP_KERNEL);
2790                 else
2791                         clear_bit (EVENT_RX_MEMORY, &dev->flags);
2792                 if (urb != NULL) {
2793                         clear_bit (EVENT_RX_MEMORY, &dev->flags);
2794                         rx_submit (dev, urb, GFP_KERNEL);
2795                         tasklet_schedule (&dev->bh);
2796                 }
2797         }
2798
2799         if (dev->flags)
2800                 devdbg (dev, "kevent done, flags = 0x%lx",
2801                         dev->flags);
2802 }
2803
2804 /*-------------------------------------------------------------------------*/
2805
2806 static void tx_complete (struct urb *urb, struct pt_regs *regs)
2807 {
2808         struct sk_buff          *skb = (struct sk_buff *) urb->context;
2809         struct skb_data         *entry = (struct skb_data *) skb->cb;
2810         struct usbnet           *dev = entry->dev;
2811
2812         if (urb->status == 0) {
2813                 dev->stats.tx_packets++;
2814                 dev->stats.tx_bytes += entry->length;
2815         } else {
2816                 dev->stats.tx_errors++;
2817
2818                 switch (urb->status) {
2819                 case -EPIPE:
2820                         defer_kevent (dev, EVENT_TX_HALT);
2821                         break;
2822
2823                 // like rx, tx gets controller i/o faults during khubd delays
2824                 // and so it uses the same throttling mechanism.
2825                 case -EPROTO:           // ehci
2826                 case -ETIMEDOUT:        // ohci
2827                 case -EILSEQ:           // uhci
2828                         if (!timer_pending (&dev->delay)) {
2829                                 mod_timer (&dev->delay,
2830                                         jiffies + THROTTLE_JIFFIES);
2831                                 devdbg (dev, "tx throttle %d", urb->status);
2832                         }
2833                         netif_stop_queue (dev->net);
2834                         break;
2835                 default:
2836                         devdbg (dev, "tx err %d", entry->urb->status);
2837                         break;
2838                 }
2839         }
2840
2841         urb->dev = NULL;
2842         entry->state = tx_done;
2843         defer_bh (dev, skb);
2844 }
2845
2846 /*-------------------------------------------------------------------------*/
2847
2848 static void usbnet_tx_timeout (struct net_device *net)
2849 {
2850         struct usbnet           *dev = netdev_priv(net);
2851
2852         unlink_urbs (dev, &dev->txq);
2853         tasklet_schedule (&dev->bh);
2854
2855         // FIXME: device recovery -- reset?
2856 }
2857
2858 /*-------------------------------------------------------------------------*/
2859
2860 static int usbnet_start_xmit (struct sk_buff *skb, struct net_device *net)
2861 {
2862         struct usbnet           *dev = netdev_priv(net);
2863         int                     length;
2864         int                     retval = NET_XMIT_SUCCESS;
2865         struct urb              *urb = NULL;
2866         struct skb_data         *entry;
2867         struct driver_info      *info = dev->driver_info;
2868         unsigned long           flags;
2869 #ifdef  CONFIG_USB_NET1080
2870         struct nc_header        *header = NULL;
2871         struct nc_trailer       *trailer = NULL;
2872 #endif  /* CONFIG_USB_NET1080 */
2873
2874         // some devices want funky USB-level framing, for
2875         // win32 driver (usually) and/or hardware quirks
2876         if (info->tx_fixup) {
2877                 skb = info->tx_fixup (dev, skb, GFP_ATOMIC);
2878                 if (!skb) {
2879                         devdbg (dev, "can't tx_fixup skb");
2880                         goto drop;
2881                 }
2882         }
2883         length = skb->len;
2884
2885         if (!(urb = usb_alloc_urb (0, GFP_ATOMIC))) {
2886                 devdbg (dev, "no urb");
2887                 goto drop;
2888         }
2889
2890         entry = (struct skb_data *) skb->cb;
2891         entry->urb = urb;
2892         entry->dev = dev;
2893         entry->state = tx_start;
2894         entry->length = length;
2895
2896         // FIXME: reorganize a bit, so that fixup() fills out NetChip
2897         // framing too. (Packet ID update needs the spinlock...)
2898         // [ BETTER:  we already own net->xmit_lock, that's enough ]
2899
2900 #ifdef  CONFIG_USB_NET1080
2901         if (info->flags & FLAG_FRAMING_NC) {
2902                 header = (struct nc_header *) skb_push (skb, sizeof *header);
2903                 header->hdr_len = cpu_to_le16 (sizeof (*header));
2904                 header->packet_len = cpu_to_le16 (length);
2905                 if (!((skb->len + sizeof *trailer) & 0x01))
2906                         *skb_put (skb, 1) = PAD_BYTE;
2907                 trailer = (struct nc_trailer *) skb_put (skb, sizeof *trailer);
2908         }
2909 #endif  /* CONFIG_USB_NET1080 */
2910
2911         usb_fill_bulk_urb (urb, dev->udev, dev->out,
2912                         skb->data, skb->len, tx_complete, skb);
2913         urb->transfer_flags |= URB_ASYNC_UNLINK;
2914
2915         /* don't assume the hardware handles USB_ZERO_PACKET
2916          * NOTE:  strictly conforming cdc-ether devices should expect
2917          * the ZLP here, but ignore the one-byte packet.
2918          *
2919          * FIXME zero that byte, if it doesn't require a new skb.
2920          */
2921         if ((length % dev->maxpacket) == 0)
2922                 urb->transfer_buffer_length++;
2923
2924         spin_lock_irqsave (&dev->txq.lock, flags);
2925
2926 #ifdef  CONFIG_USB_NET1080
2927         if (info->flags & FLAG_FRAMING_NC) {
2928                 header->packet_id = cpu_to_le16 ((u16)dev->dev_packet_id++);
2929                 put_unaligned (header->packet_id, &trailer->packet_id);
2930 #if 0
2931                 devdbg (dev, "frame >tx h %d p %d id %d",
2932                         header->hdr_len, header->packet_len,
2933                         header->packet_id);
2934 #endif
2935         }
2936 #endif  /* CONFIG_USB_NET1080 */
2937
2938         switch ((retval = usb_submit_urb (urb, GFP_ATOMIC))) {
2939         case -EPIPE:
2940                 netif_stop_queue (net);
2941                 defer_kevent (dev, EVENT_TX_HALT);
2942                 break;
2943         default:
2944                 devdbg (dev, "tx: submit urb err %d", retval);
2945                 break;
2946         case 0:
2947                 net->trans_start = jiffies;
2948                 __skb_queue_tail (&dev->txq, skb);
2949                 if (dev->txq.qlen >= TX_QLEN (dev))
2950                         netif_stop_queue (net);
2951         }
2952         spin_unlock_irqrestore (&dev->txq.lock, flags);
2953
2954         if (retval) {
2955                 devdbg (dev, "drop, code %d", retval);
2956 drop:
2957                 retval = NET_XMIT_SUCCESS;
2958                 dev->stats.tx_dropped++;
2959                 if (skb)
2960                         dev_kfree_skb_any (skb);
2961                 usb_free_urb (urb);
2962 #ifdef  VERBOSE
2963         } else {
2964                 devdbg (dev, "> tx, len %d, type 0x%x",
2965                         length, skb->protocol);
2966 #endif
2967         }
2968         return retval;
2969 }
2970
2971
2972 /*-------------------------------------------------------------------------*/
2973
2974 // tasklet (work deferred from completions, in_irq) or timer
2975
2976 static void usbnet_bh (unsigned long param)
2977 {
2978         struct usbnet           *dev = (struct usbnet *) param;
2979         struct sk_buff          *skb;
2980         struct skb_data         *entry;
2981
2982         while ((skb = skb_dequeue (&dev->done))) {
2983                 entry = (struct skb_data *) skb->cb;
2984                 switch (entry->state) {
2985                     case rx_done:
2986                         entry->state = rx_cleanup;
2987                         rx_process (dev, skb);
2988                         continue;
2989                     case tx_done:
2990                     case rx_cleanup:
2991                         usb_free_urb (entry->urb);
2992                         dev_kfree_skb (skb);
2993                         continue;
2994                     default:
2995                         devdbg (dev, "bogus skb state %d", entry->state);
2996                 }
2997         }
2998
2999         // waiting for all pending urbs to complete?
3000         if (dev->wait) {
3001                 if ((dev->txq.qlen + dev->rxq.qlen + dev->done.qlen) == 0) {
3002                         wake_up (dev->wait);
3003                 }
3004
3005         // or are we maybe short a few urbs?
3006         } else if (netif_running (dev->net)
3007                         && netif_device_present (dev->net)
3008                         && !timer_pending (&dev->delay)
3009                         && !test_bit (EVENT_RX_HALT, &dev->flags)) {
3010                 int     temp = dev->rxq.qlen;
3011                 int     qlen = RX_QLEN (dev);
3012
3013                 if (temp < qlen) {
3014                         struct urb      *urb;
3015                         int             i;
3016
3017                         // don't refill the queue all at once
3018                         for (i = 0; i < 10 && dev->rxq.qlen < qlen; i++) {
3019                                 urb = usb_alloc_urb (0, GFP_ATOMIC);
3020                                 if (urb != NULL)
3021                                         rx_submit (dev, urb, GFP_ATOMIC);
3022                         }
3023                         if (temp != dev->rxq.qlen)
3024                                 devdbg (dev, "rxqlen %d --> %d",
3025                                                 temp, dev->rxq.qlen);
3026                         if (dev->rxq.qlen < qlen)
3027                                 tasklet_schedule (&dev->bh);
3028                 }
3029                 if (dev->txq.qlen < TX_QLEN (dev))
3030                         netif_wake_queue (dev->net);
3031         }
3032 }
3033
3034
3035 \f
3036 /*-------------------------------------------------------------------------
3037  *
3038  * USB Device Driver support
3039  *
3040  *-------------------------------------------------------------------------*/
3041  
3042 // precondition: never called in_interrupt
3043
3044 static void usbnet_disconnect (struct usb_interface *intf)
3045 {
3046         struct usbnet           *dev;
3047         struct usb_device       *xdev;
3048         struct net_device       *net;
3049
3050         dev = usb_get_intfdata(intf);
3051         usb_set_intfdata(intf, NULL);
3052         if (!dev)
3053                 return;
3054
3055         xdev = interface_to_usbdev (intf);
3056
3057         devinfo (dev, "unregister usbnet usb-%s-%s, %s",
3058                 xdev->bus->bus_name, xdev->devpath,
3059                 dev->driver_info->description);
3060         
3061         net = dev->net;
3062         unregister_netdev (net);
3063
3064         /* we don't hold rtnl here ... */
3065         flush_scheduled_work ();
3066
3067         if (dev->driver_info->unbind)
3068                 dev->driver_info->unbind (dev, intf);
3069
3070         free_netdev(net);
3071         usb_put_dev (xdev);
3072 }
3073
3074
3075 /*-------------------------------------------------------------------------*/
3076
3077 static struct ethtool_ops usbnet_ethtool_ops;
3078
3079 // precondition: never called in_interrupt
3080
3081 static int
3082 usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)
3083 {
3084         struct usbnet                   *dev;
3085         struct net_device               *net;
3086         struct usb_host_interface       *interface;
3087         struct driver_info              *info;
3088         struct usb_device               *xdev;
3089         int                             status;
3090
3091         info = (struct driver_info *) prod->driver_info;
3092         if (!info) {
3093                 dev_dbg (&udev->dev, "blacklisted by %s\n", driver_name);
3094                 return -ENODEV;
3095         }
3096         xdev = interface_to_usbdev (udev);
3097         interface = udev->cur_altsetting;
3098
3099         usb_get_dev (xdev);
3100
3101         status = -ENOMEM;
3102
3103         // set up our own records
3104         net = alloc_etherdev(sizeof(*dev));
3105         if (!net) {
3106                 dbg ("can't kmalloc dev");
3107                 goto out;
3108         }
3109
3110         dev = netdev_priv(net);
3111         dev->udev = xdev;
3112         dev->driver_info = info;
3113         dev->msg_level = msg_level;
3114         skb_queue_head_init (&dev->rxq);
3115         skb_queue_head_init (&dev->txq);
3116         skb_queue_head_init (&dev->done);
3117         dev->bh.func = usbnet_bh;
3118         dev->bh.data = (unsigned long) dev;
3119         INIT_WORK (&dev->kevent, kevent, dev);
3120         dev->delay.function = usbnet_bh;
3121         dev->delay.data = (unsigned long) dev;
3122         init_timer (&dev->delay);
3123
3124         SET_MODULE_OWNER (net);
3125         dev->net = net;
3126         strcpy (net->name, "usb%d");
3127         memcpy (net->dev_addr, node_id, sizeof node_id);
3128
3129 #if 0
3130 // dma_supported() is deeply broken on almost all architectures
3131         // possible with some EHCI controllers
3132         if (dma_supported (&udev->dev, 0xffffffffffffffffULL))
3133                 net->features |= NETIF_F_HIGHDMA;
3134 #endif
3135
3136         net->change_mtu = usbnet_change_mtu;
3137         net->get_stats = usbnet_get_stats;
3138         net->hard_start_xmit = usbnet_start_xmit;
3139         net->open = usbnet_open;
3140         net->stop = usbnet_stop;
3141         net->watchdog_timeo = TX_TIMEOUT_JIFFIES;
3142         net->tx_timeout = usbnet_tx_timeout;
3143         net->do_ioctl = usbnet_ioctl;
3144         net->ethtool_ops = &usbnet_ethtool_ops;
3145
3146         // allow device-specific bind/init procedures
3147         // NOTE net->name still not usable ...
3148         if (info->bind) {
3149                 status = info->bind (dev, udev);
3150                 // heuristic:  "usb%d" for links we know are two-host,
3151                 // else "eth%d" when there's reasonable doubt.  userspace
3152                 // can rename the link if it knows better.
3153                 if ((dev->driver_info->flags & FLAG_ETHER) != 0
3154                                 && (net->dev_addr [0] & 0x02) == 0)
3155                         strcpy (net->name, "eth%d");
3156         } else if (!info->in || info->out)
3157                 status = get_endpoints (dev, udev);
3158         else {
3159                 dev->in = usb_rcvbulkpipe (xdev, info->in);
3160                 dev->out = usb_sndbulkpipe (xdev, info->out);
3161                 if (!(info->flags & FLAG_NO_SETINT))
3162                         status = usb_set_interface (xdev,
3163                                 interface->desc.bInterfaceNumber,
3164                                 interface->desc.bAlternateSetting);
3165                 else
3166                         status = 0;
3167
3168         }
3169         if (status < 0)
3170                 goto out1;
3171
3172         dev->maxpacket = usb_maxpacket (dev->udev, dev->out, 1);
3173         
3174         SET_NETDEV_DEV(net, &udev->dev);
3175         status = register_netdev (net);
3176         if (status)
3177                 goto out3;
3178         devinfo (dev, "register usbnet at usb-%s-%s, %s",
3179                 xdev->bus->bus_name, xdev->devpath,
3180                 dev->driver_info->description);
3181
3182         // ok, it's ready to go.
3183         usb_set_intfdata (udev, dev);
3184
3185         // start as if the link is up
3186         netif_device_attach (net);
3187
3188         return 0;
3189
3190 out3:
3191         if (info->unbind)
3192                 info->unbind (dev, udev);
3193 out1:
3194         free_netdev(net);
3195 out:
3196         usb_put_dev(xdev);
3197         return status;
3198 }
3199
3200
3201 /*-------------------------------------------------------------------------*/
3202
3203 #ifndef HAVE_HARDWARE
3204 #error You need to configure some hardware for this driver
3205 #endif
3206
3207 /*
3208  * chip vendor names won't normally be on the cables, and
3209  * may not be on the device.
3210  */
3211
3212 static const struct usb_device_id       products [] = {
3213
3214 #ifdef  CONFIG_USB_ALI_M5632
3215 {
3216         USB_DEVICE (0x0402, 0x5632),    // ALi defaults
3217         .driver_info =  (unsigned long) &ali_m5632_info,
3218 },
3219 #endif
3220
3221 #ifdef  CONFIG_USB_AN2720
3222 {
3223         USB_DEVICE (0x0547, 0x2720),    // AnchorChips defaults
3224         .driver_info =  (unsigned long) &an2720_info,
3225 }, {
3226         USB_DEVICE (0x0547, 0x2727),    // Xircom PGUNET
3227         .driver_info =  (unsigned long) &an2720_info,
3228 },
3229 #endif
3230
3231 #ifdef  CONFIG_USB_BELKIN
3232 {
3233         USB_DEVICE (0x050d, 0x0004),    // Belkin
3234         .driver_info =  (unsigned long) &belkin_info,
3235 }, {
3236         USB_DEVICE (0x056c, 0x8100),    // eTEK
3237         .driver_info =  (unsigned long) &belkin_info,
3238 }, {
3239         USB_DEVICE (0x0525, 0x9901),    // Advance USBNET (eTEK)
3240         .driver_info =  (unsigned long) &belkin_info,
3241 },
3242 #endif
3243
3244 #ifdef CONFIG_USB_AX8817X
3245 {
3246         // Linksys USB200M
3247         USB_DEVICE (0x077b, 0x2226),
3248         .driver_info =  (unsigned long) &ax8817x_info,
3249 }, {
3250         // Netgear FA120
3251         USB_DEVICE (0x0846, 0x1040),
3252         .driver_info =  (unsigned long) &netgear_fa120_info,
3253 }, {
3254         // DLink DUB-E100
3255         USB_DEVICE (0x2001, 0x1a00),
3256         .driver_info =  (unsigned long) &dlink_dub_e100_info,
3257 }, {
3258         // Intellinet, ST Lab USB Ethernet
3259         USB_DEVICE (0x0b95, 0x1720),
3260         .driver_info =  (unsigned long) &ax8817x_info,
3261 }, {
3262         // Hawking UF200, TrendNet TU2-ET100
3263         USB_DEVICE (0x07b8, 0x420a),
3264         .driver_info =  (unsigned long) &hawking_uf200_info,
3265 }, {
3266         // Billionton Systems, USB2AR 
3267         USB_DEVICE (0x08dd, 0x90ff),
3268         .driver_info =  (unsigned long) &ax8817x_info,
3269 }, {
3270         // ATEN UC210T
3271         USB_DEVICE (0x0557, 0x2009),
3272         .driver_info =  (unsigned long) &ax8817x_info,
3273 }, {
3274         // Buffalo LUA-U2-KTX
3275         USB_DEVICE (0x0411, 0x003d),
3276         .driver_info =  (unsigned long) &ax8817x_info,
3277 }, {
3278         // Sitecom LN-029 "USB 2.0 10/100 Ethernet adapter"
3279         USB_DEVICE (0x6189, 0x182d),
3280         .driver_info =  (unsigned long) &ax8817x_info,
3281 }, {
3282         // corega FEther USB2-TX
3283         USB_DEVICE (0x07aa, 0x0017),
3284         .driver_info =  (unsigned long) &ax8817x_info,
3285 }, {
3286         // Surecom EP-1427X-2
3287         USB_DEVICE (0x1189, 0x0893),
3288         .driver_info = (unsigned long) &ax8817x_info,
3289 }, {
3290         // goodway corp usb gwusb2e
3291         USB_DEVICE (0x1631, 0x6200),
3292         .driver_info = (unsigned long) &ax8817x_info,
3293 },
3294 #endif
3295
3296 #ifdef  CONFIG_USB_EPSON2888
3297 {
3298         USB_DEVICE (0x0525, 0x2888),    // EPSON USB client
3299         .driver_info    = (unsigned long) &epson2888_info,
3300 },
3301 #endif
3302
3303 #ifdef  CONFIG_USB_GENESYS
3304 {
3305         USB_DEVICE (0x05e3, 0x0502),    // GL620USB-A
3306         .driver_info =  (unsigned long) &genelink_info,
3307 },
3308         /* NOT: USB_DEVICE (0x05e3, 0x0501),    // GL620USB
3309          * that's half duplex, not currently supported
3310          */
3311 #endif
3312
3313 #ifdef  CONFIG_USB_NET1080
3314 {
3315         USB_DEVICE (0x0525, 0x1080),    // NetChip ref design
3316         .driver_info =  (unsigned long) &net1080_info,
3317 }, {
3318         USB_DEVICE (0x06D0, 0x0622),    // Laplink Gold
3319         .driver_info =  (unsigned long) &net1080_info,
3320 },
3321 #endif
3322
3323 #ifdef CONFIG_USB_PL2301
3324 {
3325         USB_DEVICE (0x067b, 0x0000),    // PL-2301
3326         .driver_info =  (unsigned long) &prolific_info,
3327 }, {
3328         USB_DEVICE (0x067b, 0x0001),    // PL-2302
3329         .driver_info =  (unsigned long) &prolific_info,
3330 },
3331 #endif
3332
3333 #ifdef CONFIG_USB_KC2190
3334 {
3335         USB_DEVICE (0x050f, 0x0190),    // KC-190
3336         .driver_info =  (unsigned long) &kc2190_info,
3337 },
3338 #endif
3339
3340 #ifdef  CONFIG_USB_RNDIS
3341 {
3342         /* RNDIS is MSFT's un-official variant of CDC ACM */
3343         USB_INTERFACE_INFO (USB_CLASS_COMM, 2 /* ACM */, 0x0ff),
3344         .driver_info = (unsigned long) &rndis_info,
3345 },
3346 #endif
3347
3348 #ifdef  CONFIG_USB_ARMLINUX
3349 /*
3350  * SA-1100 using standard ARM Linux kernels, or compatible.
3351  * Often used when talking to Linux PDAs (iPaq, Yopy, etc).
3352  * The sa-1100 "usb-eth" driver handles the basic framing.
3353  *
3354  * PXA25x or PXA210 ...  these use a "usb-eth" driver much like
3355  * the sa1100 one, but hardware uses different endpoint numbers.
3356  *
3357  * Or the Linux "Ethernet" gadget on hardware that can't talk
3358  * CDC Ethernet (e.g., no altsettings), in either of two modes:
3359  *  - acting just like the old "usb-eth" firmware, though
3360  *    the implementation is different 
3361  *  - supporting RNDIS as the first/default configuration for
3362  *    MS-Windows interop; Linux needs to use the other config
3363  */
3364 {
3365         // 1183 = 0x049F, both used as hex values?
3366         // Compaq "Itsy" vendor/product id
3367         USB_DEVICE (0x049F, 0x505A),    // usb-eth, or compatible
3368         .driver_info =  (unsigned long) &linuxdev_info,
3369 }, {
3370         USB_DEVICE (0x0E7E, 0x1001),    // G.Mate "Yopy"
3371         .driver_info =  (unsigned long) &yopy_info,
3372 }, {
3373         USB_DEVICE (0x8086, 0x07d3),    // "blob" bootloader
3374         .driver_info =  (unsigned long) &blob_info,
3375 }, {
3376         // Linux Ethernet/RNDIS gadget on pxa210/25x/26x
3377         USB_DEVICE_VER (0x0525, 0xa4a2, 0x0203, 0x0203),
3378         .driver_info =  (unsigned long) &linuxdev_info,
3379 }, 
3380 #endif
3381
3382 #if     defined(CONFIG_USB_ZAURUS) || defined(CONFIG_USB_CDCETHER)
3383 /*
3384  * SA-1100 based Sharp Zaurus ("collie"), or compatible.
3385  * Same idea as above, but different framing.
3386  *
3387  * PXA-2xx based models are also lying-about-cdc.
3388  *
3389  * NOTE:  These entries do double-duty, serving as blacklist entries
3390  * whenever Zaurus support isn't enabled, but CDC Ethernet is.
3391  */
3392 {
3393         .match_flags    =   USB_DEVICE_ID_MATCH_INT_INFO
3394                           | USB_DEVICE_ID_MATCH_DEVICE, 
3395         .idVendor               = 0x04DD,
3396         .idProduct              = 0x8004,
3397         /* match the master interface */
3398         .bInterfaceClass        = USB_CLASS_COMM,
3399         .bInterfaceSubClass     = 6 /* Ethernet model */,
3400         .bInterfaceProtocol     = 0,
3401         .driver_info = ZAURUS_STRONGARM_INFO,
3402 }, {
3403         .match_flags    =   USB_DEVICE_ID_MATCH_INT_INFO
3404                           | USB_DEVICE_ID_MATCH_DEVICE, 
3405         .idVendor               = 0x04DD,
3406         .idProduct              = 0x8005,       /* A-300 */
3407         .bInterfaceClass        = USB_CLASS_COMM,
3408         .bInterfaceSubClass     = 6 /* Ethernet model */,
3409         .bInterfaceProtocol     = 0x00,
3410         .driver_info = ZAURUS_PXA_INFO,
3411 }, {
3412         .match_flags    =   USB_DEVICE_ID_MATCH_INT_INFO
3413                           | USB_DEVICE_ID_MATCH_DEVICE, 
3414         .idVendor               = 0x04DD,
3415         .idProduct              = 0x8006,       /* B-500/SL-5600 */
3416         .bInterfaceClass        = USB_CLASS_COMM,
3417         .bInterfaceSubClass     = 6 /* Ethernet model */,
3418         .bInterfaceProtocol     = 0x00,
3419         .driver_info = ZAURUS_PXA_INFO,
3420 }, {
3421         .match_flags    =   USB_DEVICE_ID_MATCH_INT_INFO
3422                   | USB_DEVICE_ID_MATCH_DEVICE,
3423         .idVendor               = 0x04DD,
3424         .idProduct              = 0x8007,       /* C-700 */
3425         .bInterfaceClass        = USB_CLASS_COMM,
3426         .bInterfaceSubClass     = 6 /* Ethernet model */,
3427         .bInterfaceProtocol = 0x00,
3428         .driver_info = ZAURUS_PXA_INFO,
3429 }, {
3430         .match_flags    =   USB_DEVICE_ID_MATCH_INT_INFO
3431                  | USB_DEVICE_ID_MATCH_DEVICE,
3432         .idVendor               = 0x04DD,
3433         .idProduct              = 0x9031,       /* C-750 C-760 */
3434         .bInterfaceClass        = USB_CLASS_COMM,
3435         .bInterfaceSubClass     = 6 /* Ethernet model */,
3436         .bInterfaceProtocol     = 0x00,
3437         .driver_info = ZAURUS_PXA_INFO,
3438 }, {
3439         .match_flags    =   USB_DEVICE_ID_MATCH_INT_INFO
3440                  | USB_DEVICE_ID_MATCH_DEVICE,
3441         .idVendor               = 0x04DD,
3442         .idProduct              = 0x9032,       /* SL-6000 */
3443         .bInterfaceClass        = USB_CLASS_COMM,
3444         .bInterfaceSubClass     = 6 /* Ethernet model */,
3445         .bInterfaceProtocol     = 0x00,
3446         .driver_info = ZAURUS_PXA_INFO,
3447 }, {
3448         .match_flags    =   USB_DEVICE_ID_MATCH_INT_INFO
3449                  | USB_DEVICE_ID_MATCH_DEVICE,
3450         .idVendor               = 0x04DD,
3451         .idProduct              = 0x9050,       /* C-860 */
3452         .bInterfaceClass        = USB_CLASS_COMM,
3453         .bInterfaceSubClass     = 6 /* Ethernet model */,
3454         .bInterfaceProtocol     = 0x00,
3455         .driver_info = ZAURUS_PXA_INFO,
3456 },
3457
3458 /* Olympus has some models with a Zaurus-compatible option.
3459  * R-1000 uses a FreeScale i.MXL cpu (ARMv4T)
3460  */
3461 {
3462         .match_flags    =   USB_DEVICE_ID_MATCH_INT_INFO
3463                  | USB_DEVICE_ID_MATCH_DEVICE,
3464         .idVendor               = 0x07B4,
3465         .idProduct              = 0x0F02,       /* R-1000 */
3466         .bInterfaceClass        = USB_CLASS_COMM,
3467         .bInterfaceSubClass     = 6 /* Ethernet model */,
3468         .bInterfaceProtocol     = 0x00,
3469         .driver_info = OLYMPUS_MXL_INFO,
3470 },
3471 #endif
3472
3473 #ifdef  CONFIG_USB_CDCETHER
3474 {
3475         /* CDC Ether uses two interfaces, not necessarily consecutive.
3476          * We match the main interface, ignoring the optional device
3477          * class so we could handle devices that aren't exclusively
3478          * CDC ether.
3479          *
3480          * NOTE:  this match must come AFTER entries working around
3481          * bugs/quirks in a given product (like Zaurus, above).
3482          */
3483         USB_INTERFACE_INFO (USB_CLASS_COMM, 6 /* Ethernet model */, 0),
3484         .driver_info = (unsigned long) &cdc_info,
3485 },
3486 #endif
3487
3488         { },            // END
3489 };
3490 MODULE_DEVICE_TABLE (usb, products);
3491
3492 static struct usb_driver usbnet_driver = {
3493         .owner =        THIS_MODULE,
3494         .name =         driver_name,
3495         .id_table =     products,
3496         .probe =        usbnet_probe,
3497         .disconnect =   usbnet_disconnect,
3498 };
3499
3500 /* Default ethtool_ops assigned.  Devices can override in their bind() routine */
3501 static struct ethtool_ops usbnet_ethtool_ops = {
3502         .get_drvinfo            = usbnet_get_drvinfo,
3503         .get_link               = usbnet_get_link,
3504         .get_msglevel           = usbnet_get_msglevel,
3505         .set_msglevel           = usbnet_set_msglevel,
3506 };
3507
3508 /*-------------------------------------------------------------------------*/
3509
3510 static int __init usbnet_init (void)
3511 {
3512         // compiler should optimize these out
3513         BUG_ON (sizeof (((struct sk_buff *)0)->cb)
3514                         < sizeof (struct skb_data));
3515 #ifdef  CONFIG_USB_CDCETHER
3516         BUG_ON ((sizeof (((struct usbnet *)0)->data)
3517                         < sizeof (struct cdc_state)));
3518 #endif
3519
3520         random_ether_addr(node_id);
3521
3522         return usb_register(&usbnet_driver);
3523 }
3524 module_init (usbnet_init);
3525
3526 static void __exit usbnet_exit (void)
3527 {
3528         usb_deregister (&usbnet_driver);
3529 }
3530 module_exit (usbnet_exit);
3531
3532 MODULE_AUTHOR ("David Brownell <dbrownell@users.sourceforge.net>");
3533 MODULE_DESCRIPTION ("USB Host-to-Host Link Drivers (numerous vendors)");
3534 MODULE_LICENSE ("GPL");