usbnet.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:50k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * USB Host-to-Host Links
  3.  * Copyright (C) 2000-2001 by David Brownell <dbrownell@users.sourceforge.net>
  4.  */
  5. /*
  6.  * This is used for "USB networking", connecting USB hosts as peers.
  7.  *
  8.  * It can be used with USB "network cables", for IP-over-USB communications;
  9.  * Ethernet speeds without the Ethernet.  USB devices (including some PDAs)
  10.  * can support such links directly, replacing device-specific protocols
  11.  * with Internet standard ones.
  12.  *
  13.  * The links can be bridged using the Ethernet bridging (net/bridge)
  14.  * support as appropriate.  Devices currently supported include:
  15.  *
  16.  * - AnchorChip 2720
  17.  * - Belkin, eTEK (interops with Win32 drivers)
  18.  * - GeneSys GL620USB-A
  19.  * - "Linux Devices" (like iPaq and similar SA-1100 based PDAs)
  20.  * - NetChip 1080 (interoperates with NetChip Win32 drivers)
  21.  * - Prolific PL-2301/2302 (replaces "plusb" driver)
  22.  *
  23.  * USB devices can implement their side of this protocol at the cost
  24.  * of two bulk endpoints; it's not restricted to "cable" applications.
  25.  * See the LINUXDEV support.
  26.  *
  27.  * 
  28.  * TODO:
  29.  *
  30.  * This needs to be retested for bulk queuing problems ... earlier versions
  31.  * seemed to find different types of problems in each HCD.  Once they're fixed,
  32.  * re-enable queues to get higher bandwidth utilization (without needing
  33.  * to tweak MTU for larger packets).
  34.  *
  35.  * Add support for more "network cable" chips; interop with their Win32
  36.  * drivers may be a good thing.  Test the AnchorChip 2720 support..
  37.  * Figure out the initialization protocol used by the Prolific chips,
  38.  * for better robustness ... there's some powerup/reset handshake that's
  39.  * needed when only one end reboots.
  40.  *
  41.  * Use interrupt on PL230x to detect peer connect/disconnect, and call
  42.  * netif_carrier_{on,off} (?) appropriately.  For Net1080, detect peer
  43.  * connect/disconnect with async control messages.
  44.  *
  45.  * Find some way to report "peer connected" network hotplug events; it'll
  46.  * likely mean updating the networking layer.  (This has been discussed
  47.  * on the netdev list...)
  48.  *
  49.  * Craft smarter hotplug policy scripts ... ones that know how to arrange
  50.  * bridging with "brctl", and can handle static and dynamic ("pump") setups.
  51.  * Use those "peer connected" events.
  52.  *
  53.  *
  54.  * CHANGELOG:
  55.  *
  56.  * 13-sep-2000 experimental, new
  57.  * 10-oct-2000 usb_device_id table created. 
  58.  * 28-oct-2000 misc fixes; mostly, discard more TTL-mangled rx packets.
  59.  * 01-nov-2000 usb_device_id table and probing api update by
  60.  * Adam J. Richter <adam@yggdrasil.com>.
  61.  * 18-dec-2000 (db) tx watchdog, "net1080" renaming to "usbnet", device_info
  62.  * and prolific support, isolate net1080-specific bits, cleanup.
  63.  * fix unlink_urbs oops in D3 PM resume code path.
  64.  * 02-feb-2001 (db) fix tx skb sharing, packet length, match_flags, ...
  65.  * 08-feb-2001 stubbed in "linuxdev", maybe the SA-1100 folk can use it;
  66.  * AnchorChips 2720 support (from spec) for testing;
  67.  * fix bit-ordering problem with ethernet multicast addr
  68.  * 19-feb-2001  Support for clearing halt conditions. SA1100 UDC support
  69.  * updates. Oleg Drokin (green@iXcelerator.com)
  70.  * 25-mar-2001 More SA-1100 updates, including workaround for ip problem
  71.  * expecting cleared skb->cb and framing change to match latest
  72.  * handhelds.org version (Oleg).  Enable device IDs from the
  73.  * Win32 Belkin driver; other cleanups (db).
  74.  * 16-jul-2001 Bugfixes for uhci oops-on-unplug, Belkin support, various
  75.  * cleanups for problems not yet seen in the field. (db)
  76.  * 17-oct-2001 Handle "Advance USBNET" product, like Belkin/eTEK devices,
  77.  * from Ioannis Mavroukakis <i.mavroukakis@btinternet.com>;
  78.  * rx unlinks somehow weren't async; minor cleanup.
  79.  * 03-nov-2001 Merged GeneSys driver; original code from Jiun-Jie Huang
  80.  * <huangjj@genesyslogic.com.tw>, updated by Stanislav Brabec
  81.  * <utx@penguin.cz>.  Made framing options (NetChip/GeneSys)
  82.  * tie mostly to (sub)driver info.  Workaround some PL-2302
  83.  * chips that seem to reject SET_INTERFACE requests.
  84.  *
  85.  *-------------------------------------------------------------------------*/
  86. #include <linux/config.h>
  87. #include <linux/module.h>
  88. #include <linux/kmod.h>
  89. #include <linux/sched.h>
  90. #include <linux/init.h>
  91. #include <linux/netdevice.h>
  92. #include <linux/etherdevice.h>
  93. #include <linux/random.h>
  94. #include <asm/unaligned.h>
  95. // #define DEBUG // error path messages, extra info
  96. // #define VERBOSE // more; success messages
  97. // #define REALLY_QUEUE
  98. #if !defined (DEBUG) && defined (CONFIG_USB_DEBUG)
  99. #   define DEBUG
  100. #endif
  101. #include <linux/usb.h>
  102. #define CONFIG_USB_AN2720
  103. #define CONFIG_USB_BELKIN
  104. #define CONFIG_USB_GENESYS
  105. #define CONFIG_USB_LINUXDEV
  106. #define CONFIG_USB_NET1080
  107. #define CONFIG_USB_PL2301
  108. /*-------------------------------------------------------------------------*/
  109. /*
  110.  * Nineteen USB 1.1 max size bulk transactions per frame (ms), max.
  111.  * Several dozen bytes of IPv4 data can fit in two such transactions.
  112.  * One maximum size Ethernet packet takes twenty four of them.
  113.  */
  114. #ifdef REALLY_QUEUE
  115. #define RX_QLEN 4
  116. #define TX_QLEN 4
  117. #else
  118. #define RX_QLEN 1
  119. #define TX_QLEN 1
  120. #endif
  121. // packets are always ethernet inside
  122. // ... except they can be bigger (limit of 64K with NetChip framing)
  123. #define MIN_PACKET sizeof(struct ethhdr)
  124. #define MAX_PACKET 32768
  125. // reawaken network queue this soon after stopping; else watchdog barks
  126. #define TX_TIMEOUT_JIFFIES (5*HZ)
  127. // for vendor-specific control operations
  128. #define CONTROL_TIMEOUT_MS (500) /* msec */
  129. #define CONTROL_TIMEOUT_JIFFIES ((CONTROL_TIMEOUT_MS * HZ)/1000)
  130. // between wakeups
  131. #define UNLINK_TIMEOUT_JIFFIES ((3  /*ms*/ * HZ)/1000)
  132. /*-------------------------------------------------------------------------*/
  133. // list of all devices we manage
  134. static DECLARE_MUTEX (usbnet_mutex);
  135. static LIST_HEAD (usbnet_list);
  136. // randomly generated ethernet address
  137. static u8 node_id [ETH_ALEN];
  138. // state we keep for each device we handle
  139. struct usbnet {
  140. // housekeeping
  141. struct usb_device *udev;
  142. struct driver_info *driver_info;
  143. struct semaphore mutex;
  144. struct list_head dev_list;
  145. wait_queue_head_t *wait;
  146. // protocol/interface state
  147. struct net_device net;
  148. struct net_device_stats stats;
  149. #ifdef CONFIG_USB_NET1080
  150. u16 packet_id;
  151. #endif
  152. // various kinds of pending driver work
  153. struct sk_buff_head rxq;
  154. struct sk_buff_head txq;
  155. struct sk_buff_head done;
  156. struct tasklet_struct bh;
  157. struct tq_struct ctrl_task;
  158. };
  159. // device-specific info used by the driver
  160. struct driver_info {
  161. char *description;
  162. int flags;
  163. #define FLAG_FRAMING_NC 0x0001 /* guard against device dropouts */ 
  164. #define FLAG_FRAMING_GL 0x0002 /* genelink batches packets */
  165. #define FLAG_NO_SETINT 0x0010 /* device can't set_interface() */
  166. /* reset device ... can sleep */
  167. int (*reset)(struct usbnet *);
  168. /* see if peer is connected ... can sleep */
  169. int (*check_connect)(struct usbnet *);
  170. /* fixup rx packet (strip framing) */
  171. int (*rx_fixup)(struct usbnet *dev, struct sk_buff *skb);
  172. /* fixup tx packet (add framing) */
  173. struct sk_buff *(*tx_fixup)(struct usbnet *dev,
  174. struct sk_buff *skb, int flags);
  175. // FIXME -- also an interrupt mechanism
  176. // useful for at least PL2301/2302 and GL620USB-A
  177. /* framework currently "knows" bulk EPs talk packets */
  178. int in; /* rx endpoint */
  179. int out; /* tx endpoint */
  180. int epsize;
  181. };
  182. #define EP_SIZE(usbnet) ((usbnet)->driver_info->epsize)
  183. // we record the state for each of our queued skbs
  184. enum skb_state {
  185. illegal = 0,
  186. tx_start, tx_done,
  187. rx_start, rx_done, rx_cleanup
  188. };
  189. struct skb_data { // skb->cb is one of these
  190. struct urb *urb;
  191. struct usbnet *dev;
  192. enum skb_state state;
  193. size_t length;
  194. };
  195. #define mutex_lock(x) down(x)
  196. #define mutex_unlock(x) up(x)
  197. #define RUN_CONTEXT (in_irq () ? "in_irq" 
  198. : (in_interrupt () ? "in_interrupt" : "can sleep"))
  199. /*-------------------------------------------------------------------------*/
  200. #ifdef DEBUG
  201. #define devdbg(usbnet, fmt, arg...) 
  202. printk(KERN_DEBUG "%s: " fmt "n" , (usbnet)->net.name, ## arg)
  203. #else
  204. #define devdbg(usbnet, fmt, arg...) do {} while(0)
  205. #endif
  206. #define devinfo(usbnet, fmt, arg...) 
  207. printk(KERN_INFO "%s: " fmt "n" , (usbnet)->net.name, ## arg)
  208. #ifdef CONFIG_USB_AN2720
  209. /*-------------------------------------------------------------------------
  210.  *
  211.  * AnchorChips 2720 driver ... http://www.cypress.com
  212.  *
  213.  * This doesn't seem to have a way to detect whether the peer is
  214.  * connected, or need any reset handshaking.  It's got pretty big
  215.  * internal buffers (handles most of a frame's worth of data).
  216.  * Chip data sheets don't describe any vendor control messages.
  217.  *
  218.  *-------------------------------------------------------------------------*/
  219. static const struct driver_info an2720_info = {
  220. description: "AnchorChips/Cypress 2720",
  221. // no reset available!
  222. // no check_connect available!
  223. in: 2, out: 2, // direction distinguishes these
  224. epsize: 64,
  225. };
  226. #endif /* CONFIG_USB_AN2720 */
  227. #ifdef CONFIG_USB_BELKIN
  228. /*-------------------------------------------------------------------------
  229.  *
  230.  * Belkin F5U104 ... two NetChip 2280 devices + Atmel microcontroller
  231.  *
  232.  * ... also two eTEK designs, including one sold as "Advance USBNET"
  233.  *
  234.  *-------------------------------------------------------------------------*/
  235. static const struct driver_info belkin_info = {
  236. description: "Belkin, eTEK, or compatible",
  237. in: 1, out: 1, // direction distinguishes these
  238. epsize: 64,
  239. };
  240. #endif /* CONFIG_USB_BELKIN */
  241. #ifdef CONFIG_USB_GENESYS
  242. /*-------------------------------------------------------------------------
  243.  *
  244.  * GeneSys GL620USB-A (www.genesyslogic.com.tw)
  245.  *
  246.  * ... should partially interop with the Win32 driver for this hardware
  247.  * The GeneSys docs imply there's some NDIS issue motivating this framing.
  248.  *
  249.  *-------------------------------------------------------------------------*/
  250. // control msg write command
  251. #define GENELINK_CONNECT_WRITE 0xF0
  252. // interrupt pipe index
  253. #define GENELINK_INTERRUPT_PIPE 0x03
  254. // interrupt read buffer size
  255. #define INTERRUPT_BUFSIZE 0x08
  256. // interrupt pipe interval value
  257. #define GENELINK_INTERRUPT_INTERVAL 0x10
  258. // max transmit packet number per transmit
  259. #define GL_MAX_TRANSMIT_PACKETS 32
  260. // max packet length
  261. #define GL_MAX_PACKET_LEN 1514
  262. // max receive buffer size 
  263. #define GL_RCV_BUF_SIZE
  264. (((GL_MAX_PACKET_LEN + 4) * GL_MAX_TRANSMIT_PACKETS) + 4)
  265. struct gl_packet {
  266. u32 packet_length;
  267. char packet_data [1];
  268. };
  269. struct gl_header {
  270. u32 packet_count;
  271. struct gl_packet packets;
  272. };
  273. #ifdef GENLINK_ACK
  274. // FIXME:  this code is incomplete, not debugged; it doesn't
  275. // handle interrupts correctly.  interrupts should be generic
  276. // code like all other device I/O, anyway.
  277. struct gl_priv { 
  278. struct urb *irq_urb;
  279. char irq_buf [INTERRUPT_BUFSIZE];
  280. };
  281. static inline int gl_control_write (struct usbnet *dev, u8 request, u16 value)
  282. {
  283. int retval;
  284. retval = usb_control_msg (dev->udev,
  285.       usb_sndctrlpipe (dev->udev, 0),
  286.       request,
  287.       USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
  288.       value, 
  289.       0, // index
  290.       0, // data buffer
  291.       0, // size
  292.       CONTROL_TIMEOUT_JIFFIES);
  293. return retval;
  294. }
  295. static void gl_interrupt_complete (struct urb *urb)
  296. {
  297. int status = urb->status;
  298. if (status)
  299. dbg ("gl_interrupt_complete fail - %X", status);
  300. else
  301. dbg ("gl_interrupt_complete success...");
  302. }
  303. static int gl_interrupt_read (struct usbnet *dev)
  304. {
  305. struct gl_priv *priv = dev->priv_data;
  306. int retval;
  307. // issue usb interrupt read
  308. if (priv && priv->irq_urb) {
  309. // submit urb
  310. if ((retval = usb_submit_urb (priv->irq_urb)) != 0)
  311. dbg ("gl_interrupt_read: submit fail - %X...", retval);
  312. else
  313. dbg ("gl_interrupt_read: submit success...");
  314. }
  315. return 0;
  316. }
  317. // check whether another side is connected
  318. static int genelink_check_connect (struct usbnet *dev)
  319. {
  320. int retval;
  321. dbg ("genelink_check_connect...");
  322. // detect whether another side is connected
  323. if ((retval = gl_control_write (dev, GENELINK_CONNECT_WRITE, 0)) != 0) {
  324. dbg ("%s: genelink_check_connect write fail - %X",
  325. dev->net.name, retval);
  326. return retval;
  327. }
  328. // usb interrupt read to ack another side 
  329. if ((retval = gl_interrupt_read (dev)) != 0) {
  330. dbg ("%s: genelink_check_connect read fail - %X",
  331. dev->net.name, retval);
  332. return retval;
  333. }
  334. dbg ("%s: genelink_check_connect read success", dev->net.name);
  335. return 0;
  336. }
  337. // allocate and initialize the private data for genelink
  338. static int genelink_init (struct usbnet *dev)
  339. {
  340. struct gl_priv *priv;
  341. // allocate the private data structure
  342. if ((priv = kmalloc (sizeof *priv, GFP_KERNEL)) == 0) {
  343. dbg ("%s: cannot allocate private data per device",
  344. dev->net.name);
  345. return -ENOMEM;
  346. }
  347. // allocate irq urb
  348. if ((priv->irq_urb = usb_alloc_urb (0)) == 0) {
  349. dbg ("%s: cannot allocate private irq urb per device",
  350. dev->net.name);
  351. kfree (priv);
  352. return -ENOMEM;
  353. }
  354. // fill irq urb
  355. FILL_INT_URB (priv->irq_urb, dev->udev,
  356. usb_rcvintpipe (dev->udev, GENELINK_INTERRUPT_PIPE),
  357. priv->irq_buf, INTERRUPT_BUFSIZE,
  358. gl_interrupt_complete, 0,
  359. GENELINK_INTERRUPT_INTERVAL);
  360. // set private data pointer
  361. dev->priv_data = priv;
  362. return 0;
  363. }
  364. // release the private data
  365. static int genelink_free (struct usbnet *dev)
  366. {
  367. struct gl_priv *priv = dev->priv_data;
  368. if (!priv) 
  369. return 0;
  370. // FIXME:  can't cancel here; it's synchronous, and
  371. // should have happened earlier in any case (interrupt
  372. // handling needs to be generic)
  373. // cancel irq urb first
  374. usb_unlink_urb (priv->irq_urb);
  375. // free irq urb
  376. usb_free_urb (priv->irq_urb);
  377. // free the private data structure
  378. kfree (priv);
  379. return 0;
  380. }
  381. #else
  382. static int genelink_check_connect (struct usbnet *dev)
  383. {
  384. dbg ("%s: assuming peer is connected", dev->net.name);
  385. return 0;
  386. }
  387. #endif
  388. // reset the device status
  389. static int genelink_reset (struct usbnet *dev)
  390. {
  391. // we don't need to reset, just return 0
  392. return 0;
  393. }
  394. static int genelink_rx_fixup (struct usbnet *dev, struct sk_buff *skb)
  395. {
  396. struct gl_header *header;
  397. struct gl_packet *packet;
  398. struct sk_buff *gl_skb;
  399. int status;
  400. u32 size;
  401. header = (struct gl_header *) skb->data;
  402. // get the packet count of the received skb
  403. le32_to_cpus (&header->packet_count);
  404. if ((header->packet_count > GL_MAX_TRANSMIT_PACKETS)
  405. || (header->packet_count < 0)) {
  406. dbg ("genelink: illegal received packet count %d",
  407. header->packet_count);
  408. return 0;
  409. }
  410. // set the current packet pointer to the first packet
  411. packet = &header->packets;
  412. // decrement the length for the packet count size 4 bytes
  413. skb_pull (skb, 4);
  414. while (header->packet_count > 1) {
  415. // get the packet length
  416. size = packet->packet_length;
  417. // this may be a broken packet
  418. if (size > GL_MAX_PACKET_LEN) {
  419. dbg ("genelink: illegal rx length %d", size);
  420. return 0;
  421. }
  422. // allocate the skb for the individual packet
  423. gl_skb = alloc_skb (size, GFP_ATOMIC);
  424. if (gl_skb == 0)
  425. return 0;
  426. // copy the packet data to the new skb
  427. memcpy (gl_skb->data, packet->packet_data, size);
  428. // set skb data size
  429. gl_skb->len = size;
  430. gl_skb->dev = &dev->net;
  431. // determine the packet's protocol ID
  432. gl_skb->protocol = eth_type_trans (gl_skb, &dev->net);
  433. // update the status
  434. dev->stats.rx_packets++;
  435. dev->stats.rx_bytes += size;
  436. // notify os of the received packet
  437. status = netif_rx (gl_skb);
  438. // advance to the next packet
  439. packet = (struct gl_packet *)
  440. &packet->packet_data [size];
  441. header->packet_count--;
  442. // shift the data pointer to the next gl_packet
  443. skb_pull (skb, size + 4);
  444. }
  445. // skip the packet length field 4 bytes
  446. skb_pull (skb, 4);
  447. if (skb->len > GL_MAX_PACKET_LEN) {
  448. dbg ("genelink: illegal rx length %d", skb->len);
  449. return 0;
  450. }
  451. return 1;
  452. }
  453. static struct sk_buff *
  454. genelink_tx_fixup (struct usbnet *dev, struct sk_buff *skb, int flags)
  455. {
  456. int  padlen;
  457. int length = skb->len;
  458. int headroom = skb_headroom (skb);
  459. int tailroom = skb_tailroom (skb);
  460. u32 *packet_count;
  461. u32 *packet_len;
  462. // FIXME:  magic numbers, bleech
  463. padlen = ((skb->len + (4 + 4*1)) % 64) ? 0 : 1;
  464. if ((!skb_cloned (skb))
  465. && ((headroom + tailroom) >= (padlen + (4 + 4*1)))) {
  466. if ((headroom < (4 + 4*1)) || (tailroom < padlen)) {
  467. skb->data = memmove (skb->head + (4 + 4*1),
  468.      skb->data, skb->len);
  469. skb->tail = skb->data + skb->len;
  470. }
  471. } else {
  472. struct sk_buff *skb2;
  473. skb2 = skb_copy_expand (skb, (4 + 4*1) , padlen, flags);
  474. dev_kfree_skb_any (skb);
  475. skb = skb2;
  476. }
  477. // attach the packet count to the header
  478. packet_count = (u32 *) skb_push (skb, (4 + 4*1));
  479. packet_len = packet_count + 1;
  480. // FIXME little endian?
  481. *packet_count = 1;
  482. *packet_len = length;
  483. // add padding byte
  484. if ((skb->len % EP_SIZE (dev)) == 0)
  485. skb_put (skb, 1);
  486. return skb;
  487. }
  488. static const struct driver_info genelink_info = {
  489. description: "Genesys GeneLink",
  490. flags: FLAG_FRAMING_GL | FLAG_NO_SETINT,
  491. reset: genelink_reset,
  492. check_connect: genelink_check_connect,
  493. rx_fixup: genelink_rx_fixup,
  494. tx_fixup: genelink_tx_fixup,
  495. in: 1, out: 2,
  496. epsize: 64,
  497. };
  498. #endif /* CONFIG_USB_GENESYS */
  499. #ifdef CONFIG_USB_LINUXDEV
  500. /*-------------------------------------------------------------------------
  501.  *
  502.  * This could talk to a device that uses Linux, such as a PDA or
  503.  * an embedded system, or in fact to any "smart" device using this
  504.  * particular mapping of USB and Ethernet.
  505.  *
  506.  * Such a Linux host would need a "USB Device Controller" hardware
  507.  * (not "USB Host Controller"), and a network driver talking to that
  508.  * hardware.
  509.  *
  510.  * One example is Intel's SA-1100 chip, which integrates basic USB
  511.  * support (arch/arm/sa1100/usb-eth.c); it's used in the iPaq PDA.
  512.  *
  513.  *-------------------------------------------------------------------------*/
  514. static const struct driver_info linuxdev_info = {
  515. description: "Linux Device",
  516. // no reset defined (yet?)
  517. // no check_connect needed!
  518. in: 2, out: 1,
  519. epsize: 64,
  520. };
  521. #endif /* CONFIG_USB_LINUXDEV */
  522. #ifdef CONFIG_USB_NET1080
  523. /*-------------------------------------------------------------------------
  524.  *
  525.  * Netchip 1080 driver ... http://www.netchip.com
  526.  * Used in LapLink cables
  527.  *
  528.  *-------------------------------------------------------------------------*/
  529. /*
  530.  * NetChip framing of ethernet packets, supporting additional error
  531.  * checks for links that may drop bulk packets from inside messages.
  532.  * Odd USB length == always short read for last usb packet.
  533.  * - nc_header
  534.  * - Ethernet header (14 bytes)
  535.  * - payload
  536.  * - (optional padding byte, if needed so length becomes odd)
  537.  * - nc_trailer
  538.  *
  539.  * This framing is to be avoided for non-NetChip devices.
  540.  */
  541. struct nc_header { // packed:
  542. u16 hdr_len; // sizeof nc_header (LE, all)
  543. u16 packet_len; // payload size (including ethhdr)
  544. u16 packet_id; // detects dropped packets
  545. #define MIN_HEADER 6
  546. // all else is optional, and must start with:
  547. // u16 vendorId; // from usb-if
  548. // u16 productId;
  549. } __attribute__((__packed__));
  550. #define PAD_BYTE ((unsigned char)0xAC)
  551. struct nc_trailer {
  552. u16 packet_id;
  553. } __attribute__((__packed__));
  554. // packets may use FLAG_FRAMING_NC and optional pad
  555. #define FRAMED_SIZE(mtu) (sizeof (struct nc_header) 
  556. + sizeof (struct ethhdr) 
  557. + (mtu) 
  558. + 1 
  559. + sizeof (struct nc_trailer))
  560. #define MIN_FRAMED FRAMED_SIZE(0)
  561. /*
  562.  * Zero means no timeout; else, how long a 64 byte bulk packet may be queued
  563.  * before the hardware drops it.  If that's done, the driver will need to
  564.  * frame network packets to guard against the dropped USB packets.  The win32
  565.  * driver sets this for both sides of the link.
  566.  */
  567. #define NC_READ_TTL_MS ((u8)255) // ms
  568. /*
  569.  * We ignore most registers and EEPROM contents.
  570.  */
  571. #define REG_USBCTL ((u8)0x04)
  572. #define REG_TTL ((u8)0x10)
  573. #define REG_STATUS ((u8)0x11)
  574. /*
  575.  * Vendor specific requests to read/write data
  576.  */
  577. #define REQUEST_REGISTER ((u8)0x10)
  578. #define REQUEST_EEPROM ((u8)0x11)
  579. static int
  580. nc_vendor_read (struct usbnet *dev, u8 req, u8 regnum, u16 *retval_ptr)
  581. {
  582. int status = usb_control_msg (dev->udev,
  583. usb_rcvctrlpipe (dev->udev, 0),
  584. req,
  585. USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
  586. 0, regnum,
  587. retval_ptr, sizeof *retval_ptr,
  588. CONTROL_TIMEOUT_JIFFIES);
  589. if (status > 0)
  590. status = 0;
  591. if (!status)
  592. le16_to_cpus (retval_ptr);
  593. return status;
  594. }
  595. static inline int
  596. nc_register_read (struct usbnet *dev, u8 regnum, u16 *retval_ptr)
  597. {
  598. return nc_vendor_read (dev, REQUEST_REGISTER, regnum, retval_ptr);
  599. }
  600. // no retval ... can become async, usable in_interrupt()
  601. static void
  602. nc_vendor_write (struct usbnet *dev, u8 req, u8 regnum, u16 value)
  603. {
  604. usb_control_msg (dev->udev,
  605. usb_sndctrlpipe (dev->udev, 0),
  606. req,
  607. USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
  608. value, regnum,
  609. 0, 0, // data is in setup packet
  610. CONTROL_TIMEOUT_JIFFIES);
  611. }
  612. static inline void
  613. nc_register_write (struct usbnet *dev, u8 regnum, u16 value)
  614. {
  615. nc_vendor_write (dev, REQUEST_REGISTER, regnum, value);
  616. }
  617. #if 0
  618. static void nc_dump_registers (struct usbnet *dev)
  619. {
  620. u8 reg;
  621. u16 *vp = kmalloc (sizeof (u16));
  622. if (!vp) {
  623. dbg ("no memory?");
  624. return;
  625. }
  626. dbg ("%s registers:", dev->net.name);
  627. for (reg = 0; reg < 0x20; reg++) {
  628. int retval;
  629. // reading some registers is trouble
  630. if (reg >= 0x08 && reg <= 0xf)
  631. continue;
  632. if (reg >= 0x12 && reg <= 0x1e)
  633. continue;
  634. retval = nc_register_read (dev, reg, vp);
  635. if (retval < 0)
  636. dbg ("%s reg [0x%x] ==> error %d",
  637. dev->net.name, reg, retval);
  638. else
  639. dbg ("%s reg [0x%x] = 0x%x",
  640. dev->net.name, reg, *vp);
  641. }
  642. kfree (vp);
  643. }
  644. #endif
  645. /*-------------------------------------------------------------------------*/
  646. /*
  647.  * Control register
  648.  */
  649. #define USBCTL_WRITABLE_MASK 0x1f0f
  650. // bits 15-13 reserved, r/o
  651. #define USBCTL_ENABLE_LANG (1 << 12)
  652. #define USBCTL_ENABLE_MFGR (1 << 11)
  653. #define USBCTL_ENABLE_PROD (1 << 10)
  654. #define USBCTL_ENABLE_SERIAL (1 << 9)
  655. #define USBCTL_ENABLE_DEFAULTS (1 << 8)
  656. // bits 7-4 reserved, r/o
  657. #define USBCTL_FLUSH_OTHER (1 << 3)
  658. #define USBCTL_FLUSH_THIS (1 << 2)
  659. #define USBCTL_DISCONN_OTHER (1 << 1)
  660. #define USBCTL_DISCONN_THIS (1 << 0)
  661. static inline void nc_dump_usbctl (struct usbnet *dev, u16 usbctl)
  662. {
  663. #ifdef DEBUG
  664. devdbg (dev, "net1080 %03d/%03d usbctl 0x%x:%s%s%s%s%s;"
  665. " this%s%s;"
  666. " other%s%s; r/o 0x%x",
  667. dev->udev->bus->busnum, dev->udev->devnum,
  668. usbctl,
  669. (usbctl & USBCTL_ENABLE_LANG) ? " lang" : "",
  670. (usbctl & USBCTL_ENABLE_MFGR) ? " mfgr" : "",
  671. (usbctl & USBCTL_ENABLE_PROD) ? " prod" : "",
  672. (usbctl & USBCTL_ENABLE_SERIAL) ? " serial" : "",
  673. (usbctl & USBCTL_ENABLE_DEFAULTS) ? " defaults" : "",
  674. (usbctl & USBCTL_FLUSH_OTHER) ? " FLUSH" : "",
  675. (usbctl & USBCTL_DISCONN_OTHER) ? " DIS" : "",
  676. (usbctl & USBCTL_FLUSH_THIS) ? " FLUSH" : "",
  677. (usbctl & USBCTL_DISCONN_THIS) ? " DIS" : "",
  678. usbctl & ~USBCTL_WRITABLE_MASK
  679. );
  680. #endif
  681. }
  682. /*-------------------------------------------------------------------------*/
  683. /*
  684.  * Status register
  685.  */
  686. #define STATUS_PORT_A (1 << 15)
  687. #define STATUS_CONN_OTHER (1 << 14)
  688. #define STATUS_SUSPEND_OTHER (1 << 13)
  689. #define STATUS_MAILBOX_OTHER (1 << 12)
  690. #define STATUS_PACKETS_OTHER(n) (((n) >> 8) && 0x03)
  691. #define STATUS_CONN_THIS (1 << 6)
  692. #define STATUS_SUSPEND_THIS (1 << 5)
  693. #define STATUS_MAILBOX_THIS (1 << 4)
  694. #define STATUS_PACKETS_THIS(n) (((n) >> 0) && 0x03)
  695. #define STATUS_UNSPEC_MASK 0x0c8c
  696. #define STATUS_NOISE_MASK  ((u16)~(0x0303|STATUS_UNSPEC_MASK))
  697. static inline void nc_dump_status (struct usbnet *dev, u16 status)
  698. {
  699. #ifdef DEBUG
  700. devdbg (dev, "net1080 %03d/%03d status 0x%x:"
  701. " this (%c) PKT=%d%s%s%s;"
  702. " other PKT=%d%s%s%s; unspec 0x%x",
  703. dev->udev->bus->busnum, dev->udev->devnum,
  704. status,
  705. // XXX the packet counts don't seem right
  706. // (1 at reset, not 0); maybe UNSPEC too
  707. (status & STATUS_PORT_A) ? 'A' : 'B',
  708. STATUS_PACKETS_THIS (status),
  709. (status & STATUS_CONN_THIS) ? " CON" : "",
  710. (status & STATUS_SUSPEND_THIS) ? " SUS" : "",
  711. (status & STATUS_MAILBOX_THIS) ? " MBOX" : "",
  712. STATUS_PACKETS_OTHER (status),
  713. (status & STATUS_CONN_OTHER) ? " CON" : "",
  714. (status & STATUS_SUSPEND_OTHER) ? " SUS" : "",
  715. (status & STATUS_MAILBOX_OTHER) ? " MBOX" : "",
  716. status & STATUS_UNSPEC_MASK
  717. );
  718. #endif
  719. }
  720. /*-------------------------------------------------------------------------*/
  721. /*
  722.  * TTL register
  723.  */
  724. #define TTL_THIS(ttl) (0x00ff & ttl)
  725. #define TTL_OTHER(ttl) (0x00ff & (ttl >> 8))
  726. #define MK_TTL(this,other) ((u16)(((other)<<8)|(0x00ff&(this))))
  727. static inline void nc_dump_ttl (struct usbnet *dev, u16 ttl)
  728. {
  729. #ifdef DEBUG
  730. devdbg (dev, "net1080 %03d/%03d ttl 0x%x this = %d, other = %d",
  731. dev->udev->bus->busnum, dev->udev->devnum,
  732. ttl,
  733. TTL_THIS (ttl),
  734. TTL_OTHER (ttl)
  735. );
  736. #endif
  737. }
  738. /*-------------------------------------------------------------------------*/
  739. static int net1080_reset (struct usbnet *dev)
  740. {
  741. u16 usbctl, status, ttl;
  742. u16 *vp = kmalloc (sizeof (u16), GFP_KERNEL);
  743. int retval;
  744. if (!vp)
  745. return -ENOMEM;
  746. // nc_dump_registers (dev);
  747. if ((retval = nc_register_read (dev, REG_STATUS, vp)) < 0) {
  748. dbg ("can't read dev %d status: %d", dev->udev->devnum, retval);
  749. goto done;
  750. }
  751. status = *vp;
  752. // nc_dump_status (dev, status);
  753. if ((retval = nc_register_read (dev, REG_USBCTL, vp)) < 0) {
  754. dbg ("can't read USBCTL, %d", retval);
  755. goto done;
  756. }
  757. usbctl = *vp;
  758. // nc_dump_usbctl (dev, usbctl);
  759. nc_register_write (dev, REG_USBCTL,
  760. USBCTL_FLUSH_THIS | USBCTL_FLUSH_OTHER);
  761. if ((retval = nc_register_read (dev, REG_TTL, vp)) < 0) {
  762. dbg ("can't read TTL, %d", retval);
  763. goto done;
  764. }
  765. ttl = *vp;
  766. // nc_dump_ttl (dev, ttl);
  767. nc_register_write (dev, REG_TTL,
  768. MK_TTL (NC_READ_TTL_MS, TTL_OTHER (ttl)) );
  769. dbg ("%s: assigned TTL, %d ms", dev->net.name, NC_READ_TTL_MS);
  770. devdbg (dev, "port %c, peer %sconnected",
  771. (status & STATUS_PORT_A) ? 'A' : 'B',
  772. (status & STATUS_CONN_OTHER) ? "" : "dis"
  773. );
  774. retval = 0;
  775. done:
  776. kfree (vp);
  777. return retval;
  778. }
  779. static int net1080_check_connect (struct usbnet *dev)
  780. {
  781. int retval;
  782. u16 status;
  783. u16 *vp = kmalloc (sizeof (u16), GFP_KERNEL);
  784. if (!vp)
  785. return -ENOMEM;
  786. retval = nc_register_read (dev, REG_STATUS, vp);
  787. status = *vp;
  788. kfree (vp);
  789. if (retval != 0) {
  790. dbg ("%s net1080_check_conn read - %d", dev->net.name, retval);
  791. return retval;
  792. }
  793. if ((status & STATUS_CONN_OTHER) != STATUS_CONN_OTHER)
  794. return -ENOLINK;
  795. return 0;
  796. }
  797. static int net1080_rx_fixup (struct usbnet *dev, struct sk_buff *skb)
  798. {
  799. struct nc_header *header;
  800. struct nc_trailer *trailer;
  801. if (!(skb->len & 0x01)
  802. || MIN_FRAMED > skb->len
  803. || skb->len > FRAMED_SIZE (dev->net.mtu)) {
  804. dev->stats.rx_frame_errors++;
  805. dbg ("rx framesize %d range %d..%d mtu %d", skb->len,
  806. MIN_FRAMED, FRAMED_SIZE (dev->net.mtu),
  807. dev->net.mtu
  808. );
  809. return 0;
  810. }
  811. header = (struct nc_header *) skb->data;
  812. le16_to_cpus (&header->hdr_len);
  813. le16_to_cpus (&header->packet_len);
  814. if (FRAMED_SIZE (header->packet_len) > MAX_PACKET) {
  815. dev->stats.rx_frame_errors++;
  816. dbg ("packet too big, %d", header->packet_len);
  817. return 0;
  818. } else if (header->hdr_len < MIN_HEADER) {
  819. dev->stats.rx_frame_errors++;
  820. dbg ("header too short, %d", header->hdr_len);
  821. return 0;
  822. } else if (header->hdr_len > MIN_HEADER) {
  823. // out of band data for us?
  824. dbg ("header OOB, %d bytes",
  825. header->hdr_len - MIN_HEADER);
  826. // switch (vendor/product ids) { ... }
  827. }
  828. skb_pull (skb, header->hdr_len);
  829. trailer = (struct nc_trailer *)
  830. (skb->data + skb->len - sizeof *trailer);
  831. skb_trim (skb, skb->len - sizeof *trailer);
  832. if ((header->packet_len & 0x01) == 0) {
  833. if (skb->data [header->packet_len] != PAD_BYTE) {
  834. dev->stats.rx_frame_errors++;
  835. dbg ("bad pad");
  836. return 0;
  837. }
  838. skb_trim (skb, skb->len - 1);
  839. }
  840. if (skb->len != header->packet_len) {
  841. dev->stats.rx_frame_errors++;
  842. dbg ("bad packet len %d (expected %d)",
  843. skb->len, header->packet_len);
  844. return 0;
  845. }
  846. if (header->packet_id != get_unaligned (&trailer->packet_id)) {
  847. dev->stats.rx_fifo_errors++;
  848. dbg ("(2+ dropped) rx packet_id mismatch 0x%x 0x%x",
  849. header->packet_id, trailer->packet_id);
  850. return 0;
  851. }
  852. #if 0
  853. devdbg (dev, "frame <rx h %d p %d id %d", header->hdr_len,
  854. header->packet_len, header->packet_id);
  855. #endif
  856. return 1;
  857. }
  858. static struct sk_buff *
  859. net1080_tx_fixup (struct usbnet *dev, struct sk_buff *skb, int flags)
  860. {
  861. int padlen;
  862. struct sk_buff *skb2;
  863. padlen = ((skb->len + sizeof (struct nc_header)
  864. + sizeof (struct nc_trailer)) & 0x01) ? 0 : 1;
  865. if (!skb_cloned (skb)) {
  866. int headroom = skb_headroom (skb);
  867. int tailroom = skb_tailroom (skb);
  868. if ((padlen + sizeof (struct nc_trailer)) <= tailroom
  869.     && sizeof (struct nc_header) <= headroom)
  870. return skb;
  871. if ((sizeof (struct nc_header) + padlen
  872. + sizeof (struct nc_trailer)) <
  873. (headroom + tailroom)) {
  874. skb->data = memmove (skb->head
  875. + sizeof (struct nc_header),
  876.     skb->data, skb->len);
  877. skb->tail = skb->data + skb->len;
  878. return skb;
  879. }
  880. }
  881. skb2 = skb_copy_expand (skb,
  882. sizeof (struct nc_header),
  883. sizeof (struct nc_trailer) + padlen,
  884. flags);
  885. dev_kfree_skb_any (skb);
  886. return skb2;
  887. }
  888. static const struct driver_info net1080_info = {
  889. description: "NetChip TurboCONNECT",
  890. flags: FLAG_FRAMING_NC,
  891. reset: net1080_reset,
  892. check_connect: net1080_check_connect,
  893. rx_fixup: net1080_rx_fixup,
  894. tx_fixup: net1080_tx_fixup,
  895. in: 1, out: 1, // direction distinguishes these
  896. epsize: 64,
  897. };
  898. #endif /* CONFIG_USB_NET1080 */
  899. #ifdef CONFIG_USB_PL2301
  900. /*-------------------------------------------------------------------------
  901.  *
  902.  * Prolific PL-2301/PL-2302 driver ... http://www.prolifictech.com
  903.  *
  904.  *-------------------------------------------------------------------------*/
  905. /*
  906.  * Bits 0-4 can be used for software handshaking; they're set from
  907.  * one end, cleared from the other, "read" with the interrupt byte.
  908.  */
  909. #define PL_S_EN (1<<7) /* (feature only) suspend enable */
  910. /* reserved bit -- rx ready (6) ? */
  911. #define PL_TX_READY (1<<5) /* (interrupt only) transmit ready */
  912. #define PL_RESET_OUT (1<<4) /* reset output pipe */
  913. #define PL_RESET_IN (1<<3) /* reset input pipe */
  914. #define PL_TX_C (1<<2) /* transmission complete */
  915. #define PL_TX_REQ (1<<1) /* transmission received */
  916. #define PL_PEER_E (1<<0) /* peer exists */
  917. static inline int
  918. pl_vendor_req (struct usbnet *dev, u8 req, u8 val, u8 index)
  919. {
  920. return usb_control_msg (dev->udev,
  921. usb_rcvctrlpipe (dev->udev, 0),
  922. req,
  923. USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
  924. val, index,
  925. 0, 0,
  926. CONTROL_TIMEOUT_JIFFIES);
  927. }
  928. static inline int
  929. pl_clear_QuickLink_features (struct usbnet *dev, int val)
  930. {
  931. return pl_vendor_req (dev, 1, (u8) val, 0);
  932. }
  933. static inline int
  934. pl_set_QuickLink_features (struct usbnet *dev, int val)
  935. {
  936. return pl_vendor_req (dev, 3, (u8) val, 0);
  937. }
  938. /*-------------------------------------------------------------------------*/
  939. static int pl_reset (struct usbnet *dev)
  940. {
  941. return pl_set_QuickLink_features (dev,
  942. PL_S_EN|PL_RESET_OUT|PL_RESET_IN|PL_PEER_E);
  943. }
  944. static int pl_check_connect (struct usbnet *dev)
  945. {
  946. // FIXME test interrupt data PL_PEER_E bit
  947. // plus, there's some handshake done by
  948. // the prolific win32 driver... 
  949. dbg ("%s: assuming peer is connected", dev->net.name);
  950. return 0;
  951. }
  952. static const struct driver_info prolific_info = {
  953. description: "Prolific PL-2301/PL-2302",
  954. flags: FLAG_NO_SETINT,
  955. /* some PL-2302 versions seem to fail usb_set_interface() */
  956. reset: pl_reset,
  957. check_connect: pl_check_connect,
  958. in: 3, out: 2,
  959. epsize: 64,
  960. };
  961. #endif /* CONFIG_USB_PL2301 */
  962. /*-------------------------------------------------------------------------
  963.  *
  964.  * Network Device Driver (peer link to "Host Device", from USB host)
  965.  *
  966.  *-------------------------------------------------------------------------*/
  967. static int usbnet_change_mtu (struct net_device *net, int new_mtu)
  968. {
  969. struct usbnet *dev = (struct usbnet *) net->priv;
  970. if (new_mtu <= MIN_PACKET || new_mtu > MAX_PACKET)
  971. return -EINVAL;
  972. #ifdef CONFIG_USB_NET1080
  973. if (((dev->driver_info->flags) & FLAG_FRAMING_NC)) {
  974. if (FRAMED_SIZE (new_mtu) > MAX_PACKET)
  975. return -EINVAL;
  976. }
  977. #endif
  978. #ifdef CONFIG_USB_GENESYS
  979. if (((dev->driver_info->flags) & FLAG_FRAMING_GL)
  980. && new_mtu > GL_MAX_PACKET_LEN)
  981. return -EINVAL;
  982. #endif
  983. // no second zero-length packet read wanted after mtu-sized packets
  984. if (((new_mtu + sizeof (struct ethhdr)) % EP_SIZE (dev)) == 0)
  985. return -EDOM;
  986. net->mtu = new_mtu;
  987. return 0;
  988. }
  989. /*-------------------------------------------------------------------------*/
  990. static struct net_device_stats *usbnet_get_stats (struct net_device *net)
  991. {
  992. return &((struct usbnet *) net->priv)->stats;
  993. }
  994. /*-------------------------------------------------------------------------*/
  995. /* urb completions are currently in_irq; avoid doing real work then. */
  996. static void defer_bh (struct usbnet *dev, struct sk_buff *skb)
  997. {
  998. struct sk_buff_head *list = skb->list;
  999. unsigned long flags;
  1000. spin_lock_irqsave (&list->lock, flags);
  1001. __skb_unlink (skb, list);
  1002. spin_unlock (&list->lock);
  1003. spin_lock (&dev->done.lock);
  1004. __skb_queue_tail (&dev->done, skb);
  1005. if (dev->done.qlen == 1)
  1006. tasklet_schedule (&dev->bh);
  1007. spin_unlock_irqrestore (&dev->done.lock, flags);
  1008. }
  1009. /*-------------------------------------------------------------------------*/
  1010. static void rx_complete (struct urb *urb);
  1011. static void rx_submit (struct usbnet *dev, struct urb *urb, int flags)
  1012. {
  1013. struct sk_buff *skb;
  1014. struct skb_data *entry;
  1015. int retval = 0;
  1016. unsigned long lockflags;
  1017. size_t size;
  1018. #ifdef CONFIG_USB_NET1080
  1019. if (dev->driver_info->flags & FLAG_FRAMING_NC)
  1020. size = FRAMED_SIZE (dev->net.mtu);
  1021. else
  1022. #endif
  1023. #ifdef CONFIG_USB_GENESYS
  1024. if (dev->driver_info->flags & FLAG_FRAMING_GL)
  1025. size = GL_RCV_BUF_SIZE;
  1026. else
  1027. #endif
  1028. size = (sizeof (struct ethhdr) + dev->net.mtu);
  1029. if ((skb = alloc_skb (size, flags)) == 0) {
  1030. dbg ("no rx skb");
  1031. tasklet_schedule (&dev->bh);
  1032. usb_free_urb (urb);
  1033. return;
  1034. }
  1035. entry = (struct skb_data *) skb->cb;
  1036. entry->urb = urb;
  1037. entry->dev = dev;
  1038. entry->state = rx_start;
  1039. entry->length = 0;
  1040. FILL_BULK_URB (urb, dev->udev,
  1041. usb_rcvbulkpipe (dev->udev, dev->driver_info->in),
  1042. skb->data, size, rx_complete, skb);
  1043. urb->transfer_flags |= USB_ASYNC_UNLINK;
  1044. #ifdef REALLY_QUEUE
  1045. urb->transfer_flags |= USB_QUEUE_BULK;
  1046. #endif
  1047. #if 0
  1048. // Idle-but-posted reads with UHCI really chew up
  1049. // PCI bandwidth unless FSBR is disabled
  1050. urb->transfer_flags |= USB_NO_FSBR;
  1051. #endif
  1052. spin_lock_irqsave (&dev->rxq.lock, lockflags);
  1053. if (netif_running (&dev->net)) {
  1054. if ((retval = usb_submit_urb (urb)) != 0) {
  1055. dbg ("%s rx submit, %d", dev->net.name, retval);
  1056. tasklet_schedule (&dev->bh);
  1057. } else {
  1058. __skb_queue_tail (&dev->rxq, skb);
  1059. }
  1060. } else {
  1061. dbg ("rx: stopped");
  1062. retval = -ENOLINK;
  1063. }
  1064. spin_unlock_irqrestore (&dev->rxq.lock, lockflags);
  1065. if (retval) {
  1066. dev_kfree_skb_any (skb);
  1067. usb_free_urb (urb);
  1068. }
  1069. }
  1070. /*-------------------------------------------------------------------------*/
  1071. static inline void rx_process (struct usbnet *dev, struct sk_buff *skb)
  1072. {
  1073. if (dev->driver_info->rx_fixup
  1074. && !dev->driver_info->rx_fixup (dev, skb))
  1075. goto error;
  1076. // else network stack removes extra byte if we forced a short packet
  1077. if (skb->len) {
  1078. int status;
  1079. // FIXME: eth_copy_and_csum "small" packets to new SKB (small < ~200 bytes) ?
  1080. skb->dev = &dev->net;
  1081. skb->protocol = eth_type_trans (skb, &dev->net);
  1082. dev->stats.rx_packets++;
  1083. dev->stats.rx_bytes += skb->len;
  1084. #ifdef VERBOSE
  1085. devdbg (dev, "< rx, len %d, type 0x%x",
  1086. skb->len + sizeof (struct ethhdr), skb->protocol);
  1087. #endif
  1088. memset (skb->cb, 0, sizeof (struct skb_data));
  1089. status = netif_rx (skb);
  1090. if (status != NET_RX_SUCCESS)
  1091. devdbg (dev, "netif_rx status %d", status);
  1092. } else {
  1093. dbg ("drop");
  1094. error:
  1095. dev->stats.rx_errors++;
  1096. skb_queue_tail (&dev->done, skb);
  1097. }
  1098. }
  1099. /*-------------------------------------------------------------------------*/
  1100. static void rx_complete (struct urb *urb)
  1101. {
  1102. struct sk_buff *skb = (struct sk_buff *) urb->context;
  1103. struct skb_data *entry = (struct skb_data *) skb->cb;
  1104. struct usbnet *dev = entry->dev;
  1105. int urb_status = urb->status;
  1106. skb_put (skb, urb->actual_length);
  1107. entry->state = rx_done;
  1108. entry->urb = 0;
  1109. switch (urb_status) {
  1110.     // success
  1111.     case 0:
  1112. if (MIN_PACKET > skb->len || skb->len > MAX_PACKET) {
  1113. entry->state = rx_cleanup;
  1114. dev->stats.rx_errors++;
  1115. dev->stats.rx_length_errors++;
  1116. dbg ("rx length %d", skb->len);
  1117. }
  1118. break;
  1119.     // software-driven interface shutdown
  1120.     case -ECONNRESET: // usb-ohci, usb-uhci
  1121.     case -ECONNABORTED: // uhci ... for usb-uhci, INTR
  1122. dbg ("%s shutdown, code %d", dev->net.name, urb_status);
  1123. entry->state = rx_cleanup;
  1124. // do urb frees only in the tasklet
  1125. entry->urb = urb;
  1126. urb = 0;
  1127. break;
  1128.     // data overrun ... flush fifo?
  1129.     case -EOVERFLOW:
  1130. dev->stats.rx_over_errors++;
  1131. // FALLTHROUGH
  1132.     
  1133.     default:
  1134. // on unplug we'll get a burst of ETIMEDOUT/EILSEQ
  1135. // till the khubd gets and handles its interrupt.
  1136. entry->state = rx_cleanup;
  1137. dev->stats.rx_errors++;
  1138. dbg ("%s rx: status %d", dev->net.name, urb_status);
  1139. break;
  1140. }
  1141. defer_bh (dev, skb);
  1142. if (urb) {
  1143. if (netif_running (&dev->net)) {
  1144. rx_submit (dev, urb, GFP_ATOMIC);
  1145. return;
  1146. }
  1147. }
  1148. #ifdef VERBOSE
  1149. dbg ("no read resubmitted");
  1150. #endif /* VERBOSE */
  1151. }
  1152. /*-------------------------------------------------------------------------*/
  1153. // unlink pending rx/tx; completion handlers do all other cleanup
  1154. static int unlink_urbs (struct sk_buff_head *q)
  1155. {
  1156. unsigned long flags;
  1157. struct sk_buff *skb, *skbnext;
  1158. int count = 0;
  1159. spin_lock_irqsave (&q->lock, flags);
  1160. for (skb = q->next; skb != (struct sk_buff *) q; skb = skbnext) {
  1161. struct skb_data *entry;
  1162. struct urb *urb;
  1163. int retval;
  1164. entry = (struct skb_data *) skb->cb;
  1165. urb = entry->urb;
  1166. skbnext = skb->next;
  1167. // during some PM-driven resume scenarios,
  1168. // these (async) unlinks complete immediately
  1169. retval = usb_unlink_urb (urb);
  1170. if (retval < 0)
  1171. dbg ("unlink urb err, %d", retval);
  1172. else
  1173. count++;
  1174. }
  1175. spin_unlock_irqrestore (&q->lock, flags);
  1176. return count;
  1177. }
  1178. /*-------------------------------------------------------------------------*/
  1179. // precondition: never called in_interrupt
  1180. static int usbnet_stop (struct net_device *net)
  1181. {
  1182. struct usbnet *dev = (struct usbnet *) net->priv;
  1183. int temp;
  1184. DECLARE_WAIT_QUEUE_HEAD (unlink_wakeup); 
  1185. DECLARE_WAITQUEUE (wait, current);
  1186. mutex_lock (&dev->mutex);
  1187. netif_stop_queue (net);
  1188. devdbg (dev, "stop stats: rx/tx %ld/%ld, errs %ld/%ld",
  1189. dev->stats.rx_packets, dev->stats.tx_packets, 
  1190. dev->stats.rx_errors, dev->stats.tx_errors
  1191. );
  1192. // ensure there are no more active urbs
  1193. add_wait_queue (&unlink_wakeup, &wait);
  1194. dev->wait = &unlink_wakeup;
  1195. temp = unlink_urbs (&dev->txq) + unlink_urbs (&dev->rxq);
  1196. // maybe wait for deletions to finish.
  1197. while (skb_queue_len (&dev->rxq)
  1198. && skb_queue_len (&dev->txq)
  1199. && skb_queue_len (&dev->done)) {
  1200. set_current_state (TASK_UNINTERRUPTIBLE);
  1201. schedule_timeout (UNLINK_TIMEOUT_JIFFIES);
  1202. dbg ("waited for %d urb completions", temp);
  1203. }
  1204. dev->wait = 0;
  1205. remove_wait_queue (&unlink_wakeup, &wait); 
  1206. mutex_unlock (&dev->mutex);
  1207. return 0;
  1208. }
  1209. /*-------------------------------------------------------------------------*/
  1210. // posts reads, and enables write queing
  1211. // precondition: never called in_interrupt
  1212. static int usbnet_open (struct net_device *net)
  1213. {
  1214. struct usbnet *dev = (struct usbnet *) net->priv;
  1215. int retval = 0;
  1216. struct driver_info *info = dev->driver_info;
  1217. mutex_lock (&dev->mutex);
  1218. // put into "known safe" state
  1219. if (info->reset && (retval = info->reset (dev)) < 0) {
  1220. devinfo (dev, "open reset fail (%d) usbnet %03d/%03d, %s",
  1221. retval,
  1222. dev->udev->bus->busnum, dev->udev->devnum,
  1223. info->description);
  1224. goto done;
  1225. }
  1226. // insist peer be connected
  1227. if (info->check_connect && (retval = info->check_connect (dev)) < 0) {
  1228. devdbg (dev, "can't open; %d", retval);
  1229. goto done;
  1230. }
  1231. netif_start_queue (net);
  1232. devdbg (dev, "open: enable queueing (rx %d, tx %d) mtu %d %s framing",
  1233. RX_QLEN, TX_QLEN, dev->net.mtu,
  1234. (info->flags & (FLAG_FRAMING_NC | FLAG_FRAMING_GL))
  1235.     ? ((info->flags & FLAG_FRAMING_NC)
  1236. ? "NetChip"
  1237. : "GeneSys")
  1238.     : "raw"
  1239. );
  1240. // delay posting reads until we're fully open
  1241. tasklet_schedule (&dev->bh);
  1242. done:
  1243. mutex_unlock (&dev->mutex);
  1244. return retval;
  1245. }
  1246. /*-------------------------------------------------------------------------*/
  1247. /* usb_clear_halt cannot be called in interrupt context */
  1248. static void
  1249. tx_clear_halt (void *data)
  1250. {
  1251. struct usbnet *dev = data;
  1252. usb_clear_halt (dev->udev,
  1253. usb_sndbulkpipe (dev->udev, dev->driver_info->out));
  1254. netif_wake_queue (&dev->net);
  1255. }
  1256. /*-------------------------------------------------------------------------*/
  1257. static void tx_complete (struct urb *urb)
  1258. {
  1259. struct sk_buff *skb = (struct sk_buff *) urb->context;
  1260. struct skb_data *entry = (struct skb_data *) skb->cb;
  1261. struct usbnet *dev = entry->dev;
  1262. if (urb->status == USB_ST_STALL) {
  1263. if (dev->ctrl_task.sync == 0) {
  1264. dev->ctrl_task.routine = tx_clear_halt;
  1265. dev->ctrl_task.data = dev;
  1266. schedule_task (&dev->ctrl_task);
  1267. } else {
  1268. dbg ("Cannot clear TX stall");
  1269. }
  1270. }
  1271. urb->dev = 0;
  1272. entry->state = tx_done;
  1273. defer_bh (dev, skb);
  1274. }
  1275. /*-------------------------------------------------------------------------*/
  1276. static void usbnet_tx_timeout (struct net_device *net)
  1277. {
  1278. struct usbnet *dev = (struct usbnet *) net->priv;
  1279. unlink_urbs (&dev->txq);
  1280. tasklet_schedule (&dev->bh);
  1281. // FIXME: device recovery -- reset?
  1282. }
  1283. /*-------------------------------------------------------------------------*/
  1284. static int usbnet_start_xmit (struct sk_buff *skb, struct net_device *net)
  1285. {
  1286. struct usbnet *dev = (struct usbnet *) net->priv;
  1287. int length = skb->len;
  1288. int retval = NET_XMIT_SUCCESS;
  1289. struct urb *urb = 0;
  1290. struct skb_data *entry;
  1291. struct driver_info *info = dev->driver_info;
  1292. unsigned long flags;
  1293. #ifdef CONFIG_USB_NET1080
  1294. struct nc_header *header = 0;
  1295. struct nc_trailer *trailer = 0;
  1296. #endif /* CONFIG_USB_NET1080 */
  1297. flags = in_interrupt () ? GFP_ATOMIC : GFP_NOIO; /* might be used for nfs */
  1298. // some devices want funky USB-level framing, for
  1299. // win32 driver (usually) and/or hardware quirks
  1300. if (info->tx_fixup) {
  1301. skb = info->tx_fixup (dev, skb, flags);
  1302. if (!skb) {
  1303. dbg ("can't tx_fixup skb");
  1304. goto drop;
  1305. }
  1306. }
  1307. if (!(urb = usb_alloc_urb (0))) {
  1308. dbg ("no urb");
  1309. goto drop;
  1310. }
  1311. entry = (struct skb_data *) skb->cb;
  1312. entry->urb = urb;
  1313. entry->dev = dev;
  1314. entry->state = tx_start;
  1315. entry->length = length;
  1316. // FIXME: reorganize a bit, so that fixup() fills out NetChip
  1317. // framing too. (Packet ID update needs the spinlock...)
  1318. #ifdef CONFIG_USB_NET1080
  1319. if (info->flags & FLAG_FRAMING_NC) {
  1320. header = (struct nc_header *) skb_push (skb, sizeof *header);
  1321. header->hdr_len = cpu_to_le16 (sizeof (*header));
  1322. header->packet_len = cpu_to_le16 (length);
  1323. if (!((skb->len + sizeof *trailer) & 0x01))
  1324. *skb_put (skb, 1) = PAD_BYTE;
  1325. trailer = (struct nc_trailer *) skb_put (skb, sizeof *trailer);
  1326. } else
  1327. #endif /* CONFIG_USB_NET1080 */
  1328. /* don't assume the hardware handles USB_ZERO_PACKET */
  1329. if ((length % EP_SIZE (dev)) == 0)
  1330. skb->len++;
  1331. FILL_BULK_URB (urb, dev->udev,
  1332. usb_sndbulkpipe (dev->udev, info->out),
  1333. skb->data, skb->len, tx_complete, skb);
  1334. urb->transfer_flags |= USB_ASYNC_UNLINK;
  1335. #ifdef REALLY_QUEUE
  1336. urb->transfer_flags |= USB_QUEUE_BULK;
  1337. #endif
  1338. // FIXME urb->timeout = ... jiffies ... ;
  1339. spin_lock_irqsave (&dev->txq.lock, flags);
  1340. #ifdef CONFIG_USB_NET1080
  1341. if (info->flags & FLAG_FRAMING_NC) {
  1342. header->packet_id = cpu_to_le16 (dev->packet_id++);
  1343. put_unaligned (header->packet_id, &trailer->packet_id);
  1344. #if 0
  1345. devdbg (dev, "frame >tx h %d p %d id %d",
  1346. header->hdr_len, header->packet_len,
  1347. header->packet_id);
  1348. #endif
  1349. }
  1350. #endif /* CONFIG_USB_NET1080 */
  1351. netif_stop_queue (net);
  1352. if ((retval = usb_submit_urb (urb)) != 0) {
  1353. netif_start_queue (net);
  1354. dbg ("%s tx: submit urb err %d", net->name, retval);
  1355. } else {
  1356. net->trans_start = jiffies;
  1357. __skb_queue_tail (&dev->txq, skb);
  1358. if (dev->txq.qlen < TX_QLEN)
  1359. netif_start_queue (net);
  1360. }
  1361. spin_unlock_irqrestore (&dev->txq.lock, flags);
  1362. if (retval) {
  1363. devdbg (dev, "drop, code %d", retval);
  1364. drop:
  1365. retval = NET_XMIT_DROP;
  1366. dev->stats.tx_dropped++;
  1367. if (skb)
  1368. dev_kfree_skb_any (skb);
  1369. usb_free_urb (urb);
  1370. #ifdef VERBOSE
  1371. } else {
  1372. devdbg (dev, "> tx, len %d, type 0x%x",
  1373. length, skb->protocol);
  1374. #endif
  1375. }
  1376. return retval;
  1377. }
  1378. /*-------------------------------------------------------------------------*/
  1379. // tasklet ... work that avoided running in_irq()
  1380. static void usbnet_bh (unsigned long param)
  1381. {
  1382. struct usbnet *dev = (struct usbnet *) param;
  1383. struct sk_buff *skb;
  1384. struct skb_data *entry;
  1385. while ((skb = skb_dequeue (&dev->done))) {
  1386. entry = (struct skb_data *) skb->cb;
  1387. switch (entry->state) {
  1388.     case rx_done:
  1389. entry->state = rx_cleanup;
  1390. rx_process (dev, skb);
  1391. continue;
  1392.     case tx_done:
  1393. if (entry->urb->status) {
  1394. // can this statistic become more specific?
  1395. dev->stats.tx_errors++;
  1396. dbg ("%s tx: err %d", dev->net.name,
  1397. entry->urb->status);
  1398. } else {
  1399. dev->stats.tx_packets++;
  1400. dev->stats.tx_bytes += entry->length;
  1401. }
  1402. // FALLTHROUGH:
  1403.     case rx_cleanup:
  1404. usb_free_urb (entry->urb);
  1405. dev_kfree_skb (skb);
  1406. continue;
  1407.     default:
  1408. dbg ("%s: bogus skb state %d",
  1409. dev->net.name, entry->state);
  1410. }
  1411. }
  1412. // waiting for all pending urbs to complete?
  1413. if (dev->wait) {
  1414. if ((dev->txq.qlen + dev->rxq.qlen + dev->done.qlen) == 0) {
  1415. wake_up (dev->wait);
  1416. }
  1417. // or are we maybe short a few urbs?
  1418. } else if (netif_running (&dev->net)) {
  1419. int temp = dev->rxq.qlen;
  1420. if (temp < RX_QLEN) {
  1421. struct urb *urb;
  1422. int i;
  1423. for (i = 0; i < 3 && dev->rxq.qlen < RX_QLEN; i++) {
  1424. if ((urb = usb_alloc_urb (0)) != 0)
  1425. rx_submit (dev, urb, GFP_ATOMIC);
  1426. }
  1427. if (temp != dev->rxq.qlen)
  1428. devdbg (dev, "rxqlen %d --> %d",
  1429. temp, dev->rxq.qlen);
  1430. if (dev->rxq.qlen < RX_QLEN)
  1431. tasklet_schedule (&dev->bh);
  1432. }
  1433. if (dev->txq.qlen < TX_QLEN)
  1434. netif_wake_queue (&dev->net);
  1435. }
  1436. }
  1437. /*-------------------------------------------------------------------------
  1438.  *
  1439.  * USB Device Driver support
  1440.  *
  1441.  *-------------------------------------------------------------------------*/
  1442.  
  1443. // precondition: never called in_interrupt
  1444. static void usbnet_disconnect (struct usb_device *udev, void *ptr)
  1445. {
  1446. struct usbnet *dev = (struct usbnet *) ptr;
  1447. devinfo (dev, "unregister usbnet %03d/%03d, %s",
  1448. udev->bus->busnum, udev->devnum,
  1449. dev->driver_info->description);
  1450. unregister_netdev (&dev->net);
  1451. mutex_lock (&usbnet_mutex);
  1452. mutex_lock (&dev->mutex);
  1453. list_del (&dev->dev_list);
  1454. mutex_unlock (&usbnet_mutex);
  1455. kfree (dev);
  1456. usb_dec_dev_use (udev);
  1457. }
  1458. /*-------------------------------------------------------------------------*/
  1459. // precondition: never called in_interrupt
  1460. static void *
  1461. usbnet_probe (struct usb_device *udev, unsigned ifnum,
  1462. const struct usb_device_id *prod)
  1463. {
  1464. struct usbnet *dev;
  1465. struct net_device  *net;
  1466. struct usb_interface_descriptor *interface;
  1467. struct driver_info *info;
  1468. int altnum = 0;
  1469. info = (struct driver_info *) prod->driver_info;
  1470. // sanity check; expect dedicated interface/devices for now.
  1471. interface = &udev->actconfig->interface [ifnum].altsetting [altnum];
  1472. if (udev->descriptor.bNumConfigurations != 1
  1473. || udev->config[0].bNumInterfaces != 1
  1474. // || interface->bInterfaceClass != USB_CLASS_VENDOR_SPEC
  1475. ) {
  1476. dbg ("Bogus config info");
  1477. return 0;
  1478. }
  1479. // more sanity (unless the device is broken)
  1480. if (!(info->flags & FLAG_NO_SETINT)) {
  1481. if (usb_set_interface (udev, ifnum, altnum) < 0) {
  1482. err ("set_interface failed");
  1483. return 0;
  1484. }
  1485. }
  1486. // set up our own records
  1487. if (!(dev = kmalloc (sizeof *dev, GFP_KERNEL))) {
  1488. dbg ("can't kmalloc dev");
  1489. return 0;
  1490. }
  1491. memset (dev, 0, sizeof *dev);
  1492. init_MUTEX_LOCKED (&dev->mutex);
  1493. usb_inc_dev_use (udev);
  1494. dev->udev = udev;
  1495. dev->driver_info = info;
  1496. INIT_LIST_HEAD (&dev->dev_list);
  1497. skb_queue_head_init (&dev->rxq);
  1498. skb_queue_head_init (&dev->txq);
  1499. skb_queue_head_init (&dev->done);
  1500. dev->bh.func = usbnet_bh;
  1501. dev->bh.data = (unsigned long) dev;
  1502. // set up network interface records
  1503. net = &dev->net;
  1504. SET_MODULE_OWNER (net);
  1505. net->priv = dev;
  1506. strcpy (net->name, "usb%d");
  1507. memcpy (net->dev_addr, node_id, sizeof node_id);
  1508. // point-to-point link ... we always use Ethernet headers 
  1509. // supports win32 interop and the bridge driver.
  1510. ether_setup (net);
  1511. net->change_mtu = usbnet_change_mtu;
  1512. net->get_stats = usbnet_get_stats;
  1513. net->hard_start_xmit = usbnet_start_xmit;
  1514. net->open = usbnet_open;
  1515. net->stop = usbnet_stop;
  1516. net->watchdog_timeo = TX_TIMEOUT_JIFFIES;
  1517. net->tx_timeout = usbnet_tx_timeout;
  1518. register_netdev (&dev->net);
  1519. devinfo (dev, "register usbnet %03d/%03d, %s",
  1520. udev->bus->busnum, udev->devnum,
  1521. dev->driver_info->description);
  1522. // ok, it's ready to go.
  1523. mutex_lock (&usbnet_mutex);
  1524. list_add (&dev->dev_list, &usbnet_list);
  1525. mutex_unlock (&dev->mutex);
  1526. // start as if the link is up
  1527. netif_device_attach (&dev->net);
  1528. mutex_unlock (&usbnet_mutex);
  1529. return dev;
  1530. }
  1531. /*-------------------------------------------------------------------------*/
  1532. /*
  1533.  * chip vendor names won't normally be on the cables, and
  1534.  * may not be on the device.
  1535.  */
  1536. static const struct usb_device_id products [] = {
  1537. #ifdef CONFIG_USB_AN2720
  1538. {
  1539. USB_DEVICE (0x0547, 0x2720), // AnchorChips defaults
  1540. driver_info: (unsigned long) &an2720_info,
  1541. },
  1542. {
  1543. USB_DEVICE (0x0547, 0x2727), // Xircom PGUNET
  1544. driver_info: (unsigned long) &an2720_info,
  1545. },
  1546. #endif
  1547. #ifdef CONFIG_USB_BELKIN
  1548. {
  1549. USB_DEVICE (0x050d, 0x0004), // Belkin
  1550. driver_info: (unsigned long) &belkin_info,
  1551. }, {
  1552. USB_DEVICE (0x056c, 0x8100), // eTEK
  1553. driver_info: (unsigned long) &belkin_info,
  1554. }, {
  1555. USB_DEVICE (0x0525, 0x9901), // Advance USBNET (eTEK)
  1556. driver_info: (unsigned long) &belkin_info,
  1557. },
  1558. #endif
  1559. #ifdef CONFIG_USB_GENESYS
  1560. {
  1561. USB_DEVICE (0x05e3, 0x0502), // GL620USB-A
  1562. driver_info: (unsigned long) &genelink_info,
  1563. },
  1564. #endif
  1565. #ifdef CONFIG_USB_LINUXDEV
  1566. /*
  1567.  * for example, this can be a host side talk-to-PDA driver.
  1568.  * this driver is NOT what runs _inside_ a Linux device !!
  1569.  */
  1570. {
  1571. // 1183 = 0x049F, both used as hex values?
  1572. USB_DEVICE (0x049F, 0x505A), // Compaq "Itsy"
  1573. driver_info: (unsigned long) &linuxdev_info,
  1574. },
  1575. #endif
  1576. #ifdef CONFIG_USB_NET1080
  1577. {
  1578. USB_DEVICE (0x0525, 0x1080), // NetChip ref design
  1579. driver_info: (unsigned long) &net1080_info,
  1580. },
  1581. {
  1582. USB_DEVICE (0x06D0, 0x0622), // Laplink Gold
  1583. driver_info: (unsigned long) &net1080_info,
  1584. },
  1585. #endif
  1586. #ifdef CONFIG_USB_PL2301
  1587. {
  1588. USB_DEVICE (0x067b, 0x0000), // PL-2301
  1589. driver_info: (unsigned long) &prolific_info,
  1590. }, {
  1591. USB_DEVICE (0x067b, 0x0001), // PL-2302
  1592. driver_info: (unsigned long) &prolific_info,
  1593. },
  1594. #endif
  1595. /* KC2190 from www.sepoong.co.kr "InstaNET" */
  1596. { }, // END
  1597. };
  1598. MODULE_DEVICE_TABLE (usb, products);
  1599. static struct usb_driver usbnet_driver = {
  1600. name: "usbnet",
  1601. id_table: products,
  1602. probe: usbnet_probe,
  1603. disconnect: usbnet_disconnect,
  1604. };
  1605. /*-------------------------------------------------------------------------*/
  1606. static int __init usbnet_init (void)
  1607. {
  1608. // compiler should optimize this out
  1609. if (sizeof (((struct sk_buff *)0)->cb) < sizeof (struct skb_data))
  1610. BUG ();
  1611. get_random_bytes (node_id, sizeof node_id);
  1612. node_id [0] &= 0xfe; // clear multicast bit
  1613.   if (usb_register (&usbnet_driver) < 0)
  1614.   return -1;
  1615. return 0;
  1616. }
  1617. module_init (usbnet_init);
  1618. static void __exit usbnet_exit (void)
  1619. {
  1620.   usb_deregister (&usbnet_driver);
  1621. }
  1622. module_exit (usbnet_exit);
  1623. EXPORT_NO_SYMBOLS;
  1624. MODULE_AUTHOR ("David Brownell <dbrownell@users.sourceforge.net>");
  1625. MODULE_DESCRIPTION ("USB Host-to-Host Link Drivers (numerous vendors)");
  1626. MODULE_LICENSE ("GPL");