本文共 1649 字,大约阅读时间需要 5 分钟。
acpi_bus_get_status这个函数获取acpi_device对应handle的_STA的值,然后将这个值赋值给acpi_device其使用的例程如下: if (acpi_bus_get_status(battery->device)) { ACPI_EXCEPTION((AE_INFO, AE_ERROR, "Evaluating _STA")); return -ENODEV; }其源码分析如下:int acpi_bus_get_status(struct acpi_device *device){ acpi_status status; unsigned long long sta; #如果这个设备已经不再了,则设置这个acpi_device的状态为ACPI_STA_DEFAULT后退出 if (acpi_device_always_present(device)) { acpi_set_device_status(device, ACPI_STA_DEFAULT); return 0; } /* Battery devices must have their deps met before calling _STA */ #对电池设备特殊对待 if (acpi_device_is_battery(device) && device->dep_unmet) { acpi_set_device_status(device, 0); return 0; } #获得acpi_device对应handle的sta的状态 status = acpi_bus_get_status_handle(device->handle, &sta); if (ACPI_FAILURE(status)) return -ENODEV; #将sta的值赋值给acpi_device acpi_set_device_status(device, sta); if (device->status.functional && !device->status.present) { ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]: " "functional but not present;\n", device->pnp.bus_id, (u32)sta)); } ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]\n", device->pnp.bus_id, (u32)sta)); return 0;}我们看看如果通过handle 拿到sta的状态,原来就是直接获取bios提供的_STA 这个整形值acpi_status acpi_bus_get_status_handle(acpi_handle handle, unsigned long long *sta){ acpi_status status; status = acpi_evaluate_integer(handle, "_STA", NULL, sta); if (ACPI_SUCCESS(status)) return AE_OK; if (status == AE_NOT_FOUND) { *sta = ACPI_STA_DEVICE_PRESENT | ACPI_STA_DEVICE_ENABLED | ACPI_STA_DEVICE_UI | ACPI_STA_DEVICE_FUNCTIONING; return AE_OK; } return status;}所以从这里知道acpi_device 对应的status是和其hanlde的_STA 值是相等的。
转载地址:http://odnmi.baihongyu.com/