diff options
author | Feng Tang <feng.tang@intel.com> | 2012-08-20 21:56:58 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2012-09-21 00:31:33 -0400 |
commit | 8ede06aba5dffa78a27a18c47a9059eb38072ada (patch) | |
tree | fd88db5ccc5be67ea5998ff91187f0f1ff7a372e /drivers/acpi/utils.c | |
parent | 7560452c1a4934049811fb6622fb753e8ad1c647 (diff) |
ACPI: Use ACPICA native way to decode the PLD buffer
This patch is on top of the ACPICA 20120816 release, which implemented
a native way to decode PLD buffer, so use it instead of leting upper
level users do the decoding.
v2: Modify the check for PLD buffer length to reject buffers whose
length < 16
Signed-off-by: Feng Tang <feng.tang@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/utils.c')
-rw-r--r-- | drivers/acpi/utils.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c index 3e87c9c538aa..462f7e300363 100644 --- a/drivers/acpi/utils.c +++ b/drivers/acpi/utils.c | |||
@@ -384,7 +384,7 @@ acpi_evaluate_reference(acpi_handle handle, | |||
384 | EXPORT_SYMBOL(acpi_evaluate_reference); | 384 | EXPORT_SYMBOL(acpi_evaluate_reference); |
385 | 385 | ||
386 | acpi_status | 386 | acpi_status |
387 | acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld *pld) | 387 | acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld_info **pld) |
388 | { | 388 | { |
389 | acpi_status status; | 389 | acpi_status status; |
390 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; | 390 | struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; |
@@ -400,13 +400,16 @@ acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld *pld) | |||
400 | if (!output || output->type != ACPI_TYPE_PACKAGE | 400 | if (!output || output->type != ACPI_TYPE_PACKAGE |
401 | || !output->package.count | 401 | || !output->package.count |
402 | || output->package.elements[0].type != ACPI_TYPE_BUFFER | 402 | || output->package.elements[0].type != ACPI_TYPE_BUFFER |
403 | || output->package.elements[0].buffer.length > sizeof(*pld)) { | 403 | || output->package.elements[0].buffer.length < ACPI_PLD_REV1_BUFFER_SIZE) { |
404 | status = AE_TYPE; | 404 | status = AE_TYPE; |
405 | goto out; | 405 | goto out; |
406 | } | 406 | } |
407 | 407 | ||
408 | memcpy(pld, output->package.elements[0].buffer.pointer, | 408 | status = acpi_decode_pld_buffer( |
409 | output->package.elements[0].buffer.length); | 409 | output->package.elements[0].buffer.pointer, |
410 | output->package.elements[0].buffer.length, | ||
411 | pld); | ||
412 | |||
410 | out: | 413 | out: |
411 | kfree(buffer.pointer); | 414 | kfree(buffer.pointer); |
412 | return status; | 415 | return status; |