mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 09:30:56 +00:00
wineusb.sys: Add usbver, revision, busnum and portnum to PDO's instance id.
Makes the device instance id unique (at least to the bus), as required by MS. It is also easily addressable by other drivers.
This commit is contained in:
parent
a51af111ab
commit
647bec85ee
|
@ -139,9 +139,12 @@ static void add_usb_device(libusb_device *libusb_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.usbver = device_desc.bcdUSB;
|
||||
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;
|
||||
usb_event.u.added_device.busnum = libusb_get_bus_number(libusb_device);
|
||||
usb_event.u.added_device.portnum = libusb_get_port_number(libusb_device);
|
||||
usb_event.u.added_device.interface = false;
|
||||
usb_event.u.added_device.interface_index = -1;
|
||||
|
||||
|
|
|
@ -42,8 +42,8 @@ struct usb_event
|
|||
struct usb_add_device_event
|
||||
{
|
||||
struct unix_device *device;
|
||||
UINT16 vendor, product, revision;
|
||||
UINT8 class, subclass, protocol;
|
||||
UINT16 vendor, product, revision, usbver;
|
||||
UINT8 class, subclass, protocol, busnum, portnum;
|
||||
bool interface;
|
||||
INT16 interface_index;
|
||||
} added_device;
|
||||
|
|
|
@ -78,9 +78,9 @@ struct usb_device
|
|||
bool interface;
|
||||
int16_t interface_index;
|
||||
|
||||
uint8_t class, subclass, protocol;
|
||||
uint8_t class, subclass, protocol, busnum, portnum;
|
||||
|
||||
uint16_t vendor, product, revision;
|
||||
uint16_t vendor, product, revision, usbver;
|
||||
|
||||
struct unix_device *unix_device;
|
||||
|
||||
|
@ -133,9 +133,13 @@ static void add_unix_device(const struct usb_add_device_event *event)
|
|||
device->class = event->class;
|
||||
device->subclass = event->subclass;
|
||||
device->protocol = event->protocol;
|
||||
device->busnum = event->busnum;
|
||||
device->portnum = event->portnum;
|
||||
|
||||
device->vendor = event->vendor;
|
||||
device->product = event->product;
|
||||
device->revision = event->revision;
|
||||
device->usbver = event->usbver;
|
||||
|
||||
EnterCriticalSection(&wineusb_cs);
|
||||
list_add_tail(&device_list, &device->entry);
|
||||
|
@ -362,6 +366,11 @@ static void get_device_id(const struct usb_device *device, struct string_buffer
|
|||
append_id(buffer, L"USB\\VID_%04X&PID_%04X", device->vendor, device->product);
|
||||
}
|
||||
|
||||
static void get_instance_id(const struct usb_device *device, struct string_buffer *buffer)
|
||||
{
|
||||
append_id(buffer, L"%u&%u&%u&%u", device->usbver, device->revision, device->busnum, device->portnum);
|
||||
}
|
||||
|
||||
static void get_hardware_ids(const struct usb_device *device, struct string_buffer *buffer)
|
||||
{
|
||||
if (device->interface)
|
||||
|
@ -407,7 +416,7 @@ static NTSTATUS query_id(struct usb_device *device, IRP *irp, BUS_QUERY_ID_TYPE
|
|||
break;
|
||||
|
||||
case BusQueryInstanceID:
|
||||
append_id(&buffer, L"0");
|
||||
get_instance_id(device, &buffer);
|
||||
break;
|
||||
|
||||
case BusQueryHardwareIDs:
|
||||
|
|
Loading…
Reference in a new issue