Now UHCI HCD driver supports recognizing Memory type of resource. Should help James Tabor's problem (VIA chipset, getting only memory resource as unrecognized, and thus driver failing loading). Modified: trunk/reactos/drivers/usb/cromwell/uhci/uhci-hcd.c Modified: trunk/reactos/drivers/usb/cromwell/uhci/uhci_main.c _____
Modified: trunk/reactos/drivers/usb/cromwell/uhci/uhci-hcd.c --- trunk/reactos/drivers/usb/cromwell/uhci/uhci-hcd.c 2005-05-25 14:25:19 UTC (rev 15495) +++ trunk/reactos/drivers/usb/cromwell/uhci/uhci-hcd.c 2005-05-25 20:59:13 UTC (rev 15496) @@ -2491,7 +2491,7 @@
static const char hcd_name[] = "uhci-hcd";
-static const struct hc_driver uhci_driver = { +static struct hc_driver uhci_driver = { .description = hcd_name,
/* Generic hardware linkage */ _____
Modified: trunk/reactos/drivers/usb/cromwell/uhci/uhci_main.c --- trunk/reactos/drivers/usb/cromwell/uhci/uhci_main.c 2005-05-25 14:25:19 UTC (rev 15495) +++ trunk/reactos/drivers/usb/cromwell/uhci/uhci_main.c 2005-05-25 20:59:13 UTC (rev 15496) @@ -6,9 +6,14 @@
#include <ddk/ntddk.h> #include <debug.h> -#include "../linux/linux_wrapper.h" + +// config and include core/hcd.h, for hc_device struct +#include "../usb_wrapper.h" +#include "../core/hcd.h" + #include "../host/ohci_main.h"
+ // declare basic init funcs void init_wrapper(struct pci_dev *probe_dev); int uhci_hcd_init(void); @@ -16,15 +21,13 @@ int STDCALL usb_init(void); void STDCALL usb_exit(void); extern struct pci_driver uhci_pci_driver; -extern const struct pci_device_id uhci_pci_ids[]; +extern struct pci_device_id uhci_pci_ids[];
- // This should be removed, but for testing purposes it's here struct pci_dev *dev; //struct pci_device_id *dev_id;
- #define USB_UHCI_TAG TAG('u','s','b','u')
NTSTATUS STDCALL AddDevice(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT pdo) @@ -229,10 +232,23 @@ DeviceExtension->BaseAddress = Descriptor->u.Port.Start; DeviceExtension->BaseAddrLength = Descriptor->u.Port.Length; DeviceExtension->Flags = Descriptor->Flags; + + ((struct hc_driver *)uhci_pci_ids->driver_data)->flags &= ~HCD_MEMORY; DPRINT1("I/O resource: start=0x%x, length=0x%x\n",
DeviceExtension->BaseAddress.u.LowPart, DeviceExtension->BaseAddrLength); } + else if (Descriptor->Type == CmResourceTypeMemory) + { + DeviceExtension->BaseAddress = Descriptor->u.Memory.Start; + DeviceExtension->BaseAddrLength = Descriptor->u.Memory.Length; + DeviceExtension->Flags = Descriptor->Flags; + + ((struct hc_driver *)uhci_pci_ids->driver_data)->flags |= HCD_MEMORY; + + DPRINT1("Memory resource: start=0x%x, length=0x%x\n", + DeviceExtension->BaseAddress.u.LowPart, DeviceExtension->BaseAddrLength); + } else DPRINT1("Get resource type: %d, Generic start=0x%x Generic length=0x%x\n", Descriptor->Type, Descriptor->u.Generic.Start.u.LowPart, Descriptor->u.Generic.Length);