日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

acpi_hardware_id可以通过HID/CLD/UID/CLS/method/path获得

發布時間:2024/8/1 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 acpi_hardware_id可以通过HID/CLD/UID/CLS/method/path获得 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一般情況下在acpi_set_pnp_ids函數中通過bios傳遞的HID/CLD/UID/CLS/method/path等flags來識別不同的device。 static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp,int device_type) {acpi_status status;struct acpi_device_info *info;struct acpi_pnp_device_id_list *cid_list;int i;switch (device_type) {case ACPI_BUS_TYPE_DEVICE:if (handle == ACPI_ROOT_OBJECT) {acpi_add_id(pnp, ACPI_SYSTEM_HID);break;}status = acpi_get_object_info(handle, &info);if (ACPI_FAILURE(status)) {pr_err(PREFIX "%s: Error reading device info\n",__func__);return;} //通過HID 識別deviceif (info->valid & ACPI_VALID_HID) {acpi_add_id(pnp, info->hardware_id.string);pnp->type.platform_id = 1;} //通過CID 識別deviceif (info->valid & ACPI_VALID_CID) {cid_list = &info->compatible_id_list;for (i = 0; i < cid_list->count; i++)acpi_add_id(pnp, cid_list->ids[i].string);} //通過UID 識別deviceif (info->valid & ACPI_VALID_UID)pnp->unique_id = kstrdup(info->unique_id.string,GFP_KERNEL);if (info->valid & ACPI_VALID_CLS)acpi_add_id(pnp, info->class_code.string);kfree(info);/** Some devices don't reliably have _HIDs & _CIDs, so add* synthetic HIDs to make sure drivers can find them.*/ //通過method來識別deviceif (acpi_is_video_device(handle))acpi_add_id(pnp, ACPI_VIDEO_HID);else if (acpi_bay_match(handle))acpi_add_id(pnp, ACPI_BAY_HID);else if (acpi_dock_match(handle))acpi_add_id(pnp, ACPI_DOCK_HID);else if (acpi_ibm_smbus_match(handle))acpi_add_id(pnp, ACPI_SMBUS_IBM_HID);//通過path識別deviceelse if (list_empty(&pnp->ids) &&acpi_object_is_system_bus(handle)) {/* \_SB, \_TZ, LNXSYBUS */acpi_add_id(pnp, ACPI_BUS_HID);strcpy(pnp->device_name, ACPI_BUS_DEVICE_NAME);strcpy(pnp->device_class, ACPI_BUS_CLASS);}break;} } 通過HID/CLD/UID/CLS識別device 比較好理解,先看看通過method來識別device long acpi_is_video_device(acpi_handle handle) {long video_caps = 0; //可見主要是通過判斷這個handle是否有相關的method。/* Is this device able to support video switching ? */if (acpi_has_method(handle, "_DOD") || acpi_has_method(handle, "_DOS"))video_caps |= ACPI_VIDEO_OUTPUT_SWITCHING;return video_caps; }再看看通過path識別device的 static bool acpi_object_is_system_bus(acpi_handle handle) {acpi_handle tmp;if (ACPI_SUCCESS(acpi_get_handle(NULL, "\\_SB", &tmp)) &&tmp == handle)return true;if (ACPI_SUCCESS(acpi_get_handle(NULL, "\\_TZ", &tmp)) &&tmp == handle)return true;return false; } 其中acpi_get_handle的原型如下:可見本例是通過\\_SB 這個路徑下的handle是否等于要識別device的handle來確認是否是同一個device的 acpi_status acpi_get_handle(acpi_handle parent, acpi_string pathname,acpi_handle *ret_handle)

總結

以上是生活随笔為你收集整理的acpi_hardware_id可以通过HID/CLD/UID/CLS/method/path获得的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。