Various machines (https://bugzilla.redhat.com/show_bug.cgi?id=585756 for instance) contain SystemIO spaces with addresses > 16 bits. acpica throws an error for this, while Windows silently ignores the upper 16 bits and carries on happily. Implement the latter behaviour for bug compatibility. Signed-off-by: Matthew Garrett <mjg@xxxxxxxxxx> --- drivers/acpi/acpica/hwvalid.c | 17 ++++++++--------- 1 files changed, 8 insertions(+), 9 deletions(-) diff --git a/drivers/acpi/acpica/hwvalid.c b/drivers/acpi/acpica/hwvalid.c index e26c17d..ddfb4f1 100644 --- a/drivers/acpi/acpica/hwvalid.c +++ b/drivers/acpi/acpica/hwvalid.c @@ -146,15 +146,6 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width) last_address), byte_width)); - /* Maximum 16-bit address in I/O space */ - - if (last_address > ACPI_UINT16_MAX) { - ACPI_ERROR((AE_INFO, - "Illegal I/O port address/length above 64K: 0x%p/%X", - ACPI_CAST_PTR(void, address), byte_width)); - return_ACPI_STATUS(AE_LIMIT); - } - /* Exit if requested address is not within the protected port table */ if (address > acpi_protected_ports[ACPI_PORT_INFO_ENTRIES - 1].end) { @@ -222,6 +213,10 @@ acpi_status acpi_hw_read_port(acpi_io_address address, u32 *value, u32 width) u32 one_byte; u32 i; + /* Windows only uses the lower 16 bits of an address. Emulate that */ + + address &= 0xffff; + /* Validate the entire request and perform the I/O */ status = acpi_hw_validate_io_request(address, width); @@ -279,6 +274,10 @@ acpi_status acpi_hw_write_port(acpi_io_address address, u32 value, u32 width) acpi_status status; u32 i; + /* Windows only uses the lower 16 bits of an address. Emulate that */ + + address &= 0xffff; + /* Validate the entire request and perform the I/O */ status = acpi_hw_validate_io_request(address, width); -- 1.7.0.1 -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html