#
-# Copyright (C) 2010 OpenWrt.org
+# Copyright (C) 2010-2011 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=usbip
PKG_VERSION:=0.1.7
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/usbip
PKG_MD5SUM:=d1094b6d4449787864f8be001639232c
-PKG_FIXUP:=libtool
+PKG_BUILD_DEPENDS:=glib2 sysfsutils
+PKG_FIXUP:=libtool autoreconf
PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
define Package/usbip/Common
TITLE:=USB-over-IP
URL:=http://usbip.sourceforge.net/
- DEPENDS:=@!LINUX_2_4 @USB_SUPPORT +glib2 +sysfsutils
+ DEPENDS:=@!LINUX_2_4 @USB_SUPPORT
MAINTAINER:=Nuno Goncalves <nunojpg@gmail.com>
endef
define Package/usbip
$(call Package/usbip/Default)
TITLE+= (common)
- DEPENDS+= +glib2 +sysfsutils +libwrap +kmod-usbip
+ DEPENDS+= +libsysfs +libwrap +kmod-usbip
endef
define Package/usbip-client
$(call Package/usbip/Default)
TITLE+= (client)
- DEPENDS+= usbip +kmod-usbip-client
+ DEPENDS+= usbip +glib2 +kmod-usbip-client
endef
define Package/usbip-server
$(call Package/usbip/Default)
TITLE+= (server)
- DEPENDS+= usbip +kmod-usbip-server
+ DEPENDS+= usbip +glib2 +kmod-usbip-server
endef
define KernelPackage/usbip/Default
define KernelPackage/usbip-client
$(call KernelPackage/usbip/Default)
- SUBMENU:=USB Support
TITLE+= (kernel client driver)
DEPENDS+= kmod-usbip
KCONFIG:= CONFIG_USB_IP_VHCI_HCD CONFIG_USBIP_VHCI_HCD
define KernelPackage/usbip-server
$(call KernelPackage/usbip/Default)
- SUBMENU:=USB Support
TITLE+= (kernel host driver)
DEPENDS+= kmod-usbip
KCONFIG:= CONFIG_USB_IP_HOST CONFIG_USBIP_HOST
CFLAGS+="$(TARGET_CFLAGS) -I$(STAGING_DIR)/usr/include"
-define Build/Prepare
-$(call Build/Prepare/Default)
- (cd $(PKG_BUILD_DIR)/src; autoreconf -v --install || exit 1 )
-endef
-
define Build/Compile/kmod
$(MAKE) $(KERNEL_MAKEOPTS) \
SUBDIRS="$(LINUX_DIR)/drivers/staging/usbip" \
$(CP) \
$(PKG_INSTALL_DIR)/usr/lib/libusbip.so.* \
$(1)/usr/lib/
- $(INSTALL_DIR) $(1)/usr/share/hwdata
+ $(INSTALL_DIR) $(1)/usr/share/usbip
$(CP) \
$(PKG_INSTALL_DIR)/usr/share/usbip/usb.ids \
- $(1)/usr/share/hwdata/
+ $(1)/usr/share/usbip/
endef
define Package/usbip-client/install
+++ /dev/null
---- a/drivers/head/stub_dev.c
-+++ b/drivers/head/stub_dev.c
-@@ -398,7 +398,11 @@ static int stub_probe(struct usb_interfa
- {
- struct usb_device *udev = interface_to_usbdev(interface);
- struct stub_device *sdev = NULL;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
- char *udev_busid = interface->dev.parent->bus_id;
-+#else
-+ char *udev_busid = dev_name(interface->dev.parent);
-+#endif
- int err = 0;
-
- udbg("Enter\n");
---- a/drivers/head/stub_main.c
-+++ b/drivers/head/stub_main.c
-@@ -252,18 +252,17 @@ static int __init usb_stub_init(void)
- return -ENOMEM;
- }
-
-+ info(DRIVER_DESC "" DRIVER_VERSION);
-+
-+ memset(busid_table, 0, sizeof(busid_table));
-+ spin_lock_init(&busid_table_lock);
-+
- ret = usb_register(&stub_driver);
- if (ret) {
- uerr("usb_register failed %d\n", ret);
- return ret;
- }
-
--
-- info(DRIVER_DESC "" DRIVER_VERSION);
--
-- memset(busid_table, 0, sizeof(busid_table));
-- spin_lock_init(&busid_table_lock);
--
- ret = driver_create_file(&stub_driver.drvwrap.driver, &driver_attr_match_busid);
-
- if (ret) {
---- a/drivers/head/stub_rx.c
-+++ b/drivers/head/stub_rx.c
-@@ -159,7 +159,11 @@ static int tweak_set_configuration_cmd(s
- * A user may need to set a special configuration value before
- * exporting the device.
- */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
- uinfo("set_configuration (%d) to %s\n", config, urb->dev->dev.bus_id);
-+#else
-+ uinfo("set_configuration (%d) to %s\n", config, dev_name(&urb->dev->dev));
-+#endif
- uinfo("but, skip!\n");
-
- return 0;
-@@ -177,7 +181,11 @@ static int tweak_reset_device_cmd(struct
- value = le16_to_cpu(req->wValue);
- index = le16_to_cpu(req->wIndex);
-
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
- uinfo("reset_device (port %d) to %s\n", index, urb->dev->dev.bus_id);
-+#else
-+ uinfo("reset_device (port %d) to %s\n", index, dev_name(&urb->dev->dev));
-+#endif
-
- /* all interfaces should be owned by usbip driver, so just reset it. */
- ret = usb_lock_device_for_reset(urb->dev, NULL);
-@@ -187,7 +195,11 @@ static int tweak_reset_device_cmd(struct
- }
-
- /* try to reset the device */
-- ret = usb_reset_composite_device(urb->dev, NULL);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
-+ ret = usb_reset_composite_device(urb->dev, NULL);
-+#else
-+ ret = usb_reset_device(urb->dev);
-+#endif
- if (ret < 0)
- uerr("device reset\n");
-
---- a/drivers/head/usbip_common.c
-+++ b/drivers/head/usbip_common.c
-@@ -55,10 +55,7 @@ static ssize_t show_flag(struct device *
- static ssize_t store_flag(struct device *dev, struct device_attribute *attr,
- const char *buf, size_t count)
- {
-- unsigned long flag;
--
-- sscanf(buf, "%lx", &flag);
-- usbip_debug_flag = flag;
-+ sscanf(buf, "%lx", &usbip_debug_flag);
-
- return count;
- }
-@@ -390,7 +387,7 @@ int usbip_thread(void *param)
- unlock_kernel();
-
- /* srv.rb must wait for rx_thread starting */
-- complete(&ut->thread_done);
-+ complete(&ut->thread_started);
-
- /* start of while loop */
- ut->loop_ops(ut);
-@@ -403,15 +400,21 @@ int usbip_thread(void *param)
-
- void usbip_start_threads(struct usbip_device *ud)
- {
-+
- /*
- * threads are invoked per one device (per one connection).
- */
-+ INIT_COMPLETION(ud->tcp_rx.thread_started);
-+ INIT_COMPLETION(ud->tcp_tx.thread_started);
-+ INIT_COMPLETION(ud->tcp_rx.thread_done);
-+ INIT_COMPLETION(ud->tcp_tx.thread_done);
-+
- kernel_thread((int(*)(void *))usbip_thread, (void *)&ud->tcp_rx, 0);
- kernel_thread((int(*)(void *))usbip_thread, (void *)&ud->tcp_tx, 0);
-
- /* confirm threads are starting */
-- wait_for_completion(&ud->tcp_rx.thread_done);
-- wait_for_completion(&ud->tcp_tx.thread_done);
-+ wait_for_completion(&ud->tcp_rx.thread_started);
-+ wait_for_completion(&ud->tcp_tx.thread_started);
- }
- EXPORT_SYMBOL(usbip_start_threads);
-
-@@ -436,6 +439,7 @@ void usbip_task_init(struct usbip_task *
- void (*loop_ops)(struct usbip_task *))
- {
- ut->thread = NULL;
-+ init_completion(&ut->thread_started);
- init_completion(&ut->thread_done);
- ut->name = name;
- ut->loop_ops = loop_ops;
---- a/drivers/head/usbip_event.c
-+++ b/drivers/head/usbip_event.c
-@@ -38,7 +38,7 @@ void usbip_start_eh(struct usbip_device
-
- kernel_thread((int(*)(void *)) usbip_thread, (void *) eh, 0);
-
-- wait_for_completion(&eh->thread_done);
-+ wait_for_completion(&eh->thread_started);
- }
- EXPORT_SYMBOL(usbip_start_eh);
-
---- a/drivers/head/vhci_hcd.c
-+++ b/drivers/head/vhci_hcd.c
-@@ -58,7 +58,7 @@ static void vhci_stop(struct usb_hcd *hc
- static int vhci_get_frame_number(struct usb_hcd *hcd);
-
- static const char driver_name[] = "vhci_hcd";
--static const char driver_desc[] = "USB/IP Virtual Host Contoroller";
-+static const char driver_desc[] = "USB/IP Virtual Host Controller";
-
-
-
-@@ -416,14 +416,6 @@ static int vhci_hub_control(struct usb_h
- case USB_PORT_FEAT_SUSPEND:
- dbg_vhci_rh(" SetPortFeature: USB_PORT_FEAT_SUSPEND\n");
- uerr(" not yet\n");
--#if 0
-- dum->port_status[rhport] |= (1 << USB_PORT_FEAT_SUSPEND);
-- if (dum->driver->suspend) {
-- spin_unlock (&dum->lock);
-- dum->driver->suspend (&dum->gadget);
-- spin_lock (&dum->lock);
-- }
--#endif
- break;
- case USB_PORT_FEAT_RESET:
- dbg_vhci_rh(" SetPortFeature: USB_PORT_FEAT_RESET\n");
-@@ -432,12 +424,6 @@ static int vhci_hub_control(struct usb_h
- dum->port_status[rhport] &= ~(USB_PORT_STAT_ENABLE
- | USB_PORT_STAT_LOW_SPEED
- | USB_PORT_STAT_HIGH_SPEED);
--#if 0
-- if (dum->driver) {
-- dev_dbg (hardware, "disconnect\n");
-- stop_activity (dum, dum->driver);
-- }
--#endif
-
- /* FIXME test that code path! */
- }
-@@ -1060,7 +1046,7 @@ static int vhci_hcd_probe(struct platfor
- struct usb_hcd *hcd;
- int ret;
-
-- uinfo("proving...\n");
-+ uinfo("probing...\n");
-
- dbg_vhci_hc("name %s id %d\n", pdev->name, pdev->id);
-
-@@ -1076,7 +1062,11 @@ static int vhci_hcd_probe(struct platfor
- * Allocate and initialize hcd.
- * Our private data is also allocated automatically.
- */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
- hcd = usb_create_hcd(&vhci_hc_driver, &pdev->dev, pdev->dev.bus_id);
-+#else
-+ hcd = usb_create_hcd(&vhci_hc_driver, &pdev->dev, dev_name(&pdev->dev));
-+#endif
- if (!hcd) {
- uerr("create hcd failed\n");
- return -ENOMEM;
---- a/drivers/head/vhci_sysfs.c
-+++ b/drivers/head/vhci_sysfs.c
-@@ -123,7 +123,11 @@ static ssize_t show_status(struct device
- out += sprintf(out, "%03u %08x ",
- vdev->speed, vdev->devid);
- out += sprintf(out, "%16p ", vdev->ud.tcp_socket);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
- out += sprintf(out, "%s", vdev->udev->dev.bus_id);
-+#else
-+ out += sprintf(out, "%s", dev_name(&vdev->udev->dev));
-+#endif
-
- } else
- out += sprintf(out, "000 000 000 0000000000000000 0-0");
---- a/drivers/head/usbip_common.h
-+++ b/drivers/head/usbip_common.h
-@@ -300,6 +300,7 @@ struct usbip_device;
-
- struct usbip_task {
- struct task_struct *thread;
-+ struct completion thread_started;
- struct completion thread_done;
- char *name;
- void (*loop_ops)(struct usbip_task *);
--- /dev/null
+Index: trunk/src/cmd/Makefile.am
+===================================================================
+--- trunk/src/cmd/Makefile.am (revision 98)
++++ trunk/src/cmd/Makefile.am (revision 99)
+@@ -17,5 +17,5 @@
+ INCLUDES = -I$(top_srcdir)/lib
+ LDADD = ../lib/libusbip.la @PACKAGE_LIBS@
+ EXTRA_CFLAGS = @EXTRA_CFLAGS@
+-AM_CFLAGS = -Wall -W -Wstrict-prototypes -std=gnu99 $(EXTRA_CFLAGS) @PACKAGE_CFLAGS@
++AM_CFLAGS = -Wall -W -Wstrict-prototypes -std=gnu99 $(EXTRA_CFLAGS) @PACKAGE_CFLAGS@ -DUSBIDS_FILE='"@USBIDS_DIR@/usb.ids"'
+
--- /dev/null
+--- a/drivers/head/stub_dev.c
++++ b/drivers/head/stub_dev.c
+@@ -398,7 +398,11 @@ static int stub_probe(struct usb_interfa
+ {
+ struct usb_device *udev = interface_to_usbdev(interface);
+ struct stub_device *sdev = NULL;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ char *udev_busid = interface->dev.parent->bus_id;
++#else
++ char *udev_busid = dev_name(interface->dev.parent);
++#endif
+ int err = 0;
+
+ udbg("Enter\n");
+--- a/drivers/head/stub_main.c
++++ b/drivers/head/stub_main.c
+@@ -252,18 +252,17 @@ static int __init usb_stub_init(void)
+ return -ENOMEM;
+ }
+
++ info(DRIVER_DESC "" DRIVER_VERSION);
++
++ memset(busid_table, 0, sizeof(busid_table));
++ spin_lock_init(&busid_table_lock);
++
+ ret = usb_register(&stub_driver);
+ if (ret) {
+ uerr("usb_register failed %d\n", ret);
+ return ret;
+ }
+
+-
+- info(DRIVER_DESC "" DRIVER_VERSION);
+-
+- memset(busid_table, 0, sizeof(busid_table));
+- spin_lock_init(&busid_table_lock);
+-
+ ret = driver_create_file(&stub_driver.drvwrap.driver, &driver_attr_match_busid);
+
+ if (ret) {
+--- a/drivers/head/stub_rx.c
++++ b/drivers/head/stub_rx.c
+@@ -159,7 +159,11 @@ static int tweak_set_configuration_cmd(s
+ * A user may need to set a special configuration value before
+ * exporting the device.
+ */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ uinfo("set_configuration (%d) to %s\n", config, urb->dev->dev.bus_id);
++#else
++ uinfo("set_configuration (%d) to %s\n", config, dev_name(&urb->dev->dev));
++#endif
+ uinfo("but, skip!\n");
+
+ return 0;
+@@ -177,7 +181,11 @@ static int tweak_reset_device_cmd(struct
+ value = le16_to_cpu(req->wValue);
+ index = le16_to_cpu(req->wIndex);
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ uinfo("reset_device (port %d) to %s\n", index, urb->dev->dev.bus_id);
++#else
++ uinfo("reset_device (port %d) to %s\n", index, dev_name(&urb->dev->dev));
++#endif
+
+ /* all interfaces should be owned by usbip driver, so just reset it. */
+ ret = usb_lock_device_for_reset(urb->dev, NULL);
+@@ -187,7 +195,11 @@ static int tweak_reset_device_cmd(struct
+ }
+
+ /* try to reset the device */
+- ret = usb_reset_composite_device(urb->dev, NULL);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
++ ret = usb_reset_composite_device(urb->dev, NULL);
++#else
++ ret = usb_reset_device(urb->dev);
++#endif
+ if (ret < 0)
+ uerr("device reset\n");
+
+--- a/drivers/head/usbip_common.c
++++ b/drivers/head/usbip_common.c
+@@ -55,10 +55,7 @@ static ssize_t show_flag(struct device *
+ static ssize_t store_flag(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count)
+ {
+- unsigned long flag;
+-
+- sscanf(buf, "%lx", &flag);
+- usbip_debug_flag = flag;
++ sscanf(buf, "%lx", &usbip_debug_flag);
+
+ return count;
+ }
+@@ -390,7 +387,7 @@ int usbip_thread(void *param)
+ unlock_kernel();
+
+ /* srv.rb must wait for rx_thread starting */
+- complete(&ut->thread_done);
++ complete(&ut->thread_started);
+
+ /* start of while loop */
+ ut->loop_ops(ut);
+@@ -403,15 +400,21 @@ int usbip_thread(void *param)
+
+ void usbip_start_threads(struct usbip_device *ud)
+ {
++
+ /*
+ * threads are invoked per one device (per one connection).
+ */
++ INIT_COMPLETION(ud->tcp_rx.thread_started);
++ INIT_COMPLETION(ud->tcp_tx.thread_started);
++ INIT_COMPLETION(ud->tcp_rx.thread_done);
++ INIT_COMPLETION(ud->tcp_tx.thread_done);
++
+ kernel_thread((int(*)(void *))usbip_thread, (void *)&ud->tcp_rx, 0);
+ kernel_thread((int(*)(void *))usbip_thread, (void *)&ud->tcp_tx, 0);
+
+ /* confirm threads are starting */
+- wait_for_completion(&ud->tcp_rx.thread_done);
+- wait_for_completion(&ud->tcp_tx.thread_done);
++ wait_for_completion(&ud->tcp_rx.thread_started);
++ wait_for_completion(&ud->tcp_tx.thread_started);
+ }
+ EXPORT_SYMBOL(usbip_start_threads);
+
+@@ -436,6 +439,7 @@ void usbip_task_init(struct usbip_task *
+ void (*loop_ops)(struct usbip_task *))
+ {
+ ut->thread = NULL;
++ init_completion(&ut->thread_started);
+ init_completion(&ut->thread_done);
+ ut->name = name;
+ ut->loop_ops = loop_ops;
+--- a/drivers/head/usbip_event.c
++++ b/drivers/head/usbip_event.c
+@@ -38,7 +38,7 @@ void usbip_start_eh(struct usbip_device
+
+ kernel_thread((int(*)(void *)) usbip_thread, (void *) eh, 0);
+
+- wait_for_completion(&eh->thread_done);
++ wait_for_completion(&eh->thread_started);
+ }
+ EXPORT_SYMBOL(usbip_start_eh);
+
+--- a/drivers/head/vhci_hcd.c
++++ b/drivers/head/vhci_hcd.c
+@@ -58,7 +58,7 @@ static void vhci_stop(struct usb_hcd *hc
+ static int vhci_get_frame_number(struct usb_hcd *hcd);
+
+ static const char driver_name[] = "vhci_hcd";
+-static const char driver_desc[] = "USB/IP Virtual Host Contoroller";
++static const char driver_desc[] = "USB/IP Virtual Host Controller";
+
+
+
+@@ -416,14 +416,6 @@ static int vhci_hub_control(struct usb_h
+ case USB_PORT_FEAT_SUSPEND:
+ dbg_vhci_rh(" SetPortFeature: USB_PORT_FEAT_SUSPEND\n");
+ uerr(" not yet\n");
+-#if 0
+- dum->port_status[rhport] |= (1 << USB_PORT_FEAT_SUSPEND);
+- if (dum->driver->suspend) {
+- spin_unlock (&dum->lock);
+- dum->driver->suspend (&dum->gadget);
+- spin_lock (&dum->lock);
+- }
+-#endif
+ break;
+ case USB_PORT_FEAT_RESET:
+ dbg_vhci_rh(" SetPortFeature: USB_PORT_FEAT_RESET\n");
+@@ -432,12 +424,6 @@ static int vhci_hub_control(struct usb_h
+ dum->port_status[rhport] &= ~(USB_PORT_STAT_ENABLE
+ | USB_PORT_STAT_LOW_SPEED
+ | USB_PORT_STAT_HIGH_SPEED);
+-#if 0
+- if (dum->driver) {
+- dev_dbg (hardware, "disconnect\n");
+- stop_activity (dum, dum->driver);
+- }
+-#endif
+
+ /* FIXME test that code path! */
+ }
+@@ -1060,7 +1046,7 @@ static int vhci_hcd_probe(struct platfor
+ struct usb_hcd *hcd;
+ int ret;
+
+- uinfo("proving...\n");
++ uinfo("probing...\n");
+
+ dbg_vhci_hc("name %s id %d\n", pdev->name, pdev->id);
+
+@@ -1076,7 +1062,11 @@ static int vhci_hcd_probe(struct platfor
+ * Allocate and initialize hcd.
+ * Our private data is also allocated automatically.
+ */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ hcd = usb_create_hcd(&vhci_hc_driver, &pdev->dev, pdev->dev.bus_id);
++#else
++ hcd = usb_create_hcd(&vhci_hc_driver, &pdev->dev, dev_name(&pdev->dev));
++#endif
+ if (!hcd) {
+ uerr("create hcd failed\n");
+ return -ENOMEM;
+--- a/drivers/head/vhci_sysfs.c
++++ b/drivers/head/vhci_sysfs.c
+@@ -123,7 +123,11 @@ static ssize_t show_status(struct device
+ out += sprintf(out, "%03u %08x ",
+ vdev->speed, vdev->devid);
+ out += sprintf(out, "%16p ", vdev->ud.tcp_socket);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+ out += sprintf(out, "%s", vdev->udev->dev.bus_id);
++#else
++ out += sprintf(out, "%s", dev_name(&vdev->udev->dev));
++#endif
+
+ } else
+ out += sprintf(out, "000 000 000 0000000000000000 0-0");
+--- a/drivers/head/usbip_common.h
++++ b/drivers/head/usbip_common.h
+@@ -300,6 +300,7 @@ struct usbip_device;
+
+ struct usbip_task {
+ struct task_struct *thread;
++ struct completion thread_started;
+ struct completion thread_done;
+ char *name;
+ void (*loop_ops)(struct usbip_task *);