diff options
author | jhb <jhb@FreeBSD.org> | 2011-07-21 20:43:43 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2011-07-21 20:43:43 +0000 |
commit | 540fe10020e0bbf8f1b91034641adedd272db336 (patch) | |
tree | 70b8cbee2e24ba8f15b99897d98a623def640567 | |
parent | 25d8bf1959e6a0586d9249fc25a69028fcf00788 (diff) | |
download | FreeBSD-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.c | 8 |
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) { |