acpi_status acpi_evaluate_integer(acpi_handle handle, acpi_string pathname, struct acpi_object_list *arguments, unsigned long long *data) { acpi_status status = AE_OK; union acpi_object element; struct acpi_buffer buffer = { 0, NULL }; if (!data) return AE_BAD_PARAMETER; 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 status; } if (element.type != ACPI_TYPE_INTEGER) { acpi_util_eval_error(handle, pathname, AE_BAD_DATA); return AE_BAD_DATA; } *data = element.integer.value; ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Return value [%llu]\n", *data)); return AE_OK; }
acpi_status acpi_evaluate_integer ( acpi_handle handle, acpi_string pathname, struct acpi_object_list *arguments, unsigned long *data) { acpi_status status = AE_OK; union acpi_object element; struct acpi_buffer buffer = {sizeof(union acpi_object), &element}; ACPI_FUNCTION_TRACE("acpi_evaluate_integer"); if (!data) return_ACPI_STATUS(AE_BAD_PARAMETER); 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) { acpi_util_eval_error(handle, pathname, AE_BAD_DATA); return_ACPI_STATUS(AE_BAD_DATA); } *data = element.integer.value; ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Return value [%lu]\n", *data)); return_ACPI_STATUS(AE_OK); }
ACPI_STATUS acpi_evaluate_integer ( ACPI_HANDLE handle, ACPI_STRING pathname, ACPI_OBJECT_LIST *arguments, unsigned long long *data) { ACPI_STATUS status = AE_OK; ACPI_OBJECT element; ACPI_BUFFER buffer = {sizeof(ACPI_OBJECT), &element}; ACPI_FUNCTION_TRACE("acpi_evaluate_integer"); if (!data) return_ACPI_STATUS(AE_BAD_PARAMETER); status = AcpiEvaluateObject(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) { acpi_util_eval_error(handle, pathname, AE_BAD_DATA); return_ACPI_STATUS(AE_BAD_DATA); } *data = element.Integer.Value; ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Return value [%lu]\n", *data)); return_ACPI_STATUS(AE_OK); }
acpi_status acpi_evaluate_string ( acpi_handle handle, acpi_string pathname, acpi_object_list *arguments, acpi_string *data) { acpi_status status = AE_OK; acpi_object *element = NULL; acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; ACPI_FUNCTION_TRACE("acpi_evaluate_string"); if (!data) return_ACPI_STATUS(AE_BAD_PARAMETER); status = acpi_evaluate_object(handle, pathname, arguments, &buffer); if (ACPI_FAILURE(status)) { acpi_util_eval_error(handle, pathname, status); return_ACPI_STATUS(status); } element = (acpi_object *) buffer.pointer; if ((element->type != ACPI_TYPE_STRING) || (element->type != ACPI_TYPE_BUFFER) || !element->string.length) { acpi_util_eval_error(handle, pathname, AE_BAD_DATA); return_ACPI_STATUS(AE_BAD_DATA); } *data = kmalloc(element->string.length + 1, GFP_KERNEL); if (!data) { ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Memory allocation error\n")); return_VALUE(-ENOMEM); } memset(*data, 0, element->string.length + 1); memcpy(*data, element->string.pointer, element->string.length); ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Return value [%s]\n", *data)); acpi_os_free(buffer.pointer); return_ACPI_STATUS(AE_OK); }
acpi_status acpi_evaluate_string(acpi_handle handle, acpi_string pathname, acpi_object_list * arguments, acpi_string * data) { acpi_status status = AE_OK; acpi_object *element = NULL; acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; if (!data) return AE_BAD_PARAMETER; status = acpi_evaluate_object(handle, pathname, arguments, &buffer); if (ACPI_FAILURE(status)) { acpi_util_eval_error(handle, pathname, status); return status; } element = (acpi_object *) buffer.pointer; if ((element->type != ACPI_TYPE_STRING) || (element->type != ACPI_TYPE_BUFFER) || !element->string.length) { acpi_util_eval_error(handle, pathname, AE_BAD_DATA); return AE_BAD_DATA; } *data = kmalloc(element->string.length + 1, GFP_KERNEL); if (!data) { printk(KERN_ERR PREFIX "Memory allocation\n"); return -ENOMEM; } memset(*data, 0, element->string.length + 1); memcpy(*data, element->string.pointer, element->string.length); ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Return value [%s]\n", *data)); kfree(buffer.pointer); return AE_OK; }
acpi_status acpi_evaluate_integer(acpi_handle handle, acpi_string pathname, struct acpi_object_list *arguments, unsigned long *data) { acpi_status status = AE_OK; union acpi_object *element; struct acpi_buffer buffer = { 0, NULL }; if (!data) return AE_BAD_PARAMETER; element = kmalloc(sizeof(union acpi_object), irqs_disabled() ? GFP_ATOMIC: GFP_KERNEL); if (!element) return 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); kfree(element); return status; } if (element->type != ACPI_TYPE_INTEGER) { acpi_util_eval_error(handle, pathname, AE_BAD_DATA); kfree(element); return AE_BAD_DATA; } *data = element->integer.value; kfree(element); ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Return value [%lu]\n", *data)); return AE_OK; }
acpi_status acpi_evaluate_reference(acpi_handle handle, acpi_string pathname, struct acpi_object_list *arguments, struct acpi_handle_list *list) { acpi_status status = AE_OK; union acpi_object *package = NULL; union acpi_object *element = NULL; struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; u32 i = 0; if (!list) { return AE_BAD_PARAMETER; } /* Evaluate object. */ status = acpi_evaluate_object(handle, pathname, arguments, &buffer); if (ACPI_FAILURE(status)) goto end; package = buffer.pointer; if ((buffer.length == 0) || !package) { printk(KERN_ERR PREFIX "No return object (len %X ptr %p)\n", (unsigned)buffer.length, package); status = AE_BAD_DATA; acpi_util_eval_error(handle, pathname, status); goto end; } if (package->type != ACPI_TYPE_PACKAGE) { printk(KERN_ERR PREFIX "Expecting a [Package], found type %X\n", package->type); status = AE_BAD_DATA; acpi_util_eval_error(handle, pathname, status); goto end; } if (!package->package.count) { printk(KERN_ERR PREFIX "[Package] has zero elements (%p)\n", package); status = AE_BAD_DATA; acpi_util_eval_error(handle, pathname, status); goto end; } if (package->package.count > ACPI_MAX_HANDLES) { return AE_NO_MEMORY; } list->count = package->package.count; /* Extract package data. */ for (i = 0; i < list->count; i++) { element = &(package->package.elements[i]); if (element->type != ACPI_TYPE_LOCAL_REFERENCE) { status = AE_BAD_DATA; printk(KERN_ERR PREFIX "Expecting a [Reference] package element, found type %X\n", element->type); acpi_util_eval_error(handle, pathname, status); break; } if (!element->reference.handle) { printk(KERN_WARNING PREFIX "Invalid reference in" " package %s\n", pathname); status = AE_NULL_ENTRY; break; } /* Get the acpi_handle. */ list->handles[i] = element->reference.handle; ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found reference [%p]\n", list->handles[i])); } end: if (ACPI_FAILURE(status)) { list->count = 0; //kfree(list->handles); } kfree(buffer.pointer); return status; }
acpi_status acpi_evaluate_reference(acpi_handle handle, acpi_string pathname, struct acpi_object_list *arguments, struct acpi_handle_list *list) { acpi_status status = AE_OK; union acpi_object *package = NULL; union acpi_object *element = NULL; struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; u32 i = 0; ACPI_FUNCTION_TRACE("acpi_evaluate_reference"); if (!list) { return_ACPI_STATUS(AE_BAD_PARAMETER); } /* Evaluate object. */ status = acpi_evaluate_object(handle, pathname, arguments, &buffer); if (ACPI_FAILURE(status)) goto end; package = (union acpi_object *)buffer.pointer; if ((buffer.length == 0) || !package) { ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "No return object (len %X ptr %p)\n", (unsigned)buffer.length, package)); status = AE_BAD_DATA; acpi_util_eval_error(handle, pathname, status); goto end; } if (package->type != ACPI_TYPE_PACKAGE) { ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Expecting a [Package], found type %X\n", package->type)); status = AE_BAD_DATA; acpi_util_eval_error(handle, pathname, status); goto end; } if (!package->package.count) { ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "[Package] has zero elements (%p)\n", package)); status = AE_BAD_DATA; acpi_util_eval_error(handle, pathname, status); goto end; } if (package->package.count > ACPI_MAX_HANDLES) { return_ACPI_STATUS(AE_NO_MEMORY); } list->count = package->package.count; /* Extract package data. */ for (i = 0; i < list->count; i++) { element = &(package->package.elements[i]); if (element->type != ACPI_TYPE_ANY) { status = AE_BAD_DATA; ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Expecting a [Reference] package element, found type %X\n", element->type)); acpi_util_eval_error(handle, pathname, status); break; } /* Get the acpi_handle. */ list->handles[i] = element->reference.handle; ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found reference [%p]\n", list->handles[i])); } end: if (ACPI_FAILURE(status)) { list->count = 0; //kfree(list->handles); } acpi_os_free(buffer.pointer); return_ACPI_STATUS(status); }
ACPI_STATUS acpi_evaluate_reference ( ACPI_HANDLE handle, ACPI_STRING pathname, ACPI_OBJECT_LIST *arguments, struct acpi_handle_list *list) { ACPI_STATUS status = AE_OK; ACPI_OBJECT *package = NULL; ACPI_OBJECT *element = NULL; ACPI_BUFFER buffer = {ACPI_ALLOCATE_BUFFER, NULL}; UINT32 i = 0; ACPI_FUNCTION_TRACE("acpi_evaluate_reference"); if (!list) { return_ACPI_STATUS(AE_BAD_PARAMETER); } /* Evaluate object. */ status = AcpiEvaluateObject(handle, pathname, arguments, &buffer); if (ACPI_FAILURE(status)) goto end; package = (ACPI_OBJECT *) buffer.Pointer; if ((buffer.Length == 0) || !package) { ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "No return object (len %X ptr %p)\n", buffer.Length, package)); status = AE_BAD_DATA; acpi_util_eval_error(handle, pathname, status); goto end; } if (package->Type != ACPI_TYPE_PACKAGE) { ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Expecting a [Package], found type %X\n", package->Type)); status = AE_BAD_DATA; acpi_util_eval_error(handle, pathname, status); goto end; } if (!package->Package.Count) { ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "[Package] has zero elements (%p)\n", package)); status = AE_BAD_DATA; acpi_util_eval_error(handle, pathname, status); goto end; } if (package->Package.Count > ACPI_MAX_HANDLES) { return AE_NO_MEMORY; } list->count = package->Package.Count; /* Extract package data. */ for (i = 0; i < list->count; i++) { element = &(package->Package.Elements[i]); if (element->Type != ACPI_TYPE_LOCAL_REFERENCE) { status = AE_BAD_DATA; ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Expecting a [Reference] package element, found type %X\n", element->type)); acpi_util_eval_error(handle, pathname, status); break; } if (!element->Reference.Handle) { ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid reference in" " package %s\n", pathname)); status = AE_NULL_ENTRY; break; } /* Get the ACPI_HANDLE. */ list->handles[i] = element->Reference.Handle; ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found reference [%p]\n", list->handles[i])); } end: if (ACPI_FAILURE(status)) { list->count = 0; //ExFreePool(list->handles); } if (buffer.Pointer) AcpiOsFree(buffer.Pointer); return_ACPI_STATUS(status); }