]>
Commit | Line | Data |
---|---|---|
b643ab7e JB |
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 | |
5 | ||
6 | Signed-off-by: Al Stone <ahs3@redhat.com> | |
7 | --- | |
8 | source/common/dmtbdump2.c | 34 +++++++++++++++++++--------------- | |
9 | 1 file changed, 19 insertions(+), 15 deletions(-) | |
10 | ||
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; | |
21 | + | |
22 | ||
23 | ||
24 | /* Main table */ | |
25 | ||
26 | - Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs); | |
27 | + Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoIvrs); | |
28 | if (ACPI_FAILURE (Status)) | |
29 | { | |
30 | return; | |
31 | @@ -433,8 +436,9 @@ AcpiDmDumpIvrs ( | |
32 | ||
33 | Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset); | |
34 | ||
35 | - while (Offset < Table->Length) | |
36 | + while (Offset < TableLength) | |
37 | { | |
38 | + SubtableLength = AcpiUtReadUint16 (&Subtable->Length); | |
39 | switch (Subtable->Type) | |
40 | { | |
41 | /* Type 10h, IVHD (I/O Virtualization Hardware Definition) */ | |
42 | @@ -471,7 +475,7 @@ AcpiDmDumpIvrs ( | |
43 | ||
44 | /* Attempt to continue */ | |
45 | ||
46 | - if (!Subtable->Length) | |
47 | + if (!SubtableLength) | |
48 | { | |
49 | AcpiOsPrintf ("Invalid zero length subtable\n"); | |
50 | return; | |
51 | @@ -481,8 +485,8 @@ AcpiDmDumpIvrs ( | |
52 | ||
53 | /* Dump the subtable */ | |
54 | ||
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)) | |
60 | { | |
61 | return; | |
62 | @@ -511,7 +515,7 @@ AcpiDmDumpIvrs ( | |
63 | ||
64 | /* Process all of the Device Entries */ | |
65 | ||
66 | - while (EntryOffset < (Offset + Subtable->Length)) | |
67 | + while (EntryOffset < (Offset + SubtableLength)) | |
68 | { | |
69 | AcpiOsPrintf ("\n"); | |
70 | ||
71 | @@ -581,7 +585,7 @@ AcpiDmDumpIvrs ( | |
72 | ||
73 | /* Dump the Device Entry */ | |
74 | ||
75 | - Status = AcpiDmDumpTable (Table->Length, EntryOffset, | |
76 | + Status = AcpiDmDumpTable (TableLength, EntryOffset, | |
77 | DeviceEntry, EntryLength, InfoTable); | |
78 | if (ACPI_FAILURE (Status)) | |
79 | { | |
80 | @@ -605,12 +609,12 @@ AcpiDmDumpIvrs ( | |
81 | */ | |
82 | if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiHid)) | |
83 | { | |
84 | - Status = AcpiDmDumpTable (Table->Length, EntryOffset, | |
85 | + Status = AcpiDmDumpTable (TableLength, EntryOffset, | |
86 | &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidInteger); | |
87 | } | |
88 | else | |
89 | { | |
90 | - Status = AcpiDmDumpTable (Table->Length, EntryOffset, | |
91 | + Status = AcpiDmDumpTable (TableLength, EntryOffset, | |
92 | &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidString); | |
93 | } | |
94 | if (ACPI_FAILURE (Status)) | |
95 | @@ -628,12 +632,12 @@ AcpiDmDumpIvrs ( | |
96 | */ | |
97 | if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiCid)) | |
98 | { | |
99 | - Status = AcpiDmDumpTable (Table->Length, EntryOffset, | |
100 | + Status = AcpiDmDumpTable (TableLength, EntryOffset, | |
101 | &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidInteger); | |
102 | } | |
103 | else | |
104 | { | |
105 | - Status = AcpiDmDumpTable (Table->Length, EntryOffset, | |
106 | + Status = AcpiDmDumpTable (TableLength, EntryOffset, | |
107 | &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidString); | |
108 | } | |
109 | if (ACPI_FAILURE (Status)) | |
110 | @@ -650,7 +654,7 @@ AcpiDmDumpIvrs ( | |
111 | ||
112 | if (HidSubtable->UidType == ACPI_IVRS_UID_IS_STRING) | |
113 | { | |
114 | - Status = AcpiDmDumpTable (Table->Length, EntryOffset, | |
115 | + Status = AcpiDmDumpTable (TableLength, EntryOffset, | |
116 | &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidString); | |
117 | if (ACPI_FAILURE (Status)) | |
118 | { | |
119 | @@ -659,7 +663,7 @@ AcpiDmDumpIvrs ( | |
120 | } | |
121 | else /* ACPI_IVRS_UID_IS_INTEGER */ | |
122 | { | |
123 | - Status = AcpiDmDumpTable (Table->Length, EntryOffset, | |
124 | + Status = AcpiDmDumpTable (TableLength, EntryOffset, | |
125 | &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidInteger); | |
126 | if (ACPI_FAILURE (Status)) | |
127 | { | |
128 | @@ -678,8 +682,8 @@ AcpiDmDumpIvrs ( | |
129 | NextSubtable: | |
130 | /* Point to next subtable */ | |
131 | ||
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); | |
136 | } | |
137 | } | |
138 |