]> git.pld-linux.org Git - packages/acpica.git/commitdiff
- updated to 20220331 + current Fedora patch set; acpinames is gone
authorJakub Bogusz <qboosh@pld-linux.org>
Thu, 29 Jun 2023 20:33:47 +0000 (22:33 +0200)
committerJakub Bogusz <qboosh@pld-linux.org>
Thu, 29 Jun 2023 20:33:47 +0000 (22:33 +0200)
67 files changed:
0001-Add-in-basic-infrastructure-for-big-endian-support.patch [new file with mode: 0644]
0002-Modify-utility-functions-to-be-endian-agnostic.patch [new file with mode: 0644]
0003-Always-display-table-header-content-in-human-readabl.patch [new file with mode: 0644]
0004-Re-enable-support-for-big-endian-machines.patch [new file with mode: 0644]
0005-Correct-an-endian-ness-problem-when-converting-ASL-t.patch [new file with mode: 0644]
0006-Use-more-reliable-ACPI_COPY_NAMSEG-in-GPE-name-check.patch [new file with mode: 0644]
0007-Handle-dumping-Unicode-properly-when-big-endian.patch [new file with mode: 0644]
0008-Support-MADT-aka-APIC-in-a-big-endian-world.patch [new file with mode: 0644]
0009-Support-ASF-tables-in-a-big-endian-world.patch [new file with mode: 0644]
0010-Support-CPEP-tables-in-a-big-endian-world.patch [new file with mode: 0644]
0011-Support-DBG2-table-in-a-big-endian-world.patch [new file with mode: 0644]
0012-Support-DMAR-in-a-big-endian-world.patch [new file with mode: 0644]
0013-Support-DRTM-in-a-big-endian-world.patch [new file with mode: 0644]
0014-Support-EINJ-in-a-big-endian-world.patch [new file with mode: 0644]
0015-Support-ERST-in-a-big-endian-world.patch [new file with mode: 0644]
0016-Support-FADT-aka-FACP-in-a-big-endian-world.patch [new file with mode: 0644]
0017-Support-most-FPDTs-in-a-big-endian-world.patch [new file with mode: 0644]
0018-Support-GTDT-in-a-big-endian-world.patch [new file with mode: 0644]
0019-Support-HEST-in-a-big-endian-world.patch [new file with mode: 0644]
0020-Support-RSDT-RSD-PTR-in-a-big-endian-world.patch [new file with mode: 0644]
0021-Support-XSDT-in-a-big-endian-world.patch [new file with mode: 0644]
0022-Support-SRAT-in-a-big-endian-world.patch [new file with mode: 0644]
0023-Support-SLIT-in-a-big-endian-world.patch [new file with mode: 0644]
0024-Support-MSCT-in-a-big-endian-world.patch [new file with mode: 0644]
0025-Support-MPST-in-a-big-endian-world.patch [new file with mode: 0644]
0026-Support-NFIT-in-a-big-endian-world.patch [new file with mode: 0644]
0027-Support-SDEV-in-a-big-endian-world.patch [new file with mode: 0644]
0028-Support-HMAT-in-a-big-endian-world.patch [new file with mode: 0644]
0029-Support-PDTT-in-a-big-endian-world.patch [new file with mode: 0644]
0030-Support-PPTT-in-a-big-endian-world.patch [new file with mode: 0644]
0031-Support-PCCT-in-a-big-endian-world.patch [new file with mode: 0644]
0032-Support-WDAT-in-a-big-endian-world.patch [new file with mode: 0644]
0033-Support-TCPA-in-a-big-endian-world.patch [new file with mode: 0644]
0034-Support-STAO-in-a-big-endian-world.patch [new file with mode: 0644]
0035-Support-SLIC-and-MSDM-in-a-big-endian-world.patch [new file with mode: 0644]
0036-Support-MCFG-in-a-big-endian-world.patch [new file with mode: 0644]
0037-Support-LPIT-in-a-big-endian-world.patch [new file with mode: 0644]
0038-Support-PMTT-in-a-big-endian-world.patch [new file with mode: 0644]
0039-Support-TPM2-in-a-big-endian-world.patch [new file with mode: 0644]
0040-Support-S3PT-in-a-big-endian-world.patch [new file with mode: 0644]
0041-Support-IORT-in-a-big-endian-world.patch [new file with mode: 0644]
0042-Support-IVRS-in-a-big-endian-world.patch [new file with mode: 0644]
0043-Support-DSDT-SSDT-in-a-big-endian-world.patch [new file with mode: 0644]
0044-Initial-support-for-WPBT-in-big-endian-needs-more.patch [new file with mode: 0644]
0045-CSRT-fixed-use-of-optional-ResourceInfo.patch [new file with mode: 0644]
0046-Support-PHAT-in-a-big-endian-world.patch [new file with mode: 0644]
0047-Support-PRMT-in-a-big-endian-world.patch [new file with mode: 0644]
0048-Support-RGRT-in-a-big-endian-world.patch [new file with mode: 0644]
0049-Support-SVKL-in-a-big-endian-world.patch [new file with mode: 0644]
acpica-OPT_LDFLAGS.patch [new file with mode: 0644]
acpica-dangling-ptr.patch [new file with mode: 0644]
acpica-dbtest.patch [new file with mode: 0644]
acpica-simple-64bit.patch [new file with mode: 0644]
acpica-ull-32bit.patch [new file with mode: 0644]
acpica-unaligned.patch [moved from debian-unaligned.patch with 91% similarity]
acpica-uuid-len.patch [new file with mode: 0644]
acpica.spec
acpinames.1 [deleted file]
aslcodegen.patch [deleted file]
big-endian-v2.patch [deleted file]
debian-big_endian.patch [deleted file]
facp.patch [deleted file]
int-format.patch
mips-be-fix.patch
ppc64le.patch [deleted file]
ptr-cast.patch
str-trunc-warn.patch

diff --git a/0001-Add-in-basic-infrastructure-for-big-endian-support.patch b/0001-Add-in-basic-infrastructure-for-big-endian-support.patch
new file mode 100644 (file)
index 0000000..4e12c34
--- /dev/null
@@ -0,0 +1,530 @@
+From 4594630ec2e6a33efce3047a86b08fa170b75848 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Thu, 15 Oct 2020 11:53:33 -0600
+Subject: [PATCH 01/45] Add in basic infrastructure for big-endian support
+
+This adds in some basic functions -- AcpiUtReadUint32(), for example,
+to read a UINT32 value in little-endian form and return it in host-native
+format -- along with AcpiUtWriteUint() that writes out an integer in
+host-native format as a little-endian value.
+
+But, to do that, I'm adding the functions in a new file: utendian.c.  So,
+the header files need fixing, and the makefiles need to be sure to compile
+the new code.  Further, UtIsBigEndianMachine() needed to be moved out of
+compiler/aslutils.c so it could be used in the new functions and avoid
+having to do some conditional compilation depending on endian-ness.
+
+However, this sets things up for the future, where endian-aware code can
+be added as the need is uncovered.  For now, these functions cover all of
+the cases I know about.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ generate/unix/acpibin/Makefile         |   1 +
+ generate/unix/acpidump/Makefile        |   1 +
+ generate/unix/acpiexamples/Makefile    |   1 +
+ generate/unix/acpiexec/Makefile        |   1 +
+ generate/unix/acpihelp/Makefile        |   1 +
+ generate/unix/iasl/Makefile            |   1 +
+ source/compiler/aslcompiler.h          |   4 -
+ source/compiler/aslutils.c             |  27 ---
+ source/components/utilities/utendian.c | 236 +++++++++++++++++++++++++
+ source/include/acmacros.h              |  56 ------
+ source/include/acutils.h               |  32 ++++
+ source/include/platform/aclinux.h      |   1 +
+ 12 files changed, 275 insertions(+), 87 deletions(-)
+ create mode 100644 source/components/utilities/utendian.c
+
+Index: acpica-unix2-20220331/generate/unix/acpibin/Makefile
+===================================================================
+--- acpica-unix2-20220331.orig/generate/unix/acpibin/Makefile
++++ acpica-unix2-20220331/generate/unix/acpibin/Makefile
+@@ -37,6 +37,7 @@ OBJECTS = \
+       $(OBJDIR)/utcache.o\
+       $(OBJDIR)/utdebug.o\
+       $(OBJDIR)/utdecode.o\
++      $(OBJDIR)/utendian.o\
+       $(OBJDIR)/utexcep.o\
+       $(OBJDIR)/utglobal.o\
+       $(OBJDIR)/utlock.o\
+Index: acpica-unix2-20220331/generate/unix/acpidump/Makefile
+===================================================================
+--- acpica-unix2-20220331.orig/generate/unix/acpidump/Makefile
++++ acpica-unix2-20220331/generate/unix/acpidump/Makefile
+@@ -36,6 +36,7 @@ OBJECTS = \
+       $(OBJDIR)/osunixdir.o\
+       $(OBJDIR)/osunixmap.o\
+       $(OBJDIR)/osunixxf.o\
++      $(OBJDIR)/utendian.o\
+       $(OBJDIR)/tbprint.o\
+       $(OBJDIR)/tbxfroot.o\
+       $(OBJDIR)/utascii.o\
+Index: acpica-unix2-20220331/generate/unix/acpiexamples/Makefile
+===================================================================
+--- acpica-unix2-20220331.orig/generate/unix/acpiexamples/Makefile
++++ acpica-unix2-20220331/generate/unix/acpiexamples/Makefile
+@@ -139,6 +139,7 @@ OBJECTS = \
+       $(OBJDIR)/utdebug.o\
+       $(OBJDIR)/utdecode.o\
+       $(OBJDIR)/utdelete.o\
++      $(OBJDIR)/utendian.o\
+       $(OBJDIR)/uterror.o\
+       $(OBJDIR)/uteval.o\
+       $(OBJDIR)/utexcep.o\
+Index: acpica-unix2-20220331/generate/unix/acpiexec/Makefile
+===================================================================
+--- acpica-unix2-20220331.orig/generate/unix/acpiexec/Makefile
++++ acpica-unix2-20220331/generate/unix/acpiexec/Makefile
+@@ -214,6 +214,7 @@ OBJECTS = \
+       $(OBJDIR)/utdebug.o\
+       $(OBJDIR)/utdecode.o\
+       $(OBJDIR)/utdelete.o\
++      $(OBJDIR)/utendian.o\
+       $(OBJDIR)/uterror.o\
+       $(OBJDIR)/uteval.o\
+       $(OBJDIR)/utexcep.o\
+Index: acpica-unix2-20220331/generate/unix/acpihelp/Makefile
+===================================================================
+--- acpica-unix2-20220331.orig/generate/unix/acpihelp/Makefile
++++ acpica-unix2-20220331/generate/unix/acpihelp/Makefile
+@@ -45,6 +45,7 @@ OBJECTS = \
+       $(OBJDIR)/getopt.o\
+       $(OBJDIR)/osunixxf.o\
+       $(OBJDIR)/utdebug.o\
++      $(OBJDIR)/utendian.o\
+       $(OBJDIR)/utexcep.o\
+       $(OBJDIR)/utglobal.o\
+       $(OBJDIR)/uthex.o\
+Index: acpica-unix2-20220331/generate/unix/iasl/Makefile
+===================================================================
+--- acpica-unix2-20220331.orig/generate/unix/iasl/Makefile
++++ acpica-unix2-20220331/generate/unix/iasl/Makefile
+@@ -225,6 +225,7 @@ OBJECTS = \
+       $(OBJDIR)/utdebug.o\
+       $(OBJDIR)/utdecode.o\
+       $(OBJDIR)/utdelete.o\
++      $(OBJDIR)/utendian.o\
+       $(OBJDIR)/uterror.o\
+       $(OBJDIR)/utexcep.o\
+       $(OBJDIR)/utglobal.o\
+Index: acpica-unix2-20220331/source/compiler/aslcompiler.h
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/aslcompiler.h
++++ acpica-unix2-20220331/source/compiler/aslcompiler.h
+@@ -1120,10 +1120,6 @@ BOOLEAN
+ UtIsIdInteger (
+     UINT8                   *Target);
+-UINT8
+-UtIsBigEndianMachine (
+-    void);
+-
+ BOOLEAN
+ UtQueryForOverwrite (
+     char                    *Pathname);
+Index: acpica-unix2-20220331/source/compiler/aslutils.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/aslutils.c
++++ acpica-unix2-20220331/source/compiler/aslutils.c
+@@ -73,33 +73,6 @@ UtDisplayErrorSummary (
+ /*******************************************************************************
+  *
+- * FUNCTION:    UtIsBigEndianMachine
+- *
+- * PARAMETERS:  None
+- *
+- * RETURN:      TRUE if machine is big endian
+- *              FALSE if machine is little endian
+- *
+- * DESCRIPTION: Detect whether machine is little endian or big endian.
+- *
+- ******************************************************************************/
+-
+-UINT8
+-UtIsBigEndianMachine (
+-    void)
+-{
+-    union {
+-        UINT32              Integer;
+-        UINT8               Bytes[4];
+-    } Overlay =                 {0xFF000000};
+-
+-
+-    return (Overlay.Bytes[0]); /* Returns 0xFF (TRUE) for big endian */
+-}
+-
+-
+-/*******************************************************************************
+- *
+  * FUNCTION:    UtIsIdInteger
+  *
+  * PARAMETERS:  Pointer to an ACPI ID (HID, CID) string
+Index: acpica-unix2-20220331/source/components/utilities/utendian.c
+===================================================================
+--- /dev/null
++++ acpica-unix2-20220331/source/components/utilities/utendian.c
+@@ -0,0 +1,236 @@
++/******************************************************************************
++ *
++ * Module Name: utendian -- byte swapping support for other-endianness
++ *
++ *****************************************************************************/
++
++/*****************************************************************************
++ *
++ * Copyright (c) 2020, Al Stone <ahs3@redhat.com>
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions, and the following disclaimer,
++ *    without modification.
++ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
++ *    substantially similar to the "NO WARRANTY" disclaimer below
++ *    ("Disclaimer") and any redistribution must be conditioned upon
++ *    including a substantially similar Disclaimer requirement for further
++ *    binary redistribution.
++ * 3. Neither the names of the above-listed copyright holders nor the names
++ *    of any contributors may be used to endorse or promote products derived
++ *    from this software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * Alternatively, you may choose to be licensed under the terms of the
++ * GNU General Public License ("GPL") version 2 as published by the Free
++ * Software Foundation.
++ *
++ *****************************************************************************/
++
++#include "acpi.h"
++#include "accommon.h"
++
++#define _COMPONENT          ACPI_COMPILER
++        ACPI_MODULE_NAME    ("utendian")
++
++/*
++ * Endianness support functions.
++ *
++ * Ultimately, everything in ACPI tables or AML must be in little-endian
++ * format.  However, we sometimes find it necessary to run on a big-endian
++ * machine and create or read those little-endian values.  This is a small
++ * libary of functions to make that easier, and more visible.
++ *
++ */
++
++/*******************************************************************************
++ *
++ * FUNCTION:    UtIsBigEndianMachine
++ *
++ * PARAMETERS:  None
++ *
++ * RETURN:      TRUE if machine is big endian
++ *              FALSE if machine is little endian
++ *
++ * DESCRIPTION: Detect whether machine is little endian or big endian.
++ *
++ ******************************************************************************/
++
++UINT8
++UtIsBigEndianMachine (
++    void)
++{
++    union {
++        UINT32              Integer;
++        UINT8               Bytes[4];
++    } Overlay =                 {0xFF000000};
++
++
++    return (Overlay.Bytes[0]); /* Returns 0xFF (TRUE) for big endian */
++}
++
++
++/*******************************************************************************
++ *
++ * FUNCTION:    AcpiUtReadUint16
++ *
++ * PARAMETERS:  Src         - location containing the little-endian
++ *                                    value
++ *
++ * RETURN:      UINT16 value in host-native form
++ *
++ * DESCRIPTION: Read a UINT16 little-endian value from a given location
++ *              and return it in host-native form
++ *
++ ******************************************************************************/
++
++UINT16
++AcpiUtReadUint16 (
++    void                    *SrcPtr)
++{
++    UINT16                  Result = 0;
++    UINT8                   *Dst = (UINT8 *) &Result;
++    UINT8                   *Src = (UINT8 *) SrcPtr;
++
++    if (!UtIsBigEndianMachine())
++    {
++        return (*(UINT16 *) SrcPtr);
++    }
++
++    Dst[0] = Src[1];
++    Dst[1] = Src[0];
++
++    return (Result);
++}
++
++/*******************************************************************************
++ *
++ * FUNCTION:    AcpiUtReadUint32
++ *
++ * PARAMETERS:  Src         - location containing the little-endian
++ *                                    value
++ *
++ * RETURN:      UINT32 value in host-native form
++ *
++ * DESCRIPTION: Read a UINT32 little-endian value from a given location
++ *              and return it in host-native form
++ *
++ ******************************************************************************/
++
++UINT32
++AcpiUtReadUint32 (
++    void                    *SrcPtr)
++{
++    UINT32                  Result = 0;
++    UINT8                   *Dst = (UINT8 *) &Result;
++    UINT8                   *Src = (UINT8 *) SrcPtr;
++
++    if (!UtIsBigEndianMachine())
++    {
++        return (*(UINT32 *) SrcPtr);
++    }
++
++    Dst[0] = Src[3];
++    Dst[1] = Src[2];
++    Dst[2] = Src[1];
++    Dst[3] = Src[0];
++
++    return (Result);
++}
++
++/*******************************************************************************
++ *
++ * FUNCTION:    AcpiUtReadUint64
++ *
++ * PARAMETERS:  Src         - location containing the little-endian
++ *                                    value
++ *
++ * RETURN:      UINT64 value in host-native form
++ *
++ * DESCRIPTION: Read a UINT64 little-endian value from a given location
++ *              and return it in host-native form
++ *
++ ******************************************************************************/
++
++UINT64
++AcpiUtReadUint64 (
++    void                    *SrcPtr)
++{
++    UINT64                  Result = 0;
++    UINT8                   *Dst = (UINT8 *) &Result;
++    UINT8                   *Src = (UINT8 *) SrcPtr;
++
++    if (!UtIsBigEndianMachine())
++    {
++        return (*(UINT64 *) SrcPtr);
++    }
++
++    Dst[0] = Src[7];
++    Dst[1] = Src[6];
++    Dst[2] = Src[5];
++    Dst[3] = Src[4];
++    Dst[4] = Src[3];
++    Dst[5] = Src[2];
++    Dst[6] = Src[1];
++    Dst[7] = Src[0];
++
++    return (Result);
++}
++
++/*******************************************************************************
++ *
++ * FUNCTION:    AcpiUtWriteUint
++ *
++ * PARAMETERS:  DstPtr      - where to place the retrieved value
++ *              DstLength   - space in bytes for this int type
++ *              SrcPtr      - where the little-endian value lives
++ *              SrcLength   - space in bytes for this int type
++ *
++ * RETURN:      None.
++ *
++ * DESCRIPTION: Write a host-native integer value of the given size, and
++ *              store it in the location specified in little-endian form.
++ *              Given the amount of integer type casting done, this general
++ *              version seems the most useful (vs 32->32, 32->16, 16->32,
++ *              ad infinitum)
++ *
++ ******************************************************************************/
++
++void
++AcpiUtWriteUint (
++    void                    *DstPtr,
++    int                     DstLength,
++    const void              *SrcPtr,
++    const int               SrcLength)
++{
++    UINT8                   *Dst = (UINT8 *) DstPtr;
++    UINT8                   *Src = (UINT8 *) SrcPtr;
++    int                      Length;
++    int                      ii;
++
++    if (!UtIsBigEndianMachine())
++    {
++        Length = SrcLength > DstLength ? DstLength : SrcLength;
++        memcpy (Dst, Src, Length);
++      return;
++    }
++
++    Length = SrcLength >= DstLength ? DstLength : SrcLength;
++    for (ii = 0; ii < Length; ii++)
++        Dst[ii] = Src[SrcLength - ii - 1];
++
++}
+Index: acpica-unix2-20220331/source/include/acmacros.h
+===================================================================
+--- acpica-unix2-20220331.orig/source/include/acmacros.h
++++ acpica-unix2-20220331/source/include/acmacros.h
+@@ -76,61 +76,6 @@
+  * If the hardware supports the transfer of unaligned data, just do the store.
+  * Otherwise, we have to move one byte at a time.
+  */
+-#ifdef ACPI_BIG_ENDIAN
+-/*
+- * Macros for big-endian machines
+- */
+-
+-/* These macros reverse the bytes during the move, converting little-endian to big endian */
+-
+-                                                     /* Big Endian      <==        Little Endian */
+-                                                     /*  Hi...Lo                     Lo...Hi     */
+-/* 16-bit source, 16/32/64 destination */
+-
+-#define ACPI_MOVE_16_TO_16(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[1];\
+-                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[0];}
+-
+-#define ACPI_MOVE_16_TO_32(d, s)        {(*(UINT32 *)(void *)(d))=0;\
+-                                           ((UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[1];\
+-                                           ((UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[0];}
+-
+-#define ACPI_MOVE_16_TO_64(d, s)        {(*(UINT64 *)(void *)(d))=0;\
+-                                           ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\
+-                                           ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];}
+-
+-/* 32-bit source, 16/32/64 destination */
+-
+-#define ACPI_MOVE_32_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
+-
+-#define ACPI_MOVE_32_TO_32(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];\
+-                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[2];\
+-                                         ((  UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[1];\
+-                                         ((  UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[0];}
+-
+-#define ACPI_MOVE_32_TO_64(d, s)        {(*(UINT64 *)(void *)(d))=0;\
+-                                           ((UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[3];\
+-                                           ((UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[2];\
+-                                           ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\
+-                                           ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];}
+-
+-/* 64-bit source, 16/32/64 destination */
+-
+-#define ACPI_MOVE_64_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
+-
+-#define ACPI_MOVE_64_TO_32(d, s)        ACPI_MOVE_32_TO_32(d, s)    /* Truncate to 32 */
+-
+-#define ACPI_MOVE_64_TO_64(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\
+-                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];\
+-                                         ((  UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[5];\
+-                                         ((  UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[4];\
+-                                         ((  UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[3];\
+-                                         ((  UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[2];\
+-                                         ((  UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\
+-                                         ((  UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];}
+-#else
+-/*
+- * Macros for little-endian machines
+- */
+ #ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
+@@ -193,7 +138,6 @@
+                                          ((  UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[6];\
+                                          ((  UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[7];}
+ #endif
+-#endif
+ /*
+Index: acpica-unix2-20220331/source/include/acutils.h
+===================================================================
+--- acpica-unix2-20220331.orig/source/include/acutils.h
++++ acpica-unix2-20220331/source/include/acutils.h
+@@ -1167,4 +1167,36 @@ AcpiUtConvertUuidToString (
+     char                    *OutString);
+ #endif
++
++/*
++ * utendian -- byte-swapping for big-endian support
++ */
++
++UINT8
++UtIsBigEndianMachine (
++    void);
++
++#if defined(ACPI_ASL_COMPILER) || defined(ACPI_EXEC_APP) || \
++    defined(ACPI_HELP_APP)     || defined(ACPI_DUMP_APP) || \
++    defined(ACPI_EXAMPLE_APP)  || defined(ACPI_BIN_APP)
++UINT32
++AcpiUtReadUint32 (
++    void                    *SrcPtr);
++
++UINT16
++AcpiUtReadUint16 (
++    void                    *SrcPtr);
++
++UINT64
++AcpiUtReadUint64 (
++    void                    *SrcPtr);
++
++void  
++AcpiUtWriteUint (
++    void                    *DstPtr,
++    int                     DstLength,
++    const void              *SrcPtr,
++    const int               SrcLength);
++#endif
++
+ #endif /* _ACUTILS_H */
+Index: acpica-unix2-20220331/source/include/platform/aclinux.h
+===================================================================
+--- acpica-unix2-20220331.orig/source/include/platform/aclinux.h
++++ acpica-unix2-20220331/source/include/platform/aclinux.h
+@@ -203,6 +203,7 @@
+ #ifdef ACPI_USE_STANDARD_HEADERS
+ #include <unistd.h>
++#include <endian.h>
+ #endif
+ /* Define/disable kernel-specific declarators */
diff --git a/0002-Modify-utility-functions-to-be-endian-agnostic.patch b/0002-Modify-utility-functions-to-be-endian-agnostic.patch
new file mode 100644 (file)
index 0000000..a328096
--- /dev/null
@@ -0,0 +1,200 @@
+From 51b0d06c0a6c4d4e19432ebf930299855c8fcf23 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 18 Sep 2020 15:14:30 -0600
+Subject: [PATCH 02/45] Modify utility functions to be endian-agnostic
+
+All of the modifications here use the big-endian code previously added
+(see utendian.c) to make themselves endian-agnostic; i.e., that the code
+does not need to change further to work on both big- and little-endian
+machines.
+
+These particular files were changed to handle the reading and writing
+of files (the length is often embedded in the binary stream), and to
+handle the reading and writing of integer values.  The common cases are
+to "read" a 32-bit unsigned int in little-endian format, but convert it
+to host-native, and to write a byte, word, double word or quad word value
+as little-endian, regardless of host-native format.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/acfileio.c           | 16 ++++++++++------
+ source/common/dmtable.c            |  8 ++++----
+ source/compiler/dtfield.c          |  2 +-
+ source/compiler/dtsubtable.c       |  4 ++--
+ source/components/tables/tbprint.c | 13 +++++++++----
+ 5 files changed, 26 insertions(+), 17 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/acfileio.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/acfileio.c
++++ acpica-unix2-20220331/source/common/acfileio.c
+@@ -280,6 +280,7 @@ AcGetOneTableFromFile (
+     ACPI_TABLE_HEADER       *Table;
+     INT32                   Count;
+     long                    TableOffset;
++    UINT32                  Length;
+     *ReturnTable = NULL;
+@@ -319,7 +320,8 @@ AcGetOneTableFromFile (
+     /* Allocate a buffer for the entire table */
+-    Table = AcpiOsAllocate ((ACPI_SIZE) TableHeader.Length);
++    Length = AcpiUtReadUint32 (&TableHeader.Length);
++    Table = AcpiOsAllocate ((ACPI_SIZE) Length);
+     if (!Table)
+     {
+         return (AE_NO_MEMORY);
+@@ -329,13 +331,13 @@ AcGetOneTableFromFile (
+     fseek (File, TableOffset, SEEK_SET);
+-    Count = fread (Table, 1, TableHeader.Length, File);
++    Count = fread (Table, 1, Length, File);
+     /*
+      * Checks for data table headers happen later in the execution. Only verify
+      * for Aml tables at this point in the code.
+      */
+-    if (GetOnlyAmlTables && Count != (INT32) TableHeader.Length)
++    if (GetOnlyAmlTables && Count != (INT32) Length)
+     {
+         Status = AE_ERROR;
+         goto ErrorExit;
+@@ -343,7 +345,7 @@ AcGetOneTableFromFile (
+     /* Validate the checksum (just issue a warning) */
+-    Status = AcpiTbVerifyChecksum (Table, TableHeader.Length);
++    Status = AcpiTbVerifyChecksum (Table, Length);
+     if (ACPI_FAILURE (Status))
+     {
+         Status = AcCheckTextModeCorruption (Table);
+@@ -436,6 +438,7 @@ AcValidateTableHeader (
+     long                    OriginalOffset;
+     UINT32                  FileSize;
+     UINT32                  i;
++    UINT32                  Length;
+     ACPI_FUNCTION_TRACE (AcValidateTableHeader);
+@@ -472,11 +475,12 @@ AcValidateTableHeader (
+     /* Validate table length against bytes remaining in the file */
+     FileSize = CmGetFileSize (File);
+-    if (TableHeader.Length > (UINT32) (FileSize - TableOffset))
++    Length = AcpiUtReadUint32 (&TableHeader.Length);
++    if (Length > (UINT32) (FileSize - TableOffset))
+     {
+         fprintf (stderr, "Table [%4.4s] is too long for file - "
+             "needs: 0x%.2X, remaining in file: 0x%.2X\n",
+-            TableHeader.Signature, TableHeader.Length,
++            TableHeader.Signature, Length,
+             (UINT32) (FileSize - TableOffset));
+         return (AE_BAD_HEADER);
+     }
+Index: acpica-unix2-20220331/source/common/dmtable.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtable.c
++++ acpica-unix2-20220331/source/common/dmtable.c
+@@ -713,7 +713,7 @@ AcpiDmDumpDataTable (
+         {
+             /* Dump the raw table data */
+-            Length = Table->Length;
++            Length = AcpiUtReadUint32 (&Table->Length);
+             AcpiOsPrintf ("\n/*\n%s: Length %d (0x%X)\n\n",
+                 ACPI_RAW_TABLE_DATA_HEADER, Length, Length);
+@@ -730,7 +730,7 @@ AcpiDmDumpDataTable (
+      */
+     if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_FACS))
+     {
+-        Length = Table->Length;
++        Length = AcpiUtReadUint32 (&Table->Length);
+         Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFacs);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -751,7 +751,7 @@ AcpiDmDumpDataTable (
+         /*
+          * All other tables must use the common ACPI table header, dump it now
+          */
+-        Length = Table->Length;
++        Length = AcpiUtReadUint32(&Table->Length);
+         Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHeader);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -1415,7 +1415,7 @@ AcpiDmDumpTable (
+             AcpiOsPrintf ("%2.2X", *Target);
+             Temp8 = AcpiDmGenerateChecksum (Table,
+-                ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length,
++                AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length)),
+                 ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum);
+             if (Temp8 != ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum)
+Index: acpica-unix2-20220331/source/compiler/dtfield.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dtfield.c
++++ acpica-unix2-20220331/source/compiler/dtfield.c
+@@ -361,7 +361,7 @@ DtCompileInteger (
+         DtError (ASL_ERROR, ASL_MSG_INTEGER_SIZE, Field, AslGbl_MsgBuffer);
+     }
+-    memcpy (Buffer, &Value, ByteLength);
++    AcpiUtWriteUint (Buffer, ByteLength, &Value, sizeof (UINT64));
+     return;
+ }
+Index: acpica-unix2-20220331/source/compiler/dtsubtable.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dtsubtable.c
++++ acpica-unix2-20220331/source/compiler/dtsubtable.c
+@@ -378,6 +378,6 @@ DtSetSubtableLength (
+         return;
+     }
+-    memcpy (Subtable->LengthField, &Subtable->TotalLength,
+-        Subtable->SizeOfLengthField);
++    AcpiUtWriteUint (Subtable->LengthField, Subtable->SizeOfLengthField,
++                     &Subtable->TotalLength, sizeof (Subtable->TotalLength));
+ }
+Index: acpica-unix2-20220331/source/components/tables/tbprint.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/tables/tbprint.c
++++ acpica-unix2-20220331/source/components/tables/tbprint.c
+@@ -44,6 +44,8 @@
+ #include "acpi.h"
+ #include "accommon.h"
+ #include "actables.h"
++#include "platform/acenv.h"
++#include "acutils.h"
+ #define _COMPONENT          ACPI_TABLES
+         ACPI_MODULE_NAME    ("tbprint")
+@@ -151,7 +153,7 @@ AcpiTbPrintTableHeader (
+         ACPI_INFO (("%-4.4s 0x%8.8X%8.8X %06X",
+             Header->Signature, ACPI_FORMAT_UINT64 (Address),
+-            Header->Length));
++            AcpiUtReadUint32 (&Header->Length)));
+     }
+     else if (ACPI_VALIDATE_RSDP_SIG (ACPI_CAST_PTR (ACPI_TABLE_RSDP,
+         Header)->Signature))
+@@ -179,9 +181,12 @@ AcpiTbPrintTableHeader (
+             "%-4.4s 0x%8.8X%8.8X"
+             " %06X (v%.2d %-6.6s %-8.8s %08X %-4.4s %08X)",
+             LocalHeader.Signature, ACPI_FORMAT_UINT64 (Address),
+-            LocalHeader.Length, LocalHeader.Revision, LocalHeader.OemId,
+-            LocalHeader.OemTableId, LocalHeader.OemRevision,
+-            LocalHeader.AslCompilerId, LocalHeader.AslCompilerRevision));
++            AcpiUtReadUint32 (&LocalHeader.Length),
++            LocalHeader.Revision, LocalHeader.OemId,
++            LocalHeader.OemTableId,
++            AcpiUtReadUint32 (&LocalHeader.OemRevision),
++            LocalHeader.AslCompilerId,
++            AcpiUtReadUint32 (&LocalHeader.AslCompilerRevision)));
+     }
+ }
diff --git a/0003-Always-display-table-header-content-in-human-readabl.patch b/0003-Always-display-table-header-content-in-human-readabl.patch
new file mode 100644 (file)
index 0000000..f540ac1
--- /dev/null
@@ -0,0 +1,45 @@
+From 62cc2f4ae212bd0fad83f643921ac216ebb9a986 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 18 Sep 2020 15:20:37 -0600
+Subject: [PATCH 03/45] Always display table header content in human-readable
+ form
+
+When comparing two binary data tables, little-endian values are read
+from each table header and printed out.  Make sure they show up in a
+form that makes sense to humans.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/tools/acpibin/abcompare.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+Index: acpica-unix2-20220331/source/tools/acpibin/abcompare.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/tools/acpibin/abcompare.c
++++ acpica-unix2-20220331/source/tools/acpibin/abcompare.c
+@@ -42,6 +42,7 @@
+  */
+ #include "acpibin.h"
++#include "acutils.h"
+ ACPI_TABLE_HEADER           Header1;
+@@ -179,14 +180,14 @@ AbPrintHeadersInfo (
+     /* Display header information for both headers */
+     printf ("Signature          %8.4s : %4.4s\n",    Header->Signature, Header2->Signature);
+-    printf ("Length             %8.8X : %8.8X\n",    Header->Length, Header2->Length);
++    printf ("Length             %8.8X : %8.8X\n",    AcpiUtReadUint32 (&Header->Length), AcpiUtReadUint32 (&Header2->Length));
+     printf ("Revision           %8.2X : %2.2X\n",    Header->Revision, Header2->Revision);
+     printf ("Checksum           %8.2X : %2.2X\n",    Header->Checksum, Header2->Checksum);
+     printf ("OEM ID             %8.6s : %.6s\n",     Header->OemId, Header2->OemId);
+     printf ("OEM Table ID       %8.8s : %.8s\n",     Header->OemTableId, Header2->OemTableId);
+-    printf ("OEM Revision       %8.8X : %8.8X\n",    Header->OemRevision, Header2->OemRevision);
++    printf ("OEM Revision       %8.8X : %8.8X\n",    AcpiUtReadUint32 (&Header->OemRevision), AcpiUtReadUint32 (&Header2->OemRevision));
+     printf ("ASL Compiler ID    %8.4s : %.4s\n",     Header->AslCompilerId, Header2->AslCompilerId);
+-    printf ("Compiler Revision  %8.8X : %8.8X\n",    Header->AslCompilerRevision, Header2->AslCompilerRevision);
++    printf ("Compiler Revision  %8.8X : %8.8X\n",    AcpiUtReadUint32 (&Header->AslCompilerRevision), AcpiUtReadUint32 (&Header2->AslCompilerRevision));
+     printf ("\n");
+ }
diff --git a/0004-Re-enable-support-for-big-endian-machines.patch b/0004-Re-enable-support-for-big-endian-machines.patch
new file mode 100644 (file)
index 0000000..d2dc432
--- /dev/null
@@ -0,0 +1,78 @@
+From 16734feab4204d6930c1ede62e527920607daace Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 16 Sep 2020 16:27:06 -0600
+Subject: [PATCH 04/45] Re-enable support for big-endian machines
+
+First, disable the big-endian check and fail.  Then, make sure the
+namespace gets initialized properly (NB: needed even if we are only
+compiling/disassembling data tables).
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/compiler/aslmain.c             | 12 ------------
+ source/components/namespace/nsutils.c |  7 +++++--
+ 2 files changed, 5 insertions(+), 14 deletions(-)
+
+Index: acpica-unix2-20220331/source/compiler/aslmain.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/aslmain.c
++++ acpica-unix2-20220331/source/compiler/aslmain.c
+@@ -101,18 +101,6 @@ main (
+     signal (SIGINT, AslSignalHandler);
+-    /*
+-     * Big-endian machines are not currently supported. ACPI tables must
+-     * be little-endian, and support for big-endian machines needs to
+-     * be implemented.
+-     */
+-    if (UtIsBigEndianMachine ())
+-    {
+-        fprintf (stderr,
+-            "iASL is not currently supported on big-endian machines.\n");
+-        return (-1);
+-    }
+-
+     AcpiOsInitialize ();
+     ACPI_DEBUG_INITIALIZE (); /* For debug version only */
+Index: acpica-unix2-20220331/source/components/namespace/nsutils.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/namespace/nsutils.c
++++ acpica-unix2-20220331/source/components/namespace/nsutils.c
+@@ -272,6 +272,7 @@ AcpiNsBuildInternalName (
+     const char              *ExternalName = Info->NextExternalChar;
+     char                    *Result = NULL;
+     UINT32                  i;
++    char                    TmpSeg[ACPI_NAMESEG_SIZE+1];
+     ACPI_FUNCTION_TRACE (NsBuildInternalName);
+@@ -335,6 +336,7 @@ 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) ||
+@@ -342,16 +344,17 @@ AcpiNsBuildInternalName (
+             {
+                 /* Pad the segment with underscore(s) if segment is short */
+-                Result[i] = '_';
++                TmpSeg[i] = '_';
+             }
+             else
+             {
+                 /* Convert the character to uppercase and save it */
+-                Result[i] = (char) toupper ((int) *ExternalName);
++                TmpSeg[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 */
diff --git a/0005-Correct-an-endian-ness-problem-when-converting-ASL-t.patch b/0005-Correct-an-endian-ness-problem-when-converting-ASL-t.patch
new file mode 100644 (file)
index 0000000..e5a9dc5
--- /dev/null
@@ -0,0 +1,41 @@
+From 055fee09d8f9244b6c437ad18b98edb81a87e8bc Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 27 Oct 2020 17:50:52 -0600
+Subject: [PATCH 05/45] Correct an endian-ness problem when converting ASL to
+ ASL+
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/compiler/cvparser.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20220331/source/compiler/cvparser.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/cvparser.c
++++ acpica-unix2-20220331/source/compiler/cvparser.c
+@@ -144,6 +144,7 @@ CvInitFileTree (
+     char                    *ChildFilename = NULL;
+     UINT8                   *AmlStart;
+     UINT32                  AmlLength;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     if (!AcpiGbl_CaptureComments)
+@@ -152,7 +153,7 @@ CvInitFileTree (
+     }
+-    AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
++    AmlLength = TableLength - sizeof (ACPI_TABLE_HEADER);
+     AmlStart = ((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER));
+     CvDbgPrint ("AmlLength: %x\n", AmlLength);
+@@ -162,7 +163,7 @@ CvInitFileTree (
+     AcpiGbl_FileTreeRoot = AcpiOsAcquireObject (AcpiGbl_FileCache);
+     AcpiGbl_FileTreeRoot->FileStart = (char *)(AmlStart);
+-    AcpiGbl_FileTreeRoot->FileEnd = (char *)(AmlStart + Table->Length);
++    AcpiGbl_FileTreeRoot->FileEnd = (char *)(AmlStart + TableLength);
+     AcpiGbl_FileTreeRoot->Next = NULL;
+     AcpiGbl_FileTreeRoot->Parent = NULL;
+     AcpiGbl_FileTreeRoot->Filename = (char *)(AmlStart+2);
diff --git a/0006-Use-more-reliable-ACPI_COPY_NAMSEG-in-GPE-name-check.patch b/0006-Use-more-reliable-ACPI_COPY_NAMSEG-in-GPE-name-check.patch
new file mode 100644 (file)
index 0000000..5893e93
--- /dev/null
@@ -0,0 +1,32 @@
+From 790c016107e98ded2d0ae579f84dd4cd3fa06587 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 29 Jun 2021 17:48:31 -0600
+Subject: [PATCH 06/45] Use more reliable ACPI_COPY_NAMSEG in GPE name checks
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/compiler/aslanalyze.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20220331/source/compiler/aslanalyze.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/aslanalyze.c
++++ acpica-unix2-20220331/source/compiler/aslanalyze.c
+@@ -469,7 +469,7 @@ ApCheckForGpeNameConflict (
+     /* Need a null-terminated string version of NameSeg */
+-    ACPI_MOVE_32_TO_32 (Name, Op->Asl.NameSeg);
++    ACPI_COPY_NAMESEG (Name, Op->Asl.NameSeg);
+     Name[ACPI_NAMESEG_SIZE] = 0;
+     /*
+@@ -496,7 +496,7 @@ ApCheckForGpeNameConflict (
+      * We are now sure we have an _Lxx or _Exx.
+      * Create the target name that would cause collision (Flip E/L)
+      */
+-    ACPI_MOVE_32_TO_32 (Target, Name);
++    ACPI_COPY_NAMESEG (Target, Name);
+     /* Inject opposite letter ("L" versus "E") */
diff --git a/0007-Handle-dumping-Unicode-properly-when-big-endian.patch b/0007-Handle-dumping-Unicode-properly-when-big-endian.patch
new file mode 100644 (file)
index 0000000..70d83d6
--- /dev/null
@@ -0,0 +1,53 @@
+From 9a4a32c597fcdfa8a3bc33230c40a18e39c3449d Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Thu, 1 Jul 2021 17:46:19 -0600
+Subject: [PATCH 07/45] Handle dumping Unicode properly when big-endian
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump.c | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump.c
++++ acpica-unix2-20220331/source/common/dmtbdump.c
+@@ -200,6 +200,8 @@ AcpiDmDumpUnicode (
+     UINT8                   *Buffer;
+     UINT32                  Length;
+     UINT32                  i;
++    UINT16                Tmp16;
++    UINT32                  start;
+     Buffer = ((UINT8 *) Table) + BufferOffset;
+@@ -209,7 +211,8 @@ AcpiDmDumpUnicode (
+     for (i = 0; i < Length; i += 2)
+     {
+-        if (!isprint (Buffer[i]))
++        Tmp16 = AcpiUtReadUint16 (&Buffer[i]);
++        if (!isprint (Tmp16))
+         {
+             goto DumpRawBuffer;
+         }
+@@ -217,7 +220,8 @@ AcpiDmDumpUnicode (
+     /* Ensure all high bytes are zero */
+-    for (i = 1; i < Length; i += 2)
++    start = UtIsBigEndianMachine() ? 0 : 1;
++    for (i = start; i < Length; i += 2)
+     {
+         if (Buffer[i])
+         {
+@@ -230,7 +234,8 @@ AcpiDmDumpUnicode (
+     AcpiOsPrintf ("\"");
+     for (i = 0; i < Length; i += 2)
+     {
+-        AcpiOsPrintf ("%c", Buffer[i]);
++        Tmp16 = AcpiUtReadUint16 (&Buffer[i]);
++        AcpiOsPrintf ("%c", Tmp16);
+     }
+     AcpiOsPrintf ("\"\n");
diff --git a/0008-Support-MADT-aka-APIC-in-a-big-endian-world.patch b/0008-Support-MADT-aka-APIC-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..9121ab8
--- /dev/null
@@ -0,0 +1,32 @@
+From 7b107ab7348d903108140f6033e90596b12325c4 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Thu, 15 Oct 2020 12:12:11 -0600
+Subject: [PATCH 08/45] Support MADT (aka APIC) in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -763,7 +763,7 @@ AcpiDmDumpMadt (
+ {
+     ACPI_STATUS             Status;
+     ACPI_SUBTABLE_HEADER    *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_MADT);
+     ACPI_DMTABLE_INFO       *InfoTable;
+@@ -781,7 +781,7 @@ AcpiDmDumpMadt (
+     Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
+     DbgPrint (ASL_PARSE_OUTPUT, "//0B) Offset %X, from table start: 0x%8.8X%8.8X\n",
+         Offset, ACPI_FORMAT_UINT64 (ACPI_CAST_PTR (char, Subtable) - ACPI_CAST_PTR (char, Table)));
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         /* Common subtable header */
diff --git a/0009-Support-ASF-tables-in-a-big-endian-world.patch b/0009-Support-ASF-tables-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..a3f815d
--- /dev/null
@@ -0,0 +1,55 @@
+From ce811b4c38b9a09533ee8bafa22813f6e43c023d Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 18 Sep 2020 16:41:02 -0600
+Subject: [PATCH 09/45] Support ASF! tables in a big-endian world
+
+Read the table length properly and it all works right for big-endian.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20220331/source/common/dmtbdump1.c
+@@ -358,16 +358,18 @@ AcpiDmDumpAsf (
+     UINT32                  DataOffset = 0;
+     UINT32                  i;
+     UINT8                   Type;
++    UINT32                  TableLength;
+     /* No main table, only subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset);
+-    while (Offset < Table->Length)
++    TableLength = AcpiUtReadUint32 (&Table->Length);
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Header.Length, AcpiDmTableInfoAsfHdr);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -425,7 +427,7 @@ AcpiDmDumpAsf (
+             return;
+         }
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Header.Length, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -442,7 +444,7 @@ AcpiDmDumpAsf (
+             for (i = 0; i < DataCount; i++)
+             {
+                 AcpiOsPrintf ("\n");
+-                Status = AcpiDmDumpTable (Table->Length, DataOffset,
++                Status = AcpiDmDumpTable (TableLength, DataOffset,
+                     DataTable, DataLength, DataInfoTable);
+                 if (ACPI_FAILURE (Status))
+                 {
diff --git a/0010-Support-CPEP-tables-in-a-big-endian-world.patch b/0010-Support-CPEP-tables-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..e9451cd
--- /dev/null
@@ -0,0 +1,32 @@
+From 0c4be57a5e0e45b4197c2d9a0b26462d3b1a9b80 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 18 Sep 2020 16:54:13 -0600
+Subject: [PATCH 10/45] Support CPEP tables in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20220331/source/common/dmtbdump1.c
+@@ -614,7 +614,7 @@ AcpiDmDumpCpep (
+ {
+     ACPI_STATUS             Status;
+     ACPI_CPEP_POLLING       *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_CPEP);
+@@ -629,7 +629,7 @@ AcpiDmDumpCpep (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         AcpiOsPrintf ("\n");
+         Status = AcpiDmDumpTable (Length, Offset, Subtable,
diff --git a/0011-Support-DBG2-table-in-a-big-endian-world.patch b/0011-Support-DBG2-table-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..76cb7ac
--- /dev/null
@@ -0,0 +1,256 @@
+From 2cb0b87a15682da4f19f707fa3ffece504f94b5a Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Sat, 19 Sep 2020 13:37:38 -0600
+Subject: [PATCH 11/45] Support DBG2 table in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c  | 37 ++++++++++++++++++--------------
+ source/compiler/dttable1.c | 43 ++++++++++++++++++++++++--------------
+ 2 files changed, 48 insertions(+), 32 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20220331/source/common/dmtbdump1.c
+@@ -669,7 +669,7 @@ AcpiDmDumpCsrt (
+     ACPI_CSRT_GROUP         *Subtable;
+     ACPI_CSRT_SHARED_INFO   *SharedInfoTable;
+     ACPI_CSRT_DESCRIPTOR    *SubSubtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_CSRT);
+     UINT32                  SubOffset;
+     UINT32                  SubSubOffset;
+@@ -681,7 +681,7 @@ AcpiDmDumpCsrt (
+     /* Subtables (Resource Groups) */
+     Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         /* Resource group subtable */
+@@ -715,7 +715,7 @@ AcpiDmDumpCsrt (
+             Offset + SubOffset);
+         while ((SubOffset < Subtable->Length) &&
+-              ((Offset + SubOffset) < Table->Length))
++              ((Offset + SubOffset) < Length))
+         {
+             AcpiOsPrintf ("\n");
+             Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable,
+@@ -776,12 +776,13 @@ AcpiDmDumpDbg2 (
+ {
+     ACPI_STATUS             Status;
+     ACPI_DBG2_DEVICE        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_DBG2);
+     UINT32                  i;
+     UINT32                  ArrayOffset;
+     UINT32                  AbsoluteOffset;
+     UINT8                   *Array;
++    UINT16                  SubtableLength;
+     /* Main table */
+@@ -795,11 +796,12 @@ AcpiDmDumpDbg2 (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         AcpiOsPrintf ("\n");
++        SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
+         Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-            Subtable->Length, AcpiDmTableInfoDbg2Device);
++            SubtableLength, AcpiDmTableInfoDbg2Device);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -809,13 +811,13 @@ AcpiDmDumpDbg2 (
+         for (i = 0; i < Subtable->RegisterCount; i++)
+         {
+-            ArrayOffset = Subtable->BaseAddressOffset +
++            ArrayOffset = AcpiUtReadUint16 (&Subtable->BaseAddressOffset) +
+                 (sizeof (ACPI_GENERIC_ADDRESS) * i);
+             AbsoluteOffset = Offset + ArrayOffset;
+             Array = (UINT8 *) Subtable + ArrayOffset;
+             Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
+-                Subtable->Length, AcpiDmTableInfoDbg2Addr);
++                SubtableLength, AcpiDmTableInfoDbg2Addr);
+             if (ACPI_FAILURE (Status))
+             {
+                 return;
+@@ -826,13 +828,13 @@ AcpiDmDumpDbg2 (
+         for (i = 0; i < Subtable->RegisterCount; i++)
+         {
+-            ArrayOffset = Subtable->AddressSizeOffset +
++            ArrayOffset = AcpiUtReadUint16 (&Subtable->AddressSizeOffset) +
+                 (sizeof (UINT32) * i);
+             AbsoluteOffset = Offset + ArrayOffset;
+             Array = (UINT8 *) Subtable + ArrayOffset;
+             Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
+-                Subtable->Length, AcpiDmTableInfoDbg2Size);
++                SubtableLength, AcpiDmTableInfoDbg2Size);
+             if (ACPI_FAILURE (Status))
+             {
+                 return;
+@@ -842,12 +844,12 @@ AcpiDmDumpDbg2 (
+         /* Dump the Namestring (required) */
+         AcpiOsPrintf ("\n");
+-        ArrayOffset = Subtable->NamepathOffset;
++        ArrayOffset = AcpiUtReadUint16 (&Subtable->NamepathOffset);
+         AbsoluteOffset = Offset + ArrayOffset;
+         Array = (UINT8 *) Subtable + ArrayOffset;
+         Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
+-            Subtable->Length, AcpiDmTableInfoDbg2Name);
++            SubtableLength, AcpiDmTableInfoDbg2Name);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -857,8 +859,11 @@ AcpiDmDumpDbg2 (
+         if (Subtable->OemDataOffset)
+         {
+-            Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset,
+-                Table, Subtable->OemDataLength,
++            Array = (UINT8 *) Subtable + AcpiUtReadUint16 (&Subtable->OemDataOffset);
++
++            Status = AcpiDmDumpTable (Length,
++                Offset + AcpiUtReadUint16 (&Subtable->OemDataOffset),
++                Array, AcpiUtReadUint16 (&Subtable->OemDataLength),
+                 AcpiDmTableInfoDbg2OemData);
+             if (ACPI_FAILURE (Status))
+             {
+@@ -868,9 +873,9 @@ AcpiDmDumpDbg2 (
+         /* Point to next subtable */
+-        Offset += Subtable->Length;
++        Offset += SubtableLength;
+         Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Subtable,
+-            Subtable->Length);
++            SubtableLength);
+     }
+ }
+Index: acpica-unix2-20220331/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
++++ acpica-unix2-20220331/source/compiler/dttable1.c
+@@ -718,6 +718,7 @@ DtCompileCsrt (
+     DT_FIELD                **PFieldList = (DT_FIELD **) List;
+     UINT32                  DescriptorCount;
+     UINT32                  GroupLength;
++    UINT32                  Tmp;
+     /* Subtables (Resource Groups) */
+@@ -736,12 +737,13 @@ DtCompileCsrt (
+         /* Compute the number of resource descriptors */
+-        GroupLength =
+-            (ACPI_CAST_PTR (ACPI_CSRT_GROUP,
+-                Subtable->Buffer))->Length -
+-            (ACPI_CAST_PTR (ACPI_CSRT_GROUP,
+-                Subtable->Buffer))->SharedInfoLength -
+-            sizeof (ACPI_CSRT_GROUP);
++        Tmp = AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
++                                Subtable->Buffer))->Length);
++        GroupLength = Tmp;
++        Tmp = AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
++                                Subtable->Buffer))->SharedInfoLength);
++        GroupLength -= Tmp;
++        GroupLength -= sizeof (ACPI_CSRT_GROUP);
+         DescriptorCount = (GroupLength  /
+             sizeof (ACPI_CSRT_DESCRIPTOR));
+@@ -829,6 +831,7 @@ DtCompileDbg2 (
+     ACPI_DBG2_DEVICE        *DeviceInfo;
+     UINT16                  CurrentOffset;
+     UINT32                  i;
++    UINT32                  Tmp;
+     /* Main table */
+@@ -845,10 +848,12 @@ DtCompileDbg2 (
+     /* Main table fields */
+     Dbg2Header = ACPI_CAST_PTR (ACPI_DBG2_HEADER, Subtable->Buffer);
+-    Dbg2Header->InfoOffset = sizeof (ACPI_TABLE_HEADER) + ACPI_PTR_DIFF (
+-        ACPI_ADD_PTR (UINT8, Dbg2Header, sizeof (ACPI_DBG2_HEADER)), Dbg2Header);
++    Tmp = sizeof (ACPI_TABLE_HEADER) + ACPI_PTR_DIFF (
++       ACPI_ADD_PTR (UINT8, Dbg2Header, sizeof (ACPI_DBG2_HEADER)), Dbg2Header);
++    AcpiUtWriteUint (&Dbg2Header->InfoOffset, sizeof (UINT32),
++            &Tmp, sizeof (UINT32));
+-    SubtableCount = Dbg2Header->InfoCount;
++    SubtableCount = Tmp;
+     DtPushSubtable (Subtable);
+     /* Process all Device Information subtables (Count = InfoCount) */
+@@ -875,7 +880,8 @@ DtCompileDbg2 (
+         /* BaseAddressRegister GAS array (Required, size is RegisterCount) */
+-        DeviceInfo->BaseAddressOffset = CurrentOffset;
++        AcpiUtWriteUint (&DeviceInfo->BaseAddressOffset, sizeof (UINT16),
++                &CurrentOffset, sizeof (UINT16));
+         for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++)
+         {
+             Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Addr,
+@@ -891,7 +897,8 @@ DtCompileDbg2 (
+         /* AddressSize array (Required, size = RegisterCount) */
+-        DeviceInfo->AddressSizeOffset = CurrentOffset;
++        AcpiUtWriteUint (&DeviceInfo->AddressSizeOffset, sizeof (UINT16),
++                &CurrentOffset, sizeof (UINT16));
+         for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++)
+         {
+             Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Size,
+@@ -907,7 +914,8 @@ DtCompileDbg2 (
+         /* NamespaceString device identifier (Required, size = NamePathLength) */
+-        DeviceInfo->NamepathOffset = CurrentOffset;
++        AcpiUtWriteUint (&DeviceInfo->NamepathOffset, sizeof (UINT16),
++            &CurrentOffset, sizeof (UINT16));
+         Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Name,
+             &Subtable);
+         if (ACPI_FAILURE (Status))
+@@ -917,8 +925,9 @@ DtCompileDbg2 (
+         /* Update the device info header */
+-        DeviceInfo->NamepathLength = (UINT16) Subtable->Length;
+-        CurrentOffset += (UINT16) DeviceInfo->NamepathLength;
++        AcpiUtWriteUint (&DeviceInfo->NamepathLength, sizeof (UINT16),
++            &Subtable->Length, sizeof (UINT32));
++        CurrentOffset += AcpiUtReadUint16 (&DeviceInfo->NamepathLength);
+         DtInsertSubtable (ParentTable, Subtable);
+         /* OemData - Variable-length data (Optional, size = OemDataLength) */
+@@ -945,8 +954,10 @@ DtCompileDbg2 (
+         if (Subtable && Subtable->Length)
+         {
+-            DeviceInfo->OemDataOffset = CurrentOffset;
+-            DeviceInfo->OemDataLength = (UINT16) Subtable->Length;
++            AcpiUtWriteUint (&DeviceInfo->OemDataOffset, sizeof (UINT16),
++                &CurrentOffset, sizeof (UINT16));
++            AcpiUtWriteUint (&DeviceInfo->OemDataLength, sizeof (UINT16),
++                &Subtable->Length, sizeof (UINT32));
+             DtInsertSubtable (ParentTable, Subtable);
+         }
diff --git a/0012-Support-DMAR-in-a-big-endian-world.patch b/0012-Support-DMAR-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..3d54025
--- /dev/null
@@ -0,0 +1,171 @@
+From 06623392351dfea54bd69507b6672c933a5e3fd2 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Sat, 19 Sep 2020 15:22:00 -0600
+Subject: [PATCH 12/45] Support DMAR in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtable.c    |  4 ++--
+ source/common/dmtbdump1.c  | 26 +++++++++++++++-----------
+ source/compiler/dttable1.c | 12 +++++++-----
+ 3 files changed, 24 insertions(+), 18 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtable.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtable.c
++++ acpica-unix2-20220331/source/common/dmtable.c
+@@ -1578,13 +1578,13 @@ AcpiDmDumpTable (
+             /* DMAR subtable types */
+-            Temp16 = ACPI_GET16 (Target);
++            Temp16 = AcpiUtReadUint16 (Target);
+             if (Temp16 > ACPI_DMAR_TYPE_RESERVED)
+             {
+                 Temp16 = ACPI_DMAR_TYPE_RESERVED;
+             }
+-            AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
++            AcpiOsPrintf (UINT16_FORMAT, Temp16,
+                 AcpiDmDmarSubnames[Temp16]);
+             break;
+Index: acpica-unix2-20220331/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20220331/source/common/dmtbdump1.c
+@@ -899,13 +899,15 @@ AcpiDmDumpDmar (
+ {
+     ACPI_STATUS             Status;
+     ACPI_DMAR_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_DMAR);
+     ACPI_DMTABLE_INFO       *InfoTable;
+     ACPI_DMAR_DEVICE_SCOPE  *ScopeTable;
+     UINT32                  ScopeOffset;
+     UINT8                   *PciPath;
+     UINT32                  PathOffset;
++    UINT16                  SubtableType;
++    UINT16                  SubtableLength;
+     /* Main table */
+@@ -919,13 +921,14 @@ AcpiDmDumpDmar (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         /* Common subtable header */
+         AcpiOsPrintf ("\n");
++        SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
+         Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-            Subtable->Length, AcpiDmTableInfoDmarHdr);
++            SubtableLength, AcpiDmTableInfoDmarHdr);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -933,7 +936,8 @@ AcpiDmDumpDmar (
+         AcpiOsPrintf ("\n");
+-        switch (Subtable->Type)
++        SubtableType = AcpiUtReadUint16 (&Subtable->Type);
++        switch (SubtableType)
+         {
+         case ACPI_DMAR_TYPE_HARDWARE_UNIT:
+@@ -974,12 +978,12 @@ AcpiDmDumpDmar (
+         default:
+             AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n",
+-                Subtable->Type);
++                SubtableType);
+             return;
+         }
+         Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-            Subtable->Length, InfoTable);
++            SubtableLength, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -988,8 +992,8 @@ AcpiDmDumpDmar (
+         /*
+          * Dump the optional device scope entries
+          */
+-        if ((Subtable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
+-            (Subtable->Type == ACPI_DMAR_TYPE_NAMESPACE))
++        if ((SubtableType == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
++            (SubtableType == ACPI_DMAR_TYPE_NAMESPACE))
+         {
+             /* These types do not support device scopes */
+@@ -997,7 +1001,7 @@ AcpiDmDumpDmar (
+         }
+         ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable, ScopeOffset);
+-        while (ScopeOffset < Subtable->Length)
++        while (ScopeOffset < SubtableLength)
+         {
+             AcpiOsPrintf ("\n");
+             Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable,
+@@ -1038,9 +1042,9 @@ AcpiDmDumpDmar (
+ NextSubtable:
+         /* Point to next subtable */
+-        Offset += Subtable->Length;
++        Offset += SubtableLength;
+         Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable,
+-            Subtable->Length);
++            SubtableLength);
+     }
+ }
+Index: acpica-unix2-20220331/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
++++ acpica-unix2-20220331/source/compiler/dttable1.c
+@@ -997,6 +997,7 @@ DtCompileDmar (
+     ACPI_DMAR_DEVICE_SCOPE  *DmarDeviceScope;
+     UINT32                  DeviceScopeLength;
+     UINT32                  PciPathLength;
++    UINT16                  DmarHeaderType;
+     Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmar, &Subtable);
+@@ -1027,7 +1028,8 @@ DtCompileDmar (
+         DmarHeader = ACPI_CAST_PTR (ACPI_DMAR_HEADER, Subtable->Buffer);
+-        switch (DmarHeader->Type)
++        DmarHeaderType = AcpiUtReadUint16 (&DmarHeader->Type);
++        switch (DmarHeaderType)
+         {
+         case ACPI_DMAR_TYPE_HARDWARE_UNIT:
+@@ -1079,8 +1081,8 @@ DtCompileDmar (
+         /*
+          * Optional Device Scope subtables
+          */
+-        if ((DmarHeader->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
+-            (DmarHeader->Type == ACPI_DMAR_TYPE_NAMESPACE))
++        if ((DmarHeaderType == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
++            (DmarHeaderType == ACPI_DMAR_TYPE_NAMESPACE))
+         {
+             /* These types do not support device scopes */
+@@ -1089,8 +1091,8 @@ DtCompileDmar (
+         }
+         DtPushSubtable (Subtable);
+-        DeviceScopeLength = DmarHeader->Length - Subtable->Length -
+-            ParentTable->Length;
++        DeviceScopeLength = AcpiUtReadUint16 (&DmarHeader->Length) -
++                Subtable->Length - ParentTable->Length;
+         while (DeviceScopeLength)
+         {
+             Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarScope,
diff --git a/0013-Support-DRTM-in-a-big-endian-world.patch b/0013-Support-DRTM-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..02725bb
--- /dev/null
@@ -0,0 +1,112 @@
+From bcdec27f562b0df37546b5e8ad2eab76348062eb Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Sat, 19 Sep 2020 15:44:06 -0600
+Subject: [PATCH 13/45] Support DRTM in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c  | 25 +++++++++++++++----------
+ source/compiler/dttable1.c |  6 ++++--
+ 2 files changed, 19 insertions(+), 12 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20220331/source/common/dmtbdump1.c
+@@ -1071,11 +1071,14 @@ AcpiDmDumpDrtm (
+     ACPI_DRTM_RESOURCE_LIST *DrtmRl;
+     ACPI_DRTM_DPS_ID        *DrtmDps;
+     UINT32                  Count;
++    UINT32                  ResourceCount;
++    UINT32                  ValidatedTableCount;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     /* Main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
+         AcpiDmTableInfoDrtm);
+     if (ACPI_FAILURE (Status))
+     {
+@@ -1090,7 +1093,7 @@ AcpiDmDumpDrtm (
+     DrtmVtl = ACPI_ADD_PTR (ACPI_DRTM_VTABLE_LIST, Table, Offset);
+     AcpiOsPrintf ("\n");
+-    Status = AcpiDmDumpTable (Table->Length, Offset,
++    Status = AcpiDmDumpTable (TableLength, Offset,
+         DrtmVtl, ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables),
+         AcpiDmTableInfoDrtm0);
+     if (ACPI_FAILURE (Status))
+@@ -1103,10 +1106,11 @@ AcpiDmDumpDrtm (
+     /* Dump Validated table addresses */
+     Count = 0;
+-    while ((Offset < Table->Length) &&
+-            (DrtmVtl->ValidatedTableCount > Count))
++    ValidatedTableCount = AcpiUtReadUint32 (&DrtmVtl->ValidatedTableCount);
++    while ((Offset < TableLength) &&
++            (ValidatedTableCount > Count))
+     {
+-        Status = AcpiDmDumpTable (Table->Length, Offset,
++        Status = AcpiDmDumpTable (TableLength, Offset,
+             ACPI_ADD_PTR (void, Table, Offset), sizeof (UINT64),
+             AcpiDmTableInfoDrtm0a);
+         if (ACPI_FAILURE (Status))
+@@ -1122,7 +1126,7 @@ AcpiDmDumpDrtm (
+     DrtmRl = ACPI_ADD_PTR (ACPI_DRTM_RESOURCE_LIST, Table, Offset);
+     AcpiOsPrintf ("\n");
+-    Status = AcpiDmDumpTable (Table->Length, Offset,
++    Status = AcpiDmDumpTable (TableLength, Offset,
+         DrtmRl, ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources),
+         AcpiDmTableInfoDrtm1);
+     if (ACPI_FAILURE (Status))
+@@ -1135,10 +1139,11 @@ AcpiDmDumpDrtm (
+     /* Dump the Resource List */
+     Count = 0;
+-    while ((Offset < Table->Length) &&
+-           (DrtmRl->ResourceCount > Count))
++    ResourceCount = AcpiUtReadUint32 (&DrtmRl->ResourceCount);
++    while ((Offset < TableLength) &&
++           (ResourceCount > Count))
+     {
+-        Status = AcpiDmDumpTable (Table->Length, Offset,
++        Status = AcpiDmDumpTable (TableLength, Offset,
+             ACPI_ADD_PTR (void, Table, Offset),
+             sizeof (ACPI_DRTM_RESOURCE), AcpiDmTableInfoDrtm1a);
+         if (ACPI_FAILURE (Status))
+@@ -1154,7 +1159,7 @@ AcpiDmDumpDrtm (
+     DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset);
+     AcpiOsPrintf ("\n");
+-    (void) AcpiDmDumpTable (Table->Length, Offset,
++    (void) AcpiDmDumpTable (TableLength, Offset,
+         DrtmDps, sizeof (ACPI_DRTM_DPS_ID), AcpiDmTableInfoDrtm2);
+ }
+Index: acpica-unix2-20220331/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
++++ acpica-unix2-20220331/source/compiler/dttable1.c
+@@ -1217,7 +1217,8 @@ DtCompileDrtm (
+         Count++;
+     }
+-    DrtmVtl->ValidatedTableCount = Count;
++    AcpiUtWriteUint (&DrtmVtl->ValidatedTableCount, sizeof (UINT32),
++            &Count, sizeof (UINT32));
+     DtPopSubtable ();
+     ParentTable = DtPeekSubtable ();
+@@ -1255,7 +1256,8 @@ DtCompileDrtm (
+         Count++;
+     }
+-    DrtmRl->ResourceCount = Count;
++    AcpiUtWriteUint(&DrtmRl->ResourceCount, sizeof(UINT32),
++            &Count, sizeof(UINT32));
+     DtPopSubtable ();
+     ParentTable = DtPeekSubtable ();
diff --git a/0014-Support-EINJ-in-a-big-endian-world.patch b/0014-Support-EINJ-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..f65e6ff
--- /dev/null
@@ -0,0 +1,32 @@
+From 70d1047abe010c80c2dd74f6afdc7005b91e6163 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Sat, 19 Sep 2020 15:50:19 -0600
+Subject: [PATCH 14/45] Support EINJ in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20220331/source/common/dmtbdump1.c
+@@ -1183,7 +1183,7 @@ AcpiDmDumpEinj (
+ {
+     ACPI_STATUS             Status;
+     ACPI_WHEA_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_EINJ);
+@@ -1198,7 +1198,7 @@ AcpiDmDumpEinj (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         AcpiOsPrintf ("\n");
+         Status = AcpiDmDumpTable (Length, Offset, Subtable,
diff --git a/0015-Support-ERST-in-a-big-endian-world.patch b/0015-Support-ERST-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..a6146e2
--- /dev/null
@@ -0,0 +1,32 @@
+From e588961ca36e70c24aa1c49e96bcd1997bf98f89 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Sat, 19 Sep 2020 15:54:56 -0600
+Subject: [PATCH 15/45] Support ERST in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20220331/source/common/dmtbdump1.c
+@@ -1236,7 +1236,7 @@ AcpiDmDumpErst (
+ {
+     ACPI_STATUS             Status;
+     ACPI_WHEA_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_ERST);
+@@ -1251,7 +1251,7 @@ AcpiDmDumpErst (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         AcpiOsPrintf ("\n");
+         Status = AcpiDmDumpTable (Length, Offset, Subtable,
diff --git a/0016-Support-FADT-aka-FACP-in-a-big-endian-world.patch b/0016-Support-FADT-aka-FACP-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..1b9b3aa
--- /dev/null
@@ -0,0 +1,189 @@
+From b3051bc2bad8988f3ad81a8307de6f1d0eef4ace Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Sun, 20 Sep 2020 11:42:21 -0600
+Subject: [PATCH 16/45] Support FADT (aka, FACP) in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump.c          | 25 ++++++++++++-----------
+ source/components/tables/tbfadt.c | 34 +++++++++++++++++++++++--------
+ 2 files changed, 38 insertions(+), 21 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump.c
++++ acpica-unix2-20220331/source/common/dmtbdump.c
+@@ -417,11 +417,12 @@ AcpiDmDumpFadt (
+     ACPI_TABLE_HEADER       *Table)
+ {
+     ACPI_STATUS             Status;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     /* Always dump the minimum FADT revision 1 fields (ACPI 1.0) */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
+         AcpiDmTableInfoFadt1);
+     if (ACPI_FAILURE (Status))
+     {
+@@ -430,10 +431,10 @@ AcpiDmDumpFadt (
+     /* Check for FADT revision 2 fields (ACPI 1.0B MS extensions) */
+-    if ((Table->Length > ACPI_FADT_V1_SIZE) &&
+-        (Table->Length <= ACPI_FADT_V2_SIZE))
++    if ((TableLength > ACPI_FADT_V1_SIZE) &&
++        (TableLength <= ACPI_FADT_V2_SIZE))
+     {
+-        Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
++        Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
+             AcpiDmTableInfoFadt2);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -443,9 +444,9 @@ AcpiDmDumpFadt (
+     /* Check for FADT revision 3/4 fields and up (ACPI 2.0+ extended data) */
+-    else if (Table->Length > ACPI_FADT_V2_SIZE)
++    else if (TableLength > ACPI_FADT_V2_SIZE)
+     {
+-        Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
++        Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
+             AcpiDmTableInfoFadt3);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -454,9 +455,9 @@ AcpiDmDumpFadt (
+         /* Check for FADT revision 5 fields and up (ACPI 5.0+) */
+-        if (Table->Length > ACPI_FADT_V3_SIZE)
++        if (TableLength > ACPI_FADT_V3_SIZE)
+         {
+-            Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
++            Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
+                 AcpiDmTableInfoFadt5);
+             if (ACPI_FAILURE (Status))
+             {
+@@ -466,9 +467,9 @@ AcpiDmDumpFadt (
+         /* Check for FADT revision 6 fields and up (ACPI 6.0+) */
+-        if (Table->Length > ACPI_FADT_V3_SIZE)
++        if (TableLength > ACPI_FADT_V3_SIZE)
+         {
+-            Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
++            Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
+                 AcpiDmTableInfoFadt6);
+             if (ACPI_FAILURE (Status))
+             {
+@@ -479,11 +480,11 @@ AcpiDmDumpFadt (
+     /* Validate various fields in the FADT, including length */
+-    AcpiTbCreateLocalFadt (Table, Table->Length);
++    AcpiTbCreateLocalFadt (Table, TableLength);
+     /* Validate FADT length against the revision */
+-    AcpiDmValidateFadtLength (Table->Revision, Table->Length);
++    AcpiDmValidateFadtLength (Table->Revision, TableLength);
+ }
+Index: acpica-unix2-20220331/source/components/tables/tbfadt.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/tables/tbfadt.c
++++ acpica-unix2-20220331/source/components/tables/tbfadt.c
+@@ -289,7 +289,6 @@ AcpiTbSelectAddress (
+     UINT32                  Address32,
+     UINT64                  Address64)
+ {
+-
+     if (!Address64)
+     {
+         /* 64-bit address is zero, use 32-bit address */
+@@ -520,6 +519,9 @@ AcpiTbConvertFadt (
+     UINT8                   Length;
+     UINT8                   Flags;
+     UINT32                  i;
++    UINT32                  Tmp;
++    UINT32                  Value32;
++    UINT64                  Value64;
+     /*
+@@ -533,7 +535,7 @@ AcpiTbConvertFadt (
+      * Note: The FADT revision value is unreliable. Only the length can be
+      * trusted.
+      */
+-    if (AcpiGbl_FADT.Header.Length <= ACPI_FADT_V2_SIZE)
++    if (AcpiUtReadUint32 (&AcpiGbl_FADT.Header.Length) <= ACPI_FADT_V2_SIZE)
+     {
+         AcpiGbl_FADT.PreferredProfile = 0;
+         AcpiGbl_FADT.PstateControl = 0;
+@@ -546,14 +548,19 @@ AcpiTbConvertFadt (
+      * current FADT version as defined by the ACPI specification.
+      * Thus, we will have a common FADT internally.
+      */
+-    AcpiGbl_FADT.Header.Length = sizeof (ACPI_TABLE_FADT);
++    Tmp = sizeof (ACPI_TABLE_FADT);
++    AcpiUtWriteUint (&AcpiGbl_FADT.Header.Length, sizeof (UINT32),
++            &Tmp, sizeof (UINT32));
+     /*
+      * Expand the 32-bit DSDT addresses to 64-bit as necessary.
+      * Later ACPICA code will always use the X 64-bit field.
+      */
+-    AcpiGbl_FADT.XDsdt = AcpiTbSelectAddress ("DSDT",
+-        AcpiGbl_FADT.Dsdt, AcpiGbl_FADT.XDsdt);
++    Value32 = AcpiUtReadUint32 (&AcpiGbl_FADT.Dsdt);
++    Value64 = AcpiUtReadUint64 (&AcpiGbl_FADT.XDsdt);
++    Value64 = AcpiTbSelectAddress ("DSDT", Value32, Value64);
++    AcpiUtWriteUint (&AcpiGbl_FADT.XDsdt, sizeof (UINT64),
++                &Value64, sizeof (UINT64));
+     /* If Hardware Reduced flag is set, we are all done */
+@@ -614,7 +621,11 @@ AcpiTbConvertFadt (
+         {
+             if (Address64->Address)
+             {
+-                if (Address64->Address != (UINT64) Address32)
++                Value32 = AcpiUtReadUint32 (&Address32);
++                Value64 = AcpiUtReadUint64 (&Address64->Address);
++
++                /* if (Address64->Address != (UINT64) Address32) */
++                if (Value64 != (UINT64) Value32)
+                 {
+                     /* Address mismatch */
+@@ -655,9 +666,10 @@ AcpiTbConvertFadt (
+              */
+             if (!Address64->Address || AcpiGbl_Use32BitFadtAddresses)
+             {
++                Value32 = AcpiUtReadUint32 (&Address32);
+                 AcpiTbInitGenericAddress (Address64,
+                     ACPI_ADR_SPACE_SYSTEM_IO, Length,
+-                    (UINT64) Address32, Name, Flags);
++                    (UINT64) Value32, Name, Flags);
+             }
+         }
+@@ -780,10 +792,14 @@ AcpiTbSetupFadtRegisters (
+         if (Source64->Address)
+         {
++            UINT64 Address64;
++
++            Address64 = AcpiUtReadUint64 (&Source64->Address);
++            Address64 +=
++                (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth);
+             AcpiTbInitGenericAddress (FadtPmInfoTable[i].Target,
+                 Source64->SpaceId, Pm1RegisterByteWidth,
+-                Source64->Address +
+-                    (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth),
++                Address64,
+                 "PmRegisters", 0);
+         }
+     }
diff --git a/0017-Support-most-FPDTs-in-a-big-endian-world.patch b/0017-Support-most-FPDTs-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..41c0019
--- /dev/null
@@ -0,0 +1,85 @@
+From 35f533074fb78d52e87c5a14406a136480a6fe62 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 22 Sep 2020 17:51:45 -0600
+Subject: [PATCH 17/45] Support most FPDTs in a big-endian world
+
+NB: there is no support for vendor specific records even in
+the little-endian version.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c  | 12 +++++++-----
+ source/compiler/dttable1.c |  4 +++-
+ 2 files changed, 10 insertions(+), 6 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20220331/source/common/dmtbdump1.c
+@@ -1289,9 +1289,10 @@ AcpiDmDumpFpdt (
+ {
+     ACPI_STATUS             Status;
+     ACPI_FPDT_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_FPDT);
+     ACPI_DMTABLE_INFO       *InfoTable;
++    UINT16                  SubtableType;
+     /* There is no main table (other than the standard ACPI header) */
+@@ -1299,19 +1300,20 @@ AcpiDmDumpFpdt (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Length, AcpiDmTableInfoFpdtHdr);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+         }
+-        switch (Subtable->Type)
++        SubtableType = AcpiUtReadUint16 (&Subtable->Type);
++        switch (SubtableType)
+         {
+         case ACPI_FPDT_TYPE_BOOT:
+@@ -1338,7 +1340,7 @@ AcpiDmDumpFpdt (
+             goto NextSubtable;
+         }
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Length, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+Index: acpica-unix2-20220331/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
++++ acpica-unix2-20220331/source/compiler/dttable1.c
+@@ -1493,6 +1493,7 @@ DtCompileFpdt (
+     ACPI_DMTABLE_INFO       *InfoTable;
+     DT_FIELD                **PFieldList = (DT_FIELD **) List;
+     DT_FIELD                *SubtableStart;
++    UINT16                  SubtableType;
+     while (*PFieldList)
+@@ -1511,7 +1512,8 @@ DtCompileFpdt (
+         FpdtHeader = ACPI_CAST_PTR (ACPI_FPDT_HEADER, Subtable->Buffer);
+-        switch (FpdtHeader->Type)
++        SubtableType = AcpiUtReadUint16 (&FpdtHeader->Type);
++        switch (SubtableType)
+         {
+         case ACPI_FPDT_TYPE_BOOT:
diff --git a/0018-Support-GTDT-in-a-big-endian-world.patch b/0018-Support-GTDT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..4bdb9bc
--- /dev/null
@@ -0,0 +1,69 @@
+From 492e41a24fd088c7ab609ee8ad518f69c9cd29e3 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 22 Sep 2020 18:12:01 -0600
+Subject: [PATCH 18/45] Support GTDT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c  | 13 +++++++++----
+ source/compiler/dttable1.c |  9 +++++++--
+ 2 files changed, 16 insertions(+), 6 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20220331/source/common/dmtbdump1.c
+@@ -1376,7 +1376,7 @@ AcpiDmDumpGtdt (
+ {
+     ACPI_STATUS             Status;
+     ACPI_GTDT_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_GTDT);
+     ACPI_DMTABLE_INFO       *InfoTable;
+     UINT32                  SubtableLength;
+@@ -1412,7 +1412,7 @@ AcpiDmDumpGtdt (
+     /* Subtables */
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         /* Common subtable header */
+@@ -1430,8 +1430,13 @@ AcpiDmDumpGtdt (
+         case ACPI_GTDT_TYPE_TIMER_BLOCK:
+             SubtableLength = sizeof (ACPI_GTDT_TIMER_BLOCK);
+-            GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
+-                Subtable))->TimerCount;
++            {
++                UINT32 Tmp32;
++
++                Tmp32 = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
++                    Subtable))->TimerCount;
++                GtCount = AcpiUtReadUint32 (&Tmp32);
++            }
+             InfoTable = AcpiDmTableInfoGtdt0;
+             break;
+Index: acpica-unix2-20220331/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
++++ acpica-unix2-20220331/source/compiler/dttable1.c
+@@ -1439,8 +1439,13 @@ DtCompileGtdt (
+             DtPushSubtable (Subtable);
+             ParentTable = DtPeekSubtable ();
+-            GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
+-                Subtable->Buffer - sizeof(ACPI_GTDT_HEADER)))->TimerCount;
++            {
++                UINT32 Tmp32;
++
++                Tmp32 = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
++                    Subtable->Buffer - sizeof (ACPI_GTDT_HEADER)))->TimerCount;
++                GtCount = AcpiUtReadUint32 (&Tmp32);
++            }
+             while (GtCount)
+             {
diff --git a/0019-Support-HEST-in-a-big-endian-world.patch b/0019-Support-HEST-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..e54f2ed
--- /dev/null
@@ -0,0 +1,75 @@
+From 6b73a4881e436bb8cf86c05c1cc4b5360efe1c7f Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 23 Sep 2020 11:54:49 -0600
+Subject: [PATCH 19/45] Support HEST in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c  | 10 ++++++----
+ source/compiler/dttable1.c |  4 +++-
+ 2 files changed, 9 insertions(+), 5 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20220331/source/common/dmtbdump1.c
+@@ -1517,12 +1517,13 @@ AcpiDmDumpHest (
+ {
+     ACPI_STATUS             Status;
+     ACPI_HEST_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_HEST);
+     ACPI_DMTABLE_INFO       *InfoTable;
+     UINT32                  SubtableLength;
+     UINT32                  BankCount;
+     ACPI_HEST_IA_ERROR_BANK *BankTable;
++    UINT16                  SubtableType;
+     /* Main table */
+@@ -1536,10 +1537,11 @@ AcpiDmDumpHest (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         BankCount = 0;
+-        switch (Subtable->Type)
++        SubtableType = Subtable->Type;
++        switch (SubtableType)
+         {
+         case ACPI_HEST_TYPE_IA32_CHECK:
+@@ -1606,7 +1608,7 @@ AcpiDmDumpHest (
+             /* Cannot continue on unknown type - no length */
+             AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n",
+-                Subtable->Type);
++                SubtableType);
+             return;
+         }
+Index: acpica-unix2-20220331/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
++++ acpica-unix2-20220331/source/compiler/dttable1.c
+@@ -1575,6 +1575,7 @@ DtCompileHest (
+     DT_FIELD                *SubtableStart;
+     ACPI_DMTABLE_INFO       *InfoTable;
+     UINT16                  Type;
++    UINT16                  Tmp16;
+     UINT32                  BankCount;
+@@ -1593,7 +1594,8 @@ DtCompileHest (
+         /* Get subtable type */
+         SubtableStart = *PFieldList;
+-        DtCompileInteger ((UINT8 *) &Type, *PFieldList, 2, 0);
++        DtCompileInteger ((UINT8 *) &Tmp16, *PFieldList, 2, 0);
++        Type = AcpiUtReadUint32 (&Tmp16);
+         switch (Type)
+         {
diff --git a/0020-Support-RSDT-RSD-PTR-in-a-big-endian-world.patch b/0020-Support-RSDT-RSD-PTR-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..e47951d
--- /dev/null
@@ -0,0 +1,37 @@
+From 198abe6e9fcb03676513146bf2f9b8ccc49e5827 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 23 Sep 2020 12:11:46 -0600
+Subject: [PATCH 20/45] Support RSDT ('RSD PTR') in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump.c
++++ acpica-unix2-20220331/source/common/dmtbdump.c
+@@ -336,6 +336,7 @@ AcpiDmDumpRsdt (
+     UINT32                  Entries;
+     UINT32                  Offset;
+     UINT32                  i;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     /* Point to start of table pointer array */
+@@ -345,12 +346,12 @@ AcpiDmDumpRsdt (
+     /* RSDT uses 32-bit pointers */
+-    Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32);
++    Entries = (TableLength - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32);
+     for (i = 0; i < Entries; i++)
+     {
+         AcpiDmLineHeader2 (Offset, sizeof (UINT32), "ACPI Table Address", i);
+-        AcpiOsPrintf ("%8.8X\n", Array[i]);
++        AcpiOsPrintf ("%8.8X\n", AcpiUtReadUint32 (&Array[i]));
+         Offset += sizeof (UINT32);
+     }
+ }
diff --git a/0021-Support-XSDT-in-a-big-endian-world.patch b/0021-Support-XSDT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..86ca379
--- /dev/null
@@ -0,0 +1,38 @@
+From 75d974e42fefabfd6684d62f58bff678b55f396b Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 23 Sep 2020 12:16:37 -0600
+Subject: [PATCH 21/45] Support XSDT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump.c
++++ acpica-unix2-20220331/source/common/dmtbdump.c
+@@ -377,6 +377,7 @@ AcpiDmDumpXsdt (
+     UINT32                  Entries;
+     UINT32                  Offset;
+     UINT32                  i;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     /* Point to start of table pointer array */
+@@ -386,12 +387,13 @@ AcpiDmDumpXsdt (
+     /* XSDT uses 64-bit pointers */
+-    Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64);
++    Entries = (TableLength - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64);
+     for (i = 0; i < Entries; i++)
+     {
+         AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i);
+-        AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Array[i]));
++        AcpiOsPrintf ("%8.8X%8.8X\n",
++                ACPI_FORMAT_UINT64 (AcpiUtReadUint64 (&Array[i])));
+         Offset += sizeof (UINT64);
+     }
+ }
diff --git a/0022-Support-SRAT-in-a-big-endian-world.patch b/0022-Support-SRAT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..0993d26
--- /dev/null
@@ -0,0 +1,52 @@
+From 724fcc83d359e4c8abbd2a48755e96049afa06d6 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 23 Sep 2020 12:25:38 -0600
+Subject: [PATCH 22/45] Support SRAT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump3.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20220331/source/common/dmtbdump3.c
+@@ -173,11 +173,12 @@ AcpiDmDumpSrat (
+     UINT32                  Offset = sizeof (ACPI_TABLE_SRAT);
+     ACPI_SUBTABLE_HEADER    *Subtable;
+     ACPI_DMTABLE_INFO       *InfoTable;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     /* Main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoSrat);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -186,12 +187,12 @@ AcpiDmDumpSrat (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Length, AcpiDmTableInfoSratHdr);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -250,7 +251,7 @@ AcpiDmDumpSrat (
+         }
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Length, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
diff --git a/0023-Support-SLIT-in-a-big-endian-world.patch b/0023-Support-SLIT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..15936a4
--- /dev/null
@@ -0,0 +1,61 @@
+From b11d50752feb9f1b52db076d1fb4753b30a53642 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 23 Sep 2020 12:49:52 -0600
+Subject: [PATCH 23/45] Support SLIT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump3.c  | 8 +++++---
+ source/compiler/dttable2.c | 2 +-
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20220331/source/common/dmtbdump3.c
+@@ -96,11 +96,12 @@ AcpiDmDumpSlit (
+     UINT32                  Localities;
+     UINT32                  i;
+     UINT32                  j;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     /* Main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoSlit);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -108,7 +109,8 @@ AcpiDmDumpSlit (
+     /* Display the Locality NxN Matrix */
+-    Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount;
++    Localities = (UINT32)
++        AcpiUtReadUint64 (&ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount);
+     Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]);
+     Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry;
+@@ -121,7 +123,7 @@ AcpiDmDumpSlit (
+         {
+             /* Check for beyond EOT */
+-            if (Offset >= Table->Length)
++            if (Offset >= TableLength)
+             {
+                 AcpiOsPrintf (
+                     "\n**** Not enough room in table for all localities\n");
+Index: acpica-unix2-20220331/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
++++ acpica-unix2-20220331/source/compiler/dttable2.c
+@@ -2234,7 +2234,7 @@ DtCompileSlit (
+     ParentTable = DtPeekSubtable ();
+     DtInsertSubtable (ParentTable, Subtable);
+-    Localities = *ACPI_CAST_PTR (UINT32, Subtable->Buffer);
++    Localities = (UINT32) AcpiUtReadUint64 (Subtable->Buffer);
+     LocalityBuffer = UtLocalCalloc (Localities);
+     LocalityListLength = 0;
diff --git a/0024-Support-MSCT-in-a-big-endian-world.patch b/0024-Support-MSCT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..5ee3854
--- /dev/null
@@ -0,0 +1,43 @@
+From ae38e1578d18abf41330bb3dbaef9ea56a52f49b Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 23 Sep 2020 15:44:21 -0600
+Subject: [PATCH 24/45] Support MSCT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -1185,11 +1185,12 @@ AcpiDmDumpMsct (
+     ACPI_STATUS             Status;
+     UINT32                  Offset = sizeof (ACPI_TABLE_MSCT);
+     ACPI_MSCT_PROXIMITY     *Subtable;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     /* Main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoMsct);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -1198,12 +1199,12 @@ AcpiDmDumpMsct (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0);
+         if (ACPI_FAILURE (Status))
+         {
diff --git a/0025-Support-MPST-in-a-big-endian-world.patch b/0025-Support-MPST-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..ef704b7
--- /dev/null
@@ -0,0 +1,152 @@
+From 0a25688f36df62579f4dd0444ceba33a0f8d4dcc Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 23 Sep 2020 16:08:24 -0600
+Subject: [PATCH 25/45] Support MPST in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c  | 33 +++++++++++++++++++--------------
+ source/compiler/dttable2.c |  8 ++++----
+ 2 files changed, 23 insertions(+), 18 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -1047,11 +1047,13 @@ AcpiDmDumpMpst (
+     UINT16                  SubtableCount;
+     UINT32                  PowerStateCount;
+     UINT32                  ComponentCount;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
++    UINT16                  Tmp16;
+     /* Main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoMpst);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -1059,13 +1061,14 @@ AcpiDmDumpMpst (
+     /* Subtable: Memory Power Node(s) */
+-    SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount;
++    Tmp16 = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount;
++    SubtableCount = AcpiUtReadUint16 (&Tmp16);
+     Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset);
+-    while ((Offset < Table->Length) && SubtableCount)
++    while ((Offset < TableLength) && SubtableCount)
+     {
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable0,
+             sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -1074,8 +1077,8 @@ AcpiDmDumpMpst (
+         /* Extract the sub-subtable counts */
+-        PowerStateCount = Subtable0->NumPowerStates;
+-        ComponentCount = Subtable0->NumPhysicalComponents;
++        PowerStateCount = AcpiUtReadUint16 (&Subtable0->NumPowerStates);
++        ComponentCount = AcpiUtReadUint16 (&Subtable0->NumPhysicalComponents);
+         Offset += sizeof (ACPI_MPST_POWER_NODE);
+         /* Sub-subtables - Memory Power State Structure(s) */
+@@ -1086,7 +1089,7 @@ AcpiDmDumpMpst (
+         while (PowerStateCount)
+         {
+             AcpiOsPrintf ("\n");
+-            Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0A,
++            Status = AcpiDmDumpTable (TableLength, Offset, Subtable0A,
+                 sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A);
+             if (ACPI_FAILURE (Status))
+             {
+@@ -1109,7 +1112,7 @@ AcpiDmDumpMpst (
+         while (ComponentCount)
+         {
+-            Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0B,
++            Status = AcpiDmDumpTable (TableLength, Offset, Subtable0B,
+                 sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B);
+             if (ACPI_FAILURE (Status))
+             {
+@@ -1126,22 +1129,24 @@ AcpiDmDumpMpst (
+         SubtableCount--;
+         Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Subtable0,
+             sizeof (ACPI_MPST_POWER_NODE) +
+-            (sizeof (ACPI_MPST_POWER_STATE) * Subtable0->NumPowerStates) +
+-            (sizeof (ACPI_MPST_COMPONENT) * Subtable0->NumPhysicalComponents));
++            (sizeof (ACPI_MPST_POWER_STATE) *
++                AcpiUtReadUint16 (&Subtable0->NumPowerStates)) +
++            (sizeof (ACPI_MPST_COMPONENT) *
++                AcpiUtReadUint16 (&Subtable0->NumPhysicalComponents)));
+     }
+     /* Subtable: Count of Memory Power State Characteristic structures */
+     AcpiOsPrintf ("\n");
+     Subtable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable0);
+-    Status = AcpiDmDumpTable (Table->Length, Offset, Subtable1,
++    Status = AcpiDmDumpTable (TableLength, Offset, Subtable1,
+         sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+     }
+-    SubtableCount = Subtable1->CharacteristicsCount;
++    SubtableCount = AcpiUtReadUint16 (&Subtable1->CharacteristicsCount);
+     Offset += sizeof (ACPI_MPST_DATA_HDR);
+     /* Subtable: Memory Power State Characteristics structure(s) */
+@@ -1149,10 +1154,10 @@ AcpiDmDumpMpst (
+     Subtable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, Subtable1,
+         sizeof (ACPI_MPST_DATA_HDR));
+-    while ((Offset < Table->Length) && SubtableCount)
++    while ((Offset < TableLength) && SubtableCount)
+     {
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable2,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable2,
+             sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2);
+         if (ACPI_FAILURE (Status))
+         {
+Index: acpica-unix2-20220331/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
++++ acpica-unix2-20220331/source/compiler/dttable2.c
+@@ -359,7 +359,7 @@ DtCompileMpst (
+     DtPushSubtable (Subtable);
+     MpstChannelInfo = ACPI_CAST_PTR (ACPI_MPST_CHANNEL, Subtable->Buffer);
+-    SubtableCount = MpstChannelInfo->PowerNodeCount;
++    SubtableCount = AcpiUtReadUint16 (&MpstChannelInfo->PowerNodeCount);
+     while (*PFieldList && SubtableCount)
+     {
+@@ -377,8 +377,8 @@ DtCompileMpst (
+         DtPushSubtable (Subtable);
+         MpstPowerNode = ACPI_CAST_PTR (ACPI_MPST_POWER_NODE, Subtable->Buffer);
+-        PowerStateCount = MpstPowerNode->NumPowerStates;
+-        ComponentCount = MpstPowerNode->NumPhysicalComponents;
++        PowerStateCount = AcpiUtReadUint16 (&MpstPowerNode->NumPowerStates);
++        ComponentCount = AcpiUtReadUint16 (&MpstPowerNode->NumPhysicalComponents);
+         ParentTable = DtPeekSubtable ();
+@@ -431,7 +431,7 @@ DtCompileMpst (
+     DtPushSubtable (Subtable);
+     MpstDataHeader = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable->Buffer);
+-    SubtableCount = MpstDataHeader->CharacteristicsCount;
++    SubtableCount = AcpiUtReadUint16(&MpstDataHeader->CharacteristicsCount);
+     ParentTable = DtPeekSubtable ();
diff --git a/0026-Support-NFIT-in-a-big-endian-world.patch b/0026-Support-NFIT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..6b85634
--- /dev/null
@@ -0,0 +1,227 @@
+From 5aec8511fc433a71cb8b6d26be464355d0c3f5cc Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Thu, 24 Sep 2020 15:25:53 -0600
+Subject: [PATCH 26/45] Support NFIT in a big-endian world
+
+NB: this required correcting the starting pointer for the NFIT
+SMBIOS subtable; otherwise, disassembly did not work properly.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtable.c    |  4 ++--
+ source/common/dmtbdump2.c  | 49 ++++++++++++++++++++++----------------
+ source/compiler/dttable2.c | 11 ++++++---
+ 3 files changed, 39 insertions(+), 25 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtable.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtable.c
++++ acpica-unix2-20220331/source/common/dmtable.c
+@@ -1766,13 +1766,13 @@ AcpiDmDumpTable (
+             /* NFIT subtable types */
+-            Temp16 = ACPI_GET16 (Target);
++            Temp16 = AcpiUtReadUint16 (Target);
+             if (Temp16 > ACPI_NFIT_TYPE_RESERVED)
+             {
+                 Temp16 = ACPI_NFIT_TYPE_RESERVED;
+             }
+-            AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
++            AcpiOsPrintf (UINT16_FORMAT, Temp16,
+                 AcpiDmNfitSubnames[Temp16]);
+             break;
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -1244,18 +1244,23 @@ AcpiDmDumpNfit (
+     ACPI_STATUS             Status;
+     UINT32                  Offset = sizeof (ACPI_TABLE_NFIT);
+     UINT32                  FieldOffset = 0;
+-    UINT32                  Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     ACPI_NFIT_HEADER        *Subtable;
+     ACPI_DMTABLE_INFO       *InfoTable;
+     ACPI_NFIT_INTERLEAVE    *Interleave = NULL;
+     ACPI_NFIT_SMBIOS        *SmbiosInfo = NULL;
+     ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL;
+     UINT32                  i;
++    UINT32                  Length;
++    UINT32                  LineCount;
++    UINT16                  SubtableLength;
++    UINT16                  SubtableType;
++    UINT16                  HintCount;
+     /* Main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoNfit);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoNfit);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -1264,19 +1269,21 @@ AcpiDmDumpNfit (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* NFIT subtable header */
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+-            Subtable->Length, AcpiDmTableInfoNfitHdr);
++        SubtableType = AcpiUtReadUint16 (&Subtable->Type);
++        SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
++            SubtableLength, AcpiDmTableInfoNfitHdr);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+         }
+-        switch (Subtable->Type)
++        switch (SubtableType)
+         {
+         case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
+@@ -1327,11 +1334,11 @@ AcpiDmDumpNfit (
+         default:
+             AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n",
+-                Subtable->Type);
++                SubtableType);
+             /* Attempt to continue */
+-            if (!Subtable->Length)
++            if (!SubtableLength)
+             {
+                 AcpiOsPrintf ("Invalid zero length subtable\n");
+                 return;
+@@ -1340,8 +1347,8 @@ AcpiDmDumpNfit (
+         }
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+-            Subtable->Length, InfoTable);
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
++            SubtableLength, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -1349,14 +1356,15 @@ AcpiDmDumpNfit (
+         /* Per-subtable variable-length fields */
+-        switch (Subtable->Type)
++        switch (SubtableType)
+         {
+         case ACPI_NFIT_TYPE_INTERLEAVE:
+             Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable);
+-            for (i = 0; i < Interleave->LineCount; i++)
++            LineCount = AcpiUtReadUint32 (&Interleave->LineCount);
++            for (i = 0; i < LineCount; i++)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset,
++                Status = AcpiDmDumpTable (TableLength, Offset + FieldOffset,
+                     &Interleave->LineOffset[i],
+                     sizeof (UINT32), AcpiDmTableInfoNfit2a);
+                 if (ACPI_FAILURE (Status))
+@@ -1370,14 +1378,14 @@ AcpiDmDumpNfit (
+         case ACPI_NFIT_TYPE_SMBIOS:
+-            Length = Subtable->Length -
++            Length = SubtableLength -
+                 sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8);
+             if (Length)
+             {
+-                Status = AcpiDmDumpTable (Table->Length,
++                Status = AcpiDmDumpTable (TableLength,
+                     sizeof (ACPI_NFIT_SMBIOS) - sizeof (UINT8),
+-                    SmbiosInfo,
++                    SmbiosInfo + Offset,
+                     Length, AcpiDmTableInfoNfit3a);
+                 if (ACPI_FAILURE (Status))
+                 {
+@@ -1390,9 +1398,10 @@ AcpiDmDumpNfit (
+         case ACPI_NFIT_TYPE_FLUSH_ADDRESS:
+             Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable);
+-            for (i = 0; i < Hint->HintCount; i++)
++            HintCount = AcpiUtReadUint16 (&Hint->HintCount);
++            for (i = 0; i < HintCount; i++)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset,
++                Status = AcpiDmDumpTable (TableLength, Offset + FieldOffset,
+                     &Hint->HintAddress[i],
+                     sizeof (UINT64), AcpiDmTableInfoNfit6a);
+                 if (ACPI_FAILURE (Status))
+@@ -1411,8 +1420,8 @@ AcpiDmDumpNfit (
+ NextSubtable:
+         /* Point to next subtable */
+-        Offset += Subtable->Length;
+-        Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, Subtable->Length);
++        Offset += SubtableLength;
++        Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, SubtableLength);
+     }
+ }
+Index: acpica-unix2-20220331/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
++++ acpica-unix2-20220331/source/compiler/dttable2.c
+@@ -506,6 +506,7 @@ DtCompileNfit (
+     UINT32                  Count;
+     ACPI_NFIT_INTERLEAVE    *Interleave = NULL;
+     ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL;
++    UINT16                  NfitHeaderType;
+     /* Main table */
+@@ -539,7 +540,8 @@ DtCompileNfit (
+         NfitHeader = ACPI_CAST_PTR (ACPI_NFIT_HEADER, Subtable->Buffer);
+-        switch (NfitHeader->Type)
++        NfitHeaderType = AcpiUtReadUint16 (&NfitHeader->Type);
++        switch (NfitHeaderType)
+         {
+         case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
+@@ -599,7 +601,7 @@ DtCompileNfit (
+         DtInsertSubtable (ParentTable, Subtable);
+         DtPopSubtable ();
+-        switch (NfitHeader->Type)
++        switch (NfitHeaderType)
+         {
+         case ACPI_NFIT_TYPE_INTERLEAVE:
+@@ -625,7 +627,8 @@ DtCompileNfit (
+                 Count++;
+             }
+-            Interleave->LineCount = Count;
++            AcpiUtWriteUint (&Interleave->LineCount, sizeof (UINT32),
++                &Count, sizeof (UINT32));
+             break;
+         case ACPI_NFIT_TYPE_SMBIOS:
+@@ -671,6 +674,8 @@ DtCompileNfit (
+             }
+             Hint->HintCount = (UINT16) Count;
++            AcpiUtWriteUint (&Hint->HintCount, sizeof (UINT16),
++                &Count, sizeof (UINT32));
+             break;
+         default:
diff --git a/0027-Support-SDEV-in-a-big-endian-world.patch b/0027-Support-SDEV-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..680961e
--- /dev/null
@@ -0,0 +1,206 @@
+From 3d1ac6e76ad0c0d6454671b190ccbbfafb0cb4cc Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 29 Jun 2021 16:03:36 -0600
+Subject: [PATCH 27/45] Support SDEV in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c  | 48 +++++++++++++++++++++-----------------
+ source/compiler/dttable2.c | 27 ++++++++++++++++++++-
+ 2 files changed, 52 insertions(+), 23 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -2581,7 +2581,7 @@ AcpiDmDumpSdev (
+     ACPI_SDEV_NAMESPACE         *Namesp;
+     ACPI_DMTABLE_INFO           *InfoTable;
+     ACPI_DMTABLE_INFO           *SecureComponentInfoTable;
+-    UINT32                      Length = Table->Length;
++    UINT32                      TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                      Offset = sizeof (ACPI_TABLE_SDEV);
+     UINT16                      PathOffset;
+     UINT16                      PathLength;
+@@ -2589,11 +2589,12 @@ AcpiDmDumpSdev (
+     UINT16                      VendorDataLength;
+     ACPI_SDEV_SECURE_COMPONENT  *SecureComponent = NULL;
+     UINT32                      CurrentOffset = 0;
++    UINT16                      SubtableLength;
+     /* Main table */
+-    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSdev);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoSdev);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -2602,13 +2603,14 @@ AcpiDmDumpSdev (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+-            Subtable->Length, AcpiDmTableInfoSdevHdr);
++      SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
++            SubtableLength, AcpiDmTableInfoSdevHdr);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -2631,8 +2633,8 @@ AcpiDmDumpSdev (
+         }
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, 0, Subtable,
+-            Subtable->Length, InfoTable);
++        Status = AcpiDmDumpTable (TableLength, 0, Subtable,
++            SubtableLength, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -2691,12 +2693,12 @@ AcpiDmDumpSdev (
+             /* Dump the PCIe device ID(s) */
+             Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable);
+-            PathOffset = Namesp->DeviceIdOffset;
+-            PathLength = Namesp->DeviceIdLength;
++            PathOffset = AcpiUtReadUint16 (&Namesp->DeviceIdOffset);
++            PathLength = AcpiUtReadUint16 (&Namesp->DeviceIdLength);
+             if (PathLength)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, CurrentOffset,
++                Status = AcpiDmDumpTable (TableLength, CurrentOffset,
+                     ACPI_ADD_PTR (UINT8, Namesp, PathOffset),
+                     PathLength, AcpiDmTableInfoSdev0a);
+                 if (ACPI_FAILURE (Status))
+@@ -2708,14 +2710,14 @@ AcpiDmDumpSdev (
+             /* Dump the vendor-specific data */
+-            VendorDataLength =
+-                Namesp->VendorDataLength;
++            VendorDataLength = AcpiUtReadUint16 (&Namesp->VendorDataLength);
+             VendorDataOffset =
+-                Namesp->DeviceIdOffset + Namesp->DeviceIdLength;
++                AcpiUtReadUint16 (&Namesp->DeviceIdOffset) +
++              AcpiUtReadUint16 (&Namesp->DeviceIdLength);
+             if (VendorDataLength)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, 0,
++                Status = AcpiDmDumpTable (TableLength, 0,
+                     ACPI_ADD_PTR (UINT8, Namesp, VendorDataOffset),
+                     VendorDataLength, AcpiDmTableInfoSdev1b);
+                 if (ACPI_FAILURE (Status))
+@@ -2730,12 +2732,12 @@ AcpiDmDumpSdev (
+             /* PCI path substructures */
+             Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable);
+-            PathOffset = Pcie->PathOffset;
+-            PathLength = Pcie->PathLength;
++            PathOffset = AcpiUtReadUint16 (&Pcie->PathOffset);
++            PathLength = AcpiUtReadUint16 (&Pcie->PathLength);
+             while (PathLength)
+             {
+-                Status = AcpiDmDumpTable (Table->Length,
++                Status = AcpiDmDumpTable (TableLength,
+                     PathOffset + Offset,
+                     ACPI_ADD_PTR (UINT8, Pcie, PathOffset),
+                     sizeof (ACPI_SDEV_PCIE_PATH), AcpiDmTableInfoSdev1a);
+@@ -2750,12 +2752,14 @@ AcpiDmDumpSdev (
+             /* VendorData */
+-            VendorDataLength = Pcie->VendorDataLength;
+-            VendorDataOffset = Pcie->PathOffset + Pcie->PathLength;
++            VendorDataLength = AcpiUtReadUint16 (&Pcie->VendorDataLength);
++            VendorDataOffset = 
++                  AcpiUtReadUint16 (&Pcie->PathOffset) +
++                  AcpiUtReadUint16 (&Pcie->PathLength);
+             if (VendorDataLength)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, 0,
++                Status = AcpiDmDumpTable (TableLength, 0,
+                     ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset),
+                     VendorDataLength, AcpiDmTableInfoSdev1b);
+                 if (ACPI_FAILURE (Status))
+@@ -2772,8 +2776,8 @@ AcpiDmDumpSdev (
+ NextSubtable:
+         /* Point to next subtable */
+-        Offset += Subtable->Length;
++        Offset += SubtableLength;
+         Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Subtable,
+-            Subtable->Length);
++            SubtableLength);
+     }
+ }
+Index: acpica-unix2-20220331/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
++++ acpica-unix2-20220331/source/compiler/dttable2.c
+@@ -1890,6 +1890,7 @@ DtCompileSdev (
+     UINT32                      EntryCount;
+     ACPI_SDEV_SECURE_COMPONENT  *SecureComponent = NULL;
+     UINT16                      ComponentLength = 0;
++    UINT16                      Tmp16;
+     /* Subtables */
+@@ -1911,7 +1912,7 @@ DtCompileSdev (
+         DtPushSubtable (Subtable);
+         SdevHeader = ACPI_CAST_PTR (ACPI_SDEV_HEADER, Subtable->Buffer);
+-        SdevHeader->Length = (UINT8)(sizeof (ACPI_SDEV_HEADER));
++        SdevHeader->Length = (UINT16) (sizeof (ACPI_SDEV_HEADER));
+         switch (SdevHeader->Type)
+         {
+@@ -2084,6 +2085,18 @@ DtCompileSdev (
+                 }
+             }
++            /* Make sure everything is now little-endian */
++            Tmp16 = AcpiUtReadUint16 (&SdevHeader->Length);
++            SdevHeader->Length = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Namesp->DeviceIdOffset);
++            Namesp->DeviceIdOffset = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Namesp->DeviceIdLength);
++            Namesp->DeviceIdLength = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Namesp->VendorDataOffset);
++            Namesp->VendorDataOffset = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Namesp->VendorDataLength);
++            Namesp->VendorDataLength = Tmp16;
++
+             break;
+         case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
+@@ -2146,6 +2159,18 @@ DtCompileSdev (
+             SdevHeader->Length =
+                 sizeof (ACPI_SDEV_PCIE) +
+                 Pcie->PathLength + Pcie->VendorDataLength;
++
++            Tmp16 = AcpiUtReadUint16 (&SdevHeader->Length);
++            SdevHeader->Length = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Pcie->PathOffset);
++            Pcie->PathOffset = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Pcie->PathLength);
++            Pcie->PathLength = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Pcie->VendorDataOffset);
++            Pcie->VendorDataOffset = Tmp16;
++            Tmp16 = AcpiUtReadUint16 (&Pcie->VendorDataLength);
++            Pcie->VendorDataLength = Tmp16;
++              
+             break;
+         default:
diff --git a/0028-Support-HMAT-in-a-big-endian-world.patch b/0028-Support-HMAT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..386db57
--- /dev/null
@@ -0,0 +1,278 @@
+From 915b8b70726fd01befdeac0c8630db528ac40552 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 25 Sep 2020 16:56:55 -0600
+Subject: [PATCH 28/45] Support HMAT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c  | 70 ++++++++++++++++++++++----------------
+ source/compiler/dttable1.c | 24 ++++++++++---
+ 2 files changed, 59 insertions(+), 35 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20220331/source/common/dmtbdump1.c
+@@ -1680,37 +1680,45 @@ AcpiDmDumpHmat (
+     UINT32                  Length;
+     ACPI_DMTABLE_INFO       *InfoTable;
+     UINT32                  i, j;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
++    UINT16                  HmatStructType;
++    UINT32                  HmatStructLength;
++    UINT32                  InitPDs;
++    UINT32                  TgtPDs;
++    UINT16                  SMBIOSHandles;
+     /* Main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoHmat);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoHmat);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+     }
+     Offset = sizeof (ACPI_TABLE_HMAT);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         AcpiOsPrintf ("\n");
+         /* Dump HMAT structure header */
+         HmatStruct = ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, Table, Offset);
+-        if (HmatStruct->Length < sizeof (ACPI_HMAT_STRUCTURE))
++        HmatStructLength = AcpiUtReadUint32 (&HmatStruct->Length);
++        if (HmatStructLength < sizeof (ACPI_HMAT_STRUCTURE))
+         {
+             AcpiOsPrintf ("Invalid HMAT structure length\n");
+             return;
+         }
+-        Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct,
+-            HmatStruct->Length, AcpiDmTableInfoHmatHdr);
++        Status = AcpiDmDumpTable (TableLength, Offset, HmatStruct,
++            HmatStructLength, AcpiDmTableInfoHmatHdr);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+         }
+-        switch (HmatStruct->Type)
++        HmatStructType = AcpiUtReadUint16 (&HmatStruct->Type);
++        switch (HmatStructType)
+         {
+         case ACPI_HMAT_TYPE_ADDRESS_RANGE:
+@@ -1733,7 +1741,7 @@ AcpiDmDumpHmat (
+         default:
+             AcpiOsPrintf ("\n**** Unknown HMAT structure type 0x%X\n",
+-                HmatStruct->Type);
++                HmatStructType);
+             /* Attempt to continue */
+@@ -1742,13 +1750,13 @@ AcpiDmDumpHmat (
+         /* Dump HMAT structure body */
+-        if (HmatStruct->Length < Length)
++        if (HmatStructLength < Length)
+         {
+             AcpiOsPrintf ("Invalid HMAT structure length\n");
+             return;
+         }
+-        Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct,
+-            HmatStruct->Length, InfoTable);
++        Status = AcpiDmDumpTable (TableLength, Offset, HmatStruct,
++            HmatStructLength, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -1756,7 +1764,7 @@ AcpiDmDumpHmat (
+         /* Dump HMAT structure additionals */
+-        switch (HmatStruct->Type)
++        switch (HmatStructType)
+         {
+         case ACPI_HMAT_TYPE_LOCALITY:
+@@ -1765,15 +1773,16 @@ AcpiDmDumpHmat (
+             /* Dump initiator proximity domains */
+-            if ((UINT32)(HmatStruct->Length - SubtableOffset) <
+-                (UINT32)(HmatLocality->NumberOfInitiatorPDs * 4))
++            InitPDs = AcpiUtReadUint32 (&HmatLocality->NumberOfInitiatorPDs);
++            if ((UINT32) (HmatStructLength - SubtableOffset) <
++                (UINT32) (InitPDs * 4))
+             {
+                 AcpiOsPrintf ("Invalid initiator proximity domain number\n");
+                 return;
+             }
+-            for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++)
++            for (i = 0; i < InitPDs; i++)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
++                Status = AcpiDmDumpTable (TableLength, Offset + SubtableOffset,
+                     ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
+                     4, AcpiDmTableInfoHmat1a);
+                 if (ACPI_FAILURE (Status))
+@@ -1786,15 +1795,16 @@ AcpiDmDumpHmat (
+             /* Dump target proximity domains */
+-            if ((UINT32)(HmatStruct->Length - SubtableOffset) <
+-                (UINT32)(HmatLocality->NumberOfTargetPDs * 4))
++            TgtPDs = AcpiUtReadUint32 (&HmatLocality->NumberOfTargetPDs);
++            if ((UINT32) (HmatStructLength - SubtableOffset) <
++                (UINT32) (TgtPDs * 4))
+             {
+                 AcpiOsPrintf ("Invalid target proximity domain number\n");
+                 return;
+             }
+-            for (i = 0; i < HmatLocality->NumberOfTargetPDs; i++)
++            for (i = 0; i < TgtPDs; i++)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
++                Status = AcpiDmDumpTable (TableLength, Offset + SubtableOffset,
+                     ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
+                     4, AcpiDmTableInfoHmat1b);
+                 if (ACPI_FAILURE (Status))
+@@ -1807,18 +1817,17 @@ AcpiDmDumpHmat (
+             /* Dump latency/bandwidth entris */
+-            if ((UINT32)(HmatStruct->Length - SubtableOffset) <
+-                (UINT32)(HmatLocality->NumberOfInitiatorPDs *
+-                         HmatLocality->NumberOfTargetPDs * 2))
++            if ((UINT32) (HmatStructLength - SubtableOffset) <
++                (UINT32) (InitPDs * TgtPDs * 2))
+             {
+                 AcpiOsPrintf ("Invalid latency/bandwidth entry number\n");
+                 return;
+             }
+-            for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++)
++            for (i = 0; i < InitPDs; i++)
+             {
+-                for (j = 0; j < HmatLocality->NumberOfTargetPDs; j++)
++                for (j = 0; j < TgtPDs; j++)
+                 {
+-                    Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
++                    Status = AcpiDmDumpTable (TableLength, Offset + SubtableOffset,
+                         ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
+                         2, AcpiDmTableInfoHmat1c);
+                     if (ACPI_FAILURE(Status))
+@@ -1838,15 +1847,16 @@ AcpiDmDumpHmat (
+             /* Dump SMBIOS handles */
+-            if ((UINT32)(HmatStruct->Length - SubtableOffset) <
+-                (UINT32)(HmatCache->NumberOfSMBIOSHandles * 2))
++            SMBIOSHandles = AcpiUtReadUint16 (&HmatCache->NumberOfSMBIOSHandles);
++            if ((UINT32) (HmatStructLength - SubtableOffset) <
++                (UINT32) (SMBIOSHandles * 2))
+             {
+                 AcpiOsPrintf ("Invalid SMBIOS handle number\n");
+                 return;
+             }
+-            for (i = 0; i < HmatCache->NumberOfSMBIOSHandles; i++)
++            for (i = 0; i < SMBIOSHandles; i++)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
++                Status = AcpiDmDumpTable (TableLength, Offset + SubtableOffset,
+                     ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
+                     2, AcpiDmTableInfoHmat2a);
+                 if (ACPI_FAILURE (Status))
+@@ -1866,6 +1876,6 @@ AcpiDmDumpHmat (
+ NextSubtable:
+         /* Point to next HMAT structure subtable */
+-        Offset += (HmatStruct->Length);
++        Offset += (HmatStructLength);
+     }
+ }
+Index: acpica-unix2-20220331/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
++++ acpica-unix2-20220331/source/compiler/dttable1.c
+@@ -1737,6 +1737,8 @@ DtCompileHmat (
+     UINT32                  TgtPDNumber;
+     UINT64                  EntryNumber;
+     UINT16                  SMBIOSHandleNumber;
++    UINT16                  HmatStructType;
++    UINT32                  Length;
+     ParentTable = DtPeekSubtable ();
+@@ -1767,7 +1769,8 @@ DtCompileHmat (
+         /* Compile HMAT structure body */
+-        switch (HmatStruct->Type)
++        HmatStructType = AcpiUtReadUint16 (&HmatStruct->Type);
++        switch (HmatStructType)
+         {
+         case ACPI_HMAT_TYPE_ADDRESS_RANGE:
+@@ -1800,7 +1803,7 @@ DtCompileHmat (
+         /* Compile HMAT structure additionals */
+-        switch (HmatStruct->Type)
++        switch (HmatStructType)
+         {
+         case ACPI_HMAT_TYPE_LOCALITY:
+@@ -1826,7 +1829,7 @@ DtCompileHmat (
+                 HmatStruct->Length += Subtable->Length;
+                 IntPDNumber++;
+             }
+-            HmatLocality->NumberOfInitiatorPDs = IntPDNumber;
++            HmatLocality->NumberOfInitiatorPDs = AcpiUtReadUint32 (&IntPDNumber);
+             /* Compile target proximity domain list */
+@@ -1847,7 +1850,7 @@ DtCompileHmat (
+                 HmatStruct->Length += Subtable->Length;
+                 TgtPDNumber++;
+             }
+-            HmatLocality->NumberOfTargetPDs = TgtPDNumber;
++            HmatLocality->NumberOfTargetPDs = AcpiUtReadUint32 (&TgtPDNumber);
+             /* Save start of the entries for reporting errors */
+@@ -1873,6 +1876,9 @@ DtCompileHmat (
+                 EntryNumber++;
+             }
++            Length = AcpiUtReadUint32 (&HmatStruct->Length);
++            HmatStruct->Length = Length;
++
+             /* Validate number of entries */
+             if (EntryNumber !=
+@@ -1906,11 +1912,19 @@ DtCompileHmat (
+                 HmatStruct->Length += Subtable->Length;
+                 SMBIOSHandleNumber++;
+             }
+-            HmatCache->NumberOfSMBIOSHandles = SMBIOSHandleNumber;
++            HmatCache->NumberOfSMBIOSHandles =
++                    AcpiUtReadUint16 (&SMBIOSHandleNumber);
++
++            Length = AcpiUtReadUint32 (&HmatStruct->Length);
++            HmatStruct->Length = Length;
++
+             break;
+         default:
++        Length = AcpiUtReadUint32(&HmatStruct->Length);
++        HmatStruct->Length = Length;
++
+             break;
+         }
+     }
diff --git a/0029-Support-PDTT-in-a-big-endian-world.patch b/0029-Support-PDTT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..51e41d1
--- /dev/null
@@ -0,0 +1,43 @@
+From 253fe3545e7d4eaa9cb93c771c9619f410109a02 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 25 Sep 2020 17:03:05 -0600
+Subject: [PATCH 29/45] Support PDTT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -1954,13 +1954,13 @@ AcpiDmDumpPdtt (
+ {
+     ACPI_STATUS             Status;
+     ACPI_PDTT_CHANNEL       *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_PDTT);
+     /* Main table */
+-    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPdtt);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoPdtt);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -1969,10 +1969,10 @@ AcpiDmDumpPdtt (
+     /* Subtables. Currently there is only one type, but can be multiples */
+     Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             sizeof (ACPI_PDTT_CHANNEL), AcpiDmTableInfoPdtt0);
+         if (ACPI_FAILURE (Status))
+         {
diff --git a/0030-Support-PPTT-in-a-big-endian-world.patch b/0030-Support-PPTT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..86fb5cd
--- /dev/null
@@ -0,0 +1,105 @@
+From 8923211d8bc1b0e4d3af6ff31ed6479057f612f6 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 25 Sep 2020 17:16:12 -0600
+Subject: [PATCH 30/45] Support PPTT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c  | 17 ++++++++++-------
+ source/compiler/dttable2.c |  7 +++++--
+ 2 files changed, 15 insertions(+), 9 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -2241,6 +2241,8 @@ AcpiDmDumpPptt (
+     UINT32                  Offset = sizeof (ACPI_TABLE_FPDT);
+     ACPI_DMTABLE_INFO       *InfoTable;
+     UINT32                  i;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
++    UINT32                  NumPrivRes;
+     /* There is no main table (other than the standard ACPI header) */
+@@ -2248,7 +2250,7 @@ AcpiDmDumpPptt (
+     /* Subtables */
+     Offset = sizeof (ACPI_TABLE_HEADER);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         AcpiOsPrintf ("\n");
+@@ -2260,7 +2262,7 @@ AcpiDmDumpPptt (
+             AcpiOsPrintf ("Invalid subtable length\n");
+             return;
+         }
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Length, AcpiDmTableInfoPpttHdr);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -2302,7 +2304,7 @@ AcpiDmDumpPptt (
+             AcpiOsPrintf ("Invalid subtable length\n");
+             return;
+         }
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Length, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -2318,15 +2320,16 @@ AcpiDmDumpPptt (
+             /* Dump SMBIOS handles */
+-            if ((UINT8)(Subtable->Length - SubtableOffset) <
+-                (UINT8)(PpttProcessor->NumberOfPrivResources * 4))
++            NumPrivRes = AcpiUtReadUint32 (&PpttProcessor->NumberOfPrivResources);
++            if ((UINT8) (Subtable->Length - SubtableOffset) <
++                (UINT8) (NumPrivRes * 4))
+             {
+                 AcpiOsPrintf ("Invalid private resource number\n");
+                 return;
+             }
+-            for (i = 0; i < PpttProcessor->NumberOfPrivResources; i++)
++            for (i = 0; i < NumPrivRes; i++)
+             {
+-                Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
++                Status = AcpiDmDumpTable (TableLength, Offset + SubtableOffset,
+                     ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset),
+                     4, AcpiDmTableInfoPptt0a);
+                 if (ACPI_FAILURE (Status))
+Index: acpica-unix2-20220331/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
++++ acpica-unix2-20220331/source/compiler/dttable2.c
+@@ -1520,6 +1520,7 @@ DtCompilePptt (
+     DT_FIELD                **PFieldList = (DT_FIELD **) List;
+     DT_FIELD                *SubtableStart;
+     ACPI_TABLE_HEADER       *PpttAcpiHeader;
++    UINT32                  NumPrivRes;
+     ParentTable = DtPeekSubtable ();
+@@ -1584,7 +1585,7 @@ DtCompilePptt (
+             {
+                 /* Compile initiator proximity domain list */
+-                PpttProcessor->NumberOfPrivResources = 0;
++                NumPrivRes = 0;
+                 while (*PFieldList)
+                 {
+                     Status = DtCompileTable (PFieldList,
+@@ -1600,8 +1601,10 @@ DtCompilePptt (
+                     DtInsertSubtable (ParentTable, Subtable);
+                     PpttHeader->Length += (UINT8)(Subtable->Length);
+-                    PpttProcessor->NumberOfPrivResources++;
++                    NumPrivRes++;
+                 }
++                PpttProcessor->NumberOfPrivResources =
++                        AcpiUtReadUint32 (&NumPrivRes);
+             }
+             break;
diff --git a/0031-Support-PCCT-in-a-big-endian-world.patch b/0031-Support-PCCT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..6400618
--- /dev/null
@@ -0,0 +1,54 @@
+From a58ff76fc6e68488d93b55016a7aeb257971a252 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 25 Sep 2020 17:39:34 -0600
+Subject: [PATCH 31/45] Support PCCT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -1850,13 +1850,13 @@ AcpiDmDumpPcct (
+     ACPI_STATUS             Status;
+     ACPI_PCCT_SUBSPACE      *Subtable;
+     ACPI_DMTABLE_INFO       *InfoTable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_PCCT);
+     /* Main table */
+-    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoPcct);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -1865,12 +1865,12 @@ AcpiDmDumpPcct (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Header.Length, AcpiDmTableInfoPcctHdr);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -1918,7 +1918,7 @@ AcpiDmDumpPcct (
+         }
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Subtable->Header.Length, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
diff --git a/0032-Support-WDAT-in-a-big-endian-world.patch b/0032-Support-WDAT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..9bf59a7
--- /dev/null
@@ -0,0 +1,43 @@
+From ff1449919ee7d395d301e3a56a4ba333604d0458 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 25 Sep 2020 18:13:20 -0600
+Subject: [PATCH 32/45] Support WDAT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump3.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20220331/source/common/dmtbdump3.c
+@@ -680,11 +680,12 @@ AcpiDmDumpWdat (
+     ACPI_STATUS             Status;
+     UINT32                  Offset = sizeof (ACPI_TABLE_WDAT);
+     ACPI_WDAT_ENTRY         *Subtable;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     /* Main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoWdat);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -693,12 +694,12 @@ AcpiDmDumpWdat (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0);
+         if (ACPI_FAILURE (Status))
+         {
diff --git a/0033-Support-TCPA-in-a-big-endian-world.patch b/0033-Support-TCPA-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..bccfb52
--- /dev/null
@@ -0,0 +1,76 @@
+From b69b833f5a9205080b27d83379a31fad7fca1575 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Sun, 27 Sep 2020 12:09:28 -0600
+Subject: [PATCH 33/45] Support TCPA in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump3.c  | 13 ++++++++-----
+ source/compiler/dttable2.c |  4 +++-
+ 2 files changed, 11 insertions(+), 6 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20220331/source/common/dmtbdump3.c
+@@ -406,11 +406,13 @@ AcpiDmDumpTcpa (
+     ACPI_TABLE_TCPA_HDR     *Subtable = ACPI_ADD_PTR (
+                                 ACPI_TABLE_TCPA_HDR, Table, Offset);
+     ACPI_STATUS             Status;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
++    UINT16                  PlatformClass;
+     /* Main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table,
++    Status = AcpiDmDumpTable (TableLength, 0, Table,
+         0, AcpiDmTableInfoTcpaHdr);
+     if (ACPI_FAILURE (Status))
+     {
+@@ -421,18 +423,19 @@ AcpiDmDumpTcpa (
+      * Examine the PlatformClass field to determine the table type.
+      * Either a client or server table. Only one.
+      */
+-    switch (CommonHeader->PlatformClass)
++    PlatformClass = AcpiUtReadUint16 (&CommonHeader->PlatformClass);
++    switch (PlatformClass)
+     {
+     case ACPI_TCPA_CLIENT_TABLE:
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             Table->Length - Offset, AcpiDmTableInfoTcpaClient);
+         break;
+     case ACPI_TCPA_SERVER_TABLE:
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+-            Table->Length - Offset, AcpiDmTableInfoTcpaServer);
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
++            TableLength - Offset, AcpiDmTableInfoTcpaServer);
+         break;
+     default:
+Index: acpica-unix2-20220331/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
++++ acpica-unix2-20220331/source/compiler/dttable2.c
+@@ -2540,6 +2540,7 @@ DtCompileTcpa (
+     ACPI_TABLE_TCPA_HDR     *TcpaHeader;
+     DT_SUBTABLE             *ParentTable;
+     ACPI_STATUS             Status;
++    UINT16                  PlatformClass;
+     /* Compile the main table */
+@@ -2560,7 +2561,8 @@ DtCompileTcpa (
+      */
+     TcpaHeader = ACPI_CAST_PTR (ACPI_TABLE_TCPA_HDR, ParentTable->Buffer);
+-    switch (TcpaHeader->PlatformClass)
++    PlatformClass = AcpiUtReadUint16 (&TcpaHeader->PlatformClass);
++    switch (PlatformClass)
+     {
+     case ACPI_TCPA_CLIENT_TABLE:
diff --git a/0034-Support-STAO-in-a-big-endian-world.patch b/0034-Support-STAO-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..45edf5e
--- /dev/null
@@ -0,0 +1,40 @@
+From c313a76ce818135f02ab158a9f0c8e4b8e96698a Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Mon, 28 Sep 2020 11:49:42 -0600
+Subject: [PATCH 34/45] Support STAO in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump3.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20220331/source/common/dmtbdump3.c
+@@ -290,14 +290,14 @@ AcpiDmDumpStao (
+ {
+     ACPI_STATUS             Status;
+     char                    *Namepath;
+-    UINT32                  Length = Table->Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  StringLength;
+     UINT32                  Offset = sizeof (ACPI_TABLE_STAO);
+     /* Main table */
+-    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoStao);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoStao);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -305,7 +305,7 @@ AcpiDmDumpStao (
+     /* The rest of the table consists of Namepath strings */
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         Namepath = ACPI_ADD_PTR (char, Table, Offset);
+         StringLength = strlen (Namepath) + 1;
diff --git a/0035-Support-SLIC-and-MSDM-in-a-big-endian-world.patch b/0035-Support-SLIC-and-MSDM-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..d30b3d6
--- /dev/null
@@ -0,0 +1,33 @@
+From 948bebd1a0999bc3481641d3fc996c49432709c6 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Mon, 28 Sep 2020 12:49:23 -0600
+Subject: [PATCH 35/45] Support SLIC and MSDM in a big-endian world
+
+When dumping the SLIC table, it was also found that the code was
+not starting at the proper offset on disassembly.  Set the offset
+to the first byte after the header instead of the very beginning
+of the table.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump3.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20220331/source/common/dmtbdump3.c
+@@ -68,9 +68,11 @@ void
+ AcpiDmDumpSlic (
+     ACPI_TABLE_HEADER       *Table)
+ {
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+-    (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table,
+-        Table->Length - sizeof (*Table), AcpiDmTableInfoSlic);
++    (void) AcpiDmDumpTable (TableLength, sizeof (ACPI_TABLE_HEADER),
++        (void *) (Table + sizeof (*Table)),
++        TableLength - sizeof (*Table), AcpiDmTableInfoSlic);
+ }
diff --git a/0036-Support-MCFG-in-a-big-endian-world.patch b/0036-Support-MCFG-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..b8b09eb
--- /dev/null
@@ -0,0 +1,50 @@
+From 0fb79a24fb70ab1e1e4879220af82a9fa00af586 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Mon, 28 Sep 2020 13:01:18 -0600
+Subject: [PATCH 36/45] Support MCFG in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -982,11 +982,12 @@ AcpiDmDumpMcfg (
+     ACPI_STATUS             Status;
+     UINT32                  Offset = sizeof (ACPI_TABLE_MCFG);
+     ACPI_MCFG_ALLOCATION    *Subtable;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     /* Main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoMcfg);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -995,17 +996,17 @@ AcpiDmDumpMcfg (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+-        if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length)
++        if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > TableLength)
+         {
+             AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n",
+-                (UINT32) sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length));
++                (UINT32) sizeof (ACPI_MCFG_ALLOCATION) - (Offset - TableLength));
+             return;
+         }
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0);
+         if (ACPI_FAILURE (Status))
+         {
diff --git a/0037-Support-LPIT-in-a-big-endian-world.patch b/0037-Support-LPIT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..11f3ebc
--- /dev/null
@@ -0,0 +1,46 @@
+From d10bfd67b5352ff5587e06fc1f82b896bab49614 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Mon, 28 Sep 2020 16:49:30 -0600
+Subject: [PATCH 37/45] Support LPIT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -690,7 +690,7 @@ AcpiDmDumpLpit (
+ {
+     ACPI_STATUS             Status;
+     ACPI_LPIT_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_LPIT);
+     ACPI_DMTABLE_INFO       *InfoTable;
+     UINT32                  SubtableLength;
+@@ -699,11 +699,11 @@ AcpiDmDumpLpit (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -727,7 +727,7 @@ AcpiDmDumpLpit (
+             return;
+         }
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             SubtableLength, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
diff --git a/0038-Support-PMTT-in-a-big-endian-world.patch b/0038-Support-PMTT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..ca3ddc3
--- /dev/null
@@ -0,0 +1,85 @@
+From bd19995fa268ed3e93c071162d0e9c2d35ada0d4 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 29 Jun 2021 16:23:30 -0600
+Subject: [PATCH 38/45] Support PMTT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -2142,8 +2142,9 @@ AcpiDmDumpPmtt (
+ {
+     ACPI_STATUS             Status;
+     ACPI_PMTT_HEADER        *Subtable;
+-    UINT32                  Length = Table->Length;
++    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_PMTT);
++    UINT16                  SubtableLength;
+     /* Main table */
+@@ -2157,17 +2158,18 @@ AcpiDmDumpPmtt (
+     /* Subtables */
+     Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < Length)
+     {
+         /* Each of the types below contain the common subtable header */
+         AcpiOsPrintf ("\n");
++      SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
+         switch (Subtable->Type)
+         {
+         case ACPI_PMTT_TYPE_SOCKET:
+             Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-                Subtable->Length, AcpiDmTableInfoPmtt0);
++                SubtableLength, AcpiDmTableInfoPmtt0);
+             if (ACPI_FAILURE (Status))
+             {
+                 return;
+@@ -2176,7 +2178,7 @@ AcpiDmDumpPmtt (
+         case ACPI_PMTT_TYPE_CONTROLLER:
+             Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-                Subtable->Length, AcpiDmTableInfoPmtt1);
++                SubtableLength, AcpiDmTableInfoPmtt1);
+             if (ACPI_FAILURE (Status))
+             {
+                 return;
+@@ -2185,7 +2187,7 @@ AcpiDmDumpPmtt (
+        case ACPI_PMTT_TYPE_DIMM:
+             Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-                Subtable->Length, AcpiDmTableInfoPmtt2);
++                SubtableLength, AcpiDmTableInfoPmtt2);
+             if (ACPI_FAILURE (Status))
+             {
+                 return;
+@@ -2194,7 +2196,7 @@ AcpiDmDumpPmtt (
+         case ACPI_PMTT_TYPE_VENDOR:
+             Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-                Subtable->Length, AcpiDmTableInfoPmttVendor);
++                SubtableLength, AcpiDmTableInfoPmttVendor);
+             if (ACPI_FAILURE (Status))
+             {
+                 return;
+@@ -2210,9 +2212,9 @@ AcpiDmDumpPmtt (
+         /* Point to next subtable */
+-        Offset += Subtable->Length;
++        Offset += SubtableLength;
+         Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
+-            Subtable, Subtable->Length);
++            Subtable, SubtableLength);
+     }
+ }
diff --git a/0039-Support-TPM2-in-a-big-endian-world.patch b/0039-Support-TPM2-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..1e26343
--- /dev/null
@@ -0,0 +1,119 @@
+From c240ab3af6a4ad4405def7188e3d64da06a69f37 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 30 Sep 2020 18:42:38 -0600
+Subject: [PATCH 39/45] Support TPM2 in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump3.c  | 18 ++++++++++--------
+ source/compiler/dttable2.c |  8 +++++---
+ 2 files changed, 15 insertions(+), 11 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20220331/source/common/dmtbdump3.c
+@@ -475,11 +475,12 @@ AcpiDmDumpTpm2Rev3 (
+     ACPI_TABLE_TPM23        *CommonHeader = ACPI_CAST_PTR (ACPI_TABLE_TPM23, Table);
+     ACPI_TPM23_TRAILER      *Subtable = ACPI_ADD_PTR (ACPI_TPM23_TRAILER, Table, Offset);
+     ACPI_STATUS             Status;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     /* Main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm23);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoTpm23);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -491,8 +492,8 @@ AcpiDmDumpTpm2Rev3 (
+     {
+     case ACPI_TPM23_ACPI_START_METHOD:
+-        (void) AcpiDmDumpTable (Table->Length, Offset, Subtable,
+-            Table->Length - Offset, AcpiDmTableInfoTpm23a);
++        (void) AcpiDmDumpTable (TableLength, Offset, Subtable,
++            TableLength - Offset, AcpiDmTableInfoTpm23a);
+         break;
+     default:
+@@ -522,6 +523,7 @@ AcpiDmDumpTpm2 (
+     ACPI_TPM2_TRAILER       *Subtable = ACPI_ADD_PTR (ACPI_TPM2_TRAILER, Table, Offset);
+     ACPI_TPM2_ARM_SMC       *ArmSubtable;
+     ACPI_STATUS             Status;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     if (Table->Revision == 3)
+@@ -532,7 +534,7 @@ AcpiDmDumpTpm2 (
+     /* Main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoTpm2);
+     if (ACPI_FAILURE (Status))
+     {
+@@ -540,8 +542,8 @@ AcpiDmDumpTpm2 (
+     }
+     AcpiOsPrintf ("\n");
+-    Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+-        Table->Length - Offset, AcpiDmTableInfoTpm2a);
++    Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
++        TableLength - Offset, AcpiDmTableInfoTpm2a);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -556,8 +558,8 @@ AcpiDmDumpTpm2 (
+         Offset += sizeof (ACPI_TPM2_TRAILER);
+         AcpiOsPrintf ("\n");
+-        (void) AcpiDmDumpTable (Table->Length, Offset, ArmSubtable,
+-            Table->Length - Offset, AcpiDmTableInfoTpm211);
++        (void) AcpiDmDumpTable (TableLength, Offset, ArmSubtable,
++            TableLength - Offset, AcpiDmTableInfoTpm211);
+         break;
+     default:
+Index: acpica-unix2-20220331/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
++++ acpica-unix2-20220331/source/compiler/dttable2.c
+@@ -2668,6 +2668,7 @@ DtCompileTpm2 (
+     DT_SUBTABLE             *ParentTable;
+     ACPI_STATUS             Status = AE_OK;
+     ACPI_TABLE_HEADER       *Header;
++    UINT8                   StartMethod;
+     ParentTable = DtPeekSubtable ();
+@@ -2711,7 +2712,8 @@ DtCompileTpm2 (
+     /* Subtable type depends on the StartMethod */
+-    switch (Tpm2Header->StartMethod)
++    StartMethod = *(UINT8 *) &Tpm2Header->StartMethod;
++    switch (StartMethod)
+     {
+     case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC:
+@@ -2742,7 +2744,7 @@ DtCompileTpm2 (
+     case ACPI_TPM2_RESERVED10:
+         AcpiOsPrintf ("\n**** Reserved TPM2 Start Method type 0x%X\n",
+-            Tpm2Header->StartMethod);
++            StartMethod);
+         Status = AE_ERROR;
+         break;
+@@ -2750,7 +2752,7 @@ DtCompileTpm2 (
+     default:
+         AcpiOsPrintf ("\n**** Unknown TPM2 Start Method type 0x%X\n",
+-            Tpm2Header->StartMethod);
++            StartMethod);
+         Status = AE_ERROR;
+         break;
+     }
diff --git a/0040-Support-S3PT-in-a-big-endian-world.patch b/0040-Support-S3PT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..00678b7
--- /dev/null
@@ -0,0 +1,96 @@
+From 9fc0e46189feb926b13713422ea2722e273a31b5 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Mon, 19 Oct 2020 17:30:30 -0400
+Subject: [PATCH 40/45] Support S3PT in a big-endian world
+
+---
+ source/common/dmtbdump2.c  | 15 +++++++++------
+ source/compiler/dttable2.c |  4 +++-
+ 2 files changed, 12 insertions(+), 7 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -2495,6 +2495,8 @@ AcpiDmDumpS3pt (
+     ACPI_FPDT_HEADER        *Subtable;
+     ACPI_DMTABLE_INFO       *InfoTable;
+     ACPI_TABLE_S3PT         *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables);
++    UINT32                  S3ptTableLength = AcpiUtReadUint32 (&S3ptTable->Length);
++    UINT16                  SubtableType;
+     /* Main table */
+@@ -2506,19 +2508,20 @@ AcpiDmDumpS3pt (
+     }
+     Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset);
+-    while (Offset < S3ptTable->Length)
++    while (Offset < S3ptTableLength)
+     {
+         /* Common subtable header */
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (S3ptTableLength, Offset, Subtable,
+             Subtable->Length, AcpiDmTableInfoS3ptHdr);
+         if (ACPI_FAILURE (Status))
+         {
+             return 0;
+         }
+-        switch (Subtable->Type)
++        SubtableType = AcpiUtReadUint16 (&Subtable->Type);
++        switch (SubtableType)
+         {
+         case ACPI_S3PT_TYPE_RESUME:
+@@ -2533,7 +2536,7 @@ AcpiDmDumpS3pt (
+         default:
+             AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n",
+-                Subtable->Type);
++                SubtableType);
+             /* Attempt to continue */
+@@ -2546,7 +2549,7 @@ AcpiDmDumpS3pt (
+         }
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (S3ptTableLength, Offset, Subtable,
+             Subtable->Length, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+@@ -2560,7 +2563,7 @@ NextSubtable:
+         Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, Subtable->Length);
+     }
+-    return (S3ptTable->Length);
++    return (S3ptTableLength);
+ }
+Index: acpica-unix2-20220331/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
++++ acpica-unix2-20220331/source/compiler/dttable2.c
+@@ -1803,6 +1803,7 @@ DtCompileS3pt (
+     DT_SUBTABLE             *ParentTable;
+     ACPI_DMTABLE_INFO       *InfoTable;
+     DT_FIELD                *SubtableStart;
++    UINT16                  S3ptHeaderType;
+     Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3pt,
+@@ -1830,7 +1831,8 @@ DtCompileS3pt (
+         S3ptHeader = ACPI_CAST_PTR (ACPI_FPDT_HEADER, Subtable->Buffer);
+-        switch (S3ptHeader->Type)
++        S3ptHeaderType = AcpiUtReadUint16 (&S3ptHeader->Type);
++        switch (S3ptHeaderType)
+         {
+         case ACPI_S3PT_TYPE_RESUME:
diff --git a/0041-Support-IORT-in-a-big-endian-world.patch b/0041-Support-IORT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..76c9efd
--- /dev/null
@@ -0,0 +1,414 @@
+From 5bd43bca1708a56d32e63da0278e04caf2865927 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 29 Jun 2021 17:38:20 -0600
+Subject: [PATCH 41/45] Support IORT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c  | 85 ++++++++++++++++++++++----------------
+ source/compiler/dttable1.c | 40 ++++++++++--------
+ 2 files changed, 72 insertions(+), 53 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -77,17 +77,20 @@ AcpiDmDumpIort (
+     ACPI_IORT_RMR           *IortRmr = NULL;
+     UINT32                  Offset;
+     UINT32                  NodeOffset;
++    UINT32                  NodeLength;
+     UINT32                  Length;
+     ACPI_DMTABLE_INFO       *InfoTable;
+     char                    *String;
+     UINT32                  i;
+     UINT32                  MappingByteLength;
+     UINT8                   Revision;
++    UINT32                  MappingCount;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     /* Main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIort);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoIort);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -109,18 +112,19 @@ AcpiDmDumpIort (
+     /* Dump the OptionalPadding (optional) */
+-    if (Iort->NodeOffset > Offset)
++    NodeOffset = AcpiUtReadUint32 (&Iort->NodeOffset);
++    if (NodeOffset > Offset)
+     {
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Table,
+-            Iort->NodeOffset - Offset, AcpiDmTableInfoIortPad);
++        Status = AcpiDmDumpTable (TableLength, Offset, Table,
++            NodeOffset - Offset, AcpiDmTableInfoIortPad);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+         }
+     }
+-    Offset = Iort->NodeOffset;
+-    while (Offset < Table->Length)
++    Offset = AcpiUtReadUint32 (&Iort->NodeOffset);
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
+@@ -130,12 +134,12 @@ AcpiDmDumpIort (
+         if (Revision == 0)
+         {
+-            Status = AcpiDmDumpTable (Table->Length, Offset,
++            Status = AcpiDmDumpTable (TableLength, Offset,
+                 IortNode, Length, AcpiDmTableInfoIortHdr);
+         }
+         else if (Revision >= 3)
+         {
+-            Status = AcpiDmDumpTable (Table->Length, Offset,
++            Status = AcpiDmDumpTable (TableLength, Offset,
+                 IortNode, Length, AcpiDmTableInfoIortHdr3);
+         }
+@@ -166,7 +170,7 @@ AcpiDmDumpIort (
+         case ACPI_IORT_NODE_PCI_ROOT_COMPLEX:
+             InfoTable = AcpiDmTableInfoIort2;
+-            Length = IortNode->Length - NodeOffset;
++            Length = AcpiUtReadUint16 (&IortNode->Length) - NodeOffset;
+             break;
+         case ACPI_IORT_NODE_SMMU:
+@@ -179,19 +183,19 @@ AcpiDmDumpIort (
+         case ACPI_IORT_NODE_SMMU_V3:
+             InfoTable = AcpiDmTableInfoIort4;
+-            Length = IortNode->Length - NodeOffset;
++            Length = AcpiUtReadUint16 (&IortNode->Length) - NodeOffset;
+             break;
+         case ACPI_IORT_NODE_PMCG:
+             InfoTable = AcpiDmTableInfoIort5;
+-            Length = IortNode->Length - NodeOffset;
++            Length = AcpiUtReadUint16 (&IortNode->Length) - NodeOffset;
+             break;
+         case ACPI_IORT_NODE_RMR:
+             InfoTable = AcpiDmTableInfoIort6;
+-            Length = IortNode->Length - NodeOffset;
++            Length = AcpiUtReadUint16 (&IortNode->Length) - NodeOffset;
+             IortRmr = ACPI_ADD_PTR (ACPI_IORT_RMR, IortNode, NodeOffset);
+             break;
+@@ -202,7 +206,7 @@ AcpiDmDumpIort (
+             /* Attempt to continue */
+-            if (!IortNode->Length)
++            if (!AcpiUtReadUint16 (&IortNode->Length))
+             {
+                 AcpiOsPrintf ("Invalid zero length IORT node\n");
+                 return;
+@@ -213,7 +217,7 @@ AcpiDmDumpIort (
+         /* Dump the node subtable header */
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
++        Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
+             ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+             Length, InfoTable);
+         if (ACPI_FAILURE (Status))
+@@ -233,9 +237,10 @@ AcpiDmDumpIort (
+             if (IortItsGroup)
+             {
+-                for (i = 0; i < IortItsGroup->ItsCount; i++)
++              UINT32 ItsCount = AcpiUtReadUint32 (&IortItsGroup->ItsCount);
++                for (i = 0; i < ItsCount; i++)
+                 {
+-                    Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
++                    Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
+                         ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+                         4, AcpiDmTableInfoIort0a);
+                     if (ACPI_FAILURE (Status))
+@@ -252,12 +257,14 @@ AcpiDmDumpIort (
+             /* Dump the Padding (optional) */
+-            if (IortNode->Length > NodeOffset)
++            NodeLength = AcpiUtReadUint16 (&IortNode->Length);
++            if (NodeLength > NodeOffset)
+             {
+                 MappingByteLength =
+-                    IortNode->MappingCount * sizeof (ACPI_IORT_ID_MAPPING);
+-                Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
+-                    Table, IortNode->Length - NodeOffset - MappingByteLength,
++                    AcpiUtReadUint32 (&IortNode->MappingCount) *
++                  sizeof (ACPI_IORT_ID_MAPPING);
++                Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
++                    Table, NodeLength - NodeOffset - MappingByteLength,
+                     AcpiDmTableInfoIort1a);
+                 if (ACPI_FAILURE (Status))
+                 {
+@@ -274,9 +281,11 @@ AcpiDmDumpIort (
+             if (IortSmmu)
+             {
++              UINT32 InterruptCount;
++
+                 Length = 2 * sizeof (UINT64);
+-                NodeOffset = IortSmmu->GlobalInterruptOffset;
+-                Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
++                NodeOffset = AcpiUtReadUint32 (&IortSmmu->GlobalInterruptOffset);
++                Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
+                     ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+                     Length, AcpiDmTableInfoIort3a);
+                 if (ACPI_FAILURE (Status))
+@@ -284,10 +293,11 @@ AcpiDmDumpIort (
+                     return;
+                 }
+-                NodeOffset = IortSmmu->ContextInterruptOffset;
+-                for (i = 0; i < IortSmmu->ContextInterruptCount; i++)
++                NodeOffset = AcpiUtReadUint32 (&IortSmmu->ContextInterruptOffset);
++                InterruptCount = AcpiUtReadUint32 (&IortSmmu->ContextInterruptCount);
++                for (i = 0; i < InterruptCount; i++)
+                 {
+-                    Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
++                    Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
+                         ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+                         8, AcpiDmTableInfoIort3b);
+                     if (ACPI_FAILURE (Status))
+@@ -298,10 +308,11 @@ AcpiDmDumpIort (
+                     NodeOffset += 8;
+                 }
+-                NodeOffset = IortSmmu->PmuInterruptOffset;
+-                for (i = 0; i < IortSmmu->PmuInterruptCount; i++)
++                NodeOffset = AcpiUtReadUint32 (&IortSmmu->PmuInterruptOffset);
++                InterruptCount = AcpiUtReadUint32 (&IortSmmu->PmuInterruptCount);
++                for (i = 0; i < InterruptCount; i++)
+                 {
+-                    Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
++                    Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
+                         ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+                         8, AcpiDmTableInfoIort3c);
+                     if (ACPI_FAILURE (Status))
+@@ -319,12 +330,15 @@ AcpiDmDumpIort (
+             /* Validate IortRmr to avoid compiler warnings */
+             if (IortRmr)
+             {
+-                NodeOffset = IortRmr->RmrOffset;
++              UINT32 RmrCount;
++
++                NodeOffset = AcpiUtReadUint32 (&IortRmr->RmrOffset);
++                RmrCount = AcpiUtReadUint32 (&IortRmr->RmrCount);
+                 Length = sizeof (ACPI_IORT_RMR_DESC);
+-                for (i = 0; i < IortRmr->RmrCount; i++)
++                for (i = 0; i < RmrCount; i++)
+                 {
+                     AcpiOsPrintf ("\n");
+-                    Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
++                    Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
+                         ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+                         Length, AcpiDmTableInfoIort6a);
+                     if (ACPI_FAILURE (Status))
+@@ -344,12 +358,13 @@ AcpiDmDumpIort (
+         /* Dump the ID mappings */
+-        NodeOffset = IortNode->MappingOffset;
+-        for (i = 0; i < IortNode->MappingCount; i++)
++        NodeOffset = AcpiUtReadUint32 (&IortNode->MappingOffset);
++        MappingCount = AcpiUtReadUint32 (&IortNode->MappingCount);
++        for (i = 0; i < MappingCount; i++)
+         {
+             AcpiOsPrintf ("\n");
+             Length = sizeof (ACPI_IORT_ID_MAPPING);
+-            Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
++            Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
+                 ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+                 Length, AcpiDmTableInfoIortMap);
+             if (ACPI_FAILURE (Status))
+@@ -363,7 +378,7 @@ AcpiDmDumpIort (
+ NextSubtable:
+         /* Point to next node subtable */
+-        Offset += IortNode->Length;
++        Offset += AcpiUtReadUint16 (&IortNode->Length);
+     }
+ }
+Index: acpica-unix2-20220331/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
++++ acpica-unix2-20220331/source/compiler/dttable1.c
+@@ -1960,6 +1960,7 @@ DtCompileIort (
+     ACPI_IORT_ITS_GROUP     *IortItsGroup;
+     ACPI_IORT_SMMU          *IortSmmu;
+     ACPI_IORT_RMR           *IortRmr;
++    UINT32                  IortNodeOffset;
+     UINT32                  NodeNumber;
+     UINT32                  NodeLength;
+     UINT32                  IdMappingNumber;
+@@ -2005,7 +2006,7 @@ DtCompileIort (
+      * Optionally allows the generic data types to be used for filling
+      * this field.
+      */
+-    Iort->NodeOffset = sizeof (ACPI_TABLE_IORT);
++    IortNodeOffset = sizeof (ACPI_TABLE_IORT);
+     Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortPad,
+         &Subtable);
+     if (ACPI_FAILURE (Status))
+@@ -2015,7 +2016,7 @@ DtCompileIort (
+     if (Subtable)
+     {
+         DtInsertSubtable (ParentTable, Subtable);
+-        Iort->NodeOffset += Subtable->Length;
++        IortNodeOffset += Subtable->Length;
+     }
+     else
+     {
+@@ -2025,7 +2026,7 @@ DtCompileIort (
+         {
+             return (Status);
+         }
+-        Iort->NodeOffset += PaddingLength;
++        IortNodeOffset += PaddingLength;
+     }
+     NodeNumber = 0;
+@@ -2089,7 +2090,7 @@ DtCompileIort (
+                 ItsNumber++;
+             }
+-            IortItsGroup->ItsCount = ItsNumber;
++            IortItsGroup->ItsCount = AcpiUtReadUint32 (&ItsNumber);
+             break;
+         case ACPI_IORT_NODE_NAMED_COMPONENT:
+@@ -2123,15 +2124,18 @@ DtCompileIort (
+             }
+             else
+             {
+-                if (NodeLength > IortNode->MappingOffset)
++              UINT32 MappingOffset;
++
++                MappingOffset = IortNode->MappingOffset;
++                if (NodeLength > MappingOffset)
+                 {
+                     return (AE_BAD_DATA);
+                 }
+-                if (NodeLength < IortNode->MappingOffset)
++                if (NodeLength < MappingOffset)
+                 {
+                     Status = DtCompilePadding (
+-                        IortNode->MappingOffset - NodeLength,
++                        MappingOffset - NodeLength,
+                         &Subtable);
+                     if (ACPI_FAILURE (Status))
+                     {
+@@ -2139,7 +2143,7 @@ DtCompileIort (
+                     }
+                     DtInsertSubtable (ParentTable, Subtable);
+-                    NodeLength = IortNode->MappingOffset;
++                    NodeLength = MappingOffset;
+                 }
+             }
+             break;
+@@ -2172,7 +2176,7 @@ DtCompileIort (
+             /* Compile global interrupt array */
+-            IortSmmu->GlobalInterruptOffset = NodeLength;
++            IortSmmu->GlobalInterruptOffset = AcpiUtReadUint32 (&NodeLength);
+             Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3a,
+                 &Subtable);
+             if (ACPI_FAILURE (Status))
+@@ -2186,7 +2190,7 @@ DtCompileIort (
+             /* Compile context interrupt array */
+             ContextIrptNumber = 0;
+-            IortSmmu->ContextInterruptOffset = NodeLength;
++            IortSmmu->ContextInterruptOffset = AcpiUtReadUint32 (&NodeLength);
+             while (*PFieldList)
+             {
+                 Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3b,
+@@ -2206,12 +2210,12 @@ DtCompileIort (
+                 ContextIrptNumber++;
+             }
+-            IortSmmu->ContextInterruptCount = ContextIrptNumber;
++            IortSmmu->ContextInterruptCount = AcpiUtReadUint32 (&ContextIrptNumber);
+             /* Compile PMU interrupt array */
+             PmuIrptNumber = 0;
+-            IortSmmu->PmuInterruptOffset = NodeLength;
++            IortSmmu->PmuInterruptOffset = AcpiUtReadUint32 (&NodeLength);
+             while (*PFieldList)
+             {
+                 Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3c,
+@@ -2231,7 +2235,7 @@ DtCompileIort (
+                 PmuIrptNumber++;
+             }
+-            IortSmmu->PmuInterruptCount = PmuIrptNumber;
++            IortSmmu->PmuInterruptCount = AcpiUtReadUint32 (&PmuIrptNumber);
+             break;
+         case ACPI_IORT_NODE_SMMU_V3:
+@@ -2276,7 +2280,7 @@ DtCompileIort (
+             /* Compile RMR Descriptors */
+             RmrCount = 0;
+-            IortRmr->RmrOffset = NodeLength;
++            IortRmr->RmrOffset = AcpiUtReadUint32 (&NodeLength);
+             while (*PFieldList)
+             {
+                 Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort6a,
+@@ -2296,7 +2300,7 @@ DtCompileIort (
+                 RmrCount++;
+             }
+-            IortRmr->RmrCount = RmrCount;
++            IortRmr->RmrCount = AcpiUtReadUint32 (&RmrCount);
+             break;
+         default:
+@@ -2307,7 +2311,7 @@ DtCompileIort (
+         /* Compile Array of ID mappings */
+-        IortNode->MappingOffset = NodeLength;
++        IortNode->MappingOffset = AcpiUtReadUint32 (&NodeLength);
+         IdMappingNumber = 0;
+         while (*PFieldList)
+         {
+@@ -2328,7 +2332,7 @@ DtCompileIort (
+             IdMappingNumber++;
+         }
+-        IortNode->MappingCount = IdMappingNumber;
++        IortNode->MappingCount = AcpiUtReadUint32 (&IdMappingNumber);
+         if (!IdMappingNumber)
+         {
+             IortNode->MappingOffset = 0;
+@@ -2343,7 +2347,7 @@ DtCompileIort (
+         NodeNumber++;
+     }
+-    Iort->NodeCount = NodeNumber;
++    Iort->NodeCount = AcpiUtReadUint32 (&NodeNumber);
+     return (AE_OK);
+ }
diff --git a/0042-Support-IVRS-in-a-big-endian-world.patch b/0042-Support-IVRS-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..9d0a88f
--- /dev/null
@@ -0,0 +1,138 @@
+From b64cff82b2b33ed659826d777d2db039f64fd198 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 29 Jun 2021 17:45:24 -0600
+Subject: [PATCH 42/45] Support IVRS in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 34 +++++++++++++++++++---------------
+ 1 file changed, 19 insertions(+), 15 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -419,11 +419,14 @@ AcpiDmDumpIvrs (
+     ACPI_IVRS_DE_HEADER     *DeviceEntry;
+     ACPI_IVRS_HEADER        *Subtable;
+     ACPI_DMTABLE_INFO       *InfoTable;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
++    UINT16                  SubtableLength;
++
+     /* Main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoIvrs);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -433,8 +436,9 @@ AcpiDmDumpIvrs (
+     Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
++        SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
+         switch (Subtable->Type)
+         {
+         /* Type 10h, IVHD (I/O Virtualization Hardware Definition) */
+@@ -471,7 +475,7 @@ AcpiDmDumpIvrs (
+             /* Attempt to continue */
+-            if (!Subtable->Length)
++            if (!SubtableLength)
+             {
+                 AcpiOsPrintf ("Invalid zero length subtable\n");
+                 return;
+@@ -481,8 +485,8 @@ AcpiDmDumpIvrs (
+         /* Dump the subtable */
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+-            Subtable->Length, InfoTable);
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
++            SubtableLength, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -511,7 +515,7 @@ AcpiDmDumpIvrs (
+             /* Process all of the Device Entries */
+-            while (EntryOffset < (Offset + Subtable->Length))
++            while (EntryOffset < (Offset + SubtableLength))
+             {
+                 AcpiOsPrintf ("\n");
+@@ -581,7 +585,7 @@ AcpiDmDumpIvrs (
+                 /* Dump the Device Entry */
+-                Status = AcpiDmDumpTable (Table->Length, EntryOffset,
++                Status = AcpiDmDumpTable (TableLength, EntryOffset,
+                     DeviceEntry, EntryLength, InfoTable);
+                 if (ACPI_FAILURE (Status))
+                 {
+@@ -605,12 +609,12 @@ AcpiDmDumpIvrs (
+                      */
+                     if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiHid))
+                     {
+-                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
++                        Status = AcpiDmDumpTable (TableLength, EntryOffset,
+                             &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidInteger);
+                     }
+                     else
+                     {
+-                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
++                        Status = AcpiDmDumpTable (TableLength, EntryOffset,
+                             &HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidString);
+                     }
+                     if (ACPI_FAILURE (Status))
+@@ -628,12 +632,12 @@ AcpiDmDumpIvrs (
+                      */
+                     if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiCid))
+                     {
+-                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
++                        Status = AcpiDmDumpTable (TableLength, EntryOffset,
+                             &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidInteger);
+                     }
+                     else
+                     {
+-                        Status = AcpiDmDumpTable (Table->Length, EntryOffset,
++                        Status = AcpiDmDumpTable (TableLength, EntryOffset,
+                             &HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidString);
+                     }
+                     if (ACPI_FAILURE (Status))
+@@ -650,7 +654,7 @@ AcpiDmDumpIvrs (
+                         if (HidSubtable->UidType == ACPI_IVRS_UID_IS_STRING)
+                         {
+-                            Status = AcpiDmDumpTable (Table->Length, EntryOffset,
++                            Status = AcpiDmDumpTable (TableLength, EntryOffset,
+                                 &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidString);
+                             if (ACPI_FAILURE (Status))
+                             {
+@@ -659,7 +663,7 @@ AcpiDmDumpIvrs (
+                         }
+                         else /* ACPI_IVRS_UID_IS_INTEGER */
+                         {
+-                            Status = AcpiDmDumpTable (Table->Length, EntryOffset,
++                            Status = AcpiDmDumpTable (TableLength, EntryOffset,
+                                 &HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidInteger);
+                             if (ACPI_FAILURE (Status))
+                             {
+@@ -678,8 +682,8 @@ AcpiDmDumpIvrs (
+ NextSubtable:
+         /* Point to next subtable */
+-        Offset += Subtable->Length;
+-        Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, Subtable->Length);
++        Offset += SubtableLength;
++        Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, SubtableLength);
+     }
+ }
diff --git a/0043-Support-DSDT-SSDT-in-a-big-endian-world.patch b/0043-Support-DSDT-SSDT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..777f74a
--- /dev/null
@@ -0,0 +1,3171 @@
+From 14d220a34462e61fe69141c86f4c3cd2ae68c279 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Wed, 30 Sep 2020 18:59:57 -0600
+Subject: [PATCH 43/45] 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/adwalk.c                     |   3 +-
+ source/common/dmrestag.c                   |   2 +-
+ source/common/dmtables.c                   |  17 +-
+ source/common/dmtbdump.c                   |   3 +-
+ source/common/dmtbdump3.c                  |   8 +-
+ source/compiler/aslcodegen.c               |  59 ++++--
+ source/compiler/aslopcodes.c               |   3 +-
+ source/compiler/aslrestype1.c              |  60 ++++--
+ source/compiler/aslrestype1i.c             |  35 ++--
+ 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/compiler/dttable2.c                 |   3 +-
+ source/components/disassembler/dmbuffer.c  |  37 +++-
+ source/components/disassembler/dmopcode.c  |  21 +-
+ 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/namespace/nsaccess.c     |   2 +-
+ source/components/namespace/nsnames.c      |   4 +-
+ source/components/namespace/nsparse.c      |   6 +-
+ source/components/namespace/nsutils.c      |   7 +-
+ source/components/utilities/utresrc.c      |   2 +-
+ 28 files changed, 721 insertions(+), 341 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/adwalk.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/adwalk.c
++++ acpica-unix2-20220331/source/common/adwalk.c
+@@ -679,7 +679,8 @@ AcpiDmLoadDescendingOp (
+         if (!Path && Op->Common.AmlOpcode == AML_INT_NAMEDFIELD_OP)
+         {
+-            *ACPI_CAST_PTR (UINT32, &FieldPath[0]) = Op->Named.Name;
++            AcpiUtWriteUint (FieldPath, ACPI_NAMESEG_SIZE,
++                           &Op->Named.Name, ACPI_NAMESEG_SIZE);
+             FieldPath[4] = 0;
+             Path = FieldPath;
+         }
+Index: acpica-unix2-20220331/source/common/dmrestag.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmrestag.c
++++ acpica-unix2-20220331/source/common/dmrestag.c
+@@ -1048,7 +1048,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-20220331/source/common/dmtables.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtables.c
++++ acpica-unix2-20220331/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-20220331/source/common/dmtbdump.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump.c
++++ acpica-unix2-20220331/source/common/dmtbdump.c
+@@ -392,8 +392,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-20220331/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20220331/source/common/dmtbdump3.c
+@@ -741,12 +741,13 @@ AcpiDmDumpWpbt (
+ {
+     ACPI_STATUS             Status;
+     ACPI_TABLE_WPBT         *Subtable;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT16                  ArgumentsLength;
+     /* Dump the main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWpbt);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoWpbt);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -755,13 +756,13 @@ AcpiDmDumpWpbt (
+     /* Extract the arguments buffer length from the main table */
+     Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table);
+-    ArgumentsLength = Subtable->ArgumentsLength;
++    ArgumentsLength = AcpiUtReadUint16 (&Subtable->ArgumentsLength);
+     /* Dump the arguments buffer if present */
+     if (ArgumentsLength)
+     {
+-        (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength,
++        (void) AcpiDmDumpTable (TableLength, 0, Table, ArgumentsLength,
+             AcpiDmTableInfoWpbt0);
+     }
+ }
+Index: acpica-unix2-20220331/source/compiler/aslcodegen.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/aslcodegen.c
++++ acpica-unix2-20220331/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];
+@@ -312,14 +316,15 @@ CgWriteAmlOpcode (
+         /* 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 */
+@@ -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);
+-       break;
++        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-20220331/source/compiler/aslopcodes.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/aslopcodes.c
++++ acpica-unix2-20220331/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-20220331/source/compiler/aslrestype1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/aslrestype1.c
++++ acpica-unix2-20220331/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;
+@@ -214,10 +220,10 @@ RsDoMemory24Descriptor (
+     /* Validate the Min/Max/Len/Align values (Alignment==0 means 64K) */
+     RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY24,
+-        Descriptor->Memory24.Minimum,
+-        Descriptor->Memory24.Maximum,
+-        Descriptor->Memory24.AddressLength,
+-        Descriptor->Memory24.Alignment,
++        (UINT32) AcpiUtReadUint16 (&Descriptor->Memory24.Minimum),
++        (UINT32) AcpiUtReadUint16 (&Descriptor->Memory24.Maximum),
++        (UINT32) AcpiUtReadUint16 (&Descriptor->Memory24.AddressLength),
++        (UINT32) AcpiUtReadUint16 (&Descriptor->Memory24.Alignment),
+         MinOp, MaxOp, LengthOp, NULL, Info->DescriptorTypeOp);
+     return (Rnode);
+@@ -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;
+@@ -321,10 +334,10 @@ RsDoMemory32Descriptor (
+     /* Validate the Min/Max/Len/Align values */
+     RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY32,
+-        Descriptor->Memory32.Minimum,
+-        Descriptor->Memory32.Maximum,
+-        Descriptor->Memory32.AddressLength,
+-        Descriptor->Memory32.Alignment,
++        AcpiUtReadUint32 (&Descriptor->Memory32.Minimum),
++        AcpiUtReadUint32 (&Descriptor->Memory32.Maximum),
++        AcpiUtReadUint32 (&Descriptor->Memory32.AddressLength),
++        AcpiUtReadUint32 (&Descriptor->Memory32.Alignment),
+         MinOp, MaxOp, LengthOp, AlignOp, Info->DescriptorTypeOp);
+     return (Rnode);
+@@ -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-20220331/source/compiler/aslrestype1i.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/aslrestype1i.c
++++ acpica-unix2-20220331/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;
+@@ -324,7 +328,7 @@ RsDoFixedIoDescriptor (
+     /* Error checks */
+-    if (Descriptor->FixedIo.Address > 0x03FF)
++    if (AcpiUtReadUint16 (&Descriptor->FixedIo.Address) > 0x03FF)
+     {
+         AslError (ASL_WARNING, ASL_MSG_ISA_ADDRESS, AddressOp, NULL);
+     }
+@@ -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-20220331/source/compiler/aslrestype2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/aslrestype2.c
++++ acpica-unix2-20220331/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-20220331/source/compiler/aslrestype2d.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/aslrestype2d.c
++++ acpica-unix2-20220331/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-20220331/source/compiler/aslrestype2q.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/aslrestype2q.c
++++ acpica-unix2-20220331/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-20220331/source/compiler/aslrestype2w.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/aslrestype2w.c
++++ acpica-unix2-20220331/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-20220331/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
++++ acpica-unix2-20220331/source/compiler/dttable2.c
+@@ -3046,7 +3046,8 @@ DtCompileWpbt (
+     /* Extract the length of the Arguments buffer, insert into main table */
+-    Table->ArgumentsLength = (UINT16) Subtable->TotalLength;
++    AcpiUtWriteUint (&Table->ArgumentsLength, sizeof (UINT16),
++           &Subtable->TotalLength, sizeof (UINT32));
+     DtInsertSubtable (ParentTable, Subtable);
+     return (AE_OK);
+ }
+Index: acpica-unix2-20220331/source/components/disassembler/dmbuffer.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/disassembler/dmbuffer.c
++++ acpica-unix2-20220331/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 */
+@@ -947,7 +947,29 @@ AcpiDmGetHardwareIdType (
+         /* Swap from little-endian to big-endian to simplify conversion */
+-        BigEndianId = AcpiUtDwordByteSwap ((UINT32) Op->Common.Value.Integer);
++        BigEndianId = (UINT32) Op->Common.Value.Integer;
++        if (UtIsBigEndianMachine())
++        {
++            /*
++             * We'll need to store the bytes in little-endian order
++             * so they can be re-used properly later since everything is
++             * assumed to be in little-endian form.
++             */
++
++           UINT32 *Ptr = (UINT32 *)(&Op->Common.Value.Integer);
++           *Ptr = AcpiUtDwordByteSwap (BigEndianId);
++        }
++        else
++        {
++            /*
++             * We'll need to just use the bytes in big-endian order;
++             * they're already in little-endian order.
++             */
++
++            UINT32 Tmp32 = BigEndianId;
++
++            BigEndianId = AcpiUtDwordByteSwap ((UINT32) Tmp32);
++        }
+         /* Create the 3 leading ASCII letters */
+@@ -1073,11 +1095,12 @@ AcpiDmDecompressEisaId (
+ {
+     char                    IdBuffer[ACPI_EISAID_STRING_SIZE];
+     const AH_DEVICE_ID      *Info;
++    UINT32                  Tmp32 = EncodedId;
+     /* Convert EISAID to a string an emit the statement */
+-    AcpiExEisaIdToString (IdBuffer, EncodedId);
++    AcpiExEisaIdToString (IdBuffer, AcpiUtReadUint32 (&Tmp32));
+     AcpiOsPrintf ("EisaId (\"%s\")", IdBuffer);
+     /* If we know about the ID, emit the description */
+Index: acpica-unix2-20220331/source/components/disassembler/dmopcode.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/disassembler/dmopcode.c
++++ acpica-unix2-20220331/source/components/disassembler/dmopcode.c
+@@ -778,7 +778,9 @@ AcpiDmDisassembleOneOp (
+         }
+         else
+         {
+-            AcpiOsPrintf ("0x%4.4X", (UINT32) Op->Common.Value.Integer);
++            UINT16 Tmp16 = (UINT16) Op->Common.Value.Integer;
++
++            AcpiOsPrintf ("0x%4.4X", (UINT32) AcpiUtReadUint16 (&Tmp16));
+         }
+         break;
+@@ -790,14 +792,19 @@ AcpiDmDisassembleOneOp (
+         }
+         else
+         {
+-            AcpiOsPrintf ("0x%8.8X", (UINT32) Op->Common.Value.Integer);
++            UINT32 Tmp32 = (UINT32) Op->Common.Value.Integer;
++
++            AcpiOsPrintf ("0x%8.8X", (UINT32) AcpiUtReadUint32 (&Tmp32));
+         }
+         break;
+     case AML_QWORD_OP:
+-        AcpiOsPrintf ("0x%8.8X%8.8X",
+-            ACPI_FORMAT_UINT64 (Op->Common.Value.Integer));
++        {
++          UINT64 Tmp64 = AcpiUtReadUint64 (&Op->Common.Value.Integer);
++
++            AcpiOsPrintf ("0x%8.8X%8.8X", ACPI_FORMAT_UINT64 (Tmp64));
++        }
+         break;
+     case AML_STRING_OP:
+@@ -887,18 +894,18 @@ AcpiDmDisassembleOneOp (
+         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-20220331/source/components/disassembler/dmresrc.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/disassembler/dmresrc.c
++++ acpica-unix2-20220331/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-20220331/source/components/disassembler/dmresrcl.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/disassembler/dmresrcl.c
++++ acpica-unix2-20220331/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-20220331/source/components/disassembler/dmresrcl2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/disassembler/dmresrcl2.c
++++ acpica-unix2-20220331/source/components/disassembler/dmresrcl2.c
+@@ -199,22 +199,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 */
+@@ -223,15 +228,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");
+@@ -241,17 +246,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) ? "," : "");
+     }
+@@ -285,16 +290,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 */
+@@ -307,7 +314,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 */
+@@ -337,14 +345,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)
+     {
+@@ -358,10 +368,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 */
+@@ -442,6 +452,9 @@ AcpiDmPinFunctionDescriptor (
+     char                    *DeviceName = NULL;
+     UINT32                  PinCount;
+     UINT32                  i;
++    UINT16                  ResSourceOffset;
++    UINT16                  VendorOffset;
++    UINT16                  VendorLength;
+     AcpiDmIndent (Level);
+     AcpiOsPrintf ("PinFunction (%s, ",
+@@ -459,12 +472,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);
+     }
+@@ -484,15 +499,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");
+@@ -503,17 +518,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) ? "," : "");
+     }
+@@ -549,7 +564,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,
+@@ -558,7 +574,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,
+@@ -567,7 +584,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,
+@@ -693,9 +711,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, ",
+@@ -704,7 +722,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);
+@@ -761,15 +779,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 */
+@@ -777,7 +797,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);
+@@ -787,7 +807,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);
+@@ -844,15 +864,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 */
+@@ -867,13 +889,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-20220331/source/components/disassembler/dmresrcs.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/disassembler/dmresrcs.c
++++ acpica-unix2-20220331/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-20220331/source/components/disassembler/dmwalk.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/disassembler/dmwalk.c
++++ acpica-unix2-20220331/source/components/disassembler/dmwalk.c
+@@ -1163,7 +1163,7 @@ AcpiDmAscendingOp (
+         {
+             ParentOp->Common.DisasmFlags |= ACPI_PARSEOP_EMPTY_TERMLIST;
+             ASL_CV_CLOSE_PAREN (Op, Level);
+-            AcpiOsPrintf ("{");
++            AcpiOsPrintf (" {");
+         }
+     }
+Index: acpica-unix2-20220331/source/components/namespace/nsaccess.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/namespace/nsaccess.c
++++ acpica-unix2-20220331/source/components/namespace/nsaccess.c
+@@ -644,7 +644,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-20220331/source/components/namespace/nsnames.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/namespace/nsnames.c
++++ acpica-unix2-20220331/source/components/namespace/nsnames.c
+@@ -297,10 +297,10 @@ AcpiNsBuildNormalizedPath (
+     {
+         if (NextNode != Node)
+         {
+-            ACPI_PATH_PUT8(FullPath, PathSize, AML_DUAL_NAME_PREFIX, Length);
++            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-20220331/source/components/namespace/nsparse.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/namespace/nsparse.c
++++ acpica-unix2-20220331/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-20220331/source/components/namespace/nsutils.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/namespace/nsutils.c
++++ acpica-unix2-20220331/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 */
+Index: acpica-unix2-20220331/source/components/utilities/utresrc.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/utilities/utresrc.c
++++ acpica-unix2-20220331/source/components/utilities/utresrc.c
+@@ -541,7 +541,7 @@ AcpiUtGetResourceLength (
+     {
+         /* Large Resource type -- bytes 1-2 contain the 16-bit length */
+-        ACPI_MOVE_16_TO_16 (&ResourceLength, ACPI_ADD_PTR (UINT8, Aml, 1));
++        ResourceLength = AcpiUtReadUint16 (ACPI_ADD_PTR (UINT8, Aml, 1));
+     }
+     else
+Index: acpica-unix2-20220331/source/compiler/aslrestype2e.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/aslrestype2e.c
++++ acpica-unix2-20220331/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-20220331/source/compiler/aslrestype2s.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/aslrestype2s.c
++++ acpica-unix2-20220331/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;
+@@ -1444,6 +1525,7 @@ RsDoPinFunctionDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  PinCount = 0;
+     UINT32                  i;
++    UINT16                  Tmp16;
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+     CurrentByteOffset = Info->CurrentByteOffset;
+@@ -1467,7 +1549,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;
+@@ -1507,7 +1589,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;
+@@ -1555,6 +1638,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:
+@@ -1566,7 +1655,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++;
+@@ -1597,6 +1687,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);
+ }
+@@ -1630,6 +1727,8 @@ RsDoPinConfigDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  PinCount = 0;
+     UINT32                  i;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+     CurrentByteOffset = Info->CurrentByteOffset;
+@@ -1653,7 +1752,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;
+@@ -1707,7 +1806,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;
+@@ -1766,7 +1866,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++;
+@@ -1797,6 +1898,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);
+ }
+@@ -1830,6 +1941,7 @@ RsDoPinGroupDescriptor (
+     UINT32                  CurrentByteOffset;
+     UINT32                  PinCount = 0;
+     UINT32                  i;
++    UINT16                  Tmp16;
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+     CurrentByteOffset = Info->CurrentByteOffset;
+@@ -1853,7 +1965,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;
+@@ -1920,7 +2032,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++;
+@@ -1951,6 +2064,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);
+ }
+@@ -1983,6 +2106,7 @@ RsDoPinGroupFunctionDescriptor (
+     UINT16                  DescriptorSize;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+     CurrentByteOffset = Info->CurrentByteOffset;
+@@ -2006,7 +2130,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;
+@@ -2038,7 +2162,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;
+@@ -2097,6 +2222,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);
+ }
+@@ -2129,6 +2264,8 @@ RsDoPinGroupConfigDescriptor (
+     UINT16                  DescriptorSize;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT16                  Tmp16;
++    UINT32                  Tmp32;
+     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
+     CurrentByteOffset = Info->CurrentByteOffset;
+@@ -2152,7 +2289,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;
+@@ -2205,7 +2342,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;
+@@ -2266,5 +2404,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);
+ }
diff --git a/0044-Initial-support-for-WPBT-in-big-endian-needs-more.patch b/0044-Initial-support-for-WPBT-in-big-endian-needs-more.patch
new file mode 100644 (file)
index 0000000..1a2b1a2
--- /dev/null
@@ -0,0 +1,23 @@
+From bd137d3712e6bc7e4d2d11350a208a36750e4063 Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Tue, 6 Jul 2021 18:26:41 -0600
+Subject: [PATCH 44/45] Initial support for WPBT in big-endian, needs more
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/compiler/dttable2.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: acpica-unix2-20210604/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20210604.orig/source/compiler/dttable2.c
++++ acpica-unix2-20210604/source/compiler/dttable2.c
+@@ -2638,7 +2638,7 @@ DtCompileWpbt (
+     AcpiUtWriteUint (&Length, sizeof (UINT16),
+            &Subtable->TotalLength, sizeof (UINT32));
+     Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer);
+-    Table->ArgumentsLength = Length;
++    Table->ArgumentsLength = AcpiUtReadUint16 (&Length);
+     ParentTable = DtPeekSubtable ();
+     DtInsertSubtable (ParentTable, Subtable);
diff --git a/0045-CSRT-fixed-use-of-optional-ResourceInfo.patch b/0045-CSRT-fixed-use-of-optional-ResourceInfo.patch
new file mode 100644 (file)
index 0000000..201e19b
--- /dev/null
@@ -0,0 +1,213 @@
+From 0d87ee42adda7837bec3cc0ff86e40c2f2e8dc4f Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Fri, 9 Jul 2021 14:52:55 -0600
+Subject: [PATCH 45/45] CSRT: fixed use of optional ResourceInfo
+
+In a resource sub-sub-table, there may be a ResourceInfo entry.  Neither
+the compiler nor disassembler accounted for that possibility properly.
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump1.c  | 43 +++++++++++++++++++++-----------------
+ source/compiler/dttable1.c | 28 +++++++++++++------------
+ 2 files changed, 39 insertions(+), 32 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
++++ acpica-unix2-20220331/source/common/dmtbdump1.c
+@@ -669,11 +669,13 @@ AcpiDmDumpCsrt (
+     ACPI_CSRT_GROUP         *Subtable;
+     ACPI_CSRT_SHARED_INFO   *SharedInfoTable;
+     ACPI_CSRT_DESCRIPTOR    *SubSubtable;
+-    UINT32                  Length = AcpiUtReadUint32 (&Table->Length);
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_CSRT);
+     UINT32                  SubOffset;
+     UINT32                  SubSubOffset;
+     UINT32                  InfoLength;
++    UINT32                  SubtableLength;
++    UINT32                  SubSubtableLength;
+     /* The main table only contains the ACPI header, thus already handled */
+@@ -681,13 +683,14 @@ AcpiDmDumpCsrt (
+     /* Subtables (Resource Groups) */
+     Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
+-    while (Offset < Length)
++    while (Offset < TableLength)
+     {
+         /* Resource group subtable */
++        SubtableLength = AcpiUtReadUint32 (&Subtable->Length);
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Length, Offset, Subtable,
+-            Subtable->Length, AcpiDmTableInfoCsrt0);
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
++            SubtableLength, AcpiDmTableInfoCsrt0);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+@@ -700,26 +703,28 @@ AcpiDmDumpCsrt (
+             Offset + SubOffset);
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable,
+-            sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1);
++        Status = AcpiDmDumpTable (TableLength, Offset + SubOffset,
++          SharedInfoTable, sizeof (ACPI_CSRT_SHARED_INFO),
++          AcpiDmTableInfoCsrt1);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+         }
+-        SubOffset += Subtable->SharedInfoLength;
++        SubOffset += AcpiUtReadUint32 (&Subtable->SharedInfoLength);
+         /* Sub-Subtables (Resource Descriptors) */
+         SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table,
+             Offset + SubOffset);
+-        while ((SubOffset < Subtable->Length) &&
+-              ((Offset + SubOffset) < Length))
++        while ((SubOffset < SubtableLength) &&
++              ((Offset + SubOffset) < TableLength))
+         {
++          SubSubtableLength = AcpiUtReadUint32 (&SubSubtable->Length);
+             AcpiOsPrintf ("\n");
+-            Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable,
+-                SubSubtable->Length, AcpiDmTableInfoCsrt2);
++            Status = AcpiDmDumpTable (TableLength, Offset + SubOffset,
++              SubSubtable, SubSubtableLength, AcpiDmTableInfoCsrt2);
+             if (ACPI_FAILURE (Status))
+             {
+                 return;
+@@ -729,11 +734,12 @@ AcpiDmDumpCsrt (
+             /* Resource-specific info buffer */
+-            InfoLength = SubSubtable->Length - SubSubOffset;
++            InfoLength = SubSubtableLength - SubSubOffset;
+             if (InfoLength)
+             {
+-                Status = AcpiDmDumpTable (Length,
+-                    Offset + SubOffset + SubSubOffset, Table,
++                Status = AcpiDmDumpTable (TableLength,
++                  Offset + SubOffset + SubSubOffset,
++                  (UINT8 *)SubSubtable + SubSubOffset,
+                     InfoLength, AcpiDmTableInfoCsrt2a);
+                 if (ACPI_FAILURE (Status))
+                 {
+@@ -743,16 +749,15 @@ AcpiDmDumpCsrt (
+             /* Point to next sub-subtable */
+-            SubOffset += SubSubtable->Length;
++            SubOffset += SubSubtableLength;
+             SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubtable,
+-                SubSubtable->Length);
++                SubSubtableLength);
+         }
+         /* Point to next subtable */
+-        Offset += Subtable->Length;
+-        Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable,
+-            Subtable->Length);
++        Offset += SubtableLength;
++        Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable, SubtableLength);
+     }
+ }
+Index: acpica-unix2-20220331/source/compiler/dttable1.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
++++ acpica-unix2-20220331/source/compiler/dttable1.c
+@@ -716,14 +716,16 @@ DtCompileCsrt (
+     DT_SUBTABLE             *Subtable;
+     DT_SUBTABLE             *ParentTable;
+     DT_FIELD                **PFieldList = (DT_FIELD **) List;
+-    UINT32                  DescriptorCount;
++    UINT32                  DescriptorLength;
+     UINT32                  GroupLength;
+     UINT32                  Tmp;
++    UINT32                  Offset;
+     /* Subtables (Resource Groups) */
+     ParentTable = DtPeekSubtable ();
++                               
+     while (*PFieldList)
+     {
+         /* Resource group subtable */
+@@ -738,16 +740,13 @@ DtCompileCsrt (
+         /* Compute the number of resource descriptors */
+         Tmp = AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
+-                                Subtable->Buffer))->Length);
++                  Subtable->Buffer))->Length);
+         GroupLength = Tmp;
+         Tmp = AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
+-                                Subtable->Buffer))->SharedInfoLength);
++                  Subtable->Buffer))->SharedInfoLength);
+         GroupLength -= Tmp;
+         GroupLength -= sizeof (ACPI_CSRT_GROUP);
+-        DescriptorCount = (GroupLength  /
+-            sizeof (ACPI_CSRT_DESCRIPTOR));
+-
+         DtInsertSubtable (ParentTable, Subtable);
+         DtPushSubtable (Subtable);
+         ParentTable = DtPeekSubtable ();
+@@ -762,10 +761,13 @@ DtCompileCsrt (
+         }
+         DtInsertSubtable (ParentTable, Subtable);
++        DtPushSubtable (Subtable);
++        ParentTable = DtPeekSubtable ();
+         /* Sub-Subtables (Resource Descriptors) */
+-        while (*PFieldList && DescriptorCount)
++        Offset = 0;
++        while (*PFieldList && (Offset < GroupLength))
+         {
+             Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2,
+@@ -774,6 +776,10 @@ DtCompileCsrt (
+             {
+                 return (Status);
+             }
++          DescriptorLength = AcpiUtReadUint32 (
++                                 &(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
++                                   Subtable->Buffer))->Length);
++
+             DtInsertSubtable (ParentTable, Subtable);
+@@ -783,11 +789,7 @@ DtCompileCsrt (
+             {
+                 Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2a,
+                     &Subtable);
+-                if (ACPI_FAILURE (Status))
+-                {
+-                    return (Status);
+-                }
+-                if (Subtable)
++                if (ACPI_SUCCESS (Status) && Subtable)
+                 {
+                     DtInsertSubtable (ParentTable, Subtable);
+                 }
+@@ -795,7 +797,7 @@ DtCompileCsrt (
+             DtPopSubtable ();
+             ParentTable = DtPeekSubtable ();
+-            DescriptorCount--;
++            Offset += DescriptorLength;
+         }
+         DtPopSubtable ();
diff --git a/0046-Support-PHAT-in-a-big-endian-world.patch b/0046-Support-PHAT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..9a22b3b
--- /dev/null
@@ -0,0 +1,180 @@
+From 5fd729c8f6c4ce295edd142fc41e03e831ba4afb Mon Sep 17 00:00:00 2001
+From: Al Stone <ahs3@redhat.com>
+Date: Mon, 12 Jul 2021 09:39:38 -0600
+Subject: [PATCH] Support PHAT in a big-endian world
+
+Signed-off-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c  | 36 ++++++++++++++++++++----------------
+ source/compiler/dttable2.c | 12 +++++++++---
+ 2 files changed, 29 insertions(+), 19 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -2029,39 +2029,41 @@ AcpiDmDumpPhat (
+     ACPI_PHAT_HEADER        *Subtable;
+     ACPI_PHAT_VERSION_DATA  *VersionData;
+     UINT32                  RecordCount;
+-    UINT32                  Length = Table->Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_PHAT);
+-    UINT32                  SubtableLength;
++    UINT16                  SubtableLength;
+     UINT32                  PathLength;
+     UINT32                  VendorLength;
++    UINT16                  SubtableType;
+     Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Table, sizeof (ACPI_TABLE_PHAT));
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Common subtable header */
++        SubtableType = AcpiUtReadUint16 (&Subtable->Type);
++        SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
++
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Length, 0, Subtable,
++        Status = AcpiDmDumpTable (TableLength, 0, Subtable,
+             sizeof (ACPI_PHAT_HEADER), AcpiDmTableInfoPhatHdr);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+         }
+-        switch (Subtable->Type)
++        switch (SubtableType)
+         {
+         case ACPI_PHAT_TYPE_FW_VERSION_DATA:
+             InfoTable = AcpiDmTableInfoPhat0;
+-            SubtableLength = sizeof (ACPI_PHAT_VERSION_DATA);
+             break;
+         case ACPI_PHAT_TYPE_FW_HEALTH_DATA:
+             InfoTable = AcpiDmTableInfoPhat1;
+-            SubtableLength = sizeof (ACPI_PHAT_HEALTH_DATA);
+             break;
+         default:
+@@ -2072,22 +2074,22 @@ AcpiDmDumpPhat (
+             return;
+         }
+-        Status = AcpiDmDumpTable (Length, 0, Subtable,
++        Status = AcpiDmDumpTable (TableLength, 0, Subtable,
+             SubtableLength, InfoTable);
+         if (ACPI_FAILURE (Status))
+         {
+             return;
+         }
+-        switch (Subtable->Type)
++        switch (SubtableType)
+         {
+         case ACPI_PHAT_TYPE_FW_VERSION_DATA:
+             VersionData = ACPI_CAST_PTR (ACPI_PHAT_VERSION_DATA, Subtable);
+-            RecordCount = VersionData->ElementCount;
++            RecordCount = AcpiUtReadUint32 (&VersionData->ElementCount);
+             while (RecordCount)
+             {
+-                Status = AcpiDmDumpTable (Length, Offset,
++                Status = AcpiDmDumpTable (TableLength, Offset,
+                     ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_VERSION_DATA)),
+                     sizeof (ACPI_PHAT_VERSION_ELEMENT), AcpiDmTableInfoPhat0a);
+                 if (ACPI_FAILURE (Status))
+@@ -2105,7 +2107,7 @@ AcpiDmDumpPhat (
+             /* account for the null terminator */
+             PathLength = strlen (ACPI_ADD_PTR (char, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA))) + 1;
+-            Status = AcpiDmDumpTable (Length, Offset,
++            Status = AcpiDmDumpTable (TableLength, Offset,
+                 ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA)),
+                 PathLength, AcpiDmTableInfoPhat1a);
+             if (ACPI_FAILURE (Status))
+@@ -2116,8 +2118,8 @@ AcpiDmDumpPhat (
+             /* Get vendor data - data length is the remaining subtable length */
+             VendorLength =
+-                Subtable->Length - sizeof (ACPI_PHAT_HEALTH_DATA) - PathLength;
+-            Status = AcpiDmDumpTable (Length, 0,
++                SubtableLength - sizeof (ACPI_PHAT_HEALTH_DATA) - PathLength;
++            Status = AcpiDmDumpTable (TableLength, 0,
+                 ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA) + PathLength),
+                 VendorLength, AcpiDmTableInfoPhat1b);
+             if (ACPI_FAILURE (Status))
+@@ -2129,15 +2131,15 @@ AcpiDmDumpPhat (
+         default:
+             AcpiOsPrintf ("\n**** Unknown PHAT subtable type 0x%X\n\n",
+-                Subtable->Type);
++                SubtableType);
+             return;
+         }
+         /* Next subtable */
+-        Offset += Subtable->Length;
++        Offset += SubtableLength;
+         Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable,
+-            Subtable->Length);
++            SubtableLength);
+     }
+ }
+Index: acpica-unix2-20220331/source/compiler/dttable2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
++++ acpica-unix2-20220331/source/compiler/dttable2.c
+@@ -1267,6 +1267,8 @@ DtCompilePhat (
+     ACPI_DMTABLE_INFO       *Info;
+     ACPI_PHAT_VERSION_DATA  *VersionData;
+     UINT32                  RecordCount;
++    UINT16                  SubtableType;
++    UINT16                  Tmp16;
+     /* The table consist of subtables */
+@@ -1284,8 +1286,9 @@ DtCompilePhat (
+         DtPushSubtable (Subtable);
+         PhatHeader = ACPI_CAST_PTR (ACPI_PHAT_HEADER, Subtable->Buffer);
++      SubtableType = AcpiUtReadUint16 (&PhatHeader->Type);
+-        switch (PhatHeader->Type)
++        switch (SubtableType)
+         {
+         case ACPI_PHAT_TYPE_FW_VERSION_DATA:
+@@ -1316,13 +1319,13 @@ DtCompilePhat (
+         ParentTable = DtPeekSubtable ();
+         DtInsertSubtable (ParentTable, Subtable);
+-        switch (PhatHeader->Type)
++        switch (SubtableType)
+         {
+         case ACPI_PHAT_TYPE_FW_VERSION_DATA:
+             VersionData = ACPI_CAST_PTR (ACPI_PHAT_VERSION_DATA,
+                 (Subtable->Buffer - sizeof (ACPI_PHAT_HEADER)));
+-            RecordCount = VersionData->ElementCount;
++            RecordCount = AcpiUtReadUint32 (&VersionData->ElementCount);
+             while (RecordCount)
+             {
+@@ -1373,6 +1376,9 @@ DtCompilePhat (
+             DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, *PFieldList, "PHAT");
+             return (AE_ERROR);
+         }
++
++      Tmp16 = AcpiUtReadUint16 (&PhatHeader->Length);
++      PhatHeader->Length = Tmp16;
+     }
+     return (Status);
diff --git a/0047-Support-PRMT-in-a-big-endian-world.patch b/0047-Support-PRMT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..96df1d5
--- /dev/null
@@ -0,0 +1,51 @@
+Signed-off-by: Dean Nelson <dnelson@redhat.com>
+Reviewed-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -2415,13 +2415,14 @@ AcpiDmDumpPrmt (
+     ACPI_PRMT_MODULE_INFO   *PrmtModuleInfo;
+     ACPI_PRMT_HANDLER_INFO  *PrmtHandlerInfo;
+     ACPI_STATUS             Status;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  i, j;
+     /* Main table header */
+     PrmtHeader = ACPI_ADD_PTR (ACPI_TABLE_PRMT_HEADER, Table, CurrentOffset);
+-    Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtHeader,
++    Status = AcpiDmDumpTable (TableLength, CurrentOffset, PrmtHeader,
+         sizeof (ACPI_TABLE_PRMT_HEADER), AcpiDmTableInfoPrmtHdr);
+     if (ACPI_FAILURE (Status))
+     {
+@@ -2433,20 +2434,20 @@ AcpiDmDumpPrmt (
+     /* PRM Module Information Structure array */
+-    for (i = 0; i < PrmtHeader->ModuleInfoCount; ++i)
++    for (i = 0; i < AcpiUtReadUint32 (&PrmtHeader->ModuleInfoCount); ++i)
+     {
+         PrmtModuleInfo = ACPI_ADD_PTR (ACPI_PRMT_MODULE_INFO, Table, CurrentOffset);
+-        Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtModuleInfo,
++        Status = AcpiDmDumpTable (TableLength, CurrentOffset, PrmtModuleInfo,
+             sizeof (ACPI_PRMT_MODULE_INFO), AcpiDmTableInfoPrmtModule);
+         CurrentOffset += sizeof (ACPI_PRMT_MODULE_INFO);
+         /* PRM handler information structure array */
+-        for (j = 0; j < PrmtModuleInfo->HandlerInfoCount; ++j)
++        for (j = 0; j < AcpiUtReadUint16 (&PrmtModuleInfo->HandlerInfoCount); ++j)
+         {
+             PrmtHandlerInfo = ACPI_ADD_PTR (ACPI_PRMT_HANDLER_INFO, Table, CurrentOffset);
+-            Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtHandlerInfo,
++            Status = AcpiDmDumpTable (TableLength, CurrentOffset, PrmtHandlerInfo,
+                 sizeof (ACPI_PRMT_HANDLER_INFO), AcpiDmTableInfoPrmtHandler);
+             CurrentOffset += sizeof (ACPI_PRMT_HANDLER_INFO);
diff --git a/0048-Support-RGRT-in-a-big-endian-world.patch b/0048-Support-RGRT-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..818d335
--- /dev/null
@@ -0,0 +1,35 @@
+Signed-off-by: Dean Nelson <dnelson@redhat.com>
+Reviewed-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump2.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump2.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
++++ acpica-unix2-20220331/source/common/dmtbdump2.c
+@@ -2475,11 +2475,12 @@ AcpiDmDumpRgrt (
+     ACPI_STATUS             Status;
+     ACPI_TABLE_RGRT         *Subtable = ACPI_CAST_PTR (ACPI_TABLE_RGRT, Table);
+     UINT32                  Offset = sizeof (ACPI_TABLE_RGRT);
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     /* Main table */
+-    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoRgrt);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoRgrt);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -2487,8 +2488,8 @@ AcpiDmDumpRgrt (
+     /* Dump the binary image as a subtable */
+-    Status = AcpiDmDumpTable (Table->Length, Offset, &Subtable->Image,
+-        Table->Length - Offset, AcpiDmTableInfoRgrt0);
++    Status = AcpiDmDumpTable (TableLength, Offset, &Subtable->Image,
++        TableLength - Offset, AcpiDmTableInfoRgrt0);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
diff --git a/0049-Support-SVKL-in-a-big-endian-world.patch b/0049-Support-SVKL-in-a-big-endian-world.patch
new file mode 100644 (file)
index 0000000..8ba5efc
--- /dev/null
@@ -0,0 +1,42 @@
+Signed-off-by: Dean Nelson <dnelson@redhat.com>
+Reviewed-by: Al Stone <ahs3@redhat.com>
+---
+ source/common/dmtbdump3.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+Index: acpica-unix2-20220331/source/common/dmtbdump3.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
++++ acpica-unix2-20220331/source/common/dmtbdump3.c
+@@ -344,14 +344,14 @@ AcpiDmDumpSvkl (
+     ACPI_TABLE_HEADER       *Table)
+ {
+     ACPI_STATUS             Status;
+-    UINT32                  Length = Table->Length;
++    UINT32                  TableLength = AcpiUtReadUint32 (&Table->Length);
+     UINT32                  Offset = sizeof (ACPI_TABLE_SVKL);
+     ACPI_SVKL_KEY           *Subtable;
+     /* Main table */
+-    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSvkl);
++    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoSvkl);
+     if (ACPI_FAILURE (Status))
+     {
+         return;
+@@ -360,12 +360,12 @@ AcpiDmDumpSvkl (
+     /* The rest of the table consists of subtables (single type) */
+     Subtable = ACPI_ADD_PTR (ACPI_SVKL_KEY, Table, Offset);
+-    while (Offset < Table->Length)
++    while (Offset < TableLength)
+     {
+         /* Dump the subtable */
+         AcpiOsPrintf ("\n");
+-        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
++        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+             sizeof (ACPI_SVKL_KEY), AcpiDmTableInfoSvkl0);
+         if (ACPI_FAILURE (Status))
+         {
diff --git a/acpica-OPT_LDFLAGS.patch b/acpica-OPT_LDFLAGS.patch
new file mode 100644 (file)
index 0000000..2afc266
--- /dev/null
@@ -0,0 +1,26 @@
+Index: acpica-unix2-20220331/generate/unix/Makefile.config
+===================================================================
+--- acpica-unix2-20220331.orig/generate/unix/Makefile.config
++++ acpica-unix2-20220331/generate/unix/Makefile.config
+@@ -23,6 +23,9 @@
+ # OPT_CFLAGS can be overridden on the make command line by
+ #   adding OPT_CFLAGS="..." to the invocation.
+ #
++# OPT_LDFLAGS can be overridden on the make command line by
++#   adding OPT_LDFLAGS="..." to the invocation.
++#
+ # Notes:
+ #   gcc should be version 4 or greater, otherwise some of the options
+ #     used will not be recognized.
+@@ -164,6 +167,11 @@ LDFLAGS +=-m32
+ endif
+ #
++# Common linker flags
++#
++OPT_LDFLAGS ?= 
++
++#
+ # Optionally disable optimizations. Optimization causes problems on
+ # some compilers such as gcc 4.4
+ #
diff --git a/acpica-dangling-ptr.patch b/acpica-dangling-ptr.patch
new file mode 100644 (file)
index 0000000..582fb9e
--- /dev/null
@@ -0,0 +1,24 @@
+diff -Naur acpica-unix2-20211217/source/components/utilities/utdebug.c acpica-unix2-20211217.orig/source/components/utilities/utdebug.c
+--- acpica-unix2-20211217/source/components/utilities/utdebug.c        2022-03-15 17:05:07.992387565 -0600
++++ acpica-unix2-20211217.orig/source/components/utilities/utdebug.c   2021-12-17 10:48:16.000000000 -0700
+@@ -58,6 +58,10 @@
+ static const char           *AcpiGbl_FunctionExitPrefix  = "----Exit-";
++#if defined(__GNUC__) && (__GNUC__ > 11)
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wdangling-pointer"
++#endif
+ /*******************************************************************************
+  *
+  * FUNCTION:    AcpiUtInitStackPtrTrace
+@@ -114,6 +110,9 @@
+         AcpiGbl_DeepestNesting = AcpiGbl_NestingLevel;
+     }
+ }
++#if defined(__GNUC__) && (__GNUC__ > 11)
++#pragma GCC diagnostic pop
++#endif
+ /*******************************************************************************
diff --git a/acpica-dbtest.patch b/acpica-dbtest.patch
new file mode 100644 (file)
index 0000000..b33e90b
--- /dev/null
@@ -0,0 +1,40 @@
+On s390, GCC does not like the string initialization in this case.  When
+ValueToWrite is initialized this way, GCC tries to copy the entire string
+into an ACPI_OBJECT instead of just the pointer (see the use in the call
+to memcpy()).  So, move the init so GCC recognizes that ValueToWrite is
+only a pointer, and not a whole string that needs to be moved.
+
+Index: acpica-unix2-20220331/source/components/debugger/dbtest.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/components/debugger/dbtest.c
++++ acpica-unix2-20220331/source/components/debugger/dbtest.c
+@@ -719,9 +719,10 @@ AcpiDbTestStringType (
+     ACPI_OBJECT             *Temp1 = NULL;
+     ACPI_OBJECT             *Temp2 = NULL;
+     ACPI_OBJECT             *Temp3 = NULL;
+-    char                    *ValueToWrite = "Test String from AML Debugger";
++    char                    *ValueToWrite = NULL;
+     ACPI_OBJECT             WriteValue;
+     ACPI_STATUS             Status;
++    const char              *TestStr = "Test String from AML Debugger";
+     /* Read the original value */
+@@ -737,6 +738,9 @@ AcpiDbTestStringType (
+     /* Write a new value */
++    ValueToWrite = AcpiOsAllocateZeroed(strlen(TestStr)+1);
++    strncpy(ValueToWrite, TestStr, strlen(TestStr)+1);
++
+     WriteValue.Type = ACPI_TYPE_STRING;
+     WriteValue.String.Length = strlen (ValueToWrite);
+     WriteValue.String.Pointer = ValueToWrite;
+@@ -790,6 +794,7 @@ Exit:
+     if (Temp1) {AcpiOsFree (Temp1);}
+     if (Temp2) {AcpiOsFree (Temp2);}
+     if (Temp3) {AcpiOsFree (Temp3);}
++    if (ValueToWrite) {AcpiOsFree (ValueToWrite);}
+     return (Status);
+ }
diff --git a/acpica-simple-64bit.patch b/acpica-simple-64bit.patch
new file mode 100644 (file)
index 0000000..c0403c7
--- /dev/null
@@ -0,0 +1,21 @@
+Description: Stop listing all 64bit architectures
+ Check __LP64__ instead of maintaining a list of all
+ 64bit architectures.
+Author: Adrian Bunk <bunk@debian.org>
+
+Index: acpica-unix2-20220331/source/include/platform/aclinux.h
+===================================================================
+--- acpica-unix2-20220331.orig/source/include/platform/aclinux.h
++++ acpica-unix2-20220331/source/include/platform/aclinux.h
+@@ -220,10 +220,7 @@
+ #define ACPI_FLUSH_CPU_CACHE()
+ #define ACPI_CAST_PTHREAD_T(Pthread) ((ACPI_THREAD_ID) (Pthread))
+-#if defined(__ia64__)    || (defined(__x86_64__) && !defined(__ILP32__)) ||\
+-    defined(__aarch64__) || defined(__PPC64__) ||\
+-    defined(__s390x__) ||\
+-    (defined(__riscv) && (defined(__LP64__) || defined(_LP64)))
++#if defined(__LP64__)
+ #define ACPI_MACHINE_WIDTH          64
+ #define COMPILER_DEPENDENT_INT64    long
+ #define COMPILER_DEPENDENT_UINT64   unsigned long
diff --git a/acpica-ull-32bit.patch b/acpica-ull-32bit.patch
new file mode 100644 (file)
index 0000000..9de0473
--- /dev/null
@@ -0,0 +1,16 @@
+Index: acpica-unix2-20220331/source/common/dmtbdump.c
+===================================================================
+--- acpica-unix2-20220331.orig/source/common/dmtbdump.c
++++ acpica-unix2-20220331/source/common/dmtbdump.c
+@@ -392,7 +392,11 @@ AcpiDmDumpXsdt (
+     for (i = 0; i < Entries; i++)
+     {
+         AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i);
++#if ACPI_MACHINE_WIDTH == 32
++        AcpiOsPrintf ("%16.16llX\n", AcpiUtReadUint64 (&Array[i]));
++#else
+         AcpiOsPrintf ("%16.16lX\n", AcpiUtReadUint64 (&Array[i]));
++#endif
+         Offset += sizeof (UINT64);
+     }
+ }
similarity index 91%
rename from debian-unaligned.patch
rename to acpica-unaligned.patch
index 51fc124f1403aca0bad63f245afb2b9273ce35ea..11d6c8629c0ec2221f5d6e44a3d0cf7ad3fbbd01 100644 (file)
@@ -14,10 +14,10 @@ Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  source/include/actypes.h              |   26 +++++++++++++-------------
  3 files changed, 32 insertions(+), 21 deletions(-)
 
-Index: acpica-unix-20191213/source/components/executer/exoparg2.c
+Index: acpica-unix2-20220331/source/components/executer/exoparg2.c
 ===================================================================
---- acpica-unix-20191213.orig/source/components/executer/exoparg2.c
-+++ acpica-unix-20191213/source/components/executer/exoparg2.c
+--- acpica-unix2-20220331.orig/source/components/executer/exoparg2.c
++++ acpica-unix2-20220331/source/components/executer/exoparg2.c
 @@ -172,6 +172,8 @@ AcpiExOpcode_2A_2T_1R (
      ACPI_OPERAND_OBJECT     **Operand = &WalkState->Operands[0];
      ACPI_OPERAND_OBJECT     *ReturnDesc1 = NULL;
@@ -58,10 +58,10 @@ Index: acpica-unix-20191213/source/components/executer/exoparg2.c
          break;
  
      case AML_CONCATENATE_OP: /* Concatenate (Data1, Data2, Result) */
-Index: acpica-unix-20191213/source/include/actypes.h
+Index: acpica-unix2-20220331/source/include/actypes.h
 ===================================================================
---- acpica-unix-20191213.orig/source/include/actypes.h
-+++ acpica-unix-20191213/source/include/actypes.h
+--- acpica-unix2-20220331.orig/source/include/actypes.h
++++ acpica-unix2-20220331/source/include/actypes.h
 @@ -143,6 +143,19 @@ typedef COMPILER_DEPENDENT_INT64
   */
  #define ACPI_THREAD_ID                  UINT64
diff --git a/acpica-uuid-len.patch b/acpica-uuid-len.patch
new file mode 100644 (file)
index 0000000..26fd798
--- /dev/null
@@ -0,0 +1,12 @@
+diff -Naur acpica-unix2-20211217.orig/source/tools/acpiexec/aeregion.c acpica-unix2-20211217/source/tools/acpiexec/aeregion.c
+--- acpica-unix2-20211217.orig/source/tools/acpiexec/aeregion.c        2021-12-17 10:48:17.000000000 -0700
++++ acpica-unix2-20211217/source/tools/acpiexec/aeregion.c     2022-03-18 15:53:25.032687782 -0600
+@@ -97,7 +97,7 @@
+     UINT32                  Value1;
+     UINT32                  Value2;
+     ACPI_RESOURCE           *Resource;
+-    char                    Uuid[ACPI_PRM_INPUT_BUFFER_SIZE + 1];
++    char                    Uuid[UUID_STRING_LENGTH + 1];
+     ACPI_FUNCTION_NAME (AeRegionHandler);
index f329b24d8e628a4aa64dca7377b732b552b347b1..17dae2361061f814f14cb824699fa12951dc8d70 100644 (file)
@@ -5,44 +5,94 @@
 Summary:       ACPI Component Architecture - an assembler and disassembler for DSDT tables
 Summary(pl.UTF-8):     ACPI CA - asembler i disasembler dla tablic DSDT
 Name:          acpica
-Version:       20200430
+Version:       20220331
 Release:       1
 License:       GPL v2
 Group:         Development/Tools
-Source0:       https://acpica.org/sites/acpica/files/%{name}-unix-%{version}.tar.gz
-# Source0-md5: 7888f1e1e67f1bbaf33f1a869d1f0482
+Source0:       https://acpica.org/sites/acpica/files/%{name}-unix2-%{version}.tar.gz
+# Source0-md5: 5721db851442be86054d45acd1dcacef
 Source1:       https://acpica.org/sites/acpica/files/acpitests-unix-%{version}.tar.gz
-# Source1-md5: 69cb94daf85cd5d5bd374c077cf66499
+# Source1-md5: 9902b30fd402852a90a4ec59e471c5ff
 Source2:       iasl.1
 Source3:       acpibin.1
 Source4:       acpidump.1
 Source5:       acpiexec.1
 Source6:       acpihelp.1
-Source7:       acpinames.1
 Source8:       acpisrc.1
 Source9:       acpixtract.1
-Patch0:                debian-big_endian.patch
-Patch1:                debian-unaligned.patch
-Patch6:                int-format.patch
-Patch8:                facp.patch
-Patch9:                template.patch
-Patch11:       ppc64le.patch
-Patch12:       arm7hl.patch
-Patch13:       armv7-str-fixes.patch
-Patch14:       big-endian-v2.patch
-Patch16:       mips-be-fix.patch
-Patch17:       cve-2017-13693.patch
-Patch18:       cve-2017-13694.patch
-Patch19:       cve-2017-13695.patch
-Patch20:       str-trunc-warn.patch
-Patch21:       ptr-cast.patch
-Patch22:       aslcodegen.patch
+Patch0:                0001-Add-in-basic-infrastructure-for-big-endian-support.patch
+Patch1:                0002-Modify-utility-functions-to-be-endian-agnostic.patch
+Patch2:                0003-Always-display-table-header-content-in-human-readabl.patch
+Patch3:                0004-Re-enable-support-for-big-endian-machines.patch
+Patch4:                0005-Correct-an-endian-ness-problem-when-converting-ASL-t.patch
+Patch5:                0006-Use-more-reliable-ACPI_COPY_NAMSEG-in-GPE-name-check.patch
+Patch6:                0007-Handle-dumping-Unicode-properly-when-big-endian.patch
+Patch7:                0008-Support-MADT-aka-APIC-in-a-big-endian-world.patch
+Patch8:                0009-Support-ASF-tables-in-a-big-endian-world.patch
+Patch9:                0010-Support-CPEP-tables-in-a-big-endian-world.patch
+Patch10:       0011-Support-DBG2-table-in-a-big-endian-world.patch
+Patch11:       0012-Support-DMAR-in-a-big-endian-world.patch
+Patch12:       0013-Support-DRTM-in-a-big-endian-world.patch
+Patch13:       0014-Support-EINJ-in-a-big-endian-world.patch
+Patch14:       0015-Support-ERST-in-a-big-endian-world.patch
+Patch15:       0016-Support-FADT-aka-FACP-in-a-big-endian-world.patch
+Patch16:       0017-Support-most-FPDTs-in-a-big-endian-world.patch
+Patch17:       0018-Support-GTDT-in-a-big-endian-world.patch
+Patch18:       0019-Support-HEST-in-a-big-endian-world.patch
+Patch19:       0020-Support-RSDT-RSD-PTR-in-a-big-endian-world.patch
+Patch20:       0021-Support-XSDT-in-a-big-endian-world.patch
+Patch21:       0022-Support-SRAT-in-a-big-endian-world.patch
+Patch22:       0023-Support-SLIT-in-a-big-endian-world.patch
+Patch23:       0024-Support-MSCT-in-a-big-endian-world.patch
+Patch24:       0025-Support-MPST-in-a-big-endian-world.patch
+Patch25:       0026-Support-NFIT-in-a-big-endian-world.patch
+Patch26:       0027-Support-SDEV-in-a-big-endian-world.patch
+Patch27:       0028-Support-HMAT-in-a-big-endian-world.patch
+Patch28:       0029-Support-PDTT-in-a-big-endian-world.patch
+Patch29:       0030-Support-PPTT-in-a-big-endian-world.patch
+Patch30:       0031-Support-PCCT-in-a-big-endian-world.patch
+Patch31:       0032-Support-WDAT-in-a-big-endian-world.patch
+Patch32:       0033-Support-TCPA-in-a-big-endian-world.patch
+Patch33:       0034-Support-STAO-in-a-big-endian-world.patch
+Patch34:       0035-Support-SLIC-and-MSDM-in-a-big-endian-world.patch
+Patch35:       0036-Support-MCFG-in-a-big-endian-world.patch
+Patch36:       0037-Support-LPIT-in-a-big-endian-world.patch
+Patch37:       0038-Support-PMTT-in-a-big-endian-world.patch
+Patch38:       0039-Support-TPM2-in-a-big-endian-world.patch
+Patch39:       0040-Support-S3PT-in-a-big-endian-world.patch
+Patch40:       0041-Support-IORT-in-a-big-endian-world.patch
+Patch41:       0042-Support-IVRS-in-a-big-endian-world.patch
+Patch42:       0043-Support-DSDT-SSDT-in-a-big-endian-world.patch
+# skipped in Fedora(?)
+#Patch43:      0044-Initial-support-for-WPBT-in-big-endian-needs-more.patch
+Patch44:       0045-CSRT-fixed-use-of-optional-ResourceInfo.patch
+Patch45:       0046-Support-PHAT-in-a-big-endian-world.patch
+Patch46:       0047-Support-PRMT-in-a-big-endian-world.patch
+Patch47:       0048-Support-RGRT-in-a-big-endian-world.patch
+Patch48:       0049-Support-SVKL-in-a-big-endian-world.patch
+Patch100:      %{name}-unaligned.patch
+Patch101:      %{name}-OPT_LDFLAGS.patch
+Patch102:      int-format.patch
+Patch104:      template.patch
+Patch105:      arm7hl.patch
+Patch106:       %{name}-simple-64bit.patch
+Patch107:      mips-be-fix.patch
+Patch108:      cve-2017-13693.patch
+Patch109:      cve-2017-13694.patch
+Patch110:      cve-2017-13695.patch
+Patch111:      str-trunc-warn.patch
+Patch112:      ptr-cast.patch
+Patch113:      armv7-str-fixes.patch
+Patch114:      %{name}-dbtest.patch
+Patch115:      %{name}-ull-32bit.patch
+Patch116:      %{name}-dangling-ptr.patch
+Patch117:      %{name}-uuid-len.patch
 URL:           https://acpica.org/
 BuildRequires: bison
 BuildRequires: flex
 BuildRequires: sed >= 4.0
 Provides:      iasl
-Obsoletes:     iasl
+Obsoletes:     iasl < 20061110
 BuildRoot:     %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
 
 %description
@@ -54,17 +104,24 @@ Pakiet ACPI Component Architecture zawiera asembler i disasembler do
 tablic DSDT.
 
 %prep
-%setup -q -n %{name}-unix-%{version}
+%setup -q -n %{name}-unix2-%{version}
 tar -x --strip-components=1 -f %{SOURCE1}
 %patch0 -p1
 %patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
 %patch6 -p1
+%patch7 -p1
 %patch8 -p1
 %patch9 -p1
+%patch10 -p1
 %patch11 -p1
 %patch12 -p1
 %patch13 -p1
 %patch14 -p1
+%patch15 -p1
 %patch16 -p1
 %patch17 -p1
 %patch18 -p1
@@ -72,6 +129,48 @@ tar -x --strip-components=1 -f %{SOURCE1}
 %patch20 -p1
 %patch21 -p1
 %patch22 -p1
+%patch23 -p1
+%patch24 -p1
+%patch25 -p1
+%patch26 -p1
+%patch27 -p1
+%patch28 -p1
+%patch29 -p1
+%patch30 -p1
+%patch31 -p1
+%patch32 -p1
+%patch33 -p1
+%patch34 -p1
+%patch35 -p1
+%patch36 -p1
+%patch37 -p1
+%patch38 -p1
+%patch39 -p1
+%patch40 -p1
+%patch41 -p1
+%patch42 -p1
+#patch43 -p1
+%patch44 -p1
+%patch45 -p1
+%patch46 -p1
+%patch47 -p1
+%patch100 -p1
+%patch101 -p1
+%patch102 -p1
+%patch104 -p1
+%patch105 -p1
+%patch106 -p1
+%patch107 -p1
+%patch108 -p1
+%patch109 -p1
+%patch110 -p1
+%patch111 -p1
+%patch112 -p1
+%patch113 -p1
+%patch114 -p1
+%patch115 -p1
+%patch116 -p1
+%patch117 -p1
 
 %build
 %define        makeopts \\\
@@ -112,7 +211,7 @@ rm -rf $RPM_BUILD_ROOT
        DESTDIR=$RPM_BUILD_ROOT
 
 install -d $RPM_BUILD_ROOT%{_mandir}/man1
-cp -p %{SOURCE2} %{SOURCE3} %{SOURCE4} %{SOURCE5} %{SOURCE6} %{SOURCE7} %{SOURCE8} %{SOURCE9} \
+cp -p %{SOURCE2} %{SOURCE3} %{SOURCE4} %{SOURCE5} %{SOURCE6} %{SOURCE8} %{SOURCE9} \
        $RPM_BUILD_ROOT%{_mandir}/man1
 
 %{__rm} $RPM_BUILD_ROOT%{_bindir}/acpiexamples
@@ -127,7 +226,6 @@ rm -rf $RPM_BUILD_ROOT
 %attr(755,root,root) %{_bindir}/acpidump
 %attr(755,root,root) %{_bindir}/acpiexec
 %attr(755,root,root) %{_bindir}/acpihelp
-%attr(755,root,root) %{_bindir}/acpinames
 %attr(755,root,root) %{_bindir}/acpisrc
 %attr(755,root,root) %{_bindir}/acpixtract
 %attr(755,root,root) %{_bindir}/iasl
@@ -135,7 +233,6 @@ rm -rf $RPM_BUILD_ROOT
 %{_mandir}/man1/acpidump.1*
 %{_mandir}/man1/acpiexec.1*
 %{_mandir}/man1/acpihelp.1*
-%{_mandir}/man1/acpinames.1*
 %{_mandir}/man1/acpisrc.1*
 %{_mandir}/man1/acpixtract.1*
 %{_mandir}/man1/iasl.1*
diff --git a/acpinames.1 b/acpinames.1
deleted file mode 100644 (file)
index 315d235..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-.\" First parameter, NAME, should be all caps
-.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
-.\" other parameters are allowed: see man(7), man(1)
-.TH ACPINAMES 1 "January 23, 2013"
-.\" Please adjust this date whenever revising the manpage.
-.\"
-.\" Some roff macros, for reference:
-.\" .nh        disable hyphenation
-.\" .hy        enable hyphenation
-.\" .ad l      left justify
-.\" .ad b      justify to both left and right margins
-.\" .nf        disable filling
-.\" .fi        enable filling
-.\" .br        insert line break
-.\" .sp <n>    insert n+1 empty lines
-.\" for manpage-specific macros, see man(7)
-.SH NAME
-acpinames \- ACPI name space dump utility
-.SH SYNOPSIS
-.B acpinames
-.RI <option> ...
-.RI <aml-file>
-
-.SH DESCRIPTION
-This manual page briefly documents the
-.B acpinames
-command. The option list is taken from the acpinames interactive help.
-.PP
-.\" TeX users may be more comfortable with the \fB<whatever>\fP and
-.\" \fI<whatever>\fP escape sequences to invode bold face and italics, 
-.\" respectively.
-.B acpinames
-prints out the complete ACPI name space for an AML file.
-.PP
-Much more detailed documentation may be found at
-http://www.acpica.org/documentation/.
-
-.SH OPTIONS
-
-.PP
-.TP
-.B \-? [<name-prefix>]
-Display this help message
-
-.SH AUTHOR
-acpinames was written by Robert Moore <robert.moore@intel.com>.
-.PP
-This manual page was written by Al Stone <ahs3@redhat.com> for the
-Fedora project (but may be used by others).
diff --git a/aslcodegen.patch b/aslcodegen.patch
deleted file mode 100644 (file)
index 357ae47..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-Changes in the handling of comments caused some length fields to be used
-in new ways.  The new way broke the existing adaptation for big endian
-support; this patch repairs that adaptation.
-
-Signed-off-by: Al Stone <ahs3@redhat.com>
-
-Index: acpica-unix-20191213/source/compiler/aslcodegen.c
-===================================================================
---- acpica-unix-20191213.orig/source/compiler/aslcodegen.c
-+++ acpica-unix-20191213/source/compiler/aslcodegen.c
-@@ -497,8 +497,7 @@ CgWriteTableHeader (
-     /* Table length. Checksum zero for now, will rewrite later */
--    DWord = sizeof (ACPI_TABLE_HEADER) + Op->Asl.AmlSubtreeLength;
--    ACPI_MOVE_32_TO_32(&AslGbl_TableHeader.Length, &DWord);
-+    AslGbl_TableHeader.Length = sizeof (ACPI_TABLE_HEADER) + Op->Asl.AmlSubtreeLength;
-     /* Calculate the comment lengths for this definition block parseOp */
-@@ -544,6 +543,8 @@ CgWriteTableHeader (
-             CvDbgPrint ("    Length: %u\n", CommentLength);
-         }
-     }
-+    DWord = AslGbl_TableHeader.Length;
-+    ACPI_MOVE_32_TO_32(&AslGbl_TableHeader.Length, &DWord);
-     AslGbl_TableHeader.Checksum = 0;
-     Op->Asl.FinalAmlOffset = ftell (AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle);
diff --git a/big-endian-v2.patch b/big-endian-v2.patch
deleted file mode 100644 (file)
index 90bb67e..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Updated versions of upstream often contain fixes that were not seen
-in the original big-endian patch; we try to capture those here.
-
-Signed-off-by: Al Stone <ahs3@redhat.com>
-
-Index: acpica-unix-20191213/source/compiler/asllookup.c
-===================================================================
---- acpica-unix-20191213.orig/source/compiler/asllookup.c
-+++ acpica-unix-20191213/source/compiler/asllookup.c
-@@ -249,7 +249,8 @@ LkIsObjectUsed (
-      * ACPI names and are typically not referenced since they are meant
-      * to be called by the host OS.
-      */
--    if (Node->Name.Ascii[0] == '_')
-+    ACPI_MOVE_32_TO_32(&tmp.Ascii, Node->Name.Ascii);
-+    if (tmp.Ascii[0] == '_')
-     {
-         return (AE_OK);
-     }
diff --git a/debian-big_endian.patch b/debian-big_endian.patch
deleted file mode 100644 (file)
index 7c8797f..0000000
+++ /dev/null
@@ -1,6629 +0,0 @@
-Big-endian support
-
-This is a combined patch that folds all of the past and present changes
-for big-endian support into a single patch, hopefully eliminating any sort
-of redundancy but also capturing all such changes in a single location.
-
-To date, this has been critical for the s390x architecture only.
-
-Signed-off-by: Al Stone <ahs3@redhat.com>
-
-Index: acpica-unix-20209326/source/compiler/aslcodegen.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/aslcodegen.c
-+++ acpica-unix-20209326/source/compiler/aslcodegen.c
-@@ -237,16 +237,12 @@ CgWriteAmlOpcode (
-     ACPI_PARSE_OBJECT       *Op)
- {
-     UINT8                   PkgLenFirstByte;
--    UINT32                  i;
--    union {
--        UINT16                  Opcode;
--        UINT8                   OpcodeBytes[2];
--    } Aml;
--    union {
--        UINT32                  Len;
--        UINT8                   LenBytes[4];
--    } PkgLen;
--
-+    UINT8                   Byte;
-+    UINT16                  Word;
-+    UINT32                  DWord;
-+    UINT64                  QWord;
-+    UINT16                  AmlOpcode;
-+    UINT32                  PkgLen;
-     /* We expect some DEFAULT_ARGs, just ignore them */
-@@ -279,51 +275,52 @@ CgWriteAmlOpcode (
-         /* Special opcodes for within a field definition */
--        Aml.Opcode = AML_FIELD_OFFSET_OP;
-+        AmlOpcode = AML_FIELD_OFFSET_OP;
-         break;
-     case AML_INT_ACCESSFIELD_OP:
--        Aml.Opcode = AML_FIELD_ACCESS_OP;
-+        AmlOpcode = AML_FIELD_ACCESS_OP;
-         break;
-     case AML_INT_CONNECTION_OP:
--        Aml.Opcode = AML_FIELD_CONNECTION_OP;
-+        AmlOpcode = AML_FIELD_CONNECTION_OP;
-         break;
-     default:
--        Aml.Opcode = Op->Asl.AmlOpcode;
-+        AmlOpcode = Op->Asl.AmlOpcode;
-         break;
-     }
--    switch (Aml.Opcode)
-+    switch (AmlOpcode)
-     {
-     case AML_PACKAGE_LENGTH:
-         /* Value is the length to be encoded (Used in field definitions) */
--        PkgLen.Len = (UINT32) Op->Asl.Value.Integer;
-+        PkgLen = (UINT32) Op->Asl.Value.Integer;
-         break;
-     default:
-         /* Check for two-byte opcode */
--        if (Aml.Opcode > 0x00FF)
-+        if (AmlOpcode > 0x00FF)
-         {
-             /* Write the high byte first */
--
--            CgLocalWriteAmlData (Op, &Aml.OpcodeBytes[1], 1);
-+          Byte = ACPI_HIBYTE(AmlOpcode);
-+          CgLocalWriteAmlData (Op, &Byte, 1);
-         }
--        CgLocalWriteAmlData (Op, &Aml.OpcodeBytes[0], 1);
-+      Byte = ACPI_LOBYTE(AmlOpcode);
-+        CgLocalWriteAmlData (Op, &Byte, 1);
-         /* Subtreelength doesn't include length of package length bytes */
--        PkgLen.Len = Op->Asl.AmlSubtreeLength + Op->Asl.AmlPkgLenBytes;
-+        PkgLen = Op->Asl.AmlSubtreeLength + Op->Asl.AmlPkgLenBytes;
-         break;
-     }
-@@ -334,8 +331,8 @@ CgWriteAmlOpcode (
-         if (Op->Asl.AmlPkgLenBytes == 1)
-         {
-             /* Simplest case -- no bytes to follow, just write the count */
--
--            CgLocalWriteAmlData (Op, &PkgLen.LenBytes[0], 1);
-+            Byte = ACPI_LOBYTE(PkgLen);
-+            CgLocalWriteAmlData (Op, &Byte, 1);
-         }
-         else if (Op->Asl.AmlPkgLenBytes != 0)
-         {
-@@ -345,7 +342,7 @@ CgWriteAmlOpcode (
-              */
-             PkgLenFirstByte = (UINT8)
-                 (((UINT32) (Op->Asl.AmlPkgLenBytes - 1) << 6) |
--                (PkgLen.LenBytes[0] & 0x0F));
-+                (PkgLen & 0x0F));
-             CgLocalWriteAmlData (Op, &PkgLenFirstByte, 1);
-@@ -353,39 +350,47 @@ CgWriteAmlOpcode (
-              * Shift the length over by the 4 bits we just stuffed
-              * in the first byte
-              */
--            PkgLen.Len >>= 4;
-+            PkgLen >>= 4;
-             /*
-              * Now we can write the remaining bytes -
-              * either 1, 2, or 3 bytes
-              */
--            for (i = 0; i < (UINT32) (Op->Asl.AmlPkgLenBytes - 1); i++)
-+            Byte = ACPI_LOBYTE(PkgLen);
-+            CgLocalWriteAmlData (Op, &Byte, 1);
-+            if (Op->Asl.AmlPkgLenBytes >= 3)
-+            {
-+                Byte = ACPI_HIBYTE(PkgLen);
-+                CgLocalWriteAmlData (Op, &Byte, 1);
-+            }
-+            if (Op->Asl.AmlPkgLenBytes >= 4)
-             {
--                CgLocalWriteAmlData (Op, &PkgLen.LenBytes[i], 1);
-+                Byte = ACPI_LOBYTE(ACPI_HIWORD(PkgLen));
-+                CgLocalWriteAmlData (Op, &Byte, 1);
-             }
-         }
-     }
--    switch (Aml.Opcode)
-+    switch (AmlOpcode)
-     {
-     case AML_BYTE_OP:
--
--        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 1);
-+        Byte = (UINT8) Op->Asl.Value.Integer;
-+        CgLocalWriteAmlData (Op, &Byte, 1);
-         break;
-     case AML_WORD_OP:
--
--        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 2);
-+        ACPI_MOVE_64_TO_16(&Word, &Op->Asl.Value.Integer);
-+        CgLocalWriteAmlData (Op, &Word, 2);
-        break;
-     case AML_DWORD_OP:
--
--        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 4);
-+        ACPI_MOVE_64_TO_32(&DWord, &Op->Asl.Value.Integer);
-+        CgLocalWriteAmlData (Op, &DWord, 4);
-         break;
-     case AML_QWORD_OP:
--
--        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 8);
-+        ACPI_MOVE_64_TO_64(&QWord, &Op->Asl.Value.Integer);
-+        CgLocalWriteAmlData (Op, &QWord, 8);
-         break;
-     case AML_STRING_OP:
-@@ -421,6 +426,7 @@ CgWriteTableHeader (
-     ACPI_PARSE_OBJECT       *Op)
- {
-     ACPI_PARSE_OBJECT       *Child;
-+    UINT32                  DWord;
-     UINT32                  CommentLength;
-     ACPI_COMMENT_NODE       *Current;
-@@ -478,7 +484,7 @@ CgWriteTableHeader (
-     /* OEM Revision */
-     Child = Child->Asl.Next;
--    AslGbl_TableHeader.OemRevision = (UINT32) Child->Asl.Value.Integer;
-+    ACPI_MOVE_64_TO_32(&AslGbl_TableHeader.OemRevision, &Child->Asl.Value.Integer);
-     /* Compiler ID */
-@@ -486,12 +492,13 @@ CgWriteTableHeader (
-     /* Compiler version */
--    AslGbl_TableHeader.AslCompilerRevision = ACPI_CA_VERSION;
-+    DWord = ACPI_CA_VERSION;
-+    ACPI_MOVE_32_TO_32(&AslGbl_TableHeader.AslCompilerRevision, &DWord);
-     /* Table length. Checksum zero for now, will rewrite later */
--    AslGbl_TableHeader.Length = sizeof (ACPI_TABLE_HEADER) +
--        Op->Asl.AmlSubtreeLength;
-+    DWord = sizeof (ACPI_TABLE_HEADER) + Op->Asl.AmlSubtreeLength;
-+    ACPI_MOVE_32_TO_32(&AslGbl_TableHeader.Length, &DWord);
-     /* Calculate the comment lengths for this definition block parseOp */
-@@ -625,7 +632,10 @@ CgWriteNode (
-     ACPI_PARSE_OBJECT       *Op)
- {
-     ASL_RESOURCE_NODE       *Rnode;
--
-+    UINT8                   Byte;
-+    UINT16                  Word;
-+    UINT32                  DWord;
-+    UINT64                  QWord;
-     /* Write all comments here. */
-@@ -649,13 +659,24 @@ CgWriteNode (
-     switch (Op->Asl.AmlOpcode)
-     {
-     case AML_RAW_DATA_BYTE:
-+        Byte = (UINT8) Op->Asl.Value.Integer;
-+        CgLocalWriteAmlData (Op, &Byte, 1);
-+        return;
-+
-     case AML_RAW_DATA_WORD:
--    case AML_RAW_DATA_DWORD:
--    case AML_RAW_DATA_QWORD:
-+        ACPI_MOVE_64_TO_16(&Word, &Op->Asl.Value.Integer);
-+        CgLocalWriteAmlData (Op, &Word, 2);
-+        return;
--        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, Op->Asl.AmlLength);
-+    case AML_RAW_DATA_DWORD:
-+        ACPI_MOVE_64_TO_32(&DWord, &Op->Asl.Value.Integer);
-+        CgLocalWriteAmlData (Op, &DWord, 4);
-         return;
-+    case AML_RAW_DATA_QWORD:
-+        ACPI_MOVE_64_TO_64(&QWord, &Op->Asl.Value.Integer);
-+        CgLocalWriteAmlData (Op, &QWord, 8);
-+        return;
-     case AML_RAW_DATA_BUFFER:
-Index: acpica-unix-20209326/source/compiler/aslopcodes.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/aslopcodes.c
-+++ acpica-unix-20209326/source/compiler/aslopcodes.c
-@@ -485,6 +485,7 @@ OpcDoUnicode (
-     UINT32                  i;
-     UINT8                   *AsciiString;
-     UINT16                  *UnicodeString;
-+    UINT16                  UChar;
-     ACPI_PARSE_OBJECT       *BufferLengthOp;
-@@ -511,7 +512,8 @@ OpcDoUnicode (
-     for (i = 0; i < Count; i++)
-     {
--        UnicodeString[i] = (UINT16) AsciiString[i];
-+        UChar = (UINT16) AsciiString[i];
-+        ACPI_MOVE_16_TO_16(&UnicodeString[i], &UChar);
-     }
-     /*
-Index: acpica-unix-20209326/source/compiler/aslrestype1.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/aslrestype1.c
-+++ acpica-unix-20209326/source/compiler/aslrestype1.c
-@@ -142,6 +142,11 @@ RsDoMemory24Descriptor (
-     ACPI_PARSE_OBJECT       *LengthOp = NULL;
-     ASL_RESOURCE_NODE       *Rnode;
-     UINT32                  CurrentByteOffset;
-+    UINT16                  Minimum = 0;
-+    UINT16                  Maximum = 0;
-+    UINT16                  AddressLength = 0;
-+    UINT16                  Alignment = 0;
-+    UINT16                  ResourceLength;
-     UINT32                  i;
-@@ -151,7 +156,8 @@ RsDoMemory24Descriptor (
-     Descriptor = Rnode->Buffer;
-     Descriptor->Memory24.DescriptorType = ACPI_RESOURCE_NAME_MEMORY24;
--    Descriptor->Memory24.ResourceLength = 9;
-+    ResourceLength = 9;
-+    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.ResourceLength, &ResourceLength);
-     /* Process all child initialization nodes */
-@@ -168,7 +174,7 @@ RsDoMemory24Descriptor (
-         case 1: /* Min Address */
--            Descriptor->Memory24.Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
-+            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Minimum));
-             MinOp = InitializerOp;
-@@ -176,7 +182,7 @@ RsDoMemory24Descriptor (
-         case 2: /* Max Address */
--            Descriptor->Memory24.Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
-+            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Maximum));
-             MaxOp = InitializerOp;
-@@ -184,14 +190,14 @@ RsDoMemory24Descriptor (
-         case 3: /* Alignment */
--            Descriptor->Memory24.Alignment = (UINT16) InitializerOp->Asl.Value.Integer;
-+            Alignment = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Alignment));
-             break;
-         case 4: /* Length */
--            Descriptor->Memory24.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
-+            AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.AddressLength));
-             LengthOp = InitializerOp;
-@@ -214,12 +220,17 @@ RsDoMemory24Descriptor (
-     /* Validate the Min/Max/Len/Align values (Alignment==0 means 64K) */
-     RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY24,
--        Descriptor->Memory24.Minimum,
--        Descriptor->Memory24.Maximum,
--        Descriptor->Memory24.AddressLength,
--        Descriptor->Memory24.Alignment,
-+        Minimum,
-+        Maximum,
-+        AddressLength,
-+        Alignment,
-         MinOp, MaxOp, LengthOp, NULL, Info->DescriptorTypeOp);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.Minimum, &Minimum);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.Maximum, &Maximum);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.AddressLength, &AddressLength);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.Alignment, &Alignment);
-+
-     return (Rnode);
- }
-@@ -248,6 +259,11 @@ RsDoMemory32Descriptor (
-     ACPI_PARSE_OBJECT       *AlignOp = NULL;
-     ASL_RESOURCE_NODE       *Rnode;
-     UINT32                  CurrentByteOffset;
-+    UINT32                  Minimum = 0;
-+    UINT32                  Maximum = 0;
-+    UINT32                  AddressLength = 0;
-+    UINT32                  Alignment = 0;
-+    UINT16                  ResourceLength;
-     UINT32                  i;
-@@ -257,7 +273,8 @@ RsDoMemory32Descriptor (
-     Descriptor = Rnode->Buffer;
-     Descriptor->Memory32.DescriptorType = ACPI_RESOURCE_NAME_MEMORY32;
--    Descriptor->Memory32.ResourceLength = 17;
-+    ResourceLength = 17;
-+    ACPI_MOVE_16_TO_16(&Descriptor->Memory32.ResourceLength, &ResourceLength);
-     /* Process all child initialization nodes */
-@@ -274,7 +291,7 @@ RsDoMemory32Descriptor (
-         case 1:  /* Min Address */
--            Descriptor->Memory32.Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
-+            Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Minimum));
-             MinOp = InitializerOp;
-@@ -282,7 +299,7 @@ RsDoMemory32Descriptor (
-         case 2: /* Max Address */
--            Descriptor->Memory32.Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
-+            Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Maximum));
-             MaxOp = InitializerOp;
-@@ -290,7 +307,7 @@ RsDoMemory32Descriptor (
-         case 3: /* Alignment */
--            Descriptor->Memory32.Alignment = (UINT32) InitializerOp->Asl.Value.Integer;
-+            Alignment = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Alignment));
-             AlignOp = InitializerOp;
-@@ -298,7 +315,7 @@ RsDoMemory32Descriptor (
-         case 4: /* Length */
--            Descriptor->Memory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
-+            AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.AddressLength));
-             LengthOp = InitializerOp;
-@@ -321,12 +338,17 @@ RsDoMemory32Descriptor (
-     /* Validate the Min/Max/Len/Align values */
-     RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY32,
--        Descriptor->Memory32.Minimum,
--        Descriptor->Memory32.Maximum,
--        Descriptor->Memory32.AddressLength,
--        Descriptor->Memory32.Alignment,
-+        Minimum,
-+        Maximum,
-+        AddressLength,
-+        Alignment,
-         MinOp, MaxOp, LengthOp, AlignOp, Info->DescriptorTypeOp);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.Minimum, &Minimum);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.Maximum, &Maximum);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.AddressLength, &AddressLength);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.Alignment, &Alignment);
-+
-     return (Rnode);
- }
-@@ -351,6 +373,7 @@ RsDoMemory32FixedDescriptor (
-     ACPI_PARSE_OBJECT       *InitializerOp;
-     ASL_RESOURCE_NODE       *Rnode;
-     UINT32                  CurrentByteOffset;
-+    UINT16                  ResourceLength;
-     UINT32                  i;
-@@ -360,7 +383,8 @@ RsDoMemory32FixedDescriptor (
-     Descriptor = Rnode->Buffer;
-     Descriptor->FixedMemory32.DescriptorType = ACPI_RESOURCE_NAME_FIXED_MEMORY32;
--    Descriptor->FixedMemory32.ResourceLength = 9;
-+    ResourceLength = 9;
-+    ACPI_MOVE_16_TO_16(&Descriptor->FixedMemory32.ResourceLength, &ResourceLength);
-     /* Process all child initialization nodes */
-@@ -377,14 +401,16 @@ RsDoMemory32FixedDescriptor (
-         case 1: /* Address */
--            Descriptor->FixedMemory32.Address = (UINT32) InitializerOp->Asl.Value.Integer;
-+            ACPI_MOVE_64_TO_32(&Descriptor->FixedMemory32.Address,
-+                &InitializerOp->Asl.Value.Integer);
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_BASEADDRESS,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Address));
-             break;
-         case 2: /* Length */
--            Descriptor->FixedMemory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
-+            ACPI_MOVE_64_TO_32(&Descriptor->FixedMemory32.AddressLength,
-+                &InitializerOp->Asl.Value.Integer);
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.AddressLength));
-             break;
-Index: acpica-unix-20209326/source/compiler/aslrestype1i.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/aslrestype1i.c
-+++ acpica-unix-20209326/source/compiler/aslrestype1i.c
-@@ -198,6 +198,8 @@ RsDoFixedDmaDescriptor (
-     ACPI_PARSE_OBJECT       *InitializerOp;
-     ASL_RESOURCE_NODE       *Rnode;
-     UINT32                  CurrentByteOffset;
-+    UINT16                  RequestLines = 0;
-+    UINT16                  Channels = 0;
-     UINT32                  i;
-@@ -217,14 +219,14 @@ RsDoFixedDmaDescriptor (
-         {
-         case 0: /* DMA Request Lines [WORD] (_DMA) */
--            Descriptor->FixedDma.RequestLines = (UINT16) InitializerOp->Asl.Value.Integer;
-+            RequestLines = (UINT16) InitializerOp->Asl.Value.Integer;
-             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;
-+            Channels = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_DMATYPE,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.Channels));
-             break;
-@@ -249,6 +251,9 @@ RsDoFixedDmaDescriptor (
-         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
-     }
-+    ACPI_MOVE_16_TO_16(&Descriptor->FixedDma.RequestLines, &RequestLines);
-+    ACPI_MOVE_16_TO_16(&Descriptor->FixedDma.Channels, &Channels);
-+
-     return (Rnode);
- }
-@@ -274,6 +279,7 @@ RsDoFixedIoDescriptor (
-     ACPI_PARSE_OBJECT       *AddressOp = NULL;
-     ASL_RESOURCE_NODE       *Rnode;
-     UINT32                  CurrentByteOffset;
-+    UINT16                  Address = 0;
-     UINT32                  i;
-@@ -293,8 +299,7 @@ RsDoFixedIoDescriptor (
-         {
-         case 0: /* Base Address */
--            Descriptor->FixedIo.Address =
--                (UINT16) InitializerOp->Asl.Value.Integer;
-+            Address = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_BASEADDRESS,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedIo.Address));
-             AddressOp = InitializerOp;
-@@ -324,11 +329,13 @@ RsDoFixedIoDescriptor (
-     /* Error checks */
--    if (Descriptor->FixedIo.Address > 0x03FF)
-+    if (Address > 0x03FF)
-     {
-         AslError (ASL_WARNING, ASL_MSG_ISA_ADDRESS, AddressOp, NULL);
-     }
-+    ACPI_MOVE_16_TO_16(&Descriptor->FixedIo.Address, &Address);
-+
-     return (Rnode);
- }
-@@ -357,6 +364,8 @@ RsDoIoDescriptor (
-     ACPI_PARSE_OBJECT       *AlignOp = NULL;
-     ASL_RESOURCE_NODE       *Rnode;
-     UINT32                  CurrentByteOffset;
-+    UINT16                  Minimum = 0;
-+    UINT16                  Maximum = 0;
-     UINT32                  i;
-@@ -383,8 +392,7 @@ RsDoIoDescriptor (
-         case 1:  /* Min Address */
--            Descriptor->Io.Minimum =
--                (UINT16) InitializerOp->Asl.Value.Integer;
-+            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Minimum));
-             MinOp = InitializerOp;
-@@ -392,8 +400,7 @@ RsDoIoDescriptor (
-         case 2: /* Max Address */
--            Descriptor->Io.Maximum =
--                (UINT16) InitializerOp->Asl.Value.Integer;
-+            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Maximum));
-             MaxOp = InitializerOp;
-@@ -434,12 +441,15 @@ RsDoIoDescriptor (
-     /* Validate the Min/Max/Len/Align values */
-     RsSmallAddressCheck (ACPI_RESOURCE_NAME_IO,
--        Descriptor->Io.Minimum,
--        Descriptor->Io.Maximum,
-+        Minimum,
-+        Maximum,
-         Descriptor->Io.AddressLength,
-         Descriptor->Io.Alignment,
-         MinOp, MaxOp, LengthOp, AlignOp, Info->DescriptorTypeOp);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Io.Minimum, &Minimum);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Io.Maximum, &Maximum);
-+
-     return (Rnode);
- }
-@@ -559,9 +569,9 @@ RsDoIrqDescriptor (
-         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
-     }
--    /* Now we can set the channel mask */
-+    /* Now we can set the interrupt mask */
--    Descriptor->Irq.IrqMask = IrqMask;
-+    ACPI_MOVE_16_TO_16(&Descriptor->Irq.IrqMask, &IrqMask);
-     return (Rnode);
- }
-@@ -660,6 +670,6 @@ RsDoIrqNoFlagsDescriptor (
-     /* Now we can set the interrupt mask */
--    Descriptor->Irq.IrqMask = IrqMask;
-+    ACPI_MOVE_16_TO_16(&Descriptor->Irq.IrqMask, &IrqMask);
-     return (Rnode);
- }
-Index: acpica-unix-20209326/source/compiler/aslrestype2.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/aslrestype2.c
-+++ acpica-unix-20209326/source/compiler/aslrestype2.c
-@@ -76,6 +76,7 @@ RsDoGeneralRegisterDescriptor (
-     ACPI_PARSE_OBJECT       *InitializerOp;
-     ASL_RESOURCE_NODE       *Rnode;
-     UINT32                  CurrentByteOffset;
-+    UINT16                  ResourceLength;
-     UINT32                  i;
-@@ -85,7 +86,9 @@ RsDoGeneralRegisterDescriptor (
-     Descriptor = Rnode->Buffer;
-     Descriptor->GenericReg.DescriptorType = ACPI_RESOURCE_NAME_GENERIC_REGISTER;
--    Descriptor->GenericReg.ResourceLength = 12;
-+    ResourceLength = 12;
-+    ACPI_MOVE_16_TO_16(&Descriptor->GenericReg.ResourceLength,
-+                  &ResourceLength);
-     /* Process all child initialization nodes */
-@@ -95,35 +98,52 @@ RsDoGeneralRegisterDescriptor (
-         {
-         case 0: /* Address space */
-+          /*
-             Descriptor->GenericReg.AddressSpaceId = (UINT8) InitializerOp->Asl.Value.Integer;
-+          */
-+            ACPI_MOVE_64_TO_8(&Descriptor->GenericReg.AddressSpaceId,
-+                            &InitializerOp->Asl.Value.Integer);
-             RsCreateByteField (InitializerOp, ACPI_RESTAG_ADDRESSSPACE,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.AddressSpaceId));
-            break;
-         case 1: /* Register Bit Width */
-+          /*
-             Descriptor->GenericReg.BitWidth = (UINT8) InitializerOp->Asl.Value.Integer;
-+          */
-+            ACPI_MOVE_64_TO_8(&Descriptor->GenericReg.BitWidth,
-+                            &InitializerOp->Asl.Value.Integer);
-             RsCreateByteField (InitializerOp, ACPI_RESTAG_REGISTERBITWIDTH,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.BitWidth));
-             break;
-         case 2: /* Register Bit Offset */
-+          /*
-             Descriptor->GenericReg.BitOffset = (UINT8) InitializerOp->Asl.Value.Integer;
-+          */
-+            ACPI_MOVE_64_TO_8(&Descriptor->GenericReg.BitOffset,
-+                            &InitializerOp->Asl.Value.Integer);
-             RsCreateByteField (InitializerOp, ACPI_RESTAG_REGISTERBITOFFSET,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.BitOffset));
-             break;
-         case 3: /* Register Address */
--            Descriptor->GenericReg.Address = InitializerOp->Asl.Value.Integer;
-+          ACPI_MOVE_64_TO_64(&Descriptor->GenericReg.Address,
-+                          &InitializerOp->Asl.Value.Integer);
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_ADDRESS,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.Address));
-             break;
-         case 4: /* Access Size (ACPI 3.0) */
-+          /*
-             Descriptor->GenericReg.AccessSize = (UINT8) InitializerOp->Asl.Value.Integer;
-+          */
-+          ACPI_MOVE_64_TO_8(&Descriptor->GenericReg.AccessSize,
-+                            &InitializerOp->Asl.Value.Integer);
-             RsCreateByteField (InitializerOp, ACPI_RESTAG_ACCESSSIZE,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.AccessSize));
-@@ -177,6 +197,7 @@ RsDoInterruptDescriptor (
-     AML_RESOURCE            *Rover = NULL;
-     ACPI_PARSE_OBJECT       *InitializerOp;
-     ASL_RESOURCE_NODE       *Rnode;
-+    UINT16                  ResourceLength = 0;
-     UINT16                  StringLength = 0;
-     UINT32                  OptionIndex = 0;
-     UINT32                  CurrentByteOffset;
-@@ -225,7 +246,7 @@ RsDoInterruptDescriptor (
-      * Initial descriptor length -- may be enlarged if there are
-      * optional fields present
-      */
--    Descriptor->ExtendedIrq.ResourceLength  = 2;  /* Flags and table length byte */
-+    ResourceLength  = 2;  /* Flags and table length byte */
-     Descriptor->ExtendedIrq.InterruptCount  = 0;
-     Rover = ACPI_CAST_PTR (AML_RESOURCE,
-@@ -333,10 +354,11 @@ RsDoInterruptDescriptor (
-             /* Save the integer and move pointer to the next one */
--            Rover->DwordItem = (UINT32) InitializerOp->Asl.Value.Integer;
-+            ACPI_MOVE_64_TO_32(&Rover->DwordItem,
-+                &InitializerOp->Asl.Value.Integer);
-             Rover = ACPI_ADD_PTR (AML_RESOURCE, &(Rover->DwordItem), 4);
-             Descriptor->ExtendedIrq.InterruptCount++;
--            Descriptor->ExtendedIrq.ResourceLength += 4;
-+            ResourceLength += 4;
-             /* Case 7: First interrupt number in list */
-@@ -372,7 +394,7 @@ RsDoInterruptDescriptor (
-     {
-         Rover->ByteItem = ResSourceIndex;
-         Rover = ACPI_ADD_PTR (AML_RESOURCE, &(Rover->ByteItem), 1);
--        Descriptor->ExtendedIrq.ResourceLength += 1;
-+        ResourceLength += 1;
-     }
-     /* Add optional ResSource string if present */
-@@ -381,14 +403,15 @@ RsDoInterruptDescriptor (
-     {
-         strcpy ((char *) Rover, (char *) ResSourceString);
--        Descriptor->ExtendedIrq.ResourceLength = (UINT16)
--            (Descriptor->ExtendedIrq.ResourceLength + StringLength);
-+        ResourceLength = (UINT16) (ResourceLength + StringLength);
-     }
-     Rnode->BufferLength =
-         (ASL_RESDESC_OFFSET (ExtendedIrq.Interrupts[0]) -
-         ASL_RESDESC_OFFSET (ExtendedIrq.DescriptorType))
-         + OptionIndex + StringLength;
-+    ACPI_MOVE_16_TO_16(&Descriptor->ExtendedIrq.ResourceLength,
-+                  &ResourceLength);
-     return (Rnode);
- }
-@@ -436,7 +459,7 @@ RsDoVendorLargeDescriptor (
-     Descriptor = Rnode->Buffer;
-     Descriptor->VendorLarge.DescriptorType = ACPI_RESOURCE_NAME_VENDOR_LARGE;
--    Descriptor->VendorLarge.ResourceLength = (UINT16) i;
-+    ACPI_MOVE_32_TO_16(&Descriptor->VendorLarge.ResourceLength, &i);
-     /* Point to end-of-descriptor for vendor data */
-Index: acpica-unix-20209326/source/compiler/aslrestype2d.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/aslrestype2d.c
-+++ acpica-unix-20209326/source/compiler/aslrestype2d.c
-@@ -79,7 +79,13 @@ RsDoDwordIoDescriptor (
-     ACPI_PARSE_OBJECT       *GranOp = NULL;
-     ASL_RESOURCE_NODE       *Rnode;
-     UINT16                  StringLength = 0;
-+    UINT16                  ResourceLength = 0;
-     UINT32                  OptionIndex = 0;
-+    UINT32                  Minimum = 0;
-+    UINT32                  Maximum = 0;
-+    UINT32                  AddressLength = 0;
-+    UINT32                  Granularity = 0;
-+    UINT32                  TranslationOffset = 0;
-     UINT8                   *OptionalFields;
-     UINT32                  CurrentByteOffset;
-     UINT32                  i;
-@@ -102,8 +108,7 @@ RsDoDwordIoDescriptor (
-      * optional fields present
-      */
-     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
--    Descriptor->Address32.ResourceLength = (UINT16)
--        (sizeof (AML_RESOURCE_ADDRESS32) -
-+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS32) -
-          sizeof (AML_RESOURCE_LARGE_HEADER));
-     /* Process all child initialization nodes */
-@@ -147,8 +152,7 @@ RsDoDwordIoDescriptor (
-         case 5: /* Address Granularity */
--            Descriptor->Address32.Granularity =
--                (UINT32) InitializerOp->Asl.Value.Integer;
-+            Granularity = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
-             GranOp = InitializerOp;
-@@ -156,8 +160,7 @@ RsDoDwordIoDescriptor (
-         case 6: /* Address Min */
--            Descriptor->Address32.Minimum =
--                (UINT32) InitializerOp->Asl.Value.Integer;
-+            Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
-             MinOp = InitializerOp;
-@@ -165,8 +168,7 @@ RsDoDwordIoDescriptor (
-         case 7: /* Address Max */
--            Descriptor->Address32.Maximum =
--                (UINT32) InitializerOp->Asl.Value.Integer;
-+            Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
-             MaxOp = InitializerOp;
-@@ -174,16 +176,14 @@ RsDoDwordIoDescriptor (
-         case 8: /* Translation Offset */
--            Descriptor->Address32.TranslationOffset =
--                (UINT32) InitializerOp->Asl.Value.Integer;
-+            TranslationOffset = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
-             break;
-         case 9: /* Address Length */
--            Descriptor->Address32.AddressLength =
--                (UINT32) InitializerOp->Asl.Value.Integer;
-+            AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
-             LengthOp = InitializerOp;
-@@ -197,7 +197,7 @@ RsDoDwordIoDescriptor (
-                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
-                 OptionIndex++;
--                Descriptor->Address32.ResourceLength++;
-+                ResourceLength++;
-                 ResSourceIndex = TRUE;
-             }
-             break;
-@@ -211,8 +211,7 @@ RsDoDwordIoDescriptor (
-                 {
-                     /* Found a valid ResourceSource */
--                    Descriptor->Address32.ResourceLength = (UINT16)
--                        (Descriptor->Address32.ResourceLength + StringLength);
-+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
-                     strcpy ((char *)
-                         &OptionalFields[OptionIndex],
-@@ -272,13 +271,20 @@ RsDoDwordIoDescriptor (
-     /* Validate the Min/Max/Len/Gran values */
-     RsLargeAddressCheck (
--        (UINT64) Descriptor->Address32.Minimum,
--        (UINT64) Descriptor->Address32.Maximum,
--        (UINT64) Descriptor->Address32.AddressLength,
--        (UINT64) Descriptor->Address32.Granularity,
-+        Minimum,
-+        Maximum,
-+        AddressLength,
-+        Granularity,
-         Descriptor->Address32.Flags,
-         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address32.ResourceLength, &ResourceLength);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Minimum, &Minimum);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Maximum, &Maximum);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.AddressLength, &AddressLength);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Granularity, &Granularity);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.TranslationOffset, &TranslationOffset);
-+
-     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
-         OptionIndex + StringLength;
-     return (Rnode);
-@@ -310,7 +316,13 @@ RsDoDwordMemoryDescriptor (
-     ASL_RESOURCE_NODE       *Rnode;
-     UINT8                   *OptionalFields;
-     UINT16                  StringLength = 0;
-+    UINT16                  ResourceLength = 0;
-     UINT32                  OptionIndex = 0;
-+    UINT32                  Minimum = 0;
-+    UINT32                  Maximum = 0;
-+    UINT32                  AddressLength = 0;
-+    UINT32                  Granularity = 0;
-+    UINT32                  TranslationOffset = 0;
-     UINT32                  CurrentByteOffset;
-     UINT32                  i;
-     BOOLEAN                 ResSourceIndex = FALSE;
-@@ -332,11 +344,9 @@ RsDoDwordMemoryDescriptor (
-      * optional fields present
-      */
-     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
--    Descriptor->Address32.ResourceLength = (UINT16)
--        (sizeof (AML_RESOURCE_ADDRESS32) -
-+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS32) -
-          sizeof (AML_RESOURCE_LARGE_HEADER));
--
-     /* Process all child initialization nodes */
-     for (i = 0; InitializerOp; i++)
-@@ -385,8 +395,7 @@ RsDoDwordMemoryDescriptor (
-         case 6: /* Address Granularity */
--            Descriptor->Address32.Granularity =
--                (UINT32) InitializerOp->Asl.Value.Integer;
-+            Granularity = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
-             GranOp = InitializerOp;
-@@ -394,8 +403,7 @@ RsDoDwordMemoryDescriptor (
-         case 7: /* Min Address */
--            Descriptor->Address32.Minimum =
--                (UINT32) InitializerOp->Asl.Value.Integer;
-+            Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
-             MinOp = InitializerOp;
-@@ -403,8 +411,7 @@ RsDoDwordMemoryDescriptor (
-         case 8: /* Max Address */
--            Descriptor->Address32.Maximum =
--                (UINT32) InitializerOp->Asl.Value.Integer;
-+            Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
-             MaxOp = InitializerOp;
-@@ -412,16 +419,14 @@ RsDoDwordMemoryDescriptor (
-         case 9: /* Translation Offset */
--            Descriptor->Address32.TranslationOffset =
--                (UINT32) InitializerOp->Asl.Value.Integer;
-+            TranslationOffset = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
-             break;
-         case 10: /* Address Length */
--            Descriptor->Address32.AddressLength =
--                (UINT32) InitializerOp->Asl.Value.Integer;
-+            AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
-             LengthOp = InitializerOp;
-@@ -433,7 +438,7 @@ RsDoDwordMemoryDescriptor (
-             {
-                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
-                 OptionIndex++;
--                Descriptor->Address32.ResourceLength++;
-+                ResourceLength++;
-                 ResSourceIndex = TRUE;
-             }
-             break;
-@@ -445,8 +450,8 @@ RsDoDwordMemoryDescriptor (
-             {
-                 if (StringLength)
-                 {
--                    Descriptor->Address32.ResourceLength = (UINT16)
--                        (Descriptor->Address32.ResourceLength + StringLength);
-+
-+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
-                     strcpy ((char *)
-                         &OptionalFields[OptionIndex],
-@@ -507,13 +512,20 @@ RsDoDwordMemoryDescriptor (
-     /* Validate the Min/Max/Len/Gran values */
-     RsLargeAddressCheck (
--        (UINT64) Descriptor->Address32.Minimum,
--        (UINT64) Descriptor->Address32.Maximum,
--        (UINT64) Descriptor->Address32.AddressLength,
--        (UINT64) Descriptor->Address32.Granularity,
-+        Minimum,
-+        Maximum,
-+        AddressLength,
-+        Granularity,
-         Descriptor->Address32.Flags,
-         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address32.ResourceLength, &ResourceLength);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Minimum, &Minimum);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Maximum, &Maximum);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.AddressLength, &AddressLength);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Granularity, &Granularity);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.TranslationOffset, &TranslationOffset);
-+
-     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
-         OptionIndex + StringLength;
-     return (Rnode);
-@@ -545,7 +557,13 @@ RsDoDwordSpaceDescriptor (
-     ASL_RESOURCE_NODE       *Rnode;
-     UINT8                   *OptionalFields;
-     UINT16                  StringLength = 0;
-+    UINT16                  ResourceLength = 0;
-     UINT32                  OptionIndex = 0;
-+    UINT32                  Minimum = 0;
-+    UINT32                  Maximum = 0;
-+    UINT32                  AddressLength = 0;
-+    UINT32                  Granularity = 0;
-+    UINT32                  TranslationOffset = 0;
-     UINT32                  CurrentByteOffset;
-     UINT32                  i;
-     BOOLEAN                 ResSourceIndex = FALSE;
-@@ -566,8 +584,7 @@ RsDoDwordSpaceDescriptor (
-      * optional fields present
-      */
-     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
--    Descriptor->Address32.ResourceLength = (UINT16)
--        (sizeof (AML_RESOURCE_ADDRESS32) -
-+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS32) -
-          sizeof (AML_RESOURCE_LARGE_HEADER));
-     /* Process all child initialization nodes */
-@@ -616,8 +633,7 @@ RsDoDwordSpaceDescriptor (
-         case 6: /* Address Granularity */
--            Descriptor->Address32.Granularity =
--                (UINT32) InitializerOp->Asl.Value.Integer;
-+            Granularity = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
-             GranOp = InitializerOp;
-@@ -625,8 +641,7 @@ RsDoDwordSpaceDescriptor (
-         case 7: /* Min Address */
--            Descriptor->Address32.Minimum =
--                (UINT32) InitializerOp->Asl.Value.Integer;
-+            Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
-             MinOp = InitializerOp;
-@@ -634,8 +649,7 @@ RsDoDwordSpaceDescriptor (
-         case 8: /* Max Address */
--            Descriptor->Address32.Maximum =
--                (UINT32) InitializerOp->Asl.Value.Integer;
-+            Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
-             MaxOp = InitializerOp;
-@@ -643,16 +657,14 @@ RsDoDwordSpaceDescriptor (
-         case 9: /* Translation Offset */
--            Descriptor->Address32.TranslationOffset =
--                (UINT32) InitializerOp->Asl.Value.Integer;
-+            TranslationOffset = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
-             break;
-         case 10: /* Address Length */
--            Descriptor->Address32.AddressLength =
--                (UINT32) InitializerOp->Asl.Value.Integer;
-+            AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
-             LengthOp = InitializerOp;
-@@ -664,7 +676,7 @@ RsDoDwordSpaceDescriptor (
-             {
-                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
-                 OptionIndex++;
--                Descriptor->Address32.ResourceLength++;
-+                ResourceLength++;
-                 ResSourceIndex = TRUE;
-             }
-             break;
-@@ -676,8 +688,7 @@ RsDoDwordSpaceDescriptor (
-             {
-                 if (StringLength)
-                 {
--                    Descriptor->Address32.ResourceLength = (UINT16)
--                        (Descriptor->Address32.ResourceLength + StringLength);
-+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
-                     strcpy ((char *)
-                         &OptionalFields[OptionIndex],
-@@ -724,13 +735,20 @@ RsDoDwordSpaceDescriptor (
-     /* Validate the Min/Max/Len/Gran values */
-     RsLargeAddressCheck (
--        (UINT64) Descriptor->Address32.Minimum,
--        (UINT64) Descriptor->Address32.Maximum,
--        (UINT64) Descriptor->Address32.AddressLength,
--        (UINT64) Descriptor->Address32.Granularity,
-+        Minimum,
-+        Maximum,
-+        AddressLength,
-+        Granularity,
-         Descriptor->Address32.Flags,
-         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address32.ResourceLength, &ResourceLength);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Minimum, &Minimum);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Maximum, &Maximum);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.AddressLength, &AddressLength);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Granularity, &Granularity);
-+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.TranslationOffset, &TranslationOffset);
-+
-     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
-         OptionIndex + StringLength;
-     return (Rnode);
-Index: acpica-unix-20209326/source/compiler/aslrestype2e.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/aslrestype2e.c
-+++ acpica-unix-20209326/source/compiler/aslrestype2e.c
-@@ -78,6 +78,13 @@ RsDoExtendedIoDescriptor (
-     ACPI_PARSE_OBJECT       *GranOp = NULL;
-     ASL_RESOURCE_NODE       *Rnode;
-     UINT16                  StringLength = 0;
-+    UINT16                  ResourceLength = 0;
-+    UINT64                  Minimum = 0;
-+    UINT64                  Maximum = 0;
-+    UINT64                  AddressLength = 0;
-+    UINT64                  Granularity = 0;
-+    UINT64                  TranslationOffset = 0;
-+    UINT64                  TypeSpecific = 0;
-     UINT32                  CurrentByteOffset;
-     UINT32                  i;
-@@ -94,9 +101,10 @@ RsDoExtendedIoDescriptor (
-     Descriptor->ExtAddress64.ResourceType = ACPI_ADDRESS_TYPE_IO_RANGE;
-     Descriptor->ExtAddress64.RevisionID = AML_RESOURCE_EXTENDED_ADDRESS_REVISION;
--    Descriptor->ExtAddress64.ResourceLength = (UINT16)
--        (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
-+    ResourceLength  = (UINT16) (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
-          sizeof (AML_RESOURCE_LARGE_HEADER));
-+    ACPI_MOVE_16_TO_16(&Descriptor->ExtAddress64.ResourceLength,
-+        &ResourceLength);
-     /* Process all child initialization nodes */
-@@ -139,7 +147,7 @@ RsDoExtendedIoDescriptor (
-         case 5: /* Address Granularity */
--            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
-+            Granularity = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
-             GranOp = InitializerOp;
-@@ -147,7 +155,7 @@ RsDoExtendedIoDescriptor (
-         case 6: /* Address Min */
--            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
-+            Minimum = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
-             MinOp = InitializerOp;
-@@ -155,7 +163,7 @@ RsDoExtendedIoDescriptor (
-         case 7: /* Address Max */
--            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
-+            Maximum = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
-             MaxOp = InitializerOp;
-@@ -163,14 +171,14 @@ RsDoExtendedIoDescriptor (
-         case 8: /* Translation Offset */
--            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
-+            TranslationOffset = 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;
-+            AddressLength = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
-             LengthOp = InitializerOp;
-@@ -178,7 +186,7 @@ RsDoExtendedIoDescriptor (
-         case 10: /* Type-Specific Attributes */
--            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
-+            TypeSpecific = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
-             break;
-@@ -214,13 +222,20 @@ RsDoExtendedIoDescriptor (
-     /* Validate the Min/Max/Len/Gran values */
-     RsLargeAddressCheck (
--        Descriptor->ExtAddress64.Minimum,
--        Descriptor->ExtAddress64.Maximum,
--        Descriptor->ExtAddress64.AddressLength,
--        Descriptor->ExtAddress64.Granularity,
-+        Minimum,
-+        Maximum,
-+        AddressLength,
-+        Granularity,
-         Descriptor->ExtAddress64.Flags,
-         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
-+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Minimum, &Minimum);
-+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Maximum, &Maximum);
-+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.AddressLength, &AddressLength);
-+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Granularity, &Granularity);
-+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.TranslationOffset, &TranslationOffset);
-+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.TypeSpecific, &TypeSpecific);
-+
-     Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) +
-         StringLength;
-     return (Rnode);
-Index: acpica-unix-20209326/source/compiler/aslrestype2q.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/aslrestype2q.c
-+++ acpica-unix-20209326/source/compiler/aslrestype2q.c
-@@ -80,7 +80,13 @@ RsDoQwordIoDescriptor (
-     ASL_RESOURCE_NODE       *Rnode;
-     UINT8                   *OptionalFields;
-     UINT16                  StringLength = 0;
-+    UINT16                  ResourceLength = 0;
-     UINT32                  OptionIndex = 0;
-+    UINT64                  Minimum = 0;
-+    UINT64                  Maximum = 0;
-+    UINT64                  AddressLength = 0;
-+    UINT64                  Granularity = 0;
-+    UINT64                  TranslationOffset = 0;
-     UINT32                  CurrentByteOffset;
-     UINT32                  i;
-     BOOLEAN                 ResSourceIndex = FALSE;
-@@ -102,8 +108,7 @@ RsDoQwordIoDescriptor (
-      * optional fields present
-      */
-     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);
--    Descriptor->Address64.ResourceLength = (UINT16)
--        (sizeof (AML_RESOURCE_ADDRESS64) -
-+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS64) -
-          sizeof (AML_RESOURCE_LARGE_HEADER));
-     /* Process all child initialization nodes */
-@@ -147,7 +152,7 @@ RsDoQwordIoDescriptor (
-         case 5: /* Address Granularity */
--            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
-+            Granularity = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
-             GranOp = InitializerOp;
-@@ -155,7 +160,7 @@ RsDoQwordIoDescriptor (
-         case 6: /* Address Min */
--            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
-+            Minimum = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
-             MinOp = InitializerOp;
-@@ -163,7 +168,7 @@ RsDoQwordIoDescriptor (
-         case 7: /* Address Max */
--            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
-+            Maximum = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
-             MaxOp = InitializerOp;
-@@ -171,14 +176,14 @@ RsDoQwordIoDescriptor (
-         case 8: /* Translation Offset */
--            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
-+            TranslationOffset = 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;
-+            AddressLength = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
-             LengthOp = InitializerOp;
-@@ -190,7 +195,7 @@ RsDoQwordIoDescriptor (
-             {
-                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
-                 OptionIndex++;
--                Descriptor->Address64.ResourceLength++;
-+                ResourceLength++;
-                 ResSourceIndex = TRUE;
-             }
-             break;
-@@ -202,8 +207,7 @@ RsDoQwordIoDescriptor (
-             {
-                 if (StringLength)
-                 {
--                    Descriptor->Address64.ResourceLength = (UINT16)
--                        (Descriptor->Address64.ResourceLength + StringLength);
-+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
-                     strcpy ((char *)
-                         &OptionalFields[OptionIndex],
-@@ -263,13 +267,20 @@ RsDoQwordIoDescriptor (
-     /* Validate the Min/Max/Len/Gran values */
-     RsLargeAddressCheck (
--        Descriptor->Address64.Minimum,
--        Descriptor->Address64.Maximum,
--        Descriptor->Address64.AddressLength,
--        Descriptor->Address64.Granularity,
-+        Minimum,
-+        Maximum,
-+        AddressLength,
-+        Granularity,
-         Descriptor->Address64.Flags,
-         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address64.ResourceLength, &ResourceLength);
-+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Minimum, &Minimum);
-+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Maximum, &Maximum);
-+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.AddressLength, &AddressLength);
-+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Granularity, &Granularity);
-+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.TranslationOffset, &TranslationOffset);
-+
-     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) +
-         OptionIndex + StringLength;
-     return (Rnode);
-@@ -301,7 +312,13 @@ RsDoQwordMemoryDescriptor (
-     ASL_RESOURCE_NODE       *Rnode;
-     UINT8                   *OptionalFields;
-     UINT16                  StringLength = 0;
-+    UINT16                  ResourceLength = 0;
-     UINT32                  OptionIndex = 0;
-+    UINT64                  Minimum = 0;
-+    UINT64                  Maximum = 0;
-+    UINT64                  AddressLength = 0;
-+    UINT64                  Granularity = 0;
-+    UINT64                  TranslationOffset = 0;
-     UINT32                  CurrentByteOffset;
-     UINT32                  i;
-     BOOLEAN                 ResSourceIndex = FALSE;
-@@ -323,8 +340,7 @@ RsDoQwordMemoryDescriptor (
-      * optional fields present
-      */
-     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);
--    Descriptor->Address64.ResourceLength = (UINT16)
--        (sizeof (AML_RESOURCE_ADDRESS64) -
-+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS64) -
-          sizeof (AML_RESOURCE_LARGE_HEADER));
-     /* Process all child initialization nodes */
-@@ -375,7 +391,7 @@ RsDoQwordMemoryDescriptor (
-         case 6: /* Address Granularity */
--            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
-+            Granularity = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
-             GranOp = InitializerOp;
-@@ -383,7 +399,7 @@ RsDoQwordMemoryDescriptor (
-         case 7: /* Min Address */
--            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
-+            Minimum = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
-             MinOp = InitializerOp;
-@@ -391,7 +407,7 @@ RsDoQwordMemoryDescriptor (
-         case 8: /* Max Address */
--            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
-+            Maximum = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
-             MaxOp = InitializerOp;
-@@ -399,14 +415,14 @@ RsDoQwordMemoryDescriptor (
-         case 9: /* Translation Offset */
--            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
-+            TranslationOffset = 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;
-+            AddressLength = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
-             LengthOp = InitializerOp;
-@@ -418,7 +434,7 @@ RsDoQwordMemoryDescriptor (
-             {
-                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
-                 OptionIndex++;
--                Descriptor->Address64.ResourceLength++;
-+                ResourceLength++;
-                 ResSourceIndex = TRUE;
-             }
-             break;
-@@ -430,8 +446,7 @@ RsDoQwordMemoryDescriptor (
-             {
-                 if (StringLength)
-                 {
--                    Descriptor->Address64.ResourceLength = (UINT16)
--                        (Descriptor->Address64.ResourceLength + StringLength);
-+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
-                     strcpy ((char *)
-                         &OptionalFields[OptionIndex],
-@@ -492,13 +507,20 @@ RsDoQwordMemoryDescriptor (
-     /* Validate the Min/Max/Len/Gran values */
-     RsLargeAddressCheck (
--        Descriptor->Address64.Minimum,
--        Descriptor->Address64.Maximum,
--        Descriptor->Address64.AddressLength,
--        Descriptor->Address64.Granularity,
-+        Minimum,
-+        Maximum,
-+        AddressLength,
-+        Granularity,
-         Descriptor->Address64.Flags,
-         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address64.ResourceLength, &ResourceLength);
-+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Minimum, &Minimum);
-+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Maximum, &Maximum);
-+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.AddressLength, &AddressLength);
-+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Granularity, &Granularity);
-+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.TranslationOffset, &TranslationOffset);
-+
-     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) +
-         OptionIndex + StringLength;
-     return (Rnode);
-@@ -530,9 +552,15 @@ RsDoQwordSpaceDescriptor (
-     ASL_RESOURCE_NODE       *Rnode;
-     UINT8                   *OptionalFields;
-     UINT16                  StringLength = 0;
-+    UINT16                  ResourceLength = 0;
-     UINT32                  OptionIndex = 0;
-     UINT32                  CurrentByteOffset;
-     UINT32                  i;
-+    UINT64                  Minimum = 0;
-+    UINT64                  Maximum = 0;
-+    UINT64                  AddressLength = 0;
-+    UINT64                  Granularity = 0;
-+    UINT64                  TranslationOffset = 0;
-     BOOLEAN                 ResSourceIndex = FALSE;
-@@ -551,8 +579,7 @@ RsDoQwordSpaceDescriptor (
-      * optional fields present
-      */
-     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);
--    Descriptor->Address64.ResourceLength = (UINT16)
--        (sizeof (AML_RESOURCE_ADDRESS64) -
-+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS64) -
-          sizeof (AML_RESOURCE_LARGE_HEADER));
-     /* Process all child initialization nodes */
-@@ -601,7 +628,7 @@ RsDoQwordSpaceDescriptor (
-         case 6: /* Address Granularity */
--            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
-+            Granularity = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
-             GranOp = InitializerOp;
-@@ -609,7 +636,7 @@ RsDoQwordSpaceDescriptor (
-         case 7: /* Min Address */
--            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
-+            Minimum = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
-             MinOp = InitializerOp;
-@@ -617,7 +644,7 @@ RsDoQwordSpaceDescriptor (
-         case 8: /* Max Address */
--            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
-+            Maximum = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
-             MaxOp = InitializerOp;
-@@ -625,14 +652,14 @@ RsDoQwordSpaceDescriptor (
-         case 9: /* Translation Offset */
--            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
-+            TranslationOffset = 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;
-+            AddressLength = InitializerOp->Asl.Value.Integer;
-             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
-             LengthOp = InitializerOp;
-@@ -644,7 +671,7 @@ RsDoQwordSpaceDescriptor (
-             {
-                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
-                 OptionIndex++;
--                Descriptor->Address64.ResourceLength++;
-+                ResourceLength++;
-                 ResSourceIndex = TRUE;
-             }
-             break;
-@@ -656,8 +683,7 @@ RsDoQwordSpaceDescriptor (
-             {
-                 if (StringLength)
-                 {
--                    Descriptor->Address64.ResourceLength = (UINT16)
--                        (Descriptor->Address64.ResourceLength + StringLength);
-+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
-                     strcpy ((char *)
-                         &OptionalFields[OptionIndex],
-@@ -703,13 +729,20 @@ RsDoQwordSpaceDescriptor (
-     /* Validate the Min/Max/Len/Gran values */
-     RsLargeAddressCheck (
--        Descriptor->Address64.Minimum,
--        Descriptor->Address64.Maximum,
--        Descriptor->Address64.AddressLength,
--        Descriptor->Address64.Granularity,
-+        Minimum,
-+        Maximum,
-+        AddressLength,
-+        Granularity,
-         Descriptor->Address64.Flags,
-         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address64.ResourceLength, &ResourceLength);
-+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Minimum, &Minimum);
-+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Maximum, &Maximum);
-+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.AddressLength, &AddressLength);
-+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Granularity, &Granularity);
-+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.TranslationOffset, &TranslationOffset);
-+
-     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) +
-         OptionIndex + StringLength;
-     return (Rnode);
-Index: acpica-unix-20209326/source/compiler/aslrestype2s.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/aslrestype2s.c
-+++ acpica-unix-20209326/source/compiler/aslrestype2s.c
-@@ -340,9 +340,14 @@ RsDoGpioIntDescriptor (
-     UINT16                  VendorLength;
-     UINT16                  InterruptLength;
-     UINT16                  DescriptorSize;
-+    UINT16                  IntFlags = 0;
-+    UINT16                  DebounceTimeout = 0;
-+    UINT16                  Flags = 0;
-     UINT32                  CurrentByteOffset;
-     UINT32                  PinCount = 0;
-     UINT32                  i;
-+    UINT16                Tmp16;
-+    UINT16                Val16;
-     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
-@@ -367,7 +372,7 @@ RsDoGpioIntDescriptor (
-         sizeof (AML_RESOURCE_LARGE_HEADER));
-     Descriptor = Rnode->Buffer;
--    Descriptor->Gpio.ResourceLength = DescriptorSize;
-+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.ResourceLength, &DescriptorSize);
-     Descriptor->Gpio.DescriptorType = ACPI_RESOURCE_NAME_GPIO;
-     Descriptor->Gpio.RevisionId = AML_RESOURCE_GPIO_REVISION;
-     Descriptor->Gpio.ConnectionType = AML_RESOURCE_GPIO_TYPE_INT;
-@@ -382,11 +387,11 @@ RsDoGpioIntDescriptor (
-     /* Setup offsets within the descriptor */
--    Descriptor->Gpio.PinTableOffset = (UINT16)
--        ACPI_PTR_DIFF (InterruptList, Descriptor);
-+    Tmp16 = (UINT16) ACPI_PTR_DIFF (InterruptList, Descriptor);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.PinTableOffset, &Tmp16);
--    Descriptor->Gpio.ResSourceOffset = (UINT16)
--        ACPI_PTR_DIFF (ResourceSource, Descriptor);
-+    Tmp16 = (UINT16) ACPI_PTR_DIFF (ResourceSource, Descriptor);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.ResSourceOffset, &Tmp16);
-     /* Process all child initialization nodes */
-@@ -396,21 +401,21 @@ RsDoGpioIntDescriptor (
-         {
-         case 0: /* Interrupt Mode - edge/level [Flag] (_MOD) */
--            RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 0, 0);
-+            RsSetFlagBits16 (&IntFlags, InitializerOp, 0, 0);
-             RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 0);
-             break;
-         case 1: /* Interrupt Polarity - Active high/low [Flags] (_POL) */
--            RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 1, 0);
-+            RsSetFlagBits16 (&IntFlags, InitializerOp, 1, 0);
-             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_POLARITY,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 1, 2);
-             break;
-         case 2: /* Share Type - Default: exclusive (0) [Flags] (_SHR) */
--            RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 3, 0);
-+            RsSetFlagBits16 (&IntFlags, InitializerOp, 3, 0);
-             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 3, 2);
-             break;
-@@ -424,7 +429,7 @@ RsDoGpioIntDescriptor (
-         case 4: /* Debounce Timeout [WORD] (_DBT) */
--            Descriptor->Gpio.DebounceTimeout = (UINT16) InitializerOp->Asl.Value.Integer;
-+            DebounceTimeout = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_DEBOUNCETIME,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.DebounceTimeout));
-             break;
-@@ -451,7 +456,7 @@ RsDoGpioIntDescriptor (
-         case 7: /* Resource Usage (consumer/producer) */
--            RsSetFlagBits16 (&Descriptor->Gpio.Flags, InitializerOp, 0, 1);
-+            RsSetFlagBits16 (&Flags, InitializerOp, 0, 1);
-             break;
-         case 8: /* Resource Tag (Descriptor Name) */
-@@ -466,13 +471,14 @@ RsDoGpioIntDescriptor (
-              * This field is required in order to calculate the length
-              * of the ResourceSource at runtime.
-              */
--            Descriptor->Gpio.VendorOffset = (UINT16)
--                ACPI_PTR_DIFF (VendorData, Descriptor);
-+            Tmp16 = (UINT16) ACPI_PTR_DIFF (VendorData, Descriptor);
-+            ACPI_MOVE_16_TO_16(&Descriptor->Gpio.VendorOffset, &Tmp16);
-             if (RsGetVendorData (InitializerOp, VendorData,
--                (CurrentByteOffset +  Descriptor->Gpio.VendorOffset)))
-+                (CurrentByteOffset + Tmp16)))
-             {
--                Descriptor->Gpio.VendorLength = VendorLength;
-+                ACPI_MOVE_16_TO_16(&Descriptor->Gpio.VendorLength,
-+                                 &VendorLength);
-             }
-             break;
-@@ -485,7 +491,9 @@ RsDoGpioIntDescriptor (
-              *  (implies resource source must immediately follow the pin list.)
-              *  Name: _PIN
-              */
--            *InterruptList = (UINT16) InitializerOp->Asl.Value.Integer;
-+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
-+            ACPI_MOVE_16_TO_16(&Val16, &Tmp16);
-+            *InterruptList = Val16;
-             InterruptList++;
-             PinCount++;
-@@ -507,8 +515,10 @@ RsDoGpioIntDescriptor (
-                 /* Create a named field at the start of the list */
--                RsCreateWordField (InitializerOp, ACPI_RESTAG_PIN,
--                    CurrentByteOffset + Descriptor->Gpio.PinTableOffset);
-+              ACPI_MOVE_16_TO_16(&Tmp16, &Descriptor->Gpio.PinTableOffset);
-+              Tmp16 += CurrentByteOffset;
-+              ACPI_MOVE_16_TO_16(&Val16, &Tmp16);
-+                RsCreateWordField (InitializerOp, ACPI_RESTAG_PIN, Val16);
-             }
-             break;
-         }
-@@ -516,6 +526,10 @@ RsDoGpioIntDescriptor (
-         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
-     }
-+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.IntFlags, &IntFlags);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.DebounceTimeout, &DebounceTimeout);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.Flags, &Flags);
-+
-     MpSaveGpioInfo (Info->MappingOp, Descriptor,
-         PinCount, PinList, ResourceSource);
-     return (Rnode);
-@@ -549,9 +563,15 @@ RsDoGpioIoDescriptor (
-     UINT16                  VendorLength;
-     UINT16                  InterruptLength;
-     UINT16                  DescriptorSize;
-+    UINT16                  IntFlags = 0;
-+    UINT16                  DebounceTimeout = 0;
-+    UINT16                  DriveStrength = 0;
-+    UINT16                  Flags = 0;
-     UINT32                  CurrentByteOffset;
-     UINT32                  PinCount = 0;
-     UINT32                  i;
-+    UINT16                Tmp16;
-+    UINT16                Val16;
-     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
-@@ -576,7 +596,7 @@ RsDoGpioIoDescriptor (
-         sizeof (AML_RESOURCE_LARGE_HEADER));
-     Descriptor = Rnode->Buffer;
--    Descriptor->Gpio.ResourceLength = DescriptorSize;
-+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.ResourceLength, &DescriptorSize);
-     Descriptor->Gpio.DescriptorType = ACPI_RESOURCE_NAME_GPIO;
-     Descriptor->Gpio.RevisionId = AML_RESOURCE_GPIO_REVISION;
-     Descriptor->Gpio.ConnectionType = AML_RESOURCE_GPIO_TYPE_IO;
-@@ -590,11 +610,11 @@ RsDoGpioIoDescriptor (
-     /* Setup offsets within the descriptor */
--    Descriptor->Gpio.PinTableOffset = (UINT16)
--        ACPI_PTR_DIFF (InterruptList, Descriptor);
-+    Tmp16 = (UINT16) ACPI_PTR_DIFF (InterruptList, Descriptor);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.PinTableOffset, &Tmp16);
--    Descriptor->Gpio.ResSourceOffset = (UINT16)
--        ACPI_PTR_DIFF (ResourceSource, Descriptor);
-+    Tmp16 = (UINT16) ACPI_PTR_DIFF (ResourceSource, Descriptor);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.ResSourceOffset, &Tmp16);
-     /* Process all child initialization nodes */
-@@ -604,7 +624,7 @@ RsDoGpioIoDescriptor (
-         {
-         case 0: /* Share Type [Flags] (_SHR) */
--            RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 3, 0);
-+            RsSetFlagBits16 (&IntFlags, InitializerOp, 3, 0);
-             RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 3);
-             break;
-@@ -618,21 +638,21 @@ RsDoGpioIoDescriptor (
-         case 2: /* Debounce Timeout [WORD] (_DBT) */
--            Descriptor->Gpio.DebounceTimeout = (UINT16) InitializerOp->Asl.Value.Integer;
-+            DebounceTimeout = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_DEBOUNCETIME,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.DebounceTimeout));
-             break;
-         case 3: /* Drive Strength [WORD] (_DRS) */
--            Descriptor->Gpio.DriveStrength = (UINT16) InitializerOp->Asl.Value.Integer;
-+            DriveStrength = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_DRIVESTRENGTH,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.DriveStrength));
-             break;
-         case 4: /* I/O Restriction [Flag] (_IOR) */
--            RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 0, 0);
-+            RsSetFlagBits16 (&IntFlags, InitializerOp, 0, 0);
-             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_IORESTRICTION,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 0, 2);
-             break;
-@@ -658,7 +678,7 @@ RsDoGpioIoDescriptor (
-         case 7: /* Resource Usage (consumer/producer) */
--            RsSetFlagBits16 (&Descriptor->Gpio.Flags, InitializerOp, 0, 1);
-+            RsSetFlagBits16 (&Flags, InitializerOp, 0, 1);
-             break;
-         case 8: /* Resource Tag (Descriptor Name) */
-@@ -672,13 +692,14 @@ RsDoGpioIoDescriptor (
-              * This field is required in order to calculate the length
-              * of the ResourceSource at runtime.
-              */
--            Descriptor->Gpio.VendorOffset = (UINT16)
--                ACPI_PTR_DIFF (VendorData, Descriptor);
-+            Tmp16 = (UINT16) ACPI_PTR_DIFF (VendorData, Descriptor);
-+            ACPI_MOVE_16_TO_16(&Descriptor->Gpio.VendorOffset, &Tmp16);
-             if (RsGetVendorData (InitializerOp, VendorData,
-                 (CurrentByteOffset + Descriptor->Gpio.VendorOffset)))
-             {
--                Descriptor->Gpio.VendorLength = VendorLength;
-+                ACPI_MOVE_16_TO_16(&Descriptor->Gpio.VendorLength,
-+                                 &VendorLength);
-             }
-             break;
-@@ -691,7 +712,9 @@ RsDoGpioIoDescriptor (
-              *  (implies resource source must immediately follow the pin list.)
-              *  Name: _PIN
-              */
--            *InterruptList = (UINT16) InitializerOp->Asl.Value.Integer;
-+            Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer;
-+          ACPI_MOVE_16_TO_16(&Val16, &Tmp16);
-+            *InterruptList = Val16;
-             InterruptList++;
-             PinCount++;
-@@ -722,6 +745,11 @@ RsDoGpioIoDescriptor (
-         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
-     }
-+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.IntFlags, &IntFlags);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.DebounceTimeout, &DebounceTimeout);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.DriveStrength, &DriveStrength);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.Flags, &Flags);
-+
-     MpSaveGpioInfo (Info->MappingOp, Descriptor,
-         PinCount, PinList, ResourceSource);
-     return (Rnode);
-@@ -752,8 +780,12 @@ RsDoI2cSerialBusDescriptor (
-     UINT16                  ResSourceLength;
-     UINT16                  VendorLength;
-     UINT16                  DescriptorSize;
-+    UINT16                  SlaveAddress = 0;
-+    UINT32                  ConnectionSpeed = 0;
-+    UINT16                  TypeSpecificFlags = 0;
-     UINT32                  CurrentByteOffset;
-     UINT32                  i;
-+    UINT16                Tmp16;
-     InitializerOp = Info->DescriptorTypeOp->Asl.Child;
-@@ -776,12 +808,14 @@ RsDoI2cSerialBusDescriptor (
-         sizeof (AML_RESOURCE_LARGE_HEADER));
-     Descriptor = Rnode->Buffer;
--    Descriptor->I2cSerialBus.ResourceLength = DescriptorSize;
-+    ACPI_MOVE_16_TO_16(&Descriptor->I2cSerialBus.ResourceLength,
-+                     &DescriptorSize);
-     Descriptor->I2cSerialBus.DescriptorType = ACPI_RESOURCE_NAME_SERIAL_BUS;
-     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;
-+    ACPI_MOVE_16_TO_16(&Descriptor->I2cSerialBus.TypeDataLength, &Tmp16);
-     if (Info->DescriptorTypeOp->Asl.ParseOpcode == PARSEOP_I2C_SERIALBUS_V2)
-     {
-@@ -801,7 +835,7 @@ RsDoI2cSerialBusDescriptor (
-         {
-         case 0: /* Slave Address [WORD] (_ADR) */
--            Descriptor->I2cSerialBus.SlaveAddress = (UINT16) InitializerOp->Asl.Value.Integer;
-+            SlaveAddress = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_ADDRESS,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.SlaveAddress));
-             break;
-@@ -815,14 +849,14 @@ RsDoI2cSerialBusDescriptor (
-         case 2: /* Connection Speed [DWORD] (_SPE) */
--            Descriptor->I2cSerialBus.ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
-+            ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
-             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);
-+            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 0, 0);
-             RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.TypeSpecificFlags), 0);
-             break;
-@@ -882,6 +916,9 @@ RsDoI2cSerialBusDescriptor (
-         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
-     }
-+    ACPI_MOVE_16_TO_16(&Descriptor->I2cSerialBus.SlaveAddress, &SlaveAddress);
-+    ACPI_MOVE_32_TO_32(&Descriptor->I2cSerialBus.ConnectionSpeed, &ConnectionSpeed);
-+    ACPI_MOVE_16_TO_16(&Descriptor->I2cSerialBus.TypeSpecificFlags, &TypeSpecificFlags);
-     MpSaveSerialInfo (Info->MappingOp, Descriptor, ResourceSource);
-     return (Rnode);
- }
-@@ -911,6 +948,9 @@ RsDoSpiSerialBusDescriptor (
-     UINT16                  ResSourceLength;
-     UINT16                  VendorLength;
-     UINT16                  DescriptorSize;
-+    UINT16                  DeviceSelection = 0;
-+    UINT32                  ConnectionSpeed = 0;
-+    UINT16                  TypeSpecificFlags = 0;
-     UINT32                  CurrentByteOffset;
-     UINT32                  i;
-@@ -961,21 +1001,21 @@ RsDoSpiSerialBusDescriptor (
-         {
-         case 0: /* Device Selection [WORD] (_ADR) */
--            Descriptor->SpiSerialBus.DeviceSelection = (UINT16) InitializerOp->Asl.Value.Integer;
-+            DeviceSelection = (UINT16) InitializerOp->Asl.Value.Integer;
-             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);
-+            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 1, 0);
-             RsCreateBitField (InitializerOp, ACPI_RESTAG_DEVICEPOLARITY,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.TypeSpecificFlags), 1);
-             break;
-         case 2: /* Wire Mode [Flag] (_MOD) */
--            RsSetFlagBits16 (&Descriptor->SpiSerialBus.TypeSpecificFlags, InitializerOp, 0, 0);
-+            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 0, 0);
-             RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.TypeSpecificFlags), 0);
-             break;
-@@ -996,7 +1036,7 @@ RsDoSpiSerialBusDescriptor (
-         case 5: /* Connection Speed [DWORD] (_SPE) */
--            Descriptor->SpiSerialBus.ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
-+            ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
-             RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.ConnectionSpeed));
-             break;
-@@ -1070,6 +1110,10 @@ RsDoSpiSerialBusDescriptor (
-         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
-     }
-+    ACPI_MOVE_16_TO_16(&Descriptor->SpiSerialBus.DeviceSelection, &DeviceSelection);
-+    ACPI_MOVE_32_TO_32(&Descriptor->SpiSerialBus.ConnectionSpeed, &ConnectionSpeed);
-+    ACPI_MOVE_16_TO_16(&Descriptor->SpiSerialBus.TypeSpecificFlags, &TypeSpecificFlags);
-+
-     MpSaveSerialInfo (Info->MappingOp, Descriptor, ResourceSource);
-     return (Rnode);
- }
-@@ -1099,6 +1143,10 @@ RsDoUartSerialBusDescriptor (
-     UINT16                  ResSourceLength;
-     UINT16                  VendorLength;
-     UINT16                  DescriptorSize;
-+    UINT32                  DefaultBaudRate = 0;
-+    UINT16                  TypeSpecificFlags = 0;
-+    UINT16                  RxFifoSize = 0;
-+    UINT16                  TxFifoSize = 0;
-     UINT32                  CurrentByteOffset;
-     UINT32                  i;
-@@ -1148,21 +1196,21 @@ RsDoUartSerialBusDescriptor (
-         {
-         case 0: /* Connection Speed (Baud Rate) [DWORD] (_SPE) */
--            Descriptor->UartSerialBus.DefaultBaudRate = (UINT32) InitializerOp->Asl.Value.Integer;
-+            DefaultBaudRate = (UINT32) InitializerOp->Asl.Value.Integer;
-             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);
-+            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 4, 3);
-             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_LENGTH,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 4, 3);
-             break;
-         case 2: /* Stop Bits [Flags] (_STB) */
--            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 2, 1);
-+            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 2, 1);
-             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_STOPBITS,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 2, 2);
-             break;
-@@ -1176,7 +1224,7 @@ RsDoUartSerialBusDescriptor (
-         case 4: /* Endianness [Flag] (_END) */
--            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 7, 0);
-+            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 7, 0);
-             RsCreateBitField (InitializerOp, ACPI_RESTAG_ENDIANNESS,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 7);
-             break;
-@@ -1190,21 +1238,21 @@ RsDoUartSerialBusDescriptor (
-         case 6: /* Flow Control [Flags] (_FLC) */
--            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 0, 0);
-+            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 0, 0);
-             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_FLOWCONTROL,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 0, 2);
-             break;
-         case 7: /* Rx Buffer Size [WORD] (_RXL) */
--            Descriptor->UartSerialBus.RxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer;
-+            RxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer;
-             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;
-+            TxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH_TX,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TxFifoSize));
-             break;
-@@ -1274,6 +1322,11 @@ RsDoUartSerialBusDescriptor (
-         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
-     }
-+    ACPI_MOVE_32_TO_32(&Descriptor->UartSerialBus.DefaultBaudRate, &DefaultBaudRate);
-+    ACPI_MOVE_16_TO_16(&Descriptor->UartSerialBus.TypeSpecificFlags, &TypeSpecificFlags);
-+    ACPI_MOVE_16_TO_16(&Descriptor->UartSerialBus.RxFifoSize, &RxFifoSize);
-+    ACPI_MOVE_16_TO_16(&Descriptor->UartSerialBus.TxFifoSize, &TxFifoSize);
-+
-     MpSaveSerialInfo (Info->MappingOp, Descriptor, ResourceSource);
-     return (Rnode);
- }
-Index: acpica-unix-20209326/source/compiler/aslrestype2w.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/aslrestype2w.c
-+++ acpica-unix-20209326/source/compiler/aslrestype2w.c
-@@ -81,6 +81,12 @@ RsDoWordIoDescriptor (
-     UINT8                   *OptionalFields;
-     UINT16                  StringLength = 0;
-     UINT32                  OptionIndex = 0;
-+    UINT16                  ResourceLength = 0;
-+    UINT16                  Minimum = 0;
-+    UINT16                  Maximum = 0;
-+    UINT16                  AddressLength = 0;
-+    UINT16                  Granularity = 0;
-+    UINT16                  TranslationOffset = 0;
-     UINT32                  CurrentByteOffset;
-     UINT32                  i;
-     BOOLEAN                 ResSourceIndex = FALSE;
-@@ -102,8 +108,7 @@ RsDoWordIoDescriptor (
-      * optional fields present
-      */
-     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS16);
--    Descriptor->Address16.ResourceLength = (UINT16)
--        (sizeof (AML_RESOURCE_ADDRESS16) -
-+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS16) -
-          sizeof (AML_RESOURCE_LARGE_HEADER));
-     /* Process all child initialization nodes */
-@@ -147,7 +152,7 @@ RsDoWordIoDescriptor (
-         case 5: /* Address Granularity */
--            Descriptor->Address16.Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
-+            Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
-             GranOp = InitializerOp;
-@@ -155,7 +160,7 @@ RsDoWordIoDescriptor (
-         case 6: /* Address Min */
--            Descriptor->Address16.Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
-+            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
-             MinOp = InitializerOp;
-@@ -163,7 +168,7 @@ RsDoWordIoDescriptor (
-         case 7: /* Address Max */
--            Descriptor->Address16.Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
-+            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
-             MaxOp = InitializerOp;
-@@ -171,14 +176,14 @@ RsDoWordIoDescriptor (
-         case 8: /* Translation Offset */
--            Descriptor->Address16.TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
-+            TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
-             break;
-         case 9: /* Address Length */
--            Descriptor->Address16.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
-+            AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
-                  CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
-             LengthOp = InitializerOp;
-@@ -190,7 +195,7 @@ RsDoWordIoDescriptor (
-             {
-                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
-                 OptionIndex++;
--                Descriptor->Address16.ResourceLength++;
-+                ResourceLength++;
-                 ResSourceIndex = TRUE;
-             }
-             break;
-@@ -202,8 +207,7 @@ RsDoWordIoDescriptor (
-             {
-                 if (StringLength)
-                 {
--                    Descriptor->Address16.ResourceLength = (UINT16)
--                        (Descriptor->Address16.ResourceLength + StringLength);
-+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
-                     strcpy ((char *)
-                         &OptionalFields[OptionIndex],
-@@ -263,13 +267,20 @@ 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,
-+        Minimum,
-+        Maximum,
-+        AddressLength,
-+        Granularity,
-         Descriptor->Address16.Flags,
-         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.ResourceLength, &ResourceLength);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Minimum, &Minimum);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Maximum, &Maximum);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.AddressLength, &AddressLength);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Granularity, &Granularity);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.TranslationOffset, &TranslationOffset);
-+
-     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
-         OptionIndex + StringLength;
-     return (Rnode);
-@@ -302,6 +313,12 @@ RsDoWordBusNumberDescriptor (
-     UINT8                   *OptionalFields;
-     UINT16                  StringLength = 0;
-     UINT32                  OptionIndex = 0;
-+    UINT16                  ResourceLength = 0;
-+    UINT16                  Minimum = 0;
-+    UINT16                  Maximum = 0;
-+    UINT16                  AddressLength = 0;
-+    UINT16                  Granularity = 0;
-+    UINT16                  TranslationOffset = 0;
-     UINT32                  CurrentByteOffset;
-     UINT32                  i;
-     BOOLEAN                 ResSourceIndex = FALSE;
-@@ -323,8 +340,7 @@ RsDoWordBusNumberDescriptor (
-      * optional fields present
-      */
-     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS16);
--    Descriptor->Address16.ResourceLength = (UINT16)
--        (sizeof (AML_RESOURCE_ADDRESS16) -
-+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS16) -
-          sizeof (AML_RESOURCE_LARGE_HEADER));
-     /* Process all child initialization nodes */
-@@ -361,8 +377,7 @@ RsDoWordBusNumberDescriptor (
-         case 4: /* Address Granularity */
--            Descriptor->Address16.Granularity =
--                (UINT16) InitializerOp->Asl.Value.Integer;
-+            Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
-             GranOp = InitializerOp;
-@@ -370,8 +385,7 @@ RsDoWordBusNumberDescriptor (
-         case 5: /* Min Address */
--            Descriptor->Address16.Minimum =
--                (UINT16) InitializerOp->Asl.Value.Integer;
-+            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
-             MinOp = InitializerOp;
-@@ -379,8 +393,7 @@ RsDoWordBusNumberDescriptor (
-         case 6: /* Max Address */
--            Descriptor->Address16.Maximum =
--                (UINT16) InitializerOp->Asl.Value.Integer;
-+            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
-             MaxOp = InitializerOp;
-@@ -388,16 +401,14 @@ RsDoWordBusNumberDescriptor (
-         case 7: /* Translation Offset */
--            Descriptor->Address16.TranslationOffset =
--                (UINT16) InitializerOp->Asl.Value.Integer;
-+            TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
-             break;
-         case 8: /* Address Length */
--            Descriptor->Address16.AddressLength =
--                (UINT16) InitializerOp->Asl.Value.Integer;
-+            AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
-                  CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
-             LengthOp = InitializerOp;
-@@ -409,7 +420,7 @@ RsDoWordBusNumberDescriptor (
-             {
-                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
-                 OptionIndex++;
--                Descriptor->Address16.ResourceLength++;
-+                ResourceLength++;
-                 ResSourceIndex = TRUE;
-             }
-             break;
-@@ -421,8 +432,7 @@ RsDoWordBusNumberDescriptor (
-             {
-                 if (StringLength)
-                 {
--                    Descriptor->Address16.ResourceLength = (UINT16)
--                        (Descriptor->Address16.ResourceLength + StringLength);
-+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
-                     strcpy ((char *)
-                         &OptionalFields[OptionIndex],
-@@ -468,13 +478,20 @@ 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,
-+        Minimum,
-+        Maximum,
-+        AddressLength,
-+        Granularity,
-         Descriptor->Address16.Flags,
-         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.ResourceLength, &ResourceLength);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Minimum, &Minimum);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Maximum, &Maximum);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.AddressLength, &AddressLength);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Granularity, &Granularity);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.TranslationOffset, &TranslationOffset);
-+
-     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
-         OptionIndex + StringLength;
-     return (Rnode);
-@@ -507,6 +524,12 @@ RsDoWordSpaceDescriptor (
-     UINT8                   *OptionalFields;
-     UINT16                  StringLength = 0;
-     UINT32                  OptionIndex = 0;
-+    UINT16                  Minimum = 0;
-+    UINT16                  Maximum = 0;
-+    UINT16                  AddressLength = 0;
-+    UINT16                  Granularity = 0;
-+    UINT16                  TranslationOffset = 0;
-+    UINT16                  ResourceLength = 0;
-     UINT32                  CurrentByteOffset;
-     UINT32                  i;
-     BOOLEAN                 ResSourceIndex = FALSE;
-@@ -527,8 +550,7 @@ RsDoWordSpaceDescriptor (
-      * optional fields present
-      */
-     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS16);
--    Descriptor->Address16.ResourceLength = (UINT16)
--        (sizeof (AML_RESOURCE_ADDRESS16) -
-+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS16) -
-          sizeof (AML_RESOURCE_LARGE_HEADER));
-     /* Process all child initialization nodes */
-@@ -577,8 +599,7 @@ RsDoWordSpaceDescriptor (
-         case 6: /* Address Granularity */
--            Descriptor->Address16.Granularity =
--                (UINT16) InitializerOp->Asl.Value.Integer;
-+            Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
-             GranOp = InitializerOp;
-@@ -586,8 +607,7 @@ RsDoWordSpaceDescriptor (
-         case 7: /* Min Address */
--            Descriptor->Address16.Minimum =
--                (UINT16) InitializerOp->Asl.Value.Integer;
-+            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
-             MinOp = InitializerOp;
-@@ -595,8 +615,7 @@ RsDoWordSpaceDescriptor (
-         case 8: /* Max Address */
--            Descriptor->Address16.Maximum =
--                (UINT16) InitializerOp->Asl.Value.Integer;
-+            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
-             MaxOp = InitializerOp;
-@@ -604,16 +623,14 @@ RsDoWordSpaceDescriptor (
-         case 9: /* Translation Offset */
--            Descriptor->Address16.TranslationOffset =
--                (UINT16) InitializerOp->Asl.Value.Integer;
-+            TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
-             break;
-         case 10: /* Address Length */
--            Descriptor->Address16.AddressLength =
--                (UINT16) InitializerOp->Asl.Value.Integer;
-+            AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
-             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
-                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
-             LengthOp = InitializerOp;
-@@ -625,7 +642,7 @@ RsDoWordSpaceDescriptor (
-             {
-                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
-                 OptionIndex++;
--                Descriptor->Address16.ResourceLength++;
-+                ResourceLength++;
-                 ResSourceIndex = TRUE;
-             }
-             break;
-@@ -637,8 +654,7 @@ RsDoWordSpaceDescriptor (
-             {
-                 if (StringLength)
-                 {
--                    Descriptor->Address16.ResourceLength = (UINT16)
--                        (Descriptor->Address16.ResourceLength + StringLength);
-+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
-                     strcpy ((char *)
-                         &OptionalFields[OptionIndex],
-@@ -684,13 +700,20 @@ 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,
-+        Minimum,
-+        Maximum,
-+        AddressLength,
-+        Granularity,
-         Descriptor->Address16.Flags,
-         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.ResourceLength, &ResourceLength);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Minimum, &Minimum);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Maximum, &Maximum);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.AddressLength, &AddressLength);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Granularity, &Granularity);
-+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.TranslationOffset, &TranslationOffset);
-+
-     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
-         OptionIndex + StringLength;
-     return (Rnode);
-Index: acpica-unix-20209326/source/include/acmacros.h
-===================================================================
---- acpica-unix-20209326.orig/source/include/acmacros.h
-+++ acpica-unix-20209326/source/include/acmacros.h
-@@ -98,9 +98,12 @@
-                                            ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\
-                                            ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];}
--/* 32-bit source, 16/32/64 destination */
-+/* 32-bit source, 8/16/32/64 destination */
--#define ACPI_MOVE_32_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
-+#define ACPI_MOVE_32_TO_8(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];}
-+
-+#define ACPI_MOVE_32_TO_16(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];\
-+                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[2];}
- #define ACPI_MOVE_32_TO_32(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];\
-                                          ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[2];\
-@@ -113,11 +116,17 @@
-                                            ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\
-                                            ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];}
--/* 64-bit source, 16/32/64 destination */
-+/* 64-bit source, 8/16/32/64 destination */
--#define ACPI_MOVE_64_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
-+#define ACPI_MOVE_64_TO_8(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];}
--#define ACPI_MOVE_64_TO_32(d, s)        ACPI_MOVE_32_TO_32(d, s)    /* Truncate to 32 */
-+#define ACPI_MOVE_64_TO_16(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\
-+                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];}
-+
-+#define ACPI_MOVE_64_TO_32(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\
-+                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];\
-+                                         ((  UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[5];\
-+                                         ((  UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[4];}
- #define ACPI_MOVE_64_TO_64(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\
-                                          ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];\
-@@ -136,20 +145,26 @@
- /* The hardware supports unaligned transfers, just do the little-endian move */
--/* 16-bit source, 16/32/64 destination */
-+/* 16-bit source, 8/16/32/64 destination */
-+#define ACPI_MOVE_16_TO_8(d, s)         *(UINT8 *)(void *)(d) = *(UINT16 *)(void *)(s)
- #define ACPI_MOVE_16_TO_16(d, s)        *(UINT16 *)(void *)(d) = *(UINT16 *)(void *)(s)
- #define ACPI_MOVE_16_TO_32(d, s)        *(UINT32 *)(void *)(d) = *(UINT16 *)(void *)(s)
- #define ACPI_MOVE_16_TO_64(d, s)        *(UINT64 *)(void *)(d) = *(UINT16 *)(void *)(s)
--/* 32-bit source, 16/32/64 destination */
-+/* 32-bit source, 8/16/32/64 destination */
-+
-+#define ACPI_MOVE_32_TO_8(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];}
-+
-+#define ACPI_MOVE_32_TO_16(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\
-+                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];}
--#define ACPI_MOVE_32_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
- #define ACPI_MOVE_32_TO_32(d, s)        *(UINT32 *)(void *)(d) = *(UINT32 *)(void *)(s)
- #define ACPI_MOVE_32_TO_64(d, s)        *(UINT64 *)(void *)(d) = *(UINT32 *)(void *)(s)
--/* 64-bit source, 16/32/64 destination */
-+/* 64-bit source, 8/16/32/64 destination */
-+#define ACPI_MOVE_64_TO_8(d, s)         ACPI_MOVE_16_TO_8(d, s)    /* Truncate to 8 */
- #define ACPI_MOVE_64_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
- #define ACPI_MOVE_64_TO_32(d, s)        ACPI_MOVE_32_TO_32(d, s)    /* Truncate to 32 */
- #define ACPI_MOVE_64_TO_64(d, s)        *(UINT64 *)(void *)(d) = *(UINT64 *)(void *)(s)
-@@ -169,7 +184,9 @@
- #define ACPI_MOVE_16_TO_32(d, s)        {(*(UINT32 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);}
- #define ACPI_MOVE_16_TO_64(d, s)        {(*(UINT64 *)(void *)(d)) = 0; ACPI_MOVE_16_TO_16(d, s);}
--/* 32-bit source, 16/32/64 destination */
-+/* 32-bit source, 8/16/32/64 destination */
-+
-+#define ACPI_MOVE_32_TO_8(d, s)         ACPI_MOVE_16_TO_8(d, s)    /* Truncate to 8 */
- #define ACPI_MOVE_32_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
-Index: acpica-unix-20209326/source/include/platform/aclinux.h
-===================================================================
---- acpica-unix-20209326.orig/source/include/platform/aclinux.h
-+++ acpica-unix-20209326/source/include/platform/aclinux.h
-@@ -198,6 +198,7 @@
- #ifdef ACPI_USE_STANDARD_HEADERS
- #include <unistd.h>
-+#include <endian.h>
- #endif
- /* Define/disable kernel-specific declarators */
-@@ -232,6 +233,10 @@
- #define __cdecl
- #endif
-+#if defined(__PPC64__) || defined(__s390x__)
-+#define ACPI_BIG_ENDIAN
-+#endif
-+
- #endif /* __KERNEL__ */
- #endif /* __ACLINUX_H__ */
-Index: acpica-unix-20209326/source/compiler/aslanalyze.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/aslanalyze.c
-+++ acpica-unix-20209326/source/compiler/aslanalyze.c
-@@ -469,7 +469,7 @@ ApCheckForGpeNameConflict (
-     /* Need a null-terminated string version of NameSeg */
--    ACPI_MOVE_32_TO_32 (Name, Op->Asl.NameSeg);
-+    ACPI_COPY_NAMESEG (Name, Op->Asl.NameSeg);
-     Name[ACPI_NAMESEG_SIZE] = 0;
-     /*
-@@ -496,7 +496,7 @@ ApCheckForGpeNameConflict (
-      * We are now sure we have an _Lxx or _Exx.
-      * Create the target name that would cause collision (Flip E/L)
-      */
--    ACPI_MOVE_32_TO_32 (Target, Name);
-+    ACPI_COPY_NAMESEG (Target, Name);
-     /* Inject opposite letter ("L" versus "E") */
-Index: acpica-unix-20209326/source/compiler/asllookup.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/asllookup.c
-+++ acpica-unix-20209326/source/compiler/asllookup.c
-@@ -119,6 +119,7 @@ LkIsObjectUsed (
- {
-     ACPI_NAMESPACE_NODE     *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle);
-     ACPI_NAMESPACE_NODE     *Next;
-+    ACPI_NAME_UNION         tmp, tmp2;
-     ASL_METHOD_LOCAL        *MethodLocals;
-     ASL_METHOD_LOCAL        *MethodArgs;
-     UINT32                  i;
-@@ -175,7 +176,8 @@ LkIsObjectUsed (
-                  * We ignore the predefined methods since often, not
-                  * all arguments are needed or used.
-                  */
--                if ((Node->Name.Ascii[0] != '_') &&
-+                ACPI_MOVE_32_TO_32(&tmp.Ascii, Node->Name.Ascii);
-+                if ((tmp.Ascii[0] != '_') &&
-                     (!(MethodArgs[i].Flags & ASL_ARG_REFERENCED)))
-                 {
-                     sprintf (AslGbl_MsgBuffer, "Arg%u", i);
-@@ -228,8 +230,10 @@ LkIsObjectUsed (
-              * Issue a remark even if it is a reserved name (starts
-              * with an underscore).
-              */
-+            ACPI_MOVE_32_TO_32(&tmp.Ascii, Node->Name.Ascii);
-+            ACPI_MOVE_32_TO_32(&tmp2.Ascii, Next->Name.Ascii);
-             sprintf (AslGbl_MsgBuffer, "Name [%4.4s] is within a method [%4.4s]",
--                Node->Name.Ascii, Next->Name.Ascii);
-+                tmp.Ascii, tmp2.Ascii);
-             AslError (ASL_REMARK, ASL_MSG_NOT_REFERENCED,
-                 LkGetNameOp (Node->Op), AslGbl_MsgBuffer);
-             return (AE_OK);
-Index: acpica-unix-20209326/source/compiler/aslmain.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/aslmain.c
-+++ acpica-unix-20209326/source/compiler/aslmain.c
-@@ -101,18 +101,6 @@ main (
-     signal (SIGINT, AslSignalHandler);
--    /*
--     * Big-endian machines are not currently supported. ACPI tables must
--     * be little-endian, and support for big-endian machines needs to
--     * be implemented.
--     */
--    if (UtIsBigEndianMachine ())
--    {
--        fprintf (stderr,
--            "iASL is not currently supported on big-endian machines.\n");
--        return (-1);
--    }
--
-     AcpiOsInitialize ();
-     ACPI_DEBUG_INITIALIZE (); /* For debug version only */
-Index: acpica-unix-20209326/source/common/acfileio.c
-===================================================================
---- acpica-unix-20209326.orig/source/common/acfileio.c
-+++ acpica-unix-20209326/source/common/acfileio.c
-@@ -280,6 +280,7 @@ AcGetOneTableFromFile (
-     ACPI_TABLE_HEADER       *Table;
-     INT32                   Count;
-     long                    TableOffset;
-+    UINT32                TableLen;
-     *ReturnTable = NULL;
-@@ -319,7 +320,8 @@ AcGetOneTableFromFile (
-     /* Allocate a buffer for the entire table */
--    Table = AcpiOsAllocate ((ACPI_SIZE) TableHeader.Length);
-+    ACPI_MOVE_32_TO_32(&TableLen, &TableHeader.Length);
-+    Table = AcpiOsAllocate ((ACPI_SIZE) TableLen);
-     if (!Table)
-     {
-         return (AE_NO_MEMORY);
-@@ -329,13 +331,13 @@ AcGetOneTableFromFile (
-     fseek (File, TableOffset, SEEK_SET);
--    Count = fread (Table, 1, TableHeader.Length, File);
-+    Count = fread (Table, 1, TableLen, File);
-     /*
-      * Checks for data table headers happen later in the execution. Only verify
-      * for Aml tables at this point in the code.
-      */
--    if (GetOnlyAmlTables && Count != (INT32) TableHeader.Length)
-+    if (GetOnlyAmlTables && Count != TableLen)
-     {
-         Status = AE_ERROR;
-         goto ErrorExit;
-@@ -343,7 +345,7 @@ AcGetOneTableFromFile (
-     /* Validate the checksum (just issue a warning) */
--    Status = AcpiTbVerifyChecksum (Table, TableHeader.Length);
-+    Status = AcpiTbVerifyChecksum (Table, TableLen);
-     if (ACPI_FAILURE (Status))
-     {
-         Status = AcCheckTextModeCorruption (Table);
-@@ -435,6 +437,7 @@ AcValidateTableHeader (
-     ACPI_SIZE               Actual;
-     long                    OriginalOffset;
-     UINT32                  FileSize;
-+    UINT32                  TableLength;
-     UINT32                  i;
-@@ -464,11 +467,12 @@ AcValidateTableHeader (
-     /* Validate table length against bytes remaining in the file */
-     FileSize = CmGetFileSize (File);
--    if (TableHeader.Length > (UINT32) (FileSize - TableOffset))
-+    ACPI_MOVE_32_TO_32(&TableLength, &TableHeader.Length);
-+    if (TableLength > (UINT32) (FileSize - TableOffset))
-     {
-         fprintf (stderr, "Table [%4.4s] is too long for file - "
-             "needs: 0x%.2X, remaining in file: 0x%.2X\n",
--            TableHeader.Signature, TableHeader.Length,
-+            TableHeader.Signature, TableLength,
-             (UINT32) (FileSize - TableOffset));
-         return (AE_BAD_HEADER);
-     }
-Index: acpica-unix-20209326/source/common/dmtable.c
-===================================================================
---- acpica-unix-20209326.orig/source/common/dmtable.c
-+++ acpica-unix-20209326/source/common/dmtable.c
-@@ -551,7 +551,7 @@ AcpiDmDumpDataTable (
-      */
-     if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_FACS))
-     {
--        Length = Table->Length;
-+        ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-         Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFacs);
-         if (ACPI_FAILURE (Status))
-         {
-@@ -565,13 +565,14 @@ AcpiDmDumpDataTable (
-     else if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_S3PT))
-     {
-         Length = AcpiDmDumpS3pt (Table);
-+        ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     }
-     else
-     {
-         /*
-          * All other tables must use the common ACPI table header, dump it now
-          */
--        Length = Table->Length;
-+        ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-         Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHeader);
-         if (ACPI_FAILURE (Status))
-         {
-@@ -782,6 +783,7 @@ AcpiDmDumpTable (
-     BOOLEAN                 LastOutputBlankLine = FALSE;
-     ACPI_STATUS             Status;
-     char                    RepairedName[8];
-+    UINT16                Val16;
-     if (!Info)
-@@ -1178,8 +1180,9 @@ AcpiDmDumpTable (
-             /* Checksum, display and validate */
-             AcpiOsPrintf ("%2.2X", *Target);
--            Temp8 = AcpiDmGenerateChecksum (Table,
--                ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length,
-+          ACPI_MOVE_32_TO_32(&Temp32,
-+                      &ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length);
-+            Temp8 = AcpiDmGenerateChecksum (Table, Temp32,
-                 ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum);
-             if (Temp8 != ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum)
-@@ -1244,14 +1247,14 @@ AcpiDmDumpTable (
-             /* DMAR subtable types */
--            Temp16 = ACPI_GET16 (Target);
-+            Val16 = ACPI_GET16 (Target);
-+          ACPI_MOVE_16_TO_16(&Temp16, &Val16);
-             if (Temp16 > ACPI_DMAR_TYPE_RESERVED)
-             {
-                 Temp16 = ACPI_DMAR_TYPE_RESERVED;
-             }
--            AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
--                AcpiDmDmarSubnames[Temp16]);
-+            AcpiOsPrintf (UINT16_FORMAT, Temp16, AcpiDmDmarSubnames[Temp16]);
-             break;
-         case ACPI_DMT_DMAR_SCOPE:
-@@ -1342,14 +1345,14 @@ AcpiDmDumpTable (
-             /* HEST subtable types */
--            Temp16 = ACPI_GET16 (Target);
-+            Val16 = ACPI_GET16 (Target);
-+          ACPI_MOVE_16_TO_16(&Temp16, &Val16);
-             if (Temp16 > ACPI_HEST_TYPE_RESERVED)
-             {
-                 Temp16 = ACPI_HEST_TYPE_RESERVED;
-             }
--            AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
--                AcpiDmHestSubnames[Temp16]);
-+            AcpiOsPrintf (UINT16_FORMAT, Temp16, AcpiDmHestSubnames[Temp16]);
-             break;
-         case ACPI_DMT_HESTNTFY:
-@@ -1429,13 +1432,14 @@ AcpiDmDumpTable (
-             /* NFIT subtable types */
--            Temp16 = ACPI_GET16 (Target);
-+            Val16 = ACPI_GET16 (Target);
-+            ACPI_MOVE_16_TO_16(&Temp16, &Val16);
-             if (Temp16 > ACPI_NFIT_TYPE_RESERVED)
-             {
-                 Temp16 = ACPI_NFIT_TYPE_RESERVED;
-             }
--            AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
-+            AcpiOsPrintf (UINT16_FORMAT, Temp16,
-                 AcpiDmNfitSubnames[Temp16]);
-             break;
-Index: acpica-unix-20209326/source/common/dmtables.c
-===================================================================
---- acpica-unix-20209326.orig/source/common/dmtables.c
-+++ acpica-unix-20209326/source/common/dmtables.c
-@@ -142,7 +142,9 @@ AdCreateTableHeader (
-     ACPI_TABLE_HEADER       *Table)
- {
-     UINT8                   Checksum;
--
-+    UINT32                TableLen;
-+    UINT32                OemRev;
-+    UINT32                CompilerRev;
-     /* Reset globals for External statements */
-@@ -154,9 +156,10 @@ AdCreateTableHeader (
-      */
-     AdDisassemblerHeader (Filename, ACPI_IS_AML_TABLE);
-+    ACPI_MOVE_32_TO_32(&TableLen, &Table->Length);
-     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", TableLen, TableLen);
-     /* Print and validate the revision */
-@@ -188,7 +191,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), TableLen);
-     if (Checksum)
-     {
-         AcpiOsPrintf (" **** Incorrect checksum, should be 0x%2.2X",
-@@ -198,9 +201,11 @@ 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);
-+    ACPI_MOVE_32_TO_32(&OemRev, &Table->OemRevision);
-+    AcpiOsPrintf (" *     OEM Revision     0x%8.8X (%u)\n", OemRev, OemRev);
-     AcpiOsPrintf (" *     Compiler ID      \"%.4s\"\n",     Table->AslCompilerId);
--    AcpiOsPrintf (" *     Compiler Version 0x%8.8X (%u)\n", Table->AslCompilerRevision, Table->AslCompilerRevision);
-+    ACPI_MOVE_32_TO_32(&CompilerRev, &Table->AslCompilerRevision);
-+    AcpiOsPrintf (" *     Compiler Version 0x%8.8X (%u)\n", CompilerRev, CompilerRev);
-     AcpiOsPrintf (" */\n");
-     /*
-@@ -221,7 +226,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, OemRev);
- }
-@@ -396,7 +401,8 @@ AdParseTable (
-     fprintf (stderr, "Pass 1 parse of [%4.4s]\n", (char *) Table->Signature);
--    AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
-+    ACPI_MOVE_32_TO_32(&AmlLength, &Table->Length);
-+    AmlLength -= sizeof (ACPI_TABLE_HEADER);
-     AmlStart = ((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER));
-     AcpiUtSetIntegerWidth (Table->Revision);
-Index: acpica-unix-20209326/source/compiler/dtfield.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/dtfield.c
-+++ acpica-unix-20209326/source/compiler/dtfield.c
-@@ -361,7 +361,27 @@ DtCompileInteger (
-         DtError (ASL_ERROR, ASL_MSG_INTEGER_SIZE, Field, AslGbl_MsgBuffer);
-     }
--    memcpy (Buffer, &Value, ByteLength);
-+    switch (ByteLength) {
-+    case 1:
-+      ACPI_MOVE_64_TO_8(Buffer, &Value);
-+      break;
-+
-+    case 2:
-+      ACPI_MOVE_64_TO_16(Buffer, &Value);
-+      break;
-+
-+    case 4:
-+      ACPI_MOVE_64_TO_32(Buffer, &Value);
-+      break;
-+
-+    case 8:
-+      ACPI_MOVE_64_TO_64(Buffer, &Value);
-+      break;
-+
-+    default:
-+      memcpy (Buffer, &Value, ByteLength);
-+      break;
-+    }
-     return;
- }
-Index: acpica-unix-20209326/source/compiler/dtsubtable.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/dtsubtable.c
-+++ acpica-unix-20209326/source/compiler/dtsubtable.c
-@@ -378,6 +378,21 @@ DtSetSubtableLength (
-         return;
-     }
--    memcpy (Subtable->LengthField, &Subtable->TotalLength,
--        Subtable->SizeOfLengthField);
-+    switch(Subtable->SizeOfLengthField) {
-+    case 1:
-+      ACPI_MOVE_32_TO_8(Subtable->LengthField, &Subtable->TotalLength);
-+      break;
-+
-+    case 2:
-+      ACPI_MOVE_32_TO_16(Subtable->LengthField, &Subtable->TotalLength);
-+      break;
-+
-+    case 4:
-+      ACPI_MOVE_32_TO_32(Subtable->LengthField, &Subtable->TotalLength);
-+      break;
-+
-+    default:
-+      memcpy (Subtable->LengthField, &Subtable->TotalLength,
-+              Subtable->SizeOfLengthField);
-+    }
- }
-Index: acpica-unix-20209326/source/compiler/dttable1.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/dttable1.c
-+++ acpica-unix-20209326/source/compiler/dttable1.c
-@@ -281,6 +281,8 @@ DtCompileCsrt (
-     DT_FIELD                **PFieldList = (DT_FIELD **) List;
-     UINT32                  DescriptorCount;
-     UINT32                  GroupLength;
-+    ACPI_CSRT_GROUP       *Pgrp;
-+    UINT32                Tmp32;
-     /* Subtables (Resource Groups) */
-@@ -299,12 +301,20 @@ DtCompileCsrt (
-         /* Compute the number of resource descriptors */
-+      /*
-         GroupLength =
-             (ACPI_CAST_PTR (ACPI_CSRT_GROUP,
-                 Subtable->Buffer))->Length -
-             (ACPI_CAST_PTR (ACPI_CSRT_GROUP,
-                 Subtable->Buffer))->SharedInfoLength -
-             sizeof (ACPI_CSRT_GROUP);
-+      */
-+      Pgrp = ACPI_CAST_PTR(ACPI_CSRT_GROUP, Subtable->Buffer);
-+      ACPI_MOVE_32_TO_32(&Tmp32, &Pgrp->Length);
-+      GroupLength = Tmp32;
-+      ACPI_MOVE_32_TO_32(&Tmp32, &Pgrp->SharedInfoLength);
-+      GroupLength -= Tmp32;
-+        GroupLength -= sizeof (ACPI_CSRT_GROUP);
-         DescriptorCount = (GroupLength  /
-             sizeof (ACPI_CSRT_DESCRIPTOR));
-@@ -392,6 +402,8 @@ DtCompileDbg2 (
-     ACPI_DBG2_DEVICE        *DeviceInfo;
-     UINT16                  CurrentOffset;
-     UINT32                  i;
-+    UINT16                  Tmp16;
-+    UINT32                  Tmp32;
-     /* Main table */
-@@ -408,10 +420,11 @@ DtCompileDbg2 (
-     /* Main table fields */
-     Dbg2Header = ACPI_CAST_PTR (ACPI_DBG2_HEADER, Subtable->Buffer);
--    Dbg2Header->InfoOffset = sizeof (ACPI_TABLE_HEADER) + ACPI_PTR_DIFF (
-+    Tmp32 = sizeof (ACPI_TABLE_HEADER) + ACPI_PTR_DIFF (
-         ACPI_ADD_PTR (UINT8, Dbg2Header, sizeof (ACPI_DBG2_HEADER)), Dbg2Header);
-+    ACPI_MOVE_32_TO_32(&Dbg2Header->InfoOffset, &Tmp32);
--    SubtableCount = Dbg2Header->InfoCount;
-+    ACPI_MOVE_32_TO_32(&SubtableCount, &Dbg2Header->InfoCount);
-     DtPushSubtable (Subtable);
-     /* Process all Device Information subtables (Count = InfoCount) */
-@@ -438,7 +451,7 @@ DtCompileDbg2 (
-         /* BaseAddressRegister GAS array (Required, size is RegisterCount) */
--        DeviceInfo->BaseAddressOffset = CurrentOffset;
-+        ACPI_MOVE_16_TO_16(&DeviceInfo->BaseAddressOffset, &CurrentOffset);
-         for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++)
-         {
-             Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Addr,
-@@ -454,7 +467,7 @@ DtCompileDbg2 (
-         /* AddressSize array (Required, size = RegisterCount) */
--        DeviceInfo->AddressSizeOffset = CurrentOffset;
-+        ACPI_MOVE_16_TO_16(&DeviceInfo->AddressSizeOffset, &CurrentOffset);
-         for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++)
-         {
-             Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Size,
-@@ -470,7 +483,7 @@ DtCompileDbg2 (
-         /* NamespaceString device identifier (Required, size = NamePathLength) */
--        DeviceInfo->NamepathOffset = CurrentOffset;
-+        ACPI_MOVE_16_TO_16(&DeviceInfo->NamepathOffset, &CurrentOffset);
-         Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Name,
-             &Subtable);
-         if (ACPI_FAILURE (Status))
-@@ -480,8 +493,9 @@ DtCompileDbg2 (
-         /* Update the device info header */
--        DeviceInfo->NamepathLength = (UINT16) Subtable->Length;
--        CurrentOffset += (UINT16) DeviceInfo->NamepathLength;
-+        ACPI_MOVE_32_TO_16(&DeviceInfo->NamepathLength, &Subtable->Length);
-+        ACPI_MOVE_16_TO_16(&Tmp16, &DeviceInfo->NamepathLength);
-+        CurrentOffset += Tmp16;
-         DtInsertSubtable (ParentTable, Subtable);
-         /* OemData - Variable-length data (Optional, size = OemDataLength) */
-@@ -508,8 +522,8 @@ DtCompileDbg2 (
-         if (Subtable && Subtable->Length)
-         {
--            DeviceInfo->OemDataOffset = CurrentOffset;
--            DeviceInfo->OemDataLength = (UINT16) Subtable->Length;
-+            ACPI_MOVE_16_TO_16(&DeviceInfo->OemDataOffset, &CurrentOffset);
-+            ACPI_MOVE_32_TO_16(&DeviceInfo->OemDataLength, &Subtable->Length);
-             DtInsertSubtable (ParentTable, Subtable);
-         }
-@@ -549,6 +563,8 @@ DtCompileDmar (
-     ACPI_DMAR_DEVICE_SCOPE  *DmarDeviceScope;
-     UINT32                  DeviceScopeLength;
-     UINT32                  PciPathLength;
-+    UINT16                Tmp16;
-+    UINT16                HdrType;
-     Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmar, &Subtable);
-@@ -578,8 +594,11 @@ DtCompileDmar (
-         DtPushSubtable (Subtable);
-         DmarHeader = ACPI_CAST_PTR (ACPI_DMAR_HEADER, Subtable->Buffer);
-+      ACPI_MOVE_16_TO_16(&Tmp16, &DmarHeader->Length);
-+      DmarHeader->Length = Tmp16;
--        switch (DmarHeader->Type)
-+      ACPI_MOVE_16_TO_16(&HdrType, &DmarHeader->Type);
-+        switch (HdrType)
-         {
-         case ACPI_DMAR_TYPE_HARDWARE_UNIT:
-@@ -626,8 +645,8 @@ DtCompileDmar (
-         /*
-          * Optional Device Scope subtables
-          */
--        if ((DmarHeader->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
--            (DmarHeader->Type == ACPI_DMAR_TYPE_NAMESPACE))
-+        if ((HdrType == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
-+            (HdrType == ACPI_DMAR_TYPE_NAMESPACE))
-         {
-             /* These types do not support device scopes */
-@@ -637,7 +656,7 @@ DtCompileDmar (
-         DtPushSubtable (Subtable);
-         DeviceScopeLength = DmarHeader->Length - Subtable->Length -
--            ParentTable->Length;
-+              ParentTable->Length;
-         while (DeviceScopeLength)
-         {
-             Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarScope,
-@@ -762,7 +781,7 @@ DtCompileDrtm (
-         Count++;
-     }
--    DrtmVtl->ValidatedTableCount = Count;
-+    ACPI_MOVE_32_TO_32(&DrtmVtl->ValidatedTableCount, &Count);
-     DtPopSubtable ();
-     ParentTable = DtPeekSubtable ();
-@@ -800,7 +819,7 @@ DtCompileDrtm (
-         Count++;
-     }
--    DrtmRl->ResourceCount = Count;
-+    ACPI_MOVE_32_TO_32(&DrtmRl->ResourceCount, &Count);
-     DtPopSubtable ();
-     ParentTable = DtPeekSubtable ();
-@@ -895,6 +914,7 @@ DtCompileGtdt (
-     ACPI_DMTABLE_INFO       *InfoTable;
-     UINT32                  GtCount;
-     ACPI_TABLE_HEADER       *Header;
-+    ACPI_GTDT_TIMER_BLOCK   *TimerBlock;
-     ParentTable = DtPeekSubtable ();
-@@ -982,8 +1002,9 @@ DtCompileGtdt (
-             DtPushSubtable (Subtable);
-             ParentTable = DtPeekSubtable ();
--            GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
--                Subtable->Buffer - sizeof(ACPI_GTDT_HEADER)))->TimerCount;
-+          TimerBlock = ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
-+                Subtable->Buffer - sizeof(ACPI_GTDT_HEADER));
-+          ACPI_MOVE_32_TO_32(&GtCount, &TimerBlock->TimerCount);
-             while (GtCount)
-             {
-@@ -1036,6 +1057,7 @@ DtCompileFpdt (
-     ACPI_DMTABLE_INFO       *InfoTable;
-     DT_FIELD                **PFieldList = (DT_FIELD **) List;
-     DT_FIELD                *SubtableStart;
-+    UINT16                HdrType;
-     while (*PFieldList)
-@@ -1054,7 +1076,8 @@ DtCompileFpdt (
-         FpdtHeader = ACPI_CAST_PTR (ACPI_FPDT_HEADER, Subtable->Buffer);
--        switch (FpdtHeader->Type)
-+      ACPI_MOVE_16_TO_16(&HdrType, &FpdtHeader->Type);
-+        switch (HdrType)
-         {
-         case ACPI_FPDT_TYPE_BOOT:
-@@ -1112,6 +1135,7 @@ DtCompileHest (
-     ACPI_DMTABLE_INFO       *InfoTable;
-     UINT16                  Type;
-     UINT32                  BankCount;
-+    UINT16                Tmp16;
-     Status = DtCompileTable (PFieldList, AcpiDmTableInfoHest,
-@@ -1129,8 +1153,9 @@ DtCompileHest (
-         /* Get subtable type */
-         SubtableStart = *PFieldList;
--        DtCompileInteger ((UINT8 *) &Type, *PFieldList, 2, 0);
-+        DtCompileInteger ((UINT8 *) &Tmp16, *PFieldList, 2, 0);
-+      ACPI_MOVE_16_TO_16(&Type, &Tmp16);
-         switch (Type)
-         {
-         case ACPI_HEST_TYPE_IA32_CHECK:
-@@ -1480,11 +1505,13 @@ DtCompileIort (
-     ACPI_IORT_SMMU          *IortSmmu;
-     UINT32                  NodeNumber;
-     UINT32                  NodeLength;
-+    UINT32                  NodeOffset;
-     UINT32                  IdMappingNumber;
-     UINT32                  ItsNumber;
-     UINT32                  ContextIrptNumber;
-     UINT32                  PmuIrptNumber;
-     UINT32                  PaddingLength;
-+    UINT32                  MappingOffset;
-     ParentTable = DtPeekSubtable ();
-@@ -1510,7 +1537,7 @@ DtCompileIort (
-      * Optionally allows the generic data types to be used for filling
-      * this field.
-      */
--    Iort->NodeOffset = sizeof (ACPI_TABLE_IORT);
-+    NodeOffset = sizeof (ACPI_TABLE_IORT);
-     Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortPad,
-         &Subtable);
-     if (ACPI_FAILURE (Status))
-@@ -1520,7 +1547,7 @@ DtCompileIort (
-     if (Subtable)
-     {
-         DtInsertSubtable (ParentTable, Subtable);
--        Iort->NodeOffset += Subtable->Length;
-+        NodeOffset += Subtable->Length;
-     }
-     else
-     {
-@@ -1530,8 +1557,9 @@ DtCompileIort (
-         {
-             return (Status);
-         }
--        Iort->NodeOffset += PaddingLength;
-+        NodeOffset += PaddingLength;
-     }
-+    ACPI_MOVE_32_TO_32(&Iort->NodeOffset, &NodeOffset);
-     NodeNumber = 0;
-     while (*PFieldList)
-@@ -1585,7 +1613,7 @@ DtCompileIort (
-                 ItsNumber++;
-             }
--            IortItsGroup->ItsCount = ItsNumber;
-+            ACPI_MOVE_32_TO_32(&IortItsGroup->ItsCount, &ItsNumber);
-             break;
-         case ACPI_IORT_NODE_NAMED_COMPONENT:
-@@ -1619,15 +1647,16 @@ DtCompileIort (
-             }
-             else
-             {
--                if (NodeLength > IortNode->MappingOffset)
-+              ACPI_MOVE_32_TO_32(&MappingOffset, &IortNode->MappingOffset);
-+                if (NodeLength > MappingOffset)
-                 {
-                     return (AE_BAD_DATA);
-                 }
--                if (NodeLength < IortNode->MappingOffset)
-+                if (NodeLength < MappingOffset)
-                 {
-                     Status = DtCompilePadding (
--                        IortNode->MappingOffset - NodeLength,
-+                        MappingOffset - NodeLength,
-                         &Subtable);
-                     if (ACPI_FAILURE (Status))
-                     {
-@@ -1635,7 +1664,8 @@ DtCompileIort (
-                     }
-                     DtInsertSubtable (ParentTable, Subtable);
--                    NodeLength = IortNode->MappingOffset;
-+                  ACPI_MOVE_32_TO_32(&MappingOffset, &IortNode->MappingOffset);
-+                    NodeLength = MappingOffset;
-                 }
-             }
-             break;
-@@ -1668,7 +1698,7 @@ DtCompileIort (
-             /* Compile global interrupt array */
--            IortSmmu->GlobalInterruptOffset = NodeLength;
-+            ACPI_MOVE_32_TO_32(&IortSmmu->GlobalInterruptOffset, &NodeLength);
-             Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3a,
-                 &Subtable);
-             if (ACPI_FAILURE (Status))
-@@ -1682,7 +1712,7 @@ DtCompileIort (
-             /* Compile context interrupt array */
-             ContextIrptNumber = 0;
--            IortSmmu->ContextInterruptOffset = NodeLength;
-+            ACPI_MOVE_32_TO_32(&IortSmmu->ContextInterruptOffset, &NodeLength);
-             while (*PFieldList)
-             {
-                 Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3b,
-@@ -1702,12 +1732,12 @@ DtCompileIort (
-                 ContextIrptNumber++;
-             }
--            IortSmmu->ContextInterruptCount = ContextIrptNumber;
-+            ACPI_MOVE_32_TO_32(&IortSmmu->ContextInterruptCount, &ContextIrptNumber);
-             /* Compile PMU interrupt array */
-             PmuIrptNumber = 0;
--            IortSmmu->PmuInterruptOffset = NodeLength;
-+            ACPI_MOVE_32_TO_32(&IortSmmu->PmuInterruptOffset, &NodeLength);
-             while (*PFieldList)
-             {
-                 Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3c,
-@@ -1727,7 +1757,7 @@ DtCompileIort (
-                 PmuIrptNumber++;
-             }
--            IortSmmu->PmuInterruptCount = PmuIrptNumber;
-+            ACPI_MOVE_32_TO_32(&IortSmmu->PmuInterruptCount, &PmuIrptNumber);
-             break;
-         case ACPI_IORT_NODE_SMMU_V3:
-@@ -1764,7 +1794,7 @@ DtCompileIort (
-         /* Compile Array of ID mappings */
--        IortNode->MappingOffset = NodeLength;
-+        ACPI_MOVE_32_TO_32(&IortNode->MappingOffset, &NodeLength);
-         IdMappingNumber = 0;
-         while (*PFieldList)
-         {
-@@ -1785,7 +1815,7 @@ DtCompileIort (
-             IdMappingNumber++;
-         }
--        IortNode->MappingCount = IdMappingNumber;
-+        ACPI_MOVE_32_TO_32(&IortNode->MappingCount, &IdMappingNumber);
-         if (!IdMappingNumber)
-         {
-             IortNode->MappingOffset = 0;
-@@ -1800,7 +1830,7 @@ DtCompileIort (
-         NodeNumber++;
-     }
--    Iort->NodeCount = NodeNumber;
-+    ACPI_MOVE_32_TO_32(&Iort->NodeCount, &NodeNumber);
-     return (AE_OK);
- }
-Index: acpica-unix-20209326/source/compiler/dttable2.c
-===================================================================
---- acpica-unix-20209326.orig/source/compiler/dttable2.c
-+++ acpica-unix-20209326/source/compiler/dttable2.c
-@@ -345,7 +345,7 @@ DtCompileMpst (
-     DtPushSubtable (Subtable);
-     MpstChannelInfo = ACPI_CAST_PTR (ACPI_MPST_CHANNEL, Subtable->Buffer);
--    SubtableCount = MpstChannelInfo->PowerNodeCount;
-+    ACPI_MOVE_16_TO_16(&SubtableCount, &MpstChannelInfo->PowerNodeCount);
-     while (*PFieldList && SubtableCount)
-     {
-@@ -363,8 +363,8 @@ DtCompileMpst (
-         DtPushSubtable (Subtable);
-         MpstPowerNode = ACPI_CAST_PTR (ACPI_MPST_POWER_NODE, Subtable->Buffer);
--        PowerStateCount = MpstPowerNode->NumPowerStates;
--        ComponentCount = MpstPowerNode->NumPhysicalComponents;
-+        ACPI_MOVE_32_TO_32(&PowerStateCount, &MpstPowerNode->NumPowerStates);
-+        ACPI_MOVE_32_TO_32(&ComponentCount, &MpstPowerNode->NumPhysicalComponents);
-         ParentTable = DtPeekSubtable ();
-@@ -517,6 +517,7 @@ DtCompileNfit (
-     UINT32                  Count;
-     ACPI_NFIT_INTERLEAVE    *Interleave = NULL;
-     ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL;
-+    UINT16                SubType;
-     /* Main table */
-@@ -550,7 +551,8 @@ DtCompileNfit (
-         NfitHeader = ACPI_CAST_PTR (ACPI_NFIT_HEADER, Subtable->Buffer);
--        switch (NfitHeader->Type)
-+      ACPI_MOVE_16_TO_16(&SubType, &NfitHeader->Type);
-+        switch (SubType)
-         {
-         case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
-@@ -610,7 +612,7 @@ DtCompileNfit (
-         DtInsertSubtable (ParentTable, Subtable);
-         DtPopSubtable ();
--        switch (NfitHeader->Type)
-+        switch (SubType)
-         {
-         case ACPI_NFIT_TYPE_INTERLEAVE:
-@@ -636,7 +638,7 @@ DtCompileNfit (
-                 Count++;
-             }
--            Interleave->LineCount = Count;
-+            ACPI_MOVE_32_TO_32(&Interleave->LineCount, &Count);
-             break;
-         case ACPI_NFIT_TYPE_SMBIOS:
-@@ -681,7 +683,7 @@ DtCompileNfit (
-                 Count++;
-             }
--            Hint->HintCount = (UINT16) Count;
-+            ACPI_MOVE_32_TO_16(&Hint->HintCount, &Count);
-             break;
-         default:
-@@ -957,7 +959,7 @@ DtCompilePmtt (
-             PmttController = ACPI_CAST_PTR (ACPI_PMTT_CONTROLLER,
-                 (Subtable->Buffer - sizeof (ACPI_PMTT_HEADER)));
--            DomainCount = PmttController->DomainCount;
-+            ACPI_MOVE_16_TO_16(&DomainCount, &PmttController->DomainCount);
-             while (DomainCount)
-             {
-@@ -1177,6 +1179,7 @@ DtCompileS3pt (
-     DT_SUBTABLE             *ParentTable;
-     ACPI_DMTABLE_INFO       *InfoTable;
-     DT_FIELD                *SubtableStart;
-+    UINT16                HdrType;
-     Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3pt,
-@@ -1204,7 +1207,8 @@ DtCompileS3pt (
-         S3ptHeader = ACPI_CAST_PTR (ACPI_FPDT_HEADER, Subtable->Buffer);
--        switch (S3ptHeader->Type)
-+      ACPI_MOVE_16_TO_16(&HdrType, &S3ptHeader->Type);
-+        switch (HdrType)
-         {
-         case ACPI_S3PT_TYPE_RESUME:
-@@ -1517,6 +1521,7 @@ DtCompileSlit (
-     UINT32                  Localities;
-     UINT32                  LocalityListLength;
-     UINT8                   *LocalityBuffer;
-+    UINT32                Tmp;
-     Status = DtCompileTable (PFieldList, AcpiDmTableInfoSlit,
-@@ -1529,7 +1534,8 @@ DtCompileSlit (
-     ParentTable = DtPeekSubtable ();
-     DtInsertSubtable (ParentTable, Subtable);
--    Localities = *ACPI_CAST_PTR (UINT32, Subtable->Buffer);
-+    Tmp = *ACPI_CAST_PTR (UINT32, Subtable->Buffer);
-+    ACPI_MOVE_32_TO_32(&Localities, &Tmp);
-     LocalityBuffer = UtLocalCalloc (Localities);
-     LocalityListLength = 0;
-@@ -1741,6 +1747,7 @@ DtCompileTcpa (
-     ACPI_TABLE_TCPA_HDR     *TcpaHeader;
-     DT_SUBTABLE             *ParentTable;
-     ACPI_STATUS             Status;
-+    UINT16                PlatClass;
-     /* Compile the main table */
-@@ -1761,7 +1768,8 @@ DtCompileTcpa (
-      */
-     TcpaHeader = ACPI_CAST_PTR (ACPI_TABLE_TCPA_HDR, ParentTable->Buffer);
--    switch (TcpaHeader->PlatformClass)
-+    ACPI_MOVE_16_TO_16(&PlatClass, &TcpaHeader->PlatformClass);
-+    switch (PlatClass)
-     {
-     case ACPI_TCPA_CLIENT_TABLE:
-@@ -1809,6 +1817,7 @@ DtCompileTpm2Rev3 (
-     ACPI_TABLE_TPM23        *Tpm23Header;
-     DT_SUBTABLE             *ParentTable;
-     ACPI_STATUS             Status = AE_OK;
-+    UINT32                Tmp32;
-     Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm23,
-@@ -1820,7 +1829,8 @@ DtCompileTpm2Rev3 (
-     /* Subtable type depends on the StartMethod */
--    switch (Tpm23Header->StartMethod)
-+    ACPI_MOVE_32_TO_32(&Tmp32, &Tpm23Header->StartMethod);
-+    switch (Tmp32)
-     {
-     case ACPI_TPM23_ACPI_START_METHOD:
-@@ -1867,6 +1877,7 @@ DtCompileTpm2 (
-     DT_SUBTABLE             *ParentTable;
-     ACPI_STATUS             Status = AE_OK;
-     ACPI_TABLE_HEADER       *Header;
-+    UINT32                Tmp32;
-     ParentTable = DtPeekSubtable ();
-@@ -1910,7 +1921,8 @@ DtCompileTpm2 (
-     /* Subtable type depends on the StartMethod */
--    switch (Tpm2Header->StartMethod)
-+    ACPI_MOVE_32_TO_32(&Tmp32, &Tpm2Header->StartMethod);
-+    switch (Tmp32)
-     {
-     case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC:
-@@ -2126,6 +2138,9 @@ DtCompileWpbt (
-     ACPI_TABLE_WPBT         *Table;
-     ACPI_STATUS             Status;
-     UINT16                  Length;
-+    UINT16                  Tmp16;
-+    UINT16                *Ptr16;
-+    UINT32                ii;
-     /* Compile the main table */
-@@ -2153,7 +2168,16 @@ DtCompileWpbt (
-     Length = (UINT16) Subtable->TotalLength;
-     Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer);
--    Table->ArgumentsLength = Length;
-+    ACPI_MOVE_16_TO_16(&Table->ArgumentsLength, &Length);
-+
-+    /* The arguments are in Unicode, so make sure the byte order is correct */
-+    Ptr16 = (UINT16 *)Subtable->Buffer;
-+    for (ii = 0; ii < Length; ii++)
-+    {
-+      ACPI_MOVE_16_TO_16(&Tmp16, Ptr16);
-+      *Ptr16 = Tmp16;
-+        Ptr16++;
-+    }
-     ParentTable = DtPeekSubtable ();
-     DtInsertSubtable (ParentTable, Subtable);
-Index: acpica-unix-20209326/source/components/disassembler/dmbuffer.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/disassembler/dmbuffer.c
-+++ acpica-unix-20209326/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
-@@ -304,7 +304,8 @@ AcpiDmIsUuidBuffer (
-     /* Extract the byte list info */
-     ByteData = NextOp->Named.Data;
--    ByteCount = (UINT32) NextOp->Common.Value.Integer;
-+    /* ByteCount = (UINT32) NextOp->Common.Value.Integer; */
-+    ByteCount = (UINT32) NextOp->Common.Value.Size;
-     /* Byte count must be exactly 16 */
-@@ -424,7 +425,8 @@ AcpiDmIsUnicodeBuffer (
-     /* Extract the byte list info */
-     ByteData = NextOp->Named.Data;
--    ByteCount = (UINT32) NextOp->Common.Value.Integer;
-+    /* ByteCount = (UINT32) NextOp->Common.Value.Integer; */
-+    ByteCount = (UINT32) NextOp->Common.Value.Size;
-     WordCount = ACPI_DIV_2 (ByteCount);
-     /*
-@@ -852,19 +854,22 @@ AcpiDmUnicode (
-     UINT32                  WordCount;
-     UINT32                  i;
-     int                     OutputValue;
-+    UINT16                Tmp16;
-     /* 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) WordData[i]; */
-+      ACPI_MOVE_16_TO_16(&Tmp16, &WordData[i]);
-+      OutputValue = (int) Tmp16;
-         /* Handle values that must be escaped */
-@@ -973,16 +978,18 @@ AcpiDmCheckForHardwareId (
-     ACPI_PARSE_OBJECT       *Op)
- {
-     UINT32                  Name;
-+    UINT32                  TmpName;
-     ACPI_PARSE_OBJECT       *NextOp;
-     /* Get the NameSegment */
--    Name = AcpiPsGetName (Op);
--    if (!Name)
-+    TmpName = AcpiPsGetName (Op);
-+    if (!TmpName)
-     {
-         return;
-     }
-+    ACPI_MOVE_32_TO_32(&Name, &TmpName);
-     NextOp = AcpiPsGetDepthNext (NULL, Op);
-     if (!NextOp)
-Index: acpica-unix-20209326/source/components/disassembler/dmopcode.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/disassembler/dmopcode.c
-+++ acpica-unix-20209326/source/components/disassembler/dmopcode.c
-@@ -244,6 +244,7 @@ AcpiDmPredefinedDescription (
-     char                        *NameString;
-     int                         LastCharIsDigit;
-     int                         LastCharsAreHex;
-+    char                      TmpName[ACPI_NAMESEG_SIZE + 1];
-     if (!Op)
-@@ -261,7 +262,9 @@ AcpiDmPredefinedDescription (
-     /* Predefined name must start with an underscore */
--    NameString = ACPI_CAST_PTR (char, &Op->Named.Name);
-+    memset(TmpName, 0, ACPI_NAMESEG_SIZE + 1);
-+    ACPI_MOVE_32_TO_32(TmpName, &Op->Named.Name);
-+    NameString = TmpName;
-     if (NameString[0] != '_')
-     {
-         return;
-@@ -880,25 +883,29 @@ AcpiDmDisassembleOneOp (
-         AcpiDmNamestring (Op->Common.Value.Name);
-         break;
--    case AML_INT_NAMEDFIELD_OP:
-+    case AML_INT_NAMEDFIELD_OP: {
--        Length = AcpiDmDumpName (Op->Named.Name);
-+      UINT32 TmpName;
-+
-+      ACPI_MOVE_32_TO_32(&TmpName, &Op->Named.Name);
-+        Length = AcpiDmDumpName (TmpName);
-         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 = Op->Common.Value.Size;
-         Info->BitOffset += Offset;
-         if (Info->BitOffset % 8 == 0)
-@@ -942,10 +949,15 @@ AcpiDmDisassembleOneOp (
-         if (Child->Common.AmlOpcode == AML_INT_BYTELIST_OP)
-         {
-+          /* UINT64 Tmp64; */
-+
-             AcpiOsPrintf ("\n");
-             Aml = Child->Named.Data;
-+          /*
-             Length = (UINT32) Child->Common.Value.Integer;
-+          */
-+            Length = (UINT32) Child->Common.Value.Size;
-             Info->Level += 1;
-             Info->MappingOp = Op;
-Index: acpica-unix-20209326/source/components/disassembler/dmresrcl.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/disassembler/dmresrcl.c
-+++ acpica-unix-20209326/source/components/disassembler/dmresrcl.c
-@@ -141,7 +141,8 @@ AcpiDmMemoryFields (
-     UINT32                  Level)
- {
-     UINT32                  i;
--
-+    UINT16                Tmp16;
-+    UINT32                Tmp32;
-     for (i = 0; i < 4; i++)
-     {
-@@ -151,14 +152,14 @@ AcpiDmMemoryFields (
-         {
-         case 16:
--            AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
--                AcpiDmMemoryNames[i]);
-+          ACPI_MOVE_16_TO_16(&Tmp16, &(ACPI_CAST_PTR (UINT16, Source)[i]));
-+            AcpiDmDumpInteger16 (Tmp16, AcpiDmMemoryNames[i]);
-             break;
-         case 32:
--            AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
--                AcpiDmMemoryNames[i]);
-+          ACPI_MOVE_32_TO_32(&Tmp32, &(ACPI_CAST_PTR (UINT32, Source)[i]));
-+            AcpiDmDumpInteger32 (Tmp32, AcpiDmMemoryNames[i]);
-             break;
-         default:
-@@ -190,7 +191,9 @@ AcpiDmAddressFields (
-     UINT32                  Level)
- {
-     UINT32                  i;
--
-+    UINT16                Tmp16;
-+    UINT32                Tmp32;
-+    UINT64                Tmp64;
-     AcpiOsPrintf ("\n");
-@@ -202,20 +205,20 @@ AcpiDmAddressFields (
-         {
-         case 16:
--            AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
--                AcpiDmAddressNames[i]);
-+          ACPI_MOVE_16_TO_16(&Tmp16, &(ACPI_CAST_PTR (UINT16, Source)[i]));
-+            AcpiDmDumpInteger16 (Tmp16, AcpiDmAddressNames[i]);
-             break;
-         case 32:
--            AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
--                AcpiDmAddressNames[i]);
-+          ACPI_MOVE_32_TO_32(&Tmp32, &(ACPI_CAST_PTR (UINT32, Source)[i]));
-+            AcpiDmDumpInteger32 (Tmp32, AcpiDmAddressNames[i]);
-             break;
-         case 64:
--            AcpiDmDumpInteger64 (ACPI_CAST_PTR (UINT64, Source)[i],
--                AcpiDmAddressNames[i]);
-+          ACPI_MOVE_64_TO_64(&Tmp64, &(ACPI_CAST_PTR (UINT64, Source)[i]));
-+            AcpiDmDumpInteger64 (Tmp64, AcpiDmAddressNames[i]);
-             break;
-         default:
-@@ -868,6 +871,7 @@ AcpiDmFixedMemory32Descriptor (
-     UINT32                  Length,
-     UINT32                  Level)
- {
-+    UINT32 Tmp;
-     /* Dump name and read/write flag */
-@@ -876,12 +880,12 @@ AcpiDmFixedMemory32Descriptor (
-         AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (Resource->FixedMemory32.Flags)]);
-     AcpiDmIndent (Level + 1);
--    AcpiDmDumpInteger32 (Resource->FixedMemory32.Address,
--        "Address Base");
-+    ACPI_MOVE_32_TO_32(&Tmp, &Resource->FixedMemory32.Address);
-+    AcpiDmDumpInteger32 (Tmp, "Address Base");
-     AcpiDmIndent (Level + 1);
--    AcpiDmDumpInteger32 (Resource->FixedMemory32.AddressLength,
--        "Address Length");
-+    ACPI_MOVE_32_TO_32(&Tmp, &Resource->FixedMemory32.AddressLength);
-+    AcpiDmDumpInteger32 (Tmp, "Address Length");
-     /* Insert a descriptor name */
-@@ -913,6 +917,7 @@ AcpiDmGenericRegisterDescriptor (
-     UINT32                  Length,
-     UINT32                  Level)
- {
-+    UINT64                Tmp64;
-     AcpiDmIndent (Level);
-     AcpiOsPrintf ("Register (");
-@@ -926,7 +931,9 @@ AcpiDmGenericRegisterDescriptor (
-     AcpiDmDumpInteger8 (Resource->GenericReg.BitOffset, "Bit Offset");
-     AcpiDmIndent (Level + 1);
--    AcpiDmDumpInteger64 (Resource->GenericReg.Address, "Address");
-+    /* AcpiDmDumpInteger64 (Resource->GenericReg.Address, "Address"); */
-+    ACPI_MOVE_64_TO_64(&Tmp64, &Resource->GenericReg.Address);
-+    AcpiDmDumpInteger64 (Tmp64, "Address");
-     /* Optional field for ACPI 3.0 */
-@@ -972,7 +979,7 @@ AcpiDmInterruptDescriptor (
-     UINT32                  Level)
- {
-     UINT32                  i;
--
-+    UINT16                Tmp16;
-     AcpiDmIndent (Level);
-     AcpiOsPrintf ("Interrupt (%s, %s, %s, %s, ",
-@@ -986,10 +993,11 @@ AcpiDmInterruptDescriptor (
-      * list. Must compute length based on length of the list. First xrupt
-      * is included in the struct (reason for -1 below)
-      */
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->ExtendedIrq.ResourceLength);
-     AcpiDmResourceSource (Resource,
-         sizeof (AML_RESOURCE_EXTENDED_IRQ) +
-             ((UINT32) Resource->ExtendedIrq.InterruptCount - 1) * sizeof (UINT32),
--        Resource->ExtendedIrq.ResourceLength);
-+        Tmp16);
-     /* Insert a descriptor name */
-@@ -1002,9 +1010,12 @@ AcpiDmInterruptDescriptor (
-     AcpiOsPrintf ("{\n");
-     for (i = 0; i < Resource->ExtendedIrq.InterruptCount; i++)
-     {
-+      UINT32 Tmp32, Val32;
-+
-         AcpiDmIndent (Level + 1);
--        AcpiOsPrintf ("0x%8.8X,\n",
--            (UINT32) Resource->ExtendedIrq.Interrupts[i]);
-+      Val32 = (UINT32) Resource->ExtendedIrq.Interrupts[i];
-+      ACPI_MOVE_32_TO_32(&Tmp32, &Val32);
-+        AcpiOsPrintf ("0x%8.8X,\n", Tmp32);
-     }
-     AcpiDmIndent (Level);
-Index: acpica-unix-20209326/source/components/disassembler/dmresrcl2.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/disassembler/dmresrcl2.c
-+++ acpica-unix-20209326/source/components/disassembler/dmresrcl2.c
-@@ -191,22 +191,24 @@ AcpiDmGpioCommon (
-     char                    *DeviceName = NULL;
-     UINT32                  PinCount;
-     UINT32                  i;
-+    UINT16                Tmp16;
-     /* ResourceSource, ResourceSourceIndex, ResourceType */
-     AcpiDmIndent (Level + 1);
--    if (Resource->Gpio.ResSourceOffset)
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.ResSourceOffset);
-+    if (Tmp16)
-     {
--        DeviceName = ACPI_ADD_PTR (char,
--            Resource, Resource->Gpio.ResSourceOffset),
-+        DeviceName = ACPI_ADD_PTR (char, Resource, Tmp16),
-         AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
-     }
-     AcpiOsPrintf (", ");
-     AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.ResSourceIndex);
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.Flags);
-     AcpiOsPrintf ("%s, ",
--        AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.Flags)]);
-+        AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Tmp16)]);
-     /* Insert a descriptor name */
-@@ -215,15 +217,16 @@ AcpiDmGpioCommon (
-     /* Dump the vendor data */
--    if (Resource->Gpio.VendorOffset)
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.VendorOffset);
-+    if (Tmp16)
-     {
-         AcpiOsPrintf ("\n");
-         AcpiDmIndent (Level + 1);
--        VendorData = ACPI_ADD_PTR (UINT8, Resource,
--            Resource->Gpio.VendorOffset);
-+      ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.VendorOffset);
-+        VendorData = ACPI_ADD_PTR (UINT8, Resource, Tmp16);
--        AcpiDmDumpRawDataBuffer (VendorData,
--            Resource->Gpio.VendorLength, Level);
-+      ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.VendorLength);
-+        AcpiDmDumpRawDataBuffer (VendorData, Tmp16, Level);
-     }
-     AcpiOsPrintf (")\n");
-@@ -233,17 +236,25 @@ AcpiDmGpioCommon (
-     AcpiDmIndent (Level + 1);
-     AcpiOsPrintf ("{   // Pin list\n");
-+    /*
-     PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset -
-         Resource->Gpio.PinTableOffset)) /
-         sizeof (UINT16);
-+    */
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.ResSourceOffset);
-+    PinCount = (UINT32) Tmp16;
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.PinTableOffset);
-+    PinCount -= (UINT32) Tmp16;
-+    PinCount /= sizeof (UINT16);
--    PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
--        Resource->Gpio.PinTableOffset);
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.PinTableOffset);
-+    PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource, Tmp16);
-     for (i = 0; i < PinCount; i++)
-     {
-         AcpiDmIndent (Level + 2);
--        AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
-+      ACPI_MOVE_16_TO_16(&Tmp16, &PinList[i]);
-+        AcpiOsPrintf ("0x%4.4X%s\n", Tmp16,
-             ((i + 1) < PinCount) ? "," : "");
-     }
-@@ -277,16 +288,18 @@ AcpiDmGpioIntDescriptor (
-     UINT32                  Length,
-     UINT32                  Level)
- {
-+    UINT16                Tmp16;
-     /* Dump the GpioInt-specific portion of the descriptor */
-     /* EdgeLevel, ActiveLevel, Shared */
-     AcpiDmIndent (Level);
-+    ACPI_MOVE_16_TO_16(&Tmp16, &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 +312,8 @@ AcpiDmGpioIntDescriptor (
-     {
-         AcpiOsPrintf ("0x%2.2X, ", Resource->Gpio.PinConfig);
-     }
--    AcpiOsPrintf ("0x%4.4X,\n", Resource->Gpio.DebounceTimeout);
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.DebounceTimeout);
-+    AcpiOsPrintf ("0x%4.4X,\n", Tmp16);
-     /* Dump the GpioInt/GpioIo common portion of the descriptor */
-@@ -329,14 +343,16 @@ AcpiDmGpioIoDescriptor (
-     UINT32                  Length,
-     UINT32                  Level)
- {
-+    UINT16                Tmp16;
-     /* Dump the GpioIo-specific portion of the descriptor */
-     /* Shared, PinConfig */
-     AcpiDmIndent (Level);
-+    ACPI_MOVE_16_TO_16(&Tmp16, &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 +366,13 @@ AcpiDmGpioIoDescriptor (
-     /* DebounceTimeout, DriveStrength, IoRestriction */
--    AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout);
--    AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength);
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.DebounceTimeout);
-+    AcpiOsPrintf ("0x%4.4X, ", Tmp16);
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.DriveStrength);
-+    AcpiOsPrintf ("0x%4.4X, ", Tmp16);
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Gpio.IntFlags);
-     AcpiOsPrintf ("%s,\n",
--        AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]);
-+        AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Tmp16)]);
-     /* Dump the GpioInt/GpioIo common portion of the descriptor */
-@@ -533,6 +552,7 @@ AcpiDmDumpSerialBusVendorData (
- {
-     UINT8                   *VendorData;
-     UINT32                  VendorLength;
-+    UINT16                  Tmp16;
-     /* Get the (optional) vendor data and length */
-@@ -541,8 +561,8 @@ AcpiDmDumpSerialBusVendorData (
-     {
-     case AML_RESOURCE_I2C_SERIALBUSTYPE:
--        VendorLength = Resource->CommonSerialBus.TypeDataLength -
--            AML_RESOURCE_I2C_MIN_DATA_LEN;
-+      ACPI_MOVE_16_TO_16(&Tmp16, &Resource->CommonSerialBus.TypeDataLength);
-+        VendorLength = Tmp16 - AML_RESOURCE_I2C_MIN_DATA_LEN;
-         VendorData = ACPI_ADD_PTR (UINT8, Resource,
-             sizeof (AML_RESOURCE_I2C_SERIALBUS));
-@@ -550,8 +570,8 @@ AcpiDmDumpSerialBusVendorData (
-     case AML_RESOURCE_SPI_SERIALBUSTYPE:
--        VendorLength = Resource->CommonSerialBus.TypeDataLength -
--            AML_RESOURCE_SPI_MIN_DATA_LEN;
-+      ACPI_MOVE_16_TO_16(&Tmp16, &Resource->CommonSerialBus.TypeDataLength);
-+        VendorLength = Tmp16 - AML_RESOURCE_SPI_MIN_DATA_LEN;
-         VendorData = ACPI_ADD_PTR (UINT8, Resource,
-             sizeof (AML_RESOURCE_SPI_SERIALBUS));
-@@ -559,8 +579,8 @@ AcpiDmDumpSerialBusVendorData (
-     case AML_RESOURCE_UART_SERIALBUSTYPE:
--        VendorLength = Resource->CommonSerialBus.TypeDataLength -
--            AML_RESOURCE_UART_MIN_DATA_LEN;
-+      ACPI_MOVE_16_TO_16(&Tmp16, &Resource->CommonSerialBus.TypeDataLength);
-+        VendorLength = Tmp16 - AML_RESOURCE_UART_MIN_DATA_LEN;
-         VendorData = ACPI_ADD_PTR (UINT8, Resource,
-             sizeof (AML_RESOURCE_UART_SERIALBUS));
-@@ -601,24 +621,29 @@ AcpiDmI2cSerialBusDescriptor (
- {
-     UINT32                  ResourceSourceOffset;
-     char                    *DeviceName;
-+    UINT16                Tmp16;
-+    UINT32                Tmp32;
-     /* SlaveAddress, SlaveMode, ConnectionSpeed, AddressingMode */
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->I2cSerialBus.SlaveAddress);
-+    ACPI_MOVE_32_TO_32(&Tmp32, &Resource->I2cSerialBus.ConnectionSpeed);
-     AcpiDmIndent (Level);
-     AcpiOsPrintf ("I2cSerialBusV2 (0x%4.4X, %s, 0x%8.8X,\n",
--        Resource->I2cSerialBus.SlaveAddress,
-+        Tmp16,
-         AcpiGbl_SmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.Flags)],
--        Resource->I2cSerialBus.ConnectionSpeed);
-+        Tmp32);
-     AcpiDmIndent (Level + 1);
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->I2cSerialBus.TypeSpecificFlags);
-     AcpiOsPrintf ("%s, ",
--        AcpiGbl_AmDecode [ACPI_GET_1BIT_FLAG (Resource->I2cSerialBus.TypeSpecificFlags)]);
-+        AcpiGbl_AmDecode [ACPI_GET_1BIT_FLAG (Tmp16)]);
-     /* ResourceSource is a required field */
--    ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) +
--        Resource->CommonSerialBus.TypeDataLength;
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->CommonSerialBus.TypeDataLength);
-+    ResourceSourceOffset = sizeof (AML_RESOURCE_COMMON_SERIALBUS) + Tmp16;
-     DeviceName = ACPI_ADD_PTR (char, Resource, ResourceSourceOffset);
-     AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
-Index: acpica-unix-20209326/source/components/disassembler/dmresrcs.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/disassembler/dmresrcs.c
-+++ acpica-unix-20209326/source/components/disassembler/dmresrcs.c
-@@ -72,6 +72,7 @@ AcpiDmIrqDescriptor (
-     UINT32                  Length,
-     UINT32                  Level)
- {
-+    UINT16 Tmp;
-     AcpiDmIndent (Level);
-     AcpiOsPrintf ("%s (",
-@@ -93,7 +94,8 @@ AcpiDmIrqDescriptor (
-     AcpiOsPrintf (")\n");
-     AcpiDmIndent (Level + 1);
--    AcpiDmBitList (Resource->Irq.IrqMask);
-+    ACPI_MOVE_16_TO_16(&Tmp, &Resource->Irq.IrqMask);
-+    AcpiDmBitList (Tmp);
- }
-@@ -204,16 +206,19 @@ AcpiDmIoDescriptor (
-     UINT32                  Length,
-     UINT32                  Level)
- {
-+    UINT16 Tmp16;
-     AcpiDmIndent (Level);
-     AcpiOsPrintf ("IO (%s,\n",
-         AcpiGbl_IoDecode [ACPI_GET_1BIT_FLAG (Resource->Io.Flags)]);
-     AcpiDmIndent (Level + 1);
--    AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum");
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Io.Minimum);
-+    AcpiDmDumpInteger16 (Tmp16, "Range Minimum");
-     AcpiDmIndent (Level + 1);
--    AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum");
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->Io.Maximum);
-+    AcpiDmDumpInteger16 (Tmp16, "Range Maximum");
-     AcpiDmIndent (Level + 1);
-     AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment");
-@@ -251,12 +256,14 @@ AcpiDmFixedIoDescriptor (
-     UINT32                  Length,
-     UINT32                  Level)
- {
-+    UINT16                  Tmp16;
-     AcpiDmIndent (Level);
-     AcpiOsPrintf ("FixedIO (\n");
-     AcpiDmIndent (Level + 1);
--    AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address");
-+    ACPI_MOVE_16_TO_16(&Tmp16, &Resource->FixedIo.Address);
-+    AcpiDmDumpInteger16 (Tmp16, "Address");
-     AcpiDmIndent (Level + 1);
-     AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length");
-Index: acpica-unix-20209326/source/components/dispatcher/dsfield.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/dispatcher/dsfield.c
-+++ acpica-unix-20209326/source/components/dispatcher/dsfield.c
-@@ -324,6 +324,7 @@ AcpiDsGetFieldNames (
-     ACPI_STATUS             Status;
-     UINT64                  Position;
-     ACPI_PARSE_OBJECT       *Child;
-+    UINT32 TmpName;
- #ifdef ACPI_EXEC_APP
-     ACPI_OPERAND_OBJECT     *ResultDesc;
-@@ -437,10 +438,17 @@ AcpiDsGetFieldNames (
-             /* Lookup the name, it should already exist */
-+          ACPI_MOVE_32_TO_32(&TmpName, &Arg->Named.Name);
-+            Status = AcpiNsLookup (WalkState->ScopeInfo,
-+                (char *) &TmpName, Info->FieldType,
-+                ACPI_IMODE_EXECUTE, ACPI_NS_DONT_OPEN_SCOPE,
-+                WalkState, &Info->FieldNode);
-+      /*
-             Status = AcpiNsLookup (WalkState->ScopeInfo,
-                 (char *) &Arg->Named.Name, Info->FieldType,
-                 ACPI_IMODE_EXECUTE, ACPI_NS_DONT_OPEN_SCOPE,
-                 WalkState, &Info->FieldNode);
-+      */
-             if (ACPI_FAILURE (Status))
-             {
-                 ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
-@@ -689,9 +697,17 @@ AcpiDsInitFieldObjects (
-          */
-         if (Arg->Common.AmlOpcode == AML_INT_NAMEDFIELD_OP)
-         {
-+          UINT32 TmpName;
-+
-+            ACPI_MOVE_32_TO_32(&TmpName, &Arg->Named.Name);
-+            Status = AcpiNsLookup (WalkState->ScopeInfo,
-+                (char *) &TmpName, Type, ACPI_IMODE_LOAD_PASS1,
-+                Flags, WalkState, &Node);
-+      /*
-             Status = AcpiNsLookup (WalkState->ScopeInfo,
-                 (char *) &Arg->Named.Name, Type, ACPI_IMODE_LOAD_PASS1,
-                 Flags, WalkState, &Node);
-+      */
-             if (ACPI_FAILURE (Status))
-             {
-                 ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
-Index: acpica-unix-20209326/source/components/events/evgpeblk.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/events/evgpeblk.c
-+++ acpica-unix-20209326/source/components/events/evgpeblk.c
-@@ -380,6 +380,7 @@ AcpiEvCreateGpeBlock (
-     ACPI_STATUS             Status;
-     ACPI_GPE_BLOCK_INFO     *GpeBlock;
-     ACPI_GPE_WALK_INFO      WalkInfo;
-+    char                  Name[ACPI_NAMESEG_SIZE + 1];
-     ACPI_FUNCTION_TRACE (EvCreateGpeBlock);
-@@ -400,7 +401,7 @@ AcpiEvCreateGpeBlock (
-     /* Initialize the new GPE block */
--    GpeBlock->Address = Address;
-+    ACPI_MOVE_64_TO_64(&GpeBlock->Address, &Address);
-     GpeBlock->SpaceId = SpaceId;
-     GpeBlock->Node = GpeDevice;
-     GpeBlock->GpeCount = (UINT16) (RegisterCount * ACPI_GPE_REGISTER_WIDTH);
-@@ -449,11 +450,13 @@ AcpiEvCreateGpeBlock (
-         (*ReturnGpeBlock) = GpeBlock;
-     }
-+    memset(&Name, 0, ACPI_NAMESEG_SIZE + 1);
-+    ACPI_MOVE_32_TO_32(&Name, &GpeDevice->Name.Ascii);
-     ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT,
-         "    Initialized GPE %02X to %02X [%4.4s] %u regs on interrupt 0x%X%s\n",
-         (UINT32) GpeBlock->BlockBaseNumber,
-         (UINT32) (GpeBlock->BlockBaseNumber + (GpeBlock->GpeCount - 1)),
--        GpeDevice->Name.Ascii, GpeBlock->RegisterCount, InterruptNumber,
-+        Name, GpeBlock->RegisterCount, InterruptNumber,
-         InterruptNumber == AcpiGbl_FADT.SciInterrupt ? " (SCI)" : ""));
-     /* Update global count of currently available GPEs */
-Index: acpica-unix-20209326/source/components/hardware/hwregs.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/hardware/hwregs.c
-+++ acpica-unix-20209326/source/components/hardware/hwregs.c
-@@ -197,7 +197,7 @@ AcpiHwValidateRegister (
-      * Address must not be null. A null address also indicates an optional
-      * ACPI register that is not supported, so no error message.
-      */
--    ACPI_MOVE_64_TO_64 (Address, &Reg->Address);
-+    *Address =  Reg->Address;
-     if (!(*Address))
-     {
-         return (AE_BAD_ADDRESS);
-Index: acpica-unix-20209326/source/components/hardware/hwvalid.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/hardware/hwvalid.c
-+++ acpica-unix-20209326/source/components/hardware/hwvalid.c
-@@ -135,6 +135,8 @@ AcpiHwValidateIoRequest (
-     UINT32                  ByteWidth;
-     ACPI_IO_ADDRESS         LastAddress;
-     const ACPI_PORT_INFO    *PortInfo;
-+    UINT64                  Max16;
-+    UINT64                  Tmp64;
-     ACPI_FUNCTION_TRACE (HwValidateIoRequest);
-@@ -162,7 +164,10 @@ AcpiHwValidateIoRequest (
-     /* Maximum 16-bit address in I/O space */
--    if (LastAddress > ACPI_UINT16_MAX)
-+    Max16 = (UINT64) ACPI_UINT16_MAX;
-+    ACPI_MOVE_64_TO_64(&Tmp64, &Max16);
-+
-+    if ((UINT64)LastAddress > Tmp64)
-     {
-         ACPI_ERROR ((AE_INFO,
-             "Illegal I/O port address/length above 64K: %8.8X%8.8X/0x%X",
-Index: acpica-unix-20209326/source/components/namespace/nsaccess.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/namespace/nsaccess.c
-+++ acpica-unix-20209326/source/components/namespace/nsaccess.c
-@@ -349,6 +349,7 @@ AcpiNsLookup (
-     UINT32                  SearchParentFlag = ACPI_NS_SEARCH_PARENT;
-     UINT32                  LocalFlags;
-     ACPI_INTERPRETER_MODE   LocalInterpreterMode;
-+    UINT32                Tmp32;
-     ACPI_FUNCTION_TRACE (NsLookup);
-@@ -758,9 +759,10 @@ AcpiNsLookup (
-             {
-                 /* Complain about a type mismatch */
-+              ACPI_MOVE_32_TO_32(&Tmp32, &SimpleName);
-                 ACPI_WARNING ((AE_INFO,
-                     "NsLookup: Type mismatch on %4.4s (%s), searching for (%s)",
--                    ACPI_CAST_PTR (char, &SimpleName),
-+                    ACPI_CAST_PTR (char, &Tmp32),
-                     AcpiUtGetTypeName (ThisNode->Type),
-                     AcpiUtGetTypeName (TypeToCheckFor)));
-             }
-Index: acpica-unix-20209326/source/components/namespace/nsparse.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/namespace/nsparse.c
-+++ acpica-unix-20209326/source/components/namespace/nsparse.c
-@@ -216,13 +216,14 @@ AcpiNsOneCompleteParse (
-     /* Table must consist of at least a complete header */
--    if (Table->Length < sizeof (ACPI_TABLE_HEADER))
-+    ACPI_MOVE_32_TO_32(&AmlLength, &Table->Length);
-+    if (AmlLength < 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 -= sizeof (ACPI_TABLE_HEADER);
-     Status = AcpiTbGetOwnerId (TableIndex, &OwnerId);
-     if (ACPI_FAILURE (Status))
-Index: acpica-unix-20209326/source/components/tables/tbdata.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/tables/tbdata.c
-+++ acpica-unix-20209326/source/components/tables/tbdata.c
-@@ -552,6 +552,7 @@ AcpiTbVerifyTempTable (
-     UINT32                  *TableIndex)
- {
-     ACPI_STATUS             Status = AE_OK;
-+    UINT32                Length;
-     ACPI_FUNCTION_TRACE (TbVerifyTempTable);
-@@ -581,7 +582,8 @@ AcpiTbVerifyTempTable (
-     {
-         /* Verify the checksum */
--        Status = AcpiTbVerifyChecksum (TableDesc->Pointer, TableDesc->Length);
-+        ACPI_MOVE_32_TO_32(&Length, &TableDesc->Length);
-+        Status = AcpiTbVerifyChecksum (TableDesc->Pointer, Length);
-         if (ACPI_FAILURE (Status))
-         {
-             ACPI_EXCEPTION ((AE_INFO, AE_NO_MEMORY,
-Index: acpica-unix-20209326/source/components/tables/tbfadt.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/tables/tbfadt.c
-+++ acpica-unix-20209326/source/components/tables/tbfadt.c
-@@ -424,18 +424,20 @@ AcpiTbCreateLocalFadt (
-     ACPI_TABLE_HEADER       *Table,
-     UINT32                  Length)
- {
-+    UINT32 Tmp32;
-     /*
-      * Check if the FADT is larger than the largest table that we expect
-      * (typically the current ACPI specification version). If so, truncate
-      * the table, and issue a warning.
-      */
--    if (Length > sizeof (ACPI_TABLE_FADT))
-+    ACPI_MOVE_32_TO_32(&Tmp32, &Length);
-+    if (Tmp32 > sizeof (ACPI_TABLE_FADT))
-     {
-         ACPI_BIOS_WARNING ((AE_INFO,
-             "FADT (revision %u) is longer than %s length, "
-             "truncating length %u to %u",
--            Table->Revision, ACPI_FADT_CONFORMANCE, Length,
-+            Table->Revision, ACPI_FADT_CONFORMANCE, Tmp32,
-             (UINT32) sizeof (ACPI_TABLE_FADT)));
-     }
-@@ -446,7 +448,7 @@ AcpiTbCreateLocalFadt (
-     /* Copy the original FADT, up to sizeof (ACPI_TABLE_FADT) */
-     memcpy (&AcpiGbl_FADT, Table,
--        ACPI_MIN (Length, sizeof (ACPI_TABLE_FADT)));
-+        ACPI_MIN (Tmp32, sizeof (ACPI_TABLE_FADT)));
-     /* Take a copy of the Hardware Reduced flag */
-@@ -520,6 +522,8 @@ AcpiTbConvertFadt (
-     UINT8                   Length;
-     UINT8                   Flags;
-     UINT32                  i;
-+    UINT32                Tmp32;
-+    UINT64                Tmp64;
-     /*
-@@ -533,7 +537,8 @@ AcpiTbConvertFadt (
-      * Note: The FADT revision value is unreliable. Only the length can be
-      * trusted.
-      */
--    if (AcpiGbl_FADT.Header.Length <= ACPI_FADT_V2_SIZE)
-+    ACPI_MOVE_32_TO_32(&Tmp32, &AcpiGbl_FADT.Header.Length);
-+    if (Tmp32 <= ACPI_FADT_V2_SIZE)
-     {
-         AcpiGbl_FADT.PreferredProfile = 0;
-         AcpiGbl_FADT.PstateControl = 0;
-@@ -546,14 +551,15 @@ AcpiTbConvertFadt (
-      * current FADT version as defined by the ACPI specification.
-      * Thus, we will have a common FADT internally.
-      */
--    AcpiGbl_FADT.Header.Length = sizeof (ACPI_TABLE_FADT);
-+    Tmp32 = sizeof (ACPI_TABLE_FADT);
-+    ACPI_MOVE_32_TO_32(&AcpiGbl_FADT.Header.Length, &Tmp32);
-     /*
-      * Expand the 32-bit DSDT addresses to 64-bit as necessary.
-      * Later ACPICA code will always use the X 64-bit field.
-      */
--    AcpiGbl_FADT.XDsdt = AcpiTbSelectAddress ("DSDT",
--        AcpiGbl_FADT.Dsdt, AcpiGbl_FADT.XDsdt);
-+    Tmp64 = AcpiTbSelectAddress ("DSDT", AcpiGbl_FADT.Dsdt, AcpiGbl_FADT.XDsdt);
-+    ACPI_MOVE_64_TO_64(&AcpiGbl_FADT.XDsdt, &Tmp64);
-     /* If Hardware Reduced flag is set, we are all done */
-@@ -614,7 +620,9 @@ AcpiTbConvertFadt (
-         {
-             if (Address64->Address)
-             {
--                if (Address64->Address != (UINT64) Address32)
-+              ACPI_MOVE_32_TO_32(&Tmp32, &Address32);
-+              ACPI_MOVE_64_TO_64(&Tmp64, &Address64->Address);
-+                if (Tmp64 != (UINT64) Tmp32)
-                 {
-                     /* Address mismatch */
-@@ -655,9 +663,11 @@ AcpiTbConvertFadt (
-              */
-             if (!Address64->Address || AcpiGbl_Use32BitFadtAddresses)
-             {
-+              ACPI_MOVE_32_TO_32(&Tmp32, &Address32); /* back to host order */
-+              Tmp64 = (UINT64) Tmp32;                 /* promote only */
-                 AcpiTbInitGenericAddress (Address64,
-                     ACPI_ADR_SPACE_SYSTEM_IO, Length,
--                    (UINT64) Address32, Name, Flags);
-+                    Tmp64, Name, Flags);
-             }
-         }
-@@ -780,10 +790,14 @@ AcpiTbSetupFadtRegisters (
-         if (Source64->Address)
-         {
-+          UINT64 Tmp64, Addr64;
-+
-+          ACPI_MOVE_64_TO_64(&Tmp64, &Source64->Address);
-+          Tmp64 += (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth);
-+          ACPI_MOVE_64_TO_64(&Addr64, &Tmp64);
-             AcpiTbInitGenericAddress (FadtPmInfoTable[i].Target,
-                 Source64->SpaceId, Pm1RegisterByteWidth,
--                Source64->Address +
--                    (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth),
-+                Addr64,
-                 "PmRegisters", 0);
-         }
-     }
-Index: acpica-unix-20209326/source/components/tables/tbfind.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/tables/tbfind.c
-+++ acpica-unix-20209326/source/components/tables/tbfind.c
-@@ -108,8 +108,11 @@ AcpiTbFindTable (
-     (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
-     for (i = 0; i < AcpiGbl_RootTableList.CurrentTableCount; ++i)
-     {
-+        UINT32 Tmp32;
-+
-+        ACPI_MOVE_32_TO_32(&Tmp32, &Header.Signature);
-         if (memcmp (&(AcpiGbl_RootTableList.Tables[i].Signature),
--            Header.Signature, ACPI_NAMESEG_SIZE))
-+            &Tmp32, ACPI_NAMESEG_SIZE))
-         {
-             /* Not the requested table */
-Index: acpica-unix-20209326/source/components/tables/tbprint.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/tables/tbprint.c
-+++ acpica-unix-20209326/source/components/tables/tbprint.c
-@@ -143,15 +143,18 @@ AcpiTbPrintTableHeader (
-     ACPI_TABLE_HEADER       *Header)
- {
-     ACPI_TABLE_HEADER       LocalHeader;
-+    UINT32                Len;
-+    UINT32                OemRev;
-+    UINT32                CompilerRev;
-     if (ACPI_COMPARE_NAMESEG (Header->Signature, ACPI_SIG_FACS))
-     {
-         /* FACS only has signature and length fields */
-+      ACPI_MOVE_32_TO_32(&Len, &Header->Length);
-         ACPI_INFO (("%-4.4s 0x%8.8X%8.8X %06X",
--            Header->Signature, ACPI_FORMAT_UINT64 (Address),
--            Header->Length));
-+            Header->Signature, ACPI_FORMAT_UINT64 (Address), Len));
-     }
-     else if (ACPI_VALIDATE_RSDP_SIG (Header->Signature))
-     {
-@@ -174,13 +177,16 @@ AcpiTbPrintTableHeader (
-         AcpiTbCleanupTableHeader (&LocalHeader, Header);
-+      ACPI_MOVE_32_TO_32(&Len, &LocalHeader.Length);
-+      ACPI_MOVE_32_TO_32(&OemRev, &LocalHeader.OemRevision);
-+      ACPI_MOVE_32_TO_32(&CompilerRev, &LocalHeader.AslCompilerRevision);
-         ACPI_INFO ((
-             "%-4.4s 0x%8.8X%8.8X"
-             " %06X (v%.2d %-6.6s %-8.8s %08X %-4.4s %08X)",
-             LocalHeader.Signature, ACPI_FORMAT_UINT64 (Address),
--            LocalHeader.Length, LocalHeader.Revision, LocalHeader.OemId,
--            LocalHeader.OemTableId, LocalHeader.OemRevision,
--            LocalHeader.AslCompilerId, LocalHeader.AslCompilerRevision));
-+            Len, LocalHeader.Revision, LocalHeader.OemId,
-+            LocalHeader.OemTableId, OemRev,
-+            LocalHeader.AslCompilerId, CompilerRev));
-     }
- }
-Index: acpica-unix-20209326/source/components/tables/tbutils.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/tables/tbutils.c
-+++ acpica-unix-20209326/source/components/tables/tbutils.c
-@@ -238,7 +238,7 @@ AcpiTbGetRootTableEntry (
-          * 64-bit platform, XSDT: Move (unaligned) 64-bit to local,
-          *  return 64-bit
-          */
--        ACPI_MOVE_64_TO_64 (&Address64, TableEntry);
-+      Address64 = (UINT64) TableEntry;
- #if ACPI_MACHINE_WIDTH == 32
-         if (Address64 > ACPI_UINT32_MAX)
-@@ -251,7 +251,8 @@ AcpiTbGetRootTableEntry (
-                 ACPI_FORMAT_UINT64 (Address64)));
-         }
- #endif
--        return ((ACPI_PHYSICAL_ADDRESS) (Address64));
-+        return ((ACPI_PHYSICAL_ADDRESS) (*ACPI_CAST_PTR (
-+            UINT64, Address64)));
-     }
- }
-@@ -287,6 +288,7 @@ AcpiTbParseRootTable (
-     UINT8                   *TableEntry;
-     ACPI_STATUS             Status;
-     UINT32                  TableIndex;
-+    UINT32                  Tmp32;
-     ACPI_FUNCTION_TRACE (TbParseRootTable);
-@@ -345,7 +347,7 @@ AcpiTbParseRootTable (
-      * Validate length of the table, and map entire table.
-      * Minimum length table must contain at least one entry.
-      */
--    Length = Table->Length;
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     AcpiOsUnmapMemory (Table, sizeof (ACPI_TABLE_HEADER));
-     if (Length < (sizeof (ACPI_TABLE_HEADER) + TableEntrySize))
-@@ -372,7 +374,7 @@ AcpiTbParseRootTable (
-     /* Get the number of entries and pointer to first entry */
--    TableCount = (UINT32) ((Table->Length - sizeof (ACPI_TABLE_HEADER)) /
-+    TableCount = (UINT32) ((Length - sizeof (ACPI_TABLE_HEADER)) /
-         TableEntrySize);
-     TableEntry = ACPI_ADD_PTR (UINT8, Table, sizeof (ACPI_TABLE_HEADER));
-@@ -394,10 +396,10 @@ AcpiTbParseRootTable (
-         Status = AcpiTbInstallStandardTable (Address,
-             ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL, FALSE, TRUE, &TableIndex);
-+      ACPI_MOVE_32_TO_32(&Tmp32,
-+                         &AcpiGbl_RootTableList.Tables[TableIndex].Signature);
-         if (ACPI_SUCCESS (Status) &&
--            ACPI_COMPARE_NAMESEG (
--                &AcpiGbl_RootTableList.Tables[TableIndex].Signature,
--                ACPI_SIG_FADT))
-+            ACPI_COMPARE_NAMESEG (&Tmp32, ACPI_SIG_FADT))
-         {
-             AcpiGbl_FadtIndex = TableIndex;
-             AcpiTbParseFadt ();
-Index: acpica-unix-20209326/source/components/tables/tbxface.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/tables/tbxface.c
-+++ acpica-unix-20209326/source/components/tables/tbxface.c
-@@ -293,8 +293,11 @@ AcpiGetTableHeader (
-     for (i = 0, j = 0; i < AcpiGbl_RootTableList.CurrentTableCount; i++)
-     {
-+      UINT32 Tmp32;
-+
-+      ACPI_MOVE_32_TO_32(&Tmp32, (UINT32 *)Signature);
-         if (!ACPI_COMPARE_NAMESEG (
--                &(AcpiGbl_RootTableList.Tables[i].Signature), Signature))
-+                &(AcpiGbl_RootTableList.Tables[i].Signature), &Tmp32))
-         {
-             continue;
-         }
-Index: acpica-unix-20209326/source/components/tables/tbxfload.c
-===================================================================
---- acpica-unix-20209326.orig/source/components/tables/tbxfload.c
-+++ acpica-unix-20209326/source/components/tables/tbxfload.c
-@@ -153,6 +153,7 @@ AcpiTbLoadNamespace (
-     ACPI_TABLE_DESC         *Table;
-     UINT32                  TablesLoaded = 0;
-     UINT32                  TablesFailed = 0;
-+    UINT32                Tmp32;
-     ACPI_FUNCTION_TRACE (TbLoadNamespace);
-@@ -166,8 +167,9 @@ AcpiTbLoadNamespace (
-      */
-     Table = &AcpiGbl_RootTableList.Tables[AcpiGbl_DsdtIndex];
-+    ACPI_MOVE_32_TO_32(&Tmp32, &Table->Signature.Ascii);
-     if (!AcpiGbl_RootTableList.CurrentTableCount ||
--        !ACPI_COMPARE_NAMESEG (Table->Signature.Ascii, ACPI_SIG_DSDT) ||
-+        !ACPI_COMPARE_NAMESEG (&Tmp32, ACPI_SIG_DSDT) ||
-          ACPI_FAILURE (AcpiTbValidateTable (Table)))
-     {
-         Status = AE_NO_ACPI_TABLES;
-Index: acpica-unix-20209326/source/tools/acpiexec/aetables.c
-===================================================================
---- acpica-unix-20209326.orig/source/tools/acpiexec/aetables.c
-+++ acpica-unix-20209326/source/tools/acpiexec/aetables.c
-@@ -146,21 +146,25 @@ AeInitializeTableHeader (
-     char                    *Signature,
-     UINT32                  Length)
- {
-+    UINT16                Tmp16;
-+    UINT32                Tmp32;
-     ACPI_COPY_NAMESEG (Header->Signature, Signature);
--    Header->Length = Length;
-+    ACPI_MOVE_32_TO_32(&Header->Length, &Length);
--    Header->OemRevision = 0x1001;
-+    Tmp16 = 0x1001;
-+    ACPI_MOVE_16_TO_16(&Header->OemRevision, &Tmp16);
-     memcpy (Header->OemId, "Intel ", ACPI_OEM_ID_SIZE);
-     memcpy (Header->OemTableId, "AcpiExec", ACPI_OEM_TABLE_ID_SIZE);
-     ACPI_COPY_NAMESEG (Header->AslCompilerId, "INTL");
--    Header->AslCompilerRevision = ACPI_CA_VERSION;
-+    Tmp32 = ACPI_CA_VERSION;
-+    ACPI_MOVE_32_TO_32(&Header->AslCompilerRevision, &Tmp32);
-     /* Set the checksum, must set to zero first */
-     Header->Checksum = 0;
-     Header->Checksum = (UINT8) -AcpiTbChecksum (
--        (void *) Header, Header->Length);
-+        (void *) Header, Length);
- }
-@@ -188,6 +192,7 @@ AeBuildLocalTables (
-     ACPI_NEW_TABLE_DESC     *NextTable;
-     UINT32                  NextIndex;
-     ACPI_TABLE_FADT         *ExternalFadt = NULL;
-+    UINT32                Tmp32;
-     /*
-@@ -374,6 +379,8 @@ AeBuildLocalTables (
-     }
-     else
-     {
-+        UINT64                    Tmp64;
-+
-         /*
-          * Build a local FADT so we can test the hardware/event init
-          */
-@@ -385,34 +392,44 @@ AeBuildLocalTables (
-         LocalFADT.Facs = 0;
-         LocalFADT.XDsdt = DsdtAddress;
--        LocalFADT.XFacs = ACPI_PTR_TO_PHYSADDR (&LocalFACS);
-+        Tmp64 = ACPI_PTR_TO_PHYSADDR (&LocalFACS);
-+        ACPI_MOVE_64_TO_64(&LocalFADT.XFacs, &Tmp64);
-         /* Miscellaneous FADT fields */
-         LocalFADT.Gpe0BlockLength = 0x20;
--        LocalFADT.Gpe0Block = 0x00003210;
-+        Tmp32 = 0x00003210;
-+        ACPI_MOVE_32_TO_32(&LocalFADT.Gpe0Block, &Tmp32);
-         LocalFADT.Gpe1BlockLength = 0x20;
--        LocalFADT.Gpe1Block = 0x0000BA98;
-+        Tmp32 = 0x0000BA98;
-+        ACPI_MOVE_32_TO_32(&LocalFADT.Gpe1Block, &Tmp32);
-         LocalFADT.Gpe1Base = 0x80;
-         LocalFADT.Pm1EventLength = 4;
--        LocalFADT.Pm1aEventBlock = 0x00001aaa;
--        LocalFADT.Pm1bEventBlock = 0x00001bbb;
-+        Tmp32 = 0x00001aaa;
-+        ACPI_MOVE_32_TO_32(&LocalFADT.Pm1aEventBlock, &Tmp32);
-+        Tmp32 = 0x00001bbb;
-+        ACPI_MOVE_32_TO_32(&LocalFADT.Pm1bEventBlock, &Tmp32);
-         LocalFADT.Pm1ControlLength = 2;
--        LocalFADT.Pm1aControlBlock = 0xB0;
-+        Tmp32 = 0xB0;
-+        ACPI_MOVE_32_TO_32(&LocalFADT.Pm1aControlBlock, &Tmp32);
-         LocalFADT.PmTimerLength = 4;
--        LocalFADT.PmTimerBlock = 0xA0;
-+        Tmp32 = 0xA0;
-+        ACPI_MOVE_32_TO_32(&LocalFADT.PmTimerBlock, &Tmp32);
--        LocalFADT.Pm2ControlBlock = 0xC0;
-+        Tmp32 = 0xC0;
-+        ACPI_MOVE_32_TO_32(&LocalFADT.Pm2ControlBlock, &Tmp32);
-         LocalFADT.Pm2ControlLength = 1;
-         /* Setup one example X-64 GAS field */
-         LocalFADT.XPm1bEventBlock.SpaceId = ACPI_ADR_SPACE_SYSTEM_IO;
--        LocalFADT.XPm1bEventBlock.Address = LocalFADT.Pm1bEventBlock;
-+      ACPI_MOVE_32_TO_32(&Tmp32, &LocalFADT.Pm1bEventBlock);
-+      Tmp64 = (UINT64)Tmp32;
-+        ACPI_MOVE_64_TO_64(&LocalFADT.XPm1bEventBlock.Address, &Tmp64);
-         LocalFADT.XPm1bEventBlock.BitWidth = (UINT8)
-             ACPI_MUL_8 (LocalFADT.Pm1EventLength);
-     }
-@@ -425,13 +442,17 @@ AeBuildLocalTables (
-     memset (&LocalFACS, 0, sizeof (ACPI_TABLE_FACS));
-     ACPI_COPY_NAMESEG (LocalFACS.Signature, ACPI_SIG_FACS);
--    LocalFACS.Length = sizeof (ACPI_TABLE_FACS);
--    LocalFACS.GlobalLock = 0x11AA0011;
-+    Tmp32 = sizeof (ACPI_TABLE_FACS);
-+    ACPI_MOVE_32_TO_32(&LocalFACS.Length, &Tmp32);
-+    Tmp32 = 0x11AA0011;
-+    ACPI_MOVE_32_TO_32(&LocalFACS.GlobalLock, &Tmp32);
-     /* Build the optional local tables */
-     if (AcpiGbl_LoadTestTables)
-     {
-+      UINT32 Tmp32;
-+
-         /*
-          * Build a fake table [TEST] so that we make sure that the
-          * ACPICA core ignores it
-@@ -440,11 +461,12 @@ AeBuildLocalTables (
-         ACPI_COPY_NAMESEG (LocalTEST.Signature, "TEST");
-         LocalTEST.Revision = 1;
--        LocalTEST.Length = sizeof (ACPI_TABLE_HEADER);
-+        Tmp32 = sizeof (ACPI_TABLE_HEADER);
-+        ACPI_MOVE_32_TO_32(&LocalTEST.Length, &Tmp32);
-         LocalTEST.Checksum = 0;
-         LocalTEST.Checksum = (UINT8) -AcpiTbChecksum (
--            (void *) &LocalTEST, LocalTEST.Length);
-+            (void *) &LocalTEST, Tmp32);
-         /*
-          * Build a fake table with a bad signature [BAD!] so that we make
-@@ -454,11 +476,12 @@ AeBuildLocalTables (
-         ACPI_COPY_NAMESEG (LocalBADTABLE.Signature, "BAD!");
-         LocalBADTABLE.Revision = 1;
--        LocalBADTABLE.Length = sizeof (ACPI_TABLE_HEADER);
-+        Tmp32 = sizeof (ACPI_TABLE_HEADER);
-+        ACPI_MOVE_32_TO_32(&LocalBADTABLE.Length, &Tmp32);
-         LocalBADTABLE.Checksum = 0;
-         LocalBADTABLE.Checksum = (UINT8) -AcpiTbChecksum (
--            (void *) &LocalBADTABLE, LocalBADTABLE.Length);
-+            (void *) &LocalBADTABLE, Tmp32);
-     }
-     return (AE_OK);
-Index: acpica-unix-20209326/source/common/dmswitch.c
-===================================================================
---- acpica-unix-20209326.orig/source/common/dmswitch.c
-+++ acpica-unix-20209326/source/common/dmswitch.c
-@@ -88,13 +88,15 @@ AcpiDmProcessSwitch (
-     ACPI_PARSE_OBJECT_LIST  *Current;
-     ACPI_PARSE_OBJECT_LIST  *Previous;
-     BOOLEAN                 FoundTemp = FALSE;
-+    UINT32                Tmp32;
-     switch (Op->Common.AmlOpcode)
-     {
-     case AML_NAME_OP:
--        Temp = (char *) (&Op->Named.Name);
-+      ACPI_MOVE_32_TO_32(&Tmp32, &Op->Named.Name);
-+        Temp = (char *) (&Tmp32);
-         if (!strncmp(Temp, "_T_", 3))
-         {
-@@ -138,7 +140,10 @@ AcpiDmProcessSwitch (
-         {
-             /* Note, if we get here Temp is not NULL */
--            if (!strncmp(Temp, (char *) (&Current->Op->Named.Name), 4))
-+          ACPI_MOVE_32_TO_32(&Tmp32, &Current->Op->Named.Name);
-+
-+            /* if (!strncmp(Temp, (char *) (&Current->Op->Named.Name), 4)) */
-+            if (!strncmp(Temp, (char *) &Tmp32, 4))
-             {
-                 /* Match found. Ignore disassembly */
-Index: acpica-unix-20191213/source/common/dmtbdump1.c
-===================================================================
---- acpica-unix-20191213.orig/source/common/dmtbdump1.c
-+++ acpica-unix-20191213/source/common/dmtbdump1.c
-@@ -79,17 +79,21 @@ AcpiDmDumpAsf (
-     UINT32                  DataOffset = 0;
-     UINT32                  i;
-     UINT8                   Type;
-+    UINT32                Len;
-+    UINT16                SubLen;
-     /* No main table, only subtables */
-+    ACPI_MOVE_32_TO_32(&Len, &Table->Length);
-     Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Len)
-     {
-         /* Common subtable header */
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
--            Subtable->Header.Length, AcpiDmTableInfoAsfHdr);
-+      ACPI_MOVE_16_TO_16(&SubLen, &Subtable->Header.Length);
-+        Status = AcpiDmDumpTable (Len, Offset, Subtable,
-+            SubLen, AcpiDmTableInfoAsfHdr);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-@@ -146,8 +150,7 @@ AcpiDmDumpAsf (
-             return;
-         }
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
--            Subtable->Header.Length, InfoTable);
-+        Status = AcpiDmDumpTable (Len, Offset, Subtable, SubLen, InfoTable);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-@@ -163,7 +166,7 @@ AcpiDmDumpAsf (
-             for (i = 0; i < DataCount; i++)
-             {
-                 AcpiOsPrintf ("\n");
--                Status = AcpiDmDumpTable (Table->Length, DataOffset,
-+                Status = AcpiDmDumpTable (Len, DataOffset,
-                     DataTable, DataLength, DataInfoTable);
-                 if (ACPI_FAILURE (Status))
-                 {
-@@ -209,15 +212,14 @@ AcpiDmDumpAsf (
-         /* Point to next subtable */
--        if (!Subtable->Header.Length)
-+        if (!SubLen)
-         {
-             AcpiOsPrintf ("Invalid zero subtable header length\n");
-             return;
-         }
--        Offset += Subtable->Header.Length;
--        Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Subtable,
--            Subtable->Header.Length);
-+        Offset += SubLen;
-+        Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Subtable, SubLen);
-     }
- }
-@@ -241,12 +243,13 @@ AcpiDmDumpCpep (
- {
-     ACPI_STATUS             Status;
-     ACPI_CPEP_POLLING       *Subtable;
--    UINT32                  Length = Table->Length;
-+    UINT32                  Length;
-     UINT32                  Offset = sizeof (ACPI_TABLE_CPEP);
-     /* Main table */
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoCpep);
-     if (ACPI_FAILURE (Status))
-     {
-@@ -256,7 +259,7 @@ AcpiDmDumpCpep (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         AcpiOsPrintf ("\n");
-         Status = AcpiDmDumpTable (Length, Offset, Subtable,
-@@ -296,7 +299,10 @@ AcpiDmDumpCsrt (
-     ACPI_CSRT_GROUP         *Subtable;
-     ACPI_CSRT_SHARED_INFO   *SharedInfoTable;
-     ACPI_CSRT_DESCRIPTOR    *SubSubtable;
--    UINT32                  Length = Table->Length;
-+    UINT32                  Length;
-+    UINT32                  SubLength;
-+    UINT32                  SubSubLength;
-+    UINT32                  SharedInfoLength;
-     UINT32                  Offset = sizeof (ACPI_TABLE_CSRT);
-     UINT32                  SubOffset;
-     UINT32                  SubSubOffset;
-@@ -307,14 +313,16 @@ AcpiDmDumpCsrt (
-     /* Subtables (Resource Groups) */
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         /* Resource group subtable */
-         AcpiOsPrintf ("\n");
-+        ACPI_MOVE_32_TO_32(&SubLength, &Subtable->Length);
-         Status = AcpiDmDumpTable (Length, Offset, Subtable,
--            Subtable->Length, AcpiDmTableInfoCsrt0);
-+            SubLength, AcpiDmTableInfoCsrt0);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-@@ -334,19 +342,20 @@ AcpiDmDumpCsrt (
-             return;
-         }
--        SubOffset += Subtable->SharedInfoLength;
-+      ACPI_MOVE_32_TO_32(&SharedInfoLength, &Subtable->SharedInfoLength);
-+        SubOffset += SharedInfoLength;
-         /* Sub-Subtables (Resource Descriptors) */
-         SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table,
-             Offset + SubOffset);
--        while ((SubOffset < Subtable->Length) &&
--              ((Offset + SubOffset) < Table->Length))
-+        while ((SubOffset < SubLength) && ((Offset + SubOffset) < Length))
-         {
-             AcpiOsPrintf ("\n");
-+          ACPI_MOVE_32_TO_32(&SubSubLength, &SubSubtable->Length);
-             Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable,
--                SubSubtable->Length, AcpiDmTableInfoCsrt2);
-+                SubSubLength, AcpiDmTableInfoCsrt2);
-             if (ACPI_FAILURE (Status))
-             {
-                 return;
-@@ -356,7 +365,7 @@ AcpiDmDumpCsrt (
-             /* Resource-specific info buffer */
--            InfoLength = SubSubtable->Length - SubSubOffset;
-+            InfoLength = SubSubLength - SubSubOffset;
-             if (InfoLength)
-             {
-                 Status = AcpiDmDumpTable (Length,
-@@ -370,16 +379,15 @@ AcpiDmDumpCsrt (
-             /* Point to next sub-subtable */
--            SubOffset += SubSubtable->Length;
-+            SubOffset += SubSubLength;
-             SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubtable,
--                SubSubtable->Length);
-+                SubSubLength);
-         }
-         /* Point to next subtable */
--        Offset += Subtable->Length;
--        Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable,
--            Subtable->Length);
-+        Offset += SubLength;
-+        Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable, SubLength);
-     }
- }
-@@ -403,16 +411,20 @@ AcpiDmDumpDbg2 (
- {
-     ACPI_STATUS             Status;
-     ACPI_DBG2_DEVICE        *Subtable;
--    UINT32                  Length = Table->Length;
-+    UINT32                  Length;
-+    UINT16                  SubLength;
-     UINT32                  Offset = sizeof (ACPI_TABLE_DBG2);
-     UINT32                  i;
-     UINT32                  ArrayOffset;
-     UINT32                  AbsoluteOffset;
-     UINT8                   *Array;
-+    UINT16                Tmp16;
-+    UINT16                AlsoTmp16;
-     /* Main table */
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDbg2);
-     if (ACPI_FAILURE (Status))
-     {
-@@ -422,11 +434,12 @@ AcpiDmDumpDbg2 (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         AcpiOsPrintf ("\n");
-+        ACPI_MOVE_16_TO_16(&SubLength, &Subtable->Length);
-         Status = AcpiDmDumpTable (Length, Offset, Subtable,
--            Subtable->Length, AcpiDmTableInfoDbg2Device);
-+            SubLength, AcpiDmTableInfoDbg2Device);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-@@ -436,13 +449,13 @@ AcpiDmDumpDbg2 (
-         for (i = 0; i < Subtable->RegisterCount; i++)
-         {
--            ArrayOffset = Subtable->BaseAddressOffset +
--                (sizeof (ACPI_GENERIC_ADDRESS) * i);
-+          ACPI_MOVE_16_TO_16(&Tmp16, &Subtable->BaseAddressOffset);
-+            ArrayOffset = Tmp16 + (sizeof (ACPI_GENERIC_ADDRESS) * i);
-             AbsoluteOffset = Offset + ArrayOffset;
-             Array = (UINT8 *) Subtable + ArrayOffset;
-             Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
--                Subtable->Length, AcpiDmTableInfoDbg2Addr);
-+                SubLength, AcpiDmTableInfoDbg2Addr);
-             if (ACPI_FAILURE (Status))
-             {
-                 return;
-@@ -453,13 +466,13 @@ AcpiDmDumpDbg2 (
-         for (i = 0; i < Subtable->RegisterCount; i++)
-         {
--            ArrayOffset = Subtable->AddressSizeOffset +
--                (sizeof (UINT32) * i);
-+          ACPI_MOVE_16_TO_16(&Tmp16, &Subtable->AddressSizeOffset);
-+            ArrayOffset = Tmp16 + (sizeof (UINT32) * i);
-             AbsoluteOffset = Offset + ArrayOffset;
-             Array = (UINT8 *) Subtable + ArrayOffset;
-             Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
--                Subtable->Length, AcpiDmTableInfoDbg2Size);
-+                SubLength, AcpiDmTableInfoDbg2Size);
-             if (ACPI_FAILURE (Status))
-             {
-                 return;
-@@ -469,12 +482,13 @@ AcpiDmDumpDbg2 (
-         /* Dump the Namestring (required) */
-         AcpiOsPrintf ("\n");
--        ArrayOffset = Subtable->NamepathOffset;
-+      ACPI_MOVE_16_TO_16(&Tmp16, &Subtable->NamepathOffset);
-+        ArrayOffset = Tmp16;
-         AbsoluteOffset = Offset + ArrayOffset;
-         Array = (UINT8 *) Subtable + ArrayOffset;
-         Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
--            Subtable->Length, AcpiDmTableInfoDbg2Name);
-+            SubLength, AcpiDmTableInfoDbg2Name);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-@@ -484,9 +498,10 @@ AcpiDmDumpDbg2 (
-         if (Subtable->OemDataOffset)
-         {
--            Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset,
--                Table, Subtable->OemDataLength,
--                AcpiDmTableInfoDbg2OemData);
-+          ACPI_MOVE_16_TO_16(&Tmp16, &Subtable->OemDataOffset);
-+          ACPI_MOVE_16_TO_16(&AlsoTmp16, &Subtable->OemDataLength);
-+            Status = AcpiDmDumpTable (Length, Offset + Tmp16,
-+                Table, AlsoTmp16, AcpiDmTableInfoDbg2OemData);
-             if (ACPI_FAILURE (Status))
-             {
-                 return;
-@@ -495,9 +510,9 @@ AcpiDmDumpDbg2 (
-         /* Point to next subtable */
--        Offset += Subtable->Length;
-+        Offset += SubLength;
-         Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Subtable,
--            Subtable->Length);
-+            SubLength);
-     }
- }
-@@ -521,17 +536,20 @@ AcpiDmDumpDmar (
- {
-     ACPI_STATUS             Status;
-     ACPI_DMAR_HEADER        *Subtable;
--    UINT32                  Length = Table->Length;
-+    UINT32                  Length;
-+    UINT16                  SubLength;
-     UINT32                  Offset = sizeof (ACPI_TABLE_DMAR);
-     ACPI_DMTABLE_INFO       *InfoTable;
-     ACPI_DMAR_DEVICE_SCOPE  *ScopeTable;
-     UINT32                  ScopeOffset;
-     UINT8                   *PciPath;
-     UINT32                  PathOffset;
-+    UINT16                SubType;
-     /* Main table */
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDmar);
-     if (ACPI_FAILURE (Status))
-     {
-@@ -541,13 +559,14 @@ AcpiDmDumpDmar (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         /* Common subtable header */
-         AcpiOsPrintf ("\n");
-+      ACPI_MOVE_16_TO_16(&SubLength, &Subtable->Length);
-         Status = AcpiDmDumpTable (Length, Offset, Subtable,
--            Subtable->Length, AcpiDmTableInfoDmarHdr);
-+            SubLength, AcpiDmTableInfoDmarHdr);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-@@ -555,7 +574,8 @@ AcpiDmDumpDmar (
-         AcpiOsPrintf ("\n");
--        switch (Subtable->Type)
-+      ACPI_MOVE_16_TO_16(&SubType, &Subtable->Type);
-+        switch (SubType)
-         {
-         case ACPI_DMAR_TYPE_HARDWARE_UNIT:
-@@ -590,12 +610,12 @@ AcpiDmDumpDmar (
-         default:
-             AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n",
--                Subtable->Type);
-+                SubType);
-             return;
-         }
-         Status = AcpiDmDumpTable (Length, Offset, Subtable,
--            Subtable->Length, InfoTable);
-+            SubLength, InfoTable);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-@@ -604,8 +624,8 @@ AcpiDmDumpDmar (
-         /*
-          * Dump the optional device scope entries
-          */
--        if ((Subtable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
--            (Subtable->Type == ACPI_DMAR_TYPE_NAMESPACE))
-+        if ((SubType == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
-+            (SubType == ACPI_DMAR_TYPE_NAMESPACE))
-         {
-             /* These types do not support device scopes */
-@@ -613,7 +633,7 @@ AcpiDmDumpDmar (
-         }
-         ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable, ScopeOffset);
--        while (ScopeOffset < Subtable->Length)
-+        while (ScopeOffset < SubLength)
-         {
-             AcpiOsPrintf ("\n");
-             Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable,
-@@ -654,9 +674,8 @@ AcpiDmDumpDmar (
- NextSubtable:
-         /* Point to next subtable */
--        Offset += Subtable->Length;
--        Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable,
--            Subtable->Length);
-+        Offset += SubLength;
-+        Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable, SubLength);
-     }
- }
-@@ -683,12 +702,15 @@ AcpiDmDumpDrtm (
-     ACPI_DRTM_RESOURCE_LIST *DrtmRl;
-     ACPI_DRTM_DPS_ID        *DrtmDps;
-     UINT32                  Count;
-+    UINT32                  ValidatedCount;
-+    UINT32                  ResourceCount;
-+    UINT32                Length;
-     /* Main table */
--    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
--        AcpiDmTableInfoDrtm);
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-+    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoDrtm);
-     if (ACPI_FAILURE (Status))
-     {
-         return;
-@@ -702,7 +724,7 @@ AcpiDmDumpDrtm (
-     DrtmVtl = ACPI_ADD_PTR (ACPI_DRTM_VTABLE_LIST, Table, Offset);
-     AcpiOsPrintf ("\n");
--    Status = AcpiDmDumpTable (Table->Length, Offset,
-+    Status = AcpiDmDumpTable (Length, Offset,
-         DrtmVtl, ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables),
-         AcpiDmTableInfoDrtm0);
-     if (ACPI_FAILURE (Status))
-@@ -715,10 +737,11 @@ AcpiDmDumpDrtm (
-     /* Dump Validated table addresses */
-     Count = 0;
--    while ((Offset < Table->Length) &&
--            (DrtmVtl->ValidatedTableCount > Count))
-+    ACPI_MOVE_32_TO_32(&ValidatedCount, &DrtmVtl->ValidatedTableCount);
-+    while ((Offset < Length) &&
-+            (ValidatedCount > Count))
-     {
--        Status = AcpiDmDumpTable (Table->Length, Offset,
-+        Status = AcpiDmDumpTable (Length, Offset,
-             ACPI_ADD_PTR (void, Table, Offset), sizeof (UINT64),
-             AcpiDmTableInfoDrtm0a);
-         if (ACPI_FAILURE (Status))
-@@ -734,7 +757,7 @@ AcpiDmDumpDrtm (
-     DrtmRl = ACPI_ADD_PTR (ACPI_DRTM_RESOURCE_LIST, Table, Offset);
-     AcpiOsPrintf ("\n");
--    Status = AcpiDmDumpTable (Table->Length, Offset,
-+    Status = AcpiDmDumpTable (Length, Offset,
-         DrtmRl, ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources),
-         AcpiDmTableInfoDrtm1);
-     if (ACPI_FAILURE (Status))
-@@ -747,10 +770,11 @@ AcpiDmDumpDrtm (
-     /* Dump the Resource List */
-     Count = 0;
--    while ((Offset < Table->Length) &&
--           (DrtmRl->ResourceCount > Count))
-+    ACPI_MOVE_32_TO_32(&ResourceCount, &DrtmRl->ResourceCount);
-+    while ((Offset < Length) &&
-+           (ResourceCount > Count))
-     {
--        Status = AcpiDmDumpTable (Table->Length, Offset,
-+        Status = AcpiDmDumpTable (Length, Offset,
-             ACPI_ADD_PTR (void, Table, Offset),
-             sizeof (ACPI_DRTM_RESOURCE), AcpiDmTableInfoDrtm1a);
-         if (ACPI_FAILURE (Status))
-@@ -766,7 +790,7 @@ AcpiDmDumpDrtm (
-     DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset);
-     AcpiOsPrintf ("\n");
--    (void) AcpiDmDumpTable (Table->Length, Offset,
-+    (void) AcpiDmDumpTable (Length, Offset,
-         DrtmDps, sizeof (ACPI_DRTM_DPS_ID), AcpiDmTableInfoDrtm2);
- }
-@@ -790,12 +814,13 @@ AcpiDmDumpEinj (
- {
-     ACPI_STATUS             Status;
-     ACPI_WHEA_HEADER        *Subtable;
--    UINT32                  Length = Table->Length;
-+    UINT32                  Length;
-     UINT32                  Offset = sizeof (ACPI_TABLE_EINJ);
-     /* Main table */
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoEinj);
-     if (ACPI_FAILURE (Status))
-     {
-@@ -805,7 +830,7 @@ AcpiDmDumpEinj (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         AcpiOsPrintf ("\n");
-         Status = AcpiDmDumpTable (Length, Offset, Subtable,
-@@ -843,12 +868,13 @@ AcpiDmDumpErst (
- {
-     ACPI_STATUS             Status;
-     ACPI_WHEA_HEADER        *Subtable;
--    UINT32                  Length = Table->Length;
-+    UINT32                  Length;
-     UINT32                  Offset = sizeof (ACPI_TABLE_ERST);
-     /* Main table */
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoErst);
-     if (ACPI_FAILURE (Status))
-     {
-@@ -858,7 +884,7 @@ AcpiDmDumpErst (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         AcpiOsPrintf ("\n");
-         Status = AcpiDmDumpTable (Length, Offset, Subtable,
-@@ -896,17 +922,19 @@ AcpiDmDumpFpdt (
- {
-     ACPI_STATUS             Status;
-     ACPI_FPDT_HEADER        *Subtable;
--    UINT32                  Length = Table->Length;
-+    UINT32                  Length;
-     UINT32                  Offset = sizeof (ACPI_TABLE_FPDT);
-     ACPI_DMTABLE_INFO       *InfoTable;
-+    UINT16                Type;
-     /* There is no main table (other than the standard ACPI header) */
-     /* Subtables */
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         /* Common subtable header */
-@@ -918,7 +946,8 @@ AcpiDmDumpFpdt (
-             return;
-         }
--        switch (Subtable->Type)
-+      ACPI_MOVE_16_TO_16(&Type, &Subtable->Type);
-+        switch (Type)
-         {
-         case ACPI_FPDT_TYPE_BOOT:
-@@ -932,8 +961,7 @@ AcpiDmDumpFpdt (
-         default:
--            AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n",
--                Subtable->Type);
-+            AcpiOsPrintf ("\n**** Unknown FPDT subtable type 0x%X\n\n", Type);
-             /* Attempt to continue */
-@@ -981,16 +1009,19 @@ AcpiDmDumpGtdt (
- {
-     ACPI_STATUS             Status;
-     ACPI_GTDT_HEADER        *Subtable;
--    UINT32                  Length = Table->Length;
-+    UINT32                  Length;
-+    UINT16                  SubLength;
-     UINT32                  Offset = sizeof (ACPI_TABLE_GTDT);
-     ACPI_DMTABLE_INFO       *InfoTable;
-     UINT32                  SubtableLength;
-     UINT32                  GtCount;
-+    UINT32                  Tmp32;
-     ACPI_GTDT_TIMER_ENTRY   *GtxTable;
-     /* Main table */
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt);
-     if (ACPI_FAILURE (Status))
-     {
-@@ -1017,7 +1048,7 @@ AcpiDmDumpGtdt (
-     /* Subtables */
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         /* Common subtable header */
-@@ -1035,8 +1066,9 @@ AcpiDmDumpGtdt (
-         case ACPI_GTDT_TYPE_TIMER_BLOCK:
-             SubtableLength = sizeof (ACPI_GTDT_TIMER_BLOCK);
--            GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
-+            Tmp32 = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
-                 Subtable))->TimerCount;
-+          ACPI_MOVE_32_TO_32(&GtCount, &Tmp32);
-             InfoTable = AcpiDmTableInfoGtdt0;
-             break;
-@@ -1057,8 +1089,9 @@ AcpiDmDumpGtdt (
-             return;
-         }
-+      ACPI_MOVE_16_TO_16(&SubLength, &Subtable->Length);
-         Status = AcpiDmDumpTable (Length, Offset, Subtable,
--            Subtable->Length, InfoTable);
-+            SubLength, InfoTable);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-@@ -1117,16 +1150,18 @@ AcpiDmDumpHest (
- {
-     ACPI_STATUS             Status;
-     ACPI_HEST_HEADER        *Subtable;
--    UINT32                  Length = Table->Length;
-+    UINT32                  Length;
-     UINT32                  Offset = sizeof (ACPI_TABLE_HEST);
-     ACPI_DMTABLE_INFO       *InfoTable;
-     UINT32                  SubtableLength;
-     UINT32                  BankCount;
-     ACPI_HEST_IA_ERROR_BANK *BankTable;
-+    UINT16                SubType;
-     /* Main table */
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHest);
-     if (ACPI_FAILURE (Status))
-     {
-@@ -1136,10 +1171,11 @@ AcpiDmDumpHest (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         BankCount = 0;
--        switch (Subtable->Type)
-+      ACPI_MOVE_16_TO_16(&SubType, &Subtable->Type);
-+        switch (SubType)
-         {
-         case ACPI_HEST_TYPE_IA32_CHECK:
-Index: acpica-unix-20209326/source/common/dmtbdump2.c
-===================================================================
---- acpica-unix-20209326.orig/source/common/dmtbdump2.c
-+++ acpica-unix-20209326/source/common/dmtbdump2.c
-@@ -75,16 +75,23 @@ AcpiDmDumpIort (
-     ACPI_IORT_SMMU          *IortSmmu = NULL;
-     UINT32                  Offset;
-     UINT32                  NodeOffset;
-+    UINT16                  NodeLength;
-     UINT32                  Length;
-     ACPI_DMTABLE_INFO       *InfoTable;
-     char                    *String;
-     UINT32                  i;
-     UINT32                  MappingByteLength;
-+    UINT32                  TableLen;
-+    UINT32                  ItsCount;
-+    UINT32                  MappingCount;
-+    UINT32                  CtxIntCount;
-+    UINT32                  PmuIntCount;
-     /* Main table */
--    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIort);
-+    ACPI_MOVE_32_TO_32(&TableLen, &Table->Length);
-+    Status = AcpiDmDumpTable (TableLen, 0, Table, 0, AcpiDmTableInfoIort);
-     if (ACPI_FAILURE (Status))
-     {
-         return;
-@@ -95,18 +102,19 @@ AcpiDmDumpIort (
-     /* Dump the OptionalPadding (optional) */
--    if (Iort->NodeOffset > Offset)
-+    ACPI_MOVE_32_TO_32(&NodeOffset, &Iort->NodeOffset);
-+    if (NodeOffset > Offset)
-     {
--        Status = AcpiDmDumpTable (Table->Length, Offset, Table,
--            Iort->NodeOffset - Offset, AcpiDmTableInfoIortPad);
-+        Status = AcpiDmDumpTable (TableLen, Offset, Table,
-+            NodeOffset - Offset, AcpiDmTableInfoIortPad);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-         }
-     }
--    Offset = Iort->NodeOffset;
--    while (Offset < Table->Length)
-+    ACPI_MOVE_32_TO_32(&Offset, &Iort->NodeOffset);
-+    while (Offset < TableLen)
-     {
-         /* Common subtable header */
-@@ -142,7 +150,8 @@ AcpiDmDumpIort (
-         case ACPI_IORT_NODE_PCI_ROOT_COMPLEX:
-             InfoTable = AcpiDmTableInfoIort2;
--            Length = IortNode->Length - NodeOffset;
-+          ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
-+            Length = NodeLength - NodeOffset;
-             break;
-         case ACPI_IORT_NODE_SMMU:
-@@ -155,7 +164,8 @@ AcpiDmDumpIort (
-         case ACPI_IORT_NODE_SMMU_V3:
-             InfoTable = AcpiDmTableInfoIort4;
--            Length = IortNode->Length - NodeOffset;
-+          ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
-+            Length = NodeLength - NodeOffset;
-             break;
-         case ACPI_IORT_NODE_PMCG:
-@@ -171,7 +181,8 @@ AcpiDmDumpIort (
-             /* Attempt to continue */
--            if (!IortNode->Length)
-+          ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
-+            if (!NodeLength)
-             {
-                 AcpiOsPrintf ("Invalid zero length IORT node\n");
-                 return;
-@@ -182,7 +193,7 @@ AcpiDmDumpIort (
-         /* Dump the node subtable header */
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
-+        Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
-             ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
-             Length, InfoTable);
-         if (ACPI_FAILURE (Status))
-@@ -202,9 +213,10 @@ AcpiDmDumpIort (
-             if (IortItsGroup)
-             {
--                for (i = 0; i < IortItsGroup->ItsCount; i++)
-+              ACPI_MOVE_32_TO_32(&ItsCount, &IortItsGroup->ItsCount);
-+                for (i = 0; i < ItsCount; i++)
-                 {
--                    Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
-+                    Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
-                         ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
-                         4, AcpiDmTableInfoIort0a);
-                     if (ACPI_FAILURE (Status))
-@@ -221,12 +233,13 @@ AcpiDmDumpIort (
-             /* Dump the Padding (optional) */
--            if (IortNode->Length > NodeOffset)
-+          ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
-+            if (NodeLength > NodeOffset)
-             {
-                 MappingByteLength =
-                     IortNode->MappingCount * sizeof (ACPI_IORT_ID_MAPPING);
--                Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
--                    Table, IortNode->Length - NodeOffset - MappingByteLength,
-+                Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
-+                    Table, NodeLength - NodeOffset - MappingByteLength,
-                     AcpiDmTableInfoIort1a);
-                 if (ACPI_FAILURE (Status))
-                 {
-@@ -244,8 +257,8 @@ AcpiDmDumpIort (
-             if (IortSmmu)
-             {
-                 Length = 2 * sizeof (UINT64);
--                NodeOffset = IortSmmu->GlobalInterruptOffset;
--                Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
-+                ACPI_MOVE_32_TO_32(&NodeOffset, &IortSmmu->GlobalInterruptOffset);
-+                Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
-                     ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
-                     Length, AcpiDmTableInfoIort3a);
-                 if (ACPI_FAILURE (Status))
-@@ -253,10 +266,11 @@ AcpiDmDumpIort (
-                     return;
-                 }
--                NodeOffset = IortSmmu->ContextInterruptOffset;
--                for (i = 0; i < IortSmmu->ContextInterruptCount; i++)
-+                ACPI_MOVE_32_TO_32(&NodeOffset, &IortSmmu->ContextInterruptOffset);
-+                ACPI_MOVE_32_TO_32(&CtxIntCount, &IortSmmu->ContextInterruptCount);
-+                for (i = 0; i < CtxIntCount; i++)
-                 {
--                    Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
-+                    Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
-                         ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
-                         8, AcpiDmTableInfoIort3b);
-                     if (ACPI_FAILURE (Status))
-@@ -267,10 +281,11 @@ AcpiDmDumpIort (
-                     NodeOffset += 8;
-                 }
--                NodeOffset = IortSmmu->PmuInterruptOffset;
--                for (i = 0; i < IortSmmu->PmuInterruptCount; i++)
-+                ACPI_MOVE_32_TO_32(&NodeOffset, &IortSmmu->PmuInterruptOffset);
-+                ACPI_MOVE_32_TO_32(&PmuIntCount, &IortSmmu->PmuInterruptCount);
-+                for (i = 0; i < PmuIntCount; i++)
-                 {
--                    Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
-+                    Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
-                         ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
-                         8, AcpiDmTableInfoIort3c);
-                     if (ACPI_FAILURE (Status))
-@@ -290,12 +305,13 @@ AcpiDmDumpIort (
-         /* Dump the ID mappings */
--        NodeOffset = IortNode->MappingOffset;
--        for (i = 0; i < IortNode->MappingCount; i++)
-+        ACPI_MOVE_32_TO_32(&NodeOffset, &IortNode->MappingOffset);
-+        ACPI_MOVE_32_TO_32(&MappingCount, &IortNode->MappingCount);
-+        for (i = 0; i < MappingCount; i++)
-         {
-             AcpiOsPrintf ("\n");
-             Length = sizeof (ACPI_IORT_ID_MAPPING);
--            Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
-+            Status = AcpiDmDumpTable (TableLen, Offset + NodeOffset,
-                 ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
-                 Length, AcpiDmTableInfoIortMap);
-             if (ACPI_FAILURE (Status))
-@@ -309,7 +325,8 @@ AcpiDmDumpIort (
- NextSubtable:
-         /* Point to next node subtable */
--        Offset += IortNode->Length;
-+        ACPI_MOVE_16_TO_16(&NodeLength, &IortNode->Length);
-+        Offset += NodeLength;
-     }
- }
-@@ -340,11 +357,14 @@ AcpiDmDumpIvrs (
-     ACPI_IVRS_DE_HEADER     *DeviceEntry;
-     ACPI_IVRS_HEADER        *Subtable;
-     ACPI_DMTABLE_INFO       *InfoTable;
-+    UINT32                Length;
-+    UINT16                SubLength;
-     /* Main table */
--    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs);
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-+    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoIvrs);
-     if (ACPI_FAILURE (Status))
-     {
-         return;
-@@ -353,13 +373,14 @@ AcpiDmDumpIvrs (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         /* Common subtable header */
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
--            Subtable->Length, AcpiDmTableInfoIvrsHdr);
-+        ACPI_MOVE_16_TO_16(&SubLength, &Subtable->Length);
-+        Status = AcpiDmDumpTable (Length, Offset, Subtable,
-+            SubLength, AcpiDmTableInfoIvrsHdr);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-@@ -391,7 +412,7 @@ AcpiDmDumpIvrs (
-             /* Attempt to continue */
--            if (!Subtable->Length)
-+            if (!SubLength)
-             {
-                 AcpiOsPrintf ("Invalid zero length subtable\n");
-                 return;
-@@ -402,8 +423,8 @@ AcpiDmDumpIvrs (
-         /* Dump the subtable */
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
--            Subtable->Length, InfoTable);
-+        Status = AcpiDmDumpTable (Length, Offset, Subtable,
-+            SubLength, InfoTable);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-@@ -427,7 +448,7 @@ AcpiDmDumpIvrs (
-                     sizeof (ACPI_IVRS_HARDWARE2));
-             }
--            while (EntryOffset < (Offset + Subtable->Length))
-+            while (EntryOffset < (Offset + SubLength))
-             {
-                 AcpiOsPrintf ("\n");
-                 /*
-@@ -489,7 +510,7 @@ AcpiDmDumpIvrs (
-                 /* Dump the Device Entry */
--                Status = AcpiDmDumpTable (Table->Length, EntryOffset,
-+                Status = AcpiDmDumpTable (Length, EntryOffset,
-                     DeviceEntry, EntryLength, InfoTable);
-                 if (ACPI_FAILURE (Status))
-                 {
-@@ -505,8 +526,8 @@ AcpiDmDumpIvrs (
- NextSubtable:
-         /* Point to next subtable */
--        Offset += Subtable->Length;
--        Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, Subtable->Length);
-+        Offset += SubLength;
-+        Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, SubLength);
-     }
- }
-@@ -532,7 +553,7 @@ AcpiDmDumpLpit (
- {
-     ACPI_STATUS             Status;
-     ACPI_LPIT_HEADER        *Subtable;
--    UINT32                  Length = Table->Length;
-+    UINT32                  Length;
-     UINT32                  Offset = sizeof (ACPI_TABLE_LPIT);
-     ACPI_DMTABLE_INFO       *InfoTable;
-     UINT32                  SubtableLength;
-@@ -540,8 +561,9 @@ AcpiDmDumpLpit (
-     /* Subtables */
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         /* Common subtable header */
-@@ -605,13 +627,14 @@ AcpiDmDumpMadt (
- {
-     ACPI_STATUS             Status;
-     ACPI_SUBTABLE_HEADER    *Subtable;
--    UINT32                  Length = Table->Length;
-+    UINT32                  Length;
-     UINT32                  Offset = sizeof (ACPI_TABLE_MADT);
-     ACPI_DMTABLE_INFO       *InfoTable;
-     /* Main table */
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMadt);
-     if (ACPI_FAILURE (Status))
-     {
-@@ -621,7 +644,7 @@ AcpiDmDumpMadt (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         /* Common subtable header */
-@@ -767,11 +790,13 @@ AcpiDmDumpMcfg (
-     ACPI_STATUS             Status;
-     UINT32                  Offset = sizeof (ACPI_TABLE_MCFG);
-     ACPI_MCFG_ALLOCATION    *Subtable;
-+    UINT32                Len;
-     /* Main table */
--    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg);
-+    ACPI_MOVE_32_TO_32(&Len, &Table->Length);
-+    Status = AcpiDmDumpTable (Len, 0, Table, 0, AcpiDmTableInfoMcfg);
-     if (ACPI_FAILURE (Status))
-     {
-         return;
-@@ -780,17 +805,17 @@ AcpiDmDumpMcfg (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Len)
-     {
--        if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length)
-+        if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Len)
-         {
-             AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n",
--                (UINT32) sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length));
-+                (UINT32) sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Len));
-             return;
-         }
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
-+        Status = AcpiDmDumpTable (Len, Offset, Subtable,
-             sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0);
-         if (ACPI_FAILURE (Status))
-         {
-@@ -824,6 +849,7 @@ AcpiDmDumpMpst (
- {
-     ACPI_STATUS             Status;
-     UINT32                  Offset = sizeof (ACPI_TABLE_MPST);
-+    ACPI_TABLE_MPST       *Mpst;
-     ACPI_MPST_POWER_NODE    *Subtable0;
-     ACPI_MPST_POWER_STATE   *Subtable0A;
-     ACPI_MPST_COMPONENT     *Subtable0B;
-@@ -832,11 +858,13 @@ AcpiDmDumpMpst (
-     UINT16                  SubtableCount;
-     UINT32                  PowerStateCount;
-     UINT32                  ComponentCount;
-+    UINT32                Length;
-     /* Main table */
--    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst);
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-+    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMpst);
-     if (ACPI_FAILURE (Status))
-     {
-         return;
-@@ -844,13 +872,14 @@ AcpiDmDumpMpst (
-     /* Subtable: Memory Power Node(s) */
--    SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount;
-+    Mpst = ACPI_CAST_PTR (ACPI_TABLE_MPST, Table);
-+    ACPI_MOVE_16_TO_16(&SubtableCount, &Mpst->PowerNodeCount);
-     Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset);
--    while ((Offset < Table->Length) && SubtableCount)
-+    while ((Offset < Length) && SubtableCount)
-     {
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0,
-+        Status = AcpiDmDumpTable (Length, Offset, Subtable0,
-             sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0);
-         if (ACPI_FAILURE (Status))
-         {
-@@ -859,8 +888,8 @@ AcpiDmDumpMpst (
-         /* Extract the sub-subtable counts */
--        PowerStateCount = Subtable0->NumPowerStates;
--        ComponentCount = Subtable0->NumPhysicalComponents;
-+        ACPI_MOVE_32_TO_32(&PowerStateCount, &Subtable0->NumPowerStates);
-+        ACPI_MOVE_32_TO_32(&ComponentCount, &Subtable0->NumPhysicalComponents);
-         Offset += sizeof (ACPI_MPST_POWER_NODE);
-         /* Sub-subtables - Memory Power State Structure(s) */
-@@ -871,7 +900,7 @@ AcpiDmDumpMpst (
-         while (PowerStateCount)
-         {
-             AcpiOsPrintf ("\n");
--            Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0A,
-+            Status = AcpiDmDumpTable (Length, Offset, Subtable0A,
-                 sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A);
-             if (ACPI_FAILURE (Status))
-             {
-@@ -881,7 +910,7 @@ AcpiDmDumpMpst (
-             Subtable0A++;
-             PowerStateCount--;
-             Offset += sizeof (ACPI_MPST_POWER_STATE);
--       }
-+        }
-         /* Sub-subtables - Physical Component ID Structure(s) */
-@@ -894,7 +923,7 @@ AcpiDmDumpMpst (
-         while (ComponentCount)
-         {
--            Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0B,
-+            Status = AcpiDmDumpTable (Length, Offset, Subtable0B,
-                 sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B);
-             if (ACPI_FAILURE (Status))
-             {
-@@ -909,17 +938,19 @@ AcpiDmDumpMpst (
-         /* Point to next Memory Power Node subtable */
-         SubtableCount--;
-+        ACPI_MOVE_32_TO_32(&PowerStateCount, &Subtable0->NumPowerStates);
-+        ACPI_MOVE_32_TO_32(&ComponentCount, &Subtable0->NumPhysicalComponents);
-         Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Subtable0,
-             sizeof (ACPI_MPST_POWER_NODE) +
--            (sizeof (ACPI_MPST_POWER_STATE) * Subtable0->NumPowerStates) +
--            (sizeof (ACPI_MPST_COMPONENT) * Subtable0->NumPhysicalComponents));
-+            (sizeof (ACPI_MPST_POWER_STATE) * PowerStateCount) +
-+            (sizeof (ACPI_MPST_COMPONENT) * ComponentCount));
-     }
-     /* Subtable: Count of Memory Power State Characteristic structures */
-     AcpiOsPrintf ("\n");
-     Subtable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable0);
--    Status = AcpiDmDumpTable (Table->Length, Offset, Subtable1,
-+    Status = AcpiDmDumpTable (Length, Offset, Subtable1,
-         sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1);
-     if (ACPI_FAILURE (Status))
-     {
-@@ -934,10 +965,10 @@ AcpiDmDumpMpst (
-     Subtable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, Subtable1,
-         sizeof (ACPI_MPST_DATA_HDR));
--    while ((Offset < Table->Length) && SubtableCount)
-+    while ((Offset < Length) && SubtableCount)
-     {
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable2,
-+        Status = AcpiDmDumpTable (Length, Offset, Subtable2,
-             sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2);
-         if (ACPI_FAILURE (Status))
-         {
-@@ -970,11 +1001,13 @@ AcpiDmDumpMsct (
-     ACPI_STATUS             Status;
-     UINT32                  Offset = sizeof (ACPI_TABLE_MSCT);
-     ACPI_MSCT_PROXIMITY     *Subtable;
-+    UINT32                Length;
-     /* Main table */
--    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct);
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-+    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMsct);
-     if (ACPI_FAILURE (Status))
-     {
-         return;
-@@ -983,12 +1016,12 @@ AcpiDmDumpMsct (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         /* Common subtable header */
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
-+        Status = AcpiDmDumpTable (Length, Offset, Subtable,
-             sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0);
-         if (ACPI_FAILURE (Status))
-         {
-@@ -1023,11 +1056,13 @@ AcpiDmDumpMtmr (
-     ACPI_STATUS             Status;
-     UINT32                  Offset = sizeof (ACPI_TABLE_MTMR);
-     ACPI_MTMR_ENTRY         *Subtable;
-+    UINT32                Length;
-     /* Main table */
--    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMtmr);
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-+    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoMtmr);
-     if (ACPI_FAILURE (Status))
-     {
-         return;
-@@ -1036,12 +1071,12 @@ AcpiDmDumpMtmr (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_MTMR_ENTRY, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         /* Common subtable header */
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
-+        Status = AcpiDmDumpTable (Length, Offset, Subtable,
-             sizeof (ACPI_MTMR_ENTRY), AcpiDmTableInfoMtmr0);
-         if (ACPI_FAILURE (Status))
-         {
-@@ -1083,11 +1118,17 @@ AcpiDmDumpNfit (
-     ACPI_NFIT_SMBIOS        *SmbiosInfo = NULL;
-     ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL;
-     UINT32                  i;
-+    UINT32                  TableLength;
-+    UINT16                  SubLength;
-+    UINT16                  SubType;
-+    UINT32                  Count;
-+    UINT16                  Count16;
-     /* Main table */
--    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoNfit);
-+    ACPI_MOVE_32_TO_32(&TableLength, &Table->Length);
-+    Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoNfit);
-     if (ACPI_FAILURE (Status))
-     {
-         return;
-@@ -1096,19 +1137,21 @@ AcpiDmDumpNfit (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < TableLength)
-     {
-         /* NFIT subtable header */
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
--            Subtable->Length, AcpiDmTableInfoNfitHdr);
-+      ACPI_MOVE_16_TO_16(&SubLength, &Subtable->Length);
-+        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
-+            SubLength, AcpiDmTableInfoNfitHdr);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-         }
--        switch (Subtable->Type)
-+      ACPI_MOVE_16_TO_16(&SubType, &Subtable->Type);
-+        switch (SubType)
-         {
-         case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
-@@ -1163,7 +1206,7 @@ AcpiDmDumpNfit (
-             /* Attempt to continue */
--            if (!Subtable->Length)
-+            if (!SubLength)
-             {
-                 AcpiOsPrintf ("Invalid zero length subtable\n");
-                 return;
-@@ -1172,8 +1215,8 @@ AcpiDmDumpNfit (
-         }
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
--            Subtable->Length, InfoTable);
-+        Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
-+            SubLength, InfoTable);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-@@ -1181,14 +1224,15 @@ AcpiDmDumpNfit (
-         /* Per-subtable variable-length fields */
--        switch (Subtable->Type)
-+        switch (SubType)
-         {
-         case ACPI_NFIT_TYPE_INTERLEAVE:
-             Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable);
--            for (i = 0; i < Interleave->LineCount; i++)
-+          ACPI_MOVE_32_TO_32(&Count, &Interleave->LineCount);
-+            for (i = 0; i < Count; i++)
-             {
--                Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset,
-+                Status = AcpiDmDumpTable (TableLength, Offset + FieldOffset,
-                     &Interleave->LineOffset[i],
-                     sizeof (UINT32), AcpiDmTableInfoNfit2a);
-                 if (ACPI_FAILURE (Status))
-@@ -1202,12 +1246,11 @@ AcpiDmDumpNfit (
-         case ACPI_NFIT_TYPE_SMBIOS:
--            Length = Subtable->Length -
--                sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8);
-+            Length = SubLength - sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8);
-             if (Length)
-             {
--                Status = AcpiDmDumpTable (Table->Length,
-+                Status = AcpiDmDumpTable (TableLength,
-                     sizeof (ACPI_NFIT_SMBIOS) - sizeof (UINT8),
-                     SmbiosInfo,
-                     Length, AcpiDmTableInfoNfit3a);
-@@ -1222,9 +1265,10 @@ AcpiDmDumpNfit (
-         case ACPI_NFIT_TYPE_FLUSH_ADDRESS:
-             Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable);
--            for (i = 0; i < Hint->HintCount; i++)
-+          ACPI_MOVE_16_TO_16(&Count16, &Hint->HintCount);
-+            for (i = 0; i < Count16; i++)
-             {
--                Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset,
-+                Status = AcpiDmDumpTable (TableLength, Offset + FieldOffset,
-                     &Hint->HintAddress[i],
-                     sizeof (UINT64), AcpiDmTableInfoNfit6a);
-                 if (ACPI_FAILURE (Status))
-@@ -1243,8 +1287,8 @@ AcpiDmDumpNfit (
- NextSubtable:
-         /* Point to next subtable */
--        Offset += Subtable->Length;
--        Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, Subtable->Length);
-+        Offset += SubLength;
-+        Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, SubLength);
-     }
- }
-@@ -1269,12 +1313,13 @@ AcpiDmDumpPcct (
-     ACPI_STATUS             Status;
-     ACPI_PCCT_SUBSPACE      *Subtable;
-     ACPI_DMTABLE_INFO       *InfoTable;
--    UINT32                  Length = Table->Length;
-+    UINT32                  Length;
-     UINT32                  Offset = sizeof (ACPI_TABLE_PCCT);
-     /* Main table */
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct);
-     if (ACPI_FAILURE (Status))
-     {
-@@ -1284,7 +1329,7 @@ AcpiDmDumpPcct (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         /* Common subtable header */
-@@ -1424,16 +1469,21 @@ AcpiDmDumpPmtt (
-     ACPI_PMTT_HEADER        *MemSubtable;
-     ACPI_PMTT_HEADER        *DimmSubtable;
-     ACPI_PMTT_DOMAIN        *DomainArray;
--    UINT32                  Length = Table->Length;
-+    UINT32                  Length;
-     UINT32                  Offset = sizeof (ACPI_TABLE_PMTT);
-     UINT32                  MemOffset;
-     UINT32                  DimmOffset;
-     UINT32                  DomainOffset;
--    UINT32                  DomainCount;
-+    UINT16                  DomainCount;
-+    UINT16                SubLength;
-+    UINT16                Tmp16;
-+    UINT16                MemLength;
-+    UINT16                DimmLength;
-     /* Main table */
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt);
-     if (ACPI_FAILURE (Status))
-     {
-@@ -1443,13 +1493,14 @@ AcpiDmDumpPmtt (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         /* Common subtable header */
-         AcpiOsPrintf ("\n");
-+        ACPI_MOVE_16_TO_16(&SubLength, &Subtable->Length);
-         Status = AcpiDmDumpTable (Length, Offset, Subtable,
--            Subtable->Length, AcpiDmTableInfoPmttHdr);
-+            SubLength, AcpiDmTableInfoPmttHdr);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-@@ -1468,7 +1519,7 @@ AcpiDmDumpPmtt (
-         /* Dump the fixed-length portion of the subtable */
-         Status = AcpiDmDumpTable (Length, Offset, Subtable,
--            Subtable->Length, AcpiDmTableInfoPmtt0);
-+            SubLength, AcpiDmTableInfoPmtt0);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-@@ -1480,15 +1531,16 @@ AcpiDmDumpPmtt (
-         MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Subtable,
-             sizeof (ACPI_PMTT_SOCKET));
--        while (((Offset + MemOffset) < Table->Length) &&
--            (MemOffset < Subtable->Length))
-+        while (((Offset + MemOffset) < Length) &&
-+            (MemOffset < SubLength))
-         {
-             /* Common subtable header */
-             AcpiOsPrintf ("\n");
-+          ACPI_MOVE_16_TO_16(&MemLength, &MemSubtable->Length);
-             Status = AcpiDmDumpTable (Length,
-                 Offset + MemOffset, MemSubtable,
--                MemSubtable->Length, AcpiDmTableInfoPmttHdr);
-+                MemLength, AcpiDmTableInfoPmttHdr);
-             if (ACPI_FAILURE (Status))
-             {
-                 return;
-@@ -1508,7 +1560,7 @@ AcpiDmDumpPmtt (
-             Status = AcpiDmDumpTable (Length,
-                 Offset + MemOffset, MemSubtable,
--                MemSubtable->Length, AcpiDmTableInfoPmtt1);
-+                MemLength, AcpiDmTableInfoPmtt1);
-             if (ACPI_FAILURE (Status))
-             {
-                 return;
-@@ -1516,13 +1568,14 @@ AcpiDmDumpPmtt (
-             /* Walk the variable count of proximity domains */
--            DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubtable)->DomainCount;
-+          Tmp16 = ((ACPI_PMTT_CONTROLLER *) MemSubtable)->DomainCount;
-+            ACPI_MOVE_16_TO_16(&DomainCount, &Tmp16);
-             DomainOffset = sizeof (ACPI_PMTT_CONTROLLER);
-             DomainArray = ACPI_ADD_PTR (ACPI_PMTT_DOMAIN, MemSubtable,
-                 sizeof (ACPI_PMTT_CONTROLLER));
--            while (((Offset + MemOffset + DomainOffset) < Table->Length) &&
--                ((MemOffset + DomainOffset) < Subtable->Length) &&
-+            while (((Offset + MemOffset + DomainOffset) < Length) &&
-+                ((MemOffset + DomainOffset) < SubLength) &&
-                 DomainCount)
-             {
-                 Status = AcpiDmDumpTable (Length,
-@@ -1550,15 +1603,16 @@ AcpiDmDumpPmtt (
-             DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubtable,
-                 DomainOffset);
--            while (((Offset + MemOffset + DimmOffset) < Table->Length) &&
--                (DimmOffset < MemSubtable->Length))
-+            while (((Offset + MemOffset + DimmOffset) < Length) &&
-+                (DimmOffset < MemLength))
-             {
-                 /* Common subtable header */
-                 AcpiOsPrintf ("\n");
-+              ACPI_MOVE_16_TO_16(&DimmLength, &DimmSubtable->Length);
-                 Status = AcpiDmDumpTable (Length,
-                     Offset + MemOffset + DimmOffset, DimmSubtable,
--                    DimmSubtable->Length, AcpiDmTableInfoPmttHdr);
-+                    DimmLength, AcpiDmTableInfoPmttHdr);
-                 if (ACPI_FAILURE (Status))
-                 {
-                     return;
-@@ -1578,7 +1632,7 @@ AcpiDmDumpPmtt (
-                 Status = AcpiDmDumpTable (Length,
-                     Offset + MemOffset + DimmOffset, DimmSubtable,
--                    DimmSubtable->Length, AcpiDmTableInfoPmtt2);
-+                    DimmLength, AcpiDmTableInfoPmtt2);
-                 if (ACPI_FAILURE (Status))
-                 {
-                     return;
-@@ -1586,23 +1640,22 @@ AcpiDmDumpPmtt (
-                 /* Point to next DIMM subtable */
--                DimmOffset += DimmSubtable->Length;
-+                DimmOffset += DimmLength;
-                 DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
--                    DimmSubtable, DimmSubtable->Length);
-+                    DimmSubtable, DimmLength);
-             }
-             /* Point to next Controller subtable */
--            MemOffset += MemSubtable->Length;
-+            MemOffset += MemLength;
-             MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
--                MemSubtable, MemSubtable->Length);
-+                MemSubtable, MemLength);
-         }
-         /* Point to next Socket subtable */
--        Offset += Subtable->Length;
--        Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
--            Subtable, Subtable->Length);
-+        Offset += SubLength;
-+        Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Subtable, SubLength);
-     }
- }
-@@ -1763,6 +1816,8 @@ AcpiDmDumpS3pt (
-     ACPI_FPDT_HEADER        *Subtable;
-     ACPI_DMTABLE_INFO       *InfoTable;
-     ACPI_TABLE_S3PT         *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables);
-+    UINT32                Length;
-+    UINT16                  SubType;
-     /* Main table */
-@@ -1773,20 +1828,22 @@ AcpiDmDumpS3pt (
-         return 0;
-     }
-+    ACPI_MOVE_32_TO_32(&Length, &S3ptTable->Length);
-     Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset);
--    while (Offset < S3ptTable->Length)
-+    while (Offset < Length)
-     {
-         /* Common subtable header */
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable,
-+        Status = AcpiDmDumpTable (Length, Offset, Subtable,
-             Subtable->Length, AcpiDmTableInfoS3ptHdr);
-         if (ACPI_FAILURE (Status))
-         {
-             return 0;
-         }
--        switch (Subtable->Type)
-+        ACPI_MOVE_16_TO_16(&SubType, &Subtable->Type);
-+        switch (SubType)
-         {
-         case ACPI_S3PT_TYPE_RESUME:
-@@ -1801,7 +1858,7 @@ AcpiDmDumpS3pt (
-         default:
-             AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n",
--                Subtable->Type);
-+                SubType);
-             /* Attempt to continue */
-@@ -1814,7 +1871,7 @@ AcpiDmDumpS3pt (
-         }
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable,
-+        Status = AcpiDmDumpTable (Length, Offset, Subtable,
-             Subtable->Length, InfoTable);
-         if (ACPI_FAILURE (Status))
-         {
-Index: acpica-unix-20191213/source/common/dmtbdump3.c
-===================================================================
---- acpica-unix-20191213.orig/source/common/dmtbdump3.c
-+++ acpica-unix-20191213/source/common/dmtbdump3.c
-@@ -68,9 +68,11 @@ void
- AcpiDmDumpSlic (
-     ACPI_TABLE_HEADER       *Table)
- {
-+    UINT32    Length;
--    (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table,
--        Table->Length - sizeof (*Table), AcpiDmTableInfoSlic);
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-+    (void) AcpiDmDumpTable (Length, sizeof (ACPI_TABLE_HEADER), Table,
-+        Length - sizeof (*Table), AcpiDmTableInfoSlic);
- }
-@@ -93,14 +95,17 @@ AcpiDmDumpSlit (
-     ACPI_STATUS             Status;
-     UINT32                  Offset;
-     UINT8                   *Row;
--    UINT32                  Localities;
-+    UINT64                  Localities;
-     UINT32                  i;
-     UINT32                  j;
-+    UINT32                Length;
-+    UINT64                  Tmp64;
-     /* Main table */
--    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit);
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-+    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSlit);
-     if (ACPI_FAILURE (Status))
-     {
-         return;
-@@ -108,7 +113,8 @@ AcpiDmDumpSlit (
-     /* Display the Locality NxN Matrix */
--    Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount;
-+    Tmp64 = (UINT64) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount;
-+    ACPI_MOVE_64_TO_64(&Localities, &Tmp64);
-     Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]);
-     Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry;
-@@ -121,7 +127,7 @@ AcpiDmDumpSlit (
-         {
-             /* Check for beyond EOT */
--            if (Offset >= Table->Length)
-+            if (Offset >= Length)
-             {
-                 AcpiOsPrintf (
-                     "\n**** Not enough room in table for all localities\n");
-@@ -173,11 +179,13 @@ AcpiDmDumpSrat (
-     UINT32                  Offset = sizeof (ACPI_TABLE_SRAT);
-     ACPI_SUBTABLE_HEADER    *Subtable;
-     ACPI_DMTABLE_INFO       *InfoTable;
-+    UINT32                Length;
-     /* Main table */
--    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat);
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-+    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSrat);
-     if (ACPI_FAILURE (Status))
-     {
-         return;
-@@ -186,12 +194,12 @@ AcpiDmDumpSrat (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         /* Common subtable header */
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
-+        Status = AcpiDmDumpTable (Length, Offset, Subtable,
-             Subtable->Length, AcpiDmTableInfoSratHdr);
-         if (ACPI_FAILURE (Status))
-         {
-@@ -245,7 +253,7 @@ AcpiDmDumpSrat (
-         }
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
-+        Status = AcpiDmDumpTable (Length, Offset, Subtable,
-             Subtable->Length, InfoTable);
-         if (ACPI_FAILURE (Status))
-         {
-@@ -282,13 +290,14 @@ AcpiDmDumpStao (
- {
-     ACPI_STATUS             Status;
-     char                    *Namepath;
--    UINT32                  Length = Table->Length;
-+    UINT32                  Length;
-     UINT32                  StringLength;
-     UINT32                  Offset = sizeof (ACPI_TABLE_STAO);
-     /* Main table */
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoStao);
-     if (ACPI_FAILURE (Status))
-     {
-@@ -297,7 +306,7 @@ AcpiDmDumpStao (
-     /* The rest of the table consists of Namepath strings */
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         Namepath = ACPI_ADD_PTR (char, Table, Offset);
-         StringLength = strlen (Namepath) + 1;
-@@ -339,11 +348,14 @@ AcpiDmDumpTcpa (
-     ACPI_TABLE_TCPA_HDR     *Subtable = ACPI_ADD_PTR (
-                                 ACPI_TABLE_TCPA_HDR, Table, Offset);
-     ACPI_STATUS             Status;
-+    UINT32                Length;
-+    UINT16                PlatformClass;
-     /* Main table */
--    Status = AcpiDmDumpTable (Table->Length, 0, Table,
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-+    Status = AcpiDmDumpTable (Length, 0, Table,
-         0, AcpiDmTableInfoTcpaHdr);
-     if (ACPI_FAILURE (Status))
-     {
-@@ -354,18 +366,19 @@ AcpiDmDumpTcpa (
-      * Examine the PlatformClass field to determine the table type.
-      * Either a client or server table. Only one.
-      */
--    switch (CommonHeader->PlatformClass)
-+    ACPI_MOVE_16_TO_16(&PlatformClass, &CommonHeader->PlatformClass);
-+    switch (PlatformClass)
-     {
-     case ACPI_TCPA_CLIENT_TABLE:
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
--            Table->Length - Offset, AcpiDmTableInfoTcpaClient);
-+        Status = AcpiDmDumpTable (Length, Offset, Subtable,
-+            Length - Offset, AcpiDmTableInfoTcpaClient);
-         break;
-     case ACPI_TCPA_SERVER_TABLE:
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
--            Table->Length - Offset, AcpiDmTableInfoTcpaServer);
-+        Status = AcpiDmDumpTable (Length, Offset, Subtable,
-+            Length - Offset, AcpiDmTableInfoTcpaServer);
-         break;
-     default:
-@@ -512,11 +525,13 @@ AcpiDmDumpVrtc (
-     ACPI_STATUS             Status;
-     UINT32                  Offset = sizeof (ACPI_TABLE_VRTC);
-     ACPI_VRTC_ENTRY         *Subtable;
-+    UINT32                Length;
-     /* Main table */
--    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoVrtc);
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-+    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoVrtc);
-     if (ACPI_FAILURE (Status))
-     {
-         return;
-@@ -525,12 +540,12 @@ AcpiDmDumpVrtc (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_VRTC_ENTRY, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         /* Common subtable header */
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
-+        Status = AcpiDmDumpTable (Length, Offset, Subtable,
-             sizeof (ACPI_VRTC_ENTRY), AcpiDmTableInfoVrtc0);
-         if (ACPI_FAILURE (Status))
-         {
-@@ -565,11 +580,13 @@ AcpiDmDumpWdat (
-     ACPI_STATUS             Status;
-     UINT32                  Offset = sizeof (ACPI_TABLE_WDAT);
-     ACPI_WDAT_ENTRY         *Subtable;
-+    UINT32                Length;
-     /* Main table */
--    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat);
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-+    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWdat);
-     if (ACPI_FAILURE (Status))
-     {
-         return;
-@@ -578,12 +595,12 @@ AcpiDmDumpWdat (
-     /* Subtables */
-     Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset);
--    while (Offset < Table->Length)
-+    while (Offset < Length)
-     {
-         /* Common subtable header */
-         AcpiOsPrintf ("\n");
--        Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
-+        Status = AcpiDmDumpTable (Length, Offset, Subtable,
-             sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0);
-         if (ACPI_FAILURE (Status))
-         {
-@@ -618,12 +635,13 @@ AcpiDmDumpWpbt (
- {
-     ACPI_STATUS             Status;
-     ACPI_TABLE_WPBT         *Subtable;
--    UINT32                  Length = Table->Length;
-+    UINT32                  Length;
-     UINT16                  ArgumentsLength;
-     /* Dump the main table */
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-     Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWpbt);
-     if (ACPI_FAILURE (Status))
-     {
-@@ -633,10 +651,10 @@ AcpiDmDumpWpbt (
-     /* Extract the arguments buffer length from the main table */
-     Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table);
--    ArgumentsLength = Subtable->ArgumentsLength;
-+    ACPI_MOVE_16_TO_16(&ArgumentsLength, &Subtable->ArgumentsLength);
-     /* Dump the arguments buffer */
--    (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength,
-+    (void) AcpiDmDumpTable (Length, 0, Table, ArgumentsLength,
-         AcpiDmTableInfoWpbt0);
- }
-Index: acpica-unix-20191213/source/common/dmtbdump.c
-===================================================================
---- acpica-unix-20191213.orig/source/common/dmtbdump.c
-+++ acpica-unix-20191213/source/common/dmtbdump.c
-@@ -277,6 +277,8 @@ AcpiDmDumpRsdt (
-     UINT32                  Entries;
-     UINT32                  Offset;
-     UINT32                  i;
-+    UINT32                Length;
-+    UINT32                Address;
-     /* Point to start of table pointer array */
-@@ -286,12 +288,14 @@ AcpiDmDumpRsdt (
-     /* RSDT uses 32-bit pointers */
--    Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32);
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-+    Entries = (Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32);
-     for (i = 0; i < Entries; i++)
-     {
-         AcpiDmLineHeader2 (Offset, sizeof (UINT32), "ACPI Table Address", i);
--        AcpiOsPrintf ("%8.8X\n", Array[i]);
-+      ACPI_MOVE_32_TO_32(&Address, &Array[i]);
-+        AcpiOsPrintf ("%8.8X\n", Address);
-         Offset += sizeof (UINT32);
-     }
- }
-@@ -317,6 +321,8 @@ AcpiDmDumpXsdt (
-     UINT32                  Entries;
-     UINT32                  Offset;
-     UINT32                  i;
-+    UINT32                  Length;
-+    UINT64                Address;
-     /* Point to start of table pointer array */
-@@ -326,12 +332,14 @@ AcpiDmDumpXsdt (
-     /* XSDT uses 64-bit pointers */
--    Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64);
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-+    Entries = (Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64);
-     for (i = 0; i < Entries; i++)
-     {
-         AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i);
--        AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Array[i]));
-+      ACPI_MOVE_64_TO_64(&Address, &Array[i]);
-+        AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Address));
-         Offset += sizeof (UINT64);
-     }
- }
-@@ -358,12 +366,12 @@ AcpiDmDumpFadt (
-     ACPI_TABLE_HEADER       *Table)
- {
-     ACPI_STATUS             Status;
--
-+    UINT32                Length;
-     /* Always dump the minimum FADT revision 1 fields (ACPI 1.0) */
--    Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
--        AcpiDmTableInfoFadt1);
-+    ACPI_MOVE_32_TO_32(&Length, &Table->Length);
-+    Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFadt1);
-     if (ACPI_FAILURE (Status))
-     {
-         return;
-@@ -371,11 +379,9 @@ AcpiDmDumpFadt (
-     /* Check for FADT revision 2 fields (ACPI 1.0B MS extensions) */
--    if ((Table->Length > ACPI_FADT_V1_SIZE) &&
--        (Table->Length <= ACPI_FADT_V2_SIZE))
-+    if ((Length > ACPI_FADT_V1_SIZE) && (Length <= ACPI_FADT_V2_SIZE))
-     {
--        Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
--            AcpiDmTableInfoFadt2);
-+        Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFadt2);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-@@ -384,10 +390,9 @@ AcpiDmDumpFadt (
-     /* Check for FADT revision 3/4 fields and up (ACPI 2.0+ extended data) */
--    else if (Table->Length > ACPI_FADT_V2_SIZE)
-+    else if (Length > ACPI_FADT_V2_SIZE)
-     {
--        Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
--            AcpiDmTableInfoFadt3);
-+        Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFadt3);
-         if (ACPI_FAILURE (Status))
-         {
-             return;
-@@ -395,9 +400,9 @@ AcpiDmDumpFadt (
-         /* Check for FADT revision 5 fields and up (ACPI 5.0+) */
--        if (Table->Length > ACPI_FADT_V3_SIZE)
-+        if (Length > ACPI_FADT_V3_SIZE)
-         {
--            Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
-+            Status = AcpiDmDumpTable (Length, 0, Table, 0,
-                 AcpiDmTableInfoFadt5);
-             if (ACPI_FAILURE (Status))
-             {
-@@ -407,9 +412,9 @@ AcpiDmDumpFadt (
-         /* Check for FADT revision 6 fields and up (ACPI 6.0+) */
--        if (Table->Length > ACPI_FADT_V3_SIZE)
-+        if (Length > ACPI_FADT_V3_SIZE)
-         {
--            Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
-+            Status = AcpiDmDumpTable (Length, 0, Table, 0,
-                 AcpiDmTableInfoFadt6);
-             if (ACPI_FAILURE (Status))
-             {
-@@ -420,11 +425,11 @@ AcpiDmDumpFadt (
-     /* Validate various fields in the FADT, including length */
--    AcpiTbCreateLocalFadt (Table, Table->Length);
-+    AcpiTbCreateLocalFadt (Table, Length);
-     /* Validate FADT length against the revision */
--    AcpiDmValidateFadtLength (Table->Revision, Table->Length);
-+    AcpiDmValidateFadtLength (Table->Revision, Length);
- }
-@@ -450,6 +455,7 @@ AcpiDmValidateFadtLength (
-     UINT32                  Length)
- {
-     UINT32                  ExpectedLength;
-+    UINT32                Tmp32;
-     switch (Revision)
-@@ -485,7 +491,8 @@ AcpiDmValidateFadtLength (
-         return;
-     }
--    if (Length == ExpectedLength)
-+    ACPI_MOVE_32_TO_32(&Tmp32, &Length);
-+    if (Tmp32 == ExpectedLength)
-     {
-         return;
-     }
-@@ -493,5 +500,5 @@ AcpiDmValidateFadtLength (
-     AcpiOsPrintf (
-         "\n// ACPI Warning: FADT revision %X does not match length: "
-         "found %X expected %X\n",
--        Revision, Length, ExpectedLength);
-+        Revision, Tmp32, ExpectedLength);
- }
diff --git a/facp.patch b/facp.patch
deleted file mode 100644 (file)
index 3e3da84..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-From 7670c56ebe004e698551635f9c5d48a1794066dd Mon Sep 17 00:00:00 2001
-From: Al Stone <ahs3@ahs3.net>
-Date: Wed, 19 Dec 2018 16:52:41 -0700
-Subject: [PATCH] Correct DSDT Address field in FACP tables
-
-The FADT allows either the DSDT Address or XDSDT Address field to be
-zero.  However, the table definition used by the table compiler still
-requires the DSDT Address to be non-zero, which is not correct.  So,
-remove the DT_NON_ZERO flag from the field.
-
-Signed-off-by: Al Stone <ahs3@redhat.com>
----
- source/common/dmtbinfo.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: acpica-unix-20200214/source/common/dmtbinfo.c
-===================================================================
---- acpica-unix-20200214.orig/source/common/dmtbinfo.c
-+++ acpica-unix-20200214/source/common/dmtbinfo.c
-@@ -184,7 +184,7 @@ ACPI_DMTABLE_INFO           AcpiDmTableI
- ACPI_DMTABLE_INFO           AcpiDmTableInfoFadt1[] =
- {
-     {ACPI_DMT_UINT32,   ACPI_FADT_OFFSET (Facs),                    "FACS Address", 0},
--    {ACPI_DMT_UINT32,   ACPI_FADT_OFFSET (Dsdt),                    "DSDT Address", DT_NON_ZERO},
-+    {ACPI_DMT_UINT32,   ACPI_FADT_OFFSET (Dsdt),                    "DSDT Address", 0},
-     {ACPI_DMT_UINT8,    ACPI_FADT_OFFSET (Model),                   "Model", 0},
-     {ACPI_DMT_FADTPM,   ACPI_FADT_OFFSET (PreferredProfile),        "PM Profile", 0},
-     {ACPI_DMT_UINT16,   ACPI_FADT_OFFSET (SciInterrupt),            "SCI Interrupt", 0},
index 30bd0043df9a8a316ae542c8e862f6f219b93df4..ce986273253e92904b78a851fb9cbe1061da91d0 100644 (file)
@@ -21,23 +21,23 @@ From: Al Stone <ahs3@redhat.com>
  source/components/utilities/utownerid.c |    2 +-
  18 files changed, 28 insertions(+), 28 deletions(-)
 
-Index: acpica-unix-20209326/source/compiler/aslerror.c
+Index: acpica-unix2-20220331/source/compiler/aslerror.c
 ===================================================================
---- acpica-unix-20209326.orig/source/compiler/aslerror.c
-+++ acpica-unix-20209326/source/compiler/aslerror.c
+--- acpica-unix2-20220331.orig/source/compiler/aslerror.c
++++ acpica-unix2-20220331/source/compiler/aslerror.c
 @@ -917,7 +917,7 @@ AslLogNewError (
      AslGbl_ExceptionCount[ModifiedLevel]++;
      if (!AslGbl_IgnoreErrors && AslGbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT)
      {
--        printf ("\nMaximum error count (%u) exceeded\n", ASL_MAX_ERROR_COUNT);
-+        printf ("\nMaximum error count (%d) exceeded\n", ASL_MAX_ERROR_COUNT);
+-        printf ("\nMaximum error count (%u) exceeded (aslerror.c)\n", ASL_MAX_ERROR_COUNT);
++        printf ("\nMaximum error count (%d) exceeded (aslerror.c)\n", ASL_MAX_ERROR_COUNT);
  
          AslGbl_SourceLine = 0;
          AslGbl_NextError = AslGbl_ErrorLog;
-Index: acpica-unix-20209326/source/compiler/aslopt.c
+Index: acpica-unix2-20220331/source/compiler/aslopt.c
 ===================================================================
---- acpica-unix-20209326.orig/source/compiler/aslopt.c
-+++ acpica-unix-20209326/source/compiler/aslopt.c
+--- acpica-unix2-20220331.orig/source/compiler/aslopt.c
++++ acpica-unix2-20220331/source/compiler/aslopt.c
 @@ -583,7 +583,7 @@ OptOptimizeNamePath (
      }
  
@@ -47,11 +47,11 @@ Index: acpica-unix-20209326/source/compiler/aslopt.c
          Op->Asl.LogicalLineNumber,
          AcpiPsGetOpcodeName (Op->Common.Parent->Common.AmlOpcode),
          AcpiPsGetOpcodeName (Op->Common.AmlOpcode)));
-Index: acpica-unix-20209326/source/compiler/aslprepkg.c
+Index: acpica-unix2-20220331/source/compiler/aslprepkg.c
 ===================================================================
---- acpica-unix-20209326.orig/source/compiler/aslprepkg.c
-+++ acpica-unix-20209326/source/compiler/aslprepkg.c
-@@ -309,7 +309,7 @@ ApCheckPackage (
+--- acpica-unix2-20220331.orig/source/compiler/aslprepkg.c
++++ acpica-unix2-20220331/source/compiler/aslprepkg.c
+@@ -320,7 +320,7 @@ ApCheckPackage (
  
          if (Count & 1)
          {
@@ -60,11 +60,11 @@ Index: acpica-unix-20209326/source/compiler/aslprepkg.c
                  Predefined->Info.Name, Count);
  
              AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH,
-Index: acpica-unix-20209326/source/components/debugger/dbexec.c
+Index: acpica-unix2-20220331/source/components/debugger/dbexec.c
 ===================================================================
---- acpica-unix-20209326.orig/source/components/debugger/dbexec.c
-+++ acpica-unix-20209326/source/components/debugger/dbexec.c
-@@ -230,7 +230,7 @@ AcpiDbExecuteMethod (
+--- acpica-unix2-20220331.orig/source/components/debugger/dbexec.c
++++ acpica-unix2-20220331/source/components/debugger/dbexec.c
+@@ -231,7 +231,7 @@ AcpiDbExecuteMethod (
              ACPI_ERROR ((AE_INFO,
                  "Possible buffer overflow within AML Debugger "
                  "buffer (size 0x%X needed 0x%X)",
@@ -73,10 +73,10 @@ Index: acpica-unix-20209326/source/components/debugger/dbexec.c
          }
      }
  
-Index: acpica-unix-20209326/source/components/dispatcher/dsmthdat.c
+Index: acpica-unix2-20220331/source/components/dispatcher/dsmthdat.c
 ===================================================================
---- acpica-unix-20209326.orig/source/components/dispatcher/dsmthdat.c
-+++ acpica-unix-20209326/source/components/dispatcher/dsmthdat.c
+--- acpica-unix2-20220331.orig/source/components/dispatcher/dsmthdat.c
++++ acpica-unix2-20220331/source/components/dispatcher/dsmthdat.c
 @@ -291,7 +291,7 @@ AcpiDsMethodDataGetNode (
          if (Index > ACPI_METHOD_MAX_LOCAL)
          {
@@ -95,10 +95,10 @@ Index: acpica-unix-20209326/source/components/dispatcher/dsmthdat.c
                  Index, ACPI_METHOD_MAX_ARG));
              return_ACPI_STATUS (AE_AML_INVALID_INDEX);
          }
-Index: acpica-unix-20209326/source/components/dispatcher/dsutils.c
+Index: acpica-unix2-20220331/source/components/dispatcher/dsutils.c
 ===================================================================
---- acpica-unix-20209326.orig/source/components/dispatcher/dsutils.c
-+++ acpica-unix-20209326/source/components/dispatcher/dsutils.c
+--- acpica-unix2-20220331.orig/source/components/dispatcher/dsutils.c
++++ acpica-unix2-20220331/source/components/dispatcher/dsutils.c
 @@ -786,7 +786,7 @@ AcpiDsCreateOperands (
      }
  
@@ -108,10 +108,10 @@ Index: acpica-unix-20209326/source/components/dispatcher/dsutils.c
          WalkState->NumOperands, ArgCount, Index));
  
      /* Create the interpreter arguments, in reverse order */
-Index: acpica-unix-20209326/source/components/dispatcher/dswscope.c
+Index: acpica-unix2-20220331/source/components/dispatcher/dswscope.c
 ===================================================================
---- acpica-unix-20209326.orig/source/components/dispatcher/dswscope.c
-+++ acpica-unix-20209326/source/components/dispatcher/dswscope.c
+--- acpica-unix2-20220331.orig/source/components/dispatcher/dswscope.c
++++ acpica-unix2-20220331/source/components/dispatcher/dswscope.c
 @@ -149,7 +149,7 @@ AcpiDsScopeStackPush (
      WalkState->ScopeDepth++;
  
@@ -130,10 +130,10 @@ Index: acpica-unix-20209326/source/components/dispatcher/dswscope.c
          (UINT32) WalkState->ScopeDepth,
          AcpiUtGetNodeName (ScopeInfo->Scope.Node),
          AcpiUtGetTypeName (ScopeInfo->Common.Value)));
-Index: acpica-unix-20209326/source/components/events/evgpe.c
+Index: acpica-unix2-20220331/source/components/events/evgpe.c
 ===================================================================
---- acpica-unix-20209326.orig/source/components/events/evgpe.c
-+++ acpica-unix-20209326/source/components/events/evgpe.c
+--- acpica-unix2-20220331.orig/source/components/events/evgpe.c
++++ acpica-unix2-20220331/source/components/events/evgpe.c
 @@ -488,7 +488,7 @@ AcpiEvGpeDetect (
                      "Ignore disabled registers for GPE %02X-%02X: "
                      "RunEnable=%02X, WakeEnable=%02X\n",
@@ -143,10 +143,10 @@ Index: acpica-unix-20209326/source/components/events/evgpe.c
                      GpeRegisterInfo->EnableForRun,
                      GpeRegisterInfo->EnableForWake));
                  continue;
-Index: acpica-unix-20209326/source/components/executer/exdump.c
+Index: acpica-unix2-20220331/source/components/executer/exdump.c
 ===================================================================
---- acpica-unix-20209326.orig/source/components/executer/exdump.c
-+++ acpica-unix-20209326/source/components/executer/exdump.c
+--- acpica-unix2-20220331.orig/source/components/executer/exdump.c
++++ acpica-unix2-20220331/source/components/executer/exdump.c
 @@ -678,7 +678,7 @@ AcpiExDumpOperand (
      if (Depth > 0)
      {
@@ -156,10 +156,10 @@ Index: acpica-unix-20209326/source/components/executer/exdump.c
      }
      else
      {
-Index: acpica-unix-20209326/source/components/executer/exfldio.c
+Index: acpica-unix2-20220331/source/components/executer/exfldio.c
 ===================================================================
---- acpica-unix-20209326.orig/source/components/executer/exfldio.c
-+++ acpica-unix-20209326/source/components/executer/exfldio.c
+--- acpica-unix2-20220331.orig/source/components/executer/exfldio.c
++++ acpica-unix2-20220331/source/components/executer/exfldio.c
 @@ -681,8 +681,8 @@ AcpiExWriteWithUpdateRule (
  
              ACPI_ERROR ((AE_INFO,
@@ -171,10 +171,10 @@ Index: acpica-unix-20209326/source/components/executer/exfldio.c
              return_ACPI_STATUS (AE_AML_OPERAND_VALUE);
          }
      }
-Index: acpica-unix-20209326/source/components/executer/exnames.c
+Index: acpica-unix2-20220331/source/components/executer/exnames.c
 ===================================================================
---- acpica-unix-20209326.orig/source/components/executer/exnames.c
-+++ acpica-unix-20209326/source/components/executer/exnames.c
+--- acpica-unix2-20220331.orig/source/components/executer/exnames.c
++++ acpica-unix2-20220331/source/components/executer/exnames.c
 @@ -237,7 +237,7 @@ AcpiExNameSegment (
           */
          ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
@@ -193,10 +193,10 @@ Index: acpica-unix-20209326/source/components/executer/exnames.c
      }
  
      *InAmlAddress = ACPI_CAST_PTR (UINT8, AmlAddress);
-Index: acpica-unix-20209326/source/components/hardware/hwregs.c
+Index: acpica-unix2-20220331/source/components/hardware/hwregs.c
 ===================================================================
---- acpica-unix-20209326.orig/source/components/hardware/hwregs.c
-+++ acpica-unix-20209326/source/components/hardware/hwregs.c
+--- acpica-unix2-20220331.orig/source/components/hardware/hwregs.c
++++ acpica-unix2-20220331/source/components/hardware/hwregs.c
 @@ -460,7 +460,7 @@ AcpiHwClearAcpiStatus (
  
  
@@ -206,10 +206,10 @@ Index: acpica-unix-20209326/source/components/hardware/hwregs.c
          ACPI_FORMAT_UINT64 (AcpiGbl_XPm1aStatus.Address)));
  
      LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock);
-Index: acpica-unix-20209326/source/components/tables/tbfadt.c
+Index: acpica-unix2-20220331/source/components/tables/tbfadt.c
 ===================================================================
---- acpica-unix-20209326.orig/source/components/tables/tbfadt.c
-+++ acpica-unix-20209326/source/components/tables/tbfadt.c
+--- acpica-unix2-20220331.orig/source/components/tables/tbfadt.c
++++ acpica-unix2-20220331/source/components/tables/tbfadt.c
 @@ -233,7 +233,7 @@ AcpiTbInitGenericAddress (
          if (!(Flags & ACPI_FADT_GPE_REGISTER))
          {
@@ -219,7 +219,7 @@ Index: acpica-unix-20209326/source/components/tables/tbfadt.c
                  "to convert to GAS struct - 255 bits max, truncating",
                  RegisterName, ByteWidth, (ByteWidth * 8)));
          }
-@@ -304,7 +304,7 @@ AcpiTbSelectAddress (
+@@ -303,7 +303,7 @@ AcpiTbSelectAddress (
  
          ACPI_BIOS_WARNING ((AE_INFO,
              "32/64X %s address mismatch in FADT: "
@@ -228,7 +228,7 @@ Index: acpica-unix-20209326/source/components/tables/tbfadt.c
              RegisterName, Address32, ACPI_FORMAT_UINT64 (Address64),
              AcpiGbl_Use32BitFadtAddresses ? 32 : 64));
  
-@@ -628,7 +628,7 @@ AcpiTbConvertFadt (
+@@ -631,7 +631,7 @@ AcpiTbConvertFadt (
  
                      ACPI_BIOS_WARNING ((AE_INFO,
                          "32/64X address mismatch in FADT/%s: "
@@ -237,10 +237,10 @@ Index: acpica-unix-20209326/source/components/tables/tbfadt.c
                          Name, Address32,
                          ACPI_FORMAT_UINT64 (Address64->Address),
                          AcpiGbl_Use32BitFadtAddresses ? 32 : 64));
-Index: acpica-unix-20209326/source/components/tables/tbxfroot.c
+Index: acpica-unix2-20220331/source/components/tables/tbxfroot.c
 ===================================================================
---- acpica-unix-20209326.orig/source/components/tables/tbxfroot.c
-+++ acpica-unix-20209326/source/components/tables/tbxfroot.c
+--- acpica-unix2-20220331.orig/source/components/tables/tbxfroot.c
++++ acpica-unix2-20220331/source/components/tables/tbxfroot.c
 @@ -177,7 +177,7 @@ AcpiFindRootPointer (
      {
          ACPI_ERROR ((AE_INFO,
@@ -268,10 +268,10 @@ Index: acpica-unix-20209326/source/components/tables/tbxfroot.c
  
          return_ACPI_STATUS (AE_NO_MEMORY);
      }
-Index: acpica-unix-20209326/source/components/utilities/utownerid.c
+Index: acpica-unix2-20220331/source/components/utilities/utownerid.c
 ===================================================================
---- acpica-unix-20209326.orig/source/components/utilities/utownerid.c
-+++ acpica-unix-20209326/source/components/utilities/utownerid.c
+--- acpica-unix2-20220331.orig/source/components/utilities/utownerid.c
++++ acpica-unix2-20220331/source/components/utilities/utownerid.c
 @@ -237,7 +237,7 @@ AcpiUtReleaseOwnerId (
      else
      {
index dd531de44a8e4b6de555188dd138fe59237fc1ee..c84e9c8c8189105047c8a91bf2a1a8ee318c967f 100644 (file)
@@ -1,8 +1,8 @@
-Index: acpica-unix-20191213/source/compiler/aslparseop.c
+Index: acpica-unix2-20220331/source/compiler/aslparseop.c
 ===================================================================
---- acpica-unix-20191213.orig/source/compiler/aslparseop.c
-+++ acpica-unix-20191213/source/compiler/aslparseop.c
-@@ -283,7 +283,16 @@ TrCreateValuedLeafOp (
+--- acpica-unix2-20220331.orig/source/compiler/aslparseop.c
++++ acpica-unix2-20220331/source/compiler/aslparseop.c
+@@ -285,7 +285,16 @@ TrCreateValuedLeafOp (
  
  
      Op = TrAllocateOp (ParseOpcode);
@@ -20,18 +20,3 @@ Index: acpica-unix-20191213/source/compiler/aslparseop.c
  
      DbgPrint (ASL_PARSE_OUTPUT,
          "\nCreateValuedLeafOp  Ln/Col %u/%u NewOp %p  "
-Index: acpica-unix-20191213/source/include/platform/aclinux.h
-===================================================================
---- acpica-unix-20191213.orig/source/include/platform/aclinux.h
-+++ acpica-unix-20191213/source/include/platform/aclinux.h
-@@ -232,10 +232,8 @@
- #endif
- #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
--#if defined(__PPC64__) || defined(__s390x__)
- #define ACPI_BIG_ENDIAN
- #endif
--#endif
- #endif /* __KERNEL__ */
diff --git a/ppc64le.patch b/ppc64le.patch
deleted file mode 100644 (file)
index 667a106..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-Index: acpica-unix-20191213/source/include/platform/aclinux.h
-===================================================================
---- acpica-unix-20191213.orig/source/include/platform/aclinux.h
-+++ acpica-unix-20191213/source/include/platform/aclinux.h
-@@ -233,9 +233,11 @@
- #define __cdecl
- #endif
-+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
- #if defined(__PPC64__) || defined(__s390x__)
- #define ACPI_BIG_ENDIAN
- #endif
-+#endif
- #endif /* __KERNEL__ */
index 6112cc830d80d5b3c0264e8efbd4da4bcc9e8cc5..0a244291d28d659298e153b2752e33086cf0570a 100644 (file)
@@ -1,12 +1,12 @@
-Index: acpica-unix-20191213/source/components/tables/tbutils.c
+Index: acpica-unix2-20220331/source/components/tables/tbutils.c
 ===================================================================
---- acpica-unix-20191213.orig/source/components/tables/tbutils.c
-+++ acpica-unix-20191213/source/components/tables/tbutils.c
+--- acpica-unix2-20220331.orig/source/components/tables/tbutils.c
++++ acpica-unix2-20220331/source/components/tables/tbutils.c
 @@ -238,9 +238,11 @@ AcpiTbGetRootTableEntry (
           * 64-bit platform, XSDT: Move (unaligned) 64-bit to local,
           *  return 64-bit
           */
--      Address64 = (UINT64) TableEntry;
+-        ACPI_MOVE_64_TO_64 (&Address64, TableEntry);
  
  #if ACPI_MACHINE_WIDTH == 32
 +      UINT32 Tmp32 = (UINT32) TableEntry;
@@ -15,7 +15,7 @@ Index: acpica-unix-20191213/source/components/tables/tbutils.c
          if (Address64 > ACPI_UINT32_MAX)
          {
              /* Will truncate 64-bit address to 32 bits, issue warning */
-@@ -250,9 +252,15 @@ AcpiTbGetRootTableEntry (
+@@ -250,8 +252,14 @@ AcpiTbGetRootTableEntry (
                  " truncating",
                  ACPI_FORMAT_UINT64 (Address64)));
          }
@@ -26,17 +26,16 @@ Index: acpica-unix-20191213/source/components/tables/tbutils.c
 +#else
 +      Address64 = (UINT64) TableEntry;
 +
-         return ((ACPI_PHYSICAL_ADDRESS) (*ACPI_CAST_PTR (
-             UINT64, Address64)));
+         return ((ACPI_PHYSICAL_ADDRESS) (Address64));
 +#endif
      }
  }
  
-Index: acpica-unix-20191213/source/compiler/aslparseop.c
+Index: acpica-unix2-20220331/source/compiler/aslparseop.c
 ===================================================================
---- acpica-unix-20191213.orig/source/compiler/aslparseop.c
-+++ acpica-unix-20191213/source/compiler/aslparseop.c
-@@ -287,7 +287,11 @@ TrCreateValuedLeafOp (
+--- acpica-unix2-20220331.orig/source/compiler/aslparseop.c
++++ acpica-unix2-20220331/source/compiler/aslparseop.c
+@@ -289,7 +289,11 @@ TrCreateValuedLeafOp (
          ParseOpcode == PARSEOP_NAMESEG ||
          ParseOpcode == PARSEOP_STRING_LITERAL)
      {
index 763ae687f17c6de4cc983243e3b6d9ef450211cf..c8669855ce8222a9bb8a1b97bb3339d68d2524eb 100644 (file)
@@ -1,7 +1,7 @@
-Index: acpica-unix-20200214/source/compiler/aslanalyze.c
+Index: acpica-unix2-20220331/source/compiler/aslanalyze.c
 ===================================================================
---- acpica-unix-20200214.orig/source/compiler/aslanalyze.c
-+++ acpica-unix-20200214/source/compiler/aslanalyze.c
+--- acpica-unix2-20220331.orig/source/compiler/aslanalyze.c
++++ acpica-unix2-20220331/source/compiler/aslanalyze.c
 @@ -358,11 +358,16 @@ AnCheckMethodReturnValue (
           */
          if (ThisNodeBtype != 0)
@@ -14,17 +14,17 @@ Index: acpica-unix-20200214/source/compiler/aslanalyze.c
                  "Method returns [%s], %s operator requires [%s]",
                  AslGbl_StringBuffer, OpInfo->Name, AslGbl_StringBuffer2);
  
--            AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ArgOp, AslGbl_MsgBuffer);
-+            AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ArgOp, strp);
+-            AslError (ASL_WARNING, ASL_MSG_INVALID_TYPE, ArgOp, AslGbl_MsgBuffer);
++            AslError (ASL_WARNING, ASL_MSG_INVALID_TYPE, ArgOp, strp);
 +           if (cnt > 0)
 +               free(strp);
          }
      }
  
-Index: acpica-unix-20200214/source/compiler/aslpredef.c
+Index: acpica-unix2-20220331/source/compiler/aslpredef.c
 ===================================================================
---- acpica-unix-20200214.orig/source/compiler/aslpredef.c
-+++ acpica-unix-20200214/source/compiler/aslpredef.c
+--- acpica-unix2-20220331.orig/source/compiler/aslpredef.c
++++ acpica-unix2-20220331/source/compiler/aslpredef.c
 @@ -159,14 +159,19 @@ ApCheckForPredefinedMethod (
          if (MethodInfo->NumReturnNoValue &&
              ThisName->Info.ExpectedBtypes)
@@ -84,10 +84,10 @@ Index: acpica-unix-20200214/source/compiler/aslpredef.c
      return (AE_TYPE);
  }
  
-Index: acpica-unix-20200214/source/compiler/aslwalks.c
+Index: acpica-unix2-20220331/source/compiler/aslwalks.c
 ===================================================================
---- acpica-unix-20200214.orig/source/compiler/aslwalks.c
-+++ acpica-unix-20200214/source/compiler/aslwalks.c
+--- acpica-unix2-20220331.orig/source/compiler/aslwalks.c
++++ acpica-unix2-20220331/source/compiler/aslwalks.c
 @@ -515,15 +515,19 @@ AnOperandTypecheckWalkEnd (
              else if (!CommonBtypes)
              {
This page took 1.039012 seconds and 4 git commands to generate.