* 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(a)redhat.com>
+ */
+
+#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(a)redhat.com>
+ */
+
+#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