All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2/3] usbback: Add new features
@ 2014-01-21 16:55 Alexander Savchenko
  2014-01-21 17:52 ` David Vrabel
  0 siblings, 1 reply; 3+ messages in thread
From: Alexander Savchenko @ 2014-01-21 16:55 UTC (permalink / raw)
  To: xen-devel; +Cc: Alexander Savchenko

Add new_vport and remove_vport.
Ported from patch Noboru Iwamatsu: PVUSB: backend driver.

Signed-off-by: Alexander Savchenko <oleksandr.savchenko@globallogic.com>
---
 drivers/usb/host/xen-usbback/usbdev.c |   93 +++++++++++++++++++++++++++++++--
 1 file changed, 88 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/host/xen-usbback/usbdev.c b/drivers/usb/host/xen-usbback/usbdev.c
index 53a14b4..05709f2 100644
--- a/drivers/usb/host/xen-usbback/usbdev.c
+++ b/drivers/usb/host/xen-usbback/usbdev.c
@@ -276,6 +276,73 @@ static ssize_t usbdev_show_ports(struct device_driver *driver, char *buf)
 
 DRIVER_ATTR(port_ids, S_IRUSR, usbdev_show_ports, NULL);
 
+static inline int str_to_vport(const char *buf, char *phys_bus, int *dom_id,
+							int *dev_id, int *port)
+{
+	char *p;
+	int len;
+	int err;
+
+	/* no physical bus */
+	if (!(p = strchr(buf, ':')))
+		return -EINVAL;
+
+	len = p - buf;
+
+	/* bad physical bus */
+	if (len + 1 > XEN_USB_BUS_ID_SIZE)
+		return -EINVAL;
+
+	strlcpy(phys_bus, buf, len + 1);
+	err = sscanf(p + 1, "%d:%d:%d", dom_id, dev_id, port);
+	if (err == 3)
+		return 0;
+	else
+		return -EINVAL;
+}
+
+static ssize_t usbstub_vport_add(struct device_driver *driver,
+						const char *buf, size_t count)
+{
+	char bus_id[XEN_USB_BUS_ID_SIZE];
+	int err = 0, dom_id, dev_id, portnum;
+
+	err = str_to_vport(buf, &bus_id[0], &dom_id, &dev_id, &portnum);
+	if (err)
+		goto out;
+
+	err = xen_usbport_add(&bus_id[0], dom_id, dev_id, portnum);
+
+out:
+	if (!err)
+		err = count;
+
+	return err;
+}
+
+DRIVER_ATTR(new_vport, S_IWUSR, NULL, usbstub_vport_add);
+
+static ssize_t usbstub_vport_remove(struct device_driver *driver,
+						const char *buf, size_t count)
+{
+	char bus_id[XEN_USB_BUS_ID_SIZE];
+	int err = 0, dom_id, dev_id, portnum;
+
+	err = str_to_vport(buf, &bus_id[0], &dom_id, &dev_id, &portnum);
+	if (err)
+		goto out;
+
+	err = xen_usbport_remove(dom_id, dev_id, portnum);
+
+out:
+	if (!err)
+		err = count;
+
+	return err;
+}
+
+DRIVER_ATTR(remove_vport, S_IWUSR, NULL, usbstub_vport_remove);
+
 /* table of devices that matches any usbdevice */
 static const struct usb_device_id usbdev_table[] = {
 	{ .driver_info = 1 }, /* wildcard, see usb_match_id() */
@@ -293,27 +360,43 @@ static struct usb_driver xen_usbdev_driver = {
 
 int __init xen_usbdev_init(void)
 {
-	int err;
+	int err = 0;
 
 	err = usb_register(&xen_usbdev_driver);
 	if (err < 0) {
 		pr_alert(DRV_PFX "usb_register failed (error %d)\n",
 									err);
-		goto out;
+		return err;
 	}
 
 	err = driver_create_file(&xen_usbdev_driver.drvwrap.driver,
 							&driver_attr_port_ids);
 	if (err)
-		usb_deregister(&xen_usbdev_driver);
+		goto err;
+	err = driver_create_file(&xen_usbdev_driver.drvwrap.driver,
+                               &driver_attr_remove_vport);
+	if (err)
+		goto err;
+	err = driver_create_file(&xen_usbdev_driver.drvwrap.driver,
+                               &driver_attr_new_vport);
+	if (err)
+		goto err;
+
+	return err;
+
+err:
+	usb_deregister(&xen_usbdev_driver);
 
-out:
 	return err;
 }
 
 void xen_usbdev_exit(void)
 {
 	driver_remove_file(&xen_usbdev_driver.drvwrap.driver,
-							&driver_attr_port_ids);
+						&driver_attr_port_ids);
+	driver_remove_file(&xen_usbdev_driver.drvwrap.driver,
+						&driver_attr_remove_vport);
+	driver_remove_file(&xen_usbdev_driver.drvwrap.driver,
+						&driver_attr_new_vport);
 	usb_deregister(&xen_usbdev_driver);
 }
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 2/3] usbback: Add new features
  2014-01-21 16:55 [PATCH 2/3] usbback: Add new features Alexander Savchenko
@ 2014-01-21 17:52 ` David Vrabel
  2014-01-21 18:04   ` Stefano Stabellini
  0 siblings, 1 reply; 3+ messages in thread
From: David Vrabel @ 2014-01-21 17:52 UTC (permalink / raw)
  To: Alexander Savchenko; +Cc: xen-devel

On 21/01/14 16:55, Alexander Savchenko wrote:
> Add new_vport and remove_vport.
> Ported from patch Noboru Iwamatsu: PVUSB: backend driver.
> 
> Signed-off-by: Alexander Savchenko <oleksandr.savchenko@globallogic.com>
> ---
>  drivers/usb/host/xen-usbback/usbdev.c |   93 +++++++++++++++++++++++++++++++--
>  1 file changed, 88 insertions(+), 5 deletions(-)

What is this patch against?  Upstream linux doesn't have a backend
driver.  Is patch 1/3 (which hasn't arrived on xen-devel) adding it?

David

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH 2/3] usbback: Add new features
  2014-01-21 17:52 ` David Vrabel
@ 2014-01-21 18:04   ` Stefano Stabellini
  0 siblings, 0 replies; 3+ messages in thread
From: Stefano Stabellini @ 2014-01-21 18:04 UTC (permalink / raw)
  To: David Vrabel; +Cc: Alexander Savchenko, xen-devel

On Tue, 21 Jan 2014, David Vrabel wrote:
> On 21/01/14 16:55, Alexander Savchenko wrote:
> > Add new_vport and remove_vport.
> > Ported from patch Noboru Iwamatsu: PVUSB: backend driver.
> > 
> > Signed-off-by: Alexander Savchenko <oleksandr.savchenko@globallogic.com>
> > ---
> >  drivers/usb/host/xen-usbback/usbdev.c |   93 +++++++++++++++++++++++++++++++--
> >  1 file changed, 88 insertions(+), 5 deletions(-)
> 
> What is this patch against?  Upstream linux doesn't have a backend
> driver.  Is patch 1/3 (which hasn't arrived on xen-devel) adding it?

http://marc.info/?l=xen-devel&m=139032355522882

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-01-21 18:04 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-21 16:55 [PATCH 2/3] usbback: Add new features Alexander Savchenko
2014-01-21 17:52 ` David Vrabel
2014-01-21 18:04   ` Stefano Stabellini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.