ACPICA: Add parsing for IVRS IVHD 40h and device entry F0h
authorAlexander Monakov <amonakov@ispras.ru>
Tue, 6 Apr 2021 21:30:07 +0000 (14:30 -0700)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 7 Apr 2021 17:09:00 +0000 (19:09 +0200)
ACPICA commit eefb865355514048380d921de5efcf30027d6b02

IVHD type 40h uses the same field layout as type 11h, but adds support
for a new device entry type F0h (ACPI HID device entry). The new device
entry type has variable length: after fixed-length fields occupying 22
bytes, there's a field of length up to 255 (as given by the preceding
field).

Link: https://github.com/acpica/acpica/commit/eefb8653
Signed-off-by: Alexander Monakov <amonakov@ispras.ru>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Erik Kaneda <erik.kaneda@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
include/acpi/actbl2.h

index d6478c430c99afeea2e3fce9f01ba531ea4c436c..d1178427aa400ea1122492170871e78ec8acf50b 100644 (file)
@@ -276,6 +276,7 @@ struct acpi_ivrs_header {
 enum acpi_ivrs_type {
        ACPI_IVRS_TYPE_HARDWARE1 = 0x10,
        ACPI_IVRS_TYPE_HARDWARE2 = 0x11,
+       ACPI_IVRS_TYPE_HARDWARE3 = 0x40,
        ACPI_IVRS_TYPE_MEMORY1 = 0x20,
        ACPI_IVRS_TYPE_MEMORY2 = 0x21,
        ACPI_IVRS_TYPE_MEMORY3 = 0x22
@@ -364,7 +365,11 @@ enum acpi_ivrs_device_entry_type {
        ACPI_IVRS_TYPE_ALIAS_START = 67,        /* Uses struct acpi_ivrs_device8a */
        ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses struct acpi_ivrs_device8b */
        ACPI_IVRS_TYPE_EXT_START = 71,  /* Uses struct acpi_ivrs_device8b */
-       ACPI_IVRS_TYPE_SPECIAL = 72     /* Uses struct acpi_ivrs_device8c */
+       ACPI_IVRS_TYPE_SPECIAL = 72,    /* Uses struct acpi_ivrs_device8c */
+
+       /* Variable-length device entries */
+
+       ACPI_IVRS_TYPE_HID = 240        /* Uses ACPI_IVRS_DEVICE_HID */
 };
 
 /* Values for Data field above */
@@ -416,6 +421,16 @@ struct acpi_ivrs_device8c {
 #define ACPI_IVHD_IOAPIC            1
 #define ACPI_IVHD_HPET              2
 
+/* Type 240: variable-length device entry */
+
+struct acpi_ivrs_device_hid {
+       struct acpi_ivrs_de_header header;
+       u64 acpi_hid;
+       u64 acpi_cid;
+       u8 uid_type;
+       u8 uid_length;
+};
+
 /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
 
 struct acpi_ivrs_memory {