X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Facpi%2Futils.c;h=1ce2047c3804d828fd16404838154af9e9bec8be;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=ed66215b32ab85110c7f8a5ea886abe0a4dca3f3;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c index ed66215b3..1ce2047c3 100644 --- a/drivers/acpi/utils.c +++ b/drivers/acpi/utils.c @@ -233,6 +233,7 @@ acpi_extract_package ( return_ACPI_STATUS(AE_OK); } +EXPORT_SYMBOL(acpi_extract_package); acpi_status @@ -243,31 +244,40 @@ acpi_evaluate_integer ( unsigned long *data) { acpi_status status = AE_OK; - union acpi_object element; - struct acpi_buffer buffer = {sizeof(union acpi_object), &element}; + union acpi_object *element; + struct acpi_buffer buffer = {0,NULL}; ACPI_FUNCTION_TRACE("acpi_evaluate_integer"); if (!data) return_ACPI_STATUS(AE_BAD_PARAMETER); + element = kmalloc(sizeof(union acpi_object), GFP_KERNEL); + if(!element) + return_ACPI_STATUS(AE_NO_MEMORY); + + memset(element, 0, sizeof(union acpi_object)); + buffer.length = sizeof(union acpi_object); + buffer.pointer = element; status = acpi_evaluate_object(handle, pathname, arguments, &buffer); if (ACPI_FAILURE(status)) { acpi_util_eval_error(handle, pathname, status); return_ACPI_STATUS(status); } - if (element.type != ACPI_TYPE_INTEGER) { + if (element->type != ACPI_TYPE_INTEGER) { acpi_util_eval_error(handle, pathname, AE_BAD_DATA); return_ACPI_STATUS(AE_BAD_DATA); } - *data = element.integer.value; + *data = element->integer.value; + kfree(element); ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Return value [%lu]\n", *data)); return_ACPI_STATUS(AE_OK); } +EXPORT_SYMBOL(acpi_evaluate_integer); #if 0 @@ -373,7 +383,7 @@ acpi_evaluate_reference ( } if (package->package.count > ACPI_MAX_HANDLES) { - return AE_NO_MEMORY; + return_ACPI_STATUS(AE_NO_MEMORY); } list->count = package->package.count; @@ -409,5 +419,5 @@ end: return_ACPI_STATUS(status); } - +EXPORT_SYMBOL(acpi_evaluate_reference);