]> git.pld-linux.org Git - packages/acpica.git/blob - 0046-Support-PHAT-in-a-big-endian-world.patch
9a22b3bc95eeb9b6ef8a4461e22e0a8868a62c6b
[packages/acpica.git] / 0046-Support-PHAT-in-a-big-endian-world.patch
1 From 5fd729c8f6c4ce295edd142fc41e03e831ba4afb Mon Sep 17 00:00:00 2001
2 From: Al Stone <ahs3@redhat.com>
3 Date: Mon, 12 Jul 2021 09:39:38 -0600
4 Subject: [PATCH] Support PHAT in a big-endian world
5
6 Signed-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
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 @@ -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  
131 Index: 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.071762 seconds and 2 git commands to generate.