aboutsummaryrefslogtreecommitdiffstats
diff options
authorGreg Kroah-Hartman <gregkh@suse.de>2009-04-06 12:27:57 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2009-04-06 12:27:57 -0700
commitb4a8f06022ecf4c5c279a61de89a1d3758e08e0e (patch)
tree91c7648c3548b83655ddf18bbca0dedadb79d49f
parent720460da39aa61e2e5e368b916e6c6252e3306b4 (diff)
downloadpatches-b4a8f06022ecf4c5c279a61de89a1d3758e08e0e.tar.gz
bugfixes
-rw-r--r--driver-core.current/driver-core-allow-non-root-users-to-listen-to-uevents.patch31
-rw-r--r--driver-core.current/driver-core-fix-driver_match_device.patch37
-rw-r--r--driver-core.current/sysfs-don-t-use-global-workqueue-in-sysfs_schedule_callback.patch133
-rw-r--r--series21
-rw-r--r--staging/staging-at76-convert-to-netdev_ops.patch61
-rw-r--r--staging/staging-epl-convert-to-netdev_ops.patch49
-rw-r--r--staging/staging-et131x-convert-to-netdev_ops.patch57
-rw-r--r--staging/staging-line6-convert-to-snd_card_create.patch34
-rw-r--r--staging/staging-otus-convert-to-netdev_ops.patch96
-rw-r--r--staging/staging-rt2860-convert-to-netdev_ops.patch67
-rw-r--r--staging/staging-rt2870-add-id-for-sitecom-wl-315.patch31
-rw-r--r--staging/staging-rt2870-convert-to-netdev_ops.patch72
-rw-r--r--staging/staging-rt3070-convert-to-netdev_ops.patch81
-rw-r--r--staging/staging-slicoss-convert-to-netdev_ops.patch54
-rw-r--r--staging/staging-sxg-convert-to-netdev_ops.patch59
-rw-r--r--staging/staging-wlan-ng-convert-to-netdev_ops.patch52
-rw-r--r--usb.current/usb-cdc-acm-zydas-1602-identifier-needed.patch31
-rw-r--r--usb.current/usb-ftdi_sio-add-vendor-project-id-for-jeti-specbos-1201-spectrometer.patch45
-rw-r--r--usb.current/usb-gadget-fix-ethernet-link-reports-to-ethtool.patch51
-rw-r--r--usb.current/usb-symbol-remove-various-bits-of-left-over-junk.patch112
-rw-r--r--usb.current/usb-tty-pl2303-needs-identifiers-for-siemens-s81-as-well-as-ef81.patch41
21 files changed, 1215 insertions, 0 deletions
diff --git a/driver-core.current/driver-core-allow-non-root-users-to-listen-to-uevents.patch b/driver-core.current/driver-core-allow-non-root-users-to-listen-to-uevents.patch
new file mode 100644
index 00000000000000..ffcbd172f43c5c
--- /dev/null
+++ b/driver-core.current/driver-core-allow-non-root-users-to-listen-to-uevents.patch
@@ -0,0 +1,31 @@
+From kay.sievers@vrfy.org Mon Apr 6 12:14:46 2009
+From: Kay Sievers <kay.sievers@vrfy.org>
+Date: Fri, 03 Apr 2009 19:04:15 +0200
+Subject: driver core: allow non-root users to listen to uevents
+To: Greg KH <greg@kroah.com>
+Message-ID: <1238778255.16630.4.camel@poy>
+
+From: Kay Sievers <kay.sievers@vrfy.org>
+
+Users can read sysfs files, there is no reason they should not be
+allowed to listen to uevents. This lets xorg and other userspace
+programs properly get these messages without having to be root.
+
+Signed-off-by: Kay Sievers <kay.sievers@vrfy.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ lib/kobject_uevent.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/lib/kobject_uevent.c
++++ b/lib/kobject_uevent.c
+@@ -328,7 +328,7 @@ static int __init kobject_uevent_init(vo
+ "kobject_uevent: unable to create netlink socket!\n");
+ return -ENODEV;
+ }
+-
++ netlink_set_nonroot(NETLINK_KOBJECT_UEVENT, NL_NONROOT_RECV);
+ return 0;
+ }
+
diff --git a/driver-core.current/driver-core-fix-driver_match_device.patch b/driver-core.current/driver-core-fix-driver_match_device.patch
new file mode 100644
index 00000000000000..fa8fc36308243a
--- /dev/null
+++ b/driver-core.current/driver-core-fix-driver_match_device.patch
@@ -0,0 +1,37 @@
+From tom.leiming@gmail.com Mon Apr 6 12:10:53 2009
+From: Ming Lei <tom.leiming@gmail.com>
+Date: Fri, 27 Mar 2009 21:50:00 +0800
+Subject: driver core: fix driver_match_device
+To: greg@kroah.com
+Cc: g.liakhovetski@gmx.de, Ming Lei <tom.leiming@gmail.com>
+Message-ID: <1238161800-4714-1-git-send-email-tom.leiming@gmail.com>
+
+
+From: Ming Lei <tom.leiming@gmail.com>
+
+This patch fixes a bug introduced in commit
+49b420a13ff95b449947181190b08367348e3e1b.
+
+If a instance of bus_type doesn't have .match method,
+all .probe of drivers in the bus should be called, or else
+the .probe have not a chance to be called.
+
+Signed-off-by: Ming Lei <tom.leiming@gmail.com>
+Reported-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/base/base.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/base/base.h
++++ b/drivers/base/base.h
+@@ -115,7 +115,7 @@ extern int driver_probe_device(struct de
+ static inline int driver_match_device(struct device_driver *drv,
+ struct device *dev)
+ {
+- return drv->bus->match && drv->bus->match(dev, drv);
++ return drv->bus->match ? drv->bus->match(dev, drv) : 1;
+ }
+
+ extern void sysdev_shutdown(void);
diff --git a/driver-core.current/sysfs-don-t-use-global-workqueue-in-sysfs_schedule_callback.patch b/driver-core.current/sysfs-don-t-use-global-workqueue-in-sysfs_schedule_callback.patch
new file mode 100644
index 00000000000000..758d11c81838de
--- /dev/null
+++ b/driver-core.current/sysfs-don-t-use-global-workqueue-in-sysfs_schedule_callback.patch
@@ -0,0 +1,133 @@
+From achiang@hp.com Mon Apr 6 10:39:45 2009
+From: Alex Chiang <achiang@hp.com>
+Date: Wed, 25 Mar 2009 15:11:36 -0600
+Subject: sysfs: don't use global workqueue in sysfs_schedule_callback()
+To: gregkh@suse.de
+Cc: kaneshige.kenji@jp.fujitsu.com
+Message-ID: <20090325211136.GC30098@ldl.fc.hp.com>
+
+
+A sysfs attribute using sysfs_schedule_callback() to commit suicide
+may end up calling device_unregister(), which will eventually call
+a driver's ->remove function.
+
+Drivers may call flush_scheduled_work() in their shutdown routines,
+in which case lockdep will complain with something like the following:
+
+ =============================================
+ [ INFO: possible recursive locking detected ]
+ 2.6.29-rc8-kk #1
+ ---------------------------------------------
+ events/4/56 is trying to acquire lock:
+ (events){--..}, at: [<ffffffff80257fc0>] flush_workqueue+0x0/0xa0
+
+ but task is already holding lock:
+ (events){--..}, at: [<ffffffff80257648>] run_workqueue+0x108/0x230
+
+ other info that might help us debug this:
+ 3 locks held by events/4/56:
+ #0: (events){--..}, at: [<ffffffff80257648>] run_workqueue+0x108/0x230
+ #1: (&ss->work){--..}, at: [<ffffffff80257648>] run_workqueue+0x108/0x230
+ #2: (pci_remove_rescan_mutex){--..}, at: [<ffffffff803c10d1>] remove_callback+0x21/0x40
+
+ stack backtrace:
+ Pid: 56, comm: events/4 Not tainted 2.6.29-rc8-kk #1
+ Call Trace:
+ [<ffffffff8026dfcd>] validate_chain+0xb7d/0x1260
+ [<ffffffff8026eade>] __lock_acquire+0x42e/0xa40
+ [<ffffffff8026f148>] lock_acquire+0x58/0x80
+ [<ffffffff80257fc0>] ? flush_workqueue+0x0/0xa0
+ [<ffffffff8025800d>] flush_workqueue+0x4d/0xa0
+ [<ffffffff80257fc0>] ? flush_workqueue+0x0/0xa0
+ [<ffffffff80258070>] flush_scheduled_work+0x10/0x20
+ [<ffffffffa0144065>] e1000_remove+0x55/0xfe [e1000e]
+ [<ffffffff8033ee30>] ? sysfs_schedule_callback_work+0x0/0x50
+ [<ffffffff803bfeb2>] pci_device_remove+0x32/0x70
+ [<ffffffff80441da9>] __device_release_driver+0x59/0x90
+ [<ffffffff80441edb>] device_release_driver+0x2b/0x40
+ [<ffffffff804419d6>] bus_remove_device+0xa6/0x120
+ [<ffffffff8043e46b>] device_del+0x12b/0x190
+ [<ffffffff8043e4f6>] device_unregister+0x26/0x70
+ [<ffffffff803ba969>] pci_stop_dev+0x49/0x60
+ [<ffffffff803baab0>] pci_remove_bus_device+0x40/0xc0
+ [<ffffffff803c10d9>] remove_callback+0x29/0x40
+ [<ffffffff8033ee4f>] sysfs_schedule_callback_work+0x1f/0x50
+ [<ffffffff8025769a>] run_workqueue+0x15a/0x230
+ [<ffffffff80257648>] ? run_workqueue+0x108/0x230
+ [<ffffffff8025846f>] worker_thread+0x9f/0x100
+ [<ffffffff8025bce0>] ? autoremove_wake_function+0x0/0x40
+ [<ffffffff802583d0>] ? worker_thread+0x0/0x100
+ [<ffffffff8025b89d>] kthread+0x4d/0x80
+ [<ffffffff8020d4ba>] child_rip+0xa/0x20
+ [<ffffffff8020cebc>] ? restore_args+0x0/0x30
+ [<ffffffff8025b850>] ? kthread+0x0/0x80
+ [<ffffffff8020d4b0>] ? child_rip+0x0/0x20
+
+Although we know that the device_unregister path will never acquire
+a lock that a driver might try to acquire in its ->remove, in general
+we should never attempt to flush a workqueue from within the same
+workqueue, and lockdep rightly complains.
+
+So as long as sysfs attributes cannot commit suicide directly and we
+are stuck with this callback mechanism, put the sysfs callbacks on
+their own workqueue instead of the global one.
+
+This has the side benefit that if a suicidal sysfs attribute kicks
+off a long chain of ->remove callbacks, we no longer induce a long
+delay on the global queue.
+
+This also fixes a missing module_put in the error path introduced
+by sysfs-only-allow-one-scheduled-removal-callback-per-kobj.patch.
+
+We never destroy the workqueue, but I'm not sure that's a
+problem.
+
+Reported-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
+Tested-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
+Signed-off-by: Alex Chiang <achiang@hp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/sysfs/file.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+--- a/fs/sysfs/file.c
++++ b/fs/sysfs/file.c
+@@ -667,6 +667,7 @@ struct sysfs_schedule_callback_struct {
+ struct work_struct work;
+ };
+
++static struct workqueue_struct *sysfs_workqueue;
+ static DEFINE_MUTEX(sysfs_workq_mutex);
+ static LIST_HEAD(sysfs_workq);
+ static void sysfs_schedule_callback_work(struct work_struct *work)
+@@ -715,11 +716,20 @@ int sysfs_schedule_callback(struct kobje
+ mutex_lock(&sysfs_workq_mutex);
+ list_for_each_entry_safe(ss, tmp, &sysfs_workq, workq_list)
+ if (ss->kobj == kobj) {
++ module_put(owner);
+ mutex_unlock(&sysfs_workq_mutex);
+ return -EAGAIN;
+ }
+ mutex_unlock(&sysfs_workq_mutex);
+
++ if (sysfs_workqueue == NULL) {
++ sysfs_workqueue = create_workqueue("sysfsd");
++ if (sysfs_workqueue == NULL) {
++ module_put(owner);
++ return -ENOMEM;
++ }
++ }
++
+ ss = kmalloc(sizeof(*ss), GFP_KERNEL);
+ if (!ss) {
+ module_put(owner);
+@@ -735,7 +745,7 @@ int sysfs_schedule_callback(struct kobje
+ mutex_lock(&sysfs_workq_mutex);
+ list_add_tail(&ss->workq_list, &sysfs_workq);
+ mutex_unlock(&sysfs_workq_mutex);
+- schedule_work(&ss->work);
++ queue_work(sysfs_workqueue, &ss->work);
+ return 0;
+ }
+ EXPORT_SYMBOL_GPL(sysfs_schedule_callback);
diff --git a/series b/series
index 76ce59b4a46344..7fc145924f674f 100644
--- a/series
+++ b/series
@@ -9,10 +9,19 @@ gregkh/gkh-version.patch
#################################
# Driver core patches for 2.6.30
#################################
+driver-core.current/sysfs-don-t-use-global-workqueue-in-sysfs_schedule_callback.patch
+driver-core.current/driver-core-fix-driver_match_device.patch
+driver-core.current/driver-core-allow-non-root-users-to-listen-to-uevents.patch
+
#################################
# USB patches for 2.6.30
#################################
+usb.current/usb-gadget-fix-ethernet-link-reports-to-ethtool.patch
+usb.current/usb-cdc-acm-zydas-1602-identifier-needed.patch
+usb.current/usb-tty-pl2303-needs-identifiers-for-siemens-s81-as-well-as-ef81.patch
+usb.current/usb-ftdi_sio-add-vendor-project-id-for-jeti-specbos-1201-spectrometer.patch
+usb.current/usb-symbol-remove-various-bits-of-left-over-junk.patch
#####################################################################
# Stuff to be merged after 2.6.30 is out
@@ -36,6 +45,18 @@ gregkh/gkh-version.patch
#################################
# for before .30 is done:
+staging/staging-at76-convert-to-netdev_ops.patch
+staging/staging-epl-convert-to-netdev_ops.patch
+staging/staging-et131x-convert-to-netdev_ops.patch
+staging/staging-otus-convert-to-netdev_ops.patch
+staging/staging-rt2860-convert-to-netdev_ops.patch
+staging/staging-rt2870-convert-to-netdev_ops.patch
+staging/staging-rt3070-convert-to-netdev_ops.patch
+staging/staging-slicoss-convert-to-netdev_ops.patch
+staging/staging-sxg-convert-to-netdev_ops.patch
+staging/staging-wlan-ng-convert-to-netdev_ops.patch
+staging/staging-line6-convert-to-snd_card_create.patch
+staging/staging-rt2870-add-id-for-sitecom-wl-315.patch
# for after .30:
diff --git a/staging/staging-at76-convert-to-netdev_ops.patch b/staging/staging-at76-convert-to-netdev_ops.patch
new file mode 100644
index 00000000000000..c853935b095b5c
--- /dev/null
+++ b/staging/staging-at76-convert-to-netdev_ops.patch
@@ -0,0 +1,61 @@
+From a.beregalov@gmail.com Mon Apr 6 12:02:31 2009
+From: Alexander Beregalov <a.beregalov@gmail.com>
+Date: Sun, 29 Mar 2009 19:23:34 +0400
+Subject: Staging: at76: convert to netdev_ops
+To: gregkh@suse.de
+Message-ID: <20090329152334.GA11056@orion>
+
+
+
+Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
+Acked-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/at76_usb/at76_usb.c | 20 +++++++++++++-------
+ 1 file changed, 13 insertions(+), 7 deletions(-)
+
+--- a/drivers/staging/at76_usb/at76_usb.c
++++ b/drivers/staging/at76_usb/at76_usb.c
+@@ -5259,6 +5259,18 @@ static int at76_alloc_urbs(struct at76_p
+ return 0;
+ }
+
++static const struct net_device_ops at76_netdev_ops = {
++ .ndo_open = at76_open,
++ .ndo_stop = at76_stop,
++ .ndo_get_stats = at76_get_stats,
++ .ndo_start_xmit = at76_tx,
++ .ndo_tx_timeout = at76_tx_timeout,
++ .ndo_set_multicast_list = at76_set_multicast,
++ .ndo_set_mac_address = at76_set_mac_address,
++ .ndo_validate_addr = eth_validate_addr,
++ .ndo_change_mtu = eth_change_mtu,
++};
++
+ /* Register network device and initialize the hardware */
+ static int at76_init_new_device(struct at76_priv *priv,
+ struct usb_interface *interface)
+@@ -5303,21 +5315,15 @@ static int at76_init_new_device(struct a
+ priv->scan_mode = SCAN_TYPE_ACTIVE;
+
+ netdev->flags &= ~IFF_MULTICAST; /* not yet or never */
+- netdev->open = at76_open;
+- netdev->stop = at76_stop;
+- netdev->get_stats = at76_get_stats;
++ netdev->netdev_ops = &at76_netdev_ops;
+ netdev->ethtool_ops = &at76_ethtool_ops;
+
+ /* Add pointers to enable iwspy support. */
+ priv->wireless_data.spy_data = &priv->spy_data;
+ netdev->wireless_data = &priv->wireless_data;
+
+- netdev->hard_start_xmit = at76_tx;
+- netdev->tx_timeout = at76_tx_timeout;
+ netdev->watchdog_timeo = 2 * HZ;
+ netdev->wireless_handlers = &at76_handler_def;
+- netdev->set_multicast_list = at76_set_multicast;
+- netdev->set_mac_address = at76_set_mac_address;
+ dev_alloc_name(netdev, "wlan%d");
+
+ ret = register_netdev(priv->netdev);
diff --git a/staging/staging-epl-convert-to-netdev_ops.patch b/staging/staging-epl-convert-to-netdev_ops.patch
new file mode 100644
index 00000000000000..e6f5bac88c15d7
--- /dev/null
+++ b/staging/staging-epl-convert-to-netdev_ops.patch
@@ -0,0 +1,49 @@
+From a.beregalov@gmail.com Mon Apr 6 12:03:00 2009
+From: Alexander Beregalov <a.beregalov@gmail.com>
+Date: Sun, 29 Mar 2009 19:24:32 +0400
+Subject: Staging: epl: convert to netdev_ops
+To: gregkh@suse.de
+Message-ID: <20090329152432.GB11056@orion>
+
+
+Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
+Acked-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/epl/VirtualEthernetLinux.c | 17 ++++++++++++-----
+ 1 file changed, 12 insertions(+), 5 deletions(-)
+
+--- a/drivers/staging/epl/VirtualEthernetLinux.c
++++ b/drivers/staging/epl/VirtualEthernetLinux.c
+@@ -284,6 +284,17 @@ static tEplKernel VEthRecvFrame(tEplFram
+ return Ret;
+ }
+
++static const struct net_device_ops epl_netdev_ops = {
++ .ndo_open = VEthOpen,
++ .ndo_stop = VEthClose,
++ .ndo_get_stats = VEthGetStats,
++ .ndo_start_xmit = VEthXmit,
++ .ndo_tx_timeout = VEthTimeout,
++ .ndo_change_mtu = eth_change_mtu,
++ .ndo_set_mac_address = eth_mac_addr,
++ .ndo_validate_addr = eth_validate_addr,
++};
++
+ tEplKernel VEthAddInstance(tEplDllkInitParam *pInitParam_p)
+ {
+ tEplKernel Ret = kEplSuccessful;
+@@ -299,11 +310,7 @@ tEplKernel VEthAddInstance(tEplDllkInitP
+ goto Exit;
+ }
+
+- pVEthNetDevice_g->open = VEthOpen;
+- pVEthNetDevice_g->stop = VEthClose;
+- pVEthNetDevice_g->get_stats = VEthGetStats;
+- pVEthNetDevice_g->hard_start_xmit = VEthXmit;
+- pVEthNetDevice_g->tx_timeout = VEthTimeout;
++ pVEthNetDevice_g->netdev_ops = &epl_netdev_ops;
+ pVEthNetDevice_g->watchdog_timeo = EPL_VETH_TX_TIMEOUT;
+ pVEthNetDevice_g->destructor = free_netdev;
+
diff --git a/staging/staging-et131x-convert-to-netdev_ops.patch b/staging/staging-et131x-convert-to-netdev_ops.patch
new file mode 100644
index 00000000000000..b3b73ced9085e3
--- /dev/null
+++ b/staging/staging-et131x-convert-to-netdev_ops.patch
@@ -0,0 +1,57 @@
+From a.beregalov@gmail.com Mon Apr 6 12:04:12 2009
+From: Alexander Beregalov <a.beregalov@gmail.com>
+Date: Sun, 29 Mar 2009 19:25:33 +0400
+Subject: Staging: et131x: convert to netdev_ops
+To: gregkh@suse.de
+Message-ID: <20090329152533.GC11056@orion>
+Content-Disposition: inline
+
+
+Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
+Acked-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/et131x/et131x_netdev.c | 23 ++++++++++++++---------
+ 1 file changed, 14 insertions(+), 9 deletions(-)
+
+--- a/drivers/staging/et131x/et131x_netdev.c
++++ b/drivers/staging/et131x/et131x_netdev.c
+@@ -112,6 +112,19 @@ void et131x_vlan_rx_register(struct net_
+ void et131x_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid);
+ void et131x_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid);
+
++static const struct net_device_ops et131x_netdev_ops = {
++ .ndo_open = et131x_open,
++ .ndo_stop = et131x_close,
++ .ndo_start_xmit = et131x_tx,
++ .ndo_set_multicast_list = et131x_multicast,
++ .ndo_tx_timeout = et131x_tx_timeout,
++ .ndo_change_mtu = et131x_change_mtu,
++ .ndo_set_mac_address = et131x_set_mac_addr,
++ .ndo_validate_addr = eth_validate_addr,
++ .ndo_get_stats = et131x_stats,
++ .ndo_do_ioctl = et131x_ioctl,
++};
++
+ /**
+ * et131x_device_alloc
+ *
+@@ -142,16 +155,8 @@ struct net_device *et131x_device_alloc(v
+ */
+ //netdev->init = &et131x_init;
+ //netdev->set_config = &et131x_config;
+- netdev->get_stats = &et131x_stats;
+- netdev->open = &et131x_open;
+- netdev->stop = &et131x_close;
+- netdev->do_ioctl = &et131x_ioctl;
+- netdev->set_multicast_list = &et131x_multicast;
+- netdev->hard_start_xmit = &et131x_tx;
+- netdev->tx_timeout = &et131x_tx_timeout;
+ netdev->watchdog_timeo = ET131X_TX_TIMEOUT;
+- netdev->change_mtu = &et131x_change_mtu;
+- netdev->set_mac_address = &et131x_set_mac_addr;
++ netdev->netdev_ops = &et131x_netdev_ops;
+
+ //netdev->ethtool_ops = &et131x_ethtool_ops;
+
diff --git a/staging/staging-line6-convert-to-snd_card_create.patch b/staging/staging-line6-convert-to-snd_card_create.patch
new file mode 100644
index 00000000000000..0eb9f807c17c3a
--- /dev/null
+++ b/staging/staging-line6-convert-to-snd_card_create.patch
@@ -0,0 +1,34 @@
+From a.beregalov@gmail.com Mon Apr 6 12:09:58 2009
+From: Alexander Beregalov <a.beregalov@gmail.com>
+Date: Sun, 29 Mar 2009 19:59:13 +0400
+Subject: Staging: line6: convert to snd_card_create()
+To: gregkh@suse.de
+Message-ID: <20090329155913.GK11056@orion>
+
+
+Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/line6/audio.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+--- a/drivers/staging/line6/audio.c
++++ b/drivers/staging/line6/audio.c
+@@ -27,11 +27,12 @@ int line6_init_audio(struct usb_line6 *l
+ {
+ static int dev;
+ struct snd_card *card;
++ int err;
+
+- card = snd_card_new(line6_index[dev], line6_id[dev], THIS_MODULE, 0);
+-
+- if (card == NULL)
+- return -ENOMEM;
++ err = snd_card_create(line6_index[dev], line6_id[dev], THIS_MODULE, 0,
++ &card);
++ if (err < 0)
++ return err;
+
+ line6->card = card;
+
diff --git a/staging/staging-otus-convert-to-netdev_ops.patch b/staging/staging-otus-convert-to-netdev_ops.patch
new file mode 100644
index 00000000000000..79e2713e87cb09
--- /dev/null
+++ b/staging/staging-otus-convert-to-netdev_ops.patch
@@ -0,0 +1,96 @@
+From a.beregalov@gmail.com Mon Apr 6 12:04:36 2009
+From: Alexander Beregalov <a.beregalov@gmail.com>
+Date: Sun, 29 Mar 2009 19:26:25 +0400
+Subject: Staging: otus: convert to netdev_ops
+To: gregkh@suse.de
+Message-ID: <20090329152625.GD11056@orion>
+Content-Disposition: inline
+
+
+
+
+Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
+Acked-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/otus/usbdrv.c | 47 +++++++++++++++++++++++++-----------------
+ 1 file changed, 29 insertions(+), 18 deletions(-)
+
+--- a/drivers/staging/otus/usbdrv.c
++++ b/drivers/staging/otus/usbdrv.c
+@@ -822,6 +822,21 @@ int zfLnxVapXmitFrame(struct sk_buff *sk
+ return 0;
+ }
+
++static const struct net_device_ops vap_netdev_ops = {
++ .ndo_open = zfLnxVapOpen,
++ .ndo_stop = zfLnxVapClose,
++ .ndo_start_xmit = zfLnxVapXmitFrame,
++ .ndo_get_stats = usbdrv_get_stats,
++ .ndo_change_mtu = usbdrv_change_mtu,
++ .ndo_validate_addr = eth_validate_addr,
++ .ndo_set_mac_address = eth_mac_addr,
++#ifdef ZM_HOSTAPD_SUPPORT
++ .ndo_do_ioctl = usbdrv_ioctl,
++#else
++ .ndo_do_ioctl = NULL,
++#endif
++};
++
+ int zfLnxRegisterVapDev(struct net_device* parentDev, u16_t vapId)
+ {
+ /* Allocate net device structure */
+@@ -846,16 +861,7 @@ int zfLnxRegisterVapDev(struct net_devic
+ vap[vapId].dev->ml_priv = parentDev->ml_priv;
+
+ //dev->hard_start_xmit = &zd1212_wds_xmit_frame;
+- vap[vapId].dev->hard_start_xmit = &zfLnxVapXmitFrame;
+- vap[vapId].dev->open = &zfLnxVapOpen;
+- vap[vapId].dev->stop = &zfLnxVapClose;
+- vap[vapId].dev->get_stats = &usbdrv_get_stats;
+- vap[vapId].dev->change_mtu = &usbdrv_change_mtu;
+-#ifdef ZM_HOSTAPD_SUPPORT
+- vap[vapId].dev->do_ioctl = usbdrv_ioctl;
+-#else
+- vap[vapId].dev->do_ioctl = NULL;
+-#endif
++ vap[vapId].dev->netdev_ops = &vap_netdev_ops;
+ vap[vapId].dev->destructor = free_netdev;
+
+ vap[vapId].dev->tx_queue_len = 0;
+@@ -1068,6 +1074,18 @@ void zfLnxUnlinkAllUrbs(struct usbdrv_pr
+ usb_unlink_urb(macp->RegInUrb);
+ }
+
++static const struct net_device_ops otus_netdev_ops = {
++ .ndo_open = usbdrv_open,
++ .ndo_stop = usbdrv_close,
++ .ndo_start_xmit = usbdrv_xmit_frame,
++ .ndo_change_mtu = usbdrv_change_mtu,
++ .ndo_get_stats = usbdrv_get_stats,
++ .ndo_set_multicast_list = usbdrv_set_multi,
++ .ndo_set_mac_address = usbdrv_set_mac,
++ .ndo_do_ioctl = usbdrv_ioctl,
++ .ndo_validate_addr = eth_validate_addr,
++};
++
+ u8_t zfLnxInitSetup(struct net_device *dev, struct usbdrv_private *macp)
+ {
+ //unsigned char addr[6];
+@@ -1092,14 +1110,7 @@ u8_t zfLnxInitSetup(struct net_device *d
+ dev->wireless_handlers = (struct iw_handler_def *)&p80211wext_handler_def;
+ #endif
+
+- dev->open = usbdrv_open;
+- dev->hard_start_xmit = usbdrv_xmit_frame;
+- dev->stop = usbdrv_close;
+- dev->change_mtu = &usbdrv_change_mtu;
+- dev->get_stats = usbdrv_get_stats;
+- dev->set_multicast_list = usbdrv_set_multi;
+- dev->set_mac_address = usbdrv_set_mac;
+- dev->do_ioctl = usbdrv_ioctl;
++ dev->netdev_ops = &otus_netdev_ops;
+
+ dev->flags |= IFF_MULTICAST;
+
diff --git a/staging/staging-rt2860-convert-to-netdev_ops.patch b/staging/staging-rt2860-convert-to-netdev_ops.patch
new file mode 100644
index 00000000000000..3c19fdffca89a1
--- /dev/null
+++ b/staging/staging-rt2860-convert-to-netdev_ops.patch
@@ -0,0 +1,67 @@
+From a.beregalov@gmail.com Mon Apr 6 12:07:18 2009
+From: Alexander Beregalov <a.beregalov@gmail.com>
+Date: Sun, 29 Mar 2009 19:27:21 +0400
+Subject: Staging: rt2860: convert to netdev_ops
+To: gregkh@suse.de
+Message-ID: <20090329152721.GE11056@orion>
+Content-Disposition: inline
+
+
+
+Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
+Acked-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/rt2860/rt_main_dev.c | 25 +++++++++++++++----------
+ 1 file changed, 15 insertions(+), 10 deletions(-)
+
+--- a/drivers/staging/rt2860/rt_main_dev.c
++++ b/drivers/staging/rt2860/rt_main_dev.c
+@@ -722,6 +722,20 @@ err:
+ return (-1);
+ } /* End of rt28xx_open */
+
++static const struct net_device_ops rt2860_netdev_ops = {
++ .ndo_open = MainVirtualIF_open,
++ .ndo_stop = MainVirtualIF_close,
++ .ndo_do_ioctl = rt28xx_ioctl,
++ .ndo_get_stats = RT28xx_get_ether_stats,
++ .ndo_validate_addr = NULL,
++ .ndo_set_mac_address = eth_mac_addr,
++ .ndo_change_mtu = eth_change_mtu,
++#ifdef IKANOS_VX_1X0
++ .ndo_start_xmit = IKANOS_DataFramesTx,
++#else
++ .ndo_start_xmit = rt28xx_send_packets,
++#endif
++};
+
+ /* Must not be called for mdev and apdev */
+ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd)
+@@ -733,11 +747,6 @@ static NDIS_STATUS rt_ieee80211_if_setup
+
+
+ //ether_setup(dev);
+- dev->hard_start_xmit = rt28xx_send_packets;
+-
+-#ifdef IKANOS_VX_1X0
+- dev->hard_start_xmit = IKANOS_DataFramesTx;
+-#endif // IKANOS_VX_1X0 //
+
+ #ifdef CONFIG_STA_SUPPORT
+ #if WIRELESS_EXT >= 12
+@@ -760,12 +769,8 @@ static NDIS_STATUS rt_ieee80211_if_setup
+ #if WIRELESS_EXT < 21
+ dev->get_wireless_stats = rt28xx_get_wireless_stats;
+ #endif
+- dev->get_stats = RT28xx_get_ether_stats;
+- dev->open = MainVirtualIF_open; //rt28xx_open;
+- dev->stop = MainVirtualIF_close; //rt28xx_close;
+ dev->priv_flags = INT_MAIN;
+- dev->do_ioctl = rt28xx_ioctl;
+- dev->validate_addr = NULL;
++ dev->netdev_ops = &rt2860_netdev_ops;
+ // find available device name
+ for (i = 0; i < 8; i++)
+ {
diff --git a/staging/staging-rt2870-add-id-for-sitecom-wl-315.patch b/staging/staging-rt2870-add-id-for-sitecom-wl-315.patch
new file mode 100644
index 00000000000000..9f7615cbc84d2d
--- /dev/null
+++ b/staging/staging-rt2870-add-id-for-sitecom-wl-315.patch
@@ -0,0 +1,31 @@
+From akpm@linux-foundation.org Mon Apr 6 12:22:01 2009
+From: Daniele Napolitano <dnax88@gmail.com>
+Date: Wed, 01 Apr 2009 14:53:39 -0700
+Subject: Staging: rt2870: add ID for Sitecom WL-315
+To: mm-commits@vger.kernel.org
+Cc: dnax88@gmail.com, arnd@arndb.de, greg@kroah.com
+Message-ID: <200904012153.n31LrdOG032444@imap1.linux-foundation.org>
+
+
+From: Daniele Napolitano <dnax88@gmail.com>
+
+Signed-off-by: Daniele Napolitano <dnax88@gmail.com>
+Cc: Arnd Bergmann <arnd@arndb.de>
+Cc: Greg KH <greg@kroah.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/rt2870/rt2870.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/staging/rt2870/rt2870.h
++++ b/drivers/staging/rt2870/rt2870.h
+@@ -96,6 +96,7 @@
+ {USB_DEVICE(0x0DF6,0x002B)}, /* Sitecom */ \
+ {USB_DEVICE(0x0DF6,0x002C)}, /* Sitecom */ \
+ {USB_DEVICE(0x0DF6,0x002D)}, /* Sitecom */ \
++ {USB_DEVICE(0x0DF6,0x0039)}, /* Sitecom */ \
+ {USB_DEVICE(0x14B2,0x3C06)}, /* Conceptronic */ \
+ {USB_DEVICE(0x14B2,0x3C28)}, /* Conceptronic */ \
+ {USB_DEVICE(0x2019,0xED06)}, /* Planex Communications, Inc. */ \
diff --git a/staging/staging-rt2870-convert-to-netdev_ops.patch b/staging/staging-rt2870-convert-to-netdev_ops.patch
new file mode 100644
index 00000000000000..fc44da37418e47
--- /dev/null
+++ b/staging/staging-rt2870-convert-to-netdev_ops.patch
@@ -0,0 +1,72 @@
+From a.beregalov@gmail.com Mon Apr 6 12:07:42 2009
+From: Alexander Beregalov <a.beregalov@gmail.com>
+Date: Sun, 29 Mar 2009 19:28:11 +0400
+Subject: Staging: rt2870: convert to netdev_ops
+To: gregkh@suse.de
+Message-ID: <20090329152811.GF11056@orion>
+Content-Disposition: inline
+
+
+
+Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
+Acked-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/rt2870/rt_main_dev.c | 28 +++++++++++++++-------------
+ 1 file changed, 15 insertions(+), 13 deletions(-)
+
+--- a/drivers/staging/rt2870/rt_main_dev.c
++++ b/drivers/staging/rt2870/rt_main_dev.c
+@@ -855,6 +855,20 @@ err:
+ return (-1);
+ } /* End of rt28xx_open */
+
++static const struct net_device_ops rt2870_netdev_ops = {
++ .ndo_open = MainVirtualIF_open,
++ .ndo_stop = MainVirtualIF_close,
++ .ndo_do_ioctl = rt28xx_ioctl,
++ .ndo_get_stats = RT28xx_get_ether_stats,
++ .ndo_validate_addr = NULL,
++ .ndo_set_mac_address = eth_mac_addr,
++ .ndo_change_mtu = eth_change_mtu,
++#ifdef IKANOS_VX_1X0
++ .ndo_start_xmit = IKANOS_DataFramesTx,
++#else
++ .ndo_start_xmit = rt28xx_send_packets,
++#endif
++};
+
+ /* Must not be called for mdev and apdev */
+ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd)
+@@ -866,12 +880,6 @@ static NDIS_STATUS rt_ieee80211_if_setup
+
+
+ //ether_setup(dev);
+- dev->hard_start_xmit = rt28xx_send_packets;
+-
+-#ifdef IKANOS_VX_1X0
+- dev->hard_start_xmit = IKANOS_DataFramesTx;
+-#endif // IKANOS_VX_1X0 //
+-
+ // dev->set_multicast_list = ieee80211_set_multicast_list;
+ // dev->change_mtu = ieee80211_change_mtu;
+ #ifdef CONFIG_STA_SUPPORT
+@@ -895,16 +903,10 @@ static NDIS_STATUS rt_ieee80211_if_setup
+ #if WIRELESS_EXT < 21
+ dev->get_wireless_stats = rt28xx_get_wireless_stats;
+ #endif
+- dev->get_stats = RT28xx_get_ether_stats;
+- dev->open = MainVirtualIF_open; //rt28xx_open;
+- dev->stop = MainVirtualIF_close; //rt28xx_close;
+ // dev->uninit = ieee80211_if_reinit;
+ // dev->destructor = ieee80211_if_free;
+ dev->priv_flags = INT_MAIN;
+- dev->do_ioctl = rt28xx_ioctl;
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+- dev->validate_addr = NULL;
+-#endif
++ dev->netdev_ops = &rt2870_netdev_ops;
+ // find available device name
+ for (i = 0; i < 8; i++)
+ {
diff --git a/staging/staging-rt3070-convert-to-netdev_ops.patch b/staging/staging-rt3070-convert-to-netdev_ops.patch
new file mode 100644
index 00000000000000..544384217840d7
--- /dev/null
+++ b/staging/staging-rt3070-convert-to-netdev_ops.patch
@@ -0,0 +1,81 @@
+From a.beregalov@gmail.com Mon Apr 6 12:08:18 2009
+From: Alexander Beregalov <a.beregalov@gmail.com>
+Date: Sun, 29 Mar 2009 19:29:18 +0400
+Subject: Staging: rt3070: convert to netdev_ops
+To: gregkh@suse.de
+Message-ID: <20090329152918.GG11056@orion>
+Content-Disposition: inline
+
+
+Also remove unused variable.
+
+Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
+Acked-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/rt3070/rt_main_dev.c | 29 +++++++++++++++--------------
+ 1 file changed, 15 insertions(+), 14 deletions(-)
+
+--- a/drivers/staging/rt3070/rt_main_dev.c
++++ b/drivers/staging/rt3070/rt_main_dev.c
+@@ -436,7 +436,6 @@ static int rt28xx_init(IN struct net_dev
+ // OID_SET_HT_PHYMODE SetHT;
+ // WPDMA_GLO_CFG_STRUC GloCfg;
+ UINT32 MacCsr0 = 0;
+- UINT32 MacValue = 0;
+
+ #ifdef RT2870
+ #ifdef INF_AMAZON_SE
+@@ -849,6 +848,20 @@ err:
+ return (-1);
+ } /* End of rt28xx_open */
+
++static const struct net_device_ops rt3070_netdev_ops = {
++ .ndo_open = MainVirtualIF_open,
++ .ndo_stop = MainVirtualIF_close,
++ .ndo_do_ioctl = rt28xx_ioctl,
++ .ndo_get_stats = RT28xx_get_ether_stats,
++ .ndo_validate_addr = NULL,
++ .ndo_set_mac_address = eth_mac_addr,
++ .ndo_change_mtu = eth_change_mtu,
++#ifdef IKANOS_VX_1X0
++ .ndo_start_xmit = IKANOS_DataFramesTx,
++#else
++ .ndo_start_xmit = rt28xx_send_packets,
++#endif
++};
+
+ /* Must not be called for mdev and apdev */
+ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER pAd)
+@@ -860,12 +873,6 @@ static NDIS_STATUS rt_ieee80211_if_setup
+
+
+ //ether_setup(dev);
+- dev->hard_start_xmit = rt28xx_send_packets;
+-
+-#ifdef IKANOS_VX_1X0
+- dev->hard_start_xmit = IKANOS_DataFramesTx;
+-#endif // IKANOS_VX_1X0 //
+-
+ // dev->set_multicast_list = ieee80211_set_multicast_list;
+ // dev->change_mtu = ieee80211_change_mtu;
+ #ifdef CONFIG_STA_SUPPORT
+@@ -889,16 +896,10 @@ static NDIS_STATUS rt_ieee80211_if_setup
+ #if WIRELESS_EXT < 21
+ dev->get_wireless_stats = rt28xx_get_wireless_stats;
+ #endif
+- dev->get_stats = RT28xx_get_ether_stats;
+- dev->open = MainVirtualIF_open; //rt28xx_open;
+- dev->stop = MainVirtualIF_close; //rt28xx_close;
+ // dev->uninit = ieee80211_if_reinit;
+ // dev->destructor = ieee80211_if_free;
+ dev->priv_flags = INT_MAIN;
+- dev->do_ioctl = rt28xx_ioctl;
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+- dev->validate_addr = NULL;
+-#endif
++ dev->netdev_ops = &rt3070_netdev_ops;
+ // find available device name
+ for (i = 0; i < 8; i++)
+ {
diff --git a/staging/staging-slicoss-convert-to-netdev_ops.patch b/staging/staging-slicoss-convert-to-netdev_ops.patch
new file mode 100644
index 00000000000000..05d47d4f129782
--- /dev/null
+++ b/staging/staging-slicoss-convert-to-netdev_ops.patch
@@ -0,0 +1,54 @@
+From a.beregalov@gmail.com Mon Apr 6 12:08:40 2009
+From: Alexander Beregalov <a.beregalov@gmail.com>
+Date: Sun, 29 Mar 2009 19:30:08 +0400
+Subject: Staging: slicoss: convert to netdev_ops
+To: gregkh@suse.de
+Message-ID: <20090329153008.GH11056@orion>
+
+
+
+Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
+Acked-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/slicoss/slicoss.c | 21 ++++++++++++++-------
+ 1 file changed, 14 insertions(+), 7 deletions(-)
+
+--- a/drivers/staging/slicoss/slicoss.c
++++ b/drivers/staging/slicoss/slicoss.c
+@@ -345,6 +345,19 @@ static void slic_init_adapter(struct net
+ return;
+ }
+
++static const struct net_device_ops slic_netdev_ops = {
++ .ndo_open = slic_entry_open,
++ .ndo_stop = slic_entry_halt,
++ .ndo_start_xmit = slic_xmit_start,
++ .ndo_do_ioctl = slic_ioctl,
++ .ndo_set_mac_address = slic_mac_set_address,
++ .ndo_get_stats = slic_get_stats,
++ .ndo_set_multicast_list = slic_mcast_set_list,
++ .ndo_validate_addr = eth_validate_addr,
++ .ndo_set_mac_address = eth_mac_addr,
++ .ndo_change_mtu = eth_change_mtu,
++};
++
+ static int __devinit slic_entry_probe(struct pci_dev *pcidev,
+ const struct pci_device_id *pci_tbl_entry)
+ {
+@@ -442,13 +455,7 @@ static int __devinit slic_entry_probe(st
+
+ netdev->base_addr = (unsigned long)adapter->memorybase;
+ netdev->irq = adapter->irq;
+- netdev->open = slic_entry_open;
+- netdev->stop = slic_entry_halt;
+- netdev->hard_start_xmit = slic_xmit_start;
+- netdev->do_ioctl = slic_ioctl;
+- netdev->set_mac_address = slic_mac_set_address;
+- netdev->get_stats = slic_get_stats;
+- netdev->set_multicast_list = slic_mcast_set_list;
++ netdev->netdev_ops = &slic_netdev_ops;
+
+ slic_debug_adapter_create(adapter);
+
diff --git a/staging/staging-sxg-convert-to-netdev_ops.patch b/staging/staging-sxg-convert-to-netdev_ops.patch
new file mode 100644
index 00000000000000..39964b12747fb3
--- /dev/null
+++ b/staging/staging-sxg-convert-to-netdev_ops.patch
@@ -0,0 +1,59 @@
+From a.beregalov@gmail.com Mon Apr 6 12:09:01 2009
+From: Alexander Beregalov <a.beregalov@gmail.com>
+Date: Sun, 29 Mar 2009 19:30:46 +0400
+Subject: Staging: sxg: convert to netdev_ops
+To: gregkh@suse.de
+Message-ID: <20090329153046.GI11056@orion>
+
+
+Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
+Acked-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/sxg/sxg.c | 27 +++++++++++++++++----------
+ 1 file changed, 17 insertions(+), 10 deletions(-)
+
+--- a/drivers/staging/sxg/sxg.c
++++ b/drivers/staging/sxg/sxg.c
+@@ -896,6 +896,22 @@ static inline int sxg_read_config(struct
+ return status;
+ }
+
++static const struct net_device_ops sxg_netdev_ops = {
++ .ndo_open = sxg_entry_open,
++ .ndo_stop = sxg_entry_halt,
++ .ndo_start_xmit = sxg_send_packets,
++ .ndo_do_ioctl = sxg_ioctl,
++ .ndo_change_mtu = sxg_change_mtu,
++ .ndo_get_stats = sxg_get_stats,
++ .ndo_set_multicast_list = sxg_mcast_set_list,
++ .ndo_validate_addr = eth_validate_addr,
++#if XXXTODO
++ .ndo_set_mac_address = sxg_mac_set_address,
++#else
++ .ndo_set_mac_address = eth_mac_addr,
++#endif
++};
++
+ static int sxg_entry_probe(struct pci_dev *pcidev,
+ const struct pci_device_id *pci_tbl_entry)
+ {
+@@ -1095,16 +1111,7 @@ static int sxg_entry_probe(struct pci_de
+
+ netdev->base_addr = (unsigned long)adapter->base_addr;
+ netdev->irq = adapter->irq;
+- netdev->open = sxg_entry_open;
+- netdev->stop = sxg_entry_halt;
+- netdev->hard_start_xmit = sxg_send_packets;
+- netdev->do_ioctl = sxg_ioctl;
+- netdev->change_mtu = sxg_change_mtu;
+-#if XXXTODO
+- netdev->set_mac_address = sxg_mac_set_address;
+-#endif
+- netdev->get_stats = sxg_get_stats;
+- netdev->set_multicast_list = sxg_mcast_set_list;
++ netdev->netdev_ops = &sxg_netdev_ops;
+ SET_ETHTOOL_OPS(netdev, &sxg_nic_ethtool_ops);
+ netdev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
+ err = sxg_set_interrupt_capability(adapter);
diff --git a/staging/staging-wlan-ng-convert-to-netdev_ops.patch b/staging/staging-wlan-ng-convert-to-netdev_ops.patch
new file mode 100644
index 00000000000000..e3dbe4574b6860
--- /dev/null
+++ b/staging/staging-wlan-ng-convert-to-netdev_ops.patch
@@ -0,0 +1,52 @@
+From a.beregalov@gmail.com Mon Apr 6 12:09:23 2009
+From: Alexander Beregalov <a.beregalov@gmail.com>
+Date: Sun, 29 Mar 2009 19:31:28 +0400
+Subject: Staging: wlan-ng: convert to netdev_ops
+To: gregkh@suse.de
+Message-ID: <20090329153128.GJ11056@orion>
+
+
+Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com>
+Acked-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/wlan-ng/p80211netdev.c | 20 +++++++++++++++-----
+ 1 file changed, 15 insertions(+), 5 deletions(-)
+
+--- a/drivers/staging/wlan-ng/p80211netdev.c
++++ b/drivers/staging/wlan-ng/p80211netdev.c
+@@ -711,6 +711,20 @@ static int wlan_change_mtu(netdevice_t *
+ return 0;
+ }
+
++static const struct net_device_ops p80211_netdev_ops = {
++ .ndo_init = p80211knetdev_init,
++ .ndo_open = p80211knetdev_open,
++ .ndo_stop = p80211knetdev_stop,
++ .ndo_get_stats = p80211knetdev_get_stats,
++ .ndo_start_xmit = p80211knetdev_hard_start_xmit,
++ .ndo_set_multicast_list = p80211knetdev_set_multicast_list,
++ .ndo_do_ioctl = p80211knetdev_do_ioctl,
++ .ndo_set_mac_address = p80211knetdev_set_mac_address,
++ .ndo_tx_timeout = p80211knetdev_tx_timeout,
++ .ndo_change_mtu = wlan_change_mtu,
++ .ndo_validate_addr = eth_validate_addr,
++};
++
+ /*----------------------------------------------------------------
+ * wlan_setup
+ *
+@@ -756,11 +770,7 @@ int wlan_setup(wlandevice_t *wlandev)
+ } else {
+ wlandev->netdev = dev;
+ dev->ml_priv = wlandev;
+- dev->hard_start_xmit = p80211knetdev_hard_start_xmit;
+- dev->get_stats = p80211knetdev_get_stats;
+- dev->init = p80211knetdev_init;
+- dev->open = p80211knetdev_open;
+- dev->stop = p80211knetdev_stop;
++ dev->netdev_ops = &p80211_netdev_ops;
+
+ mutex_init(&wlandev->ioctl_lock);
+ /* block ioctls until fully initialised. Don't forget to call
diff --git a/usb.current/usb-cdc-acm-zydas-1602-identifier-needed.patch b/usb.current/usb-cdc-acm-zydas-1602-identifier-needed.patch
new file mode 100644
index 00000000000000..ac555bc23959d2
--- /dev/null
+++ b/usb.current/usb-cdc-acm-zydas-1602-identifier-needed.patch
@@ -0,0 +1,31 @@
+From alan@lxorguk.ukuu.org.uk Mon Apr 6 12:12:24 2009
+From: Alan Cox <alan@lxorguk.ukuu.org.uk>
+Date: Thu, 26 Mar 2009 20:50:02 +0000
+Subject: USB: cdc-acm: zydas 1602 identifier needed
+To: greg@kroah.com
+Message-ID: <20090326204959.5020.80841.stgit@localhost.localdomain>
+
+
+Bugzilla #9095 and a couple of other confirmations
+
+Signed-off-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
+Cc: stable <stable@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/usb/class/cdc-acm.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/usb/class/cdc-acm.c
++++ b/drivers/usb/class/cdc-acm.c
+@@ -1358,6 +1358,9 @@ static struct usb_device_id acm_ids[] =
+ { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
+ .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
+ },
++ { USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
++ .driver_info = SINGLE_RX_URB,
++ },
+ { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
+ .driver_info = SINGLE_RX_URB, /* firmware bug */
+ },
diff --git a/usb.current/usb-ftdi_sio-add-vendor-project-id-for-jeti-specbos-1201-spectrometer.patch b/usb.current/usb-ftdi_sio-add-vendor-project-id-for-jeti-specbos-1201-spectrometer.patch
new file mode 100644
index 00000000000000..989c6214311e30
--- /dev/null
+++ b/usb.current/usb-ftdi_sio-add-vendor-project-id-for-jeti-specbos-1201-spectrometer.patch
@@ -0,0 +1,45 @@
+From jacmet@sunsite.dk Mon Apr 6 12:13:35 2009
+From: Peter Korsgaard <jacmet@sunsite.dk>
+Date: Wed, 25 Mar 2009 11:32:59 +0100
+Subject: USB: ftdi_sio: add vendor/project id for JETI specbos 1201 spectrometer
+To: gregkh@suse.de
+Cc: Peter Korsgaard <jacmet@sunsite.dk>
+Message-ID: <1237977179-9716-1-git-send-email-jacmet@sunsite.dk>
+
+
+
+Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
+Cc: stable <stable@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/ftdi_sio.c | 1 +
+ drivers/usb/serial/ftdi_sio.h | 7 +++++++
+ 2 files changed, 8 insertions(+)
+
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -668,6 +668,7 @@ static struct usb_device_id id_table_com
+ { USB_DEVICE(DE_VID, WHT_PID) },
+ { USB_DEVICE(ADI_VID, ADI_GNICE_PID),
+ .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
++ { USB_DEVICE(JETI_VID, JETI_SPC1201_PID) },
+ { }, /* Optional parameter entry */
+ { } /* Terminating entry */
+ };
+--- a/drivers/usb/serial/ftdi_sio.h
++++ b/drivers/usb/serial/ftdi_sio.h
+@@ -913,6 +913,13 @@
+ #define ADI_GNICE_PID 0xF000
+
+ /*
++ * JETI SPECTROMETER SPECBOS 1201
++ * http://www.jeti.com/products/sys/scb/scb1201.php
++ */
++#define JETI_VID 0x0c6c
++#define JETI_SPC1201_PID 0x04b2
++
++/*
+ * BmRequestType: 1100 0000b
+ * bRequest: FTDI_E2_READ
+ * wValue: 0
diff --git a/usb.current/usb-gadget-fix-ethernet-link-reports-to-ethtool.patch b/usb.current/usb-gadget-fix-ethernet-link-reports-to-ethtool.patch
new file mode 100644
index 00000000000000..898313cf2cc4f4
--- /dev/null
+++ b/usb.current/usb-gadget-fix-ethernet-link-reports-to-ethtool.patch
@@ -0,0 +1,51 @@
+From david-b@pacbell.net Mon Apr 6 10:37:39 2009
+From: Jonathan McDowell <noodles@earth.li>
+Date: Thu, 26 Mar 2009 00:45:27 -0700
+Subject: usb gadget: fix ethernet link reports to ethtool
+To: Greg KH <greg@kroah.com>, linux-usb@vger.kernel.org
+Cc: Jonathan McDowell <noodles@earth.li>
+Message-ID: <200903260045.27978.david-b@pacbell.net>
+
+
+From: Jonathan McDowell <noodles@earth.li>
+
+The g_ether USB gadget driver currently decides whether or not there's a
+link to report back for eth_get_link based on if the USB link speed is
+set. The USB gadget speed is however often set even before the device is
+enumerated. It seems more sensible to only report a "link" if we're
+actually connected to a host that wants to talk to us. The patch below
+does this for me - tested with the PXA27x UDC driver.
+
+Signed-off-by: Jonathan McDowell <noodles@earth.li>
+Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
+Cc: stable <stable@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/gadget/u_ether.c | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+--- a/drivers/usb/gadget/u_ether.c
++++ b/drivers/usb/gadget/u_ether.c
+@@ -175,12 +175,6 @@ static void eth_get_drvinfo(struct net_d
+ strlcpy(p->bus_info, dev_name(&dev->gadget->dev), sizeof p->bus_info);
+ }
+
+-static u32 eth_get_link(struct net_device *net)
+-{
+- struct eth_dev *dev = netdev_priv(net);
+- return dev->gadget->speed != USB_SPEED_UNKNOWN;
+-}
+-
+ /* REVISIT can also support:
+ * - WOL (by tracking suspends and issuing remote wakeup)
+ * - msglevel (implies updated messaging)
+@@ -189,7 +183,7 @@ static u32 eth_get_link(struct net_devic
+
+ static struct ethtool_ops ops = {
+ .get_drvinfo = eth_get_drvinfo,
+- .get_link = eth_get_link
++ .get_link = ethtool_op_get_link,
+ };
+
+ static void defer_kevent(struct eth_dev *dev, int flag)
diff --git a/usb.current/usb-symbol-remove-various-bits-of-left-over-junk.patch b/usb.current/usb-symbol-remove-various-bits-of-left-over-junk.patch
new file mode 100644
index 00000000000000..a16e4156c5b1cf
--- /dev/null
+++ b/usb.current/usb-symbol-remove-various-bits-of-left-over-junk.patch
@@ -0,0 +1,112 @@
+From alan@lxorguk.ukuu.org.uk Mon Apr 6 12:16:20 2009
+From: Alan Cox <alan@lxorguk.ukuu.org.uk>
+Date: Wed, 01 Apr 2009 14:59:17 +0100
+Subject: USB: symbol: Remove various bits of left over junk
+To: torvalds@linux-foundation.org, greg@kroah.com
+Message-ID: <20090401135903.22486.60017.stgit@localhost.localdomain>
+
+
+There are various bits of code here that are unfinished and instead of
+being harmless either confuse or spew stuff into the logs at higher than
+debug level. They can and should go away.
+
+Also remove the bogus use of tty->lowlatency. We fixed the need for this hack
+long ago (with the flip buffer rewrite) but people keep copying it into drivers.
+
+Signed-off-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/symbolserial.c | 67 --------------------------------------
+ 1 file changed, 67 deletions(-)
+
+--- a/drivers/usb/serial/symbolserial.c
++++ b/drivers/usb/serial/symbolserial.c
+@@ -139,14 +139,6 @@ static int symbol_open(struct tty_struct
+ priv->port = port;
+ spin_unlock_irqrestore(&priv->lock, flags);
+
+- /*
+- * Force low_latency on so that our tty_push actually forces the data
+- * through, otherwise it is scheduled, and with high data rates (like
+- * with OHCI) data can get lost.
+- */
+- if (tty)
+- tty->low_latency = 1;
+-
+ /* Start reading from the device */
+ usb_fill_int_urb(priv->int_urb, priv->udev,
+ usb_rcvintpipe(priv->udev, priv->int_address),
+@@ -205,62 +197,6 @@ static void symbol_unthrottle(struct tty
+ __func__, result);
+ }
+
+-static int symbol_ioctl(struct tty_struct *tty, struct file *file,
+- unsigned int cmd, unsigned long arg)
+-{
+- struct usb_serial_port *port = tty->driver_data;
+- struct device *dev = &port->dev;
+-
+- /*
+- * Right now we need to figure out what commands
+- * most userspace tools want to see for this driver,
+- * so just log the things.
+- */
+- switch (cmd) {
+- case TIOCSERGETLSR:
+- dev_info(dev, "%s: TIOCSERGETLSR\n", __func__);
+- break;
+-
+- case TIOCGSERIAL:
+- dev_info(dev, "%s: TIOCGSERIAL\n", __func__);
+- break;
+-
+- case TIOCMIWAIT:
+- dev_info(dev, "%s: TIOCMIWAIT\n", __func__);
+- break;
+-
+- case TIOCGICOUNT:
+- dev_info(dev, "%s: TIOCGICOUNT\n", __func__);
+- break;
+- default:
+- dev_info(dev, "%s: unknown (%d)\n", __func__, cmd);
+- }
+- return -ENOIOCTLCMD;
+-}
+-
+-static int symbol_tiocmget(struct tty_struct *tty, struct file *file)
+-{
+- struct usb_serial_port *port = tty->driver_data;
+- struct device *dev = &port->dev;
+-
+- /* TODO */
+- /* probably just need to shadow whatever was sent to us here */
+- dev_info(dev, "%s\n", __func__);
+- return 0;
+-}
+-
+-static int symbol_tiocmset(struct tty_struct *tty, struct file *file,
+- unsigned int set, unsigned int clear)
+-{
+- struct usb_serial_port *port = tty->driver_data;
+- struct device *dev = &port->dev;
+-
+- /* TODO */
+- /* probably just need to shadow whatever was sent to us here */
+- dev_info(dev, "%s\n", __func__);
+- return 0;
+-}
+-
+ static int symbol_startup(struct usb_serial *serial)
+ {
+ struct symbol_private *priv;
+@@ -367,9 +303,6 @@ static struct usb_serial_driver symbol_d
+ .shutdown = symbol_shutdown,
+ .throttle = symbol_throttle,
+ .unthrottle = symbol_unthrottle,
+- .ioctl = symbol_ioctl,
+- .tiocmget = symbol_tiocmget,
+- .tiocmset = symbol_tiocmset,
+ };
+
+ static int __init symbol_init(void)
diff --git a/usb.current/usb-tty-pl2303-needs-identifiers-for-siemens-s81-as-well-as-ef81.patch b/usb.current/usb-tty-pl2303-needs-identifiers-for-siemens-s81-as-well-as-ef81.patch
new file mode 100644
index 00000000000000..910dc6e6336b22
--- /dev/null
+++ b/usb.current/usb-tty-pl2303-needs-identifiers-for-siemens-s81-as-well-as-ef81.patch
@@ -0,0 +1,41 @@
+From alan@lxorguk.ukuu.org.uk Mon Apr 6 12:12:52 2009
+From: Alan Cox <alan@lxorguk.ukuu.org.uk>
+Date: Thu, 26 Mar 2009 20:50:46 +0000
+Subject: USB: tty: pl2303 needs identifiers for Siemens S81 as well as EF81
+To: greg@kroah.com
+Message-ID: <20090326205020.5084.87043.stgit@localhost.localdomain>
+
+
+Closes bug 9065
+
+Signed-off-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/pl2303.c | 1 +
+ drivers/usb/serial/pl2303.h | 4 ++++
+ 2 files changed, 5 insertions(+)
+
+--- a/drivers/usb/serial/pl2303.c
++++ b/drivers/usb/serial/pl2303.c
+@@ -79,6 +79,7 @@ static struct usb_device_id id_table []
+ { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) },
+ { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) },
+ { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) },
++ { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_ID_S81) }, /* Benq/Siemens S81 */
+ { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) },
+ { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) },
+ { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) },
+--- a/drivers/usb/serial/pl2303.h
++++ b/drivers/usb/serial/pl2303.h
+@@ -7,6 +7,10 @@
+ * (at your option) any later version.
+ *
+ */
++
++#define BENQ_VENDOR_ID 0x04a5
++#define BENQ_PRODUCT_ID_S81 0x4027
++
+ #define PL2303_VENDOR_ID 0x067b
+ #define PL2303_PRODUCT_ID 0x2303
+ #define PL2303_PRODUCT_ID_RSAQ2 0x04bb