summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2011-07-21 20:43:43 +0000
committerjhb <jhb@FreeBSD.org>2011-07-21 20:43:43 +0000
commit540fe10020e0bbf8f1b91034641adedd272db336 (patch)
tree70b8cbee2e24ba8f15b99897d98a623def640567
parent25d8bf1959e6a0586d9249fc25a69028fcf00788 (diff)
downloadFreeBSD-src-540fe10020e0bbf8f1b91034641adedd272db336.zip
FreeBSD-src-540fe10020e0bbf8f1b91034641adedd272db336.tar.gz
Allow non-fixed endpoints for a producer address range if the length of
the resource covers the entire range. Some BIOSes appear to mark endpoints as non-fixed incorrectly (non-fixed endpoints are supposed to be used in _PRS when OSPM is allowed to allocate a certain chunk of address space within a larger range, I don't believe it is supposed to be used for _CRS). Approved by: re (kib)
-rw-r--r--sys/dev/acpica/acpi_pcib_acpi.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/dev/acpica/acpi_pcib_acpi.c b/sys/dev/acpica/acpi_pcib_acpi.c
index 99e3f1f..b96ced5 100644
--- a/sys/dev/acpica/acpi_pcib_acpi.c
+++ b/sys/dev/acpica/acpi_pcib_acpi.c
@@ -207,9 +207,11 @@ acpi_pcib_producer_handler(ACPI_RESOURCE *res, void *context)
length = res->Data.ExtAddress64.AddressLength;
break;
}
- if (length == 0 ||
- res->Data.Address.MinAddressFixed != ACPI_ADDRESS_FIXED ||
- res->Data.Address.MaxAddressFixed != ACPI_ADDRESS_FIXED)
+ if (length == 0)
+ break;
+ if (min + length - 1 != max &&
+ (res->Data.Address.MinAddressFixed != ACPI_ADDRESS_FIXED ||
+ res->Data.Address.MaxAddressFixed != ACPI_ADDRESS_FIXED))
break;
flags = 0;
switch (res->Data.Address.ResourceType) {
OpenPOWER on IntegriCloud