浏览代码

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>
Zhao Yakui 17 年之前
父节点
当前提交
49fbabf56d
共有 1 个文件被更改,包括 9 次插入16 次删除
  1. 9 16
      drivers/acpi/osl.c

+ 9 - 16
drivers/acpi/osl.c

@@ -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) {
-	case 8:
+	*value = 0;
+	if (width <= 8) {
 		*(u8 *) value = inb(port);
 		*(u8 *) value = inb(port);
-		break;
-	case 16:
+	} else if (width <= 16) {
 		*(u16 *) value = inw(port);
 		*(u16 *) value = inw(port);
-		break;
-	case 32:
+	} else if (width <= 32) {
 		*(u32 *) value = inl(port);
 		*(u32 *) value = inl(port);
-		break;
-	default:
+	} else {
 		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) {
-	case 8:
+	if (width <= 8) {
 		outb(value, port);
 		outb(value, port);
-		break;
-	case 16:
+	} else if (width <= 16) {
 		outw(value, port);
 		outw(value, port);
-		break;
-	case 32:
+	} else if (width <= 32) {
 		outl(value, port);
 		outl(value, port);
-		break;
-	default:
+	} else {
 		BUG();
 		BUG();
 	}
 	}