* src/Makefile.am: Add usb.h and usb.h to libvirt_util.la * src/libvirt_private.syms: Export symbols * src/usb.c, src/usb.h: Helper APIs for USB host devices --- src/Makefile.am | 1 + src/hostusb.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++ src/hostusb.h | 45 ++++++++++++++++++++ src/libvirt_private.syms | 4 ++ 4 files changed, 153 insertions(+), 0 deletions(-) create mode 100644 src/hostusb.c create mode 100644 src/hostusb.h diff --git a/src/Makefile.am b/src/Makefile.am index 9567490..62946a6 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -51,6 +51,7 @@ UTIL_SOURCES = \ logging.c logging.h \ memory.c memory.h \ pci.c pci.h \ + hostusb.c hostusb.h \ qparams.c qparams.h \ threads.c threads.h \ threads-pthread.h \ diff --git a/src/hostusb.c b/src/hostusb.c new file mode 100644 index 0000000..07e10b1 --- /dev/null +++ b/src/hostusb.c @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2009 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Authors: + * Daniel P. Berrange <berrange@xxxxxxxxxx> + */ + +#include <config.h> + +#include <dirent.h> +#include <fcntl.h> +#include <inttypes.h> +#include <limits.h> +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> + +#include "hostusb.h" +#include "logging.h" +#include "memory.h" +#include "util.h" +#include "virterror_internal.h" + +#define USB_DEVFS "/dev/bus/usb/" +#define USB_ID_LEN 10 /* "XXXX XXXX" */ +#define USB_ADDR_LEN 8 /* "XXX:XXX" */ + +struct _usbDevice { + unsigned bus; + unsigned dev; + + char name[USB_ADDR_LEN]; /* domain:bus:slot.function */ + char id[USB_ID_LEN]; /* product vendor */ + char path[PATH_MAX]; +}; + +/* For virReportOOMError() and virReportSystemError() */ +#define VIR_FROM_THIS VIR_FROM_NONE + +#define usbReportError(conn, code, fmt...) \ + virReportErrorHelper(conn, VIR_FROM_NONE, code, __FILE__, \ + __FUNCTION__, __LINE__, fmt) + + +usbDevice * +usbGetDevice(virConnectPtr conn, + unsigned bus, + unsigned devno) +{ + usbDevice *dev; + + if (VIR_ALLOC(dev) < 0) { + virReportOOMError(conn); + return NULL; + } + + dev->bus = bus; + dev->dev = devno; + + snprintf(dev->name, sizeof(dev->name), "%.3o:%.3o", + dev->bus, dev->dev); + snprintf(dev->path, sizeof(dev->path), + USB_DEVFS "%03o/%03o", dev->bus, dev->dev); + + /* XXX fixme. this should be product/vendor */ + snprintf(dev->id, sizeof(dev->id), "%d %d", dev->bus, dev->dev); + + VIR_DEBUG("%s %s: initialized", dev->id, dev->name); + + return dev; +} + +void +usbFreeDevice(virConnectPtr conn ATTRIBUTE_UNUSED, usbDevice *dev) +{ + VIR_DEBUG("%s %s: freeing", dev->id, dev->name); + VIR_FREE(dev); +} + + +int usbDeviceFileIterate(virConnectPtr conn, + usbDevice *dev, + usbDeviceFileActor actor, + void *opaque) +{ + return (actor)(conn, dev, dev->path, opaque); +} diff --git a/src/hostusb.h b/src/hostusb.h new file mode 100644 index 0000000..634548e --- /dev/null +++ b/src/hostusb.h @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2009 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Authors: + * Daniel P. Berrange <berrange@xxxxxxxxxx> + */ + +#ifndef __VIR_USB_H__ +#define __VIR_USB_H__ + +#include "internal.h" +#include "domain_conf.h" + +typedef struct _usbDevice usbDevice; + +usbDevice *usbGetDevice (virConnectPtr conn, + unsigned bus, + unsigned devno); +void usbFreeDevice (virConnectPtr conn, + usbDevice *dev); + +typedef int (*usbDeviceFileActor)(virConnectPtr conn, usbDevice *dev, + const char *path, void *opaque); + +int usbDeviceFileIterate(virConnectPtr conn, + usbDevice *dev, + usbDeviceFileActor actor, + void *opaque); + + +#endif /* __VIR_USB_H__ */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 2bf4e15..67f7aa2 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -401,6 +401,10 @@ virGetUserName; virGetUserID; virGetGroupID; +# usb.h +usbGetDevice; +usbFreeDevice; +usbDeviceFileIterate; # uuid.h virUUIDFormat; -- 1.6.2.5 -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list