1 From b64cff82b2b33ed659826d777d2db039f64fd198 Mon Sep 17 00:00:00 2001
2 From: Al Stone <ahs3@redhat.com>
3 Date: Tue, 29 Jun 2021 17:45:24 -0600
4 Subject: [PATCH 42/45] Support IVRS in a big-endian world
6 Signed-off-by: Al Stone <ahs3@redhat.com>
8 source/common/dmtbdump2.c | 34 +++++++++++++++++++---------------
9 1 file changed, 19 insertions(+), 15 deletions(-)
11 Index: acpica-unix2-20220331/source/common/dmtbdump2.c
12 ===================================================================
13 --- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
14 +++ acpica-unix2-20220331/source/common/dmtbdump2.c
15 @@ -419,11 +419,14 @@ AcpiDmDumpIvrs (
16 ACPI_IVRS_DE_HEADER *DeviceEntry;
17 ACPI_IVRS_HEADER *Subtable;
18 ACPI_DMTABLE_INFO *InfoTable;
19 + UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
20 + UINT16 SubtableLength;
26 - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs);
27 + Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoIvrs);
28 if (ACPI_FAILURE (Status))
31 @@ -433,8 +436,9 @@ AcpiDmDumpIvrs (
33 Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
35 - while (Offset < Table->Length)
36 + while (Offset < TableLength)
38 + SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
39 switch (Subtable->Type)
41 /* Type 10h, IVHD (I/O Virtualization Hardware Definition) */
42 @@ -471,7 +475,7 @@ AcpiDmDumpIvrs (
44 /* Attempt to continue */
46 - if (!Subtable->Length)
47 + if (!SubtableLength)
49 AcpiOsPrintf ("Invalid zero length subtable\n");
51 @@ -481,8 +485,8 @@ AcpiDmDumpIvrs (
53 /* Dump the subtable */
55 - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
56 - Subtable->Length, InfoTable);
57 + Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
58 + SubtableLength, InfoTable);
59 if (ACPI_FAILURE (Status))
62 @@ -511,7 +515,7 @@ AcpiDmDumpIvrs (
64 /* Process all of the Device Entries */
66 - while (EntryOffset < (Offset + Subtable->Length))
67 + while (EntryOffset < (Offset + SubtableLength))
71 @@ -581,7 +585,7 @@ AcpiDmDumpIvrs (
73 /* Dump the Device Entry */
75 - Status = AcpiDmDumpTable (Table->Length, EntryOffset,
76 + Status = AcpiDmDumpTable (TableLength, EntryOffset,
77 DeviceEntry, EntryLength, InfoTable);
78 if (ACPI_FAILURE (Status))
80 @@ -605,12 +609,12 @@ AcpiDmDumpIvrs (
82 if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiHid))
84 - Status = AcpiDmDumpTable (Table->Length, EntryOffset,
85 + Status = AcpiDmDumpTable (TableLength, EntryOffset,
86 &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidInteger);
90 - Status = AcpiDmDumpTable (Table->Length, EntryOffset,
91 + Status = AcpiDmDumpTable (TableLength, EntryOffset,
92 &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidString);
94 if (ACPI_FAILURE (Status))
95 @@ -628,12 +632,12 @@ AcpiDmDumpIvrs (
97 if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiCid))
99 - Status = AcpiDmDumpTable (Table->Length, EntryOffset,
100 + Status = AcpiDmDumpTable (TableLength, EntryOffset,
101 &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidInteger);
105 - Status = AcpiDmDumpTable (Table->Length, EntryOffset,
106 + Status = AcpiDmDumpTable (TableLength, EntryOffset,
107 &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidString);
109 if (ACPI_FAILURE (Status))
110 @@ -650,7 +654,7 @@ AcpiDmDumpIvrs (
112 if (HidSubtable->UidType == ACPI_IVRS_UID_IS_STRING)
114 - Status = AcpiDmDumpTable (Table->Length, EntryOffset,
115 + Status = AcpiDmDumpTable (TableLength, EntryOffset,
116 &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidString);
117 if (ACPI_FAILURE (Status))
119 @@ -659,7 +663,7 @@ AcpiDmDumpIvrs (
121 else /* ACPI_IVRS_UID_IS_INTEGER */
123 - Status = AcpiDmDumpTable (Table->Length, EntryOffset,
124 + Status = AcpiDmDumpTable (TableLength, EntryOffset,
125 &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidInteger);
126 if (ACPI_FAILURE (Status))
128 @@ -678,8 +682,8 @@ AcpiDmDumpIvrs (
130 /* Point to next subtable */
132 - Offset += Subtable->Length;
133 - Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, Subtable->Length);
134 + Offset += SubtableLength;
135 + Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, SubtableLength);