aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2014-09-24 14:20:48 -0400
committerOlof Johansson <olof@lixom.net>2014-09-24 14:21:01 -0400
commit28fd837204236cf5b5533525e5b53c5176fa97a3 (patch)
treeac7dcad925950bc0bb53c5a55cb199e31e7aaee0 /drivers
parentc82eb464879dd0ecbe0c4cb1b80ac4e82b634872 (diff)
parent64d14a31d5410ea34641c41795e0ba222bda740c (diff)
Merge tag 'imx-cleanup-3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux into next/cleanup
Merge "ARM: imx: cleanup for 3.18" from Shawn Guo: The i.MX cleanup for 3.18: - Reomve a few i.MX27 and i.MX1 board files - Remove imx_scu_standby_enable() since core code handles scu standby now - Remove unnecessary iomux declaration - Remove useless sound card property from vf610-twr dts * tag 'imx-cleanup-3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux: ARM: imx: Remove mach-mxt_td60 board file ARM: i.MX: Remove i.MX1 ADS board support ARM: dts: vf610-twr: remove useless property for sound card. ARM: imx: remove imx_scu_standby_enable() ARM: i.MX: Remove Phytec i.MX27 PCM038/PCM970 board files ARM: i.MX: Remove mach-cpuimx27sd board file ARM: imx: iomux: Do not export symbol without public declaration Signed-off-by: Olof Johansson <olof@lixom.net>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/acpi/acpi_lpss.c17
-rw-r--r--drivers/acpi/ec.c21
-rw-r--r--drivers/acpi/pci_irq.c4
-rw-r--r--drivers/acpi/scan.c17
-rw-r--r--drivers/block/brd.c6
-rw-r--r--drivers/block/xsysace.c1
-rw-r--r--drivers/block/zram/zram_drv.c10
-rw-r--r--drivers/block/zram/zram_drv.h2
-rw-r--r--drivers/cpufreq/intel_pstate.c3
-rw-r--r--drivers/cpufreq/s5pv210-cpufreq.c2
-rw-r--r--drivers/cpuidle/cpuidle-big_little.c13
-rw-r--r--drivers/dma-buf/fence.c2
-rw-r--r--drivers/gpu/drm/ast/ast_tables.h1
-rw-r--r--drivers/gpu/drm/drm_crtc.c3
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c2
-rw-r--r--drivers/gpu/drm/msm/msm_drv.c3
-rw-r--r--drivers/gpu/drm/msm/msm_fbdev.c2
-rw-r--r--drivers/gpu/drm/msm/msm_iommu.c4
-rw-r--r--drivers/gpu/drm/radeon/cik.c26
-rw-r--r--drivers/gpu/drm/radeon/ni.c9
-rw-r--r--drivers/gpu/drm/radeon/r600.c26
-rw-r--r--drivers/gpu/drm/radeon/radeon.h2
-rw-r--r--drivers/gpu/drm/radeon/rv770.c23
-rw-r--r--drivers/gpu/drm/radeon/si.c21
-rw-r--r--drivers/gpu/drm/sti/Kconfig1
-rw-r--r--drivers/gpu/drm/sti/sti_drm_drv.c4
-rw-r--r--drivers/gpu/drm/sti/sti_hda.c10
-rw-r--r--drivers/gpu/drm/sti/sti_hdmi.c10
-rw-r--r--drivers/gpu/drm/sti/sti_tvout.c6
-rw-r--r--drivers/hid/hid-logitech-dj.c43
-rw-r--r--drivers/hid/hid-logitech-dj.h1
-rw-r--r--drivers/hid/hid-magicmouse.c10
-rw-r--r--drivers/hid/hid-picolcd_core.c6
-rw-r--r--drivers/md/dm-crypt.c25
-rw-r--r--drivers/mfd/ab8500-core.c2
-rw-r--r--drivers/mfd/htc-i2cpld.c2
-rw-r--r--drivers/mfd/omap-usb-host.c2
-rw-r--r--drivers/mfd/twl4030-power.c20
-rw-r--r--drivers/misc/mei/client.c1
-rw-r--r--drivers/misc/mei/nfc.c11
-rw-r--r--drivers/mtd/nand/omap2.c16
-rw-r--r--drivers/pinctrl/nomadik/pinctrl-abx500.c3
-rw-r--r--drivers/pinctrl/pinctrl-at91.c4
-rw-r--r--drivers/pinctrl/pinctrl-rockchip.c15
-rw-r--r--drivers/pinctrl/pinctrl-tegra-xusb.c5
-rw-r--r--drivers/pinctrl/samsung/pinctrl-exynos.c69
-rw-r--r--drivers/pinctrl/samsung/pinctrl-samsung.h1
-rw-r--r--drivers/pinctrl/sh-pfc/pfc-r8a7791.c8
-rw-r--r--drivers/rtc/rtc-s5m.c21
-rw-r--r--drivers/s390/char/con3215.c20
-rw-r--r--drivers/s390/char/sclp_tty.c2
-rw-r--r--drivers/scsi/scsi_lib.c1
-rw-r--r--drivers/spi/spi-au1550.c2
-rw-r--r--drivers/spi/spi-davinci.c16
-rw-r--r--drivers/spi/spi-dw-pci.c2
-rw-r--r--drivers/spi/spi-dw.c2
-rw-r--r--drivers/spi/spi-omap2-mcspi.c3
-rw-r--r--drivers/spi/spi-pxa2xx.c1
-rw-r--r--drivers/spi/spi-rockchip.c4
-rw-r--r--drivers/spi/spi-rspi.c94
-rw-r--r--drivers/spi/spi-sh-msiof.c71
-rw-r--r--drivers/spi/spi.c1
-rw-r--r--drivers/staging/Kconfig2
-rw-r--r--drivers/staging/Makefile1
-rw-r--r--drivers/staging/android/logger.c5
-rw-r--r--drivers/staging/et131x/et131x.c68
-rw-r--r--drivers/staging/lustre/lustre/libcfs/workitem.c1
-rw-r--r--drivers/staging/lustre/lustre/obdclass/class_obd.c2
-rw-r--r--drivers/staging/rtl8188eu/os_dep/usb_intf.c2
-rw-r--r--drivers/staging/usbip/uapi/usbip.h26
-rw-r--r--drivers/staging/usbip/userspace/.gitignore28
-rw-r--r--drivers/staging/usbip/userspace/AUTHORS3
-rw-r--r--drivers/staging/usbip/userspace/COPYING340
-rw-r--r--drivers/staging/usbip/userspace/INSTALL237
-rw-r--r--drivers/staging/usbip/userspace/Makefile.am6
-rw-r--r--drivers/staging/usbip/userspace/README202
-rwxr-xr-xdrivers/staging/usbip/userspace/autogen.sh9
-rwxr-xr-xdrivers/staging/usbip/userspace/cleanup.sh12
-rw-r--r--drivers/staging/usbip/userspace/configure.ac111
-rw-r--r--drivers/staging/usbip/userspace/doc/usbip.895
-rw-r--r--drivers/staging/usbip/userspace/doc/usbipd.891
-rw-r--r--drivers/staging/usbip/userspace/libsrc/Makefile.am8
-rw-r--r--drivers/staging/usbip/userspace/libsrc/list.h136
-rw-r--r--drivers/staging/usbip/userspace/libsrc/names.c504
-rw-r--r--drivers/staging/usbip/userspace/libsrc/names.h41
-rw-r--r--drivers/staging/usbip/userspace/libsrc/sysfs_utils.c31
-rw-r--r--drivers/staging/usbip/userspace/libsrc/sysfs_utils.h8
-rw-r--r--drivers/staging/usbip/userspace/libsrc/usbip_common.c285
-rw-r--r--drivers/staging/usbip/userspace/libsrc/usbip_common.h137
-rw-r--r--drivers/staging/usbip/userspace/libsrc/usbip_host_driver.c280
-rw-r--r--drivers/staging/usbip/userspace/libsrc/usbip_host_driver.h49
-rw-r--r--drivers/staging/usbip/userspace/libsrc/vhci_driver.c411
-rw-r--r--drivers/staging/usbip/userspace/libsrc/vhci_driver.h59
-rw-r--r--drivers/staging/usbip/userspace/src/Makefile.am11
-rw-r--r--drivers/staging/usbip/userspace/src/usbip.c201
-rw-r--r--drivers/staging/usbip/userspace/src/usbip.h40
-rw-r--r--drivers/staging/usbip/userspace/src/usbip_attach.c241
-rw-r--r--drivers/staging/usbip/userspace/src/usbip_bind.c214
-rw-r--r--drivers/staging/usbip/userspace/src/usbip_detach.c110
-rw-r--r--drivers/staging/usbip/userspace/src/usbip_list.c283
-rw-r--r--drivers/staging/usbip/userspace/src/usbip_network.c303
-rw-r--r--drivers/staging/usbip/userspace/src/usbip_network.h185
-rw-r--r--drivers/staging/usbip/userspace/src/usbip_port.c57
-rw-r--r--drivers/staging/usbip/userspace/src/usbip_unbind.c141
-rw-r--r--drivers/staging/usbip/userspace/src/usbipd.c679
-rw-r--r--drivers/staging/usbip/userspace/src/utils.c52
-rw-r--r--drivers/staging/usbip/userspace/src/utils.h25
-rw-r--r--drivers/thunderbolt/path.c21
-rw-r--r--drivers/usb/Kconfig2
-rw-r--r--drivers/usb/Makefile2
-rw-r--r--drivers/usb/core/hub.c16
-rw-r--r--drivers/usb/dwc2/gadget.c2
-rw-r--r--drivers/usb/dwc3/dwc3-omap.c2
-rw-r--r--drivers/usb/gadget/Makefile2
-rw-r--r--drivers/usb/gadget/function/Makefile4
-rw-r--r--drivers/usb/gadget/function/u_ether.c3
-rw-r--r--drivers/usb/gadget/function/uvc_video.c3
-rw-r--r--drivers/usb/gadget/legacy/Makefile6
-rw-r--r--drivers/usb/gadget/legacy/dbgp.c2
-rw-r--r--drivers/usb/gadget/legacy/inode.c2
-rw-r--r--drivers/usb/gadget/udc/Kconfig3
-rw-r--r--drivers/usb/gadget/udc/atmel_usba_udc.c2
-rw-r--r--drivers/usb/gadget/udc/fusb300_udc.c8
-rw-r--r--drivers/usb/gadget/udc/pch_udc.c22
-rw-r--r--drivers/usb/gadget/udc/r8a66597-udc.c4
-rw-r--r--drivers/usb/host/ehci-hub.c2
-rw-r--r--drivers/usb/host/xhci-pci.c9
-rw-r--r--drivers/usb/host/xhci-ring.c104
-rw-r--r--drivers/usb/host/xhci.c3
-rw-r--r--drivers/usb/misc/sisusbvga/sisusb.c1
-rw-r--r--drivers/usb/musb/ux500_dma.c2
-rw-r--r--drivers/usb/phy/phy-gpio-vbus-usb.c4
-rw-r--r--drivers/usb/phy/phy-msm-usb.c4
-rw-r--r--drivers/usb/phy/phy-samsung-usb.h2
-rw-r--r--drivers/usb/phy/phy.c3
-rw-r--r--drivers/usb/serial/ftdi_sio.c3
-rw-r--r--drivers/usb/serial/ftdi_sio_ids.h7
-rw-r--r--drivers/usb/serial/option.c31
-rw-r--r--drivers/usb/serial/pl2303.c1
-rw-r--r--drivers/usb/serial/pl2303.h1
-rw-r--r--drivers/usb/serial/usb-serial.c37
-rw-r--r--drivers/usb/serial/whiteheat.c7
-rw-r--r--drivers/usb/serial/zte_ev.c20
-rw-r--r--drivers/usb/storage/unusual_devs.h6
-rw-r--r--drivers/usb/usbip/Kconfig (renamed from drivers/staging/usbip/Kconfig)0
-rw-r--r--drivers/usb/usbip/Makefile (renamed from drivers/staging/usbip/Makefile)0
-rw-r--r--drivers/usb/usbip/README (renamed from drivers/staging/usbip/README)0
-rw-r--r--drivers/usb/usbip/stub.h (renamed from drivers/staging/usbip/stub.h)0
-rw-r--r--drivers/usb/usbip/stub_dev.c (renamed from drivers/staging/usbip/stub_dev.c)27
-rw-r--r--drivers/usb/usbip/stub_main.c (renamed from drivers/staging/usbip/stub_main.c)0
-rw-r--r--drivers/usb/usbip/stub_rx.c (renamed from drivers/staging/usbip/stub_rx.c)0
-rw-r--r--drivers/usb/usbip/stub_tx.c (renamed from drivers/staging/usbip/stub_tx.c)0
-rw-r--r--drivers/usb/usbip/usbip_common.c (renamed from drivers/staging/usbip/usbip_common.c)0
-rw-r--r--drivers/usb/usbip/usbip_common.h (renamed from drivers/staging/usbip/usbip_common.h)2
-rw-r--r--drivers/usb/usbip/usbip_event.c (renamed from drivers/staging/usbip/usbip_event.c)0
-rw-r--r--drivers/usb/usbip/usbip_protocol.txt (renamed from drivers/staging/usbip/usbip_protocol.txt)0
-rw-r--r--drivers/usb/usbip/vhci.h (renamed from drivers/staging/usbip/vhci.h)0
-rw-r--r--drivers/usb/usbip/vhci_hcd.c (renamed from drivers/staging/usbip/vhci_hcd.c)0
-rw-r--r--drivers/usb/usbip/vhci_rx.c (renamed from drivers/staging/usbip/vhci_rx.c)0
-rw-r--r--drivers/usb/usbip/vhci_sysfs.c (renamed from drivers/staging/usbip/vhci_sysfs.c)0
-rw-r--r--drivers/usb/usbip/vhci_tx.c (renamed from drivers/staging/usbip/vhci_tx.c)0
-rw-r--r--drivers/usb/wusbcore/wa-xfer.c3
-rw-r--r--drivers/video/backlight/pwm_bl.c1
-rw-r--r--drivers/video/fbdev/amba-clcd.c23
-rw-r--r--drivers/video/fbdev/atmel_lcdfb.c2
-rw-r--r--drivers/video/fbdev/chipsfb.c2
-rw-r--r--drivers/video/fbdev/da8xx-fb.c2
-rw-r--r--drivers/video/of_display_timing.c1
168 files changed, 760 insertions, 6123 deletions
diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
index ce06149088c5..9dfec48dd4e5 100644
--- a/drivers/acpi/acpi_lpss.c
+++ b/drivers/acpi/acpi_lpss.c
@@ -196,6 +196,17 @@ static struct lpss_device_desc byt_i2c_dev_desc = {
196 .setup = lpss_i2c_setup, 196 .setup = lpss_i2c_setup,
197}; 197};
198 198
199static struct lpss_shared_clock bsw_pwm_clock = {
200 .name = "pwm_clk",
201 .rate = 19200000,
202};
203
204static struct lpss_device_desc bsw_pwm_dev_desc = {
205 .clk_required = true,
206 .save_ctx = true,
207 .shared_clock = &bsw_pwm_clock,
208};
209
199#else 210#else
200 211
201#define LPSS_ADDR(desc) (0UL) 212#define LPSS_ADDR(desc) (0UL)
@@ -225,6 +236,12 @@ static const struct acpi_device_id acpi_lpss_device_ids[] = {
225 { "INT33B2", }, 236 { "INT33B2", },
226 { "INT33FC", }, 237 { "INT33FC", },
227 238
239 /* Braswell LPSS devices */
240 { "80862288", LPSS_ADDR(bsw_pwm_dev_desc) },
241 { "8086228A", LPSS_ADDR(byt_uart_dev_desc) },
242 { "8086228E", LPSS_ADDR(byt_spi_dev_desc) },
243 { "808622C1", LPSS_ADDR(byt_i2c_dev_desc) },
244
228 { "INT3430", LPSS_ADDR(lpt_dev_desc) }, 245 { "INT3430", LPSS_ADDR(lpt_dev_desc) },
229 { "INT3431", LPSS_ADDR(lpt_dev_desc) }, 246 { "INT3431", LPSS_ADDR(lpt_dev_desc) },
230 { "INT3432", LPSS_ADDR(lpt_i2c_dev_desc) }, 247 { "INT3432", LPSS_ADDR(lpt_i2c_dev_desc) },
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index a66ab658abbc..9922cc46b15c 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -197,6 +197,8 @@ static bool advance_transaction(struct acpi_ec *ec)
197 t->rdata[t->ri++] = acpi_ec_read_data(ec); 197 t->rdata[t->ri++] = acpi_ec_read_data(ec);
198 if (t->rlen == t->ri) { 198 if (t->rlen == t->ri) {
199 t->flags |= ACPI_EC_COMMAND_COMPLETE; 199 t->flags |= ACPI_EC_COMMAND_COMPLETE;
200 if (t->command == ACPI_EC_COMMAND_QUERY)
201 pr_debug("hardware QR_EC completion\n");
200 wakeup = true; 202 wakeup = true;
201 } 203 }
202 } else 204 } else
@@ -208,7 +210,20 @@ static bool advance_transaction(struct acpi_ec *ec)
208 } 210 }
209 return wakeup; 211 return wakeup;
210 } else { 212 } else {
211 if ((status & ACPI_EC_FLAG_IBF) == 0) { 213 /*
214 * There is firmware refusing to respond QR_EC when SCI_EVT
215 * is not set, for which case, we complete the QR_EC
216 * without issuing it to the firmware.
217 * https://bugzilla.kernel.org/show_bug.cgi?id=86211
218 */
219 if (!(status & ACPI_EC_FLAG_SCI) &&
220 (t->command == ACPI_EC_COMMAND_QUERY)) {
221 t->flags |= ACPI_EC_COMMAND_POLL;
222 t->rdata[t->ri++] = 0x00;
223 t->flags |= ACPI_EC_COMMAND_COMPLETE;
224 pr_debug("software QR_EC completion\n");
225 wakeup = true;
226 } else if ((status & ACPI_EC_FLAG_IBF) == 0) {
212 acpi_ec_write_cmd(ec, t->command); 227 acpi_ec_write_cmd(ec, t->command);
213 t->flags |= ACPI_EC_COMMAND_POLL; 228 t->flags |= ACPI_EC_COMMAND_POLL;
214 } else 229 } else
@@ -288,11 +303,11 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec,
288 /* following two actions should be kept atomic */ 303 /* following two actions should be kept atomic */
289 ec->curr = t; 304 ec->curr = t;
290 start_transaction(ec); 305 start_transaction(ec);
291 if (ec->curr->command == ACPI_EC_COMMAND_QUERY)
292 clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
293 spin_unlock_irqrestore(&ec->lock, tmp); 306 spin_unlock_irqrestore(&ec->lock, tmp);
294 ret = ec_poll(ec); 307 ret = ec_poll(ec);
295 spin_lock_irqsave(&ec->lock, tmp); 308 spin_lock_irqsave(&ec->lock, tmp);
309 if (ec->curr->command == ACPI_EC_COMMAND_QUERY)
310 clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
296 ec->curr = NULL; 311 ec->curr = NULL;
297 spin_unlock_irqrestore(&ec->lock, tmp); 312 spin_unlock_irqrestore(&ec->lock, tmp);
298 return ret; 313 return ret;
diff --git a/drivers/acpi/pci_irq.c b/drivers/acpi/pci_irq.c
index c96887d5289e..6e6b80eb0bba 100644
--- a/drivers/acpi/pci_irq.c
+++ b/drivers/acpi/pci_irq.c
@@ -484,6 +484,10 @@ void acpi_pci_irq_disable(struct pci_dev *dev)
484 /* Keep IOAPIC pin configuration when suspending */ 484 /* Keep IOAPIC pin configuration when suspending */
485 if (dev->dev.power.is_prepared) 485 if (dev->dev.power.is_prepared)
486 return; 486 return;
487#ifdef CONFIG_PM_RUNTIME
488 if (dev->dev.power.runtime_status == RPM_SUSPENDING)
489 return;
490#endif
487 491
488 entry = acpi_pci_irq_lookup(dev, pin); 492 entry = acpi_pci_irq_lookup(dev, pin);
489 if (!entry) 493 if (!entry)
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 0a817ad24f16..9a9298994e26 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -922,12 +922,17 @@ static void acpi_device_notify(acpi_handle handle, u32 event, void *data)
922 device->driver->ops.notify(device, event); 922 device->driver->ops.notify(device, event);
923} 923}
924 924
925static acpi_status acpi_device_notify_fixed(void *data) 925static void acpi_device_notify_fixed(void *data)
926{ 926{
927 struct acpi_device *device = data; 927 struct acpi_device *device = data;
928 928
929 /* Fixed hardware devices have no handles */ 929 /* Fixed hardware devices have no handles */
930 acpi_device_notify(NULL, ACPI_FIXED_HARDWARE_EVENT, device); 930 acpi_device_notify(NULL, ACPI_FIXED_HARDWARE_EVENT, device);
931}
932
933static acpi_status acpi_device_fixed_event(void *data)
934{
935 acpi_os_execute(OSL_NOTIFY_HANDLER, acpi_device_notify_fixed, data);
931 return AE_OK; 936 return AE_OK;
932} 937}
933 938
@@ -938,12 +943,12 @@ static int acpi_device_install_notify_handler(struct acpi_device *device)
938 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON) 943 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON)
939 status = 944 status =
940 acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON, 945 acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
941 acpi_device_notify_fixed, 946 acpi_device_fixed_event,
942 device); 947 device);
943 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON) 948 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON)
944 status = 949 status =
945 acpi_install_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON, 950 acpi_install_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
946 acpi_device_notify_fixed, 951 acpi_device_fixed_event,
947 device); 952 device);
948 else 953 else
949 status = acpi_install_notify_handler(device->handle, 954 status = acpi_install_notify_handler(device->handle,
@@ -960,10 +965,10 @@ static void acpi_device_remove_notify_handler(struct acpi_device *device)
960{ 965{
961 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON) 966 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON)
962 acpi_remove_fixed_event_handler(ACPI_EVENT_POWER_BUTTON, 967 acpi_remove_fixed_event_handler(ACPI_EVENT_POWER_BUTTON,
963 acpi_device_notify_fixed); 968 acpi_device_fixed_event);
964 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON) 969 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON)
965 acpi_remove_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON, 970 acpi_remove_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON,
966 acpi_device_notify_fixed); 971 acpi_device_fixed_event);
967 else 972 else
968 acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY, 973 acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
969 acpi_device_notify); 974 acpi_device_notify);
@@ -975,7 +980,7 @@ static int acpi_device_probe(struct device *dev)
975 struct acpi_driver *acpi_drv = to_acpi_driver(dev->driver); 980 struct acpi_driver *acpi_drv = to_acpi_driver(dev->driver);
976 int ret; 981 int ret;
977 982
978 if (acpi_dev->handler) 983 if (acpi_dev->handler && !acpi_is_pnp_device(acpi_dev))
979 return -EINVAL; 984 return -EINVAL;
980 985
981 if (!acpi_drv->ops.add) 986 if (!acpi_drv->ops.add)
diff --git a/drivers/block/brd.c b/drivers/block/brd.c
index c7d138eca731..3598110d2cef 100644
--- a/drivers/block/brd.c
+++ b/drivers/block/brd.c
@@ -442,12 +442,15 @@ static int rd_nr;
442int rd_size = CONFIG_BLK_DEV_RAM_SIZE; 442int rd_size = CONFIG_BLK_DEV_RAM_SIZE;
443static int max_part; 443static int max_part;
444static int part_shift; 444static int part_shift;
445static int part_show = 0;
445module_param(rd_nr, int, S_IRUGO); 446module_param(rd_nr, int, S_IRUGO);
446MODULE_PARM_DESC(rd_nr, "Maximum number of brd devices"); 447MODULE_PARM_DESC(rd_nr, "Maximum number of brd devices");
447module_param(rd_size, int, S_IRUGO); 448module_param(rd_size, int, S_IRUGO);
448MODULE_PARM_DESC(rd_size, "Size of each RAM disk in kbytes."); 449MODULE_PARM_DESC(rd_size, "Size of each RAM disk in kbytes.");
449module_param(max_part, int, S_IRUGO); 450module_param(max_part, int, S_IRUGO);
450MODULE_PARM_DESC(max_part, "Maximum number of partitions per RAM disk"); 451MODULE_PARM_DESC(max_part, "Maximum number of partitions per RAM disk");
452module_param(part_show, int, S_IRUGO);
453MODULE_PARM_DESC(part_show, "Control RAM disk visibility in /proc/partitions");
451MODULE_LICENSE("GPL"); 454MODULE_LICENSE("GPL");
452MODULE_ALIAS_BLOCKDEV_MAJOR(RAMDISK_MAJOR); 455MODULE_ALIAS_BLOCKDEV_MAJOR(RAMDISK_MAJOR);
453MODULE_ALIAS("rd"); 456MODULE_ALIAS("rd");
@@ -501,7 +504,8 @@ static struct brd_device *brd_alloc(int i)
501 disk->fops = &brd_fops; 504 disk->fops = &brd_fops;
502 disk->private_data = brd; 505 disk->private_data = brd;
503 disk->queue = brd->brd_queue; 506 disk->queue = brd->brd_queue;
504 disk->flags |= GENHD_FL_SUPPRESS_PARTITION_INFO; 507 if (!part_show)
508 disk->flags |= GENHD_FL_SUPPRESS_PARTITION_INFO;
505 sprintf(disk->disk_name, "ram%d", i); 509 sprintf(disk->disk_name, "ram%d", i);
506 set_capacity(disk, rd_size * 2); 510 set_capacity(disk, rd_size * 2);
507 511
diff --git a/drivers/block/xsysace.c b/drivers/block/xsysace.c
index ab3ea62e5dfc..c4328d9d9981 100644
--- a/drivers/block/xsysace.c
+++ b/drivers/block/xsysace.c
@@ -1203,7 +1203,6 @@ static struct platform_driver ace_platform_driver = {
1203 .probe = ace_probe, 1203 .probe = ace_probe,
1204 .remove = ace_remove, 1204 .remove = ace_remove,
1205 .driver = { 1205 .driver = {
1206 .owner = THIS_MODULE,
1207 .name = "xsysace", 1206 .name = "xsysace",
1208 .of_match_table = ace_of_match, 1207 .of_match_table = ace_of_match,
1209 }, 1208 },
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index dfa4024c448a..d00831c3d731 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -378,7 +378,6 @@ static int zram_decompress_page(struct zram *zram, char *mem, u32 index)
378 /* Should NEVER happen. Return bio error if it does. */ 378 /* Should NEVER happen. Return bio error if it does. */
379 if (unlikely(ret)) { 379 if (unlikely(ret)) {
380 pr_err("Decompression failed! err=%d, page=%u\n", ret, index); 380 pr_err("Decompression failed! err=%d, page=%u\n", ret, index);
381 atomic64_inc(&zram->stats.failed_reads);
382 return ret; 381 return ret;
383 } 382 }
384 383
@@ -547,8 +546,6 @@ out:
547 zcomp_strm_release(zram->comp, zstrm); 546 zcomp_strm_release(zram->comp, zstrm);
548 if (is_partial_io(bvec)) 547 if (is_partial_io(bvec))
549 kfree(uncmem); 548 kfree(uncmem);
550 if (ret)
551 atomic64_inc(&zram->stats.failed_writes);
552 return ret; 549 return ret;
553} 550}
554 551
@@ -566,6 +563,13 @@ static int zram_bvec_rw(struct zram *zram, struct bio_vec *bvec, u32 index,
566 ret = zram_bvec_write(zram, bvec, index, offset); 563 ret = zram_bvec_write(zram, bvec, index, offset);
567 } 564 }
568 565
566 if (unlikely(ret)) {
567 if (rw == READ)
568 atomic64_inc(&zram->stats.failed_reads);
569 else
570 atomic64_inc(&zram->stats.failed_writes);
571 }
572
569 return ret; 573 return ret;
570} 574}
571 575
diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h
index 5b0afde729cd..e0f725c87cc6 100644
--- a/drivers/block/zram/zram_drv.h
+++ b/drivers/block/zram/zram_drv.h
@@ -84,7 +84,7 @@ struct zram_stats {
84 atomic64_t compr_data_size; /* compressed size of pages stored */ 84 atomic64_t compr_data_size; /* compressed size of pages stored */
85 atomic64_t num_reads; /* failed + successful */ 85 atomic64_t num_reads; /* failed + successful */
86 atomic64_t num_writes; /* --do-- */ 86 atomic64_t num_writes; /* --do-- */
87 atomic64_t failed_reads; /* should NEVER! happen */ 87 atomic64_t failed_reads; /* can happen when memory is too low */
88 atomic64_t failed_writes; /* can happen when memory is too low */ 88 atomic64_t failed_writes; /* can happen when memory is too low */
89 atomic64_t invalid_io; /* non-page-aligned I/O requests */ 89 atomic64_t invalid_io; /* non-page-aligned I/O requests */
90 atomic64_t notify_free; /* no. of swap slot free notifications */ 90 atomic64_t notify_free; /* no. of swap slot free notifications */
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
index c5eac949760d..e396ad3f8f3f 100644
--- a/drivers/cpufreq/intel_pstate.c
+++ b/drivers/cpufreq/intel_pstate.c
@@ -660,6 +660,7 @@ static const struct x86_cpu_id intel_pstate_cpu_ids[] = {
660 ICPU(0x3f, core_params), 660 ICPU(0x3f, core_params),
661 ICPU(0x45, core_params), 661 ICPU(0x45, core_params),
662 ICPU(0x46, core_params), 662 ICPU(0x46, core_params),
663 ICPU(0x4c, byt_params),
663 ICPU(0x4f, core_params), 664 ICPU(0x4f, core_params),
664 ICPU(0x56, core_params), 665 ICPU(0x56, core_params),
665 {} 666 {}
@@ -688,7 +689,7 @@ static int intel_pstate_init_cpu(unsigned int cpunum)
688 689
689 add_timer_on(&cpu->timer, cpunum); 690 add_timer_on(&cpu->timer, cpunum);
690 691
691 pr_info("Intel pstate controlling: cpu %d\n", cpunum); 692 pr_debug("Intel pstate controlling: cpu %d\n", cpunum);
692 693
693 return 0; 694 return 0;
694} 695}
diff --git a/drivers/cpufreq/s5pv210-cpufreq.c b/drivers/cpufreq/s5pv210-cpufreq.c
index 9a68225a757e..3f9791f07b8e 100644
--- a/drivers/cpufreq/s5pv210-cpufreq.c
+++ b/drivers/cpufreq/s5pv210-cpufreq.c
@@ -501,7 +501,7 @@ static int check_mem_type(void __iomem *dmc_reg)
501 return val >> 8; 501 return val >> 8;
502} 502}
503 503
504static int __init s5pv210_cpu_init(struct cpufreq_policy *policy) 504static int s5pv210_cpu_init(struct cpufreq_policy *policy)
505{ 505{
506 unsigned long mem_type; 506 unsigned long mem_type;
507 int ret; 507 int ret;
diff --git a/drivers/cpuidle/cpuidle-big_little.c b/drivers/cpuidle/cpuidle-big_little.c
index 344d79fa3407..ef94c3b81f18 100644
--- a/drivers/cpuidle/cpuidle-big_little.c
+++ b/drivers/cpuidle/cpuidle-big_little.c
@@ -138,25 +138,18 @@ static int bl_enter_powerdown(struct cpuidle_device *dev,
138 return idx; 138 return idx;
139} 139}
140 140
141static int __init bl_idle_driver_init(struct cpuidle_driver *drv, int cpu_id) 141static int __init bl_idle_driver_init(struct cpuidle_driver *drv, int part_id)
142{ 142{
143 struct cpuinfo_arm *cpu_info;
144 struct cpumask *cpumask; 143 struct cpumask *cpumask;
145 unsigned long cpuid;
146 int cpu; 144 int cpu;
147 145
148 cpumask = kzalloc(cpumask_size(), GFP_KERNEL); 146 cpumask = kzalloc(cpumask_size(), GFP_KERNEL);
149 if (!cpumask) 147 if (!cpumask)
150 return -ENOMEM; 148 return -ENOMEM;
151 149
152 for_each_possible_cpu(cpu) { 150 for_each_possible_cpu(cpu)
153 cpu_info = &per_cpu(cpu_data, cpu); 151 if (smp_cpuid_part(cpu) == part_id)
154 cpuid = is_smp() ? cpu_info->cpuid : read_cpuid_id();
155
156 /* read cpu id part number */
157 if ((cpuid & 0xFFF0) == cpu_id)
158 cpumask_set_cpu(cpu, cpumask); 152 cpumask_set_cpu(cpu, cpumask);
159 }
160 153
161 drv->cpumask = cpumask; 154 drv->cpumask = cpumask;
162 155
diff --git a/drivers/dma-buf/fence.c b/drivers/dma-buf/fence.c
index 4222cb2aa96a..7bb9d65d9a2c 100644
--- a/drivers/dma-buf/fence.c
+++ b/drivers/dma-buf/fence.c
@@ -29,7 +29,7 @@
29EXPORT_TRACEPOINT_SYMBOL(fence_annotate_wait_on); 29EXPORT_TRACEPOINT_SYMBOL(fence_annotate_wait_on);
30EXPORT_TRACEPOINT_SYMBOL(fence_emit); 30EXPORT_TRACEPOINT_SYMBOL(fence_emit);
31 31
32/** 32/*
33 * fence context counter: each execution context should have its own 33 * fence context counter: each execution context should have its own
34 * fence context, this allows checking if fences belong to the same 34 * fence context, this allows checking if fences belong to the same
35 * context or not. One device can have multiple separate contexts, 35 * context or not. One device can have multiple separate contexts,
diff --git a/drivers/gpu/drm/ast/ast_tables.h b/drivers/gpu/drm/ast/ast_tables.h
index 4c761dcea972..05c01ea85294 100644
--- a/drivers/gpu/drm/ast/ast_tables.h
+++ b/drivers/gpu/drm/ast/ast_tables.h
@@ -99,6 +99,7 @@ static struct ast_vbios_dclk_info dclk_table[] = {
99 {0x25, 0x65, 0x80}, /* 16: VCLK88.75 */ 99 {0x25, 0x65, 0x80}, /* 16: VCLK88.75 */
100 {0x77, 0x58, 0x80}, /* 17: VCLK119 */ 100 {0x77, 0x58, 0x80}, /* 17: VCLK119 */
101 {0x32, 0x67, 0x80}, /* 18: VCLK85_5 */ 101 {0x32, 0x67, 0x80}, /* 18: VCLK85_5 */
102 {0x6a, 0x6d, 0x80}, /* 19: VCLK97_75 */
102}; 103};
103 104
104static struct ast_vbios_stdtable vbios_stdtable[] = { 105static struct ast_vbios_stdtable vbios_stdtable[] = {
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index fa2be249999c..90e773019eac 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -4696,8 +4696,9 @@ int drm_mode_create_dumb_ioctl(struct drm_device *dev,
4696 return -EINVAL; 4696 return -EINVAL;
4697 4697
4698 /* overflow checks for 32bit size calculations */ 4698 /* overflow checks for 32bit size calculations */
4699 /* NOTE: DIV_ROUND_UP() can overflow */
4699 cpp = DIV_ROUND_UP(args->bpp, 8); 4700 cpp = DIV_ROUND_UP(args->bpp, 8);
4700 if (cpp > 0xffffffffU / args->width) 4701 if (!cpp || cpp > 0xffffffffU / args->width)
4701 return -EINVAL; 4702 return -EINVAL;
4702 stride = cpp * args->width; 4703 stride = cpp * args->width;
4703 if (args->height > 0xffffffffU / stride) 4704 if (args->height > 0xffffffffU / stride)
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
index 74cebb51e8c2..c6c80ea28c35 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
@@ -397,6 +397,7 @@ static void mdp4_crtc_prepare(struct drm_crtc *crtc)
397 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); 397 struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
398 DBG("%s", mdp4_crtc->name); 398 DBG("%s", mdp4_crtc->name);
399 /* make sure we hold a ref to mdp clks while setting up mode: */ 399 /* make sure we hold a ref to mdp clks while setting up mode: */
400 drm_crtc_vblank_get(crtc);
400 mdp4_enable(get_kms(crtc)); 401 mdp4_enable(get_kms(crtc));
401 mdp4_crtc_dpms(crtc, DRM_MODE_DPMS_OFF); 402 mdp4_crtc_dpms(crtc, DRM_MODE_DPMS_OFF);
402} 403}
@@ -407,6 +408,7 @@ static void mdp4_crtc_commit(struct drm_crtc *crtc)
407 crtc_flush(crtc); 408 crtc_flush(crtc);
408 /* drop the ref to mdp clk's that we got in prepare: */ 409 /* drop the ref to mdp clk's that we got in prepare: */
409 mdp4_disable(get_kms(crtc)); 410 mdp4_disable(get_kms(crtc));
411 drm_crtc_vblank_put(crtc);
410} 412}
411 413
412static int mdp4_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, 414static int mdp4_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index b447c01ad89c..26ee80db17af 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -974,12 +974,11 @@ static int msm_pdev_probe(struct platform_device *pdev)
974 974
975 for (i = 0; i < ARRAY_SIZE(devnames); i++) { 975 for (i = 0; i < ARRAY_SIZE(devnames); i++) {
976 struct device *dev; 976 struct device *dev;
977 int ret;
978 977
979 dev = bus_find_device_by_name(&platform_bus_type, 978 dev = bus_find_device_by_name(&platform_bus_type,
980 NULL, devnames[i]); 979 NULL, devnames[i]);
981 if (!dev) { 980 if (!dev) {
982 dev_info(master, "still waiting for %s\n", devnames[i]); 981 dev_info(&pdev->dev, "still waiting for %s\n", devnames[i]);
983 return -EPROBE_DEFER; 982 return -EPROBE_DEFER;
984 } 983 }
985 984
diff --git a/drivers/gpu/drm/msm/msm_fbdev.c b/drivers/gpu/drm/msm/msm_fbdev.c
index 9c5221ce391a..ab5bfd2d0ebf 100644
--- a/drivers/gpu/drm/msm/msm_fbdev.c
+++ b/drivers/gpu/drm/msm/msm_fbdev.c
@@ -143,7 +143,7 @@ static int msm_fbdev_create(struct drm_fb_helper *helper,
143 ret = msm_gem_get_iova_locked(fbdev->bo, 0, &paddr); 143 ret = msm_gem_get_iova_locked(fbdev->bo, 0, &paddr);
144 if (ret) { 144 if (ret) {
145 dev_err(dev->dev, "failed to get buffer obj iova: %d\n", ret); 145 dev_err(dev->dev, "failed to get buffer obj iova: %d\n", ret);
146 goto fail; 146 goto fail_unlock;
147 } 147 }
148 148
149 fbi = framebuffer_alloc(0, dev->dev); 149 fbi = framebuffer_alloc(0, dev->dev);
diff --git a/drivers/gpu/drm/msm/msm_iommu.c b/drivers/gpu/drm/msm/msm_iommu.c
index 099af483fdf0..7acdaa5688b7 100644
--- a/drivers/gpu/drm/msm/msm_iommu.c
+++ b/drivers/gpu/drm/msm/msm_iommu.c
@@ -27,8 +27,8 @@ struct msm_iommu {
27static int msm_fault_handler(struct iommu_domain *iommu, struct device *dev, 27static int msm_fault_handler(struct iommu_domain *iommu, struct device *dev,
28 unsigned long iova, int flags, void *arg) 28 unsigned long iova, int flags, void *arg)
29{ 29{
30 DBG("*** fault: iova=%08lx, flags=%d", iova, flags); 30 pr_warn_ratelimited("*** fault: iova=%08lx, flags=%d\n", iova, flags);
31 return -ENOSYS; 31 return 0;
32} 32}
33 33
34static int msm_iommu_attach(struct msm_mmu *mmu, const char **names, int cnt) 34static int msm_iommu_attach(struct msm_mmu *mmu, const char **names, int cnt)
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
index 79a5a5519bd6..fa9565957f9d 100644
--- a/drivers/gpu/drm/radeon/cik.c
+++ b/drivers/gpu/drm/radeon/cik.c
@@ -5749,20 +5749,17 @@ static int cik_pcie_gart_enable(struct radeon_device *rdev)
5749 WREG32(0x15D8, 0); 5749 WREG32(0x15D8, 0);
5750 WREG32(0x15DC, 0); 5750 WREG32(0x15DC, 0);
5751 5751
5752 /* empty context1-15 */ 5752 /* restore context1-15 */
5753 /* FIXME start with 4G, once using 2 level pt switch to full
5754 * vm size space
5755 */
5756 /* set vm size, must be a multiple of 4 */ 5753 /* set vm size, must be a multiple of 4 */
5757 WREG32(VM_CONTEXT1_PAGE_TABLE_START_ADDR, 0); 5754 WREG32(VM_CONTEXT1_PAGE_TABLE_START_ADDR, 0);
5758 WREG32(VM_CONTEXT1_PAGE_TABLE_END_ADDR, rdev->vm_manager.max_pfn); 5755 WREG32(VM_CONTEXT1_PAGE_TABLE_END_ADDR, rdev->vm_manager.max_pfn);
5759 for (i = 1; i < 16; i++) { 5756 for (i = 1; i < 16; i++) {
5760 if (i < 8) 5757 if (i < 8)
5761 WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2), 5758 WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2),
5762 rdev->gart.table_addr >> 12); 5759 rdev->vm_manager.saved_table_addr[i]);
5763 else 5760 else
5764 WREG32(VM_CONTEXT8_PAGE_TABLE_BASE_ADDR + ((i - 8) << 2), 5761 WREG32(VM_CONTEXT8_PAGE_TABLE_BASE_ADDR + ((i - 8) << 2),
5765 rdev->gart.table_addr >> 12); 5762 rdev->vm_manager.saved_table_addr[i]);
5766 } 5763 }
5767 5764
5768 /* enable context1-15 */ 5765 /* enable context1-15 */
@@ -5827,6 +5824,17 @@ static int cik_pcie_gart_enable(struct radeon_device *rdev)
5827 */ 5824 */
5828static void cik_pcie_gart_disable(struct radeon_device *rdev) 5825static void cik_pcie_gart_disable(struct radeon_device *rdev)
5829{ 5826{
5827 unsigned i;
5828
5829 for (i = 1; i < 16; ++i) {
5830 uint32_t reg;
5831 if (i < 8)
5832 reg = VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2);
5833 else
5834 reg = VM_CONTEXT8_PAGE_TABLE_BASE_ADDR + ((i - 8) << 2);
5835 rdev->vm_manager.saved_table_addr[i] = RREG32(reg);
5836 }
5837
5830 /* Disable all tables */ 5838 /* Disable all tables */
5831 WREG32(VM_CONTEXT0_CNTL, 0); 5839 WREG32(VM_CONTEXT0_CNTL, 0);
5832 WREG32(VM_CONTEXT1_CNTL, 0); 5840 WREG32(VM_CONTEXT1_CNTL, 0);
@@ -9555,6 +9563,9 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev)
9555 int ret, i; 9563 int ret, i;
9556 u16 tmp16; 9564 u16 tmp16;
9557 9565
9566 if (pci_is_root_bus(rdev->pdev->bus))
9567 return;
9568
9558 if (radeon_pcie_gen2 == 0) 9569 if (radeon_pcie_gen2 == 0)
9559 return; 9570 return;
9560 9571
@@ -9781,7 +9792,8 @@ static void cik_program_aspm(struct radeon_device *rdev)
9781 if (orig != data) 9792 if (orig != data)
9782 WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, data); 9793 WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, data);
9783 9794
9784 if (!disable_clkreq) { 9795 if (!disable_clkreq &&
9796 !pci_is_root_bus(rdev->pdev->bus)) {
9785 struct pci_dev *root = rdev->pdev->bus->self; 9797 struct pci_dev *root = rdev->pdev->bus->self;
9786 u32 lnkcap; 9798 u32 lnkcap;
9787 9799
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index ba89375f197f..3faee58946dd 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -1271,7 +1271,7 @@ static int cayman_pcie_gart_enable(struct radeon_device *rdev)
1271 WREG32(VM_CONTEXT0_PAGE_TABLE_START_ADDR + (i << 2), 0); 1271 WREG32(VM_CONTEXT0_PAGE_TABLE_START_ADDR + (i << 2), 0);
1272 WREG32(VM_CONTEXT0_PAGE_TABLE_END_ADDR + (i << 2), rdev->vm_manager.max_pfn); 1272 WREG32(VM_CONTEXT0_PAGE_TABLE_END_ADDR + (i << 2), rdev->vm_manager.max_pfn);
1273 WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2), 1273 WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2),
1274 rdev->gart.table_addr >> 12); 1274 rdev->vm_manager.saved_table_addr[i]);
1275 } 1275 }
1276 1276
1277 /* enable context1-7 */ 1277 /* enable context1-7 */
@@ -1303,6 +1303,13 @@ static int cayman_pcie_gart_enable(struct radeon_device *rdev)
1303 1303
1304static void cayman_pcie_gart_disable(struct radeon_device *rdev) 1304static void cayman_pcie_gart_disable(struct radeon_device *rdev)
1305{ 1305{
1306 unsigned i;
1307
1308 for (i = 1; i < 8; ++i) {
1309 rdev->vm_manager.saved_table_addr[i] = RREG32(
1310 VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2));
1311 }
1312
1306 /* Disable all tables */ 1313 /* Disable all tables */
1307 WREG32(VM_CONTEXT0_CNTL, 0); 1314 WREG32(VM_CONTEXT0_CNTL, 0);
1308 WREG32(VM_CONTEXT1_CNTL, 0); 1315 WREG32(VM_CONTEXT1_CNTL, 0);
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index e8bf0ea2dade..e616eb5f6e7a 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -1812,7 +1812,6 @@ static void r600_gpu_init(struct radeon_device *rdev)
1812{ 1812{
1813 u32 tiling_config; 1813 u32 tiling_config;
1814 u32 ramcfg; 1814 u32 ramcfg;
1815 u32 cc_rb_backend_disable;
1816 u32 cc_gc_shader_pipe_config; 1815 u32 cc_gc_shader_pipe_config;
1817 u32 tmp; 1816 u32 tmp;
1818 int i, j; 1817 int i, j;
@@ -1939,29 +1938,20 @@ static void r600_gpu_init(struct radeon_device *rdev)
1939 } 1938 }
1940 tiling_config |= BANK_SWAPS(1); 1939 tiling_config |= BANK_SWAPS(1);
1941 1940
1942 cc_rb_backend_disable = RREG32(CC_RB_BACKEND_DISABLE) & 0x00ff0000;
1943 tmp = R6XX_MAX_BACKENDS -
1944 r600_count_pipe_bits((cc_rb_backend_disable >> 16) & R6XX_MAX_BACKENDS_MASK);
1945 if (tmp < rdev->config.r600.max_backends) {
1946 rdev->config.r600.max_backends = tmp;
1947 }
1948
1949 cc_gc_shader_pipe_config = RREG32(CC_GC_SHADER_PIPE_CONFIG) & 0x00ffff00; 1941 cc_gc_shader_pipe_config = RREG32(CC_GC_SHADER_PIPE_CONFIG) & 0x00ffff00;
1950 tmp = R6XX_MAX_PIPES -
1951 r600_count_pipe_bits((cc_gc_shader_pipe_config >> 8) & R6XX_MAX_PIPES_MASK);
1952 if (tmp < rdev->config.r600.max_pipes) {
1953 rdev->config.r600.max_pipes = tmp;
1954 }
1955 tmp = R6XX_MAX_SIMDS -
1956 r600_count_pipe_bits((cc_gc_shader_pipe_config >> 16) & R6XX_MAX_SIMDS_MASK);
1957 if (tmp < rdev->config.r600.max_simds) {
1958 rdev->config.r600.max_simds = tmp;
1959 }
1960 tmp = rdev->config.r600.max_simds - 1942 tmp = rdev->config.r600.max_simds -
1961 r600_count_pipe_bits((cc_gc_shader_pipe_config >> 16) & R6XX_MAX_SIMDS_MASK); 1943 r600_count_pipe_bits((cc_gc_shader_pipe_config >> 16) & R6XX_MAX_SIMDS_MASK);
1962 rdev->config.r600.active_simds = tmp; 1944 rdev->config.r600.active_simds = tmp;
1963 1945
1964 disabled_rb_mask = (RREG32(CC_RB_BACKEND_DISABLE) >> 16) & R6XX_MAX_BACKENDS_MASK; 1946 disabled_rb_mask = (RREG32(CC_RB_BACKEND_DISABLE) >> 16) & R6XX_MAX_BACKENDS_MASK;
1947 tmp = 0;
1948 for (i = 0; i < rdev->config.r600.max_backends; i++)
1949 tmp |= (1 << i);
1950 /* if all the backends are disabled, fix it up here */
1951 if ((disabled_rb_mask & tmp) == tmp) {
1952 for (i = 0; i < rdev->config.r600.max_backends; i++)
1953 disabled_rb_mask &= ~(1 << i);
1954 }
1965 tmp = (tiling_config & PIPE_TILING__MASK) >> PIPE_TILING__SHIFT; 1955 tmp = (tiling_config & PIPE_TILING__MASK) >> PIPE_TILING__SHIFT;
1966 tmp = r6xx_remap_render_backend(rdev, tmp, rdev->config.r600.max_backends, 1956 tmp = r6xx_remap_render_backend(rdev, tmp, rdev->config.r600.max_backends,
1967 R6XX_MAX_BACKENDS, disabled_rb_mask); 1957 R6XX_MAX_BACKENDS, disabled_rb_mask);
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index b281886f6f51..5f05b4c84338 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -915,6 +915,8 @@ struct radeon_vm_manager {
915 u64 vram_base_offset; 915 u64 vram_base_offset;
916 /* is vm enabled? */ 916 /* is vm enabled? */
917 bool enabled; 917 bool enabled;
918 /* for hw to save the PD addr on suspend/resume */
919 uint32_t saved_table_addr[RADEON_NUM_VM];
918}; 920};
919 921
920/* 922/*
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
index 2983f17ea1b3..d9f5ce715c9b 100644
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -1177,7 +1177,6 @@ static void rv770_gpu_init(struct radeon_device *rdev)
1177 u32 hdp_host_path_cntl; 1177 u32 hdp_host_path_cntl;
1178 u32 sq_dyn_gpr_size_simd_ab_0; 1178 u32 sq_dyn_gpr_size_simd_ab_0;
1179 u32 gb_tiling_config = 0; 1179 u32 gb_tiling_config = 0;
1180 u32 cc_rb_backend_disable = 0;
1181 u32 cc_gc_shader_pipe_config = 0; 1180 u32 cc_gc_shader_pipe_config = 0;
1182 u32 mc_arb_ramcfg; 1181 u32 mc_arb_ramcfg;
1183 u32 db_debug4, tmp; 1182 u32 db_debug4, tmp;
@@ -1311,21 +1310,7 @@ static void rv770_gpu_init(struct radeon_device *rdev)
1311 WREG32(SPI_CONFIG_CNTL, 0); 1310 WREG32(SPI_CONFIG_CNTL, 0);
1312 } 1311 }
1313 1312
1314 cc_rb_backend_disable = RREG32(CC_RB_BACKEND_DISABLE) & 0x00ff0000;
1315 tmp = R7XX_MAX_BACKENDS - r600_count_pipe_bits(cc_rb_backend_disable >> 16);
1316 if (tmp < rdev->config.rv770.max_backends) {
1317 rdev->config.rv770.max_backends = tmp;
1318 }
1319
1320 cc_gc_shader_pipe_config = RREG32(CC_GC_SHADER_PIPE_CONFIG) & 0xffffff00; 1313 cc_gc_shader_pipe_config = RREG32(CC_GC_SHADER_PIPE_CONFIG) & 0xffffff00;
1321 tmp = R7XX_MAX_PIPES - r600_count_pipe_bits((cc_gc_shader_pipe_config >> 8) & R7XX_MAX_PIPES_MASK);
1322 if (tmp < rdev->config.rv770.max_pipes) {
1323 rdev->config.rv770.max_pipes = tmp;
1324 }
1325 tmp = R7XX_MAX_SIMDS - r600_count_pipe_bits((cc_gc_shader_pipe_config >> 16) & R7XX_MAX_SIMDS_MASK);
1326 if (tmp < rdev->config.rv770.max_simds) {
1327 rdev->config.rv770.max_simds = tmp;
1328 }
1329 tmp = rdev->config.rv770.max_simds - 1314 tmp = rdev->config.rv770.max_simds -
1330 r600_count_pipe_bits((cc_gc_shader_pipe_config >> 16) & R7XX_MAX_SIMDS_MASK); 1315 r600_count_pipe_bits((cc_gc_shader_pipe_config >> 16) & R7XX_MAX_SIMDS_MASK);
1331 rdev->config.rv770.active_simds = tmp; 1316 rdev->config.rv770.active_simds = tmp;
@@ -1348,6 +1333,14 @@ static void rv770_gpu_init(struct radeon_device *rdev)
1348 rdev->config.rv770.tiling_npipes = rdev->config.rv770.max_tile_pipes; 1333 rdev->config.rv770.tiling_npipes = rdev->config.rv770.max_tile_pipes;
1349 1334
1350 disabled_rb_mask = (RREG32(CC_RB_BACKEND_DISABLE) >> 16) & R7XX_MAX_BACKENDS_MASK; 1335 disabled_rb_mask = (RREG32(CC_RB_BACKEND_DISABLE) >> 16) & R7XX_MAX_BACKENDS_MASK;
1336 tmp = 0;
1337 for (i = 0; i < rdev->config.rv770.max_backends; i++)
1338 tmp |= (1 << i);
1339 /* if all the backends are disabled, fix it up here */
1340 if ((disabled_rb_mask & tmp) == tmp) {
1341 for (i = 0; i < rdev->config.rv770.max_backends; i++)
1342 disabled_rb_mask &= ~(1 << i);
1343 }
1351 tmp = (gb_tiling_config & PIPE_TILING__MASK) >> PIPE_TILING__SHIFT; 1344 tmp = (gb_tiling_config & PIPE_TILING__MASK) >> PIPE_TILING__SHIFT;
1352 tmp = r6xx_remap_render_backend(rdev, tmp, rdev->config.rv770.max_backends, 1345 tmp = r6xx_remap_render_backend(rdev, tmp, rdev->config.rv770.max_backends,
1353 R7XX_MAX_BACKENDS, disabled_rb_mask); 1346 R7XX_MAX_BACKENDS, disabled_rb_mask);
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index a1274a31405c..6bce40847753 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -4290,10 +4290,10 @@ static int si_pcie_gart_enable(struct radeon_device *rdev)
4290 for (i = 1; i < 16; i++) { 4290 for (i = 1; i < 16; i++) {
4291 if (i < 8) 4291 if (i < 8)
4292 WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2), 4292 WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2),
4293 rdev->gart.table_addr >> 12); 4293 rdev->vm_manager.saved_table_addr[i]);
4294 else 4294 else
4295 WREG32(VM_CONTEXT8_PAGE_TABLE_BASE_ADDR + ((i - 8) << 2), 4295 WREG32(VM_CONTEXT8_PAGE_TABLE_BASE_ADDR + ((i - 8) << 2),
4296 rdev->gart.table_addr >> 12); 4296 rdev->vm_manager.saved_table_addr[i]);
4297 } 4297 }
4298 4298
4299 /* enable context1-15 */ 4299 /* enable context1-15 */
@@ -4325,6 +4325,17 @@ static int si_pcie_gart_enable(struct radeon_device *rdev)
4325 4325
4326static void si_pcie_gart_disable(struct radeon_device *rdev) 4326static void si_pcie_gart_disable(struct radeon_device *rdev)
4327{ 4327{
4328 unsigned i;
4329
4330 for (i = 1; i < 16; ++i) {
4331 uint32_t reg;
4332 if (i < 8)
4333 reg = VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2);
4334 else
4335 reg = VM_CONTEXT8_PAGE_TABLE_BASE_ADDR + ((i - 8) << 2);
4336 rdev->vm_manager.saved_table_addr[i] = RREG32(reg);
4337 }
4338
4328 /* Disable all tables */ 4339 /* Disable all tables */
4329 WREG32(VM_CONTEXT0_CNTL, 0); 4340 WREG32(VM_CONTEXT0_CNTL, 0);
4330 WREG32(VM_CONTEXT1_CNTL, 0); 4341 WREG32(VM_CONTEXT1_CNTL, 0);
@@ -7177,6 +7188,9 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev)
7177 int ret, i; 7188 int ret, i;
7178 u16 tmp16; 7189 u16 tmp16;
7179 7190
7191 if (pci_is_root_bus(rdev->pdev->bus))
7192 return;
7193
7180 if (radeon_pcie_gen2 == 0) 7194 if (radeon_pcie_gen2 == 0)
7181 return; 7195 return;
7182 7196
@@ -7454,7 +7468,8 @@ static void si_program_aspm(struct radeon_device *rdev)
7454 if (orig != data) 7468 if (orig != data)
7455 WREG32_PIF_PHY1(PB1_PIF_CNTL, data); 7469 WREG32_PIF_PHY1(PB1_PIF_CNTL, data);
7456 7470
7457 if (!disable_clkreq) { 7471 if (!disable_clkreq &&
7472 !pci_is_root_bus(rdev->pdev->bus)) {
7458 struct pci_dev *root = rdev->pdev->bus->self; 7473 struct pci_dev *root = rdev->pdev->bus->self;
7459 u32 lnkcap; 7474 u32 lnkcap;
7460 7475
diff --git a/drivers/gpu/drm/sti/Kconfig b/drivers/gpu/drm/sti/Kconfig
index 2d9d4252d598..ae8850f3e63b 100644
--- a/drivers/gpu/drm/sti/Kconfig
+++ b/drivers/gpu/drm/sti/Kconfig
@@ -1,6 +1,7 @@
1config DRM_STI 1config DRM_STI
2 tristate "DRM Support for STMicroelectronics SoC stiH41x Series" 2 tristate "DRM Support for STMicroelectronics SoC stiH41x Series"
3 depends on DRM && (SOC_STIH415 || SOC_STIH416 || ARCH_MULTIPLATFORM) 3 depends on DRM && (SOC_STIH415 || SOC_STIH416 || ARCH_MULTIPLATFORM)
4 select RESET_CONTROLLER
4 select DRM_KMS_HELPER 5 select DRM_KMS_HELPER
5 select DRM_GEM_CMA_HELPER 6 select DRM_GEM_CMA_HELPER
6 select DRM_KMS_CMA_HELPER 7 select DRM_KMS_CMA_HELPER
diff --git a/drivers/gpu/drm/sti/sti_drm_drv.c b/drivers/gpu/drm/sti/sti_drm_drv.c
index a7cc24917a96..223d93c3a05d 100644
--- a/drivers/gpu/drm/sti/sti_drm_drv.c
+++ b/drivers/gpu/drm/sti/sti_drm_drv.c
@@ -201,8 +201,8 @@ static int sti_drm_platform_probe(struct platform_device *pdev)
201 master = platform_device_register_resndata(dev, 201 master = platform_device_register_resndata(dev,
202 DRIVER_NAME "__master", -1, 202 DRIVER_NAME "__master", -1,
203 NULL, 0, NULL, 0); 203 NULL, 0, NULL, 0);
204 if (!master) 204 if (IS_ERR(master))
205 return -EINVAL; 205 return PTR_ERR(master);
206 206
207 platform_set_drvdata(pdev, master); 207 platform_set_drvdata(pdev, master);
208 return 0; 208 return 0;
diff --git a/drivers/gpu/drm/sti/sti_hda.c b/drivers/gpu/drm/sti/sti_hda.c
index 72d957f81c05..2ae9a9b73666 100644
--- a/drivers/gpu/drm/sti/sti_hda.c
+++ b/drivers/gpu/drm/sti/sti_hda.c
@@ -730,16 +730,16 @@ static int sti_hda_probe(struct platform_device *pdev)
730 return -ENOMEM; 730 return -ENOMEM;
731 } 731 }
732 hda->regs = devm_ioremap_nocache(dev, res->start, resource_size(res)); 732 hda->regs = devm_ioremap_nocache(dev, res->start, resource_size(res));
733 if (IS_ERR(hda->regs)) 733 if (!hda->regs)
734 return PTR_ERR(hda->regs); 734 return -ENOMEM;
735 735
736 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, 736 res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
737 "video-dacs-ctrl"); 737 "video-dacs-ctrl");
738 if (res) { 738 if (res) {
739 hda->video_dacs_ctrl = devm_ioremap_nocache(dev, res->start, 739 hda->video_dacs_ctrl = devm_ioremap_nocache(dev, res->start,
740 resource_size(res)); 740 resource_size(res));
741 if (IS_ERR(hda->video_dacs_ctrl)) 741 if (!hda->video_dacs_ctrl)
742 return PTR_ERR(hda->video_dacs_ctrl); 742 return -ENOMEM;
743 } else { 743 } else {
744 /* If no existing video-dacs-ctrl resource continue the probe */ 744 /* If no existing video-dacs-ctrl resource continue the probe */
745 DRM_DEBUG_DRIVER("No video-dacs-ctrl resource\n"); 745 DRM_DEBUG_DRIVER("No video-dacs-ctrl resource\n");
@@ -770,7 +770,7 @@ static int sti_hda_remove(struct platform_device *pdev)
770 return 0; 770 return 0;
771} 771}
772 772
773static struct of_device_id hda_of_match[] = { 773static const struct of_device_id hda_of_match[] = {
774 { .compatible = "st,stih416-hda", }, 774 { .compatible = "st,stih416-hda", },
775 { .compatible = "st,stih407-hda", }, 775 { .compatible = "st,stih407-hda", },
776 { /* end node */ } 776 { /* end node */ }
diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c
index 284e541d970d..ef93156a69c6 100644
--- a/drivers/gpu/drm/sti/sti_hdmi.c
+++ b/drivers/gpu/drm/sti/sti_hdmi.c
@@ -677,7 +677,7 @@ static const struct component_ops sti_hdmi_ops = {
677 .unbind = sti_hdmi_unbind, 677 .unbind = sti_hdmi_unbind,
678}; 678};
679 679
680static struct of_device_id hdmi_of_match[] = { 680static const struct of_device_id hdmi_of_match[] = {
681 { 681 {
682 .compatible = "st,stih416-hdmi", 682 .compatible = "st,stih416-hdmi",
683 .data = &tx3g0c55phy_ops, 683 .data = &tx3g0c55phy_ops,
@@ -713,8 +713,8 @@ static int sti_hdmi_probe(struct platform_device *pdev)
713 return -ENOMEM; 713 return -ENOMEM;
714 } 714 }
715 hdmi->regs = devm_ioremap_nocache(dev, res->start, resource_size(res)); 715 hdmi->regs = devm_ioremap_nocache(dev, res->start, resource_size(res));
716 if (IS_ERR(hdmi->regs)) 716 if (!hdmi->regs)
717 return PTR_ERR(hdmi->regs); 717 return -ENOMEM;
718 718
719 if (of_device_is_compatible(np, "st,stih416-hdmi")) { 719 if (of_device_is_compatible(np, "st,stih416-hdmi")) {
720 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, 720 res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
@@ -725,8 +725,8 @@ static int sti_hdmi_probe(struct platform_device *pdev)
725 } 725 }
726 hdmi->syscfg = devm_ioremap_nocache(dev, res->start, 726 hdmi->syscfg = devm_ioremap_nocache(dev, res->start,
727 resource_size(res)); 727 resource_size(res));
728 if (IS_ERR(hdmi->syscfg)) 728 if (!hdmi->syscfg)
729 return PTR_ERR(hdmi->syscfg); 729 return -ENOMEM;
730 730
731 } 731 }
732 732
diff --git a/drivers/gpu/drm/sti/sti_tvout.c b/drivers/gpu/drm/sti/sti_tvout.c
index b69e26fee76e..b8afe490356a 100644
--- a/drivers/gpu/drm/sti/sti_tvout.c
+++ b/drivers/gpu/drm/sti/sti_tvout.c
@@ -591,8 +591,8 @@ static int sti_tvout_probe(struct platform_device *pdev)
591 return -ENOMEM; 591 return -ENOMEM;
592 } 592 }
593 tvout->regs = devm_ioremap_nocache(dev, res->start, resource_size(res)); 593 tvout->regs = devm_ioremap_nocache(dev, res->start, resource_size(res));
594 if (IS_ERR(tvout->regs)) 594 if (!tvout->regs)
595 return PTR_ERR(tvout->regs); 595 return -ENOMEM;
596 596
597 /* get reset resources */ 597 /* get reset resources */
598 tvout->reset = devm_reset_control_get(dev, "tvout"); 598 tvout->reset = devm_reset_control_get(dev, "tvout");
@@ -624,7 +624,7 @@ static int sti_tvout_remove(struct platform_device *pdev)
624 return 0; 624 return 0;
625} 625}
626 626
627static struct of_device_id tvout_of_match[] = { 627static const struct of_device_id tvout_of_match[] = {
628 { .compatible = "st,stih416-tvout", }, 628 { .compatible = "st,stih416-tvout", },
629 { .compatible = "st,stih407-tvout", }, 629 { .compatible = "st,stih407-tvout", },
630 { /* end node */ } 630 { /* end node */ }
diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
index b7ba82960c79..9bf8637747a5 100644
--- a/drivers/hid/hid-logitech-dj.c
+++ b/drivers/hid/hid-logitech-dj.c
@@ -656,7 +656,6 @@ static int logi_dj_raw_event(struct hid_device *hdev,
656 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev); 656 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev);
657 struct dj_report *dj_report = (struct dj_report *) data; 657 struct dj_report *dj_report = (struct dj_report *) data;
658 unsigned long flags; 658 unsigned long flags;
659 bool report_processed = false;
660 659
661 dbg_hid("%s, size:%d\n", __func__, size); 660 dbg_hid("%s, size:%d\n", __func__, size);
662 661
@@ -683,34 +682,42 @@ static int logi_dj_raw_event(struct hid_device *hdev,
683 * device (via hid_input_report() ) and return 1 so hid-core does not do 682 * device (via hid_input_report() ) and return 1 so hid-core does not do
684 * anything else with it. 683 * anything else with it.
685 */ 684 */
685
686 /* case 1) */
687 if (data[0] != REPORT_ID_DJ_SHORT)
688 return false;
689
686 if ((dj_report->device_index < DJ_DEVICE_INDEX_MIN) || 690 if ((dj_report->device_index < DJ_DEVICE_INDEX_MIN) ||
687 (dj_report->device_index > DJ_DEVICE_INDEX_MAX)) { 691 (dj_report->device_index > DJ_DEVICE_INDEX_MAX)) {
688 dev_err(&hdev->dev, "%s: invalid device index:%d\n", 692 /*
693 * Device index is wrong, bail out.
694 * This driver can ignore safely the receiver notifications,
695 * so ignore those reports too.
696 */
697 if (dj_report->device_index != DJ_RECEIVER_INDEX)
698 dev_err(&hdev->dev, "%s: invalid device index:%d\n",
689 __func__, dj_report->device_index); 699 __func__, dj_report->device_index);
690 return false; 700 return false;
691 } 701 }
692 702
693 spin_lock_irqsave(&djrcv_dev->lock, flags); 703 spin_lock_irqsave(&djrcv_dev->lock, flags);
694 if (dj_report->report_id == REPORT_ID_DJ_SHORT) { 704 switch (dj_report->report_type) {
695 switch (dj_report->report_type) { 705 case REPORT_TYPE_NOTIF_DEVICE_PAIRED:
696 case REPORT_TYPE_NOTIF_DEVICE_PAIRED: 706 case REPORT_TYPE_NOTIF_DEVICE_UNPAIRED:
697 case REPORT_TYPE_NOTIF_DEVICE_UNPAIRED: 707 logi_dj_recv_queue_notification(djrcv_dev, dj_report);
698 logi_dj_recv_queue_notification(djrcv_dev, dj_report); 708 break;
699 break; 709 case REPORT_TYPE_NOTIF_CONNECTION_STATUS:
700 case REPORT_TYPE_NOTIF_CONNECTION_STATUS: 710 if (dj_report->report_params[CONNECTION_STATUS_PARAM_STATUS] ==
701 if (dj_report->report_params[CONNECTION_STATUS_PARAM_STATUS] == 711 STATUS_LINKLOSS) {
702 STATUS_LINKLOSS) { 712 logi_dj_recv_forward_null_report(djrcv_dev, dj_report);
703 logi_dj_recv_forward_null_report(djrcv_dev, dj_report);
704 }
705 break;
706 default:
707 logi_dj_recv_forward_report(djrcv_dev, dj_report);
708 } 713 }
709 report_processed = true; 714 break;
715 default:
716 logi_dj_recv_forward_report(djrcv_dev, dj_report);
710 } 717 }
711 spin_unlock_irqrestore(&djrcv_dev->lock, flags); 718 spin_unlock_irqrestore(&djrcv_dev->lock, flags);
712 719
713 return report_processed; 720 return true;
714} 721}
715 722
716static int logi_dj_probe(struct hid_device *hdev, 723static int logi_dj_probe(struct hid_device *hdev,
diff --git a/drivers/hid/hid-logitech-dj.h b/drivers/hid/hid-logitech-dj.h
index 4a4000340ce1..daeb0aa4bee9 100644
--- a/drivers/hid/hid-logitech-dj.h
+++ b/drivers/hid/hid-logitech-dj.h
@@ -27,6 +27,7 @@
27 27
28#define DJ_MAX_PAIRED_DEVICES 6 28#define DJ_MAX_PAIRED_DEVICES 6
29#define DJ_MAX_NUMBER_NOTIFICATIONS 8 29#define DJ_MAX_NUMBER_NOTIFICATIONS 8
30#define DJ_RECEIVER_INDEX 0
30#define DJ_DEVICE_INDEX_MIN 1 31#define DJ_DEVICE_INDEX_MIN 1
31#define DJ_DEVICE_INDEX_MAX 6 32#define DJ_DEVICE_INDEX_MAX 6
32 33
diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c
index ecc2cbf300cc..29a74c1efcb8 100644
--- a/drivers/hid/hid-magicmouse.c
+++ b/drivers/hid/hid-magicmouse.c
@@ -290,6 +290,11 @@ static int magicmouse_raw_event(struct hid_device *hdev,
290 if (size < 4 || ((size - 4) % 9) != 0) 290 if (size < 4 || ((size - 4) % 9) != 0)
291 return 0; 291 return 0;
292 npoints = (size - 4) / 9; 292 npoints = (size - 4) / 9;
293 if (npoints > 15) {
294 hid_warn(hdev, "invalid size value (%d) for TRACKPAD_REPORT_ID\n",
295 size);
296 return 0;
297 }
293 msc->ntouches = 0; 298 msc->ntouches = 0;
294 for (ii = 0; ii < npoints; ii++) 299 for (ii = 0; ii < npoints; ii++)
295 magicmouse_emit_touch(msc, ii, data + ii * 9 + 4); 300 magicmouse_emit_touch(msc, ii, data + ii * 9 + 4);
@@ -307,6 +312,11 @@ static int magicmouse_raw_event(struct hid_device *hdev,
307 if (size < 6 || ((size - 6) % 8) != 0) 312 if (size < 6 || ((size - 6) % 8) != 0)
308 return 0; 313 return 0;
309 npoints = (size - 6) / 8; 314 npoints = (size - 6) / 8;
315 if (npoints > 15) {
316 hid_warn(hdev, "invalid size value (%d) for MOUSE_REPORT_ID\n",
317 size);
318 return 0;
319 }
310 msc->ntouches = 0; 320 msc->ntouches = 0;
311 for (ii = 0; ii < npoints; ii++) 321 for (ii = 0; ii < npoints; ii++)
312 magicmouse_emit_touch(msc, ii, data + ii * 8 + 6); 322 magicmouse_emit_touch(msc, ii, data + ii * 8 + 6);
diff --git a/drivers/hid/hid-picolcd_core.c b/drivers/hid/hid-picolcd_core.c
index acbb021065ec..020df3c2e8b4 100644
--- a/drivers/hid/hid-picolcd_core.c
+++ b/drivers/hid/hid-picolcd_core.c
@@ -350,6 +350,12 @@ static int picolcd_raw_event(struct hid_device *hdev,
350 if (!data) 350 if (!data)
351 return 1; 351 return 1;
352 352
353 if (size > 64) {
354 hid_warn(hdev, "invalid size value (%d) for picolcd raw event\n",
355 size);
356 return 0;
357 }
358
353 if (report->id == REPORT_KEY_STATE) { 359 if (report->id == REPORT_KEY_STATE) {
354 if (data->input_keys) 360 if (data->input_keys)
355 ret = picolcd_raw_keypad(data, report, raw_data+1, size-1); 361 ret = picolcd_raw_keypad(data, report, raw_data+1, size-1);
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
index 2785007e0e46..cd15e0801228 100644
--- a/drivers/md/dm-crypt.c
+++ b/drivers/md/dm-crypt.c
@@ -1688,6 +1688,7 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1688 unsigned int key_size, opt_params; 1688 unsigned int key_size, opt_params;
1689 unsigned long long tmpll; 1689 unsigned long long tmpll;
1690 int ret; 1690 int ret;
1691 size_t iv_size_padding;
1691 struct dm_arg_set as; 1692 struct dm_arg_set as;
1692 const char *opt_string; 1693 const char *opt_string;
1693 char dummy; 1694 char dummy;
@@ -1724,20 +1725,32 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
1724 1725
1725 cc->dmreq_start = sizeof(struct ablkcipher_request); 1726 cc->dmreq_start = sizeof(struct ablkcipher_request);
1726 cc->dmreq_start += crypto_ablkcipher_reqsize(any_tfm(cc)); 1727 cc->dmreq_start += crypto_ablkcipher_reqsize(any_tfm(cc));
1727 cc->dmreq_start = ALIGN(cc->dmreq_start, crypto_tfm_ctx_alignment()); 1728 cc->dmreq_start = ALIGN(cc->dmreq_start, __alignof__(struct dm_crypt_request));
1728 cc->dmreq_start += crypto_ablkcipher_alignmask(any_tfm(cc)) & 1729
1729 ~(crypto_tfm_ctx_alignment() - 1); 1730 if (crypto_ablkcipher_alignmask(any_tfm(cc)) < CRYPTO_MINALIGN) {
1731 /* Allocate the padding exactly */
1732 iv_size_padding = -(cc->dmreq_start + sizeof(struct dm_crypt_request))
1733 & crypto_ablkcipher_alignmask(any_tfm(cc));
1734 } else {
1735 /*
1736 * If the cipher requires greater alignment than kmalloc
1737 * alignment, we don't know the exact position of the
1738 * initialization vector. We must assume worst case.
1739 */
1740 iv_size_padding = crypto_ablkcipher_alignmask(any_tfm(cc));
1741 }
1730 1742
1731 cc->req_pool = mempool_create_kmalloc_pool(MIN_IOS, cc->dmreq_start + 1743 cc->req_pool = mempool_create_kmalloc_pool(MIN_IOS, cc->dmreq_start +
1732 sizeof(struct dm_crypt_request) + cc->iv_size); 1744 sizeof(struct dm_crypt_request) + iv_size_padding + cc->iv_size);
1733 if (!cc->req_pool) { 1745 if (!cc->req_pool) {
1734 ti->error = "Cannot allocate crypt request mempool"; 1746 ti->error = "Cannot allocate crypt request mempool";
1735 goto bad; 1747 goto bad;
1736 } 1748 }
1737 1749
1738 cc->per_bio_data_size = ti->per_bio_data_size = 1750 cc->per_bio_data_size = ti->per_bio_data_size =
1739 sizeof(struct dm_crypt_io) + cc->dmreq_start + 1751 ALIGN(sizeof(struct dm_crypt_io) + cc->dmreq_start +
1740 sizeof(struct dm_crypt_request) + cc->iv_size; 1752 sizeof(struct dm_crypt_request) + iv_size_padding + cc->iv_size,
1753 ARCH_KMALLOC_MINALIGN);
1741 1754
1742 cc->page_pool = mempool_create_page_pool(MIN_POOL_PAGES, 0); 1755 cc->page_pool = mempool_create_page_pool(MIN_POOL_PAGES, 0);
1743 if (!cc->page_pool) { 1756 if (!cc->page_pool) {
diff --git a/drivers/mfd/ab8500-core.c b/drivers/mfd/ab8500-core.c
index ce48aa72bb42..bde2fc072410 100644
--- a/drivers/mfd/ab8500-core.c
+++ b/drivers/mfd/ab8500-core.c
@@ -1754,7 +1754,7 @@ static int ab8500_probe(struct platform_device *pdev)
1754 if (ret) 1754 if (ret)
1755 return ret; 1755 return ret;
1756 1756
1757#if CONFIG_DEBUG_FS 1757#ifdef CONFIG_DEBUG_FS
1758 /* Pass to debugfs */ 1758 /* Pass to debugfs */
1759 ab8500_debug_resources[0].start = ab8500->irq; 1759 ab8500_debug_resources[0].start = ab8500->irq;
1760 ab8500_debug_resources[0].end = ab8500->irq; 1760 ab8500_debug_resources[0].end = ab8500->irq;
diff --git a/drivers/mfd/htc-i2cpld.c b/drivers/mfd/htc-i2cpld.c
index b44f0203983b..6bdb78c2ac77 100644
--- a/drivers/mfd/htc-i2cpld.c
+++ b/drivers/mfd/htc-i2cpld.c
@@ -404,7 +404,7 @@ static int htcpld_register_chip_i2c(
404 } 404 }
405 405
406 i2c_set_clientdata(client, chip); 406 i2c_set_clientdata(client, chip);
407 snprintf(client->name, I2C_NAME_SIZE, "Chip_0x%d", client->addr); 407 snprintf(client->name, I2C_NAME_SIZE, "Chip_0x%x", client->addr);
408 chip->client = client; 408 chip->client = client;
409 409
410 /* Reset the chip */ 410 /* Reset the chip */
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 33a9234b701c..83dab2f0a50e 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -647,7 +647,7 @@ static int usbhs_omap_probe(struct platform_device *pdev)
647 default: 647 default:
648 omap->nports = OMAP3_HS_USB_PORTS; 648 omap->nports = OMAP3_HS_USB_PORTS;
649 dev_dbg(dev, 649 dev_dbg(dev,
650 "USB HOST Rev:0x%d not recognized, assuming %d ports\n", 650 "USB HOST Rev:0x%x not recognized, assuming %d ports\n",
651 omap->usbhs_rev, omap->nports); 651 omap->usbhs_rev, omap->nports);
652 break; 652 break;
653 } 653 }
diff --git a/drivers/mfd/twl4030-power.c b/drivers/mfd/twl4030-power.c
index 3bc969a5916b..4d3ff3771491 100644
--- a/drivers/mfd/twl4030-power.c
+++ b/drivers/mfd/twl4030-power.c
@@ -724,24 +724,24 @@ static struct twl4030_script *omap3_idle_scripts[] = {
724 * above. 724 * above.
725 */ 725 */
726static struct twl4030_resconfig omap3_idle_rconfig[] = { 726static struct twl4030_resconfig omap3_idle_rconfig[] = {
727 TWL_REMAP_SLEEP(RES_VAUX1, DEV_GRP_NULL, 0, 0), 727 TWL_REMAP_SLEEP(RES_VAUX1, TWL4030_RESCONFIG_UNDEF, 0, 0),
728 TWL_REMAP_SLEEP(RES_VAUX2, DEV_GRP_NULL, 0, 0), 728 TWL_REMAP_SLEEP(RES_VAUX2, TWL4030_RESCONFIG_UNDEF, 0, 0),
729 TWL_REMAP_SLEEP(RES_VAUX3, DEV_GRP_NULL, 0, 0), 729 TWL_REMAP_SLEEP(RES_VAUX3, TWL4030_RESCONFIG_UNDEF, 0, 0),
730 TWL_REMAP_SLEEP(RES_VAUX4, DEV_GRP_NULL, 0, 0), 730 TWL_REMAP_SLEEP(RES_VAUX4, TWL4030_RESCONFIG_UNDEF, 0, 0),
731 TWL_REMAP_SLEEP(RES_VMMC1, DEV_GRP_NULL, 0, 0), 731 TWL_REMAP_SLEEP(RES_VMMC1, TWL4030_RESCONFIG_UNDEF, 0, 0),
732 TWL_REMAP_SLEEP(RES_VMMC2, DEV_GRP_NULL, 0, 0), 732 TWL_REMAP_SLEEP(RES_VMMC2, TWL4030_RESCONFIG_UNDEF, 0, 0),
733 TWL_REMAP_OFF(RES_VPLL1, DEV_GRP_P1, 3, 1), 733 TWL_REMAP_OFF(RES_VPLL1, DEV_GRP_P1, 3, 1),
734 TWL_REMAP_SLEEP(RES_VPLL2, DEV_GRP_P1, 0, 0), 734 TWL_REMAP_SLEEP(RES_VPLL2, DEV_GRP_P1, 0, 0),
735 TWL_REMAP_SLEEP(RES_VSIM, DEV_GRP_NULL, 0, 0), 735 TWL_REMAP_SLEEP(RES_VSIM, TWL4030_RESCONFIG_UNDEF, 0, 0),
736 TWL_REMAP_SLEEP(RES_VDAC, DEV_GRP_NULL, 0, 0), 736 TWL_REMAP_SLEEP(RES_VDAC, TWL4030_RESCONFIG_UNDEF, 0, 0),
737 TWL_REMAP_SLEEP(RES_VINTANA1, TWL_DEV_GRP_P123, 1, 2), 737 TWL_REMAP_SLEEP(RES_VINTANA1, TWL_DEV_GRP_P123, 1, 2),
738 TWL_REMAP_SLEEP(RES_VINTANA2, TWL_DEV_GRP_P123, 0, 2), 738 TWL_REMAP_SLEEP(RES_VINTANA2, TWL_DEV_GRP_P123, 0, 2),
739 TWL_REMAP_SLEEP(RES_VINTDIG, TWL_DEV_GRP_P123, 1, 2), 739 TWL_REMAP_SLEEP(RES_VINTDIG, TWL_DEV_GRP_P123, 1, 2),
740 TWL_REMAP_SLEEP(RES_VIO, TWL_DEV_GRP_P123, 2, 2), 740 TWL_REMAP_SLEEP(RES_VIO, TWL_DEV_GRP_P123, 2, 2),
741 TWL_REMAP_OFF(RES_VDD1, DEV_GRP_P1, 4, 1), 741 TWL_REMAP_OFF(RES_VDD1, DEV_GRP_P1, 4, 1),
742 TWL_REMAP_OFF(RES_VDD2, DEV_GRP_P1, 3, 1), 742 TWL_REMAP_OFF(RES_VDD2, DEV_GRP_P1, 3, 1),
743 TWL_REMAP_SLEEP(RES_VUSB_1V5, DEV_GRP_NULL, 0, 0), 743 TWL_REMAP_SLEEP(RES_VUSB_1V5, TWL4030_RESCONFIG_UNDEF, 0, 0),
744 TWL_REMAP_SLEEP(RES_VUSB_1V8, DEV_GRP_NULL, 0, 0), 744 TWL_REMAP_SLEEP(RES_VUSB_1V8, TWL4030_RESCONFIG_UNDEF, 0, 0),
745 TWL_REMAP_SLEEP(RES_VUSB_3V1, TWL_DEV_GRP_P123, 0, 0), 745 TWL_REMAP_SLEEP(RES_VUSB_3V1, TWL_DEV_GRP_P123, 0, 0),
746 /* Resource #20 USB charge pump skipped */ 746 /* Resource #20 USB charge pump skipped */
747 TWL_REMAP_SLEEP(RES_REGEN, TWL_DEV_GRP_P123, 2, 1), 747 TWL_REMAP_SLEEP(RES_REGEN, TWL_DEV_GRP_P123, 2, 1),
diff --git a/drivers/misc/mei/client.c b/drivers/misc/mei/client.c
index 324e1de93687..2da05c0e113d 100644
--- a/drivers/misc/mei/client.c
+++ b/drivers/misc/mei/client.c
@@ -601,6 +601,7 @@ int mei_cl_connect(struct mei_cl *cl, struct file *file)
601 cl->timer_count = MEI_CONNECT_TIMEOUT; 601 cl->timer_count = MEI_CONNECT_TIMEOUT;
602 list_add_tail(&cb->list, &dev->ctrl_rd_list.list); 602 list_add_tail(&cb->list, &dev->ctrl_rd_list.list);
603 } else { 603 } else {
604 cl->state = MEI_FILE_INITIALIZING;
604 list_add_tail(&cb->list, &dev->ctrl_wr_list.list); 605 list_add_tail(&cb->list, &dev->ctrl_wr_list.list);
605 } 606 }
606 607
diff --git a/drivers/misc/mei/nfc.c b/drivers/misc/mei/nfc.c
index 3095fc514a65..5ccc23bc7690 100644
--- a/drivers/misc/mei/nfc.c
+++ b/drivers/misc/mei/nfc.c
@@ -342,9 +342,10 @@ static int mei_nfc_send(struct mei_cl_device *cldev, u8 *buf, size_t length)
342 ndev = (struct mei_nfc_dev *) cldev->priv_data; 342 ndev = (struct mei_nfc_dev *) cldev->priv_data;
343 dev = ndev->cl->dev; 343 dev = ndev->cl->dev;
344 344
345 err = -ENOMEM;
345 mei_buf = kzalloc(length + MEI_NFC_HEADER_SIZE, GFP_KERNEL); 346 mei_buf = kzalloc(length + MEI_NFC_HEADER_SIZE, GFP_KERNEL);
346 if (!mei_buf) 347 if (!mei_buf)
347 return -ENOMEM; 348 goto out;
348 349
349 hdr = (struct mei_nfc_hci_hdr *) mei_buf; 350 hdr = (struct mei_nfc_hci_hdr *) mei_buf;
350 hdr->cmd = MEI_NFC_CMD_HCI_SEND; 351 hdr->cmd = MEI_NFC_CMD_HCI_SEND;
@@ -354,12 +355,9 @@ static int mei_nfc_send(struct mei_cl_device *cldev, u8 *buf, size_t length)
354 hdr->data_size = length; 355 hdr->data_size = length;
355 356
356 memcpy(mei_buf + MEI_NFC_HEADER_SIZE, buf, length); 357 memcpy(mei_buf + MEI_NFC_HEADER_SIZE, buf, length);
357
358 err = __mei_cl_send(ndev->cl, mei_buf, length + MEI_NFC_HEADER_SIZE); 358 err = __mei_cl_send(ndev->cl, mei_buf, length + MEI_NFC_HEADER_SIZE);
359 if (err < 0) 359 if (err < 0)
360 return err; 360 goto out;
361
362 kfree(mei_buf);
363 361
364 if (!wait_event_interruptible_timeout(ndev->send_wq, 362 if (!wait_event_interruptible_timeout(ndev->send_wq,
365 ndev->recv_req_id == ndev->req_id, HZ)) { 363 ndev->recv_req_id == ndev->req_id, HZ)) {
@@ -368,7 +366,8 @@ static int mei_nfc_send(struct mei_cl_device *cldev, u8 *buf, size_t length)
368 } else { 366 } else {
369 ndev->req_id++; 367 ndev->req_id++;
370 } 368 }
371 369out:
370 kfree(mei_buf);
372 return err; 371 return err;
373} 372}
374 373
diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c
index f0ed92e210a1..5967b385141b 100644
--- a/drivers/mtd/nand/omap2.c
+++ b/drivers/mtd/nand/omap2.c
@@ -931,7 +931,7 @@ static int omap_calculate_ecc(struct mtd_info *mtd, const u_char *dat,
931 u32 val; 931 u32 val;
932 932
933 val = readl(info->reg.gpmc_ecc_config); 933 val = readl(info->reg.gpmc_ecc_config);
934 if (((val >> ECC_CONFIG_CS_SHIFT) & ~CS_MASK) != info->gpmc_cs) 934 if (((val >> ECC_CONFIG_CS_SHIFT) & CS_MASK) != info->gpmc_cs)
935 return -EINVAL; 935 return -EINVAL;
936 936
937 /* read ecc result */ 937 /* read ecc result */
@@ -1794,9 +1794,12 @@ static int omap_nand_probe(struct platform_device *pdev)
1794 } 1794 }
1795 1795
1796 /* populate MTD interface based on ECC scheme */ 1796 /* populate MTD interface based on ECC scheme */
1797 nand_chip->ecc.layout = &omap_oobinfo;
1798 ecclayout = &omap_oobinfo; 1797 ecclayout = &omap_oobinfo;
1799 switch (info->ecc_opt) { 1798 switch (info->ecc_opt) {
1799 case OMAP_ECC_HAM1_CODE_SW:
1800 nand_chip->ecc.mode = NAND_ECC_SOFT;
1801 break;
1802
1800 case OMAP_ECC_HAM1_CODE_HW: 1803 case OMAP_ECC_HAM1_CODE_HW:
1801 pr_info("nand: using OMAP_ECC_HAM1_CODE_HW\n"); 1804 pr_info("nand: using OMAP_ECC_HAM1_CODE_HW\n");
1802 nand_chip->ecc.mode = NAND_ECC_HW; 1805 nand_chip->ecc.mode = NAND_ECC_HW;
@@ -1848,7 +1851,7 @@ static int omap_nand_probe(struct platform_device *pdev)
1848 nand_chip->ecc.priv = nand_bch_init(mtd, 1851 nand_chip->ecc.priv = nand_bch_init(mtd,
1849 nand_chip->ecc.size, 1852 nand_chip->ecc.size,
1850 nand_chip->ecc.bytes, 1853 nand_chip->ecc.bytes,
1851 &nand_chip->ecc.layout); 1854 &ecclayout);
1852 if (!nand_chip->ecc.priv) { 1855 if (!nand_chip->ecc.priv) {
1853 pr_err("nand: error: unable to use s/w BCH library\n"); 1856 pr_err("nand: error: unable to use s/w BCH library\n");
1854 err = -EINVAL; 1857 err = -EINVAL;
@@ -1923,7 +1926,7 @@ static int omap_nand_probe(struct platform_device *pdev)
1923 nand_chip->ecc.priv = nand_bch_init(mtd, 1926 nand_chip->ecc.priv = nand_bch_init(mtd,
1924 nand_chip->ecc.size, 1927 nand_chip->ecc.size,
1925 nand_chip->ecc.bytes, 1928 nand_chip->ecc.bytes,
1926 &nand_chip->ecc.layout); 1929 &ecclayout);
1927 if (!nand_chip->ecc.priv) { 1930 if (!nand_chip->ecc.priv) {
1928 pr_err("nand: error: unable to use s/w BCH library\n"); 1931 pr_err("nand: error: unable to use s/w BCH library\n");
1929 err = -EINVAL; 1932 err = -EINVAL;
@@ -2012,6 +2015,9 @@ static int omap_nand_probe(struct platform_device *pdev)
2012 goto return_error; 2015 goto return_error;
2013 } 2016 }
2014 2017
2018 if (info->ecc_opt == OMAP_ECC_HAM1_CODE_SW)
2019 goto scan_tail;
2020
2015 /* all OOB bytes from oobfree->offset till end off OOB are free */ 2021 /* all OOB bytes from oobfree->offset till end off OOB are free */
2016 ecclayout->oobfree->length = mtd->oobsize - ecclayout->oobfree->offset; 2022 ecclayout->oobfree->length = mtd->oobsize - ecclayout->oobfree->offset;
2017 /* check if NAND device's OOB is enough to store ECC signatures */ 2023 /* check if NAND device's OOB is enough to store ECC signatures */
@@ -2021,7 +2027,9 @@ static int omap_nand_probe(struct platform_device *pdev)
2021 err = -EINVAL; 2027 err = -EINVAL;
2022 goto return_error; 2028 goto return_error;
2023 } 2029 }
2030 nand_chip->ecc.layout = ecclayout;
2024 2031
2032scan_tail:
2025 /* second phase scan */ 2033 /* second phase scan */
2026 if (nand_scan_tail(mtd)) { 2034 if (nand_scan_tail(mtd)) {
2027 err = -ENXIO; 2035 err = -ENXIO;
diff --git a/drivers/pinctrl/nomadik/pinctrl-abx500.c b/drivers/pinctrl/nomadik/pinctrl-abx500.c
index a53a689a2bfa..8c6fd8d4dd3c 100644
--- a/drivers/pinctrl/nomadik/pinctrl-abx500.c
+++ b/drivers/pinctrl/nomadik/pinctrl-abx500.c
@@ -620,8 +620,7 @@ static void abx500_gpio_dbg_show_one(struct seq_file *s,
620 } else 620 } else
621 seq_printf(s, " %-9s", chip->get(chip, offset) ? "hi" : "lo"); 621 seq_printf(s, " %-9s", chip->get(chip, offset) ? "hi" : "lo");
622 622
623 if (pctldev) 623 mode = abx500_get_mode(pctldev, chip, offset);
624 mode = abx500_get_mode(pctldev, chip, offset);
625 624
626 seq_printf(s, " %s", (mode < 0) ? "unknown" : modes[mode]); 625 seq_printf(s, " %s", (mode < 0) ? "unknown" : modes[mode]);
627 626
diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c
index af1ba4fc150d..60464a2648aa 100644
--- a/drivers/pinctrl/pinctrl-at91.c
+++ b/drivers/pinctrl/pinctrl-at91.c
@@ -497,10 +497,10 @@ static struct at91_pinctrl_mux_ops at91sam9x5_ops = {
497static void at91_pin_dbg(const struct device *dev, const struct at91_pmx_pin *pin) 497static void at91_pin_dbg(const struct device *dev, const struct at91_pmx_pin *pin)
498{ 498{
499 if (pin->mux) { 499 if (pin->mux) {
500 dev_dbg(dev, "pio%c%d configured as periph%c with conf = 0x%lu\n", 500 dev_dbg(dev, "pio%c%d configured as periph%c with conf = 0x%lx\n",
501 pin->bank + 'A', pin->pin, pin->mux - 1 + 'A', pin->conf); 501 pin->bank + 'A', pin->pin, pin->mux - 1 + 'A', pin->conf);
502 } else { 502 } else {
503 dev_dbg(dev, "pio%c%d configured as gpio with conf = 0x%lu\n", 503 dev_dbg(dev, "pio%c%d configured as gpio with conf = 0x%lx\n",
504 pin->bank + 'A', pin->pin, pin->conf); 504 pin->bank + 'A', pin->pin, pin->conf);
505 } 505 }
506} 506}
diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
index 5e8b2e04cd7a..0c372a300cb8 100644
--- a/drivers/pinctrl/pinctrl-rockchip.c
+++ b/drivers/pinctrl/pinctrl-rockchip.c
@@ -438,7 +438,7 @@ static int rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
438 int reg, ret, mask; 438 int reg, ret, mask;
439 unsigned long flags; 439 unsigned long flags;
440 u8 bit; 440 u8 bit;
441 u32 data; 441 u32 data, rmask;
442 442
443 if (iomux_num > 3) 443 if (iomux_num > 3)
444 return -EINVAL; 444 return -EINVAL;
@@ -478,8 +478,9 @@ static int rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
478 spin_lock_irqsave(&bank->slock, flags); 478 spin_lock_irqsave(&bank->slock, flags);
479 479
480 data = (mask << (bit + 16)); 480 data = (mask << (bit + 16));
481 rmask = data | (data >> 16);
481 data |= (mux & mask) << bit; 482 data |= (mux & mask) << bit;
482 ret = regmap_write(regmap, reg, data); 483 ret = regmap_update_bits(regmap, reg, rmask, data);
483 484
484 spin_unlock_irqrestore(&bank->slock, flags); 485 spin_unlock_irqrestore(&bank->slock, flags);
485 486
@@ -634,7 +635,7 @@ static int rk3288_set_drive(struct rockchip_pin_bank *bank, int pin_num,
634 struct regmap *regmap; 635 struct regmap *regmap;
635 unsigned long flags; 636 unsigned long flags;
636 int reg, ret, i; 637 int reg, ret, i;
637 u32 data; 638 u32 data, rmask;
638 u8 bit; 639 u8 bit;
639 640
640 rk3288_calc_drv_reg_and_bit(bank, pin_num, &regmap, &reg, &bit); 641 rk3288_calc_drv_reg_and_bit(bank, pin_num, &regmap, &reg, &bit);
@@ -657,9 +658,10 @@ static int rk3288_set_drive(struct rockchip_pin_bank *bank, int pin_num,
657 658
658 /* enable the write to the equivalent lower bits */ 659 /* enable the write to the equivalent lower bits */
659 data = ((1 << RK3288_DRV_BITS_PER_PIN) - 1) << (bit + 16); 660 data = ((1 << RK3288_DRV_BITS_PER_PIN) - 1) << (bit + 16);
661 rmask = data | (data >> 16);
660 data |= (ret << bit); 662 data |= (ret << bit);
661 663
662 ret = regmap_write(regmap, reg, data); 664 ret = regmap_update_bits(regmap, reg, rmask, data);
663 spin_unlock_irqrestore(&bank->slock, flags); 665 spin_unlock_irqrestore(&bank->slock, flags);
664 666
665 return ret; 667 return ret;
@@ -722,7 +724,7 @@ static int rockchip_set_pull(struct rockchip_pin_bank *bank,
722 int reg, ret; 724 int reg, ret;
723 unsigned long flags; 725 unsigned long flags;
724 u8 bit; 726 u8 bit;
725 u32 data; 727 u32 data, rmask;
726 728
727 dev_dbg(info->dev, "setting pull of GPIO%d-%d to %d\n", 729 dev_dbg(info->dev, "setting pull of GPIO%d-%d to %d\n",
728 bank->bank_num, pin_num, pull); 730 bank->bank_num, pin_num, pull);
@@ -750,6 +752,7 @@ static int rockchip_set_pull(struct rockchip_pin_bank *bank,
750 752
751 /* enable the write to the equivalent lower bits */ 753 /* enable the write to the equivalent lower bits */
752 data = ((1 << RK3188_PULL_BITS_PER_PIN) - 1) << (bit + 16); 754 data = ((1 << RK3188_PULL_BITS_PER_PIN) - 1) << (bit + 16);
755 rmask = data | (data >> 16);
753 756
754 switch (pull) { 757 switch (pull) {
755 case PIN_CONFIG_BIAS_DISABLE: 758 case PIN_CONFIG_BIAS_DISABLE:
@@ -770,7 +773,7 @@ static int rockchip_set_pull(struct rockchip_pin_bank *bank,
770 return -EINVAL; 773 return -EINVAL;
771 } 774 }
772 775
773 ret = regmap_write(regmap, reg, data); 776 ret = regmap_update_bits(regmap, reg, rmask, data);
774 777
775 spin_unlock_irqrestore(&bank->slock, flags); 778 spin_unlock_irqrestore(&bank->slock, flags);
776 break; 779 break;
diff --git a/drivers/pinctrl/pinctrl-tegra-xusb.c b/drivers/pinctrl/pinctrl-tegra-xusb.c
index a06620474845..e641b4226c42 100644
--- a/drivers/pinctrl/pinctrl-tegra-xusb.c
+++ b/drivers/pinctrl/pinctrl-tegra-xusb.c
@@ -680,7 +680,7 @@ static struct phy *tegra_xusb_padctl_xlate(struct device *dev,
680 if (args->args_count <= 0) 680 if (args->args_count <= 0)
681 return ERR_PTR(-EINVAL); 681 return ERR_PTR(-EINVAL);
682 682
683 if (index > ARRAY_SIZE(padctl->phys)) 683 if (index >= ARRAY_SIZE(padctl->phys))
684 return ERR_PTR(-EINVAL); 684 return ERR_PTR(-EINVAL);
685 685
686 return padctl->phys[index]; 686 return padctl->phys[index];
@@ -930,7 +930,8 @@ static int tegra_xusb_padctl_probe(struct platform_device *pdev)
930 930
931 padctl->provider = devm_of_phy_provider_register(&pdev->dev, 931 padctl->provider = devm_of_phy_provider_register(&pdev->dev,
932 tegra_xusb_padctl_xlate); 932 tegra_xusb_padctl_xlate);
933 if (err < 0) { 933 if (IS_ERR(padctl->provider)) {
934 err = PTR_ERR(padctl->provider);
934 dev_err(&pdev->dev, "failed to register PHYs: %d\n", err); 935 dev_err(&pdev->dev, "failed to register PHYs: %d\n", err);
935 goto unregister; 936 goto unregister;
936 } 937 }
diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.c b/drivers/pinctrl/samsung/pinctrl-exynos.c
index 003bfd874a61..d7154ed0b0eb 100644
--- a/drivers/pinctrl/samsung/pinctrl-exynos.c
+++ b/drivers/pinctrl/samsung/pinctrl-exynos.c
@@ -127,14 +127,10 @@ static int exynos_irq_set_type(struct irq_data *irqd, unsigned int type)
127 struct irq_chip *chip = irq_data_get_irq_chip(irqd); 127 struct irq_chip *chip = irq_data_get_irq_chip(irqd);
128 struct exynos_irq_chip *our_chip = to_exynos_irq_chip(chip); 128 struct exynos_irq_chip *our_chip = to_exynos_irq_chip(chip);
129 struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd); 129 struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
130 struct samsung_pin_bank_type *bank_type = bank->type;
131 struct samsung_pinctrl_drv_data *d = bank->drvdata; 130 struct samsung_pinctrl_drv_data *d = bank->drvdata;
132 unsigned int pin = irqd->hwirq; 131 unsigned int shift = EXYNOS_EINT_CON_LEN * irqd->hwirq;
133 unsigned int shift = EXYNOS_EINT_CON_LEN * pin;
134 unsigned int con, trig_type; 132 unsigned int con, trig_type;
135 unsigned long reg_con = our_chip->eint_con + bank->eint_offset; 133 unsigned long reg_con = our_chip->eint_con + bank->eint_offset;
136 unsigned long flags;
137 unsigned int mask;
138 134
139 switch (type) { 135 switch (type) {
140 case IRQ_TYPE_EDGE_RISING: 136 case IRQ_TYPE_EDGE_RISING:
@@ -167,8 +163,32 @@ static int exynos_irq_set_type(struct irq_data *irqd, unsigned int type)
167 con |= trig_type << shift; 163 con |= trig_type << shift;
168 writel(con, d->virt_base + reg_con); 164 writel(con, d->virt_base + reg_con);
169 165
166 return 0;
167}
168
169static int exynos_irq_request_resources(struct irq_data *irqd)
170{
171 struct irq_chip *chip = irq_data_get_irq_chip(irqd);
172 struct exynos_irq_chip *our_chip = to_exynos_irq_chip(chip);
173 struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
174 struct samsung_pin_bank_type *bank_type = bank->type;
175 struct samsung_pinctrl_drv_data *d = bank->drvdata;
176 unsigned int shift = EXYNOS_EINT_CON_LEN * irqd->hwirq;
177 unsigned long reg_con = our_chip->eint_con + bank->eint_offset;
178 unsigned long flags;
179 unsigned int mask;
180 unsigned int con;
181 int ret;
182
183 ret = gpio_lock_as_irq(&bank->gpio_chip, irqd->hwirq);
184 if (ret) {
185 dev_err(bank->gpio_chip.dev, "unable to lock pin %s-%lu IRQ\n",
186 bank->name, irqd->hwirq);
187 return ret;
188 }
189
170 reg_con = bank->pctl_offset + bank_type->reg_offset[PINCFG_TYPE_FUNC]; 190 reg_con = bank->pctl_offset + bank_type->reg_offset[PINCFG_TYPE_FUNC];
171 shift = pin * bank_type->fld_width[PINCFG_TYPE_FUNC]; 191 shift = irqd->hwirq * bank_type->fld_width[PINCFG_TYPE_FUNC];
172 mask = (1 << bank_type->fld_width[PINCFG_TYPE_FUNC]) - 1; 192 mask = (1 << bank_type->fld_width[PINCFG_TYPE_FUNC]) - 1;
173 193
174 spin_lock_irqsave(&bank->slock, flags); 194 spin_lock_irqsave(&bank->slock, flags);
@@ -180,9 +200,42 @@ static int exynos_irq_set_type(struct irq_data *irqd, unsigned int type)
180 200
181 spin_unlock_irqrestore(&bank->slock, flags); 201 spin_unlock_irqrestore(&bank->slock, flags);
182 202
203 exynos_irq_unmask(irqd);
204
183 return 0; 205 return 0;
184} 206}
185 207
208static void exynos_irq_release_resources(struct irq_data *irqd)
209{
210 struct irq_chip *chip = irq_data_get_irq_chip(irqd);
211 struct exynos_irq_chip *our_chip = to_exynos_irq_chip(chip);
212 struct samsung_pin_bank *bank = irq_data_get_irq_chip_data(irqd);
213 struct samsung_pin_bank_type *bank_type = bank->type;
214 struct samsung_pinctrl_drv_data *d = bank->drvdata;
215 unsigned int shift = EXYNOS_EINT_CON_LEN * irqd->hwirq;
216 unsigned long reg_con = our_chip->eint_con + bank->eint_offset;
217 unsigned long flags;
218 unsigned int mask;
219 unsigned int con;
220
221 reg_con = bank->pctl_offset + bank_type->reg_offset[PINCFG_TYPE_FUNC];
222 shift = irqd->hwirq * bank_type->fld_width[PINCFG_TYPE_FUNC];
223 mask = (1 << bank_type->fld_width[PINCFG_TYPE_FUNC]) - 1;
224
225 exynos_irq_mask(irqd);
226
227 spin_lock_irqsave(&bank->slock, flags);
228
229 con = readl(d->virt_base + reg_con);
230 con &= ~(mask << shift);
231 con |= FUNC_INPUT << shift;
232 writel(con, d->virt_base + reg_con);
233
234 spin_unlock_irqrestore(&bank->slock, flags);
235
236 gpio_unlock_as_irq(&bank->gpio_chip, irqd->hwirq);
237}
238
186/* 239/*
187 * irq_chip for gpio interrupts. 240 * irq_chip for gpio interrupts.
188 */ 241 */
@@ -193,6 +246,8 @@ static struct exynos_irq_chip exynos_gpio_irq_chip = {
193 .irq_mask = exynos_irq_mask, 246 .irq_mask = exynos_irq_mask,
194 .irq_ack = exynos_irq_ack, 247 .irq_ack = exynos_irq_ack,
195 .irq_set_type = exynos_irq_set_type, 248 .irq_set_type = exynos_irq_set_type,
249 .irq_request_resources = exynos_irq_request_resources,
250 .irq_release_resources = exynos_irq_release_resources,
196 }, 251 },
197 .eint_con = EXYNOS_GPIO_ECON_OFFSET, 252 .eint_con = EXYNOS_GPIO_ECON_OFFSET,
198 .eint_mask = EXYNOS_GPIO_EMASK_OFFSET, 253 .eint_mask = EXYNOS_GPIO_EMASK_OFFSET,
@@ -336,6 +391,8 @@ static struct exynos_irq_chip exynos_wkup_irq_chip = {
336 .irq_ack = exynos_irq_ack, 391 .irq_ack = exynos_irq_ack,
337 .irq_set_type = exynos_irq_set_type, 392 .irq_set_type = exynos_irq_set_type,
338 .irq_set_wake = exynos_wkup_irq_set_wake, 393 .irq_set_wake = exynos_wkup_irq_set_wake,
394 .irq_request_resources = exynos_irq_request_resources,
395 .irq_release_resources = exynos_irq_release_resources,
339 }, 396 },
340 .eint_con = EXYNOS_WKUP_ECON_OFFSET, 397 .eint_con = EXYNOS_WKUP_ECON_OFFSET,
341 .eint_mask = EXYNOS_WKUP_EMASK_OFFSET, 398 .eint_mask = EXYNOS_WKUP_EMASK_OFFSET,
diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.h b/drivers/pinctrl/samsung/pinctrl-samsung.h
index 2b882320e8e9..5cedc9d26390 100644
--- a/drivers/pinctrl/samsung/pinctrl-samsung.h
+++ b/drivers/pinctrl/samsung/pinctrl-samsung.h
@@ -26,6 +26,7 @@
26#include <linux/gpio.h> 26#include <linux/gpio.h>
27 27
28/* pinmux function number for pin as gpio output line */ 28/* pinmux function number for pin as gpio output line */
29#define FUNC_INPUT 0x0
29#define FUNC_OUTPUT 0x1 30#define FUNC_OUTPUT 0x1
30 31
31/** 32/**
diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a7791.c b/drivers/pinctrl/sh-pfc/pfc-r8a7791.c
index 576d41b459e9..c6e5deba238e 100644
--- a/drivers/pinctrl/sh-pfc/pfc-r8a7791.c
+++ b/drivers/pinctrl/sh-pfc/pfc-r8a7791.c
@@ -4509,24 +4509,24 @@ static const char * const audio_clk_groups[] = {
4509}; 4509};
4510 4510
4511static const char * const can0_groups[] = { 4511static const char * const can0_groups[] = {
4512 "can0_data_a", 4512 "can0_data",
4513 "can0_data_b", 4513 "can0_data_b",
4514 "can0_data_c", 4514 "can0_data_c",
4515 "can0_data_d", 4515 "can0_data_d",
4516 "can0_data_e", 4516 "can0_data_e",
4517 "can0_data_f", 4517 "can0_data_f",
4518 "can_clk_a", 4518 "can_clk",
4519 "can_clk_b", 4519 "can_clk_b",
4520 "can_clk_c", 4520 "can_clk_c",
4521 "can_clk_d", 4521 "can_clk_d",
4522}; 4522};
4523 4523
4524static const char * const can1_groups[] = { 4524static const char * const can1_groups[] = {
4525 "can1_data_a", 4525 "can1_data",
4526 "can1_data_b", 4526 "can1_data_b",
4527 "can1_data_c", 4527 "can1_data_c",
4528 "can1_data_d", 4528 "can1_data_d",
4529 "can_clk_a", 4529 "can_clk",
4530 "can_clk_b", 4530 "can_clk_b",
4531 "can_clk_c", 4531 "can_clk_c",
4532 "can_clk_d", 4532 "can_clk_d",
diff --git a/drivers/rtc/rtc-s5m.c b/drivers/rtc/rtc-s5m.c
index 8f06250a0389..8754c33361e8 100644
--- a/drivers/rtc/rtc-s5m.c
+++ b/drivers/rtc/rtc-s5m.c
@@ -717,12 +717,14 @@ static int s5m_rtc_probe(struct platform_device *pdev)
717 info->device_type = s5m87xx->device_type; 717 info->device_type = s5m87xx->device_type;
718 info->wtsr_smpl = s5m87xx->wtsr_smpl; 718 info->wtsr_smpl = s5m87xx->wtsr_smpl;
719 719
720 info->irq = regmap_irq_get_virq(s5m87xx->irq_data, alarm_irq); 720 if (s5m87xx->irq_data) {
721 if (info->irq <= 0) { 721 info->irq = regmap_irq_get_virq(s5m87xx->irq_data, alarm_irq);
722 ret = -EINVAL; 722 if (info->irq <= 0) {
723 dev_err(&pdev->dev, "Failed to get virtual IRQ %d\n", 723 ret = -EINVAL;
724 dev_err(&pdev->dev, "Failed to get virtual IRQ %d\n",
724 alarm_irq); 725 alarm_irq);
725 goto err; 726 goto err;
727 }
726 } 728 }
727 729
728 platform_set_drvdata(pdev, info); 730 platform_set_drvdata(pdev, info);
@@ -744,6 +746,11 @@ static int s5m_rtc_probe(struct platform_device *pdev)
744 goto err; 746 goto err;
745 } 747 }
746 748
749 if (!info->irq) {
750 dev_info(&pdev->dev, "Alarm IRQ not available\n");
751 return 0;
752 }
753
747 ret = devm_request_threaded_irq(&pdev->dev, info->irq, NULL, 754 ret = devm_request_threaded_irq(&pdev->dev, info->irq, NULL,
748 s5m_rtc_alarm_irq, 0, "rtc-alarm0", 755 s5m_rtc_alarm_irq, 0, "rtc-alarm0",
749 info); 756 info);
@@ -802,7 +809,7 @@ static int s5m_rtc_resume(struct device *dev)
802 struct s5m_rtc_info *info = dev_get_drvdata(dev); 809 struct s5m_rtc_info *info = dev_get_drvdata(dev);
803 int ret = 0; 810 int ret = 0;
804 811
805 if (device_may_wakeup(dev)) 812 if (info->irq && device_may_wakeup(dev))
806 ret = disable_irq_wake(info->irq); 813 ret = disable_irq_wake(info->irq);
807 814
808 return ret; 815 return ret;
@@ -813,7 +820,7 @@ static int s5m_rtc_suspend(struct device *dev)
813 struct s5m_rtc_info *info = dev_get_drvdata(dev); 820 struct s5m_rtc_info *info = dev_get_drvdata(dev);
814 int ret = 0; 821 int ret = 0;
815 822
816 if (device_may_wakeup(dev)) 823 if (info->irq && device_may_wakeup(dev))
817 ret = enable_irq_wake(info->irq); 824 ret = enable_irq_wake(info->irq);
818 825
819 return ret; 826 return ret;
diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c
index a6d47e5eee9e..c43aca69fb30 100644
--- a/drivers/s390/char/con3215.c
+++ b/drivers/s390/char/con3215.c
@@ -1035,12 +1035,26 @@ static int tty3215_write(struct tty_struct * tty,
1035 const unsigned char *buf, int count) 1035 const unsigned char *buf, int count)
1036{ 1036{
1037 struct raw3215_info *raw; 1037 struct raw3215_info *raw;
1038 int i, written;
1038 1039
1039 if (!tty) 1040 if (!tty)
1040 return 0; 1041 return 0;
1041 raw = (struct raw3215_info *) tty->driver_data; 1042 raw = (struct raw3215_info *) tty->driver_data;
1042 raw3215_write(raw, buf, count); 1043 written = count;
1043 return count; 1044 while (count > 0) {
1045 for (i = 0; i < count; i++)
1046 if (buf[i] == '\t' || buf[i] == '\n')
1047 break;
1048 raw3215_write(raw, buf, i);
1049 count -= i;
1050 buf += i;
1051 if (count > 0) {
1052 raw3215_putchar(raw, *buf);
1053 count--;
1054 buf++;
1055 }
1056 }
1057 return written;
1044} 1058}
1045 1059
1046/* 1060/*
@@ -1188,7 +1202,7 @@ static int __init tty3215_init(void)
1188 driver->subtype = SYSTEM_TYPE_TTY; 1202 driver->subtype = SYSTEM_TYPE_TTY;
1189 driver->init_termios = tty_std_termios; 1203 driver->init_termios = tty_std_termios;
1190 driver->init_termios.c_iflag = IGNBRK | IGNPAR; 1204 driver->init_termios.c_iflag = IGNBRK | IGNPAR;
1191 driver->init_termios.c_oflag = ONLCR | XTABS; 1205 driver->init_termios.c_oflag = ONLCR;
1192 driver->init_termios.c_lflag = ISIG; 1206 driver->init_termios.c_lflag = ISIG;
1193 driver->flags = TTY_DRIVER_REAL_RAW; 1207 driver->flags = TTY_DRIVER_REAL_RAW;
1194 tty_set_operations(driver, &tty3215_ops); 1208 tty_set_operations(driver, &tty3215_ops);
diff --git a/drivers/s390/char/sclp_tty.c b/drivers/s390/char/sclp_tty.c
index 7ed7a5987816..003663288e29 100644
--- a/drivers/s390/char/sclp_tty.c
+++ b/drivers/s390/char/sclp_tty.c
@@ -559,7 +559,7 @@ sclp_tty_init(void)
559 driver->subtype = SYSTEM_TYPE_TTY; 559 driver->subtype = SYSTEM_TYPE_TTY;
560 driver->init_termios = tty_std_termios; 560 driver->init_termios = tty_std_termios;
561 driver->init_termios.c_iflag = IGNBRK | IGNPAR; 561 driver->init_termios.c_iflag = IGNBRK | IGNPAR;
562 driver->init_termios.c_oflag = ONLCR | XTABS; 562 driver->init_termios.c_oflag = ONLCR;
563 driver->init_termios.c_lflag = ISIG | ECHO; 563 driver->init_termios.c_lflag = ISIG | ECHO;
564 driver->flags = TTY_DRIVER_REAL_RAW; 564 driver->flags = TTY_DRIVER_REAL_RAW;
565 tty_set_operations(driver, &sclp_ops); 565 tty_set_operations(driver, &sclp_ops);
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index ce62e8798cc8..d837dc180522 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1808,7 +1808,6 @@ static int scsi_mq_prep_fn(struct request *req)
1808 1808
1809 cmd->tag = req->tag; 1809 cmd->tag = req->tag;
1810 1810
1811 req->cmd = req->__cmd;
1812 cmd->cmnd = req->cmd; 1811 cmd->cmnd = req->cmd;
1813 cmd->prot_op = SCSI_PROT_NORMAL; 1812 cmd->prot_op = SCSI_PROT_NORMAL;
1814 1813
diff --git a/drivers/spi/spi-au1550.c b/drivers/spi/spi-au1550.c
index 40c3d43c9292..f40b34cdf2fc 100644
--- a/drivers/spi/spi-au1550.c
+++ b/drivers/spi/spi-au1550.c
@@ -945,7 +945,7 @@ static int au1550_spi_remove(struct platform_device *pdev)
945 spi_bitbang_stop(&hw->bitbang); 945 spi_bitbang_stop(&hw->bitbang);
946 free_irq(hw->irq, hw); 946 free_irq(hw->irq, hw);
947 iounmap((void __iomem *)hw->regs); 947 iounmap((void __iomem *)hw->regs);
948 release_mem_region(r->start, sizeof(psc_spi_t)); 948 release_mem_region(hw->ioarea->start, sizeof(psc_spi_t));
949 949
950 if (hw->usedma) { 950 if (hw->usedma) {
951 au1550_spi_dma_rxtmp_free(hw); 951 au1550_spi_dma_rxtmp_free(hw);
diff --git a/drivers/spi/spi-davinci.c b/drivers/spi/spi-davinci.c
index 276a3884fb3c..48f1d26e6ad9 100644
--- a/drivers/spi/spi-davinci.c
+++ b/drivers/spi/spi-davinci.c
@@ -417,16 +417,16 @@ static int davinci_spi_setup(struct spi_device *spi)
417 flags, dev_name(&spi->dev)); 417 flags, dev_name(&spi->dev));
418 internal_cs = false; 418 internal_cs = false;
419 } 419 }
420 }
421 420
422 if (retval) { 421 if (retval) {
423 dev_err(&spi->dev, "GPIO %d setup failed (%d)\n", 422 dev_err(&spi->dev, "GPIO %d setup failed (%d)\n",
424 spi->cs_gpio, retval); 423 spi->cs_gpio, retval);
425 return retval; 424 return retval;
426 } 425 }
427 426
428 if (internal_cs) 427 if (internal_cs)
429 set_io_bits(dspi->base + SPIPC0, 1 << spi->chip_select); 428 set_io_bits(dspi->base + SPIPC0, 1 << spi->chip_select);
429 }
430 430
431 if (spi->mode & SPI_READY) 431 if (spi->mode & SPI_READY)
432 set_io_bits(dspi->base + SPIPC0, SPIPC0_SPIENA_MASK); 432 set_io_bits(dspi->base + SPIPC0, SPIPC0_SPIENA_MASK);
diff --git a/drivers/spi/spi-dw-pci.c b/drivers/spi/spi-dw-pci.c
index 3f3dc1226edf..e14960470d8d 100644
--- a/drivers/spi/spi-dw-pci.c
+++ b/drivers/spi/spi-dw-pci.c
@@ -62,6 +62,8 @@ static int spi_pci_probe(struct pci_dev *pdev,
62 if (ret) 62 if (ret)
63 return ret; 63 return ret;
64 64
65 dws->regs = pcim_iomap_table(pdev)[pci_bar];
66
65 dws->bus_num = 0; 67 dws->bus_num = 0;
66 dws->num_cs = 4; 68 dws->num_cs = 4;
67 dws->irq = pdev->irq; 69 dws->irq = pdev->irq;
diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c
index 29f33143b795..670f0627f3bf 100644
--- a/drivers/spi/spi-dw.c
+++ b/drivers/spi/spi-dw.c
@@ -271,7 +271,7 @@ static void giveback(struct dw_spi *dws)
271 transfer_list); 271 transfer_list);
272 272
273 if (!last_transfer->cs_change) 273 if (!last_transfer->cs_change)
274 spi_chip_sel(dws, dws->cur_msg->spi, 0); 274 spi_chip_sel(dws, msg->spi, 0);
275 275
276 spi_finalize_current_message(dws->master); 276 spi_finalize_current_message(dws->master);
277} 277}
diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c
index 68441fa448de..352eed7463ac 100644
--- a/drivers/spi/spi-omap2-mcspi.c
+++ b/drivers/spi/spi-omap2-mcspi.c
@@ -329,7 +329,8 @@ static void omap2_mcspi_set_fifo(const struct spi_device *spi,
329disable_fifo: 329disable_fifo:
330 if (t->rx_buf != NULL) 330 if (t->rx_buf != NULL)
331 chconf &= ~OMAP2_MCSPI_CHCONF_FFER; 331 chconf &= ~OMAP2_MCSPI_CHCONF_FFER;
332 else 332
333 if (t->tx_buf != NULL)
333 chconf &= ~OMAP2_MCSPI_CHCONF_FFET; 334 chconf &= ~OMAP2_MCSPI_CHCONF_FFET;
334 335
335 mcspi_write_chconf0(spi, chconf); 336 mcspi_write_chconf0(spi, chconf);
diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
index fe792106bdc5..46f45ca2c694 100644
--- a/drivers/spi/spi-pxa2xx.c
+++ b/drivers/spi/spi-pxa2xx.c
@@ -1074,6 +1074,7 @@ static struct acpi_device_id pxa2xx_spi_acpi_match[] = {
1074 { "INT3430", 0 }, 1074 { "INT3430", 0 },
1075 { "INT3431", 0 }, 1075 { "INT3431", 0 },
1076 { "80860F0E", 0 }, 1076 { "80860F0E", 0 },
1077 { "8086228E", 0 },
1077 { }, 1078 { },
1078}; 1079};
1079MODULE_DEVICE_TABLE(acpi, pxa2xx_spi_acpi_match); 1080MODULE_DEVICE_TABLE(acpi, pxa2xx_spi_acpi_match);
diff --git a/drivers/spi/spi-rockchip.c b/drivers/spi/spi-rockchip.c
index c0743604b906..cd0e08b0c9f6 100644
--- a/drivers/spi/spi-rockchip.c
+++ b/drivers/spi/spi-rockchip.c
@@ -499,7 +499,7 @@ static void rockchip_spi_config(struct rockchip_spi *rs)
499 } 499 }
500 500
501 /* div doesn't support odd number */ 501 /* div doesn't support odd number */
502 div = rs->max_freq / rs->speed; 502 div = max_t(u32, rs->max_freq / rs->speed, 1);
503 div = (div + 1) & 0xfffe; 503 div = (div + 1) & 0xfffe;
504 504
505 spi_enable_chip(rs, 0); 505 spi_enable_chip(rs, 0);
@@ -678,7 +678,7 @@ static int rockchip_spi_probe(struct platform_device *pdev)
678 rs->dma_tx.addr = (dma_addr_t)(mem->start + ROCKCHIP_SPI_TXDR); 678 rs->dma_tx.addr = (dma_addr_t)(mem->start + ROCKCHIP_SPI_TXDR);
679 rs->dma_rx.addr = (dma_addr_t)(mem->start + ROCKCHIP_SPI_RXDR); 679 rs->dma_rx.addr = (dma_addr_t)(mem->start + ROCKCHIP_SPI_RXDR);
680 rs->dma_tx.direction = DMA_MEM_TO_DEV; 680 rs->dma_tx.direction = DMA_MEM_TO_DEV;
681 rs->dma_tx.direction = DMA_DEV_TO_MEM; 681 rs->dma_rx.direction = DMA_DEV_TO_MEM;
682 682
683 master->can_dma = rockchip_spi_can_dma; 683 master->can_dma = rockchip_spi_can_dma;
684 master->dma_tx = rs->dma_tx.ch; 684 master->dma_tx = rs->dma_tx.ch;
diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c
index c850dfdfa9e3..ad87a98f8f68 100644
--- a/drivers/spi/spi-rspi.c
+++ b/drivers/spi/spi-rspi.c
@@ -472,25 +472,52 @@ static int rspi_dma_transfer(struct rspi_data *rspi, struct sg_table *tx,
472 dma_cookie_t cookie; 472 dma_cookie_t cookie;
473 int ret; 473 int ret;
474 474
475 if (tx) { 475 /* First prepare and submit the DMA request(s), as this may fail */
476 desc_tx = dmaengine_prep_slave_sg(rspi->master->dma_tx,
477 tx->sgl, tx->nents, DMA_TO_DEVICE,
478 DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
479 if (!desc_tx)
480 goto no_dma;
481
482 irq_mask |= SPCR_SPTIE;
483 }
484 if (rx) { 476 if (rx) {
485 desc_rx = dmaengine_prep_slave_sg(rspi->master->dma_rx, 477 desc_rx = dmaengine_prep_slave_sg(rspi->master->dma_rx,
486 rx->sgl, rx->nents, DMA_FROM_DEVICE, 478 rx->sgl, rx->nents, DMA_FROM_DEVICE,
487 DMA_PREP_INTERRUPT | DMA_CTRL_ACK); 479 DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
488 if (!desc_rx) 480 if (!desc_rx) {
489 goto no_dma; 481 ret = -EAGAIN;
482 goto no_dma_rx;
483 }
484
485 desc_rx->callback = rspi_dma_complete;
486 desc_rx->callback_param = rspi;
487 cookie = dmaengine_submit(desc_rx);
488 if (dma_submit_error(cookie)) {
489 ret = cookie;
490 goto no_dma_rx;
491 }
490 492
491 irq_mask |= SPCR_SPRIE; 493 irq_mask |= SPCR_SPRIE;
492 } 494 }
493 495
496 if (tx) {
497 desc_tx = dmaengine_prep_slave_sg(rspi->master->dma_tx,
498 tx->sgl, tx->nents, DMA_TO_DEVICE,
499 DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
500 if (!desc_tx) {
501 ret = -EAGAIN;
502 goto no_dma_tx;
503 }
504
505 if (rx) {
506 /* No callback */
507 desc_tx->callback = NULL;
508 } else {
509 desc_tx->callback = rspi_dma_complete;
510 desc_tx->callback_param = rspi;
511 }
512 cookie = dmaengine_submit(desc_tx);
513 if (dma_submit_error(cookie)) {
514 ret = cookie;
515 goto no_dma_tx;
516 }
517
518 irq_mask |= SPCR_SPTIE;
519 }
520
494 /* 521 /*
495 * DMAC needs SPxIE, but if SPxIE is set, the IRQ routine will be 522 * DMAC needs SPxIE, but if SPxIE is set, the IRQ routine will be
496 * called. So, this driver disables the IRQ while DMA transfer. 523 * called. So, this driver disables the IRQ while DMA transfer.
@@ -503,34 +530,24 @@ static int rspi_dma_transfer(struct rspi_data *rspi, struct sg_table *tx,
503 rspi_enable_irq(rspi, irq_mask); 530 rspi_enable_irq(rspi, irq_mask);
504 rspi->dma_callbacked = 0; 531 rspi->dma_callbacked = 0;
505 532
506 if (rx) { 533 /* Now start DMA */
507 desc_rx->callback = rspi_dma_complete; 534 if (rx)
508 desc_rx->callback_param = rspi;
509 cookie = dmaengine_submit(desc_rx);
510 if (dma_submit_error(cookie))
511 return cookie;
512 dma_async_issue_pending(rspi->master->dma_rx); 535 dma_async_issue_pending(rspi->master->dma_rx);
513 } 536 if (tx)
514 if (tx) {
515 if (rx) {
516 /* No callback */
517 desc_tx->callback = NULL;
518 } else {
519 desc_tx->callback = rspi_dma_complete;
520 desc_tx->callback_param = rspi;
521 }
522 cookie = dmaengine_submit(desc_tx);
523 if (dma_submit_error(cookie))
524 return cookie;
525 dma_async_issue_pending(rspi->master->dma_tx); 537 dma_async_issue_pending(rspi->master->dma_tx);
526 }
527 538
528 ret = wait_event_interruptible_timeout(rspi->wait, 539 ret = wait_event_interruptible_timeout(rspi->wait,
529 rspi->dma_callbacked, HZ); 540 rspi->dma_callbacked, HZ);
530 if (ret > 0 && rspi->dma_callbacked) 541 if (ret > 0 && rspi->dma_callbacked)
531 ret = 0; 542 ret = 0;
532 else if (!ret) 543 else if (!ret) {
544 dev_err(&rspi->master->dev, "DMA timeout\n");
533 ret = -ETIMEDOUT; 545 ret = -ETIMEDOUT;
546 if (tx)
547 dmaengine_terminate_all(rspi->master->dma_tx);
548 if (rx)
549 dmaengine_terminate_all(rspi->master->dma_rx);
550 }
534 551
535 rspi_disable_irq(rspi, irq_mask); 552 rspi_disable_irq(rspi, irq_mask);
536 553
@@ -541,11 +558,16 @@ static int rspi_dma_transfer(struct rspi_data *rspi, struct sg_table *tx,
541 558
542 return ret; 559 return ret;
543 560
544no_dma: 561no_dma_tx:
545 pr_warn_once("%s %s: DMA not available, falling back to PIO\n", 562 if (rx)
546 dev_driver_string(&rspi->master->dev), 563 dmaengine_terminate_all(rspi->master->dma_rx);
547 dev_name(&rspi->master->dev)); 564no_dma_rx:
548 return -EAGAIN; 565 if (ret == -EAGAIN) {
566 pr_warn_once("%s %s: DMA not available, falling back to PIO\n",
567 dev_driver_string(&rspi->master->dev),
568 dev_name(&rspi->master->dev));
569 }
570 return ret;
549} 571}
550 572
551static void rspi_receive_init(const struct rspi_data *rspi) 573static void rspi_receive_init(const struct rspi_data *rspi)
diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c
index 2a4354dcd661..543075b80f16 100644
--- a/drivers/spi/spi-sh-msiof.c
+++ b/drivers/spi/spi-sh-msiof.c
@@ -636,48 +636,38 @@ static int sh_msiof_dma_once(struct sh_msiof_spi_priv *p, const void *tx,
636 dma_cookie_t cookie; 636 dma_cookie_t cookie;
637 int ret; 637 int ret;
638 638
639 if (tx) { 639 /* First prepare and submit the DMA request(s), as this may fail */
640 ier_bits |= IER_TDREQE | IER_TDMAE;
641 dma_sync_single_for_device(p->master->dma_tx->device->dev,
642 p->tx_dma_addr, len, DMA_TO_DEVICE);
643 desc_tx = dmaengine_prep_slave_single(p->master->dma_tx,
644 p->tx_dma_addr, len, DMA_TO_DEVICE,
645 DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
646 if (!desc_tx)
647 return -EAGAIN;
648 }
649
650 if (rx) { 640 if (rx) {
651 ier_bits |= IER_RDREQE | IER_RDMAE; 641 ier_bits |= IER_RDREQE | IER_RDMAE;
652 desc_rx = dmaengine_prep_slave_single(p->master->dma_rx, 642 desc_rx = dmaengine_prep_slave_single(p->master->dma_rx,
653 p->rx_dma_addr, len, DMA_FROM_DEVICE, 643 p->rx_dma_addr, len, DMA_FROM_DEVICE,
654 DMA_PREP_INTERRUPT | DMA_CTRL_ACK); 644 DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
655 if (!desc_rx) 645 if (!desc_rx) {
656 return -EAGAIN; 646 ret = -EAGAIN;
657 } 647 goto no_dma_rx;
658 648 }
659 /* 1 stage FIFO watermarks for DMA */
660 sh_msiof_write(p, FCTR, FCTR_TFWM_1 | FCTR_RFWM_1);
661
662 /* setup msiof transfer mode registers (32-bit words) */
663 sh_msiof_spi_set_mode_regs(p, tx, rx, 32, len / 4);
664
665 sh_msiof_write(p, IER, ier_bits);
666
667 reinit_completion(&p->done);
668 649
669 if (rx) {
670 desc_rx->callback = sh_msiof_dma_complete; 650 desc_rx->callback = sh_msiof_dma_complete;
671 desc_rx->callback_param = p; 651 desc_rx->callback_param = p;
672 cookie = dmaengine_submit(desc_rx); 652 cookie = dmaengine_submit(desc_rx);
673 if (dma_submit_error(cookie)) { 653 if (dma_submit_error(cookie)) {
674 ret = cookie; 654 ret = cookie;
675 goto stop_ier; 655 goto no_dma_rx;
676 } 656 }
677 dma_async_issue_pending(p->master->dma_rx);
678 } 657 }
679 658
680 if (tx) { 659 if (tx) {
660 ier_bits |= IER_TDREQE | IER_TDMAE;
661 dma_sync_single_for_device(p->master->dma_tx->device->dev,
662 p->tx_dma_addr, len, DMA_TO_DEVICE);
663 desc_tx = dmaengine_prep_slave_single(p->master->dma_tx,
664 p->tx_dma_addr, len, DMA_TO_DEVICE,
665 DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
666 if (!desc_tx) {
667 ret = -EAGAIN;
668 goto no_dma_tx;
669 }
670
681 if (rx) { 671 if (rx) {
682 /* No callback */ 672 /* No callback */
683 desc_tx->callback = NULL; 673 desc_tx->callback = NULL;
@@ -688,15 +678,30 @@ static int sh_msiof_dma_once(struct sh_msiof_spi_priv *p, const void *tx,
688 cookie = dmaengine_submit(desc_tx); 678 cookie = dmaengine_submit(desc_tx);
689 if (dma_submit_error(cookie)) { 679 if (dma_submit_error(cookie)) {
690 ret = cookie; 680 ret = cookie;
691 goto stop_rx; 681 goto no_dma_tx;
692 } 682 }
693 dma_async_issue_pending(p->master->dma_tx);
694 } 683 }
695 684
685 /* 1 stage FIFO watermarks for DMA */
686 sh_msiof_write(p, FCTR, FCTR_TFWM_1 | FCTR_RFWM_1);
687
688 /* setup msiof transfer mode registers (32-bit words) */
689 sh_msiof_spi_set_mode_regs(p, tx, rx, 32, len / 4);
690
691 sh_msiof_write(p, IER, ier_bits);
692
693 reinit_completion(&p->done);
694
695 /* Now start DMA */
696 if (rx)
697 dma_async_issue_pending(p->master->dma_rx);
698 if (tx)
699 dma_async_issue_pending(p->master->dma_tx);
700
696 ret = sh_msiof_spi_start(p, rx); 701 ret = sh_msiof_spi_start(p, rx);
697 if (ret) { 702 if (ret) {
698 dev_err(&p->pdev->dev, "failed to start hardware\n"); 703 dev_err(&p->pdev->dev, "failed to start hardware\n");
699 goto stop_tx; 704 goto stop_dma;
700 } 705 }
701 706
702 /* wait for tx fifo to be emptied / rx fifo to be filled */ 707 /* wait for tx fifo to be emptied / rx fifo to be filled */
@@ -726,14 +731,14 @@ static int sh_msiof_dma_once(struct sh_msiof_spi_priv *p, const void *tx,
726stop_reset: 731stop_reset:
727 sh_msiof_reset_str(p); 732 sh_msiof_reset_str(p);
728 sh_msiof_spi_stop(p, rx); 733 sh_msiof_spi_stop(p, rx);
729stop_tx: 734stop_dma:
730 if (tx) 735 if (tx)
731 dmaengine_terminate_all(p->master->dma_tx); 736 dmaengine_terminate_all(p->master->dma_tx);
732stop_rx: 737no_dma_tx:
733 if (rx) 738 if (rx)
734 dmaengine_terminate_all(p->master->dma_rx); 739 dmaengine_terminate_all(p->master->dma_rx);
735stop_ier:
736 sh_msiof_write(p, IER, 0); 740 sh_msiof_write(p, IER, 0);
741no_dma_rx:
737 return ret; 742 return ret;
738} 743}
739 744
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index e0531baf2782..ca935df80c88 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -848,6 +848,7 @@ out:
848 848
849/** 849/**
850 * spi_finalize_current_transfer - report completion of a transfer 850 * spi_finalize_current_transfer - report completion of a transfer
851 * @master: the master reporting completion
851 * 852 *
852 * Called by SPI drivers using the core transfer_one_message() 853 * Called by SPI drivers using the core transfer_one_message()
853 * implementation to notify it that the current interrupt driven 854 * implementation to notify it that the current interrupt driven
diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
index 2c486ea6236b..35b494f5667f 100644
--- a/drivers/staging/Kconfig
+++ b/drivers/staging/Kconfig
@@ -28,8 +28,6 @@ source "drivers/staging/et131x/Kconfig"
28 28
29source "drivers/staging/slicoss/Kconfig" 29source "drivers/staging/slicoss/Kconfig"
30 30
31source "drivers/staging/usbip/Kconfig"
32
33source "drivers/staging/wlan-ng/Kconfig" 31source "drivers/staging/wlan-ng/Kconfig"
34 32
35source "drivers/staging/comedi/Kconfig" 33source "drivers/staging/comedi/Kconfig"
diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
index 1e1a3a10faf7..e66a5dbd9b02 100644
--- a/drivers/staging/Makefile
+++ b/drivers/staging/Makefile
@@ -6,7 +6,6 @@ obj-$(CONFIG_STAGING) += staging.o
6obj-y += media/ 6obj-y += media/
7obj-$(CONFIG_ET131X) += et131x/ 7obj-$(CONFIG_ET131X) += et131x/
8obj-$(CONFIG_SLICOSS) += slicoss/ 8obj-$(CONFIG_SLICOSS) += slicoss/
9obj-$(CONFIG_USBIP_CORE) += usbip/
10obj-$(CONFIG_PRISM2_USB) += wlan-ng/ 9obj-$(CONFIG_PRISM2_USB) += wlan-ng/
11obj-$(CONFIG_COMEDI) += comedi/ 10obj-$(CONFIG_COMEDI) += comedi/
12obj-$(CONFIG_FB_OLPC_DCON) += olpc_dcon/ 11obj-$(CONFIG_FB_OLPC_DCON) += olpc_dcon/
diff --git a/drivers/staging/android/logger.c b/drivers/staging/android/logger.c
index 9b47e66599a3..0bf0d24d12d5 100644
--- a/drivers/staging/android/logger.c
+++ b/drivers/staging/android/logger.c
@@ -790,7 +790,7 @@ static int __init create_log(char *log_name, int size)
790 if (unlikely(ret)) { 790 if (unlikely(ret)) {
791 pr_err("failed to register misc device for log '%s'!\n", 791 pr_err("failed to register misc device for log '%s'!\n",
792 log->misc.name); 792 log->misc.name);
793 goto out_free_log; 793 goto out_free_misc_name;
794 } 794 }
795 795
796 pr_info("created %luK log '%s'\n", 796 pr_info("created %luK log '%s'\n",
@@ -798,6 +798,9 @@ static int __init create_log(char *log_name, int size)
798 798
799 return 0; 799 return 0;
800 800
801out_free_misc_name:
802 kfree(log->misc.name);
803
801out_free_log: 804out_free_log:
802 kfree(log); 805 kfree(log);
803 806
diff --git a/drivers/staging/et131x/et131x.c b/drivers/staging/et131x/et131x.c
index 8bf1eb485163..831b7c6fe494 100644
--- a/drivers/staging/et131x/et131x.c
+++ b/drivers/staging/et131x/et131x.c
@@ -1421,22 +1421,16 @@ static int et131x_mii_read(struct et131x_adapter *adapter, u8 reg, u16 *value)
1421 * @reg: the register to read 1421 * @reg: the register to read
1422 * @value: 16-bit value to write 1422 * @value: 16-bit value to write
1423 */ 1423 */
1424static int et131x_mii_write(struct et131x_adapter *adapter, u8 reg, u16 value) 1424static int et131x_mii_write(struct et131x_adapter *adapter, u8 addr, u8 reg,
1425 u16 value)
1425{ 1426{
1426 struct mac_regs __iomem *mac = &adapter->regs->mac; 1427 struct mac_regs __iomem *mac = &adapter->regs->mac;
1427 struct phy_device *phydev = adapter->phydev;
1428 int status = 0; 1428 int status = 0;
1429 u8 addr;
1430 u32 delay = 0; 1429 u32 delay = 0;
1431 u32 mii_addr; 1430 u32 mii_addr;
1432 u32 mii_cmd; 1431 u32 mii_cmd;
1433 u32 mii_indicator; 1432 u32 mii_indicator;
1434 1433
1435 if (!phydev)
1436 return -EIO;
1437
1438 addr = phydev->addr;
1439
1440 /* Save a local copy of the registers we are dealing with so we can 1434 /* Save a local copy of the registers we are dealing with so we can
1441 * set them back 1435 * set them back
1442 */ 1436 */
@@ -1631,17 +1625,7 @@ static int et131x_mdio_write(struct mii_bus *bus, int phy_addr,
1631 struct net_device *netdev = bus->priv; 1625 struct net_device *netdev = bus->priv;
1632 struct et131x_adapter *adapter = netdev_priv(netdev); 1626 struct et131x_adapter *adapter = netdev_priv(netdev);
1633 1627
1634 return et131x_mii_write(adapter, reg, value); 1628 return et131x_mii_write(adapter, phy_addr, reg, value);
1635}
1636
1637static int et131x_mdio_reset(struct mii_bus *bus)
1638{
1639 struct net_device *netdev = bus->priv;
1640 struct et131x_adapter *adapter = netdev_priv(netdev);
1641
1642 et131x_mii_write(adapter, MII_BMCR, BMCR_RESET);
1643
1644 return 0;
1645} 1629}
1646 1630
1647/* et1310_phy_power_switch - PHY power control 1631/* et1310_phy_power_switch - PHY power control
@@ -1656,18 +1640,20 @@ static int et131x_mdio_reset(struct mii_bus *bus)
1656static void et1310_phy_power_switch(struct et131x_adapter *adapter, bool down) 1640static void et1310_phy_power_switch(struct et131x_adapter *adapter, bool down)
1657{ 1641{
1658 u16 data; 1642 u16 data;
1643 struct phy_device *phydev = adapter->phydev;
1659 1644
1660 et131x_mii_read(adapter, MII_BMCR, &data); 1645 et131x_mii_read(adapter, MII_BMCR, &data);
1661 data &= ~BMCR_PDOWN; 1646 data &= ~BMCR_PDOWN;
1662 if (down) 1647 if (down)
1663 data |= BMCR_PDOWN; 1648 data |= BMCR_PDOWN;
1664 et131x_mii_write(adapter, MII_BMCR, data); 1649 et131x_mii_write(adapter, phydev->addr, MII_BMCR, data);
1665} 1650}
1666 1651
1667/* et131x_xcvr_init - Init the phy if we are setting it into force mode */ 1652/* et131x_xcvr_init - Init the phy if we are setting it into force mode */
1668static void et131x_xcvr_init(struct et131x_adapter *adapter) 1653static void et131x_xcvr_init(struct et131x_adapter *adapter)
1669{ 1654{
1670 u16 lcr2; 1655 u16 lcr2;
1656 struct phy_device *phydev = adapter->phydev;
1671 1657
1672 /* Set the LED behavior such that LED 1 indicates speed (off = 1658 /* Set the LED behavior such that LED 1 indicates speed (off =
1673 * 10Mbits, blink = 100Mbits, on = 1000Mbits) and LED 2 indicates 1659 * 10Mbits, blink = 100Mbits, on = 1000Mbits) and LED 2 indicates
@@ -1688,7 +1674,7 @@ static void et131x_xcvr_init(struct et131x_adapter *adapter)
1688 else 1674 else
1689 lcr2 |= (LED_VAL_LINKON << LED_TXRX_SHIFT); 1675 lcr2 |= (LED_VAL_LINKON << LED_TXRX_SHIFT);
1690 1676
1691 et131x_mii_write(adapter, PHY_LED_2, lcr2); 1677 et131x_mii_write(adapter, phydev->addr, PHY_LED_2, lcr2);
1692 } 1678 }
1693} 1679}
1694 1680
@@ -3643,14 +3629,14 @@ static void et131x_adjust_link(struct net_device *netdev)
3643 3629
3644 et131x_mii_read(adapter, PHY_MPHY_CONTROL_REG, 3630 et131x_mii_read(adapter, PHY_MPHY_CONTROL_REG,
3645 &register18); 3631 &register18);
3646 et131x_mii_write(adapter, PHY_MPHY_CONTROL_REG, 3632 et131x_mii_write(adapter, phydev->addr,
3647 register18 | 0x4); 3633 PHY_MPHY_CONTROL_REG, register18 | 0x4);
3648 et131x_mii_write(adapter, PHY_INDEX_REG, 3634 et131x_mii_write(adapter, phydev->addr, PHY_INDEX_REG,
3649 register18 | 0x8402); 3635 register18 | 0x8402);
3650 et131x_mii_write(adapter, PHY_DATA_REG, 3636 et131x_mii_write(adapter, phydev->addr, PHY_DATA_REG,
3651 register18 | 511); 3637 register18 | 511);
3652 et131x_mii_write(adapter, PHY_MPHY_CONTROL_REG, 3638 et131x_mii_write(adapter, phydev->addr,
3653 register18); 3639 PHY_MPHY_CONTROL_REG, register18);
3654 } 3640 }
3655 3641
3656 et1310_config_flow_control(adapter); 3642 et1310_config_flow_control(adapter);
@@ -3662,7 +3648,8 @@ static void et131x_adjust_link(struct net_device *netdev)
3662 et131x_mii_read(adapter, PHY_CONFIG, &reg); 3648 et131x_mii_read(adapter, PHY_CONFIG, &reg);
3663 reg &= ~ET_PHY_CONFIG_TX_FIFO_DEPTH; 3649 reg &= ~ET_PHY_CONFIG_TX_FIFO_DEPTH;
3664 reg |= ET_PHY_CONFIG_FIFO_DEPTH_32; 3650 reg |= ET_PHY_CONFIG_FIFO_DEPTH_32;
3665 et131x_mii_write(adapter, PHY_CONFIG, reg); 3651 et131x_mii_write(adapter, phydev->addr, PHY_CONFIG,
3652 reg);
3666 } 3653 }
3667 3654
3668 et131x_set_rx_dma_timer(adapter); 3655 et131x_set_rx_dma_timer(adapter);
@@ -3675,14 +3662,14 @@ static void et131x_adjust_link(struct net_device *netdev)
3675 3662
3676 et131x_mii_read(adapter, PHY_MPHY_CONTROL_REG, 3663 et131x_mii_read(adapter, PHY_MPHY_CONTROL_REG,
3677 &register18); 3664 &register18);
3678 et131x_mii_write(adapter, PHY_MPHY_CONTROL_REG, 3665 et131x_mii_write(adapter, phydev->addr,
3679 register18 | 0x4); 3666 PHY_MPHY_CONTROL_REG, register18 | 0x4);
3680 et131x_mii_write(adapter, PHY_INDEX_REG, 3667 et131x_mii_write(adapter, phydev->addr,
3681 register18 | 0x8402); 3668 PHY_INDEX_REG, register18 | 0x8402);
3682 et131x_mii_write(adapter, PHY_DATA_REG, 3669 et131x_mii_write(adapter, phydev->addr,
3683 register18 | 511); 3670 PHY_DATA_REG, register18 | 511);
3684 et131x_mii_write(adapter, PHY_MPHY_CONTROL_REG, 3671 et131x_mii_write(adapter, phydev->addr,
3685 register18); 3672 PHY_MPHY_CONTROL_REG, register18);
3686 } 3673 }
3687 3674
3688 /* Free the packets being actively sent & stopped */ 3675 /* Free the packets being actively sent & stopped */
@@ -4644,10 +4631,6 @@ static int et131x_pci_setup(struct pci_dev *pdev,
4644 /* Copy address into the net_device struct */ 4631 /* Copy address into the net_device struct */
4645 memcpy(netdev->dev_addr, adapter->addr, ETH_ALEN); 4632 memcpy(netdev->dev_addr, adapter->addr, ETH_ALEN);
4646 4633
4647 /* Init variable for counting how long we do not have link status */
4648 adapter->boot_coma = 0;
4649 et1310_disable_phy_coma(adapter);
4650
4651 rc = -ENOMEM; 4634 rc = -ENOMEM;
4652 4635
4653 /* Setup the mii_bus struct */ 4636 /* Setup the mii_bus struct */
@@ -4663,7 +4646,6 @@ static int et131x_pci_setup(struct pci_dev *pdev,
4663 adapter->mii_bus->priv = netdev; 4646 adapter->mii_bus->priv = netdev;
4664 adapter->mii_bus->read = et131x_mdio_read; 4647 adapter->mii_bus->read = et131x_mdio_read;
4665 adapter->mii_bus->write = et131x_mdio_write; 4648 adapter->mii_bus->write = et131x_mdio_write;
4666 adapter->mii_bus->reset = et131x_mdio_reset;
4667 adapter->mii_bus->irq = kmalloc_array(PHY_MAX_ADDR, sizeof(int), 4649 adapter->mii_bus->irq = kmalloc_array(PHY_MAX_ADDR, sizeof(int),
4668 GFP_KERNEL); 4650 GFP_KERNEL);
4669 if (!adapter->mii_bus->irq) 4651 if (!adapter->mii_bus->irq)
@@ -4687,6 +4669,10 @@ static int et131x_pci_setup(struct pci_dev *pdev,
4687 /* Setup et1310 as per the documentation */ 4669 /* Setup et1310 as per the documentation */
4688 et131x_adapter_setup(adapter); 4670 et131x_adapter_setup(adapter);
4689 4671
4672 /* Init variable for counting how long we do not have link status */
4673 adapter->boot_coma = 0;
4674 et1310_disable_phy_coma(adapter);
4675
4690 /* We can enable interrupts now 4676 /* We can enable interrupts now
4691 * 4677 *
4692 * NOTE - Because registration of interrupt handler is done in the 4678 * NOTE - Because registration of interrupt handler is done in the
diff --git a/drivers/staging/lustre/lustre/libcfs/workitem.c b/drivers/staging/lustre/lustre/libcfs/workitem.c
index 65629579bd7d..03ab9e046784 100644
--- a/drivers/staging/lustre/lustre/libcfs/workitem.c
+++ b/drivers/staging/lustre/lustre/libcfs/workitem.c
@@ -365,6 +365,7 @@ cfs_wi_sched_create(char *name, struct cfs_cpt_table *cptab,
365 return -ENOMEM; 365 return -ENOMEM;
366 366
367 strncpy(sched->ws_name, name, CFS_WS_NAME_LEN); 367 strncpy(sched->ws_name, name, CFS_WS_NAME_LEN);
368 sched->ws_name[CFS_WS_NAME_LEN - 1] = '\0';
368 sched->ws_cptab = cptab; 369 sched->ws_cptab = cptab;
369 sched->ws_cpt = cpt; 370 sched->ws_cpt = cpt;
370 371
diff --git a/drivers/staging/lustre/lustre/obdclass/class_obd.c b/drivers/staging/lustre/lustre/obdclass/class_obd.c
index 8b19f3caa68f..701c6a776524 100644
--- a/drivers/staging/lustre/lustre/obdclass/class_obd.c
+++ b/drivers/staging/lustre/lustre/obdclass/class_obd.c
@@ -35,7 +35,7 @@
35 */ 35 */
36 36
37#define DEBUG_SUBSYSTEM S_CLASS 37#define DEBUG_SUBSYSTEM S_CLASS
38# include <asm/atomic.h> 38# include <linux/atomic.h>
39 39
40#include "../include/obd_support.h" 40#include "../include/obd_support.h"
41#include "../include/obd_class.h" 41#include "../include/obd_class.h"
diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c
index b8676ac77b0c..407a318b09db 100644
--- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c
+++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c
@@ -43,9 +43,11 @@ static struct usb_device_id rtw_usb_id_tbl[] = {
43 {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0179)}, /* 8188ETV */ 43 {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0179)}, /* 8188ETV */
44 /*=== Customer ID ===*/ 44 /*=== Customer ID ===*/
45 /****** 8188EUS ********/ 45 /****** 8188EUS ********/
46 {USB_DEVICE(0x056e, 0x4008)}, /* Elecom WDC-150SU2M */
46 {USB_DEVICE(0x07b8, 0x8179)}, /* Abocom - Abocom */ 47 {USB_DEVICE(0x07b8, 0x8179)}, /* Abocom - Abocom */
47 {USB_DEVICE(0x2001, 0x330F)}, /* DLink DWA-125 REV D1 */ 48 {USB_DEVICE(0x2001, 0x330F)}, /* DLink DWA-125 REV D1 */
48 {USB_DEVICE(0x2001, 0x3310)}, /* Dlink DWA-123 REV D1 */ 49 {USB_DEVICE(0x2001, 0x3310)}, /* Dlink DWA-123 REV D1 */
50 {USB_DEVICE(0x0df6, 0x0076)}, /* Sitecom N150 v2 */
49 {} /* Terminating entry */ 51 {} /* Terminating entry */
50}; 52};
51 53
diff --git a/drivers/staging/usbip/uapi/usbip.h b/drivers/staging/usbip/uapi/usbip.h
deleted file mode 100644
index fa5db30ede36..000000000000
--- a/drivers/staging/usbip/uapi/usbip.h
+++ /dev/null
@@ -1,26 +0,0 @@
1/*
2 * usbip.h
3 *
4 * USBIP uapi defines and function prototypes etc.
5*/
6
7#ifndef _UAPI_LINUX_USBIP_H
8#define _UAPI_LINUX_USBIP_H
9
10/* usbip device status - exported in usbip device sysfs status */
11enum usbip_device_status {
12 /* sdev is available. */
13 SDEV_ST_AVAILABLE = 0x01,
14 /* sdev is now used. */
15 SDEV_ST_USED,
16 /* sdev is unusable because of a fatal error. */
17 SDEV_ST_ERROR,
18
19 /* vdev does not connect a remote device. */
20 VDEV_ST_NULL,
21 /* vdev is used, but the USB address is not assigned yet */
22 VDEV_ST_NOTASSIGNED,
23 VDEV_ST_USED,
24 VDEV_ST_ERROR
25};
26#endif /* _UAPI_LINUX_USBIP_H */
diff --git a/drivers/staging/usbip/userspace/.gitignore b/drivers/staging/usbip/userspace/.gitignore
deleted file mode 100644
index 9aad9e30a8ba..000000000000
--- a/drivers/staging/usbip/userspace/.gitignore
+++ /dev/null
@@ -1,28 +0,0 @@
1Makefile
2Makefile.in
3aclocal.m4
4autom4te.cache/
5config.guess
6config.h
7config.h.in
8config.log
9config.status
10config.sub
11configure
12depcomp
13install-sh
14libsrc/Makefile
15libsrc/Makefile.in
16libtool
17ltmain.sh
18missing
19src/Makefile
20src/Makefile.in
21stamp-h1
22libsrc/libusbip.la
23libsrc/libusbip_la-names.lo
24libsrc/libusbip_la-usbip_common.lo
25libsrc/libusbip_la-usbip_host_driver.lo
26libsrc/libusbip_la-vhci_driver.lo
27src/usbip
28src/usbipd
diff --git a/drivers/staging/usbip/userspace/AUTHORS b/drivers/staging/usbip/userspace/AUTHORS
deleted file mode 100644
index a27ea8d03aec..000000000000
--- a/drivers/staging/usbip/userspace/AUTHORS
+++ /dev/null
@@ -1,3 +0,0 @@
1Takahiro Hirofuchi
2Robert Leibl
3matt mooney <mfm@muteddisk.com>
diff --git a/drivers/staging/usbip/userspace/COPYING b/drivers/staging/usbip/userspace/COPYING
deleted file mode 100644
index c5611e48a8e1..000000000000
--- a/drivers/staging/usbip/userspace/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
1 GNU GENERAL PUBLIC LICENSE
2 Version 2, June 1991
3
4 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
5 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6 Everyone is permitted to copy and distribute verbatim copies
7 of this license document, but changing it is not allowed.
8
9 Preamble
10
11 The licenses for most software are designed to take away your
12freedom to share and change it. By contrast, the GNU General Public
13License is intended to guarantee your freedom to share and change free
14software--to make sure the software is free for all its users. This
15General Public License applies to most of the Free Software
16Foundation's software and to any other program whose authors commit to
17using it. (Some other Free Software Foundation software is covered by
18the GNU Library General Public License instead.) You can apply it to
19your programs, too.
20
21 When we speak of free software, we are referring to freedom, not
22price. Our General Public Licenses are designed to make sure that you
23have the freedom to distribute copies of free software (and charge for
24this service if you wish), that you receive source code or can get it
25if you want it, that you can change the software or use pieces of it
26in new free programs; and that you know you can do these things.
27
28 To protect your rights, we need to make restrictions that forbid
29anyone to deny you these rights or to ask you to surrender the rights.
30These restrictions translate to certain responsibilities for you if you
31distribute copies of the software, or if you modify it.
32
33 For example, if you distribute copies of such a program, whether
34gratis or for a fee, you must give the recipients all the rights that
35you have. You must make sure that they, too, receive or can get the
36source code. And you must show them these terms so they know their
37rights.
38
39 We protect your rights with two steps: (1) copyright the software, and
40(2) offer you this license which gives you legal permission to copy,
41distribute and/or modify the software.
42
43 Also, for each author's protection and ours, we want to make certain
44that everyone understands that there is no warranty for this free
45software. If the software is modified by someone else and passed on, we
46want its recipients to know that what they have is not the original, so
47that any problems introduced by others will not reflect on the original
48authors' reputations.
49
50 Finally, any free program is threatened constantly by software
51patents. We wish to avoid the danger that redistributors of a free
52program will individually obtain patent licenses, in effect making the
53program proprietary. To prevent this, we have made it clear that any
54patent must be licensed for everyone's free use or not licensed at all.
55
56 The precise terms and conditions for copying, distribution and
57modification follow.
58
59 GNU GENERAL PUBLIC LICENSE
60 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
62 0. This License applies to any program or other work which contains
63a notice placed by the copyright holder saying it may be distributed
64under the terms of this General Public License. The "Program", below,
65refers to any such program or work, and a "work based on the Program"
66means either the Program or any derivative work under copyright law:
67that is to say, a work containing the Program or a portion of it,
68either verbatim or with modifications and/or translated into another
69language. (Hereinafter, translation is included without limitation in
70the term "modification".) Each licensee is addressed as "you".
71
72Activities other than copying, distribution and modification are not
73covered by this License; they are outside its scope. The act of
74running the Program is not restricted, and the output from the Program
75is covered only if its contents constitute a work based on the
76Program (independent of having been made by running the Program).
77Whether that is true depends on what the Program does.
78
79 1. You may copy and distribute verbatim copies of the Program's
80source code as you receive it, in any medium, provided that you
81conspicuously and appropriately publish on each copy an appropriate
82copyright notice and disclaimer of warranty; keep intact all the
83notices that refer to this License and to the absence of any warranty;
84and give any other recipients of the Program a copy of this License
85along with the Program.
86
87You may charge a fee for the physical act of transferring a copy, and
88you may at your option offer warranty protection in exchange for a fee.
89
90 2. You may modify your copy or copies of the Program or any portion
91of it, thus forming a work based on the Program, and copy and
92distribute such modifications or work under the terms of Section 1
93above, provided that you also meet all of these conditions:
94
95 a) You must cause the modified files to carry prominent notices
96 stating that you changed the files and the date of any change.
97
98 b) You must cause any work that you distribute or publish, that in
99 whole or in part contains or is derived from the Program or any
100 part thereof, to be licensed as a whole at no charge to all third
101 parties under the terms of this License.
102
103 c) If the modified program normally reads commands interactively
104 when run, you must cause it, when started running for such
105 interactive use in the most ordinary way, to print or display an
106 announcement including an appropriate copyright notice and a
107 notice that there is no warranty (or else, saying that you provide
108 a warranty) and that users may redistribute the program under
109 these conditions, and telling the user how to view a copy of this
110 License. (Exception: if the Program itself is interactive but
111 does not normally print such an announcement, your work based on
112 the Program is not required to print an announcement.)
113
114These requirements apply to the modified work as a whole. If
115identifiable sections of that work are not derived from the Program,
116and can be reasonably considered independent and separate works in
117themselves, then this License, and its terms, do not apply to those
118sections when you distribute them as separate works. But when you
119distribute the same sections as part of a whole which is a work based
120on the Program, the distribution of the whole must be on the terms of
121this License, whose permissions for other licensees extend to the
122entire whole, and thus to each and every part regardless of who wrote it.
123
124Thus, it is not the intent of this section to claim rights or contest
125your rights to work written entirely by you; rather, the intent is to
126exercise the right to control the distribution of derivative or
127collective works based on the Program.
128
129In addition, mere aggregation of another work not based on the Program
130with the Program (or with a work based on the Program) on a volume of
131a storage or distribution medium does not bring the other work under
132the scope of this License.
133
134 3. You may copy and distribute the Program (or a work based on it,
135under Section 2) in object code or executable form under the terms of
136Sections 1 and 2 above provided that you also do one of the following:
137
138 a) Accompany it with the complete corresponding machine-readable
139 source code, which must be distributed under the terms of Sections
140 1 and 2 above on a medium customarily used for software interchange; or,
141
142 b) Accompany it with a written offer, valid for at least three
143 years, to give any third party, for a charge no more than your
144 cost of physically performing source distribution, a complete
145 machine-readable copy of the corresponding source code, to be
146 distributed under the terms of Sections 1 and 2 above on a medium
147 customarily used for software interchange; or,
148
149 c) Accompany it with the information you received as to the offer
150 to distribute corresponding source code. (This alternative is
151 allowed only for noncommercial distribution and only if you
152 received the program in object code or executable form with such
153 an offer, in accord with Subsection b above.)
154
155The source code for a work means the preferred form of the work for
156making modifications to it. For an executable work, complete source
157code means all the source code for all modules it contains, plus any
158associated interface definition files, plus the scripts used to
159control compilation and installation of the executable. However, as a
160special exception, the source code distributed need not include
161anything that is normally distributed (in either source or binary
162form) with the major components (compiler, kernel, and so on) of the
163operating system on which the executable runs, unless that component
164itself accompanies the executable.
165
166If distribution of executable or object code is made by offering
167access to copy from a designated place, then offering equivalent
168access to copy the source code from the same place counts as
169distribution of the source code, even though third parties are not
170compelled to copy the source along with the object code.
171
172 4. You may not copy, modify, sublicense, or distribute the Program
173except as expressly provided under this License. Any attempt
174otherwise to copy, modify, sublicense or distribute the Program is
175void, and will automatically terminate your rights under this License.
176However, parties who have received copies, or rights, from you under
177this License will not have their licenses terminated so long as such
178parties remain in full compliance.
179
180 5. You are not required to accept this License, since you have not
181signed it. However, nothing else grants you permission to modify or
182distribute the Program or its derivative works. These actions are
183prohibited by law if you do not accept this License. Therefore, by
184modifying or distributing the Program (or any work based on the
185Program), you indicate your acceptance of this License to do so, and
186all its terms and conditions for copying, distributing or modifying
187the Program or works based on it.
188
189 6. Each time you redistribute the Program (or any work based on the
190Program), the recipient automatically receives a license from the
191original licensor to copy, distribute or modify the Program subject to
192these terms and conditions. You may not impose any further
193restrictions on the recipients' exercise of the rights granted herein.
194You are not responsible for enforcing compliance by third parties to
195this License.
196
197 7. If, as a consequence of a court judgment or allegation of patent
198infringement or for any other reason (not limited to patent issues),
199conditions are imposed on you (whether by court order, agreement or
200otherwise) that contradict the conditions of this License, they do not
201excuse you from the conditions of this License. If you cannot
202distribute so as to satisfy simultaneously your obligations under this
203License and any other pertinent obligations, then as a consequence you
204may not distribute the Program at all. For example, if a patent
205license would not permit royalty-free redistribution of the Program by
206all those who receive copies directly or indirectly through you, then
207the only way you could satisfy both it and this License would be to
208refrain entirely from distribution of the Program.
209
210If any portion of this section is held invalid or unenforceable under
211any particular circumstance, the balance of the section is intended to
212apply and the section as a whole is intended to apply in other
213circumstances.
214
215It is not the purpose of this section to induce you to infringe any
216patents or other property right claims or to contest validity of any
217such claims; this section has the sole purpose of protecting the
218integrity of the free software distribution system, which is
219implemented by public license practices. Many people have made
220generous contributions to the wide range of software distributed
221through that system in reliance on consistent application of that
222system; it is up to the author/donor to decide if he or she is willing
223to distribute software through any other system and a licensee cannot
224impose that choice.
225
226This section is intended to make thoroughly clear what is believed to
227be a consequence of the rest of this License.
228
229 8. If the distribution and/or use of the Program is restricted in
230certain countries either by patents or by copyrighted interfaces, the
231original copyright holder who places the Program under this License
232may add an explicit geographical distribution limitation excluding
233those countries, so that distribution is permitted only in or among
234countries not thus excluded. In such case, this License incorporates
235the limitation as if written in the body of this License.
236
237 9. The Free Software Foundation may publish revised and/or new versions
238of the General Public License from time to time. Such new versions will
239be similar in spirit to the present version, but may differ in detail to
240address new problems or concerns.
241
242Each version is given a distinguishing version number. If the Program
243specifies a version number of this License which applies to it and "any
244later version", you have the option of following the terms and conditions
245either of that version or of any later version published by the Free
246Software Foundation. If the Program does not specify a version number of
247this License, you may choose any version ever published by the Free Software
248Foundation.
249
250 10. If you wish to incorporate parts of the Program into other free
251programs whose distribution conditions are different, write to the author
252to ask for permission. For software which is copyrighted by the Free
253Software Foundation, write to the Free Software Foundation; we sometimes
254make exceptions for this. Our decision will be guided by the two goals
255of preserving the free status of all derivatives of our free software and
256of promoting the sharing and reuse of software generally.
257
258 NO WARRANTY
259
260 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268REPAIR OR CORRECTION.
269
270 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278POSSIBILITY OF SUCH DAMAGES.
279
280 END OF TERMS AND CONDITIONS
281
282 How to Apply These Terms to Your New Programs
283
284 If you develop a new program, and you want it to be of the greatest
285possible use to the public, the best way to achieve this is to make it
286free software which everyone can redistribute and change under these terms.
287
288 To do so, attach the following notices to the program. It is safest
289to attach them to the start of each source file to most effectively
290convey the exclusion of warranty; and each file should have at least
291the "copyright" line and a pointer to where the full notice is found.
292
293 <one line to give the program's name and a brief idea of what it does.>
294 Copyright (C) <year> <name of author>
295
296 This program is free software; you can redistribute it and/or modify
297 it under the terms of the GNU General Public License as published by
298 the Free Software Foundation; either version 2 of the License, or
299 (at your option) any later version.
300
301 This program is distributed in the hope that it will be useful,
302 but WITHOUT ANY WARRANTY; without even the implied warranty of
303 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304 GNU General Public License for more details.
305
306 You should have received a copy of the GNU General Public License
307 along with this program; if not, write to the Free Software
308 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
309
310
311Also add information on how to contact you by electronic and paper mail.
312
313If the program is interactive, make it output a short notice like this
314when it starts in an interactive mode:
315
316 Gnomovision version 69, Copyright (C) year name of author
317 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
318 This is free software, and you are welcome to redistribute it
319 under certain conditions; type `show c' for details.
320
321The hypothetical commands `show w' and `show c' should show the appropriate
322parts of the General Public License. Of course, the commands you use may
323be called something other than `show w' and `show c'; they could even be
324mouse-clicks or menu items--whatever suits your program.
325
326You should also get your employer (if you work as a programmer) or your
327school, if any, to sign a "copyright disclaimer" for the program, if
328necessary. Here is a sample; alter the names:
329
330 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
331 `Gnomovision' (which makes passes at compilers) written by James Hacker.
332
333 <signature of Ty Coon>, 1 April 1989
334 Ty Coon, President of Vice
335
336This General Public License does not permit incorporating your program into
337proprietary programs. If your program is a subroutine library, you may
338consider it more useful to permit linking proprietary applications with the
339library. If this is what you want to do, use the GNU Library General
340Public License instead of this License.
diff --git a/drivers/staging/usbip/userspace/INSTALL b/drivers/staging/usbip/userspace/INSTALL
deleted file mode 100644
index d3c5b40a9409..000000000000
--- a/drivers/staging/usbip/userspace/INSTALL
+++ /dev/null
@@ -1,237 +0,0 @@
1Installation Instructions
2*************************
3
4Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
52006, 2007 Free Software Foundation, Inc.
6
7This file is free documentation; the Free Software Foundation gives
8unlimited permission to copy, distribute and modify it.
9
10Basic Installation
11==================
12
13Briefly, the shell commands `./configure; make; make install' should
14configure, build, and install this package. The following
15more-detailed instructions are generic; see the `README' file for
16instructions specific to this package.
17
18 The `configure' shell script attempts to guess correct values for
19various system-dependent variables used during compilation. It uses
20those values to create a `Makefile' in each directory of the package.
21It may also create one or more `.h' files containing system-dependent
22definitions. Finally, it creates a shell script `config.status' that
23you can run in the future to recreate the current configuration, and a
24file `config.log' containing compiler output (useful mainly for
25debugging `configure').
26
27 It can also use an optional file (typically called `config.cache'
28and enabled with `--cache-file=config.cache' or simply `-C') that saves
29the results of its tests to speed up reconfiguring. Caching is
30disabled by default to prevent problems with accidental use of stale
31cache files.
32
33 If you need to do unusual things to compile the package, please try
34to figure out how `configure' could check whether to do them, and mail
35diffs or instructions to the address given in the `README' so they can
36be considered for the next release. If you are using the cache, and at
37some point `config.cache' contains results you don't want to keep, you
38may remove or edit it.
39
40 The file `configure.ac' (or `configure.in') is used to create
41`configure' by a program called `autoconf'. You need `configure.ac' if
42you want to change it or regenerate `configure' using a newer version
43of `autoconf'.
44
45The simplest way to compile this package is:
46
47 1. `cd' to the directory containing the package's source code and type
48 `./configure' to configure the package for your system.
49
50 Running `configure' might take a while. While running, it prints
51 some messages telling which features it is checking for.
52
53 2. Type `make' to compile the package.
54
55 3. Optionally, type `make check' to run any self-tests that come with
56 the package.
57
58 4. Type `make install' to install the programs and any data files and
59 documentation.
60
61 5. You can remove the program binaries and object files from the
62 source code directory by typing `make clean'. To also remove the
63 files that `configure' created (so you can compile the package for
64 a different kind of computer), type `make distclean'. There is
65 also a `make maintainer-clean' target, but that is intended mainly
66 for the package's developers. If you use it, you may have to get
67 all sorts of other programs in order to regenerate files that came
68 with the distribution.
69
70 6. Often, you can also type `make uninstall' to remove the installed
71 files again.
72
73Compilers and Options
74=====================
75
76Some systems require unusual options for compilation or linking that the
77`configure' script does not know about. Run `./configure --help' for
78details on some of the pertinent environment variables.
79
80 You can give `configure' initial values for configuration parameters
81by setting variables in the command line or in the environment. Here
82is an example:
83
84 ./configure CC=c99 CFLAGS=-g LIBS=-lposix
85
86 *Note Defining Variables::, for more details.
87
88Compiling For Multiple Architectures
89====================================
90
91You can compile the package for more than one kind of computer at the
92same time, by placing the object files for each architecture in their
93own directory. To do this, you can use GNU `make'. `cd' to the
94directory where you want the object files and executables to go and run
95the `configure' script. `configure' automatically checks for the
96source code in the directory that `configure' is in and in `..'.
97
98 With a non-GNU `make', it is safer to compile the package for one
99architecture at a time in the source code directory. After you have
100installed the package for one architecture, use `make distclean' before
101reconfiguring for another architecture.
102
103Installation Names
104==================
105
106By default, `make install' installs the package's commands under
107`/usr/local/bin', include files under `/usr/local/include', etc. You
108can specify an installation prefix other than `/usr/local' by giving
109`configure' the option `--prefix=PREFIX'.
110
111 You can specify separate installation prefixes for
112architecture-specific files and architecture-independent files. If you
113pass the option `--exec-prefix=PREFIX' to `configure', the package uses
114PREFIX as the prefix for installing programs and libraries.
115Documentation and other data files still use the regular prefix.
116
117 In addition, if you use an unusual directory layout you can give
118options like `--bindir=DIR' to specify different values for particular
119kinds of files. Run `configure --help' for a list of the directories
120you can set and what kinds of files go in them.
121
122 If the package supports it, you can cause programs to be installed
123with an extra prefix or suffix on their names by giving `configure' the
124option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
125
126Optional Features
127=================
128
129Some packages pay attention to `--enable-FEATURE' options to
130`configure', where FEATURE indicates an optional part of the package.
131They may also pay attention to `--with-PACKAGE' options, where PACKAGE
132is something like `gnu-as' or `x' (for the X Window System). The
133`README' should mention any `--enable-' and `--with-' options that the
134package recognizes.
135
136 For packages that use the X Window System, `configure' can usually
137find the X include and library files automatically, but if it doesn't,
138you can use the `configure' options `--x-includes=DIR' and
139`--x-libraries=DIR' to specify their locations.
140
141Specifying the System Type
142==========================
143
144There may be some features `configure' cannot figure out automatically,
145but needs to determine by the type of machine the package will run on.
146Usually, assuming the package is built to be run on the _same_
147architectures, `configure' can figure that out, but if it prints a
148message saying it cannot guess the machine type, give it the
149`--build=TYPE' option. TYPE can either be a short name for the system
150type, such as `sun4', or a canonical name which has the form:
151
152 CPU-COMPANY-SYSTEM
153
154where SYSTEM can have one of these forms:
155
156 OS KERNEL-OS
157
158 See the file `config.sub' for the possible values of each field. If
159`config.sub' isn't included in this package, then this package doesn't
160need to know the machine type.
161
162 If you are _building_ compiler tools for cross-compiling, you should
163use the option `--target=TYPE' to select the type of system they will
164produce code for.
165
166 If you want to _use_ a cross compiler, that generates code for a
167platform different from the build platform, you should specify the
168"host" platform (i.e., that on which the generated programs will
169eventually be run) with `--host=TYPE'.
170
171Sharing Defaults
172================
173
174If you want to set default values for `configure' scripts to share, you
175can create a site shell script called `config.site' that gives default
176values for variables like `CC', `cache_file', and `prefix'.
177`configure' looks for `PREFIX/share/config.site' if it exists, then
178`PREFIX/etc/config.site' if it exists. Or, you can set the
179`CONFIG_SITE' environment variable to the location of the site script.
180A warning: not all `configure' scripts look for a site script.
181
182Defining Variables
183==================
184
185Variables not defined in a site shell script can be set in the
186environment passed to `configure'. However, some packages may run
187configure again during the build, and the customized values of these
188variables may be lost. In order to avoid this problem, you should set
189them in the `configure' command line, using `VAR=value'. For example:
190
191 ./configure CC=/usr/local2/bin/gcc
192
193causes the specified `gcc' to be used as the C compiler (unless it is
194overridden in the site shell script).
195
196Unfortunately, this technique does not work for `CONFIG_SHELL' due to
197an Autoconf bug. Until the bug is fixed you can use this workaround:
198
199 CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
200
201`configure' Invocation
202======================
203
204`configure' recognizes the following options to control how it operates.
205
206`--help'
207`-h'
208 Print a summary of the options to `configure', and exit.
209
210`--version'
211`-V'
212 Print the version of Autoconf used to generate the `configure'
213 script, and exit.
214
215`--cache-file=FILE'
216 Enable the cache: use and save the results of the tests in FILE,
217 traditionally `config.cache'. FILE defaults to `/dev/null' to
218 disable caching.
219
220`--config-cache'
221`-C'
222 Alias for `--cache-file=config.cache'.
223
224`--quiet'
225`--silent'
226`-q'
227 Do not print messages saying which checks are being made. To
228 suppress all normal output, redirect it to `/dev/null' (any error
229 messages will still be shown).
230
231`--srcdir=DIR'
232 Look for the package's source code in directory DIR. Usually
233 `configure' can determine that directory automatically.
234
235`configure' also accepts some other, not widely useful, options. Run
236`configure --help' for more details.
237
diff --git a/drivers/staging/usbip/userspace/Makefile.am b/drivers/staging/usbip/userspace/Makefile.am
deleted file mode 100644
index 66f8bf038c9f..000000000000
--- a/drivers/staging/usbip/userspace/Makefile.am
+++ /dev/null
@@ -1,6 +0,0 @@
1SUBDIRS := libsrc src
2includedir = @includedir@/usbip
3include_HEADERS := $(addprefix libsrc/, \
4 usbip_common.h vhci_driver.h usbip_host_driver.h)
5
6dist_man_MANS := $(addprefix doc/, usbip.8 usbipd.8)
diff --git a/drivers/staging/usbip/userspace/README b/drivers/staging/usbip/userspace/README
deleted file mode 100644
index 831f49fea3ce..000000000000
--- a/drivers/staging/usbip/userspace/README
+++ /dev/null
@@ -1,202 +0,0 @@
1#
2# README for usbip-utils
3#
4# Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
5# 2005-2008 Takahiro Hirofuchi
6
7
8[Requirements]
9 - USB/IP device drivers
10 Found in the staging directory of the Linux kernel.
11
12 - libudev >= 2.0
13 libudev library
14
15 - libwrap0-dev
16 tcp wrapper library
17
18 - gcc >= 4.0
19
20 - libtool, automake >= 1.9, autoconf >= 2.5.0, pkg-config
21
22[Optional]
23 - hwdata
24 Contains USB device identification data.
25
26
27[Install]
28 0. Generate configuration scripts.
29 $ ./autogen.sh
30
31 1. Compile & install the userspace utilities.
32 $ ./configure [--with-tcp-wrappers=no] [--with-usbids-dir=<dir>]
33 $ make install
34
35 2. Compile & install USB/IP drivers.
36
37
38[Usage]
39 server:# (Physically attach your USB device.)
40
41 server:# insmod usbip-core.ko
42 server:# insmod usbip-host.ko
43
44 server:# usbipd -D
45 - Start usbip daemon.
46
47 server:# usbip list -l
48 - List driver assignments for USB devices.
49
50 server:# usbip bind --busid 1-2
51 - Bind usbip-host.ko to the device with busid 1-2.
52 - The USB device 1-2 is now exportable to other hosts!
53 - Use `usbip unbind --busid 1-2' to stop exporting the device.
54
55 client:# insmod usbip-core.ko
56 client:# insmod vhci-hcd.ko
57
58 client:# usbip list --remote <host>
59 - List exported USB devices on the <host>.
60
61 client:# usbip attach --remote <host> --busid 1-2
62 - Connect the remote USB device.
63
64 client:# usbip port
65 - Show virtual port status.
66
67 client:# usbip detach --port <port>
68 - Detach the USB device.
69
70
71[Example]
72---------------------------
73 SERVER SIDE
74---------------------------
75Physically attach your USB devices to this host.
76
77 trois:# insmod path/to/usbip-core.ko
78 trois:# insmod path/to/usbip-host.ko
79 trois:# usbipd -D
80
81In another terminal, let's look up what USB devices are physically
82attached to this host.
83
84 trois:# usbip list -l
85 Local USB devices
86 =================
87 - busid 1-1 (05a9:a511)
88 1-1:1.0 -> ov511
89
90 - busid 3-2 (0711:0902)
91 3-2:1.0 -> none
92
93 - busid 3-3.1 (08bb:2702)
94 3-3.1:1.0 -> snd-usb-audio
95 3-3.1:1.1 -> snd-usb-audio
96
97 - busid 3-3.2 (04bb:0206)
98 3-3.2:1.0 -> usb-storage
99
100 - busid 3-3 (0409:0058)
101 3-3:1.0 -> hub
102
103 - busid 4-1 (046d:08b2)
104 4-1:1.0 -> none
105 4-1:1.1 -> none
106 4-1:1.2 -> none
107
108 - busid 5-2 (058f:9254)
109 5-2:1.0 -> hub
110
111A USB storage device of busid 3-3.2 is now bound to the usb-storage
112driver. To export this device, we first mark the device as
113"exportable"; the device is bound to the usbip-host driver. Please
114remember you can not export a USB hub.
115
116Mark the device of busid 3-3.2 as exportable:
117
118 trois:# usbip --debug bind --busid 3-3.2
119 ...
120 usbip debug: usbip_bind.c:162:[unbind_other] 3-3.2:1.0 -> usb-storage
121 ...
122 bind device on busid 3-3.2: complete
123
124 trois:# usbip list -l
125 Local USB devices
126 =================
127 ...
128
129 - busid 3-3.2 (04bb:0206)
130 3-3.2:1.0 -> usbip-host
131 ...
132
133---------------------------
134 CLIENT SIDE
135---------------------------
136First, let's list available remote devices that are marked as
137exportable on the host.
138
139 deux:# insmod path/to/usbip-core.ko
140 deux:# insmod path/to/vhci-hcd.ko
141
142 deux:# usbip list --remote 10.0.0.3
143 Exportable USB devices
144 ======================
145 - 10.0.0.3
146 1-1: Prolific Technology, Inc. : unknown product (067b:3507)
147 : /sys/devices/pci0000:00/0000:00:1f.2/usb1/1-1
148 : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00)
149 : 0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)
150
151 1-2.2.1: Apple Computer, Inc. : unknown product (05ac:0203)
152 : /sys/devices/pci0000:00/0000:00:1f.2/usb1/1-2/1-2.2/1-2.2.1
153 : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00)
154 : 0 - Human Interface Devices / Boot Interface Subclass / Keyboard (03/01/01)
155
156 1-2.2.3: OmniVision Technologies, Inc. : OV511+ WebCam (05a9:a511)
157 : /sys/devices/pci0000:00/0000:00:1f.2/usb1/1-2/1-2.2/1-2.2.3
158 : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00)
159 : 0 - Vendor Specific Class / unknown subclass / unknown protocol (ff/00/00)
160
161 3-1: Logitech, Inc. : QuickCam Pro 4000 (046d:08b2)
162 : /sys/devices/pci0000:00/0000:00:1e.0/0000:02:0a.0/usb3/3-1
163 : (Defined at Interface level) / unknown subclass / unknown protocol (00/00/00)
164 : 0 - Data / unknown subclass / unknown protocol (0a/ff/00)
165 : 1 - Audio / Control Device / unknown protocol (01/01/00)
166 : 2 - Audio / Streaming / unknown protocol (01/02/00)
167
168Attach a remote USB device:
169
170 deux:# usbip attach --remote 10.0.0.3 --busid 1-1
171 port 0 attached
172
173Show the devices attached to this client:
174
175 deux:# usbip port
176 Port 00: <Port in Use> at Full Speed(12Mbps)
177 Prolific Technology, Inc. : unknown product (067b:3507)
178 6-1 -> usbip://10.0.0.3:3240/1-1 (remote bus/dev 001/004)
179 6-1:1.0 used by usb-storage
180 /sys/class/scsi_device/0:0:0:0/device
181 /sys/class/scsi_host/host0/device
182 /sys/block/sda/device
183
184Detach the imported device:
185
186 deux:# usbip detach --port 0
187 port 0 detached
188
189
190[Checklist]
191 - See 'Debug Tips' on the project wiki.
192 - http://usbip.wiki.sourceforge.net/how-to-debug-usbip
193 - usbip-host.ko must be bound to the target device.
194 - See /proc/bus/usb/devices and find "Driver=..." lines of the device.
195 - Shutdown firewall.
196 - usbip now uses TCP port 3240.
197 - Disable SELinux.
198 - Check the kernel and daemon messages.
199
200
201[Contact]
202 Mailing List: linux-usb@vger.kernel.org
diff --git a/drivers/staging/usbip/userspace/autogen.sh b/drivers/staging/usbip/userspace/autogen.sh
deleted file mode 100755
index e1112d3fcbf6..000000000000
--- a/drivers/staging/usbip/userspace/autogen.sh
+++ /dev/null
@@ -1,9 +0,0 @@
1#!/bin/sh -x
2
3#aclocal
4#autoheader
5#libtoolize --copy --force
6#automake-1.9 -acf
7#autoconf
8
9autoreconf -i -f -v
diff --git a/drivers/staging/usbip/userspace/cleanup.sh b/drivers/staging/usbip/userspace/cleanup.sh
deleted file mode 100755
index 955c3ccb729a..000000000000
--- a/drivers/staging/usbip/userspace/cleanup.sh
+++ /dev/null
@@ -1,12 +0,0 @@
1#!/bin/sh
2
3if [ -r Makefile ]; then
4 make distclean
5fi
6
7FILES="aclocal.m4 autom4te.cache compile config.guess config.h.in config.log \
8 config.status config.sub configure cscope.out depcomp install-sh \
9 libsrc/Makefile libsrc/Makefile.in libtool ltmain.sh Makefile \
10 Makefile.in missing src/Makefile src/Makefile.in"
11
12rm -vRf $FILES
diff --git a/drivers/staging/usbip/userspace/configure.ac b/drivers/staging/usbip/userspace/configure.ac
deleted file mode 100644
index 607d05c5ccfd..000000000000
--- a/drivers/staging/usbip/userspace/configure.ac
+++ /dev/null
@@ -1,111 +0,0 @@
1dnl Process this file with autoconf to produce a configure script.
2
3AC_PREREQ(2.59)
4AC_INIT([usbip-utils], [2.0], [linux-usb@vger.kernel.org])
5AC_DEFINE([USBIP_VERSION], [0x00000111], [binary-coded decimal version number])
6
7CURRENT=0
8REVISION=1
9AGE=0
10AC_SUBST([LIBUSBIP_VERSION], [$CURRENT:$REVISION:$AGE], [library version])
11
12AC_CONFIG_SRCDIR([src/usbipd.c])
13AC_CONFIG_HEADERS([config.h])
14
15AM_INIT_AUTOMAKE([foreign])
16LT_INIT
17
18# Silent build for automake >= 1.11
19m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
20
21AC_SUBST([EXTRA_CFLAGS], ["-Wall -Werror -Wextra -std=gnu99"])
22
23# Checks for programs.
24AC_PROG_CC
25AC_PROG_INSTALL
26AC_PROG_MAKE_SET
27
28# Checks for header files.
29AC_HEADER_DIRENT
30AC_HEADER_STDC
31AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h stdint.h stdlib.h dnl
32 string.h sys/socket.h syslog.h unistd.h])
33
34# Checks for typedefs, structures, and compiler characteristics.
35AC_TYPE_INT32_T
36AC_TYPE_SIZE_T
37AC_TYPE_SSIZE_T
38AC_TYPE_UINT16_T
39AC_TYPE_UINT32_T
40AC_TYPE_UINT8_T
41
42# Checks for library functions.
43AC_FUNC_REALLOC
44AC_CHECK_FUNCS([memset mkdir regcomp socket strchr strerror strstr dnl
45 strtoul])
46
47AC_CHECK_HEADER([libudev.h],
48 [AC_CHECK_LIB([udev], [udev_new],
49 [LIBS="$LIBS -ludev"],
50 [AC_MSG_ERROR([Missing udev library!])])],
51 [AC_MSG_ERROR([Missing /usr/include/libudev.h])])
52
53# Checks for libwrap library.
54AC_MSG_CHECKING([whether to use the libwrap (TCP wrappers) library])
55AC_ARG_WITH([tcp-wrappers],
56 [AS_HELP_STRING([--with-tcp-wrappers],
57 [use the libwrap (TCP wrappers) library])],
58 dnl [ACTION-IF-GIVEN]
59 [if test "$withval" = "yes"; then
60 AC_MSG_RESULT([yes])
61 AC_MSG_CHECKING([for hosts_access in -lwrap])
62 saved_LIBS="$LIBS"
63 LIBS="-lwrap $saved_LIBS"
64 AC_TRY_LINK(
65 [int hosts_access(); int allow_severity, deny_severity;],
66 [hosts_access()],
67 [AC_MSG_RESULT([yes]);
68 AC_DEFINE([HAVE_LIBWRAP], [1],
69 [use tcp wrapper]) wrap_LIB="-lwrap"],
70 [AC_MSG_RESULT([not found]); exit 1])
71 else
72 AC_MSG_RESULT([no]);
73 fi],
74 dnl [ACTION-IF-NOT-GIVEN]
75 [AC_MSG_RESULT([(default)])
76 AC_MSG_CHECKING([for hosts_access in -lwrap])
77 saved_LIBS="$LIBS"
78 LIBS="-lwrap $saved_LIBS"
79 AC_TRY_LINK(
80 [int hosts_access(); int allow_severity, deny_severity;],
81 [hosts_access()],
82 [AC_MSG_RESULT([yes]);
83 AC_DEFINE([HAVE_LIBWRAP], [1], [use tcp wrapper])],
84 [AC_MSG_RESULT([no]); LIBS="$saved_LIBS"])])
85
86# Sets directory containing usb.ids.
87AC_ARG_WITH([usbids-dir],
88 [AS_HELP_STRING([--with-usbids-dir=DIR],
89 [where usb.ids is found (default /usr/share/hwdata/)])],
90 [USBIDS_DIR=$withval], [USBIDS_DIR="/usr/share/hwdata/"])
91AC_SUBST([USBIDS_DIR])
92
93# use _FORTIFY_SOURCE
94AC_MSG_CHECKING([whether to use fortify])
95AC_ARG_WITH([fortify],
96 [AS_HELP_STRING([--with-fortify],
97 [use _FORTIFY_SROUCE option when compiling)])],
98 dnl [ACTION-IF-GIVEN]
99 [if test "$withval" = "yes"; then
100 AC_MSG_RESULT([yes])
101 CFLAGS="$CFLAGS -D_FORTIFY_SOURCE -O"
102 else
103 AC_MSG_RESULT([no])
104 CFLAGS="$CFLAGS -U_FORTIFY_SOURCE"
105 fi
106 ],
107 dnl [ACTION-IF-NOT-GIVEN]
108 [AC_MSG_RESULT([default])])
109
110AC_CONFIG_FILES([Makefile libsrc/Makefile src/Makefile])
111AC_OUTPUT
diff --git a/drivers/staging/usbip/userspace/doc/usbip.8 b/drivers/staging/usbip/userspace/doc/usbip.8
deleted file mode 100644
index a6097be25d28..000000000000
--- a/drivers/staging/usbip/userspace/doc/usbip.8
+++ /dev/null
@@ -1,95 +0,0 @@
1.TH USBIP "8" "February 2009" "usbip" "System Administration Utilities"
2.SH NAME
3usbip \- manage USB/IP devices
4.SH SYNOPSIS
5.B usbip
6[\fIoptions\fR] <\fIcommand\fR> <\fIargs\fR>
7
8.SH DESCRIPTION
9On a USB/IP server, devices can be listed, bound, and unbound using
10this program. On a USB/IP client, devices exported by USB/IP servers
11can be listed, attached and detached.
12
13.SH OPTIONS
14.HP
15\fB\-\-debug\fR
16.IP
17Print debugging information.
18.PP
19
20.HP
21\fB\-\-log\fR
22.IP
23Log to syslog.
24.PP
25
26.HP
27\fB\-\-tcp-port PORT\fR
28.IP
29Connect to PORT on remote host (used for attach and list --remote).
30.PP
31
32.SH COMMANDS
33.HP
34\fBversion\fR
35.IP
36Show version and exit.
37.PP
38
39.HP
40\fBhelp\fR [\fIcommand\fR]
41.IP
42Print the program help message, or help on a specific command, and
43then exit.
44.PP
45
46.HP
47\fBattach\fR \-\-remote=<\fIhost\fR> \-\-busid=<\fIbus_id\fR>
48.IP
49Attach a remote USB device.
50.PP
51
52.HP
53\fBdetach\fR \-\-port=<\fIport\fR>
54.IP
55Detach an imported USB device.
56.PP
57
58.HP
59\fBbind\fR \-\-busid=<\fIbusid\fR>
60.IP
61Make a device exportable.
62.PP
63
64.HP
65\fBunbind\fR \-\-busid=<\fIbusid\fR>
66.IP
67Stop exporting a device so it can be used by a local driver.
68.PP
69
70.HP
71\fBlist\fR \-\-remote=<\fIhost\fR>
72.IP
73List USB devices exported by a remote host.
74.PP
75
76.HP
77\fBlist\fR \-\-local
78.IP
79List local USB devices.
80.PP
81
82
83.SH EXAMPLES
84
85 client:# usbip list --remote=server
86 - List exportable usb devices on the server.
87
88 client:# usbip attach --remote=server --busid=1-2
89 - Connect the remote USB device.
90
91 client:# usbip detach --port=0
92 - Detach the usb device.
93
94.SH "SEE ALSO"
95\fBusbipd\fP\fB(8)\fB\fP
diff --git a/drivers/staging/usbip/userspace/doc/usbipd.8 b/drivers/staging/usbip/userspace/doc/usbipd.8
deleted file mode 100644
index ac4635db3f03..000000000000
--- a/drivers/staging/usbip/userspace/doc/usbipd.8
+++ /dev/null
@@ -1,91 +0,0 @@
1.TH USBIP "8" "February 2009" "usbip" "System Administration Utilities"
2.SH NAME
3usbipd \- USB/IP server daemon
4.SH SYNOPSIS
5.B usbipd
6[\fIoptions\fR]
7
8.SH DESCRIPTION
9.B usbipd
10provides USB/IP clients access to exported USB devices.
11
12Devices have to explicitly be exported using
13.B usbip bind
14before usbipd makes them available to other hosts.
15
16The daemon accepts connections from USB/IP clients
17on TCP port 3240 by default.
18
19.SH OPTIONS
20.HP
21\fB\-4\fR, \fB\-\-ipv4\fR
22.IP
23Bind to IPv4. Default is both.
24.PP
25
26.HP
27\fB\-6\fR, \fB\-\-ipv6\fR
28.IP
29Bind to IPv6. Default is both.
30.PP
31
32.HP
33\fB\-D\fR, \fB\-\-daemon\fR
34.IP
35Run as a daemon process.
36.PP
37
38.HP
39\fB\-d\fR, \fB\-\-debug\fR
40.IP
41Print debugging information.
42.PP
43
44.HP
45\fB\-PFILE\fR, \fB\-\-pid FILE\fR
46.IP
47Write process id to FILE.
48.br
49If no FILE specified, use /var/run/usbipd.pid
50.PP
51
52\fB\-tPORT\fR, \fB\-\-tcp\-port PORT\fR
53.IP
54Listen on TCP/IP port PORT.
55.PP
56
57\fB\-h\fR, \fB\-\-help\fR
58.IP
59Print the program help message and exit.
60.PP
61
62.HP
63\fB\-v\fR, \fB\-\-version\fR
64.IP
65Show version.
66.PP
67
68.SH LIMITATIONS
69
70.B usbipd
71offers no authentication or authorization for USB/IP. Any
72USB/IP client can connect and use exported devices.
73
74.SH EXAMPLES
75
76 server:# modprobe usbip
77
78 server:# usbipd -D
79 - Start usbip daemon.
80
81 server:# usbip list --local
82 - List driver assignments for usb devices.
83
84 server:# usbip bind --busid=1-2
85 - Bind usbip-host.ko to the device of busid 1-2.
86 - A usb device 1-2 is now exportable to other hosts!
87 - Use 'usbip unbind --busid=1-2' when you want to shutdown exporting and use the device locally.
88
89.SH "SEE ALSO"
90\fBusbip\fP\fB(8)\fB\fP
91
diff --git a/drivers/staging/usbip/userspace/libsrc/Makefile.am b/drivers/staging/usbip/userspace/libsrc/Makefile.am
deleted file mode 100644
index 7c8f8a4d54e4..000000000000
--- a/drivers/staging/usbip/userspace/libsrc/Makefile.am
+++ /dev/null
@@ -1,8 +0,0 @@
1libusbip_la_CPPFLAGS = -DUSBIDS_FILE='"@USBIDS_DIR@/usb.ids"'
2libusbip_la_CFLAGS = @EXTRA_CFLAGS@
3libusbip_la_LDFLAGS = -version-info @LIBUSBIP_VERSION@
4
5lib_LTLIBRARIES := libusbip.la
6libusbip_la_SOURCES := names.c names.h usbip_host_driver.c usbip_host_driver.h \
7 usbip_common.c usbip_common.h vhci_driver.c vhci_driver.h \
8 sysfs_utils.c sysfs_utils.h
diff --git a/drivers/staging/usbip/userspace/libsrc/list.h b/drivers/staging/usbip/userspace/libsrc/list.h
deleted file mode 100644
index 8d0c936e184f..000000000000
--- a/drivers/staging/usbip/userspace/libsrc/list.h
+++ /dev/null
@@ -1,136 +0,0 @@
1#ifndef _LIST_H
2#define _LIST_H
3
4/* Stripped down implementation of linked list taken
5 * from the Linux Kernel.
6 */
7
8/*
9 * Simple doubly linked list implementation.
10 *
11 * Some of the internal functions ("__xxx") are useful when
12 * manipulating whole lists rather than single entries, as
13 * sometimes we already know the next/prev entries and we can
14 * generate better code by using them directly rather than
15 * using the generic single-entry routines.
16 */
17
18struct list_head {
19 struct list_head *next, *prev;
20};
21
22#define LIST_HEAD_INIT(name) { &(name), &(name) }
23
24#define LIST_HEAD(name) \
25 struct list_head name = LIST_HEAD_INIT(name)
26
27static inline void INIT_LIST_HEAD(struct list_head *list)
28{
29 list->next = list;
30 list->prev = list;
31}
32
33/*
34 * Insert a new entry between two known consecutive entries.
35 *
36 * This is only for internal list manipulation where we know
37 * the prev/next entries already!
38 */
39static inline void __list_add(struct list_head *new,
40 struct list_head *prev,
41 struct list_head *next)
42{
43 next->prev = new;
44 new->next = next;
45 new->prev = prev;
46 prev->next = new;
47}
48
49/**
50 * list_add - add a new entry
51 * @new: new entry to be added
52 * @head: list head to add it after
53 *
54 * Insert a new entry after the specified head.
55 * This is good for implementing stacks.
56 */
57static inline void list_add(struct list_head *new, struct list_head *head)
58{
59 __list_add(new, head, head->next);
60}
61
62/*
63 * Delete a list entry by making the prev/next entries
64 * point to each other.
65 *
66 * This is only for internal list manipulation where we know
67 * the prev/next entries already!
68 */
69static inline void __list_del(struct list_head * prev, struct list_head * next)
70{
71 next->prev = prev;
72 prev->next = next;
73}
74
75#define POISON_POINTER_DELTA 0
76#define LIST_POISON1 ((void *) 0x00100100 + POISON_POINTER_DELTA)
77#define LIST_POISON2 ((void *) 0x00200200 + POISON_POINTER_DELTA)
78
79/**
80 * list_del - deletes entry from list.
81 * @entry: the element to delete from the list.
82 * Note: list_empty() on entry does not return true after this, the entry is
83 * in an undefined state.
84 */
85static inline void __list_del_entry(struct list_head *entry)
86{
87 __list_del(entry->prev, entry->next);
88}
89
90static inline void list_del(struct list_head *entry)
91{
92 __list_del(entry->prev, entry->next);
93 entry->next = LIST_POISON1;
94 entry->prev = LIST_POISON2;
95}
96
97/**
98 * list_entry - get the struct for this entry
99 * @ptr: the &struct list_head pointer.
100 * @type: the type of the struct this is embedded in.
101 * @member: the name of the list_struct within the struct.
102 */
103#define list_entry(ptr, type, member) \
104 container_of(ptr, type, member)
105/**
106 * list_for_each - iterate over a list
107 * @pos: the &struct list_head to use as a loop cursor.
108 * @head: the head for your list.
109 */
110#define list_for_each(pos, head) \
111 for (pos = (head)->next; pos != (head); pos = pos->next)
112
113/**
114 * list_for_each_safe - iterate over a list safe against removal of list entry
115 * @pos: the &struct list_head to use as a loop cursor.
116 * @n: another &struct list_head to use as temporary storage
117 * @head: the head for your list.
118 */
119#define list_for_each_safe(pos, n, head) \
120 for (pos = (head)->next, n = pos->next; pos != (head); \
121 pos = n, n = pos->next)
122
123#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
124
125/**
126 * container_of - cast a member of a structure out to the containing structure
127 * @ptr: the pointer to the member.
128 * @type: the type of the container struct this is embedded in.
129 * @member: the name of the member within the struct.
130 *
131 */
132#define container_of(ptr, type, member) ({ \
133 const typeof( ((type *)0)->member ) *__mptr = (ptr); \
134 (type *)( (char *)__mptr - offsetof(type,member) );})
135
136#endif
diff --git a/drivers/staging/usbip/userspace/libsrc/names.c b/drivers/staging/usbip/userspace/libsrc/names.c
deleted file mode 100644
index 81ff8522405c..000000000000
--- a/drivers/staging/usbip/userspace/libsrc/names.c
+++ /dev/null
@@ -1,504 +0,0 @@
1/*
2 * names.c -- USB name database manipulation routines
3 *
4 * Copyright (C) 1999, 2000 Thomas Sailer (sailer@ife.ee.ethz.ch)
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 *
20 *
21 *
22 *
23 *
24 * Copyright (C) 2005 Takahiro Hirofuchi
25 * - names_deinit() is added.
26 *
27 */
28
29#include <sys/types.h>
30#include <sys/stat.h>
31#include <fcntl.h>
32#include <dirent.h>
33#include <string.h>
34#include <errno.h>
35#include <stdlib.h>
36#include <unistd.h>
37#include <stdio.h>
38#include <ctype.h>
39
40#include "names.h"
41#include "usbip_common.h"
42
43struct vendor {
44 struct vendor *next;
45 u_int16_t vendorid;
46 char name[1];
47};
48
49struct product {
50 struct product *next;
51 u_int16_t vendorid, productid;
52 char name[1];
53};
54
55struct class {
56 struct class *next;
57 u_int8_t classid;
58 char name[1];
59};
60
61struct subclass {
62 struct subclass *next;
63 u_int8_t classid, subclassid;
64 char name[1];
65};
66
67struct protocol {
68 struct protocol *next;
69 u_int8_t classid, subclassid, protocolid;
70 char name[1];
71};
72
73struct genericstrtable {
74 struct genericstrtable *next;
75 unsigned int num;
76 char name[1];
77};
78
79
80#define HASH1 0x10
81#define HASH2 0x02
82#define HASHSZ 16
83
84static unsigned int hashnum(unsigned int num)
85{
86 unsigned int mask1 = HASH1 << 27, mask2 = HASH2 << 27;
87
88 for (; mask1 >= HASH1; mask1 >>= 1, mask2 >>= 1)
89 if (num & mask1)
90 num ^= mask2;
91 return num & (HASHSZ-1);
92}
93
94
95static struct vendor *vendors[HASHSZ] = { NULL, };
96static struct product *products[HASHSZ] = { NULL, };
97static struct class *classes[HASHSZ] = { NULL, };
98static struct subclass *subclasses[HASHSZ] = { NULL, };
99static struct protocol *protocols[HASHSZ] = { NULL, };
100
101const char *names_vendor(u_int16_t vendorid)
102{
103 struct vendor *v;
104
105 v = vendors[hashnum(vendorid)];
106 for (; v; v = v->next)
107 if (v->vendorid == vendorid)
108 return v->name;
109 return NULL;
110}
111
112const char *names_product(u_int16_t vendorid, u_int16_t productid)
113{
114 struct product *p;
115
116 p = products[hashnum((vendorid << 16) | productid)];
117 for (; p; p = p->next)
118 if (p->vendorid == vendorid && p->productid == productid)
119 return p->name;
120 return NULL;
121}
122
123const char *names_class(u_int8_t classid)
124{
125 struct class *c;
126
127 c = classes[hashnum(classid)];
128 for (; c; c = c->next)
129 if (c->classid == classid)
130 return c->name;
131 return NULL;
132}
133
134const char *names_subclass(u_int8_t classid, u_int8_t subclassid)
135{
136 struct subclass *s;
137
138 s = subclasses[hashnum((classid << 8) | subclassid)];
139 for (; s; s = s->next)
140 if (s->classid == classid && s->subclassid == subclassid)
141 return s->name;
142 return NULL;
143}
144
145const char *names_protocol(u_int8_t classid, u_int8_t subclassid,
146 u_int8_t protocolid)
147{
148 struct protocol *p;
149
150 p = protocols[hashnum((classid << 16) | (subclassid << 8)
151 | protocolid)];
152 for (; p; p = p->next)
153 if (p->classid == classid && p->subclassid == subclassid &&
154 p->protocolid == protocolid)
155 return p->name;
156 return NULL;
157}
158
159/* add a cleanup function by takahiro */
160struct pool {
161 struct pool *next;
162 void *mem;
163};
164
165static struct pool *pool_head;
166
167static void *my_malloc(size_t size)
168{
169 struct pool *p;
170
171 p = calloc(1, sizeof(struct pool));
172 if (!p)
173 return NULL;
174
175 p->mem = calloc(1, size);
176 if (!p->mem) {
177 free(p);
178 return NULL;
179 }
180
181 p->next = pool_head;
182 pool_head = p;
183
184 return p->mem;
185}
186
187void names_free(void)
188{
189 struct pool *pool;
190
191 if (!pool_head)
192 return;
193
194 for (pool = pool_head; pool != NULL; ) {
195 struct pool *tmp;
196
197 if (pool->mem)
198 free(pool->mem);
199
200 tmp = pool;
201 pool = pool->next;
202 free(tmp);
203 }
204}
205
206static int new_vendor(const char *name, u_int16_t vendorid)
207{
208 struct vendor *v;
209 unsigned int h = hashnum(vendorid);
210
211 v = vendors[h];
212 for (; v; v = v->next)
213 if (v->vendorid == vendorid)
214 return -1;
215 v = my_malloc(sizeof(struct vendor) + strlen(name));
216 if (!v)
217 return -1;
218 strcpy(v->name, name);
219 v->vendorid = vendorid;
220 v->next = vendors[h];
221 vendors[h] = v;
222 return 0;
223}
224
225static int new_product(const char *name, u_int16_t vendorid,
226 u_int16_t productid)
227{
228 struct product *p;
229 unsigned int h = hashnum((vendorid << 16) | productid);
230
231 p = products[h];
232 for (; p; p = p->next)
233 if (p->vendorid == vendorid && p->productid == productid)
234 return -1;
235 p = my_malloc(sizeof(struct product) + strlen(name));
236 if (!p)
237 return -1;
238 strcpy(p->name, name);
239 p->vendorid = vendorid;
240 p->productid = productid;
241 p->next = products[h];
242 products[h] = p;
243 return 0;
244}
245
246static int new_class(const char *name, u_int8_t classid)
247{
248 struct class *c;
249 unsigned int h = hashnum(classid);
250
251 c = classes[h];
252 for (; c; c = c->next)
253 if (c->classid == classid)
254 return -1;
255 c = my_malloc(sizeof(struct class) + strlen(name));
256 if (!c)
257 return -1;
258 strcpy(c->name, name);
259 c->classid = classid;
260 c->next = classes[h];
261 classes[h] = c;
262 return 0;
263}
264
265static int new_subclass(const char *name, u_int8_t classid, u_int8_t subclassid)
266{
267 struct subclass *s;
268 unsigned int h = hashnum((classid << 8) | subclassid);
269
270 s = subclasses[h];
271 for (; s; s = s->next)
272 if (s->classid == classid && s->subclassid == subclassid)
273 return -1;
274 s = my_malloc(sizeof(struct subclass) + strlen(name));
275 if (!s)
276 return -1;
277 strcpy(s->name, name);
278 s->classid = classid;
279 s->subclassid = subclassid;
280 s->next = subclasses[h];
281 subclasses[h] = s;
282 return 0;
283}
284
285static int new_protocol(const char *name, u_int8_t classid, u_int8_t subclassid,
286 u_int8_t protocolid)
287{
288 struct protocol *p;
289 unsigned int h = hashnum((classid << 16) | (subclassid << 8)
290 | protocolid);
291
292 p = protocols[h];
293 for (; p; p = p->next)
294 if (p->classid == classid && p->subclassid == subclassid
295 && p->protocolid == protocolid)
296 return -1;
297 p = my_malloc(sizeof(struct protocol) + strlen(name));
298 if (!p)
299 return -1;
300 strcpy(p->name, name);
301 p->classid = classid;
302 p->subclassid = subclassid;
303 p->protocolid = protocolid;
304 p->next = protocols[h];
305 protocols[h] = p;
306 return 0;
307}
308
309static void parse(FILE *f)
310{
311 char buf[512], *cp;
312 unsigned int linectr = 0;
313 int lastvendor = -1;
314 int lastclass = -1;
315 int lastsubclass = -1;
316 int lasthut = -1;
317 int lastlang = -1;
318 unsigned int u;
319
320 while (fgets(buf, sizeof(buf), f)) {
321 linectr++;
322 /* remove line ends */
323 cp = strchr(buf, '\r');
324 if (cp)
325 *cp = 0;
326 cp = strchr(buf, '\n');
327 if (cp)
328 *cp = 0;
329 if (buf[0] == '#' || !buf[0])
330 continue;
331 cp = buf;
332 if (buf[0] == 'P' && buf[1] == 'H' && buf[2] == 'Y' &&
333 buf[3] == 'S' && buf[4] == 'D' &&
334 buf[5] == 'E' && buf[6] == 'S' && /*isspace(buf[7])*/
335 buf[7] == ' ') {
336 continue;
337 }
338 if (buf[0] == 'P' && buf[1] == 'H' &&
339 buf[2] == 'Y' && /*isspace(buf[3])*/ buf[3] == ' ') {
340 continue;
341 }
342 if (buf[0] == 'B' && buf[1] == 'I' && buf[2] == 'A' &&
343 buf[3] == 'S' && /*isspace(buf[4])*/ buf[4] == ' ') {
344 continue;
345 }
346 if (buf[0] == 'L' && /*isspace(buf[1])*/ buf[1] == ' ') {
347 lasthut = lastclass = lastvendor = lastsubclass = -1;
348 /*
349 * set 1 as pseudo-id to indicate that the parser is
350 * in a `L' section.
351 */
352 lastlang = 1;
353 continue;
354 }
355 if (buf[0] == 'C' && /*isspace(buf[1])*/ buf[1] == ' ') {
356 /* class spec */
357 cp = buf+2;
358 while (isspace(*cp))
359 cp++;
360 if (!isxdigit(*cp)) {
361 err("Invalid class spec at line %u", linectr);
362 continue;
363 }
364 u = strtoul(cp, &cp, 16);
365 while (isspace(*cp))
366 cp++;
367 if (!*cp) {
368 err("Invalid class spec at line %u", linectr);
369 continue;
370 }
371 if (new_class(cp, u))
372 err("Duplicate class spec at line %u class %04x %s",
373 linectr, u, cp);
374 dbg("line %5u class %02x %s", linectr, u, cp);
375 lasthut = lastlang = lastvendor = lastsubclass = -1;
376 lastclass = u;
377 continue;
378 }
379 if (buf[0] == 'A' && buf[1] == 'T' && isspace(buf[2])) {
380 /* audio terminal type spec */
381 continue;
382 }
383 if (buf[0] == 'H' && buf[1] == 'C' && buf[2] == 'C'
384 && isspace(buf[3])) {
385 /* HID Descriptor bCountryCode */
386 continue;
387 }
388 if (isxdigit(*cp)) {
389 /* vendor */
390 u = strtoul(cp, &cp, 16);
391 while (isspace(*cp))
392 cp++;
393 if (!*cp) {
394 err("Invalid vendor spec at line %u", linectr);
395 continue;
396 }
397 if (new_vendor(cp, u))
398 err("Duplicate vendor spec at line %u vendor %04x %s",
399 linectr, u, cp);
400 dbg("line %5u vendor %04x %s", linectr, u, cp);
401 lastvendor = u;
402 lasthut = lastlang = lastclass = lastsubclass = -1;
403 continue;
404 }
405 if (buf[0] == '\t' && isxdigit(buf[1])) {
406 /* product or subclass spec */
407 u = strtoul(buf+1, &cp, 16);
408 while (isspace(*cp))
409 cp++;
410 if (!*cp) {
411 err("Invalid product/subclass spec at line %u",
412 linectr);
413 continue;
414 }
415 if (lastvendor != -1) {
416 if (new_product(cp, lastvendor, u))
417 err("Duplicate product spec at line %u product %04x:%04x %s",
418 linectr, lastvendor, u, cp);
419 dbg("line %5u product %04x:%04x %s", linectr,
420 lastvendor, u, cp);
421 continue;
422 }
423 if (lastclass != -1) {
424 if (new_subclass(cp, lastclass, u))
425 err("Duplicate subclass spec at line %u class %02x:%02x %s",
426 linectr, lastclass, u, cp);
427 dbg("line %5u subclass %02x:%02x %s", linectr,
428 lastclass, u, cp);
429 lastsubclass = u;
430 continue;
431 }
432 if (lasthut != -1) {
433 /* do not store hut */
434 continue;
435 }
436 if (lastlang != -1) {
437 /* do not store langid */
438 continue;
439 }
440 err("Product/Subclass spec without prior Vendor/Class spec at line %u",
441 linectr);
442 continue;
443 }
444 if (buf[0] == '\t' && buf[1] == '\t' && isxdigit(buf[2])) {
445 /* protocol spec */
446 u = strtoul(buf+2, &cp, 16);
447 while (isspace(*cp))
448 cp++;
449 if (!*cp) {
450 err("Invalid protocol spec at line %u",
451 linectr);
452 continue;
453 }
454 if (lastclass != -1 && lastsubclass != -1) {
455 if (new_protocol(cp, lastclass, lastsubclass,
456 u))
457 err("Duplicate protocol spec at line %u class %02x:%02x:%02x %s",
458 linectr, lastclass, lastsubclass,
459 u, cp);
460 dbg("line %5u protocol %02x:%02x:%02x %s",
461 linectr, lastclass, lastsubclass, u, cp);
462 continue;
463 }
464 err("Protocol spec without prior Class and Subclass spec at line %u",
465 linectr);
466 continue;
467 }
468 if (buf[0] == 'H' && buf[1] == 'I' &&
469 buf[2] == 'D' && /*isspace(buf[3])*/ buf[3] == ' ') {
470 continue;
471 }
472 if (buf[0] == 'H' && buf[1] == 'U' &&
473 buf[2] == 'T' && /*isspace(buf[3])*/ buf[3] == ' ') {
474 lastlang = lastclass = lastvendor = lastsubclass = -1;
475 /*
476 * set 1 as pseudo-id to indicate that the parser is
477 * in a `HUT' section.
478 */
479 lasthut = 1;
480 continue;
481 }
482 if (buf[0] == 'R' && buf[1] == ' ')
483 continue;
484
485 if (buf[0] == 'V' && buf[1] == 'T')
486 continue;
487
488 err("Unknown line at line %u", linectr);
489 }
490}
491
492
493int names_init(char *n)
494{
495 FILE *f;
496
497 f = fopen(n, "r");
498 if (!f)
499 return errno;
500
501 parse(f);
502 fclose(f);
503 return 0;
504}
diff --git a/drivers/staging/usbip/userspace/libsrc/names.h b/drivers/staging/usbip/userspace/libsrc/names.h
deleted file mode 100644
index 680926512de2..000000000000
--- a/drivers/staging/usbip/userspace/libsrc/names.h
+++ /dev/null
@@ -1,41 +0,0 @@
1/*
2 * names.h -- USB name database manipulation routines
3 *
4 * Copyright (C) 1999, 2000 Thomas Sailer (sailer@ife.ee.ethz.ch)
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 *
20 *
21 *
22 * Copyright (C) 2005 Takahiro Hirofuchi
23 * - names_free() is added.
24 */
25
26#ifndef _NAMES_H
27#define _NAMES_H
28
29#include <sys/types.h>
30
31/* used by usbip_common.c */
32extern const char *names_vendor(u_int16_t vendorid);
33extern const char *names_product(u_int16_t vendorid, u_int16_t productid);
34extern const char *names_class(u_int8_t classid);
35extern const char *names_subclass(u_int8_t classid, u_int8_t subclassid);
36extern const char *names_protocol(u_int8_t classid, u_int8_t subclassid,
37 u_int8_t protocolid);
38extern int names_init(char *n);
39extern void names_free(void);
40
41#endif /* _NAMES_H */
diff --git a/drivers/staging/usbip/userspace/libsrc/sysfs_utils.c b/drivers/staging/usbip/userspace/libsrc/sysfs_utils.c
deleted file mode 100644
index 36ac88ece0b8..000000000000
--- a/drivers/staging/usbip/userspace/libsrc/sysfs_utils.c
+++ /dev/null
@@ -1,31 +0,0 @@
1#include <sys/types.h>
2#include <sys/stat.h>
3#include <fcntl.h>
4#include <errno.h>
5
6#include "sysfs_utils.h"
7#include "usbip_common.h"
8
9int write_sysfs_attribute(const char *attr_path, const char *new_value,
10 size_t len)
11{
12 int fd;
13 int length;
14
15 fd = open(attr_path, O_WRONLY);
16 if (fd < 0) {
17 dbg("error opening attribute %s", attr_path);
18 return -1;
19 }
20
21 length = write(fd, new_value, len);
22 if (length < 0) {
23 dbg("error writing to attribute %s", attr_path);
24 close(fd);
25 return -1;
26 }
27
28 close(fd);
29
30 return 0;
31}
diff --git a/drivers/staging/usbip/userspace/libsrc/sysfs_utils.h b/drivers/staging/usbip/userspace/libsrc/sysfs_utils.h
deleted file mode 100644
index 32ac1d105d18..000000000000
--- a/drivers/staging/usbip/userspace/libsrc/sysfs_utils.h
+++ /dev/null
@@ -1,8 +0,0 @@
1
2#ifndef __SYSFS_UTILS_H
3#define __SYSFS_UTILS_H
4
5int write_sysfs_attribute(const char *attr_path, const char *new_value,
6 size_t len);
7
8#endif
diff --git a/drivers/staging/usbip/userspace/libsrc/usbip_common.c b/drivers/staging/usbip/userspace/libsrc/usbip_common.c
deleted file mode 100644
index ac73710473de..000000000000
--- a/drivers/staging/usbip/userspace/libsrc/usbip_common.c
+++ /dev/null
@@ -1,285 +0,0 @@
1/*
2 * Copyright (C) 2005-2007 Takahiro Hirofuchi
3 */
4
5#include <libudev.h>
6#include "usbip_common.h"
7#include "names.h"
8
9#undef PROGNAME
10#define PROGNAME "libusbip"
11
12int usbip_use_syslog;
13int usbip_use_stderr;
14int usbip_use_debug;
15
16extern struct udev *udev_context;
17
18struct speed_string {
19 int num;
20 char *speed;
21 char *desc;
22};
23
24static const struct speed_string speed_strings[] = {
25 { USB_SPEED_UNKNOWN, "unknown", "Unknown Speed"},
26 { USB_SPEED_LOW, "1.5", "Low Speed(1.5Mbps)" },
27 { USB_SPEED_FULL, "12", "Full Speed(12Mbps)" },
28 { USB_SPEED_HIGH, "480", "High Speed(480Mbps)" },
29 { USB_SPEED_WIRELESS, "53.3-480", "Wireless"},
30 { USB_SPEED_SUPER, "5000", "Super Speed(5000Mbps)" },
31 { 0, NULL, NULL }
32};
33
34struct portst_string {
35 int num;
36 char *desc;
37};
38
39static struct portst_string portst_strings[] = {
40 { SDEV_ST_AVAILABLE, "Device Available" },
41 { SDEV_ST_USED, "Device in Use" },
42 { SDEV_ST_ERROR, "Device Error"},
43 { VDEV_ST_NULL, "Port Available"},
44 { VDEV_ST_NOTASSIGNED, "Port Initializing"},
45 { VDEV_ST_USED, "Port in Use"},
46 { VDEV_ST_ERROR, "Port Error"},
47 { 0, NULL}
48};
49
50const char *usbip_status_string(int32_t status)
51{
52 for (int i = 0; portst_strings[i].desc != NULL; i++)
53 if (portst_strings[i].num == status)
54 return portst_strings[i].desc;
55
56 return "Unknown Status";
57}
58
59const char *usbip_speed_string(int num)
60{
61 for (int i = 0; speed_strings[i].speed != NULL; i++)
62 if (speed_strings[i].num == num)
63 return speed_strings[i].desc;
64
65 return "Unknown Speed";
66}
67
68
69#define DBG_UDEV_INTEGER(name)\
70 dbg("%-20s = %x", to_string(name), (int) udev->name)
71
72#define DBG_UINF_INTEGER(name)\
73 dbg("%-20s = %x", to_string(name), (int) uinf->name)
74
75void dump_usb_interface(struct usbip_usb_interface *uinf)
76{
77 char buff[100];
78
79 usbip_names_get_class(buff, sizeof(buff),
80 uinf->bInterfaceClass,
81 uinf->bInterfaceSubClass,
82 uinf->bInterfaceProtocol);
83 dbg("%-20s = %s", "Interface(C/SC/P)", buff);
84}
85
86void dump_usb_device(struct usbip_usb_device *udev)
87{
88 char buff[100];
89
90 dbg("%-20s = %s", "path", udev->path);
91 dbg("%-20s = %s", "busid", udev->busid);
92
93 usbip_names_get_class(buff, sizeof(buff),
94 udev->bDeviceClass,
95 udev->bDeviceSubClass,
96 udev->bDeviceProtocol);
97 dbg("%-20s = %s", "Device(C/SC/P)", buff);
98
99 DBG_UDEV_INTEGER(bcdDevice);
100
101 usbip_names_get_product(buff, sizeof(buff),
102 udev->idVendor,
103 udev->idProduct);
104 dbg("%-20s = %s", "Vendor/Product", buff);
105
106 DBG_UDEV_INTEGER(bNumConfigurations);
107 DBG_UDEV_INTEGER(bNumInterfaces);
108
109 dbg("%-20s = %s", "speed",
110 usbip_speed_string(udev->speed));
111
112 DBG_UDEV_INTEGER(busnum);
113 DBG_UDEV_INTEGER(devnum);
114}
115
116
117int read_attr_value(struct udev_device *dev, const char *name,
118 const char *format)
119{
120 const char *attr;
121 int num = 0;
122 int ret;
123
124 attr = udev_device_get_sysattr_value(dev, name);
125 if (!attr) {
126 err("udev_device_get_sysattr_value failed");
127 goto err;
128 }
129
130 /* The client chooses the device configuration
131 * when attaching it so right after being bound
132 * to usbip-host on the server the device will
133 * have no configuration.
134 * Therefore, attributes such as bConfigurationValue
135 * and bNumInterfaces will not exist and sscanf will
136 * fail. Check for these cases and don't treat them
137 * as errors.
138 */
139
140 ret = sscanf(attr, format, &num);
141 if (ret < 1) {
142 if (strcmp(name, "bConfigurationValue") &&
143 strcmp(name, "bNumInterfaces")) {
144 err("sscanf failed for attribute %s", name);
145 goto err;
146 }
147 }
148
149err:
150
151 return num;
152}
153
154
155int read_attr_speed(struct udev_device *dev)
156{
157 const char *speed;
158
159 speed = udev_device_get_sysattr_value(dev, "speed");
160 if (!speed) {
161 err("udev_device_get_sysattr_value failed");
162 goto err;
163 }
164
165 for (int i = 0; speed_strings[i].speed != NULL; i++) {
166 if (!strcmp(speed, speed_strings[i].speed))
167 return speed_strings[i].num;
168 }
169
170err:
171
172 return USB_SPEED_UNKNOWN;
173}
174
175#define READ_ATTR(object, type, dev, name, format) \
176 do { \
177 (object)->name = (type) read_attr_value(dev, to_string(name), \
178 format); \
179 } while (0)
180
181
182int read_usb_device(struct udev_device *sdev, struct usbip_usb_device *udev)
183{
184 uint32_t busnum, devnum;
185 const char *path, *name;
186
187 READ_ATTR(udev, uint8_t, sdev, bDeviceClass, "%02x\n");
188 READ_ATTR(udev, uint8_t, sdev, bDeviceSubClass, "%02x\n");
189 READ_ATTR(udev, uint8_t, sdev, bDeviceProtocol, "%02x\n");
190
191 READ_ATTR(udev, uint16_t, sdev, idVendor, "%04x\n");
192 READ_ATTR(udev, uint16_t, sdev, idProduct, "%04x\n");
193 READ_ATTR(udev, uint16_t, sdev, bcdDevice, "%04x\n");
194
195 READ_ATTR(udev, uint8_t, sdev, bConfigurationValue, "%02x\n");
196 READ_ATTR(udev, uint8_t, sdev, bNumConfigurations, "%02x\n");
197 READ_ATTR(udev, uint8_t, sdev, bNumInterfaces, "%02x\n");
198
199 READ_ATTR(udev, uint8_t, sdev, devnum, "%d\n");
200 udev->speed = read_attr_speed(sdev);
201
202 path = udev_device_get_syspath(sdev);
203 name = udev_device_get_sysname(sdev);
204
205 strncpy(udev->path, path, SYSFS_PATH_MAX);
206 strncpy(udev->busid, name, SYSFS_BUS_ID_SIZE);
207
208 sscanf(name, "%u-%u", &busnum, &devnum);
209 udev->busnum = busnum;
210
211 return 0;
212}
213
214int read_usb_interface(struct usbip_usb_device *udev, int i,
215 struct usbip_usb_interface *uinf)
216{
217 char busid[SYSFS_BUS_ID_SIZE];
218 struct udev_device *sif;
219
220 sprintf(busid, "%s:%d.%d", udev->busid, udev->bConfigurationValue, i);
221
222 sif = udev_device_new_from_subsystem_sysname(udev_context, "usb", busid);
223 if (!sif) {
224 err("udev_device_new_from_subsystem_sysname %s failed", busid);
225 return -1;
226 }
227
228 READ_ATTR(uinf, uint8_t, sif, bInterfaceClass, "%02x\n");
229 READ_ATTR(uinf, uint8_t, sif, bInterfaceSubClass, "%02x\n");
230 READ_ATTR(uinf, uint8_t, sif, bInterfaceProtocol, "%02x\n");
231
232 return 0;
233}
234
235int usbip_names_init(char *f)
236{
237 return names_init(f);
238}
239
240void usbip_names_free(void)
241{
242 names_free();
243}
244
245void usbip_names_get_product(char *buff, size_t size, uint16_t vendor,
246 uint16_t product)
247{
248 const char *prod, *vend;
249
250 prod = names_product(vendor, product);
251 if (!prod)
252 prod = "unknown product";
253
254
255 vend = names_vendor(vendor);
256 if (!vend)
257 vend = "unknown vendor";
258
259 snprintf(buff, size, "%s : %s (%04x:%04x)", vend, prod, vendor, product);
260}
261
262void usbip_names_get_class(char *buff, size_t size, uint8_t class,
263 uint8_t subclass, uint8_t protocol)
264{
265 const char *c, *s, *p;
266
267 if (class == 0 && subclass == 0 && protocol == 0) {
268 snprintf(buff, size, "(Defined at Interface level) (%02x/%02x/%02x)", class, subclass, protocol);
269 return;
270 }
271
272 p = names_protocol(class, subclass, protocol);
273 if (!p)
274 p = "unknown protocol";
275
276 s = names_subclass(class, subclass);
277 if (!s)
278 s = "unknown subclass";
279
280 c = names_class(class);
281 if (!c)
282 c = "unknown class";
283
284 snprintf(buff, size, "%s / %s / %s (%02x/%02x/%02x)", c, s, p, class, subclass, protocol);
285}
diff --git a/drivers/staging/usbip/userspace/libsrc/usbip_common.h b/drivers/staging/usbip/userspace/libsrc/usbip_common.h
deleted file mode 100644
index 5a0e95edf4df..000000000000
--- a/drivers/staging/usbip/userspace/libsrc/usbip_common.h
+++ /dev/null
@@ -1,137 +0,0 @@
1/*
2 * Copyright (C) 2005-2007 Takahiro Hirofuchi
3 */
4
5#ifndef __USBIP_COMMON_H
6#define __USBIP_COMMON_H
7
8#include <libudev.h>
9
10#include <stdint.h>
11#include <stdio.h>
12#include <stdlib.h>
13#include <string.h>
14
15#include <syslog.h>
16#include <unistd.h>
17#include <linux/usb/ch9.h>
18#include "../../uapi/usbip.h"
19
20#ifndef USBIDS_FILE
21#define USBIDS_FILE "/usr/share/hwdata/usb.ids"
22#endif
23
24#ifndef VHCI_STATE_PATH
25#define VHCI_STATE_PATH "/var/run/vhci_hcd"
26#endif
27
28/* kernel module names */
29#define USBIP_CORE_MOD_NAME "usbip-core"
30#define USBIP_HOST_DRV_NAME "usbip-host"
31#define USBIP_VHCI_DRV_NAME "vhci_hcd"
32
33/* sysfs constants */
34#define SYSFS_MNT_PATH "/sys"
35#define SYSFS_BUS_NAME "bus"
36#define SYSFS_BUS_TYPE "usb"
37#define SYSFS_DRIVERS_NAME "drivers"
38
39#define SYSFS_PATH_MAX 256
40#define SYSFS_BUS_ID_SIZE 32
41
42extern int usbip_use_syslog;
43extern int usbip_use_stderr;
44extern int usbip_use_debug ;
45
46#define PROGNAME "usbip"
47
48#define pr_fmt(fmt) "%s: %s: " fmt "\n", PROGNAME
49#define dbg_fmt(fmt) pr_fmt("%s:%d:[%s] " fmt), "debug", \
50 __FILE__, __LINE__, __func__
51
52#define err(fmt, args...) \
53 do { \
54 if (usbip_use_syslog) { \
55 syslog(LOG_ERR, pr_fmt(fmt), "error", ##args); \
56 } \
57 if (usbip_use_stderr) { \
58 fprintf(stderr, pr_fmt(fmt), "error", ##args); \
59 } \
60 } while (0)
61
62#define info(fmt, args...) \
63 do { \
64 if (usbip_use_syslog) { \
65 syslog(LOG_INFO, pr_fmt(fmt), "info", ##args); \
66 } \
67 if (usbip_use_stderr) { \
68 fprintf(stderr, pr_fmt(fmt), "info", ##args); \
69 } \
70 } while (0)
71
72#define dbg(fmt, args...) \
73 do { \
74 if (usbip_use_debug) { \
75 if (usbip_use_syslog) { \
76 syslog(LOG_DEBUG, dbg_fmt(fmt), ##args); \
77 } \
78 if (usbip_use_stderr) { \
79 fprintf(stderr, dbg_fmt(fmt), ##args); \
80 } \
81 } \
82 } while (0)
83
84#define BUG() \
85 do { \
86 err("sorry, it's a bug!"); \
87 abort(); \
88 } while (0)
89
90struct usbip_usb_interface {
91 uint8_t bInterfaceClass;
92 uint8_t bInterfaceSubClass;
93 uint8_t bInterfaceProtocol;
94 uint8_t padding; /* alignment */
95} __attribute__((packed));
96
97struct usbip_usb_device {
98 char path[SYSFS_PATH_MAX];
99 char busid[SYSFS_BUS_ID_SIZE];
100
101 uint32_t busnum;
102 uint32_t devnum;
103 uint32_t speed;
104
105 uint16_t idVendor;
106 uint16_t idProduct;
107 uint16_t bcdDevice;
108
109 uint8_t bDeviceClass;
110 uint8_t bDeviceSubClass;
111 uint8_t bDeviceProtocol;
112 uint8_t bConfigurationValue;
113 uint8_t bNumConfigurations;
114 uint8_t bNumInterfaces;
115} __attribute__((packed));
116
117#define to_string(s) #s
118
119void dump_usb_interface(struct usbip_usb_interface *);
120void dump_usb_device(struct usbip_usb_device *);
121int read_usb_device(struct udev_device *sdev, struct usbip_usb_device *udev);
122int read_attr_value(struct udev_device *dev, const char *name,
123 const char *format);
124int read_usb_interface(struct usbip_usb_device *udev, int i,
125 struct usbip_usb_interface *uinf);
126
127const char *usbip_speed_string(int num);
128const char *usbip_status_string(int32_t status);
129
130int usbip_names_init(char *);
131void usbip_names_free(void);
132void usbip_names_get_product(char *buff, size_t size, uint16_t vendor,
133 uint16_t product);
134void usbip_names_get_class(char *buff, size_t size, uint8_t class,
135 uint8_t subclass, uint8_t protocol);
136
137#endif /* __USBIP_COMMON_H */
diff --git a/drivers/staging/usbip/userspace/libsrc/usbip_host_driver.c b/drivers/staging/usbip/userspace/libsrc/usbip_host_driver.c
deleted file mode 100644
index bef08d5c44e8..000000000000
--- a/drivers/staging/usbip/userspace/libsrc/usbip_host_driver.c
+++ /dev/null
@@ -1,280 +0,0 @@
1/*
2 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
3 * 2005-2007 Takahiro Hirofuchi
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#include <sys/types.h>
20#include <sys/stat.h>
21#include <fcntl.h>
22
23#include <errno.h>
24#include <unistd.h>
25
26#include <libudev.h>
27
28#include "usbip_common.h"
29#include "usbip_host_driver.h"
30#include "list.h"
31#include "sysfs_utils.h"
32
33#undef PROGNAME
34#define PROGNAME "libusbip"
35
36struct usbip_host_driver *host_driver;
37struct udev *udev_context;
38
39static int32_t read_attr_usbip_status(struct usbip_usb_device *udev)
40{
41 char status_attr_path[SYSFS_PATH_MAX];
42 int fd;
43 int length;
44 char status;
45 int value = 0;
46
47 snprintf(status_attr_path, SYSFS_PATH_MAX, "%s/usbip_status",
48 udev->path);
49
50 fd = open(status_attr_path, O_RDONLY);
51 if (fd < 0) {
52 err("error opening attribute %s", status_attr_path);
53 return -1;
54 }
55
56 length = read(fd, &status, 1);
57 if (length < 0) {
58 err("error reading attribute %s", status_attr_path);
59 close(fd);
60 return -1;
61 }
62
63 value = atoi(&status);
64
65 return value;
66}
67
68static
69struct usbip_exported_device *usbip_exported_device_new(const char *sdevpath)
70{
71 struct usbip_exported_device *edev = NULL;
72 struct usbip_exported_device *edev_old;
73 size_t size;
74 int i;
75
76 edev = calloc(1, sizeof(struct usbip_exported_device));
77
78 edev->sudev = udev_device_new_from_syspath(udev_context, sdevpath);
79 if (!edev->sudev) {
80 err("udev_device_new_from_syspath: %s", sdevpath);
81 goto err;
82 }
83
84 read_usb_device(edev->sudev, &edev->udev);
85
86 edev->status = read_attr_usbip_status(&edev->udev);
87 if (edev->status < 0)
88 goto err;
89
90 /* reallocate buffer to include usb interface data */
91 size = sizeof(struct usbip_exported_device) +
92 edev->udev.bNumInterfaces * sizeof(struct usbip_usb_interface);
93
94 edev_old = edev;
95 edev = realloc(edev, size);
96 if (!edev) {
97 edev = edev_old;
98 dbg("realloc failed");
99 goto err;
100 }
101
102 for (i = 0; i < edev->udev.bNumInterfaces; i++)
103 read_usb_interface(&edev->udev, i, &edev->uinf[i]);
104
105 return edev;
106err:
107 if (edev->sudev)
108 udev_device_unref(edev->sudev);
109 if (edev)
110 free(edev);
111
112 return NULL;
113}
114
115static int refresh_exported_devices(void)
116{
117 struct usbip_exported_device *edev;
118 struct udev_enumerate *enumerate;
119 struct udev_list_entry *devices, *dev_list_entry;
120 struct udev_device *dev;
121 const char *path;
122 const char *driver;
123
124 enumerate = udev_enumerate_new(udev_context);
125 udev_enumerate_add_match_subsystem(enumerate, "usb");
126 udev_enumerate_scan_devices(enumerate);
127
128 devices = udev_enumerate_get_list_entry(enumerate);
129
130 udev_list_entry_foreach(dev_list_entry, devices) {
131 path = udev_list_entry_get_name(dev_list_entry);
132 dev = udev_device_new_from_syspath(udev_context, path);
133 if (dev == NULL)
134 continue;
135
136 /* Check whether device uses usbip-host driver. */
137 driver = udev_device_get_driver(dev);
138 if (driver != NULL && !strcmp(driver, USBIP_HOST_DRV_NAME)) {
139 edev = usbip_exported_device_new(path);
140 if (!edev) {
141 dbg("usbip_exported_device_new failed");
142 continue;
143 }
144
145 list_add(&edev->node, &host_driver->edev_list);
146 host_driver->ndevs++;
147 }
148 }
149
150 return 0;
151}
152
153static void usbip_exported_device_destroy(void)
154{
155 struct list_head *i, *tmp;
156 struct usbip_exported_device *edev;
157
158 list_for_each_safe(i, tmp, &host_driver->edev_list) {
159 edev = list_entry(i, struct usbip_exported_device, node);
160 list_del(i);
161 free(edev);
162 }
163}
164
165int usbip_host_driver_open(void)
166{
167 int rc;
168
169 udev_context = udev_new();
170 if (!udev_context) {
171 err("udev_new failed");
172 return -1;
173 }
174
175 host_driver = calloc(1, sizeof(*host_driver));
176
177 host_driver->ndevs = 0;
178 INIT_LIST_HEAD(&host_driver->edev_list);
179
180 rc = refresh_exported_devices();
181 if (rc < 0)
182 goto err_free_host_driver;
183
184 return 0;
185
186err_free_host_driver:
187 free(host_driver);
188 host_driver = NULL;
189
190 udev_unref(udev_context);
191
192 return -1;
193}
194
195void usbip_host_driver_close(void)
196{
197 if (!host_driver)
198 return;
199
200 usbip_exported_device_destroy();
201
202 free(host_driver);
203 host_driver = NULL;
204
205 udev_unref(udev_context);
206}
207
208int usbip_host_refresh_device_list(void)
209{
210 int rc;
211
212 usbip_exported_device_destroy();
213
214 host_driver->ndevs = 0;
215 INIT_LIST_HEAD(&host_driver->edev_list);
216
217 rc = refresh_exported_devices();
218 if (rc < 0)
219 return -1;
220
221 return 0;
222}
223
224int usbip_host_export_device(struct usbip_exported_device *edev, int sockfd)
225{
226 char attr_name[] = "usbip_sockfd";
227 char sockfd_attr_path[SYSFS_PATH_MAX];
228 char sockfd_buff[30];
229 int ret;
230
231 if (edev->status != SDEV_ST_AVAILABLE) {
232 dbg("device not available: %s", edev->udev.busid);
233 switch (edev->status) {
234 case SDEV_ST_ERROR:
235 dbg("status SDEV_ST_ERROR");
236 break;
237 case SDEV_ST_USED:
238 dbg("status SDEV_ST_USED");
239 break;
240 default:
241 dbg("status unknown: 0x%x", edev->status);
242 }
243 return -1;
244 }
245
246 /* only the first interface is true */
247 snprintf(sockfd_attr_path, sizeof(sockfd_attr_path), "%s/%s",
248 edev->udev.path, attr_name);
249
250 snprintf(sockfd_buff, sizeof(sockfd_buff), "%d\n", sockfd);
251
252 ret = write_sysfs_attribute(sockfd_attr_path, sockfd_buff,
253 strlen(sockfd_buff));
254 if (ret < 0) {
255 err("write_sysfs_attribute failed: sockfd %s to %s",
256 sockfd_buff, sockfd_attr_path);
257 return ret;
258 }
259
260 info("connect: %s", edev->udev.busid);
261
262 return ret;
263}
264
265struct usbip_exported_device *usbip_host_get_device(int num)
266{
267 struct list_head *i;
268 struct usbip_exported_device *edev;
269 int cnt = 0;
270
271 list_for_each(i, &host_driver->edev_list) {
272 edev = list_entry(i, struct usbip_exported_device, node);
273 if (num == cnt)
274 return edev;
275 else
276 cnt++;
277 }
278
279 return NULL;
280}
diff --git a/drivers/staging/usbip/userspace/libsrc/usbip_host_driver.h b/drivers/staging/usbip/userspace/libsrc/usbip_host_driver.h
deleted file mode 100644
index 2a31f855c616..000000000000
--- a/drivers/staging/usbip/userspace/libsrc/usbip_host_driver.h
+++ /dev/null
@@ -1,49 +0,0 @@
1/*
2 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
3 * 2005-2007 Takahiro Hirofuchi
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef __USBIP_HOST_DRIVER_H
20#define __USBIP_HOST_DRIVER_H
21
22#include <stdint.h>
23#include "usbip_common.h"
24#include "list.h"
25
26struct usbip_host_driver {
27 int ndevs;
28 /* list of exported device */
29 struct list_head edev_list;
30};
31
32struct usbip_exported_device {
33 struct udev_device *sudev;
34 int32_t status;
35 struct usbip_usb_device udev;
36 struct list_head node;
37 struct usbip_usb_interface uinf[];
38};
39
40extern struct usbip_host_driver *host_driver;
41
42int usbip_host_driver_open(void);
43void usbip_host_driver_close(void);
44
45int usbip_host_refresh_device_list(void);
46int usbip_host_export_device(struct usbip_exported_device *edev, int sockfd);
47struct usbip_exported_device *usbip_host_get_device(int num);
48
49#endif /* __USBIP_HOST_DRIVER_H */
diff --git a/drivers/staging/usbip/userspace/libsrc/vhci_driver.c b/drivers/staging/usbip/userspace/libsrc/vhci_driver.c
deleted file mode 100644
index ad9204773533..000000000000
--- a/drivers/staging/usbip/userspace/libsrc/vhci_driver.c
+++ /dev/null
@@ -1,411 +0,0 @@
1/*
2 * Copyright (C) 2005-2007 Takahiro Hirofuchi
3 */
4
5#include "usbip_common.h"
6#include "vhci_driver.h"
7#include <limits.h>
8#include <netdb.h>
9#include <libudev.h>
10#include "sysfs_utils.h"
11
12#undef PROGNAME
13#define PROGNAME "libusbip"
14
15struct usbip_vhci_driver *vhci_driver;
16struct udev *udev_context;
17
18static struct usbip_imported_device *
19imported_device_init(struct usbip_imported_device *idev, char *busid)
20{
21 struct udev_device *sudev;
22
23 sudev = udev_device_new_from_subsystem_sysname(udev_context,
24 "usb", busid);
25 if (!sudev) {
26 dbg("udev_device_new_from_subsystem_sysname failed: %s", busid);
27 goto err;
28 }
29 read_usb_device(sudev, &idev->udev);
30 udev_device_unref(sudev);
31
32 return idev;
33
34err:
35 return NULL;
36}
37
38
39
40static int parse_status(const char *value)
41{
42 int ret = 0;
43 char *c;
44
45
46 for (int i = 0; i < vhci_driver->nports; i++)
47 memset(&vhci_driver->idev[i], 0, sizeof(vhci_driver->idev[i]));
48
49
50 /* skip a header line */
51 c = strchr(value, '\n');
52 if (!c)
53 return -1;
54 c++;
55
56 while (*c != '\0') {
57 int port, status, speed, devid;
58 unsigned long socket;
59 char lbusid[SYSFS_BUS_ID_SIZE];
60
61 ret = sscanf(c, "%d %d %d %x %lx %31s\n",
62 &port, &status, &speed,
63 &devid, &socket, lbusid);
64
65 if (ret < 5) {
66 dbg("sscanf failed: %d", ret);
67 BUG();
68 }
69
70 dbg("port %d status %d speed %d devid %x",
71 port, status, speed, devid);
72 dbg("socket %lx lbusid %s", socket, lbusid);
73
74
75 /* if a device is connected, look at it */
76 {
77 struct usbip_imported_device *idev = &vhci_driver->idev[port];
78
79 idev->port = port;
80 idev->status = status;
81
82 idev->devid = devid;
83
84 idev->busnum = (devid >> 16);
85 idev->devnum = (devid & 0x0000ffff);
86
87 if (idev->status != VDEV_ST_NULL
88 && idev->status != VDEV_ST_NOTASSIGNED) {
89 idev = imported_device_init(idev, lbusid);
90 if (!idev) {
91 dbg("imported_device_init failed");
92 return -1;
93 }
94 }
95 }
96
97
98 /* go to the next line */
99 c = strchr(c, '\n');
100 if (!c)
101 break;
102 c++;
103 }
104
105 dbg("exit");
106
107 return 0;
108}
109
110static int refresh_imported_device_list(void)
111{
112 const char *attr_status;
113
114 attr_status = udev_device_get_sysattr_value(vhci_driver->hc_device,
115 "status");
116 if (!attr_status) {
117 err("udev_device_get_sysattr_value failed");
118 return -1;
119 }
120
121 return parse_status(attr_status);
122}
123
124static int get_nports(void)
125{
126 char *c;
127 int nports = 0;
128 const char *attr_status;
129
130 attr_status = udev_device_get_sysattr_value(vhci_driver->hc_device,
131 "status");
132 if (!attr_status) {
133 err("udev_device_get_sysattr_value failed");
134 return -1;
135 }
136
137 /* skip a header line */
138 c = strchr(attr_status, '\n');
139 if (!c)
140 return 0;
141 c++;
142
143 while (*c != '\0') {
144 /* go to the next line */
145 c = strchr(c, '\n');
146 if (!c)
147 return nports;
148 c++;
149 nports += 1;
150 }
151
152 return nports;
153}
154
155/*
156 * Read the given port's record.
157 *
158 * To avoid buffer overflow we will read the entire line and
159 * validate each part's size. The initial buffer is padded by 4 to
160 * accommodate the 2 spaces, 1 newline and an additional character
161 * which is needed to properly validate the 3rd part without it being
162 * truncated to an acceptable length.
163 */
164static int read_record(int rhport, char *host, unsigned long host_len,
165 char *port, unsigned long port_len, char *busid)
166{
167 int part;
168 FILE *file;
169 char path[PATH_MAX+1];
170 char *buffer, *start, *end;
171 char delim[] = {' ', ' ', '\n'};
172 int max_len[] = {(int)host_len, (int)port_len, SYSFS_BUS_ID_SIZE};
173 size_t buffer_len = host_len + port_len + SYSFS_BUS_ID_SIZE + 4;
174
175 buffer = malloc(buffer_len);
176 if (!buffer)
177 return -1;
178
179 snprintf(path, PATH_MAX, VHCI_STATE_PATH"/port%d", rhport);
180
181 file = fopen(path, "r");
182 if (!file) {
183 err("fopen");
184 free(buffer);
185 return -1;
186 }
187
188 if (fgets(buffer, buffer_len, file) == NULL) {
189 err("fgets");
190 free(buffer);
191 fclose(file);
192 return -1;
193 }
194 fclose(file);
195
196 /* validate the length of each of the 3 parts */
197 start = buffer;
198 for (part = 0; part < 3; part++) {
199 end = strchr(start, delim[part]);
200 if (end == NULL || (end - start) > max_len[part]) {
201 free(buffer);
202 return -1;
203 }
204 start = end + 1;
205 }
206
207 if (sscanf(buffer, "%s %s %s\n", host, port, busid) != 3) {
208 err("sscanf");
209 free(buffer);
210 return -1;
211 }
212
213 free(buffer);
214
215 return 0;
216}
217
218/* ---------------------------------------------------------------------- */
219
220int usbip_vhci_driver_open(void)
221{
222 udev_context = udev_new();
223 if (!udev_context) {
224 err("udev_new failed");
225 return -1;
226 }
227
228 vhci_driver = calloc(1, sizeof(struct usbip_vhci_driver));
229
230 /* will be freed in usbip_driver_close() */
231 vhci_driver->hc_device =
232 udev_device_new_from_subsystem_sysname(udev_context,
233 USBIP_VHCI_BUS_TYPE,
234 USBIP_VHCI_DRV_NAME);
235 if (!vhci_driver->hc_device) {
236 err("udev_device_new_from_subsystem_sysname failed");
237 goto err;
238 }
239
240 vhci_driver->nports = get_nports();
241
242 dbg("available ports: %d", vhci_driver->nports);
243
244 if (refresh_imported_device_list())
245 goto err;
246
247 return 0;
248
249err:
250 udev_device_unref(vhci_driver->hc_device);
251
252 if (vhci_driver)
253 free(vhci_driver);
254
255 vhci_driver = NULL;
256
257 udev_unref(udev_context);
258
259 return -1;
260}
261
262
263void usbip_vhci_driver_close(void)
264{
265 if (!vhci_driver)
266 return;
267
268 udev_device_unref(vhci_driver->hc_device);
269
270 free(vhci_driver);
271
272 vhci_driver = NULL;
273
274 udev_unref(udev_context);
275}
276
277
278int usbip_vhci_refresh_device_list(void)
279{
280
281 if (refresh_imported_device_list())
282 goto err;
283
284 return 0;
285err:
286 dbg("failed to refresh device list");
287 return -1;
288}
289
290
291int usbip_vhci_get_free_port(void)
292{
293 for (int i = 0; i < vhci_driver->nports; i++) {
294 if (vhci_driver->idev[i].status == VDEV_ST_NULL)
295 return i;
296 }
297
298 return -1;
299}
300
301int usbip_vhci_attach_device2(uint8_t port, int sockfd, uint32_t devid,
302 uint32_t speed) {
303 char buff[200]; /* what size should be ? */
304 char attach_attr_path[SYSFS_PATH_MAX];
305 char attr_attach[] = "attach";
306 const char *path;
307 int ret;
308
309 snprintf(buff, sizeof(buff), "%u %d %u %u",
310 port, sockfd, devid, speed);
311 dbg("writing: %s", buff);
312
313 path = udev_device_get_syspath(vhci_driver->hc_device);
314 snprintf(attach_attr_path, sizeof(attach_attr_path), "%s/%s",
315 path, attr_attach);
316 dbg("attach attribute path: %s", attach_attr_path);
317
318 ret = write_sysfs_attribute(attach_attr_path, buff, strlen(buff));
319 if (ret < 0) {
320 dbg("write_sysfs_attribute failed");
321 return -1;
322 }
323
324 dbg("attached port: %d", port);
325
326 return 0;
327}
328
329static unsigned long get_devid(uint8_t busnum, uint8_t devnum)
330{
331 return (busnum << 16) | devnum;
332}
333
334/* will be removed */
335int usbip_vhci_attach_device(uint8_t port, int sockfd, uint8_t busnum,
336 uint8_t devnum, uint32_t speed)
337{
338 int devid = get_devid(busnum, devnum);
339
340 return usbip_vhci_attach_device2(port, sockfd, devid, speed);
341}
342
343int usbip_vhci_detach_device(uint8_t port)
344{
345 char detach_attr_path[SYSFS_PATH_MAX];
346 char attr_detach[] = "detach";
347 char buff[200]; /* what size should be ? */
348 const char *path;
349 int ret;
350
351 snprintf(buff, sizeof(buff), "%u", port);
352 dbg("writing: %s", buff);
353
354 path = udev_device_get_syspath(vhci_driver->hc_device);
355 snprintf(detach_attr_path, sizeof(detach_attr_path), "%s/%s",
356 path, attr_detach);
357 dbg("detach attribute path: %s", detach_attr_path);
358
359 ret = write_sysfs_attribute(detach_attr_path, buff, strlen(buff));
360 if (ret < 0) {
361 dbg("write_sysfs_attribute failed");
362 return -1;
363 }
364
365 dbg("detached port: %d", port);
366
367 return 0;
368}
369
370int usbip_vhci_imported_device_dump(struct usbip_imported_device *idev)
371{
372 char product_name[100];
373 char host[NI_MAXHOST] = "unknown host";
374 char serv[NI_MAXSERV] = "unknown port";
375 char remote_busid[SYSFS_BUS_ID_SIZE];
376 int ret;
377 int read_record_error = 0;
378
379 if (idev->status == VDEV_ST_NULL || idev->status == VDEV_ST_NOTASSIGNED)
380 return 0;
381
382 ret = read_record(idev->port, host, sizeof(host), serv, sizeof(serv),
383 remote_busid);
384 if (ret) {
385 err("read_record");
386 read_record_error = 1;
387 }
388
389 printf("Port %02d: <%s> at %s\n", idev->port,
390 usbip_status_string(idev->status),
391 usbip_speed_string(idev->udev.speed));
392
393 usbip_names_get_product(product_name, sizeof(product_name),
394 idev->udev.idVendor, idev->udev.idProduct);
395
396 printf(" %s\n", product_name);
397
398 if (!read_record_error) {
399 printf("%10s -> usbip://%s:%s/%s\n", idev->udev.busid,
400 host, serv, remote_busid);
401 printf("%10s -> remote bus/dev %03d/%03d\n", " ",
402 idev->busnum, idev->devnum);
403 } else {
404 printf("%10s -> unknown host, remote port and remote busid\n",
405 idev->udev.busid);
406 printf("%10s -> remote bus/dev %03d/%03d\n", " ",
407 idev->busnum, idev->devnum);
408 }
409
410 return 0;
411}
diff --git a/drivers/staging/usbip/userspace/libsrc/vhci_driver.h b/drivers/staging/usbip/userspace/libsrc/vhci_driver.h
deleted file mode 100644
index fa2316cf2cac..000000000000
--- a/drivers/staging/usbip/userspace/libsrc/vhci_driver.h
+++ /dev/null
@@ -1,59 +0,0 @@
1/*
2 * Copyright (C) 2005-2007 Takahiro Hirofuchi
3 */
4
5#ifndef __VHCI_DRIVER_H
6#define __VHCI_DRIVER_H
7
8#include <libudev.h>
9#include <stdint.h>
10
11#include "usbip_common.h"
12
13#define USBIP_VHCI_BUS_TYPE "platform"
14#define MAXNPORT 128
15
16struct usbip_imported_device {
17 uint8_t port;
18 uint32_t status;
19
20 uint32_t devid;
21
22 uint8_t busnum;
23 uint8_t devnum;
24
25 /* usbip_class_device list */
26 struct usbip_usb_device udev;
27};
28
29struct usbip_vhci_driver {
30
31 /* /sys/devices/platform/vhci_hcd */
32 struct udev_device *hc_device;
33
34 int nports;
35 struct usbip_imported_device idev[MAXNPORT];
36};
37
38
39extern struct usbip_vhci_driver *vhci_driver;
40
41int usbip_vhci_driver_open(void);
42void usbip_vhci_driver_close(void);
43
44int usbip_vhci_refresh_device_list(void);
45
46
47int usbip_vhci_get_free_port(void);
48int usbip_vhci_attach_device2(uint8_t port, int sockfd, uint32_t devid,
49 uint32_t speed);
50
51/* will be removed */
52int usbip_vhci_attach_device(uint8_t port, int sockfd, uint8_t busnum,
53 uint8_t devnum, uint32_t speed);
54
55int usbip_vhci_detach_device(uint8_t port);
56
57int usbip_vhci_imported_device_dump(struct usbip_imported_device *idev);
58
59#endif /* __VHCI_DRIVER_H */
diff --git a/drivers/staging/usbip/userspace/src/Makefile.am b/drivers/staging/usbip/userspace/src/Makefile.am
deleted file mode 100644
index e81a4ebadeff..000000000000
--- a/drivers/staging/usbip/userspace/src/Makefile.am
+++ /dev/null
@@ -1,11 +0,0 @@
1AM_CPPFLAGS = -I$(top_srcdir)/libsrc -DUSBIDS_FILE='"@USBIDS_DIR@/usb.ids"'
2AM_CFLAGS = @EXTRA_CFLAGS@
3LDADD = $(top_builddir)/libsrc/libusbip.la
4
5sbin_PROGRAMS := usbip usbipd
6
7usbip_SOURCES := usbip.h utils.h usbip.c utils.c usbip_network.c \
8 usbip_attach.c usbip_detach.c usbip_list.c \
9 usbip_bind.c usbip_unbind.c usbip_port.c
10
11usbipd_SOURCES := usbip_network.h usbipd.c usbip_network.c
diff --git a/drivers/staging/usbip/userspace/src/usbip.c b/drivers/staging/usbip/userspace/src/usbip.c
deleted file mode 100644
index d7599d943529..000000000000
--- a/drivers/staging/usbip/userspace/src/usbip.c
+++ /dev/null
@@ -1,201 +0,0 @@
1/*
2 * command structure borrowed from udev
3 * (git://git.kernel.org/pub/scm/linux/hotplug/udev.git)
4 *
5 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
6 * 2005-2007 Takahiro Hirofuchi
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22#include <stdio.h>
23#include <stdlib.h>
24
25#include <getopt.h>
26#include <syslog.h>
27
28#include "usbip_common.h"
29#include "usbip_network.h"
30#include "usbip.h"
31
32static int usbip_help(int argc, char *argv[]);
33static int usbip_version(int argc, char *argv[]);
34
35static const char usbip_version_string[] = PACKAGE_STRING;
36
37static const char usbip_usage_string[] =
38 "usbip [--debug] [--log] [--tcp-port PORT] [version]\n"
39 " [help] <command> <args>\n";
40
41static void usbip_usage(void)
42{
43 printf("usage: %s", usbip_usage_string);
44}
45
46struct command {
47 const char *name;
48 int (*fn)(int argc, char *argv[]);
49 const char *help;
50 void (*usage)(void);
51};
52
53static const struct command cmds[] = {
54 {
55 .name = "help",
56 .fn = usbip_help,
57 .help = NULL,
58 .usage = NULL
59 },
60 {
61 .name = "version",
62 .fn = usbip_version,
63 .help = NULL,
64 .usage = NULL
65 },
66 {
67 .name = "attach",
68 .fn = usbip_attach,
69 .help = "Attach a remote USB device",
70 .usage = usbip_attach_usage
71 },
72 {
73 .name = "detach",
74 .fn = usbip_detach,
75 .help = "Detach a remote USB device",
76 .usage = usbip_detach_usage
77 },
78 {
79 .name = "list",
80 .fn = usbip_list,
81 .help = "List exportable or local USB devices",
82 .usage = usbip_list_usage
83 },
84 {
85 .name = "bind",
86 .fn = usbip_bind,
87 .help = "Bind device to " USBIP_HOST_DRV_NAME ".ko",
88 .usage = usbip_bind_usage
89 },
90 {
91 .name = "unbind",
92 .fn = usbip_unbind,
93 .help = "Unbind device from " USBIP_HOST_DRV_NAME ".ko",
94 .usage = usbip_unbind_usage
95 },
96 {
97 .name = "port",
98 .fn = usbip_port_show,
99 .help = "Show imported USB devices",
100 .usage = NULL
101 },
102 { NULL, NULL, NULL, NULL }
103};
104
105static int usbip_help(int argc, char *argv[])
106{
107 const struct command *cmd;
108 int i;
109 int ret = 0;
110
111 if (argc > 1 && argv++) {
112 for (i = 0; cmds[i].name != NULL; i++)
113 if (!strcmp(cmds[i].name, argv[0]) && cmds[i].usage) {
114 cmds[i].usage();
115 goto done;
116 }
117 ret = -1;
118 }
119
120 usbip_usage();
121 printf("\n");
122 for (cmd = cmds; cmd->name != NULL; cmd++)
123 if (cmd->help != NULL)
124 printf(" %-10s %s\n", cmd->name, cmd->help);
125 printf("\n");
126done:
127 return ret;
128}
129
130static int usbip_version(int argc, char *argv[])
131{
132 (void) argc;
133 (void) argv;
134
135 printf(PROGNAME " (%s)\n", usbip_version_string);
136 return 0;
137}
138
139static int run_command(const struct command *cmd, int argc, char *argv[])
140{
141 dbg("running command: `%s'", cmd->name);
142 return cmd->fn(argc, argv);
143}
144
145int main(int argc, char *argv[])
146{
147 static const struct option opts[] = {
148 { "debug", no_argument, NULL, 'd' },
149 { "log", no_argument, NULL, 'l' },
150 { "tcp-port", required_argument, NULL, 't' },
151 { NULL, 0, NULL, 0 }
152 };
153
154 char *cmd;
155 int opt;
156 int i, rc = -1;
157
158 usbip_use_stderr = 1;
159 opterr = 0;
160 for (;;) {
161 opt = getopt_long(argc, argv, "+dlt:", opts, NULL);
162
163 if (opt == -1)
164 break;
165
166 switch (opt) {
167 case 'd':
168 usbip_use_debug = 1;
169 break;
170 case 'l':
171 usbip_use_syslog = 1;
172 openlog("", LOG_PID, LOG_USER);
173 break;
174 case 't':
175 usbip_setup_port_number(optarg);
176 break;
177 case '?':
178 printf("usbip: invalid option\n");
179 default:
180 usbip_usage();
181 goto out;
182 }
183 }
184
185 cmd = argv[optind];
186 if (cmd) {
187 for (i = 0; cmds[i].name != NULL; i++)
188 if (!strcmp(cmds[i].name, cmd)) {
189 argc -= optind;
190 argv += optind;
191 optind = 0;
192 rc = run_command(&cmds[i], argc, argv);
193 goto out;
194 }
195 }
196
197 /* invalid command */
198 usbip_help(0, NULL);
199out:
200 return (rc > -1 ? EXIT_SUCCESS : EXIT_FAILURE);
201}
diff --git a/drivers/staging/usbip/userspace/src/usbip.h b/drivers/staging/usbip/userspace/src/usbip.h
deleted file mode 100644
index 84fe66a9d8ad..000000000000
--- a/drivers/staging/usbip/userspace/src/usbip.h
+++ /dev/null
@@ -1,40 +0,0 @@
1/*
2 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
3 * 2005-2007 Takahiro Hirofuchi
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef __USBIP_H
20#define __USBIP_H
21
22#ifdef HAVE_CONFIG_H
23#include "../config.h"
24#endif
25
26/* usbip commands */
27int usbip_attach(int argc, char *argv[]);
28int usbip_detach(int argc, char *argv[]);
29int usbip_list(int argc, char *argv[]);
30int usbip_bind(int argc, char *argv[]);
31int usbip_unbind(int argc, char *argv[]);
32int usbip_port_show(int argc, char *argv[]);
33
34void usbip_attach_usage(void);
35void usbip_detach_usage(void);
36void usbip_list_usage(void);
37void usbip_bind_usage(void);
38void usbip_unbind_usage(void);
39
40#endif /* __USBIP_H */
diff --git a/drivers/staging/usbip/userspace/src/usbip_attach.c b/drivers/staging/usbip/userspace/src/usbip_attach.c
deleted file mode 100644
index d58a14dfc094..000000000000
--- a/drivers/staging/usbip/userspace/src/usbip_attach.c
+++ /dev/null
@@ -1,241 +0,0 @@
1/*
2 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
3 * 2005-2007 Takahiro Hirofuchi
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#include <sys/stat.h>
20
21#include <limits.h>
22#include <stdint.h>
23#include <stdio.h>
24#include <string.h>
25
26#include <fcntl.h>
27#include <getopt.h>
28#include <unistd.h>
29#include <errno.h>
30
31#include "vhci_driver.h"
32#include "usbip_common.h"
33#include "usbip_network.h"
34#include "usbip.h"
35
36static const char usbip_attach_usage_string[] =
37 "usbip attach <args>\n"
38 " -r, --remote=<host> The machine with exported USB devices\n"
39 " -b, --busid=<busid> Busid of the device on <host>\n";
40
41void usbip_attach_usage(void)
42{
43 printf("usage: %s", usbip_attach_usage_string);
44}
45
46#define MAX_BUFF 100
47static int record_connection(char *host, char *port, char *busid, int rhport)
48{
49 int fd;
50 char path[PATH_MAX+1];
51 char buff[MAX_BUFF+1];
52 int ret;
53
54 ret = mkdir(VHCI_STATE_PATH, 0700);
55 if (ret < 0) {
56 /* if VHCI_STATE_PATH exists, then it better be a directory */
57 if (errno == EEXIST) {
58 struct stat s;
59
60 ret = stat(VHCI_STATE_PATH, &s);
61 if (ret < 0)
62 return -1;
63 if (!(s.st_mode & S_IFDIR))
64 return -1;
65 } else
66 return -1;
67 }
68
69 snprintf(path, PATH_MAX, VHCI_STATE_PATH"/port%d", rhport);
70
71 fd = open(path, O_WRONLY|O_CREAT|O_TRUNC, S_IRWXU);
72 if (fd < 0)
73 return -1;
74
75 snprintf(buff, MAX_BUFF, "%s %s %s\n",
76 host, port, busid);
77
78 ret = write(fd, buff, strlen(buff));
79 if (ret != (ssize_t) strlen(buff)) {
80 close(fd);
81 return -1;
82 }
83
84 close(fd);
85
86 return 0;
87}
88
89static int import_device(int sockfd, struct usbip_usb_device *udev)
90{
91 int rc;
92 int port;
93
94 rc = usbip_vhci_driver_open();
95 if (rc < 0) {
96 err("open vhci_driver");
97 return -1;
98 }
99
100 port = usbip_vhci_get_free_port();
101 if (port < 0) {
102 err("no free port");
103 usbip_vhci_driver_close();
104 return -1;
105 }
106
107 rc = usbip_vhci_attach_device(port, sockfd, udev->busnum,
108 udev->devnum, udev->speed);
109 if (rc < 0) {
110 err("import device");
111 usbip_vhci_driver_close();
112 return -1;
113 }
114
115 usbip_vhci_driver_close();
116
117 return port;
118}
119
120static int query_import_device(int sockfd, char *busid)
121{
122 int rc;
123 struct op_import_request request;
124 struct op_import_reply reply;
125 uint16_t code = OP_REP_IMPORT;
126
127 memset(&request, 0, sizeof(request));
128 memset(&reply, 0, sizeof(reply));
129
130 /* send a request */
131 rc = usbip_net_send_op_common(sockfd, OP_REQ_IMPORT, 0);
132 if (rc < 0) {
133 err("send op_common");
134 return -1;
135 }
136
137 strncpy(request.busid, busid, SYSFS_BUS_ID_SIZE-1);
138
139 PACK_OP_IMPORT_REQUEST(0, &request);
140
141 rc = usbip_net_send(sockfd, (void *) &request, sizeof(request));
142 if (rc < 0) {
143 err("send op_import_request");
144 return -1;
145 }
146
147 /* receive a reply */
148 rc = usbip_net_recv_op_common(sockfd, &code);
149 if (rc < 0) {
150 err("recv op_common");
151 return -1;
152 }
153
154 rc = usbip_net_recv(sockfd, (void *) &reply, sizeof(reply));
155 if (rc < 0) {
156 err("recv op_import_reply");
157 return -1;
158 }
159
160 PACK_OP_IMPORT_REPLY(0, &reply);
161
162 /* check the reply */
163 if (strncmp(reply.udev.busid, busid, SYSFS_BUS_ID_SIZE)) {
164 err("recv different busid %s", reply.udev.busid);
165 return -1;
166 }
167
168 /* import a device */
169 return import_device(sockfd, &reply.udev);
170}
171
172static int attach_device(char *host, char *busid)
173{
174 int sockfd;
175 int rc;
176 int rhport;
177
178 sockfd = usbip_net_tcp_connect(host, usbip_port_string);
179 if (sockfd < 0) {
180 err("tcp connect");
181 return -1;
182 }
183
184 rhport = query_import_device(sockfd, busid);
185 if (rhport < 0) {
186 err("query");
187 return -1;
188 }
189
190 close(sockfd);
191
192 rc = record_connection(host, usbip_port_string, busid, rhport);
193 if (rc < 0) {
194 err("record connection");
195 return -1;
196 }
197
198 return 0;
199}
200
201int usbip_attach(int argc, char *argv[])
202{
203 static const struct option opts[] = {
204 { "remote", required_argument, NULL, 'r' },
205 { "busid", required_argument, NULL, 'b' },
206 { NULL, 0, NULL, 0 }
207 };
208 char *host = NULL;
209 char *busid = NULL;
210 int opt;
211 int ret = -1;
212
213 for (;;) {
214 opt = getopt_long(argc, argv, "r:b:", opts, NULL);
215
216 if (opt == -1)
217 break;
218
219 switch (opt) {
220 case 'r':
221 host = optarg;
222 break;
223 case 'b':
224 busid = optarg;
225 break;
226 default:
227 goto err_out;
228 }
229 }
230
231 if (!host || !busid)
232 goto err_out;
233
234 ret = attach_device(host, busid);
235 goto out;
236
237err_out:
238 usbip_attach_usage();
239out:
240 return ret;
241}
diff --git a/drivers/staging/usbip/userspace/src/usbip_bind.c b/drivers/staging/usbip/userspace/src/usbip_bind.c
deleted file mode 100644
index fa46141ae68b..000000000000
--- a/drivers/staging/usbip/userspace/src/usbip_bind.c
+++ /dev/null
@@ -1,214 +0,0 @@
1/*
2 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
3 * 2005-2007 Takahiro Hirofuchi
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#include <libudev.h>
20
21#include <errno.h>
22#include <stdio.h>
23#include <stdlib.h>
24#include <string.h>
25
26#include <getopt.h>
27
28#include "usbip_common.h"
29#include "utils.h"
30#include "usbip.h"
31#include "sysfs_utils.h"
32
33enum unbind_status {
34 UNBIND_ST_OK,
35 UNBIND_ST_USBIP_HOST,
36 UNBIND_ST_FAILED
37};
38
39static const char usbip_bind_usage_string[] =
40 "usbip bind <args>\n"
41 " -b, --busid=<busid> Bind " USBIP_HOST_DRV_NAME ".ko to device "
42 "on <busid>\n";
43
44void usbip_bind_usage(void)
45{
46 printf("usage: %s", usbip_bind_usage_string);
47}
48
49/* call at unbound state */
50static int bind_usbip(char *busid)
51{
52 char attr_name[] = "bind";
53 char bind_attr_path[SYSFS_PATH_MAX];
54 int rc = -1;
55
56 snprintf(bind_attr_path, sizeof(bind_attr_path), "%s/%s/%s/%s/%s/%s",
57 SYSFS_MNT_PATH, SYSFS_BUS_NAME, SYSFS_BUS_TYPE,
58 SYSFS_DRIVERS_NAME, USBIP_HOST_DRV_NAME, attr_name);
59
60 rc = write_sysfs_attribute(bind_attr_path, busid, strlen(busid));
61 if (rc < 0) {
62 err("error binding device %s to driver: %s", busid,
63 strerror(errno));
64 return -1;
65 }
66
67 return 0;
68}
69
70/* buggy driver may cause dead lock */
71static int unbind_other(char *busid)
72{
73 enum unbind_status status = UNBIND_ST_OK;
74
75 char attr_name[] = "unbind";
76 char unbind_attr_path[SYSFS_PATH_MAX];
77 int rc = -1;
78
79 struct udev *udev;
80 struct udev_device *dev;
81 const char *driver;
82 const char *bDevClass;
83
84 /* Create libudev context. */
85 udev = udev_new();
86
87 /* Get the device. */
88 dev = udev_device_new_from_subsystem_sysname(udev, "usb", busid);
89 if (!dev) {
90 dbg("unable to find device with bus ID %s", busid);
91 goto err_close_busid_dev;
92 }
93
94 /* Check what kind of device it is. */
95 bDevClass = udev_device_get_sysattr_value(dev, "bDeviceClass");
96 if (!bDevClass) {
97 dbg("unable to get bDevClass device attribute");
98 goto err_close_busid_dev;
99 }
100
101 if (!strncmp(bDevClass, "09", strlen(bDevClass))) {
102 dbg("skip unbinding of hub");
103 goto err_close_busid_dev;
104 }
105
106 /* Get the device driver. */
107 driver = udev_device_get_driver(dev);
108 if (!driver) {
109 /* No driver bound to this device. */
110 goto out;
111 }
112
113 if (!strncmp(USBIP_HOST_DRV_NAME, driver,
114 strlen(USBIP_HOST_DRV_NAME))) {
115 /* Already bound to usbip-host. */
116 status = UNBIND_ST_USBIP_HOST;
117 goto out;
118 }
119
120 /* Unbind device from driver. */
121 snprintf(unbind_attr_path, sizeof(unbind_attr_path), "%s/%s/%s/%s/%s/%s",
122 SYSFS_MNT_PATH, SYSFS_BUS_NAME, SYSFS_BUS_TYPE,
123 SYSFS_DRIVERS_NAME, driver, attr_name);
124
125 rc = write_sysfs_attribute(unbind_attr_path, busid, strlen(busid));
126 if (rc < 0) {
127 err("error unbinding device %s from driver", busid);
128 goto err_close_busid_dev;
129 }
130
131 goto out;
132
133err_close_busid_dev:
134 status = UNBIND_ST_FAILED;
135out:
136 udev_device_unref(dev);
137 udev_unref(udev);
138
139 return status;
140}
141
142static int bind_device(char *busid)
143{
144 int rc;
145 struct udev *udev;
146 struct udev_device *dev;
147
148 /* Check whether the device with this bus ID exists. */
149 udev = udev_new();
150 dev = udev_device_new_from_subsystem_sysname(udev, "usb", busid);
151 if (!dev) {
152 err("device with the specified bus ID does not exist");
153 return -1;
154 }
155 udev_unref(udev);
156
157 rc = unbind_other(busid);
158 if (rc == UNBIND_ST_FAILED) {
159 err("could not unbind driver from device on busid %s", busid);
160 return -1;
161 } else if (rc == UNBIND_ST_USBIP_HOST) {
162 err("device on busid %s is already bound to %s", busid,
163 USBIP_HOST_DRV_NAME);
164 return -1;
165 }
166
167 rc = modify_match_busid(busid, 1);
168 if (rc < 0) {
169 err("unable to bind device on %s", busid);
170 return -1;
171 }
172
173 rc = bind_usbip(busid);
174 if (rc < 0) {
175 err("could not bind device to %s", USBIP_HOST_DRV_NAME);
176 modify_match_busid(busid, 0);
177 return -1;
178 }
179
180 info("bind device on busid %s: complete", busid);
181
182 return 0;
183}
184
185int usbip_bind(int argc, char *argv[])
186{
187 static const struct option opts[] = {
188 { "busid", required_argument, NULL, 'b' },
189 { NULL, 0, NULL, 0 }
190 };
191
192 int opt;
193 int ret = -1;
194
195 for (;;) {
196 opt = getopt_long(argc, argv, "b:", opts, NULL);
197
198 if (opt == -1)
199 break;
200
201 switch (opt) {
202 case 'b':
203 ret = bind_device(optarg);
204 goto out;
205 default:
206 goto err_out;
207 }
208 }
209
210err_out:
211 usbip_bind_usage();
212out:
213 return ret;
214}
diff --git a/drivers/staging/usbip/userspace/src/usbip_detach.c b/drivers/staging/usbip/userspace/src/usbip_detach.c
deleted file mode 100644
index 05c6d15856eb..000000000000
--- a/drivers/staging/usbip/userspace/src/usbip_detach.c
+++ /dev/null
@@ -1,110 +0,0 @@
1/*
2 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
3 * 2005-2007 Takahiro Hirofuchi
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#include <ctype.h>
20#include <limits.h>
21#include <stdint.h>
22#include <stdio.h>
23#include <stdlib.h>
24#include <string.h>
25
26#include <getopt.h>
27#include <unistd.h>
28
29#include "vhci_driver.h"
30#include "usbip_common.h"
31#include "usbip_network.h"
32#include "usbip.h"
33
34static const char usbip_detach_usage_string[] =
35 "usbip detach <args>\n"
36 " -p, --port=<port> " USBIP_VHCI_DRV_NAME
37 " port the device is on\n";
38
39void usbip_detach_usage(void)
40{
41 printf("usage: %s", usbip_detach_usage_string);
42}
43
44static int detach_port(char *port)
45{
46 int ret;
47 uint8_t portnum;
48 char path[PATH_MAX+1];
49
50 for (unsigned int i = 0; i < strlen(port); i++)
51 if (!isdigit(port[i])) {
52 err("invalid port %s", port);
53 return -1;
54 }
55
56 /* check max port */
57
58 portnum = atoi(port);
59
60 /* remove the port state file */
61
62 snprintf(path, PATH_MAX, VHCI_STATE_PATH"/port%d", portnum);
63
64 remove(path);
65 rmdir(VHCI_STATE_PATH);
66
67 ret = usbip_vhci_driver_open();
68 if (ret < 0) {
69 err("open vhci_driver");
70 return -1;
71 }
72
73 ret = usbip_vhci_detach_device(portnum);
74 if (ret < 0)
75 return -1;
76
77 usbip_vhci_driver_close();
78
79 return ret;
80}
81
82int usbip_detach(int argc, char *argv[])
83{
84 static const struct option opts[] = {
85 { "port", required_argument, NULL, 'p' },
86 { NULL, 0, NULL, 0 }
87 };
88 int opt;
89 int ret = -1;
90
91 for (;;) {
92 opt = getopt_long(argc, argv, "p:", opts, NULL);
93
94 if (opt == -1)
95 break;
96
97 switch (opt) {
98 case 'p':
99 ret = detach_port(optarg);
100 goto out;
101 default:
102 goto err_out;
103 }
104 }
105
106err_out:
107 usbip_detach_usage();
108out:
109 return ret;
110}
diff --git a/drivers/staging/usbip/userspace/src/usbip_list.c b/drivers/staging/usbip/userspace/src/usbip_list.c
deleted file mode 100644
index d5ce34a410e7..000000000000
--- a/drivers/staging/usbip/userspace/src/usbip_list.c
+++ /dev/null
@@ -1,283 +0,0 @@
1/*
2 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
3 * 2005-2007 Takahiro Hirofuchi
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#include <sys/types.h>
20#include <libudev.h>
21
22#include <errno.h>
23#include <stdbool.h>
24#include <stdint.h>
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28
29#include <getopt.h>
30#include <netdb.h>
31#include <unistd.h>
32
33#include "usbip_common.h"
34#include "usbip_network.h"
35#include "usbip.h"
36
37static const char usbip_list_usage_string[] =
38 "usbip list [-p|--parsable] <args>\n"
39 " -p, --parsable Parsable list format\n"
40 " -r, --remote=<host> List the exportable USB devices on <host>\n"
41 " -l, --local List the local USB devices\n";
42
43void usbip_list_usage(void)
44{
45 printf("usage: %s", usbip_list_usage_string);
46}
47
48static int get_exported_devices(char *host, int sockfd)
49{
50 char product_name[100];
51 char class_name[100];
52 struct op_devlist_reply reply;
53 uint16_t code = OP_REP_DEVLIST;
54 struct usbip_usb_device udev;
55 struct usbip_usb_interface uintf;
56 unsigned int i;
57 int rc, j;
58
59 rc = usbip_net_send_op_common(sockfd, OP_REQ_DEVLIST, 0);
60 if (rc < 0) {
61 dbg("usbip_net_send_op_common failed");
62 return -1;
63 }
64
65 rc = usbip_net_recv_op_common(sockfd, &code);
66 if (rc < 0) {
67 dbg("usbip_net_recv_op_common failed");
68 return -1;
69 }
70
71 memset(&reply, 0, sizeof(reply));
72 rc = usbip_net_recv(sockfd, &reply, sizeof(reply));
73 if (rc < 0) {
74 dbg("usbip_net_recv_op_devlist failed");
75 return -1;
76 }
77 PACK_OP_DEVLIST_REPLY(0, &reply);
78 dbg("exportable devices: %d\n", reply.ndev);
79
80 if (reply.ndev == 0) {
81 info("no exportable devices found on %s", host);
82 return 0;
83 }
84
85 printf("Exportable USB devices\n");
86 printf("======================\n");
87 printf(" - %s\n", host);
88
89 for (i = 0; i < reply.ndev; i++) {
90 memset(&udev, 0, sizeof(udev));
91 rc = usbip_net_recv(sockfd, &udev, sizeof(udev));
92 if (rc < 0) {
93 dbg("usbip_net_recv failed: usbip_usb_device[%d]", i);
94 return -1;
95 }
96 usbip_net_pack_usb_device(0, &udev);
97
98 usbip_names_get_product(product_name, sizeof(product_name),
99 udev.idVendor, udev.idProduct);
100 usbip_names_get_class(class_name, sizeof(class_name),
101 udev.bDeviceClass, udev.bDeviceSubClass,
102 udev.bDeviceProtocol);
103 printf("%11s: %s\n", udev.busid, product_name);
104 printf("%11s: %s\n", "", udev.path);
105 printf("%11s: %s\n", "", class_name);
106
107 for (j = 0; j < udev.bNumInterfaces; j++) {
108 rc = usbip_net_recv(sockfd, &uintf, sizeof(uintf));
109 if (rc < 0) {
110 err("usbip_net_recv failed: usbip_usb_intf[%d]",
111 j);
112
113 return -1;
114 }
115 usbip_net_pack_usb_interface(0, &uintf);
116
117 usbip_names_get_class(class_name, sizeof(class_name),
118 uintf.bInterfaceClass,
119 uintf.bInterfaceSubClass,
120 uintf.bInterfaceProtocol);
121 printf("%11s: %2d - %s\n", "", j, class_name);
122 }
123
124 printf("\n");
125 }
126
127 return 0;
128}
129
130static int list_exported_devices(char *host)
131{
132 int rc;
133 int sockfd;
134
135 sockfd = usbip_net_tcp_connect(host, usbip_port_string);
136 if (sockfd < 0) {
137 err("could not connect to %s:%s: %s", host,
138 usbip_port_string, gai_strerror(sockfd));
139 return -1;
140 }
141 dbg("connected to %s:%s", host, usbip_port_string);
142
143 rc = get_exported_devices(host, sockfd);
144 if (rc < 0) {
145 err("failed to get device list from %s", host);
146 return -1;
147 }
148
149 close(sockfd);
150
151 return 0;
152}
153
154static void print_device(const char *busid, const char *vendor,
155 const char *product, bool parsable)
156{
157 if (parsable)
158 printf("busid=%s#usbid=%.4s:%.4s#", busid, vendor, product);
159 else
160 printf(" - busid %s (%.4s:%.4s)\n", busid, vendor, product);
161}
162
163static void print_product_name(char *product_name, bool parsable)
164{
165 if (!parsable)
166 printf(" %s\n", product_name);
167}
168
169static int list_devices(bool parsable)
170{
171 struct udev *udev;
172 struct udev_enumerate *enumerate;
173 struct udev_list_entry *devices, *dev_list_entry;
174 struct udev_device *dev;
175 const char *path;
176 const char *idVendor;
177 const char *idProduct;
178 const char *bConfValue;
179 const char *bNumIntfs;
180 const char *busid;
181 char product_name[128];
182 int ret = -1;
183
184 /* Create libudev context. */
185 udev = udev_new();
186
187 /* Create libudev device enumeration. */
188 enumerate = udev_enumerate_new(udev);
189
190 /* Take only USB devices that are not hubs and do not have
191 * the bInterfaceNumber attribute, i.e. are not interfaces.
192 */
193 udev_enumerate_add_match_subsystem(enumerate, "usb");
194 udev_enumerate_add_nomatch_sysattr(enumerate, "bDeviceClass", "09");
195 udev_enumerate_add_nomatch_sysattr(enumerate, "bInterfaceNumber", NULL);
196 udev_enumerate_scan_devices(enumerate);
197
198 devices = udev_enumerate_get_list_entry(enumerate);
199
200 /* Show information about each device. */
201 udev_list_entry_foreach(dev_list_entry, devices) {
202 path = udev_list_entry_get_name(dev_list_entry);
203 dev = udev_device_new_from_syspath(udev, path);
204
205 /* Get device information. */
206 idVendor = udev_device_get_sysattr_value(dev, "idVendor");
207 idProduct = udev_device_get_sysattr_value(dev, "idProduct");
208 bConfValue = udev_device_get_sysattr_value(dev, "bConfigurationValue");
209 bNumIntfs = udev_device_get_sysattr_value(dev, "bNumInterfaces");
210 busid = udev_device_get_sysname(dev);
211 if (!idVendor || !idProduct || !bConfValue || !bNumIntfs) {
212 err("problem getting device attributes: %s",
213 strerror(errno));
214 goto err_out;
215 }
216
217 /* Get product name. */
218 usbip_names_get_product(product_name, sizeof(product_name),
219 strtol(idVendor, NULL, 16),
220 strtol(idProduct, NULL, 16));
221
222 /* Print information. */
223 print_device(busid, idVendor, idProduct, parsable);
224 print_product_name(product_name, parsable);
225
226 printf("\n");
227
228 udev_device_unref(dev);
229 }
230
231 ret = 0;
232
233err_out:
234 udev_enumerate_unref(enumerate);
235 udev_unref(udev);
236
237 return ret;
238}
239
240int usbip_list(int argc, char *argv[])
241{
242 static const struct option opts[] = {
243 { "parsable", no_argument, NULL, 'p' },
244 { "remote", required_argument, NULL, 'r' },
245 { "local", no_argument, NULL, 'l' },
246 { NULL, 0, NULL, 0 }
247 };
248
249 bool parsable = false;
250 int opt;
251 int ret = -1;
252
253 if (usbip_names_init(USBIDS_FILE))
254 err("failed to open %s", USBIDS_FILE);
255
256 for (;;) {
257 opt = getopt_long(argc, argv, "pr:l", opts, NULL);
258
259 if (opt == -1)
260 break;
261
262 switch (opt) {
263 case 'p':
264 parsable = true;
265 break;
266 case 'r':
267 ret = list_exported_devices(optarg);
268 goto out;
269 case 'l':
270 ret = list_devices(parsable);
271 goto out;
272 default:
273 goto err_out;
274 }
275 }
276
277err_out:
278 usbip_list_usage();
279out:
280 usbip_names_free();
281
282 return ret;
283}
diff --git a/drivers/staging/usbip/userspace/src/usbip_network.c b/drivers/staging/usbip/userspace/src/usbip_network.c
deleted file mode 100644
index b4c37e76a6e0..000000000000
--- a/drivers/staging/usbip/userspace/src/usbip_network.c
+++ /dev/null
@@ -1,303 +0,0 @@
1/*
2 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
3 * 2005-2007 Takahiro Hirofuchi
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#include <sys/socket.h>
20
21#include <string.h>
22
23#include <arpa/inet.h>
24#include <netdb.h>
25#include <netinet/tcp.h>
26#include <unistd.h>
27
28#ifdef HAVE_LIBWRAP
29#include <tcpd.h>
30#endif
31
32#include "usbip_common.h"
33#include "usbip_network.h"
34
35int usbip_port = 3240;
36char *usbip_port_string = "3240";
37
38void usbip_setup_port_number(char *arg)
39{
40 dbg("parsing port arg '%s'", arg);
41 char *end;
42 unsigned long int port = strtoul(arg, &end, 10);
43
44 if (end == arg) {
45 err("port: could not parse '%s' as a decimal integer", arg);
46 return;
47 }
48
49 if (*end != '\0') {
50 err("port: garbage at end of '%s'", arg);
51 return;
52 }
53
54 if (port > UINT16_MAX) {
55 err("port: %s too high (max=%d)",
56 arg, UINT16_MAX);
57 return;
58 }
59
60 usbip_port = port;
61 usbip_port_string = arg;
62 info("using port %d (\"%s\")", usbip_port, usbip_port_string);
63}
64
65void usbip_net_pack_uint32_t(int pack, uint32_t *num)
66{
67 uint32_t i;
68
69 if (pack)
70 i = htonl(*num);
71 else
72 i = ntohl(*num);
73
74 *num = i;
75}
76
77void usbip_net_pack_uint16_t(int pack, uint16_t *num)
78{
79 uint16_t i;
80
81 if (pack)
82 i = htons(*num);
83 else
84 i = ntohs(*num);
85
86 *num = i;
87}
88
89void usbip_net_pack_usb_device(int pack, struct usbip_usb_device *udev)
90{
91 usbip_net_pack_uint32_t(pack, &udev->busnum);
92 usbip_net_pack_uint32_t(pack, &udev->devnum);
93 usbip_net_pack_uint32_t(pack, &udev->speed);
94
95 usbip_net_pack_uint16_t(pack, &udev->idVendor);
96 usbip_net_pack_uint16_t(pack, &udev->idProduct);
97 usbip_net_pack_uint16_t(pack, &udev->bcdDevice);
98}
99
100void usbip_net_pack_usb_interface(int pack __attribute__((unused)),
101 struct usbip_usb_interface *udev
102 __attribute__((unused)))
103{
104 /* uint8_t members need nothing */
105}
106
107static ssize_t usbip_net_xmit(int sockfd, void *buff, size_t bufflen,
108 int sending)
109{
110 ssize_t nbytes;
111 ssize_t total = 0;
112
113 if (!bufflen)
114 return 0;
115
116 do {
117 if (sending)
118 nbytes = send(sockfd, buff, bufflen, 0);
119 else
120 nbytes = recv(sockfd, buff, bufflen, MSG_WAITALL);
121
122 if (nbytes <= 0)
123 return -1;
124
125 buff = (void *)((intptr_t) buff + nbytes);
126 bufflen -= nbytes;
127 total += nbytes;
128
129 } while (bufflen > 0);
130
131 return total;
132}
133
134ssize_t usbip_net_recv(int sockfd, void *buff, size_t bufflen)
135{
136 return usbip_net_xmit(sockfd, buff, bufflen, 0);
137}
138
139ssize_t usbip_net_send(int sockfd, void *buff, size_t bufflen)
140{
141 return usbip_net_xmit(sockfd, buff, bufflen, 1);
142}
143
144int usbip_net_send_op_common(int sockfd, uint32_t code, uint32_t status)
145{
146 struct op_common op_common;
147 int rc;
148
149 memset(&op_common, 0, sizeof(op_common));
150
151 op_common.version = USBIP_VERSION;
152 op_common.code = code;
153 op_common.status = status;
154
155 PACK_OP_COMMON(1, &op_common);
156
157 rc = usbip_net_send(sockfd, &op_common, sizeof(op_common));
158 if (rc < 0) {
159 dbg("usbip_net_send failed: %d", rc);
160 return -1;
161 }
162
163 return 0;
164}
165
166int usbip_net_recv_op_common(int sockfd, uint16_t *code)
167{
168 struct op_common op_common;
169 int rc;
170
171 memset(&op_common, 0, sizeof(op_common));
172
173 rc = usbip_net_recv(sockfd, &op_common, sizeof(op_common));
174 if (rc < 0) {
175 dbg("usbip_net_recv failed: %d", rc);
176 goto err;
177 }
178
179 PACK_OP_COMMON(0, &op_common);
180
181 if (op_common.version != USBIP_VERSION) {
182 dbg("version mismatch: %d %d", op_common.version,
183 USBIP_VERSION);
184 goto err;
185 }
186
187 switch (*code) {
188 case OP_UNSPEC:
189 break;
190 default:
191 if (op_common.code != *code) {
192 dbg("unexpected pdu %#0x for %#0x", op_common.code,
193 *code);
194 goto err;
195 }
196 }
197
198 if (op_common.status != ST_OK) {
199 dbg("request failed at peer: %d", op_common.status);
200 goto err;
201 }
202
203 *code = op_common.code;
204
205 return 0;
206err:
207 return -1;
208}
209
210int usbip_net_set_reuseaddr(int sockfd)
211{
212 const int val = 1;
213 int ret;
214
215 ret = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
216 if (ret < 0)
217 dbg("setsockopt: SO_REUSEADDR");
218
219 return ret;
220}
221
222int usbip_net_set_nodelay(int sockfd)
223{
224 const int val = 1;
225 int ret;
226
227 ret = setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val));
228 if (ret < 0)
229 dbg("setsockopt: TCP_NODELAY");
230
231 return ret;
232}
233
234int usbip_net_set_keepalive(int sockfd)
235{
236 const int val = 1;
237 int ret;
238
239 ret = setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &val, sizeof(val));
240 if (ret < 0)
241 dbg("setsockopt: SO_KEEPALIVE");
242
243 return ret;
244}
245
246int usbip_net_set_v6only(int sockfd)
247{
248 const int val = 1;
249 int ret;
250
251 ret = setsockopt(sockfd, IPPROTO_IPV6, IPV6_V6ONLY, &val, sizeof(val));
252 if (ret < 0)
253 dbg("setsockopt: IPV6_V6ONLY");
254
255 return ret;
256}
257
258/*
259 * IPv6 Ready
260 */
261int usbip_net_tcp_connect(char *hostname, char *service)
262{
263 struct addrinfo hints, *res, *rp;
264 int sockfd;
265 int ret;
266
267 memset(&hints, 0, sizeof(hints));
268 hints.ai_family = AF_UNSPEC;
269 hints.ai_socktype = SOCK_STREAM;
270
271 /* get all possible addresses */
272 ret = getaddrinfo(hostname, service, &hints, &res);
273 if (ret < 0) {
274 dbg("getaddrinfo: %s service %s: %s", hostname, service,
275 gai_strerror(ret));
276 return ret;
277 }
278
279 /* try the addresses */
280 for (rp = res; rp; rp = rp->ai_next) {
281 sockfd = socket(rp->ai_family, rp->ai_socktype,
282 rp->ai_protocol);
283 if (sockfd < 0)
284 continue;
285
286 /* should set TCP_NODELAY for usbip */
287 usbip_net_set_nodelay(sockfd);
288 /* TODO: write code for heartbeat */
289 usbip_net_set_keepalive(sockfd);
290
291 if (connect(sockfd, rp->ai_addr, rp->ai_addrlen) == 0)
292 break;
293
294 close(sockfd);
295 }
296
297 freeaddrinfo(res);
298
299 if (!rp)
300 return EAI_SYSTEM;
301
302 return sockfd;
303}
diff --git a/drivers/staging/usbip/userspace/src/usbip_network.h b/drivers/staging/usbip/userspace/src/usbip_network.h
deleted file mode 100644
index c1e875cf1078..000000000000
--- a/drivers/staging/usbip/userspace/src/usbip_network.h
+++ /dev/null
@@ -1,185 +0,0 @@
1/*
2 * Copyright (C) 2005-2007 Takahiro Hirofuchi
3 */
4
5#ifndef __USBIP_NETWORK_H
6#define __USBIP_NETWORK_H
7
8#ifdef HAVE_CONFIG_H
9#include "../config.h"
10#endif
11
12#include <sys/types.h>
13
14#include <stdint.h>
15
16extern int usbip_port;
17extern char *usbip_port_string;
18void usbip_setup_port_number(char *arg);
19
20/* ---------------------------------------------------------------------- */
21/* Common header for all the kinds of PDUs. */
22struct op_common {
23 uint16_t version;
24
25#define OP_REQUEST (0x80 << 8)
26#define OP_REPLY (0x00 << 8)
27 uint16_t code;
28
29 /* add more error code */
30#define ST_OK 0x00
31#define ST_NA 0x01
32 uint32_t status; /* op_code status (for reply) */
33
34} __attribute__((packed));
35
36#define PACK_OP_COMMON(pack, op_common) do {\
37 usbip_net_pack_uint16_t(pack, &(op_common)->version);\
38 usbip_net_pack_uint16_t(pack, &(op_common)->code);\
39 usbip_net_pack_uint32_t(pack, &(op_common)->status);\
40} while (0)
41
42/* ---------------------------------------------------------------------- */
43/* Dummy Code */
44#define OP_UNSPEC 0x00
45#define OP_REQ_UNSPEC OP_UNSPEC
46#define OP_REP_UNSPEC OP_UNSPEC
47
48/* ---------------------------------------------------------------------- */
49/* Retrieve USB device information. (still not used) */
50#define OP_DEVINFO 0x02
51#define OP_REQ_DEVINFO (OP_REQUEST | OP_DEVINFO)
52#define OP_REP_DEVINFO (OP_REPLY | OP_DEVINFO)
53
54struct op_devinfo_request {
55 char busid[SYSFS_BUS_ID_SIZE];
56} __attribute__((packed));
57
58struct op_devinfo_reply {
59 struct usbip_usb_device udev;
60 struct usbip_usb_interface uinf[];
61} __attribute__((packed));
62
63/* ---------------------------------------------------------------------- */
64/* Import a remote USB device. */
65#define OP_IMPORT 0x03
66#define OP_REQ_IMPORT (OP_REQUEST | OP_IMPORT)
67#define OP_REP_IMPORT (OP_REPLY | OP_IMPORT)
68
69struct op_import_request {
70 char busid[SYSFS_BUS_ID_SIZE];
71} __attribute__((packed));
72
73struct op_import_reply {
74 struct usbip_usb_device udev;
75// struct usbip_usb_interface uinf[];
76} __attribute__((packed));
77
78#define PACK_OP_IMPORT_REQUEST(pack, request) do {\
79} while (0)
80
81#define PACK_OP_IMPORT_REPLY(pack, reply) do {\
82 usbip_net_pack_usb_device(pack, &(reply)->udev);\
83} while (0)
84
85/* ---------------------------------------------------------------------- */
86/* Export a USB device to a remote host. */
87#define OP_EXPORT 0x06
88#define OP_REQ_EXPORT (OP_REQUEST | OP_EXPORT)
89#define OP_REP_EXPORT (OP_REPLY | OP_EXPORT)
90
91struct op_export_request {
92 struct usbip_usb_device udev;
93} __attribute__((packed));
94
95struct op_export_reply {
96 int returncode;
97} __attribute__((packed));
98
99
100#define PACK_OP_EXPORT_REQUEST(pack, request) do {\
101 usbip_net_pack_usb_device(pack, &(request)->udev);\
102} while (0)
103
104#define PACK_OP_EXPORT_REPLY(pack, reply) do {\
105} while (0)
106
107/* ---------------------------------------------------------------------- */
108/* un-Export a USB device from a remote host. */
109#define OP_UNEXPORT 0x07
110#define OP_REQ_UNEXPORT (OP_REQUEST | OP_UNEXPORT)
111#define OP_REP_UNEXPORT (OP_REPLY | OP_UNEXPORT)
112
113struct op_unexport_request {
114 struct usbip_usb_device udev;
115} __attribute__((packed));
116
117struct op_unexport_reply {
118 int returncode;
119} __attribute__((packed));
120
121#define PACK_OP_UNEXPORT_REQUEST(pack, request) do {\
122 usbip_net_pack_usb_device(pack, &(request)->udev);\
123} while (0)
124
125#define PACK_OP_UNEXPORT_REPLY(pack, reply) do {\
126} while (0)
127
128/* ---------------------------------------------------------------------- */
129/* Negotiate IPSec encryption key. (still not used) */
130#define OP_CRYPKEY 0x04
131#define OP_REQ_CRYPKEY (OP_REQUEST | OP_CRYPKEY)
132#define OP_REP_CRYPKEY (OP_REPLY | OP_CRYPKEY)
133
134struct op_crypkey_request {
135 /* 128bit key */
136 uint32_t key[4];
137} __attribute__((packed));
138
139struct op_crypkey_reply {
140 uint32_t __reserved;
141} __attribute__((packed));
142
143
144/* ---------------------------------------------------------------------- */
145/* Retrieve the list of exported USB devices. */
146#define OP_DEVLIST 0x05
147#define OP_REQ_DEVLIST (OP_REQUEST | OP_DEVLIST)
148#define OP_REP_DEVLIST (OP_REPLY | OP_DEVLIST)
149
150struct op_devlist_request {
151} __attribute__((packed));
152
153struct op_devlist_reply {
154 uint32_t ndev;
155 /* followed by reply_extra[] */
156} __attribute__((packed));
157
158struct op_devlist_reply_extra {
159 struct usbip_usb_device udev;
160 struct usbip_usb_interface uinf[];
161} __attribute__((packed));
162
163#define PACK_OP_DEVLIST_REQUEST(pack, request) do {\
164} while (0)
165
166#define PACK_OP_DEVLIST_REPLY(pack, reply) do {\
167 usbip_net_pack_uint32_t(pack, &(reply)->ndev);\
168} while (0)
169
170void usbip_net_pack_uint32_t(int pack, uint32_t *num);
171void usbip_net_pack_uint16_t(int pack, uint16_t *num);
172void usbip_net_pack_usb_device(int pack, struct usbip_usb_device *udev);
173void usbip_net_pack_usb_interface(int pack, struct usbip_usb_interface *uinf);
174
175ssize_t usbip_net_recv(int sockfd, void *buff, size_t bufflen);
176ssize_t usbip_net_send(int sockfd, void *buff, size_t bufflen);
177int usbip_net_send_op_common(int sockfd, uint32_t code, uint32_t status);
178int usbip_net_recv_op_common(int sockfd, uint16_t *code);
179int usbip_net_set_reuseaddr(int sockfd);
180int usbip_net_set_nodelay(int sockfd);
181int usbip_net_set_keepalive(int sockfd);
182int usbip_net_set_v6only(int sockfd);
183int usbip_net_tcp_connect(char *hostname, char *port);
184
185#endif /* __USBIP_NETWORK_H */
diff --git a/drivers/staging/usbip/userspace/src/usbip_port.c b/drivers/staging/usbip/userspace/src/usbip_port.c
deleted file mode 100644
index a2e884fd9226..000000000000
--- a/drivers/staging/usbip/userspace/src/usbip_port.c
+++ /dev/null
@@ -1,57 +0,0 @@
1/*
2 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
3 * 2005-2007 Takahiro Hirofuchi
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15
16#include "vhci_driver.h"
17#include "usbip_common.h"
18
19static int list_imported_devices(void)
20{
21 int i;
22 struct usbip_imported_device *idev;
23 int ret;
24
25 ret = usbip_vhci_driver_open();
26 if (ret < 0) {
27 err("open vhci_driver");
28 return -1;
29 }
30
31 printf("Imported USB devices\n");
32 printf("====================\n");
33
34 for (i = 0; i < vhci_driver->nports; i++) {
35 idev = &vhci_driver->idev[i];
36
37 if (usbip_vhci_imported_device_dump(idev) < 0)
38 ret = -1;
39 }
40
41 usbip_vhci_driver_close();
42
43 return ret;
44
45}
46
47int usbip_port_show(__attribute__((unused)) int argc,
48 __attribute__((unused)) char *argv[])
49{
50 int ret;
51
52 ret = list_imported_devices();
53 if (ret < 0)
54 err("list imported devices");
55
56 return ret;
57}
diff --git a/drivers/staging/usbip/userspace/src/usbip_unbind.c b/drivers/staging/usbip/userspace/src/usbip_unbind.c
deleted file mode 100644
index a4a496c9cbaf..000000000000
--- a/drivers/staging/usbip/userspace/src/usbip_unbind.c
+++ /dev/null
@@ -1,141 +0,0 @@
1/*
2 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
3 * 2005-2007 Takahiro Hirofuchi
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#include <libudev.h>
20
21#include <errno.h>
22#include <stdio.h>
23#include <string.h>
24
25#include <getopt.h>
26
27#include "usbip_common.h"
28#include "utils.h"
29#include "usbip.h"
30#include "sysfs_utils.h"
31
32static const char usbip_unbind_usage_string[] =
33 "usbip unbind <args>\n"
34 " -b, --busid=<busid> Unbind " USBIP_HOST_DRV_NAME ".ko from "
35 "device on <busid>\n";
36
37void usbip_unbind_usage(void)
38{
39 printf("usage: %s", usbip_unbind_usage_string);
40}
41
42static int unbind_device(char *busid)
43{
44 char bus_type[] = "usb";
45 int rc, ret = -1;
46
47 char unbind_attr_name[] = "unbind";
48 char unbind_attr_path[SYSFS_PATH_MAX];
49 char rebind_attr_name[] = "rebind";
50 char rebind_attr_path[SYSFS_PATH_MAX];
51
52 struct udev *udev;
53 struct udev_device *dev;
54 const char *driver;
55
56 /* Create libudev context. */
57 udev = udev_new();
58
59 /* Check whether the device with this bus ID exists. */
60 dev = udev_device_new_from_subsystem_sysname(udev, "usb", busid);
61 if (!dev) {
62 err("device with the specified bus ID does not exist");
63 goto err_close_udev;
64 }
65
66 /* Check whether the device is using usbip-host driver. */
67 driver = udev_device_get_driver(dev);
68 if (!driver || strcmp(driver, "usbip-host")) {
69 err("device is not bound to usbip-host driver");
70 goto err_close_udev;
71 }
72
73 /* Unbind device from driver. */
74 snprintf(unbind_attr_path, sizeof(unbind_attr_path), "%s/%s/%s/%s/%s/%s",
75 SYSFS_MNT_PATH, SYSFS_BUS_NAME, bus_type, SYSFS_DRIVERS_NAME,
76 USBIP_HOST_DRV_NAME, unbind_attr_name);
77
78 rc = write_sysfs_attribute(unbind_attr_path, busid, strlen(busid));
79 if (rc < 0) {
80 err("error unbinding device %s from driver", busid);
81 goto err_close_udev;
82 }
83
84 /* Notify driver of unbind. */
85 rc = modify_match_busid(busid, 0);
86 if (rc < 0) {
87 err("unable to unbind device on %s", busid);
88 goto err_close_udev;
89 }
90
91 /* Trigger new probing. */
92 snprintf(rebind_attr_path, sizeof(unbind_attr_path), "%s/%s/%s/%s/%s/%s",
93 SYSFS_MNT_PATH, SYSFS_BUS_NAME, bus_type, SYSFS_DRIVERS_NAME,
94 USBIP_HOST_DRV_NAME, rebind_attr_name);
95
96 rc = write_sysfs_attribute(rebind_attr_path, busid, strlen(busid));
97 if (rc < 0) {
98 err("error rebinding");
99 goto err_close_udev;
100 }
101
102 ret = 0;
103 info("unbind device on busid %s: complete", busid);
104
105err_close_udev:
106 udev_device_unref(dev);
107 udev_unref(udev);
108
109 return ret;
110}
111
112int usbip_unbind(int argc, char *argv[])
113{
114 static const struct option opts[] = {
115 { "busid", required_argument, NULL, 'b' },
116 { NULL, 0, NULL, 0 }
117 };
118
119 int opt;
120 int ret = -1;
121
122 for (;;) {
123 opt = getopt_long(argc, argv, "b:", opts, NULL);
124
125 if (opt == -1)
126 break;
127
128 switch (opt) {
129 case 'b':
130 ret = unbind_device(optarg);
131 goto out;
132 default:
133 goto err_out;
134 }
135 }
136
137err_out:
138 usbip_unbind_usage();
139out:
140 return ret;
141}
diff --git a/drivers/staging/usbip/userspace/src/usbipd.c b/drivers/staging/usbip/userspace/src/usbipd.c
deleted file mode 100644
index 2f87f2d348ba..000000000000
--- a/drivers/staging/usbip/userspace/src/usbipd.c
+++ /dev/null
@@ -1,679 +0,0 @@
1/*
2 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
3 * 2005-2007 Takahiro Hirofuchi
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20#include "../config.h"
21#endif
22
23#define _GNU_SOURCE
24#include <errno.h>
25#include <unistd.h>
26#include <netdb.h>
27#include <string.h>
28#include <stdlib.h>
29#include <sys/types.h>
30#include <sys/stat.h>
31#include <arpa/inet.h>
32#include <sys/socket.h>
33#include <netinet/in.h>
34
35#ifdef HAVE_LIBWRAP
36#include <tcpd.h>
37#endif
38
39#include <getopt.h>
40#include <signal.h>
41#include <poll.h>
42
43#include "usbip_host_driver.h"
44#include "usbip_common.h"
45#include "usbip_network.h"
46#include "list.h"
47
48#undef PROGNAME
49#define PROGNAME "usbipd"
50#define MAXSOCKFD 20
51
52#define MAIN_LOOP_TIMEOUT 10
53
54#define DEFAULT_PID_FILE "/var/run/" PROGNAME ".pid"
55
56static const char usbip_version_string[] = PACKAGE_STRING;
57
58static const char usbipd_help_string[] =
59 "usage: usbipd [options]\n"
60 "\n"
61 " -4, --ipv4\n"
62 " Bind to IPv4. Default is both.\n"
63 "\n"
64 " -6, --ipv6\n"
65 " Bind to IPv6. Default is both.\n"
66 "\n"
67 " -D, --daemon\n"
68 " Run as a daemon process.\n"
69 "\n"
70 " -d, --debug\n"
71 " Print debugging information.\n"
72 "\n"
73 " -PFILE, --pid FILE\n"
74 " Write process id to FILE.\n"
75 " If no FILE specified, use " DEFAULT_PID_FILE "\n"
76 "\n"
77 " -tPORT, --tcp-port PORT\n"
78 " Listen on TCP/IP port PORT.\n"
79 "\n"
80 " -h, --help\n"
81 " Print this help.\n"
82 "\n"
83 " -v, --version\n"
84 " Show version.\n";
85
86static void usbipd_help(void)
87{
88 printf("%s\n", usbipd_help_string);
89}
90
91static int recv_request_import(int sockfd)
92{
93 struct op_import_request req;
94 struct op_common reply;
95 struct usbip_exported_device *edev;
96 struct usbip_usb_device pdu_udev;
97 struct list_head *i;
98 int found = 0;
99 int error = 0;
100 int rc;
101
102 memset(&req, 0, sizeof(req));
103 memset(&reply, 0, sizeof(reply));
104
105 rc = usbip_net_recv(sockfd, &req, sizeof(req));
106 if (rc < 0) {
107 dbg("usbip_net_recv failed: import request");
108 return -1;
109 }
110 PACK_OP_IMPORT_REQUEST(0, &req);
111
112 list_for_each(i, &host_driver->edev_list) {
113 edev = list_entry(i, struct usbip_exported_device, node);
114 if (!strncmp(req.busid, edev->udev.busid, SYSFS_BUS_ID_SIZE)) {
115 info("found requested device: %s", req.busid);
116 found = 1;
117 break;
118 }
119 }
120
121 if (found) {
122 /* should set TCP_NODELAY for usbip */
123 usbip_net_set_nodelay(sockfd);
124
125 /* export device needs a TCP/IP socket descriptor */
126 rc = usbip_host_export_device(edev, sockfd);
127 if (rc < 0)
128 error = 1;
129 } else {
130 info("requested device not found: %s", req.busid);
131 error = 1;
132 }
133
134 rc = usbip_net_send_op_common(sockfd, OP_REP_IMPORT,
135 (!error ? ST_OK : ST_NA));
136 if (rc < 0) {
137 dbg("usbip_net_send_op_common failed: %#0x", OP_REP_IMPORT);
138 return -1;
139 }
140
141 if (error) {
142 dbg("import request busid %s: failed", req.busid);
143 return -1;
144 }
145
146 memcpy(&pdu_udev, &edev->udev, sizeof(pdu_udev));
147 usbip_net_pack_usb_device(1, &pdu_udev);
148
149 rc = usbip_net_send(sockfd, &pdu_udev, sizeof(pdu_udev));
150 if (rc < 0) {
151 dbg("usbip_net_send failed: devinfo");
152 return -1;
153 }
154
155 dbg("import request busid %s: complete", req.busid);
156
157 return 0;
158}
159
160static int send_reply_devlist(int connfd)
161{
162 struct usbip_exported_device *edev;
163 struct usbip_usb_device pdu_udev;
164 struct usbip_usb_interface pdu_uinf;
165 struct op_devlist_reply reply;
166 struct list_head *j;
167 int rc, i;
168
169 reply.ndev = 0;
170 /* number of exported devices */
171 list_for_each(j, &host_driver->edev_list) {
172 reply.ndev += 1;
173 }
174 info("exportable devices: %d", reply.ndev);
175
176 rc = usbip_net_send_op_common(connfd, OP_REP_DEVLIST, ST_OK);
177 if (rc < 0) {
178 dbg("usbip_net_send_op_common failed: %#0x", OP_REP_DEVLIST);
179 return -1;
180 }
181 PACK_OP_DEVLIST_REPLY(1, &reply);
182
183 rc = usbip_net_send(connfd, &reply, sizeof(reply));
184 if (rc < 0) {
185 dbg("usbip_net_send failed: %#0x", OP_REP_DEVLIST);
186 return -1;
187 }
188
189 list_for_each(j, &host_driver->edev_list) {
190 edev = list_entry(j, struct usbip_exported_device, node);
191 dump_usb_device(&edev->udev);
192 memcpy(&pdu_udev, &edev->udev, sizeof(pdu_udev));
193 usbip_net_pack_usb_device(1, &pdu_udev);
194
195 rc = usbip_net_send(connfd, &pdu_udev, sizeof(pdu_udev));
196 if (rc < 0) {
197 dbg("usbip_net_send failed: pdu_udev");
198 return -1;
199 }
200
201 for (i = 0; i < edev->udev.bNumInterfaces; i++) {
202 dump_usb_interface(&edev->uinf[i]);
203 memcpy(&pdu_uinf, &edev->uinf[i], sizeof(pdu_uinf));
204 usbip_net_pack_usb_interface(1, &pdu_uinf);
205
206 rc = usbip_net_send(connfd, &pdu_uinf,
207 sizeof(pdu_uinf));
208 if (rc < 0) {
209 err("usbip_net_send failed: pdu_uinf");
210 return -1;
211 }
212 }
213 }
214
215 return 0;
216}
217
218static int recv_request_devlist(int connfd)
219{
220 struct op_devlist_request req;
221 int rc;
222
223 memset(&req, 0, sizeof(req));
224
225 rc = usbip_net_recv(connfd, &req, sizeof(req));
226 if (rc < 0) {
227 dbg("usbip_net_recv failed: devlist request");
228 return -1;
229 }
230
231 rc = send_reply_devlist(connfd);
232 if (rc < 0) {
233 dbg("send_reply_devlist failed");
234 return -1;
235 }
236
237 return 0;
238}
239
240static int recv_pdu(int connfd)
241{
242 uint16_t code = OP_UNSPEC;
243 int ret;
244
245 ret = usbip_net_recv_op_common(connfd, &code);
246 if (ret < 0) {
247 dbg("could not receive opcode: %#0x", code);
248 return -1;
249 }
250
251 ret = usbip_host_refresh_device_list();
252 if (ret < 0) {
253 dbg("could not refresh device list: %d", ret);
254 return -1;
255 }
256
257 info("received request: %#0x(%d)", code, connfd);
258 switch (code) {
259 case OP_REQ_DEVLIST:
260 ret = recv_request_devlist(connfd);
261 break;
262 case OP_REQ_IMPORT:
263 ret = recv_request_import(connfd);
264 break;
265 case OP_REQ_DEVINFO:
266 case OP_REQ_CRYPKEY:
267 default:
268 err("received an unknown opcode: %#0x", code);
269 ret = -1;
270 }
271
272 if (ret == 0)
273 info("request %#0x(%d): complete", code, connfd);
274 else
275 info("request %#0x(%d): failed", code, connfd);
276
277 return ret;
278}
279
280#ifdef HAVE_LIBWRAP
281static int tcpd_auth(int connfd)
282{
283 struct request_info request;
284 int rc;
285
286 request_init(&request, RQ_DAEMON, PROGNAME, RQ_FILE, connfd, 0);
287 fromhost(&request);
288 rc = hosts_access(&request);
289 if (rc == 0)
290 return -1;
291
292 return 0;
293}
294#endif
295
296static int do_accept(int listenfd)
297{
298 int connfd;
299 struct sockaddr_storage ss;
300 socklen_t len = sizeof(ss);
301 char host[NI_MAXHOST], port[NI_MAXSERV];
302 int rc;
303
304 memset(&ss, 0, sizeof(ss));
305
306 connfd = accept(listenfd, (struct sockaddr *)&ss, &len);
307 if (connfd < 0) {
308 err("failed to accept connection");
309 return -1;
310 }
311
312 rc = getnameinfo((struct sockaddr *)&ss, len, host, sizeof(host),
313 port, sizeof(port), NI_NUMERICHOST | NI_NUMERICSERV);
314 if (rc)
315 err("getnameinfo: %s", gai_strerror(rc));
316
317#ifdef HAVE_LIBWRAP
318 rc = tcpd_auth(connfd);
319 if (rc < 0) {
320 info("denied access from %s", host);
321 close(connfd);
322 return -1;
323 }
324#endif
325 info("connection from %s:%s", host, port);
326
327 return connfd;
328}
329
330int process_request(int listenfd)
331{
332 pid_t childpid;
333 int connfd;
334
335 connfd = do_accept(listenfd);
336 if (connfd < 0)
337 return -1;
338 childpid = fork();
339 if (childpid == 0) {
340 close(listenfd);
341 recv_pdu(connfd);
342 exit(0);
343 }
344 close(connfd);
345 return 0;
346}
347
348static void addrinfo_to_text(struct addrinfo *ai, char buf[],
349 const size_t buf_size)
350{
351 char hbuf[NI_MAXHOST];
352 char sbuf[NI_MAXSERV];
353 int rc;
354
355 buf[0] = '\0';
356
357 rc = getnameinfo(ai->ai_addr, ai->ai_addrlen, hbuf, sizeof(hbuf),
358 sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV);
359 if (rc)
360 err("getnameinfo: %s", gai_strerror(rc));
361
362 snprintf(buf, buf_size, "%s:%s", hbuf, sbuf);
363}
364
365static int listen_all_addrinfo(struct addrinfo *ai_head, int sockfdlist[],
366 int maxsockfd)
367{
368 struct addrinfo *ai;
369 int ret, nsockfd = 0;
370 const size_t ai_buf_size = NI_MAXHOST + NI_MAXSERV + 2;
371 char ai_buf[ai_buf_size];
372
373 for (ai = ai_head; ai && nsockfd < maxsockfd; ai = ai->ai_next) {
374 int sock;
375
376 addrinfo_to_text(ai, ai_buf, ai_buf_size);
377 dbg("opening %s", ai_buf);
378 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
379 if (sock < 0) {
380 err("socket: %s: %d (%s)",
381 ai_buf, errno, strerror(errno));
382 continue;
383 }
384
385 usbip_net_set_reuseaddr(sock);
386 usbip_net_set_nodelay(sock);
387 /* We use seperate sockets for IPv4 and IPv6
388 * (see do_standalone_mode()) */
389 usbip_net_set_v6only(sock);
390
391 if (sock >= FD_SETSIZE) {
392 err("FD_SETSIZE: %s: sock=%d, max=%d",
393 ai_buf, sock, FD_SETSIZE);
394 close(sock);
395 continue;
396 }
397
398 ret = bind(sock, ai->ai_addr, ai->ai_addrlen);
399 if (ret < 0) {
400 err("bind: %s: %d (%s)",
401 ai_buf, errno, strerror(errno));
402 close(sock);
403 continue;
404 }
405
406 ret = listen(sock, SOMAXCONN);
407 if (ret < 0) {
408 err("listen: %s: %d (%s)",
409 ai_buf, errno, strerror(errno));
410 close(sock);
411 continue;
412 }
413
414 info("listening on %s", ai_buf);
415 sockfdlist[nsockfd++] = sock;
416 }
417
418 return nsockfd;
419}
420
421static struct addrinfo *do_getaddrinfo(char *host, int ai_family)
422{
423 struct addrinfo hints, *ai_head;
424 int rc;
425
426 memset(&hints, 0, sizeof(hints));
427 hints.ai_family = ai_family;
428 hints.ai_socktype = SOCK_STREAM;
429 hints.ai_flags = AI_PASSIVE;
430
431 rc = getaddrinfo(host, usbip_port_string, &hints, &ai_head);
432 if (rc) {
433 err("failed to get a network address %s: %s", usbip_port_string,
434 gai_strerror(rc));
435 return NULL;
436 }
437
438 return ai_head;
439}
440
441static void signal_handler(int i)
442{
443 dbg("received '%s' signal", strsignal(i));
444}
445
446static void set_signal(void)
447{
448 struct sigaction act;
449
450 memset(&act, 0, sizeof(act));
451 act.sa_handler = signal_handler;
452 sigemptyset(&act.sa_mask);
453 sigaction(SIGTERM, &act, NULL);
454 sigaction(SIGINT, &act, NULL);
455 act.sa_handler = SIG_IGN;
456 sigaction(SIGCLD, &act, NULL);
457}
458
459static const char *pid_file;
460
461static void write_pid_file(void)
462{
463 if (pid_file) {
464 dbg("creating pid file %s", pid_file);
465 FILE *fp;
466
467 fp = fopen(pid_file, "w");
468 if (!fp) {
469 err("pid_file: %s: %d (%s)",
470 pid_file, errno, strerror(errno));
471 return;
472 }
473 fprintf(fp, "%d\n", getpid());
474 fclose(fp);
475 }
476}
477
478static void remove_pid_file(void)
479{
480 if (pid_file) {
481 dbg("removing pid file %s", pid_file);
482 unlink(pid_file);
483 }
484}
485
486static int do_standalone_mode(int daemonize, int ipv4, int ipv6)
487{
488 struct addrinfo *ai_head;
489 int sockfdlist[MAXSOCKFD];
490 int nsockfd, family;
491 int i, terminate;
492 struct pollfd *fds;
493 struct timespec timeout;
494 sigset_t sigmask;
495
496 if (usbip_host_driver_open()) {
497 err("please load " USBIP_CORE_MOD_NAME ".ko and "
498 USBIP_HOST_DRV_NAME ".ko!");
499 return -1;
500 }
501
502 if (daemonize) {
503 if (daemon(0, 0) < 0) {
504 err("daemonizing failed: %s", strerror(errno));
505 usbip_host_driver_close();
506 return -1;
507 }
508 umask(0);
509 usbip_use_syslog = 1;
510 }
511 set_signal();
512 write_pid_file();
513
514 info("starting " PROGNAME " (%s)", usbip_version_string);
515
516 /*
517 * To suppress warnings on systems with bindv6only disabled
518 * (default), we use seperate sockets for IPv6 and IPv4 and set
519 * IPV6_V6ONLY on the IPv6 sockets.
520 */
521 if (ipv4 && ipv6)
522 family = AF_UNSPEC;
523 else if (ipv4)
524 family = AF_INET;
525 else
526 family = AF_INET6;
527
528 ai_head = do_getaddrinfo(NULL, family);
529 if (!ai_head) {
530 usbip_host_driver_close();
531 return -1;
532 }
533 nsockfd = listen_all_addrinfo(ai_head, sockfdlist,
534 sizeof(sockfdlist) / sizeof(*sockfdlist));
535 freeaddrinfo(ai_head);
536 if (nsockfd <= 0) {
537 err("failed to open a listening socket");
538 usbip_host_driver_close();
539 return -1;
540 }
541
542 dbg("listening on %d address%s", nsockfd, (nsockfd == 1) ? "" : "es");
543
544 fds = calloc(nsockfd, sizeof(struct pollfd));
545 for (i = 0; i < nsockfd; i++) {
546 fds[i].fd = sockfdlist[i];
547 fds[i].events = POLLIN;
548 }
549 timeout.tv_sec = MAIN_LOOP_TIMEOUT;
550 timeout.tv_nsec = 0;
551
552 sigfillset(&sigmask);
553 sigdelset(&sigmask, SIGTERM);
554 sigdelset(&sigmask, SIGINT);
555
556 terminate = 0;
557 while (!terminate) {
558 int r;
559
560 r = ppoll(fds, nsockfd, &timeout, &sigmask);
561 if (r < 0) {
562 dbg("%s", strerror(errno));
563 terminate = 1;
564 } else if (r) {
565 for (i = 0; i < nsockfd; i++) {
566 if (fds[i].revents & POLLIN) {
567 dbg("read event on fd[%d]=%d",
568 i, sockfdlist[i]);
569 process_request(sockfdlist[i]);
570 }
571 }
572 } else {
573 dbg("heartbeat timeout on ppoll()");
574 }
575 }
576
577 info("shutting down " PROGNAME);
578 free(fds);
579 usbip_host_driver_close();
580
581 return 0;
582}
583
584int main(int argc, char *argv[])
585{
586 static const struct option longopts[] = {
587 { "ipv4", no_argument, NULL, '4' },
588 { "ipv6", no_argument, NULL, '6' },
589 { "daemon", no_argument, NULL, 'D' },
590 { "daemon", no_argument, NULL, 'D' },
591 { "debug", no_argument, NULL, 'd' },
592 { "pid", optional_argument, NULL, 'P' },
593 { "tcp-port", required_argument, NULL, 't' },
594 { "help", no_argument, NULL, 'h' },
595 { "version", no_argument, NULL, 'v' },
596 { NULL, 0, NULL, 0 }
597 };
598
599 enum {
600 cmd_standalone_mode = 1,
601 cmd_help,
602 cmd_version
603 } cmd;
604
605 int daemonize = 0;
606 int ipv4 = 0, ipv6 = 0;
607 int opt, rc = -1;
608
609 pid_file = NULL;
610
611 usbip_use_stderr = 1;
612 usbip_use_syslog = 0;
613
614 if (geteuid() != 0)
615 err("not running as root?");
616
617 cmd = cmd_standalone_mode;
618 for (;;) {
619 opt = getopt_long(argc, argv, "46DdP::t:hv", longopts, NULL);
620
621 if (opt == -1)
622 break;
623
624 switch (opt) {
625 case '4':
626 ipv4 = 1;
627 break;
628 case '6':
629 ipv6 = 1;
630 break;
631 case 'D':
632 daemonize = 1;
633 break;
634 case 'd':
635 usbip_use_debug = 1;
636 break;
637 case 'h':
638 cmd = cmd_help;
639 break;
640 case 'P':
641 pid_file = optarg ? optarg : DEFAULT_PID_FILE;
642 break;
643 case 't':
644 usbip_setup_port_number(optarg);
645 break;
646 case 'v':
647 cmd = cmd_version;
648 break;
649 case '?':
650 usbipd_help();
651 default:
652 goto err_out;
653 }
654 }
655
656 if (!ipv4 && !ipv6)
657 ipv4 = ipv6 = 1;
658
659 switch (cmd) {
660 case cmd_standalone_mode:
661 rc = do_standalone_mode(daemonize, ipv4, ipv6);
662 remove_pid_file();
663 break;
664 case cmd_version:
665 printf(PROGNAME " (%s)\n", usbip_version_string);
666 rc = 0;
667 break;
668 case cmd_help:
669 usbipd_help();
670 rc = 0;
671 break;
672 default:
673 usbipd_help();
674 goto err_out;
675 }
676
677err_out:
678 return (rc > -1 ? EXIT_SUCCESS : EXIT_FAILURE);
679}
diff --git a/drivers/staging/usbip/userspace/src/utils.c b/drivers/staging/usbip/userspace/src/utils.c
deleted file mode 100644
index 2b3d6d235015..000000000000
--- a/drivers/staging/usbip/userspace/src/utils.c
+++ /dev/null
@@ -1,52 +0,0 @@
1/*
2 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
3 * 2005-2007 Takahiro Hirofuchi
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#include <errno.h>
20#include <stdio.h>
21#include <string.h>
22
23#include "usbip_common.h"
24#include "utils.h"
25#include "sysfs_utils.h"
26
27int modify_match_busid(char *busid, int add)
28{
29 char attr_name[] = "match_busid";
30 char command[SYSFS_BUS_ID_SIZE + 4];
31 char match_busid_attr_path[SYSFS_PATH_MAX];
32 int rc;
33
34 snprintf(match_busid_attr_path, sizeof(match_busid_attr_path),
35 "%s/%s/%s/%s/%s/%s", SYSFS_MNT_PATH, SYSFS_BUS_NAME,
36 SYSFS_BUS_TYPE, SYSFS_DRIVERS_NAME, USBIP_HOST_DRV_NAME,
37 attr_name);
38
39 if (add)
40 snprintf(command, SYSFS_BUS_ID_SIZE + 4, "add %s", busid);
41 else
42 snprintf(command, SYSFS_BUS_ID_SIZE + 4, "del %s", busid);
43
44 rc = write_sysfs_attribute(match_busid_attr_path, command,
45 sizeof(command));
46 if (rc < 0) {
47 dbg("failed to write match_busid: %s", strerror(errno));
48 return -1;
49 }
50
51 return 0;
52}
diff --git a/drivers/staging/usbip/userspace/src/utils.h b/drivers/staging/usbip/userspace/src/utils.h
deleted file mode 100644
index 5916fd3e02a6..000000000000
--- a/drivers/staging/usbip/userspace/src/utils.h
+++ /dev/null
@@ -1,25 +0,0 @@
1/*
2 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
3 * 2005-2007 Takahiro Hirofuchi
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef __UTILS_H
20#define __UTILS_H
21
22int modify_match_busid(char *busid, int add);
23
24#endif /* __UTILS_H */
25
diff --git a/drivers/thunderbolt/path.c b/drivers/thunderbolt/path.c
index 8fcf8a7b6c22..9562cd026dc0 100644
--- a/drivers/thunderbolt/path.c
+++ b/drivers/thunderbolt/path.c
@@ -150,7 +150,26 @@ int tb_path_activate(struct tb_path *path)
150 150
151 /* Activate hops. */ 151 /* Activate hops. */
152 for (i = path->path_length - 1; i >= 0; i--) { 152 for (i = path->path_length - 1; i >= 0; i--) {
153 struct tb_regs_hop hop; 153 struct tb_regs_hop hop = { 0 };
154
155 /*
156 * We do (currently) not tear down paths setup by the firmeware.
157 * If a firmware device is unplugged and plugged in again then
158 * it can happen that we reuse some of the hops from the (now
159 * defunct) firmeware path. This causes the hotplug operation to
160 * fail (the pci device does not show up). Clearing the hop
161 * before overwriting it fixes the problem.
162 *
163 * Should be removed once we discover and tear down firmeware
164 * paths.
165 */
166 res = tb_port_write(path->hops[i].in_port, &hop, TB_CFG_HOPS,
167 2 * path->hops[i].in_hop_index, 2);
168 if (res) {
169 __tb_path_deactivate_hops(path, i);
170 __tb_path_deallocate_nfc(path, 0);
171 goto err;
172 }
154 173
155 /* dword 0 */ 174 /* dword 0 */
156 hop.next_hop = path->hops[i].next_hop_index; 175 hop.next_hop = path->hops[i].next_hop_index;
diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig
index e0cad4418085..cf1b19bca306 100644
--- a/drivers/usb/Kconfig
+++ b/drivers/usb/Kconfig
@@ -92,6 +92,8 @@ source "drivers/usb/storage/Kconfig"
92 92
93source "drivers/usb/image/Kconfig" 93source "drivers/usb/image/Kconfig"
94 94
95source "drivers/usb/usbip/Kconfig"
96
95endif 97endif
96 98
97source "drivers/usb/musb/Kconfig" 99source "drivers/usb/musb/Kconfig"
diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile
index 3cba892b83a2..d7be71778059 100644
--- a/drivers/usb/Makefile
+++ b/drivers/usb/Makefile
@@ -60,3 +60,5 @@ obj-$(CONFIG_USB_RENESAS_USBHS) += renesas_usbhs/
60obj-$(CONFIG_USB_GADGET) += gadget/ 60obj-$(CONFIG_USB_GADGET) += gadget/
61 61
62obj-$(CONFIG_USB_COMMON) += common/ 62obj-$(CONFIG_USB_COMMON) += common/
63
64obj-$(CONFIG_USBIP_CORE) += usbip/
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 8a4dcbc7a75f..46f5161c7891 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -1728,8 +1728,14 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
1728 * - Change autosuspend delay of hub can avoid unnecessary auto 1728 * - Change autosuspend delay of hub can avoid unnecessary auto
1729 * suspend timer for hub, also may decrease power consumption 1729 * suspend timer for hub, also may decrease power consumption
1730 * of USB bus. 1730 * of USB bus.
1731 *
1732 * - If user has indicated to prevent autosuspend by passing
1733 * usbcore.autosuspend = -1 then keep autosuspend disabled.
1731 */ 1734 */
1732 pm_runtime_set_autosuspend_delay(&hdev->dev, 0); 1735#ifdef CONFIG_PM_RUNTIME
1736 if (hdev->dev.power.autosuspend_delay >= 0)
1737 pm_runtime_set_autosuspend_delay(&hdev->dev, 0);
1738#endif
1733 1739
1734 /* 1740 /*
1735 * Hubs have proper suspend/resume support, except for root hubs 1741 * Hubs have proper suspend/resume support, except for root hubs
@@ -2107,8 +2113,8 @@ void usb_disconnect(struct usb_device **pdev)
2107{ 2113{
2108 struct usb_port *port_dev = NULL; 2114 struct usb_port *port_dev = NULL;
2109 struct usb_device *udev = *pdev; 2115 struct usb_device *udev = *pdev;
2110 struct usb_hub *hub; 2116 struct usb_hub *hub = NULL;
2111 int port1; 2117 int port1 = 1;
2112 2118
2113 /* mark the device as inactive, so any further urb submissions for 2119 /* mark the device as inactive, so any further urb submissions for
2114 * this device (and any of its children) will fail immediately. 2120 * this device (and any of its children) will fail immediately.
@@ -4631,9 +4637,7 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
4631 if (status != -ENODEV && 4637 if (status != -ENODEV &&
4632 port1 != unreliable_port && 4638 port1 != unreliable_port &&
4633 printk_ratelimit()) 4639 printk_ratelimit())
4634 dev_err(&udev->dev, "connect-debounce failed, port %d disabled\n", 4640 dev_err(&port_dev->dev, "connect-debounce failed\n");
4635 port1);
4636
4637 portstatus &= ~USB_PORT_STAT_CONNECTION; 4641 portstatus &= ~USB_PORT_STAT_CONNECTION;
4638 unreliable_port = port1; 4642 unreliable_port = port1;
4639 } else { 4643 } else {
diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
index 0ba9c335b584..7c9618e916e2 100644
--- a/drivers/usb/dwc2/gadget.c
+++ b/drivers/usb/dwc2/gadget.c
@@ -1901,7 +1901,7 @@ static void s3c_hsotg_epint(struct s3c_hsotg *hsotg, unsigned int idx,
1901static void s3c_hsotg_irq_enumdone(struct s3c_hsotg *hsotg) 1901static void s3c_hsotg_irq_enumdone(struct s3c_hsotg *hsotg)
1902{ 1902{
1903 u32 dsts = readl(hsotg->regs + DSTS); 1903 u32 dsts = readl(hsotg->regs + DSTS);
1904 int ep0_mps = 0, ep_mps; 1904 int ep0_mps = 0, ep_mps = 8;
1905 1905
1906 /* 1906 /*
1907 * This should signal the finish of the enumeration phase 1907 * This should signal the finish of the enumeration phase
diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
index ef4936ff626c..9dcfbe7cd5f5 100644
--- a/drivers/usb/dwc3/dwc3-omap.c
+++ b/drivers/usb/dwc3/dwc3-omap.c
@@ -425,7 +425,7 @@ static void dwc3_omap_set_utmi_mode(struct dwc3_omap *omap)
425 425
426static int dwc3_omap_extcon_register(struct dwc3_omap *omap) 426static int dwc3_omap_extcon_register(struct dwc3_omap *omap)
427{ 427{
428 u32 ret; 428 int ret;
429 struct device_node *node = omap->dev->of_node; 429 struct device_node *node = omap->dev->of_node;
430 struct extcon_dev *edev; 430 struct extcon_dev *edev;
431 431
diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile
index a186afeaa700..9add915d41f7 100644
--- a/drivers/usb/gadget/Makefile
+++ b/drivers/usb/gadget/Makefile
@@ -3,7 +3,7 @@
3# 3#
4subdir-ccflags-$(CONFIG_USB_GADGET_DEBUG) := -DDEBUG 4subdir-ccflags-$(CONFIG_USB_GADGET_DEBUG) := -DDEBUG
5subdir-ccflags-$(CONFIG_USB_GADGET_VERBOSE) += -DVERBOSE_DEBUG 5subdir-ccflags-$(CONFIG_USB_GADGET_VERBOSE) += -DVERBOSE_DEBUG
6ccflags-y += -I$(PWD)/drivers/usb/gadget/udc 6ccflags-y += -Idrivers/usb/gadget/udc
7 7
8obj-$(CONFIG_USB_LIBCOMPOSITE) += libcomposite.o 8obj-$(CONFIG_USB_LIBCOMPOSITE) += libcomposite.o
9libcomposite-y := usbstring.o config.o epautoconf.o 9libcomposite-y := usbstring.o config.o epautoconf.o
diff --git a/drivers/usb/gadget/function/Makefile b/drivers/usb/gadget/function/Makefile
index 6d91f21b52a6..83ae1065149d 100644
--- a/drivers/usb/gadget/function/Makefile
+++ b/drivers/usb/gadget/function/Makefile
@@ -2,8 +2,8 @@
2# USB peripheral controller drivers 2# USB peripheral controller drivers
3# 3#
4 4
5ccflags-y := -I$(PWD)/drivers/usb/gadget/ 5ccflags-y := -Idrivers/usb/gadget/
6ccflags-y += -I$(PWD)/drivers/usb/gadget/udc/ 6ccflags-y += -Idrivers/usb/gadget/udc/
7 7
8# USB Functions 8# USB Functions
9usb_f_acm-y := f_acm.o 9usb_f_acm-y := f_acm.o
diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c
index d50adda913cf..6e6f87656e7b 100644
--- a/drivers/usb/gadget/function/u_ether.c
+++ b/drivers/usb/gadget/function/u_ether.c
@@ -1127,10 +1127,7 @@ void gether_disconnect(struct gether *link)
1127 1127
1128 DBG(dev, "%s\n", __func__); 1128 DBG(dev, "%s\n", __func__);
1129 1129
1130 netif_tx_lock(dev->net);
1131 netif_stop_queue(dev->net); 1130 netif_stop_queue(dev->net);
1132 netif_tx_unlock(dev->net);
1133
1134 netif_carrier_off(dev->net); 1131 netif_carrier_off(dev->net);
1135 1132
1136 /* disable endpoints, forcing (synchronous) completion 1133 /* disable endpoints, forcing (synchronous) completion
diff --git a/drivers/usb/gadget/function/uvc_video.c b/drivers/usb/gadget/function/uvc_video.c
index 71e896d4c5ae..a5eb9a3fbb7a 100644
--- a/drivers/usb/gadget/function/uvc_video.c
+++ b/drivers/usb/gadget/function/uvc_video.c
@@ -195,6 +195,7 @@ uvc_video_complete(struct usb_ep *ep, struct usb_request *req)
195 printk(KERN_INFO "Failed to queue request (%d).\n", ret); 195 printk(KERN_INFO "Failed to queue request (%d).\n", ret);
196 usb_ep_set_halt(ep); 196 usb_ep_set_halt(ep);
197 spin_unlock_irqrestore(&video->queue.irqlock, flags); 197 spin_unlock_irqrestore(&video->queue.irqlock, flags);
198 uvc_queue_cancel(queue, 0);
198 goto requeue; 199 goto requeue;
199 } 200 }
200 spin_unlock_irqrestore(&video->queue.irqlock, flags); 201 spin_unlock_irqrestore(&video->queue.irqlock, flags);
@@ -281,6 +282,7 @@ error:
281static int 282static int
282uvc_video_pump(struct uvc_video *video) 283uvc_video_pump(struct uvc_video *video)
283{ 284{
285 struct uvc_video_queue *queue = &video->queue;
284 struct usb_request *req; 286 struct usb_request *req;
285 struct uvc_buffer *buf; 287 struct uvc_buffer *buf;
286 unsigned long flags; 288 unsigned long flags;
@@ -322,6 +324,7 @@ uvc_video_pump(struct uvc_video *video)
322 printk(KERN_INFO "Failed to queue request (%d)\n", ret); 324 printk(KERN_INFO "Failed to queue request (%d)\n", ret);
323 usb_ep_set_halt(video->ep); 325 usb_ep_set_halt(video->ep);
324 spin_unlock_irqrestore(&video->queue.irqlock, flags); 326 spin_unlock_irqrestore(&video->queue.irqlock, flags);
327 uvc_queue_cancel(queue, 0);
325 break; 328 break;
326 } 329 }
327 spin_unlock_irqrestore(&video->queue.irqlock, flags); 330 spin_unlock_irqrestore(&video->queue.irqlock, flags);
diff --git a/drivers/usb/gadget/legacy/Makefile b/drivers/usb/gadget/legacy/Makefile
index a11aad5635df..edba2d1ee0f3 100644
--- a/drivers/usb/gadget/legacy/Makefile
+++ b/drivers/usb/gadget/legacy/Makefile
@@ -2,9 +2,9 @@
2# USB gadget drivers 2# USB gadget drivers
3# 3#
4 4
5ccflags-y := -I$(PWD)/drivers/usb/gadget/ 5ccflags-y := -Idrivers/usb/gadget/
6ccflags-y += -I$(PWD)/drivers/usb/gadget/udc/ 6ccflags-y += -Idrivers/usb/gadget/udc/
7ccflags-y += -I$(PWD)/drivers/usb/gadget/function/ 7ccflags-y += -Idrivers/usb/gadget/function/
8 8
9g_zero-y := zero.o 9g_zero-y := zero.o
10g_audio-y := audio.o 10g_audio-y := audio.o
diff --git a/drivers/usb/gadget/legacy/dbgp.c b/drivers/usb/gadget/legacy/dbgp.c
index 986fc511a2ed..225e385a6160 100644
--- a/drivers/usb/gadget/legacy/dbgp.c
+++ b/drivers/usb/gadget/legacy/dbgp.c
@@ -222,10 +222,12 @@ static void dbgp_unbind(struct usb_gadget *gadget)
222{ 222{
223#ifdef CONFIG_USB_G_DBGP_SERIAL 223#ifdef CONFIG_USB_G_DBGP_SERIAL
224 kfree(dbgp.serial); 224 kfree(dbgp.serial);
225 dbgp.serial = NULL;
225#endif 226#endif
226 if (dbgp.req) { 227 if (dbgp.req) {
227 kfree(dbgp.req->buf); 228 kfree(dbgp.req->buf);
228 usb_ep_free_request(gadget->ep0, dbgp.req); 229 usb_ep_free_request(gadget->ep0, dbgp.req);
230 dbgp.req = NULL;
229 } 231 }
230 232
231 gadget->ep0->driver_data = NULL; 233 gadget->ep0->driver_data = NULL;
diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c
index 2e4ce7704908..e96077b8bf79 100644
--- a/drivers/usb/gadget/legacy/inode.c
+++ b/drivers/usb/gadget/legacy/inode.c
@@ -440,7 +440,7 @@ ep_write (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
440 440
441 value = -ENOMEM; 441 value = -ENOMEM;
442 kbuf = memdup_user(buf, len); 442 kbuf = memdup_user(buf, len);
443 if (!kbuf) { 443 if (IS_ERR(kbuf)) {
444 value = PTR_ERR(kbuf); 444 value = PTR_ERR(kbuf);
445 goto free1; 445 goto free1;
446 } 446 }
diff --git a/drivers/usb/gadget/udc/Kconfig b/drivers/usb/gadget/udc/Kconfig
index 5151f947a4f5..34ebaa68504c 100644
--- a/drivers/usb/gadget/udc/Kconfig
+++ b/drivers/usb/gadget/udc/Kconfig
@@ -332,7 +332,7 @@ config USB_GOKU
332 gadget drivers to also be dynamically linked. 332 gadget drivers to also be dynamically linked.
333 333
334config USB_EG20T 334config USB_EG20T
335 tristate "Intel EG20T PCH/LAPIS Semiconductor IOH(ML7213/ML7831) UDC" 335 tristate "Intel QUARK X1000/EG20T PCH/LAPIS Semiconductor IOH(ML7213/ML7831) UDC"
336 depends on PCI 336 depends on PCI
337 help 337 help
338 This is a USB device driver for EG20T PCH. 338 This is a USB device driver for EG20T PCH.
@@ -353,6 +353,7 @@ config USB_EG20T
353 ML7213/ML7831 is companion chip for Intel Atom E6xx series. 353 ML7213/ML7831 is companion chip for Intel Atom E6xx series.
354 ML7213/ML7831 is completely compatible for Intel EG20T PCH. 354 ML7213/ML7831 is completely compatible for Intel EG20T PCH.
355 355
356 This driver can be used with Intel's Quark X1000 SOC platform
356# 357#
357# LAST -- dummy/emulated controller 358# LAST -- dummy/emulated controller
358# 359#
diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c
index 906e65f0e4fa..c9fe67e29d35 100644
--- a/drivers/usb/gadget/udc/atmel_usba_udc.c
+++ b/drivers/usb/gadget/udc/atmel_usba_udc.c
@@ -1661,7 +1661,7 @@ static irqreturn_t usba_udc_irq(int irq, void *devid)
1661 if (dma_status) { 1661 if (dma_status) {
1662 int i; 1662 int i;
1663 1663
1664 for (i = 1; i < USBA_NR_DMAS; i++) 1664 for (i = 1; i <= USBA_NR_DMAS; i++)
1665 if (dma_status & (1 << i)) 1665 if (dma_status & (1 << i))
1666 usba_dma_irq(udc, &udc->usba_ep[i]); 1666 usba_dma_irq(udc, &udc->usba_ep[i]);
1667 } 1667 }
diff --git a/drivers/usb/gadget/udc/fusb300_udc.c b/drivers/usb/gadget/udc/fusb300_udc.c
index d40255f784df..5c5d1adda7eb 100644
--- a/drivers/usb/gadget/udc/fusb300_udc.c
+++ b/drivers/usb/gadget/udc/fusb300_udc.c
@@ -1398,13 +1398,17 @@ static int fusb300_probe(struct platform_device *pdev)
1398 1398
1399 /* initialize udc */ 1399 /* initialize udc */
1400 fusb300 = kzalloc(sizeof(struct fusb300), GFP_KERNEL); 1400 fusb300 = kzalloc(sizeof(struct fusb300), GFP_KERNEL);
1401 if (fusb300 == NULL) 1401 if (fusb300 == NULL) {
1402 ret = -ENOMEM;
1402 goto clean_up; 1403 goto clean_up;
1404 }
1403 1405
1404 for (i = 0; i < FUSB300_MAX_NUM_EP; i++) { 1406 for (i = 0; i < FUSB300_MAX_NUM_EP; i++) {
1405 _ep[i] = kzalloc(sizeof(struct fusb300_ep), GFP_KERNEL); 1407 _ep[i] = kzalloc(sizeof(struct fusb300_ep), GFP_KERNEL);
1406 if (_ep[i] == NULL) 1408 if (_ep[i] == NULL) {
1409 ret = -ENOMEM;
1407 goto clean_up; 1410 goto clean_up;
1411 }
1408 fusb300->ep[i] = _ep[i]; 1412 fusb300->ep[i] = _ep[i];
1409 } 1413 }
1410 1414
diff --git a/drivers/usb/gadget/udc/pch_udc.c b/drivers/usb/gadget/udc/pch_udc.c
index eb8c3bedb57a..460d953c91b6 100644
--- a/drivers/usb/gadget/udc/pch_udc.c
+++ b/drivers/usb/gadget/udc/pch_udc.c
@@ -343,6 +343,7 @@ struct pch_vbus_gpio_data {
343 * @setup_data: Received setup data 343 * @setup_data: Received setup data
344 * @phys_addr: of device memory 344 * @phys_addr: of device memory
345 * @base_addr: for mapped device memory 345 * @base_addr: for mapped device memory
346 * @bar: Indicates which PCI BAR for USB regs
346 * @irq: IRQ line for the device 347 * @irq: IRQ line for the device
347 * @cfg_data: current cfg, intf, and alt in use 348 * @cfg_data: current cfg, intf, and alt in use
348 * @vbus_gpio: GPIO informaton for detecting VBUS 349 * @vbus_gpio: GPIO informaton for detecting VBUS
@@ -370,14 +371,17 @@ struct pch_udc_dev {
370 struct usb_ctrlrequest setup_data; 371 struct usb_ctrlrequest setup_data;
371 unsigned long phys_addr; 372 unsigned long phys_addr;
372 void __iomem *base_addr; 373 void __iomem *base_addr;
374 unsigned bar;
373 unsigned irq; 375 unsigned irq;
374 struct pch_udc_cfg_data cfg_data; 376 struct pch_udc_cfg_data cfg_data;
375 struct pch_vbus_gpio_data vbus_gpio; 377 struct pch_vbus_gpio_data vbus_gpio;
376}; 378};
377#define to_pch_udc(g) (container_of((g), struct pch_udc_dev, gadget)) 379#define to_pch_udc(g) (container_of((g), struct pch_udc_dev, gadget))
378 380
381#define PCH_UDC_PCI_BAR_QUARK_X1000 0
379#define PCH_UDC_PCI_BAR 1 382#define PCH_UDC_PCI_BAR 1
380#define PCI_DEVICE_ID_INTEL_EG20T_UDC 0x8808 383#define PCI_DEVICE_ID_INTEL_EG20T_UDC 0x8808
384#define PCI_DEVICE_ID_INTEL_QUARK_X1000_UDC 0x0939
381#define PCI_VENDOR_ID_ROHM 0x10DB 385#define PCI_VENDOR_ID_ROHM 0x10DB
382#define PCI_DEVICE_ID_ML7213_IOH_UDC 0x801D 386#define PCI_DEVICE_ID_ML7213_IOH_UDC 0x801D
383#define PCI_DEVICE_ID_ML7831_IOH_UDC 0x8808 387#define PCI_DEVICE_ID_ML7831_IOH_UDC 0x8808
@@ -3076,7 +3080,7 @@ static void pch_udc_remove(struct pci_dev *pdev)
3076 iounmap(dev->base_addr); 3080 iounmap(dev->base_addr);
3077 if (dev->mem_region) 3081 if (dev->mem_region)
3078 release_mem_region(dev->phys_addr, 3082 release_mem_region(dev->phys_addr,
3079 pci_resource_len(pdev, PCH_UDC_PCI_BAR)); 3083 pci_resource_len(pdev, dev->bar));
3080 if (dev->active) 3084 if (dev->active)
3081 pci_disable_device(pdev); 3085 pci_disable_device(pdev);
3082 kfree(dev); 3086 kfree(dev);
@@ -3144,9 +3148,15 @@ static int pch_udc_probe(struct pci_dev *pdev,
3144 dev->active = 1; 3148 dev->active = 1;
3145 pci_set_drvdata(pdev, dev); 3149 pci_set_drvdata(pdev, dev);
3146 3150
3151 /* Determine BAR based on PCI ID */
3152 if (id->device == PCI_DEVICE_ID_INTEL_QUARK_X1000_UDC)
3153 dev->bar = PCH_UDC_PCI_BAR_QUARK_X1000;
3154 else
3155 dev->bar = PCH_UDC_PCI_BAR;
3156
3147 /* PCI resource allocation */ 3157 /* PCI resource allocation */
3148 resource = pci_resource_start(pdev, 1); 3158 resource = pci_resource_start(pdev, dev->bar);
3149 len = pci_resource_len(pdev, 1); 3159 len = pci_resource_len(pdev, dev->bar);
3150 3160
3151 if (!request_mem_region(resource, len, KBUILD_MODNAME)) { 3161 if (!request_mem_region(resource, len, KBUILD_MODNAME)) {
3152 dev_err(&pdev->dev, "%s: pci device used already\n", __func__); 3162 dev_err(&pdev->dev, "%s: pci device used already\n", __func__);
@@ -3212,6 +3222,12 @@ finished:
3212 3222
3213static const struct pci_device_id pch_udc_pcidev_id[] = { 3223static const struct pci_device_id pch_udc_pcidev_id[] = {
3214 { 3224 {
3225 PCI_DEVICE(PCI_VENDOR_ID_INTEL,
3226 PCI_DEVICE_ID_INTEL_QUARK_X1000_UDC),
3227 .class = (PCI_CLASS_SERIAL_USB << 8) | 0xfe,
3228 .class_mask = 0xffffffff,
3229 },
3230 {
3215 PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EG20T_UDC), 3231 PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EG20T_UDC),
3216 .class = (PCI_CLASS_SERIAL_USB << 8) | 0xfe, 3232 .class = (PCI_CLASS_SERIAL_USB << 8) | 0xfe,
3217 .class_mask = 0xffffffff, 3233 .class_mask = 0xffffffff,
diff --git a/drivers/usb/gadget/udc/r8a66597-udc.c b/drivers/usb/gadget/udc/r8a66597-udc.c
index 46008421c1ec..de2a8713b428 100644
--- a/drivers/usb/gadget/udc/r8a66597-udc.c
+++ b/drivers/usb/gadget/udc/r8a66597-udc.c
@@ -1868,8 +1868,8 @@ static int r8a66597_probe(struct platform_device *pdev)
1868 1868
1869 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1869 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1870 reg = devm_ioremap_resource(&pdev->dev, res); 1870 reg = devm_ioremap_resource(&pdev->dev, res);
1871 if (!reg) 1871 if (IS_ERR(reg))
1872 return -ENODEV; 1872 return PTR_ERR(reg);
1873 1873
1874 ires = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 1874 ires = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1875 irq = ires->start; 1875 irq = ires->start;
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
index cc305c71ac3d..6130b7574908 100644
--- a/drivers/usb/host/ehci-hub.c
+++ b/drivers/usb/host/ehci-hub.c
@@ -1230,7 +1230,7 @@ int ehci_hub_control(
1230 if (selector == EHSET_TEST_SINGLE_STEP_SET_FEATURE) { 1230 if (selector == EHSET_TEST_SINGLE_STEP_SET_FEATURE) {
1231 spin_unlock_irqrestore(&ehci->lock, flags); 1231 spin_unlock_irqrestore(&ehci->lock, flags);
1232 retval = ehset_single_step_set_feature(hcd, 1232 retval = ehset_single_step_set_feature(hcd,
1233 wIndex); 1233 wIndex + 1);
1234 spin_lock_irqsave(&ehci->lock, flags); 1234 spin_lock_irqsave(&ehci->lock, flags);
1235 break; 1235 break;
1236 } 1236 }
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index 687d36608155..c22a3e15a16e 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -101,6 +101,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
101 /* AMD PLL quirk */ 101 /* AMD PLL quirk */
102 if (pdev->vendor == PCI_VENDOR_ID_AMD && usb_amd_find_chipset_info()) 102 if (pdev->vendor == PCI_VENDOR_ID_AMD && usb_amd_find_chipset_info())
103 xhci->quirks |= XHCI_AMD_PLL_FIX; 103 xhci->quirks |= XHCI_AMD_PLL_FIX;
104
105 if (pdev->vendor == PCI_VENDOR_ID_AMD)
106 xhci->quirks |= XHCI_TRUST_TX_LENGTH;
107
104 if (pdev->vendor == PCI_VENDOR_ID_INTEL) { 108 if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
105 xhci->quirks |= XHCI_LPM_SUPPORT; 109 xhci->quirks |= XHCI_LPM_SUPPORT;
106 xhci->quirks |= XHCI_INTEL_HOST; 110 xhci->quirks |= XHCI_INTEL_HOST;
@@ -151,6 +155,11 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
151 if (pdev->vendor == PCI_VENDOR_ID_VIA) 155 if (pdev->vendor == PCI_VENDOR_ID_VIA)
152 xhci->quirks |= XHCI_RESET_ON_RESUME; 156 xhci->quirks |= XHCI_RESET_ON_RESUME;
153 157
158 /* See https://bugzilla.kernel.org/show_bug.cgi?id=79511 */
159 if (pdev->vendor == PCI_VENDOR_ID_VIA &&
160 pdev->device == 0x3432)
161 xhci->quirks |= XHCI_BROKEN_STREAMS;
162
154 if (xhci->quirks & XHCI_RESET_ON_RESUME) 163 if (xhci->quirks & XHCI_RESET_ON_RESUME)
155 xhci_dbg_trace(xhci, trace_xhci_dbg_quirks, 164 xhci_dbg_trace(xhci, trace_xhci_dbg_quirks,
156 "QUIRK: Resetting on resume"); 165 "QUIRK: Resetting on resume");
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 60fb52ae864b..abed30b82905 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -364,32 +364,6 @@ static void ring_doorbell_for_active_rings(struct xhci_hcd *xhci,
364 } 364 }
365} 365}
366 366
367/*
368 * Find the segment that trb is in. Start searching in start_seg.
369 * If we must move past a segment that has a link TRB with a toggle cycle state
370 * bit set, then we will toggle the value pointed at by cycle_state.
371 */
372static struct xhci_segment *find_trb_seg(
373 struct xhci_segment *start_seg,
374 union xhci_trb *trb, int *cycle_state)
375{
376 struct xhci_segment *cur_seg = start_seg;
377 struct xhci_generic_trb *generic_trb;
378
379 while (cur_seg->trbs > trb ||
380 &cur_seg->trbs[TRBS_PER_SEGMENT - 1] < trb) {
381 generic_trb = &cur_seg->trbs[TRBS_PER_SEGMENT - 1].generic;
382 if (generic_trb->field[3] & cpu_to_le32(LINK_TOGGLE))
383 *cycle_state ^= 0x1;
384 cur_seg = cur_seg->next;
385 if (cur_seg == start_seg)
386 /* Looped over the entire list. Oops! */
387 return NULL;
388 }
389 return cur_seg;
390}
391
392
393static struct xhci_ring *xhci_triad_to_transfer_ring(struct xhci_hcd *xhci, 367static struct xhci_ring *xhci_triad_to_transfer_ring(struct xhci_hcd *xhci,
394 unsigned int slot_id, unsigned int ep_index, 368 unsigned int slot_id, unsigned int ep_index,
395 unsigned int stream_id) 369 unsigned int stream_id)
@@ -459,9 +433,12 @@ void xhci_find_new_dequeue_state(struct xhci_hcd *xhci,
459 struct xhci_virt_device *dev = xhci->devs[slot_id]; 433 struct xhci_virt_device *dev = xhci->devs[slot_id];
460 struct xhci_virt_ep *ep = &dev->eps[ep_index]; 434 struct xhci_virt_ep *ep = &dev->eps[ep_index];
461 struct xhci_ring *ep_ring; 435 struct xhci_ring *ep_ring;
462 struct xhci_generic_trb *trb; 436 struct xhci_segment *new_seg;
437 union xhci_trb *new_deq;
463 dma_addr_t addr; 438 dma_addr_t addr;
464 u64 hw_dequeue; 439 u64 hw_dequeue;
440 bool cycle_found = false;
441 bool td_last_trb_found = false;
465 442
466 ep_ring = xhci_triad_to_transfer_ring(xhci, slot_id, 443 ep_ring = xhci_triad_to_transfer_ring(xhci, slot_id,
467 ep_index, stream_id); 444 ep_index, stream_id);
@@ -486,45 +463,45 @@ void xhci_find_new_dequeue_state(struct xhci_hcd *xhci,
486 hw_dequeue = le64_to_cpu(ep_ctx->deq); 463 hw_dequeue = le64_to_cpu(ep_ctx->deq);
487 } 464 }
488 465
489 /* Find virtual address and segment of hardware dequeue pointer */ 466 new_seg = ep_ring->deq_seg;
490 state->new_deq_seg = ep_ring->deq_seg; 467 new_deq = ep_ring->dequeue;
491 state->new_deq_ptr = ep_ring->dequeue; 468 state->new_cycle_state = hw_dequeue & 0x1;
492 while (xhci_trb_virt_to_dma(state->new_deq_seg, state->new_deq_ptr) 469
493 != (dma_addr_t)(hw_dequeue & ~0xf)) {
494 next_trb(xhci, ep_ring, &state->new_deq_seg,
495 &state->new_deq_ptr);
496 if (state->new_deq_ptr == ep_ring->dequeue) {
497 WARN_ON(1);
498 return;
499 }
500 }
501 /* 470 /*
502 * Find cycle state for last_trb, starting at old cycle state of 471 * We want to find the pointer, segment and cycle state of the new trb
503 * hw_dequeue. If there is only one segment ring, find_trb_seg() will 472 * (the one after current TD's last_trb). We know the cycle state at
504 * return immediately and cannot toggle the cycle state if this search 473 * hw_dequeue, so walk the ring until both hw_dequeue and last_trb are
505 * wraps around, so add one more toggle manually in that case. 474 * found.
506 */ 475 */
507 state->new_cycle_state = hw_dequeue & 0x1; 476 do {
508 if (ep_ring->first_seg == ep_ring->first_seg->next && 477 if (!cycle_found && xhci_trb_virt_to_dma(new_seg, new_deq)
509 cur_td->last_trb < state->new_deq_ptr) 478 == (dma_addr_t)(hw_dequeue & ~0xf)) {
510 state->new_cycle_state ^= 0x1; 479 cycle_found = true;
480 if (td_last_trb_found)
481 break;
482 }
483 if (new_deq == cur_td->last_trb)
484 td_last_trb_found = true;
511 485
512 state->new_deq_ptr = cur_td->last_trb; 486 if (cycle_found &&
513 xhci_dbg_trace(xhci, trace_xhci_dbg_cancel_urb, 487 TRB_TYPE_LINK_LE32(new_deq->generic.field[3]) &&
514 "Finding segment containing last TRB in TD."); 488 new_deq->generic.field[3] & cpu_to_le32(LINK_TOGGLE))
515 state->new_deq_seg = find_trb_seg(state->new_deq_seg, 489 state->new_cycle_state ^= 0x1;
516 state->new_deq_ptr, &state->new_cycle_state); 490
517 if (!state->new_deq_seg) { 491 next_trb(xhci, ep_ring, &new_seg, &new_deq);
518 WARN_ON(1); 492
519 return; 493 /* Search wrapped around, bail out */
520 } 494 if (new_deq == ep->ring->dequeue) {
495 xhci_err(xhci, "Error: Failed finding new dequeue state\n");
496 state->new_deq_seg = NULL;
497 state->new_deq_ptr = NULL;
498 return;
499 }
500
501 } while (!cycle_found || !td_last_trb_found);
521 502
522 /* Increment to find next TRB after last_trb. Cycle if appropriate. */ 503 state->new_deq_seg = new_seg;
523 trb = &state->new_deq_ptr->generic; 504 state->new_deq_ptr = new_deq;
524 if (TRB_TYPE_LINK_LE32(trb->field[3]) &&
525 (trb->field[3] & cpu_to_le32(LINK_TOGGLE)))
526 state->new_cycle_state ^= 0x1;
527 next_trb(xhci, ep_ring, &state->new_deq_seg, &state->new_deq_ptr);
528 505
529 /* Don't update the ring cycle state for the producer (us). */ 506 /* Don't update the ring cycle state for the producer (us). */
530 xhci_dbg_trace(xhci, trace_xhci_dbg_cancel_urb, 507 xhci_dbg_trace(xhci, trace_xhci_dbg_cancel_urb,
@@ -2487,7 +2464,8 @@ static int handle_tx_event(struct xhci_hcd *xhci,
2487 * last TRB of the previous TD. The command completion handle 2464 * last TRB of the previous TD. The command completion handle
2488 * will take care the rest. 2465 * will take care the rest.
2489 */ 2466 */
2490 if (!event_seg && trb_comp_code == COMP_STOP_INVAL) { 2467 if (!event_seg && (trb_comp_code == COMP_STOP ||
2468 trb_comp_code == COMP_STOP_INVAL)) {
2491 ret = 0; 2469 ret = 0;
2492 goto cleanup; 2470 goto cleanup;
2493 } 2471 }
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index b6f21175b872..c020b094fe7d 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -2880,6 +2880,9 @@ void xhci_cleanup_stalled_ring(struct xhci_hcd *xhci,
2880 ep_index, ep->stopped_stream, ep->stopped_td, 2880 ep_index, ep->stopped_stream, ep->stopped_td,
2881 &deq_state); 2881 &deq_state);
2882 2882
2883 if (!deq_state.new_deq_ptr || !deq_state.new_deq_seg)
2884 return;
2885
2883 /* HW with the reset endpoint quirk will use the saved dequeue state to 2886 /* HW with the reset endpoint quirk will use the saved dequeue state to
2884 * issue a configure endpoint command later. 2887 * issue a configure endpoint command later.
2885 */ 2888 */
diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c
index 06b5d77cd9ad..633caf643122 100644
--- a/drivers/usb/misc/sisusbvga/sisusb.c
+++ b/drivers/usb/misc/sisusbvga/sisusb.c
@@ -3250,6 +3250,7 @@ static const struct usb_device_id sisusb_table[] = {
3250 { USB_DEVICE(0x0711, 0x0918) }, 3250 { USB_DEVICE(0x0711, 0x0918) },
3251 { USB_DEVICE(0x0711, 0x0920) }, 3251 { USB_DEVICE(0x0711, 0x0920) },
3252 { USB_DEVICE(0x0711, 0x0950) }, 3252 { USB_DEVICE(0x0711, 0x0950) },
3253 { USB_DEVICE(0x0711, 0x5200) },
3253 { USB_DEVICE(0x182d, 0x021c) }, 3254 { USB_DEVICE(0x182d, 0x021c) },
3254 { USB_DEVICE(0x182d, 0x0269) }, 3255 { USB_DEVICE(0x182d, 0x0269) },
3255 { } 3256 { }
diff --git a/drivers/usb/musb/ux500_dma.c b/drivers/usb/musb/ux500_dma.c
index 9aad00f11bd5..221faed9f074 100644
--- a/drivers/usb/musb/ux500_dma.c
+++ b/drivers/usb/musb/ux500_dma.c
@@ -96,7 +96,7 @@ static bool ux500_configure_channel(struct dma_channel *channel,
96 struct musb *musb = ux500_channel->controller->private_data; 96 struct musb *musb = ux500_channel->controller->private_data;
97 97
98 dev_dbg(musb->controller, 98 dev_dbg(musb->controller,
99 "packet_sz=%d, mode=%d, dma_addr=0x%llu, len=%d is_tx=%d\n", 99 "packet_sz=%d, mode=%d, dma_addr=0x%llx, len=%d is_tx=%d\n",
100 packet_sz, mode, (unsigned long long) dma_addr, 100 packet_sz, mode, (unsigned long long) dma_addr,
101 len, ux500_channel->is_tx); 101 len, ux500_channel->is_tx);
102 102
diff --git a/drivers/usb/phy/phy-gpio-vbus-usb.c b/drivers/usb/phy/phy-gpio-vbus-usb.c
index ea9e705555df..f4b14bd97e14 100644
--- a/drivers/usb/phy/phy-gpio-vbus-usb.c
+++ b/drivers/usb/phy/phy-gpio-vbus-usb.c
@@ -260,10 +260,8 @@ static int gpio_vbus_probe(struct platform_device *pdev)
260 260
261 gpio_vbus->phy.otg = devm_kzalloc(&pdev->dev, sizeof(struct usb_otg), 261 gpio_vbus->phy.otg = devm_kzalloc(&pdev->dev, sizeof(struct usb_otg),
262 GFP_KERNEL); 262 GFP_KERNEL);
263 if (!gpio_vbus->phy.otg) { 263 if (!gpio_vbus->phy.otg)
264 kfree(gpio_vbus);
265 return -ENOMEM; 264 return -ENOMEM;
266 }
267 265
268 platform_set_drvdata(pdev, gpio_vbus); 266 platform_set_drvdata(pdev, gpio_vbus);
269 gpio_vbus->dev = &pdev->dev; 267 gpio_vbus->dev = &pdev->dev;
diff --git a/drivers/usb/phy/phy-msm-usb.c b/drivers/usb/phy/phy-msm-usb.c
index e4108eec5ef4..afc09087ec36 100644
--- a/drivers/usb/phy/phy-msm-usb.c
+++ b/drivers/usb/phy/phy-msm-usb.c
@@ -1601,8 +1601,8 @@ static int msm_otg_probe(struct platform_device *pdev)
1601 */ 1601 */
1602 if (motg->phy_number) { 1602 if (motg->phy_number) {
1603 phy_select = devm_ioremap_nocache(&pdev->dev, USB2_PHY_SEL, 4); 1603 phy_select = devm_ioremap_nocache(&pdev->dev, USB2_PHY_SEL, 4);
1604 if (IS_ERR(phy_select)) 1604 if (!phy_select)
1605 return PTR_ERR(phy_select); 1605 return -ENOMEM;
1606 /* Enable second PHY with the OTG port */ 1606 /* Enable second PHY with the OTG port */
1607 writel(0x1, phy_select); 1607 writel(0x1, phy_select);
1608 } 1608 }
diff --git a/drivers/usb/phy/phy-samsung-usb.h b/drivers/usb/phy/phy-samsung-usb.h
index 68771bfd1825..80eedd45a20a 100644
--- a/drivers/usb/phy/phy-samsung-usb.h
+++ b/drivers/usb/phy/phy-samsung-usb.h
@@ -216,7 +216,7 @@
216 216
217#define EXYNOS5_DRD_PHYPARAM1 (0x20) 217#define EXYNOS5_DRD_PHYPARAM1 (0x20)
218 218
219#define PHYPARAM1_PCS_TXDEEMPH_MASK (0x1f << 0) 219#define PHYPARAM1_PCS_TXDEEMPH_MASK (0x3f << 0)
220#define PHYPARAM1_PCS_TXDEEMPH (0x1c) 220#define PHYPARAM1_PCS_TXDEEMPH (0x1c)
221 221
222#define EXYNOS5_DRD_PHYTERM (0x24) 222#define EXYNOS5_DRD_PHYTERM (0x24)
diff --git a/drivers/usb/phy/phy.c b/drivers/usb/phy/phy.c
index 6d0f6080eceb..045cd309367a 100644
--- a/drivers/usb/phy/phy.c
+++ b/drivers/usb/phy/phy.c
@@ -232,6 +232,9 @@ struct usb_phy *usb_get_phy_dev(struct device *dev, u8 index)
232 phy = __usb_find_phy_dev(dev, &phy_bind_list, index); 232 phy = __usb_find_phy_dev(dev, &phy_bind_list, index);
233 if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) { 233 if (IS_ERR(phy) || !try_module_get(phy->dev->driver->owner)) {
234 dev_dbg(dev, "unable to find transceiver\n"); 234 dev_dbg(dev, "unable to find transceiver\n");
235 if (!IS_ERR(phy))
236 phy = ERR_PTR(-ENODEV);
237
235 goto err0; 238 goto err0;
236 } 239 }
237 240
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index 216ce3078270..824ea5e7ec8b 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -146,6 +146,7 @@ static const struct usb_device_id id_table_combined[] = {
146 { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) }, 146 { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) },
147 { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) }, 147 { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) },
148 { USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) }, 148 { USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) },
149 { USB_DEVICE(FTDI_VID, FTDI_BM_ATOM_NANO_PID) },
149 { USB_DEVICE(FTDI_VID, FTDI_NXTCAM_PID) }, 150 { USB_DEVICE(FTDI_VID, FTDI_NXTCAM_PID) },
150 { USB_DEVICE(FTDI_VID, FTDI_EV3CON_PID) }, 151 { USB_DEVICE(FTDI_VID, FTDI_EV3CON_PID) },
151 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) }, 152 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) },
@@ -934,6 +935,8 @@ static const struct usb_device_id id_table_combined[] = {
934 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_2_PID) }, 935 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_2_PID) },
935 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_3_PID) }, 936 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_3_PID) },
936 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_4_PID) }, 937 { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_4_PID) },
938 /* ekey Devices */
939 { USB_DEVICE(FTDI_VID, FTDI_EKEY_CONV_USB_PID) },
937 /* Infineon Devices */ 940 /* Infineon Devices */
938 { USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_PID, 1) }, 941 { USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_PID, 1) },
939 { } /* Terminating entry */ 942 { } /* Terminating entry */
diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
index 1e58d90a0b6c..70b0b1d88ae9 100644
--- a/drivers/usb/serial/ftdi_sio_ids.h
+++ b/drivers/usb/serial/ftdi_sio_ids.h
@@ -42,6 +42,8 @@
42/* www.candapter.com Ewert Energy Systems CANdapter device */ 42/* www.candapter.com Ewert Energy Systems CANdapter device */
43#define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */ 43#define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */
44 44
45#define FTDI_BM_ATOM_NANO_PID 0xa559 /* Basic Micro ATOM Nano USB2Serial */
46
45/* 47/*
46 * Texas Instruments XDS100v2 JTAG / BeagleBone A3 48 * Texas Instruments XDS100v2 JTAG / BeagleBone A3
47 * http://processors.wiki.ti.com/index.php/XDS100 49 * http://processors.wiki.ti.com/index.php/XDS100
@@ -1378,3 +1380,8 @@
1378#define BRAINBOXES_US_160_6_PID 0x9006 /* US-160 16xRS232 1Mbaud Port 11 and 12 */ 1380#define BRAINBOXES_US_160_6_PID 0x9006 /* US-160 16xRS232 1Mbaud Port 11 and 12 */
1379#define BRAINBOXES_US_160_7_PID 0x9007 /* US-160 16xRS232 1Mbaud Port 13 and 14 */ 1381#define BRAINBOXES_US_160_7_PID 0x9007 /* US-160 16xRS232 1Mbaud Port 13 and 14 */
1380#define BRAINBOXES_US_160_8_PID 0x9008 /* US-160 16xRS232 1Mbaud Port 15 and 16 */ 1382#define BRAINBOXES_US_160_8_PID 0x9008 /* US-160 16xRS232 1Mbaud Port 15 and 16 */
1383
1384/*
1385 * ekey biometric systems GmbH (http://ekey.net/)
1386 */
1387#define FTDI_EKEY_CONV_USB_PID 0xCB08 /* Converter USB */
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index a9688940543d..54a8120897a6 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -275,8 +275,12 @@ static void option_instat_callback(struct urb *urb);
275#define ZTE_PRODUCT_MF622 0x0001 275#define ZTE_PRODUCT_MF622 0x0001
276#define ZTE_PRODUCT_MF628 0x0015 276#define ZTE_PRODUCT_MF628 0x0015
277#define ZTE_PRODUCT_MF626 0x0031 277#define ZTE_PRODUCT_MF626 0x0031
278#define ZTE_PRODUCT_MC2718 0xffe8
279#define ZTE_PRODUCT_AC2726 0xfff1 278#define ZTE_PRODUCT_AC2726 0xfff1
279#define ZTE_PRODUCT_CDMA_TECH 0xfffe
280#define ZTE_PRODUCT_AC8710T 0xffff
281#define ZTE_PRODUCT_MC2718 0xffe8
282#define ZTE_PRODUCT_AD3812 0xffeb
283#define ZTE_PRODUCT_MC2716 0xffed
280 284
281#define BENQ_VENDOR_ID 0x04a5 285#define BENQ_VENDOR_ID 0x04a5
282#define BENQ_PRODUCT_H10 0x4068 286#define BENQ_PRODUCT_H10 0x4068
@@ -494,6 +498,10 @@ static void option_instat_callback(struct urb *urb);
494#define INOVIA_VENDOR_ID 0x20a6 498#define INOVIA_VENDOR_ID 0x20a6
495#define INOVIA_SEW858 0x1105 499#define INOVIA_SEW858 0x1105
496 500
501/* VIA Telecom */
502#define VIATELECOM_VENDOR_ID 0x15eb
503#define VIATELECOM_PRODUCT_CDS7 0x0001
504
497/* some devices interfaces need special handling due to a number of reasons */ 505/* some devices interfaces need special handling due to a number of reasons */
498enum option_blacklist_reason { 506enum option_blacklist_reason {
499 OPTION_BLACKLIST_NONE = 0, 507 OPTION_BLACKLIST_NONE = 0,
@@ -527,10 +535,18 @@ static const struct option_blacklist_info zte_k3765_z_blacklist = {
527 .reserved = BIT(4), 535 .reserved = BIT(4),
528}; 536};
529 537
538static const struct option_blacklist_info zte_ad3812_z_blacklist = {
539 .sendsetup = BIT(0) | BIT(1) | BIT(2),
540};
541
530static const struct option_blacklist_info zte_mc2718_z_blacklist = { 542static const struct option_blacklist_info zte_mc2718_z_blacklist = {
531 .sendsetup = BIT(1) | BIT(2) | BIT(3) | BIT(4), 543 .sendsetup = BIT(1) | BIT(2) | BIT(3) | BIT(4),
532}; 544};
533 545
546static const struct option_blacklist_info zte_mc2716_z_blacklist = {
547 .sendsetup = BIT(1) | BIT(2) | BIT(3),
548};
549
534static const struct option_blacklist_info huawei_cdc12_blacklist = { 550static const struct option_blacklist_info huawei_cdc12_blacklist = {
535 .reserved = BIT(1) | BIT(2), 551 .reserved = BIT(1) | BIT(2),
536}; 552};
@@ -1070,6 +1086,7 @@ static const struct usb_device_id option_ids[] = {
1070 { USB_DEVICE_INTERFACE_CLASS(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1012, 0xff) }, 1086 { USB_DEVICE_INTERFACE_CLASS(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1012, 0xff) },
1071 { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC650) }, 1087 { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC650) },
1072 { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) }, 1088 { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
1089 { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */
1073 { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ 1090 { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
1074 { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */ 1091 { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */
1075 { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */ 1092 { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */
@@ -1544,13 +1561,18 @@ static const struct usb_device_id option_ids[] = {
1544 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff93, 0xff, 0xff, 0xff) }, 1561 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff93, 0xff, 0xff, 0xff) },
1545 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff94, 0xff, 0xff, 0xff) }, 1562 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff94, 0xff, 0xff, 0xff) },
1546 1563
1547 /* NOTE: most ZTE CDMA devices should be driven by zte_ev, not option */ 1564 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH, 0xff, 0xff, 0xff) },
1565 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) },
1566 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710T, 0xff, 0xff, 0xff) },
1548 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2718, 0xff, 0xff, 0xff), 1567 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2718, 0xff, 0xff, 0xff),
1549 .driver_info = (kernel_ulong_t)&zte_mc2718_z_blacklist }, 1568 .driver_info = (kernel_ulong_t)&zte_mc2718_z_blacklist },
1569 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AD3812, 0xff, 0xff, 0xff),
1570 .driver_info = (kernel_ulong_t)&zte_ad3812_z_blacklist },
1571 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MC2716, 0xff, 0xff, 0xff),
1572 .driver_info = (kernel_ulong_t)&zte_mc2716_z_blacklist },
1550 { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x02, 0x01) }, 1573 { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x02, 0x01) },
1551 { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x02, 0x05) }, 1574 { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x02, 0x05) },
1552 { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x86, 0x10) }, 1575 { USB_VENDOR_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff, 0x86, 0x10) },
1553 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) },
1554 1576
1555 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) }, 1577 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },
1556 { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) }, 1578 { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) },
@@ -1724,6 +1746,7 @@ static const struct usb_device_id option_ids[] = {
1724 { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */ 1746 { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */
1725 { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */ 1747 { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */
1726 { USB_DEVICE(INOVIA_VENDOR_ID, INOVIA_SEW858) }, 1748 { USB_DEVICE(INOVIA_VENDOR_ID, INOVIA_SEW858) },
1749 { USB_DEVICE(VIATELECOM_VENDOR_ID, VIATELECOM_PRODUCT_CDS7) },
1727 { } /* Terminating entry */ 1750 { } /* Terminating entry */
1728}; 1751};
1729MODULE_DEVICE_TABLE(usb, option_ids); 1752MODULE_DEVICE_TABLE(usb, option_ids);
@@ -1916,6 +1939,8 @@ static void option_instat_callback(struct urb *urb)
1916 dev_dbg(dev, "%s: type %x req %x\n", __func__, 1939 dev_dbg(dev, "%s: type %x req %x\n", __func__,
1917 req_pkt->bRequestType, req_pkt->bRequest); 1940 req_pkt->bRequestType, req_pkt->bRequest);
1918 } 1941 }
1942 } else if (status == -ENOENT || status == -ESHUTDOWN) {
1943 dev_dbg(dev, "%s: urb stopped: %d\n", __func__, status);
1919 } else 1944 } else
1920 dev_err(dev, "%s: error %d\n", __func__, status); 1945 dev_err(dev, "%s: error %d\n", __func__, status);
1921 1946
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
index b3d5a35c0d4b..e9bad928039f 100644
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -45,6 +45,7 @@ static const struct usb_device_id id_table[] = {
45 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) }, 45 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) },
46 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_HCR331) }, 46 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_HCR331) },
47 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MOTOROLA) }, 47 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MOTOROLA) },
48 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ZTEK) },
48 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) }, 49 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
49 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) }, 50 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
50 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) }, 51 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) },
diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
index 42bc082896ac..71fd9da1d6e7 100644
--- a/drivers/usb/serial/pl2303.h
+++ b/drivers/usb/serial/pl2303.h
@@ -22,6 +22,7 @@
22#define PL2303_PRODUCT_ID_GPRS 0x0609 22#define PL2303_PRODUCT_ID_GPRS 0x0609
23#define PL2303_PRODUCT_ID_HCR331 0x331a 23#define PL2303_PRODUCT_ID_HCR331 0x331a
24#define PL2303_PRODUCT_ID_MOTOROLA 0x0307 24#define PL2303_PRODUCT_ID_MOTOROLA 0x0307
25#define PL2303_PRODUCT_ID_ZTEK 0xe1f1
25 26
26#define ATEN_VENDOR_ID 0x0557 27#define ATEN_VENDOR_ID 0x0557
27#define ATEN_VENDOR_ID2 0x0547 28#define ATEN_VENDOR_ID2 0x0547
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
index 02de3110fe94..475723c006f9 100644
--- a/drivers/usb/serial/usb-serial.c
+++ b/drivers/usb/serial/usb-serial.c
@@ -764,29 +764,39 @@ static int usb_serial_probe(struct usb_interface *interface,
764 if (usb_endpoint_is_bulk_in(endpoint)) { 764 if (usb_endpoint_is_bulk_in(endpoint)) {
765 /* we found a bulk in endpoint */ 765 /* we found a bulk in endpoint */
766 dev_dbg(ddev, "found bulk in on endpoint %d\n", i); 766 dev_dbg(ddev, "found bulk in on endpoint %d\n", i);
767 bulk_in_endpoint[num_bulk_in] = endpoint; 767 if (num_bulk_in < MAX_NUM_PORTS) {
768 ++num_bulk_in; 768 bulk_in_endpoint[num_bulk_in] = endpoint;
769 ++num_bulk_in;
770 }
769 } 771 }
770 772
771 if (usb_endpoint_is_bulk_out(endpoint)) { 773 if (usb_endpoint_is_bulk_out(endpoint)) {
772 /* we found a bulk out endpoint */ 774 /* we found a bulk out endpoint */
773 dev_dbg(ddev, "found bulk out on endpoint %d\n", i); 775 dev_dbg(ddev, "found bulk out on endpoint %d\n", i);
774 bulk_out_endpoint[num_bulk_out] = endpoint; 776 if (num_bulk_out < MAX_NUM_PORTS) {
775 ++num_bulk_out; 777 bulk_out_endpoint[num_bulk_out] = endpoint;
778 ++num_bulk_out;
779 }
776 } 780 }
777 781
778 if (usb_endpoint_is_int_in(endpoint)) { 782 if (usb_endpoint_is_int_in(endpoint)) {
779 /* we found a interrupt in endpoint */ 783 /* we found a interrupt in endpoint */
780 dev_dbg(ddev, "found interrupt in on endpoint %d\n", i); 784 dev_dbg(ddev, "found interrupt in on endpoint %d\n", i);
781 interrupt_in_endpoint[num_interrupt_in] = endpoint; 785 if (num_interrupt_in < MAX_NUM_PORTS) {
782 ++num_interrupt_in; 786 interrupt_in_endpoint[num_interrupt_in] =
787 endpoint;
788 ++num_interrupt_in;
789 }
783 } 790 }
784 791
785 if (usb_endpoint_is_int_out(endpoint)) { 792 if (usb_endpoint_is_int_out(endpoint)) {
786 /* we found an interrupt out endpoint */ 793 /* we found an interrupt out endpoint */
787 dev_dbg(ddev, "found interrupt out on endpoint %d\n", i); 794 dev_dbg(ddev, "found interrupt out on endpoint %d\n", i);
788 interrupt_out_endpoint[num_interrupt_out] = endpoint; 795 if (num_interrupt_out < MAX_NUM_PORTS) {
789 ++num_interrupt_out; 796 interrupt_out_endpoint[num_interrupt_out] =
797 endpoint;
798 ++num_interrupt_out;
799 }
790 } 800 }
791 } 801 }
792 802
@@ -809,8 +819,10 @@ static int usb_serial_probe(struct usb_interface *interface,
809 if (usb_endpoint_is_int_in(endpoint)) { 819 if (usb_endpoint_is_int_in(endpoint)) {
810 /* we found a interrupt in endpoint */ 820 /* we found a interrupt in endpoint */
811 dev_dbg(ddev, "found interrupt in for Prolific device on separate interface\n"); 821 dev_dbg(ddev, "found interrupt in for Prolific device on separate interface\n");
812 interrupt_in_endpoint[num_interrupt_in] = endpoint; 822 if (num_interrupt_in < MAX_NUM_PORTS) {
813 ++num_interrupt_in; 823 interrupt_in_endpoint[num_interrupt_in] = endpoint;
824 ++num_interrupt_in;
825 }
814 } 826 }
815 } 827 }
816 } 828 }
@@ -850,6 +862,11 @@ static int usb_serial_probe(struct usb_interface *interface,
850 num_ports = type->num_ports; 862 num_ports = type->num_ports;
851 } 863 }
852 864
865 if (num_ports > MAX_NUM_PORTS) {
866 dev_warn(ddev, "too many ports requested: %d\n", num_ports);
867 num_ports = MAX_NUM_PORTS;
868 }
869
853 serial->num_ports = num_ports; 870 serial->num_ports = num_ports;
854 serial->num_bulk_in = num_bulk_in; 871 serial->num_bulk_in = num_bulk_in;
855 serial->num_bulk_out = num_bulk_out; 872 serial->num_bulk_out = num_bulk_out;
diff --git a/drivers/usb/serial/whiteheat.c b/drivers/usb/serial/whiteheat.c
index e62f2dff8b7d..6c3734d2b45a 100644
--- a/drivers/usb/serial/whiteheat.c
+++ b/drivers/usb/serial/whiteheat.c
@@ -514,6 +514,10 @@ static void command_port_read_callback(struct urb *urb)
514 dev_dbg(&urb->dev->dev, "%s - command_info is NULL, exiting.\n", __func__); 514 dev_dbg(&urb->dev->dev, "%s - command_info is NULL, exiting.\n", __func__);
515 return; 515 return;
516 } 516 }
517 if (!urb->actual_length) {
518 dev_dbg(&urb->dev->dev, "%s - empty response, exiting.\n", __func__);
519 return;
520 }
517 if (status) { 521 if (status) {
518 dev_dbg(&urb->dev->dev, "%s - nonzero urb status: %d\n", __func__, status); 522 dev_dbg(&urb->dev->dev, "%s - nonzero urb status: %d\n", __func__, status);
519 if (status != -ENOENT) 523 if (status != -ENOENT)
@@ -534,7 +538,8 @@ static void command_port_read_callback(struct urb *urb)
534 /* These are unsolicited reports from the firmware, hence no 538 /* These are unsolicited reports from the firmware, hence no
535 waiting command to wakeup */ 539 waiting command to wakeup */
536 dev_dbg(&urb->dev->dev, "%s - event received\n", __func__); 540 dev_dbg(&urb->dev->dev, "%s - event received\n", __func__);
537 } else if (data[0] == WHITEHEAT_GET_DTR_RTS) { 541 } else if ((data[0] == WHITEHEAT_GET_DTR_RTS) &&
542 (urb->actual_length - 1 <= sizeof(command_info->result_buffer))) {
538 memcpy(command_info->result_buffer, &data[1], 543 memcpy(command_info->result_buffer, &data[1],
539 urb->actual_length - 1); 544 urb->actual_length - 1);
540 command_info->command_finished = WHITEHEAT_CMD_COMPLETE; 545 command_info->command_finished = WHITEHEAT_CMD_COMPLETE;
diff --git a/drivers/usb/serial/zte_ev.c b/drivers/usb/serial/zte_ev.c
index e40ab739c4a6..1a132e9e947a 100644
--- a/drivers/usb/serial/zte_ev.c
+++ b/drivers/usb/serial/zte_ev.c
@@ -272,28 +272,8 @@ static void zte_ev_usb_serial_close(struct usb_serial_port *port)
272} 272}
273 273
274static const struct usb_device_id id_table[] = { 274static const struct usb_device_id id_table[] = {
275 /* AC8710, AC8710T */
276 { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffff, 0xff, 0xff, 0xff) },
277 /* AC8700 */
278 { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xfffe, 0xff, 0xff, 0xff) },
279 /* MG880 */ 275 /* MG880 */
280 { USB_DEVICE(0x19d2, 0xfffd) }, 276 { USB_DEVICE(0x19d2, 0xfffd) },
281 { USB_DEVICE(0x19d2, 0xfffc) },
282 { USB_DEVICE(0x19d2, 0xfffb) },
283 /* AC8710_V3 */
284 { USB_DEVICE(0x19d2, 0xfff6) },
285 { USB_DEVICE(0x19d2, 0xfff7) },
286 { USB_DEVICE(0x19d2, 0xfff8) },
287 { USB_DEVICE(0x19d2, 0xfff9) },
288 { USB_DEVICE(0x19d2, 0xffee) },
289 /* AC2716, MC2716 */
290 { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffed, 0xff, 0xff, 0xff) },
291 /* AD3812 */
292 { USB_DEVICE_AND_INTERFACE_INFO(0x19d2, 0xffeb, 0xff, 0xff, 0xff) },
293 { USB_DEVICE(0x19d2, 0xffec) },
294 { USB_DEVICE(0x05C6, 0x3197) },
295 { USB_DEVICE(0x05C6, 0x6000) },
296 { USB_DEVICE(0x05C6, 0x9008) },
297 { }, 277 { },
298}; 278};
299MODULE_DEVICE_TABLE(usb, id_table); 279MODULE_DEVICE_TABLE(usb, id_table);
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
index 80a5b366255f..7ef99b2f3aaf 100644
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -922,6 +922,12 @@ UNUSUAL_DEV( 0x069b, 0x3004, 0x0001, 0x0001,
922 USB_SC_DEVICE, USB_PR_DEVICE, NULL, 922 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
923 US_FL_FIX_CAPACITY ), 923 US_FL_FIX_CAPACITY ),
924 924
925UNUSUAL_DEV( 0x06ca, 0x2003, 0x0100, 0x0100,
926 "Newer Technology",
927 "uSCSI",
928 USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_euscsi_init,
929 US_FL_SCM_MULT_TARG ),
930
925/* Reported by Adrian Pilchowiec <adi1981@epf.pl> */ 931/* Reported by Adrian Pilchowiec <adi1981@epf.pl> */
926UNUSUAL_DEV( 0x071b, 0x3203, 0x0000, 0x0000, 932UNUSUAL_DEV( 0x071b, 0x3203, 0x0000, 0x0000,
927 "RockChip", 933 "RockChip",
diff --git a/drivers/staging/usbip/Kconfig b/drivers/usb/usbip/Kconfig
index bd99e9e47e50..bd99e9e47e50 100644
--- a/drivers/staging/usbip/Kconfig
+++ b/drivers/usb/usbip/Kconfig
diff --git a/drivers/staging/usbip/Makefile b/drivers/usb/usbip/Makefile
index 9ecd61545be1..9ecd61545be1 100644
--- a/drivers/staging/usbip/Makefile
+++ b/drivers/usb/usbip/Makefile
diff --git a/drivers/staging/usbip/README b/drivers/usb/usbip/README
index 41a2cf2e77a6..41a2cf2e77a6 100644
--- a/drivers/staging/usbip/README
+++ b/drivers/usb/usbip/README
diff --git a/drivers/staging/usbip/stub.h b/drivers/usb/usbip/stub.h
index 266e2b0ce9a8..266e2b0ce9a8 100644
--- a/drivers/staging/usbip/stub.h
+++ b/drivers/usb/usbip/stub.h
diff --git a/drivers/staging/usbip/stub_dev.c b/drivers/usb/usbip/stub_dev.c
index 51d0c7188738..fac20e0434c0 100644
--- a/drivers/staging/usbip/stub_dev.c
+++ b/drivers/usb/usbip/stub_dev.c
@@ -26,33 +26,6 @@
26#include "stub.h" 26#include "stub.h"
27 27
28/* 28/*
29 * Define device IDs here if you want to explicitly limit exportable devices.
30 * In most cases, wildcard matching will be okay because driver binding can be
31 * changed dynamically by a userland program.
32 */
33static struct usb_device_id stub_table[] = {
34#if 0
35 /* just an example */
36 { USB_DEVICE(0x05ac, 0x0301) }, /* Mac 1 button mouse */
37 { USB_DEVICE(0x0430, 0x0009) }, /* Plat Home Keyboard */
38 { USB_DEVICE(0x059b, 0x0001) }, /* Iomega USB Zip 100 */
39 { USB_DEVICE(0x04b3, 0x4427) }, /* IBM USB CD-ROM */
40 { USB_DEVICE(0x05a9, 0xa511) }, /* LifeView USB cam */
41 { USB_DEVICE(0x55aa, 0x0201) }, /* Imation card reader */
42 { USB_DEVICE(0x046d, 0x0870) }, /* Qcam Express(QV-30) */
43 { USB_DEVICE(0x04bb, 0x0101) }, /* IO-DATA HD 120GB */
44 { USB_DEVICE(0x04bb, 0x0904) }, /* IO-DATA USB-ET/TX */
45 { USB_DEVICE(0x04bb, 0x0201) }, /* IO-DATA USB-ET/TX */
46 { USB_DEVICE(0x08bb, 0x2702) }, /* ONKYO USB Speaker */
47 { USB_DEVICE(0x046d, 0x08b2) }, /* Logicool Qcam 4000 Pro */
48#endif
49 /* magic for wild card */
50 { .driver_info = 1 },
51 { 0, } /* Terminating entry */
52};
53MODULE_DEVICE_TABLE(usb, stub_table);
54
55/*
56 * usbip_status shows the status of usbip-host as long as this driver is bound 29 * usbip_status shows the status of usbip-host as long as this driver is bound
57 * to the target device. 30 * to the target device.
58 */ 31 */
diff --git a/drivers/staging/usbip/stub_main.c b/drivers/usb/usbip/stub_main.c
index 44ab43fc4fcc..44ab43fc4fcc 100644
--- a/drivers/staging/usbip/stub_main.c
+++ b/drivers/usb/usbip/stub_main.c
diff --git a/drivers/staging/usbip/stub_rx.c b/drivers/usb/usbip/stub_rx.c
index 00e475c51a12..00e475c51a12 100644
--- a/drivers/staging/usbip/stub_rx.c
+++ b/drivers/usb/usbip/stub_rx.c
diff --git a/drivers/staging/usbip/stub_tx.c b/drivers/usb/usbip/stub_tx.c
index dbcabc9dbe0d..dbcabc9dbe0d 100644
--- a/drivers/staging/usbip/stub_tx.c
+++ b/drivers/usb/usbip/stub_tx.c
diff --git a/drivers/staging/usbip/usbip_common.c b/drivers/usb/usbip/usbip_common.c
index facaaf003f19..facaaf003f19 100644
--- a/drivers/staging/usbip/usbip_common.c
+++ b/drivers/usb/usbip/usbip_common.c
diff --git a/drivers/staging/usbip/usbip_common.h b/drivers/usb/usbip/usbip_common.h
index 4da3866a037d..86b08475c254 100644
--- a/drivers/staging/usbip/usbip_common.h
+++ b/drivers/usb/usbip/usbip_common.h
@@ -29,7 +29,7 @@
29#include <linux/types.h> 29#include <linux/types.h>
30#include <linux/usb.h> 30#include <linux/usb.h>
31#include <linux/wait.h> 31#include <linux/wait.h>
32#include "uapi/usbip.h" 32#include <uapi/linux/usbip.h>
33 33
34#define USBIP_VERSION "1.0.0" 34#define USBIP_VERSION "1.0.0"
35 35
diff --git a/drivers/staging/usbip/usbip_event.c b/drivers/usb/usbip/usbip_event.c
index 64933b993d7a..64933b993d7a 100644
--- a/drivers/staging/usbip/usbip_event.c
+++ b/drivers/usb/usbip/usbip_event.c
diff --git a/drivers/staging/usbip/usbip_protocol.txt b/drivers/usb/usbip/usbip_protocol.txt
index 16b6fe27284c..16b6fe27284c 100644
--- a/drivers/staging/usbip/usbip_protocol.txt
+++ b/drivers/usb/usbip/usbip_protocol.txt
diff --git a/drivers/staging/usbip/vhci.h b/drivers/usb/usbip/vhci.h
index a863a98a91ce..a863a98a91ce 100644
--- a/drivers/staging/usbip/vhci.h
+++ b/drivers/usb/usbip/vhci.h
diff --git a/drivers/staging/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c
index c02374b6049c..c02374b6049c 100644
--- a/drivers/staging/usbip/vhci_hcd.c
+++ b/drivers/usb/usbip/vhci_hcd.c
diff --git a/drivers/staging/usbip/vhci_rx.c b/drivers/usb/usbip/vhci_rx.c
index 00e4a54308e4..00e4a54308e4 100644
--- a/drivers/staging/usbip/vhci_rx.c
+++ b/drivers/usb/usbip/vhci_rx.c
diff --git a/drivers/staging/usbip/vhci_sysfs.c b/drivers/usb/usbip/vhci_sysfs.c
index 211f43f67ea2..211f43f67ea2 100644
--- a/drivers/staging/usbip/vhci_sysfs.c
+++ b/drivers/usb/usbip/vhci_sysfs.c
diff --git a/drivers/staging/usbip/vhci_tx.c b/drivers/usb/usbip/vhci_tx.c
index 409fd99f3257..409fd99f3257 100644
--- a/drivers/staging/usbip/vhci_tx.c
+++ b/drivers/usb/usbip/vhci_tx.c
diff --git a/drivers/usb/wusbcore/wa-xfer.c b/drivers/usb/wusbcore/wa-xfer.c
index 3e2e4ed20157..e279015be466 100644
--- a/drivers/usb/wusbcore/wa-xfer.c
+++ b/drivers/usb/wusbcore/wa-xfer.c
@@ -2602,6 +2602,7 @@ static void wa_buf_in_cb(struct urb *urb)
2602 dev = &wa->usb_iface->dev; 2602 dev = &wa->usb_iface->dev;
2603 --(wa->active_buf_in_urbs); 2603 --(wa->active_buf_in_urbs);
2604 active_buf_in_urbs = wa->active_buf_in_urbs; 2604 active_buf_in_urbs = wa->active_buf_in_urbs;
2605 rpipe = xfer->ep->hcpriv;
2605 2606
2606 if (usb_pipeisoc(xfer->urb->pipe)) { 2607 if (usb_pipeisoc(xfer->urb->pipe)) {
2607 struct usb_iso_packet_descriptor *iso_frame_desc = 2608 struct usb_iso_packet_descriptor *iso_frame_desc =
@@ -2659,7 +2660,6 @@ static void wa_buf_in_cb(struct urb *urb)
2659 resubmit_dti = (isoc_data_frame_count == 2660 resubmit_dti = (isoc_data_frame_count ==
2660 urb_frame_count); 2661 urb_frame_count);
2661 } else if (active_buf_in_urbs == 0) { 2662 } else if (active_buf_in_urbs == 0) {
2662 rpipe = xfer->ep->hcpriv;
2663 dev_dbg(dev, 2663 dev_dbg(dev,
2664 "xfer %p 0x%08X#%u: data in done (%zu bytes)\n", 2664 "xfer %p 0x%08X#%u: data in done (%zu bytes)\n",
2665 xfer, wa_xfer_id(xfer), seg->index, 2665 xfer, wa_xfer_id(xfer), seg->index,
@@ -2685,7 +2685,6 @@ static void wa_buf_in_cb(struct urb *urb)
2685 */ 2685 */
2686 resubmit_dti = wa->dti_state != WA_DTI_TRANSFER_RESULT_PENDING; 2686 resubmit_dti = wa->dti_state != WA_DTI_TRANSFER_RESULT_PENDING;
2687 spin_lock_irqsave(&xfer->lock, flags); 2687 spin_lock_irqsave(&xfer->lock, flags);
2688 rpipe = xfer->ep->hcpriv;
2689 if (printk_ratelimit()) 2688 if (printk_ratelimit())
2690 dev_err(dev, "xfer %p 0x%08X#%u: data in error %d\n", 2689 dev_err(dev, "xfer %p 0x%08X#%u: data in error %d\n",
2691 xfer, wa_xfer_id(xfer), seg->index, 2690 xfer, wa_xfer_id(xfer), seg->index,
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
index d7a3d13e72ec..b85983e97f0a 100644
--- a/drivers/video/backlight/pwm_bl.c
+++ b/drivers/video/backlight/pwm_bl.c
@@ -173,6 +173,7 @@ static int pwm_backlight_parse_dt(struct device *dev,
173 data->max_brightness--; 173 data->max_brightness--;
174 } 174 }
175 175
176 data->enable_gpio = -EINVAL;
176 return 0; 177 return 0;
177} 178}
178 179
diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c
index beadd3edaa17..a7b6217ac87b 100644
--- a/drivers/video/fbdev/amba-clcd.c
+++ b/drivers/video/fbdev/amba-clcd.c
@@ -24,6 +24,7 @@
24#include <linux/list.h> 24#include <linux/list.h>
25#include <linux/amba/bus.h> 25#include <linux/amba/bus.h>
26#include <linux/amba/clcd.h> 26#include <linux/amba/clcd.h>
27#include <linux/bitops.h>
27#include <linux/clk.h> 28#include <linux/clk.h>
28#include <linux/hardirq.h> 29#include <linux/hardirq.h>
29#include <linux/dma-mapping.h> 30#include <linux/dma-mapping.h>
@@ -650,6 +651,7 @@ static int clcdfb_of_init_display(struct clcd_fb *fb)
650{ 651{
651 struct device_node *endpoint; 652 struct device_node *endpoint;
652 int err; 653 int err;
654 unsigned int bpp;
653 u32 max_bandwidth; 655 u32 max_bandwidth;
654 u32 tft_r0b0g0[3]; 656 u32 tft_r0b0g0[3];
655 657
@@ -667,11 +669,22 @@ static int clcdfb_of_init_display(struct clcd_fb *fb)
667 669
668 err = of_property_read_u32(fb->dev->dev.of_node, "max-memory-bandwidth", 670 err = of_property_read_u32(fb->dev->dev.of_node, "max-memory-bandwidth",
669 &max_bandwidth); 671 &max_bandwidth);
670 if (!err) 672 if (!err) {
671 fb->panel->bpp = 8 * max_bandwidth / (fb->panel->mode.xres * 673 /*
672 fb->panel->mode.yres * fb->panel->mode.refresh); 674 * max_bandwidth is in bytes per second and pixclock in
673 else 675 * pico-seconds, so the maximum allowed bits per pixel is
674 fb->panel->bpp = 32; 676 * 8 * max_bandwidth / (PICOS2KHZ(pixclock) * 1000)
677 * Rearrange this calculation to avoid overflow and then ensure
678 * result is a valid format.
679 */
680 bpp = max_bandwidth / (1000 / 8)
681 / PICOS2KHZ(fb->panel->mode.pixclock);
682 bpp = rounddown_pow_of_two(bpp);
683 if (bpp > 32)
684 bpp = 32;
685 } else
686 bpp = 32;
687 fb->panel->bpp = bpp;
675 688
676#ifdef CONFIG_CPU_BIG_ENDIAN 689#ifdef CONFIG_CPU_BIG_ENDIAN
677 fb->panel->cntl |= CNTL_BEBO; 690 fb->panel->cntl |= CNTL_BEBO;
diff --git a/drivers/video/fbdev/atmel_lcdfb.c b/drivers/video/fbdev/atmel_lcdfb.c
index 92640d46770a..1d8bdb92939b 100644
--- a/drivers/video/fbdev/atmel_lcdfb.c
+++ b/drivers/video/fbdev/atmel_lcdfb.c
@@ -1102,12 +1102,14 @@ static int atmel_lcdfb_of_init(struct atmel_lcdfb_info *sinfo)
1102 timings = of_get_display_timings(display_np); 1102 timings = of_get_display_timings(display_np);
1103 if (!timings) { 1103 if (!timings) {
1104 dev_err(dev, "failed to get display timings\n"); 1104 dev_err(dev, "failed to get display timings\n");
1105 ret = -EINVAL;
1105 goto put_display_node; 1106 goto put_display_node;
1106 } 1107 }
1107 1108
1108 timings_np = of_find_node_by_name(display_np, "display-timings"); 1109 timings_np = of_find_node_by_name(display_np, "display-timings");
1109 if (!timings_np) { 1110 if (!timings_np) {
1110 dev_err(dev, "failed to find display-timings node\n"); 1111 dev_err(dev, "failed to find display-timings node\n");
1112 ret = -ENODEV;
1111 goto put_display_node; 1113 goto put_display_node;
1112 } 1114 }
1113 1115
diff --git a/drivers/video/fbdev/chipsfb.c b/drivers/video/fbdev/chipsfb.c
index 206a66b61072..59abdc6a97f6 100644
--- a/drivers/video/fbdev/chipsfb.c
+++ b/drivers/video/fbdev/chipsfb.c
@@ -273,7 +273,7 @@ static struct chips_init_reg chips_init_xr[] = {
273 { 0xa8, 0x00 } 273 { 0xa8, 0x00 }
274}; 274};
275 275
276static void __init chips_hw_init(void) 276static void chips_hw_init(void)
277{ 277{
278 int i; 278 int i;
279 279
diff --git a/drivers/video/fbdev/da8xx-fb.c b/drivers/video/fbdev/da8xx-fb.c
index 788f6b37fce7..10c876c95772 100644
--- a/drivers/video/fbdev/da8xx-fb.c
+++ b/drivers/video/fbdev/da8xx-fb.c
@@ -419,7 +419,7 @@ static void lcd_cfg_horizontal_sync(int back_porch, int pulse_width,
419{ 419{
420 u32 reg; 420 u32 reg;
421 421
422 reg = lcdc_read(LCD_RASTER_TIMING_0_REG) & 0xf; 422 reg = lcdc_read(LCD_RASTER_TIMING_0_REG) & 0x3ff;
423 reg |= (((back_porch-1) & 0xff) << 24) 423 reg |= (((back_porch-1) & 0xff) << 24)
424 | (((front_porch-1) & 0xff) << 16) 424 | (((front_porch-1) & 0xff) << 16)
425 | (((pulse_width-1) & 0x3f) << 10); 425 | (((pulse_width-1) & 0x3f) << 10);
diff --git a/drivers/video/of_display_timing.c b/drivers/video/of_display_timing.c
index 987edf110038..5c098d5b4043 100644
--- a/drivers/video/of_display_timing.c
+++ b/drivers/video/of_display_timing.c
@@ -236,6 +236,7 @@ timingfail:
236 if (native_mode) 236 if (native_mode)
237 of_node_put(native_mode); 237 of_node_put(native_mode);
238 display_timings_release(disp); 238 display_timings_release(disp);
239 disp = NULL;
239entryfail: 240entryfail:
240 kfree(disp); 241 kfree(disp);
241dispfail: 242dispfail: