Commit 090ffa9d0e904e1ed0f86c84dcf20684a8ac1a5a
Committed by
Greg Kroah-Hartman
1 parent
64e049102d
Exists in
master
and in
39 other branches
[PATCH] USB: usbnet (9/9) module for pl2301/2302 cables
This wraps up the conversion of the "usbnet" driver structure, by moving the Prolific PL-2201/2302 minidriver to a module of its own. It also includes some minor cleanups to the remaining "usbnet" file, notably removing that long changelog at the top. Minor historical note: Linux 2.2 first called the driver for this hardware "plusb". Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Showing 4 changed files with 179 additions and 217 deletions Side-by-side Diff
drivers/usb/net/Kconfig
... | ... | @@ -99,7 +99,7 @@ |
99 | 99 | with "minidrivers" built around a common network driver core |
100 | 100 | that supports deep queues for efficient transfers. (This gives |
101 | 101 | better performance with small packets and at high speeds). |
102 | - | |
102 | + | |
103 | 103 | The USB host runs "usbnet", and the other end of the link might be: |
104 | 104 | |
105 | 105 | - Another USB host, when using USB "network" or "data transfer" |
... | ... | @@ -125,20 +125,6 @@ |
125 | 125 | To compile this driver as a module, choose M here: the |
126 | 126 | module will be called usbnet. |
127 | 127 | |
128 | -comment "USB Host-to-Host Cables" | |
129 | - depends on USB_USBNET | |
130 | - | |
131 | -config USB_PL2301 | |
132 | - boolean "Prolific PL-2301/2302 based cables" | |
133 | - default y | |
134 | - # handshake/init/reset problems, from original 'plusb' driver | |
135 | - depends on USB_USBNET && EXPERIMENTAL | |
136 | - help | |
137 | - Choose this option if you're using a host-to-host cable | |
138 | - with one of these chips. | |
139 | - | |
140 | -comment "Drivers built using the usbnet core" | |
141 | - | |
142 | 128 | config USB_NET_AX8817X |
143 | 129 | tristate "ASIX AX88xxx Based USB 2.0 Ethernet Adapters" |
144 | 130 | depends on USB_USBNET && NET_ETHERNET |
... | ... | @@ -211,6 +197,15 @@ |
211 | 197 | Choose this option if you're using a host-to-host cable based |
212 | 198 | on this design: one NetChip 1080 chip and supporting logic, |
213 | 199 | optionally with LEDs that indicate traffic |
200 | + | |
201 | +config USB_NET_PLUSB | |
202 | + tristate "Prolific PL-2301/2302 based cables" | |
203 | + # if the handshake/init/reset problems, from original 'plusb', | |
204 | + # are ever resolved ... then remove "experimental" | |
205 | + depends on USB_USBNET && EXPERIMENTAL | |
206 | + help | |
207 | + Choose this option if you're using a host-to-host cable | |
208 | + with one of these chips. | |
214 | 209 | |
215 | 210 | config USB_NET_RNDIS_HOST |
216 | 211 | tristate "Host for RNDIS devices (EXPERIMENTAL)" |
drivers/usb/net/Makefile
... | ... | @@ -10,6 +10,7 @@ |
10 | 10 | obj-$(CONFIG_USB_NET_CDCETHER) += cdc_ether.o |
11 | 11 | obj-$(CONFIG_USB_NET_GL620A) += gl620a.o |
12 | 12 | obj-$(CONFIG_USB_NET_NET1080) += net1080.o |
13 | +obj-$(CONFIG_USB_NET_PLUSB) += plusb.o | |
13 | 14 | obj-$(CONFIG_USB_NET_RNDIS_HOST) += rndis_host.o |
14 | 15 | obj-$(CONFIG_USB_NET_CDC_SUBSET) += cdc_subset.o |
15 | 16 | obj-$(CONFIG_USB_NET_ZAURUS) += zaurus.o |
drivers/usb/net/plusb.c
1 | +/* | |
2 | + * PL-2301/2302 USB host-to-host link cables | |
3 | + * Copyright (C) 2000-2005 by David Brownell | |
4 | + * | |
5 | + * This program is free software; you can redistribute it and/or modify | |
6 | + * it under the terms of the GNU General Public License as published by | |
7 | + * the Free Software Foundation; either version 2 of the License, or | |
8 | + * (at your option) any later version. | |
9 | + * | |
10 | + * This program is distributed in the hope that it will be useful, | |
11 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | + * GNU General Public License for more details. | |
14 | + * | |
15 | + * You should have received a copy of the GNU General Public License | |
16 | + * along with this program; if not, write to the Free Software | |
17 | + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
18 | + */ | |
19 | + | |
20 | +// #define DEBUG // error path messages, extra info | |
21 | +// #define VERBOSE // more; success messages | |
22 | + | |
23 | +#include <linux/config.h> | |
24 | +#ifdef CONFIG_USB_DEBUG | |
25 | +# define DEBUG | |
26 | +#endif | |
27 | +#include <linux/module.h> | |
28 | +#include <linux/sched.h> | |
29 | +#include <linux/init.h> | |
30 | +#include <linux/netdevice.h> | |
31 | +#include <linux/etherdevice.h> | |
32 | +#include <linux/ethtool.h> | |
33 | +#include <linux/workqueue.h> | |
34 | +#include <linux/mii.h> | |
35 | +#include <linux/usb.h> | |
36 | + | |
37 | +#include "usbnet.h" | |
38 | + | |
39 | + | |
40 | +/* | |
41 | + * Prolific PL-2301/PL-2302 driver ... http://www.prolifictech.com | |
42 | + * | |
43 | + * The protocol and handshaking used here should be bug-compatible | |
44 | + * with the Linux 2.2 "plusb" driver, by Deti Fliegl. | |
45 | + * | |
46 | + * HEADS UP: this handshaking isn't all that robust. This driver | |
47 | + * gets confused easily if you unplug one end of the cable then | |
48 | + * try to connect it again; you'll need to restart both ends. The | |
49 | + * "naplink" software (used by some PlayStation/2 deveopers) does | |
50 | + * the handshaking much better! Also, sometimes this hardware | |
51 | + * seems to get wedged under load. Prolific docs are weak, and | |
52 | + * don't identify differences between PL2301 and PL2302, much less | |
53 | + * anything to explain the different PL2302 versions observed. | |
54 | + */ | |
55 | + | |
56 | +/* | |
57 | + * Bits 0-4 can be used for software handshaking; they're set from | |
58 | + * one end, cleared from the other, "read" with the interrupt byte. | |
59 | + */ | |
60 | +#define PL_S_EN (1<<7) /* (feature only) suspend enable */ | |
61 | +/* reserved bit -- rx ready (6) ? */ | |
62 | +#define PL_TX_READY (1<<5) /* (interrupt only) transmit ready */ | |
63 | +#define PL_RESET_OUT (1<<4) /* reset output pipe */ | |
64 | +#define PL_RESET_IN (1<<3) /* reset input pipe */ | |
65 | +#define PL_TX_C (1<<2) /* transmission complete */ | |
66 | +#define PL_TX_REQ (1<<1) /* transmission received */ | |
67 | +#define PL_PEER_E (1<<0) /* peer exists */ | |
68 | + | |
69 | +static inline int | |
70 | +pl_vendor_req(struct usbnet *dev, u8 req, u8 val, u8 index) | |
71 | +{ | |
72 | + return usb_control_msg(dev->udev, | |
73 | + usb_rcvctrlpipe(dev->udev, 0), | |
74 | + req, | |
75 | + USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, | |
76 | + val, index, | |
77 | + NULL, 0, | |
78 | + USB_CTRL_GET_TIMEOUT); | |
79 | +} | |
80 | + | |
81 | +static inline int | |
82 | +pl_clear_QuickLink_features(struct usbnet *dev, int val) | |
83 | +{ | |
84 | + return pl_vendor_req(dev, 1, (u8) val, 0); | |
85 | +} | |
86 | + | |
87 | +static inline int | |
88 | +pl_set_QuickLink_features(struct usbnet *dev, int val) | |
89 | +{ | |
90 | + return pl_vendor_req(dev, 3, (u8) val, 0); | |
91 | +} | |
92 | + | |
93 | +static int pl_reset(struct usbnet *dev) | |
94 | +{ | |
95 | + /* some units seem to need this reset, others reject it utterly. | |
96 | + * FIXME be more like "naplink" or windows drivers. | |
97 | + */ | |
98 | + (void) pl_set_QuickLink_features(dev, | |
99 | + PL_S_EN|PL_RESET_OUT|PL_RESET_IN|PL_PEER_E); | |
100 | + return 0; | |
101 | +} | |
102 | + | |
103 | +static const struct driver_info prolific_info = { | |
104 | + .description = "Prolific PL-2301/PL-2302", | |
105 | + .flags = FLAG_NO_SETINT, | |
106 | + /* some PL-2302 versions seem to fail usb_set_interface() */ | |
107 | + .reset = pl_reset, | |
108 | +}; | |
109 | + | |
110 | + | |
111 | +/*-------------------------------------------------------------------------*/ | |
112 | + | |
113 | +/* | |
114 | + * Proilific's name won't normally be on the cables, and | |
115 | + * may not be on the device. | |
116 | + */ | |
117 | + | |
118 | +static const struct usb_device_id products [] = { | |
119 | + | |
120 | +{ | |
121 | + USB_DEVICE(0x067b, 0x0000), // PL-2301 | |
122 | + .driver_info = (unsigned long) &prolific_info, | |
123 | +}, { | |
124 | + USB_DEVICE(0x067b, 0x0001), // PL-2302 | |
125 | + .driver_info = (unsigned long) &prolific_info, | |
126 | +}, | |
127 | + | |
128 | + { }, // END | |
129 | +}; | |
130 | +MODULE_DEVICE_TABLE(usb, products); | |
131 | + | |
132 | +static struct usb_driver plusb_driver = { | |
133 | + .owner = THIS_MODULE, | |
134 | + .name = "plusb", | |
135 | + .id_table = products, | |
136 | + .probe = usbnet_probe, | |
137 | + .disconnect = usbnet_disconnect, | |
138 | + .suspend = usbnet_suspend, | |
139 | + .resume = usbnet_resume, | |
140 | +}; | |
141 | + | |
142 | +static int __init plusb_init(void) | |
143 | +{ | |
144 | + return usb_register(&plusb_driver); | |
145 | +} | |
146 | +module_init(plusb_init); | |
147 | + | |
148 | +static void __exit plusb_exit(void) | |
149 | +{ | |
150 | + usb_deregister(&plusb_driver); | |
151 | +} | |
152 | +module_exit(plusb_exit); | |
153 | + | |
154 | +MODULE_AUTHOR("David Brownell"); | |
155 | +MODULE_DESCRIPTION("Prolific PL-2301/2302 USB Host to Host Link Driver"); | |
156 | +MODULE_LICENSE("GPL"); |
drivers/usb/net/usbnet.c
1 | 1 | /* |
2 | - * USB Networking Links | |
2 | + * USB Network driver infrastructure | |
3 | 3 | * Copyright (C) 2000-2005 by David Brownell |
4 | 4 | * Copyright (C) 2003-2005 David Hollis <dhollis@davehollis.com> |
5 | 5 | * |
6 | 6 | |
... | ... | @@ -20,96 +20,15 @@ |
20 | 20 | |
21 | 21 | /* |
22 | 22 | * This is a generic "USB networking" framework that works with several |
23 | - * kinds of full and high speed networking devices: | |
23 | + * kinds of full and high speed networking devices: host-to-host cables, | |
24 | + * smart usb peripherals, and actual Ethernet adapters. | |
24 | 25 | * |
25 | - * + USB host-to-host "network cables", used for IP-over-USB links. | |
26 | - * These are often used for Laplink style connectivity products. | |
27 | - * - AnchorChip 2720 | |
28 | - * - Belkin, eTEK (interops with Win32 drivers) | |
29 | - * - GeneSys GL620USB-A | |
30 | - * - NetChip 1080 (interoperates with NetChip Win32 drivers) | |
31 | - * - Prolific PL-2301/2302 (replaces "plusb" driver) | |
32 | - * - KC Technology KC2190 | |
33 | - * | |
34 | - * + Smart USB devices can support such links directly, using Internet | |
35 | - * standard protocols instead of proprietary host-to-device links. | |
36 | - * - Linux PDAs like iPaq, Yopy, and Zaurus | |
37 | - * - The BLOB boot loader (for diskless booting) | |
38 | - * - Linux "gadgets", perhaps using PXA-2xx or Net2280 controllers | |
39 | - * - Devices using EPSON's sample USB firmware | |
40 | - * - CDC-Ethernet class devices, such as many cable modems | |
41 | - * | |
42 | - * + Adapters to networks such as Ethernet. | |
43 | - * - AX8817X based USB 2.0 products | |
44 | - * | |
45 | - * Links to these devices can be bridged using Linux Ethernet bridging. | |
46 | - * With minor exceptions, these all use similar USB framing for network | |
47 | - * traffic, but need different protocols for control traffic. | |
48 | - * | |
49 | - * USB devices can implement their side of this protocol at the cost | |
50 | - * of two bulk endpoints; it's not restricted to "cable" applications. | |
51 | - * See the SA1110, Zaurus, or EPSON device/client support in this driver; | |
52 | - * slave/target drivers such as "usb-eth" (on most SA-1100 PDAs) or | |
53 | - * "g_ether" (in the Linux "gadget" framework) implement that behavior | |
54 | - * within devices. | |
55 | - * | |
56 | - * | |
57 | - * CHANGELOG: | |
58 | - * | |
59 | - * 13-sep-2000 experimental, new | |
60 | - * 10-oct-2000 usb_device_id table created. | |
61 | - * 28-oct-2000 misc fixes; mostly, discard more TTL-mangled rx packets. | |
62 | - * 01-nov-2000 usb_device_id table and probing api update by | |
63 | - * Adam J. Richter <adam@yggdrasil.com>. | |
64 | - * 18-dec-2000 (db) tx watchdog, "net1080" renaming to "usbnet", device_info | |
65 | - * and prolific support, isolate net1080-specific bits, cleanup. | |
66 | - * fix unlink_urbs oops in D3 PM resume code path. | |
67 | - * | |
68 | - * 02-feb-2001 (db) fix tx skb sharing, packet length, match_flags, ... | |
69 | - * 08-feb-2001 stubbed in "linuxdev", maybe the SA-1100 folk can use it; | |
70 | - * AnchorChips 2720 support (from spec) for testing; | |
71 | - * fix bit-ordering problem with ethernet multicast addr | |
72 | - * 19-feb-2001 Support for clearing halt conditions. SA1100 UDC support | |
73 | - * updates. Oleg Drokin (green@iXcelerator.com) | |
74 | - * 25-mar-2001 More SA-1100 updates, including workaround for ip problem | |
75 | - * expecting cleared skb->cb and framing change to match latest | |
76 | - * handhelds.org version (Oleg). Enable device IDs from the | |
77 | - * Win32 Belkin driver; other cleanups (db). | |
78 | - * 16-jul-2001 Bugfixes for uhci oops-on-unplug, Belkin support, various | |
79 | - * cleanups for problems not yet seen in the field. (db) | |
80 | - * 17-oct-2001 Handle "Advance USBNET" product, like Belkin/eTEK devices, | |
81 | - * from Ioannis Mavroukakis <i.mavroukakis@btinternet.com>; | |
82 | - * rx unlinks somehow weren't async; minor cleanup. | |
83 | - * 03-nov-2001 Merged GeneSys driver; original code from Jiun-Jie Huang | |
84 | - * <huangjj@genesyslogic.com.tw>, updated by Stanislav Brabec | |
85 | - * <utx@penguin.cz>. Made framing options (NetChip/GeneSys) | |
86 | - * tie mostly to (sub)driver info. Workaround some PL-2302 | |
87 | - * chips that seem to reject SET_INTERFACE requests. | |
88 | - * | |
89 | - * 06-apr-2002 Added ethtool support, based on a patch from Brad Hards. | |
90 | - * Level of diagnostics is more configurable; they use device | |
91 | - * location (usb_device->devpath) instead of address (2.5). | |
92 | - * For tx_fixup, memflags can't be NOIO. | |
93 | - * 07-may-2002 Generalize/cleanup keventd support, handling rx stalls (mostly | |
94 | - * for USB 2.0 TTs) and memory shortages (potential) too. (db) | |
95 | - * Use "locally assigned" IEEE802 address space. (Brad Hards) | |
96 | - * 18-oct-2002 Support for Zaurus (Pavel Machek), related cleanup (db). | |
97 | - * 14-dec-2002 Remove Zaurus-private crc32 code (Pavel); 2.5 oops fix, | |
98 | - * cleanups and stubbed PXA-250 support (db), fix for framing | |
99 | - * issues on Z, net1080, and gl620a (Toby Milne) | |
100 | - * | |
101 | - * 31-mar-2003 Use endpoint descriptors: high speed support, simpler sa1100 | |
102 | - * vs pxa25x, and CDC Ethernet. Throttle down log floods on | |
103 | - * disconnect; other cleanups. (db) Flush net1080 fifos | |
104 | - * after several sequential framing errors. (Johannes Erdfelt) | |
105 | - * 22-aug-2003 AX8817X support (Dave Hollis). | |
106 | - * | |
107 | - * 14-jun-2004 Trivial patch for AX8817X based Buffalo LUA-U2-KTX in Japan | |
108 | - * (Neil Bortnak) | |
109 | - * 03-nov-2004 Trivial patch for KC2190 (KC-190) chip. (Jonathan McDowell) | |
110 | - * | |
111 | - * 01-feb-2005 AX88772 support (Phil Chang & Dave Hollis) | |
112 | - *-------------------------------------------------------------------------*/ | |
26 | + * These devices usually differ in terms of control protocols (if they | |
27 | + * even have one!) and sometimes they define new framing to wrap or batch | |
28 | + * Ethernet packets. Otherwise, they talk to USB pretty much the same, | |
29 | + * so interface (un)binding, endpoint I/O queues, fault handling, and other | |
30 | + * issues can usefully be addressed by this framework. | |
31 | + */ | |
113 | 32 | |
114 | 33 | // #define DEBUG // error path messages, extra info |
115 | 34 | // #define VERBOSE // more; success messages |
116 | 35 | |
... | ... | @@ -302,79 +221,8 @@ |
302 | 221 | EXPORT_SYMBOL_GPL(usbnet_skb_return); |
303 | 222 | |
304 | 223 | |
305 | -#ifdef CONFIG_USB_PL2301 | |
306 | -#define HAVE_HARDWARE | |
307 | - | |
308 | 224 | /*------------------------------------------------------------------------- |
309 | 225 | * |
310 | - * Prolific PL-2301/PL-2302 driver ... http://www.prolifictech.com | |
311 | - * | |
312 | - * The protocol and handshaking used here should be bug-compatible | |
313 | - * with the Linux 2.2 "plusb" driver, by Deti Fliegl. | |
314 | - * | |
315 | - *-------------------------------------------------------------------------*/ | |
316 | - | |
317 | -/* | |
318 | - * Bits 0-4 can be used for software handshaking; they're set from | |
319 | - * one end, cleared from the other, "read" with the interrupt byte. | |
320 | - */ | |
321 | -#define PL_S_EN (1<<7) /* (feature only) suspend enable */ | |
322 | -/* reserved bit -- rx ready (6) ? */ | |
323 | -#define PL_TX_READY (1<<5) /* (interrupt only) transmit ready */ | |
324 | -#define PL_RESET_OUT (1<<4) /* reset output pipe */ | |
325 | -#define PL_RESET_IN (1<<3) /* reset input pipe */ | |
326 | -#define PL_TX_C (1<<2) /* transmission complete */ | |
327 | -#define PL_TX_REQ (1<<1) /* transmission received */ | |
328 | -#define PL_PEER_E (1<<0) /* peer exists */ | |
329 | - | |
330 | -static inline int | |
331 | -pl_vendor_req (struct usbnet *dev, u8 req, u8 val, u8 index) | |
332 | -{ | |
333 | - return usb_control_msg (dev->udev, | |
334 | - usb_rcvctrlpipe (dev->udev, 0), | |
335 | - req, | |
336 | - USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, | |
337 | - val, index, | |
338 | - NULL, 0, | |
339 | - USB_CTRL_GET_TIMEOUT); | |
340 | -} | |
341 | - | |
342 | -static inline int | |
343 | -pl_clear_QuickLink_features (struct usbnet *dev, int val) | |
344 | -{ | |
345 | - return pl_vendor_req (dev, 1, (u8) val, 0); | |
346 | -} | |
347 | - | |
348 | -static inline int | |
349 | -pl_set_QuickLink_features (struct usbnet *dev, int val) | |
350 | -{ | |
351 | - return pl_vendor_req (dev, 3, (u8) val, 0); | |
352 | -} | |
353 | - | |
354 | -/*-------------------------------------------------------------------------*/ | |
355 | - | |
356 | -static int pl_reset (struct usbnet *dev) | |
357 | -{ | |
358 | - /* some units seem to need this reset, others reject it utterly. | |
359 | - * FIXME be more like "naplink" or windows drivers. | |
360 | - */ | |
361 | - (void) pl_set_QuickLink_features (dev, | |
362 | - PL_S_EN|PL_RESET_OUT|PL_RESET_IN|PL_PEER_E); | |
363 | - return 0; | |
364 | -} | |
365 | - | |
366 | -static const struct driver_info prolific_info = { | |
367 | - .description = "Prolific PL-2301/PL-2302", | |
368 | - .flags = FLAG_NO_SETINT, | |
369 | - /* some PL-2302 versions seem to fail usb_set_interface() */ | |
370 | - .reset = pl_reset, | |
371 | -}; | |
372 | - | |
373 | -#endif /* CONFIG_USB_PL2301 */ | |
374 | - | |
375 | - | |
376 | -/*------------------------------------------------------------------------- | |
377 | - * | |
378 | 226 | * Network Device Driver (peer link to "Host Device", from USB host) |
379 | 227 | * |
380 | 228 | *-------------------------------------------------------------------------*/ |
381 | 229 | |
382 | 230 | |
383 | 231 | |
384 | 232 | |
... | ... | @@ -1356,61 +1204,23 @@ |
1356 | 1204 | |
1357 | 1205 | /*-------------------------------------------------------------------------*/ |
1358 | 1206 | |
1359 | -#ifndef HAVE_HARDWARE | |
1360 | -#error You need to configure some hardware for this driver | |
1361 | -#endif | |
1362 | - | |
1363 | -/* | |
1364 | - * chip vendor names won't normally be on the cables, and | |
1365 | - * may not be on the device. | |
1366 | - */ | |
1367 | - | |
1368 | -static const struct usb_device_id products [] = { | |
1369 | - | |
1370 | -#ifdef CONFIG_USB_PL2301 | |
1371 | -{ | |
1372 | - USB_DEVICE (0x067b, 0x0000), // PL-2301 | |
1373 | - .driver_info = (unsigned long) &prolific_info, | |
1374 | -}, { | |
1375 | - USB_DEVICE (0x067b, 0x0001), // PL-2302 | |
1376 | - .driver_info = (unsigned long) &prolific_info, | |
1377 | -}, | |
1378 | -#endif | |
1379 | - { }, // END | |
1380 | -}; | |
1381 | -MODULE_DEVICE_TABLE (usb, products); | |
1382 | - | |
1383 | -static struct usb_driver usbnet_driver = { | |
1384 | - .owner = THIS_MODULE, | |
1385 | - .name = driver_name, | |
1386 | - .id_table = products, | |
1387 | - .probe = usbnet_probe, | |
1388 | - .disconnect = usbnet_disconnect, | |
1389 | - .suspend = usbnet_suspend, | |
1390 | - .resume = usbnet_resume, | |
1391 | -}; | |
1392 | - | |
1393 | -/*-------------------------------------------------------------------------*/ | |
1394 | - | |
1395 | 1207 | static int __init usbnet_init(void) |
1396 | 1208 | { |
1397 | - // compiler should optimize these out | |
1209 | + /* compiler should optimize this out */ | |
1398 | 1210 | BUG_ON (sizeof (((struct sk_buff *)0)->cb) |
1399 | 1211 | < sizeof (struct skb_data)); |
1400 | 1212 | |
1401 | 1213 | random_ether_addr(node_id); |
1402 | - | |
1403 | - return usb_register(&usbnet_driver); | |
1214 | + return 0; | |
1404 | 1215 | } |
1405 | 1216 | module_init(usbnet_init); |
1406 | 1217 | |
1407 | 1218 | static void __exit usbnet_exit(void) |
1408 | 1219 | { |
1409 | - usb_deregister(&usbnet_driver); | |
1410 | 1220 | } |
1411 | 1221 | module_exit(usbnet_exit); |
1412 | 1222 | |
1413 | 1223 | MODULE_AUTHOR("David Brownell"); |
1414 | -MODULE_DESCRIPTION("USB Host-to-Host Link Drivers (numerous vendors)"); | |
1224 | +MODULE_DESCRIPTION("USB network driver framework"); | |
1415 | 1225 | MODULE_LICENSE("GPL"); |