提交 3e71a87d 编写于 作者: A Alexey Starikovskiy 提交者: Len Brown

ACPI: EC: Do the byte access with a fast path

Specification allows only byte access for EC region, so
make it separate from bug-compatible multi-byte access.
Also do not allow return of garbage in supplied *value.

Reference: http://bugzilla.kernel.org/show_bug.cgi?id=9341Signed-off-by: NAlexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: NLen Brown <len.brown@intel.com>
上级 fd0b45df
...@@ -563,7 +563,7 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address, ...@@ -563,7 +563,7 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
void *handler_context, void *region_context) void *handler_context, void *region_context)
{ {
struct acpi_ec *ec = handler_context; struct acpi_ec *ec = handler_context;
int result = 0, i = 0; int result = 0, i;
u8 temp = 0; u8 temp = 0;
if ((address > 0xFF) || !value || !handler_context) if ((address > 0xFF) || !value || !handler_context)
...@@ -575,7 +575,16 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address, ...@@ -575,7 +575,16 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
if (bits != 8 && acpi_strict) if (bits != 8 && acpi_strict)
return AE_BAD_PARAMETER; return AE_BAD_PARAMETER;
while (bits - i > 0) { if (function == ACPI_READ) {
result = acpi_ec_read(ec, address, &temp);
*value = temp;
} else {
temp = 0xff & (*value);
result = acpi_ec_write(ec, address, temp);
}
for (i = 8; unlikely(bits - i > 0); i += 8) {
++address;
if (function == ACPI_READ) { if (function == ACPI_READ) {
result = acpi_ec_read(ec, address, &temp); result = acpi_ec_read(ec, address, &temp);
(*value) |= ((acpi_integer)temp) << i; (*value) |= ((acpi_integer)temp) << i;
...@@ -583,8 +592,6 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address, ...@@ -583,8 +592,6 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
temp = 0xff & ((*value) >> i); temp = 0xff & ((*value) >> i);
result = acpi_ec_write(ec, address, temp); result = acpi_ec_write(ec, address, temp);
} }
i += 8;
++address;
} }
switch (result) { switch (result) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册