Allow more than one USB controller (was a XBOX hack no more needed)
Implement IRP_MJ_PNP/IRP_MN_QUERY_DEVICE_TEXT for Root USB hub/USB devices
Add missing initialization which lead to BSOD when connecting a device to a UHCI controller
Modified: trunk/reactos/drivers/usb/miniport/common/main.c
Modified: trunk/reactos/drivers/usb/miniport/common/pdo.c
Modified: trunk/reactos/drivers/usb/miniport/usb_wrapper.h
Modified: trunk/reactos/drivers/usb/miniport/usbuhci/uhci.c
Modified: trunk/reactos/drivers/usb/usbhub/pdo.c

Modified: trunk/reactos/drivers/usb/miniport/common/main.c
--- trunk/reactos/drivers/usb/miniport/common/main.c	2005-11-04 19:31:47 UTC (rev 19002)
+++ trunk/reactos/drivers/usb/miniport/common/main.c	2005-11-04 20:24:44 UTC (rev 19003)
@@ -199,16 +199,6 @@
 	PUSBMP_DEVICE_EXTENSION DeviceExtension;
 	ULONG DeviceNumber;
 
-	/* FIXME: actually, we prevent multiple USB controllers on a computer */
-	static BOOLEAN xbox_workaround = FALSE;
-
-	DPRINT("USBMP: AddDevice called\n");
-	
-	if (xbox_workaround)
-		// Fail for any other host controller than the first
-		return STATUS_INSUFFICIENT_RESOURCES;
-	xbox_workaround = TRUE;
-
 	// Allocate driver extension now
 	DriverExtension = IoGetDriverObjectExtension(DriverObject, DriverObject);
 	if (DriverExtension == NULL)

Modified: trunk/reactos/drivers/usb/miniport/common/pdo.c
--- trunk/reactos/drivers/usb/miniport/common/pdo.c	2005-11-04 19:31:47 UTC (rev 19002)
+++ trunk/reactos/drivers/usb/miniport/common/pdo.c	2005-11-04 20:24:44 UTC (rev 19003)
@@ -286,37 +286,20 @@
 			Status = Irp->IoStatus.Status;
 			break;
 		}
-#if 0 /* FIXME */
 		case IRP_MN_QUERY_DEVICE_TEXT: /* 0x0c */
 		{
 			switch (Stack->Parameters.QueryDeviceText.DeviceTextType)
 			{
 				case DeviceTextDescription:
 				{
-					ULONG DescriptionSize;
-					PWSTR Description;
+					UNICODE_STRING SourceString = RTL_CONSTANT_STRING(L"Root USB hub");
+					UNICODE_STRING Description;
+					
 					DPRINT("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / DeviceTextDescription\n");
 					
-					Status = IoGetDeviceProperty(
-						DeviceObject,
-						DevicePropertyDeviceDescription,
-						0, NULL,
-						&DescriptionSize);
-					if (Status == STATUS_BUFFER_TOO_SMALL)
-					{
-						Description = ExAllocatePool(PagedPool, DescriptionSize);
-						if (!Description)
-							Status = STATUS_INSUFFICIENT_RESOURCES;
-						else
-						{
-							Status = IoGetDeviceProperty(
-								DeviceObject,
-								DevicePropertyDeviceDescription,
-								DescriptionSize, Description,
-								&DescriptionSize);
-							Information = DescriptionSize;
-						}
-					}
+					Status = RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, &SourceString, &Description);
+					if (NT_SUCCESS(Status))
+						Information = (ULONG_PTR)Description.Buffer;
 					break;
 				}
 				case DeviceTextLocationInformation:
@@ -337,7 +320,6 @@
 			}
 			break;
 		}
-#endif
 		case IRP_MN_QUERY_ID: /* 0x13 */
 		{
 			Status = UsbMpPdoQueryId(DeviceObject, Irp, &Information);

Modified: trunk/reactos/drivers/usb/miniport/usb_wrapper.h
--- trunk/reactos/drivers/usb/miniport/usb_wrapper.h	2005-11-04 19:31:47 UTC (rev 19002)
+++ trunk/reactos/drivers/usb/miniport/usb_wrapper.h	2005-11-04 20:24:44 UTC (rev 19003)
@@ -7,7 +7,7 @@
         Lots of definitions should go to corresponding files
 */
 
-#include <ddk/ntddk.h>
+#include <ddk/ntifs.h>
 #include <ddk/kbdmou.h>
 #include <debug.h>
 

Modified: trunk/reactos/drivers/usb/miniport/usbuhci/uhci.c
--- trunk/reactos/drivers/usb/miniport/usbuhci/uhci.c	2005-11-04 19:31:47 UTC (rev 19002)
+++ trunk/reactos/drivers/usb/miniport/usbuhci/uhci.c	2005-11-04 20:24:44 UTC (rev 19003)
@@ -26,6 +26,7 @@
 	/* Initialize generic linux structure */
 	dev->irq = DeviceExtension->InterruptVector;
 	dev->dev_ext = (PVOID)DeviceExtension;
+	dev->dev.dev_ext = (PVOID)DeviceExtension;
 	dev->slot_name = ExAllocatePoolWithTag(NonPagedPool, 128, USB_UHCI_TAG); // 128 max len for slot name
 	init_wrapper(dev);
 	
@@ -48,10 +49,6 @@
 	/* Probe device with real id now */
 	uhci_pci_driver.probe(dev, uhci_pci_ids);
 
-//	DPRINT1("UHCI :SysIoBusNumA %d\n",DeviceExtension->SystemIoBusNumber);
-//	DeviceExtension->SystemIoBusNumber = dev->bus->number;
-//	DPRINT1("UHCI: SysIoBusNumB %d\n",DeviceExtension->SystemIoBusNumber);
-
 	return Status; 
 }
 

Modified: trunk/reactos/drivers/usb/usbhub/pdo.c
--- trunk/reactos/drivers/usb/usbhub/pdo.c	2005-11-04 19:31:47 UTC (rev 19002)
+++ trunk/reactos/drivers/usb/usbhub/pdo.c	2005-11-04 20:24:44 UTC (rev 19003)
@@ -149,11 +149,7 @@
 
 	switch (DeviceTextType)
 	{
-		/*case DeviceTextDescription:
-		{
-			DPRINT1("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / DeviceTextDescription\n");
-			return STATUS_NOT_IMPLEMENTED;
-		}*/
+		case DeviceTextDescription:
 		case DeviceTextLocationInformation:
 		{
 			unsigned short size;
@@ -161,7 +157,11 @@
 			PWCHAR buf;
 			PWCHAR bufret;
 
-			DPRINT("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / DeviceTextLocationInformation\n");
+			if (DeviceTextType == DeviceTextDescription)
+				DPRINT("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / DeviceTextDescription\n");
+			else
+				DPRINT("Usbhub: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / DeviceTextLocationInformation\n");
+			
 			if (!DeviceExtension->dev->descriptor.iProduct)
 				return STATUS_NOT_SUPPORTED;