acpi_evaluate_integer 这个函数用于从bios中获取一个字符串的值
其使用的例程如下:
status = acpi_evaluate_integer(ac->device->handle, "_PSR", NULL,
&ac->state);
if (ACPI_FAILURE(status)) {
ACPI_EXCEPTION((AE_INFO, status,
"Error reading AC Adapter state"));
ac->state = ACPI_AC_STATUS_UNKNOWN;
return -ENODEV;
}
例如这个例程就是获得_PSR的值,然后把这个值保存在ac->state 这个unsigned long long 中
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 };
#这个data是要作为结果返回的,如果是null的话,则结果无法保存,则退出
if (!data)
return AE_BAD_PARAMETER;
#按照acpi spec 给acpi_buffer 的成员变量赋值
buffer.length = sizeof(union acpi_object);
buffer.pointer = &element;
#通过下面的函数之后后,结果就保存在element中
status = acpi_evaluate_object(handle, pathname, arguments, &buffer);
if (ACPI_FAILURE(status)) {
acpi_util_eval_error(handle, pathname, status);
return status;
}
#这里首先潘丹返回的值的类型是否是整形,如果不是整形则说明不是我们要的结果,则返回error
if (element.type != ACPI_TYPE_INTEGER) {
acpi_util_eval_error(handle, pathname, AE_BAD_DATA);
return AE_BAD_DATA;
}
#,这句就可以看出整个函数的作用其实就是从bios中的到一个整形值
#这里将从bios中获得值保存在unsigned long long 类型的data中
*data = element.integer.value;
#通过dmesg 可以看到下面的输出
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Return value [%llu]\n", *data));
return AE_OK;
}
内核ACPI函数API之acpi_evaluate_integer
最新推荐文章于 2023-11-10 13:58:18 发布