From f896aeba5e422158d3d754b75a8a7a47d4bf3386 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 11 Feb 2012 06:25:16 +0000 Subject: [PATCH] [ACPI] - Fix incorrect maximum bound for resource requirements - Handle PCI buses manually [HAL] - Don't hang if the IRP_MN_QUERY_INTERFACE is received [INF] - Misc fixes svn path=/branches/usb-bringup-trunk/; revision=55541 --- drivers/bus/acpi/buspdo.c | 38 ++++++++++++++++++++--------------- hal/halx86/acpi/halpnpdd.c | 3 +-- hal/halx86/legacy/halpnpdd.c | 3 +-- media/inf/keyboard.inf | Bin 9060 -> 9060 bytes media/inf/msmouse.inf | Bin 22258 -> 22258 bytes 5 files changed, 24 insertions(+), 20 deletions(-) diff --git a/drivers/bus/acpi/buspdo.c b/drivers/bus/acpi/buspdo.c index 0e149b87659..c807f1aa129 100644 --- a/drivers/bus/acpi/buspdo.c +++ b/drivers/bus/acpi/buspdo.c @@ -1136,6 +1136,12 @@ Bus_PDO_QueryResourceRequirements( return Irp->IoStatus.Status; } + /* Handle the PCI root manually */ + if (wcsstr(DeviceData->HardwareIDs, L"PNP0A03") != 0) + { + return Irp->IoStatus.Status; + } + /* Get current resources */ while (TRUE) { @@ -1315,7 +1321,7 @@ Bus_PDO_QueryResourceRequirements( RequirementDescriptor->ShareDisposition = CmResourceShareDriverExclusive; RequirementDescriptor->u.Port.Alignment = io_data->Alignment; RequirementDescriptor->u.Port.MinimumAddress.QuadPart = io_data->Minimum; - RequirementDescriptor->u.Port.MaximumAddress.QuadPart = io_data->Maximum; + RequirementDescriptor->u.Port.MaximumAddress.QuadPart = io_data->Maximum + io_data->AddressLength - 1; RequirementDescriptor++; break; @@ -1330,7 +1336,7 @@ Bus_PDO_QueryResourceRequirements( RequirementDescriptor->ShareDisposition = CmResourceShareShared; RequirementDescriptor->Flags = 0; RequirementDescriptor->u.BusNumber.MinBusNumber = addr16_data->Minimum; - RequirementDescriptor->u.BusNumber.MaxBusNumber = addr16_data->Maximum; + RequirementDescriptor->u.BusNumber.MaxBusNumber = addr16_data->Maximum + addr16_data->AddressLength - 1; RequirementDescriptor->u.BusNumber.Length = addr16_data->AddressLength; } else if (addr16_data->ResourceType == ACPI_IO_RANGE) @@ -1341,7 +1347,7 @@ Bus_PDO_QueryResourceRequirements( if (addr16_data->Decode == ACPI_POS_DECODE) RequirementDescriptor->Flags |= CM_RESOURCE_PORT_POSITIVE_DECODE; RequirementDescriptor->u.Port.MinimumAddress.QuadPart = addr16_data->Minimum; - RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr16_data->Maximum; + RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr16_data->Maximum + addr16_data->AddressLength - 1; RequirementDescriptor->u.Port.Length = addr16_data->AddressLength; } else @@ -1360,7 +1366,7 @@ Bus_PDO_QueryResourceRequirements( case ACPI_PREFETCHABLE_MEMORY: RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_PREFETCHABLE; break; } RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = addr16_data->Minimum; - RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr16_data->Maximum; + RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr16_data->Maximum + addr16_data->AddressLength - 1; RequirementDescriptor->u.Memory.Length = addr16_data->AddressLength; } RequirementDescriptor++; @@ -1376,7 +1382,7 @@ Bus_PDO_QueryResourceRequirements( RequirementDescriptor->ShareDisposition = CmResourceShareShared; RequirementDescriptor->Flags = 0; RequirementDescriptor->u.BusNumber.MinBusNumber = addr32_data->Minimum; - RequirementDescriptor->u.BusNumber.MaxBusNumber = addr32_data->Maximum; + RequirementDescriptor->u.BusNumber.MaxBusNumber = addr32_data->Maximum + addr32_data->AddressLength - 1; RequirementDescriptor->u.BusNumber.Length = addr32_data->AddressLength; } else if (addr32_data->ResourceType == ACPI_IO_RANGE) @@ -1387,7 +1393,7 @@ Bus_PDO_QueryResourceRequirements( if (addr32_data->Decode == ACPI_POS_DECODE) RequirementDescriptor->Flags |= CM_RESOURCE_PORT_POSITIVE_DECODE; RequirementDescriptor->u.Port.MinimumAddress.QuadPart = addr32_data->Minimum; - RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr32_data->Maximum; + RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr32_data->Maximum + addr32_data->AddressLength - 1; RequirementDescriptor->u.Port.Length = addr32_data->AddressLength; } else @@ -1406,7 +1412,7 @@ Bus_PDO_QueryResourceRequirements( case ACPI_PREFETCHABLE_MEMORY: RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_PREFETCHABLE; break; } RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = addr32_data->Minimum; - RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr32_data->Maximum; + RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr32_data->Maximum + addr32_data->AddressLength - 1; RequirementDescriptor->u.Memory.Length = addr32_data->AddressLength; } RequirementDescriptor++; @@ -1423,7 +1429,7 @@ Bus_PDO_QueryResourceRequirements( RequirementDescriptor->ShareDisposition = CmResourceShareShared; RequirementDescriptor->Flags = 0; RequirementDescriptor->u.BusNumber.MinBusNumber = (ULONG)addr64_data->Minimum; - RequirementDescriptor->u.BusNumber.MaxBusNumber = (ULONG)addr64_data->Maximum; + RequirementDescriptor->u.BusNumber.MaxBusNumber = (ULONG)addr64_data->Maximum + addr64_data->AddressLength - 1; RequirementDescriptor->u.BusNumber.Length = addr64_data->AddressLength; } else if (addr64_data->ResourceType == ACPI_IO_RANGE) @@ -1434,7 +1440,7 @@ Bus_PDO_QueryResourceRequirements( if (addr64_data->Decode == ACPI_POS_DECODE) RequirementDescriptor->Flags |= CM_RESOURCE_PORT_POSITIVE_DECODE; RequirementDescriptor->u.Port.MinimumAddress.QuadPart = addr64_data->Minimum; - RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr64_data->Maximum; + RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr64_data->Maximum + addr64_data->AddressLength - 1; RequirementDescriptor->u.Port.Length = addr64_data->AddressLength; } else @@ -1453,7 +1459,7 @@ Bus_PDO_QueryResourceRequirements( case ACPI_PREFETCHABLE_MEMORY: RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_PREFETCHABLE; break; } RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = addr64_data->Minimum; - RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr64_data->Maximum; + RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr64_data->Maximum + addr64_data->AddressLength - 1; RequirementDescriptor->u.Memory.Length = addr64_data->AddressLength; } RequirementDescriptor++; @@ -1470,7 +1476,7 @@ Bus_PDO_QueryResourceRequirements( RequirementDescriptor->ShareDisposition = CmResourceShareShared; RequirementDescriptor->Flags = 0; RequirementDescriptor->u.BusNumber.MinBusNumber = (ULONG)addr64_data->Minimum; - RequirementDescriptor->u.BusNumber.MaxBusNumber = (ULONG)addr64_data->Maximum; + RequirementDescriptor->u.BusNumber.MaxBusNumber = (ULONG)addr64_data->Maximum + addr64_data->AddressLength - 1; RequirementDescriptor->u.BusNumber.Length = addr64_data->AddressLength; } else if (addr64_data->ResourceType == ACPI_IO_RANGE) @@ -1481,7 +1487,7 @@ Bus_PDO_QueryResourceRequirements( if (addr64_data->Decode == ACPI_POS_DECODE) RequirementDescriptor->Flags |= CM_RESOURCE_PORT_POSITIVE_DECODE; RequirementDescriptor->u.Port.MinimumAddress.QuadPart = addr64_data->Minimum; - RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr64_data->Maximum; + RequirementDescriptor->u.Port.MaximumAddress.QuadPart = addr64_data->Maximum + addr64_data->AddressLength - 1; RequirementDescriptor->u.Port.Length = addr64_data->AddressLength; } else @@ -1500,7 +1506,7 @@ Bus_PDO_QueryResourceRequirements( case ACPI_PREFETCHABLE_MEMORY: RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_PREFETCHABLE; break; } RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = addr64_data->Minimum; - RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr64_data->Maximum; + RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = addr64_data->Maximum + addr64_data->AddressLength - 1; RequirementDescriptor->u.Memory.Length = addr64_data->AddressLength; } RequirementDescriptor++; @@ -1518,7 +1524,7 @@ Bus_PDO_QueryResourceRequirements( else RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_READ_WRITE; RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = mem24_data->Minimum; - RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = mem24_data->Maximum; + RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = mem24_data->Maximum + mem24_data->AddressLength - 1; RequirementDescriptor->u.Memory.Length = mem24_data->AddressLength; RequirementDescriptor++; @@ -1536,7 +1542,7 @@ Bus_PDO_QueryResourceRequirements( else RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_READ_WRITE; RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = mem32_data->Minimum; - RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = mem32_data->Maximum; + RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = mem32_data->Maximum + mem32_data->AddressLength - 1; RequirementDescriptor->u.Memory.Length = mem32_data->AddressLength; RequirementDescriptor++; @@ -1554,7 +1560,7 @@ Bus_PDO_QueryResourceRequirements( else RequirementDescriptor->Flags |= CM_RESOURCE_MEMORY_READ_WRITE; RequirementDescriptor->u.Memory.MinimumAddress.QuadPart = fixedmem32_data->Address; - RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = fixedmem32_data->Address; + RequirementDescriptor->u.Memory.MaximumAddress.QuadPart = fixedmem32_data->Address + fixedmem32_data->AddressLength - 1; RequirementDescriptor->u.Memory.Length = fixedmem32_data->AddressLength; RequirementDescriptor++; diff --git a/hal/halx86/acpi/halpnpdd.c b/hal/halx86/acpi/halpnpdd.c index 8499ce3b651..771e19c6fd6 100644 --- a/hal/halx86/acpi/halpnpdd.c +++ b/hal/halx86/acpi/halpnpdd.c @@ -172,8 +172,7 @@ HalpQueryInterface(IN PDEVICE_OBJECT DeviceObject, OUT PULONG Length) { UNIMPLEMENTED; - while (TRUE); - return STATUS_NO_SUCH_DEVICE; + return STATUS_NOT_SUPPORTED; } NTSTATUS diff --git a/hal/halx86/legacy/halpnpdd.c b/hal/halx86/legacy/halpnpdd.c index c8648a44208..d3a935f60b6 100644 --- a/hal/halx86/legacy/halpnpdd.c +++ b/hal/halx86/legacy/halpnpdd.c @@ -164,8 +164,7 @@ HalpQueryInterface(IN PDEVICE_OBJECT DeviceObject, OUT PULONG Length) { UNIMPLEMENTED; - while (TRUE); - return STATUS_NO_SUCH_DEVICE; + return STATUS_NOT_SUPPORTED; } NTSTATUS diff --git a/media/inf/keyboard.inf b/media/inf/keyboard.inf index 2aa205785134db7b9359423dd173a382af41e36b..41f79d35a77747f53cec9db8fcb1e7def166de86 100644 GIT binary patch delta 14 WcmaFj_QY+&3@%3F%`>@9O8@{fHU<;` delta 16 YcmaFj_QY+&46eza_>?y9;#wsE07rHQl>h($ diff --git a/media/inf/msmouse.inf b/media/inf/msmouse.inf index dae16ed4c77acf2afeb985db822aebcf1d06e87f..e33232cce4e6514ab974a7e4c2a017b842650f46 100644 GIT binary patch delta 18 acmeygmhsbC#tmzvCePt9+x$pMzy<(VPzWOc delta 16 YcmeygmhsbC#tmzv7!5YBm2$NK07Lu+;{X5v