ACPI: Handle I/O access width requestst that are not a multiple of 8 bits.

We've run into BIOS that hand us 4-bit access width requests
for T-state control when the code expected only multipls of 8-bits.
Round up.

Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
Signed-off-by: Li Shaohua <shaohua.li@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
Zhao Yakui 2007-11-15 17:01:06 +08:00 committed by Len Brown
parent ef54d5ad2f
commit 49fbabf56d
1 changed files with 9 additions and 16 deletions

View File

@ -387,17 +387,14 @@ acpi_status acpi_os_read_port(acpi_io_address port, u32 * value, u32 width)
if (!value) if (!value)
value = &dummy; value = &dummy;
switch (width) { *value = 0;
case 8: if (width <= 8) {
*(u8 *) value = inb(port); *(u8 *) value = inb(port);
break; } else if (width <= 16) {
case 16:
*(u16 *) value = inw(port); *(u16 *) value = inw(port);
break; } else if (width <= 32) {
case 32:
*(u32 *) value = inl(port); *(u32 *) value = inl(port);
break; } else {
default:
BUG(); BUG();
} }
@ -408,17 +405,13 @@ EXPORT_SYMBOL(acpi_os_read_port);
acpi_status acpi_os_write_port(acpi_io_address port, u32 value, u32 width) acpi_status acpi_os_write_port(acpi_io_address port, u32 value, u32 width)
{ {
switch (width) { if (width <= 8) {
case 8:
outb(value, port); outb(value, port);
break; } else if (width <= 16) {
case 16:
outw(value, port); outw(value, port);
break; } else if (width <= 32) {
case 32:
outl(value, port); outl(value, port);
break; } else {
default:
BUG(); BUG();
} }