Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37042839
en ru br
Репозитории ALT

Группа :: Система/Ядро и оборудование
Пакет: acpica

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: 0040-Support-DSDT-SSDT-in-a-big-endian-world.patch
Скачать


From a11c0a997dca2b40d1bcff68368d9d5d5297b781 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Thu, 15 Oct 2020 11:35:23 -0600
Subject: [PATCH 2/5] Support DSDT/SSDT in a big-endian world
NB: this is a very large diff.  The problem is that ResourceTemplates
are treated differently during compilation and disassembly so each of
the resource types had code that needed to be touched directly.
In general, however, just reading or writing individual AML opcodes
wasn't that much of a change, and most of it was on the codegen side.
Signed-off-by: Al Stone <ahs3@redhat.com>
---
 source/common/dmrestag.c                   |   2 +-
 source/common/dmtables.c                   |  17 +-
 source/common/dmtbdump.c                   |   3 +-
 source/compiler/aslcodegen.c               |  61 ++++--
 source/compiler/aslopcodes.c               |   3 +-
 source/compiler/aslrestype1.c              |  44 +++--
 source/compiler/aslrestype1i.c             |  33 ++--
 source/compiler/aslrestype2.c              |  20 +-
 source/compiler/aslrestype2d.c             |  99 ++++++----
 source/compiler/aslrestype2e.c             |  90 ++++++---
 source/compiler/aslrestype2q.c             |  81 +++++---
 source/compiler/aslrestype2s.c             | 214 +++++++++++++++++----
 source/compiler/aslrestype2w.c             |  94 +++++----
 source/components/disassembler/dmbuffer.c  |  10 +-
 source/components/disassembler/dmopcode.c  |   8 +-
 source/components/disassembler/dmresrc.c   |   2 +-
 source/components/disassembler/dmresrcl.c  |  43 +++--
 source/components/disassembler/dmresrcl2.c | 128 +++++++-----
 source/components/disassembler/dmresrcs.c  |  18 +-
 source/components/disassembler/dmwalk.c    |   2 +-
 source/components/dispatcher/dsfield.c     |  16 +-
 source/components/namespace/nsaccess.c     |   2 +-
 source/components/namespace/nsnames.c      |   2 +-
 source/components/namespace/nsparse.c      |   6 +-
 source/components/namespace/nsutils.c      |   7 +-
 25 files changed, 682 insertions(+), 323 deletions(-)
Index: acpica-unix2-20200925/source/common/dmrestag.c
===================================================================
--- acpica-unix2-20200925.orig/source/common/dmrestag.c
+++ acpica-unix2-20200925/source/common/dmrestag.c
@@ -1038,7 +1038,7 @@ AcpiDmAddResourcesToNamespace (
      * NextOp contains the Aml pointer and the Aml length
      */
     AcpiUtWalkAmlResources (NULL, (UINT8 *) NextOp->Named.Data,
-        (ACPI_SIZE) NextOp->Common.Value.Integer,
+        (ACPI_SIZE) NextOp->Common.Value.Size,
         AcpiDmAddResourceToNamespace, (void **) BufferNode);
 }
 
Index: acpica-unix2-20200925/source/common/dmtables.c
===================================================================
--- acpica-unix2-20200925.orig/source/common/dmtables.c
+++ acpica-unix2-20200925/source/common/dmtables.c
@@ -142,6 +142,10 @@ AdCreateTableHeader (
     ACPI_TABLE_HEADER       *Table)
 {
     UINT8                   Checksum;
+    UINT32                  TableLength = AcpiUtReadUint32(&Table->Length);
+    UINT32                  OemRevision = AcpiUtReadUint32(&Table->OemRevision);
+    UINT32                  CompilerRevision = 
+	    			AcpiUtReadUint32(&Table->AslCompilerRevision);
 
 
     /* Reset globals for External statements */
@@ -156,7 +160,7 @@ AdCreateTableHeader (
 
     AcpiOsPrintf (" * Original Table Header:\n");
     AcpiOsPrintf (" *     Signature        \"%4.4s\"\n",    Table->Signature);
-    AcpiOsPrintf (" *     Length           0x%8.8X (%u)\n", Table->Length, Table->Length);
+    AcpiOsPrintf (" *     Length           0x%8.8X (%u)\n", TableLength, TableLength);
 
     /* Print and validate the revision */
 
@@ -188,7 +192,7 @@ AdCreateTableHeader (
 
     AcpiOsPrintf ("\n *     Checksum         0x%2.2X",        Table->Checksum);
 
-    Checksum = AcpiTbChecksum (ACPI_CAST_PTR (UINT8, Table), Table->Length);
+    Checksum = AcpiTbChecksum (ACPI_CAST_PTR (UINT8, Table), TableLength);
     if (Checksum)
     {
         AcpiOsPrintf (" **** Incorrect checksum, should be 0x%2.2X",
@@ -198,9 +202,9 @@ AdCreateTableHeader (
     AcpiOsPrintf ("\n");
     AcpiOsPrintf (" *     OEM ID           \"%.6s\"\n",     Table->OemId);
     AcpiOsPrintf (" *     OEM Table ID     \"%.8s\"\n",     Table->OemTableId);
-    AcpiOsPrintf (" *     OEM Revision     0x%8.8X (%u)\n", Table->OemRevision, Table->OemRevision);
+    AcpiOsPrintf (" *     OEM Revision     0x%8.8X (%u)\n", OemRevision, OemRevision);
     AcpiOsPrintf (" *     Compiler ID      \"%.4s\"\n",     Table->AslCompilerId);
-    AcpiOsPrintf (" *     Compiler Version 0x%8.8X (%u)\n", Table->AslCompilerRevision, Table->AslCompilerRevision);
+    AcpiOsPrintf (" *     Compiler Version 0x%8.8X (%u)\n", CompilerRevision, CompilerRevision);
     AcpiOsPrintf (" */\n");
 
     /*
@@ -221,7 +225,7 @@ AdCreateTableHeader (
     AcpiOsPrintf (
         "DefinitionBlock (\"\", \"%4.4s\", %u, \"%.6s\", \"%.8s\", 0x%8.8X)\n",
         Table->Signature, Table->Revision,
-        Table->OemId, Table->OemTableId, Table->OemRevision);
+        Table->OemId, Table->OemTableId, OemRevision);
 }
 
 
@@ -396,7 +400,8 @@ AdParseTable (
 
     fprintf (stderr, "Pass 1 parse of [%4.4s]\n", (char *) Table->Signature);
 
-    AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
+    AmlLength = AcpiUtReadUint32(&Table->Length);
+    AmlLength -= sizeof (ACPI_TABLE_HEADER);
     AmlStart = ((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER));
 
     AcpiUtSetIntegerWidth (Table->Revision);
Index: acpica-unix2-20200925/source/common/dmtbdump.c
===================================================================
--- acpica-unix2-20200925.orig/source/common/dmtbdump.c
+++ acpica-unix2-20200925/source/common/dmtbdump.c
@@ -333,8 +333,7 @@ AcpiDmDumpXsdt (
     for (i = 0; i < Entries; i++)
     {
         AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i);
-        AcpiOsPrintf ("%8.8X%8.8X\n",
-		     	ACPI_FORMAT_UINT64 (AcpiUtReadUint64(&Array[i])));
+        AcpiOsPrintf ("%16.16lX\n", AcpiUtReadUint64(&Array[i]));
         Offset += sizeof (UINT64);
     }
 }
Index: acpica-unix2-20200925/source/compiler/aslcodegen.c
===================================================================
--- acpica-unix2-20200925.orig/source/compiler/aslcodegen.c
+++ acpica-unix2-20200925/source/compiler/aslcodegen.c
@@ -238,6 +238,10 @@ CgWriteAmlOpcode (
 {
     UINT8                   PkgLenFirstByte;
     UINT32                  i;
+    UINT8                   Tmp8;
+    UINT16                  Tmp16;
+    UINT32                  Tmp32;
+    UINT64                  Tmp64;
     union {
         UINT16                  Opcode;
         UINT8                   OpcodeBytes[2];
@@ -305,25 +309,26 @@ CgWriteAmlOpcode (
 
         /* Value is the length to be encoded (Used in field definitions) */
 
-        PkgLen.Len = (UINT32) Op->Asl.Value.Integer;
+	PkgLen.Len = (UINT32) Op->Asl.Value.Integer;
         break;
 
     default:
 
         /* Check for two-byte opcode */
 
+	Tmp16 = AcpiUtReadUint16(&Aml.Opcode);
         if (Aml.Opcode > 0x00FF)
         {
             /* Write the high byte first */
 
-            CgLocalWriteAmlData (Op, &Aml.OpcodeBytes[1], 1);
+            CgLocalWriteAmlData (Op, ((UINT8 *)&Tmp16)+1, 1);
         }
 
-        CgLocalWriteAmlData (Op, &Aml.OpcodeBytes[0], 1);
+        CgLocalWriteAmlData (Op, (UINT8 *)&Tmp16, 1);
 
         /* Subtreelength doesn't include length of package length bytes */
 
-        PkgLen.Len = Op->Asl.AmlSubtreeLength + Op->Asl.AmlPkgLenBytes;
+	PkgLen.Len = Op->Asl.AmlSubtreeLength + Op->Asl.AmlPkgLenBytes;
         break;
     }
 
@@ -335,7 +340,8 @@ CgWriteAmlOpcode (
         {
             /* Simplest case -- no bytes to follow, just write the count */
 
-            CgLocalWriteAmlData (Op, &PkgLen.LenBytes[0], 1);
+	    Tmp8 = (UINT8) PkgLen.Len;
+            CgLocalWriteAmlData (Op, &Tmp8, 1);
         }
         else if (Op->Asl.AmlPkgLenBytes != 0)
         {
@@ -343,9 +349,10 @@ CgWriteAmlOpcode (
              * Encode the "bytes to follow" in the first byte, top two bits.
              * The low-order nybble of the length is in the bottom 4 bits
              */
+	    Tmp8 = (UINT8) PkgLen.Len;
             PkgLenFirstByte = (UINT8)
                 (((UINT32) (Op->Asl.AmlPkgLenBytes - 1) << 6) |
-                (PkgLen.LenBytes[0] & 0x0F));
+                (Tmp8 & 0x0F));
 
             CgLocalWriteAmlData (Op, &PkgLenFirstByte, 1);
 
@@ -359,6 +366,9 @@ CgWriteAmlOpcode (
              * Now we can write the remaining bytes -
              * either 1, 2, or 3 bytes
              */
+	    Tmp32 = PkgLen.Len;
+	    AcpiUtWriteUint(&PkgLen.Len, Op->Asl.AmlPkgLenBytes,
+			    &Tmp32, sizeof(UINT32));
             for (i = 0; i < (UINT32) (Op->Asl.AmlPkgLenBytes - 1); i++)
             {
                 CgLocalWriteAmlData (Op, &PkgLen.LenBytes[i], 1);
@@ -370,22 +380,30 @@ CgWriteAmlOpcode (
     {
     case AML_BYTE_OP:
 
-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 1);
+	Tmp64 = 0;
+	AcpiUtWriteUint(&Tmp64, 1, &Op->Asl.Value.Integer, 8);
+        CgLocalWriteAmlData (Op, &Tmp64, 1);
         break;
 
     case AML_WORD_OP:
 
-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 2);
+	Tmp64 = 0;
+	AcpiUtWriteUint(&Tmp64, 2, &Op->Asl.Value.Integer, 8);
+        CgLocalWriteAmlData (Op, &Tmp64, 2);
        break;
 
     case AML_DWORD_OP:
 
-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 4);
+	Tmp64 = 0;
+	AcpiUtWriteUint(&Tmp64, 4, &Op->Asl.Value.Integer, 8);
+        CgLocalWriteAmlData (Op, &Tmp64, 4);
         break;
 
     case AML_QWORD_OP:
 
-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 8);
+	Tmp64 = 0;
+	AcpiUtWriteUint(&Tmp64, 8, &Op->Asl.Value.Integer, 8);
+        CgLocalWriteAmlData (Op, &Tmp64, 8);
         break;
 
     case AML_STRING_OP:
@@ -423,6 +441,7 @@ CgWriteTableHeader (
     ACPI_PARSE_OBJECT       *Child;
     UINT32                  CommentLength;
     ACPI_COMMENT_NODE       *Current;
+    UINT32                  Tmp32;
 
 
     memset (&AslGbl_TableHeader, 0, sizeof (ACPI_TABLE_HEADER));
@@ -478,7 +497,9 @@ CgWriteTableHeader (
     /* OEM Revision */
 
     Child = Child->Asl.Next;
-    AslGbl_TableHeader.OemRevision = (UINT32) Child->Asl.Value.Integer;
+    AcpiUtWriteUint(&Tmp32, sizeof(UINT32),
+		   &Child->Asl.Value.Integer, sizeof(Child->Asl.Value.Integer));
+    AslGbl_TableHeader.OemRevision = Tmp32;
 
     /* Compiler ID */
 
@@ -486,7 +507,8 @@ CgWriteTableHeader (
 
     /* Compiler version */
 
-    AslGbl_TableHeader.AslCompilerRevision = ACPI_CA_VERSION;
+    Tmp32 = ACPI_CA_VERSION;
+    AslGbl_TableHeader.AslCompilerRevision = AcpiUtReadUint32(&Tmp32);
 
     /* Table length. Checksum zero for now, will rewrite later */
 
@@ -541,6 +563,15 @@ CgWriteTableHeader (
     AslGbl_TableHeader.Checksum = 0;
     Op->Asl.FinalAmlOffset = ftell (AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle);
 
+    /*
+     * Adjust the Table length; it will only change when big-endian
+     * but we have to wait until here in case there is arithmetic to
+     * be done on the length before this step in the function
+     */
+
+    Tmp32 = AslGbl_TableHeader.Length;
+    AslGbl_TableHeader.Length = AcpiUtReadUint32(&Tmp32);
+
     /* Write entire header and clear the table header global */
 
     CgLocalWriteAmlData (Op, &AslGbl_TableHeader, sizeof (ACPI_TABLE_HEADER));
@@ -625,6 +656,7 @@ CgWriteNode (
     ACPI_PARSE_OBJECT       *Op)
 {
     ASL_RESOURCE_NODE       *Rnode;
+    UINT64                  Tmp64;
 
 
     /* Write all comments here. */
@@ -653,7 +685,10 @@ CgWriteNode (
     case AML_RAW_DATA_DWORD:
     case AML_RAW_DATA_QWORD:
 
-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, Op->Asl.AmlLength);
+	Tmp64 = 0;
+	AcpiUtWriteUint(&Tmp64, Op->Asl.AmlLength,
+			&Op->Asl.Value.Integer, sizeof(UINT64));
+        CgLocalWriteAmlData (Op, &Tmp64, Op->Asl.AmlLength);
         return;
 
 
Index: acpica-unix2-20200925/source/compiler/aslopcodes.c
===================================================================
--- acpica-unix2-20200925.orig/source/compiler/aslopcodes.c
+++ acpica-unix2-20200925/source/compiler/aslopcodes.c
@@ -511,7 +511,8 @@ OpcDoUnicode (
 
     for (i = 0; i < Count; i++)
     {
-        UnicodeString[i] = (UINT16) AsciiString[i];
+        AcpiUtWriteUint(&UnicodeString[i], sizeof(UINT16),
+		       	&AsciiString[i], sizeof(UINT8));
     }
 
     /*
Index: acpica-unix2-20200925/source/compiler/aslrestype1.c
===================================================================
--- acpica-unix2-20200925.orig/source/compiler/aslrestype1.c
+++ acpica-unix2-20200925/source/compiler/aslrestype1.c
@@ -143,6 +143,7 @@ RsDoMemory24Descriptor (
     ASL_RESOURCE_NODE       *Rnode;
     UINT32                  CurrentByteOffset;
     UINT32                  i;
+    UINT16                  Tmp16;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -151,7 +152,8 @@ RsDoMemory24Descriptor (
 
     Descriptor = Rnode->Buffer;
     Descriptor->Memory24.DescriptorType = ACPI_RESOURCE_NAME_MEMORY24;
-    Descriptor->Memory24.ResourceLength = 9;
+    Tmp16 = 9;
+    Descriptor->Memory24.ResourceLength = AcpiUtReadUint16(&Tmp16);
 
     /* Process all child initialization nodes */
 
@@ -168,7 +170,8 @@ RsDoMemory24Descriptor (
 
         case 1: /* Min Address */
 
-            Descriptor->Memory24.Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Memory24.Minimum = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Minimum));
             MinOp = InitializerOp;
@@ -176,7 +179,8 @@ RsDoMemory24Descriptor (
 
         case 2: /* Max Address */
 
-            Descriptor->Memory24.Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Memory24.Maximum = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Maximum));
             MaxOp = InitializerOp;
@@ -184,14 +188,16 @@ RsDoMemory24Descriptor (
 
         case 3: /* Alignment */
 
-            Descriptor->Memory24.Alignment = (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Memory24.Alignment = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Alignment));
             break;
 
         case 4: /* Length */
 
-            Descriptor->Memory24.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Memory24.AddressLength = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.AddressLength));
             LengthOp = InitializerOp;
@@ -249,6 +255,8 @@ RsDoMemory32Descriptor (
     ASL_RESOURCE_NODE       *Rnode;
     UINT32                  CurrentByteOffset;
     UINT32                  i;
+    UINT16                  Tmp16;
+    UINT32                  Tmp32;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -257,7 +265,8 @@ RsDoMemory32Descriptor (
 
     Descriptor = Rnode->Buffer;
     Descriptor->Memory32.DescriptorType = ACPI_RESOURCE_NAME_MEMORY32;
-    Descriptor->Memory32.ResourceLength = 17;
+    Tmp16 = 17;
+    Descriptor->Memory32.ResourceLength = AcpiUtReadUint16(&Tmp16);
 
     /* Process all child initialization nodes */
 
@@ -274,7 +283,8 @@ RsDoMemory32Descriptor (
 
         case 1:  /* Min Address */
 
-            Descriptor->Memory32.Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
+            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Memory32.Minimum = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Minimum));
             MinOp = InitializerOp;
@@ -282,7 +292,8 @@ RsDoMemory32Descriptor (
 
         case 2: /* Max Address */
 
-            Descriptor->Memory32.Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
+            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Memory32.Maximum = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Maximum));
             MaxOp = InitializerOp;
@@ -290,7 +301,8 @@ RsDoMemory32Descriptor (
 
         case 3: /* Alignment */
 
-            Descriptor->Memory32.Alignment = (UINT32) InitializerOp->Asl.Value.Integer;
+            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Memory32.Alignment = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Alignment));
             AlignOp = InitializerOp;
@@ -298,7 +310,8 @@ RsDoMemory32Descriptor (
 
         case 4: /* Length */
 
-            Descriptor->Memory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
+            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Memory32.AddressLength = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.AddressLength));
             LengthOp = InitializerOp;
@@ -352,6 +365,8 @@ RsDoMemory32FixedDescriptor (
     ASL_RESOURCE_NODE       *Rnode;
     UINT32                  CurrentByteOffset;
     UINT32                  i;
+    UINT16                  Tmp16;
+    UINT32                  Tmp32;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -360,7 +375,8 @@ RsDoMemory32FixedDescriptor (
 
     Descriptor = Rnode->Buffer;
     Descriptor->FixedMemory32.DescriptorType = ACPI_RESOURCE_NAME_FIXED_MEMORY32;
-    Descriptor->FixedMemory32.ResourceLength = 9;
+    Tmp16 = 9;
+    Descriptor->FixedMemory32.ResourceLength = AcpiUtReadUint16(&Tmp16);
 
     /* Process all child initialization nodes */
 
@@ -377,14 +393,16 @@ RsDoMemory32FixedDescriptor (
 
         case 1: /* Address */
 
-            Descriptor->FixedMemory32.Address = (UINT32) InitializerOp->Asl.Value.Integer;
+            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->FixedMemory32.Address = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_BASEADDRESS,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Address));
             break;
 
         case 2: /* Length */
 
-            Descriptor->FixedMemory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
+            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->FixedMemory32.AddressLength = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.AddressLength));
             break;
Index: acpica-unix2-20200925/source/compiler/aslrestype1i.c
===================================================================
--- acpica-unix2-20200925.orig/source/compiler/aslrestype1i.c
+++ acpica-unix2-20200925/source/compiler/aslrestype1i.c
@@ -199,6 +199,7 @@ RsDoFixedDmaDescriptor (
     ASL_RESOURCE_NODE       *Rnode;
     UINT32                  CurrentByteOffset;
     UINT32                  i;
+    UINT16                  Tmp16;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -217,14 +218,16 @@ RsDoFixedDmaDescriptor (
         {
         case 0: /* DMA Request Lines [WORD] (_DMA) */
 
-            Descriptor->FixedDma.RequestLines = (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->FixedDma.RequestLines = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_DMA,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.RequestLines));
             break;
 
         case 1: /* DMA Channel [WORD] (_TYP) */
 
-            Descriptor->FixedDma.Channels = (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->FixedDma.Channels = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_DMATYPE,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.Channels));
             break;
@@ -275,6 +278,7 @@ RsDoFixedIoDescriptor (
     ASL_RESOURCE_NODE       *Rnode;
     UINT32                  CurrentByteOffset;
     UINT32                  i;
+    UINT16                  Tmp16;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -293,8 +297,8 @@ RsDoFixedIoDescriptor (
         {
         case 0: /* Base Address */
 
-            Descriptor->FixedIo.Address =
-                (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->FixedIo.Address = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_BASEADDRESS,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedIo.Address));
             AddressOp = InitializerOp;
@@ -358,6 +362,7 @@ RsDoIoDescriptor (
     ASL_RESOURCE_NODE       *Rnode;
     UINT32                  CurrentByteOffset;
     UINT32                  i;
+    UINT16                  Tmp16;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -383,8 +388,8 @@ RsDoIoDescriptor (
 
         case 1:  /* Min Address */
 
-            Descriptor->Io.Minimum =
-                (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Io.Minimum = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Minimum));
             MinOp = InitializerOp;
@@ -392,8 +397,8 @@ RsDoIoDescriptor (
 
         case 2: /* Max Address */
 
-            Descriptor->Io.Maximum =
-                (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Io.Maximum = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Maximum));
             MaxOp = InitializerOp;
@@ -434,10 +439,10 @@ RsDoIoDescriptor (
     /* Validate the Min/Max/Len/Align values */
 
     RsSmallAddressCheck (ACPI_RESOURCE_NAME_IO,
-        Descriptor->Io.Minimum,
-        Descriptor->Io.Maximum,
-        Descriptor->Io.AddressLength,
-        Descriptor->Io.Alignment,
+        (UINT32)(AcpiUtReadUint16(&Descriptor->Io.Minimum)),
+        (UINT32)(AcpiUtReadUint16(&Descriptor->Io.Maximum)),
+        (UINT32)Descriptor->Io.AddressLength,
+        (UINT32)Descriptor->Io.Alignment,
         MinOp, MaxOp, LengthOp, AlignOp, Info->DescriptorTypeOp);
 
     return (Rnode);
@@ -561,7 +566,7 @@ RsDoIrqDescriptor (
 
     /* Now we can set the channel mask */
 
-    Descriptor->Irq.IrqMask = IrqMask;
+    Descriptor->Irq.IrqMask = AcpiUtReadUint16(&IrqMask);
     return (Rnode);
 }
 
@@ -660,6 +665,6 @@ RsDoIrqNoFlagsDescriptor (
 
     /* Now we can set the interrupt mask */
 
-    Descriptor->Irq.IrqMask = IrqMask;
+    Descriptor->Irq.IrqMask = AcpiUtReadUint16(&IrqMask);
     return (Rnode);
 }
Index: acpica-unix2-20200925/source/compiler/aslrestype2.c
===================================================================
--- acpica-unix2-20200925.orig/source/compiler/aslrestype2.c
+++ acpica-unix2-20200925/source/compiler/aslrestype2.c
@@ -77,6 +77,8 @@ RsDoGeneralRegisterDescriptor (
     ASL_RESOURCE_NODE       *Rnode;
     UINT32                  CurrentByteOffset;
     UINT32                  i;
+    UINT16                  Tmp16;
+    UINT64                  Tmp64;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -85,7 +87,8 @@ RsDoGeneralRegisterDescriptor (
 
     Descriptor = Rnode->Buffer;
     Descriptor->GenericReg.DescriptorType = ACPI_RESOURCE_NAME_GENERIC_REGISTER;
-    Descriptor->GenericReg.ResourceLength = 12;
+    Tmp16 = 12;
+    Descriptor->GenericReg.ResourceLength = AcpiUtReadUint16(&Tmp16);
 
     /* Process all child initialization nodes */
 
@@ -116,7 +119,8 @@ RsDoGeneralRegisterDescriptor (
 
         case 3: /* Register Address */
 
-            Descriptor->GenericReg.Address = InitializerOp->Asl.Value.Integer;
+            Tmp64 = InitializerOp->Asl.Value.Integer;
+            Descriptor->GenericReg.Address = AcpiUtReadUint64(&Tmp64);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_ADDRESS,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.Address));
             break;
@@ -184,6 +188,8 @@ RsDoInterruptDescriptor (
     BOOLEAN                 HasResSourceIndex = FALSE;
     UINT8                   ResSourceIndex = 0;
     UINT8                   *ResSourceString = NULL;
+    UINT16                  Tmp16;
+    UINT32                  Tmp32;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -225,7 +231,7 @@ RsDoInterruptDescriptor (
      * Initial descriptor length -- may be enlarged if there are
      * optional fields present
      */
-    Descriptor->ExtendedIrq.ResourceLength  = 2;  /* Flags and table length byte */
+    Descriptor->ExtendedIrq.ResourceLength  = 2; /* Flags and table length byte */
     Descriptor->ExtendedIrq.InterruptCount  = 0;
 
     Rover = ACPI_CAST_PTR (AML_RESOURCE,
@@ -333,7 +339,8 @@ RsDoInterruptDescriptor (
 
             /* Save the integer and move pointer to the next one */
 
-            Rover->DwordItem = (UINT32) InitializerOp->Asl.Value.Integer;
+            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Rover->DwordItem = AcpiUtReadUint32(&Tmp32);
             Rover = ACPI_ADD_PTR (AML_RESOURCE, &(Rover->DwordItem), 4);
             Descriptor->ExtendedIrq.InterruptCount++;
             Descriptor->ExtendedIrq.ResourceLength += 4;
@@ -384,6 +391,8 @@ RsDoInterruptDescriptor (
         Descriptor->ExtendedIrq.ResourceLength = (UINT16)
             (Descriptor->ExtendedIrq.ResourceLength + StringLength);
     }
+    Tmp16 = Descriptor->ExtendedIrq.ResourceLength;
+    Descriptor->ExtendedIrq.ResourceLength  = AcpiUtReadUint16(&Tmp16);
 
     Rnode->BufferLength =
         (ASL_RESDESC_OFFSET (ExtendedIrq.Interrupts[0]) -
@@ -436,7 +445,8 @@ RsDoVendorLargeDescriptor (
 
     Descriptor = Rnode->Buffer;
     Descriptor->VendorLarge.DescriptorType = ACPI_RESOURCE_NAME_VENDOR_LARGE;
-    Descriptor->VendorLarge.ResourceLength = (UINT16) i;
+    AcpiUtWriteUint(&Descriptor->VendorLarge.ResourceLength, sizeof(UINT16),
+		    &i, sizeof(UINT32));
 
     /* Point to end-of-descriptor for vendor data */
 
Index: acpica-unix2-20200925/source/compiler/aslrestype2d.c
===================================================================
--- acpica-unix2-20200925.orig/source/compiler/aslrestype2d.c
+++ acpica-unix2-20200925/source/compiler/aslrestype2d.c
@@ -84,6 +84,8 @@ RsDoDwordIoDescriptor (
     UINT32                  CurrentByteOffset;
     UINT32                  i;
     BOOLEAN                 ResSourceIndex = FALSE;
+    UINT16		    Tmp16;
+    UINT32		    Tmp32;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -147,8 +149,8 @@ RsDoDwordIoDescriptor (
 
         case 5: /* Address Granularity */
 
-            Descriptor->Address32.Granularity =
-                (UINT32) InitializerOp->Asl.Value.Integer;
+	    Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.Granularity = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
             GranOp = InitializerOp;
@@ -156,8 +158,8 @@ RsDoDwordIoDescriptor (
 
         case 6: /* Address Min */
 
-            Descriptor->Address32.Minimum =
-                (UINT32) InitializerOp->Asl.Value.Integer;
+	    Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.Minimum = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
             MinOp = InitializerOp;
@@ -165,8 +167,8 @@ RsDoDwordIoDescriptor (
 
         case 7: /* Address Max */
 
-            Descriptor->Address32.Maximum =
-                (UINT32) InitializerOp->Asl.Value.Integer;
+	    Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.Maximum = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
             MaxOp = InitializerOp;
@@ -174,16 +176,16 @@ RsDoDwordIoDescriptor (
 
         case 8: /* Translation Offset */
 
-            Descriptor->Address32.TranslationOffset =
-                (UINT32) InitializerOp->Asl.Value.Integer;
+	    Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.TranslationOffset = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
             break;
 
         case 9: /* Address Length */
 
-            Descriptor->Address32.AddressLength =
-                (UINT32) InitializerOp->Asl.Value.Integer;
+	    Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.AddressLength = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
             LengthOp = InitializerOp;
@@ -271,11 +273,14 @@ RsDoDwordIoDescriptor (
 
     /* Validate the Min/Max/Len/Gran values */
 
+    Tmp16 = Descriptor->Address32.ResourceLength;
+    Descriptor->Address32.ResourceLength = AcpiUtReadUint16(&Tmp16);
+
     RsLargeAddressCheck (
-        (UINT64) Descriptor->Address32.Minimum,
-        (UINT64) Descriptor->Address32.Maximum,
-        (UINT64) Descriptor->Address32.AddressLength,
-        (UINT64) Descriptor->Address32.Granularity,
+        (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Minimum),
+        (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Maximum),
+        (UINT64) AcpiUtReadUint32(&Descriptor->Address32.AddressLength),
+        (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Granularity),
         Descriptor->Address32.Flags,
         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
 
@@ -314,6 +319,8 @@ RsDoDwordMemoryDescriptor (
     UINT32                  CurrentByteOffset;
     UINT32                  i;
     BOOLEAN                 ResSourceIndex = FALSE;
+    UINT16                  Tmp16;
+    UINT32                  Tmp32;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -385,8 +392,8 @@ RsDoDwordMemoryDescriptor (
 
         case 6: /* Address Granularity */
 
-            Descriptor->Address32.Granularity =
-                (UINT32) InitializerOp->Asl.Value.Integer;
+            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.Granularity = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
             GranOp = InitializerOp;
@@ -394,8 +401,8 @@ RsDoDwordMemoryDescriptor (
 
         case 7: /* Min Address */
 
-            Descriptor->Address32.Minimum =
-                (UINT32) InitializerOp->Asl.Value.Integer;
+            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.Minimum = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
             MinOp = InitializerOp;
@@ -403,8 +410,8 @@ RsDoDwordMemoryDescriptor (
 
         case 8: /* Max Address */
 
-            Descriptor->Address32.Maximum =
-                (UINT32) InitializerOp->Asl.Value.Integer;
+            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.Maximum = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
             MaxOp = InitializerOp;
@@ -412,16 +419,16 @@ RsDoDwordMemoryDescriptor (
 
         case 9: /* Translation Offset */
 
-            Descriptor->Address32.TranslationOffset =
-                (UINT32) InitializerOp->Asl.Value.Integer;
+            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.TranslationOffset = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
             break;
 
         case 10: /* Address Length */
 
-            Descriptor->Address32.AddressLength =
-                (UINT32) InitializerOp->Asl.Value.Integer;
+            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.AddressLength = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
             LengthOp = InitializerOp;
@@ -506,11 +513,14 @@ RsDoDwordMemoryDescriptor (
 
     /* Validate the Min/Max/Len/Gran values */
 
+    Tmp16 = Descriptor->Address32.ResourceLength;
+    Descriptor->Address32.ResourceLength = AcpiUtReadUint16(&Tmp16);
+
     RsLargeAddressCheck (
-        (UINT64) Descriptor->Address32.Minimum,
-        (UINT64) Descriptor->Address32.Maximum,
-        (UINT64) Descriptor->Address32.AddressLength,
-        (UINT64) Descriptor->Address32.Granularity,
+        (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Minimum),
+        (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Maximum),
+        (UINT64) AcpiUtReadUint32(&Descriptor->Address32.AddressLength),
+        (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Granularity),
         Descriptor->Address32.Flags,
         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
 
@@ -549,6 +559,8 @@ RsDoDwordSpaceDescriptor (
     UINT32                  CurrentByteOffset;
     UINT32                  i;
     BOOLEAN                 ResSourceIndex = FALSE;
+    UINT16                  Tmp16;
+    UINT32                  Tmp32;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -616,8 +628,8 @@ RsDoDwordSpaceDescriptor (
 
         case 6: /* Address Granularity */
 
-            Descriptor->Address32.Granularity =
-                (UINT32) InitializerOp->Asl.Value.Integer;
+	    Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.Granularity = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
             GranOp = InitializerOp;
@@ -625,8 +637,8 @@ RsDoDwordSpaceDescriptor (
 
         case 7: /* Min Address */
 
-            Descriptor->Address32.Minimum =
-                (UINT32) InitializerOp->Asl.Value.Integer;
+	    Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.Minimum = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
             MinOp = InitializerOp;
@@ -634,8 +646,8 @@ RsDoDwordSpaceDescriptor (
 
         case 8: /* Max Address */
 
-            Descriptor->Address32.Maximum =
-                (UINT32) InitializerOp->Asl.Value.Integer;
+	    Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.Maximum = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
             MaxOp = InitializerOp;
@@ -643,16 +655,16 @@ RsDoDwordSpaceDescriptor (
 
         case 9: /* Translation Offset */
 
-            Descriptor->Address32.TranslationOffset =
-                (UINT32) InitializerOp->Asl.Value.Integer;
+	    Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.TranslationOffset = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
             break;
 
         case 10: /* Address Length */
 
-            Descriptor->Address32.AddressLength =
-                (UINT32) InitializerOp->Asl.Value.Integer;
+	    Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address32.AddressLength = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
             LengthOp = InitializerOp;
@@ -723,11 +735,14 @@ RsDoDwordSpaceDescriptor (
 
     /* Validate the Min/Max/Len/Gran values */
 
+    Tmp16 = Descriptor->Address32.ResourceLength;
+    Descriptor->Address32.ResourceLength = AcpiUtReadUint16(&Tmp16);
+
     RsLargeAddressCheck (
-        (UINT64) Descriptor->Address32.Minimum,
-        (UINT64) Descriptor->Address32.Maximum,
-        (UINT64) Descriptor->Address32.AddressLength,
-        (UINT64) Descriptor->Address32.Granularity,
+        (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Minimum),
+        (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Maximum),
+        (UINT64) AcpiUtReadUint32(&Descriptor->Address32.AddressLength),
+        (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Granularity),
         Descriptor->Address32.Flags,
         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
 
Index: acpica-unix2-20200925/source/compiler/aslrestype2e.c
===================================================================
--- acpica-unix2-20200925.orig/source/compiler/aslrestype2e.c
+++ acpica-unix2-20200925/source/compiler/aslrestype2e.c
@@ -80,6 +80,7 @@ RsDoExtendedIoDescriptor (
     UINT16                  StringLength = 0;
     UINT32                  CurrentByteOffset;
     UINT32                  i;
+    UINT16                  Tmp16;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -139,7 +140,8 @@ RsDoExtendedIoDescriptor (
 
         case 5: /* Address Granularity */
 
-            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.Granularity =
+		    AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
             GranOp = InitializerOp;
@@ -147,7 +149,8 @@ RsDoExtendedIoDescriptor (
 
         case 6: /* Address Min */
 
-            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.Minimum = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
             MinOp = InitializerOp;
@@ -155,7 +158,8 @@ RsDoExtendedIoDescriptor (
 
         case 7: /* Address Max */
 
-            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.Maximum = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
             MaxOp = InitializerOp;
@@ -163,14 +167,16 @@ RsDoExtendedIoDescriptor (
 
         case 8: /* Translation Offset */
 
-            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.TranslationOffset = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
             break;
 
         case 9: /* Address Length */
 
-            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.AddressLength = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
             LengthOp = InitializerOp;
@@ -178,7 +184,8 @@ RsDoExtendedIoDescriptor (
 
         case 10: /* Type-Specific Attributes */
 
-            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.TypeSpecific = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
             break;
@@ -213,11 +220,14 @@ RsDoExtendedIoDescriptor (
 
     /* Validate the Min/Max/Len/Gran values */
 
+    Tmp16 = Descriptor->ExtAddress64.ResourceLength;
+    Descriptor->ExtAddress64.ResourceLength = AcpiUtReadUint16(&Tmp16);
+
     RsLargeAddressCheck (
-        Descriptor->ExtAddress64.Minimum,
-        Descriptor->ExtAddress64.Maximum,
-        Descriptor->ExtAddress64.AddressLength,
-        Descriptor->ExtAddress64.Granularity,
+        AcpiUtReadUint64(&Descriptor->ExtAddress64.Minimum),
+        AcpiUtReadUint64(&Descriptor->ExtAddress64.Maximum),
+        AcpiUtReadUint64(&Descriptor->ExtAddress64.AddressLength),
+        AcpiUtReadUint64(&Descriptor->ExtAddress64.Granularity),
         Descriptor->ExtAddress64.Flags,
         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
 
@@ -253,6 +263,7 @@ RsDoExtendedMemoryDescriptor (
     UINT16                  StringLength = 0;
     UINT32                  CurrentByteOffset;
     UINT32                  i;
+    UINT16                  Tmp16;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -319,7 +330,8 @@ RsDoExtendedMemoryDescriptor (
 
         case 6: /* Address Granularity */
 
-            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.Granularity = 
+		    AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
             GranOp = InitializerOp;
@@ -327,7 +339,8 @@ RsDoExtendedMemoryDescriptor (
 
         case 7: /* Min Address */
 
-            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.Minimum = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
             MinOp = InitializerOp;
@@ -335,7 +348,8 @@ RsDoExtendedMemoryDescriptor (
 
         case 8: /* Max Address */
 
-            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.Maximum = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
             MaxOp = InitializerOp;
@@ -343,14 +357,16 @@ RsDoExtendedMemoryDescriptor (
 
         case 9: /* Translation Offset */
 
-            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.TranslationOffset = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
             break;
 
         case 10: /* Address Length */
 
-            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.AddressLength = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
             LengthOp = InitializerOp;
@@ -358,7 +374,8 @@ RsDoExtendedMemoryDescriptor (
 
         case 11: /* Type-Specific Attributes */
 
-            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.TypeSpecific = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
             break;
@@ -394,11 +411,14 @@ RsDoExtendedMemoryDescriptor (
 
     /* Validate the Min/Max/Len/Gran values */
 
+    Tmp16 = Descriptor->ExtAddress64.ResourceLength;
+    Descriptor->ExtAddress64.ResourceLength = AcpiUtReadUint16(&Tmp16);
+
     RsLargeAddressCheck (
-        Descriptor->ExtAddress64.Minimum,
-        Descriptor->ExtAddress64.Maximum,
-        Descriptor->ExtAddress64.AddressLength,
-        Descriptor->ExtAddress64.Granularity,
+        AcpiUtReadUint64(&Descriptor->ExtAddress64.Minimum),
+        AcpiUtReadUint64(&Descriptor->ExtAddress64.Maximum),
+        AcpiUtReadUint64(&Descriptor->ExtAddress64.AddressLength),
+        AcpiUtReadUint64(&Descriptor->ExtAddress64.Granularity),
         Descriptor->ExtAddress64.Flags,
         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
 
@@ -434,6 +454,7 @@ RsDoExtendedSpaceDescriptor (
     UINT16                  StringLength = 0;
     UINT32                  CurrentByteOffset;
     UINT32                  i;
+    UINT16                  Tmp16;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -497,7 +518,8 @@ RsDoExtendedSpaceDescriptor (
 
         case 6: /* Address Granularity */
 
-            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.Granularity = 
+		    AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
             GranOp = InitializerOp;
@@ -505,7 +527,8 @@ RsDoExtendedSpaceDescriptor (
 
         case 7: /* Min Address */
 
-            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.Minimum = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
             MinOp = InitializerOp;
@@ -513,7 +536,8 @@ RsDoExtendedSpaceDescriptor (
 
         case 8: /* Max Address */
 
-            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.Maximum = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
             MaxOp = InitializerOp;
@@ -521,14 +545,16 @@ RsDoExtendedSpaceDescriptor (
 
         case 9: /* Translation Offset */
 
-            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.TranslationOffset = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
             break;
 
         case 10: /* Address Length */
 
-            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.AddressLength = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
             LengthOp = InitializerOp;
@@ -536,7 +562,8 @@ RsDoExtendedSpaceDescriptor (
 
         case 11: /* Type-Specific Attributes */
 
-            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
+            Descriptor->ExtAddress64.TypeSpecific = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
             break;
@@ -557,11 +584,14 @@ RsDoExtendedSpaceDescriptor (
 
     /* Validate the Min/Max/Len/Gran values */
 
+    Tmp16 = Descriptor->ExtAddress64.ResourceLength;
+    Descriptor->ExtAddress64.ResourceLength = AcpiUtReadUint16(&Tmp16);
+
     RsLargeAddressCheck (
-        Descriptor->ExtAddress64.Minimum,
-        Descriptor->ExtAddress64.Maximum,
-        Descriptor->ExtAddress64.AddressLength,
-        Descriptor->ExtAddress64.Granularity,
+        AcpiUtReadUint64(&Descriptor->ExtAddress64.Minimum),
+        AcpiUtReadUint64(&Descriptor->ExtAddress64.Maximum),
+        AcpiUtReadUint64(&Descriptor->ExtAddress64.AddressLength),
+        AcpiUtReadUint64(&Descriptor->ExtAddress64.Granularity),
         Descriptor->ExtAddress64.Flags,
         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
 
Index: acpica-unix2-20200925/source/compiler/aslrestype2q.c
===================================================================
--- acpica-unix2-20200925.orig/source/compiler/aslrestype2q.c
+++ acpica-unix2-20200925/source/compiler/aslrestype2q.c
@@ -84,6 +84,7 @@ RsDoQwordIoDescriptor (
     UINT32                  CurrentByteOffset;
     UINT32                  i;
     BOOLEAN                 ResSourceIndex = FALSE;
+    UINT16                  Tmp16;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -147,7 +148,8 @@ RsDoQwordIoDescriptor (
 
         case 5: /* Address Granularity */
 
-            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
+            Descriptor->Address64.Granularity = 
+		    AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
             GranOp = InitializerOp;
@@ -155,7 +157,8 @@ RsDoQwordIoDescriptor (
 
         case 6: /* Address Min */
 
-            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
+            Descriptor->Address64.Minimum = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
             MinOp = InitializerOp;
@@ -163,7 +166,8 @@ RsDoQwordIoDescriptor (
 
         case 7: /* Address Max */
 
-            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
+            Descriptor->Address64.Maximum = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
             MaxOp = InitializerOp;
@@ -171,14 +175,16 @@ RsDoQwordIoDescriptor (
 
         case 8: /* Translation Offset */
 
-            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
+            Descriptor->Address64.TranslationOffset = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
             break;
 
         case 9: /* Address Length */
 
-            Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
+            Descriptor->Address64.AddressLength = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
             LengthOp = InitializerOp;
@@ -262,11 +268,14 @@ RsDoQwordIoDescriptor (
 
     /* Validate the Min/Max/Len/Gran values */
 
+    Tmp16 = Descriptor->Address64.ResourceLength;
+    Descriptor->Address64.ResourceLength = AcpiUtReadUint16(&Tmp16);
+
     RsLargeAddressCheck (
-        Descriptor->Address64.Minimum,
-        Descriptor->Address64.Maximum,
-        Descriptor->Address64.AddressLength,
-        Descriptor->Address64.Granularity,
+        AcpiUtReadUint64(&Descriptor->Address64.Minimum),
+        AcpiUtReadUint64(&Descriptor->Address64.Maximum),
+        AcpiUtReadUint64(&Descriptor->Address64.AddressLength),
+        AcpiUtReadUint64(&Descriptor->Address64.Granularity),
         Descriptor->Address64.Flags,
         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
 
@@ -305,6 +314,7 @@ RsDoQwordMemoryDescriptor (
     UINT32                  CurrentByteOffset;
     UINT32                  i;
     BOOLEAN                 ResSourceIndex = FALSE;
+    UINT16                  Tmp16;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -375,7 +385,8 @@ RsDoQwordMemoryDescriptor (
 
         case 6: /* Address Granularity */
 
-            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
+            Descriptor->Address64.Granularity = 
+		    AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
             GranOp = InitializerOp;
@@ -383,7 +394,8 @@ RsDoQwordMemoryDescriptor (
 
         case 7: /* Min Address */
 
-            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
+            Descriptor->Address64.Minimum = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
             MinOp = InitializerOp;
@@ -391,7 +403,8 @@ RsDoQwordMemoryDescriptor (
 
         case 8: /* Max Address */
 
-            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
+            Descriptor->Address64.Maximum = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
             MaxOp = InitializerOp;
@@ -399,14 +412,16 @@ RsDoQwordMemoryDescriptor (
 
         case 9: /* Translation Offset */
 
-            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
+            Descriptor->Address64.TranslationOffset = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
             break;
 
         case 10: /* Address Length */
 
-            Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
+            Descriptor->Address64.AddressLength = 
+	            AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
             LengthOp = InitializerOp;
@@ -491,11 +506,14 @@ RsDoQwordMemoryDescriptor (
 
     /* Validate the Min/Max/Len/Gran values */
 
+    Tmp16 = Descriptor->Address64.ResourceLength;
+    Descriptor->Address64.ResourceLength = AcpiUtReadUint16(&Tmp16);
+
     RsLargeAddressCheck (
-        Descriptor->Address64.Minimum,
-        Descriptor->Address64.Maximum,
-        Descriptor->Address64.AddressLength,
-        Descriptor->Address64.Granularity,
+        AcpiUtReadUint64(&Descriptor->Address64.Minimum),
+        AcpiUtReadUint64(&Descriptor->Address64.Maximum),
+        AcpiUtReadUint64(&Descriptor->Address64.AddressLength),
+        AcpiUtReadUint64(&Descriptor->Address64.Granularity),
         Descriptor->Address64.Flags,
         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
 
@@ -534,6 +552,7 @@ RsDoQwordSpaceDescriptor (
     UINT32                  CurrentByteOffset;
     UINT32                  i;
     BOOLEAN                 ResSourceIndex = FALSE;
+    UINT16                  Tmp16;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -601,7 +620,8 @@ RsDoQwordSpaceDescriptor (
 
         case 6: /* Address Granularity */
 
-            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
+            Descriptor->Address64.Granularity = 
+		    AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
             GranOp = InitializerOp;
@@ -609,7 +629,8 @@ RsDoQwordSpaceDescriptor (
 
         case 7: /* Min Address */
 
-            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
+            Descriptor->Address64.Minimum = 
+		    AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
             MinOp = InitializerOp;
@@ -617,7 +638,8 @@ RsDoQwordSpaceDescriptor (
 
         case 8: /* Max Address */
 
-            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
+            Descriptor->Address64.Maximum = 
+		    AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
             MaxOp = InitializerOp;
@@ -625,14 +647,16 @@ RsDoQwordSpaceDescriptor (
 
         case 9: /* Translation Offset */
 
-            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
+            Descriptor->Address64.TranslationOffset = 
+		    AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
             break;
 
         case 10: /* Address Length */
 
-            Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
+            Descriptor->Address64.AddressLength = 
+		    AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer);
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
             LengthOp = InitializerOp;
@@ -702,11 +726,14 @@ RsDoQwordSpaceDescriptor (
 
     /* Validate the Min/Max/Len/Gran values */
 
+    Tmp16 = Descriptor->Address64.ResourceLength;
+    Descriptor->Address64.ResourceLength = AcpiUtReadUint16(&Tmp16);
+
     RsLargeAddressCheck (
-        Descriptor->Address64.Minimum,
-        Descriptor->Address64.Maximum,
-        Descriptor->Address64.AddressLength,
-        Descriptor->Address64.Granularity,
+        AcpiUtReadUint64(&Descriptor->Address64.Minimum),
+        AcpiUtReadUint64(&Descriptor->Address64.Maximum),
+        AcpiUtReadUint64(&Descriptor->Address64.AddressLength),
+        AcpiUtReadUint64(&Descriptor->Address64.Granularity),
         Descriptor->Address64.Flags,
         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
 
Index: acpica-unix2-20200925/source/compiler/aslrestype2s.c
===================================================================
--- acpica-unix2-20200925.orig/source/compiler/aslrestype2s.c
+++ acpica-unix2-20200925/source/compiler/aslrestype2s.c
@@ -343,6 +343,7 @@ RsDoGpioIntDescriptor (
     UINT32                  CurrentByteOffset;
     UINT32                  PinCount = 0;
     UINT32                  i;
+    UINT16                  Tmp16;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -485,7 +486,8 @@ RsDoGpioIntDescriptor (
              *  (implies resource source must immediately follow the pin list.)
              *  Name: _PIN
              */
-            *InterruptList = (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            *InterruptList = AcpiUtReadUint16(&Tmp16);
             InterruptList++;
             PinCount++;
 
@@ -518,6 +520,27 @@ RsDoGpioIntDescriptor (
 
     MpSaveGpioInfo (Info->MappingOp, Descriptor,
         PinCount, PinList, ResourceSource);
+
+    /* correct endian-ness issues */
+    Tmp16 = Descriptor->Gpio.ResourceLength;
+    Descriptor->Gpio.ResourceLength = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.Flags;
+    Descriptor->Gpio.Flags = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.IntFlags;
+    Descriptor->Gpio.IntFlags = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.DriveStrength;
+    Descriptor->Gpio.DriveStrength = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.DebounceTimeout;
+    Descriptor->Gpio.DebounceTimeout = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.PinTableOffset;
+    Descriptor->Gpio.PinTableOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.ResSourceOffset;
+    Descriptor->Gpio.ResSourceOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.VendorOffset;
+    Descriptor->Gpio.VendorOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.VendorLength;
+    Descriptor->Gpio.VendorLength = AcpiUtReadUint16(&Tmp16);
+
     return (Rnode);
 }
 
@@ -552,6 +575,7 @@ RsDoGpioIoDescriptor (
     UINT32                  CurrentByteOffset;
     UINT32                  PinCount = 0;
     UINT32                  i;
+    UINT16                  Tmp16;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -691,7 +715,8 @@ RsDoGpioIoDescriptor (
              *  (implies resource source must immediately follow the pin list.)
              *  Name: _PIN
              */
-            *InterruptList = (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            *InterruptList = AcpiUtReadUint16(&Tmp16);
             InterruptList++;
             PinCount++;
 
@@ -724,6 +749,27 @@ RsDoGpioIoDescriptor (
 
     MpSaveGpioInfo (Info->MappingOp, Descriptor,
         PinCount, PinList, ResourceSource);
+
+    /* correct endian-ness issues */
+    Tmp16 = Descriptor->Gpio.ResourceLength;
+    Descriptor->Gpio.ResourceLength = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.Flags;
+    Descriptor->Gpio.Flags = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.IntFlags;
+    Descriptor->Gpio.IntFlags = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.DriveStrength;
+    Descriptor->Gpio.DriveStrength = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.DebounceTimeout;
+    Descriptor->Gpio.DebounceTimeout = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.PinTableOffset;
+    Descriptor->Gpio.PinTableOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.ResSourceOffset;
+    Descriptor->Gpio.ResSourceOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.VendorOffset;
+    Descriptor->Gpio.VendorOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->Gpio.VendorLength;
+    Descriptor->Gpio.VendorLength = AcpiUtReadUint16(&Tmp16);
+
     return (Rnode);
 }
 
@@ -754,6 +800,8 @@ RsDoI2cSerialBusDescriptor (
     UINT16                  DescriptorSize;
     UINT32                  CurrentByteOffset;
     UINT32                  i;
+    UINT16                  Tmp16;
+    UINT32                  Tmp32;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -781,7 +829,8 @@ RsDoI2cSerialBusDescriptor (
     Descriptor->I2cSerialBus.RevisionId = AML_RESOURCE_I2C_REVISION;
     Descriptor->I2cSerialBus.TypeRevisionId = AML_RESOURCE_I2C_TYPE_REVISION;
     Descriptor->I2cSerialBus.Type = AML_RESOURCE_I2C_SERIALBUSTYPE;
-    Descriptor->I2cSerialBus.TypeDataLength = AML_RESOURCE_I2C_MIN_DATA_LEN + VendorLength;
+    Tmp16 = AML_RESOURCE_I2C_MIN_DATA_LEN + VendorLength;
+    Descriptor->I2cSerialBus.TypeDataLength = AcpiUtReadUint16(&Tmp16);
 
     if (Info->DescriptorTypeOp->Asl.ParseOpcode == PARSEOP_I2C_SERIALBUS_V2)
     {
@@ -795,13 +844,15 @@ RsDoI2cSerialBusDescriptor (
 
     /* Process all child initialization nodes */
 
+    Descriptor->I2cSerialBus.TypeSpecificFlags = 0;
     for (i = 0; InitializerOp; i++)
     {
         switch (i)
         {
         case 0: /* Slave Address [WORD] (_ADR) */
 
-            Descriptor->I2cSerialBus.SlaveAddress = (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->I2cSerialBus.SlaveAddress = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_ADDRESS,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.SlaveAddress));
             break;
@@ -815,16 +866,19 @@ RsDoI2cSerialBusDescriptor (
 
         case 2: /* Connection Speed [DWORD] (_SPE) */
 
-            Descriptor->I2cSerialBus.ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
+	    Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->I2cSerialBus.ConnectionSpeed = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.ConnectionSpeed));
             break;
 
         case 3: /* Addressing Mode [Flag] (_MOD) */
 
-            RsSetFlagBits16 (&Descriptor->I2cSerialBus.TypeSpecificFlags, InitializerOp, 0, 0);
+	    Tmp16 = AcpiUtReadUint16(&Descriptor->I2cSerialBus.TypeSpecificFlags);
+            RsSetFlagBits16 (&Tmp16, InitializerOp, 0, 0);
             RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.TypeSpecificFlags), 0);
+	    Descriptor->I2cSerialBus.TypeSpecificFlags = AcpiUtReadUint16(&Tmp16);
             break;
 
         case 4: /* ResSource [Optional Field - STRING] */
@@ -882,6 +936,8 @@ RsDoI2cSerialBusDescriptor (
         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
     }
 
+    Tmp16 = Descriptor->I2cSerialBus.ResourceLength;
+    Descriptor->I2cSerialBus.ResourceLength = AcpiUtReadUint16(&Tmp16);
     MpSaveSerialInfo (Info->MappingOp, Descriptor, ResourceSource);
     return (Rnode);
 }
@@ -913,6 +969,8 @@ RsDoSpiSerialBusDescriptor (
     UINT16                  DescriptorSize;
     UINT32                  CurrentByteOffset;
     UINT32                  i;
+    UINT16                  Tmp16;
+    UINT32                  Tmp32;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -935,12 +993,13 @@ RsDoSpiSerialBusDescriptor (
         sizeof (AML_RESOURCE_LARGE_HEADER));
 
     Descriptor = Rnode->Buffer;
-    Descriptor->SpiSerialBus.ResourceLength = DescriptorSize;
+    Descriptor->SpiSerialBus.ResourceLength = AcpiUtReadUint16(&DescriptorSize);
     Descriptor->SpiSerialBus.DescriptorType = ACPI_RESOURCE_NAME_SERIAL_BUS;
     Descriptor->SpiSerialBus.RevisionId = AML_RESOURCE_SPI_REVISION;
     Descriptor->SpiSerialBus.TypeRevisionId = AML_RESOURCE_SPI_TYPE_REVISION;
     Descriptor->SpiSerialBus.Type = AML_RESOURCE_SPI_SERIALBUSTYPE;
-    Descriptor->SpiSerialBus.TypeDataLength = AML_RESOURCE_SPI_MIN_DATA_LEN + VendorLength;
+    Tmp16 = AML_RESOURCE_SPI_MIN_DATA_LEN + VendorLength;
+    Descriptor->SpiSerialBus.TypeDataLength = AcpiUtReadUint16(&Tmp16);
 
     if (Info->DescriptorTypeOp->Asl.ParseOpcode == PARSEOP_SPI_SERIALBUS_V2)
     {
@@ -955,29 +1014,35 @@ RsDoSpiSerialBusDescriptor (
 
     /* Process all child initialization nodes */
 
+    Descriptor->SpiSerialBus.TypeSpecificFlags = 0;
     for (i = 0; InitializerOp; i++)
     {
         switch (i)
         {
         case 0: /* Device Selection [WORD] (_ADR) */
 
-            Descriptor->SpiSerialBus.DeviceSelection = (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->SpiSerialBus.DeviceSelection = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_ADDRESS,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.DeviceSelection));
             break;
 
         case 1: /* Device Polarity [Flag] (_DPL) */
 
-            RsSetFlagBits16 (&Descriptor->SpiSerialBus.TypeSpecificFlags, InitializerOp, 1, 0);
+	    Tmp16 = AcpiUtReadUint16(&Descriptor->SpiSerialBus.TypeSpecificFlags);
+            RsSetFlagBits16 (&Tmp16, InitializerOp, 1, 0);
             RsCreateBitField (InitializerOp, ACPI_RESTAG_DEVICEPOLARITY,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.TypeSpecificFlags), 1);
+	    Descriptor->SpiSerialBus.TypeSpecificFlags = AcpiUtReadUint16(&Tmp16);
             break;
 
         case 2: /* Wire Mode [Flag] (_MOD) */
 
-            RsSetFlagBits16 (&Descriptor->SpiSerialBus.TypeSpecificFlags, InitializerOp, 0, 0);
+	    Tmp16 = AcpiUtReadUint16(&Descriptor->SpiSerialBus.TypeSpecificFlags);
+            RsSetFlagBits16 (&Tmp16, InitializerOp, 0, 0);
             RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.TypeSpecificFlags), 0);
+	    Descriptor->SpiSerialBus.TypeSpecificFlags = AcpiUtReadUint16(&Tmp16);
             break;
 
         case 3: /* Device Bit Length [BYTE] (_LEN) */
@@ -996,7 +1061,8 @@ RsDoSpiSerialBusDescriptor (
 
         case 5: /* Connection Speed [DWORD] (_SPE) */
 
-            Descriptor->SpiSerialBus.ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
+	    Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->SpiSerialBus.ConnectionSpeed = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.ConnectionSpeed));
             break;
@@ -1101,6 +1167,8 @@ RsDoUartSerialBusDescriptor (
     UINT16                  DescriptorSize;
     UINT32                  CurrentByteOffset;
     UINT32                  i;
+    UINT16                  Tmp16;
+    UINT32                  Tmp32;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -1123,12 +1191,13 @@ RsDoUartSerialBusDescriptor (
         sizeof (AML_RESOURCE_LARGE_HEADER));
 
     Descriptor = Rnode->Buffer;
-    Descriptor->UartSerialBus.ResourceLength = DescriptorSize;
+    Descriptor->UartSerialBus.ResourceLength = AcpiUtReadUint16(&DescriptorSize);
     Descriptor->UartSerialBus.DescriptorType = ACPI_RESOURCE_NAME_SERIAL_BUS;
     Descriptor->UartSerialBus.RevisionId = AML_RESOURCE_UART_REVISION;
     Descriptor->UartSerialBus.TypeRevisionId = AML_RESOURCE_UART_TYPE_REVISION;
     Descriptor->UartSerialBus.Type = AML_RESOURCE_UART_SERIALBUSTYPE;
-    Descriptor->UartSerialBus.TypeDataLength = AML_RESOURCE_UART_MIN_DATA_LEN + VendorLength;
+    Tmp16 = AML_RESOURCE_UART_MIN_DATA_LEN + VendorLength;
+    Descriptor->UartSerialBus.TypeDataLength = AcpiUtReadUint16(&Tmp16);
 
     if (Info->DescriptorTypeOp->Asl.ParseOpcode == PARSEOP_UART_SERIALBUS_V2)
     {
@@ -1142,29 +1211,35 @@ RsDoUartSerialBusDescriptor (
 
     /* Process all child initialization nodes */
 
+    Descriptor->UartSerialBus.TypeSpecificFlags = 0;
     for (i = 0; InitializerOp; i++)
     {
         switch (i)
         {
         case 0: /* Connection Speed (Baud Rate) [DWORD] (_SPE) */
 
-            Descriptor->UartSerialBus.DefaultBaudRate = (UINT32) InitializerOp->Asl.Value.Integer;
+	    Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->UartSerialBus.DefaultBaudRate = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.DefaultBaudRate));
             break;
 
         case 1: /* Bits Per Byte [Flags] (_LEN) */
 
-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 4, 3);
+	    Tmp16 = AcpiUtReadUint16(&Descriptor->UartSerialBus.TypeSpecificFlags);
+            RsSetFlagBits16 (&Tmp16, InitializerOp, 4, 3);
             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_LENGTH,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 4, 3);
+	    Descriptor->UartSerialBus.TypeSpecificFlags = AcpiUtReadUint16(&Tmp16);;
             break;
 
         case 2: /* Stop Bits [Flags] (_STB) */
 
-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 2, 1);
+	    Tmp16 = AcpiUtReadUint16(&Descriptor->UartSerialBus.TypeSpecificFlags);
+            RsSetFlagBits16 (&Tmp16, InitializerOp, 2, 1);
             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_STOPBITS,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 2, 2);
+	    Descriptor->UartSerialBus.TypeSpecificFlags = AcpiUtReadUint16(&Tmp16);;
             break;
 
         case 3: /* Lines In Use [BYTE] (_LIN) */
@@ -1176,9 +1251,11 @@ RsDoUartSerialBusDescriptor (
 
         case 4: /* Endianness [Flag] (_END) */
 
-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 7, 0);
+	    Tmp16 = AcpiUtReadUint16(&Descriptor->UartSerialBus.TypeSpecificFlags);
+            RsSetFlagBits16 (&Tmp16, InitializerOp, 7, 0);
             RsCreateBitField (InitializerOp, ACPI_RESTAG_ENDIANNESS,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 7);
+	    Descriptor->UartSerialBus.TypeSpecificFlags = AcpiUtReadUint16(&Tmp16);;
             break;
 
         case 5: /* Parity [BYTE] (_PAR) */
@@ -1190,21 +1267,25 @@ RsDoUartSerialBusDescriptor (
 
         case 6: /* Flow Control [Flags] (_FLC) */
 
-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 0, 0);
+	    Tmp16 = AcpiUtReadUint16(&Descriptor->UartSerialBus.TypeSpecificFlags);
+            RsSetFlagBits16 (&Tmp16, InitializerOp, 0, 0);
             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_FLOWCONTROL,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 0, 2);
+	    Descriptor->UartSerialBus.TypeSpecificFlags = AcpiUtReadUint16(&Tmp16);;
             break;
 
         case 7: /* Rx Buffer Size [WORD] (_RXL) */
 
-            Descriptor->UartSerialBus.RxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer;
+	    Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->UartSerialBus.RxFifoSize = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH_RX,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.RxFifoSize));
             break;
 
         case 8: /* Tx Buffer Size [WORD] (_TXL) */
 
-            Descriptor->UartSerialBus.TxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer;
+	    Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->UartSerialBus.TxFifoSize = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH_TX,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TxFifoSize));
             break;
@@ -1308,6 +1389,7 @@ RsDoPinFunctionDescriptor (
     UINT32                  CurrentByteOffset;
     UINT32                  PinCount = 0;
     UINT32                  i;
+    UINT16                  Tmp16;
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
     CurrentByteOffset = Info->CurrentByteOffset;
@@ -1331,7 +1413,7 @@ RsDoPinFunctionDescriptor (
         sizeof (AML_RESOURCE_LARGE_HEADER));
 
     Descriptor = Rnode->Buffer;
-    Descriptor->PinFunction.ResourceLength = DescriptorSize;
+    Descriptor->PinFunction.ResourceLength = AcpiUtReadUint16(&DescriptorSize);
     Descriptor->PinFunction.DescriptorType = ACPI_RESOURCE_NAME_PIN_FUNCTION;
     Descriptor->PinFunction.RevisionId = AML_RESOURCE_PIN_FUNCTION_REVISION;
 
@@ -1371,7 +1453,8 @@ RsDoPinFunctionDescriptor (
 
         case 2: /* Function Number [WORD] (_FUN) */
 
-            Descriptor->PinFunction.FunctionNumber = (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->PinFunction.FunctionNumber = AcpiUtReadUint16(&Tmp16);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_FUNCTION,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (PinFunction.FunctionNumber));
             break;
@@ -1419,6 +1502,12 @@ RsDoPinFunctionDescriptor (
             {
                 Descriptor->PinFunction.VendorLength = VendorLength;
             }
+            Tmp16 = (UINT16) ACPI_PTR_DIFF (VendorData, Descriptor);
+            Descriptor->PinFunction.VendorOffset = AcpiUtReadUint16(&Tmp16);
+            
+            Tmp16 = Descriptor->PinFunction.VendorLength;
+            Descriptor->PinFunction.VendorLength = AcpiUtReadUint16(&Tmp16);
+
             break;
 
         default:
@@ -1430,7 +1519,8 @@ RsDoPinFunctionDescriptor (
              *  (implies resource source must immediately follow the pin list.)
              *  Name: _PIN
              */
-            *PinList = (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            *PinList = AcpiUtReadUint16(&Tmp16);
             PinList++;
             PinCount++;
 
@@ -1461,6 +1551,13 @@ RsDoPinFunctionDescriptor (
         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
     }
 
+    /* correct the endian-ness of the values */
+    Tmp16 = Descriptor->PinFunction.PinTableOffset;
+    Descriptor->PinFunction.PinTableOffset = AcpiUtReadUint16(&Tmp16);
+
+    Tmp16 = Descriptor->PinFunction.ResSourceOffset;
+    Descriptor->PinFunction.ResSourceOffset = AcpiUtReadUint16(&Tmp16);
+
     return (Rnode);
 }
 
@@ -1494,6 +1591,8 @@ RsDoPinConfigDescriptor (
     UINT32                  CurrentByteOffset;
     UINT32                  PinCount = 0;
     UINT32                  i;
+    UINT16                  Tmp16;
+    UINT32                  Tmp32;
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
     CurrentByteOffset = Info->CurrentByteOffset;
@@ -1517,7 +1616,7 @@ RsDoPinConfigDescriptor (
         sizeof (AML_RESOURCE_LARGE_HEADER));
 
     Descriptor = Rnode->Buffer;
-    Descriptor->PinConfig.ResourceLength = DescriptorSize;
+    Descriptor->PinConfig.ResourceLength = AcpiUtReadUint16(&DescriptorSize);
     Descriptor->PinConfig.DescriptorType = ACPI_RESOURCE_NAME_PIN_CONFIG;
     Descriptor->PinConfig.RevisionId = AML_RESOURCE_PIN_CONFIG_REVISION;
 
@@ -1571,7 +1670,8 @@ RsDoPinConfigDescriptor (
 
         case 2: /* Pin Config Value [DWORD] (_VAL) */
 
-            Descriptor->PinConfig.PinConfigValue = (UINT32) InitializerOp->Asl.Value.Integer;
+            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->PinConfig.PinConfigValue = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_PINCONFIG_VALUE,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (PinConfig.PinConfigValue));
             break;
@@ -1630,7 +1730,8 @@ RsDoPinConfigDescriptor (
              *  (implies resource source must immediately follow the pin list.)
              *  Name: _PIN
              */
-            *PinList = (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            *PinList = AcpiUtReadUint16(&Tmp16);
             PinList++;
             PinCount++;
 
@@ -1661,6 +1762,16 @@ RsDoPinConfigDescriptor (
         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
     }
 
+    /* correct the endianness if needed */
+    Tmp16 = Descriptor->PinConfig.PinTableOffset;
+    Descriptor->PinConfig.PinTableOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->PinConfig.ResSourceOffset;
+    Descriptor->PinConfig.ResSourceOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->PinConfig.VendorOffset;
+    Descriptor->PinConfig.VendorOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->PinConfig.VendorLength;
+    Descriptor->PinConfig.VendorLength = AcpiUtReadUint16(&Tmp16);
+
     return (Rnode);
 }
 
@@ -1694,6 +1805,7 @@ RsDoPinGroupDescriptor (
     UINT32                  CurrentByteOffset;
     UINT32                  PinCount = 0;
     UINT32                  i;
+    UINT16                  Tmp16;
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
     CurrentByteOffset = Info->CurrentByteOffset;
@@ -1717,7 +1829,7 @@ RsDoPinGroupDescriptor (
         sizeof (AML_RESOURCE_LARGE_HEADER));
 
     Descriptor = Rnode->Buffer;
-    Descriptor->PinGroup.ResourceLength = DescriptorSize;
+    Descriptor->PinGroup.ResourceLength = AcpiUtReadUint16(&DescriptorSize);
     Descriptor->PinGroup.DescriptorType = ACPI_RESOURCE_NAME_PIN_GROUP;
     Descriptor->PinGroup.RevisionId = AML_RESOURCE_PIN_GROUP_REVISION;
 
@@ -1784,7 +1896,8 @@ RsDoPinGroupDescriptor (
              *  (implies resource source must immediately follow the pin list.)
              *  Name: _PIN
              */
-            *PinList = (UINT16) InitializerOp->Asl.Value.Integer;
+	    Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            *PinList = AcpiUtReadUint16(&Tmp16);
             PinList++;
             PinCount++;
 
@@ -1815,6 +1928,16 @@ RsDoPinGroupDescriptor (
         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
     }
 
+    /* correct enddianness as needed */
+    Tmp16 = Descriptor->PinGroup.PinTableOffset;
+    Descriptor->PinGroup.PinTableOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->PinGroup.LabelOffset;
+    Descriptor->PinGroup.LabelOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->PinGroup.VendorOffset;
+    Descriptor->PinGroup.VendorOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->PinGroup.VendorLength;
+    Descriptor->PinGroup.VendorLength = AcpiUtReadUint16(&Tmp16);
+
     return (Rnode);
 }
 
@@ -1847,6 +1970,7 @@ RsDoPinGroupFunctionDescriptor (
     UINT16                  DescriptorSize;
     UINT32                  CurrentByteOffset;
     UINT32                  i;
+    UINT16                  Tmp16;
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
     CurrentByteOffset = Info->CurrentByteOffset;
@@ -1870,7 +1994,7 @@ RsDoPinGroupFunctionDescriptor (
         sizeof (AML_RESOURCE_LARGE_HEADER));
 
     Descriptor = Rnode->Buffer;
-    Descriptor->PinGroupFunction.ResourceLength = DescriptorSize;
+    Descriptor->PinGroupFunction.ResourceLength = AcpiUtReadUint16(&DescriptorSize);
     Descriptor->PinGroupFunction.DescriptorType = ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION;
     Descriptor->PinGroupFunction.RevisionId = AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION;
 
@@ -1902,7 +2026,8 @@ RsDoPinGroupFunctionDescriptor (
 
         case 1: /* Function Number [WORD] */
 
-            Descriptor->PinGroupFunction.FunctionNumber = (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->PinGroupFunction.FunctionNumber = AcpiUtReadUint16(&Tmp16);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_FUNCTION,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupFunction.FunctionNumber));
             break;
@@ -1961,6 +2086,16 @@ RsDoPinGroupFunctionDescriptor (
         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
     }
 
+    /* correct enddianness as needed */
+    Tmp16 = Descriptor->PinGroupFunction.ResSourceOffset;
+    Descriptor->PinGroupFunction.ResSourceOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->PinGroupFunction.ResSourceLabelOffset;
+    Descriptor->PinGroupFunction.ResSourceLabelOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->PinGroupFunction.VendorOffset;
+    Descriptor->PinGroupFunction.VendorOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->PinGroupFunction.VendorLength;
+    Descriptor->PinGroupFunction.VendorLength = AcpiUtReadUint16(&Tmp16);
+
     return (Rnode);
 }
 
@@ -1993,6 +2128,8 @@ RsDoPinGroupConfigDescriptor (
     UINT16                  DescriptorSize;
     UINT32                  CurrentByteOffset;
     UINT32                  i;
+    UINT16                  Tmp16;
+    UINT32                  Tmp32;
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
     CurrentByteOffset = Info->CurrentByteOffset;
@@ -2016,7 +2153,7 @@ RsDoPinGroupConfigDescriptor (
         sizeof (AML_RESOURCE_LARGE_HEADER));
 
     Descriptor = Rnode->Buffer;
-    Descriptor->PinGroupConfig.ResourceLength = DescriptorSize;
+    Descriptor->PinGroupConfig.ResourceLength = AcpiUtReadUint16(&DescriptorSize);
     Descriptor->PinGroupConfig.DescriptorType = ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG;
     Descriptor->PinGroupConfig.RevisionId = AML_RESOURCE_PIN_GROUP_CONFIG_REVISION;
 
@@ -2069,7 +2206,8 @@ RsDoPinGroupConfigDescriptor (
 
         case 2: /* Pin Config Value [DWORD] (_VAL) */
 
-            Descriptor->PinGroupConfig.PinConfigValue = (UINT32) InitializerOp->Asl.Value.Integer;
+            Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer;
+            Descriptor->PinGroupConfig.PinConfigValue = AcpiUtReadUint32(&Tmp32);
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_PINCONFIG_VALUE,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupConfig.PinConfigValue));
             break;
@@ -2130,5 +2268,15 @@ RsDoPinGroupConfigDescriptor (
         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
     }
 
+    /* correct enddianness as needed */
+    Tmp16 = Descriptor->PinGroupConfig.ResSourceOffset;
+    Descriptor->PinGroupConfig.ResSourceOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->PinGroupConfig.ResSourceLabelOffset;
+    Descriptor->PinGroupConfig.ResSourceLabelOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->PinGroupConfig.VendorOffset;
+    Descriptor->PinGroupConfig.VendorOffset = AcpiUtReadUint16(&Tmp16);
+    Tmp16 = Descriptor->PinGroupConfig.VendorLength;
+    Descriptor->PinGroupConfig.VendorLength = AcpiUtReadUint16(&Tmp16);
+
     return (Rnode);
 }
Index: acpica-unix2-20200925/source/compiler/aslrestype2w.c
===================================================================
--- acpica-unix2-20200925.orig/source/compiler/aslrestype2w.c
+++ acpica-unix2-20200925/source/compiler/aslrestype2w.c
@@ -84,6 +84,7 @@ RsDoWordIoDescriptor (
     UINT32                  CurrentByteOffset;
     UINT32                  i;
     BOOLEAN                 ResSourceIndex = FALSE;
+    UINT16                  Tmp16;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -147,7 +148,8 @@ RsDoWordIoDescriptor (
 
         case 5: /* Address Granularity */
 
-            Descriptor->Address16.Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
+	    Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address16.Granularity = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
             GranOp = InitializerOp;
@@ -155,7 +157,8 @@ RsDoWordIoDescriptor (
 
         case 6: /* Address Min */
 
-            Descriptor->Address16.Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
+	    Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address16.Minimum = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
             MinOp = InitializerOp;
@@ -163,7 +166,8 @@ RsDoWordIoDescriptor (
 
         case 7: /* Address Max */
 
-            Descriptor->Address16.Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
+	    Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address16.Maximum = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
             MaxOp = InitializerOp;
@@ -171,14 +175,16 @@ RsDoWordIoDescriptor (
 
         case 8: /* Translation Offset */
 
-            Descriptor->Address16.TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
+	    Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address16.TranslationOffset = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
             break;
 
         case 9: /* Address Length */
 
-            Descriptor->Address16.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
+	    Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address16.AddressLength = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
                  CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
             LengthOp = InitializerOp;
@@ -263,13 +269,17 @@ RsDoWordIoDescriptor (
     /* Validate the Min/Max/Len/Gran values */
 
     RsLargeAddressCheck (
-        (UINT64) Descriptor->Address16.Minimum,
-        (UINT64) Descriptor->Address16.Maximum,
-        (UINT64) Descriptor->Address16.AddressLength,
-        (UINT64) Descriptor->Address16.Granularity,
+        (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Minimum),
+        (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Maximum),
+        (UINT64) AcpiUtReadUint16(&Descriptor->Address16.AddressLength),
+        (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Granularity),
         Descriptor->Address16.Flags,
         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
 
+    /* correct enddianness */
+    Tmp16 = Descriptor->Address16.ResourceLength;
+    Descriptor->Address16.ResourceLength = AcpiUtReadUint16(&Tmp16);
+
     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
         OptionIndex + StringLength;
     return (Rnode);
@@ -305,6 +315,7 @@ RsDoWordBusNumberDescriptor (
     UINT32                  CurrentByteOffset;
     UINT32                  i;
     BOOLEAN                 ResSourceIndex = FALSE;
+    UINT16                  Tmp16;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -361,8 +372,8 @@ RsDoWordBusNumberDescriptor (
 
         case 4: /* Address Granularity */
 
-            Descriptor->Address16.Granularity =
-                (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address16.Granularity = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
             GranOp = InitializerOp;
@@ -370,8 +381,8 @@ RsDoWordBusNumberDescriptor (
 
         case 5: /* Min Address */
 
-            Descriptor->Address16.Minimum =
-                (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address16.Minimum = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
             MinOp = InitializerOp;
@@ -379,8 +390,8 @@ RsDoWordBusNumberDescriptor (
 
         case 6: /* Max Address */
 
-            Descriptor->Address16.Maximum =
-                (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address16.Maximum = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
             MaxOp = InitializerOp;
@@ -388,16 +399,16 @@ RsDoWordBusNumberDescriptor (
 
         case 7: /* Translation Offset */
 
-            Descriptor->Address16.TranslationOffset =
-                (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address16.TranslationOffset = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
             break;
 
         case 8: /* Address Length */
 
-            Descriptor->Address16.AddressLength =
-                (UINT16) InitializerOp->Asl.Value.Integer;
+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address16.AddressLength = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
                  CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
             LengthOp = InitializerOp;
@@ -468,13 +479,17 @@ RsDoWordBusNumberDescriptor (
     /* Validate the Min/Max/Len/Gran values */
 
     RsLargeAddressCheck (
-        (UINT64) Descriptor->Address16.Minimum,
-        (UINT64) Descriptor->Address16.Maximum,
-        (UINT64) Descriptor->Address16.AddressLength,
-        (UINT64) Descriptor->Address16.Granularity,
+        (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Minimum),
+        (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Maximum),
+        (UINT64) AcpiUtReadUint16(&Descriptor->Address16.AddressLength),
+        (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Granularity),
         Descriptor->Address16.Flags,
         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
 
+    /* correct enddianness */
+    Tmp16 = Descriptor->Address16.ResourceLength;
+    Descriptor->Address16.ResourceLength = AcpiUtReadUint16(&Tmp16);
+
     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
         OptionIndex + StringLength;
     return (Rnode);
@@ -510,6 +525,7 @@ RsDoWordSpaceDescriptor (
     UINT32                  CurrentByteOffset;
     UINT32                  i;
     BOOLEAN                 ResSourceIndex = FALSE;
+    UINT16                  Tmp16;
 
 
     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
@@ -577,8 +593,8 @@ RsDoWordSpaceDescriptor (
 
         case 6: /* Address Granularity */
 
-            Descriptor->Address16.Granularity =
-                (UINT16) InitializerOp->Asl.Value.Integer;
+	    Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address16.Granularity = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
             GranOp = InitializerOp;
@@ -586,8 +602,8 @@ RsDoWordSpaceDescriptor (
 
         case 7: /* Min Address */
 
-            Descriptor->Address16.Minimum =
-                (UINT16) InitializerOp->Asl.Value.Integer;
+	    Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address16.Minimum = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
             MinOp = InitializerOp;
@@ -595,8 +611,8 @@ RsDoWordSpaceDescriptor (
 
         case 8: /* Max Address */
 
-            Descriptor->Address16.Maximum =
-                (UINT16) InitializerOp->Asl.Value.Integer;
+	    Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address16.Maximum = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
             MaxOp = InitializerOp;
@@ -604,16 +620,16 @@ RsDoWordSpaceDescriptor (
 
         case 9: /* Translation Offset */
 
-            Descriptor->Address16.TranslationOffset =
-                (UINT16) InitializerOp->Asl.Value.Integer;
+	    Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address16.TranslationOffset = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
             break;
 
         case 10: /* Address Length */
 
-            Descriptor->Address16.AddressLength =
-                (UINT16) InitializerOp->Asl.Value.Integer;
+	    Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
+            Descriptor->Address16.AddressLength = AcpiUtReadUint16(&Tmp16);
             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
             LengthOp = InitializerOp;
@@ -684,13 +700,17 @@ RsDoWordSpaceDescriptor (
     /* Validate the Min/Max/Len/Gran values */
 
     RsLargeAddressCheck (
-        (UINT64) Descriptor->Address16.Minimum,
-        (UINT64) Descriptor->Address16.Maximum,
-        (UINT64) Descriptor->Address16.AddressLength,
-        (UINT64) Descriptor->Address16.Granularity,
+        (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Minimum),
+        (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Maximum),
+        (UINT64) AcpiUtReadUint16(&Descriptor->Address16.AddressLength),
+        (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Granularity),
         Descriptor->Address16.Flags,
         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
 
+    /* correct enddianness */
+    Tmp16 = Descriptor->Address16.ResourceLength;
+    Descriptor->Address16.ResourceLength = AcpiUtReadUint16(&Tmp16);
+
     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
         OptionIndex + StringLength;
     return (Rnode);
Index: acpica-unix2-20200925/source/components/disassembler/dmbuffer.c
===================================================================
--- acpica-unix2-20200925.orig/source/components/disassembler/dmbuffer.c
+++ acpica-unix2-20200925/source/components/disassembler/dmbuffer.c
@@ -204,7 +204,7 @@ AcpiDmByteList (
 
 
     ByteData = Op->Named.Data;
-    ByteCount = (UINT32) Op->Common.Value.Integer;
+    ByteCount = (UINT32) Op->Common.Value.Size;
 
     /*
      * The byte list belongs to a buffer, and can be produced by either
@@ -308,7 +308,7 @@ AcpiDmIsUuidBuffer (
     /* Extract the byte list info */
 
     ByteData = NextOp->Named.Data;
-    ByteCount = (UINT32) NextOp->Common.Value.Integer;
+    ByteCount = (UINT32) NextOp->Common.Value.Size;
 
     /* Byte count must be exactly 16 */
 
@@ -436,7 +436,7 @@ AcpiDmIsUnicodeBuffer (
     /* Extract the byte list info */
 
     ByteData = NextOp->Named.Data;
-    ByteCount = (UINT32) NextOp->Common.Value.Integer;
+    ByteCount = (UINT32) NextOp->Common.Value.Size;
     WordCount = ACPI_DIV_2 (ByteCount);
 
     /*
@@ -878,14 +878,14 @@ AcpiDmUnicode (
     /* Extract the buffer info as a WORD buffer */
 
     WordData = ACPI_CAST_PTR (UINT16, Op->Named.Data);
-    WordCount = ACPI_DIV_2 (((UINT32) Op->Common.Value.Integer));
+    WordCount = ACPI_DIV_2 (((UINT32) Op->Common.Value.Size));
 
     /* Write every other byte as an ASCII character */
 
     AcpiOsPrintf ("\"");
     for (i = 0; i < (WordCount - 1); i++)
     {
-        OutputValue = (int) WordData[i];
+        OutputValue = (int) AcpiUtReadUint16(&WordData[i]);
 
         /* Handle values that must be escaped */
 
Index: acpica-unix2-20200925/source/components/disassembler/dmopcode.c
===================================================================
--- acpica-unix2-20200925.orig/source/components/disassembler/dmopcode.c
+++ acpica-unix2-20200925/source/components/disassembler/dmopcode.c
@@ -882,23 +882,23 @@ AcpiDmDisassembleOneOp (
 
     case AML_INT_NAMEDFIELD_OP:
 
-        Length = AcpiDmDumpName (Op->Named.Name);
+        Length = AcpiDmDumpName (AcpiUtReadUint32(&Op->Named.Name));
 
         AcpiOsPrintf (",");
         ASL_CV_PRINT_ONE_COMMENT (Op, AML_NAMECOMMENT, NULL, 0);
         AcpiOsPrintf ("%*.s  %u", (unsigned) (5 - Length), " ",
-            (UINT32) Op->Common.Value.Integer);
+            (UINT32) Op->Common.Value.Size);
 
         AcpiDmCommaIfFieldMember (Op);
 
-        Info->BitOffset += (UINT32) Op->Common.Value.Integer;
+        Info->BitOffset += (UINT32) Op->Common.Value.Size;
         break;
 
     case AML_INT_RESERVEDFIELD_OP:
 
         /* Offset() -- Must account for previous offsets */
 
-        Offset = (UINT32) Op->Common.Value.Integer;
+        Offset = (UINT32) Op->Common.Value.Size;
         Info->BitOffset += Offset;
 
         if (Info->BitOffset % 8 == 0)
Index: acpica-unix2-20200925/source/components/disassembler/dmresrc.c
===================================================================
--- acpica-unix2-20200925.orig/source/components/disassembler/dmresrc.c
+++ acpica-unix2-20200925/source/components/disassembler/dmresrc.c
@@ -417,7 +417,7 @@ AcpiDmIsResourceTemplate (
         return (AE_TYPE);
     }
 
-    DeclaredBufferLength = NextOp->Common.Value.Size;
+    DeclaredBufferLength = NextOp->Common.Value.Integer;
 
     /* Get the length of the raw initialization byte list */
 
Index: acpica-unix2-20200925/source/components/disassembler/dmresrcl.c
===================================================================
--- acpica-unix2-20200925.orig/source/components/disassembler/dmresrcl.c
+++ acpica-unix2-20200925/source/components/disassembler/dmresrcl.c
@@ -141,6 +141,8 @@ AcpiDmMemoryFields (
     UINT32                  Level)
 {
     UINT32                  i;
+    UINT16                  Tmp16;
+    UINT32                  Tmp32;
 
 
     for (i = 0; i < 4; i++)
@@ -151,14 +153,16 @@ AcpiDmMemoryFields (
         {
         case 16:
 
-            AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
-                AcpiDmMemoryNames[i]);
+	    Tmp16 = ACPI_CAST_PTR (UINT16, Source)[i];
+            AcpiDmDumpInteger16 (AcpiUtReadUint16(&Tmp16),
+			         AcpiDmMemoryNames[i]);
             break;
 
         case 32:
 
-            AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
-                AcpiDmMemoryNames[i]);
+	    Tmp32 = ACPI_CAST_PTR (UINT32, Source)[i];
+            AcpiDmDumpInteger32 (AcpiUtReadUint32(&Tmp32),
+			         AcpiDmMemoryNames[i]);
             break;
 
         default:
@@ -190,6 +194,9 @@ AcpiDmAddressFields (
     UINT32                  Level)
 {
     UINT32                  i;
+    UINT16                  Tmp16;
+    UINT32                  Tmp32;
+    UINT64                  Tmp64;
 
 
     AcpiOsPrintf ("\n");
@@ -202,20 +209,23 @@ AcpiDmAddressFields (
         {
         case 16:
 
-            AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
-                AcpiDmAddressNames[i]);
+	    Tmp16 = ACPI_CAST_PTR (UINT16, Source)[i];
+            AcpiDmDumpInteger16 (AcpiUtReadUint16(&Tmp16),
+                		 AcpiDmAddressNames[i]);
             break;
 
         case 32:
 
-            AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
-                AcpiDmAddressNames[i]);
+	    Tmp32 = ACPI_CAST_PTR (UINT32, Source)[i];
+            AcpiDmDumpInteger32 (AcpiUtReadUint32(&Tmp32),
+                		 AcpiDmAddressNames[i]);
             break;
 
         case 64:
 
-            AcpiDmDumpInteger64 (ACPI_CAST_PTR (UINT64, Source)[i],
-                AcpiDmAddressNames[i]);
+	    Tmp64 = ACPI_CAST_PTR (UINT64, Source)[i];
+            AcpiDmDumpInteger64 (AcpiUtReadUint64(&Tmp64),
+                		 AcpiDmAddressNames[i]);
             break;
 
         default:
@@ -749,7 +759,7 @@ AcpiDmExtendedDescriptor (
     /* Extra field for this descriptor only */
 
     AcpiDmIndent (Level + 1);
-    AcpiDmDumpInteger64 (Resource->ExtAddress64.TypeSpecific,
+    AcpiDmDumpInteger64 (AcpiUtReadUint64(&Resource->ExtAddress64.TypeSpecific),
         "Type-Specific Attributes");
 
     /* Insert a descriptor name */
@@ -876,11 +886,11 @@ AcpiDmFixedMemory32Descriptor (
         AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (Resource->FixedMemory32.Flags)]);
 
     AcpiDmIndent (Level + 1);
-    AcpiDmDumpInteger32 (Resource->FixedMemory32.Address,
+    AcpiDmDumpInteger32 (AcpiUtReadUint32(&Resource->FixedMemory32.Address),
         "Address Base");
 
     AcpiDmIndent (Level + 1);
-    AcpiDmDumpInteger32 (Resource->FixedMemory32.AddressLength,
+    AcpiDmDumpInteger32 (AcpiUtReadUint32(&Resource->FixedMemory32.AddressLength),
         "Address Length");
 
     /* Insert a descriptor name */
@@ -926,7 +936,8 @@ AcpiDmGenericRegisterDescriptor (
     AcpiDmDumpInteger8 (Resource->GenericReg.BitOffset, "Bit Offset");
 
     AcpiDmIndent (Level + 1);
-    AcpiDmDumpInteger64 (Resource->GenericReg.Address, "Address");
+    AcpiDmDumpInteger64 (AcpiUtReadUint64(&Resource->GenericReg.Address),
+		         "Address");
 
     /* Optional field for ACPI 3.0 */
 
@@ -989,7 +1000,7 @@ AcpiDmInterruptDescriptor (
     AcpiDmResourceSource (Resource,
         sizeof (AML_RESOURCE_EXTENDED_IRQ) +
             ((UINT32) Resource->ExtendedIrq.InterruptCount - 1) * sizeof (UINT32),
-        Resource->ExtendedIrq.ResourceLength);
+        AcpiUtReadUint16(&Resource->ExtendedIrq.ResourceLength));
 
     /* Insert a descriptor name */
 
@@ -1004,7 +1015,7 @@ AcpiDmInterruptDescriptor (
     {
         AcpiDmIndent (Level + 1);
         AcpiOsPrintf ("0x%8.8X,\n",
-            (UINT32) Resource->ExtendedIrq.Interrupts[i]);
+            AcpiUtReadUint32(&Resource->ExtendedIrq.Interrupts[i]));
     }
 
     AcpiDmIndent (Level);
Index: acpica-unix2-20200925/source/components/disassembler/dmresrcl2.c
===================================================================
--- acpica-unix2-20200925.orig/source/components/disassembler/dmresrcl2.c
+++ acpica-unix2-20200925/source/components/disassembler/dmresrcl2.c
@@ -191,22 +191,27 @@ AcpiDmGpioCommon (
     char                    *DeviceName = NULL;
     UINT32                  PinCount;
     UINT32                  i;
+    UINT16                  ResSourceOffset;
+    UINT16                  VendorOffset;
+    UINT16                  VendorLength;
+    UINT16                  Tmp16;
 
 
     /* ResourceSource, ResourceSourceIndex, ResourceType */
 
     AcpiDmIndent (Level + 1);
-    if (Resource->Gpio.ResSourceOffset)
+    ResSourceOffset = AcpiUtReadUint16(&Resource->Gpio.ResSourceOffset);
+    if (ResSourceOffset)
     {
         DeviceName = ACPI_ADD_PTR (char,
-            Resource, Resource->Gpio.ResSourceOffset),
+            Resource, ResSourceOffset),
         AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
     }
 
     AcpiOsPrintf (", ");
     AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex);
-    AcpiOsPrintf ("%s, ",
-        AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]);
+    Tmp16 = AcpiUtReadUint16(&Resource->Gpio.Flags);
+    AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Tmp16)]);
 
     /* Insert a descriptor name */
 
@@ -215,15 +220,15 @@ AcpiDmGpioCommon (
 
     /* Dump the vendor data */
 
-    if (Resource->Gpio.VendorOffset)
+    VendorOffset = AcpiUtReadUint16(&Resource->Gpio.VendorOffset);
+    VendorLength = AcpiUtReadUint16(&Resource->Gpio.VendorLength);
+    if (VendorOffset)
     {
         AcpiOsPrintf ("\n");
         AcpiDmIndent (Level + 1);
-        VendorData = ACPI_ADD_PTR (UINT8, Resource,
-            Resource->Gpio.VendorOffset);
+        VendorData = ACPI_ADD_PTR (UINT8, Resource, VendorOffset);
 
-        AcpiDmDumpRawDataBuffer (VendorData,
-            Resource->Gpio.VendorLength, Level);
+        AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level);
     }
 
     AcpiOsPrintf (")\n");
@@ -233,17 +238,17 @@ AcpiDmGpioCommon (
     AcpiDmIndent (Level + 1);
     AcpiOsPrintf ("{   // Pin list\n");
 
-    PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset -
-        Resource->Gpio.PinTableOffset)) /
-        sizeof (UINT16);
+    PinCount = (UINT32) AcpiUtReadUint16(&Resource->Gpio.ResSourceOffset);
+    PinCount -= (UINT32) AcpiUtReadUint16(&Resource->Gpio.PinTableOffset);
+    PinCount /= sizeof (UINT16);
 
     PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
-        Resource->Gpio.PinTableOffset);
+        AcpiUtReadUint16(&Resource->Gpio.PinTableOffset));
 
     for (i = 0; i < PinCount; i++)
     {
         AcpiDmIndent (Level + 2);
-        AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
+        AcpiOsPrintf ("0x%4.4X%s\n", AcpiUtReadUint16(&(PinList[i])),
             ((i + 1) < PinCount) ? "," : "");
     }
 
@@ -277,16 +282,18 @@ AcpiDmGpioIntDescriptor (
     UINT32                  Length,
     UINT32                  Level)
 {
+    UINT16                  Tmp16;
 
     /* Dump the GpioInt-specific portion of the descriptor */
 
     /* EdgeLevel, ActiveLevel, Shared */
 
     AcpiDmIndent (Level);
+    Tmp16 = AcpiUtReadUint16(&Resource->Gpio.IntFlags);
     AcpiOsPrintf ("GpioInt (%s, %s, %s, ",
-        AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.IntFlags)],
-        AcpiGbl_LlDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 1)],
-        AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
+        AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Tmp16)],
+        AcpiGbl_LlDecode [ACPI_EXTRACT_2BIT_FLAG (Tmp16, 1)],
+        AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Tmp16, 3)]);
 
     /* PinConfig, DebounceTimeout */
 
@@ -299,7 +306,8 @@ AcpiDmGpioIntDescriptor (
     {
         AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
     }
-    AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout);
+    AcpiOsPrintf ("0x%4.4X,\n",
+		  AcpiUtReadUint16(&Resource->Gpio.DebounceTimeout));
 
     /* Dump the GpioInt/GpioIo common portion of the descriptor */
 
@@ -329,14 +337,16 @@ AcpiDmGpioIoDescriptor (
     UINT32                  Length,
     UINT32                  Level)
 {
+    UINT16                  Tmp16;
 
     /* Dump the GpioIo-specific portion of the descriptor */
 
     /* Shared, PinConfig */
 
     AcpiDmIndent (Level);
+    Tmp16 = AcpiUtReadUint16(&Resource->Gpio.IntFlags);
     AcpiOsPrintf ("GpioIo (%s, ",
-        AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
+        AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Tmp16, 3)]);
 
     if (Resource->Gpio.PinConfig <= 3)
     {
@@ -350,10 +360,10 @@ AcpiDmGpioIoDescriptor (
 
     /* DebounceTimeout, DriveStrength, IoRestriction */
 
-    AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout);
-    AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength);
-    AcpiOsPrintf ("%s,\n",
-        AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]);
+    AcpiOsPrintf ("0x%4.4X, ", AcpiUtReadUint16(&Resource->Gpio.DebounceTimeout));
+    AcpiOsPrintf ("0x%4.4X, ", AcpiUtReadUint16(&Resource->Gpio.DriveStrength));
+    Tmp16 = AcpiUtReadUint16(&Resource->Gpio.IntFlags);
+    AcpiOsPrintf ("%s,\n", AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Tmp16)]);
 
     /* Dump the GpioInt/GpioIo common portion of the descriptor */
 
@@ -434,6 +444,9 @@ AcpiDmPinFunctionDescriptor (
     char                    *DeviceName = NULL;
     UINT32                  PinCount;
     UINT32                  i;
+    UINT16                  ResSourceOffset;
+    UINT16                  VendorOffset;
+    UINT16                  VendorLength;
 
     AcpiDmIndent (Level);
     AcpiOsPrintf ("PinFunction (%s, ",
@@ -451,12 +464,14 @@ AcpiDmPinFunctionDescriptor (
 
     /* FunctionNumber */
 
-    AcpiOsPrintf ("0x%4.4X, ", Resource->PinFunction.FunctionNumber);
+    AcpiOsPrintf ("0x%4.4X, ", 
+		  AcpiUtReadUint16(&Resource->PinFunction.FunctionNumber));
 
-    if (Resource->PinFunction.ResSourceOffset)
+    ResSourceOffset = AcpiUtReadUint16(&Resource->PinFunction.ResSourceOffset);
+    if (ResSourceOffset)
     {
         DeviceName = ACPI_ADD_PTR (char,
-            Resource, Resource->PinFunction.ResSourceOffset),
+            Resource, ResSourceOffset),
         AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
     }
 
@@ -476,15 +491,15 @@ AcpiDmPinFunctionDescriptor (
 
     /* Dump the vendor data */
 
-    if (Resource->PinFunction.VendorLength)
+    VendorOffset = AcpiUtReadUint16(&Resource->PinFunction.VendorOffset);
+    VendorLength = AcpiUtReadUint16(&Resource->PinFunction.VendorLength);
+    if (VendorLength)
     {
         AcpiOsPrintf ("\n");
         AcpiDmIndent (Level + 1);
-        VendorData = ACPI_ADD_PTR (UINT8, Resource,
-            Resource->PinFunction.VendorOffset);
+        VendorData = ACPI_ADD_PTR (UINT8, Resource, VendorOffset);
 
-        AcpiDmDumpRawDataBuffer (VendorData,
-            Resource->PinFunction.VendorLength, Level);
+        AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level);
     }
 
     AcpiOsPrintf (")\n");
@@ -495,17 +510,17 @@ AcpiDmPinFunctionDescriptor (
 
     AcpiOsPrintf ("{   // Pin list\n");
 
-    PinCount = ((UINT32) (Resource->PinFunction.ResSourceOffset -
-        Resource->PinFunction.PinTableOffset)) /
-        sizeof (UINT16);
+    PinCount = AcpiUtReadUint16(&Resource->PinFunction.ResSourceOffset);
+    PinCount -= AcpiUtReadUint16(&Resource->PinFunction.PinTableOffset);
+    PinCount /= sizeof (UINT16);
 
     PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
-        Resource->PinFunction.PinTableOffset);
+        AcpiUtReadUint16(&Resource->PinFunction.PinTableOffset));
 
     for (i = 0; i < PinCount; i++)
     {
         AcpiDmIndent (Level + 2);
-        AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
+        AcpiOsPrintf ("0x%4.4X%s\n", AcpiUtReadUint16(&(PinList[i])),
             ((i + 1) < PinCount) ? "," : "");
     }
 
@@ -541,7 +556,8 @@ AcpiDmDumpSerialBusVendorData (
     {
     case AML_RESOURCE_I2C_SERIALBUSTYPE:
 
-        VendorLength = Resource->CommonSerialBus.TypeDataLength -
+        VendorLength = 
+	    AcpiUtReadUint16(&Resource->CommonSerialBus.TypeDataLength) -
             AML_RESOURCE_I2C_MIN_DATA_LEN;
 
         VendorData = ACPI_ADD_PTR (UINT8, Resource,
@@ -550,7 +566,8 @@ AcpiDmDumpSerialBusVendorData (
 
     case AML_RESOURCE_SPI_SERIALBUSTYPE:
 
-        VendorLength = Resource->CommonSerialBus.TypeDataLength -
+        VendorLength = 
+	    AcpiUtReadUint16(&Resource->CommonSerialBus.TypeDataLength) -
             AML_RESOURCE_SPI_MIN_DATA_LEN;
 
         VendorData = ACPI_ADD_PTR (UINT8, Resource,
@@ -559,7 +576,8 @@ AcpiDmDumpSerialBusVendorData (
 
     case AML_RESOURCE_UART_SERIALBUSTYPE:
 
-        VendorLength = Resource->CommonSerialBus.TypeDataLength -
+        VendorLength = 
+	    AcpiUtReadUint16(&Resource->CommonSerialBus.TypeDataLength) -
             AML_RESOURCE_UART_MIN_DATA_LEN;
 
         VendorData = ACPI_ADD_PTR (UINT8, Resource,
@@ -607,9 +625,9 @@ AcpiDmI2cSerialBusDescriptor (
 
     AcpiDmIndent (Level);
     AcpiOsPrintf ("I2cSerialBusV2 (0x%4.4X, %s, 0x%8.8X,\n",
-        Resource->I2cSerialBus.SlaveAddress,
+        AcpiUtReadUint16(&Resource->I2cSerialBus.SlaveAddress),
         AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)],
-        Resource->I2cSerialBus.ConnectionSpeed);
+        AcpiUtReadUint32(&Resource->I2cSerialBus.ConnectionSpeed));
 
     AcpiDmIndent (Level + 1);
     AcpiOsPrintf ("%s, ",
@@ -618,7 +636,7 @@ AcpiDmI2cSerialBusDescriptor (
     /* ResourceSource is a required field */
 
     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
-        Resource->CommonSerialBus.TypeDataLength;
+        AcpiUtReadUint16(&Resource->CommonSerialBus.TypeDataLength);
 
     DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
@@ -675,15 +693,17 @@ AcpiDmSpiSerialBusDescriptor (
 {
     UINT32                  ResourceSourceOffset;
     char                    *DeviceName;
+    UINT16                  Tmp16;
 
 
     /* DeviceSelection, DeviceSelectionPolarity, WireMode, DataBitLength */
 
     AcpiDmIndent (Level);
+    Tmp16 = AcpiUtReadUint16(&Resource->SpiSerialBus.TypeSpecificFlags);
     AcpiOsPrintf ("SpiSerialBusV2 (0x%4.4X, %s, %s, 0x%2.2X,\n",
-        Resource->SpiSerialBus.DeviceSelection,
-        AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags, 1)],
-        AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.TypeSpecificFlags)],
+        AcpiUtReadUint16(&Resource->SpiSerialBus.DeviceSelection),
+        AcpiGbl_DpDecode [ACPI_EXTRACT_1BIT_FLAG (Tmp16, 1)],
+        AcpiGbl_WmDecode [ACPI_GET_1BIT_FLAG (Tmp16)],
         Resource->SpiSerialBus.DataBitLength);
 
     /* SlaveMode, ConnectionSpeed, ClockPolarity, ClockPhase */
@@ -691,7 +711,7 @@ AcpiDmSpiSerialBusDescriptor (
     AcpiDmIndent (Level + 1);
     AcpiOsPrintf ("%s, 0x%8.8X, %s,\n",
         AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.Flags)],
-        Resource->SpiSerialBus.ConnectionSpeed,
+        AcpiUtReadUint32(&Resource->SpiSerialBus.ConnectionSpeed),
         AcpiGbl_CpoDecode [ACPI_GET_1BIT_FLAG (Resource->SpiSerialBus.ClockPolarity)]);
 
     AcpiDmIndent (Level + 1);
@@ -701,7 +721,7 @@ AcpiDmSpiSerialBusDescriptor (
     /* ResourceSource is a required field */
 
     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
-        Resource->CommonSerialBus.TypeDataLength;
+        AcpiUtReadUint16(&Resource->CommonSerialBus.TypeDataLength);
 
     DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
@@ -758,15 +778,17 @@ AcpiDmUartSerialBusDescriptor (
 {
     UINT32                  ResourceSourceOffset;
     char                    *DeviceName;
+    UINT16                  Tmp16;
 
 
     /* ConnectionSpeed, BitsPerByte, StopBits */
 
     AcpiDmIndent (Level);
+    Tmp16 = AcpiUtReadUint16(&Resource->UartSerialBus.TypeSpecificFlags);
     AcpiOsPrintf ("UartSerialBusV2 (0x%8.8X, %s, %s,\n",
-        Resource->UartSerialBus.DefaultBaudRate,
-        AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 4)],
-        AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->UartSerialBus.TypeSpecificFlags, 2)]);
+        AcpiUtReadUint32(&Resource->UartSerialBus.DefaultBaudRate),
+        AcpiGbl_BpbDecode [ACPI_EXTRACT_3BIT_FLAG (Tmp16, 4)],
+        AcpiGbl_SbDecode [ACPI_EXTRACT_2BIT_FLAG (Tmp16, 2)]);
 
     /* LinesInUse, IsBigEndian, Parity, FlowControl */
 
@@ -781,13 +803,13 @@ AcpiDmUartSerialBusDescriptor (
 
     AcpiDmIndent (Level + 1);
     AcpiOsPrintf ("0x%4.4X, 0x%4.4X, ",
-        Resource->UartSerialBus.RxFifoSize,
-        Resource->UartSerialBus.TxFifoSize);
+        AcpiUtReadUint16(&Resource->UartSerialBus.RxFifoSize),
+        AcpiUtReadUint16(&Resource->UartSerialBus.TxFifoSize));
 
     /* ResourceSource is a required field */
 
     ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
-        Resource->CommonSerialBus.TypeDataLength;
+        AcpiUtReadUint16(&Resource->CommonSerialBus.TypeDataLength);
 
     DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
Index: acpica-unix2-20200925/source/components/disassembler/dmresrcs.c
===================================================================
--- acpica-unix2-20200925.orig/source/components/disassembler/dmresrcs.c
+++ acpica-unix2-20200925/source/components/disassembler/dmresrcs.c
@@ -93,7 +93,7 @@ AcpiDmIrqDescriptor (
     AcpiOsPrintf (")\n");
 
     AcpiDmIndent (Level + 1);
-    AcpiDmBitList (Resource->Irq.IrqMask);
+    AcpiDmBitList (AcpiUtReadUint16(&Resource->Irq.IrqMask));
 }
 
 
@@ -161,8 +161,8 @@ AcpiDmFixedDmaDescriptor (
 
     AcpiDmIndent (Level);
     AcpiOsPrintf ("FixedDMA (0x%4.4X, 0x%4.4X, ",
-        Resource->FixedDma.RequestLines,
-        Resource->FixedDma.Channels);
+        AcpiUtReadUint16(&Resource->FixedDma.RequestLines),
+        AcpiUtReadUint16(&Resource->FixedDma.Channels));
 
     if (Resource->FixedDma.Width <= 5)
     {
@@ -210,10 +210,12 @@ AcpiDmIoDescriptor (
         AcpiGbl_IoDecode [ACPI_GET_1BIT_FLAG (Resource->Io.Flags)]);
 
     AcpiDmIndent (Level + 1);
-    AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum");
+    AcpiDmDumpInteger16 (AcpiUtReadUint16(&Resource->Io.Minimum),
+		         "Range Minimum");
 
     AcpiDmIndent (Level + 1);
-    AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum");
+    AcpiDmDumpInteger16 (AcpiUtReadUint16(&Resource->Io.Maximum),
+		         "Range Maximum");
 
     AcpiDmIndent (Level + 1);
     AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment");
@@ -256,10 +258,12 @@ AcpiDmFixedIoDescriptor (
     AcpiOsPrintf ("FixedIO (\n");
 
     AcpiDmIndent (Level + 1);
-    AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address");
+    AcpiDmDumpInteger16 (AcpiUtReadUint16(&Resource->FixedIo.Address),
+		         "Address");
 
     AcpiDmIndent (Level + 1);
-    AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length");
+    AcpiDmDumpInteger8 (AcpiUtReadUint16(&Resource->FixedIo.AddressLength),
+			"Length");
 
     /* Insert a descriptor name */
 
Index: acpica-unix2-20200925/source/components/disassembler/dmwalk.c
===================================================================
--- acpica-unix2-20200925.orig/source/components/disassembler/dmwalk.c
+++ acpica-unix2-20200925/source/components/disassembler/dmwalk.c
@@ -1155,7 +1155,7 @@ AcpiDmAscendingOp (
         {
             ParentOp->Common.DisasmFlags |= ACPI_PARSEOP_EMPTY_TERMLIST;
             ASL_CV_CLOSE_PAREN (Op, Level);
-            AcpiOsPrintf ("{");
+            AcpiOsPrintf (" {");
         }
     }
 
Index: acpica-unix2-20200925/source/components/dispatcher/dsfield.c
===================================================================
--- acpica-unix2-20200925.orig/source/components/dispatcher/dsfield.c
+++ acpica-unix2-20200925/source/components/dispatcher/dsfield.c
@@ -336,6 +336,8 @@ AcpiDsGetFieldNames (
     char                    *NamePath;
 #endif
 
+    char                    TmpName[ACPI_NAMESEG_SIZE+1];
+
 
     ACPI_FUNCTION_TRACE_PTR (DsGetFieldNames, Info);
 
@@ -442,14 +444,17 @@ AcpiDsGetFieldNames (
 
             /* Lookup the name, it should already exist */
 
+	    memset(TmpName, 0, ACPI_NAMESEG_SIZE+1);
+	    AcpiUtWriteUint(TmpName, ACPI_NAMESEG_SIZE,
+			    &Arg->Named.Name, ACPI_NAMESEG_SIZE);
             Status = AcpiNsLookup (WalkState->ScopeInfo,
-                (char *) &Arg->Named.Name, Info->FieldType,
+                TmpName, Info->FieldType,
                 ACPI_IMODE_EXECUTE, ACPI_NS_DONT_OPEN_SCOPE,
                 WalkState, &Info->FieldNode);
             if (ACPI_FAILURE (Status))
             {
                 ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
-                    (char *) &Arg->Named.Name, Status);
+                    TmpName, Status);
                 return_ACPI_STATUS (Status);
             }
             else
@@ -703,8 +708,13 @@ AcpiDsInitFieldObjects (
          */
         if (Arg->Common.AmlOpcode == AML_INT_NAMEDFIELD_OP)
         {
+	    char Tmp[ACPI_NAMESEG_SIZE+1];
+
+	    memset(&Tmp, 0, ACPI_NAMESEG_SIZE+1);
+	    AcpiUtWriteUint(&Tmp, ACPI_NAMESEG_SIZE,
+			    &Arg->Named.Name, ACPI_NAMESEG_SIZE);
             Status = AcpiNsLookup (WalkState->ScopeInfo,
-                (char *) &Arg->Named.Name, Type, ACPI_IMODE_LOAD_PASS1,
+                Tmp, Type, ACPI_IMODE_LOAD_PASS1,
                 Flags, WalkState, &Node);
             if (ACPI_FAILURE (Status))
             {
Index: acpica-unix2-20200925/source/components/namespace/nsaccess.c
===================================================================
--- acpica-unix2-20200925.orig/source/components/namespace/nsaccess.c
+++ acpica-unix2-20200925/source/components/namespace/nsaccess.c
@@ -645,7 +645,7 @@ AcpiNsLookup (
 
         /* Extract one ACPI name from the front of the pathname */
 
-        ACPI_MOVE_32_TO_32 (&SimpleName, Path);
+        ACPI_COPY_NAMESEG (&SimpleName, Path);
 
         /* Try to find the single (4 character) ACPI name */
 
Index: acpica-unix2-20200925/source/components/namespace/nsnames.c
===================================================================
--- acpica-unix2-20200925.orig/source/components/namespace/nsnames.c
+++ acpica-unix2-20200925/source/components/namespace/nsnames.c
@@ -300,7 +300,7 @@ AcpiNsBuildNormalizedPath (
             ACPI_PATH_PUT8(FullPath, PathSize, AML_DUAL_NAME_PREFIX, Length);
         }
 
-        ACPI_MOVE_32_TO_32 (Name, &NextNode->Name);
+        ACPI_COPY_NAMESEG (Name, &NextNode->Name);
         DoNoTrailing = NoTrailing;
         for (i = 0; i < 4; i++)
         {
Index: acpica-unix2-20200925/source/components/namespace/nsparse.c
===================================================================
--- acpica-unix2-20200925.orig/source/components/namespace/nsparse.c
+++ acpica-unix2-20200925/source/components/namespace/nsparse.c
@@ -203,6 +203,7 @@ AcpiNsOneCompleteParse (
     ACPI_WALK_STATE         *WalkState;
     ACPI_TABLE_HEADER       *Table;
     ACPI_OWNER_ID           OwnerId;
+    UINT32                  TableLength;
 
 
     ACPI_FUNCTION_TRACE (NsOneCompleteParse);
@@ -216,13 +217,14 @@ AcpiNsOneCompleteParse (
 
     /* Table must consist of at least a complete header */
 
-    if (Table->Length < sizeof (ACPI_TABLE_HEADER))
+    TableLength = AcpiUtReadUint32(&Table->Length);
+    if (TableLength < sizeof (ACPI_TABLE_HEADER))
     {
         return_ACPI_STATUS (AE_BAD_HEADER);
     }
 
     AmlStart = (UINT8 *) Table + sizeof (ACPI_TABLE_HEADER);
-    AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
+    AmlLength = TableLength - sizeof (ACPI_TABLE_HEADER);
 
     Status = AcpiTbGetOwnerId (TableIndex, &OwnerId);
     if (ACPI_FAILURE (Status))
Index: acpica-unix2-20200925/source/components/namespace/nsutils.c
===================================================================
--- acpica-unix2-20200925.orig/source/components/namespace/nsutils.c
+++ acpica-unix2-20200925/source/components/namespace/nsutils.c
@@ -272,7 +272,6 @@ AcpiNsBuildInternalName (
     const char              *ExternalName = Info->NextExternalChar;
     char                    *Result = NULL;
     UINT32                  i;
-    char		    TmpSeg[ACPI_NAMESEG_SIZE+1];
 
 
     ACPI_FUNCTION_TRACE (NsBuildInternalName);
@@ -336,7 +335,6 @@ AcpiNsBuildInternalName (
 
     for (; NumSegments; NumSegments--)
     {
-        memset(TmpSeg, 0, ACPI_NAMESEG_SIZE+1);
         for (i = 0; i < ACPI_NAMESEG_SIZE; i++)
         {
             if (ACPI_IS_PATH_SEPARATOR (*ExternalName) ||
@@ -344,17 +342,16 @@ AcpiNsBuildInternalName (
             {
                 /* Pad the segment with underscore(s) if segment is short */
 
-                TmpSeg[i] = '_';
+                Result[i] = '_';
             }
             else
             {
                 /* Convert the character to uppercase and save it */
 
-                TmpSeg[i] = (char) toupper ((int) *ExternalName);
+                Result[i] = (char) toupper ((int) *ExternalName);
                 ExternalName++;
             }
         }
-	AcpiUtWriteUint(Result, ACPI_NAMESEG_SIZE, TmpSeg, ACPI_NAMESEG_SIZE);
 
         /* Now we must have a path separator, or the pathname is bad */
 
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin