]> git.pld-linux.org Git - packages/acpica.git/blob - 0011-Support-DBG2-table-in-a-big-endian-world.patch
- updated tests
[packages/acpica.git] / 0011-Support-DBG2-table-in-a-big-endian-world.patch
1 From 2cb0b87a15682da4f19f707fa3ffece504f94b5a Mon Sep 17 00:00:00 2001
2 From: Al Stone <ahs3@redhat.com>
3 Date: Sat, 19 Sep 2020 13:37:38 -0600
4 Subject: [PATCH 11/45] Support DBG2 table in a big-endian world
5
6 Signed-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
12 Index: 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  
146 Index: 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.03981 seconds and 3 git commands to generate.