]> git.pld-linux.org Git - packages/acpica.git/blob - 0027-Support-SDEV-in-a-big-endian-world.patch
680961eddc303743aeab117bad3faec846b372f4
[packages/acpica.git] / 0027-Support-SDEV-in-a-big-endian-world.patch
1 From 3d1ac6e76ad0c0d6454671b190ccbbfafb0cb4cc Mon Sep 17 00:00:00 2001
2 From: Al Stone <ahs3@redhat.com>
3 Date: Tue, 29 Jun 2021 16:03:36 -0600
4 Subject: [PATCH 27/45] Support SDEV in a big-endian world
5
6 Signed-off-by: Al Stone <ahs3@redhat.com>
7 ---
8  source/common/dmtbdump2.c  | 48 +++++++++++++++++++++-----------------
9  source/compiler/dttable2.c | 27 ++++++++++++++++++++-
10  2 files changed, 52 insertions(+), 23 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 @@ -2581,7 +2581,7 @@ AcpiDmDumpSdev (
17      ACPI_SDEV_NAMESPACE         *Namesp;
18      ACPI_DMTABLE_INFO           *InfoTable;
19      ACPI_DMTABLE_INFO           *SecureComponentInfoTable;
20 -    UINT32                      Length = Table->Length;
21 +    UINT32                      TableLength = AcpiUtReadUint32 (&Table->Length);
22      UINT32                      Offset = sizeof (ACPI_TABLE_SDEV);
23      UINT16                      PathOffset;
24      UINT16                      PathLength;
25 @@ -2589,11 +2589,12 @@ AcpiDmDumpSdev (
26      UINT16                      VendorDataLength;
27      ACPI_SDEV_SECURE_COMPONENT  *SecureComponent = NULL;
28      UINT32                      CurrentOffset = 0;
29 +    UINT16                      SubtableLength;
30  
31  
32      /* Main table */
33  
34 -    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSdev);
35 +    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoSdev);
36      if (ACPI_FAILURE (Status))
37      {
38          return;
39 @@ -2602,13 +2603,14 @@ AcpiDmDumpSdev (
40      /* Subtables */
41  
42      Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Table, Offset);
43 -    while (Offset < Table->Length)
44 +    while (Offset < TableLength)
45      {
46          /* Common subtable header */
47  
48          AcpiOsPrintf ("\n");
49 -        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
50 -            Subtable->Length, AcpiDmTableInfoSdevHdr);
51 +       SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
52 +        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
53 +            SubtableLength, AcpiDmTableInfoSdevHdr);
54          if (ACPI_FAILURE (Status))
55          {
56              return;
57 @@ -2631,8 +2633,8 @@ AcpiDmDumpSdev (
58          }
59  
60          AcpiOsPrintf ("\n");
61 -        Status = AcpiDmDumpTable (Table->Length, 0, Subtable,
62 -            Subtable->Length, InfoTable);
63 +        Status = AcpiDmDumpTable (TableLength, 0, Subtable,
64 +            SubtableLength, InfoTable);
65          if (ACPI_FAILURE (Status))
66          {
67              return;
68 @@ -2691,12 +2693,12 @@ AcpiDmDumpSdev (
69              /* Dump the PCIe device ID(s) */
70  
71              Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable);
72 -            PathOffset = Namesp->DeviceIdOffset;
73 -            PathLength = Namesp->DeviceIdLength;
74 +            PathOffset = AcpiUtReadUint16 (&Namesp->DeviceIdOffset);
75 +            PathLength = AcpiUtReadUint16 (&Namesp->DeviceIdLength);
76  
77              if (PathLength)
78              {
79 -                Status = AcpiDmDumpTable (Table->Length, CurrentOffset,
80 +                Status = AcpiDmDumpTable (TableLength, CurrentOffset,
81                      ACPI_ADD_PTR (UINT8, Namesp, PathOffset),
82                      PathLength, AcpiDmTableInfoSdev0a);
83                  if (ACPI_FAILURE (Status))
84 @@ -2708,14 +2710,14 @@ AcpiDmDumpSdev (
85  
86              /* Dump the vendor-specific data */
87  
88 -            VendorDataLength =
89 -                Namesp->VendorDataLength;
90 +            VendorDataLength = AcpiUtReadUint16 (&Namesp->VendorDataLength);
91              VendorDataOffset =
92 -                Namesp->DeviceIdOffset + Namesp->DeviceIdLength;
93 +                AcpiUtReadUint16 (&Namesp->DeviceIdOffset) +
94 +               AcpiUtReadUint16 (&Namesp->DeviceIdLength);
95  
96              if (VendorDataLength)
97              {
98 -                Status = AcpiDmDumpTable (Table->Length, 0,
99 +                Status = AcpiDmDumpTable (TableLength, 0,
100                      ACPI_ADD_PTR (UINT8, Namesp, VendorDataOffset),
101                      VendorDataLength, AcpiDmTableInfoSdev1b);
102                  if (ACPI_FAILURE (Status))
103 @@ -2730,12 +2732,12 @@ AcpiDmDumpSdev (
104              /* PCI path substructures */
105  
106              Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable);
107 -            PathOffset = Pcie->PathOffset;
108 -            PathLength = Pcie->PathLength;
109 +            PathOffset = AcpiUtReadUint16 (&Pcie->PathOffset);
110 +            PathLength = AcpiUtReadUint16 (&Pcie->PathLength);
111  
112              while (PathLength)
113              {
114 -                Status = AcpiDmDumpTable (Table->Length,
115 +                Status = AcpiDmDumpTable (TableLength,
116                      PathOffset + Offset,
117                      ACPI_ADD_PTR (UINT8, Pcie, PathOffset),
118                      sizeof (ACPI_SDEV_PCIE_PATH), AcpiDmTableInfoSdev1a);
119 @@ -2750,12 +2752,14 @@ AcpiDmDumpSdev (
120  
121              /* VendorData */
122  
123 -            VendorDataLength = Pcie->VendorDataLength;
124 -            VendorDataOffset = Pcie->PathOffset + Pcie->PathLength;
125 +            VendorDataLength = AcpiUtReadUint16 (&Pcie->VendorDataLength);
126 +            VendorDataOffset = 
127 +                   AcpiUtReadUint16 (&Pcie->PathOffset) +
128 +                   AcpiUtReadUint16 (&Pcie->PathLength);
129  
130              if (VendorDataLength)
131              {
132 -                Status = AcpiDmDumpTable (Table->Length, 0,
133 +                Status = AcpiDmDumpTable (TableLength, 0,
134                      ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset),
135                      VendorDataLength, AcpiDmTableInfoSdev1b);
136                  if (ACPI_FAILURE (Status))
137 @@ -2772,8 +2776,8 @@ AcpiDmDumpSdev (
138  NextSubtable:
139          /* Point to next subtable */
140  
141 -        Offset += Subtable->Length;
142 +        Offset += SubtableLength;
143          Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Subtable,
144 -            Subtable->Length);
145 +            SubtableLength);
146      }
147  }
148 Index: acpica-unix2-20220331/source/compiler/dttable2.c
149 ===================================================================
150 --- acpica-unix2-20220331.orig/source/compiler/dttable2.c
151 +++ acpica-unix2-20220331/source/compiler/dttable2.c
152 @@ -1890,6 +1890,7 @@ DtCompileSdev (
153      UINT32                      EntryCount;
154      ACPI_SDEV_SECURE_COMPONENT  *SecureComponent = NULL;
155      UINT16                      ComponentLength = 0;
156 +    UINT16                      Tmp16;
157  
158  
159      /* Subtables */
160 @@ -1911,7 +1912,7 @@ DtCompileSdev (
161          DtPushSubtable (Subtable);
162  
163          SdevHeader = ACPI_CAST_PTR (ACPI_SDEV_HEADER, Subtable->Buffer);
164 -        SdevHeader->Length = (UINT8)(sizeof (ACPI_SDEV_HEADER));
165 +        SdevHeader->Length = (UINT16) (sizeof (ACPI_SDEV_HEADER));
166  
167          switch (SdevHeader->Type)
168          {
169 @@ -2084,6 +2085,18 @@ DtCompileSdev (
170                  }
171              }
172  
173 +            /* Make sure everything is now little-endian */
174 +            Tmp16 = AcpiUtReadUint16 (&SdevHeader->Length);
175 +            SdevHeader->Length = Tmp16;
176 +            Tmp16 = AcpiUtReadUint16 (&Namesp->DeviceIdOffset);
177 +            Namesp->DeviceIdOffset = Tmp16;
178 +            Tmp16 = AcpiUtReadUint16 (&Namesp->DeviceIdLength);
179 +            Namesp->DeviceIdLength = Tmp16;
180 +            Tmp16 = AcpiUtReadUint16 (&Namesp->VendorDataOffset);
181 +            Namesp->VendorDataOffset = Tmp16;
182 +            Tmp16 = AcpiUtReadUint16 (&Namesp->VendorDataLength);
183 +            Namesp->VendorDataLength = Tmp16;
184 +
185              break;
186  
187          case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
188 @@ -2146,6 +2159,18 @@ DtCompileSdev (
189              SdevHeader->Length =
190                  sizeof (ACPI_SDEV_PCIE) +
191                  Pcie->PathLength + Pcie->VendorDataLength;
192 +
193 +            Tmp16 = AcpiUtReadUint16 (&SdevHeader->Length);
194 +            SdevHeader->Length = Tmp16;
195 +            Tmp16 = AcpiUtReadUint16 (&Pcie->PathOffset);
196 +            Pcie->PathOffset = Tmp16;
197 +            Tmp16 = AcpiUtReadUint16 (&Pcie->PathLength);
198 +            Pcie->PathLength = Tmp16;
199 +            Tmp16 = AcpiUtReadUint16 (&Pcie->VendorDataOffset);
200 +            Pcie->VendorDataOffset = Tmp16;
201 +            Tmp16 = AcpiUtReadUint16 (&Pcie->VendorDataLength);
202 +            Pcie->VendorDataLength = Tmp16;
203 +               
204              break;
205  
206          default:
This page took 0.099179 seconds and 3 git commands to generate.