Blame 0009-Support-DMAR-in-a-big-endian-world.patch

edb6c78
From 01aad41e59efd615ac075fcedbaab0c60f9e1e11 Mon Sep 17 00:00:00 2001
edb6c78
From: Al Stone <ahs3@redhat.com>
edb6c78
Date: Sat, 19 Sep 2020 15:22:00 -0600
edb6c78
Subject: [PATCH 09/40] Support DMAR in a big-endian world
edb6c78
edb6c78
Signed-off-by: Al Stone <ahs3@redhat.com>
edb6c78
---
edb6c78
 source/common/dmtable.c    |  4 ++--
edb6c78
 source/common/dmtbdump1.c  | 26 +++++++++++++++-----------
edb6c78
 source/compiler/dttable1.c | 12 +++++++-----
edb6c78
 3 files changed, 24 insertions(+), 18 deletions(-)
edb6c78
edb6c78
Index: acpica-unix2-20200925/source/common/dmtable.c
edb6c78
===================================================================
edb6c78
--- acpica-unix2-20200925.orig/source/common/dmtable.c
edb6c78
+++ acpica-unix2-20200925/source/common/dmtable.c
edb6c78
@@ -1244,13 +1244,13 @@ AcpiDmDumpTable (
edb6c78
 
edb6c78
             /* DMAR subtable types */
edb6c78
 
edb6c78
-            Temp16 = ACPI_GET16 (Target);
edb6c78
+            Temp16 = AcpiUtReadUint16 (Target);
edb6c78
             if (Temp16 > ACPI_DMAR_TYPE_RESERVED)
edb6c78
             {
edb6c78
                 Temp16 = ACPI_DMAR_TYPE_RESERVED;
edb6c78
             }
edb6c78
 
edb6c78
-            AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
edb6c78
+            AcpiOsPrintf (UINT16_FORMAT, Temp16,
edb6c78
                 AcpiDmDmarSubnames[Temp16]);
edb6c78
             break;
edb6c78
 
edb6c78
Index: acpica-unix2-20200925/source/common/dmtbdump1.c
edb6c78
===================================================================
edb6c78
--- acpica-unix2-20200925.orig/source/common/dmtbdump1.c
edb6c78
+++ acpica-unix2-20200925/source/common/dmtbdump1.c
edb6c78
@@ -526,13 +526,15 @@ AcpiDmDumpDmar (
edb6c78
 {
edb6c78
     ACPI_STATUS             Status;
edb6c78
     ACPI_DMAR_HEADER        *Subtable;
edb6c78
-    UINT32                  Length = Table->Length;
edb6c78
+    UINT32                  Length = AcpiUtReadUint32(&Table->Length);
edb6c78
     UINT32                  Offset = sizeof (ACPI_TABLE_DMAR);
edb6c78
     ACPI_DMTABLE_INFO       *InfoTable;
edb6c78
     ACPI_DMAR_DEVICE_SCOPE  *ScopeTable;
edb6c78
     UINT32                  ScopeOffset;
edb6c78
     UINT8                   *PciPath;
edb6c78
     UINT32                  PathOffset;
edb6c78
+    UINT16		    SubtableType;
edb6c78
+    UINT16		    SubtableLength;
edb6c78
 
edb6c78
 
edb6c78
     /* Main table */
edb6c78
@@ -546,13 +548,14 @@ AcpiDmDumpDmar (
edb6c78
     /* Subtables */
edb6c78
 
edb6c78
     Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);
edb6c78
-    while (Offset < Table->Length)
edb6c78
+    while (Offset < Length)
edb6c78
     {
edb6c78
         /* Common subtable header */
edb6c78
 
edb6c78
         AcpiOsPrintf ("\n");
edb6c78
+	SubtableLength = AcpiUtReadUint16(&Subtable->Length);
edb6c78
         Status = AcpiDmDumpTable (Length, Offset, Subtable,
edb6c78
-            Subtable->Length, AcpiDmTableInfoDmarHdr);
edb6c78
+            SubtableLength, AcpiDmTableInfoDmarHdr);
edb6c78
         if (ACPI_FAILURE (Status))
edb6c78
         {
edb6c78
             return;
edb6c78
@@ -560,7 +563,8 @@ AcpiDmDumpDmar (
edb6c78
 
edb6c78
         AcpiOsPrintf ("\n");
edb6c78
 
edb6c78
-        switch (Subtable->Type)
edb6c78
+	SubtableType = AcpiUtReadUint16(&Subtable->Type);
edb6c78
+        switch (SubtableType)
edb6c78
         {
edb6c78
         case ACPI_DMAR_TYPE_HARDWARE_UNIT:
edb6c78
 
edb6c78
@@ -595,12 +599,12 @@ AcpiDmDumpDmar (
edb6c78
         default:
edb6c78
 
edb6c78
             AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n",
edb6c78
-                Subtable->Type);
edb6c78
+                SubtableType);
edb6c78
             return;
edb6c78
         }
edb6c78
 
edb6c78
         Status = AcpiDmDumpTable (Length, Offset, Subtable,
edb6c78
-            Subtable->Length, InfoTable);
edb6c78
+            SubtableLength, InfoTable);
edb6c78
         if (ACPI_FAILURE (Status))
edb6c78
         {
edb6c78
             return;
edb6c78
@@ -609,8 +613,8 @@ AcpiDmDumpDmar (
edb6c78
         /*
edb6c78
          * Dump the optional device scope entries
edb6c78
          */
edb6c78
-        if ((Subtable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
edb6c78
-            (Subtable->Type == ACPI_DMAR_TYPE_NAMESPACE))
edb6c78
+        if ((SubtableType == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
edb6c78
+            (SubtableType == ACPI_DMAR_TYPE_NAMESPACE))
edb6c78
         {
edb6c78
             /* These types do not support device scopes */
edb6c78
 
edb6c78
@@ -618,7 +622,7 @@ AcpiDmDumpDmar (
edb6c78
         }
edb6c78
 
edb6c78
         ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable, ScopeOffset);
edb6c78
-        while (ScopeOffset < Subtable->Length)
edb6c78
+        while (ScopeOffset < SubtableLength)
edb6c78
         {
edb6c78
             AcpiOsPrintf ("\n");
edb6c78
             Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable,
edb6c78
@@ -659,9 +663,9 @@ AcpiDmDumpDmar (
edb6c78
 NextSubtable:
edb6c78
         /* Point to next subtable */
edb6c78
 
edb6c78
-        Offset += Subtable->Length;
edb6c78
+        Offset += SubtableLength;
edb6c78
         Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable,
edb6c78
-            Subtable->Length);
edb6c78
+            SubtableLength);
edb6c78
     }
edb6c78
 }
edb6c78
 
edb6c78
Index: acpica-unix2-20200925/source/compiler/dttable1.c
edb6c78
===================================================================
edb6c78
--- acpica-unix2-20200925.orig/source/compiler/dttable1.c
edb6c78
+++ acpica-unix2-20200925/source/compiler/dttable1.c
edb6c78
@@ -560,6 +560,7 @@ DtCompileDmar (
edb6c78
     ACPI_DMAR_DEVICE_SCOPE  *DmarDeviceScope;
edb6c78
     UINT32                  DeviceScopeLength;
edb6c78
     UINT32                  PciPathLength;
edb6c78
+    UINT16                  DmarHeaderType;
edb6c78
 
edb6c78
 
edb6c78
     Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmar, &Subtable);
edb6c78
@@ -590,7 +591,8 @@ DtCompileDmar (
edb6c78
 
edb6c78
         DmarHeader = ACPI_CAST_PTR (ACPI_DMAR_HEADER, Subtable->Buffer);
edb6c78
 
edb6c78
-        switch (DmarHeader->Type)
edb6c78
+        DmarHeaderType = AcpiUtReadUint16(&DmarHeader->Type);
edb6c78
+        switch (DmarHeaderType)
edb6c78
         {
edb6c78
         case ACPI_DMAR_TYPE_HARDWARE_UNIT:
edb6c78
 
edb6c78
@@ -637,8 +639,8 @@ DtCompileDmar (
edb6c78
         /*
edb6c78
          * Optional Device Scope subtables
edb6c78
          */
edb6c78
-        if ((DmarHeader->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
edb6c78
-            (DmarHeader->Type == ACPI_DMAR_TYPE_NAMESPACE))
edb6c78
+        if ((DmarHeaderType == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
edb6c78
+            (DmarHeaderType == ACPI_DMAR_TYPE_NAMESPACE))
edb6c78
         {
edb6c78
             /* These types do not support device scopes */
edb6c78
 
edb6c78
@@ -647,8 +649,8 @@ DtCompileDmar (
edb6c78
         }
edb6c78
 
edb6c78
         DtPushSubtable (Subtable);
edb6c78
-        DeviceScopeLength = DmarHeader->Length - Subtable->Length -
edb6c78
-            ParentTable->Length;
edb6c78
+        DeviceScopeLength = AcpiUtReadUint16(&DmarHeader->Length) - 
edb6c78
+		Subtable->Length - ParentTable->Length;
edb6c78
         while (DeviceScopeLength)
edb6c78
         {
edb6c78
             Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarScope,