mirror of https://gitee.com/openkylin/linux.git
[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>
This commit is contained in:
parent
64e049102d
commit
090ffa9d0e
|
@ -125,20 +125,6 @@ config USB_USBNET
|
||||||
To compile this driver as a module, choose M here: the
|
To compile this driver as a module, choose M here: the
|
||||||
module will be called usbnet.
|
module will be called usbnet.
|
||||||
|
|
||||||
comment "USB Host-to-Host Cables"
|
|
||||||
depends on USB_USBNET
|
|
||||||
|
|
||||||
config USB_PL2301
|
|
||||||
boolean "Prolific PL-2301/2302 based cables"
|
|
||||||
default y
|
|
||||||
# handshake/init/reset problems, from original 'plusb' driver
|
|
||||||
depends on USB_USBNET && EXPERIMENTAL
|
|
||||||
help
|
|
||||||
Choose this option if you're using a host-to-host cable
|
|
||||||
with one of these chips.
|
|
||||||
|
|
||||||
comment "Drivers built using the usbnet core"
|
|
||||||
|
|
||||||
config USB_NET_AX8817X
|
config USB_NET_AX8817X
|
||||||
tristate "ASIX AX88xxx Based USB 2.0 Ethernet Adapters"
|
tristate "ASIX AX88xxx Based USB 2.0 Ethernet Adapters"
|
||||||
depends on USB_USBNET && NET_ETHERNET
|
depends on USB_USBNET && NET_ETHERNET
|
||||||
|
@ -212,6 +198,15 @@ config USB_NET_NET1080
|
||||||
on this design: one NetChip 1080 chip and supporting logic,
|
on this design: one NetChip 1080 chip and supporting logic,
|
||||||
optionally with LEDs that indicate traffic
|
optionally with LEDs that indicate traffic
|
||||||
|
|
||||||
|
config USB_NET_PLUSB
|
||||||
|
tristate "Prolific PL-2301/2302 based cables"
|
||||||
|
# if the handshake/init/reset problems, from original 'plusb',
|
||||||
|
# are ever resolved ... then remove "experimental"
|
||||||
|
depends on USB_USBNET && EXPERIMENTAL
|
||||||
|
help
|
||||||
|
Choose this option if you're using a host-to-host cable
|
||||||
|
with one of these chips.
|
||||||
|
|
||||||
config USB_NET_RNDIS_HOST
|
config USB_NET_RNDIS_HOST
|
||||||
tristate "Host for RNDIS devices (EXPERIMENTAL)"
|
tristate "Host for RNDIS devices (EXPERIMENTAL)"
|
||||||
depends on USB_USBNET && EXPERIMENTAL
|
depends on USB_USBNET && EXPERIMENTAL
|
||||||
|
|
|
@ -10,6 +10,7 @@ obj-$(CONFIG_USB_NET_AX8817X) += asix.o
|
||||||
obj-$(CONFIG_USB_NET_CDCETHER) += cdc_ether.o
|
obj-$(CONFIG_USB_NET_CDCETHER) += cdc_ether.o
|
||||||
obj-$(CONFIG_USB_NET_GL620A) += gl620a.o
|
obj-$(CONFIG_USB_NET_GL620A) += gl620a.o
|
||||||
obj-$(CONFIG_USB_NET_NET1080) += net1080.o
|
obj-$(CONFIG_USB_NET_NET1080) += net1080.o
|
||||||
|
obj-$(CONFIG_USB_NET_PLUSB) += plusb.o
|
||||||
obj-$(CONFIG_USB_NET_RNDIS_HOST) += rndis_host.o
|
obj-$(CONFIG_USB_NET_RNDIS_HOST) += rndis_host.o
|
||||||
obj-$(CONFIG_USB_NET_CDC_SUBSET) += cdc_subset.o
|
obj-$(CONFIG_USB_NET_CDC_SUBSET) += cdc_subset.o
|
||||||
obj-$(CONFIG_USB_NET_ZAURUS) += zaurus.o
|
obj-$(CONFIG_USB_NET_ZAURUS) += zaurus.o
|
||||||
|
|
|
@ -0,0 +1,156 @@
|
||||||
|
/*
|
||||||
|
* PL-2301/2302 USB host-to-host link cables
|
||||||
|
* Copyright (C) 2000-2005 by David Brownell
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
// #define DEBUG // error path messages, extra info
|
||||||
|
// #define VERBOSE // more; success messages
|
||||||
|
|
||||||
|
#include <linux/config.h>
|
||||||
|
#ifdef CONFIG_USB_DEBUG
|
||||||
|
# define DEBUG
|
||||||
|
#endif
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/netdevice.h>
|
||||||
|
#include <linux/etherdevice.h>
|
||||||
|
#include <linux/ethtool.h>
|
||||||
|
#include <linux/workqueue.h>
|
||||||
|
#include <linux/mii.h>
|
||||||
|
#include <linux/usb.h>
|
||||||
|
|
||||||
|
#include "usbnet.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prolific PL-2301/PL-2302 driver ... http://www.prolifictech.com
|
||||||
|
*
|
||||||
|
* The protocol and handshaking used here should be bug-compatible
|
||||||
|
* with the Linux 2.2 "plusb" driver, by Deti Fliegl.
|
||||||
|
*
|
||||||
|
* HEADS UP: this handshaking isn't all that robust. This driver
|
||||||
|
* gets confused easily if you unplug one end of the cable then
|
||||||
|
* try to connect it again; you'll need to restart both ends. The
|
||||||
|
* "naplink" software (used by some PlayStation/2 deveopers) does
|
||||||
|
* the handshaking much better! Also, sometimes this hardware
|
||||||
|
* seems to get wedged under load. Prolific docs are weak, and
|
||||||
|
* don't identify differences between PL2301 and PL2302, much less
|
||||||
|
* anything to explain the different PL2302 versions observed.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bits 0-4 can be used for software handshaking; they're set from
|
||||||
|
* one end, cleared from the other, "read" with the interrupt byte.
|
||||||
|
*/
|
||||||
|
#define PL_S_EN (1<<7) /* (feature only) suspend enable */
|
||||||
|
/* reserved bit -- rx ready (6) ? */
|
||||||
|
#define PL_TX_READY (1<<5) /* (interrupt only) transmit ready */
|
||||||
|
#define PL_RESET_OUT (1<<4) /* reset output pipe */
|
||||||
|
#define PL_RESET_IN (1<<3) /* reset input pipe */
|
||||||
|
#define PL_TX_C (1<<2) /* transmission complete */
|
||||||
|
#define PL_TX_REQ (1<<1) /* transmission received */
|
||||||
|
#define PL_PEER_E (1<<0) /* peer exists */
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
pl_vendor_req(struct usbnet *dev, u8 req, u8 val, u8 index)
|
||||||
|
{
|
||||||
|
return usb_control_msg(dev->udev,
|
||||||
|
usb_rcvctrlpipe(dev->udev, 0),
|
||||||
|
req,
|
||||||
|
USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
||||||
|
val, index,
|
||||||
|
NULL, 0,
|
||||||
|
USB_CTRL_GET_TIMEOUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
pl_clear_QuickLink_features(struct usbnet *dev, int val)
|
||||||
|
{
|
||||||
|
return pl_vendor_req(dev, 1, (u8) val, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
pl_set_QuickLink_features(struct usbnet *dev, int val)
|
||||||
|
{
|
||||||
|
return pl_vendor_req(dev, 3, (u8) val, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int pl_reset(struct usbnet *dev)
|
||||||
|
{
|
||||||
|
/* some units seem to need this reset, others reject it utterly.
|
||||||
|
* FIXME be more like "naplink" or windows drivers.
|
||||||
|
*/
|
||||||
|
(void) pl_set_QuickLink_features(dev,
|
||||||
|
PL_S_EN|PL_RESET_OUT|PL_RESET_IN|PL_PEER_E);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct driver_info prolific_info = {
|
||||||
|
.description = "Prolific PL-2301/PL-2302",
|
||||||
|
.flags = FLAG_NO_SETINT,
|
||||||
|
/* some PL-2302 versions seem to fail usb_set_interface() */
|
||||||
|
.reset = pl_reset,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Proilific's name won't normally be on the cables, and
|
||||||
|
* may not be on the device.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const struct usb_device_id products [] = {
|
||||||
|
|
||||||
|
{
|
||||||
|
USB_DEVICE(0x067b, 0x0000), // PL-2301
|
||||||
|
.driver_info = (unsigned long) &prolific_info,
|
||||||
|
}, {
|
||||||
|
USB_DEVICE(0x067b, 0x0001), // PL-2302
|
||||||
|
.driver_info = (unsigned long) &prolific_info,
|
||||||
|
},
|
||||||
|
|
||||||
|
{ }, // END
|
||||||
|
};
|
||||||
|
MODULE_DEVICE_TABLE(usb, products);
|
||||||
|
|
||||||
|
static struct usb_driver plusb_driver = {
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
.name = "plusb",
|
||||||
|
.id_table = products,
|
||||||
|
.probe = usbnet_probe,
|
||||||
|
.disconnect = usbnet_disconnect,
|
||||||
|
.suspend = usbnet_suspend,
|
||||||
|
.resume = usbnet_resume,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init plusb_init(void)
|
||||||
|
{
|
||||||
|
return usb_register(&plusb_driver);
|
||||||
|
}
|
||||||
|
module_init(plusb_init);
|
||||||
|
|
||||||
|
static void __exit plusb_exit(void)
|
||||||
|
{
|
||||||
|
usb_deregister(&plusb_driver);
|
||||||
|
}
|
||||||
|
module_exit(plusb_exit);
|
||||||
|
|
||||||
|
MODULE_AUTHOR("David Brownell");
|
||||||
|
MODULE_DESCRIPTION("Prolific PL-2301/2302 USB Host to Host Link Driver");
|
||||||
|
MODULE_LICENSE("GPL");
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* USB Networking Links
|
* USB Network driver infrastructure
|
||||||
* Copyright (C) 2000-2005 by David Brownell
|
* Copyright (C) 2000-2005 by David Brownell
|
||||||
* Copyright (C) 2003-2005 David Hollis <dhollis@davehollis.com>
|
* Copyright (C) 2003-2005 David Hollis <dhollis@davehollis.com>
|
||||||
*
|
*
|
||||||
|
@ -20,96 +20,15 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is a generic "USB networking" framework that works with several
|
* This is a generic "USB networking" framework that works with several
|
||||||
* kinds of full and high speed networking devices:
|
* kinds of full and high speed networking devices: host-to-host cables,
|
||||||
|
* smart usb peripherals, and actual Ethernet adapters.
|
||||||
*
|
*
|
||||||
* + USB host-to-host "network cables", used for IP-over-USB links.
|
* These devices usually differ in terms of control protocols (if they
|
||||||
* These are often used for Laplink style connectivity products.
|
* even have one!) and sometimes they define new framing to wrap or batch
|
||||||
* - AnchorChip 2720
|
* Ethernet packets. Otherwise, they talk to USB pretty much the same,
|
||||||
* - Belkin, eTEK (interops with Win32 drivers)
|
* so interface (un)binding, endpoint I/O queues, fault handling, and other
|
||||||
* - GeneSys GL620USB-A
|
* issues can usefully be addressed by this framework.
|
||||||
* - NetChip 1080 (interoperates with NetChip Win32 drivers)
|
*/
|
||||||
* - Prolific PL-2301/2302 (replaces "plusb" driver)
|
|
||||||
* - KC Technology KC2190
|
|
||||||
*
|
|
||||||
* + Smart USB devices can support such links directly, using Internet
|
|
||||||
* standard protocols instead of proprietary host-to-device links.
|
|
||||||
* - Linux PDAs like iPaq, Yopy, and Zaurus
|
|
||||||
* - The BLOB boot loader (for diskless booting)
|
|
||||||
* - Linux "gadgets", perhaps using PXA-2xx or Net2280 controllers
|
|
||||||
* - Devices using EPSON's sample USB firmware
|
|
||||||
* - CDC-Ethernet class devices, such as many cable modems
|
|
||||||
*
|
|
||||||
* + Adapters to networks such as Ethernet.
|
|
||||||
* - AX8817X based USB 2.0 products
|
|
||||||
*
|
|
||||||
* Links to these devices can be bridged using Linux Ethernet bridging.
|
|
||||||
* With minor exceptions, these all use similar USB framing for network
|
|
||||||
* traffic, but need different protocols for control traffic.
|
|
||||||
*
|
|
||||||
* USB devices can implement their side of this protocol at the cost
|
|
||||||
* of two bulk endpoints; it's not restricted to "cable" applications.
|
|
||||||
* See the SA1110, Zaurus, or EPSON device/client support in this driver;
|
|
||||||
* slave/target drivers such as "usb-eth" (on most SA-1100 PDAs) or
|
|
||||||
* "g_ether" (in the Linux "gadget" framework) implement that behavior
|
|
||||||
* within devices.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* CHANGELOG:
|
|
||||||
*
|
|
||||||
* 13-sep-2000 experimental, new
|
|
||||||
* 10-oct-2000 usb_device_id table created.
|
|
||||||
* 28-oct-2000 misc fixes; mostly, discard more TTL-mangled rx packets.
|
|
||||||
* 01-nov-2000 usb_device_id table and probing api update by
|
|
||||||
* Adam J. Richter <adam@yggdrasil.com>.
|
|
||||||
* 18-dec-2000 (db) tx watchdog, "net1080" renaming to "usbnet", device_info
|
|
||||||
* and prolific support, isolate net1080-specific bits, cleanup.
|
|
||||||
* fix unlink_urbs oops in D3 PM resume code path.
|
|
||||||
*
|
|
||||||
* 02-feb-2001 (db) fix tx skb sharing, packet length, match_flags, ...
|
|
||||||
* 08-feb-2001 stubbed in "linuxdev", maybe the SA-1100 folk can use it;
|
|
||||||
* AnchorChips 2720 support (from spec) for testing;
|
|
||||||
* fix bit-ordering problem with ethernet multicast addr
|
|
||||||
* 19-feb-2001 Support for clearing halt conditions. SA1100 UDC support
|
|
||||||
* updates. Oleg Drokin (green@iXcelerator.com)
|
|
||||||
* 25-mar-2001 More SA-1100 updates, including workaround for ip problem
|
|
||||||
* expecting cleared skb->cb and framing change to match latest
|
|
||||||
* handhelds.org version (Oleg). Enable device IDs from the
|
|
||||||
* Win32 Belkin driver; other cleanups (db).
|
|
||||||
* 16-jul-2001 Bugfixes for uhci oops-on-unplug, Belkin support, various
|
|
||||||
* cleanups for problems not yet seen in the field. (db)
|
|
||||||
* 17-oct-2001 Handle "Advance USBNET" product, like Belkin/eTEK devices,
|
|
||||||
* from Ioannis Mavroukakis <i.mavroukakis@btinternet.com>;
|
|
||||||
* rx unlinks somehow weren't async; minor cleanup.
|
|
||||||
* 03-nov-2001 Merged GeneSys driver; original code from Jiun-Jie Huang
|
|
||||||
* <huangjj@genesyslogic.com.tw>, updated by Stanislav Brabec
|
|
||||||
* <utx@penguin.cz>. Made framing options (NetChip/GeneSys)
|
|
||||||
* tie mostly to (sub)driver info. Workaround some PL-2302
|
|
||||||
* chips that seem to reject SET_INTERFACE requests.
|
|
||||||
*
|
|
||||||
* 06-apr-2002 Added ethtool support, based on a patch from Brad Hards.
|
|
||||||
* Level of diagnostics is more configurable; they use device
|
|
||||||
* location (usb_device->devpath) instead of address (2.5).
|
|
||||||
* For tx_fixup, memflags can't be NOIO.
|
|
||||||
* 07-may-2002 Generalize/cleanup keventd support, handling rx stalls (mostly
|
|
||||||
* for USB 2.0 TTs) and memory shortages (potential) too. (db)
|
|
||||||
* Use "locally assigned" IEEE802 address space. (Brad Hards)
|
|
||||||
* 18-oct-2002 Support for Zaurus (Pavel Machek), related cleanup (db).
|
|
||||||
* 14-dec-2002 Remove Zaurus-private crc32 code (Pavel); 2.5 oops fix,
|
|
||||||
* cleanups and stubbed PXA-250 support (db), fix for framing
|
|
||||||
* issues on Z, net1080, and gl620a (Toby Milne)
|
|
||||||
*
|
|
||||||
* 31-mar-2003 Use endpoint descriptors: high speed support, simpler sa1100
|
|
||||||
* vs pxa25x, and CDC Ethernet. Throttle down log floods on
|
|
||||||
* disconnect; other cleanups. (db) Flush net1080 fifos
|
|
||||||
* after several sequential framing errors. (Johannes Erdfelt)
|
|
||||||
* 22-aug-2003 AX8817X support (Dave Hollis).
|
|
||||||
*
|
|
||||||
* 14-jun-2004 Trivial patch for AX8817X based Buffalo LUA-U2-KTX in Japan
|
|
||||||
* (Neil Bortnak)
|
|
||||||
* 03-nov-2004 Trivial patch for KC2190 (KC-190) chip. (Jonathan McDowell)
|
|
||||||
*
|
|
||||||
* 01-feb-2005 AX88772 support (Phil Chang & Dave Hollis)
|
|
||||||
*-------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
// #define DEBUG // error path messages, extra info
|
// #define DEBUG // error path messages, extra info
|
||||||
// #define VERBOSE // more; success messages
|
// #define VERBOSE // more; success messages
|
||||||
|
@ -301,77 +220,6 @@ void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(usbnet_skb_return);
|
EXPORT_SYMBOL_GPL(usbnet_skb_return);
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_USB_PL2301
|
|
||||||
#define HAVE_HARDWARE
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Prolific PL-2301/PL-2302 driver ... http://www.prolifictech.com
|
|
||||||
*
|
|
||||||
* The protocol and handshaking used here should be bug-compatible
|
|
||||||
* with the Linux 2.2 "plusb" driver, by Deti Fliegl.
|
|
||||||
*
|
|
||||||
*-------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Bits 0-4 can be used for software handshaking; they're set from
|
|
||||||
* one end, cleared from the other, "read" with the interrupt byte.
|
|
||||||
*/
|
|
||||||
#define PL_S_EN (1<<7) /* (feature only) suspend enable */
|
|
||||||
/* reserved bit -- rx ready (6) ? */
|
|
||||||
#define PL_TX_READY (1<<5) /* (interrupt only) transmit ready */
|
|
||||||
#define PL_RESET_OUT (1<<4) /* reset output pipe */
|
|
||||||
#define PL_RESET_IN (1<<3) /* reset input pipe */
|
|
||||||
#define PL_TX_C (1<<2) /* transmission complete */
|
|
||||||
#define PL_TX_REQ (1<<1) /* transmission received */
|
|
||||||
#define PL_PEER_E (1<<0) /* peer exists */
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
pl_vendor_req (struct usbnet *dev, u8 req, u8 val, u8 index)
|
|
||||||
{
|
|
||||||
return usb_control_msg (dev->udev,
|
|
||||||
usb_rcvctrlpipe (dev->udev, 0),
|
|
||||||
req,
|
|
||||||
USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
|
||||||
val, index,
|
|
||||||
NULL, 0,
|
|
||||||
USB_CTRL_GET_TIMEOUT);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
pl_clear_QuickLink_features (struct usbnet *dev, int val)
|
|
||||||
{
|
|
||||||
return pl_vendor_req (dev, 1, (u8) val, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
pl_set_QuickLink_features (struct usbnet *dev, int val)
|
|
||||||
{
|
|
||||||
return pl_vendor_req (dev, 3, (u8) val, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static int pl_reset (struct usbnet *dev)
|
|
||||||
{
|
|
||||||
/* some units seem to need this reset, others reject it utterly.
|
|
||||||
* FIXME be more like "naplink" or windows drivers.
|
|
||||||
*/
|
|
||||||
(void) pl_set_QuickLink_features (dev,
|
|
||||||
PL_S_EN|PL_RESET_OUT|PL_RESET_IN|PL_PEER_E);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct driver_info prolific_info = {
|
|
||||||
.description = "Prolific PL-2301/PL-2302",
|
|
||||||
.flags = FLAG_NO_SETINT,
|
|
||||||
/* some PL-2302 versions seem to fail usb_set_interface() */
|
|
||||||
.reset = pl_reset,
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* CONFIG_USB_PL2301 */
|
|
||||||
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
*
|
*
|
||||||
|
@ -1354,62 +1202,24 @@ int usbnet_resume (struct usb_interface *intf)
|
||||||
EXPORT_SYMBOL_GPL(usbnet_resume);
|
EXPORT_SYMBOL_GPL(usbnet_resume);
|
||||||
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#ifndef HAVE_HARDWARE
|
|
||||||
#error You need to configure some hardware for this driver
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* chip vendor names won't normally be on the cables, and
|
|
||||||
* may not be on the device.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static const struct usb_device_id products [] = {
|
|
||||||
|
|
||||||
#ifdef CONFIG_USB_PL2301
|
|
||||||
{
|
|
||||||
USB_DEVICE (0x067b, 0x0000), // PL-2301
|
|
||||||
.driver_info = (unsigned long) &prolific_info,
|
|
||||||
}, {
|
|
||||||
USB_DEVICE (0x067b, 0x0001), // PL-2302
|
|
||||||
.driver_info = (unsigned long) &prolific_info,
|
|
||||||
},
|
|
||||||
#endif
|
|
||||||
{ }, // END
|
|
||||||
};
|
|
||||||
MODULE_DEVICE_TABLE (usb, products);
|
|
||||||
|
|
||||||
static struct usb_driver usbnet_driver = {
|
|
||||||
.owner = THIS_MODULE,
|
|
||||||
.name = driver_name,
|
|
||||||
.id_table = products,
|
|
||||||
.probe = usbnet_probe,
|
|
||||||
.disconnect = usbnet_disconnect,
|
|
||||||
.suspend = usbnet_suspend,
|
|
||||||
.resume = usbnet_resume,
|
|
||||||
};
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static int __init usbnet_init(void)
|
static int __init usbnet_init(void)
|
||||||
{
|
{
|
||||||
// compiler should optimize these out
|
/* compiler should optimize this out */
|
||||||
BUG_ON (sizeof (((struct sk_buff *)0)->cb)
|
BUG_ON (sizeof (((struct sk_buff *)0)->cb)
|
||||||
< sizeof (struct skb_data));
|
< sizeof (struct skb_data));
|
||||||
|
|
||||||
random_ether_addr(node_id);
|
random_ether_addr(node_id);
|
||||||
|
return 0;
|
||||||
return usb_register(&usbnet_driver);
|
|
||||||
}
|
}
|
||||||
module_init(usbnet_init);
|
module_init(usbnet_init);
|
||||||
|
|
||||||
static void __exit usbnet_exit(void)
|
static void __exit usbnet_exit(void)
|
||||||
{
|
{
|
||||||
usb_deregister(&usbnet_driver);
|
|
||||||
}
|
}
|
||||||
module_exit(usbnet_exit);
|
module_exit(usbnet_exit);
|
||||||
|
|
||||||
MODULE_AUTHOR("David Brownell");
|
MODULE_AUTHOR("David Brownell");
|
||||||
MODULE_DESCRIPTION("USB Host-to-Host Link Drivers (numerous vendors)");
|
MODULE_DESCRIPTION("USB network driver framework");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
|
Loading…
Reference in New Issue