Zebediah Figura : wineusb.sys: Pass the device descriptor as part of the event data.
Alexandre Julliard
julliard at winehq.org
Wed Jul 13 16:54:55 CDT 2022
Module: wine
Branch: master
Commit: c698dc6e3634f94da24905ba56d9315133ccc13d
URL: https://gitlab.winehq.org/wine/wine/-/commit/c698dc6e3634f94da24905ba56d9315133ccc13d
Author: Zebediah Figura <zfigura at codeweavers.com>
Date: Wed May 25 17:37:37 2022 -0500
wineusb.sys: Pass the device descriptor as part of the event data.
---
dlls/wineusb.sys/unixlib.c | 8 +++++++-
dlls/wineusb.sys/unixlib.h | 7 ++++++-
dlls/wineusb.sys/wineusb.c | 27 ++++++++++++---------------
3 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/dlls/wineusb.sys/unixlib.c b/dlls/wineusb.sys/unixlib.c
index cfced53d9bf..90847bc6a7d 100644
--- a/dlls/wineusb.sys/unixlib.c
+++ b/dlls/wineusb.sys/unixlib.c
@@ -133,7 +133,13 @@ static void add_usb_device(libusb_device *libusb_device)
pthread_mutex_unlock(&device_mutex);
usb_event.type = USB_EVENT_ADD_DEVICE;
- usb_event.u.added_device = unix_device;
+ usb_event.u.added_device.device = unix_device;
+ usb_event.u.added_device.vendor = device_desc.idVendor;
+ usb_event.u.added_device.product = device_desc.idProduct;
+ usb_event.u.added_device.revision = device_desc.bcdDevice;
+ usb_event.u.added_device.class = device_desc.bDeviceClass;
+ usb_event.u.added_device.subclass = device_desc.bDeviceSubClass;
+ usb_event.u.added_device.protocol = device_desc.bDeviceProtocol;
queue_event(&usb_event);
}
diff --git a/dlls/wineusb.sys/unixlib.h b/dlls/wineusb.sys/unixlib.h
index e8e2850c57a..d76818cc907 100644
--- a/dlls/wineusb.sys/unixlib.h
+++ b/dlls/wineusb.sys/unixlib.h
@@ -47,7 +47,12 @@ struct usb_event
union
{
- struct unix_device *added_device;
+ struct usb_add_device_event
+ {
+ struct unix_device *device;
+ UINT16 vendor, product, revision;
+ UINT8 class, subclass, protocol;
+ } added_device;
struct unix_device *removed_device;
IRP *completed_irp;
} u;
diff --git a/dlls/wineusb.sys/wineusb.c b/dlls/wineusb.sys/wineusb.c
index 474ee6e96a6..b833dbc9824 100644
--- a/dlls/wineusb.sys/wineusb.c
+++ b/dlls/wineusb.sys/wineusb.c
@@ -137,12 +137,11 @@ static void add_usb_interface(struct usb_device *parent, const struct libusb_int
LeaveCriticalSection(&wineusb_cs);
}
-static void add_unix_device(struct unix_device *unix_device)
+static void add_unix_device(const struct usb_add_device_event *event)
{
static const WCHAR formatW[] = {'\\','D','e','v','i','c','e','\\','U','S','B','P','D','O','-','%','u',0};
- libusb_device *libusb_device = libusb_get_device(unix_device->handle);
+ libusb_device *libusb_device = libusb_get_device(event->device->handle);
struct libusb_config_descriptor *config_desc;
- struct libusb_device_descriptor device_desc;
static unsigned int name_index;
struct usb_device *device;
DEVICE_OBJECT *device_obj;
@@ -151,10 +150,8 @@ static void add_unix_device(struct unix_device *unix_device)
WCHAR name[26];
int ret;
- libusb_get_device_descriptor(libusb_device, &device_desc);
-
- TRACE("Adding new device %p, vendor %04x, product %04x.\n", unix_device,
- device_desc.idVendor, device_desc.idProduct);
+ TRACE("Adding new device %p, vendor %04x, product %04x.\n", event->device,
+ event->vendor, event->product);
sprintfW(name, formatW, name_index++);
RtlInitUnicodeString(&string, name);
@@ -167,16 +164,16 @@ static void add_unix_device(struct unix_device *unix_device)
device = device_obj->DeviceExtension;
device->device_obj = device_obj;
- device->unix_device = unix_device;
+ device->unix_device = event->device;
InitializeListHead(&device->irp_list);
device->removed = FALSE;
- device->class = device_desc.bDeviceClass;
- device->subclass = device_desc.bDeviceSubClass;
- device->protocol = device_desc.bDeviceProtocol;
- device->vendor = device_desc.idVendor;
- device->product = device_desc.idProduct;
- device->revision = device_desc.bcdDevice;
+ device->class = event->class;
+ device->subclass = event->subclass;
+ device->protocol = event->protocol;
+ device->vendor = event->vendor;
+ device->product = event->product;
+ device->revision = event->revision;
EnterCriticalSection(&wineusb_cs);
list_add_tail(&device_list, &device->entry);
@@ -279,7 +276,7 @@ static DWORD CALLBACK event_thread_proc(void *arg)
switch (event.type)
{
case USB_EVENT_ADD_DEVICE:
- add_unix_device(event.u.added_device);
+ add_unix_device(&event.u.added_device);
break;
case USB_EVENT_REMOVE_DEVICE:
More information about the wine-cvs
mailing list