]> git.pld-linux.org Git - packages/acpica.git/blame - 0046-Support-PHAT-in-a-big-endian-world.patch
- initial update to 20221020
[packages/acpica.git] / 0046-Support-PHAT-in-a-big-endian-world.patch
CommitLineData
b643ab7e
JB
1From 5fd729c8f6c4ce295edd142fc41e03e831ba4afb Mon Sep 17 00:00:00 2001
2From: Al Stone <ahs3@redhat.com>
3Date: Mon, 12 Jul 2021 09:39:38 -0600
4Subject: [PATCH] Support PHAT in a big-endian world
5
6Signed-off-by: Al Stone <ahs3@redhat.com>
7---
8 source/common/dmtbdump2.c | 36 ++++++++++++++++++++----------------
9 source/compiler/dttable2.c | 12 +++++++++---
10 2 files changed, 29 insertions(+), 19 deletions(-)
11
e0da2c9b
JB
12--- acpica-unix2-20221020/source/common/dmtbdump2.c.orig 2023-07-01 21:55:10.515514255 +0200
13+++ acpica-unix2-20221020/source/common/dmtbdump2.c 2023-07-02 08:00:29.075426396 +0200
14@@ -2029,25 +2029,30 @@ AcpiDmDumpPhat (
15 ACPI_DMTABLE_INFO *InfoTable;
b643ab7e
JB
16 ACPI_PHAT_HEADER *Subtable;
17 ACPI_PHAT_VERSION_DATA *VersionData;
e0da2c9b 18+ UINT32 VersionDataHeaderLength;
b643ab7e
JB
19 UINT32 RecordCount;
20- UINT32 Length = Table->Length;
21+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
22 UINT32 Offset = sizeof (ACPI_TABLE_PHAT);
e0da2c9b 23 UINT32 OriginalOffset;
b643ab7e
JB
24- UINT32 SubtableLength;
25+ UINT16 SubtableLength;
26 UINT32 PathLength;
27 UINT32 VendorLength;
e0da2c9b 28 UINT16 RecordType;
b643ab7e 29+ UINT16 SubtableType;
e0da2c9b 30 const wchar_t *WideString;
b643ab7e
JB
31
32
33 Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Table, sizeof (ACPI_TABLE_PHAT));
34
35- while (Offset < Table->Length)
36+ while (Offset < TableLength)
37 {
38 /* Common subtable header */
39
40+ SubtableType = AcpiUtReadUint16 (&Subtable->Type);
41+ SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
42+
43 AcpiOsPrintf ("\n");
e0da2c9b
JB
44- Status = AcpiDmDumpTable (Length, Offset, Subtable,
45+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
b643ab7e
JB
46 sizeof (ACPI_PHAT_HEADER), AcpiDmTableInfoPhatHdr);
47 if (ACPI_FAILURE (Status))
48 {
e0da2c9b
JB
49@@ -2057,29 +2062,29 @@ AcpiDmDumpPhat (
50 DbgPrint (ASL_DEBUG_OUTPUT, "\n/* %u, Subtable->Type %X */\n",
51 __LINE__, Subtable->Type);
b643ab7e
JB
52
53- switch (Subtable->Type)
54+ switch (SubtableType)
55 {
56 case ACPI_PHAT_TYPE_FW_VERSION_DATA:
57
58 InfoTable = AcpiDmTableInfoPhat0;
e0da2c9b
JB
59- SubtableLength = Offset += sizeof (ACPI_PHAT_VERSION_DATA);
60+ Offset += sizeof (ACPI_PHAT_VERSION_DATA);
b643ab7e
JB
61 break;
62
63 case ACPI_PHAT_TYPE_FW_HEALTH_DATA:
64
65 InfoTable = AcpiDmTableInfoPhat1;
e0da2c9b
JB
66- SubtableLength = Offset += sizeof (ACPI_PHAT_TYPE_FW_HEALTH_DATA);
67+ Offset += sizeof (ACPI_PHAT_TYPE_FW_HEALTH_DATA);
b643ab7e
JB
68 break;
69
70 default:
e0da2c9b
JB
71
72 DbgPrint (ASL_DEBUG_OUTPUT, "\n**** Unknown PHAT subtable type 0x%X\n\n",
73- Subtable->Type);
74+ SubtableType);
75
b643ab7e
JB
76 return;
77 }
78
e0da2c9b
JB
79- Status = AcpiDmDumpTable (Length, SubtableLength, Subtable,
80+ Status = AcpiDmDumpTable (TableLength, SubtableLength, Subtable,
b643ab7e
JB
81 SubtableLength, InfoTable);
82 if (ACPI_FAILURE (Status))
83 {
e0da2c9b 84@@ -2087,25 +2092,26 @@ AcpiDmDumpPhat (
b643ab7e
JB
85 }
86
e0da2c9b 87 OriginalOffset = Offset;
b643ab7e
JB
88- switch (Subtable->Type)
89+ switch (SubtableType)
90 {
91 case ACPI_PHAT_TYPE_FW_VERSION_DATA:
92
93 VersionData = ACPI_CAST_PTR (ACPI_PHAT_VERSION_DATA, Subtable);
94- RecordCount = VersionData->ElementCount;
95+ RecordCount = AcpiUtReadUint32 (&VersionData->ElementCount);
e0da2c9b
JB
96 RecordType = *ACPI_CAST_PTR (UINT8, Subtable);
97+ VersionDataHeaderLength = AcpiUtReadUint32 (&(VersionData->Header.Length));
98
99 /*
100 * Skip past a zero-valued block (not part of the ACPI PHAT specification).
101 * First, check for a zero length record and a zero element count
102 */
103- if (!VersionData->Header.Length && !VersionData->ElementCount)
104+ if (!VersionDataHeaderLength && !RecordCount)
b643ab7e 105 {
e0da2c9b
JB
106 while (RecordType == 0)
107 {
108 Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Table, Offset);
109 RecordType = *ACPI_CAST_PTR (UINT8, Subtable);
110- RecordCount = VersionData->ElementCount;
111+ RecordCount = AcpiUtReadUint32 (&VersionData->ElementCount);
112 Offset += 1;
113 }
114
115@@ -2120,13 +2126,13 @@ AcpiDmDumpPhat (
116
117 /* Emit each of the version elements */
118
119- while (RecordCount && VersionData->Header.Length)
120+ while (RecordCount && VersionDataHeaderLength)
121 {
122 AcpiOsPrintf ("\n/* Version Element #%Xh Offset %Xh */\n\n",
123 VersionData->ElementCount - RecordCount + 1, Offset);
124
125 Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Table, Offset);
126- Status = AcpiDmDumpTable (Length, Offset, Subtable,
127+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
b643ab7e
JB
128 sizeof (ACPI_PHAT_VERSION_ELEMENT), AcpiDmTableInfoPhat0a);
129 if (ACPI_FAILURE (Status))
e0da2c9b
JB
130 {
131@@ -2150,9 +2156,9 @@ AcpiDmDumpPhat (
132
133 PathLength = (wcslen (WideString) * 2) + 2;
134 DbgPrint (ASL_DEBUG_OUTPUT, "/* %u, PathLength %X, Offset %X, Table->Length %X */\n",
135- __LINE__, PathLength, Offset, Length);
136+ __LINE__, PathLength, Offset, TableLength);
b643ab7e 137
b643ab7e
JB
138- Status = AcpiDmDumpTable (Length, Offset,
139+ Status = AcpiDmDumpTable (TableLength, Offset,
140 ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA)),
141 PathLength, AcpiDmTableInfoPhat1a);
e0da2c9b
JB
142 Offset += PathLength;
143@@ -2164,15 +2170,15 @@ AcpiDmDumpPhat (
144 /* Get Device-Specific Data - length of which is the remaining subtable length. */
b643ab7e
JB
145
146 VendorLength =
147- Subtable->Length - sizeof (ACPI_PHAT_HEALTH_DATA) - PathLength;
b643ab7e 148+ SubtableLength - sizeof (ACPI_PHAT_HEALTH_DATA) - PathLength;
e0da2c9b
JB
149 DbgPrint (ASL_DEBUG_OUTPUT, "%u, Subtable->Length %X, VendorLength %X, Offset %X PathLength: %X\n",
150- __LINE__, Subtable->Length, VendorLength, Offset, PathLength);
151+ __LINE__, SubtableLength, VendorLength, Offset, PathLength);
152
153 if (VendorLength)
154 {
155 /* Point past the Device Path, Compile the Device-Specific Data */
156
157- Status = AcpiDmDumpTable (Length, Offset,
158+ Status = AcpiDmDumpTable (TableLength, Offset,
159 ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA) + PathLength),
160 VendorLength, AcpiDmTableInfoPhat1b);
161 if (ACPI_FAILURE (Status))
162@@ -2192,7 +2198,7 @@ AcpiDmDumpPhat (
b643ab7e
JB
163 default:
164
165 AcpiOsPrintf ("\n**** Unknown PHAT subtable type 0x%X\n\n",
166- Subtable->Type);
167+ SubtableType);
168 return;
169 }
170
e0da2c9b
JB
171@@ -2200,7 +2206,7 @@ AcpiDmDumpPhat (
172
173 DbgPrint (ASL_DEBUG_OUTPUT, "/* %u, Bottom of main loop: Offset %X, "
174 "Subtable->Length %X, Table->Length %X */\n",
175- __LINE__, Offset, Subtable->Length, Table->Length);
176+ __LINE__, Offset, SubtableLength, TableLength);
177
178 Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Table,
179 Offset);
180--- acpica-unix2-20221020/source/compiler/dttable2.c.orig 2023-07-02 08:01:19.868484559 +0200
181+++ acpica-unix2-20221020/source/compiler/dttable2.c 2023-07-02 08:06:56.953325081 +0200
182@@ -1278,6 +1278,8 @@ DtCompilePhat (
183 UINT32 TableOffset = 0;
184 UINT32 DataOffsetValue;
185 UINT32 i;
b643ab7e
JB
186+ UINT16 SubtableType;
187+ UINT16 Tmp16;
188
189
e0da2c9b
JB
190 /* The table consists of subtables */
191@@ -1300,8 +1302,9 @@ DtCompilePhat (
b643ab7e
JB
192 DtPushSubtable (Subtable);
193
194 PhatHeader = ACPI_CAST_PTR (ACPI_PHAT_HEADER, Subtable->Buffer);
195+ SubtableType = AcpiUtReadUint16 (&PhatHeader->Type);
196
197- switch (PhatHeader->Type)
198+ switch (SubtableType)
199 {
200 case ACPI_PHAT_TYPE_FW_VERSION_DATA:
201
e0da2c9b 202@@ -1389,13 +1392,13 @@ DtCompilePhat (
b643ab7e
JB
203 ParentTable = DtPeekSubtable ();
204 DtInsertSubtable (ParentTable, Subtable);
205
206- switch (PhatHeader->Type)
207+ switch (SubtableType)
208 {
209 case ACPI_PHAT_TYPE_FW_VERSION_DATA:
210
211 VersionData = ACPI_CAST_PTR (ACPI_PHAT_VERSION_DATA,
212 (Subtable->Buffer - sizeof (ACPI_PHAT_HEADER)));
213- RecordCount = VersionData->ElementCount;
214+ RecordCount = AcpiUtReadUint32 (&VersionData->ElementCount);
215
e0da2c9b
JB
216 /* Compile all of the Version Elements */
217
218@@ -1498,6 +1501,9 @@ DtCompilePhat (
b643ab7e
JB
219 DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, *PFieldList, "PHAT");
220 return (AE_ERROR);
221 }
222+
223+ Tmp16 = AcpiUtReadUint16 (&PhatHeader->Length);
224+ PhatHeader->Length = Tmp16;
225 }
226
227 return (Status);
This page took 0.077648 seconds and 4 git commands to generate.