--- /dev/null
+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 */
--- /dev/null
+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)));
+ }
+ }
+
--- /dev/null
+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");
+ }
+
--- /dev/null
+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 */
+
--- /dev/null
+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);
--- /dev/null
+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") */
+
--- /dev/null
+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");
--- /dev/null
+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 */
+
--- /dev/null
+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))
+ {
--- /dev/null
+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,
--- /dev/null
+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);
+ }
--- /dev/null
+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,
--- /dev/null
+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 ();
+
--- /dev/null
+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,
--- /dev/null
+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,
--- /dev/null
+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);
+ }
+ }
--- /dev/null
+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:
+
--- /dev/null
+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)
+ {
--- /dev/null
+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)
+ {
--- /dev/null
+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);
+ }
+ }
--- /dev/null
+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);
+ }
+ }
--- /dev/null
+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))
+ {
--- /dev/null
+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;
+
--- /dev/null
+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))
+ {
--- /dev/null
+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 ();
+
--- /dev/null
+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:
--- /dev/null
+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:
--- /dev/null
+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;
+ }
+ }
--- /dev/null
+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))
+ {
--- /dev/null
+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;
+
--- /dev/null
+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))
+ {
--- /dev/null
+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))
+ {
--- /dev/null
+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:
+
--- /dev/null
+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;
--- /dev/null
+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);
+ }
+
+
--- /dev/null
+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))
+ {
--- /dev/null
+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))
+ {
--- /dev/null
+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);
+ }
+ }
+
--- /dev/null
+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;
+ }
--- /dev/null
+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:
+
--- /dev/null
+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);
+ }
+
--- /dev/null
+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);
+ }
+ }
+
--- /dev/null
+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);
+ }
--- /dev/null
+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);
--- /dev/null
+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 ();
--- /dev/null
+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);
--- /dev/null
+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);
--- /dev/null
+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;
--- /dev/null
+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))
+ {
--- /dev/null
+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
+ #
--- /dev/null
+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
+
+
+ /*******************************************************************************
--- /dev/null
+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);
+ }
+
--- /dev/null
+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
--- /dev/null
+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);
+ }
+ }
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;
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
--- /dev/null
+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);
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
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
%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 \\\
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
%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
%{_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*
+++ /dev/null
-.\" 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).
+++ /dev/null
-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);
+++ /dev/null
-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);
- }
+++ /dev/null
-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);
- }
+++ /dev/null
-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},
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 (
}
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)
{
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)",
}
}
-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)
{
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 (
}
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++;
(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",
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)
{
}
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,
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,
}
*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 (
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))
{
"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: "
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: "
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,
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: 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);
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__ */
-
+++ /dev/null
-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: 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;
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)));
}
+#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: 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)
"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)
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)
{