Fix IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryHardwareIDs for root USB
hubs.
The vendor and device IDs are not filled in Cromwell code, so ask
directly the PCI device to retrieve the information
Modified: trunk/reactos/drivers/usb/miniport/common/pdo.c
_____
Modified: trunk/reactos/drivers/usb/miniport/common/pdo.c
--- trunk/reactos/drivers/usb/miniport/common/pdo.c 2005-09-22
09:17:17 UTC (rev 17980)
+++ trunk/reactos/drivers/usb/miniport/common/pdo.c 2005-09-22
11:20:52 UTC (rev 17981)
@@ -104,18 +104,55 @@
{
CHAR Buffer[2][40];
PCHAR RootHubName;
- USHORT Vendor, Product, Revision;
+ PCI_COMMON_CONFIG PciData;
+ ULONG BusNumber, SlotNumber;
+ ULONG ret;
+ PDEVICE_OBJECT Pdo;
DPRINT("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_ID /
BusQueryHardwareIDs\n");
- Vendor = DeviceExtension->pdev->vendor;
- Product = DeviceExtension->pdev->device;
- Revision = 0; /* FIXME */
+ Pdo = DeviceExtension->PhysicalDeviceObject;
+ Status = IoGetDeviceProperty(
+ Pdo,
+ DevicePropertyBusNumber,
+ sizeof(ULONG),
+ &BusNumber,
+ &ret);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT("USBMP: IoGetDeviceProperty()
failed with status 0x%08lx\n", Status);
+ break;
+ }
+ Status = IoGetDeviceProperty(
+ Pdo,
+ DevicePropertyAddress,
+ sizeof(ULONG),
+ &SlotNumber,
+ &ret);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT("USBMP: IoGetDeviceProperty()
failed with status 0x%08lx\n", Status);
+ break;
+ }
+
+ ret = HalGetBusDataByOffset(PCIConfiguration,
+ BusNumber,
+ SlotNumber,
+ &PciData,
+ 0,
+ PCI_COMMON_HDR_LENGTH);
+ if (ret != PCI_COMMON_HDR_LENGTH)
+ {
+ DPRINT("USBMP: HalGetBusDataByOffset()
failed (ret = %ld)\n", ret);
+ Status = STATUS_IO_DEVICE_ERROR;
+ break;
+ }
+
sprintf(Buffer[0],
"USB\\VID%04X&PID%04X&REV%04X",
- Vendor, Product, Revision);
+ PciData.VendorID, PciData.DeviceID,
PciData.RevisionID);
sprintf(Buffer[1], "USB\\VID%04X&PID%04X",
- Vendor, Product);
+ PciData.VendorID, PciData.DeviceID);
if (roothub->speed == USB_SPEED_LOW ||
roothub->speed == USB_SPEED_FULL)
RootHubName = "USB\\ROOT_HUB"; /* USB
1.1 */
else
Show replies by date