int acpi_scan_add_handler(struct acpi_scan_handler *handler)用于将一个acpi handler添加到acpi_scan_handlers_list 这个全局变量中
其使用的例程如下:
void __init acpi_pnp_init(void)
{
acpi_scan_add_handler(&acpi_pnp_handler);
}
可以看到这里将acpi_pnp_handler 添加到acpi_scan_handlers_list 的最后
这里的acpi_pnp_handler定义如下:
static struct acpi_scan_handler acpi_pnp_handler = {
.ids = acpi_pnp_device_ids,
.match = acpi_pnp_match,
.attach = acpi_pnp_attach,
};
可以看到handler 基本是一个指针,明白这点后可以通过比较指针是否相等来判断是否是这个handler
bool acpi_is_pnp_device(struct acpi_device *adev)
{
return adev->handler == &acpi_pnp_handler || is_cmos_rtc_device(adev);
}
例如上例子中就是通过adev->handler == &acpi_pnp_handler来判断指针是否相等
其源码分析如下:
int acpi_scan_add_handler(struct acpi_scan_handler *handler)
{
if (!handler)
return -EINVAL;
list_add_tail(&handler->list_node, &acpi_scan_handlers_list);
return 0;
}
可以看到基本就是讲这个handler添加到全局变量acpi_scan_handlers_list的最后
内核ACPI函数API之acpi_scan_add_handler
最新推荐文章于 2021-05-25 15:01:29 发布