--- /dev/null
+From b681b5886bb5d1f5b6750a0ed7c62846da7ccea4 Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Tue, 3 Aug 2010 19:15:31 +0000
+Subject: staging: hv: Fix missing functions for net_device_ops
+
+From: Haiyang Zhang <haiyangz@microsoft.com>
+
+commit b681b5886bb5d1f5b6750a0ed7c62846da7ccea4 upstream.
+
+Fix missing functions for net_device_ops.
+It's a bug when porting the drivers from 2.6.27 to 2.6.32. In 2.6.27,
+the default functions for Ethernet, like eth_change_mtu(), were assigned
+by ether_setup(). But in 2.6.32, these function pointers moved to
+net_device_ops structure and no longer be assigned in ether_setup(). So
+we need to set these functions in our driver code. It will ensure the
+MTU won't be set beyond 1500. Otherwise, this can cause an error on the
+server side, because the HyperV linux driver doesn't support jumbo frame
+yet.
+
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/hv/netvsc_drv.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/staging/hv/netvsc_drv.c
++++ b/drivers/staging/hv/netvsc_drv.c
+@@ -348,6 +348,9 @@ static const struct net_device_ops devic
+ .ndo_stop = netvsc_close,
+ .ndo_start_xmit = netvsc_start_xmit,
+ .ndo_set_multicast_list = netvsc_set_multicast_list,
++ .ndo_change_mtu = eth_change_mtu,
++ .ndo_validate_addr = eth_validate_addr,
++ .ndo_set_mac_address = eth_mac_addr,
+ };
+
+ static int netvsc_probe(struct device *device)
--- /dev/null
+From 77c5ceaff31645ea049c6706b99e699eae81fb88 Mon Sep 17 00:00:00 2001
+From: Hank Janssen <hjanssen@microsoft.com>
+Date: Wed, 1 Sep 2010 11:10:41 -0700
+Subject: staging: hv: Fixed lockup problem with bounce_buffer scatter list
+
+From: Hank Janssen <hjanssen@microsoft.com>
+
+commit 77c5ceaff31645ea049c6706b99e699eae81fb88 upstream.
+
+Fixed lockup problem with bounce_buffer scatter list which caused
+crashes in heavy loads. And minor code indentation cleanup in effected
+area.
+
+Removed whitespace and noted minor indentation changes in description as
+pointed out by Joe Perches. (Thanks for reviewing Joe)
+
+Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/hv/storvsc_drv.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+--- a/drivers/staging/hv/storvsc_drv.c
++++ b/drivers/staging/hv/storvsc_drv.c
+@@ -646,6 +646,7 @@ static int storvsc_queuecommand(struct s
+ unsigned int request_size = 0;
+ int i;
+ struct scatterlist *sgl;
++ unsigned int sg_count = 0;
+
+ DPRINT_ENTER(STORVSC_DRV);
+
+@@ -730,6 +731,7 @@ static int storvsc_queuecommand(struct s
+ request->DataBuffer.Length = scsi_bufflen(scmnd);
+ if (scsi_sg_count(scmnd)) {
+ sgl = (struct scatterlist *)scsi_sglist(scmnd);
++ sg_count = scsi_sg_count(scmnd);
+
+ /* check if we need to bounce the sgl */
+ if (do_bounce_buffer(sgl, scsi_sg_count(scmnd)) != -1) {
+@@ -764,15 +766,16 @@ static int storvsc_queuecommand(struct s
+ scsi_sg_count(scmnd));
+
+ sgl = cmd_request->bounce_sgl;
++ sg_count = cmd_request->bounce_sgl_count;
+ }
+
+ request->DataBuffer.Offset = sgl[0].offset;
+
+- for (i = 0; i < scsi_sg_count(scmnd); i++) {
++ for (i = 0; i < sg_count; i++) {
+ DPRINT_DBG(STORVSC_DRV, "sgl[%d] len %d offset %d\n",
+ i, sgl[i].length, sgl[i].offset);
+ request->DataBuffer.PfnArray[i] =
+- page_to_pfn(sg_page((&sgl[i])));
++ page_to_pfn(sg_page((&sgl[i])));
+ }
+ } else if (scsi_sglist(scmnd)) {
+ /* ASSERT(scsi_bufflen(scmnd) <= PAGE_SIZE); */
--- /dev/null
+From 9e693e4375689cb1cd1529aba011de0044f74ef5 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sun, 29 Aug 2010 02:13:11 +0100
+Subject: Staging: rt2870sta: Add more device IDs from vendor drivers
+
+From: Ben Hutchings <ben@decadent.org.uk>
+
+commit 9e693e4375689cb1cd1529aba011de0044f74ef5 upstream.
+
+Taken from DPO_RT3070_LinuxSTA_V2.3.0.4_20100604.tar.bz2 and
+2010_0709_RT2870_Linux_STA_v2.4.0.1.tar.bz2, with duplicates removed.
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/rt2860/usb_main_dev.c | 41 ++++++++++++++++++++++++++++++++--
+ 1 file changed, 39 insertions(+), 2 deletions(-)
+
+--- a/drivers/staging/rt2860/usb_main_dev.c
++++ b/drivers/staging/rt2860/usb_main_dev.c
+@@ -44,6 +44,7 @@ struct usb_device_id rtusb_usb_id[] = {
+ {USB_DEVICE(0x07B8, 0x2870)}, /* AboCom */
+ {USB_DEVICE(0x07B8, 0x2770)}, /* AboCom */
+ {USB_DEVICE(0x0DF6, 0x0039)}, /* Sitecom 2770 */
++ {USB_DEVICE(0x0DF6, 0x003F)}, /* Sitecom 2770 */
+ {USB_DEVICE(0x083A, 0x7512)}, /* Arcadyan 2770 */
+ {USB_DEVICE(0x0789, 0x0162)}, /* Logitec 2870 */
+ {USB_DEVICE(0x0789, 0x0163)}, /* Logitec 2870 */
+@@ -95,7 +96,8 @@ struct usb_device_id rtusb_usb_id[] = {
+ {USB_DEVICE(0x050d, 0x815c)},
+ {USB_DEVICE(0x1482, 0x3C09)}, /* Abocom */
+ {USB_DEVICE(0x14B2, 0x3C09)}, /* Alpha */
+- {USB_DEVICE(0x04E8, 0x2018)}, /* samsung */
++ {USB_DEVICE(0x04E8, 0x2018)}, /* samsung linkstick2 */
++ {USB_DEVICE(0x1690, 0x0740)}, /* Askey */
+ {USB_DEVICE(0x5A57, 0x0280)}, /* Zinwell */
+ {USB_DEVICE(0x5A57, 0x0282)}, /* Zinwell */
+ {USB_DEVICE(0x7392, 0x7718)},
+@@ -105,21 +107,34 @@ struct usb_device_id rtusb_usb_id[] = {
+ {USB_DEVICE(0x1737, 0x0071)}, /* Linksys WUSB600N */
+ {USB_DEVICE(0x0411, 0x00e8)}, /* Buffalo WLI-UC-G300N */
+ {USB_DEVICE(0x050d, 0x815c)}, /* Belkin F5D8053 */
++ {USB_DEVICE(0x100D, 0x9031)}, /* Motorola 2770 */
+ #endif /* RT2870 // */
+ #ifdef RT3070
+ {USB_DEVICE(0x148F, 0x3070)}, /* Ralink 3070 */
+ {USB_DEVICE(0x148F, 0x3071)}, /* Ralink 3071 */
+ {USB_DEVICE(0x148F, 0x3072)}, /* Ralink 3072 */
+ {USB_DEVICE(0x0DB0, 0x3820)}, /* Ralink 3070 */
++ {USB_DEVICE(0x0DB0, 0x871C)}, /* Ralink 3070 */
++ {USB_DEVICE(0x0DB0, 0x822C)}, /* Ralink 3070 */
++ {USB_DEVICE(0x0DB0, 0x871B)}, /* Ralink 3070 */
++ {USB_DEVICE(0x0DB0, 0x822B)}, /* Ralink 3070 */
+ {USB_DEVICE(0x0DF6, 0x003E)}, /* Sitecom 3070 */
+ {USB_DEVICE(0x0DF6, 0x0042)}, /* Sitecom 3072 */
++ {USB_DEVICE(0x0DF6, 0x0048)}, /* Sitecom 3070 */
++ {USB_DEVICE(0x0DF6, 0x0047)}, /* Sitecom 3071 */
+ {USB_DEVICE(0x14B2, 0x3C12)}, /* AL 3070 */
+ {USB_DEVICE(0x18C5, 0x0012)}, /* Corega 3070 */
+ {USB_DEVICE(0x083A, 0x7511)}, /* Arcadyan 3070 */
++ {USB_DEVICE(0x083A, 0xA701)}, /* SMC 3070 */
++ {USB_DEVICE(0x083A, 0xA702)}, /* SMC 3072 */
+ {USB_DEVICE(0x1740, 0x9703)}, /* EnGenius 3070 */
+ {USB_DEVICE(0x1740, 0x9705)}, /* EnGenius 3071 */
+ {USB_DEVICE(0x1740, 0x9706)}, /* EnGenius 3072 */
++ {USB_DEVICE(0x1740, 0x9707)}, /* EnGenius 3070 */
++ {USB_DEVICE(0x1740, 0x9708)}, /* EnGenius 3071 */
++ {USB_DEVICE(0x1740, 0x9709)}, /* EnGenius 3072 */
+ {USB_DEVICE(0x13D3, 0x3273)}, /* AzureWave 3070 */
++ {USB_DEVICE(0x13D3, 0x3305)}, /* AzureWave 3070*/
+ {USB_DEVICE(0x1044, 0x800D)}, /* Gigabyte GN-WB32L 3070 */
+ {USB_DEVICE(0x2019, 0xAB25)}, /* Planex Communications, Inc. RT3070 */
+ {USB_DEVICE(0x07B8, 0x3070)}, /* AboCom 3070 */
+@@ -132,14 +147,36 @@ struct usb_device_id rtusb_usb_id[] = {
+ {USB_DEVICE(0x07D1, 0x3C0D)}, /* D-Link 3070 */
+ {USB_DEVICE(0x07D1, 0x3C0E)}, /* D-Link 3070 */
+ {USB_DEVICE(0x07D1, 0x3C0F)}, /* D-Link 3070 */
++ {USB_DEVICE(0x07D1, 0x3C16)}, /* D-Link 3070 */
++ {USB_DEVICE(0x07D1, 0x3C17)}, /* D-Link 8070 */
+ {USB_DEVICE(0x1D4D, 0x000C)}, /* Pegatron Corporation 3070 */
+ {USB_DEVICE(0x1D4D, 0x000E)}, /* Pegatron Corporation 3070 */
+ {USB_DEVICE(0x5A57, 0x5257)}, /* Zinwell 3070 */
+ {USB_DEVICE(0x5A57, 0x0283)}, /* Zinwell 3072 */
+ {USB_DEVICE(0x04BB, 0x0945)}, /* I-O DATA 3072 */
++ {USB_DEVICE(0x04BB, 0x0947)}, /* I-O DATA 3070 */
++ {USB_DEVICE(0x04BB, 0x0948)}, /* I-O DATA 3072 */
+ {USB_DEVICE(0x203D, 0x1480)}, /* Encore 3070 */
++ {USB_DEVICE(0x20B8, 0x8888)}, /* PARA INDUSTRIAL 3070 */
++ {USB_DEVICE(0x0B05, 0x1784)}, /* Asus 3072 */
++ {USB_DEVICE(0x203D, 0x14A9)}, /* Encore 3070*/
++ {USB_DEVICE(0x0DB0, 0x899A)}, /* MSI 3070*/
++ {USB_DEVICE(0x0DB0, 0x3870)}, /* MSI 3070*/
++ {USB_DEVICE(0x0DB0, 0x870A)}, /* MSI 3070*/
++ {USB_DEVICE(0x0DB0, 0x6899)}, /* MSI 3070 */
++ {USB_DEVICE(0x0DB0, 0x3822)}, /* MSI 3070 */
++ {USB_DEVICE(0x0DB0, 0x3871)}, /* MSI 3070 */
++ {USB_DEVICE(0x0DB0, 0x871A)}, /* MSI 3070 */
++ {USB_DEVICE(0x0DB0, 0x822A)}, /* MSI 3070 */
++ {USB_DEVICE(0x0DB0, 0x3821)}, /* Ralink 3070 */
++ {USB_DEVICE(0x0DB0, 0x821A)}, /* Ralink 3070 */
++ {USB_DEVICE(0x083A, 0xA703)}, /* IO-MAGIC */
++ {USB_DEVICE(0x13D3, 0x3307)}, /* Azurewave */
++ {USB_DEVICE(0x13D3, 0x3321)}, /* Azurewave */
++ {USB_DEVICE(0x07FA, 0x7712)}, /* Edimax */
++ {USB_DEVICE(0x0789, 0x0166)}, /* Edimax */
++ {USB_DEVICE(0x148F, 0x2070)}, /* Edimax */
+ #endif /* RT3070 // */
+- {USB_DEVICE(0x0DF6, 0x003F)}, /* Sitecom WL-608 */
+ {USB_DEVICE(0x1737, 0x0077)}, /* Linksys WUSB54GC-EU v3 */
+ {USB_DEVICE(0x2001, 0x3C09)}, /* D-Link */
+ {USB_DEVICE(0x2001, 0x3C0A)}, /* D-Link 3072 */