]> git.pld-linux.org Git - packages/acpica.git/blame - 0011-Support-DBG2-table-in-a-big-endian-world.patch
- updated to 20220331 + current Fedora patch set; acpinames is gone
[packages/acpica.git] / 0011-Support-DBG2-table-in-a-big-endian-world.patch
CommitLineData
b643ab7e
JB
1From 2cb0b87a15682da4f19f707fa3ffece504f94b5a Mon Sep 17 00:00:00 2001
2From: Al Stone <ahs3@redhat.com>
3Date: Sat, 19 Sep 2020 13:37:38 -0600
4Subject: [PATCH 11/45] Support DBG2 table in a big-endian world
5
6Signed-off-by: Al Stone <ahs3@redhat.com>
7---
8 source/common/dmtbdump1.c | 37 ++++++++++++++++++--------------
9 source/compiler/dttable1.c | 43 ++++++++++++++++++++++++--------------
10 2 files changed, 48 insertions(+), 32 deletions(-)
11
12Index: acpica-unix2-20220331/source/common/dmtbdump1.c
13===================================================================
14--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
15+++ acpica-unix2-20220331/source/common/dmtbdump1.c
16@@ -669,7 +669,7 @@ AcpiDmDumpCsrt (
17 ACPI_CSRT_GROUP *Subtable;
18 ACPI_CSRT_SHARED_INFO *SharedInfoTable;
19 ACPI_CSRT_DESCRIPTOR *SubSubtable;
20- UINT32 Length = Table->Length;
21+ UINT32 Length = AcpiUtReadUint32 (&Table->Length);
22 UINT32 Offset = sizeof (ACPI_TABLE_CSRT);
23 UINT32 SubOffset;
24 UINT32 SubSubOffset;
25@@ -681,7 +681,7 @@ AcpiDmDumpCsrt (
26 /* Subtables (Resource Groups) */
27
28 Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
29- while (Offset < Table->Length)
30+ while (Offset < Length)
31 {
32 /* Resource group subtable */
33
34@@ -715,7 +715,7 @@ AcpiDmDumpCsrt (
35 Offset + SubOffset);
36
37 while ((SubOffset < Subtable->Length) &&
38- ((Offset + SubOffset) < Table->Length))
39+ ((Offset + SubOffset) < Length))
40 {
41 AcpiOsPrintf ("\n");
42 Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable,
43@@ -776,12 +776,13 @@ AcpiDmDumpDbg2 (
44 {
45 ACPI_STATUS Status;
46 ACPI_DBG2_DEVICE *Subtable;
47- UINT32 Length = Table->Length;
48+ UINT32 Length = AcpiUtReadUint32 (&Table->Length);
49 UINT32 Offset = sizeof (ACPI_TABLE_DBG2);
50 UINT32 i;
51 UINT32 ArrayOffset;
52 UINT32 AbsoluteOffset;
53 UINT8 *Array;
54+ UINT16 SubtableLength;
55
56
57 /* Main table */
58@@ -795,11 +796,12 @@ AcpiDmDumpDbg2 (
59 /* Subtables */
60
61 Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset);
62- while (Offset < Table->Length)
63+ while (Offset < Length)
64 {
65 AcpiOsPrintf ("\n");
66+ SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
67 Status = AcpiDmDumpTable (Length, Offset, Subtable,
68- Subtable->Length, AcpiDmTableInfoDbg2Device);
69+ SubtableLength, AcpiDmTableInfoDbg2Device);
70 if (ACPI_FAILURE (Status))
71 {
72 return;
73@@ -809,13 +811,13 @@ AcpiDmDumpDbg2 (
74
75 for (i = 0; i < Subtable->RegisterCount; i++)
76 {
77- ArrayOffset = Subtable->BaseAddressOffset +
78+ ArrayOffset = AcpiUtReadUint16 (&Subtable->BaseAddressOffset) +
79 (sizeof (ACPI_GENERIC_ADDRESS) * i);
80 AbsoluteOffset = Offset + ArrayOffset;
81 Array = (UINT8 *) Subtable + ArrayOffset;
82
83 Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
84- Subtable->Length, AcpiDmTableInfoDbg2Addr);
85+ SubtableLength, AcpiDmTableInfoDbg2Addr);
86 if (ACPI_FAILURE (Status))
87 {
88 return;
89@@ -826,13 +828,13 @@ AcpiDmDumpDbg2 (
90
91 for (i = 0; i < Subtable->RegisterCount; i++)
92 {
93- ArrayOffset = Subtable->AddressSizeOffset +
94+ ArrayOffset = AcpiUtReadUint16 (&Subtable->AddressSizeOffset) +
95 (sizeof (UINT32) * i);
96 AbsoluteOffset = Offset + ArrayOffset;
97 Array = (UINT8 *) Subtable + ArrayOffset;
98
99 Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
100- Subtable->Length, AcpiDmTableInfoDbg2Size);
101+ SubtableLength, AcpiDmTableInfoDbg2Size);
102 if (ACPI_FAILURE (Status))
103 {
104 return;
105@@ -842,12 +844,12 @@ AcpiDmDumpDbg2 (
106 /* Dump the Namestring (required) */
107
108 AcpiOsPrintf ("\n");
109- ArrayOffset = Subtable->NamepathOffset;
110+ ArrayOffset = AcpiUtReadUint16 (&Subtable->NamepathOffset);
111 AbsoluteOffset = Offset + ArrayOffset;
112 Array = (UINT8 *) Subtable + ArrayOffset;
113
114 Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
115- Subtable->Length, AcpiDmTableInfoDbg2Name);
116+ SubtableLength, AcpiDmTableInfoDbg2Name);
117 if (ACPI_FAILURE (Status))
118 {
119 return;
120@@ -857,8 +859,11 @@ AcpiDmDumpDbg2 (
121
122 if (Subtable->OemDataOffset)
123 {
124- Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset,
125- Table, Subtable->OemDataLength,
126+ Array = (UINT8 *) Subtable + AcpiUtReadUint16 (&Subtable->OemDataOffset);
127+
128+ Status = AcpiDmDumpTable (Length,
129+ Offset + AcpiUtReadUint16 (&Subtable->OemDataOffset),
130+ Array, AcpiUtReadUint16 (&Subtable->OemDataLength),
131 AcpiDmTableInfoDbg2OemData);
132 if (ACPI_FAILURE (Status))
133 {
134@@ -868,9 +873,9 @@ AcpiDmDumpDbg2 (
135
136 /* Point to next subtable */
137
138- Offset += Subtable->Length;
139+ Offset += SubtableLength;
140 Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Subtable,
141- Subtable->Length);
142+ SubtableLength);
143 }
144 }
145
146Index: acpica-unix2-20220331/source/compiler/dttable1.c
147===================================================================
148--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
149+++ acpica-unix2-20220331/source/compiler/dttable1.c
150@@ -718,6 +718,7 @@ DtCompileCsrt (
151 DT_FIELD **PFieldList = (DT_FIELD **) List;
152 UINT32 DescriptorCount;
153 UINT32 GroupLength;
154+ UINT32 Tmp;
155
156
157 /* Subtables (Resource Groups) */
158@@ -736,12 +737,13 @@ DtCompileCsrt (
159
160 /* Compute the number of resource descriptors */
161
162- GroupLength =
163- (ACPI_CAST_PTR (ACPI_CSRT_GROUP,
164- Subtable->Buffer))->Length -
165- (ACPI_CAST_PTR (ACPI_CSRT_GROUP,
166- Subtable->Buffer))->SharedInfoLength -
167- sizeof (ACPI_CSRT_GROUP);
168+ Tmp = AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
169+ Subtable->Buffer))->Length);
170+ GroupLength = Tmp;
171+ Tmp = AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
172+ Subtable->Buffer))->SharedInfoLength);
173+ GroupLength -= Tmp;
174+ GroupLength -= sizeof (ACPI_CSRT_GROUP);
175
176 DescriptorCount = (GroupLength /
177 sizeof (ACPI_CSRT_DESCRIPTOR));
178@@ -829,6 +831,7 @@ DtCompileDbg2 (
179 ACPI_DBG2_DEVICE *DeviceInfo;
180 UINT16 CurrentOffset;
181 UINT32 i;
182+ UINT32 Tmp;
183
184
185 /* Main table */
186@@ -845,10 +848,12 @@ DtCompileDbg2 (
187 /* Main table fields */
188
189 Dbg2Header = ACPI_CAST_PTR (ACPI_DBG2_HEADER, Subtable->Buffer);
190- Dbg2Header->InfoOffset = sizeof (ACPI_TABLE_HEADER) + ACPI_PTR_DIFF (
191- ACPI_ADD_PTR (UINT8, Dbg2Header, sizeof (ACPI_DBG2_HEADER)), Dbg2Header);
192+ Tmp = sizeof (ACPI_TABLE_HEADER) + ACPI_PTR_DIFF (
193+ ACPI_ADD_PTR (UINT8, Dbg2Header, sizeof (ACPI_DBG2_HEADER)), Dbg2Header);
194+ AcpiUtWriteUint (&Dbg2Header->InfoOffset, sizeof (UINT32),
195+ &Tmp, sizeof (UINT32));
196
197- SubtableCount = Dbg2Header->InfoCount;
198+ SubtableCount = Tmp;
199 DtPushSubtable (Subtable);
200
201 /* Process all Device Information subtables (Count = InfoCount) */
202@@ -875,7 +880,8 @@ DtCompileDbg2 (
203
204 /* BaseAddressRegister GAS array (Required, size is RegisterCount) */
205
206- DeviceInfo->BaseAddressOffset = CurrentOffset;
207+ AcpiUtWriteUint (&DeviceInfo->BaseAddressOffset, sizeof (UINT16),
208+ &CurrentOffset, sizeof (UINT16));
209 for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++)
210 {
211 Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Addr,
212@@ -891,7 +897,8 @@ DtCompileDbg2 (
213
214 /* AddressSize array (Required, size = RegisterCount) */
215
216- DeviceInfo->AddressSizeOffset = CurrentOffset;
217+ AcpiUtWriteUint (&DeviceInfo->AddressSizeOffset, sizeof (UINT16),
218+ &CurrentOffset, sizeof (UINT16));
219 for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++)
220 {
221 Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Size,
222@@ -907,7 +914,8 @@ DtCompileDbg2 (
223
224 /* NamespaceString device identifier (Required, size = NamePathLength) */
225
226- DeviceInfo->NamepathOffset = CurrentOffset;
227+ AcpiUtWriteUint (&DeviceInfo->NamepathOffset, sizeof (UINT16),
228+ &CurrentOffset, sizeof (UINT16));
229 Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Name,
230 &Subtable);
231 if (ACPI_FAILURE (Status))
232@@ -917,8 +925,9 @@ DtCompileDbg2 (
233
234 /* Update the device info header */
235
236- DeviceInfo->NamepathLength = (UINT16) Subtable->Length;
237- CurrentOffset += (UINT16) DeviceInfo->NamepathLength;
238+ AcpiUtWriteUint (&DeviceInfo->NamepathLength, sizeof (UINT16),
239+ &Subtable->Length, sizeof (UINT32));
240+ CurrentOffset += AcpiUtReadUint16 (&DeviceInfo->NamepathLength);
241 DtInsertSubtable (ParentTable, Subtable);
242
243 /* OemData - Variable-length data (Optional, size = OemDataLength) */
244@@ -945,8 +954,10 @@ DtCompileDbg2 (
245
246 if (Subtable && Subtable->Length)
247 {
248- DeviceInfo->OemDataOffset = CurrentOffset;
249- DeviceInfo->OemDataLength = (UINT16) Subtable->Length;
250+ AcpiUtWriteUint (&DeviceInfo->OemDataOffset, sizeof (UINT16),
251+ &CurrentOffset, sizeof (UINT16));
252+ AcpiUtWriteUint (&DeviceInfo->OemDataLength, sizeof (UINT16),
253+ &Subtable->Length, sizeof (UINT32));
254
255 DtInsertSubtable (ParentTable, Subtable);
256 }
This page took 0.544315 seconds and 4 git commands to generate.