From: Arne Fitzenreiter Date: Thu, 28 Jan 2016 12:02:09 +0000 (+0100) Subject: backports: update to 4.2.6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=235888599a4afa54d54421328733bf003c45711a;p=people%2Fms%2Fipfire-2.x.git backports: update to 4.2.6 Signed-off-by: Arne Fitzenreiter --- diff --git a/lfs/backports b/lfs/backports index ab6fbdccd9..bbaef2c8bb 100644 --- a/lfs/backports +++ b/lfs/backports @@ -1,7 +1,7 @@ ############################################################################### # # # IPFire.org - A linux based firewall # -# Copyright (C) 2007-2015 IPFire Team # +# Copyright (C) 2007-2016 IPFire Team # # # # 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 # @@ -26,7 +26,7 @@ include Config VERSUFIX = ipfire$(KCFG) -VER = 3.18.1-1 +VER = 4.2.6-1 THISAPP = backports-$(VER) DL_FILE = $(THISAPP).tar.xz @@ -46,7 +46,7 @@ objects = $(DL_FILE) $(DL_FILE) = $(DL_FROM)/$(DL_FILE) -$(DL_FILE)_MD5 = 6cef5f2c800e12441d2cba9fa42b6a5b +$(DL_FILE)_MD5 = 3f978eb56473d9289cf21ebbcb5aa80b install : $(TARGET) @@ -78,23 +78,28 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) + + # remove replaced kernel modules + rm -rf /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/wireless/rtl818x/rtl8180/rtl8180.ko + rm -rf /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/media/platform + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar Jxf $(DIR_DL)/$(DL_FILE) cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/backports-3.18.1-1-ipfire-build.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/backports-3.18.1-1-grsecurity.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/backports-3.18.1-1-add_usbnet_modules.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/backports-4.2.6-1-grsecurity.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/backports-4.2.6-1-add_usbnet_modules.patch ifeq "$(MACHINE)" "x86_64" cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/backports-3.18.1-1_no_dma_sgtable_on_x86_64.patch endif # DVB patches cd $(DIR_APP) && patch -Np2 < $(DIR_SRC)/src/patches/v4l-dvb_fix_tua6034_pll.patch - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10-dvb_tevi_s482.patch # Wlan patches cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-drivers-3.8.3-ath_ignore_eeprom_regdomain.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-iwlwifi-noibss_only_on_radar_chan.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.37-rt2800usb_add_dlink_dwa137_usbid.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/backports-3.18.1-1_rt2x00usb_suppress_queue_warnings.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/backports-4.2.6-1-mt7601_upstream_fixes.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/backports-3.18.1-1_add_libertas_uap.patch # smsc mac address patch for pandaboard and raspberry pi @@ -110,9 +115,6 @@ endif # Disable some settings cd $(DIR_APP) && sed -i -e "s/CPTCFG_CFG80211_DEVELOPER_WARNINGS=y/# CPTCFG_CFG80211_DEVELOPER_WARNINGS is not set/g" .config - cd $(DIR_APP) && sed -i -e "s/CPTCFG_CFG80211_CERTIFICATION_ONUS=y/# CPTCFG_CFG80211_CERTIFICATION_ONUS is not set/g" .config - cd $(DIR_APP) && sed -i -e "s/CPTCFG_CFG80211_REG_CELLULAR_HINTS=y/# CPTCFG_CFG80211_REG_CELLULAR_HINTS is not set/g" .config - cd $(DIR_APP) && sed -i -e "s/CPTCFG_CFG80211_REG_RELAX_NO_IR=y/# CPTCFG_CFG80211_REG_RELAX_NO_IR is not set/g" .config cd $(DIR_APP) && sed -i -e "s/CPTCFG_CFG80211_INTERNAL_REGDB=y/# CPTCFG_CFG80211_INTERNAL_REGDB is not set/g" .config cd $(DIR_APP) && sed -i -e "s/CPTCFG_CFG80211_DEFAULT_PS=y/# CPTCFG_CFG80211_DEFAULT_PS is not set/g" .config cd $(DIR_APP) && sed -i -e "s/CPTCFG_NFC=m/# CPTCFG_NFC is not set/g" .config @@ -121,21 +123,19 @@ ifeq "$(MACHINE)" "x86_64" cd $(DIR_APP) && sed -i -e "s/CPTCFG_LIBERTAS_UAP=m/# CPTCFG_LIBERTAS_UAP is not set/g" .config endif - # Disable some modules (build fail) + # Disable some modules (build fail/missing symbols) + cd $(DIR_APP) && sed -i -e "s/CPTCFG_VIDEO_AM437X_VPFE=m/# CPTCFG_VIDEO_AM437X_VPFE is not set/g" .config cd $(DIR_APP) && sed -i -e "s/CPTCFG_VIDEO_VIA_CAMERA=m/# CPTCFG_VIDEO_VIA_CAMERA is not set/g" .config + cd $(DIR_APP) && sed -i -e "s/CPTCFG_VIDEO_XILINX=m/# CPTCFG_VIDEO_XILINX is not set/g" .config + cd $(DIR_APP) && sed -i -e "s/CPTCFG_IR_SUNXI=m/# CPTCFG_IR_SUNXI is not set/g" .config + cd $(DIR_APP) && sed -i -e "s/CPTCFG_BT_6LOWPAN=m/# CPTCFG_BT_6LOWPAN is not set/g" .config # Disable DEBUG cd $(DIR_APP) && sed -i -e "s/.*DEBUG=y/# & is not set/g" .config cd $(DIR_APP) && sed -i -e "s/.*DEBUGFS=y/# & is not set/g" .config cd $(DIR_APP) && sed -i -e "s/=y is not set/ is not set/g" .config - # Disable OF_GRAPH (not supported by kernel 3.14) - cd $(DIR_APP) && sed -i -e "s/CONFIG_OF/CONFIG_OF_IGNORE/g" include/linux/of_graph.h - cd $(DIR_APP) && make $(MAKETUNING) KLIB=/lib/modules/$(KVER)-$(VERSUFIX)/ install - # Remove vsp1 module (not mach to our platforms) - rm -rf /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/media/platform/vsp1 - @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/src/patches/backports-3.18.1-1-add_usbnet_modules.patch b/src/patches/backports-4.2.6-1-add_usbnet_modules.patch similarity index 93% rename from src/patches/backports-3.18.1-1-add_usbnet_modules.patch rename to src/patches/backports-4.2.6-1-add_usbnet_modules.patch index 11b9638aec..660ef8cc5c 100644 --- a/src/patches/backports-3.18.1-1-add_usbnet_modules.patch +++ b/src/patches/backports-4.2.6-1-add_usbnet_modules.patch @@ -1,7 +1,7 @@ -diff -Naur backports-3.18.1-1.org/drivers/net/usb/asix_common.c backports-3.18.1-1/drivers/net/usb/asix_common.c ---- backports-3.18.1-1.org/drivers/net/usb/asix_common.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/asix_common.c 2014-12-16 18:39:45.000000000 +0100 -@@ -0,0 +1,582 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/usb/asix_common.c backports-4.2.6-1/drivers/net/usb/asix_common.c +--- backports-4.2.6-1.org/drivers/net/usb/asix_common.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/asix_common.c 2015-11-09 23:37:56.000000000 +0100 +@@ -0,0 +1,584 @@ +/* + * ASIX AX8817X based USB 2.0 Ethernet Devices + * Copyright (C) 2003-2006 David Hollis @@ -192,6 +192,8 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/asix_common.c backports-3.18.1 + memcpy(skb_tail_pointer(skb), &padbytes, sizeof(padbytes)); + skb_put(skb, sizeof(padbytes)); + } ++ ++ usbnet_set_skb_tx_stats(skb, 1, 0); + return skb; +} + @@ -584,10 +586,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/asix_common.c backports-3.18.1 + + return 0; +} -diff -Naur backports-3.18.1-1.org/drivers/net/usb/asix_devices.c backports-3.18.1-1/drivers/net/usb/asix_devices.c ---- backports-3.18.1-1.org/drivers/net/usb/asix_devices.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/asix_devices.c 2014-12-16 18:39:45.000000000 +0100 -@@ -0,0 +1,1104 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/usb/asix_devices.c backports-4.2.6-1/drivers/net/usb/asix_devices.c +--- backports-4.2.6-1.org/drivers/net/usb/asix_devices.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/asix_devices.c 2015-11-09 23:37:56.000000000 +0100 +@@ -0,0 +1,1107 @@ +/* + * ASIX AX8817X based USB 2.0 Ethernet Devices + * Copyright (C) 2003-2006 David Hollis @@ -1077,8 +1079,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/asix_devices.c backports-3.18. + +static void ax88772_unbind(struct usbnet *dev, struct usb_interface *intf) +{ -+ if (dev->driver_priv) -+ kfree(dev->driver_priv); ++ kfree(dev->driver_priv); +} + +static const struct ethtool_ops ax88178_ethtool_ops = { @@ -1570,6 +1571,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/asix_devices.c backports-3.18. + USB_DEVICE (0x0df6, 0x0056), + .driver_info = (unsigned long) &ax88178_info, +}, { ++ // Sitecom LN-028 "USB 2.0 10/100/1000 Ethernet adapter" ++ USB_DEVICE (0x0df6, 0x061c), ++ .driver_info = (unsigned long) &ax88178_info, ++}, { + // corega FEther USB2-TX + USB_DEVICE (0x07aa, 0x0017), + .driver_info = (unsigned long) &ax8817x_info, @@ -1692,9 +1697,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/asix_devices.c backports-3.18. +MODULE_DESCRIPTION("ASIX AX8817X based USB 2.0 Ethernet Devices"); +MODULE_LICENSE("GPL"); + -diff -Naur backports-3.18.1-1.org/drivers/net/usb/asix.h backports-3.18.1-1/drivers/net/usb/asix.h ---- backports-3.18.1-1.org/drivers/net/usb/asix.h 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/asix.h 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/asix.h backports-4.2.6-1/drivers/net/usb/asix.h +--- backports-4.2.6-1.org/drivers/net/usb/asix.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/asix.h 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,234 @@ +/* + * ASIX AX8817X based USB 2.0 Ethernet Devices @@ -1930,9 +1935,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/asix.h backports-3.18.1-1/driv +int asix_set_mac_address(struct net_device *net, void *p); + +#endif /* _ASIX_H */ -diff -Naur backports-3.18.1-1.org/drivers/net/usb/ax88172a.c backports-3.18.1-1/drivers/net/usb/ax88172a.c ---- backports-3.18.1-1.org/drivers/net/usb/ax88172a.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/ax88172a.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/ax88172a.c backports-4.2.6-1/drivers/net/usb/ax88172a.c +--- backports-4.2.6-1.org/drivers/net/usb/ax88172a.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/ax88172a.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,422 @@ +/* + * ASIX AX88172A based USB 2.0 Ethernet Devices @@ -2356,9 +2361,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/ax88172a.c backports-3.18.1-1/ + .rx_fixup = ax88172a_rx_fixup, + .tx_fixup = asix_tx_fixup, +}; -diff -Naur backports-3.18.1-1.org/drivers/net/usb/ax88179_178a.c backports-3.18.1-1/drivers/net/usb/ax88179_178a.c ---- backports-3.18.1-1.org/drivers/net/usb/ax88179_178a.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/ax88179_178a.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/ax88179_178a.c backports-4.2.6-1/drivers/net/usb/ax88179_178a.c +--- backports-4.2.6-1.org/drivers/net/usb/ax88179_178a.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/ax88179_178a.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,1756 @@ +/* + * ASIX AX88179/178A USB 3.0/2.0 to Gigabit Ethernet Devices @@ -4116,9 +4121,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/ax88179_178a.c backports-3.18. + +MODULE_DESCRIPTION("ASIX AX88179/178A based USB 3.0/2.0 Gigabit Ethernet Devices"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/catc.c backports-3.18.1-1/drivers/net/usb/catc.c ---- backports-3.18.1-1.org/drivers/net/usb/catc.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/catc.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/catc.c backports-4.2.6-1/drivers/net/usb/catc.c +--- backports-4.2.6-1.org/drivers/net/usb/catc.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/catc.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,965 @@ +/* + * Copyright (c) 2001 Vojtech Pavlik @@ -4763,7 +4768,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/catc.c backports-3.18.1-1/driv + u8 broadcast[ETH_ALEN]; + u8 rx = RxEnable | RxPolarity | RxMultiCast; + -+ memset(broadcast, 0xff, ETH_ALEN); ++ eth_broadcast_addr(broadcast); + memset(catc->multicast, 0, 64); + + catc_multicast(broadcast, catc->multicast); @@ -5002,7 +5007,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/catc.c backports-3.18.1-1/driv + + dev_dbg(dev, "Filling the multicast list.\n"); + -+ memset(broadcast, 0xff, ETH_ALEN); ++ eth_broadcast_addr(broadcast); + catc_multicast(broadcast, catc->multicast); + catc_multicast(netdev->dev_addr, catc->multicast); + catc_write_mem(catc, 0xfa80, catc->multicast, 64); @@ -5085,9 +5090,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/catc.c backports-3.18.1-1/driv +}; + +module_usb_driver(catc_driver); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/cdc_eem.c backports-3.18.1-1/drivers/net/usb/cdc_eem.c ---- backports-3.18.1-1.org/drivers/net/usb/cdc_eem.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/cdc_eem.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/cdc_eem.c backports-4.2.6-1/drivers/net/usb/cdc_eem.c +--- backports-4.2.6-1.org/drivers/net/usb/cdc_eem.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/cdc_eem.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,381 @@ +/* + * USB CDC EEM network interface driver @@ -5470,9 +5475,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/cdc_eem.c backports-3.18.1-1/d +MODULE_AUTHOR("Omar Laazimani "); +MODULE_DESCRIPTION("USB CDC EEM"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/cdc-phonet.c backports-3.18.1-1/drivers/net/usb/cdc-phonet.c ---- backports-3.18.1-1.org/drivers/net/usb/cdc-phonet.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/cdc-phonet.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/cdc-phonet.c backports-4.2.6-1/drivers/net/usb/cdc-phonet.c +--- backports-4.2.6-1.org/drivers/net/usb/cdc-phonet.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/cdc-phonet.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,466 @@ +/* + * phonet.c -- USB CDC Phonet host driver @@ -5606,7 +5611,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/cdc-phonet.c backports-3.18.1- + struct page *page; + int err; + -+ page = __skb_alloc_page(gfp_flags | __GFP_NOMEMALLOC, NULL); ++ page = __dev_alloc_page(gfp_flags | __GFP_NOMEMALLOC); + if (!page) + return -ENOMEM; + @@ -5688,7 +5693,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/cdc-phonet.c backports-3.18.1- + if (page) + put_page(page); + if (req) -+ rx_submit(pnd, req, GFP_ATOMIC | __GFP_COLD); ++ rx_submit(pnd, req, GFP_ATOMIC); +} + +static int usbpn_close(struct net_device *dev); @@ -5707,7 +5712,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/cdc-phonet.c backports-3.18.1- + for (i = 0; i < rxq_size; i++) { + struct urb *req = usb_alloc_urb(0, GFP_KERNEL); + -+ if (!req || rx_submit(pnd, req, GFP_KERNEL | __GFP_COLD)) { ++ if (!req || rx_submit(pnd, req, GFP_KERNEL)) { + usb_free_urb(req); + usbpn_close(dev); + return -ENOMEM; @@ -5940,9 +5945,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/cdc-phonet.c backports-3.18.1- +MODULE_AUTHOR("Remi Denis-Courmont"); +MODULE_DESCRIPTION("USB CDC Phonet host interface"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/cdc_subset.c backports-3.18.1-1/drivers/net/usb/cdc_subset.c ---- backports-3.18.1-1.org/drivers/net/usb/cdc_subset.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/cdc_subset.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/cdc_subset.c backports-4.2.6-1/drivers/net/usb/cdc_subset.c +--- backports-4.2.6-1.org/drivers/net/usb/cdc_subset.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/cdc_subset.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,369 @@ +/* + * Simple "CDC Subset" USB Networking Links @@ -6313,10 +6318,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/cdc_subset.c backports-3.18.1- +MODULE_AUTHOR("David Brownell"); +MODULE_DESCRIPTION("Simple 'CDC Subset' USB networking links"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/cx82310_eth.c backports-3.18.1-1/drivers/net/usb/cx82310_eth.c ---- backports-3.18.1-1.org/drivers/net/usb/cx82310_eth.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/cx82310_eth.c 2014-12-16 18:39:45.000000000 +0100 -@@ -0,0 +1,326 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/usb/cx82310_eth.c backports-4.2.6-1/drivers/net/usb/cx82310_eth.c +--- backports-4.2.6-1.org/drivers/net/usb/cx82310_eth.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/cx82310_eth.c 2015-11-09 23:37:56.000000000 +0100 +@@ -0,0 +1,353 @@ +/* + * Driver for USB ethernet port of Conexant CX82310-based ADSL routers + * Copyright (C) 2010 by Ondrej Zary @@ -6365,8 +6370,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/cx82310_eth.c backports-3.18.1 +}; + +#define CMD_PACKET_SIZE 64 -+/* first command after power on can take around 8 seconds */ -+#define CMD_TIMEOUT 15000 ++#define CMD_TIMEOUT 100 +#define CMD_REPLY_RETRY 5 + +#define CX82310_MTU 1514 @@ -6397,8 +6401,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/cx82310_eth.c backports-3.18.1 + ret = usb_bulk_msg(udev, usb_sndbulkpipe(udev, CMD_EP), buf, + CMD_PACKET_SIZE, &actual_len, CMD_TIMEOUT); + if (ret < 0) { -+ dev_err(&dev->udev->dev, "send command %#x: error %d\n", -+ cmd, ret); ++ if (cmd != CMD_GET_LINK_STATUS) ++ dev_err(&dev->udev->dev, "send command %#x: error %d\n", ++ cmd, ret); + goto end; + } + @@ -6409,8 +6414,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/cx82310_eth.c backports-3.18.1 + buf, CMD_PACKET_SIZE, &actual_len, + CMD_TIMEOUT); + if (ret < 0) { -+ dev_err(&dev->udev->dev, -+ "reply receive error %d\n", ret); ++ if (cmd != CMD_GET_LINK_STATUS) ++ dev_err(&dev->udev->dev, ++ "reply receive error %d\n", ++ ret); + goto end; + } + if (actual_len > 0) @@ -6453,6 +6460,8 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/cx82310_eth.c backports-3.18.1 + int ret; + char buf[15]; + struct usb_device *udev = dev->udev; ++ u8 link[3]; ++ int timeout = 50; + + /* avoid ADSL modems - continue only if iProduct is "USB NET CARD" */ + if (usb_string(udev, udev->descriptor.iProduct, buf, sizeof(buf)) > 0 @@ -6479,6 +6488,20 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/cx82310_eth.c backports-3.18.1 + if (!dev->partial_data) + return -ENOMEM; + ++ /* wait for firmware to become ready (indicated by the link being up) */ ++ while (--timeout) { ++ ret = cx82310_cmd(dev, CMD_GET_LINK_STATUS, true, NULL, 0, ++ link, sizeof(link)); ++ /* the command can time out during boot - it's not an error */ ++ if (!ret && link[0] == 1 && link[2] == 1) ++ break; ++ msleep(500); ++ } ++ if (!timeout) { ++ dev_err(&udev->dev, "firmware not ready in time\n"); ++ return -ETIMEDOUT; ++ } ++ + /* enable ethernet mode (?) */ + ret = cx82310_cmd(dev, CMD_ETHERNET_MODE, true, "\x01", 1, NULL, 0); + if (ret) { @@ -6619,9 +6642,18 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/cx82310_eth.c backports-3.18.1 + .tx_fixup = cx82310_tx_fixup, +}; + ++#define USB_DEVICE_CLASS(vend, prod, cl, sc, pr) \ ++ .match_flags = USB_DEVICE_ID_MATCH_DEVICE | \ ++ USB_DEVICE_ID_MATCH_DEV_INFO, \ ++ .idVendor = (vend), \ ++ .idProduct = (prod), \ ++ .bDeviceClass = (cl), \ ++ .bDeviceSubClass = (sc), \ ++ .bDeviceProtocol = (pr) ++ +static const struct usb_device_id products[] = { + { -+ USB_DEVICE_AND_INTERFACE_INFO(0x0572, 0xcb01, 0xff, 0, 0), ++ USB_DEVICE_CLASS(0x0572, 0xcb01, 0xff, 0, 0), + .driver_info = (unsigned long) &cx82310_info + }, + { }, @@ -6643,9 +6675,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/cx82310_eth.c backports-3.18.1 +MODULE_AUTHOR("Ondrej Zary"); +MODULE_DESCRIPTION("Conexant CX82310-based ADSL router USB ethernet driver"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/dm9601.c backports-3.18.1-1/drivers/net/usb/dm9601.c ---- backports-3.18.1-1.org/drivers/net/usb/dm9601.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/dm9601.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/dm9601.c backports-4.2.6-1/drivers/net/usb/dm9601.c +--- backports-4.2.6-1.org/drivers/net/usb/dm9601.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/dm9601.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,647 @@ +/* + * Davicom DM96xx USB 10/100Mbps ethernet devices @@ -7294,9 +7326,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/dm9601.c backports-3.18.1-1/dr +MODULE_AUTHOR("Peter Korsgaard "); +MODULE_DESCRIPTION("Davicom DM96xx USB 10/100 ethernet devices"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/gl620a.c backports-3.18.1-1/drivers/net/usb/gl620a.c ---- backports-3.18.1-1.org/drivers/net/usb/gl620a.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/gl620a.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/gl620a.c backports-4.2.6-1/drivers/net/usb/gl620a.c +--- backports-4.2.6-1.org/drivers/net/usb/gl620a.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/gl620a.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,242 @@ +/* + * GeneSys GL620USB-A based links @@ -7540,10 +7572,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/gl620a.c backports-3.18.1-1/dr +MODULE_DESCRIPTION("GL620-USB-A Host-to-Host Link cables"); +MODULE_LICENSE("GPL"); + -diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drivers/net/usb/hso.c ---- backports-3.18.1-1.org/drivers/net/usb/hso.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/hso.c 2015-01-03 13:42:25.000000000 +0100 -@@ -0,0 +1,3326 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/usb/hso.c backports-4.2.6-1/drivers/net/usb/hso.c +--- backports-4.2.6-1.org/drivers/net/usb/hso.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/hso.c 2016-01-27 15:03:25.000000000 +0100 +@@ -0,0 +1,3322 @@ +/****************************************************************************** + * + * Driver for Option High Speed Mobile Devices. @@ -7604,7 +7636,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive +#include +#include +#include -+#include +#include +#include +#include @@ -7700,6 +7731,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + struct hso_device *parent; + struct net_device *net; + struct rfkill *rfkill; ++ char name[24]; + + struct usb_endpoint_descriptor *in_endp; + struct usb_endpoint_descriptor *out_endp; @@ -7820,7 +7852,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + u8 usb_gone; + struct work_struct async_get_intf; + struct work_struct async_put_intf; -+ struct work_struct reset_device; + + struct usb_device *usb; + struct usb_interface *interface; @@ -7886,7 +7917,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive +static int hso_put_activity(struct hso_device *hso_dev); +static int hso_get_activity(struct hso_device *hso_dev); +static void tiocmget_intr_callback(struct urb *urb); -+static void reset_device(struct work_struct *data); +/*****************************************************************************/ +/* Helping functions */ +/*****************************************************************************/ @@ -8079,6 +8109,13 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive +} +static DEVICE_ATTR(hsotype, S_IRUGO, hso_sysfs_show_porttype, NULL); + ++static struct attribute *hso_serial_dev_attrs[] = { ++ &dev_attr_hsotype.attr, ++ NULL ++}; ++ ++ATTRIBUTE_GROUPS(hso_serial_dev); ++ +static int hso_urb_to_index(struct hso_serial *serial, struct urb *urb) +{ + int idx; @@ -8242,7 +8279,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + case -ETIMEDOUT: + explanation = "protocol error"; + if (hso_dev) -+ schedule_work(&hso_dev->reset_device); ++ usb_queue_reset_device(hso_dev->interface); + break; + default: + explanation = "unknown status"; @@ -8455,7 +8492,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + /* We got no receive buffer. */ + D1("could not allocate memory"); + odev->rx_parse_state = WAIT_SYNC; -+ return; ++ continue; + } + + /* Copy what we got so far. make room for iphdr @@ -8817,7 +8854,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + goto err_out; + + D1("Opening %d", serial->minor); -+ kref_get(&serial->parent->ref); + + /* setup */ + tty->driver_data = serial; @@ -8835,7 +8871,8 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + if (result) { + hso_stop_serial_device(serial->parent); + atomic_dec(&serial->port.count); -+ kref_put(&serial->parent->ref, hso_serial_ref_free); ++ } else { ++ kref_get(&serial->parent->ref); + } + } else { + D1("Port was already open"); @@ -8885,8 +8922,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + usb_autopm_put_interface(serial->parent->interface); + + mutex_unlock(&serial->parent->mutex); -+ -+ kref_put(&serial->parent->ref, hso_serial_ref_free); +} + +/* close the requested serial port */ @@ -8937,6 +8972,16 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + return room; +} + ++static void hso_serial_cleanup(struct tty_struct *tty) ++{ ++ struct hso_serial *serial = tty->driver_data; ++ ++ if (!serial) ++ return; ++ ++ kref_put(&serial->parent->ref, hso_serial_ref_free); ++} ++ +/* setup the term */ +static void hso_serial_set_termios(struct tty_struct *tty, struct ktermios *old) +{ @@ -9009,6 +9054,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + struct uart_icount *icount; + struct hso_serial_state_notification *serial_state_notification; + struct usb_device *usb; ++ struct usb_interface *interface; + int if_num; + + /* Sanity checks */ @@ -9026,7 +9072,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + BUG_ON((serial->parent->port_spec & HSO_PORT_MASK) != HSO_PORT_MODEM); + + usb = serial->parent->usb; -+ if_num = serial->parent->interface->altsetting->desc.bInterfaceNumber; ++ interface = serial->parent->interface; ++ ++ if_num = interface->cur_altsetting->desc.bInterfaceNumber; + + /* wIndex should be the USB interface number of the port to which the + * notification applies, which should always be the Modem port. @@ -9126,7 +9174,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + } + cprev = cnow; + } -+ current->state = TASK_RUNNING; ++ __set_current_state(TASK_RUNNING); + remove_wait_queue(&tiocmget->waitq, &wait); + + return ret; @@ -9207,6 +9255,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + unsigned long flags; + int if_num; + struct hso_serial *serial = tty->driver_data; ++ struct usb_interface *interface; + + /* sanity check */ + if (!serial) { @@ -9217,7 +9266,8 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + if ((serial->parent->port_spec & HSO_PORT_MASK) != HSO_PORT_MODEM) + return -EINVAL; + -+ if_num = serial->parent->interface->altsetting->desc.bInterfaceNumber; ++ interface = serial->parent->interface; ++ if_num = interface->cur_altsetting->desc.bInterfaceNumber; + + spin_lock_irqsave(&serial->serial_lock, flags); + if (set & TIOCM_RTS) @@ -9743,8 +9793,8 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + + for (i = 0; i < serial->num_rx_urbs; i++) { + if (serial->rx_urb[i]) { -+ usb_kill_urb(serial->rx_urb[i]); -+ serial->rx_urb_filled[i] = 0; ++ usb_kill_urb(serial->rx_urb[i]); ++ serial->rx_urb_filled[i] = 0; + } + } + serial->curr_rx_urb_idx = 0; @@ -9773,15 +9823,15 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + return 0; +} + ++static void hso_serial_tty_unregister(struct hso_serial *serial) ++{ ++ tty_unregister_device(tty_drv, serial->minor); ++} ++ +static void hso_serial_common_free(struct hso_serial *serial) +{ + int i; + -+ if (serial->parent->dev) -+ device_remove_file(serial->parent->dev, &dev_attr_hsotype); -+ -+ tty_unregister_device(tty_drv, serial->minor); -+ + for (i = 0; i < serial->num_rx_urbs; i++) { + /* unlink and free RX URB */ + usb_free_urb(serial->rx_urb[i]); @@ -9791,6 +9841,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + + /* unlink and free TX URB */ + usb_free_urb(serial->tx_urb); ++ kfree(serial->tx_buffer); + kfree(serial->tx_data); + tty_port_destroy(&serial->port); +} @@ -9809,11 +9860,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + goto exit; + + /* register our minor number */ -+ serial->parent->dev = tty_port_register_device(&serial->port, tty_drv, -+ minor, &serial->parent->interface->dev); ++ serial->parent->dev = tty_port_register_device_attr(&serial->port, ++ tty_drv, minor, &serial->parent->interface->dev, ++ serial->parent, hso_serial_dev_groups); + dev = serial->parent->dev; -+ dev_set_drvdata(dev, serial->parent); -+ i = device_create_file(dev, &dev_attr_hsotype); + + /* fill in specific data for later use */ + serial->minor = minor; @@ -9861,6 +9911,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + + return 0; +exit: ++ hso_serial_tty_unregister(serial); + hso_serial_common_free(serial); + return -1; +} @@ -9883,7 +9934,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + + INIT_WORK(&hso_dev->async_get_intf, async_get_intf); + INIT_WORK(&hso_dev->async_put_intf, async_put_intf); -+ INIT_WORK(&hso_dev->reset_device, reset_device); + + return hso_dev; +} @@ -10004,27 +10054,21 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive +{ + struct hso_net *hso_net = dev2net(hso_dev); + struct device *dev = &hso_net->net->dev; -+ char *rfkn; ++ static u32 rfkill_counter; + -+ rfkn = kzalloc(20, GFP_KERNEL); -+ if (!rfkn) -+ dev_err(dev, "%s - Out of memory\n", __func__); -+ -+ snprintf(rfkn, 20, "hso-%d", -+ interface->altsetting->desc.bInterfaceNumber); ++ snprintf(hso_net->name, sizeof(hso_net->name), "hso-%d", ++ rfkill_counter++); + -+ hso_net->rfkill = rfkill_alloc(rfkn, ++ hso_net->rfkill = rfkill_alloc(hso_net->name, + &interface_to_usbdev(interface)->dev, + RFKILL_TYPE_WWAN, + &hso_rfkill_ops, hso_dev); + if (!hso_net->rfkill) { + dev_err(dev, "%s - Out of memory\n", __func__); -+ kfree(rfkn); + return; + } + if (rfkill_register(hso_net->rfkill) < 0) { + rfkill_destroy(hso_net->rfkill); -+ kfree(rfkn); + hso_net->rfkill = NULL; + dev_err(dev, "%s - Failed to register rfkill\n", __func__); + return; @@ -10139,7 +10183,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + + if (!serial) + return; -+ set_serial_by_index(serial->minor, NULL); + + hso_serial_common_free(serial); + @@ -10229,6 +10272,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + return hso_dev; + +exit2: ++ hso_serial_tty_unregister(serial); + hso_serial_common_free(serial); +exit: + hso_free_tiomget(serial); @@ -10291,8 +10335,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + tty_unregister_device(tty_drv, serial->minor); + kfree(serial); + } -+ if (hso_dev) -+ kfree(hso_dev); ++ kfree(hso_dev); + return NULL; + +} @@ -10347,7 +10390,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive +{ + struct usb_device *usbdev = interface_to_usbdev(interface); + u8 *config_data = kmalloc(17, GFP_KERNEL); -+ u32 if_num = interface->altsetting->desc.bInterfaceNumber; ++ u32 if_num = interface->cur_altsetting->desc.bInterfaceNumber; + s32 result; + + if (!config_data) @@ -10425,7 +10468,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + return -ENODEV; + } + -+ if_num = interface->altsetting->desc.bInterfaceNumber; ++ if_num = interface->cur_altsetting->desc.bInterfaceNumber; + + /* Get the interface/port specification from either driver_info or from + * the device itself */ @@ -10629,26 +10672,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + return result; +} + -+static void reset_device(struct work_struct *data) -+{ -+ struct hso_device *hso_dev = -+ container_of(data, struct hso_device, reset_device); -+ struct usb_device *usb = hso_dev->usb; -+ int result; -+ -+ if (hso_dev->usb_gone) { -+ D1("No reset during disconnect\n"); -+ } else { -+ result = usb_lock_device_for_reset(usb, hso_dev->interface); -+ if (result < 0) -+ D1("unable to lock device for reset: %d\n", result); -+ else { -+ usb_reset_device(usb); -+ usb_unlock_device(usb); -+ } -+ } -+} -+ +static void hso_serial_ref_free(struct kref *ref) +{ + struct hso_device *hso_dev = container_of(ref, struct hso_device, ref); @@ -10658,18 +10681,22 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + +static void hso_free_interface(struct usb_interface *interface) +{ -+ struct hso_serial *hso_dev; ++ struct hso_serial *serial; + int i; + + for (i = 0; i < HSO_SERIAL_TTY_MINORS; i++) { + if (serial_table[i] && + (serial_table[i]->interface == interface)) { -+ hso_dev = dev2ser(serial_table[i]); -+ tty_port_tty_hangup(&hso_dev->port, false); -+ mutex_lock(&hso_dev->parent->mutex); -+ hso_dev->parent->usb_gone = 1; -+ mutex_unlock(&hso_dev->parent->mutex); ++ serial = dev2ser(serial_table[i]); ++ tty_port_tty_hangup(&serial->port, false); ++ mutex_lock(&serial->parent->mutex); ++ serial->parent->usb_gone = 1; ++ mutex_unlock(&serial->parent->mutex); ++ cancel_work_sync(&serial_table[i]->async_put_intf); ++ cancel_work_sync(&serial_table[i]->async_get_intf); ++ hso_serial_tty_unregister(serial); + kref_put(&serial_table[i]->ref, hso_serial_ref_free); ++ set_serial_by_index(i, NULL); + } + } + @@ -10761,6 +10788,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive + .close = hso_serial_close, + .write = hso_serial_write, + .write_room = hso_serial_write_room, ++ .cleanup = hso_serial_cleanup, + .ioctl = hso_serial_ioctl, + .set_termios = hso_serial_set_termios, + .chars_in_buffer = hso_serial_chars_in_buffer, @@ -10870,10 +10898,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/hso.c backports-3.18.1-1/drive +/* disable network interface (eg: insmod hso.ko disable_net=1) */ +MODULE_PARM_DESC(disable_net, "Disable the network interface"); +module_param(disable_net, int, S_IRUGO | S_IWUSR); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/huawei_cdc_ncm.c backports-3.18.1-1/drivers/net/usb/huawei_cdc_ncm.c ---- backports-3.18.1-1.org/drivers/net/usb/huawei_cdc_ncm.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/huawei_cdc_ncm.c 2014-12-16 18:39:45.000000000 +0100 -@@ -0,0 +1,221 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/usb/huawei_cdc_ncm.c backports-4.2.6-1/drivers/net/usb/huawei_cdc_ncm.c +--- backports-4.2.6-1.org/drivers/net/usb/huawei_cdc_ncm.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/huawei_cdc_ncm.c 2015-11-09 23:37:56.000000000 +0100 +@@ -0,0 +1,224 @@ +/* huawei_cdc_ncm.c - handles Huawei devices using the CDC NCM protocol as + * transport layer. + * Copyright (C) 2013 Enrico Mioso @@ -10949,11 +10977,14 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/huawei_cdc_ncm.c backports-3.1 + struct usb_driver *subdriver = ERR_PTR(-ENODEV); + int ret = -ENODEV; + struct huawei_cdc_ncm_state *drvstate = (void *)&usbnet_dev->data; ++ int drvflags = 0; + + /* altsetting should always be 1 for NCM devices - so we hard-coded -+ * it here ++ * it here. Some huawei devices will need the NDP part of the NCM package to ++ * be at the end of the frame. + */ -+ ret = cdc_ncm_bind_common(usbnet_dev, intf, 1); ++ drvflags |= CDC_NCM_FLAG_NDP_TO_END; ++ ret = cdc_ncm_bind_common(usbnet_dev, intf, 1, drvflags); + if (ret) + goto err; + @@ -11095,9 +11126,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/huawei_cdc_ncm.c backports-3.1 +MODULE_AUTHOR("Enrico Mioso "); +MODULE_DESCRIPTION("USB CDC NCM host driver with encapsulated protocol support"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/int51x1.c backports-3.18.1-1/drivers/net/usb/int51x1.c ---- backports-3.18.1-1.org/drivers/net/usb/int51x1.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/int51x1.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/int51x1.c backports-4.2.6-1/drivers/net/usb/int51x1.c +--- backports-4.2.6-1.org/drivers/net/usb/int51x1.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/int51x1.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2009 Peter Holik @@ -11298,9 +11329,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/int51x1.c backports-3.18.1-1/d +MODULE_AUTHOR("Peter Holik"); +MODULE_DESCRIPTION("Intellon usb powerline adapter"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/ipheth.c backports-3.18.1-1/drivers/net/usb/ipheth.c ---- backports-3.18.1-1.org/drivers/net/usb/ipheth.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/ipheth.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/ipheth.c backports-4.2.6-1/drivers/net/usb/ipheth.c +--- backports-4.2.6-1.org/drivers/net/usb/ipheth.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/ipheth.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,588 @@ +/* + * ipheth.c - Apple iPhone USB Ethernet driver @@ -11890,9 +11921,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/ipheth.c backports-3.18.1-1/dr +MODULE_AUTHOR("Diego Giagio "); +MODULE_DESCRIPTION("Apple iPhone USB Ethernet driver"); +MODULE_LICENSE("Dual BSD/GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/kalmia.c backports-3.18.1-1/drivers/net/usb/kalmia.c ---- backports-3.18.1-1.org/drivers/net/usb/kalmia.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/kalmia.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/kalmia.c backports-4.2.6-1/drivers/net/usb/kalmia.c +--- backports-4.2.6-1.org/drivers/net/usb/kalmia.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/kalmia.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,366 @@ +/* + * USB network interface driver for Samsung Kalmia based LTE USB modem like the @@ -12260,9 +12291,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/kalmia.c backports-3.18.1-1/dr +MODULE_AUTHOR("Marius Bjoernstad Kotsbak "); +MODULE_DESCRIPTION("Samsung Kalmia USB network driver"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/kaweth.c backports-3.18.1-1/drivers/net/usb/kaweth.c ---- backports-3.18.1-1.org/drivers/net/usb/kaweth.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/kaweth.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/kaweth.c backports-4.2.6-1/drivers/net/usb/kaweth.c +--- backports-4.2.6-1.org/drivers/net/usb/kaweth.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/kaweth.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,1331 @@ +/**************************************************************** + * @@ -13542,7 +13573,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/kaweth.c backports-3.18.1-1/dr + awd.done = 0; + + urb->context = &awd; -+ status = usb_submit_urb(urb, GFP_NOIO); ++ status = usb_submit_urb(urb, GFP_ATOMIC); + if (status) { + // something went wrong + usb_free_urb(urb); @@ -13595,9 +13626,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/kaweth.c backports-3.18.1-1/dr +} + +module_usb_driver(kaweth_driver); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/drivers/net/usb/Kconfig ---- backports-3.18.1-1.org/drivers/net/usb/Kconfig 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/Kconfig 2015-01-03 15:19:02.310281530 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/Kconfig backports-4.2.6-1/drivers/net/usb/Kconfig +--- backports-4.2.6-1.org/drivers/net/usb/Kconfig 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/Kconfig 2016-01-27 15:58:23.159192032 +0100 @@ -13,7 +13,6 @@ if USB_NET_DRIVERS @@ -13621,7 +13652,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri - depends on n tristate "USB Pegasus/Pegasus-II based ethernet device support" depends on m - select BACKPORT_MII + select BPAUTO_MII @@ -92,7 +89,6 @@ module will be called pegasus. @@ -13629,7 +13660,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri - depends on n tristate "USB RTL8150 based ethernet device support" depends on m - select BACKPORT_MII + select BPAUTO_MII @@ -105,7 +101,6 @@ module will be called rtl8150. @@ -13637,7 +13668,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri - depends on n tristate "Realtek RTL8152/RTL8153 Based USB Ethernet Adapters" depends on m - select BACKPORT_MII + select BPAUTO_MII @@ -153,7 +148,6 @@ module will be called usbnet. @@ -13646,7 +13677,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "ASIX AX88xxx Based USB 2.0 Ethernet Adapters" depends on m depends on USB_USBNET -@@ -183,7 +177,6 @@ +@@ -184,7 +178,6 @@ what other networking devices you have in use. config USB_NET_AX88179_178A @@ -13654,7 +13685,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "ASIX AX88179/178A USB 3.0/2.0 to Gigabit Ethernet" depends on m depends on USB_USBNET -@@ -232,7 +225,6 @@ +@@ -233,7 +226,6 @@ name is used instead. config USB_NET_CDC_EEM @@ -13662,7 +13693,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "CDC EEM support" depends on m depends on USB_USBNET -@@ -268,7 +260,6 @@ +@@ -269,7 +261,6 @@ * Ericsson F5521gw Mobile Broadband Module config USB_NET_HUAWEI_CDC_NCM @@ -13670,7 +13701,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "Huawei NCM embedded AT channel support" depends on m depends on USB_USBNET -@@ -304,7 +295,6 @@ +@@ -305,7 +296,6 @@ module will be called cdc_mbim. config USB_NET_DM9601 @@ -13678,7 +13709,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "Davicom DM96xx based USB 10/100 ethernet devices" depends on m depends on USB_USBNET -@@ -314,7 +304,6 @@ +@@ -315,7 +305,6 @@ based USB 10/100 Ethernet adapters. config USB_NET_SR9700 @@ -13686,7 +13717,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "CoreChip-sz SR9700 based USB 1.1 10/100 ethernet devices" depends on m depends on USB_USBNET -@@ -324,7 +313,6 @@ +@@ -325,7 +314,6 @@ 10/100 Ethernet adapters. config USB_NET_SR9800 @@ -13694,7 +13725,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices" depends on m depends on USB_USBNET -@@ -341,7 +329,6 @@ +@@ -342,7 +330,6 @@ module will be called sr9800. config USB_NET_SMSC75XX @@ -13702,7 +13733,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "SMSC LAN75XX based USB 2.0 gigabit ethernet devices" depends on m depends on USB_USBNET -@@ -353,7 +340,6 @@ +@@ -354,7 +341,6 @@ Gigabit Ethernet adapters. config USB_NET_SMSC95XX @@ -13710,7 +13741,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "SMSC LAN95XX based USB 2.0 10/100 ethernet devices" depends on m depends on USB_USBNET -@@ -365,7 +351,6 @@ +@@ -366,7 +352,6 @@ 10/100 Ethernet adapters. config USB_NET_GL620A @@ -13718,7 +13749,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "GeneSys GL620USB-A based cables" depends on m depends on USB_USBNET -@@ -376,7 +361,6 @@ +@@ -377,7 +362,6 @@ Note that the half-duplex "GL620USB" is not supported. config USB_NET_NET1080 @@ -13726,7 +13757,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "NetChip 1080 based cables (Laplink, ...)" depends on m default y -@@ -387,7 +371,6 @@ +@@ -388,7 +372,6 @@ optionally with LEDs that indicate traffic config USB_NET_PLUSB @@ -13734,7 +13765,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "Prolific PL-2301/2302/25A1 based cables" depends on m # if the handshake/init/reset problems, from original 'plusb', -@@ -398,7 +381,6 @@ +@@ -399,7 +382,6 @@ with one of these chips. config USB_NET_MCS7830 @@ -13742,7 +13773,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "MosChip MCS7830 based Ethernet adapters" depends on m depends on USB_USBNET -@@ -424,7 +406,6 @@ +@@ -425,7 +407,6 @@ (and for) Microsoft; it isn't an "Open" ecosystem or market. config USB_NET_CDC_SUBSET @@ -13750,7 +13781,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "Simple USB Network Links (CDC Ethernet subset)" depends on m depends on USB_USBNET -@@ -496,7 +477,6 @@ +@@ -497,7 +478,6 @@ with one of these chips. config USB_NET_ZAURUS @@ -13758,7 +13789,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "Sharp Zaurus (stock ROMs) and compatible" depends on m depends on USB_USBNET -@@ -516,7 +496,6 @@ +@@ -517,7 +497,6 @@ some cases CDC MDLM) protocol, not "g_ether". config USB_NET_CX82310_ETH @@ -13766,7 +13797,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "Conexant CX82310 USB ethernet port" depends on m depends on USB_USBNET -@@ -526,7 +505,6 @@ +@@ -527,7 +506,6 @@ it will not work with ADSL modems (use cxacru driver instead). config USB_NET_KALMIA @@ -13774,7 +13805,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "Samsung Kalmia based LTE USB modem" depends on m depends on USB_USBNET -@@ -561,7 +539,6 @@ +@@ -562,7 +540,6 @@ module will be called qmi_wwan. config USB_HSO @@ -13782,7 +13813,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "Option USB High Speed Mobile Devices" depends on m depends on USB && RFKILL && TTY -@@ -574,7 +551,6 @@ +@@ -575,7 +552,6 @@ module will be called hso. config USB_NET_INT51X1 @@ -13790,7 +13821,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "Intellon PLC based usb adapter" depends on m depends on USB_USBNET -@@ -584,7 +560,6 @@ +@@ -585,7 +561,6 @@ INT51x1/INT5200 chip, like the "devolo dLan duo". config USB_CDC_PHONET @@ -13798,7 +13829,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "CDC Phonet support" depends on m depends on PHONET -@@ -594,7 +569,6 @@ +@@ -595,7 +570,6 @@ "PC suite" USB profile. config USB_IPHETH @@ -13806,7 +13837,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri tristate "Apple iPhone USB Ethernet driver" depends on m default n -@@ -618,11 +592,10 @@ +@@ -619,11 +593,10 @@ module will be called sierra_net. config USB_VL600 @@ -13819,9 +13850,651 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Kconfig backports-3.18.1-1/dri help Select this if you want to use an LG Electronics 4G/LTE usb modem called VL600. This driver only handles the ethernet -diff -Naur backports-3.18.1-1.org/drivers/net/usb/lg-vl600.c backports-3.18.1-1/drivers/net/usb/lg-vl600.c ---- backports-3.18.1-1.org/drivers/net/usb/lg-vl600.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/lg-vl600.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/Kconfig.orig backports-4.2.6-1/drivers/net/usb/Kconfig.orig +--- backports-4.2.6-1.org/drivers/net/usb/Kconfig.orig 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/Kconfig.orig 2015-11-15 22:19:40.000000000 +0100 +@@ -0,0 +1,638 @@ ++# ++# USB Network devices configuration ++# ++comment "Host-side USB support is needed for USB Network Adapter support" ++ depends on !USB && NET ++ ++menuconfig USB_NET_DRIVERS ++ tristate "USB Network Adapters" ++ depends on m ++ default USB if USB ++ depends on USB && NET ++ ++if USB_NET_DRIVERS ++ ++config USB_CATC ++ depends on n ++ tristate "USB CATC NetMate-based Ethernet device support" ++ depends on m ++ depends on CRC32 ++ ---help--- ++ Say Y if you want to use one of the following 10Mbps USB Ethernet ++ device based on the EL1210A chip. Supported devices are: ++ Belkin F5U011 ++ Belkin F5U111 ++ CATC NetMate ++ CATC NetMate II ++ smartBridges smartNIC ++ ++ This driver makes the adapter appear as a normal Ethernet interface, ++ typically on eth0, if it is the only ethernet device, or perhaps on ++ eth1, if you have a PCI or ISA ethernet card installed. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called catc. ++ ++config USB_KAWETH ++ depends on n ++ tristate "USB KLSI KL5USB101-based ethernet device support" ++ depends on m ++ ---help--- ++ Say Y here if you want to use one of the following 10Mbps only ++ USB Ethernet adapters based on the KLSI KL5KUSB101B chipset: ++ 3Com 3C19250 ++ ADS USB-10BT ++ ATEN USB Ethernet ++ ASANTE USB To Ethernet Adapter ++ AOX Endpoints USB Ethernet ++ Correga K.K. ++ D-Link DSB-650C and DU-E10 ++ Entrega / Portgear E45 ++ I-O DATA USB-ET/T ++ Jaton USB Ethernet Device Adapter ++ Kingston Technology USB Ethernet Adapter ++ Linksys USB10T ++ Mobility USB-Ethernet Adapter ++ NetGear EA-101 ++ Peracom Enet and Enet2 ++ Portsmith Express Ethernet Adapter ++ Shark Pocket Adapter ++ SMC 2202USB ++ Sony Vaio port extender ++ ++ This driver is likely to work with most 10Mbps only USB Ethernet ++ adapters, including some "no brand" devices. It does NOT work on ++ SmartBridges smartNIC or on Belkin F5U111 devices - you should use ++ the CATC NetMate driver for those. If you are not sure which one ++ you need, select both, and the correct one should be selected for ++ you. ++ ++ This driver makes the adapter appear as a normal Ethernet interface, ++ typically on eth0, if it is the only ethernet device, or perhaps on ++ eth1, if you have a PCI or ISA ethernet card installed. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called kaweth. ++ ++config USB_PEGASUS ++ depends on n ++ tristate "USB Pegasus/Pegasus-II based ethernet device support" ++ depends on m ++ select BPAUTO_MII ++ ---help--- ++ Say Y here if you know you have Pegasus or Pegasus-II based adapter. ++ If in doubt then look at for the ++ complete list of supported devices. ++ ++ If your particular adapter is not in the list and you are _sure_ it ++ is Pegasus or Pegasus II based then send me ++ vendor and device IDs. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called pegasus. ++ ++config USB_RTL8150 ++ depends on n ++ tristate "USB RTL8150 based ethernet device support" ++ depends on m ++ select BPAUTO_MII ++ help ++ Say Y here if you have RTL8150 based usb-ethernet adapter. ++ Send me any comments you may have. ++ You can also check for updates at . ++ ++ To compile this driver as a module, choose M here: the ++ module will be called rtl8150. ++ ++config USB_RTL8152 ++ depends on n ++ tristate "Realtek RTL8152/RTL8153 Based USB Ethernet Adapters" ++ depends on m ++ select BPAUTO_MII ++ help ++ This option adds support for Realtek RTL8152 based USB 2.0 ++ 10/100 Ethernet adapters and RTL8153 based USB 3.0 10/100/1000 ++ Ethernet adapters. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called r8152. ++ ++config USB_USBNET ++ tristate "Multi-purpose USB Networking Framework" ++ depends on m ++ select BPAUTO_MII ++ ---help--- ++ This driver supports several kinds of network links over USB, ++ with "minidrivers" built around a common network driver core ++ that supports deep queues for efficient transfers. (This gives ++ better performance with small packets and at high speeds). ++ ++ The USB host runs "usbnet", and the other end of the link might be: ++ ++ - Another USB host, when using USB "network" or "data transfer" ++ cables. These are often used to network laptops to PCs, like ++ "Laplink" parallel cables or some motherboards. These rely ++ on specialized chips from many suppliers. ++ ++ - An intelligent USB gadget, perhaps embedding a Linux system. ++ These include PDAs running Linux (iPaq, Yopy, Zaurus, and ++ others), and devices that interoperate using the standard ++ CDC-Ethernet specification (including many cable modems). ++ ++ - Network adapter hardware (like those for 10/100 Ethernet) which ++ uses this driver framework. ++ ++ The link will appear with a name like "usb0", when the link is ++ a two-node link, or "eth0" for most CDC-Ethernet devices. Those ++ two-node links are most easily managed with Ethernet Bridging ++ (CONFIG_BRIDGE) instead of routing. ++ ++ For more information see . ++ ++ To compile this driver as a module, choose M here: the ++ module will be called usbnet. ++ ++config USB_NET_AX8817X ++ depends on n ++ tristate "ASIX AX88xxx Based USB 2.0 Ethernet Adapters" ++ depends on m ++ depends on USB_USBNET ++ depends on CRC32 ++ depends on PHYLIB ++ default y ++ help ++ This option adds support for ASIX AX88xxx based USB 2.0 ++ 10/100 Ethernet adapters. ++ ++ This driver should work with at least the following devices: ++ * Aten UC210T ++ * ASIX AX88172 ++ * Billionton Systems, USB2AR ++ * Buffalo LUA-U2-KTX ++ * Corega FEther USB2-TX ++ * D-Link DUB-E100 ++ * Hawking UF200 ++ * Linksys USB200M ++ * Netgear FA120 ++ * Sitecom LN-029 ++ * Sitecom LN-028 ++ * Intellinet USB 2.0 Ethernet ++ * ST Lab USB 2.0 Ethernet ++ * TrendNet TU2-ET100 ++ ++ This driver creates an interface named "ethX", where X depends on ++ what other networking devices you have in use. ++ ++config USB_NET_AX88179_178A ++ depends on n ++ tristate "ASIX AX88179/178A USB 3.0/2.0 to Gigabit Ethernet" ++ depends on m ++ depends on USB_USBNET ++ depends on CRC32 ++ depends on PHYLIB ++ default y ++ help ++ This option adds support for ASIX AX88179 based USB 3.0/2.0 ++ to Gigabit Ethernet adapters. ++ ++ This driver should work with at least the following devices: ++ * ASIX AX88179 ++ * ASIX AX88178A ++ * Sitcomm LN-032 ++ ++ This driver creates an interface named "ethX", where X depends on ++ what other networking devices you have in use. ++ ++config USB_NET_CDCETHER ++ tristate "CDC Ethernet support (smart devices such as cable modems)" ++ depends on m ++ depends on USB_USBNET ++ default y ++ help ++ This option supports devices conforming to the Communication Device ++ Class (CDC) Ethernet Control Model, a specification that's easy to ++ implement in device firmware. The CDC specifications are available ++ from . ++ ++ CDC Ethernet is an implementation option for DOCSIS cable modems ++ that support USB connectivity, used for non-Microsoft USB hosts. ++ The Linux-USB CDC Ethernet Gadget driver is an open implementation. ++ This driver should work with at least the following devices: ++ ++ * Dell Wireless 5530 HSPA ++ * Ericsson PipeRider (all variants) ++ * Ericsson Mobile Broadband Module (all variants) ++ * Motorola (DM100 and SB4100) ++ * Broadcom Cable Modem (reference design) ++ * Toshiba (PCX1100U and F3507g/F3607gw) ++ * ... ++ ++ This driver creates an interface named "ethX", where X depends on ++ what other networking devices you have in use. However, if the ++ IEEE 802 "local assignment" bit is set in the address, a "usbX" ++ name is used instead. ++ ++config USB_NET_CDC_EEM ++ depends on n ++ tristate "CDC EEM support" ++ depends on m ++ depends on USB_USBNET ++ help ++ This option supports devices conforming to the Communication Device ++ Class (CDC) Ethernet Emulation Model, a specification that's easy to ++ implement in device firmware. The CDC EEM specifications are available ++ from . ++ ++ This driver creates an interface named "ethX", where X depends on ++ what other networking devices you have in use. However, if the ++ IEEE 802 "local assignment" bit is set in the address, a "usbX" ++ name is used instead. ++ ++config USB_NET_CDC_NCM ++ tristate "CDC NCM support" ++ depends on m ++ depends on USB_USBNET ++ default y ++ help ++ This driver provides support for CDC NCM (Network Control Model ++ Device USB Class Specification). The CDC NCM specification is ++ available from . ++ ++ Say "y" to link the driver statically, or "m" to build a ++ dynamically linked module. ++ ++ This driver should work with at least the following devices: ++ * ST-Ericsson M700 LTE FDD/TDD Mobile Broadband Modem (ref. design) ++ * ST-Ericsson M5730 HSPA+ Mobile Broadband Modem (reference design) ++ * ST-Ericsson M570 HSPA+ Mobile Broadband Modem (reference design) ++ * ST-Ericsson M343 HSPA Mobile Broadband Modem (reference design) ++ * Ericsson F5521gw Mobile Broadband Module ++ ++config USB_NET_HUAWEI_CDC_NCM ++ depends on n ++ tristate "Huawei NCM embedded AT channel support" ++ depends on m ++ depends on USB_USBNET ++ select USB_WDM ++ select USB_NET_CDC_NCM ++ help ++ This driver supports huawei-style NCM devices, that use NCM as a ++ transport for other protocols, usually an embedded AT channel. ++ Good examples are: ++ * Huawei E3131 ++ * Huawei E3251 ++ ++ To compile this driver as a module, choose M here: the module will be ++ called huawei_cdc_ncm.ko. ++ ++config USB_NET_CDC_MBIM ++ tristate "CDC MBIM support" ++ depends on m ++ depends on USB_USBNET ++ select USB_WDM ++ select USB_NET_CDC_NCM ++ help ++ This driver provides support for CDC MBIM (Mobile Broadband ++ Interface Model) devices. The CDC MBIM specification is ++ available from . ++ ++ MBIM devices require configuration using the management ++ protocol defined by the MBIM specification. This driver ++ provides unfiltered access to the MBIM control channel ++ through the associated /dev/cdc-wdmx character device. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called cdc_mbim. ++ ++config USB_NET_DM9601 ++ depends on n ++ tristate "Davicom DM96xx based USB 10/100 ethernet devices" ++ depends on m ++ depends on USB_USBNET ++ depends on CRC32 ++ help ++ This option adds support for Davicom DM9601/DM9620/DM9621A ++ based USB 10/100 Ethernet adapters. ++ ++config USB_NET_SR9700 ++ depends on n ++ tristate "CoreChip-sz SR9700 based USB 1.1 10/100 ethernet devices" ++ depends on m ++ depends on USB_USBNET ++ depends on CRC32 ++ help ++ This option adds support for CoreChip-sz SR9700 based USB 1.1 ++ 10/100 Ethernet adapters. ++ ++config USB_NET_SR9800 ++ depends on n ++ tristate "CoreChip-sz SR9800 based USB 2.0 10/100 ethernet devices" ++ depends on m ++ depends on USB_USBNET ++ depends on CRC32 ++ ---help--- ++ Say Y if you want to use one of the following 100Mbps USB Ethernet ++ device based on the CoreChip-sz SR9800 chip. ++ ++ This driver makes the adapter appear as a normal Ethernet interface, ++ typically on eth0, if it is the only ethernet device, or perhaps on ++ eth1, if you have a PCI or ISA ethernet card installed. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called sr9800. ++ ++config USB_NET_SMSC75XX ++ depends on n ++ tristate "SMSC LAN75XX based USB 2.0 gigabit ethernet devices" ++ depends on m ++ depends on USB_USBNET ++ depends on BITREVERSE ++ depends on CRC16 ++ depends on CRC32 ++ help ++ This option adds support for SMSC LAN75XX based USB 2.0 ++ Gigabit Ethernet adapters. ++ ++config USB_NET_SMSC95XX ++ depends on n ++ tristate "SMSC LAN95XX based USB 2.0 10/100 ethernet devices" ++ depends on m ++ depends on USB_USBNET ++ depends on BITREVERSE ++ depends on CRC16 ++ depends on CRC32 ++ help ++ This option adds support for SMSC LAN95XX based USB 2.0 ++ 10/100 Ethernet adapters. ++ ++config USB_NET_GL620A ++ depends on n ++ tristate "GeneSys GL620USB-A based cables" ++ depends on m ++ depends on USB_USBNET ++ help ++ Choose this option if you're using a host-to-host cable, ++ or PC2PC motherboard, with this chip. ++ ++ Note that the half-duplex "GL620USB" is not supported. ++ ++config USB_NET_NET1080 ++ depends on n ++ tristate "NetChip 1080 based cables (Laplink, ...)" ++ depends on m ++ default y ++ depends on USB_USBNET ++ help ++ Choose this option if you're using a host-to-host cable based ++ on this design: one NetChip 1080 chip and supporting logic, ++ optionally with LEDs that indicate traffic ++ ++config USB_NET_PLUSB ++ depends on n ++ tristate "Prolific PL-2301/2302/25A1 based cables" ++ depends on m ++ # if the handshake/init/reset problems, from original 'plusb', ++ # are ever resolved ... then remove "experimental" ++ depends on USB_USBNET ++ help ++ Choose this option if you're using a host-to-host cable ++ with one of these chips. ++ ++config USB_NET_MCS7830 ++ depends on n ++ tristate "MosChip MCS7830 based Ethernet adapters" ++ depends on m ++ depends on USB_USBNET ++ help ++ Choose this option if you're using a 10/100 Ethernet USB2 ++ adapter based on the MosChip 7830 controller. This includes ++ adapters marketed under the DeLOCK brand. ++ ++config USB_NET_RNDIS_HOST ++ tristate "Host for RNDIS and ActiveSync devices" ++ depends on m ++ depends on USB_USBNET ++ select USB_NET_CDCETHER ++ help ++ This option enables hosting "Remote NDIS" USB networking links, ++ as encouraged by Microsoft (instead of CDC Ethernet!) for use in ++ various devices that may only support this protocol. A variant ++ of this protocol (with even less public documentation) seems to ++ be at the root of Microsoft's "ActiveSync" too. ++ ++ Avoid using this protocol unless you have no better options. ++ The protocol specification is incomplete, and is controlled by ++ (and for) Microsoft; it isn't an "Open" ecosystem or market. ++ ++config USB_NET_CDC_SUBSET ++ depends on n ++ tristate "Simple USB Network Links (CDC Ethernet subset)" ++ depends on m ++ depends on USB_USBNET ++ default y ++ help ++ This driver module supports USB network devices that can work ++ without any device-specific information. Select it if you have ++ one of these drivers. ++ ++ Note that while many USB host-to-host cables can work in this mode, ++ that may mean not being able to talk to Win32 systems or more ++ commonly not being able to handle certain events (like replugging ++ the host on the other end) very well. Also, these devices will ++ not generally have permanently assigned Ethernet addresses. ++ ++config USB_ALI_M5632 ++ bool "ALi M5632 based 'USB 2.0 Data Link' cables" ++ depends on USB_NET_CDC_SUBSET ++ help ++ Choose this option if you're using a host-to-host cable ++ based on this design, which supports USB 2.0 high speed. ++ ++config USB_AN2720 ++ bool "AnchorChips 2720 based cables (Xircom PGUNET, ...)" ++ depends on USB_NET_CDC_SUBSET ++ help ++ Choose this option if you're using a host-to-host cable ++ based on this design. Note that AnchorChips is now a ++ Cypress brand. ++ ++config USB_BELKIN ++ bool "eTEK based host-to-host cables (Advance, Belkin, ...)" ++ depends on USB_NET_CDC_SUBSET ++ default y ++ help ++ Choose this option if you're using a host-to-host cable ++ based on this design: two NetChip 2890 chips and an Atmel ++ microcontroller, with LEDs that indicate traffic. ++ ++config USB_ARMLINUX ++ bool "Embedded ARM Linux links (iPaq, ...)" ++ depends on USB_NET_CDC_SUBSET ++ default y ++ help ++ Choose this option to support the "usb-eth" networking driver ++ used by most of the ARM Linux community with device controllers ++ such as the SA-11x0 and PXA-25x UDCs, or the tftp capabilities ++ in some PXA versions of the "blob" boot loader. ++ ++ Linux-based "Gumstix" PXA-25x based systems use this protocol ++ to talk with other Linux systems. ++ ++ Although the ROMs shipped with Sharp Zaurus products use a ++ different link level framing protocol, you can have them use ++ this simpler protocol by installing a different kernel. ++ ++config USB_EPSON2888 ++ bool "Epson 2888 based firmware (DEVELOPMENT)" ++ depends on USB_NET_CDC_SUBSET ++ help ++ Choose this option to support the usb networking links used ++ by some sample firmware from Epson. ++ ++config USB_KC2190 ++ bool "KT Technology KC2190 based cables (InstaNet)" ++ depends on USB_NET_CDC_SUBSET ++ help ++ Choose this option if you're using a host-to-host cable ++ with one of these chips. ++ ++config USB_NET_ZAURUS ++ depends on n ++ tristate "Sharp Zaurus (stock ROMs) and compatible" ++ depends on m ++ depends on USB_USBNET ++ select USB_NET_CDCETHER ++ depends on CRC32 ++ default y ++ help ++ Choose this option to support the usb networking links used by ++ Zaurus models like the SL-5000D, SL-5500, SL-5600, A-300, B-500. ++ This also supports some related device firmware, as used in some ++ PDAs from Olympus and some cell phones from Motorola. ++ ++ If you install an alternate image, such as the Linux 2.6 based ++ versions of OpenZaurus, you should no longer need to support this ++ protocol. Only the "eth-fd" or "net_fd" drivers in these devices ++ really need this non-conformant variant of CDC Ethernet (or in ++ some cases CDC MDLM) protocol, not "g_ether". ++ ++config USB_NET_CX82310_ETH ++ depends on n ++ tristate "Conexant CX82310 USB ethernet port" ++ depends on m ++ depends on USB_USBNET ++ help ++ Choose this option if you're using a Conexant CX82310-based ADSL ++ router with USB ethernet port. This driver is for routers only, ++ it will not work with ADSL modems (use cxacru driver instead). ++ ++config USB_NET_KALMIA ++ depends on n ++ tristate "Samsung Kalmia based LTE USB modem" ++ depends on m ++ depends on USB_USBNET ++ help ++ Choose this option if you have a Samsung Kalmia based USB modem ++ as Samsung GT-B3730. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called kalmia. ++ ++config USB_NET_QMI_WWAN ++ tristate "QMI WWAN driver for Qualcomm MSM based 3G and LTE modems" ++ depends on m ++ depends on USB_USBNET ++ select USB_WDM ++ help ++ Support WWAN LTE/3G devices based on Qualcomm Mobile Data Modem ++ (MDM) chipsets. Examples of such devices are ++ * Huawei E392/E398 ++ ++ This driver will only drive the ethernet part of the chips. ++ The devices require additional configuration to be usable. ++ Multiple management interfaces with linux drivers are ++ available: ++ ++ * option: AT commands on /dev/ttyUSBx ++ * cdc-wdm: Qualcomm MSM Interface (QMI) protocol on /dev/cdc-wdmx ++ ++ A modem manager with support for QMI is recommended. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called qmi_wwan. ++ ++config USB_HSO ++ depends on n ++ tristate "Option USB High Speed Mobile Devices" ++ depends on m ++ depends on USB && RFKILL && TTY ++ default n ++ help ++ Choose this option if you have an Option HSDPA/HSUPA card. ++ These cards support downlink speeds of 7.2Mbps or greater. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called hso. ++ ++config USB_NET_INT51X1 ++ depends on n ++ tristate "Intellon PLC based usb adapter" ++ depends on m ++ depends on USB_USBNET ++ help ++ Choose this option if you're using a 14Mb USB-based PLC ++ (Powerline Communications) solution with an Intellon ++ INT51x1/INT5200 chip, like the "devolo dLan duo". ++ ++config USB_CDC_PHONET ++ depends on n ++ tristate "CDC Phonet support" ++ depends on m ++ depends on PHONET ++ help ++ Choose this option to support the Phonet interface to a Nokia ++ cellular modem, as found on most Nokia handsets with the ++ "PC suite" USB profile. ++ ++config USB_IPHETH ++ depends on n ++ tristate "Apple iPhone USB Ethernet driver" ++ depends on m ++ default n ++ ---help--- ++ Module used to share Internet connection (tethering) from your ++ iPhone (Original, 3G and 3GS) to your system. ++ Note that you need userspace libraries and programs that are needed ++ to pair your device with your system and that understand the iPhone ++ protocol. ++ ++ For more information: http://giagio.com/wiki/moin.cgi/iPhoneEthernetDriver ++ ++config USB_SIERRA_NET ++ tristate "USB-to-WWAN Driver for Sierra Wireless modems" ++ depends on m ++ depends on USB_USBNET ++ help ++ Choose this option if you have a Sierra Wireless USB-to-WWAN device. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called sierra_net. ++ ++config USB_VL600 ++ depends on n ++ tristate "LG VL600 modem dongle" ++ depends on m ++ depends on USB_NET_CDCETHER && TTY ++ select USB_ACM ++ help ++ Select this if you want to use an LG Electronics 4G/LTE usb modem ++ called VL600. This driver only handles the ethernet ++ interface exposed by the modem firmware. To establish a connection ++ you will first need a userspace program that sends the right ++ command to the modem through its CDC ACM port, and most ++ likely also a DHCP client. See this thread about using the ++ 4G modem from Verizon: ++ ++ http://ubuntuforums.org/showpost.php?p=10589647&postcount=17 ++ ++endif # USB_NET_DRIVERS +diff -Naur backports-4.2.6-1.org/drivers/net/usb/lg-vl600.c backports-4.2.6-1/drivers/net/usb/lg-vl600.c +--- backports-4.2.6-1.org/drivers/net/usb/lg-vl600.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/lg-vl600.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,353 @@ +/* + * Ethernet interface part of the LG VL600 LTE modem (4G dongle) @@ -14026,7 +14699,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/lg-vl600.c backports-3.18.1-1/ + &buf->data[sizeof(*ethhdr) + 0x12], + ETH_ALEN); + } else { -+ memset(ethhdr->h_source, 0, ETH_ALEN); ++ eth_zero_addr(ethhdr->h_source); + memcpy(ethhdr->h_dest, dev->net->dev_addr, ETH_ALEN); + + /* Inbound IPv6 packets have an IPv4 ethertype (0x800) @@ -14176,13 +14849,13 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/lg-vl600.c backports-3.18.1-1/ +MODULE_AUTHOR("Anrzej Zaborowski"); +MODULE_DESCRIPTION("LG-VL600 modem's ethernet link"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/Makefile backports-3.18.1-1/drivers/net/usb/Makefile ---- backports-3.18.1-1.org/drivers/net/usb/Makefile 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/Makefile 2015-01-03 13:49:51.269970813 +0100 -@@ -1,39 +1,35 @@ --# --# Makefile for USB Network drivers --# +diff -Naur backports-4.2.6-1.org/drivers/net/usb/Makefile backports-4.2.6-1/drivers/net/usb/Makefile +--- backports-4.2.6-1.org/drivers/net/usb/Makefile 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/Makefile 2016-01-27 15:53:50.000000000 +0100 +@@ -1,39 +1,40 @@ + # + # Makefile for USB Network drivers + # -# -#obj-$(CPTCFG_USB_CATC) += catc.o -#obj-$(CPTCFG_USB_KAWETH) += kaweth.o @@ -14192,6 +14865,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Makefile backports-3.18.1-1/dr -#obj-$(CPTCFG_USB_HSO) += hso.o -#obj-$(CPTCFG_USB_NET_AX8817X) += asix.o -#obj-$(CPTCFG_USB_NET_AX88179_178A) += ax88179_178a.o ++ +obj-$(CPTCFG_USB_CATC) += catc.o +obj-$(CPTCFG_USB_KAWETH) += kaweth.o +obj-$(CPTCFG_USB_PEGASUS) += pegasus.o @@ -14246,10 +14920,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/Makefile backports-3.18.1-1/dr +obj-$(CPTCFG_USB_VL600) += lg-vl600.o obj-$(CPTCFG_USB_NET_QMI_WWAN) += qmi_wwan.o obj-$(CPTCFG_USB_NET_CDC_MBIM) += cdc_mbim.o -- -diff -Naur backports-3.18.1-1.org/drivers/net/usb/mcs7830.c backports-3.18.1-1/drivers/net/usb/mcs7830.c ---- backports-3.18.1-1.org/drivers/net/usb/mcs7830.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/mcs7830.c 2014-12-16 18:39:45.000000000 +0100 + +diff -Naur backports-4.2.6-1.org/drivers/net/usb/mcs7830.c backports-4.2.6-1/drivers/net/usb/mcs7830.c +--- backports-4.2.6-1.org/drivers/net/usb/mcs7830.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/mcs7830.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,643 @@ +/* + * MOSCHIP MCS7830 based (7730/7830/7832) USB 2.0 Ethernet Devices @@ -14894,9 +15568,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/mcs7830.c backports-3.18.1-1/d + +MODULE_DESCRIPTION("USB to network adapter MCS7830)"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/net1080.c backports-3.18.1-1/drivers/net/usb/net1080.c ---- backports-3.18.1-1.org/drivers/net/usb/net1080.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/net1080.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/net1080.c backports-4.2.6-1/drivers/net/usb/net1080.c +--- backports-4.2.6-1.org/drivers/net/usb/net1080.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/net1080.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,544 @@ +/* + * Net1080 based USB host-to-host cables @@ -15442,9 +16116,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/net1080.c backports-3.18.1-1/d +MODULE_AUTHOR("David Brownell"); +MODULE_DESCRIPTION("NetChip 1080 based USB Host-to-Host Links"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/pegasus.c backports-3.18.1-1/drivers/net/usb/pegasus.c ---- backports-3.18.1-1.org/drivers/net/usb/pegasus.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/pegasus.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/pegasus.c backports-4.2.6-1/drivers/net/usb/pegasus.c +--- backports-4.2.6-1.org/drivers/net/usb/pegasus.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/pegasus.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,1335 @@ +/* + * Copyright (c) 1999-2013 Petko Manolov (petkan@nucleusys.com) @@ -16781,9 +17455,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/pegasus.c backports-3.18.1-1/d + +module_init(pegasus_init); +module_exit(pegasus_exit); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/pegasus.h backports-3.18.1-1/drivers/net/usb/pegasus.h ---- backports-3.18.1-1.org/drivers/net/usb/pegasus.h 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/pegasus.h 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/pegasus.h backports-4.2.6-1/drivers/net/usb/pegasus.h +--- backports-4.2.6-1.org/drivers/net/usb/pegasus.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/pegasus.h 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,308 @@ +/* + * Copyright (c) 1999-2013 Petko Manolov (petkan@nucleusys.com) @@ -17093,10 +17767,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/pegasus.h backports-3.18.1-1/d + + +#endif /* PEGASUS_DEV */ -diff -Naur backports-3.18.1-1.org/drivers/net/usb/plusb.c backports-3.18.1-1/drivers/net/usb/plusb.c ---- backports-3.18.1-1.org/drivers/net/usb/plusb.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/plusb.c 2014-12-16 18:39:45.000000000 +0100 -@@ -0,0 +1,157 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/usb/plusb.c backports-4.2.6-1/drivers/net/usb/plusb.c +--- backports-4.2.6-1.org/drivers/net/usb/plusb.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/plusb.c 2015-11-09 23:37:56.000000000 +0100 +@@ -0,0 +1,162 @@ +/* + * PL-2301/2302 USB host-to-host link cables + * Copyright (C) 2000-2005 by David Brownell @@ -17233,6 +17907,11 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/plusb.c backports-3.18.1-1/dri +}, { + USB_DEVICE(0x050d, 0x258a), /* Belkin F5U258/F5U279 (PL-25A1) */ + .driver_info = (unsigned long) &prolific_info, ++}, { ++ USB_DEVICE(0x3923, 0x7825), /* National Instruments USB ++ * Host-to-Host Cable ++ */ ++ .driver_info = (unsigned long) &prolific_info, +}, + + { }, // END @@ -17254,10 +17933,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/plusb.c backports-3.18.1-1/dri +MODULE_AUTHOR("David Brownell"); +MODULE_DESCRIPTION("Prolific PL-2301/2302/25A1 USB Host to Host Link Driver"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/drivers/net/usb/r8152.c ---- backports-3.18.1-1.org/drivers/net/usb/r8152.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/r8152.c 2015-01-03 13:42:25.000000000 +0100 -@@ -0,0 +1,3913 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/usb/r8152.c backports-4.2.6-1/drivers/net/usb/r8152.c +--- backports-4.2.6-1.org/drivers/net/usb/r8152.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/r8152.c 2016-01-27 12:43:25.000000000 +0100 +@@ -0,0 +1,2847 @@ +/* + * Copyright (c) 2014 Realtek Semiconductor Corp. All rights reserved. + * @@ -17281,12 +17960,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +#include +#include +#include -+#include -+#include -+#include + +/* Version Information */ -+#define DRIVER_VERSION "v1.07.0 (2014/10/09)" ++#define DRIVER_VERSION "v1.04.0 (2014/01/15)" +#define DRIVER_AUTHOR "Realtek linux nic maintainers " +#define DRIVER_DESC "Realtek RTL8152/RTL8153 Based USB Ethernet Adapters" +#define MODULENAME "r8152" @@ -17321,13 +17997,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +#define PLA_WDT6_CTRL 0xe428 +#define PLA_TCR0 0xe610 +#define PLA_TCR1 0xe612 -+#define PLA_MTPS 0xe615 +#define PLA_TXFIFO_CTRL 0xe618 -+#define PLA_RSTTALLY 0xe800 ++#define PLA_RSTTELLY 0xe800 +#define PLA_CR 0xe813 +#define PLA_CRWECR 0xe81c -+#define PLA_CONFIG12 0xe81e /* CONFIG1, CONFIG2 */ -+#define PLA_CONFIG34 0xe820 /* CONFIG3, CONFIG4 */ +#define PLA_CONFIG5 0xe822 +#define PLA_PHY_PWR 0xe84c +#define PLA_OOB_CTRL 0xe84f @@ -17335,7 +18008,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +#define PLA_MISC_0 0xe858 +#define PLA_MISC_1 0xe85a +#define PLA_OCP_GPHY_BASE 0xe86c -+#define PLA_TALLYCNT 0xe890 ++#define PLA_TELLYCNT 0xe890 +#define PLA_SFF_STS_7 0xe8de +#define PLA_PHYSTATUS 0xe908 +#define PLA_BP_BA 0xfc26 @@ -17391,9 +18064,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +#define OCP_SRAM_ADDR 0xa436 +#define OCP_SRAM_DATA 0xa438 +#define OCP_DOWN_SPEED 0xa442 -+#define OCP_EEE_ABLE 0xa5c4 -+#define OCP_EEE_ADV 0xa5d0 -+#define OCP_EEE_LPABLE 0xa5d2 ++#define OCP_EEE_CFG2 0xa5d0 +#define OCP_ADC_CFG 0xbc06 + +/* SRAM Register */ @@ -17445,13 +18116,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +/* PLA_TCR1 */ +#define VERSION_MASK 0x7cf0 + -+/* PLA_MTPS */ -+#define MTPS_JUMBO (12 * 1024 / 64) -+#define MTPS_DEFAULT (6 * 1024 / 64) -+ -+/* PLA_RSTTALLY */ -+#define TALLY_RESET 0x0001 -+ +/* PLA_CR */ +#define CR_RST 0x10 +#define CR_RE 0x08 @@ -17491,14 +18155,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +/* PAL_BDC_CR */ +#define ALDPS_PROXY_MODE 0x0001 + -+/* PLA_CONFIG34 */ -+#define LINK_ON_WAKE_EN 0x0010 -+#define LINK_OFF_WAKE_EN 0x0008 -+ +/* PLA_CONFIG5 */ -+#define BWF_EN 0x0040 -+#define MWF_EN 0x0020 -+#define UWF_EN 0x0010 +#define LAN_WAKE_EN 0x0002 + +/* PLA_LED_FEATURE */ @@ -17551,7 +18208,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +/* USB_DEV_STAT */ +#define STAT_SPEED_MASK 0x0006 +#define STAT_SPEED_HIGH 0x0000 -+#define STAT_SPEED_FULL 0x0002 ++#define STAT_SPEED_FULL 0x0001 + +/* USB_TX_AGG */ +#define TX_AGG_MAX_THRESHOLD 0x03 @@ -17625,8 +18282,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +#define EEE_NWAY_EN 0x1000 +#define TX_QUIET_EN 0x0200 +#define RX_QUIET_EN 0x0100 -+#define sd_rise_time_mask 0x0070 -+#define sd_rise_time(x) (min(x, 7) << 4) /* bit 4 ~ 6 */ ++#define SDRISETIME 0x0010 /* bit 4 ~ 6 */ +#define RG_RXLPI_MSK_HFDUP 0x0008 +#define SDFALLTIME 0x0007 /* bit 0 ~ 2 */ + @@ -17638,8 +18294,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +#define RG_EEEPRG_EN 0x0010 + +/* OCP_EEE_CONFIG3 */ -+#define fast_snr_mask 0xff80 -+#define fast_snr(x) (min(x, 0x1ff) << 7) /* bit 7 ~ 15 */ ++#define FST_SNR_EYE_R 0x1500 /* bit 7 ~ 15 */ +#define RG_LFS_SEL 0x0060 /* bit 6 ~ 5 */ +#define MSK_PH 0x0006 /* bit 0 ~ 3 */ + @@ -17648,6 +18303,11 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +#define FUN_ADDR 0x0000 +#define FUN_DATA 0x4000 +/* bit[4:0] device addr */ ++#define DEVICE_ADDR 0x0007 ++ ++/* OCP_EEE_DATA */ ++#define EEE_ADDR 0x003C ++#define EEE_DATA 0x0002 + +/* OCP_EEE_CFG */ +#define CTAP_SHORT_EN 0x0040 @@ -17656,6 +18316,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +/* OCP_DOWN_SPEED */ +#define EN_10M_BGOFF 0x0080 + ++/* OCP_EEE_CFG2 */ ++#define MY1000_EEE 0x0004 ++#define MY100_EEE 0x0002 ++ +/* OCP_ADC_CFG */ +#define CKADSEL_L 0x0100 +#define ADC_EN 0x0080 @@ -17681,7 +18345,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + FULL_DUP = 0x01, +}; + -+#define RTL8152_MAX_TX 4 ++#define RTL8152_MAX_TX 10 +#define RTL8152_MAX_RX 10 +#define INTBUFSIZE 2 +#define CRC_SIZE 4 @@ -17702,11 +18366,8 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +#define BYTE_EN_START_MASK 0x0f +#define BYTE_EN_END_MASK 0xf0 + -+#define RTL8153_MAX_PACKET 9216 /* 9K */ -+#define RTL8153_MAX_MTU (RTL8153_MAX_PACKET - VLAN_ETH_HLEN - VLAN_HLEN) +#define RTL8152_RMS (VLAN_ETH_FRAME_LEN + VLAN_HLEN) -+#define RTL8153_RMS RTL8153_MAX_PACKET -+#define RTL8152_TX_TIMEOUT (5 * HZ) ++#define RTL8152_TX_TIMEOUT (HZ) + +/* rtl8152 flags */ +enum rtl8152_flags { @@ -17714,9 +18375,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + RTL8152_SET_RX_MODE, + WORK_ENABLE, + RTL8152_LINK_CHG, -+ SELECTIVE_SUSPEND, -+ PHY_RESET, -+ SCHEDULE_TASKLET, +}; + +/* Define these values to match your device */ @@ -17730,41 +18388,11 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +#define MCU_TYPE_PLA 0x0100 +#define MCU_TYPE_USB 0x0000 + -+#define REALTEK_USB_DEVICE(vend, prod) \ -+ USB_DEVICE_INTERFACE_CLASS(vend, prod, USB_CLASS_VENDOR_SPEC) -+ -+struct tally_counter { -+ __le64 tx_packets; -+ __le64 rx_packets; -+ __le64 tx_errors; -+ __le32 rx_errors; -+ __le16 rx_missed; -+ __le16 align_errors; -+ __le32 tx_one_collision; -+ __le32 tx_multi_collision; -+ __le64 rx_unicast; -+ __le64 rx_broadcast; -+ __le32 rx_multicast; -+ __le16 tx_aborted; -+ __le16 tx_underun; -+}; -+ +struct rx_desc { + __le32 opts1; +#define RX_LEN_MASK 0x7fff -+ + __le32 opts2; -+#define RD_UDP_CS (1 << 23) -+#define RD_TCP_CS (1 << 22) -+#define RD_IPV6_CS (1 << 20) -+#define RD_IPV4_CS (1 << 19) -+ + __le32 opts3; -+#define IPF (1 << 23) /* IP checksum fail */ -+#define UDPF (1 << 22) /* UDP checksum fail */ -+#define TCPF (1 << 21) /* TCP checksum fail */ -+#define RX_VLAN_TAG (1 << 16) -+ + __le32 opts4; + __le32 opts5; + __le32 opts6; @@ -17774,22 +18402,13 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + __le32 opts1; +#define TX_FS (1 << 31) /* First segment of a packet */ +#define TX_LS (1 << 30) /* Final segment of a packet */ -+#define GTSENDV4 (1 << 28) -+#define GTSENDV6 (1 << 27) -+#define GTTCPHO_SHIFT 18 -+#define GTTCPHO_MAX 0x7fU -+#define TX_LEN_MAX 0x3ffffU ++#define TX_LEN_MASK 0x3ffff + + __le32 opts2; +#define UDP_CS (1 << 31) /* Calculate UDP/IP checksum */ +#define TCP_CS (1 << 30) /* Calculate TCP/IP checksum */ +#define IPV4_CS (1 << 29) /* Calculate IPv4 checksum */ +#define IPV6_CS (1 << 28) /* Calculate IPv6 checksum */ -+#define MSS_SHIFT 17 -+#define MSS_MAX 0x7ffU -+#define TCPHO_SHIFT 17 -+#define TCPHO_MAX 0x7ffU -+#define TX_VLAN_TAG (1 << 16) +}; + +struct r8152; @@ -17826,21 +18445,16 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + spinlock_t rx_lock, tx_lock; + struct delayed_work schedule; + struct mii_if_info mii; -+ struct mutex control; /* use for hw setting */ + + struct rtl_ops { + void (*init)(struct r8152 *); + int (*enable)(struct r8152 *); + void (*disable)(struct r8152 *); -+ void (*up)(struct r8152 *); + void (*down)(struct r8152 *); + void (*unload)(struct r8152 *); -+ int (*eee_get)(struct r8152 *, struct ethtool_eee *); -+ int (*eee_set)(struct r8152 *, struct ethtool_eee *); + } __no_const rtl_ops; + + int intr_interval; -+ u32 saved_wolopts; + u32 msg_enable; + u32 tx_qlen; + u16 ocp_base; @@ -17859,20 +18473,11 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + RTL_VER_MAX +}; + -+enum tx_csum_stat { -+ TX_CSUM_SUCCESS = 0, -+ TX_CSUM_TSO, -+ TX_CSUM_NONE -+}; -+ +/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast). + * The RTL chips use a 64 element hash table based on the Ethernet CRC. + */ +static const int multicast_filter_limit = 32; -+static unsigned int agg_buf_sz = 16384; -+ -+#define RTL_LIMITED_TSO_SIZE (agg_buf_sz - sizeof(struct tx_desc) - \ -+ VLAN_ETH_HLEN - VLAN_HLEN) ++static unsigned int rx_buf_sz = 16384; + +static +int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data) @@ -17885,8 +18490,8 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + return -ENOMEM; + + ret = usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0), -+ RTL8152_REQ_GET_REGS, RTL8152_REQT_READ, -+ value, index, tmp, size, 500); ++ RTL8152_REQ_GET_REGS, RTL8152_REQT_READ, ++ value, index, tmp, size, 500); + + memcpy(data, tmp, size); + kfree(tmp); @@ -17900,21 +18505,22 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + int ret; + void *tmp; + -+ tmp = kmemdup(data, size, GFP_KERNEL); ++ tmp = kmalloc(size, GFP_KERNEL); + if (!tmp) + return -ENOMEM; + ++ memcpy(tmp, data, size); ++ + ret = usb_control_msg(tp->udev, usb_sndctrlpipe(tp->udev, 0), -+ RTL8152_REQ_SET_REGS, RTL8152_REQT_WRITE, -+ value, index, tmp, size, 500); ++ RTL8152_REQ_SET_REGS, RTL8152_REQT_WRITE, ++ value, index, tmp, size, 500); + + kfree(tmp); -+ + return ret; +} + +static int generic_ocp_read(struct r8152 *tp, u16 index, u16 size, -+ void *data, u16 type) ++ void *data, u16 type) +{ + u16 limit = 64; + int ret = 0; @@ -17954,7 +18560,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +} + +static int generic_ocp_write(struct r8152 *tp, u16 index, u16 byteen, -+ u16 size, void *data, u16 type) ++ u16 size, void *data, u16 type) +{ + int ret; + u16 byteen_start, byteen_end, byen; @@ -17988,8 +18594,8 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + while (size) { + if (size > limit) { + ret = set_registers(tp, index, -+ type | BYTE_EN_DWORD, -+ limit, data); ++ type | BYTE_EN_DWORD, ++ limit, data); + if (ret < 0) + goto error1; + @@ -17998,8 +18604,8 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + size -= limit; + } else { + ret = set_registers(tp, index, -+ type | BYTE_EN_DWORD, -+ size, data); ++ type | BYTE_EN_DWORD, ++ size, data); + if (ret < 0) + goto error1; + @@ -18195,17 +18801,11 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +static int read_mii_word(struct net_device *netdev, int phy_id, int reg) +{ + struct r8152 *tp = netdev_priv(netdev); -+ int ret; -+ -+ if (test_bit(RTL8152_UNPLUG, &tp->flags)) -+ return -ENODEV; + + if (phy_id != R8152_PHY_ID) + return -EINVAL; + -+ ret = r8152_mdio_read(tp, reg); -+ -+ return ret; ++ return r8152_mdio_read(tp, reg); +} + +static @@ -18213,32 +18813,35 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +{ + struct r8152 *tp = netdev_priv(netdev); + -+ if (test_bit(RTL8152_UNPLUG, &tp->flags)) -+ return; -+ + if (phy_id != R8152_PHY_ID) + return; + + r8152_mdio_write(tp, reg, val); +} + -+static int -+r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags); ++static ++int r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags); ++ ++static inline void set_ethernet_addr(struct r8152 *tp) ++{ ++ struct net_device *dev = tp->netdev; ++ u8 node_id[8] = {0}; ++ ++ if (pla_ocp_read(tp, PLA_IDR, sizeof(node_id), node_id) < 0) ++ netif_notice(tp, probe, dev, "inet addr fail\n"); ++ else { ++ memcpy(dev->dev_addr, node_id, dev->addr_len); ++ memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); ++ } ++} + +static int rtl8152_set_mac_address(struct net_device *netdev, void *p) +{ + struct r8152 *tp = netdev_priv(netdev); + struct sockaddr *addr = p; -+ int ret = -EADDRNOTAVAIL; + + if (!is_valid_ether_addr(addr->sa_data)) -+ goto out1; -+ -+ ret = usb_autopm_get_interface(tp->intf); -+ if (ret < 0) -+ goto out1; -+ -+ mutex_lock(&tp->control); ++ return -EADDRNOTAVAIL; + + memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); + @@ -18246,47 +18849,18 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + pla_ocp_write(tp, PLA_IDR, BYTE_EN_SIX_BYTES, 8, addr->sa_data); + ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); + -+ mutex_unlock(&tp->control); -+ -+ usb_autopm_put_interface(tp->intf); -+out1: -+ return ret; ++ return 0; +} + -+static int set_ethernet_addr(struct r8152 *tp) ++static struct net_device_stats *rtl8152_get_stats(struct net_device *dev) +{ -+ struct net_device *dev = tp->netdev; -+ struct sockaddr sa; -+ int ret; -+ -+ if (tp->version == RTL_VER_01) -+ ret = pla_ocp_read(tp, PLA_IDR, 8, sa.sa_data); -+ else -+ ret = pla_ocp_read(tp, PLA_BACKUP, 8, sa.sa_data); -+ -+ if (ret < 0) { -+ netif_err(tp, probe, dev, "Get ether addr fail\n"); -+ } else if (!is_valid_ether_addr(sa.sa_data)) { -+ netif_err(tp, probe, dev, "Invalid ether addr %pM\n", -+ sa.sa_data); -+ eth_hw_addr_random(dev); -+ ether_addr_copy(sa.sa_data, dev->dev_addr); -+ ret = rtl8152_set_mac_address(dev, &sa); -+ netif_info(tp, probe, dev, "Random ether addr %pM\n", -+ sa.sa_data); -+ } else { -+ if (tp->version == RTL_VER_01) -+ ether_addr_copy(dev->dev_addr, sa.sa_data); -+ else -+ ret = rtl8152_set_mac_address(dev, &sa); -+ } -+ -+ return ret; ++ return &dev->stats; +} + +static void read_bulk_callback(struct urb *urb) +{ + struct net_device *netdev; ++ unsigned long flags; + int status = urb->status; + struct rx_agg *agg; + struct r8152 *tp; @@ -18313,16 +18887,14 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + if (!netif_carrier_ok(netdev)) + return; + -+ usb_mark_last_busy(tp->udev); -+ + switch (status) { + case 0: + if (urb->actual_length < ETH_ZLEN) + break; + -+ spin_lock(&tp->rx_lock); ++ spin_lock_irqsave(&tp->rx_lock, flags); + list_add_tail(&agg->list, &tp->rx_done); -+ spin_unlock(&tp->rx_lock); ++ spin_unlock_irqrestore(&tp->rx_lock, flags); + tasklet_schedule(&tp->tl); + return; + case -ESHUTDOWN: @@ -18345,9 +18917,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + if (result == -ENODEV) { + netif_device_detach(tp->netdev); + } else if (result) { -+ spin_lock(&tp->rx_lock); ++ spin_lock_irqsave(&tp->rx_lock, flags); + list_add_tail(&agg->list, &tp->rx_done); -+ spin_unlock(&tp->rx_lock); ++ spin_unlock_irqrestore(&tp->rx_lock, flags); + tasklet_schedule(&tp->tl); + } +} @@ -18355,7 +18927,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +static void write_bulk_callback(struct urb *urb) +{ + struct net_device_stats *stats; -+ struct net_device *netdev; ++ unsigned long flags; + struct tx_agg *agg; + struct r8152 *tp; + int status = urb->status; @@ -18368,24 +18940,21 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + if (!tp) + return; + -+ netdev = tp->netdev; -+ stats = &netdev->stats; ++ stats = rtl8152_get_stats(tp->netdev); + if (status) { + if (net_ratelimit()) -+ netdev_warn(netdev, "Tx status %d\n", status); ++ netdev_warn(tp->netdev, "Tx status %d\n", status); + stats->tx_errors += agg->skb_num; + } else { + stats->tx_packets += agg->skb_num; + stats->tx_bytes += agg->skb_len; + } + -+ spin_lock(&tp->tx_lock); ++ spin_lock_irqsave(&tp->tx_lock, flags); + list_add_tail(&agg->list, &tp->tx_free); -+ spin_unlock(&tp->tx_lock); -+ -+ usb_autopm_put_interface_async(tp->intf); ++ spin_unlock_irqrestore(&tp->tx_lock, flags); + -+ if (!netif_carrier_ok(netdev)) ++ if (!netif_carrier_ok(tp->netdev)) + return; + + if (!test_bit(WORK_ENABLE, &tp->flags)) @@ -18422,9 +18991,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + case -ESHUTDOWN: + netif_device_detach(tp->netdev); + case -ENOENT: -+ case -EPROTO: -+ netif_info(tp, intr, tp->netdev, -+ "Stop submitting intr, status %d\n", status); + return; + case -EOVERFLOW: + netif_info(tp, intr, tp->netdev, "intr status -EOVERFLOW\n"); @@ -18515,13 +19081,13 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + skb_queue_head_init(&tp->tx_queue); + + for (i = 0; i < RTL8152_MAX_RX; i++) { -+ buf = kmalloc_node(agg_buf_sz, GFP_KERNEL, node); ++ buf = kmalloc_node(rx_buf_sz, GFP_KERNEL, node); + if (!buf) + goto err1; + + if (buf != rx_agg_align(buf)) { + kfree(buf); -+ buf = kmalloc_node(agg_buf_sz + RX_ALIGN, GFP_KERNEL, ++ buf = kmalloc_node(rx_buf_sz + RX_ALIGN, GFP_KERNEL, + node); + if (!buf) + goto err1; @@ -18541,13 +19107,13 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + } + + for (i = 0; i < RTL8152_MAX_TX; i++) { -+ buf = kmalloc_node(agg_buf_sz, GFP_KERNEL, node); ++ buf = kmalloc_node(rx_buf_sz, GFP_KERNEL, node); + if (!buf) + goto err1; + + if (buf != tx_agg_align(buf)) { + kfree(buf); -+ buf = kmalloc_node(agg_buf_sz + TX_ALIGN, GFP_KERNEL, ++ buf = kmalloc_node(rx_buf_sz + TX_ALIGN, GFP_KERNEL, + node); + if (!buf) + goto err1; @@ -18578,8 +19144,8 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + + tp->intr_interval = (int)ep_intr->desc.bInterval; + usb_fill_int_urb(tp->intr_urb, tp->udev, usb_rcvintpipe(tp->udev, 3), -+ tp->intr_buff, INTBUFSIZE, intr_callback, -+ tp, tp->intr_interval); ++ tp->intr_buff, INTBUFSIZE, intr_callback, ++ tp, tp->intr_interval); + + return 0; + @@ -18593,9 +19159,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + struct tx_agg *agg = NULL; + unsigned long flags; + -+ if (list_empty(&tp->tx_free)) -+ return NULL; -+ + spin_lock_irqsave(&tp->tx_lock, flags); + if (!list_empty(&tp->tx_free)) { + struct list_head *cursor; @@ -18609,155 +19172,24 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + return agg; +} + -+static inline __be16 get_protocol(struct sk_buff *skb) -+{ -+ __be16 protocol; -+ -+ if (skb->protocol == htons(ETH_P_8021Q)) -+ protocol = vlan_eth_hdr(skb)->h_vlan_encapsulated_proto; -+ else -+ protocol = skb->protocol; -+ -+ return protocol; -+} -+ -+/* r8152_csum_workaround() -+ * The hw limites the value the transport offset. When the offset is out of the -+ * range, calculate the checksum by sw. -+ */ -+static void r8152_csum_workaround(struct r8152 *tp, struct sk_buff *skb, -+ struct sk_buff_head *list) -+{ -+ if (skb_shinfo(skb)->gso_size) { -+ netdev_features_t features = tp->netdev->features; -+ struct sk_buff_head seg_list; -+ struct sk_buff *segs, *nskb; -+ -+ features &= ~(NETIF_F_SG | NETIF_F_IPV6_CSUM | NETIF_F_TSO6); -+ segs = skb_gso_segment(skb, features); -+ if (IS_ERR(segs) || !segs) -+ goto drop; -+ -+ __skb_queue_head_init(&seg_list); -+ -+ do { -+ nskb = segs; -+ segs = segs->next; -+ nskb->next = NULL; -+ __skb_queue_tail(&seg_list, nskb); -+ } while (segs); -+ -+ skb_queue_splice(&seg_list, list); -+ dev_kfree_skb(skb); -+ } else if (skb->ip_summed == CHECKSUM_PARTIAL) { -+ if (skb_checksum_help(skb) < 0) -+ goto drop; -+ -+ __skb_queue_head(list, skb); -+ } else { -+ struct net_device_stats *stats; -+ -+drop: -+ stats = &tp->netdev->stats; -+ stats->tx_dropped++; -+ dev_kfree_skb(skb); -+ } -+} -+ -+/* msdn_giant_send_check() -+ * According to the document of microsoft, the TCP Pseudo Header excludes the -+ * packet length for IPv6 TCP large packets. -+ */ -+static int msdn_giant_send_check(struct sk_buff *skb) -+{ -+ const struct ipv6hdr *ipv6h; -+ struct tcphdr *th; -+ int ret; -+ -+ ret = skb_cow_head(skb, 0); -+ if (ret) -+ return ret; -+ -+ ipv6h = ipv6_hdr(skb); -+ th = tcp_hdr(skb); -+ -+ th->check = 0; -+ th->check = ~tcp_v6_check(0, &ipv6h->saddr, &ipv6h->daddr, 0); -+ -+ return ret; -+} -+ -+static inline void rtl_tx_vlan_tag(struct tx_desc *desc, struct sk_buff *skb) -+{ -+ if (vlan_tx_tag_present(skb)) { -+ u32 opts2; -+ -+ opts2 = TX_VLAN_TAG | swab16(vlan_tx_tag_get(skb)); -+ desc->opts2 |= cpu_to_le32(opts2); -+ } -+} -+ -+static inline void rtl_rx_vlan_tag(struct rx_desc *desc, struct sk_buff *skb) -+{ -+ u32 opts2 = le32_to_cpu(desc->opts2); -+ -+ if (opts2 & RX_VLAN_TAG) -+ __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), -+ swab16(opts2 & 0xffff)); -+} -+ -+static int r8152_tx_csum(struct r8152 *tp, struct tx_desc *desc, -+ struct sk_buff *skb, u32 len, u32 transport_offset) ++static void ++r8152_tx_csum(struct r8152 *tp, struct tx_desc *desc, struct sk_buff *skb) +{ -+ u32 mss = skb_shinfo(skb)->gso_size; -+ u32 opts1, opts2 = 0; -+ int ret = TX_CSUM_SUCCESS; -+ -+ WARN_ON_ONCE(len > TX_LEN_MAX); -+ -+ opts1 = len | TX_FS | TX_LS; -+ -+ if (mss) { -+ if (transport_offset > GTTCPHO_MAX) { -+ netif_warn(tp, tx_err, tp->netdev, -+ "Invalid transport offset 0x%x for TSO\n", -+ transport_offset); -+ ret = TX_CSUM_TSO; -+ goto unavailable; -+ } -+ -+ switch (get_protocol(skb)) { -+ case htons(ETH_P_IP): -+ opts1 |= GTSENDV4; -+ break; -+ -+ case htons(ETH_P_IPV6): -+ if (msdn_giant_send_check(skb)) { -+ ret = TX_CSUM_TSO; -+ goto unavailable; -+ } -+ opts1 |= GTSENDV6; -+ break; ++ memset(desc, 0, sizeof(*desc)); + -+ default: -+ WARN_ON_ONCE(1); -+ break; -+ } ++ desc->opts1 = cpu_to_le32((skb->len & TX_LEN_MASK) | TX_FS | TX_LS); + -+ opts1 |= transport_offset << GTTCPHO_SHIFT; -+ opts2 |= min(mss, MSS_MAX) << MSS_SHIFT; -+ } else if (skb->ip_summed == CHECKSUM_PARTIAL) { ++ if (skb->ip_summed == CHECKSUM_PARTIAL) { ++ __be16 protocol; + u8 ip_protocol; ++ u32 opts2 = 0; + -+ if (transport_offset > TCPHO_MAX) { -+ netif_warn(tp, tx_err, tp->netdev, -+ "Invalid transport offset 0x%x\n", -+ transport_offset); -+ ret = TX_CSUM_NONE; -+ goto unavailable; -+ } ++ if (skb->protocol == htons(ETH_P_8021Q)) ++ protocol = vlan_eth_hdr(skb)->h_vlan_encapsulated_proto; ++ else ++ protocol = skb->protocol; + -+ switch (get_protocol(skb)) { ++ switch (protocol) { + case htons(ETH_P_IP): + opts2 |= IPV4_CS; + ip_protocol = ip_hdr(skb)->protocol; @@ -18773,93 +19205,56 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + break; + } + -+ if (ip_protocol == IPPROTO_TCP) ++ if (ip_protocol == IPPROTO_TCP) { + opts2 |= TCP_CS; -+ else if (ip_protocol == IPPROTO_UDP) ++ opts2 |= (skb_transport_offset(skb) & 0x7fff) << 17; ++ } else if (ip_protocol == IPPROTO_UDP) { + opts2 |= UDP_CS; -+ else ++ } else { + WARN_ON_ONCE(1); ++ } + -+ opts2 |= transport_offset << TCPHO_SHIFT; ++ desc->opts2 = cpu_to_le32(opts2); + } -+ -+ desc->opts2 = cpu_to_le32(opts2); -+ desc->opts1 = cpu_to_le32(opts1); -+ -+unavailable: -+ return ret; +} + +static int r8152_tx_agg_fill(struct r8152 *tp, struct tx_agg *agg) +{ -+ struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; -+ int remain, ret; ++ int remain; + u8 *tx_data; + -+ __skb_queue_head_init(&skb_head); -+ spin_lock(&tx_queue->lock); -+ skb_queue_splice_init(tx_queue, &skb_head); -+ spin_unlock(&tx_queue->lock); -+ + tx_data = agg->head; -+ agg->skb_num = 0; -+ agg->skb_len = 0; -+ remain = agg_buf_sz; ++ agg->skb_num = agg->skb_len = 0; ++ remain = rx_buf_sz; + + while (remain >= ETH_ZLEN + sizeof(struct tx_desc)) { + struct tx_desc *tx_desc; + struct sk_buff *skb; + unsigned int len; -+ u32 offset; + -+ skb = __skb_dequeue(&skb_head); ++ skb = skb_dequeue(&tp->tx_queue); + if (!skb) + break; + -+ len = skb->len + sizeof(*tx_desc); -+ -+ if (len > remain) { -+ __skb_queue_head(&skb_head, skb); ++ remain -= sizeof(*tx_desc); ++ len = skb->len; ++ if (remain < len) { ++ skb_queue_head(&tp->tx_queue, skb); + break; + } + + tx_data = tx_agg_align(tx_data); + tx_desc = (struct tx_desc *)tx_data; -+ -+ offset = (u32)skb_transport_offset(skb); -+ -+ if (r8152_tx_csum(tp, tx_desc, skb, skb->len, offset)) { -+ r8152_csum_workaround(tp, skb, &skb_head); -+ continue; -+ } -+ -+ rtl_tx_vlan_tag(tx_desc, skb); -+ + tx_data += sizeof(*tx_desc); + -+ len = skb->len; -+ if (skb_copy_bits(skb, 0, tx_data, len) < 0) { -+ struct net_device_stats *stats = &tp->netdev->stats; -+ -+ stats->tx_dropped++; -+ dev_kfree_skb_any(skb); -+ tx_data -= sizeof(*tx_desc); -+ continue; -+ } -+ -+ tx_data += len; -+ agg->skb_len += len; ++ r8152_tx_csum(tp, tx_desc, skb); ++ memcpy(tx_data, skb->data, len); + agg->skb_num++; -+ ++ agg->skb_len += len; + dev_kfree_skb_any(skb); + -+ remain = agg_buf_sz - (int)(tx_agg_align(tx_data) - agg->head); -+ } -+ -+ if (!skb_queue_empty(&skb_head)) { -+ spin_lock(&tx_queue->lock); -+ skb_queue_splice(&skb_head, tx_queue); -+ spin_unlock(&tx_queue->lock); ++ tx_data += len; ++ remain = rx_buf_sz - (int)(tx_agg_align(tx_data) - agg->head); + } + + netif_tx_lock(tp->netdev); @@ -18870,67 +19265,20 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + + netif_tx_unlock(tp->netdev); + -+ ret = usb_autopm_get_interface_async(tp->intf); -+ if (ret < 0) -+ goto out_tx_fill; -+ + usb_fill_bulk_urb(agg->urb, tp->udev, usb_sndbulkpipe(tp->udev, 2), + agg->head, (int)(tx_data - (u8 *)agg->head), + (usb_complete_t)write_bulk_callback, agg); + -+ ret = usb_submit_urb(agg->urb, GFP_ATOMIC); -+ if (ret < 0) -+ usb_autopm_put_interface_async(tp->intf); -+ -+out_tx_fill: -+ return ret; -+} -+ -+static u8 r8152_rx_csum(struct r8152 *tp, struct rx_desc *rx_desc) -+{ -+ u8 checksum = CHECKSUM_NONE; -+ u32 opts2, opts3; -+ -+ if (tp->version == RTL_VER_01) -+ goto return_result; -+ -+ opts2 = le32_to_cpu(rx_desc->opts2); -+ opts3 = le32_to_cpu(rx_desc->opts3); -+ -+ if (opts2 & RD_IPV4_CS) { -+ if (opts3 & IPF) -+ checksum = CHECKSUM_NONE; -+ else if ((opts2 & RD_UDP_CS) && (opts3 & UDPF)) -+ checksum = CHECKSUM_NONE; -+ else if ((opts2 & RD_TCP_CS) && (opts3 & TCPF)) -+ checksum = CHECKSUM_NONE; -+ else -+ checksum = CHECKSUM_UNNECESSARY; -+ } else if (RD_IPV6_CS) { -+ if ((opts2 & RD_UDP_CS) && !(opts3 & UDPF)) -+ checksum = CHECKSUM_UNNECESSARY; -+ else if ((opts2 & RD_TCP_CS) && !(opts3 & TCPF)) -+ checksum = CHECKSUM_UNNECESSARY; -+ } -+ -+return_result: -+ return checksum; ++ return usb_submit_urb(agg->urb, GFP_ATOMIC); +} + +static void rx_bottom(struct r8152 *tp) +{ + unsigned long flags; -+ struct list_head *cursor, *next, rx_queue; -+ -+ if (list_empty(&tp->rx_done)) -+ return; ++ struct list_head *cursor, *next; + -+ INIT_LIST_HEAD(&rx_queue); + spin_lock_irqsave(&tp->rx_lock, flags); -+ list_splice_init(&tp->rx_done, &rx_queue); -+ spin_unlock_irqrestore(&tp->rx_lock, flags); -+ -+ list_for_each_safe(cursor, next, &rx_queue) { ++ list_for_each_safe(cursor, next, &tp->rx_done) { + struct rx_desc *rx_desc; + struct rx_agg *agg; + int len_used = 0; @@ -18939,6 +19287,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + int ret; + + list_del_init(cursor); ++ spin_unlock_irqrestore(&tp->rx_lock, flags); + + agg = list_entry(cursor, struct rx_agg, list); + urb = agg->urb; @@ -18951,7 +19300,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + + while (urb->actual_length > len_used) { + struct net_device *netdev = tp->netdev; -+ struct net_device_stats *stats = &netdev->stats; ++ struct net_device_stats *stats; + unsigned int pkt_len; + struct sk_buff *skb; + @@ -18963,25 +19312,23 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + if (urb->actual_length < len_used) + break; + ++ stats = rtl8152_get_stats(netdev); ++ + pkt_len -= CRC_SIZE; + rx_data += sizeof(struct rx_desc); + + skb = netdev_alloc_skb_ip_align(netdev, pkt_len); + if (!skb) { + stats->rx_dropped++; -+ goto find_next_rx; ++ break; + } -+ -+ skb->ip_summed = r8152_rx_csum(tp, rx_desc); + memcpy(skb->data, rx_data, pkt_len); + skb_put(skb, pkt_len); + skb->protocol = eth_type_trans(skb, netdev); -+ rtl_rx_vlan_tag(rx_desc, skb); -+ netif_receive_skb(skb); ++ netif_rx(skb); + stats->rx_packets++; + stats->rx_bytes += pkt_len; + -+find_next_rx: + rx_data = rx_agg_align(rx_data + pkt_len + CRC_SIZE); + rx_desc = (struct rx_desc *)rx_data; + len_used = (int)(rx_data - (u8 *)agg->head); @@ -18990,13 +19337,13 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + +submit: + ret = r8152_submit_rx(tp, agg, GFP_ATOMIC); ++ spin_lock_irqsave(&tp->rx_lock, flags); + if (ret && ret != -ENODEV) { -+ spin_lock_irqsave(&tp->rx_lock, flags); -+ list_add_tail(&agg->list, &tp->rx_done); -+ spin_unlock_irqrestore(&tp->rx_lock, flags); ++ list_add_tail(&agg->list, next); + tasklet_schedule(&tp->tl); + } + } ++ spin_unlock_irqrestore(&tp->rx_lock, flags); +} + +static void tx_bottom(struct r8152 *tp) @@ -19015,18 +19362,19 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + + res = r8152_tx_agg_fill(tp, agg); + if (res) { -+ struct net_device *netdev = tp->netdev; ++ struct net_device_stats *stats; ++ struct net_device *netdev; ++ unsigned long flags; ++ ++ netdev = tp->netdev; ++ stats = rtl8152_get_stats(netdev); + + if (res == -ENODEV) { + netif_device_detach(netdev); + } else { -+ struct net_device_stats *stats = &netdev->stats; -+ unsigned long flags; -+ + netif_warn(tp, tx_err, netdev, + "failed tx_urb %d\n", res); + stats->tx_dropped += agg->skb_num; -+ + spin_lock_irqsave(&tp->tx_lock, flags); + list_add_tail(&agg->list, &tp->tx_free); + spin_unlock_irqrestore(&tp->tx_lock, flags); @@ -19060,32 +19408,12 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +int r8152_submit_rx(struct r8152 *tp, struct rx_agg *agg, gfp_t mem_flags) +{ + usb_fill_bulk_urb(agg->urb, tp->udev, usb_rcvbulkpipe(tp->udev, 1), -+ agg->head, agg_buf_sz, -+ (usb_complete_t)read_bulk_callback, agg); ++ agg->head, rx_buf_sz, ++ (usb_complete_t)read_bulk_callback, agg); + + return usb_submit_urb(agg->urb, mem_flags); +} + -+static void rtl_drop_queued_tx(struct r8152 *tp) -+{ -+ struct net_device_stats *stats = &tp->netdev->stats; -+ struct sk_buff_head skb_head, *tx_queue = &tp->tx_queue; -+ struct sk_buff *skb; -+ -+ if (skb_queue_empty(tx_queue)) -+ return; -+ -+ __skb_queue_head_init(&skb_head); -+ spin_lock_bh(&tx_queue->lock); -+ skb_queue_splice_init(tx_queue, &skb_head); -+ spin_unlock_bh(&tx_queue->lock); -+ -+ while ((skb = __skb_dequeue(&skb_head))) { -+ dev_kfree_skb(skb); -+ stats->tx_dropped++; -+ } -+} -+ +static void rtl8152_tx_timeout(struct net_device *netdev) +{ + struct r8152 *tp = netdev_priv(netdev); @@ -19123,22 +19451,18 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + /* Unconditionally log net taps. */ + netif_notice(tp, link, netdev, "Promiscuous mode enabled\n"); + ocp_data |= RCR_AM | RCR_AAP; -+ mc_filter[1] = 0xffffffff; -+ mc_filter[0] = 0xffffffff; ++ mc_filter[1] = mc_filter[0] = 0xffffffff; + } else if ((netdev_mc_count(netdev) > multicast_filter_limit) || + (netdev->flags & IFF_ALLMULTI)) { + /* Too many to filter perfectly -- accept all multicasts. */ + ocp_data |= RCR_AM; -+ mc_filter[1] = 0xffffffff; -+ mc_filter[0] = 0xffffffff; ++ mc_filter[1] = mc_filter[0] = 0xffffffff; + } else { + struct netdev_hw_addr *ha; + -+ mc_filter[1] = 0; -+ mc_filter[0] = 0; ++ mc_filter[1] = mc_filter[0] = 0; + netdev_for_each_mc_addr(ha, netdev) { + int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26; -+ + mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31); + ocp_data |= RCR_AM; + } @@ -19153,7 +19477,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +} + +static netdev_tx_t rtl8152_start_xmit(struct sk_buff *skb, -+ struct net_device *netdev) ++ struct net_device *netdev) +{ + struct r8152 *tp = netdev_priv(netdev); + @@ -19161,17 +19485,12 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + + skb_queue_tail(&tp->tx_queue, skb); + -+ if (!list_empty(&tp->tx_free)) { -+ if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { -+ set_bit(SCHEDULE_TASKLET, &tp->flags); -+ schedule_delayed_work(&tp->schedule, 0); -+ } else { -+ usb_mark_last_busy(tp->udev); -+ tasklet_schedule(&tp->tl); -+ } -+ } else if (skb_queue_len(&tp->tx_queue) > tp->tx_qlen) { ++ if (list_empty(&tp->tx_free) && ++ skb_queue_len(&tp->tx_queue) > tp->tx_qlen) + netif_stop_queue(netdev); -+ } ++ ++ if (!list_empty(&tp->tx_free)) ++ tasklet_schedule(&tp->tl); + + return NETDEV_TX_OK; +} @@ -19196,7 +19515,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + for (i = 0; i < 1000; i++) { + if (!(ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR) & CR_RST)) + break; -+ usleep_range(100, 400); ++ udelay(100); + } +} + @@ -19204,8 +19523,8 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +{ + struct net_device *netdev = tp->netdev; + -+ tp->tx_qlen = agg_buf_sz / (netdev->mtu + VLAN_ETH_HLEN + VLAN_HLEN + -+ sizeof(struct tx_desc)); ++ tp->tx_qlen = rx_buf_sz / (netdev->mtu + VLAN_ETH_HLEN + VLAN_HLEN + ++ sizeof(struct tx_desc)); +} + +static inline u8 rtl8152_get_speed(struct r8152 *tp) @@ -19230,63 +19549,33 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + } +} + -+static void rxdy_gated_en(struct r8152 *tp, bool enable) ++static int rtl_enable(struct r8152 *tp) +{ + u32 ocp_data; ++ int i, ret; ++ ++ r8152b_reset_packet_filter(tp); ++ ++ ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR); ++ ocp_data |= CR_RE | CR_TE; ++ ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); + + ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); -+ if (enable) -+ ocp_data |= RXDY_GATED_EN; -+ else -+ ocp_data &= ~RXDY_GATED_EN; ++ ocp_data &= ~RXDY_GATED_EN; + ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data); -+} -+ -+static int rtl_start_rx(struct r8152 *tp) -+{ -+ int i, ret = 0; + + INIT_LIST_HEAD(&tp->rx_done); ++ ret = 0; + for (i = 0; i < RTL8152_MAX_RX; i++) { + INIT_LIST_HEAD(&tp->rx_info[i].list); -+ ret = r8152_submit_rx(tp, &tp->rx_info[i], GFP_KERNEL); -+ if (ret) -+ break; ++ ret |= r8152_submit_rx(tp, &tp->rx_info[i], GFP_KERNEL); + } + + return ret; +} + -+static int rtl_stop_rx(struct r8152 *tp) -+{ -+ int i; -+ -+ for (i = 0; i < RTL8152_MAX_RX; i++) -+ usb_kill_urb(tp->rx_info[i].urb); -+ -+ return 0; -+} -+ -+static int rtl_enable(struct r8152 *tp) -+{ -+ u32 ocp_data; -+ -+ r8152b_reset_packet_filter(tp); -+ -+ ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CR); -+ ocp_data |= CR_RE | CR_TE; -+ ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, ocp_data); -+ -+ rxdy_gated_en(tp, false); -+ -+ return rtl_start_rx(tp); -+} -+ +static int rtl8152_enable(struct r8152 *tp) +{ -+ if (test_bit(RTL8152_UNPLUG, &tp->flags)) -+ return -ENODEV; -+ + set_tx_qlen(tp); + rtl_set_eee_plus(tp); + @@ -19319,9 +19608,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + +static int rtl8153_enable(struct r8152 *tp) +{ -+ if (test_bit(RTL8152_UNPLUG, &tp->flags)) -+ return -ENODEV; -+ + set_tx_qlen(tp); + rtl_set_eee_plus(tp); + r8153_set_rx_agg(tp); @@ -19329,268 +19615,60 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + return rtl_enable(tp); +} + -+static void rtl_disable(struct r8152 *tp) ++static void rtl8152_disable(struct r8152 *tp) +{ ++ struct net_device_stats *stats = rtl8152_get_stats(tp->netdev); ++ struct sk_buff *skb; + u32 ocp_data; + int i; + -+ if (test_bit(RTL8152_UNPLUG, &tp->flags)) { -+ rtl_drop_queued_tx(tp); -+ return; -+ } -+ + ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); + ocp_data &= ~RCR_ACPT_ALL; + ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); + -+ rtl_drop_queued_tx(tp); ++ while ((skb = skb_dequeue(&tp->tx_queue))) { ++ dev_kfree_skb(skb); ++ stats->tx_dropped++; ++ } + + for (i = 0; i < RTL8152_MAX_TX; i++) + usb_kill_urb(tp->tx_info[i].urb); + -+ rxdy_gated_en(tp, true); ++ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); ++ ocp_data |= RXDY_GATED_EN; ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data); + + for (i = 0; i < 1000; i++) { + ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); + if ((ocp_data & FIFO_EMPTY) == FIFO_EMPTY) + break; -+ usleep_range(1000, 2000); ++ mdelay(1); + } + + for (i = 0; i < 1000; i++) { + if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0) & TCR0_TX_EMPTY) + break; -+ usleep_range(1000, 2000); ++ mdelay(1); + } + -+ rtl_stop_rx(tp); ++ for (i = 0; i < RTL8152_MAX_RX; i++) ++ usb_kill_urb(tp->rx_info[i].urb); + + rtl8152_nic_reset(tp); +} + -+static void r8152_power_cut_en(struct r8152 *tp, bool enable) -+{ -+ u32 ocp_data; -+ -+ ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL); -+ if (enable) -+ ocp_data |= POWER_CUT; -+ else -+ ocp_data &= ~POWER_CUT; -+ ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data); -+ -+ ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS); -+ ocp_data &= ~RESUME_INDICATE; -+ ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data); -+} -+ -+static void rtl_rx_vlan_en(struct r8152 *tp, bool enable) -+{ -+ u32 ocp_data; -+ -+ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); -+ if (enable) -+ ocp_data |= CPCR_RX_VLAN; -+ else -+ ocp_data &= ~CPCR_RX_VLAN; -+ ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); -+} -+ -+static int rtl8152_set_features(struct net_device *dev, -+ netdev_features_t features) -+{ -+ netdev_features_t changed = features ^ dev->features; -+ struct r8152 *tp = netdev_priv(dev); -+ int ret; -+ -+ ret = usb_autopm_get_interface(tp->intf); -+ if (ret < 0) -+ goto out; -+ -+ mutex_lock(&tp->control); -+ -+ if (changed & NETIF_F_HW_VLAN_CTAG_RX) { -+ if (features & NETIF_F_HW_VLAN_CTAG_RX) -+ rtl_rx_vlan_en(tp, true); -+ else -+ rtl_rx_vlan_en(tp, false); -+ } -+ -+ mutex_unlock(&tp->control); -+ -+ usb_autopm_put_interface(tp->intf); -+ -+out: -+ return ret; -+} -+ -+#define WAKE_ANY (WAKE_PHY | WAKE_MAGIC | WAKE_UCAST | WAKE_BCAST | WAKE_MCAST) -+ -+static u32 __rtl_get_wol(struct r8152 *tp) -+{ -+ u32 ocp_data; -+ u32 wolopts = 0; -+ -+ ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_CONFIG5); -+ if (!(ocp_data & LAN_WAKE_EN)) -+ return 0; -+ -+ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); -+ if (ocp_data & LINK_ON_WAKE_EN) -+ wolopts |= WAKE_PHY; -+ -+ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); -+ if (ocp_data & UWF_EN) -+ wolopts |= WAKE_UCAST; -+ if (ocp_data & BWF_EN) -+ wolopts |= WAKE_BCAST; -+ if (ocp_data & MWF_EN) -+ wolopts |= WAKE_MCAST; -+ -+ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); -+ if (ocp_data & MAGIC_EN) -+ wolopts |= WAKE_MAGIC; -+ -+ return wolopts; -+} -+ -+static void __rtl_set_wol(struct r8152 *tp, u32 wolopts) -+{ -+ u32 ocp_data; -+ -+ ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); -+ -+ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); -+ ocp_data &= ~LINK_ON_WAKE_EN; -+ if (wolopts & WAKE_PHY) -+ ocp_data |= LINK_ON_WAKE_EN; -+ ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); -+ -+ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG5); -+ ocp_data &= ~(UWF_EN | BWF_EN | MWF_EN | LAN_WAKE_EN); -+ if (wolopts & WAKE_UCAST) -+ ocp_data |= UWF_EN; -+ if (wolopts & WAKE_BCAST) -+ ocp_data |= BWF_EN; -+ if (wolopts & WAKE_MCAST) -+ ocp_data |= MWF_EN; -+ if (wolopts & WAKE_ANY) -+ ocp_data |= LAN_WAKE_EN; -+ ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG5, ocp_data); -+ -+ ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); -+ -+ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); -+ ocp_data &= ~MAGIC_EN; -+ if (wolopts & WAKE_MAGIC) -+ ocp_data |= MAGIC_EN; -+ ocp_write_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL, ocp_data); -+ -+ if (wolopts & WAKE_ANY) -+ device_set_wakeup_enable(&tp->udev->dev, true); -+ else -+ device_set_wakeup_enable(&tp->udev->dev, false); -+} -+ -+static void rtl_runtime_suspend_enable(struct r8152 *tp, bool enable) -+{ -+ if (enable) { -+ u32 ocp_data; -+ -+ __rtl_set_wol(tp, WAKE_ANY); -+ -+ ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_CONFIG); -+ -+ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CONFIG34); -+ ocp_data |= LINK_OFF_WAKE_EN; -+ ocp_write_word(tp, MCU_TYPE_PLA, PLA_CONFIG34, ocp_data); -+ -+ ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); -+ } else { -+ __rtl_set_wol(tp, tp->saved_wolopts); -+ } -+} -+ -+static void rtl_phy_reset(struct r8152 *tp) -+{ -+ u16 data; -+ int i; -+ -+ clear_bit(PHY_RESET, &tp->flags); -+ -+ data = r8152_mdio_read(tp, MII_BMCR); -+ -+ /* don't reset again before the previous one complete */ -+ if (data & BMCR_RESET) -+ return; -+ -+ data |= BMCR_RESET; -+ r8152_mdio_write(tp, MII_BMCR, data); -+ -+ for (i = 0; i < 50; i++) { -+ msleep(20); -+ if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0) -+ break; -+ } -+} -+ -+static void r8153_teredo_off(struct r8152 *tp) -+{ -+ u32 ocp_data; -+ -+ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); -+ ocp_data &= ~(TEREDO_SEL | TEREDO_RS_EVENT_MASK | OOB_TEREDO_EN); -+ ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); -+ -+ ocp_write_word(tp, MCU_TYPE_PLA, PLA_WDT6_CTRL, WDT6_SET_MODE); -+ ocp_write_word(tp, MCU_TYPE_PLA, PLA_REALWOW_TIMER, 0); -+ ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TEREDO_TIMER, 0); -+} -+ -+static void r8152b_disable_aldps(struct r8152 *tp) -+{ -+ ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPDNPS | LINKENA | DIS_SDSAVE); -+ msleep(20); -+} -+ -+static inline void r8152b_enable_aldps(struct r8152 *tp) -+{ -+ ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPWRSAVE | ENPDNPS | -+ LINKENA | DIS_SDSAVE); -+} -+ -+static void rtl8152_disable(struct r8152 *tp) -+{ -+ r8152b_disable_aldps(tp); -+ rtl_disable(tp); -+ r8152b_enable_aldps(tp); -+} -+ -+static void r8152b_hw_phy_cfg(struct r8152 *tp) -+{ -+ u16 data; -+ -+ data = r8152_mdio_read(tp, MII_BMCR); -+ if (data & BMCR_PDOWN) { -+ data &= ~BMCR_PDOWN; -+ r8152_mdio_write(tp, MII_BMCR, data); -+ } -+ -+ set_bit(PHY_RESET, &tp->flags); -+} -+ +static void r8152b_exit_oob(struct r8152 *tp) +{ -+ u32 ocp_data; -+ int i; ++ u32 ocp_data; ++ int i; + + ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); + ocp_data &= ~RCR_ACPT_ALL; + ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); + -+ rxdy_gated_en(tp, true); -+ r8153_teredo_off(tp); -+ r8152b_hw_phy_cfg(tp); ++ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); ++ ocp_data |= RXDY_GATED_EN; ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data); + + ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CRWECR, CRWECR_NORAML); + ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CR, 0x00); @@ -19607,7 +19685,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); + if (ocp_data & LINK_LIST_READY) + break; -+ usleep_range(1000, 2000); ++ mdelay(1); + } + + ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); @@ -19618,7 +19696,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); + if (ocp_data & LINK_LIST_READY) + break; -+ usleep_range(1000, 2000); ++ mdelay(1); + } + + rtl8152_nic_reset(tp); @@ -19626,8 +19704,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + /* rx share fifo credit full threshold */ + ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL0, RXFIFO_THR1_NORMAL); + -+ if (tp->udev->speed == USB_SPEED_FULL || -+ tp->udev->speed == USB_SPEED_LOW) { ++ ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_DEV_STAT); ++ ocp_data &= STAT_SPEED_MASK; ++ if (ocp_data == STAT_SPEED_FULL) { + /* rx share fifo credit near full threshold */ + ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, + RXFIFO_THR2_FULL); @@ -19649,7 +19728,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_write_dword(tp, MCU_TYPE_USB, USB_TX_DMA, + TEST_MODE_DISABLE | TX_SIZE_ADJUST1); + -+ rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); ++ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); ++ ocp_data &= ~CPCR_RX_VLAN; ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); + + ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); + @@ -19671,13 +19752,13 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL1, RXFIFO_THR2_OOB); + ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RXFIFO_CTRL2, RXFIFO_THR3_OOB); + -+ rtl_disable(tp); ++ rtl8152_disable(tp); + + for (i = 0; i < 1000; i++) { + ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); + if (ocp_data & LINK_LIST_READY) + break; -+ usleep_range(1000, 2000); ++ mdelay(1); + } + + ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); @@ -19688,12 +19769,18 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); + if (ocp_data & LINK_LIST_READY) + break; -+ usleep_range(1000, 2000); ++ mdelay(1); + } + + ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); + -+ rtl_rx_vlan_en(tp, true); ++ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); ++ ocp_data |= MAGIC_EN; ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL, ocp_data); ++ ++ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); ++ ocp_data |= CPCR_RX_VLAN; ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); + + ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PAL_BDC_CR); + ocp_data |= ALDPS_PROXY_MODE; @@ -19703,24 +19790,36 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_data |= NOW_IS_OOB | DIS_MCU_CLROOB; + ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); + -+ rxdy_gated_en(tp, false); ++ ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG5, LAN_WAKE_EN); ++ ++ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); ++ ocp_data &= ~RXDY_GATED_EN; ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data); + + ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); + ocp_data |= RCR_APM | RCR_AM | RCR_AB; + ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, ocp_data); +} + ++static void r8152b_disable_aldps(struct r8152 *tp) ++{ ++ ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPDNPS | LINKENA | DIS_SDSAVE); ++ msleep(20); ++} ++ ++static inline void r8152b_enable_aldps(struct r8152 *tp) ++{ ++ ocp_reg_write(tp, OCP_ALDPS_CONFIG, ENPWRSAVE | ENPDNPS | ++ LINKENA | DIS_SDSAVE); ++} ++ +static void r8153_hw_phy_cfg(struct r8152 *tp) +{ + u32 ocp_data; + u16 data; + + ocp_reg_write(tp, OCP_ADC_CFG, CKADSEL_L | ADC_EN | EN_EMI_L); -+ data = r8152_mdio_read(tp, MII_BMCR); -+ if (data & BMCR_PDOWN) { -+ data &= ~BMCR_PDOWN; -+ r8152_mdio_write(tp, MII_BMCR, data); -+ } ++ r8152_mdio_write(tp, MII_BMCR, BMCR_ANENABLE); + + if (tp->version == RTL_VER_03) { + data = ocp_reg_read(tp, OCP_EEE_CFG); @@ -19756,11 +19855,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + data = sram_read(tp, SRAM_10M_AMP2); + data |= AMP_DN; + sram_write(tp, SRAM_10M_AMP2, data); -+ -+ set_bit(PHY_RESET, &tp->flags); +} + -+static void r8153_u1u2en(struct r8152 *tp, bool enable) ++static void r8153_u1u2en(struct r8152 *tp, int enable) +{ + u8 u1u2[8]; + @@ -19772,7 +19869,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + usb_ocp_write(tp, USB_TOLERANCE, BYTE_EN_SIX_BYTES, sizeof(u1u2), u1u2); +} + -+static void r8153_u2p3en(struct r8152 *tp, bool enable) ++static void r8153_u2p3en(struct r8152 *tp, int enable) +{ + u32 ocp_data; + @@ -19784,7 +19881,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_write_word(tp, MCU_TYPE_USB, USB_U2P3_CTRL, ocp_data); +} + -+static void r8153_power_cut_en(struct r8152 *tp, bool enable) ++static void r8153_power_cut_en(struct r8152 *tp, int enable) +{ + u32 ocp_data; + @@ -19800,12 +19897,28 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); +} + ++static void r8153_teredo_off(struct r8152 *tp) ++{ ++ u32 ocp_data; ++ ++ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); ++ ocp_data &= ~(TEREDO_SEL | TEREDO_RS_EVENT_MASK | OOB_TEREDO_EN); ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); ++ ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_WDT6_CTRL, WDT6_SET_MODE); ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_REALWOW_TIMER, 0); ++ ocp_write_dword(tp, MCU_TYPE_PLA, PLA_TEREDO_TIMER, 0); ++} ++ +static void r8153_first_init(struct r8152 *tp) +{ + u32 ocp_data; + int i; + -+ rxdy_gated_en(tp, true); ++ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); ++ ocp_data |= RXDY_GATED_EN; ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data); ++ + r8153_teredo_off(tp); + + ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); @@ -19828,7 +19941,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); + if (ocp_data & LINK_LIST_READY) + break; -+ usleep_range(1000, 2000); ++ mdelay(1); + } + + ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); @@ -19839,13 +19952,14 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); + if (ocp_data & LINK_LIST_READY) + break; -+ usleep_range(1000, 2000); ++ mdelay(1); + } + -+ rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX); ++ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); ++ ocp_data &= ~CPCR_RX_VLAN; ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); + -+ ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8153_RMS); -+ ocp_write_byte(tp, MCU_TYPE_PLA, PLA_MTPS, MTPS_JUMBO); ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); + + ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0); + ocp_data |= TCR0_AUTO_FIFO; @@ -19875,13 +19989,13 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_data &= ~NOW_IS_OOB; + ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); + -+ rtl_disable(tp); ++ rtl8152_disable(tp); + + for (i = 0; i < 1000; i++) { + ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); + if (ocp_data & LINK_LIST_READY) + break; -+ usleep_range(1000, 2000); ++ mdelay(1); + } + + ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_SFF_STS_7); @@ -19892,16 +20006,22 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL); + if (ocp_data & LINK_LIST_READY) + break; -+ usleep_range(1000, 2000); ++ mdelay(1); + } + -+ ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8153_RMS); ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, RTL8152_RMS); ++ ++ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL); ++ ocp_data |= MAGIC_EN; ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_CFG_WOL, ocp_data); + + ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG); + ocp_data &= ~TEREDO_WAKE_MASK; + ocp_write_word(tp, MCU_TYPE_PLA, PLA_TEREDO_CFG, ocp_data); + -+ rtl_rx_vlan_en(tp, true); ++ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_CPCR); ++ ocp_data |= CPCR_RX_VLAN; ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_CPCR, ocp_data); + + ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PAL_BDC_CR); + ocp_data |= ALDPS_PROXY_MODE; @@ -19911,7 +20031,11 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_data |= NOW_IS_OOB | DIS_MCU_CLROOB; + ocp_write_byte(tp, MCU_TYPE_PLA, PLA_OOB_CTRL, ocp_data); + -+ rxdy_gated_en(tp, false); ++ ocp_write_byte(tp, MCU_TYPE_PLA, PLA_CONFIG5, LAN_WAKE_EN); ++ ++ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MISC_1); ++ ocp_data &= ~RXDY_GATED_EN; ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_MISC_1, ocp_data); + + ocp_data = ocp_read_dword(tp, MCU_TYPE_PLA, PLA_RCR); + ocp_data |= RCR_APM | RCR_AM | RCR_AB; @@ -19937,13 +20061,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_reg_write(tp, OCP_POWER_CFG, data); +} + -+static void rtl8153_disable(struct r8152 *tp) -+{ -+ r8153_disable_aldps(tp); -+ rtl_disable(tp); -+ r8153_enable_aldps(tp); -+} -+ +static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u16 speed, u8 duplex) +{ + u16 bmcr, anar, gbcr; @@ -20009,73 +20126,34 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + bmcr = BMCR_ANENABLE | BMCR_ANRESTART; + } + -+ if (test_bit(PHY_RESET, &tp->flags)) -+ bmcr |= BMCR_RESET; -+ + if (tp->mii.supports_gmii) + r8152_mdio_write(tp, MII_CTRL1000, gbcr); + + r8152_mdio_write(tp, MII_ADVERTISE, anar); + r8152_mdio_write(tp, MII_BMCR, bmcr); + -+ if (test_bit(PHY_RESET, &tp->flags)) { -+ int i; -+ -+ clear_bit(PHY_RESET, &tp->flags); -+ for (i = 0; i < 50; i++) { -+ msleep(20); -+ if ((r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET) == 0) -+ break; -+ } -+ } -+ +out: + + return ret; +} + -+static void rtl8152_up(struct r8152 *tp) -+{ -+ if (test_bit(RTL8152_UNPLUG, &tp->flags)) -+ return; -+ -+ r8152b_disable_aldps(tp); -+ r8152b_exit_oob(tp); -+ r8152b_enable_aldps(tp); -+} -+ +static void rtl8152_down(struct r8152 *tp) +{ -+ if (test_bit(RTL8152_UNPLUG, &tp->flags)) { -+ rtl_drop_queued_tx(tp); -+ return; -+ } ++ u32 ocp_data; ++ ++ ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL); ++ ocp_data &= ~POWER_CUT; ++ ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data); + -+ r8152_power_cut_en(tp, false); + r8152b_disable_aldps(tp); + r8152b_enter_oob(tp); + r8152b_enable_aldps(tp); +} + -+static void rtl8153_up(struct r8152 *tp) -+{ -+ if (test_bit(RTL8152_UNPLUG, &tp->flags)) -+ return; -+ -+ r8153_disable_aldps(tp); -+ r8153_first_init(tp); -+ r8153_enable_aldps(tp); -+} -+ +static void rtl8153_down(struct r8152 *tp) +{ -+ if (test_bit(RTL8152_UNPLUG, &tp->flags)) { -+ rtl_drop_queued_tx(tp); -+ return; -+ } -+ -+ r8153_u1u2en(tp, false); -+ r8153_power_cut_en(tp, false); ++ r8153_u1u2en(tp, 0); ++ r8153_power_cut_en(tp, 0); + r8153_disable_aldps(tp); + r8153_enter_oob(tp); + r8153_enable_aldps(tp); @@ -20110,39 +20188,20 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +{ + struct r8152 *tp = container_of(work, struct r8152, schedule.work); + -+ if (usb_autopm_get_interface(tp->intf) < 0) -+ return; -+ + if (!test_bit(WORK_ENABLE, &tp->flags)) + goto out1; + + if (test_bit(RTL8152_UNPLUG, &tp->flags)) + goto out1; + -+ if (!mutex_trylock(&tp->control)) { -+ schedule_delayed_work(&tp->schedule, 0); -+ goto out1; -+ } -+ + if (test_bit(RTL8152_LINK_CHG, &tp->flags)) + set_carrier(tp); + + if (test_bit(RTL8152_SET_RX_MODE, &tp->flags)) + _rtl8152_set_rx_mode(tp->netdev); + -+ if (test_bit(SCHEDULE_TASKLET, &tp->flags) && -+ (tp->speed & LINK_STATUS)) { -+ clear_bit(SCHEDULE_TASKLET, &tp->flags); -+ tasklet_schedule(&tp->tl); -+ } -+ -+ if (test_bit(PHY_RESET, &tp->flags)) -+ rtl_phy_reset(tp); -+ -+ mutex_unlock(&tp->control); -+ +out1: -+ usb_autopm_put_interface(tp->intf); ++ return; +} + +static int rtl8152_open(struct net_device *netdev) @@ -20150,34 +20209,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + struct r8152 *tp = netdev_priv(netdev); + int res = 0; + -+ res = alloc_all_mem(tp); -+ if (res) -+ goto out; -+ -+ /* set speed to 0 to avoid autoresume try to submit rx */ -+ tp->speed = 0; -+ -+ res = usb_autopm_get_interface(tp->intf); -+ if (res < 0) { -+ free_all_mem(tp); -+ goto out; -+ } -+ -+ mutex_lock(&tp->control); -+ -+ /* The WORK_ENABLE may be set when autoresume occurs */ -+ if (test_bit(WORK_ENABLE, &tp->flags)) { -+ clear_bit(WORK_ENABLE, &tp->flags); -+ usb_kill_urb(tp->intr_urb); -+ cancel_delayed_work_sync(&tp->schedule); -+ -+ /* disable the tx/rx, if the workqueue has enabled them. */ -+ if (tp->speed & LINK_STATUS) -+ tp->rtl_ops.disable(tp); -+ } -+ -+ tp->rtl_ops.up(tp); -+ + rtl8152_set_speed(tp, AUTONEG_ENABLE, + tp->mii.supports_gmii ? SPEED_1000 : SPEED_100, + DUPLEX_FULL); @@ -20185,21 +20216,15 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + netif_carrier_off(netdev); + netif_start_queue(netdev); + set_bit(WORK_ENABLE, &tp->flags); -+ + res = usb_submit_urb(tp->intr_urb, GFP_KERNEL); + if (res) { + if (res == -ENODEV) + netif_device_detach(tp->netdev); + netif_warn(tp, ifup, netdev, "intr_urb submit failed: %d\n", + res); -+ free_all_mem(tp); + } + -+ mutex_unlock(&tp->control); -+ -+ usb_autopm_put_interface(tp->intf); + -+out: + return res; +} + @@ -20212,119 +20237,72 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + usb_kill_urb(tp->intr_urb); + cancel_delayed_work_sync(&tp->schedule); + netif_stop_queue(netdev); -+ -+ res = usb_autopm_get_interface(tp->intf); -+ if (res < 0) { -+ rtl_drop_queued_tx(tp); -+ } else { -+ mutex_lock(&tp->control); -+ -+ /* The autosuspend may have been enabled and wouldn't -+ * be disable when autoresume occurs, because the -+ * netif_running() would be false. -+ */ -+ rtl_runtime_suspend_enable(tp, false); -+ -+ tasklet_disable(&tp->tl); -+ tp->rtl_ops.down(tp); -+ tasklet_enable(&tp->tl); -+ -+ mutex_unlock(&tp->control); -+ -+ usb_autopm_put_interface(tp->intf); -+ } -+ -+ free_all_mem(tp); ++ tasklet_disable(&tp->tl); ++ tp->rtl_ops.disable(tp); ++ tasklet_enable(&tp->tl); + + return res; +} + -+static inline void r8152_mmd_indirect(struct r8152 *tp, u16 dev, u16 reg) -+{ -+ ocp_reg_write(tp, OCP_EEE_AR, FUN_ADDR | dev); -+ ocp_reg_write(tp, OCP_EEE_DATA, reg); -+ ocp_reg_write(tp, OCP_EEE_AR, FUN_DATA | dev); -+} -+ -+static u16 r8152_mmd_read(struct r8152 *tp, u16 dev, u16 reg) ++static void rtl_clear_bp(struct r8152 *tp) +{ -+ u16 data; -+ -+ r8152_mmd_indirect(tp, dev, reg); -+ data = ocp_reg_read(tp, OCP_EEE_DATA); -+ ocp_reg_write(tp, OCP_EEE_AR, 0x0000); -+ -+ return data; ++ ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_0, 0); ++ ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_2, 0); ++ ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_4, 0); ++ ocp_write_dword(tp, MCU_TYPE_PLA, PLA_BP_6, 0); ++ ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_0, 0); ++ ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_2, 0); ++ ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_4, 0); ++ ocp_write_dword(tp, MCU_TYPE_USB, USB_BP_6, 0); ++ mdelay(3); ++ ocp_write_word(tp, MCU_TYPE_PLA, PLA_BP_BA, 0); ++ ocp_write_word(tp, MCU_TYPE_USB, USB_BP_BA, 0); +} + -+static void r8152_mmd_write(struct r8152 *tp, u16 dev, u16 reg, u16 data) ++static void r8153_clear_bp(struct r8152 *tp) +{ -+ r8152_mmd_indirect(tp, dev, reg); -+ ocp_reg_write(tp, OCP_EEE_DATA, data); -+ ocp_reg_write(tp, OCP_EEE_AR, 0x0000); ++ ocp_write_byte(tp, MCU_TYPE_PLA, PLA_BP_EN, 0); ++ ocp_write_byte(tp, MCU_TYPE_USB, USB_BP_EN, 0); ++ rtl_clear_bp(tp); +} + -+static void r8152_eee_en(struct r8152 *tp, bool enable) ++static void r8152b_enable_eee(struct r8152 *tp) +{ -+ u16 config1, config2, config3; + u32 ocp_data; + + ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); -+ config1 = ocp_reg_read(tp, OCP_EEE_CONFIG1) & ~sd_rise_time_mask; -+ config2 = ocp_reg_read(tp, OCP_EEE_CONFIG2); -+ config3 = ocp_reg_read(tp, OCP_EEE_CONFIG3) & ~fast_snr_mask; -+ -+ if (enable) { -+ ocp_data |= EEE_RX_EN | EEE_TX_EN; -+ config1 |= EEE_10_CAP | EEE_NWAY_EN | TX_QUIET_EN | RX_QUIET_EN; -+ config1 |= sd_rise_time(1); -+ config2 |= RG_DACQUIET_EN | RG_LDVQUIET_EN; -+ config3 |= fast_snr(42); -+ } else { -+ ocp_data &= ~(EEE_RX_EN | EEE_TX_EN); -+ config1 &= ~(EEE_10_CAP | EEE_NWAY_EN | TX_QUIET_EN | -+ RX_QUIET_EN); -+ config1 |= sd_rise_time(7); -+ config2 &= ~(RG_DACQUIET_EN | RG_LDVQUIET_EN); -+ config3 |= fast_snr(511); -+ } -+ ++ ocp_data |= EEE_RX_EN | EEE_TX_EN; + ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); -+ ocp_reg_write(tp, OCP_EEE_CONFIG1, config1); -+ ocp_reg_write(tp, OCP_EEE_CONFIG2, config2); -+ ocp_reg_write(tp, OCP_EEE_CONFIG3, config3); -+} -+ -+static void r8152b_enable_eee(struct r8152 *tp) -+{ -+ r8152_eee_en(tp, true); -+ r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, MDIO_EEE_100TX); ++ ocp_reg_write(tp, OCP_EEE_CONFIG1, RG_TXLPI_MSK_HFDUP | RG_MATCLR_EN | ++ EEE_10_CAP | EEE_NWAY_EN | ++ TX_QUIET_EN | RX_QUIET_EN | ++ SDRISETIME | RG_RXLPI_MSK_HFDUP | ++ SDFALLTIME); ++ ocp_reg_write(tp, OCP_EEE_CONFIG2, RG_LPIHYS_NUM | RG_DACQUIET_EN | ++ RG_LDVQUIET_EN | RG_CKRSEL | ++ RG_EEEPRG_EN); ++ ocp_reg_write(tp, OCP_EEE_CONFIG3, FST_SNR_EYE_R | RG_LFS_SEL | MSK_PH); ++ ocp_reg_write(tp, OCP_EEE_AR, FUN_ADDR | DEVICE_ADDR); ++ ocp_reg_write(tp, OCP_EEE_DATA, EEE_ADDR); ++ ocp_reg_write(tp, OCP_EEE_AR, FUN_DATA | DEVICE_ADDR); ++ ocp_reg_write(tp, OCP_EEE_DATA, EEE_DATA); ++ ocp_reg_write(tp, OCP_EEE_AR, 0x0000); +} + -+static void r8153_eee_en(struct r8152 *tp, bool enable) ++static void r8153_enable_eee(struct r8152 *tp) +{ + u32 ocp_data; -+ u16 config; ++ u16 data; + + ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); -+ config = ocp_reg_read(tp, OCP_EEE_CFG); -+ -+ if (enable) { -+ ocp_data |= EEE_RX_EN | EEE_TX_EN; -+ config |= EEE10_EN; -+ } else { -+ ocp_data &= ~(EEE_RX_EN | EEE_TX_EN); -+ config &= ~EEE10_EN; -+ } -+ ++ ocp_data |= EEE_RX_EN | EEE_TX_EN; + ocp_write_word(tp, MCU_TYPE_PLA, PLA_EEE_CR, ocp_data); -+ ocp_reg_write(tp, OCP_EEE_CFG, config); -+} -+ -+static void r8153_enable_eee(struct r8152 *tp) -+{ -+ r8153_eee_en(tp, true); -+ ocp_reg_write(tp, OCP_EEE_ADV, MDIO_EEE_1000T | MDIO_EEE_100TX); ++ data = ocp_reg_read(tp, OCP_EEE_CFG); ++ data |= EEE10_EN; ++ ocp_reg_write(tp, OCP_EEE_CFG, data); ++ data = ocp_reg_read(tp, OCP_EEE_CFG2); ++ data |= MY1000_EEE | MY100_EEE; ++ ocp_reg_write(tp, OCP_EEE_CFG2, data); +} + +static void r8152b_enable_fc(struct r8152 *tp) @@ -20336,23 +20314,18 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + r8152_mdio_write(tp, MII_ADVERTISE, anar); +} + -+static void rtl_tally_reset(struct r8152 *tp) ++static void r8152b_hw_phy_cfg(struct r8152 *tp) +{ -+ u32 ocp_data; -+ -+ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY); -+ ocp_data |= TALLY_RESET; -+ ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data); ++ r8152_mdio_write(tp, MII_BMCR, BMCR_ANENABLE); ++ r8152b_disable_aldps(tp); +} + +static void r8152b_init(struct r8152 *tp) +{ + u32 ocp_data; ++ int i; + -+ if (test_bit(RTL8152_UNPLUG, &tp->flags)) -+ return; -+ -+ r8152b_disable_aldps(tp); ++ rtl_clear_bp(tp); + + if (tp->version == RTL_VER_01) { + ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); @@ -20360,7 +20333,17 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); + } + -+ r8152_power_cut_en(tp, false); ++ r8152b_hw_phy_cfg(tp); ++ ++ ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL); ++ ocp_data &= ~POWER_CUT; ++ ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data); ++ ++ ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS); ++ ocp_data &= ~RESUME_INDICATE; ++ ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data); ++ ++ r8152b_exit_oob(tp); + + ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR); + ocp_data |= TX_10M_IDLE_EN | PFM_PWM_SWITCH; @@ -20376,7 +20359,14 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + r8152b_enable_eee(tp); + r8152b_enable_aldps(tp); + r8152b_enable_fc(tp); -+ rtl_tally_reset(tp); ++ ++ r8152_mdio_write(tp, MII_BMCR, BMCR_RESET | BMCR_ANENABLE | ++ BMCR_ANRESTART); ++ for (i = 0; i < 100; i++) { ++ udelay(100); ++ if (!(r8152_mdio_read(tp, MII_BMCR) & BMCR_RESET)) ++ break; ++ } + + /* enable rx aggregation */ + ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL); @@ -20389,11 +20379,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + u32 ocp_data; + int i; + -+ if (test_bit(RTL8152_UNPLUG, &tp->flags)) -+ return; -+ -+ r8153_disable_aldps(tp); -+ r8153_u1u2en(tp, false); ++ r8153_u1u2en(tp, 0); + + for (i = 0; i < 500; i++) { + if (ocp_read_word(tp, MCU_TYPE_PLA, PLA_BOOT_CTRL) & @@ -20409,12 +20395,14 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + msleep(20); + } + -+ r8153_u2p3en(tp, false); ++ r8153_u2p3en(tp, 0); + + ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL); + ocp_data &= ~TIMER11_EN; + ocp_write_word(tp, MCU_TYPE_USB, USB_WDT11_CTRL, ocp_data); + ++ r8153_clear_bp(tp); ++ + ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE); + ocp_data &= ~LED_MODE_MASK; + ocp_write_word(tp, MCU_TYPE_PLA, PLA_LED_FEATURE, ocp_data); @@ -20432,8 +20420,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ocp_data |= SEN_VAL_NORMAL | SEL_RXIDLE; + ocp_write_word(tp, MCU_TYPE_USB, USB_AFE_CTRL2, ocp_data); + -+ r8153_power_cut_en(tp, false); -+ r8153_u1u2en(tp, true); ++ r8153_power_cut_en(tp, 0); ++ r8153_u1u2en(tp, 1); ++ ++ r8153_first_init(tp); + + ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL, ALDPS_SPDWN_RATIO); + ocp_write_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL2, EEE_SPDWN_RATIO); @@ -20448,145 +20438,56 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + r8153_enable_eee(tp); + r8153_enable_aldps(tp); + r8152b_enable_fc(tp); -+ rtl_tally_reset(tp); ++ ++ r8152_mdio_write(tp, MII_BMCR, BMCR_RESET | BMCR_ANENABLE | ++ BMCR_ANRESTART); +} + +static int rtl8152_suspend(struct usb_interface *intf, pm_message_t message) +{ + struct r8152 *tp = usb_get_intfdata(intf); -+ struct net_device *netdev = tp->netdev; -+ int ret = 0; -+ -+ mutex_lock(&tp->control); -+ -+ if (PMSG_IS_AUTO(message)) { -+ if (netif_running(netdev) && work_busy(&tp->schedule.work)) { -+ ret = -EBUSY; -+ goto out1; -+ } + -+ set_bit(SELECTIVE_SUSPEND, &tp->flags); -+ } else { -+ netif_device_detach(netdev); -+ } ++ netif_device_detach(tp->netdev); + -+ if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) { ++ if (netif_running(tp->netdev)) { + clear_bit(WORK_ENABLE, &tp->flags); + usb_kill_urb(tp->intr_urb); ++ cancel_delayed_work_sync(&tp->schedule); + tasklet_disable(&tp->tl); -+ if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { -+ rtl_stop_rx(tp); -+ rtl_runtime_suspend_enable(tp, true); -+ } else { -+ cancel_delayed_work_sync(&tp->schedule); -+ tp->rtl_ops.down(tp); -+ } -+ tasklet_enable(&tp->tl); + } -+out1: -+ mutex_unlock(&tp->control); + -+ return ret; ++ tp->rtl_ops.down(tp); ++ ++ return 0; +} + +static int rtl8152_resume(struct usb_interface *intf) +{ + struct r8152 *tp = usb_get_intfdata(intf); + -+ mutex_lock(&tp->control); -+ -+ if (!test_bit(SELECTIVE_SUSPEND, &tp->flags)) { -+ tp->rtl_ops.init(tp); -+ netif_device_attach(tp->netdev); -+ } -+ ++ tp->rtl_ops.init(tp); ++ netif_device_attach(tp->netdev); + if (netif_running(tp->netdev)) { -+ if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { -+ rtl_runtime_suspend_enable(tp, false); -+ clear_bit(SELECTIVE_SUSPEND, &tp->flags); -+ set_bit(WORK_ENABLE, &tp->flags); -+ if (tp->speed & LINK_STATUS) -+ rtl_start_rx(tp); -+ } else { -+ tp->rtl_ops.up(tp); -+ rtl8152_set_speed(tp, AUTONEG_ENABLE, -+ tp->mii.supports_gmii ? -+ SPEED_1000 : SPEED_100, -+ DUPLEX_FULL); -+ tp->speed = 0; -+ netif_carrier_off(tp->netdev); -+ set_bit(WORK_ENABLE, &tp->flags); -+ } ++ rtl8152_set_speed(tp, AUTONEG_ENABLE, ++ tp->mii.supports_gmii ? SPEED_1000 : SPEED_100, ++ DUPLEX_FULL); ++ tp->speed = 0; ++ netif_carrier_off(tp->netdev); ++ set_bit(WORK_ENABLE, &tp->flags); + usb_submit_urb(tp->intr_urb, GFP_KERNEL); -+ } else if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) { -+ clear_bit(SELECTIVE_SUSPEND, &tp->flags); ++ tasklet_enable(&tp->tl); + } + -+ mutex_unlock(&tp->control); -+ + return 0; +} + -+static void rtl8152_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) -+{ -+ struct r8152 *tp = netdev_priv(dev); -+ -+ if (usb_autopm_get_interface(tp->intf) < 0) -+ return; -+ -+ mutex_lock(&tp->control); -+ -+ wol->supported = WAKE_ANY; -+ wol->wolopts = __rtl_get_wol(tp); -+ -+ mutex_unlock(&tp->control); -+ -+ usb_autopm_put_interface(tp->intf); -+} -+ -+static int rtl8152_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) -+{ -+ struct r8152 *tp = netdev_priv(dev); -+ int ret; -+ -+ ret = usb_autopm_get_interface(tp->intf); -+ if (ret < 0) -+ goto out_set_wol; -+ -+ mutex_lock(&tp->control); -+ -+ __rtl_set_wol(tp, wol->wolopts); -+ tp->saved_wolopts = wol->wolopts & WAKE_ANY; -+ -+ mutex_unlock(&tp->control); -+ -+ usb_autopm_put_interface(tp->intf); -+ -+out_set_wol: -+ return ret; -+} -+ -+static u32 rtl8152_get_msglevel(struct net_device *dev) -+{ -+ struct r8152 *tp = netdev_priv(dev); -+ -+ return tp->msg_enable; -+} -+ -+static void rtl8152_set_msglevel(struct net_device *dev, u32 value) -+{ -+ struct r8152 *tp = netdev_priv(dev); -+ -+ tp->msg_enable = value; -+} -+ +static void rtl8152_get_drvinfo(struct net_device *netdev, + struct ethtool_drvinfo *info) +{ + struct r8152 *tp = netdev_priv(netdev); + -+ strlcpy(info->driver, MODULENAME, sizeof(info->driver)); -+ strlcpy(info->version, DRIVER_VERSION, sizeof(info->version)); ++ strncpy(info->driver, MODULENAME, ETHTOOL_BUSINFO_LEN); ++ strncpy(info->version, DRIVER_VERSION, ETHTOOL_BUSINFO_LEN); + usb_make_path(tp->udev, info->bus_info, sizeof(info->bus_info)); +} + @@ -20594,235 +20495,18 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +int rtl8152_get_settings(struct net_device *netdev, struct ethtool_cmd *cmd) +{ + struct r8152 *tp = netdev_priv(netdev); -+ int ret; + + if (!tp->mii.mdio_read) + return -EOPNOTSUPP; + -+ ret = usb_autopm_get_interface(tp->intf); -+ if (ret < 0) -+ goto out; -+ -+ mutex_lock(&tp->control); -+ -+ ret = mii_ethtool_gset(&tp->mii, cmd); -+ -+ mutex_unlock(&tp->control); -+ -+ usb_autopm_put_interface(tp->intf); -+ -+out: -+ return ret; ++ return mii_ethtool_gset(&tp->mii, cmd); +} + +static int rtl8152_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) +{ + struct r8152 *tp = netdev_priv(dev); -+ int ret; -+ -+ ret = usb_autopm_get_interface(tp->intf); -+ if (ret < 0) -+ goto out; -+ -+ mutex_lock(&tp->control); -+ -+ ret = rtl8152_set_speed(tp, cmd->autoneg, cmd->speed, cmd->duplex); -+ -+ mutex_unlock(&tp->control); -+ -+ usb_autopm_put_interface(tp->intf); -+ -+out: -+ return ret; -+} -+ -+static const char rtl8152_gstrings[][ETH_GSTRING_LEN] = { -+ "tx_packets", -+ "rx_packets", -+ "tx_errors", -+ "rx_errors", -+ "rx_missed", -+ "align_errors", -+ "tx_single_collisions", -+ "tx_multi_collisions", -+ "rx_unicast", -+ "rx_broadcast", -+ "rx_multicast", -+ "tx_aborted", -+ "tx_underrun", -+}; -+ -+static int rtl8152_get_sset_count(struct net_device *dev, int sset) -+{ -+ switch (sset) { -+ case ETH_SS_STATS: -+ return ARRAY_SIZE(rtl8152_gstrings); -+ default: -+ return -EOPNOTSUPP; -+ } -+} -+ -+static void rtl8152_get_ethtool_stats(struct net_device *dev, -+ struct ethtool_stats *stats, u64 *data) -+{ -+ struct r8152 *tp = netdev_priv(dev); -+ struct tally_counter tally; -+ -+ if (usb_autopm_get_interface(tp->intf) < 0) -+ return; -+ -+ generic_ocp_read(tp, PLA_TALLYCNT, sizeof(tally), &tally, MCU_TYPE_PLA); -+ -+ usb_autopm_put_interface(tp->intf); -+ -+ data[0] = le64_to_cpu(tally.tx_packets); -+ data[1] = le64_to_cpu(tally.rx_packets); -+ data[2] = le64_to_cpu(tally.tx_errors); -+ data[3] = le32_to_cpu(tally.rx_errors); -+ data[4] = le16_to_cpu(tally.rx_missed); -+ data[5] = le16_to_cpu(tally.align_errors); -+ data[6] = le32_to_cpu(tally.tx_one_collision); -+ data[7] = le32_to_cpu(tally.tx_multi_collision); -+ data[8] = le64_to_cpu(tally.rx_unicast); -+ data[9] = le64_to_cpu(tally.rx_broadcast); -+ data[10] = le32_to_cpu(tally.rx_multicast); -+ data[11] = le16_to_cpu(tally.tx_aborted); -+ data[12] = le16_to_cpu(tally.tx_underun); -+} -+ -+static void rtl8152_get_strings(struct net_device *dev, u32 stringset, u8 *data) -+{ -+ switch (stringset) { -+ case ETH_SS_STATS: -+ memcpy(data, *rtl8152_gstrings, sizeof(rtl8152_gstrings)); -+ break; -+ } -+} -+ -+static int r8152_get_eee(struct r8152 *tp, struct ethtool_eee *eee) -+{ -+ u32 ocp_data, lp, adv, supported = 0; -+ u16 val; -+ -+ val = r8152_mmd_read(tp, MDIO_MMD_PCS, MDIO_PCS_EEE_ABLE); -+ supported = mmd_eee_cap_to_ethtool_sup_t(val); -+ -+ val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV); -+ adv = mmd_eee_adv_to_ethtool_adv_t(val); -+ -+ val = r8152_mmd_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_LPABLE); -+ lp = mmd_eee_adv_to_ethtool_adv_t(val); -+ -+ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); -+ ocp_data &= EEE_RX_EN | EEE_TX_EN; -+ -+ eee->eee_enabled = !!ocp_data; -+ eee->eee_active = !!(supported & adv & lp); -+ eee->supported = supported; -+ eee->advertised = adv; -+ eee->lp_advertised = lp; -+ -+ return 0; -+} -+ -+static int r8152_set_eee(struct r8152 *tp, struct ethtool_eee *eee) -+{ -+ u16 val = ethtool_adv_to_mmd_eee_adv_t(eee->advertised); -+ -+ r8152_eee_en(tp, eee->eee_enabled); -+ -+ if (!eee->eee_enabled) -+ val = 0; -+ -+ r8152_mmd_write(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, val); -+ -+ return 0; -+} -+ -+static int r8153_get_eee(struct r8152 *tp, struct ethtool_eee *eee) -+{ -+ u32 ocp_data, lp, adv, supported = 0; -+ u16 val; -+ -+ val = ocp_reg_read(tp, OCP_EEE_ABLE); -+ supported = mmd_eee_cap_to_ethtool_sup_t(val); -+ -+ val = ocp_reg_read(tp, OCP_EEE_ADV); -+ adv = mmd_eee_adv_to_ethtool_adv_t(val); -+ -+ val = ocp_reg_read(tp, OCP_EEE_LPABLE); -+ lp = mmd_eee_adv_to_ethtool_adv_t(val); -+ -+ ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EEE_CR); -+ ocp_data &= EEE_RX_EN | EEE_TX_EN; -+ -+ eee->eee_enabled = !!ocp_data; -+ eee->eee_active = !!(supported & adv & lp); -+ eee->supported = supported; -+ eee->advertised = adv; -+ eee->lp_advertised = lp; -+ -+ return 0; -+} -+ -+static int r8153_set_eee(struct r8152 *tp, struct ethtool_eee *eee) -+{ -+ u16 val = ethtool_adv_to_mmd_eee_adv_t(eee->advertised); -+ -+ r8153_eee_en(tp, eee->eee_enabled); -+ -+ if (!eee->eee_enabled) -+ val = 0; -+ -+ ocp_reg_write(tp, OCP_EEE_ADV, val); -+ -+ return 0; -+} -+ -+static int -+rtl_ethtool_get_eee(struct net_device *net, struct ethtool_eee *edata) -+{ -+ struct r8152 *tp = netdev_priv(net); -+ int ret; -+ -+ ret = usb_autopm_get_interface(tp->intf); -+ if (ret < 0) -+ goto out; -+ -+ mutex_lock(&tp->control); -+ -+ ret = tp->rtl_ops.eee_get(tp, edata); -+ -+ mutex_unlock(&tp->control); -+ -+ usb_autopm_put_interface(tp->intf); -+ -+out: -+ return ret; -+} -+ -+static int -+rtl_ethtool_set_eee(struct net_device *net, struct ethtool_eee *edata) -+{ -+ struct r8152 *tp = netdev_priv(net); -+ int ret; -+ -+ ret = usb_autopm_get_interface(tp->intf); -+ if (ret < 0) -+ goto out; -+ -+ mutex_lock(&tp->control); -+ -+ ret = tp->rtl_ops.eee_set(tp, edata); -+ if (!ret) -+ ret = mii_nway_restart(&tp->mii); + -+ mutex_unlock(&tp->control); -+ -+ usb_autopm_put_interface(tp->intf); -+ -+out: -+ return ret; ++ return rtl8152_set_speed(tp, cmd->autoneg, cmd->speed, cmd->duplex); +} + +static struct ethtool_ops ops = { @@ -20830,29 +20514,13 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + .get_settings = rtl8152_get_settings, + .set_settings = rtl8152_set_settings, + .get_link = ethtool_op_get_link, -+ .get_msglevel = rtl8152_get_msglevel, -+ .set_msglevel = rtl8152_set_msglevel, -+ .get_wol = rtl8152_get_wol, -+ .set_wol = rtl8152_set_wol, -+ .get_strings = rtl8152_get_strings, -+ .get_sset_count = rtl8152_get_sset_count, -+ .get_ethtool_stats = rtl8152_get_ethtool_stats, -+ .get_eee = rtl_ethtool_get_eee, -+ .set_eee = rtl_ethtool_set_eee, +}; + +static int rtl8152_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd) +{ + struct r8152 *tp = netdev_priv(netdev); + struct mii_ioctl_data *data = if_mii(rq); -+ int res; -+ -+ if (test_bit(RTL8152_UNPLUG, &tp->flags)) -+ return -ENODEV; -+ -+ res = usb_autopm_get_interface(tp->intf); -+ if (res < 0) -+ goto out; ++ int res = 0; + + switch (cmd) { + case SIOCGMIIPHY: @@ -20860,9 +20528,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + break; + + case SIOCGMIIREG: -+ mutex_lock(&tp->control); + data->val_out = r8152_mdio_read(tp, data->reg_num); -+ mutex_unlock(&tp->control); + break; + + case SIOCSMIIREG: @@ -20870,51 +20536,26 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + res = -EPERM; + break; + } -+ mutex_lock(&tp->control); + r8152_mdio_write(tp, data->reg_num, data->val_in); -+ mutex_unlock(&tp->control); + break; + + default: + res = -EOPNOTSUPP; + } + -+ usb_autopm_put_interface(tp->intf); -+ -+out: + return res; +} + -+static int rtl8152_change_mtu(struct net_device *dev, int new_mtu) -+{ -+ struct r8152 *tp = netdev_priv(dev); -+ -+ switch (tp->version) { -+ case RTL_VER_01: -+ case RTL_VER_02: -+ return eth_change_mtu(dev, new_mtu); -+ default: -+ break; -+ } -+ -+ if (new_mtu < 68 || new_mtu > RTL8153_MAX_MTU) -+ return -EINVAL; -+ -+ dev->mtu = new_mtu; -+ -+ return 0; -+} -+ +static const struct net_device_ops rtl8152_netdev_ops = { + .ndo_open = rtl8152_open, + .ndo_stop = rtl8152_close, + .ndo_do_ioctl = rtl8152_ioctl, + .ndo_start_xmit = rtl8152_start_xmit, + .ndo_tx_timeout = rtl8152_tx_timeout, -+ .ndo_set_features = rtl8152_set_features, + .ndo_set_rx_mode = rtl8152_set_rx_mode, + .ndo_set_mac_address = rtl8152_set_mac_address, -+ .ndo_change_mtu = rtl8152_change_mtu, ++ ++ .ndo_change_mtu = eth_change_mtu, + .ndo_validate_addr = eth_validate_addr, +}; + @@ -20954,19 +20595,22 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + +static void rtl8152_unload(struct r8152 *tp) +{ -+ if (test_bit(RTL8152_UNPLUG, &tp->flags)) -+ return; ++ u32 ocp_data; + -+ if (tp->version != RTL_VER_01) -+ r8152_power_cut_en(tp, true); ++ if (tp->version != RTL_VER_01) { ++ ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_UPS_CTRL); ++ ocp_data |= POWER_CUT; ++ ocp_write_word(tp, MCU_TYPE_USB, USB_UPS_CTRL, ocp_data); ++ } ++ ++ ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS); ++ ocp_data &= ~RESUME_INDICATE; ++ ocp_write_word(tp, MCU_TYPE_USB, USB_PM_CTRL_STATUS, ocp_data); +} + +static void rtl8153_unload(struct r8152 *tp) +{ -+ if (test_bit(RTL8152_UNPLUG, &tp->flags)) -+ return; -+ -+ r8153_power_cut_en(tp, false); ++ r8153_power_cut_en(tp, 1); +} + +static int rtl_ops_init(struct r8152 *tp, const struct usb_device_id *id) @@ -20981,22 +20625,16 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + ops->init = r8152b_init; + ops->enable = rtl8152_enable; + ops->disable = rtl8152_disable; -+ ops->up = rtl8152_up; + ops->down = rtl8152_down; + ops->unload = rtl8152_unload; -+ ops->eee_get = r8152_get_eee; -+ ops->eee_set = r8152_set_eee; + ret = 0; + break; + case PRODUCT_ID_RTL8153: + ops->init = r8153_init; + ops->enable = rtl8153_enable; -+ ops->disable = rtl8153_disable; -+ ops->up = rtl8153_up; ++ ops->disable = rtl8152_disable; + ops->down = rtl8153_down; + ops->unload = rtl8153_unload; -+ ops->eee_get = r8153_get_eee; -+ ops->eee_set = r8153_set_eee; + ret = 0; + break; + default: @@ -21009,12 +20647,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + case PRODUCT_ID_SAMSUNG: + ops->init = r8153_init; + ops->enable = rtl8153_enable; -+ ops->disable = rtl8153_disable; -+ ops->up = rtl8153_up; ++ ops->disable = rtl8152_disable; + ops->down = rtl8153_down; + ops->unload = rtl8153_unload; -+ ops->eee_get = r8153_get_eee; -+ ops->eee_set = r8153_set_eee; + ret = 0; + break; + default: @@ -21065,27 +20700,14 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + goto out; + + tasklet_init(&tp->tl, bottom_half, (unsigned long)tp); -+ mutex_init(&tp->control); + INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t); + + netdev->netdev_ops = &rtl8152_netdev_ops; + netdev->watchdog_timeo = RTL8152_TX_TIMEOUT; + -+ netdev->features |= NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_SG | -+ NETIF_F_TSO | NETIF_F_FRAGLIST | NETIF_F_IPV6_CSUM | -+ NETIF_F_TSO6 | NETIF_F_HW_VLAN_CTAG_RX | -+ NETIF_F_HW_VLAN_CTAG_TX; -+ netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_SG | -+ NETIF_F_TSO | NETIF_F_FRAGLIST | -+ NETIF_F_IPV6_CSUM | NETIF_F_TSO6 | -+ NETIF_F_HW_VLAN_CTAG_RX | -+ NETIF_F_HW_VLAN_CTAG_TX; -+ netdev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO | -+ NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | -+ NETIF_F_IPV6_CSUM | NETIF_F_TSO6; -+ -+ netdev->ethtool_ops = &ops; -+ netif_set_gso_max_size(netdev, RTL_LIMITED_TSO_SIZE); ++ netdev->features |= NETIF_F_IP_CSUM; ++ netdev->hw_features = NETIF_F_IP_CSUM; ++ SET_ETHTOOL_OPS(netdev, &ops); + + tp->mii.dev = netdev; + tp->mii.mdio_read = read_mii_word; @@ -21095,12 +20717,14 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + tp->mii.phy_id = R8152_PHY_ID; + tp->mii.supports_gmii = 0; + -+ intf->needs_remote_wakeup = 1; -+ + r8152b_get_version(tp); + tp->rtl_ops.init(tp); + set_ethernet_addr(tp); + ++ ret = alloc_all_mem(tp); ++ if (ret) ++ goto out; ++ + usb_set_intfdata(intf, tp); + + ret = register_netdev(netdev); @@ -21109,12 +20733,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + goto out1; + } + -+ tp->saved_wolopts = __rtl_get_wol(tp); -+ if (tp->saved_wolopts) -+ device_set_wakeup_enable(&udev->dev, true); -+ else -+ device_set_wakeup_enable(&udev->dev, false); -+ + netif_info(tp, probe, netdev, "%s\n", DRIVER_VERSION); + + return 0; @@ -21132,14 +20750,11 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + + usb_set_intfdata(intf, NULL); + if (tp) { -+ struct usb_device *udev = tp->udev; -+ -+ if (udev->state == USB_STATE_NOTATTACHED) -+ set_bit(RTL8152_UNPLUG, &tp->flags); -+ ++ set_bit(RTL8152_UNPLUG, &tp->flags); + tasklet_kill(&tp->tl); + unregister_netdev(tp->netdev); + tp->rtl_ops.unload(tp); ++ free_all_mem(tp); + free_netdev(tp->netdev); + } +} @@ -21162,8 +20777,6 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri + .suspend = rtl8152_suspend, + .resume = rtl8152_resume, + .reset_resume = rtl8152_resume, -+ .supports_autosuspend = 1, -+ .disable_hub_initiated_lpm = 1, +}; + +module_usb_driver(rtl8152_driver); @@ -21171,10 +20784,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/r8152.c backports-3.18.1-1/dri +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/rtl8150.c backports-3.18.1-1/drivers/net/usb/rtl8150.c ---- backports-3.18.1-1.org/drivers/net/usb/rtl8150.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/rtl8150.c 2014-12-16 18:39:45.000000000 +0100 -@@ -0,0 +1,950 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/usb/rtl8150.c backports-4.2.6-1/drivers/net/usb/rtl8150.c +--- backports-4.2.6-1.org/drivers/net/usb/rtl8150.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/rtl8150.c 2015-11-09 23:37:56.000000000 +0100 +@@ -0,0 +1,949 @@ +/* + * Copyright (c) 2002 Petko Manolov (petkan@users.sourceforge.net) + * @@ -21930,14 +21543,13 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/rtl8150.c backports-3.18.1-1/d +static int rtl8150_close(struct net_device *netdev) +{ + rtl8150_t *dev = netdev_priv(netdev); -+ int res = 0; + + netif_stop_queue(netdev); + if (!test_bit(RTL8150_UNPLUG, &dev->flags)) + disable_net_traffic(dev); + unlink_all_urbs(dev); + -+ return res; ++ return 0; +} + +static void rtl8150_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *info) @@ -22125,9 +21737,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/rtl8150.c backports-3.18.1-1/d +MODULE_AUTHOR(DRIVER_AUTHOR); +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/smsc75xx.c backports-3.18.1-1/drivers/net/usb/smsc75xx.c ---- backports-3.18.1-1.org/drivers/net/usb/smsc75xx.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/smsc75xx.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/smsc75xx.c backports-4.2.6-1/drivers/net/usb/smsc75xx.c +--- backports-4.2.6-1.org/drivers/net/usb/smsc75xx.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/smsc75xx.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,2286 @@ + /*************************************************************************** + * @@ -24415,9 +24027,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/smsc75xx.c backports-3.18.1-1/ +MODULE_AUTHOR("Steve Glendinning "); +MODULE_DESCRIPTION("SMSC75XX USB 2.0 Gigabit Ethernet Devices"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/smsc75xx.h backports-3.18.1-1/drivers/net/usb/smsc75xx.h ---- backports-3.18.1-1.org/drivers/net/usb/smsc75xx.h 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/smsc75xx.h 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/smsc75xx.h backports-4.2.6-1/drivers/net/usb/smsc75xx.h +--- backports-4.2.6-1.org/drivers/net/usb/smsc75xx.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/smsc75xx.h 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,421 @@ + /*************************************************************************** + * @@ -24840,10 +24452,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/smsc75xx.h backports-3.18.1-1/ +#define INT_ENP_RX_FIFO_DATA_INT ((u32)BIT(12)) + +#endif /* _SMSC75XX_H */ -diff -Naur backports-3.18.1-1.org/drivers/net/usb/smsc95xx.c backports-3.18.1-1/drivers/net/usb/smsc95xx.c ---- backports-3.18.1-1.org/drivers/net/usb/smsc95xx.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/smsc95xx.c 2014-12-16 18:39:45.000000000 +0100 -@@ -0,0 +1,2030 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/usb/smsc95xx.c backports-4.2.6-1/drivers/net/usb/smsc95xx.c +--- backports-4.2.6-1.org/drivers/net/usb/smsc95xx.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/smsc95xx.c 2015-11-09 23:37:56.000000000 +0100 +@@ -0,0 +1,2032 @@ + /*************************************************************************** + * + * Copyright (C) 2007-2008 SMSC @@ -26516,12 +26128,14 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/smsc95xx.c backports-3.18.1-1/ +static int smsc95xx_resume(struct usb_interface *intf) +{ + struct usbnet *dev = usb_get_intfdata(intf); -+ struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); -+ u8 suspend_flags = pdata->suspend_flags; ++ struct smsc95xx_priv *pdata; ++ u8 suspend_flags; + int ret; + u32 val; + + BUG_ON(!dev); ++ pdata = (struct smsc95xx_priv *)(dev->data[0]); ++ suspend_flags = pdata->suspend_flags; + + netdev_dbg(dev->net, "resume suspend_flags=0x%02x\n", suspend_flags); + @@ -26874,9 +26488,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/smsc95xx.c backports-3.18.1-1/ +MODULE_AUTHOR("Steve Glendinning "); +MODULE_DESCRIPTION("SMSC95XX USB 2.0 Ethernet Devices"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/smsc95xx.h backports-3.18.1-1/drivers/net/usb/smsc95xx.h ---- backports-3.18.1-1.org/drivers/net/usb/smsc95xx.h 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/smsc95xx.h 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/smsc95xx.h backports-4.2.6-1/drivers/net/usb/smsc95xx.h +--- backports-4.2.6-1.org/drivers/net/usb/smsc95xx.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/smsc95xx.h 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,290 @@ + /*************************************************************************** + * @@ -27168,9 +26782,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/smsc95xx.h backports-3.18.1-1/ +#define INT_ENP_RXDF_ ((u32)BIT(11)) + +#endif /* _SMSC95XX_H */ -diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.c backports-3.18.1-1/drivers/net/usb/sr9700.c ---- backports-3.18.1-1.org/drivers/net/usb/sr9700.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/sr9700.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/sr9700.c backports-4.2.6-1/drivers/net/usb/sr9700.c +--- backports-4.2.6-1.org/drivers/net/usb/sr9700.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/sr9700.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,559 @@ +/* + * CoreChip-sz SR9700 one chip USB 1.1 Ethernet Devices @@ -27251,7 +26865,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.c backports-3.18.1-1/dr + int ret; + + udelay(1); -+ ret = sr_read_reg(dev, EPCR, &tmp); ++ ret = sr_read_reg(dev, SR_EPCR, &tmp); + if (ret < 0) + return ret; + @@ -27272,15 +26886,15 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.c backports-3.18.1-1/dr + + mutex_lock(&dev->phy_mutex); + -+ sr_write_reg(dev, EPAR, phy ? (reg | EPAR_PHY_ADR) : reg); -+ sr_write_reg(dev, EPCR, phy ? (EPCR_EPOS | EPCR_ERPRR) : EPCR_ERPRR); ++ sr_write_reg(dev, SR_EPAR, phy ? (reg | EPAR_PHY_ADR) : reg); ++ sr_write_reg(dev, SR_EPCR, phy ? (EPCR_EPOS | EPCR_ERPRR) : EPCR_ERPRR); + + ret = wait_phy_eeprom_ready(dev, phy); + if (ret < 0) + goto out_unlock; + -+ sr_write_reg(dev, EPCR, 0x0); -+ ret = sr_read(dev, EPDR, 2, value); ++ sr_write_reg(dev, SR_EPCR, 0x0); ++ ret = sr_read(dev, SR_EPDR, 2, value); + + netdev_dbg(dev->net, "read shared %d 0x%02x returned 0x%04x, %d\n", + phy, reg, *value, ret); @@ -27297,19 +26911,19 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.c backports-3.18.1-1/dr + + mutex_lock(&dev->phy_mutex); + -+ ret = sr_write(dev, EPDR, 2, &value); ++ ret = sr_write(dev, SR_EPDR, 2, &value); + if (ret < 0) + goto out_unlock; + -+ sr_write_reg(dev, EPAR, phy ? (reg | EPAR_PHY_ADR) : reg); -+ sr_write_reg(dev, EPCR, phy ? (EPCR_WEP | EPCR_EPOS | EPCR_ERPRW) : ++ sr_write_reg(dev, SR_EPAR, phy ? (reg | EPAR_PHY_ADR) : reg); ++ sr_write_reg(dev, SR_EPCR, phy ? (EPCR_WEP | EPCR_EPOS | EPCR_ERPRW) : + (EPCR_WEP | EPCR_ERPRW)); + + ret = wait_phy_eeprom_ready(dev, phy); + if (ret < 0) + goto out_unlock; + -+ sr_write_reg(dev, EPCR, 0x0); ++ sr_write_reg(dev, SR_EPCR, 0x0); + +out_unlock: + mutex_unlock(&dev->phy_mutex); @@ -27362,7 +26976,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.c backports-3.18.1-1/dr + if (loc == MII_BMSR) { + u8 value; + -+ sr_read_reg(dev, NSR, &value); ++ sr_read_reg(dev, SR_NSR, &value); + if (value & NSR_LINKST) + rc = 1; + } @@ -27402,7 +27016,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.c backports-3.18.1-1/dr + int rc = 0; + + /* Get the Link Status directly */ -+ sr_read_reg(dev, NSR, &value); ++ sr_read_reg(dev, SR_NSR, &value); + if (value & NSR_LINKST) + rc = 1; + @@ -27455,8 +27069,8 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.c backports-3.18.1-1/dr + } + } + -+ sr_write_async(dev, MAR, SR_MCAST_SIZE, hashes); -+ sr_write_reg_async(dev, RCR, rx_ctl); ++ sr_write_async(dev, SR_MAR, SR_MCAST_SIZE, hashes); ++ sr_write_reg_async(dev, SR_RCR, rx_ctl); +} + +static int sr9700_set_mac_address(struct net_device *netdev, void *p) @@ -27471,7 +27085,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.c backports-3.18.1-1/dr + } + + memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); -+ sr_write_async(dev, PAR, 6, netdev->dev_addr); ++ sr_write_async(dev, SR_PAR, 6, netdev->dev_addr); + + return 0; +} @@ -27514,7 +27128,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.c backports-3.18.1-1/dr + mii->phy_id_mask = 0x1f; + mii->reg_num_mask = 0x1f; + -+ sr_write_reg(dev, NCR, NCR_RST); ++ sr_write_reg(dev, SR_NCR, NCR_RST); + udelay(20); + + /* read MAC @@ -27522,17 +27136,17 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.c backports-3.18.1-1/dr + * EEPROM automatically to PAR. In case there is no EEPROM externally, + * a default MAC address is stored in PAR for making chip work properly. + */ -+ if (sr_read(dev, PAR, ETH_ALEN, netdev->dev_addr) < 0) { ++ if (sr_read(dev, SR_PAR, ETH_ALEN, netdev->dev_addr) < 0) { + netdev_err(netdev, "Error reading MAC address\n"); + ret = -ENODEV; + goto out; + } + + /* power up and reset phy */ -+ sr_write_reg(dev, PRR, PRR_PHY_RST); ++ sr_write_reg(dev, SR_PRR, PRR_PHY_RST); + /* at least 10ms, here 20ms for safe */ + mdelay(20); -+ sr_write_reg(dev, PRR, 0); ++ sr_write_reg(dev, SR_PRR, 0); + /* at least 1ms, here 2ms for reading right register */ + udelay(2 * 1000); + @@ -27731,9 +27345,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.c backports-3.18.1-1/dr +MODULE_AUTHOR("liujl "); +MODULE_DESCRIPTION("SR9700 one chip USB 1.1 USB to Ethernet device from http://www.corechip-sz.com/"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.h backports-3.18.1-1/drivers/net/usb/sr9700.h ---- backports-3.18.1-1.org/drivers/net/usb/sr9700.h 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/sr9700.h 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/sr9700.h backports-4.2.6-1/drivers/net/usb/sr9700.h +--- backports-4.2.6-1.org/drivers/net/usb/sr9700.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/sr9700.h 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,173 @@ +/* + * CoreChip-sz SR9700 one chip USB 1.1 Ethernet Devices @@ -27751,13 +27365,13 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.h backports-3.18.1-1/dr +/* sr9700 spec. register table on Linux platform */ + +/* Network Control Reg */ -+#define NCR 0x00 ++#define SR_NCR 0x00 +#define NCR_RST (1 << 0) +#define NCR_LBK (3 << 1) +#define NCR_FDX (1 << 3) +#define NCR_WAKEEN (1 << 6) +/* Network Status Reg */ -+#define NSR 0x01 ++#define SR_NSR 0x01 +#define NSR_RXRDY (1 << 0) +#define NSR_RXOV (1 << 1) +#define NSR_TX1END (1 << 2) @@ -27767,7 +27381,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.h backports-3.18.1-1/dr +#define NSR_LINKST (1 << 6) +#define NSR_SPEED (1 << 7) +/* Tx Control Reg */ -+#define TCR 0x02 ++#define SR_TCR 0x02 +#define TCR_CRC_DIS (1 << 1) +#define TCR_PAD_DIS (1 << 2) +#define TCR_LC_CARE (1 << 3) @@ -27775,7 +27389,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.h backports-3.18.1-1/dr +#define TCR_EXCECM (1 << 5) +#define TCR_LF_EN (1 << 6) +/* Tx Status Reg for Packet Index 1 */ -+#define TSR1 0x03 ++#define SR_TSR1 0x03 +#define TSR1_EC (1 << 2) +#define TSR1_COL (1 << 3) +#define TSR1_LC (1 << 4) @@ -27783,7 +27397,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.h backports-3.18.1-1/dr +#define TSR1_LOC (1 << 6) +#define TSR1_TLF (1 << 7) +/* Tx Status Reg for Packet Index 2 */ -+#define TSR2 0x04 ++#define SR_TSR2 0x04 +#define TSR2_EC (1 << 2) +#define TSR2_COL (1 << 3) +#define TSR2_LC (1 << 4) @@ -27791,7 +27405,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.h backports-3.18.1-1/dr +#define TSR2_LOC (1 << 6) +#define TSR2_TLF (1 << 7) +/* Rx Control Reg*/ -+#define RCR 0x05 ++#define SR_RCR 0x05 +#define RCR_RXEN (1 << 0) +#define RCR_PRMSC (1 << 1) +#define RCR_RUNT (1 << 2) @@ -27799,87 +27413,87 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.h backports-3.18.1-1/dr +#define RCR_DIS_CRC (1 << 4) +#define RCR_DIS_LONG (1 << 5) +/* Rx Status Reg */ -+#define RSR 0x06 ++#define SR_RSR 0x06 +#define RSR_AE (1 << 2) +#define RSR_MF (1 << 6) +#define RSR_RF (1 << 7) +/* Rx Overflow Counter Reg */ -+#define ROCR 0x07 ++#define SR_ROCR 0x07 +#define ROCR_ROC (0x7F << 0) +#define ROCR_RXFU (1 << 7) +/* Back Pressure Threshold Reg */ -+#define BPTR 0x08 ++#define SR_BPTR 0x08 +#define BPTR_JPT (0x0F << 0) +#define BPTR_BPHW (0x0F << 4) +/* Flow Control Threshold Reg */ -+#define FCTR 0x09 ++#define SR_FCTR 0x09 +#define FCTR_LWOT (0x0F << 0) +#define FCTR_HWOT (0x0F << 4) +/* rx/tx Flow Control Reg */ -+#define FCR 0x0A ++#define SR_FCR 0x0A +#define FCR_FLCE (1 << 0) +#define FCR_BKPA (1 << 4) +#define FCR_TXPEN (1 << 5) +#define FCR_TXPF (1 << 6) +#define FCR_TXP0 (1 << 7) +/* Eeprom & Phy Control Reg */ -+#define EPCR 0x0B ++#define SR_EPCR 0x0B +#define EPCR_ERRE (1 << 0) +#define EPCR_ERPRW (1 << 1) +#define EPCR_ERPRR (1 << 2) +#define EPCR_EPOS (1 << 3) +#define EPCR_WEP (1 << 4) +/* Eeprom & Phy Address Reg */ -+#define EPAR 0x0C ++#define SR_EPAR 0x0C +#define EPAR_EROA (0x3F << 0) +#define EPAR_PHY_ADR_MASK (0x03 << 6) +#define EPAR_PHY_ADR (0x01 << 6) +/* Eeprom & Phy Data Reg */ -+#define EPDR 0x0D /* 0x0D ~ 0x0E for Data Reg Low & High */ ++#define SR_EPDR 0x0D /* 0x0D ~ 0x0E for Data Reg Low & High */ +/* Wakeup Control Reg */ -+#define WCR 0x0F ++#define SR_WCR 0x0F +#define WCR_MAGICST (1 << 0) +#define WCR_LINKST (1 << 2) +#define WCR_MAGICEN (1 << 3) +#define WCR_LINKEN (1 << 5) +/* Physical Address Reg */ -+#define PAR 0x10 /* 0x10 ~ 0x15 6 bytes for PAR */ ++#define SR_PAR 0x10 /* 0x10 ~ 0x15 6 bytes for PAR */ +/* Multicast Address Reg */ -+#define MAR 0x16 /* 0x16 ~ 0x1D 8 bytes for MAR */ ++#define SR_MAR 0x16 /* 0x16 ~ 0x1D 8 bytes for MAR */ +/* 0x1e unused */ +/* Phy Reset Reg */ -+#define PRR 0x1F ++#define SR_PRR 0x1F +#define PRR_PHY_RST (1 << 0) +/* Tx sdram Write Pointer Address Low */ -+#define TWPAL 0x20 ++#define SR_TWPAL 0x20 +/* Tx sdram Write Pointer Address High */ -+#define TWPAH 0x21 ++#define SR_TWPAH 0x21 +/* Tx sdram Read Pointer Address Low */ -+#define TRPAL 0x22 ++#define SR_TRPAL 0x22 +/* Tx sdram Read Pointer Address High */ -+#define TRPAH 0x23 ++#define SR_TRPAH 0x23 +/* Rx sdram Write Pointer Address Low */ -+#define RWPAL 0x24 ++#define SR_RWPAL 0x24 +/* Rx sdram Write Pointer Address High */ -+#define RWPAH 0x25 ++#define SR_RWPAH 0x25 +/* Rx sdram Read Pointer Address Low */ -+#define RRPAL 0x26 ++#define SR_RRPAL 0x26 +/* Rx sdram Read Pointer Address High */ -+#define RRPAH 0x27 ++#define SR_RRPAH 0x27 +/* Vendor ID register */ -+#define VID 0x28 /* 0x28 ~ 0x29 2 bytes for VID */ ++#define SR_VID 0x28 /* 0x28 ~ 0x29 2 bytes for VID */ +/* Product ID register */ -+#define PID 0x2A /* 0x2A ~ 0x2B 2 bytes for PID */ ++#define SR_PID 0x2A /* 0x2A ~ 0x2B 2 bytes for PID */ +/* CHIP Revision register */ -+#define CHIPR 0x2C ++#define SR_CHIPR 0x2C +/* 0x2D --> 0xEF unused */ +/* USB Device Address */ -+#define USBDA 0xF0 ++#define SR_USBDA 0xF0 +#define USBDA_USBFA (0x7F << 0) +/* RX packet Counter Reg */ -+#define RXC 0xF1 ++#define SR_RXC 0xF1 +/* Tx packet Counter & USB Status Reg */ -+#define TXC_USBS 0xF2 ++#define SR_TXC_USBS 0xF2 +#define TXC_USBS_TXC0 (1 << 0) +#define TXC_USBS_TXC1 (1 << 1) +#define TXC_USBS_TXC2 (1 << 2) @@ -27887,7 +27501,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.h backports-3.18.1-1/dr +#define TXC_USBS_SUSFLAG (1 << 6) +#define TXC_USBS_RXFAULT (1 << 7) +/* USB Control register */ -+#define USBC 0xF4 ++#define SR_USBC 0xF4 +#define USBC_EP3NAK (1 << 4) +#define USBC_EP3ACK (1 << 5) + @@ -27908,10 +27522,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9700.h backports-3.18.1-1/dr +#define SR_RX_OVERHEAD 7 /* 3bytes header + 4crc tail */ + +#endif /* _SR9700_H */ -diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9800.c backports-3.18.1-1/drivers/net/usb/sr9800.c ---- backports-3.18.1-1.org/drivers/net/usb/sr9800.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/sr9800.c 2014-12-16 18:39:45.000000000 +0100 -@@ -0,0 +1,874 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/usb/sr9800.c backports-4.2.6-1/drivers/net/usb/sr9800.c +--- backports-4.2.6-1.org/drivers/net/usb/sr9800.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/sr9800.c 2015-11-09 23:37:56.000000000 +0100 +@@ -0,0 +1,875 @@ +/* CoreChip-sz SR9800 one chip USB 2.0 Ethernet Devices + * + * Author : Liu Junliang @@ -28058,6 +27672,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9800.c backports-3.18.1-1/dr + skb_put(skb, sizeof(padbytes)); + } + ++ usbnet_set_skb_tx_stats(skb, 1, 0); + return skb; +} + @@ -28786,9 +28401,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9800.c backports-3.18.1-1/dr +MODULE_VERSION(DRIVER_VERSION); +MODULE_DESCRIPTION("SR9800 USB 2.0 USB2NET Dev : http://www.corechip-sz.com"); +MODULE_LICENSE("GPL"); -diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9800.h backports-3.18.1-1/drivers/net/usb/sr9800.h ---- backports-3.18.1-1.org/drivers/net/usb/sr9800.h 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/sr9800.h 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/sr9800.h backports-4.2.6-1/drivers/net/usb/sr9800.h +--- backports-4.2.6-1.org/drivers/net/usb/sr9800.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/sr9800.h 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,202 @@ +/* CoreChip-sz SR9800 one chip USB 2.0 Ethernet Devices + * @@ -28992,9 +28607,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sr9800.h backports-3.18.1-1/dr +} __packed; + +#endif /* _SR9800_H */ -diff -Naur backports-3.18.1-1.org/drivers/net/usb/zaurus.c backports-3.18.1-1/drivers/net/usb/zaurus.c ---- backports-3.18.1-1.org/drivers/net/usb/zaurus.c 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/zaurus.c 2014-12-16 18:39:45.000000000 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/zaurus.c backports-4.2.6-1/drivers/net/usb/zaurus.c +--- backports-4.2.6-1.org/drivers/net/usb/zaurus.c 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/zaurus.c 2015-11-09 23:37:56.000000000 +0100 @@ -0,0 +1,385 @@ +/* + * Copyright (C) 2002 Pavel Machek diff --git a/src/patches/backports-3.18.1-1-grsecurity.patch b/src/patches/backports-4.2.6-1-grsecurity.patch similarity index 72% rename from src/patches/backports-3.18.1-1-grsecurity.patch rename to src/patches/backports-4.2.6-1-grsecurity.patch index 711f2e3e8d..1a44409a42 100644 --- a/src/patches/backports-3.18.1-1-grsecurity.patch +++ b/src/patches/backports-4.2.6-1-grsecurity.patch @@ -1,6 +1,6 @@ -diff -Naur backports-3.18.1-1.org/drivers/bluetooth/btwilink.c backports-3.18.1-1/drivers/bluetooth/btwilink.c ---- backports-3.18.1-1.org/drivers/bluetooth/btwilink.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/drivers/bluetooth/btwilink.c 2014-12-28 14:10:09.480888533 +0100 +diff -Naur backports-4.2.6-1.org/drivers/bluetooth/btwilink.c backports-4.2.6-1/drivers/bluetooth/btwilink.c +--- backports-4.2.6-1.org/drivers/bluetooth/btwilink.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/drivers/bluetooth/btwilink.c 2016-01-27 12:26:16.319959957 +0100 @@ -288,7 +288,7 @@ static int bt_ti_probe(struct platform_device *pdev) @@ -10,10 +10,10 @@ diff -Naur backports-3.18.1-1.org/drivers/bluetooth/btwilink.c backports-3.18.1- struct hci_dev *hdev; int err; -diff -Naur backports-3.18.1-1.org/drivers/media/dvb-core/dvbdev.c backports-3.18.1-1/drivers/media/dvb-core/dvbdev.c ---- backports-3.18.1-1.org/drivers/media/dvb-core/dvbdev.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/dvb-core/dvbdev.c 2014-12-28 14:10:09.528888772 +0100 -@@ -185,7 +185,7 @@ +diff -Naur backports-4.2.6-1.org/drivers/media/dvb-core/dvbdev.c backports-4.2.6-1/drivers/media/dvb-core/dvbdev.c +--- backports-4.2.6-1.org/drivers/media/dvb-core/dvbdev.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/dvb-core/dvbdev.c 2016-01-27 12:26:21.266626324 +0100 +@@ -272,7 +272,7 @@ const struct dvb_device *template, void *priv, int type) { struct dvb_device *dvbdev; @@ -22,9 +22,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/dvb-core/dvbdev.c backports-3.18 struct device *clsdev; int minor; int id; -diff -Naur backports-3.18.1-1.org/drivers/media/dvb-frontends/af9033.h backports-3.18.1-1/drivers/media/dvb-frontends/af9033.h ---- backports-3.18.1-1.org/drivers/media/dvb-frontends/af9033.h 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/dvb-frontends/af9033.h 2014-12-28 14:10:09.528888772 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/dvb-frontends/af9033.h backports-4.2.6-1/drivers/media/dvb-frontends/af9033.h +--- backports-4.2.6-1.org/drivers/media/dvb-frontends/af9033.h 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/dvb-frontends/af9033.h 2016-01-27 12:26:21.266626324 +0100 @@ -96,6 +96,6 @@ int (*pid_filter_ctrl)(struct dvb_frontend *fe, int onoff); int (*pid_filter)(struct dvb_frontend *fe, int index, u16 pid, @@ -33,9 +33,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/dvb-frontends/af9033.h backports +} __no_const; #endif /* AF9033_H */ -diff -Naur backports-3.18.1-1.org/drivers/media/dvb-frontends/dib3000.h backports-3.18.1-1/drivers/media/dvb-frontends/dib3000.h ---- backports-3.18.1-1.org/drivers/media/dvb-frontends/dib3000.h 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/dvb-frontends/dib3000.h 2014-12-28 14:10:09.528888772 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/dvb-frontends/dib3000.h backports-4.2.6-1/drivers/media/dvb-frontends/dib3000.h +--- backports-4.2.6-1.org/drivers/media/dvb-frontends/dib3000.h 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/dvb-frontends/dib3000.h 2016-01-27 12:26:21.266626324 +0100 @@ -39,7 +39,7 @@ int (*fifo_ctrl)(struct dvb_frontend *fe, int onoff); int (*pid_ctrl)(struct dvb_frontend *fe, int index, int pid, int onoff); @@ -43,11 +43,11 @@ diff -Naur backports-3.18.1-1.org/drivers/media/dvb-frontends/dib3000.h backport -}; +} __no_const; - #if IS_ENABLED(CPTCFG_DVB_DIB3000MB) + #if IS_REACHABLE(CPTCFG_DVB_DIB3000MB) extern struct dvb_frontend* dib3000mb_attach(const struct dib3000_config* config, -diff -Naur backports-3.18.1-1.org/drivers/media/dvb-frontends/dib7000p.h backports-3.18.1-1/drivers/media/dvb-frontends/dib7000p.h ---- backports-3.18.1-1.org/drivers/media/dvb-frontends/dib7000p.h 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/dvb-frontends/dib7000p.h 2014-12-28 14:10:09.528888772 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/dvb-frontends/dib7000p.h backports-4.2.6-1/drivers/media/dvb-frontends/dib7000p.h +--- backports-4.2.6-1.org/drivers/media/dvb-frontends/dib7000p.h 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/dvb-frontends/dib7000p.h 2016-01-27 12:26:21.266626324 +0100 @@ -64,7 +64,7 @@ int (*get_adc_power)(struct dvb_frontend *fe); int (*slave_reset)(struct dvb_frontend *fe); @@ -55,11 +55,11 @@ diff -Naur backports-3.18.1-1.org/drivers/media/dvb-frontends/dib7000p.h backpor -}; +} __no_const; - #if IS_ENABLED(CPTCFG_DVB_DIB7000P) + #if IS_REACHABLE(CPTCFG_DVB_DIB7000P) void *dib7000p_attach(struct dib7000p_ops *ops); -diff -Naur backports-3.18.1-1.org/drivers/media/dvb-frontends/dib8000.h backports-3.18.1-1/drivers/media/dvb-frontends/dib8000.h ---- backports-3.18.1-1.org/drivers/media/dvb-frontends/dib8000.h 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/dvb-frontends/dib8000.h 2014-12-28 14:10:09.528888772 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/dvb-frontends/dib8000.h backports-4.2.6-1/drivers/media/dvb-frontends/dib8000.h +--- backports-4.2.6-1.org/drivers/media/dvb-frontends/dib8000.h 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/dvb-frontends/dib8000.h 2016-01-27 12:26:21.266626324 +0100 @@ -61,7 +61,7 @@ int (*pid_filter_ctrl)(struct dvb_frontend *fe, u8 onoff); int (*pid_filter)(struct dvb_frontend *fe, u8 id, u16 pid, u8 onoff); @@ -67,11 +67,11 @@ diff -Naur backports-3.18.1-1.org/drivers/media/dvb-frontends/dib8000.h backport -}; +} __no_const; - #if IS_ENABLED(CPTCFG_DVB_DIB8000) + #if IS_REACHABLE(CPTCFG_DVB_DIB8000) void *dib8000_attach(struct dib8000_ops *ops); -diff -Naur backports-3.18.1-1.org/drivers/media/pci/cx88/cx88-video.c backports-3.18.1-1/drivers/media/pci/cx88/cx88-video.c ---- backports-3.18.1-1.org/drivers/media/pci/cx88/cx88-video.c 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/pci/cx88/cx88-video.c 2014-12-28 14:10:09.528888772 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/pci/cx88/cx88-video.c backports-4.2.6-1/drivers/media/pci/cx88/cx88-video.c +--- backports-4.2.6-1.org/drivers/media/pci/cx88/cx88-video.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/pci/cx88/cx88-video.c 2016-01-27 12:26:21.266626324 +0100 @@ -50,9 +50,9 @@ /* ------------------------------------------------------------------ */ @@ -85,9 +85,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/pci/cx88/cx88-video.c backports- module_param_array(video_nr, int, NULL, 0444); module_param_array(vbi_nr, int, NULL, 0444); -diff -Naur backports-3.18.1-1.org/drivers/media/pci/ivtv/ivtv-driver.c backports-3.18.1-1/drivers/media/pci/ivtv/ivtv-driver.c ---- backports-3.18.1-1.org/drivers/media/pci/ivtv/ivtv-driver.c 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/pci/ivtv/ivtv-driver.c 2014-12-28 14:10:09.528888772 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/pci/ivtv/ivtv-driver.c backports-4.2.6-1/drivers/media/pci/ivtv/ivtv-driver.c +--- backports-4.2.6-1.org/drivers/media/pci/ivtv/ivtv-driver.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/pci/ivtv/ivtv-driver.c 2016-01-27 12:26:21.266626324 +0100 @@ -83,7 +83,7 @@ MODULE_DEVICE_TABLE(pci,ivtv_pci_tbl); @@ -97,9 +97,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/pci/ivtv/ivtv-driver.c backports /* Parameter declarations */ static int cardtype[IVTV_MAX_CARDS]; -diff -Naur backports-3.18.1-1.org/drivers/media/pci/solo6x10/solo6x10-core.c backports-3.18.1-1/drivers/media/pci/solo6x10/solo6x10-core.c ---- backports-3.18.1-1.org/drivers/media/pci/solo6x10/solo6x10-core.c 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/pci/solo6x10/solo6x10-core.c 2014-12-28 14:10:09.528888772 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/pci/solo6x10/solo6x10-core.c backports-4.2.6-1/drivers/media/pci/solo6x10/solo6x10-core.c +--- backports-4.2.6-1.org/drivers/media/pci/solo6x10/solo6x10-core.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/pci/solo6x10/solo6x10-core.c 2016-01-27 12:26:21.266626324 +0100 @@ -424,7 +424,7 @@ static int solo_sysfs_init(struct solo_dev *solo_dev) @@ -109,9 +109,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/pci/solo6x10/solo6x10-core.c bac struct device *dev = &solo_dev->dev; const char *driver; int i; -diff -Naur backports-3.18.1-1.org/drivers/media/pci/solo6x10/solo6x10-g723.c backports-3.18.1-1/drivers/media/pci/solo6x10/solo6x10-g723.c ---- backports-3.18.1-1.org/drivers/media/pci/solo6x10/solo6x10-g723.c 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/pci/solo6x10/solo6x10-g723.c 2014-12-28 14:10:09.528888772 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/pci/solo6x10/solo6x10-g723.c backports-4.2.6-1/drivers/media/pci/solo6x10/solo6x10-g723.c +--- backports-4.2.6-1.org/drivers/media/pci/solo6x10/solo6x10-g723.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/pci/solo6x10/solo6x10-g723.c 2016-01-27 12:26:21.266626324 +0100 @@ -351,7 +351,7 @@ int solo_g723_init(struct solo_dev *solo_dev) @@ -121,10 +121,10 @@ diff -Naur backports-3.18.1-1.org/drivers/media/pci/solo6x10/solo6x10-g723.c bac struct snd_card *card; struct snd_kcontrol_new kctl; char name[32]; -diff -Naur backports-3.18.1-1.org/drivers/media/pci/solo6x10/solo6x10.h backports-3.18.1-1/drivers/media/pci/solo6x10/solo6x10.h ---- backports-3.18.1-1.org/drivers/media/pci/solo6x10/solo6x10.h 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/pci/solo6x10/solo6x10.h 2014-12-28 14:10:09.532888798 +0100 -@@ -219,7 +219,7 @@ +diff -Naur backports-4.2.6-1.org/drivers/media/pci/solo6x10/solo6x10.h backports-4.2.6-1/drivers/media/pci/solo6x10/solo6x10.h +--- backports-4.2.6-1.org/drivers/media/pci/solo6x10/solo6x10.h 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/pci/solo6x10/solo6x10.h 2016-01-27 12:26:21.266626324 +0100 +@@ -218,7 +218,7 @@ /* P2M DMA Engine */ struct solo_p2m_dev p2m_dev[SOLO_NR_P2M]; @@ -133,9 +133,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/pci/solo6x10/solo6x10.h backport int p2m_jiffies; unsigned int p2m_timeouts; -diff -Naur backports-3.18.1-1.org/drivers/media/pci/solo6x10/solo6x10-p2m.c backports-3.18.1-1/drivers/media/pci/solo6x10/solo6x10-p2m.c ---- backports-3.18.1-1.org/drivers/media/pci/solo6x10/solo6x10-p2m.c 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/pci/solo6x10/solo6x10-p2m.c 2014-12-28 14:10:09.532888798 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/pci/solo6x10/solo6x10-p2m.c backports-4.2.6-1/drivers/media/pci/solo6x10/solo6x10-p2m.c +--- backports-4.2.6-1.org/drivers/media/pci/solo6x10/solo6x10-p2m.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/pci/solo6x10/solo6x10-p2m.c 2016-01-27 12:26:21.266626324 +0100 @@ -73,7 +73,7 @@ /* Get next ID. According to Softlogic, 6110 has problems on !=0 P2M */ @@ -145,9 +145,21 @@ diff -Naur backports-3.18.1-1.org/drivers/media/pci/solo6x10/solo6x10-p2m.c back if (p2m_id < 0) p2m_id = -p2m_id; } -diff -Naur backports-3.18.1-1.org/drivers/media/platform/omap/omap_vout.c backports-3.18.1-1/drivers/media/platform/omap/omap_vout.c ---- backports-3.18.1-1.org/drivers/media/platform/omap/omap_vout.c 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/platform/omap/omap_vout.c 2014-12-28 14:10:09.532888798 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/pci/tw68/tw68-core.c backports-4.2.6-1/drivers/media/pci/tw68/tw68-core.c +--- backports-4.2.6-1.org/drivers/media/pci/tw68/tw68-core.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/pci/tw68/tw68-core.c 2016-01-27 12:26:21.266626324 +0100 +@@ -60,7 +60,7 @@ + module_param_array(card, int, NULL, 0444); + MODULE_PARM_DESC(card, "card type"); + +-static atomic_t tw68_instance = ATOMIC_INIT(0); ++static atomic_unchecked_t tw68_instance = ATOMIC_INIT(0); + + /* ------------------------------------------------------------------ */ + +diff -Naur backports-4.2.6-1.org/drivers/media/platform/omap/omap_vout.c backports-4.2.6-1/drivers/media/platform/omap/omap_vout.c +--- backports-4.2.6-1.org/drivers/media/platform/omap/omap_vout.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/platform/omap/omap_vout.c 2016-01-27 12:26:21.266626324 +0100 @@ -63,7 +63,6 @@ OMAP_VIDEO2, }; @@ -156,7 +168,7 @@ diff -Naur backports-3.18.1-1.org/drivers/media/platform/omap/omap_vout.c backpo /* Variables configurable through module params*/ static u32 video1_numbuffers = 3; static u32 video2_numbuffers = 3; -@@ -1012,6 +1011,12 @@ +@@ -1008,6 +1007,12 @@ { struct videobuf_queue *q; struct omap_vout_device *vout = NULL; @@ -169,7 +181,7 @@ diff -Naur backports-3.18.1-1.org/drivers/media/platform/omap/omap_vout.c backpo vout = video_drvdata(file); v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Entering %s\n", __func__); -@@ -1029,10 +1034,6 @@ +@@ -1025,10 +1030,6 @@ vout->type = V4L2_BUF_TYPE_VIDEO_OUTPUT; q = &vout->vbq; @@ -180,9 +192,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/platform/omap/omap_vout.c backpo spin_lock_init(&vout->vbq_lock); videobuf_queue_dma_contig_init(q, &video_vbq_ops, q->dev, -diff -Naur backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_grp_layer.c backports-3.18.1-1/drivers/media/platform/s5p-tv/mixer_grp_layer.c ---- backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_grp_layer.c 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/platform/s5p-tv/mixer_grp_layer.c 2014-12-28 14:10:09.532888798 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/platform/s5p-tv/mixer_grp_layer.c backports-4.2.6-1/drivers/media/platform/s5p-tv/mixer_grp_layer.c +--- backports-4.2.6-1.org/drivers/media/platform/s5p-tv/mixer_grp_layer.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/platform/s5p-tv/mixer_grp_layer.c 2016-01-27 12:26:21.266626324 +0100 @@ -235,7 +235,7 @@ { struct mxr_layer *layer; @@ -192,9 +204,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_grp_layer. .release = mxr_graph_layer_release, .buffer_set = mxr_graph_buffer_set, .stream_set = mxr_graph_stream_set, -diff -Naur backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer.h backports-3.18.1-1/drivers/media/platform/s5p-tv/mixer.h ---- backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer.h 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/platform/s5p-tv/mixer.h 2014-12-28 14:10:09.532888798 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/platform/s5p-tv/mixer.h backports-4.2.6-1/drivers/media/platform/s5p-tv/mixer.h +--- backports-4.2.6-1.org/drivers/media/platform/s5p-tv/mixer.h 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/platform/s5p-tv/mixer.h 2016-01-27 12:26:21.266626324 +0100 @@ -156,7 +156,7 @@ /** layer index (unique identifier) */ int idx; @@ -204,9 +216,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer.h backport /** format array */ const struct mxr_format **fmt_array; /** size of format array */ -diff -Naur backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_reg.c backports-3.18.1-1/drivers/media/platform/s5p-tv/mixer_reg.c ---- backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_reg.c 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/platform/s5p-tv/mixer_reg.c 2014-12-28 14:10:09.532888798 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/platform/s5p-tv/mixer_reg.c backports-4.2.6-1/drivers/media/platform/s5p-tv/mixer_reg.c +--- backports-4.2.6-1.org/drivers/media/platform/s5p-tv/mixer_reg.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/platform/s5p-tv/mixer_reg.c 2016-01-27 12:26:21.266626324 +0100 @@ -276,7 +276,7 @@ layer->update_buf = next; } @@ -216,9 +228,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_reg.c back if (done && done != layer->shadow_buf) vb2_buffer_done(&done->vb, VB2_BUF_STATE_DONE); -diff -Naur backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_video.c backports-3.18.1-1/drivers/media/platform/s5p-tv/mixer_video.c ---- backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_video.c 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/platform/s5p-tv/mixer_video.c 2014-12-28 14:10:09.532888798 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/platform/s5p-tv/mixer_video.c backports-4.2.6-1/drivers/media/platform/s5p-tv/mixer_video.c +--- backports-4.2.6-1.org/drivers/media/platform/s5p-tv/mixer_video.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/platform/s5p-tv/mixer_video.c 2016-01-27 12:26:21.266626324 +0100 @@ -210,7 +210,7 @@ layer->geo.src.height = layer->geo.src.full_height; @@ -270,7 +282,7 @@ diff -Naur backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_video.c ba /* retrieve update selection rectangle */ res.left = target->x_offset; -@@ -954,13 +954,13 @@ +@@ -938,13 +938,13 @@ mxr_output_get(mdev); mxr_layer_update_output(layer); @@ -286,7 +298,7 @@ diff -Naur backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_video.c ba mxr_streamer_get(mdev); return 0; -@@ -1030,7 +1030,7 @@ +@@ -1014,7 +1014,7 @@ spin_unlock_irqrestore(&layer->enq_slock, flags); /* disabling layer in hardware */ @@ -295,7 +307,7 @@ diff -Naur backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_video.c ba /* remove one streamer */ mxr_streamer_put(mdev); /* allow changes in output configuration */ -@@ -1068,8 +1068,8 @@ +@@ -1052,8 +1052,8 @@ void mxr_layer_release(struct mxr_layer *layer) { @@ -306,7 +318,7 @@ diff -Naur backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_video.c ba } void mxr_base_layer_release(struct mxr_layer *layer) -@@ -1095,7 +1095,7 @@ +@@ -1079,7 +1079,7 @@ layer->mdev = mdev; layer->idx = idx; @@ -315,9 +327,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_video.c ba spin_lock_init(&layer->enq_slock); INIT_LIST_HEAD(&layer->enq_list); -diff -Naur backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_vp_layer.c backports-3.18.1-1/drivers/media/platform/s5p-tv/mixer_vp_layer.c ---- backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_vp_layer.c 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/platform/s5p-tv/mixer_vp_layer.c 2014-12-28 14:10:09.532888798 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/platform/s5p-tv/mixer_vp_layer.c backports-4.2.6-1/drivers/media/platform/s5p-tv/mixer_vp_layer.c +--- backports-4.2.6-1.org/drivers/media/platform/s5p-tv/mixer_vp_layer.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/platform/s5p-tv/mixer_vp_layer.c 2016-01-27 12:26:21.266626324 +0100 @@ -206,7 +206,7 @@ { struct mxr_layer *layer; @@ -327,9 +339,20 @@ diff -Naur backports-3.18.1-1.org/drivers/media/platform/s5p-tv/mixer_vp_layer.c .release = mxr_vp_layer_release, .buffer_set = mxr_vp_buffer_set, .stream_set = mxr_vp_stream_set, -diff -Naur backports-3.18.1-1.org/drivers/media/radio/radio-cadet.c backports-3.18.1-1/drivers/media/radio/radio-cadet.c ---- backports-3.18.1-1.org/drivers/media/radio/radio-cadet.c 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/radio/radio-cadet.c 2014-12-28 14:10:09.532888798 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/platform/vivid/vivid-osd.c backports-4.2.6-1/drivers/media/platform/vivid/vivid-osd.c +--- backports-4.2.6-1.org/drivers/media/platform/vivid/vivid-osd.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/platform/vivid/vivid-osd.c 2016-01-27 12:26:21.269959657 +0100 +@@ -85,6 +85,7 @@ + case FBIOGET_VBLANK: { + struct fb_vblank vblank; + ++ memset(&vblank, 0, sizeof(vblank)); + vblank.flags = FB_VBLANK_HAVE_COUNT | FB_VBLANK_HAVE_VCOUNT | + FB_VBLANK_HAVE_VSYNC; + vblank.count = 0; +diff -Naur backports-4.2.6-1.org/drivers/media/radio/radio-cadet.c backports-4.2.6-1/drivers/media/radio/radio-cadet.c +--- backports-4.2.6-1.org/drivers/media/radio/radio-cadet.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/radio/radio-cadet.c 2016-01-27 12:26:21.269959657 +0100 @@ -333,6 +333,8 @@ unsigned char readbuf[RDS_BUFFER]; int i = 0; @@ -351,9 +374,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/radio/radio-cadet.c backports-3. return i; } -diff -Naur backports-3.18.1-1.org/drivers/media/radio/radio-maxiradio.c backports-3.18.1-1/drivers/media/radio/radio-maxiradio.c ---- backports-3.18.1-1.org/drivers/media/radio/radio-maxiradio.c 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/radio/radio-maxiradio.c 2014-12-28 14:10:09.532888798 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/radio/radio-maxiradio.c backports-4.2.6-1/drivers/media/radio/radio-maxiradio.c +--- backports-4.2.6-1.org/drivers/media/radio/radio-maxiradio.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/radio/radio-maxiradio.c 2016-01-27 12:26:21.269959657 +0100 @@ -61,7 +61,7 @@ /* TEA5757 pin mappings */ static const int clk = 1, data = 2, wren = 4, mo_st = 8, power = 16; @@ -363,9 +386,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/radio/radio-maxiradio.c backport #define PCI_VENDOR_ID_GUILLEMOT 0x5046 #define PCI_DEVICE_ID_GUILLEMOT_MAXIRADIO 0x1001 -diff -Naur backports-3.18.1-1.org/drivers/media/radio/radio-shark2.c backports-3.18.1-1/drivers/media/radio/radio-shark2.c ---- backports-3.18.1-1.org/drivers/media/radio/radio-shark2.c 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/radio/radio-shark2.c 2014-12-28 14:10:09.532888798 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/radio/radio-shark2.c backports-4.2.6-1/drivers/media/radio/radio-shark2.c +--- backports-4.2.6-1.org/drivers/media/radio/radio-shark2.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/radio/radio-shark2.c 2016-01-27 12:26:21.269959657 +0100 @@ -74,7 +74,7 @@ u8 *transfer_buffer; }; @@ -375,9 +398,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/radio/radio-shark2.c backports-3 static int shark_write_reg(struct radio_tea5777 *tea, u64 reg) { -diff -Naur backports-3.18.1-1.org/drivers/media/radio/radio-shark.c backports-3.18.1-1/drivers/media/radio/radio-shark.c ---- backports-3.18.1-1.org/drivers/media/radio/radio-shark.c 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/radio/radio-shark.c 2014-12-28 14:10:09.532888798 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/radio/radio-shark.c backports-4.2.6-1/drivers/media/radio/radio-shark.c +--- backports-4.2.6-1.org/drivers/media/radio/radio-shark.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/radio/radio-shark.c 2016-01-27 12:26:21.269959657 +0100 @@ -79,7 +79,7 @@ u32 last_val; }; @@ -387,9 +410,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/radio/radio-shark.c backports-3. static void shark_write_val(struct snd_tea575x *tea, u32 val) { -diff -Naur backports-3.18.1-1.org/drivers/media/radio/radio-si476x.c backports-3.18.1-1/drivers/media/radio/radio-si476x.c ---- backports-3.18.1-1.org/drivers/media/radio/radio-si476x.c 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/radio/radio-si476x.c 2014-12-28 14:10:09.532888798 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/radio/radio-si476x.c backports-4.2.6-1/drivers/media/radio/radio-si476x.c +--- backports-4.2.6-1.org/drivers/media/radio/radio-si476x.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/radio/radio-si476x.c 2016-01-27 12:26:21.269959657 +0100 @@ -1445,7 +1445,7 @@ struct si476x_radio *radio; struct v4l2_ctrl *ctrl; @@ -399,9 +422,21 @@ diff -Naur backports-3.18.1-1.org/drivers/media/radio/radio-si476x.c backports-3 radio = devm_kzalloc(&pdev->dev, sizeof(*radio), GFP_KERNEL); if (!radio) -diff -Naur backports-3.18.1-1.org/drivers/media/usb/dvb-usb/cinergyT2-core.c backports-3.18.1-1/drivers/media/usb/dvb-usb/cinergyT2-core.c ---- backports-3.18.1-1.org/drivers/media/usb/dvb-usb/cinergyT2-core.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/usb/dvb-usb/cinergyT2-core.c 2014-12-28 14:10:09.532888798 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/radio/wl128x/fmdrv_common.c backports-4.2.6-1/drivers/media/radio/wl128x/fmdrv_common.c +--- backports-4.2.6-1.org/drivers/media/radio/wl128x/fmdrv_common.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/radio/wl128x/fmdrv_common.c 2016-01-27 12:26:21.269959657 +0100 +@@ -71,7 +71,7 @@ + MODULE_PARM_DESC(rds_buf, "RDS buffer entries"); + + /* Radio Nr */ +-static u32 radio_nr = -1; ++static int radio_nr = -1; + module_param(radio_nr, int, 0444); + MODULE_PARM_DESC(radio_nr, "Radio Nr"); + +diff -Naur backports-4.2.6-1.org/drivers/media/usb/dvb-usb/cinergyT2-core.c backports-4.2.6-1/drivers/media/usb/dvb-usb/cinergyT2-core.c +--- backports-4.2.6-1.org/drivers/media/usb/dvb-usb/cinergyT2-core.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/usb/dvb-usb/cinergyT2-core.c 2016-01-27 12:26:21.269959657 +0100 @@ -50,29 +50,73 @@ static int cinergyt2_streaming_ctrl(struct dvb_usb_adapter *adap, int enable) @@ -548,11 +583,11 @@ diff -Naur backports-3.18.1-1.org/drivers/media/usb/dvb-usb/cinergyT2-core.c bac return 0; } -diff -Naur backports-3.18.1-1.org/drivers/media/usb/dvb-usb/cinergyT2-fe.c backports-3.18.1-1/drivers/media/usb/dvb-usb/cinergyT2-fe.c ---- backports-3.18.1-1.org/drivers/media/usb/dvb-usb/cinergyT2-fe.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/usb/dvb-usb/cinergyT2-fe.c 2014-12-28 14:10:09.532888798 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/usb/dvb-usb/cinergyT2-fe.c backports-4.2.6-1/drivers/media/usb/dvb-usb/cinergyT2-fe.c +--- backports-4.2.6-1.org/drivers/media/usb/dvb-usb/cinergyT2-fe.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/usb/dvb-usb/cinergyT2-fe.c 2016-01-27 12:26:21.269959657 +0100 @@ -145,103 +145,176 @@ - fe_status_t *status) + enum fe_status *status) { struct cinergyt2_fe_state *state = fe->demodulator_priv; - struct dvbt_get_status_msg result; @@ -824,9 +859,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/usb/dvb-usb/cinergyT2-fe.c backp } static void cinergyt2_fe_release(struct dvb_frontend *fe) -diff -Naur backports-3.18.1-1.org/drivers/media/usb/dvb-usb/dvb-usb-firmware.c backports-3.18.1-1/drivers/media/usb/dvb-usb/dvb-usb-firmware.c ---- backports-3.18.1-1.org/drivers/media/usb/dvb-usb/dvb-usb-firmware.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/usb/dvb-usb/dvb-usb-firmware.c 2014-12-28 14:10:09.532888798 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/usb/dvb-usb/dvb-usb-firmware.c backports-4.2.6-1/drivers/media/usb/dvb-usb/dvb-usb-firmware.c +--- backports-4.2.6-1.org/drivers/media/usb/dvb-usb/dvb-usb-firmware.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/usb/dvb-usb/dvb-usb-firmware.c 2016-01-27 12:26:21.269959657 +0100 @@ -35,42 +35,57 @@ int usb_cypress_load_firmware(struct usb_device *udev, const struct firmware *fw, int type) @@ -896,21 +931,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/usb/dvb-usb/dvb-usb-firmware.c b return ret; } EXPORT_SYMBOL(usb_cypress_load_firmware); -diff -Naur backports-3.18.1-1.org/drivers/media/usb/dvb-usb/dw2102.c backports-3.18.1-1/drivers/media/usb/dvb-usb/dw2102.c ---- backports-3.18.1-1.org/drivers/media/usb/dvb-usb/dw2102.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/usb/dvb-usb/dw2102.c 2014-12-28 14:10:09.536888811 +0100 -@@ -118,7 +118,7 @@ - - struct s6x0_state { - int (*old_set_voltage)(struct dvb_frontend *f, fe_sec_voltage_t v); --}; -+} __no_const; - - /* debug */ - static int dvb_usb_dw2102_debug; -diff -Naur backports-3.18.1-1.org/drivers/media/usb/dvb-usb/technisat-usb2.c backports-3.18.1-1/drivers/media/usb/dvb-usb/technisat-usb2.c ---- backports-3.18.1-1.org/drivers/media/usb/dvb-usb/technisat-usb2.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/usb/dvb-usb/technisat-usb2.c 2014-12-28 14:10:09.536888811 +0100 +diff -Naur backports-4.2.6-1.org/drivers/media/usb/dvb-usb/technisat-usb2.c backports-4.2.6-1/drivers/media/usb/dvb-usb/technisat-usb2.c +--- backports-4.2.6-1.org/drivers/media/usb/dvb-usb/technisat-usb2.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/usb/dvb-usb/technisat-usb2.c 2016-01-27 12:26:21.269959657 +0100 @@ -87,8 +87,11 @@ static int technisat_usb2_i2c_access(struct usb_device *udev, u8 device_addr, u8 *tx, u8 txlen, u8 *rx, u8 rxlen) @@ -1063,7 +1086,7 @@ diff -Naur backports-3.18.1-1.org/drivers/media/usb/dvb-usb/technisat-usb2.c bac return 0; } -@@ -591,10 +615,15 @@ +@@ -594,10 +618,15 @@ static int technisat_usb2_get_ir(struct dvb_usb_device *d) { @@ -1080,7 +1103,7 @@ diff -Naur backports-3.18.1-1.org/drivers/media/usb/dvb-usb/technisat-usb2.c bac buf[0] = GET_IR_DATA_VENDOR_REQUEST; buf[1] = 0x08; buf[2] = 0x8f; -@@ -617,16 +646,20 @@ +@@ -620,16 +649,20 @@ GET_IR_DATA_VENDOR_REQUEST, USB_TYPE_VENDOR | USB_DIR_IN, 0x8080, 0, @@ -1104,7 +1127,7 @@ diff -Naur backports-3.18.1-1.org/drivers/media/usb/dvb-usb/technisat-usb2.c bac /* decoding */ b = buf+1; -@@ -653,6 +686,8 @@ +@@ -656,6 +689,8 @@ ir_raw_event_handle(d->rc_dev); @@ -1113,10 +1136,67 @@ diff -Naur backports-3.18.1-1.org/drivers/media/usb/dvb-usb/technisat-usb2.c bac return 1; } -diff -Naur backports-3.18.1-1.org/drivers/media/v4l2-core/v4l2-device.c backports-3.18.1-1/drivers/media/v4l2-core/v4l2-device.c ---- backports-3.18.1-1.org/drivers/media/v4l2-core/v4l2-device.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/v4l2-core/v4l2-device.c 2014-12-28 14:10:09.536888811 +0100 -@@ -75,9 +75,9 @@ +diff -Naur backports-4.2.6-1.org/drivers/media/v4l2-core/v4l2-compat-ioctl32.c backports-4.2.6-1/drivers/media/v4l2-core/v4l2-compat-ioctl32.c +--- backports-4.2.6-1.org/drivers/media/v4l2-core/v4l2-compat-ioctl32.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/v4l2-core/v4l2-compat-ioctl32.c 2016-01-27 12:26:21.269959657 +0100 +@@ -429,7 +429,7 @@ + * by passing a very big num_planes value */ + uplane = compat_alloc_user_space(num_planes * + sizeof(struct v4l2_plane)); +- kp->m.planes = (__force struct v4l2_plane *)uplane; ++ kp->m.planes = (__force_kernel struct v4l2_plane *)uplane; + + while (--num_planes >= 0) { + ret = get_v4l2_plane32(uplane, uplane32, kp->memory); +@@ -500,7 +500,7 @@ + if (num_planes == 0) + return 0; + +- uplane = (__force struct v4l2_plane __user *)kp->m.planes; ++ uplane = (struct v4l2_plane __force_user *)kp->m.planes; + if (get_user(p, &up->m.planes)) + return -EFAULT; + uplane32 = compat_ptr(p); +@@ -564,7 +564,7 @@ + get_user(kp->flags, &up->flags) || + copy_from_user(&kp->fmt, &up->fmt, sizeof(up->fmt))) + return -EFAULT; +- kp->base = (__force void *)compat_ptr(tmp); ++ kp->base = (__force_kernel void *)compat_ptr(tmp); + return 0; + } + +@@ -669,7 +669,7 @@ + n * sizeof(struct v4l2_ext_control32))) + return -EFAULT; + kcontrols = compat_alloc_user_space(n * sizeof(struct v4l2_ext_control)); +- kp->controls = (__force struct v4l2_ext_control *)kcontrols; ++ kp->controls = (__force_kernel struct v4l2_ext_control *)kcontrols; + while (--n >= 0) { + u32 id; + +@@ -696,7 +696,7 @@ + { + struct v4l2_ext_control32 __user *ucontrols; + struct v4l2_ext_control __user *kcontrols = +- (__force struct v4l2_ext_control __user *)kp->controls; ++ (struct v4l2_ext_control __force_user *)kp->controls; + int n = kp->count; + compat_caddr_t p; + +@@ -780,7 +780,7 @@ + get_user(tmp, &up->edid) || + copy_from_user(kp->reserved, up->reserved, sizeof(kp->reserved))) + return -EFAULT; +- kp->edid = (__force u8 *)compat_ptr(tmp); ++ kp->edid = (__force_kernel u8 *)compat_ptr(tmp); + return 0; + } + +diff -Naur backports-4.2.6-1.org/drivers/media/v4l2-core/v4l2-device.c backports-4.2.6-1/drivers/media/v4l2-core/v4l2-device.c +--- backports-4.2.6-1.org/drivers/media/v4l2-core/v4l2-device.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/v4l2-core/v4l2-device.c 2016-01-27 12:26:21.269959657 +0100 +@@ -74,9 +74,9 @@ EXPORT_SYMBOL_GPL(v4l2_device_put); int v4l2_device_set_name(struct v4l2_device *v4l2_dev, const char *basename, @@ -1128,10 +1208,10 @@ diff -Naur backports-3.18.1-1.org/drivers/media/v4l2-core/v4l2-device.c backport int len = strlen(basename); if (basename[len - 1] >= '0' && basename[len - 1] <= '9') -diff -Naur backports-3.18.1-1.org/drivers/media/v4l2-core/v4l2-ioctl.c backports-3.18.1-1/drivers/media/v4l2-core/v4l2-ioctl.c ---- backports-3.18.1-1.org/drivers/media/v4l2-core/v4l2-ioctl.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/media/v4l2-core/v4l2-ioctl.c 2014-12-28 14:10:09.536888811 +0100 -@@ -2142,7 +2142,8 @@ +diff -Naur backports-4.2.6-1.org/drivers/media/v4l2-core/v4l2-ioctl.c backports-4.2.6-1/drivers/media/v4l2-core/v4l2-ioctl.c +--- backports-4.2.6-1.org/drivers/media/v4l2-core/v4l2-ioctl.c 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/drivers/media/v4l2-core/v4l2-ioctl.c 2016-01-27 12:26:21.269959657 +0100 +@@ -2341,7 +2341,8 @@ struct file *file, void *fh, void *p); } u; void (*debug)(const void *arg, bool write_only); @@ -1141,7 +1221,7 @@ diff -Naur backports-3.18.1-1.org/drivers/media/v4l2-core/v4l2-ioctl.c backports /* This control needs a priority check */ #define INFO_FL_PRIO (1 << 0) -@@ -2326,7 +2327,7 @@ +@@ -2525,7 +2526,7 @@ struct video_device *vfd = video_devdata(file); const struct v4l2_ioctl_ops *ops = vfd->ioctl_ops; bool write_only = false; @@ -1150,7 +1230,7 @@ diff -Naur backports-3.18.1-1.org/drivers/media/v4l2-core/v4l2-ioctl.c backports const struct v4l2_ioctl_info *info; void *fh = file->private_data; struct v4l2_fh *vfh = NULL; -@@ -2413,7 +2414,7 @@ +@@ -2616,7 +2617,7 @@ ret = -EINVAL; break; } @@ -1159,7 +1239,7 @@ diff -Naur backports-3.18.1-1.org/drivers/media/v4l2-core/v4l2-ioctl.c backports *kernel_ptr = (void **)&buf->m.planes; *array_size = sizeof(struct v4l2_plane) * buf->length; ret = 1; -@@ -2430,7 +2431,7 @@ +@@ -2633,7 +2634,7 @@ ret = -EINVAL; break; } @@ -1168,7 +1248,7 @@ diff -Naur backports-3.18.1-1.org/drivers/media/v4l2-core/v4l2-ioctl.c backports *kernel_ptr = (void **)&edid->edid; *array_size = edid->blocks * 128; ret = 1; -@@ -2448,7 +2449,7 @@ +@@ -2651,7 +2652,7 @@ ret = -EINVAL; break; } @@ -1177,7 +1257,7 @@ diff -Naur backports-3.18.1-1.org/drivers/media/v4l2-core/v4l2-ioctl.c backports *kernel_ptr = (void **)&ctrls->controls; *array_size = sizeof(struct v4l2_ext_control) * ctrls->count; -@@ -2549,7 +2550,7 @@ +@@ -2752,7 +2753,7 @@ } if (has_array_args) { @@ -1186,21 +1266,9 @@ diff -Naur backports-3.18.1-1.org/drivers/media/v4l2-core/v4l2-ioctl.c backports if (copy_to_user(user_ptr, mbuf, array_size)) err = -EFAULT; goto out_array_args; -diff -Naur backports-3.18.1-1.org/drivers/net/ieee802154/fakehard.c backports-3.18.1-1/drivers/net/ieee802154/fakehard.c ---- backports-3.18.1-1.org/drivers/net/ieee802154/fakehard.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/ieee802154/fakehard.c 2014-12-28 14:10:09.556888909 +0100 -@@ -365,7 +365,7 @@ - phy->transmit_power = 0xbf; - - dev->netdev_ops = &fake_ops; -- dev->ml_priv = &fake_mlme; -+ dev->ml_priv = (void *)&fake_mlme; - - priv = netdev_priv(dev); - priv->phy = phy; -diff -Naur backports-3.18.1-1.org/drivers/net/usb/sierra_net.c backports-3.18.1-1/drivers/net/usb/sierra_net.c ---- backports-3.18.1-1.org/drivers/net/usb/sierra_net.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/usb/sierra_net.c 2014-12-28 14:10:09.560888936 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/usb/sierra_net.c backports-4.2.6-1/drivers/net/usb/sierra_net.c +--- backports-4.2.6-1.org/drivers/net/usb/sierra_net.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/usb/sierra_net.c 2016-01-27 12:26:21.283292990 +0100 @@ -51,7 +51,7 @@ /* atomic counter partially included in MAC address to make sure 2 devices * do not end up with the same MAC - concept breaks in case of > 255 ifaces @@ -1219,9 +1287,21 @@ diff -Naur backports-3.18.1-1.org/drivers/net/usb/sierra_net.c backports-3.18.1- dev->net->dev_addr[ETH_ALEN-1] = ifacenum; /* we will have to manufacture ethernet headers, prepare template */ -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/at76c50x-usb.c backports-3.18.1-1/drivers/net/wireless/at76c50x-usb.c ---- backports-3.18.1-1.org/drivers/net/wireless/at76c50x-usb.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/at76c50x-usb.c 2014-12-28 14:10:09.560888936 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/airo.c backports-4.2.6-1/drivers/net/wireless/airo.c +--- backports-4.2.6-1.org/drivers/net/wireless/airo.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/airo.c 2016-01-27 12:26:21.286626323 +0100 +@@ -7846,7 +7846,7 @@ + struct airo_info *ai = dev->ml_priv; + int ridcode; + int enabled; +- static int (* writer)(struct airo_info *, u16 rid, const void *, int, int); ++ int (* writer)(struct airo_info *, u16 rid, const void *, int, int); + unsigned char *iobuf; + + /* Only super-user can write RIDs */ +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/at76c50x-usb.c backports-4.2.6-1/drivers/net/wireless/at76c50x-usb.c +--- backports-4.2.6-1.org/drivers/net/wireless/at76c50x-usb.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/at76c50x-usb.c 2016-01-27 12:26:21.286626323 +0100 @@ -353,7 +353,7 @@ } @@ -1231,10 +1311,37 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/at76c50x-usb.c backports- { return msecs_to_jiffies((s->poll_timeout[2] << 16) | (s->poll_timeout[1] << 8) -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ath/ath10k/htc.c backports-3.18.1-1/drivers/net/wireless/ath/ath10k/htc.c ---- backports-3.18.1-1.org/drivers/net/wireless/ath/ath10k/htc.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/ath/ath10k/htc.c 2014-12-28 14:10:09.560888936 +0100 -@@ -848,7 +848,10 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/ath/ath10k/ce.c backports-4.2.6-1/drivers/net/wireless/ath/ath10k/ce.c +--- backports-4.2.6-1.org/drivers/net/wireless/ath/ath10k/ce.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/ath/ath10k/ce.c 2016-01-27 12:26:21.286626323 +0100 +@@ -896,12 +896,12 @@ + return 0; + } + +-static struct ath10k_ce_ring * ++static struct ath10k_ce_ring * __intentional_overflow(-1) + ath10k_ce_alloc_src_ring(struct ath10k *ar, unsigned int ce_id, + const struct ce_attr *attr) + { + struct ath10k_ce_ring *src_ring; +- u32 nentries = attr->src_nentries; ++ unsigned long nentries = attr->src_nentries; + dma_addr_t base_addr; + + nentries = roundup_pow_of_two(nentries); +@@ -968,7 +968,7 @@ + const struct ce_attr *attr) + { + struct ath10k_ce_ring *dest_ring; +- u32 nentries; ++ unsigned long nentries; + dma_addr_t base_addr; + + nentries = roundup_pow_of_two(attr->dest_nentries); +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/ath/ath10k/htc.c backports-4.2.6-1/drivers/net/wireless/ath/ath10k/htc.c +--- backports-4.2.6-1.org/drivers/net/wireless/ath/ath10k/htc.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/ath/ath10k/htc.c 2016-01-27 12:26:21.286626323 +0100 +@@ -841,7 +841,10 @@ /* registered target arrival callback from the HIF layer */ int ath10k_htc_init(struct ath10k *ar) { @@ -1246,7 +1353,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ath/ath10k/htc.c backport struct ath10k_htc_ep *ep = NULL; struct ath10k_htc *htc = &ar->htc; -@@ -857,8 +860,6 @@ +@@ -850,8 +853,6 @@ ath10k_htc_reset_endpoint_states(htc); /* setup HIF layer callbacks */ @@ -1255,9 +1362,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ath/ath10k/htc.c backport htc->ar = ar; /* Get HIF default pipe for HTC message exchange */ -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ath/ath10k/htc.h backports-3.18.1-1/drivers/net/wireless/ath/ath10k/htc.h ---- backports-3.18.1-1.org/drivers/net/wireless/ath/ath10k/htc.h 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/ath/ath10k/htc.h 2014-12-28 14:10:09.560888936 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/ath/ath10k/htc.h backports-4.2.6-1/drivers/net/wireless/ath/ath10k/htc.h +--- backports-4.2.6-1.org/drivers/net/wireless/ath/ath10k/htc.h 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/ath/ath10k/htc.h 2016-01-27 12:26:21.286626323 +0100 @@ -270,13 +270,13 @@ struct ath10k_htc_ops { @@ -1274,9 +1381,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ath/ath10k/htc.h backport /* service connection information */ struct ath10k_htc_svc_conn_req { -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ath/ath9k/ar9002_mac.c backports-3.18.1-1/drivers/net/wireless/ath/ath9k/ar9002_mac.c ---- backports-3.18.1-1.org/drivers/net/wireless/ath/ath9k/ar9002_mac.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/ath/ath9k/ar9002_mac.c 2014-12-28 14:10:09.560888936 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/ath/ath9k/ar9002_mac.c backports-4.2.6-1/drivers/net/wireless/ath/ath9k/ar9002_mac.c +--- backports-4.2.6-1.org/drivers/net/wireless/ath/ath9k/ar9002_mac.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/ath/ath9k/ar9002_mac.c 2016-01-27 12:26:21.286626323 +0100 @@ -220,8 +220,8 @@ ads->ds_txstatus6 = ads->ds_txstatus7 = 0; ads->ds_txstatus8 = ads->ds_txstatus9 = 0; @@ -1329,7 +1436,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ath/ath9k/ar9002_mac.c ba - ACCESS_ONCE(ads->ds_ctl0) = (i->pkt_len & AR_FrameLen) + ACCESS_ONCE_RW(ads->ds_ctl0) = (i->pkt_len & AR_FrameLen) | (i->flags & ATH9K_TXDESC_VMF ? AR_VirtMoreFrag : 0) - | SM(i->txpower, AR_XmitPower0) + | SM(i->txpower[0], AR_XmitPower0) | (i->flags & ATH9K_TXDESC_VEOL ? AR_VEOL : 0) @@ -289,27 +289,27 @@ | (i->flags & ATH9K_TXDESC_RTSENA ? AR_RTSEnable : @@ -1358,18 +1465,18 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ath/ath9k/ar9002_mac.c ba | set11nRateFlags(i->rates, 3) | SM(i->rtscts_rate, AR_RTSCTSRate); -- ACCESS_ONCE(ads->ds_ctl9) = SM(i->txpower, AR_XmitPower1); -- ACCESS_ONCE(ads->ds_ctl10) = SM(i->txpower, AR_XmitPower2); -- ACCESS_ONCE(ads->ds_ctl11) = SM(i->txpower, AR_XmitPower3); -+ ACCESS_ONCE_RW(ads->ds_ctl9) = SM(i->txpower, AR_XmitPower1); -+ ACCESS_ONCE_RW(ads->ds_ctl10) = SM(i->txpower, AR_XmitPower2); -+ ACCESS_ONCE_RW(ads->ds_ctl11) = SM(i->txpower, AR_XmitPower3); +- ACCESS_ONCE(ads->ds_ctl9) = SM(i->txpower[1], AR_XmitPower1); +- ACCESS_ONCE(ads->ds_ctl10) = SM(i->txpower[2], AR_XmitPower2); +- ACCESS_ONCE(ads->ds_ctl11) = SM(i->txpower[3], AR_XmitPower3); ++ ACCESS_ONCE_RW(ads->ds_ctl9) = SM(i->txpower[1], AR_XmitPower1); ++ ACCESS_ONCE_RW(ads->ds_ctl10) = SM(i->txpower[2], AR_XmitPower2); ++ ACCESS_ONCE_RW(ads->ds_ctl11) = SM(i->txpower[3], AR_XmitPower3); } static int ar9002_hw_proc_txdesc(struct ath_hw *ah, void *ds, -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ath/ath9k/ar9003_mac.c backports-3.18.1-1/drivers/net/wireless/ath/ath9k/ar9003_mac.c ---- backports-3.18.1-1.org/drivers/net/wireless/ath/ath9k/ar9003_mac.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/ath/ath9k/ar9003_mac.c 2014-12-28 14:10:09.560888936 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/ath/ath9k/ar9003_mac.c backports-4.2.6-1/drivers/net/wireless/ath/ath9k/ar9003_mac.c +--- backports-4.2.6-1.org/drivers/net/wireless/ath/ath9k/ar9003_mac.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/ath/ath9k/ar9003_mac.c 2016-01-27 12:26:21.286626323 +0100 @@ -39,47 +39,47 @@ (i->qcu << AR_TxQcuNum_S) | desc_len; @@ -1457,7 +1564,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ath/ath9k/ar9003_mac.c ba - ACCESS_ONCE(ads->ctl11) = (i->pkt_len & AR_FrameLen) + ACCESS_ONCE_RW(ads->ctl11) = (i->pkt_len & AR_FrameLen) | (i->flags & ATH9K_TXDESC_VMF ? AR_VirtMoreFrag : 0) - | SM(i->txpower, AR_XmitPower0) + | SM(i->txpower[0], AR_XmitPower0) | (i->flags & ATH9K_TXDESC_VEOL ? AR_VEOL : 0) @@ -135,26 +135,26 @@ val = (i->flags & ATH9K_TXDESC_PAPRD) >> ATH9K_TXDESC_PAPRD_S; @@ -1486,28 +1593,28 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ath/ath9k/ar9003_mac.c ba - ACCESS_ONCE(ads->ctl19) = AR_Not_Sounding; + ACCESS_ONCE_RW(ads->ctl19) = AR_Not_Sounding; -- ACCESS_ONCE(ads->ctl20) = SM(i->txpower, AR_XmitPower1); -- ACCESS_ONCE(ads->ctl21) = SM(i->txpower, AR_XmitPower2); -- ACCESS_ONCE(ads->ctl22) = SM(i->txpower, AR_XmitPower3); -+ ACCESS_ONCE_RW(ads->ctl20) = SM(i->txpower, AR_XmitPower1); -+ ACCESS_ONCE_RW(ads->ctl21) = SM(i->txpower, AR_XmitPower2); -+ ACCESS_ONCE_RW(ads->ctl22) = SM(i->txpower, AR_XmitPower3); +- ACCESS_ONCE(ads->ctl20) = SM(i->txpower[1], AR_XmitPower1); +- ACCESS_ONCE(ads->ctl21) = SM(i->txpower[2], AR_XmitPower2); +- ACCESS_ONCE(ads->ctl22) = SM(i->txpower[3], AR_XmitPower3); ++ ACCESS_ONCE_RW(ads->ctl20) = SM(i->txpower[1], AR_XmitPower1); ++ ACCESS_ONCE_RW(ads->ctl21) = SM(i->txpower[2], AR_XmitPower2); ++ ACCESS_ONCE_RW(ads->ctl22) = SM(i->txpower[3], AR_XmitPower3); } static u16 ar9003_calc_ptr_chksum(struct ar9003_txc *ads) -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ath/ath9k/hw.h backports-3.18.1-1/drivers/net/wireless/ath/ath9k/hw.h ---- backports-3.18.1-1.org/drivers/net/wireless/ath/ath9k/hw.h 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/ath/ath9k/hw.h 2014-12-28 14:10:09.564888946 +0100 -@@ -630,7 +630,7 @@ - - /* ANI */ - void (*ani_cache_ini_regs)(struct ath_hw *ah); +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/ath/ath9k/hw.h backports-4.2.6-1/drivers/net/wireless/ath/ath9k/hw.h +--- backports-4.2.6-1.org/drivers/net/wireless/ath/ath9k/hw.h 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/ath/ath9k/hw.h 2016-01-27 12:33:44.649931973 +0100 +@@ -671,7 +671,7 @@ + #ifdef CPTCFG_ATH9K_BTCOEX_SUPPORT + bool (*is_aic_enabled)(struct ath_hw *ah); + #endif /* CPTCFG_ATH9K_BTCOEX_SUPPORT */ -}; +} __no_const; /** * struct ath_spec_scan - parameters for Atheros spectral scan -@@ -708,7 +708,7 @@ +@@ -747,7 +747,7 @@ #ifdef CPTCFG_ATH9K_BTCOEX_SUPPORT void (*set_bt_ant_diversity)(struct ath_hw *hw, bool enable); #endif @@ -1516,10 +1623,21 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ath/ath9k/hw.h backports- struct ath_nf_limits { s16 max; -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ath/ath9k/main.c backports-3.18.1-1/drivers/net/wireless/ath/ath9k/main.c ---- backports-3.18.1-1.org/drivers/net/wireless/ath/ath9k/main.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/ath/ath9k/main.c 2014-12-28 14:24:49.169250593 +0100 -@@ -2454,16 +2454,18 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/ath/ath9k/Kconfig backports-4.2.6-1/drivers/net/wireless/ath/ath9k/Kconfig +--- backports-4.2.6-1.org/drivers/net/wireless/ath/ath9k/Kconfig 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/ath/ath9k/Kconfig 2016-01-27 12:34:48.923262299 +0100 +@@ -5,7 +5,6 @@ + tristate + depends on m + select ATH_COMMON +- depends on DEBUG_FS + depends on RELAY + config ATH9K_DFS_DEBUGFS + def_bool y +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/ath/ath9k/main.c backports-4.2.6-1/drivers/net/wireless/ath/ath9k/main.c +--- backports-4.2.6-1.org/drivers/net/wireless/ath/ath9k/main.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/ath/ath9k/main.c 2016-01-27 12:26:21.289959656 +0100 +@@ -2574,16 +2574,18 @@ if (!ath9k_is_chanctx_enabled()) return; @@ -1548,9 +1666,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ath/ath9k/main.c backport } #endif -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/b43/phy_lp.c backports-3.18.1-1/drivers/net/wireless/b43/phy_lp.c ---- backports-3.18.1-1.org/drivers/net/wireless/b43/phy_lp.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/b43/phy_lp.c 2014-12-28 14:10:09.564888946 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/b43/phy_lp.c backports-4.2.6-1/drivers/net/wireless/b43/phy_lp.c +--- backports-4.2.6-1.org/drivers/net/wireless/b43/phy_lp.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/b43/phy_lp.c 2016-01-27 12:26:21.289959656 +0100 @@ -2502,7 +2502,7 @@ { struct ssb_bus *bus = dev->dev->sdev->bus; @@ -1560,9 +1678,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/b43/phy_lp.c backports-3. u32 crystal_freq = bus->chipco.pmu.crystalfreq * 1000; u32 freqref, vco_freq, val1, val2, val3, timeout, timeoutref, count; u16 old_comm15, scale; -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/iwlegacy/3945-mac.c backports-3.18.1-1/drivers/net/wireless/iwlegacy/3945-mac.c ---- backports-3.18.1-1.org/drivers/net/wireless/iwlegacy/3945-mac.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/iwlegacy/3945-mac.c 2014-12-28 14:10:09.564888946 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/iwlegacy/3945-mac.c backports-4.2.6-1/drivers/net/wireless/iwlegacy/3945-mac.c +--- backports-4.2.6-1.org/drivers/net/wireless/iwlegacy/3945-mac.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/iwlegacy/3945-mac.c 2016-01-27 12:26:21.289959656 +0100 @@ -3633,7 +3633,9 @@ */ if (il3945_mod_params.disable_hw_scan) { @@ -1574,9 +1692,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/iwlegacy/3945-mac.c backp } D_INFO("*** LOAD DRIVER ***\n"); -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/iwlwifi/dvm/debugfs.c backports-3.18.1-1/drivers/net/wireless/iwlwifi/dvm/debugfs.c ---- backports-3.18.1-1.org/drivers/net/wireless/iwlwifi/dvm/debugfs.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/iwlwifi/dvm/debugfs.c 2014-12-28 14:10:09.564888946 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/iwlwifi/dvm/debugfs.c backports-4.2.6-1/drivers/net/wireless/iwlwifi/dvm/debugfs.c +--- backports-4.2.6-1.org/drivers/net/wireless/iwlwifi/dvm/debugfs.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/iwlwifi/dvm/debugfs.c 2016-01-27 12:26:21.289959656 +0100 @@ -188,7 +188,7 @@ { struct iwl_priv *priv = file->private_data; @@ -1709,10 +1827,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/iwlwifi/dvm/debugfs.c bac memset(buf, 0, sizeof(buf)); buf_size = min(count, sizeof(buf) - 1); -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/iwlwifi/pcie/trans.c backports-3.18.1-1/drivers/net/wireless/iwlwifi/pcie/trans.c ---- backports-3.18.1-1.org/drivers/net/wireless/iwlwifi/pcie/trans.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/iwlwifi/pcie/trans.c 2014-12-28 14:10:09.564888946 +0100 -@@ -1689,7 +1689,7 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/iwlwifi/pcie/trans.c backports-4.2.6-1/drivers/net/wireless/iwlwifi/pcie/trans.c +--- backports-4.2.6-1.org/drivers/net/wireless/iwlwifi/pcie/trans.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/iwlwifi/pcie/trans.c 2016-01-27 12:26:21.289959656 +0100 +@@ -1950,7 +1950,7 @@ struct isr_statistics *isr_stats = &trans_pcie->isr_stats; char buf[8]; @@ -1721,7 +1839,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/iwlwifi/pcie/trans.c back u32 reset_flag; memset(buf, 0, sizeof(buf)); -@@ -1710,7 +1710,7 @@ +@@ -1971,7 +1971,7 @@ { struct iwl_trans *trans = file->private_data; char buf[8]; @@ -1730,10 +1848,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/iwlwifi/pcie/trans.c back int csr; memset(buf, 0, sizeof(buf)); -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/mac80211_hwsim.c backports-3.18.1-1/drivers/net/wireless/mac80211_hwsim.c ---- backports-3.18.1-1.org/drivers/net/wireless/mac80211_hwsim.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/mac80211_hwsim.c 2014-12-28 14:10:09.568888967 +0100 -@@ -2578,20 +2578,20 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/mac80211_hwsim.c backports-4.2.6-1/drivers/net/wireless/mac80211_hwsim.c +--- backports-4.2.6-1.org/drivers/net/wireless/mac80211_hwsim.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/mac80211_hwsim.c 2016-01-27 12:26:21.289959656 +0100 +@@ -3150,20 +3150,20 @@ if (channels < 1) return -EINVAL; @@ -1768,9 +1886,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/mac80211_hwsim.c backport spin_lock_init(&hwsim_radio_lock); INIT_LIST_HEAD(&hwsim_radios); -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/rndis_wlan.c backports-3.18.1-1/drivers/net/wireless/rndis_wlan.c ---- backports-3.18.1-1.org/drivers/net/wireless/rndis_wlan.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/rndis_wlan.c 2014-12-28 14:10:09.568888967 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/rndis_wlan.c backports-4.2.6-1/drivers/net/wireless/rndis_wlan.c +--- backports-4.2.6-1.org/drivers/net/wireless/rndis_wlan.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/rndis_wlan.c 2016-01-27 12:26:21.293292990 +0100 @@ -1236,7 +1236,7 @@ netdev_dbg(usbdev->net, "%s(): %i\n", __func__, rts_threshold); @@ -1780,9 +1898,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/rndis_wlan.c backports-3. rts_threshold = 2347; tmp = cpu_to_le32(rts_threshold); -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/rt2x00/rt2x00.h backports-3.18.1-1/drivers/net/wireless/rt2x00/rt2x00.h ---- backports-3.18.1-1.org/drivers/net/wireless/rt2x00/rt2x00.h 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/rt2x00/rt2x00.h 2014-12-28 14:10:09.568888967 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/rt2x00/rt2x00.h backports-4.2.6-1/drivers/net/wireless/rt2x00/rt2x00.h +--- backports-4.2.6-1.org/drivers/net/wireless/rt2x00/rt2x00.h 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/rt2x00/rt2x00.h 2016-01-27 12:26:21.293292990 +0100 @@ -375,7 +375,7 @@ * for hardware which doesn't support hardware * sequence counting. @@ -1792,9 +1910,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/rt2x00/rt2x00.h backports }; static inline struct rt2x00_intf* vif_to_intf(struct ieee80211_vif *vif) -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/rt2x00/rt2x00queue.c backports-3.18.1-1/drivers/net/wireless/rt2x00/rt2x00queue.c ---- backports-3.18.1-1.org/drivers/net/wireless/rt2x00/rt2x00queue.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/rt2x00/rt2x00queue.c 2014-12-28 14:10:09.568888967 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/rt2x00/rt2x00queue.c backports-4.2.6-1/drivers/net/wireless/rt2x00/rt2x00queue.c +--- backports-4.2.6-1.org/drivers/net/wireless/rt2x00/rt2x00queue.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/rt2x00/rt2x00queue.c 2016-01-27 12:26:21.293292990 +0100 @@ -224,9 +224,9 @@ * sequence counter given by mac80211. */ @@ -1807,9 +1925,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/rt2x00/rt2x00queue.c back hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG); hdr->seq_ctrl |= cpu_to_le16(seqno); -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ti/wl1251/sdio.c backports-3.18.1-1/drivers/net/wireless/ti/wl1251/sdio.c ---- backports-3.18.1-1.org/drivers/net/wireless/ti/wl1251/sdio.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/ti/wl1251/sdio.c 2014-12-28 14:10:09.568888967 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/ti/wl1251/sdio.c backports-4.2.6-1/drivers/net/wireless/ti/wl1251/sdio.c +--- backports-4.2.6-1.org/drivers/net/wireless/ti/wl1251/sdio.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/ti/wl1251/sdio.c 2016-01-27 12:26:21.293292990 +0100 @@ -282,13 +282,17 @@ irq_set_irq_type(wl->irq, IRQ_TYPE_EDGE_RISING); @@ -1832,10 +1950,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ti/wl1251/sdio.c backport wl1251_info("using SDIO interrupt"); } -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ti/wl12xx/main.c backports-3.18.1-1/drivers/net/wireless/ti/wl12xx/main.c ---- backports-3.18.1-1.org/drivers/net/wireless/ti/wl12xx/main.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/ti/wl12xx/main.c 2014-12-28 14:10:09.568888967 +0100 -@@ -656,7 +656,9 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/ti/wl12xx/main.c backports-4.2.6-1/drivers/net/wireless/ti/wl12xx/main.c +--- backports-4.2.6-1.org/drivers/net/wireless/ti/wl12xx/main.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/ti/wl12xx/main.c 2016-01-27 12:26:21.293292990 +0100 +@@ -655,7 +655,9 @@ sizeof(wl->conf.mem)); /* read data preparation is only needed by wl127x */ @@ -1846,7 +1964,7 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ti/wl12xx/main.c backport wlcore_set_min_fw_ver(wl, WL127X_CHIP_VER, WL127X_IFTYPE_SR_VER, WL127X_MAJOR_SR_VER, -@@ -681,7 +683,9 @@ +@@ -680,7 +682,9 @@ sizeof(wl->conf.mem)); /* read data preparation is only needed by wl127x */ @@ -1857,10 +1975,10 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ti/wl12xx/main.c backport wlcore_set_min_fw_ver(wl, WL127X_CHIP_VER, WL127X_IFTYPE_SR_VER, WL127X_MAJOR_SR_VER, -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ti/wl18xx/main.c backports-3.18.1-1/drivers/net/wireless/ti/wl18xx/main.c ---- backports-3.18.1-1.org/drivers/net/wireless/ti/wl18xx/main.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/ti/wl18xx/main.c 2014-12-28 14:10:09.568888967 +0100 -@@ -1916,8 +1916,10 @@ +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/ti/wl18xx/main.c backports-4.2.6-1/drivers/net/wireless/ti/wl18xx/main.c +--- backports-4.2.6-1.org/drivers/net/wireless/ti/wl18xx/main.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/ti/wl18xx/main.c 2016-01-27 12:26:21.293292990 +0100 +@@ -1952,8 +1952,10 @@ } if (!checksum_param) { @@ -1873,9 +1991,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/ti/wl18xx/main.c backport } /* Enable 11a Band only if we have 5G antennas */ -diff -Naur backports-3.18.1-1.org/drivers/net/wireless/zd1211rw/zd_usb.c backports-3.18.1-1/drivers/net/wireless/zd1211rw/zd_usb.c ---- backports-3.18.1-1.org/drivers/net/wireless/zd1211rw/zd_usb.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/net/wireless/zd1211rw/zd_usb.c 2014-12-28 14:10:09.568888967 +0100 +diff -Naur backports-4.2.6-1.org/drivers/net/wireless/zd1211rw/zd_usb.c backports-4.2.6-1/drivers/net/wireless/zd1211rw/zd_usb.c +--- backports-4.2.6-1.org/drivers/net/wireless/zd1211rw/zd_usb.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/net/wireless/zd1211rw/zd_usb.c 2016-01-27 12:26:21.293292990 +0100 @@ -385,7 +385,7 @@ { struct zd_usb *usb = urb->context; @@ -1885,9 +2003,9 @@ diff -Naur backports-3.18.1-1.org/drivers/net/wireless/zd1211rw/zd_usb.c backpor u16 int_num; ZD_ASSERT(in_interrupt()); -diff -Naur backports-3.18.1-1.org/drivers/nfc/nfcwilink.c backports-3.18.1-1/drivers/nfc/nfcwilink.c ---- backports-3.18.1-1.org/drivers/nfc/nfcwilink.c 2014-12-21 22:37:14.000000000 +0100 -+++ backports-3.18.1-1/drivers/nfc/nfcwilink.c 2014-12-28 14:10:09.568888967 +0100 +diff -Naur backports-4.2.6-1.org/drivers/nfc/nfcwilink.c backports-4.2.6-1/drivers/nfc/nfcwilink.c +--- backports-4.2.6-1.org/drivers/nfc/nfcwilink.c 2015-11-15 22:19:39.000000000 +0100 ++++ backports-4.2.6-1/drivers/nfc/nfcwilink.c 2016-01-27 12:26:21.293292990 +0100 @@ -497,7 +497,7 @@ static int nfcwilink_probe(struct platform_device *pdev) @@ -1897,9 +2015,9 @@ diff -Naur backports-3.18.1-1.org/drivers/nfc/nfcwilink.c backports-3.18.1-1/dri int rc; __u32 protocols; -diff -Naur backports-3.18.1-1.org/include/linux/gracl_compat.h backports-3.18.1-1/include/linux/gracl_compat.h ---- backports-3.18.1-1.org/include/linux/gracl_compat.h 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/include/linux/gracl_compat.h 2014-12-28 14:10:09.684889542 +0100 +diff -Naur backports-4.2.6-1.org/include/linux/gracl_compat.h backports-4.2.6-1/include/linux/gracl_compat.h +--- backports-4.2.6-1.org/include/linux/gracl_compat.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/include/linux/gracl_compat.h 2016-01-27 12:26:26.289959354 +0100 @@ -0,0 +1,156 @@ +#ifndef GR_ACL_COMPAT_H +#define GR_ACL_COMPAT_H @@ -1924,7 +2042,7 @@ diff -Naur backports-3.18.1-1.org/include/linux/gracl_compat.h backports-3.18.1- + +struct acl_subject_label_compat { + compat_uptr_t filename; -+ compat_ino_t inode; ++ compat_u64 inode; + __u32 device; + __u32 mode; + kernel_cap_t cap_mask; @@ -2012,7 +2130,7 @@ diff -Naur backports-3.18.1-1.org/include/linux/gracl_compat.h backports-3.18.1- + +struct acl_object_label_compat { + compat_uptr_t filename; -+ compat_ino_t inode; ++ compat_u64 inode; + __u32 device; + __u32 mode; + @@ -2044,7 +2162,7 @@ diff -Naur backports-3.18.1-1.org/include/linux/gracl_compat.h backports-3.18.1- + unsigned char sp_role[GR_SPROLE_LEN]; + compat_uptr_t sprole_pws; + __u32 segv_device; -+ compat_ino_t segv_inode; ++ compat_u64 segv_inode; + uid_t segv_uid; + __u16 num_sprole_pws; + __u16 mode; @@ -2057,10 +2175,10 @@ diff -Naur backports-3.18.1-1.org/include/linux/gracl_compat.h backports-3.18.1- +}; + +#endif -diff -Naur backports-3.18.1-1.org/include/linux/gracl.h backports-3.18.1-1/include/linux/gracl.h ---- backports-3.18.1-1.org/include/linux/gracl.h 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/include/linux/gracl.h 2014-12-28 14:10:09.684889542 +0100 -@@ -0,0 +1,340 @@ +diff -Naur backports-4.2.6-1.org/include/linux/gracl.h backports-4.2.6-1/include/linux/gracl.h +--- backports-4.2.6-1.org/include/linux/gracl.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/include/linux/gracl.h 2016-01-27 12:26:26.289959354 +0100 +@@ -0,0 +1,342 @@ +#ifndef GR_ACL_H +#define GR_ACL_H + @@ -2072,8 +2190,8 @@ diff -Naur backports-3.18.1-1.org/include/linux/gracl.h backports-3.18.1-1/inclu + +/* Major status information */ + -+#define GR_VERSION "grsecurity 3.0" -+#define GRSECURITY_VERSION 0x3000 ++#define GR_VERSION "grsecurity 3.1" ++#define GRSECURITY_VERSION 0x3100 + +enum { + GR_SHUTDOWN = 0, @@ -2118,7 +2236,7 @@ diff -Naur backports-3.18.1-1.org/include/linux/gracl.h backports-3.18.1-1/inclu + +struct name_entry { + __u32 key; -+ ino_t inode; ++ u64 inode; + dev_t device; + char *name; + __u16 len; @@ -2166,7 +2284,7 @@ diff -Naur backports-3.18.1-1.org/include/linux/gracl.h backports-3.18.1-1/inclu + +struct acl_subject_label { + char *filename; -+ ino_t inode; ++ u64 inode; + dev_t device; + __u32 mode; + kernel_cap_t cap_mask; @@ -2254,7 +2372,7 @@ diff -Naur backports-3.18.1-1.org/include/linux/gracl.h backports-3.18.1-1/inclu + +struct acl_object_label { + char *filename; -+ ino_t inode; ++ u64 inode; + dev_t device; + __u32 mode; + @@ -2290,7 +2408,7 @@ diff -Naur backports-3.18.1-1.org/include/linux/gracl.h backports-3.18.1-1/inclu + unsigned char sp_role[GR_SPROLE_LEN]; + struct sprole_pw *sprole_pws; + dev_t segv_device; -+ ino_t segv_inode; ++ u64 segv_inode; + uid_t segv_uid; + __u16 num_sprole_pws; + __u16 mode; @@ -2362,9 +2480,11 @@ diff -Naur backports-3.18.1-1.org/include/linux/gracl.h backports-3.18.1-1/inclu +} + +static __inline__ unsigned int -+gr_fhash(const ino_t ino, const dev_t dev, const unsigned int sz) ++gr_fhash(const u64 ino, const dev_t dev, const unsigned int sz) +{ -+ return (((ino + dev) ^ ((ino << 13) + (ino << 23) + (dev << 9))) % sz); ++ unsigned int rem; ++ div_u64_rem((ino + dev) ^ ((ino << 13) + (ino << 23) + (dev << 9)), sz, &rem); ++ return rem; +} + +static __inline__ unsigned int @@ -2401,9 +2521,9 @@ diff -Naur backports-3.18.1-1.org/include/linux/gracl.h backports-3.18.1-1/inclu + +#endif + -diff -Naur backports-3.18.1-1.org/include/linux/gralloc.h backports-3.18.1-1/include/linux/gralloc.h ---- backports-3.18.1-1.org/include/linux/gralloc.h 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/include/linux/gralloc.h 2014-12-28 14:10:09.684889542 +0100 +diff -Naur backports-4.2.6-1.org/include/linux/gralloc.h backports-4.2.6-1/include/linux/gralloc.h +--- backports-4.2.6-1.org/include/linux/gralloc.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/include/linux/gralloc.h 2016-01-27 12:26:26.289959354 +0100 @@ -0,0 +1,9 @@ +#ifndef __GRALLOC_H +#define __GRALLOC_H @@ -2414,9 +2534,9 @@ diff -Naur backports-3.18.1-1.org/include/linux/gralloc.h backports-3.18.1-1/inc +void *acl_alloc_num(unsigned long num, unsigned long len); + +#endif -diff -Naur backports-3.18.1-1.org/include/linux/grdefs.h backports-3.18.1-1/include/linux/grdefs.h ---- backports-3.18.1-1.org/include/linux/grdefs.h 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/include/linux/grdefs.h 2014-12-28 14:10:09.688889562 +0100 +diff -Naur backports-4.2.6-1.org/include/linux/grdefs.h backports-4.2.6-1/include/linux/grdefs.h +--- backports-4.2.6-1.org/include/linux/grdefs.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/include/linux/grdefs.h 2016-01-27 12:26:26.289959354 +0100 @@ -0,0 +1,140 @@ +#ifndef GRDEFS_H +#define GRDEFS_H @@ -2558,10 +2678,10 @@ diff -Naur backports-3.18.1-1.org/include/linux/grdefs.h backports-3.18.1-1/incl +}; + +#endif -diff -Naur backports-3.18.1-1.org/include/linux/grinternal.h backports-3.18.1-1/include/linux/grinternal.h ---- backports-3.18.1-1.org/include/linux/grinternal.h 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/include/linux/grinternal.h 2014-12-28 14:10:09.688889562 +0100 -@@ -0,0 +1,229 @@ +diff -Naur backports-4.2.6-1.org/include/linux/grinternal.h backports-4.2.6-1/include/linux/grinternal.h +--- backports-4.2.6-1.org/include/linux/grinternal.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/include/linux/grinternal.h 2016-01-27 12:26:26.289959354 +0100 +@@ -0,0 +1,230 @@ +#ifndef __GRINTERNAL_H +#define __GRINTERNAL_H + @@ -2621,6 +2741,7 @@ diff -Naur backports-3.18.1-1.org/include/linux/grinternal.h backports-3.18.1-1/ +extern int grsec_enable_chroot_nice; +extern int grsec_enable_chroot_execlog; +extern int grsec_enable_chroot_caps; ++extern int grsec_enable_chroot_rename; +extern int grsec_enable_chroot_sysctl; +extern int grsec_enable_chroot_unix; +extern int grsec_enable_symlinkown; @@ -2774,7 +2895,7 @@ diff -Naur backports-3.18.1-1.org/include/linux/grinternal.h backports-3.18.1-1/ +#define gr_log_fs_str(audit, msg, dentry, mnt, str) gr_log_varargs(audit, msg, GR_FILENAME_STR, dentry, mnt, str) +#define gr_log_fs_int2(audit, msg, dentry, mnt, num1, num2) gr_log_varargs(audit, msg, GR_FILENAME_TWO_INT, dentry, mnt, num1, num2) +#define gr_log_fs_int2_str(audit, msg, dentry, mnt, num1, num2, str) gr_log_varargs(audit, msg, GR_FILENAME_TWO_INT_STR, dentry, mnt, num1, num2, str) -+#define gr_log_textrel_ulong_ulong(audit, msg, file, ulong1, ulong2) gr_log_varargs(audit, msg, GR_TEXTREL, file, ulong1, ulong2) ++#define gr_log_textrel_ulong_ulong(audit, msg, str, file, ulong1, ulong2) gr_log_varargs(audit, msg, GR_TEXTREL, str, file, ulong1, ulong2) +#define gr_log_ptrace(audit, msg, task) gr_log_varargs(audit, msg, GR_PTRACE, task) +#define gr_log_res_ulong2_str(audit, msg, task, ulong1, str, ulong2) gr_log_varargs(audit, msg, GR_RESOURCE, task, ulong1, str, ulong2) +#define gr_log_cap(audit, msg, task, str) gr_log_varargs(audit, msg, GR_CAP, task, str) @@ -2791,10 +2912,10 @@ diff -Naur backports-3.18.1-1.org/include/linux/grinternal.h backports-3.18.1-1/ +#endif + +#endif -diff -Naur backports-3.18.1-1.org/include/linux/grmsg.h backports-3.18.1-1/include/linux/grmsg.h ---- backports-3.18.1-1.org/include/linux/grmsg.h 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/include/linux/grmsg.h 2014-12-28 14:10:09.688889562 +0100 -@@ -0,0 +1,117 @@ +diff -Naur backports-4.2.6-1.org/include/linux/grmsg.h backports-4.2.6-1/include/linux/grmsg.h +--- backports-4.2.6-1.org/include/linux/grmsg.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/include/linux/grmsg.h 2016-01-27 12:26:26.289959354 +0100 +@@ -0,0 +1,118 @@ +#define DEFAULTSECMSG "%.256s[%.16s:%d] uid/euid:%u/%u gid/egid:%u/%u, parent %.256s[%.16s:%d] uid/euid:%u/%u gid/egid:%u/%u" +#define GR_ACL_PROCACCT_MSG "%.256s[%.16s:%d] IP:%pI4 TTY:%.64s uid/euid:%u/%u gid/egid:%u/%u run time:[%ud %uh %um %us] cpu time:[%ud %uh %um %us] %s with exit code %ld, parent %.256s[%.16s:%d] IP:%pI4 TTY:%.64s uid/euid:%u/%u gid/egid:%u/%u" +#define GR_PTRACE_ACL_MSG "denied ptrace of %.950s(%.16s:%d) by " @@ -2838,6 +2959,7 @@ diff -Naur backports-3.18.1-1.org/include/linux/grmsg.h backports-3.18.1-1/inclu +#define GR_ATIME_ACL_MSG "%s access time change of %.950s by " +#define GR_ACCESS_ACL_MSG "%s access of %.950s for%s%s%s by " +#define GR_CHROOT_CHROOT_MSG "denied double chroot to %.950s by " ++#define GR_CHROOT_RENAME_MSG "denied bad rename of %.950s out of a chroot by " +#define GR_CHMOD_CHROOT_MSG "denied chmod +s of %.950s by " +#define GR_CHMOD_ACL_MSG "%s chmod of %.950s by " +#define GR_CHROOT_FCHDIR_MSG "denied fchdir outside of chroot to %.950s by " @@ -2900,7 +3022,7 @@ diff -Naur backports-3.18.1-1.org/include/linux/grmsg.h backports-3.18.1-1/inclu +#define GR_RESOURCE_MSG "denied resource overstep by requesting %lu for %.16s against limit %lu for " +#define GR_RWXMMAP_MSG "denied RWX mmap of %.950s by " +#define GR_RWXMPROTECT_MSG "denied RWX mprotect of %.950s by " -+#define GR_TEXTREL_AUDIT_MSG "denied text relocation in %.950s, VMA:0x%08lx 0x%08lx by " ++#define GR_TEXTREL_AUDIT_MSG "allowed %s text relocation transition in %.950s, VMA:0x%08lx 0x%08lx by " +#define GR_PTGNUSTACK_MSG "denied marking stack executable as requested by PT_GNU_STACK marking in %.950s by " +#define GR_VM86_MSG "denied use of vm86 by " +#define GR_PTRACE_AUDIT_MSG "process %.950s(%.16s:%d) attached to via ptrace by " @@ -2912,10 +3034,10 @@ diff -Naur backports-3.18.1-1.org/include/linux/grmsg.h backports-3.18.1-1/inclu +#define GR_BRUTE_SUID_MSG "bruteforce prevention initiated due to crash of %.950s against uid %u, banning suid/sgid execs for %u minutes. Please investigate the crash report for " +#define GR_IPC_DENIED_MSG "denied %s of overly-permissive IPC object with creator uid %u by " +#define GR_MSRWRITE_MSG "denied write to CPU MSR by " -diff -Naur backports-3.18.1-1.org/include/linux/grsecurity.h backports-3.18.1-1/include/linux/grsecurity.h ---- backports-3.18.1-1.org/include/linux/grsecurity.h 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/include/linux/grsecurity.h 2014-12-28 14:10:09.688889562 +0100 -@@ -0,0 +1,254 @@ +diff -Naur backports-4.2.6-1.org/include/linux/grsecurity.h backports-4.2.6-1/include/linux/grsecurity.h +--- backports-4.2.6-1.org/include/linux/grsecurity.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/include/linux/grsecurity.h 2016-01-27 12:26:26.289959354 +0100 +@@ -0,0 +1,255 @@ +#ifndef GR_SECURITY_H +#define GR_SECURITY_H +#include @@ -2924,6 +3046,12 @@ diff -Naur backports-3.18.1-1.org/include/linux/grsecurity.h backports-3.18.1-1/ +#include + +/* notify of brain-dead configs */ ++#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_GRKERNSEC_KMEM) ++#error "CONFIG_DEBUG_FS being enabled is a security risk when CONFIG_GRKERNSEC_KMEM is enabled" ++#endif ++#if defined(CONFIG_PROC_PAGE_MONITOR) && defined(CONFIG_GRKERNSEC) ++#error "CONFIG_PROC_PAGE_MONITOR is a security risk" ++#endif +#if defined(CONFIG_GRKERNSEC_PROC_USER) && defined(CONFIG_GRKERNSEC_PROC_USERGROUP) +#error "CONFIG_GRKERNSEC_PROC_USER and CONFIG_GRKERNSEC_PROC_USERGROUP cannot both be enabled." +#endif @@ -3002,15 +3130,13 @@ diff -Naur backports-3.18.1-1.org/include/linux/grsecurity.h backports-3.18.1-1/ + const struct vfsmount *mnt); +void gr_log_remount(const char *devname, const int retval); +void gr_log_unmount(const char *devname, const int retval); -+void gr_log_mount(const char *from, const char *to, const int retval); -+void gr_log_textrel(struct vm_area_struct *vma); ++void gr_log_mount(const char *from, struct path *to, const int retval); ++void gr_log_textrel(struct vm_area_struct *vma, bool is_textrel_rw); +void gr_log_ptgnustack(struct file *file); +void gr_log_rwxmmap(struct file *file); +void gr_log_rwxmprotect(struct vm_area_struct *vma); + -+int gr_handle_follow_link(const struct inode *parent, -+ const struct inode *inode, -+ const struct dentry *dentry, ++int gr_handle_follow_link(const struct dentry *dentry, + const struct vfsmount *mnt); +int gr_handle_fifo(const struct dentry *dentry, + const struct vfsmount *mnt, @@ -3018,8 +3144,7 @@ diff -Naur backports-3.18.1-1.org/include/linux/grsecurity.h backports-3.18.1-1/ + const int acc_mode); +int gr_handle_hardlink(const struct dentry *dentry, + const struct vfsmount *mnt, -+ struct inode *inode, -+ const int mode, const struct filename *to); ++ const struct filename *to); + +int gr_is_capable(const int cap); +int gr_is_capable_nolog(const int cap); @@ -3083,7 +3208,7 @@ diff -Naur backports-3.18.1-1.org/include/linux/grsecurity.h backports-3.18.1-1/ + const struct vfsmount *parent_mnt); +__u32 gr_acl_handle_rmdir(const struct dentry *dentry, + const struct vfsmount *mnt); -+void gr_handle_delete(const ino_t ino, const dev_t dev); ++void gr_handle_delete(const u64 ino, const dev_t dev); +__u32 gr_acl_handle_unlink(const struct dentry *dentry, + const struct vfsmount *mnt); +__u32 gr_acl_handle_symlink(const struct dentry *new_dentry, @@ -3112,7 +3237,7 @@ diff -Naur backports-3.18.1-1.org/include/linux/grsecurity.h backports-3.18.1-1/ + const struct dentry *old_dentry, + const struct vfsmount *old_mnt); +int gr_acl_handle_filldir(const struct file *file, const char *name, -+ const unsigned int namelen, const ino_t ino); ++ const unsigned int namelen, const u64 ino); + +__u32 gr_acl_handle_unix(const struct dentry *dentry, + const struct vfsmount *mnt); @@ -3123,19 +3248,17 @@ diff -Naur backports-3.18.1-1.org/include/linux/grsecurity.h backports-3.18.1-1/ +int gr_handle_rofs_blockwrite(struct dentry *dentry, struct vfsmount *mnt, int acc_mode); +void gr_audit_ptrace(struct task_struct *task); +dev_t gr_get_dev_from_dentry(struct dentry *dentry); ++u64 gr_get_ino_from_dentry(struct dentry *dentry); +void gr_put_exec_file(struct task_struct *task); + ++int gr_get_symlinkown_enabled(void); ++ +int gr_ptrace_readexec(struct file *file, int unsafe_flags); + -+#if defined(CONFIG_GRKERNSEC) && (defined(CONFIG_GRKERNSEC_RESLOG) || !defined(CONFIG_GRKERNSEC_NO_RBAC)) -+extern void gr_learn_resource(const struct task_struct *task, const int res, -+ const unsigned long wanted, const int gt); -+#else -+static inline void gr_learn_resource(const struct task_struct *task, const int res, -+ const unsigned long wanted, const int gt) -+{ -+} -+#endif ++void gr_inc_chroot_refcnts(struct dentry *dentry, struct vfsmount *mnt); ++void gr_dec_chroot_refcnts(struct dentry *dentry, struct vfsmount *mnt); ++int gr_bad_chroot_rename(struct dentry *olddentry, struct vfsmount *oldmnt, ++ struct dentry *newdentry, struct vfsmount *newmnt); + +#ifdef CONFIG_GRKERNSEC_RESLOG +extern void gr_log_resource(const struct task_struct *task, const int res, @@ -3170,9 +3293,9 @@ diff -Naur backports-3.18.1-1.org/include/linux/grsecurity.h backports-3.18.1-1/ +#endif + +#endif -diff -Naur backports-3.18.1-1.org/include/linux/grsock.h backports-3.18.1-1/include/linux/grsock.h ---- backports-3.18.1-1.org/include/linux/grsock.h 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/include/linux/grsock.h 2014-12-28 14:10:09.688889562 +0100 +diff -Naur backports-4.2.6-1.org/include/linux/grsock.h backports-4.2.6-1/include/linux/grsock.h +--- backports-4.2.6-1.org/include/linux/grsock.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/include/linux/grsock.h 2016-01-27 12:26:26.289959354 +0100 @@ -0,0 +1,19 @@ +#ifndef __GRSOCK_H +#define __GRSOCK_H @@ -3193,9 +3316,22 @@ diff -Naur backports-3.18.1-1.org/include/linux/grsock.h backports-3.18.1-1/incl + const int protocol); + +#endif -diff -Naur backports-3.18.1-1.org/include/linux/unaligned/access_ok.h backports-3.18.1-1/include/linux/unaligned/access_ok.h ---- backports-3.18.1-1.org/include/linux/unaligned/access_ok.h 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/include/linux/unaligned/access_ok.h 2014-12-28 14:10:09.712889681 +0100 +diff -Naur backports-4.2.6-1.org/include/linux/netfilter/xt_gradm.h backports-4.2.6-1/include/linux/netfilter/xt_gradm.h +--- backports-4.2.6-1.org/include/linux/netfilter/xt_gradm.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/include/linux/netfilter/xt_gradm.h 2016-01-27 12:26:31.209959056 +0100 +@@ -0,0 +1,9 @@ ++#ifndef _LINUX_NETFILTER_XT_GRADM_H ++#define _LINUX_NETFILTER_XT_GRADM_H 1 ++ ++struct xt_gradm_mtinfo { ++ __u16 flags; ++ __u16 invflags; ++}; ++ ++#endif +diff -Naur backports-4.2.6-1.org/include/linux/unaligned/access_ok.h backports-4.2.6-1/include/linux/unaligned/access_ok.h +--- backports-4.2.6-1.org/include/linux/unaligned/access_ok.h 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/include/linux/unaligned/access_ok.h 2016-01-27 12:26:31.219959057 +0100 @@ -4,34 +4,34 @@ #include #include @@ -3243,10 +3379,10 @@ diff -Naur backports-3.18.1-1.org/include/linux/unaligned/access_ok.h backports- } static inline void put_unaligned_le16(u16 val, void *p) -diff -Naur backports-3.18.1-1.org/include/media/v4l2-dev.h backports-3.18.1-1/include/media/v4l2-dev.h ---- backports-3.18.1-1.org/include/media/v4l2-dev.h 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/include/media/v4l2-dev.h 2014-12-28 14:10:09.716889709 +0100 -@@ -75,7 +75,7 @@ +diff -Naur backports-4.2.6-1.org/include/media/v4l2-dev.h backports-4.2.6-1/include/media/v4l2-dev.h +--- backports-4.2.6-1.org/include/media/v4l2-dev.h 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/include/media/v4l2-dev.h 2016-01-27 12:26:31.219959057 +0100 +@@ -74,7 +74,7 @@ int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct file *); int (*release) (struct file *); @@ -3255,10 +3391,10 @@ diff -Naur backports-3.18.1-1.org/include/media/v4l2-dev.h backports-3.18.1-1/in /* * Newer version of video_device, handled by videodev2.c -diff -Naur backports-3.18.1-1.org/include/media/v4l2-device.h backports-3.18.1-1/include/media/v4l2-device.h ---- backports-3.18.1-1.org/include/media/v4l2-device.h 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/include/media/v4l2-device.h 2014-12-28 14:10:09.716889709 +0100 -@@ -95,7 +95,7 @@ +diff -Naur backports-4.2.6-1.org/include/media/v4l2-device.h backports-4.2.6-1/include/media/v4l2-device.h +--- backports-4.2.6-1.org/include/media/v4l2-device.h 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/include/media/v4l2-device.h 2016-01-27 12:26:31.219959057 +0100 +@@ -93,7 +93,7 @@ this function returns 0. If the name ends with a digit (e.g. cx18), then the name will be set to cx18-0 since cx180 looks really odd. */ int v4l2_device_set_name(struct v4l2_device *v4l2_dev, const char *basename, @@ -3267,22 +3403,31 @@ diff -Naur backports-3.18.1-1.org/include/media/v4l2-device.h backports-3.18.1-1 /* Set v4l2_dev->dev to NULL. Call when the USB parent disconnects. Since the parent disappears this ensures that v4l2_dev doesn't have an -diff -Naur backports-3.18.1-1.org/include/net/bluetooth/l2cap.h backports-3.18.1-1/include/net/bluetooth/l2cap.h ---- backports-3.18.1-1.org/include/net/bluetooth/l2cap.h 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/include/net/bluetooth/l2cap.h 2014-12-28 14:10:09.716889709 +0100 -@@ -608,7 +608,7 @@ - unsigned char *kdata, +diff -Naur backports-4.2.6-1.org/include/net/bluetooth/l2cap.h backports-4.2.6-1/include/net/bluetooth/l2cap.h +--- backports-4.2.6-1.org/include/net/bluetooth/l2cap.h 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/include/net/bluetooth/l2cap.h 2016-01-27 12:31:52.866600109 +0100 +@@ -615,7 +615,7 @@ struct iovec *iov, int len); + #endif -}; +} __do_const; struct l2cap_conn { struct hci_conn *hcon; -diff -Naur backports-3.18.1-1.org/include/net/mac80211.h backports-3.18.1-1/include/net/mac80211.h ---- backports-3.18.1-1.org/include/net/mac80211.h 2014-12-21 22:37:13.000000000 +0100 -+++ backports-3.18.1-1/include/net/mac80211.h 2014-12-28 14:10:09.724889743 +0100 -@@ -4648,7 +4648,7 @@ +diff -Naur backports-4.2.6-1.org/include/net/mac80211.h backports-4.2.6-1/include/net/mac80211.h +--- backports-4.2.6-1.org/include/net/mac80211.h 2015-11-15 22:19:38.000000000 +0100 ++++ backports-4.2.6-1/include/net/mac80211.h 2016-01-27 12:26:31.223292389 +0100 +@@ -5106,7 +5106,7 @@ + struct sk_buff *skb; + struct ieee80211_tx_rate reported_rate; + bool rts, short_preamble; +- u8 max_rate_idx; ++ s8 max_rate_idx; + u32 rate_idx_mask; + u8 *rate_idx_mcs_mask; + bool bss; +@@ -5143,7 +5143,7 @@ void (*remove_sta_debugfs)(void *priv, void *priv_sta); u32 (*get_expected_throughput)(void *priv_sta); @@ -3291,9 +3436,9 @@ diff -Naur backports-3.18.1-1.org/include/net/mac80211.h backports-3.18.1-1/incl static inline int rate_supported(struct ieee80211_sta *sta, enum ieee80211_band band, -diff -Naur backports-3.18.1-1.org/include/trace/events/fs.h backports-3.18.1-1/include/trace/events/fs.h ---- backports-3.18.1-1.org/include/trace/events/fs.h 1970-01-01 01:00:00.000000000 +0100 -+++ backports-3.18.1-1/include/trace/events/fs.h 2014-12-28 14:10:09.728889769 +0100 +diff -Naur backports-4.2.6-1.org/include/trace/events/fs.h backports-4.2.6-1/include/trace/events/fs.h +--- backports-4.2.6-1.org/include/trace/events/fs.h 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/include/trace/events/fs.h 2016-01-27 12:26:31.226625722 +0100 @@ -0,0 +1,53 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM fs @@ -3348,47 +3493,10 @@ diff -Naur backports-3.18.1-1.org/include/trace/events/fs.h backports-3.18.1-1/i + +/* This part must be outside protection */ +#include -diff -Naur backports-3.18.1-1.org/net/bluetooth/6lowpan.c backports-3.18.1-1/net/bluetooth/6lowpan.c ---- backports-3.18.1-1.org/net/bluetooth/6lowpan.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/bluetooth/6lowpan.c 2014-12-28 14:10:09.784890034 +0100 -@@ -367,7 +367,6 @@ - - drop: - dev->stats.rx_dropped++; -- kfree_skb(skb); - return NET_RX_DROP; - } - -diff -Naur backports-3.18.1-1.org/net/bluetooth/bnep/core.c backports-3.18.1-1/net/bluetooth/bnep/core.c ---- backports-3.18.1-1.org/net/bluetooth/bnep/core.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/bluetooth/bnep/core.c 2014-12-28 14:10:09.784890034 +0100 -@@ -533,6 +533,9 @@ - - BT_DBG(""); - -+ if (!l2cap_is_socket(sock)) -+ return -EBADFD; -+ - baswap((void *) dst, &l2cap_pi(sock->sk)->chan->dst); - baswap((void *) src, &l2cap_pi(sock->sk)->chan->src); - -diff -Naur backports-3.18.1-1.org/net/bluetooth/cmtp/core.c backports-3.18.1-1/net/bluetooth/cmtp/core.c ---- backports-3.18.1-1.org/net/bluetooth/cmtp/core.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/bluetooth/cmtp/core.c 2014-12-28 14:10:09.784890034 +0100 -@@ -334,6 +334,9 @@ - - BT_DBG(""); - -+ if (!l2cap_is_socket(sock)) -+ return -EBADFD; -+ - session = kzalloc(sizeof(struct cmtp_session), GFP_KERNEL); - if (!session) - return -ENOMEM; -diff -Naur backports-3.18.1-1.org/net/bluetooth/hci_sock.c backports-3.18.1-1/net/bluetooth/hci_sock.c ---- backports-3.18.1-1.org/net/bluetooth/hci_sock.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/bluetooth/hci_sock.c 2014-12-28 14:10:09.784890034 +0100 -@@ -1067,7 +1067,7 @@ +diff -Naur backports-4.2.6-1.org/net/bluetooth/hci_sock.c backports-4.2.6-1/net/bluetooth/hci_sock.c +--- backports-4.2.6-1.org/net/bluetooth/hci_sock.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/bluetooth/hci_sock.c 2016-01-27 12:26:36.269958751 +0100 +@@ -1266,7 +1266,7 @@ uf.event_mask[1] = *((u32 *) f->event_mask + 1); } @@ -3397,29 +3505,10 @@ diff -Naur backports-3.18.1-1.org/net/bluetooth/hci_sock.c backports-3.18.1-1/ne if (copy_from_user(&uf, optval, len)) { err = -EFAULT; break; -diff -Naur backports-3.18.1-1.org/net/bluetooth/hidp/core.c backports-3.18.1-1/net/bluetooth/hidp/core.c ---- backports-3.18.1-1.org/net/bluetooth/hidp/core.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/bluetooth/hidp/core.c 2014-12-28 14:10:09.784890034 +0100 -@@ -1322,13 +1322,14 @@ - { - struct hidp_session *session; - struct l2cap_conn *conn; -- struct l2cap_chan *chan = l2cap_pi(ctrl_sock->sk)->chan; -+ struct l2cap_chan *chan; - int ret; - - ret = hidp_verify_sockets(ctrl_sock, intr_sock); - if (ret) - return ret; - -+ chan = l2cap_pi(ctrl_sock->sk)->chan; - conn = NULL; - l2cap_chan_lock(chan); - if (chan->conn) -diff -Naur backports-3.18.1-1.org/net/bluetooth/l2cap_core.c backports-3.18.1-1/net/bluetooth/l2cap_core.c ---- backports-3.18.1-1.org/net/bluetooth/l2cap_core.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/bluetooth/l2cap_core.c 2014-12-28 14:10:09.784890034 +0100 -@@ -3512,8 +3512,10 @@ +diff -Naur backports-4.2.6-1.org/net/bluetooth/l2cap_core.c backports-4.2.6-1/net/bluetooth/l2cap_core.c +--- backports-4.2.6-1.org/net/bluetooth/l2cap_core.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/bluetooth/l2cap_core.c 2016-01-27 12:26:36.269958751 +0100 +@@ -3547,8 +3547,10 @@ break; case L2CAP_CONF_RFC: @@ -3432,10 +3521,10 @@ diff -Naur backports-3.18.1-1.org/net/bluetooth/l2cap_core.c backports-3.18.1-1/ if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) && rfc.mode != chan->mode) -diff -Naur backports-3.18.1-1.org/net/bluetooth/l2cap_sock.c backports-3.18.1-1/net/bluetooth/l2cap_sock.c ---- backports-3.18.1-1.org/net/bluetooth/l2cap_sock.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/bluetooth/l2cap_sock.c 2014-12-28 14:10:09.788890064 +0100 -@@ -628,7 +628,8 @@ +diff -Naur backports-4.2.6-1.org/net/bluetooth/l2cap_sock.c backports-4.2.6-1/net/bluetooth/l2cap_sock.c +--- backports-4.2.6-1.org/net/bluetooth/l2cap_sock.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/bluetooth/l2cap_sock.c 2016-01-27 12:26:36.269958751 +0100 +@@ -633,7 +633,8 @@ struct sock *sk = sock->sk; struct l2cap_chan *chan = l2cap_pi(sk)->chan; struct l2cap_options opts; @@ -3445,7 +3534,7 @@ diff -Naur backports-3.18.1-1.org/net/bluetooth/l2cap_sock.c backports-3.18.1-1/ u32 opt; BT_DBG("sk %p", sk); -@@ -655,7 +656,7 @@ +@@ -660,7 +661,7 @@ opts.max_tx = chan->max_tx; opts.txwin_size = chan->tx_win; @@ -3454,7 +3543,7 @@ diff -Naur backports-3.18.1-1.org/net/bluetooth/l2cap_sock.c backports-3.18.1-1/ if (copy_from_user((char *) &opts, optval, len)) { err = -EFAULT; break; -@@ -742,7 +743,8 @@ +@@ -747,7 +748,8 @@ struct bt_security sec; struct bt_power pwr; struct l2cap_conn *conn; @@ -3464,7 +3553,7 @@ diff -Naur backports-3.18.1-1.org/net/bluetooth/l2cap_sock.c backports-3.18.1-1/ u32 opt; BT_DBG("sk %p", sk); -@@ -766,7 +768,7 @@ +@@ -771,7 +773,7 @@ sec.level = BT_SECURITY_LOW; @@ -3473,7 +3562,7 @@ diff -Naur backports-3.18.1-1.org/net/bluetooth/l2cap_sock.c backports-3.18.1-1/ if (copy_from_user((char *) &sec, optval, len)) { err = -EFAULT; break; -@@ -862,7 +864,7 @@ +@@ -867,7 +869,7 @@ pwr.force_active = BT_POWER_FORCE_ACTIVE_ON; @@ -3482,10 +3571,10 @@ diff -Naur backports-3.18.1-1.org/net/bluetooth/l2cap_sock.c backports-3.18.1-1/ if (copy_from_user((char *) &pwr, optval, len)) { err = -EFAULT; break; -diff -Naur backports-3.18.1-1.org/net/bluetooth/rfcomm/sock.c backports-3.18.1-1/net/bluetooth/rfcomm/sock.c ---- backports-3.18.1-1.org/net/bluetooth/rfcomm/sock.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/bluetooth/rfcomm/sock.c 2014-12-28 14:10:09.788890064 +0100 -@@ -695,7 +695,7 @@ +diff -Naur backports-4.2.6-1.org/net/bluetooth/rfcomm/sock.c backports-4.2.6-1/net/bluetooth/rfcomm/sock.c +--- backports-4.2.6-1.org/net/bluetooth/rfcomm/sock.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/bluetooth/rfcomm/sock.c 2016-01-27 12:26:36.269958751 +0100 +@@ -713,7 +713,7 @@ struct sock *sk = sock->sk; struct bt_security sec; int err = 0; @@ -3494,7 +3583,7 @@ diff -Naur backports-3.18.1-1.org/net/bluetooth/rfcomm/sock.c backports-3.18.1-1 u32 opt; BT_DBG("sk %p", sk); -@@ -717,7 +717,7 @@ +@@ -735,7 +735,7 @@ sec.level = BT_SECURITY_LOW; @@ -3503,9 +3592,9 @@ diff -Naur backports-3.18.1-1.org/net/bluetooth/rfcomm/sock.c backports-3.18.1-1 if (copy_from_user((char *) &sec, optval, len)) { err = -EFAULT; break; -diff -Naur backports-3.18.1-1.org/net/bluetooth/rfcomm/tty.c backports-3.18.1-1/net/bluetooth/rfcomm/tty.c ---- backports-3.18.1-1.org/net/bluetooth/rfcomm/tty.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/bluetooth/rfcomm/tty.c 2014-12-28 14:10:09.788890064 +0100 +diff -Naur backports-4.2.6-1.org/net/bluetooth/rfcomm/tty.c backports-4.2.6-1/net/bluetooth/rfcomm/tty.c +--- backports-4.2.6-1.org/net/bluetooth/rfcomm/tty.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/bluetooth/rfcomm/tty.c 2016-01-27 12:26:36.269958751 +0100 @@ -752,7 +752,7 @@ BT_DBG("tty %p id %d", tty, tty->index); @@ -3524,10 +3613,10 @@ diff -Naur backports-3.18.1-1.org/net/bluetooth/rfcomm/tty.c backports-3.18.1-1/ tty_port_close(&dev->port, tty, filp); } -diff -Naur backports-3.18.1-1.org/net/ieee802154/6lowpan_rtnl.c backports-3.18.1-1/net/ieee802154/6lowpan_rtnl.c ---- backports-3.18.1-1.org/net/ieee802154/6lowpan_rtnl.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/ieee802154/6lowpan_rtnl.c 2014-12-28 14:10:09.796890100 +0100 -@@ -639,7 +639,7 @@ +diff -Naur backports-4.2.6-1.org/net/ieee802154/6lowpan/core.c backports-4.2.6-1/net/ieee802154/6lowpan/core.c +--- backports-4.2.6-1.org/net/ieee802154/6lowpan/core.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/ieee802154/6lowpan/core.c 2016-01-27 12:26:36.273292083 +0100 +@@ -191,7 +191,7 @@ dev_put(real_dev); } @@ -3536,10 +3625,10 @@ diff -Naur backports-3.18.1-1.org/net/ieee802154/6lowpan_rtnl.c backports-3.18.1 .kind = "lowpan", .priv_size = sizeof(struct lowpan_dev_info), .setup = lowpan_setup, -diff -Naur backports-3.18.1-1.org/net/ieee802154/reassembly.c backports-3.18.1-1/net/ieee802154/reassembly.c ---- backports-3.18.1-1.org/net/ieee802154/reassembly.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/ieee802154/reassembly.c 2014-12-28 14:10:09.796890100 +0100 -@@ -460,14 +460,13 @@ +diff -Naur backports-4.2.6-1.org/net/ieee802154/6lowpan/reassembly.c backports-4.2.6-1/net/ieee802154/6lowpan/reassembly.c +--- backports-4.2.6-1.org/net/ieee802154/6lowpan/reassembly.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/ieee802154/6lowpan/reassembly.c 2016-01-27 12:26:36.273292083 +0100 +@@ -435,14 +435,13 @@ static int __net_init lowpan_frags_ns_sysctl_register(struct net *net) { @@ -3556,7 +3645,20 @@ diff -Naur backports-3.18.1-1.org/net/ieee802154/reassembly.c backports-3.18.1-1 GFP_KERNEL); if (table == NULL) goto err_alloc; -@@ -494,8 +493,7 @@ +@@ -457,9 +456,9 @@ + /* Don't export sysctls to unprivileged users */ + if (net->user_ns != &init_user_ns) + table[0].procname = NULL; +- } +- +- hdr = register_net_sysctl(net, "net/ieee802154/6lowpan", table); ++ hdr = register_net_sysctl(net, "net/ieee802154/6lowpan", table); ++ } else ++ hdr = register_net_sysctl(net, "net/ieee802154/6lowpan", lowpan_frags_ns_ctl_table); + if (hdr == NULL) + goto err_reg; + +@@ -467,8 +466,7 @@ return 0; err_reg: @@ -3566,10 +3668,10 @@ diff -Naur backports-3.18.1-1.org/net/ieee802154/reassembly.c backports-3.18.1-1 err_alloc: return -ENOMEM; } -diff -Naur backports-3.18.1-1.org/net/mac80211/cfg.c backports-3.18.1-1/net/mac80211/cfg.c ---- backports-3.18.1-1.org/net/mac80211/cfg.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/mac80211/cfg.c 2014-12-28 14:10:09.812890175 +0100 -@@ -541,7 +541,7 @@ +diff -Naur backports-4.2.6-1.org/net/mac80211/cfg.c backports-4.2.6-1/net/mac80211/cfg.c +--- backports-4.2.6-1.org/net/mac80211/cfg.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/mac80211/cfg.c 2016-01-27 12:26:36.286625417 +0100 +@@ -580,7 +580,7 @@ ret = ieee80211_vif_use_channel(sdata, chandef, IEEE80211_CHANCTX_EXCLUSIVE); } @@ -3578,7 +3680,7 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/cfg.c backports-3.18.1-1/net/mac8 local->_oper_chandef = *chandef; ieee80211_hw_config(local, 0); } -@@ -3326,7 +3326,7 @@ +@@ -3488,7 +3488,7 @@ else local->probe_req_reg--; @@ -3587,7 +3689,7 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/cfg.c backports-3.18.1-1/net/mac8 break; ieee80211_queue_work(&local->hw, &local->reconfig_filter); -@@ -3460,8 +3460,8 @@ +@@ -3637,8 +3637,8 @@ if (chanctx_conf) { *chandef = sdata->vif.bss_conf.chandef; ret = 0; @@ -3598,10 +3700,10 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/cfg.c backports-3.18.1-1/net/mac8 sdata->vif.type == NL80211_IFTYPE_MONITOR) { if (local->use_chanctx) *chandef = local->monitor_chandef; -diff -Naur backports-3.18.1-1.org/net/mac80211/ieee80211_i.h backports-3.18.1-1/net/mac80211/ieee80211_i.h ---- backports-3.18.1-1.org/net/mac80211/ieee80211_i.h 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/mac80211/ieee80211_i.h 2014-12-28 14:10:09.812890175 +0100 -@@ -29,6 +29,7 @@ +diff -Naur backports-4.2.6-1.org/net/mac80211/ieee80211_i.h backports-4.2.6-1/net/mac80211/ieee80211_i.h +--- backports-4.2.6-1.org/net/mac80211/ieee80211_i.h 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/mac80211/ieee80211_i.h 2016-01-27 12:26:36.289958749 +0100 +@@ -30,6 +30,7 @@ #include #include #include @@ -3609,7 +3711,7 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/ieee80211_i.h backports-3.18.1-1/ #include "key.h" #include "sta_info.h" #include "debug.h" -@@ -1057,7 +1058,7 @@ +@@ -1112,7 +1113,7 @@ /* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */ spinlock_t queue_stop_reason_lock; @@ -3618,10 +3720,10 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/ieee80211_i.h backports-3.18.1-1/ int monitors, cooked_mntrs; /* number of interfaces with corresponding FIF_ flags */ int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss, fif_pspoll, -diff -Naur backports-3.18.1-1.org/net/mac80211/iface.c backports-3.18.1-1/net/mac80211/iface.c ---- backports-3.18.1-1.org/net/mac80211/iface.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/mac80211/iface.c 2014-12-28 14:10:09.812890175 +0100 -@@ -532,7 +532,7 @@ +diff -Naur backports-4.2.6-1.org/net/mac80211/iface.c backports-4.2.6-1/net/mac80211/iface.c +--- backports-4.2.6-1.org/net/mac80211/iface.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/mac80211/iface.c 2016-01-27 12:26:36.289958749 +0100 +@@ -550,7 +550,7 @@ break; } @@ -3630,7 +3732,7 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/iface.c backports-3.18.1-1/net/ma res = drv_start(local); if (res) goto err_del_bss; -@@ -579,7 +579,7 @@ +@@ -597,7 +597,7 @@ res = drv_add_interface(local, sdata); if (res) goto err_stop; @@ -3639,8 +3741,8 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/iface.c backports-3.18.1-1/net/ma res = ieee80211_add_virtual_monitor(local); if (res) goto err_stop; -@@ -688,7 +688,7 @@ - atomic_inc(&local->iff_promiscs); +@@ -704,7 +704,7 @@ + atomic_inc(&local->iff_allmultis); if (coming_up) - local->open_count++; @@ -3648,7 +3750,7 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/iface.c backports-3.18.1-1/net/ma if (hw_reconf_flags) ieee80211_hw_config(local, hw_reconf_flags); -@@ -726,7 +726,7 @@ +@@ -742,7 +742,7 @@ err_del_interface: drv_remove_interface(local, sdata); err_stop: @@ -3657,7 +3759,7 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/iface.c backports-3.18.1-1/net/ma drv_stop(local); err_del_bss: sdata->bss = NULL; -@@ -892,7 +892,7 @@ +@@ -909,7 +909,7 @@ } if (going_down) @@ -3666,16 +3768,16 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/iface.c backports-3.18.1-1/net/ma switch (sdata->vif.type) { case NL80211_IFTYPE_AP_VLAN: -@@ -954,7 +954,7 @@ +@@ -978,7 +978,7 @@ + atomic_set(&sdata->txqs_len[txqi->txq.ac], 0); } - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); - if (local->open_count == 0) + if (local_read(&local->open_count) == 0) ieee80211_clear_tx_pending(local); /* -@@ -997,7 +997,7 @@ +@@ -1021,7 +1021,7 @@ if (cancel_scan) flush_delayed_work(&local->scan_work); @@ -3684,7 +3786,7 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/iface.c backports-3.18.1-1/net/ma ieee80211_stop_device(local); /* no reconfiguring after stop! */ -@@ -1008,7 +1008,7 @@ +@@ -1032,7 +1032,7 @@ ieee80211_configure_filter(local); ieee80211_hw_config(local, hw_reconf_flags); @@ -3693,10 +3795,21 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/iface.c backports-3.18.1-1/net/ma ieee80211_add_virtual_monitor(local); } -diff -Naur backports-3.18.1-1.org/net/mac80211/main.c backports-3.18.1-1/net/mac80211/main.c ---- backports-3.18.1-1.org/net/mac80211/main.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/mac80211/main.c 2014-12-28 14:10:09.812890175 +0100 -@@ -175,7 +175,7 @@ +@@ -1905,8 +1905,8 @@ + */ + cfg80211_shutdown_all_interfaces(local->hw.wiphy); + +- WARN(local->open_count, "%s: open count remains %d\n", +- wiphy_name(local->hw.wiphy), local->open_count); ++ WARN(local_read(&local->open_count), "%s: open count remains %ld\n", ++ wiphy_name(local->hw.wiphy), local_read(&local->open_count)); + + mutex_lock(&local->iflist_mtx); + list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { +diff -Naur backports-4.2.6-1.org/net/mac80211/main.c backports-4.2.6-1/net/mac80211/main.c +--- backports-4.2.6-1.org/net/mac80211/main.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/mac80211/main.c 2016-01-27 12:26:36.289958749 +0100 +@@ -172,7 +172,7 @@ changed &= ~(IEEE80211_CONF_CHANGE_CHANNEL | IEEE80211_CONF_CHANGE_POWER); @@ -3705,9 +3818,9 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/main.c backports-3.18.1-1/net/mac ret = drv_config(local, changed); /* * Goal: -diff -Naur backports-3.18.1-1.org/net/mac80211/pm.c backports-3.18.1-1/net/mac80211/pm.c ---- backports-3.18.1-1.org/net/mac80211/pm.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/mac80211/pm.c 2014-12-28 14:10:09.812890175 +0100 +diff -Naur backports-4.2.6-1.org/net/mac80211/pm.c backports-4.2.6-1/net/mac80211/pm.c +--- backports-4.2.6-1.org/net/mac80211/pm.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/mac80211/pm.c 2016-01-27 12:26:36.289958749 +0100 @@ -12,7 +12,7 @@ struct ieee80211_sub_if_data *sdata; struct sta_info *sta; @@ -3717,16 +3830,7 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/pm.c backports-3.18.1-1/net/mac80 goto suspend; ieee80211_scan_cancel(local); -@@ -59,7 +59,7 @@ - cancel_work_sync(&local->dynamic_ps_enable_work); - del_timer_sync(&local->dynamic_ps_timer); - -- local->wowlan = wowlan && local->open_count; -+ local->wowlan = wowlan && local_read(&local->open_count); - if (local->wowlan) { - int err = drv_suspend(local, wowlan); - if (err < 0) { -@@ -125,7 +125,7 @@ +@@ -166,7 +166,7 @@ WARN_ON(!list_empty(&local->chanctx_list)); /* stop hardware - this must stop RX */ @@ -3735,10 +3839,10 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/pm.c backports-3.18.1-1/net/mac80 ieee80211_stop_device(local); suspend: -diff -Naur backports-3.18.1-1.org/net/mac80211/rate.c backports-3.18.1-1/net/mac80211/rate.c ---- backports-3.18.1-1.org/net/mac80211/rate.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/mac80211/rate.c 2014-12-28 14:10:09.812890175 +0100 -@@ -720,7 +720,7 @@ +diff -Naur backports-4.2.6-1.org/net/mac80211/rate.c backports-4.2.6-1/net/mac80211/rate.c +--- backports-4.2.6-1.org/net/mac80211/rate.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/mac80211/rate.c 2016-01-27 12:26:36.289958749 +0100 +@@ -730,7 +730,7 @@ ASSERT_RTNL(); @@ -3746,20 +3850,32 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/rate.c backports-3.18.1-1/net/mac + if (local_read(&local->open_count)) return -EBUSY; - if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) { -diff -Naur backports-3.18.1-1.org/net/mac80211/util.c backports-3.18.1-1/net/mac80211/util.c ---- backports-3.18.1-1.org/net/mac80211/util.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/mac80211/util.c 2014-12-28 14:10:09.816890209 +0100 -@@ -1669,7 +1669,7 @@ - } - #endif - /* everything else happens only if HW was up & running */ + if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL)) { +diff -Naur backports-4.2.6-1.org/net/mac80211/sta_info.c backports-4.2.6-1/net/mac80211/sta_info.c +--- backports-4.2.6-1.org/net/mac80211/sta_info.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/mac80211/sta_info.c 2016-01-27 12:26:36.289958749 +0100 +@@ -341,7 +341,7 @@ + int size = sizeof(struct txq_info) + + ALIGN(hw->txq_data_size, sizeof(void *)); + +- txq_data = kcalloc(ARRAY_SIZE(sta->sta.txq), size, gfp); ++ txq_data = kcalloc(size, ARRAY_SIZE(sta->sta.txq), gfp); + if (!txq_data) + goto free; + +diff -Naur backports-4.2.6-1.org/net/mac80211/util.c backports-4.2.6-1/net/mac80211/util.c +--- backports-4.2.6-1.org/net/mac80211/util.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/mac80211/util.c 2016-01-27 12:26:36.289958749 +0100 +@@ -1761,7 +1761,7 @@ + bool sched_scan_stopped = false; + + /* nothing to do if HW shouldn't run */ - if (!local->open_count) + if (!local_read(&local->open_count)) goto wake_up; - /* -@@ -1895,7 +1895,7 @@ + #ifdef CONFIG_PM +@@ -2033,7 +2033,7 @@ local->in_reconfig = false; barrier(); @@ -3768,9 +3884,27 @@ diff -Naur backports-3.18.1-1.org/net/mac80211/util.c backports-3.18.1-1/net/mac ieee80211_add_virtual_monitor(local); /* -diff -Naur backports-3.18.1-1.org/net/wireless/wext-core.c backports-3.18.1-1/net/wireless/wext-core.c ---- backports-3.18.1-1.org/net/wireless/wext-core.c 2014-12-21 22:37:15.000000000 +0100 -+++ backports-3.18.1-1/net/wireless/wext-core.c 2014-12-28 14:10:09.832890290 +0100 +@@ -2088,7 +2088,7 @@ + * If this is for hw restart things are still running. + * We may want to change that later, however. + */ +- if (local->open_count && (!local->suspended || reconfig_due_to_wowlan)) ++ if (local_read(&local->open_count) && (!local->suspended || reconfig_due_to_wowlan)) + drv_reconfig_complete(local, IEEE80211_RECONFIG_TYPE_RESTART); + + if (!local->suspended) +@@ -2112,7 +2112,7 @@ + flush_delayed_work(&local->scan_work); + } + +- if (local->open_count && !reconfig_due_to_wowlan) ++ if (local_read(&local->open_count) && !reconfig_due_to_wowlan) + drv_reconfig_complete(local, IEEE80211_RECONFIG_TYPE_SUSPEND); + + list_for_each_entry(sdata, &local->interfaces, list) { +diff -Naur backports-4.2.6-1.org/net/wireless/wext-core.c backports-4.2.6-1/net/wireless/wext-core.c +--- backports-4.2.6-1.org/net/wireless/wext-core.c 2015-11-15 22:19:40.000000000 +0100 ++++ backports-4.2.6-1/net/wireless/wext-core.c 2016-01-27 12:26:36.303292082 +0100 @@ -748,8 +748,7 @@ */ @@ -3804,3 +3938,58 @@ diff -Naur backports-3.18.1-1.org/net/wireless/wext-core.c backports-3.18.1-1/ne err = handler(dev, info, (union iwreq_data *) iwp, extra); iwp->length += essid_compat; +diff -Naur backports-4.2.6-1.org/scripts/gcc-plugin.sh backports-4.2.6-1/scripts/gcc-plugin.sh +--- backports-4.2.6-1.org/scripts/gcc-plugin.sh 1970-01-01 01:00:00.000000000 +0100 ++++ backports-4.2.6-1/scripts/gcc-plugin.sh 2016-01-27 12:26:36.303292082 +0100 +@@ -0,0 +1,51 @@ ++#!/bin/sh ++srctree=$(dirname "$0") ++gccplugins_dir=$($3 -print-file-name=plugin) ++plugincc=$($1 -E -x c++ - -o /dev/null -I"${srctree}"/../tools/gcc -I"${gccplugins_dir}"/include 2>&1 <= 4008 || defined(ENABLE_BUILD_WITH_CXX) ++#warning $2 CXX ++#else ++#warning $1 CC ++#endif ++EOF ++) ++ ++if [ $? -ne 0 ] ++then ++ exit 1 ++fi ++ ++case "$plugincc" in ++ *"$1 CC"*) ++ echo "$1" ++ exit 0 ++ ;; ++ ++ *"$2 CXX"*) ++ # the c++ compiler needs another test, see below ++ ;; ++ ++ *) ++ exit 1 ++ ;; ++esac ++ ++# we need a c++ compiler that supports the designated initializer GNU extension ++plugincc=$($2 -c -x c++ -std=gnu++98 - -fsyntax-only -I"${srctree}"/../tools/gcc -I"${gccplugins_dir}"/include 2>&1 < +Date: Fri, 31 Jul 2015 15:04:46 +0200 +Subject: mt7601u: fix dma from stack address + +DMA to variables located on the stack is a bad idea. +For simplicity and to avoid frequent allocations create +a buffer inside the device structure. Protect this +buffer with vendor_req_mutex. Don't protect vendor +requests which don't use this buffer. + +Signed-off-by: Jakub Kicinski +Signed-off-by: Kalle Valo +--- + drivers/net/wireless/mediatek/mt7601u/mt7601u.h | 4 +- + drivers/net/wireless/mediatek/mt7601u/usb.c | 63 ++++++++++++------------- + drivers/net/wireless/mediatek/mt7601u/usb.h | 2 + + 3 files changed, 34 insertions(+), 35 deletions(-) + +diff --git a/drivers/net/wireless/mediatek/mt7601u/mt7601u.h b/drivers/net/wireless/mediatek/mt7601u/mt7601u.h +index 9102be6b..6bdfc11 100644 +--- a/drivers/net/wireless/mediatek/mt7601u/mt7601u.h ++++ b/drivers/net/wireless/mediatek/mt7601u/mt7601u.h +@@ -146,7 +146,7 @@ enum { + * @rx_lock: protects @rx_q. + * @con_mon_lock: protects @ap_bssid, @bcn_*, @avg_rssi. + * @mutex: ensures exclusive access from mac80211 callbacks. +- * @vendor_req_mutex: ensures atomicity of vendor requests. ++ * @vendor_req_mutex: protects @vend_buf, ensures atomicity of split writes. + * @reg_atomic_mutex: ensures atomicity of indirect register accesses + * (accesses to RF and BBP). + * @hw_atomic_mutex: ensures exclusive access to HW during critical +@@ -184,6 +184,8 @@ struct mt7601u_dev { + struct mt7601u_eeprom_params *ee; + + struct mutex vendor_req_mutex; ++ void *vend_buf; ++ + struct mutex reg_atomic_mutex; + struct mutex hw_atomic_mutex; + +diff --git a/drivers/net/wireless/mediatek/mt7601u/usb.c b/drivers/net/wireless/mediatek/mt7601u/usb.c +index 54dba40..416c604 100644 +--- a/drivers/net/wireless/mediatek/mt7601u/usb.c ++++ b/drivers/net/wireless/mediatek/mt7601u/usb.c +@@ -92,10 +92,9 @@ void mt7601u_complete_urb(struct urb *urb) + complete(cmpl); + } + +-static int +-__mt7601u_vendor_request(struct mt7601u_dev *dev, const u8 req, +- const u8 direction, const u16 val, const u16 offset, +- void *buf, const size_t buflen) ++int mt7601u_vendor_request(struct mt7601u_dev *dev, const u8 req, ++ const u8 direction, const u16 val, const u16 offset, ++ void *buf, const size_t buflen) + { + int i, ret; + struct usb_device *usb_dev = mt7601u_to_usb_dev(dev); +@@ -110,6 +109,8 @@ __mt7601u_vendor_request(struct mt7601u_dev *dev, const u8 req, + trace_mt_vend_req(dev, pipe, req, req_type, val, offset, + buf, buflen, ret); + ++ if (ret == -ENODEV) ++ set_bit(MT7601U_STATE_REMOVED, &dev->state); + if (ret >= 0 || ret == -ENODEV) + return ret; + +@@ -122,25 +123,6 @@ __mt7601u_vendor_request(struct mt7601u_dev *dev, const u8 req, + return ret; + } + +-int +-mt7601u_vendor_request(struct mt7601u_dev *dev, const u8 req, +- const u8 direction, const u16 val, const u16 offset, +- void *buf, const size_t buflen) +-{ +- int ret; +- +- mutex_lock(&dev->vendor_req_mutex); +- +- ret = __mt7601u_vendor_request(dev, req, direction, val, offset, +- buf, buflen); +- if (ret == -ENODEV) +- set_bit(MT7601U_STATE_REMOVED, &dev->state); +- +- mutex_unlock(&dev->vendor_req_mutex); +- +- return ret; +-} +- + void mt7601u_vendor_reset(struct mt7601u_dev *dev) + { + mt7601u_vendor_request(dev, MT_VEND_DEV_MODE, USB_DIR_OUT, +@@ -150,19 +132,21 @@ void mt7601u_vendor_reset(struct mt7601u_dev *dev) + u32 mt7601u_rr(struct mt7601u_dev *dev, u32 offset) + { + int ret; +- __le32 reg; +- u32 val; ++ u32 val = ~0; + + WARN_ONCE(offset > USHRT_MAX, "read high off:%08x", offset); + ++ mutex_lock(&dev->vendor_req_mutex); ++ + ret = mt7601u_vendor_request(dev, MT_VEND_MULTI_READ, USB_DIR_IN, +- 0, offset, ®, sizeof(reg)); +- val = le32_to_cpu(reg); +- if (ret > 0 && ret != sizeof(reg)) { ++ 0, offset, dev->vend_buf, MT_VEND_BUF); ++ if (ret == MT_VEND_BUF) ++ val = get_unaligned_le32(dev->vend_buf); ++ else if (ret > 0) + dev_err(dev->dev, "Error: wrong size read:%d off:%08x\n", + ret, offset); +- val = ~0; +- } ++ ++ mutex_unlock(&dev->vendor_req_mutex); + + trace_reg_read(dev, offset, val); + return val; +@@ -173,12 +157,17 @@ int mt7601u_vendor_single_wr(struct mt7601u_dev *dev, const u8 req, + { + int ret; + ++ mutex_lock(&dev->vendor_req_mutex); ++ + ret = mt7601u_vendor_request(dev, req, USB_DIR_OUT, + val & 0xffff, offset, NULL, 0); +- if (ret) +- return ret; +- return mt7601u_vendor_request(dev, req, USB_DIR_OUT, +- val >> 16, offset + 2, NULL, 0); ++ if (!ret) ++ ret = mt7601u_vendor_request(dev, req, USB_DIR_OUT, ++ val >> 16, offset + 2, NULL, 0); ++ ++ mutex_unlock(&dev->vendor_req_mutex); ++ ++ return ret; + } + + void mt7601u_wr(struct mt7601u_dev *dev, u32 offset, u32 val) +@@ -275,6 +264,12 @@ static int mt7601u_probe(struct usb_interface *usb_intf, + + usb_set_intfdata(usb_intf, dev); + ++ dev->vend_buf = devm_kmalloc(dev->dev, MT_VEND_BUF, GFP_KERNEL); ++ if (!dev->vend_buf) { ++ ret = -ENOMEM; ++ goto err; ++ } ++ + ret = mt7601u_assign_pipes(usb_intf, dev); + if (ret) + goto err; +diff --git a/drivers/net/wireless/mediatek/mt7601u/usb.h b/drivers/net/wireless/mediatek/mt7601u/usb.h +index 49e188f..bc18202 100644 +--- a/drivers/net/wireless/mediatek/mt7601u/usb.h ++++ b/drivers/net/wireless/mediatek/mt7601u/usb.h +@@ -23,6 +23,8 @@ + + #define MT_VEND_DEV_MODE_RESET 1 + ++#define MT_VEND_BUF sizeof(__le32) ++ + enum mt_vendor_req { + MT_VEND_DEV_MODE = 1, + MT_VEND_WRITE = 2, +-- +cgit v0.12 + +From d9517c0a5d7468a7ea63086057604fcb0fff480e Mon Sep 17 00:00:00 2001 +From: Jakub Kicinski +Date: Fri, 31 Jul 2015 15:04:47 +0200 +Subject: mt7601u: use correct ieee80211_rx variant + +Rx is run inside a tasklet so ieee80211_rx() should be used +instead of ieee80211_rx_ni(). + +Signed-off-by: Jakub Kicinski +Signed-off-by: Kalle Valo +--- + drivers/net/wireless/mediatek/mt7601u/dma.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/wireless/mediatek/mt7601u/dma.c b/drivers/net/wireless/mediatek/mt7601u/dma.c +index 7217da4..fb183e3 100644 +--- a/drivers/net/wireless/mediatek/mt7601u/dma.c ++++ b/drivers/net/wireless/mediatek/mt7601u/dma.c +@@ -112,7 +112,7 @@ static void mt7601u_rx_process_seg(struct mt7601u_dev *dev, u8 *data, + if (!skb) + return; + +- ieee80211_rx_ni(dev->hw, skb); ++ ieee80211_rx(dev->hw, skb); + } + + static u16 mt7601u_rx_next_seg_len(u8 *data, u32 data_len) +-- +cgit v0.12 + +From 4513493d188d5e3052aee68eda85eaaa1a4e41c2 Mon Sep 17 00:00:00 2001 +From: Jakub Kicinski +Date: Fri, 31 Jul 2015 15:04:48 +0200 +Subject: mt7601u: fix tx status reporting contexts + +mac80211 requires that rx path does not run concurrently with +tx status reporting. Since rx path is run in driver tasklet, +tx status cannot be reported directly from interrupt context +(there would be no way to lock it out). + +Add tasklet for tx and move all possible code from irq handler +there. + +Note: tx tasklet is needed because workqueue is queued very + rarely and that kills TCP performance. + +Signed-off-by: Jakub Kicinski +Signed-off-by: Kalle Valo +--- + drivers/net/wireless/mediatek/mt7601u/dma.c | 30 +++++++++++++++++++++---- + drivers/net/wireless/mediatek/mt7601u/init.c | 1 + + drivers/net/wireless/mediatek/mt7601u/mac.c | 4 ++++ + drivers/net/wireless/mediatek/mt7601u/mt7601u.h | 2 ++ + 4 files changed, 33 insertions(+), 4 deletions(-) + +diff --git a/drivers/net/wireless/mediatek/mt7601u/dma.c b/drivers/net/wireless/mediatek/mt7601u/dma.c +index fb183e3..63c4854 100644 +--- a/drivers/net/wireless/mediatek/mt7601u/dma.c ++++ b/drivers/net/wireless/mediatek/mt7601u/dma.c +@@ -236,23 +236,42 @@ static void mt7601u_complete_tx(struct urb *urb) + skb = q->e[q->start].skb; + trace_mt_tx_dma_done(dev, skb); + +- mt7601u_tx_status(dev, skb); ++ __skb_queue_tail(&dev->tx_skb_done, skb); ++ tasklet_schedule(&dev->tx_tasklet); + + if (q->used == q->entries - q->entries / 8) + ieee80211_wake_queue(dev->hw, skb_get_queue_mapping(skb)); + + q->start = (q->start + 1) % q->entries; + q->used--; ++out: ++ spin_unlock_irqrestore(&dev->tx_lock, flags); ++} + +- if (urb->status) +- goto out; ++static void mt7601u_tx_tasklet(unsigned long data) ++{ ++ struct mt7601u_dev *dev = (struct mt7601u_dev *) data; ++ struct sk_buff_head skbs; ++ unsigned long flags; ++ ++ __skb_queue_head_init(&skbs); ++ ++ spin_lock_irqsave(&dev->tx_lock, flags); + + set_bit(MT7601U_STATE_MORE_STATS, &dev->state); + if (!test_and_set_bit(MT7601U_STATE_READING_STATS, &dev->state)) + queue_delayed_work(dev->stat_wq, &dev->stat_work, + msecs_to_jiffies(10)); +-out: ++ ++ skb_queue_splice_init(&dev->tx_skb_done, &skbs); ++ + spin_unlock_irqrestore(&dev->tx_lock, flags); ++ ++ while (!skb_queue_empty(&skbs)) { ++ struct sk_buff *skb = __skb_dequeue(&skbs); ++ ++ mt7601u_tx_status(dev, skb); ++ } + } + + static int mt7601u_dma_submit_tx(struct mt7601u_dev *dev, +@@ -475,6 +494,7 @@ int mt7601u_dma_init(struct mt7601u_dev *dev) + { + int ret = -ENOMEM; + ++ tasklet_init(&dev->tx_tasklet, mt7601u_tx_tasklet, (unsigned long) dev); + tasklet_init(&dev->rx_tasklet, mt7601u_rx_tasklet, (unsigned long) dev); + + ret = mt7601u_alloc_tx(dev); +@@ -502,4 +522,6 @@ void mt7601u_dma_cleanup(struct mt7601u_dev *dev) + + mt7601u_free_rx(dev); + mt7601u_free_tx(dev); ++ ++ tasklet_kill(&dev->tx_tasklet); + } +diff --git a/drivers/net/wireless/mediatek/mt7601u/init.c b/drivers/net/wireless/mediatek/mt7601u/init.c +index df3dd56..38eb20b 100644 +--- a/drivers/net/wireless/mediatek/mt7601u/init.c ++++ b/drivers/net/wireless/mediatek/mt7601u/init.c +@@ -456,6 +456,7 @@ struct mt7601u_dev *mt7601u_alloc_device(struct device *pdev) + spin_lock_init(&dev->lock); + spin_lock_init(&dev->con_mon_lock); + atomic_set(&dev->avg_ampdu_len, 1); ++ skb_queue_head_init(&dev->tx_skb_done); + + dev->stat_wq = alloc_workqueue("mt7601u", WQ_UNBOUND, 0); + if (!dev->stat_wq) { +diff --git a/drivers/net/wireless/mediatek/mt7601u/mac.c b/drivers/net/wireless/mediatek/mt7601u/mac.c +index 7514bce..e3928cf 100644 +--- a/drivers/net/wireless/mediatek/mt7601u/mac.c ++++ b/drivers/net/wireless/mediatek/mt7601u/mac.c +@@ -181,7 +181,11 @@ void mt76_send_tx_status(struct mt7601u_dev *dev, struct mt76_tx_status *stat) + } + + mt76_mac_fill_tx_status(dev, &info, stat); ++ ++ local_bh_disable(); + ieee80211_tx_status_noskb(dev->hw, sta, &info); ++ local_bh_enable(); ++ + rcu_read_unlock(); + } + +diff --git a/drivers/net/wireless/mediatek/mt7601u/mt7601u.h b/drivers/net/wireless/mediatek/mt7601u/mt7601u.h +index 6bdfc11..bc5e294 100644 +--- a/drivers/net/wireless/mediatek/mt7601u/mt7601u.h ++++ b/drivers/net/wireless/mediatek/mt7601u/mt7601u.h +@@ -199,7 +199,9 @@ struct mt7601u_dev { + + /* TX */ + spinlock_t tx_lock; ++ struct tasklet_struct tx_tasklet; + struct mt7601u_tx_queue *tx_q; ++ struct sk_buff_head tx_skb_done; + + atomic_t avg_ampdu_len; + +-- +cgit v0.12 + +From 78623bfb6f4cbdba3183621e8e0e781611217022 Mon Sep 17 00:00:00 2001 +From: Jakub Kicinski +Date: Fri, 31 Jul 2015 15:04:49 +0200 +Subject: mt7601u: lock out rx path and tx status reporting + +mac80211 requires that rx path does not run concurrently with +tx status reporting. Add a spinlock which will ensure that. + +Signed-off-by: Jakub Kicinski +Signed-off-by: Kalle Valo +--- + drivers/net/wireless/mediatek/mt7601u/dma.c | 2 ++ + drivers/net/wireless/mediatek/mt7601u/init.c | 1 + + drivers/net/wireless/mediatek/mt7601u/mac.c | 4 ++-- + drivers/net/wireless/mediatek/mt7601u/mt7601u.h | 4 +++- + drivers/net/wireless/mediatek/mt7601u/tx.c | 3 +++ + 5 files changed, 11 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/wireless/mediatek/mt7601u/dma.c b/drivers/net/wireless/mediatek/mt7601u/dma.c +index 63c4854..57a80cf 100644 +--- a/drivers/net/wireless/mediatek/mt7601u/dma.c ++++ b/drivers/net/wireless/mediatek/mt7601u/dma.c +@@ -112,7 +112,9 @@ static void mt7601u_rx_process_seg(struct mt7601u_dev *dev, u8 *data, + if (!skb) + return; + ++ spin_lock(&dev->mac_lock); + ieee80211_rx(dev->hw, skb); ++ spin_unlock(&dev->mac_lock); + } + + static u16 mt7601u_rx_next_seg_len(u8 *data, u32 data_len) +diff --git a/drivers/net/wireless/mediatek/mt7601u/init.c b/drivers/net/wireless/mediatek/mt7601u/init.c +index 38eb20b..26190fd 100644 +--- a/drivers/net/wireless/mediatek/mt7601u/init.c ++++ b/drivers/net/wireless/mediatek/mt7601u/init.c +@@ -454,6 +454,7 @@ struct mt7601u_dev *mt7601u_alloc_device(struct device *pdev) + spin_lock_init(&dev->tx_lock); + spin_lock_init(&dev->rx_lock); + spin_lock_init(&dev->lock); ++ spin_lock_init(&dev->mac_lock); + spin_lock_init(&dev->con_mon_lock); + atomic_set(&dev->avg_ampdu_len, 1); + skb_queue_head_init(&dev->tx_skb_done); +diff --git a/drivers/net/wireless/mediatek/mt7601u/mac.c b/drivers/net/wireless/mediatek/mt7601u/mac.c +index e3928cf..e21c53e 100644 +--- a/drivers/net/wireless/mediatek/mt7601u/mac.c ++++ b/drivers/net/wireless/mediatek/mt7601u/mac.c +@@ -182,9 +182,9 @@ void mt76_send_tx_status(struct mt7601u_dev *dev, struct mt76_tx_status *stat) + + mt76_mac_fill_tx_status(dev, &info, stat); + +- local_bh_disable(); ++ spin_lock_bh(&dev->mac_lock); + ieee80211_tx_status_noskb(dev->hw, sta, &info); +- local_bh_enable(); ++ spin_unlock_bh(&dev->mac_lock); + + rcu_read_unlock(); + } +diff --git a/drivers/net/wireless/mediatek/mt7601u/mt7601u.h b/drivers/net/wireless/mediatek/mt7601u/mt7601u.h +index bc5e294..428bd2f 100644 +--- a/drivers/net/wireless/mediatek/mt7601u/mt7601u.h ++++ b/drivers/net/wireless/mediatek/mt7601u/mt7601u.h +@@ -141,8 +141,9 @@ enum { + /** + * struct mt7601u_dev - adapter structure + * @lock: protects @wcid->tx_rate. ++ * @mac_lock: locks out mac80211's tx status and rx paths. + * @tx_lock: protects @tx_q and changes of MT7601U_STATE_*_STATS +- flags in @state. ++ * flags in @state. + * @rx_lock: protects @rx_q. + * @con_mon_lock: protects @ap_bssid, @bcn_*, @avg_rssi. + * @mutex: ensures exclusive access from mac80211 callbacks. +@@ -177,6 +178,7 @@ struct mt7601u_dev { + struct mt76_wcid __rcu *wcid[N_WCIDS]; + + spinlock_t lock; ++ spinlock_t mac_lock; + + const u16 *beacon_offsets; + +diff --git a/drivers/net/wireless/mediatek/mt7601u/tx.c b/drivers/net/wireless/mediatek/mt7601u/tx.c +index 0be2080..a0a33dc 100644 +--- a/drivers/net/wireless/mediatek/mt7601u/tx.c ++++ b/drivers/net/wireless/mediatek/mt7601u/tx.c +@@ -116,7 +116,10 @@ void mt7601u_tx_status(struct mt7601u_dev *dev, struct sk_buff *skb) + ieee80211_tx_info_clear_status(info); + info->status.rates[0].idx = -1; + info->flags |= IEEE80211_TX_STAT_ACK; ++ ++ spin_lock(&dev->mac_lock); + ieee80211_tx_status(dev->hw, skb); ++ spin_unlock(&dev->mac_lock); + } + + static int mt7601u_skb_rooms(struct mt7601u_dev *dev, struct sk_buff *skb) +-- +cgit v0.12 + diff --git a/src/patches/linux-3.10-dvb_tevi_s482.patch b/src/patches/linux-3.10-dvb_tevi_s482.patch deleted file mode 100644 index fed875da80..0000000000 --- a/src/patches/linux-3.10-dvb_tevi_s482.patch +++ /dev/null @@ -1,240 +0,0 @@ -diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c -index 1a3df10..82d35c6 100644 ---- a/drivers/media/usb/dvb-usb/dw2102.c -+++ b/drivers/media/usb/dvb-usb/dw2102.c -@@ -31,6 +31,9 @@ - #include "m88rs2000.h" - #include "tda18271.h" - #include "cxd2820r.h" -+#include "m88ds3103.h" -+#include "m88ts2022.h" -+ - - /* Max transfer size done by I2C transfer functions */ - #define MAX_XFER_SIZE 64 -@@ -71,6 +74,14 @@ - #define USB_PID_TEVII_S480_2 0xd482 - #endif - -+#ifndef USB_PID_TEVII_S482_1 -+#define USB_PID_TEVII_S482_1 0xd483 -+#endif -+ -+#ifndef USB_PID_TEVII_S482_2 -+#define USB_PID_TEVII_S482_2 0xd484 -+#endif -+ - #ifndef USB_PID_PROF_1100 - #define USB_PID_PROF_1100 0xb012 - #endif -@@ -1117,6 +1128,19 @@ static struct tda18271_config tda18271_config = { - .gate = TDA18271_GATE_DIGITAL, - }; - -+static const struct m88ds3103_config s482_m88ds3103_config = { -+ .i2c_addr = 0x68, -+ .clock = 27000000, -+ .i2c_wr_max = 33, -+ .clock_out = 0, -+ .ts_mode = M88DS3103_TS_CI, -+ .ts_clk = 16000, -+ .ts_clk_pol = 0, -+ .agc = 0x99, -+ .lnb_hv_pol = 1, -+ .lnb_en_pol = 1, -+ }; -+ - static u8 m88rs2000_inittab[] = { - DEMOD_WRITE, 0x9a, 0x30, - DEMOD_WRITE, 0x00, 0x01, -@@ -1386,6 +1410,83 @@ static int su3000_frontend_attach(struct dvb_usb_adapter *d) - return -EIO; - } - -+static int m88ds3103_frontend_attach(struct dvb_usb_adapter *d) -+{ -+ u8 obuf[3] = { 0xe, 0x80, 0 }; -+ u8 ibuf[] = { 0 }; -+ -+ /* demod I2C adapter */ -+ struct i2c_adapter *i2c_adapter; -+ struct i2c_client *client; -+ struct i2c_board_info info; -+ struct m88ts2022_config m88ts2022_config = { -+ .clock = 27000000, -+ }; -+ memset(&info, 0, sizeof(struct i2c_board_info)); -+ if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) -+ err("command 0x0e transfer failed."); -+ -+ obuf[0] = 0xe; -+ obuf[1] = 0x02; -+ obuf[2] = 1; -+ -+ if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) -+ err("command 0x0e transfer failed."); -+ msleep(300); -+ -+ obuf[0] = 0xe; -+ obuf[1] = 0x83; -+ obuf[2] = 0; -+ -+ if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) -+ err("command 0x0e transfer failed."); -+ -+ obuf[0] = 0xe; -+ obuf[1] = 0x83; -+ obuf[2] = 1; -+ -+ if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0) -+ err("command 0x0e transfer failed."); -+ -+ obuf[0] = 0x51; -+ -+ if (dvb_usb_generic_rw(d->dev, obuf, 1, ibuf, 1, 0) < 0) -+ err("command 0x51 transfer failed."); -+ d->fe_adap[0].fe = dvb_attach(m88ds3103_attach, -+ &s482_m88ds3103_config, -+ &d->dev->i2c_adap, -+ &i2c_adapter); -+ if (d->fe_adap[0].fe == NULL) -+ return -EIO; -+ /* attach tuner */ -+ m88ts2022_config.fe = d->fe_adap[0].fe; -+ strlcpy(info.type, "m88ts2022", I2C_NAME_SIZE); -+ info.addr = 0x60; -+ info.platform_data = &m88ts2022_config; -+ request_module("m88ts2022"); -+ client = i2c_new_device(i2c_adapter, &info); -+ if (client == NULL || client->dev.driver == NULL) { -+ dvb_frontend_detach(d->fe_adap[0].fe); -+ goto fail_attach; -+ } -+ if (!try_module_get(client->dev.driver->owner)) { -+ i2c_unregister_device(client); -+ dvb_frontend_detach(d->fe_adap[0].fe); -+ goto fail_attach; -+ } -+ info("attached m88ds3103/m88ts2022!\n"); -+ -+ /* delegate signal strength measurement to tuner */ -+ -+ d->fe_adap[0].fe->ops.read_signal_strength = -+ d->fe_adap[0].fe->ops.tuner_ops.get_rf_strength; -+ -+ return 0; -+fail_attach: -+ info("Failed to attach m88ds3103/m88ts2022!\n"); -+ return -EIO; -+} -+ - static int t220_frontend_attach(struct dvb_usb_adapter *d) - { - u8 obuf[3] = { 0xe, 0x87, 0 }; -@@ -1557,6 +1658,8 @@ enum dw2102_table_entry { - TEVII_S480_2, - X3M_SPC1400HD, - TEVII_S421, -+ TEVII_S482_1, -+ TEVII_S482_2, - TEVII_S632, - TERRATEC_CINERGY_S2_R2, - GOTVIEW_SAT_HD, -@@ -1580,7 +1683,9 @@ static struct usb_device_id dw2102_table[] = { - [TEVII_S480_2] = {USB_DEVICE(0x9022, USB_PID_TEVII_S480_2)}, - [X3M_SPC1400HD] = {USB_DEVICE(0x1f4d, 0x3100)}, - [TEVII_S421] = {USB_DEVICE(0x9022, USB_PID_TEVII_S421)}, -- [TEVII_S632] = {USB_DEVICE(0x9022, USB_PID_TEVII_S632)}, -+ [TEVII_S482_1] = { USB_DEVICE(0x9022, USB_PID_TEVII_S482_1) }, -+ [TEVII_S482_2] = { USB_DEVICE(0x9022, USB_PID_TEVII_S482_2) }, -+ [TEVII_S632] = { USB_DEVICE(0x9022, USB_PID_TEVII_S632) }, - [TERRATEC_CINERGY_S2_R2] = {USB_DEVICE(USB_VID_TERRATEC, 0x00b0)}, - [GOTVIEW_SAT_HD] = {USB_DEVICE(0x1FE1, USB_PID_GOTVIEW_SAT_HD)}, - [GENIATECH_T220] = {USB_DEVICE(0x1f4d, 0xD220)}, -@@ -2012,6 +2117,59 @@ static struct dvb_usb_device_properties su3000_properties = { - } - }; - -+static struct dvb_usb_device_properties m88ds3103_properties = { -+ .caps = DVB_USB_IS_AN_I2C_ADAPTER, -+ .usb_ctrl = DEVICE_SPECIFIC, -+ .size_of_priv = sizeof(struct su3000_state), -+ .power_ctrl = su3000_power_ctrl, -+ .num_adapters = 1, -+ .identify_state = su3000_identify_state, -+ .i2c_algo = &su3000_i2c_algo, -+ -+ .rc.core = { -+ .rc_interval = 150, -+ .rc_codes = RC_MAP_TEVII_NEC, -+ .module_name = "dw2102", -+ .allowed_protos = RC_BIT_NEC, -+ .rc_query = dw2102_rc_query, -+ }, -+ -+ .read_mac_address = su3000_read_mac_address, -+ -+ .generic_bulk_ctrl_endpoint = 0x01, -+ -+ .adapter = { -+ { -+ .num_frontends = 1, -+ .fe = { { -+ .streaming_ctrl = su3000_streaming_ctrl, -+ .frontend_attach = m88ds3103_frontend_attach, -+ .stream = { -+ .type = USB_BULK, -+ .count = 8, -+ .endpoint = 0x82, -+ .u = { -+ .bulk = { -+ .buffersize = 4096, -+ } -+ } -+ } -+ } }, -+ } -+ }, -+ .num_device_descs = 2, -+ .devices = { -+ { "TeVii S482.1 USB", -+ { &dw2102_table[TEVII_S482_1], NULL }, -+ { NULL }, -+ }, -+ { "TeVii S482.2 USB", -+ { &dw2102_table[TEVII_S482_2], NULL }, -+ { NULL }, -+ }, -+ } -+}; -+ - static struct dvb_usb_device_properties t220_properties = { - .caps = DVB_USB_IS_AN_I2C_ADAPTER, - .usb_ctrl = DEVICE_SPECIFIC, -@@ -2131,11 +2289,13 @@ static int dw2102_probe(struct usb_interface *intf, - 0 == dvb_usb_device_init(intf, p7500, - THIS_MODULE, NULL, adapter_nr) || - 0 == dvb_usb_device_init(intf, s421, -- THIS_MODULE, NULL, adapter_nr) || -- 0 == dvb_usb_device_init(intf, &su3000_properties, -- THIS_MODULE, NULL, adapter_nr) || -+ THIS_MODULE, NULL, adapter_nr) || - 0 == dvb_usb_device_init(intf, &t220_properties, -- THIS_MODULE, NULL, adapter_nr)) -+ THIS_MODULE, NULL, adapter_nr) || -+ 0 == dvb_usb_device_init(intf, &m88ds3103_properties, -+ THIS_MODULE, NULL, adapter_nr) || -+ 0 == dvb_usb_device_init(intf, &su3000_properties, -+ THIS_MODULE, NULL, adapter_nr)) - return 0; - - return -ENODEV; -@@ -2153,7 +2313,7 @@ module_usb_driver(dw2102_driver); - MODULE_AUTHOR("Igor M. Liplianin (c) liplianin@me.by"); - MODULE_DESCRIPTION("Driver for DVBWorld DVB-S 2101, 2102, DVB-S2 2104," - " DVB-C 3101 USB2.0," -- " TeVii S600, S630, S650, S660, S480, S421, S632" -+ " TeVii S600, S630, S650, S660, S480, S482, S421, S632" - " Prof 1100, 7500 USB2.0," - " Geniatech SU3000, T220 devices"); - MODULE_VERSION("0.1");