1 From 3d1ac6e76ad0c0d6454671b190ccbbfafb0cb4cc Mon Sep 17 00:00:00 2001
2 From: Al Stone <ahs3@redhat.com>
3 Date: Tue, 29 Jun 2021 16:03:36 -0600
4 Subject: [PATCH 27/45] Support SDEV in a big-endian world
6 Signed-off-by: Al Stone <ahs3@redhat.com>
8 source/common/dmtbdump2.c | 48 +++++++++++++++++++++-----------------
9 source/compiler/dttable2.c | 27 ++++++++++++++++++++-
10 2 files changed, 52 insertions(+), 23 deletions(-)
12 Index: acpica-unix2-20220331/source/common/dmtbdump2.c
13 ===================================================================
14 --- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
15 +++ acpica-unix2-20220331/source/common/dmtbdump2.c
16 @@ -2581,7 +2581,7 @@ AcpiDmDumpSdev (
17 ACPI_SDEV_NAMESPACE *Namesp;
18 ACPI_DMTABLE_INFO *InfoTable;
19 ACPI_DMTABLE_INFO *SecureComponentInfoTable;
20 - UINT32 Length = Table->Length;
21 + UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
22 UINT32 Offset = sizeof (ACPI_TABLE_SDEV);
25 @@ -2589,11 +2589,12 @@ AcpiDmDumpSdev (
26 UINT16 VendorDataLength;
27 ACPI_SDEV_SECURE_COMPONENT *SecureComponent = NULL;
28 UINT32 CurrentOffset = 0;
29 + UINT16 SubtableLength;
34 - Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSdev);
35 + Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoSdev);
36 if (ACPI_FAILURE (Status))
39 @@ -2602,13 +2603,14 @@ AcpiDmDumpSdev (
42 Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Table, Offset);
43 - while (Offset < Table->Length)
44 + while (Offset < TableLength)
46 /* Common subtable header */
49 - Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
50 - Subtable->Length, AcpiDmTableInfoSdevHdr);
51 + SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
52 + Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
53 + SubtableLength, AcpiDmTableInfoSdevHdr);
54 if (ACPI_FAILURE (Status))
57 @@ -2631,8 +2633,8 @@ AcpiDmDumpSdev (
61 - Status = AcpiDmDumpTable (Table->Length, 0, Subtable,
62 - Subtable->Length, InfoTable);
63 + Status = AcpiDmDumpTable (TableLength, 0, Subtable,
64 + SubtableLength, InfoTable);
65 if (ACPI_FAILURE (Status))
68 @@ -2691,12 +2693,12 @@ AcpiDmDumpSdev (
69 /* Dump the PCIe device ID(s) */
71 Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable);
72 - PathOffset = Namesp->DeviceIdOffset;
73 - PathLength = Namesp->DeviceIdLength;
74 + PathOffset = AcpiUtReadUint16 (&Namesp->DeviceIdOffset);
75 + PathLength = AcpiUtReadUint16 (&Namesp->DeviceIdLength);
79 - Status = AcpiDmDumpTable (Table->Length, CurrentOffset,
80 + Status = AcpiDmDumpTable (TableLength, CurrentOffset,
81 ACPI_ADD_PTR (UINT8, Namesp, PathOffset),
82 PathLength, AcpiDmTableInfoSdev0a);
83 if (ACPI_FAILURE (Status))
84 @@ -2708,14 +2710,14 @@ AcpiDmDumpSdev (
86 /* Dump the vendor-specific data */
89 - Namesp->VendorDataLength;
90 + VendorDataLength = AcpiUtReadUint16 (&Namesp->VendorDataLength);
92 - Namesp->DeviceIdOffset + Namesp->DeviceIdLength;
93 + AcpiUtReadUint16 (&Namesp->DeviceIdOffset) +
94 + AcpiUtReadUint16 (&Namesp->DeviceIdLength);
98 - Status = AcpiDmDumpTable (Table->Length, 0,
99 + Status = AcpiDmDumpTable (TableLength, 0,
100 ACPI_ADD_PTR (UINT8, Namesp, VendorDataOffset),
101 VendorDataLength, AcpiDmTableInfoSdev1b);
102 if (ACPI_FAILURE (Status))
103 @@ -2730,12 +2732,12 @@ AcpiDmDumpSdev (
104 /* PCI path substructures */
106 Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable);
107 - PathOffset = Pcie->PathOffset;
108 - PathLength = Pcie->PathLength;
109 + PathOffset = AcpiUtReadUint16 (&Pcie->PathOffset);
110 + PathLength = AcpiUtReadUint16 (&Pcie->PathLength);
114 - Status = AcpiDmDumpTable (Table->Length,
115 + Status = AcpiDmDumpTable (TableLength,
117 ACPI_ADD_PTR (UINT8, Pcie, PathOffset),
118 sizeof (ACPI_SDEV_PCIE_PATH), AcpiDmTableInfoSdev1a);
119 @@ -2750,12 +2752,14 @@ AcpiDmDumpSdev (
123 - VendorDataLength = Pcie->VendorDataLength;
124 - VendorDataOffset = Pcie->PathOffset + Pcie->PathLength;
125 + VendorDataLength = AcpiUtReadUint16 (&Pcie->VendorDataLength);
127 + AcpiUtReadUint16 (&Pcie->PathOffset) +
128 + AcpiUtReadUint16 (&Pcie->PathLength);
130 if (VendorDataLength)
132 - Status = AcpiDmDumpTable (Table->Length, 0,
133 + Status = AcpiDmDumpTable (TableLength, 0,
134 ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset),
135 VendorDataLength, AcpiDmTableInfoSdev1b);
136 if (ACPI_FAILURE (Status))
137 @@ -2772,8 +2776,8 @@ AcpiDmDumpSdev (
139 /* Point to next subtable */
141 - Offset += Subtable->Length;
142 + Offset += SubtableLength;
143 Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Subtable,
148 Index: acpica-unix2-20220331/source/compiler/dttable2.c
149 ===================================================================
150 --- acpica-unix2-20220331.orig/source/compiler/dttable2.c
151 +++ acpica-unix2-20220331/source/compiler/dttable2.c
152 @@ -1890,6 +1890,7 @@ DtCompileSdev (
154 ACPI_SDEV_SECURE_COMPONENT *SecureComponent = NULL;
155 UINT16 ComponentLength = 0;
160 @@ -1911,7 +1912,7 @@ DtCompileSdev (
161 DtPushSubtable (Subtable);
163 SdevHeader = ACPI_CAST_PTR (ACPI_SDEV_HEADER, Subtable->Buffer);
164 - SdevHeader->Length = (UINT8)(sizeof (ACPI_SDEV_HEADER));
165 + SdevHeader->Length = (UINT16) (sizeof (ACPI_SDEV_HEADER));
167 switch (SdevHeader->Type)
169 @@ -2084,6 +2085,18 @@ DtCompileSdev (
173 + /* Make sure everything is now little-endian */
174 + Tmp16 = AcpiUtReadUint16 (&SdevHeader->Length);
175 + SdevHeader->Length = Tmp16;
176 + Tmp16 = AcpiUtReadUint16 (&Namesp->DeviceIdOffset);
177 + Namesp->DeviceIdOffset = Tmp16;
178 + Tmp16 = AcpiUtReadUint16 (&Namesp->DeviceIdLength);
179 + Namesp->DeviceIdLength = Tmp16;
180 + Tmp16 = AcpiUtReadUint16 (&Namesp->VendorDataOffset);
181 + Namesp->VendorDataOffset = Tmp16;
182 + Tmp16 = AcpiUtReadUint16 (&Namesp->VendorDataLength);
183 + Namesp->VendorDataLength = Tmp16;
187 case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
188 @@ -2146,6 +2159,18 @@ DtCompileSdev (
190 sizeof (ACPI_SDEV_PCIE) +
191 Pcie->PathLength + Pcie->VendorDataLength;
193 + Tmp16 = AcpiUtReadUint16 (&SdevHeader->Length);
194 + SdevHeader->Length = Tmp16;
195 + Tmp16 = AcpiUtReadUint16 (&Pcie->PathOffset);
196 + Pcie->PathOffset = Tmp16;
197 + Tmp16 = AcpiUtReadUint16 (&Pcie->PathLength);
198 + Pcie->PathLength = Tmp16;
199 + Tmp16 = AcpiUtReadUint16 (&Pcie->VendorDataOffset);
200 + Pcie->VendorDataOffset = Tmp16;
201 + Tmp16 = AcpiUtReadUint16 (&Pcie->VendorDataLength);
202 + Pcie->VendorDataLength = Tmp16;