aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--usb-bsd.c42
1 files changed, 32 insertions, 10 deletions
diff --git a/usb-bsd.c b/usb-bsd.c
index 693f2ca85..6e8c5266e 100644
--- a/usb-bsd.c
+++ b/usb-bsd.c
@@ -63,6 +63,7 @@ typedef struct USBHostDevice {
} USBHostDevice;
+#if 0
static int ensure_ep_open(USBHostDevice *dev, int ep, int mode)
{
char buf[32];
@@ -110,6 +111,7 @@ static void ensure_eps_closed(USBHostDevice *dev)
epnum++;
}
}
+#endif
static void usb_host_handle_reset(USBDevice *dev)
{
@@ -118,6 +120,7 @@ static void usb_host_handle_reset(USBDevice *dev)
#endif
}
+#if 0
/* XXX:
* -check device states against transfer requests
* and return appropriate response
@@ -275,6 +278,7 @@ static int usb_host_handle_data(USBDevice *dev, USBPacket *p)
return ret;
}
}
+#endif
static void usb_host_handle_destroy(USBDevice *opaque)
{
@@ -293,9 +297,15 @@ static void usb_host_handle_destroy(USBDevice *opaque)
qemu_free(s);
}
+static int usb_host_initfn(USBDevice *dev)
+{
+ return 0;
+}
+
USBDevice *usb_host_device_open(const char *devname)
{
struct usb_device_info bus_info, dev_info;
+ USBDevice *d = NULL;
USBHostDevice *dev;
char ctlpath[PATH_MAX + 1];
char buspath[PATH_MAX + 1];
@@ -343,9 +353,6 @@ USBDevice *usb_host_device_open(const char *devname)
}
if (dfd >= 0) {
- dev = qemu_mallocz(sizeof(USBHostDevice));
- dev->devfd = dfd;
-
if (ioctl(dfd, USB_GET_DEVICEINFO, &dev_info) < 0) {
#ifdef DEBUG
printf("usb_host_device_open: failed to grab device info - %s\n",
@@ -354,18 +361,14 @@ USBDevice *usb_host_device_open(const char *devname)
goto fail;
}
+ d = usb_create(NULL /* FIXME */, "USB Host Device");
+ dev = DO_UPCAST(USBHostDevice, dev, d);
+
if (dev_info.udi_speed == 1)
dev->dev.speed = USB_SPEED_LOW - 1;
else
dev->dev.speed = USB_SPEED_FULL - 1;
- dev->dev.handle_packet = usb_generic_handle_packet;
-
- dev->dev.handle_reset = usb_host_handle_reset;
- dev->dev.handle_control = usb_host_handle_control;
- dev->dev.handle_data = usb_host_handle_data;
- dev->dev.handle_destroy = usb_host_handle_destroy;
-
if (strncmp(dev_info.udi_product, "product", 7) != 0)
pstrcpy(dev->dev.devname, sizeof(dev->dev.devname),
dev_info.udi_product);
@@ -389,6 +392,25 @@ fail:
return NULL;
}
+static struct USBDeviceInfo usb_host_dev_info = {
+ .qdev.name = "USB Host Device",
+ .qdev.size = sizeof(USBHostDevice),
+ .init = usb_host_initfn,
+ .handle_packet = usb_generic_handle_packet,
+ .handle_reset = usb_host_handle_reset,
+#if 0
+ .handle_control = usb_host_handle_control,
+ .handle_data = usb_host_handle_data,
+#endif
+ .handle_destroy = usb_host_handle_destroy,
+};
+
+static void usb_host_register_devices(void)
+{
+ usb_qdev_register(&usb_host_dev_info);
+}
+device_init(usb_host_register_devices)
+
static int usb_host_scan(void *opaque, USBScanFunc *func)
{
struct usb_device_info bus_info;