]> git.pld-linux.org Git - packages/acpica.git/blame - 0046-Support-PHAT-in-a-big-endian-world.patch
- updated tests
[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
12Index: 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@@ -2029,39 +2029,41 @@ AcpiDmDumpPhat (
17 ACPI_PHAT_HEADER *Subtable;
18 ACPI_PHAT_VERSION_DATA *VersionData;
19 UINT32 RecordCount;
20- UINT32 Length = Table->Length;
21+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
22 UINT32 Offset = sizeof (ACPI_TABLE_PHAT);
23- UINT32 SubtableLength;
24+ UINT16 SubtableLength;
25 UINT32 PathLength;
26 UINT32 VendorLength;
27+ UINT16 SubtableType;
28
29
30 Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Table, sizeof (ACPI_TABLE_PHAT));
31
32- while (Offset < Table->Length)
33+ while (Offset < TableLength)
34 {
35 /* Common subtable header */
36
37+ SubtableType = AcpiUtReadUint16 (&Subtable->Type);
38+ SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
39+
40 AcpiOsPrintf ("\n");
41- Status = AcpiDmDumpTable (Length, 0, Subtable,
42+ Status = AcpiDmDumpTable (TableLength, 0, Subtable,
43 sizeof (ACPI_PHAT_HEADER), AcpiDmTableInfoPhatHdr);
44 if (ACPI_FAILURE (Status))
45 {
46 return;
47 }
48
49- switch (Subtable->Type)
50+ switch (SubtableType)
51 {
52 case ACPI_PHAT_TYPE_FW_VERSION_DATA:
53
54 InfoTable = AcpiDmTableInfoPhat0;
55- SubtableLength = sizeof (ACPI_PHAT_VERSION_DATA);
56 break;
57
58 case ACPI_PHAT_TYPE_FW_HEALTH_DATA:
59
60 InfoTable = AcpiDmTableInfoPhat1;
61- SubtableLength = sizeof (ACPI_PHAT_HEALTH_DATA);
62 break;
63
64 default:
65@@ -2072,22 +2074,22 @@ AcpiDmDumpPhat (
66 return;
67 }
68
69- Status = AcpiDmDumpTable (Length, 0, Subtable,
70+ Status = AcpiDmDumpTable (TableLength, 0, Subtable,
71 SubtableLength, InfoTable);
72 if (ACPI_FAILURE (Status))
73 {
74 return;
75 }
76
77- switch (Subtable->Type)
78+ switch (SubtableType)
79 {
80 case ACPI_PHAT_TYPE_FW_VERSION_DATA:
81
82 VersionData = ACPI_CAST_PTR (ACPI_PHAT_VERSION_DATA, Subtable);
83- RecordCount = VersionData->ElementCount;
84+ RecordCount = AcpiUtReadUint32 (&VersionData->ElementCount);
85 while (RecordCount)
86 {
87- Status = AcpiDmDumpTable (Length, Offset,
88+ Status = AcpiDmDumpTable (TableLength, Offset,
89 ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_VERSION_DATA)),
90 sizeof (ACPI_PHAT_VERSION_ELEMENT), AcpiDmTableInfoPhat0a);
91 if (ACPI_FAILURE (Status))
92@@ -2105,7 +2107,7 @@ AcpiDmDumpPhat (
93 /* account for the null terminator */
94
95 PathLength = strlen (ACPI_ADD_PTR (char, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA))) + 1;
96- Status = AcpiDmDumpTable (Length, Offset,
97+ Status = AcpiDmDumpTable (TableLength, Offset,
98 ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA)),
99 PathLength, AcpiDmTableInfoPhat1a);
100 if (ACPI_FAILURE (Status))
101@@ -2116,8 +2118,8 @@ AcpiDmDumpPhat (
102 /* Get vendor data - data length is the remaining subtable length */
103
104 VendorLength =
105- Subtable->Length - sizeof (ACPI_PHAT_HEALTH_DATA) - PathLength;
106- Status = AcpiDmDumpTable (Length, 0,
107+ SubtableLength - sizeof (ACPI_PHAT_HEALTH_DATA) - PathLength;
108+ Status = AcpiDmDumpTable (TableLength, 0,
109 ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA) + PathLength),
110 VendorLength, AcpiDmTableInfoPhat1b);
111 if (ACPI_FAILURE (Status))
112@@ -2129,15 +2131,15 @@ AcpiDmDumpPhat (
113 default:
114
115 AcpiOsPrintf ("\n**** Unknown PHAT subtable type 0x%X\n\n",
116- Subtable->Type);
117+ SubtableType);
118 return;
119 }
120
121 /* Next subtable */
122
123- Offset += Subtable->Length;
124+ Offset += SubtableLength;
125 Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable,
126- Subtable->Length);
127+ SubtableLength);
128 }
129 }
130
131Index: acpica-unix2-20220331/source/compiler/dttable2.c
132===================================================================
133--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
134+++ acpica-unix2-20220331/source/compiler/dttable2.c
135@@ -1267,6 +1267,8 @@ DtCompilePhat (
136 ACPI_DMTABLE_INFO *Info;
137 ACPI_PHAT_VERSION_DATA *VersionData;
138 UINT32 RecordCount;
139+ UINT16 SubtableType;
140+ UINT16 Tmp16;
141
142
143 /* The table consist of subtables */
144@@ -1284,8 +1286,9 @@ DtCompilePhat (
145 DtPushSubtable (Subtable);
146
147 PhatHeader = ACPI_CAST_PTR (ACPI_PHAT_HEADER, Subtable->Buffer);
148+ SubtableType = AcpiUtReadUint16 (&PhatHeader->Type);
149
150- switch (PhatHeader->Type)
151+ switch (SubtableType)
152 {
153 case ACPI_PHAT_TYPE_FW_VERSION_DATA:
154
155@@ -1316,13 +1319,13 @@ DtCompilePhat (
156 ParentTable = DtPeekSubtable ();
157 DtInsertSubtable (ParentTable, Subtable);
158
159- switch (PhatHeader->Type)
160+ switch (SubtableType)
161 {
162 case ACPI_PHAT_TYPE_FW_VERSION_DATA:
163
164 VersionData = ACPI_CAST_PTR (ACPI_PHAT_VERSION_DATA,
165 (Subtable->Buffer - sizeof (ACPI_PHAT_HEADER)));
166- RecordCount = VersionData->ElementCount;
167+ RecordCount = AcpiUtReadUint32 (&VersionData->ElementCount);
168
169 while (RecordCount)
170 {
171@@ -1373,6 +1376,9 @@ DtCompilePhat (
172 DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, *PFieldList, "PHAT");
173 return (AE_ERROR);
174 }
175+
176+ Tmp16 = AcpiUtReadUint16 (&PhatHeader->Length);
177+ PhatHeader->Length = Tmp16;
178 }
179
180 return (Status);
This page took 0.084374 seconds and 4 git commands to generate.