diff --git a/0001-Add-in-basic-infrastructure-for-big-endian-support.patch b/0001-Add-in-basic-infrastructure-for-big-endian-support.patch new file mode 100644 index 0000000..abd9298 --- /dev/null +++ b/0001-Add-in-basic-infrastructure-for-big-endian-support.patch @@ -0,0 +1,372 @@ +From bb45113bc9aed952a499cd1c53988dc81f597582 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Thu, 15 Oct 2020 11:53:33 -0600 +Subject: [PATCH 01/40] 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. + +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 +--- + 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/components/utilities/utendian.c | 205 +++++++++++++++++++++++++ + source/include/acutils.h | 26 ++++ + source/include/platform/aclinux.h | 5 + + 9 files changed, 242 insertions(+) + create mode 100644 source/components/utilities/utendian.c + +Index: acpica-unix2-20200925/generate/unix/acpibin/Makefile +=================================================================== +--- acpica-unix2-20200925.orig/generate/unix/acpibin/Makefile ++++ acpica-unix2-20200925/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-20200925/generate/unix/acpidump/Makefile +=================================================================== +--- acpica-unix2-20200925.orig/generate/unix/acpidump/Makefile ++++ acpica-unix2-20200925/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-20200925/generate/unix/acpiexamples/Makefile +=================================================================== +--- acpica-unix2-20200925.orig/generate/unix/acpiexamples/Makefile ++++ acpica-unix2-20200925/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-20200925/generate/unix/acpiexec/Makefile +=================================================================== +--- acpica-unix2-20200925.orig/generate/unix/acpiexec/Makefile ++++ acpica-unix2-20200925/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-20200925/generate/unix/acpihelp/Makefile +=================================================================== +--- acpica-unix2-20200925.orig/generate/unix/acpihelp/Makefile ++++ acpica-unix2-20200925/generate/unix/acpihelp/Makefile +@@ -43,6 +43,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-20200925/generate/unix/iasl/Makefile +=================================================================== +--- acpica-unix2-20200925.orig/generate/unix/iasl/Makefile ++++ acpica-unix2-20200925/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-20200925/source/components/utilities/utendian.c +=================================================================== +--- /dev/null ++++ acpica-unix2-20200925/source/components/utilities/utendian.c +@@ -0,0 +1,205 @@ ++/****************************************************************************** ++ * ++ * Module Name: utendian -- byte swapping support for other-endianness ++ * ++ *****************************************************************************/ ++ ++/***************************************************************************** ++ * ++ * Copyright (c) 2020, Al Stone ++ * ++ * 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: 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 ++ * ++ ******************************************************************************/ ++ ++#if defined(ACPI_BIG_ENDIAN) ++UINT16 AcpiUtReadUint16 (void *SrcPtr) ++{ ++ UINT16 Result = 0; ++ UINT8 *Dst = (UINT8 *)&Result; ++ UINT8 *Src = (UINT8 *)SrcPtr; ++ ++ Dst[0] = Src[1]; ++ Dst[1] = Src[0]; ++ ++ return Result; ++} ++#else ++UINT16 AcpiUtReadUint16 (void *SrcPtr) { return *(UINT16 *)SrcPtr; } ++#endif ++ ++/******************************************************************************* ++ * ++ * 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 ++ * ++ ******************************************************************************/ ++ ++#if defined(ACPI_BIG_ENDIAN) ++UINT32 AcpiUtReadUint32 (void *SrcPtr) ++{ ++ UINT32 Result = 0; ++ UINT8 *Dst = (UINT8 *)&Result; ++ UINT8 *Src = (UINT8 *)SrcPtr; ++ ++ Dst[0] = Src[3]; ++ Dst[1] = Src[2]; ++ Dst[2] = Src[1]; ++ Dst[3] = Src[0]; ++ ++ return Result; ++} ++#else ++UINT32 AcpiUtReadUint32 (void *SrcPtr) { return *(UINT32 *)SrcPtr; } ++#endif ++ ++/******************************************************************************* ++ * ++ * 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 ++ * ++ ******************************************************************************/ ++ ++#if defined(ACPI_BIG_ENDIAN) ++UINT64 AcpiUtReadUint64 (void *SrcPtr) ++{ ++ UINT64 Result = 0; ++ UINT8 *Dst = (UINT8 *)&Result; ++ UINT8 *Src = (UINT8 *)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; ++} ++#else ++UINT64 AcpiUtReadUint64 (void *SrcPtr) { return *(UINT64 *)SrcPtr; } ++#endif ++ ++/******************************************************************************* ++ * ++ * 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) ++ * ++ ******************************************************************************/ ++ ++#if defined(ACPI_BIG_ENDIAN) ++void AcpiUtWriteUint (void *DstPtr, int DstLength, ++ const void *SrcPtr, const int SrcLength) ++{ ++ UINT8 *Dst = (UINT8 *)DstPtr; ++ UINT8 *Src = (UINT8 *)SrcPtr; ++ int Length; ++ int ii; ++ ++ Length = SrcLength >= DstLength ? DstLength : SrcLength; ++ for (ii = 0; ii < Length; ii++) ++ Dst[ii] = Src[SrcLength - ii - 1]; ++ ++} ++#else ++void AcpiUtWriteUint (void *DstPtr, int DstLength, ++ const void *SrcPtr, const int SrcLength) ++{ ++ UINT8 *Dst = (UINT8 *)DstPtr; ++ UINT8 *Src = (UINT8 *)SrcPtr; ++ uint Length; ++ ++ Length = SrcLength > DstLength ? DstLength : SrcLength; ++ memcpy(Dst, Src, Length); ++} ++#endif ++ +Index: acpica-unix2-20200925/source/include/acutils.h +=================================================================== +--- acpica-unix2-20200925.orig/source/include/acutils.h ++++ acpica-unix2-20200925/source/include/acutils.h +@@ -1161,4 +1161,30 @@ AcpiUtConvertStringToUuid ( + UINT8 *UuidBuffer); + #endif + ++/* ++ * utendian -- byte-swapping for big-endian support ++ */ ++#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-20200925/source/include/platform/aclinux.h +=================================================================== +--- acpica-unix2-20200925.orig/source/include/platform/aclinux.h ++++ acpica-unix2-20200925/source/include/platform/aclinux.h +@@ -198,6 +198,7 @@ + + #ifdef ACPI_USE_STANDARD_HEADERS + #include ++#include + #endif + + /* Define/disable kernel-specific declarators */ +@@ -233,6 +234,10 @@ + #define __cdecl + #endif + ++#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ ++#define ACPI_BIG_ENDIAN ++#endif ++ + #endif /* __KERNEL__ */ + + #endif /* __ACLINUX_H__ */ diff --git a/0002-Modify-utility-functions-to-be-endian-agnostic.patch b/0002-Modify-utility-functions-to-be-endian-agnostic.patch new file mode 100644 index 0000000..4b99375 --- /dev/null +++ b/0002-Modify-utility-functions-to-be-endian-agnostic.patch @@ -0,0 +1,200 @@ +From d0c879747147c24c47bae363359127d62cd0cae1 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Fri, 18 Sep 2020 15:14:30 -0600 +Subject: [PATCH 02/40] 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 +--- + 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-20200925/source/common/acfileio.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/acfileio.c ++++ acpica-unix2-20200925/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); +@@ -464,11 +467,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-20200925/source/common/dmtable.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtable.c ++++ acpica-unix2-20200925/source/common/dmtable.c +@@ -534,7 +534,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); +@@ -551,7 +551,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)) + { +@@ -571,7 +571,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)) + { +@@ -1179,7 +1179,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-20200925/source/compiler/dtfield.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dtfield.c ++++ acpica-unix2-20200925/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-20200925/source/compiler/dtsubtable.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dtsubtable.c ++++ acpica-unix2-20200925/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-20200925/source/components/tables/tbprint.c +=================================================================== +--- acpica-unix2-20200925.orig/source/components/tables/tbprint.c ++++ acpica-unix2-20200925/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 (Header->Signature)) + { +@@ -178,9 +180,12 @@ AcpiTbPrintTableHeader ( + "%-4.4s 0x%8.8X%8.8X" + " %06X (v%.2d %-6.6s %-8.8s %08X %-4.4s %08X)", + LocalHeader.Signature, ACPI_FORMAT_UINT64 (Address), +- LocalHeader.Length, LocalHeader.Revision, LocalHeader.OemId, +- LocalHeader.OemTableId, LocalHeader.OemRevision, +- LocalHeader.AslCompilerId, LocalHeader.AslCompilerRevision)); ++ AcpiUtReadUint32(&LocalHeader.Length), ++ LocalHeader.Revision, LocalHeader.OemId, ++ LocalHeader.OemTableId, ++ AcpiUtReadUint32(&LocalHeader.OemRevision), ++ LocalHeader.AslCompilerId, ++ AcpiUtReadUint32(&LocalHeader.AslCompilerRevision))); + } + } + diff --git a/0003-Always-display-table-header-content-in-human-readabl.patch b/0003-Always-display-table-header-content-in-human-readabl.patch new file mode 100644 index 0000000..4ba465b --- /dev/null +++ b/0003-Always-display-table-header-content-in-human-readabl.patch @@ -0,0 +1,51 @@ +From 08862d9a4be8262c045549c287adf1e6c320cbec Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Fri, 18 Sep 2020 15:20:37 -0600 +Subject: [PATCH 03/40] 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 +--- + source/tools/acpibin/abcompare.c | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +Index: acpica-unix2-20200925/source/tools/acpibin/abcompare.c +=================================================================== +--- acpica-unix2-20200925.orig/source/tools/acpibin/abcompare.c ++++ acpica-unix2-20200925/source/tools/acpibin/abcompare.c +@@ -42,6 +42,7 @@ + */ + + #include "acpibin.h" ++#include "acutils.h" + + + ACPI_TABLE_HEADER Header1; +@@ -179,14 +180,20 @@ AbPrintHeadersInfo ( + /* Display header information for both headers */ + + printf ("Signature %8.4s : %4.4s\n", Header->Signature, Header2->Signature); +- printf ("Length %8.8X : %8.8X\n", Header->Length, Header2->Length); ++ printf ("Length %8.8X : %8.8X\n", ++ AcpiUtReadUint32(&Header->Length), ++ AcpiUtReadUint32(&Header2->Length)); + printf ("Revision %8.2X : %2.2X\n", Header->Revision, Header2->Revision); + printf ("Checksum %8.2X : %2.2X\n", Header->Checksum, Header2->Checksum); + printf ("OEM ID %8.6s : %.6s\n", Header->OemId, Header2->OemId); + printf ("OEM Table ID %8.8s : %.8s\n", Header->OemTableId, Header2->OemTableId); +- printf ("OEM Revision %8.8X : %8.8X\n", Header->OemRevision, Header2->OemRevision); ++ printf ("OEM Revision %8.8X : %8.8X\n", ++ AcpiUtReadUint32(&Header->OemRevision), ++ AcpiUtReadUint32(&Header2->OemRevision)); + printf ("ASL Compiler ID %8.4s : %.4s\n", Header->AslCompilerId, Header2->AslCompilerId); +- printf ("Compiler Revision %8.8X : %8.8X\n", Header->AslCompilerRevision, Header2->AslCompilerRevision); ++ printf ("Compiler Revision %8.8X : %8.8X\n", ++ AcpiUtReadUint32(&Header->AslCompilerRevision), ++ AcpiUtReadUint32(&Header2->AslCompilerRevision)); + printf ("\n"); + } + diff --git a/0004-Re-enable-support-for-big-endian-machines.patch b/0004-Re-enable-support-for-big-endian-machines.patch new file mode 100644 index 0000000..c88eee8 --- /dev/null +++ b/0004-Re-enable-support-for-big-endian-machines.patch @@ -0,0 +1,78 @@ +From 16c399a7e2a2c7bd8fb8f38fed202f23c3a786a9 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Wed, 16 Sep 2020 16:27:06 -0600 +Subject: [PATCH 04/40] 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 +--- + source/compiler/aslmain.c | 12 ------------ + source/components/namespace/nsutils.c | 7 +++++-- + 2 files changed, 5 insertions(+), 14 deletions(-) + +Index: acpica-unix2-20200925/source/compiler/aslmain.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/aslmain.c ++++ acpica-unix2-20200925/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-20200925/source/components/namespace/nsutils.c +=================================================================== +--- acpica-unix2-20200925.orig/source/components/namespace/nsutils.c ++++ acpica-unix2-20200925/source/components/namespace/nsutils.c +@@ -272,6 +272,7 @@ AcpiNsBuildInternalName ( + const char *ExternalName = Info->NextExternalChar; + char *Result = NULL; + UINT32 i; ++ char TmpSeg[ACPI_NAMESEG_SIZE+1]; + + + ACPI_FUNCTION_TRACE (NsBuildInternalName); +@@ -335,6 +336,7 @@ AcpiNsBuildInternalName ( + + for (; NumSegments; NumSegments--) + { ++ memset(TmpSeg, 0, ACPI_NAMESEG_SIZE+1); + for (i = 0; i < ACPI_NAMESEG_SIZE; i++) + { + if (ACPI_IS_PATH_SEPARATOR (*ExternalName) || +@@ -342,16 +344,17 @@ AcpiNsBuildInternalName ( + { + /* Pad the segment with underscore(s) if segment is short */ + +- Result[i] = '_'; ++ TmpSeg[i] = '_'; + } + else + { + /* Convert the character to uppercase and save it */ + +- Result[i] = (char) toupper ((int) *ExternalName); ++ TmpSeg[i] = (char) toupper ((int) *ExternalName); + ExternalName++; + } + } ++ AcpiUtWriteUint(Result, ACPI_NAMESEG_SIZE, TmpSeg, ACPI_NAMESEG_SIZE); + + /* Now we must have a path separator, or the pathname is bad */ + diff --git a/0005-Support-MADT-aka-APIC-in-a-big-endian-world.patch b/0005-Support-MADT-aka-APIC-in-a-big-endian-world.patch new file mode 100644 index 0000000..cc1392b --- /dev/null +++ b/0005-Support-MADT-aka-APIC-in-a-big-endian-world.patch @@ -0,0 +1,32 @@ +From f11fb1c691174eb7d236d60ad48da19e56291fef Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Thu, 15 Oct 2020 12:12:11 -0600 +Subject: [PATCH 05/40] Support MADT (aka APIC) in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump2.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump2.c ++++ acpica-unix2-20200925/source/common/dmtbdump2.c +@@ -607,7 +607,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; + +@@ -623,7 +623,7 @@ AcpiDmDumpMadt ( + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); +- while (Offset < Table->Length) ++ while (Offset < Length) + { + /* Common subtable header */ + diff --git a/0006-Support-ASF-tables-in-a-big-endian-world.patch b/0006-Support-ASF-tables-in-a-big-endian-world.patch new file mode 100644 index 0000000..194e5ca --- /dev/null +++ b/0006-Support-ASF-tables-in-a-big-endian-world.patch @@ -0,0 +1,55 @@ +From 5ac8e9cca71eacd4f18dba2eb89e9b65a805f712 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Fri, 18 Sep 2020 16:41:02 -0600 +Subject: [PATCH 06/40] 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 +--- + source/common/dmtbdump1.c | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump1.c ++++ acpica-unix2-20200925/source/common/dmtbdump1.c +@@ -79,16 +79,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)) + { +@@ -146,7 +148,7 @@ AcpiDmDumpAsf ( + return; + } + +- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, + Subtable->Header.Length, InfoTable); + if (ACPI_FAILURE (Status)) + { +@@ -163,7 +165,7 @@ AcpiDmDumpAsf ( + for (i = 0; i < DataCount; i++) + { + AcpiOsPrintf ("\n"); +- Status = AcpiDmDumpTable (Table->Length, DataOffset, ++ Status = AcpiDmDumpTable (TableLength, DataOffset, + DataTable, DataLength, DataInfoTable); + if (ACPI_FAILURE (Status)) + { diff --git a/0007-Support-CPEP-tables-in-a-big-endian-world.patch b/0007-Support-CPEP-tables-in-a-big-endian-world.patch new file mode 100644 index 0000000..f58cf61 --- /dev/null +++ b/0007-Support-CPEP-tables-in-a-big-endian-world.patch @@ -0,0 +1,32 @@ +From d66af65b4cd0a2719e5a06b77f8eda5e892bfc63 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Fri, 18 Sep 2020 16:54:13 -0600 +Subject: [PATCH 07/40] Support CPEP tables in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump1.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump1.c ++++ acpica-unix2-20200925/source/common/dmtbdump1.c +@@ -243,7 +243,7 @@ AcpiDmDumpCpep ( + { + ACPI_STATUS Status; + ACPI_CPEP_POLLING *Subtable; +- UINT32 Length = Table->Length; ++ UINT32 Length = AcpiUtReadUint32(&Table->Length); + UINT32 Offset = sizeof (ACPI_TABLE_CPEP); + + +@@ -258,7 +258,7 @@ AcpiDmDumpCpep ( + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset); +- while (Offset < Table->Length) ++ while (Offset < Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, diff --git a/0008-Support-DBG2-table-in-a-big-endian-world.patch b/0008-Support-DBG2-table-in-a-big-endian-world.patch new file mode 100644 index 0000000..d0dac5e --- /dev/null +++ b/0008-Support-DBG2-table-in-a-big-endian-world.patch @@ -0,0 +1,254 @@ +From 2d7396fe2b270b0bed6a6436f9e3d15cfbb9abfc Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Sat, 19 Sep 2020 13:37:38 -0600 +Subject: [PATCH 08/40] Support DBG2 table in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump1.c | 35 +++++++++++++++++-------------- + source/compiler/dttable1.c | 43 ++++++++++++++++++++++++-------------- + 2 files changed, 46 insertions(+), 32 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump1.c ++++ acpica-unix2-20200925/source/common/dmtbdump1.c +@@ -298,7 +298,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; +@@ -310,7 +310,7 @@ AcpiDmDumpCsrt ( + /* Subtables (Resource Groups) */ + + Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset); +- while (Offset < Table->Length) ++ while (Offset < Length) + { + /* Resource group subtable */ + +@@ -344,7 +344,7 @@ AcpiDmDumpCsrt ( + Offset + SubOffset); + + while ((SubOffset < Subtable->Length) && +- ((Offset + SubOffset) < Table->Length)) ++ ((Offset + SubOffset) < Length)) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable, +@@ -405,12 +405,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 */ +@@ -424,11 +425,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; +@@ -438,13 +440,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; +@@ -455,13 +457,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; +@@ -471,12 +473,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; +@@ -486,8 +488,9 @@ AcpiDmDumpDbg2 ( + + if (Subtable->OemDataOffset) + { +- Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset, +- Table, Subtable->OemDataLength, ++ Status = AcpiDmDumpTable (Length, ++ Offset + AcpiUtReadUint16(&Subtable->OemDataOffset), ++ Table, AcpiUtReadUint16(&Subtable->OemDataLength), + AcpiDmTableInfoDbg2OemData); + if (ACPI_FAILURE (Status)) + { +@@ -497,9 +500,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-20200925/source/compiler/dttable1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable1.c ++++ acpica-unix2-20200925/source/compiler/dttable1.c +@@ -281,6 +281,7 @@ DtCompileCsrt ( + DT_FIELD **PFieldList = (DT_FIELD **) List; + UINT32 DescriptorCount; + UINT32 GroupLength; ++ UINT32 Tmp; + + + /* Subtables (Resource Groups) */ +@@ -299,12 +300,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)); +@@ -392,6 +394,7 @@ DtCompileDbg2 ( + ACPI_DBG2_DEVICE *DeviceInfo; + UINT16 CurrentOffset; + UINT32 i; ++ UINT32 Tmp; + + + /* Main table */ +@@ -408,10 +411,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) */ +@@ -438,7 +443,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, +@@ -454,7 +460,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, +@@ -470,7 +477,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)) +@@ -480,8 +488,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) */ +@@ -508,8 +517,10 @@ DtCompileDbg2 ( + + if (Subtable && Subtable->Length) + { +- DeviceInfo->OemDataOffset = CurrentOffset; +- DeviceInfo->OemDataLength = (UINT16) Subtable->Length; ++ AcpiUtWriteUint(&DeviceInfo->OemDataOffset, sizeof(UINT16), ++ &CurrentOffset, sizeof(UINT16)); ++ AcpiUtWriteUint(&DeviceInfo->OemDataLength, sizeof(UINT16), ++ &Subtable->Length, sizeof(UINT32)); + + DtInsertSubtable (ParentTable, Subtable); + } diff --git a/0009-Support-DMAR-in-a-big-endian-world.patch b/0009-Support-DMAR-in-a-big-endian-world.patch new file mode 100644 index 0000000..d80d519 --- /dev/null +++ b/0009-Support-DMAR-in-a-big-endian-world.patch @@ -0,0 +1,171 @@ +From 01aad41e59efd615ac075fcedbaab0c60f9e1e11 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Sat, 19 Sep 2020 15:22:00 -0600 +Subject: [PATCH 09/40] Support DMAR in a big-endian world + +Signed-off-by: Al Stone +--- + 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-20200925/source/common/dmtable.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtable.c ++++ acpica-unix2-20200925/source/common/dmtable.c +@@ -1244,13 +1244,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-20200925/source/common/dmtbdump1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump1.c ++++ acpica-unix2-20200925/source/common/dmtbdump1.c +@@ -526,13 +526,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 */ +@@ -546,13 +548,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; +@@ -560,7 +563,8 @@ AcpiDmDumpDmar ( + + AcpiOsPrintf ("\n"); + +- switch (Subtable->Type) ++ SubtableType = AcpiUtReadUint16(&Subtable->Type); ++ switch (SubtableType) + { + case ACPI_DMAR_TYPE_HARDWARE_UNIT: + +@@ -595,12 +599,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; +@@ -609,8 +613,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 */ + +@@ -618,7 +622,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, +@@ -659,9 +663,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-20200925/source/compiler/dttable1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable1.c ++++ acpica-unix2-20200925/source/compiler/dttable1.c +@@ -560,6 +560,7 @@ DtCompileDmar ( + ACPI_DMAR_DEVICE_SCOPE *DmarDeviceScope; + UINT32 DeviceScopeLength; + UINT32 PciPathLength; ++ UINT16 DmarHeaderType; + + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmar, &Subtable); +@@ -590,7 +591,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: + +@@ -637,8 +639,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 */ + +@@ -647,8 +649,8 @@ DtCompileDmar ( + } + + DtPushSubtable (Subtable); +- DeviceScopeLength = DmarHeader->Length - Subtable->Length - +- ParentTable->Length; ++ DeviceScopeLength = AcpiUtReadUint16(&DmarHeader->Length) - ++ Subtable->Length - ParentTable->Length; + while (DeviceScopeLength) + { + Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarScope, diff --git a/0010-Support-DRTM-in-a-big-endian-world.patch b/0010-Support-DRTM-in-a-big-endian-world.patch new file mode 100644 index 0000000..d4d94af --- /dev/null +++ b/0010-Support-DRTM-in-a-big-endian-world.patch @@ -0,0 +1,112 @@ +From 9583e760908d4b7d2dabec82137d16f2492d2773 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Sat, 19 Sep 2020 15:44:06 -0600 +Subject: [PATCH 10/40] Support DRTM in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump1.c | 25 +++++++++++++++---------- + source/compiler/dttable1.c | 6 ++++-- + 2 files changed, 19 insertions(+), 12 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump1.c ++++ acpica-unix2-20200925/source/common/dmtbdump1.c +@@ -692,11 +692,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)) + { +@@ -711,7 +714,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)) +@@ -724,10 +727,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)) +@@ -743,7 +747,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)) +@@ -756,10 +760,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)) +@@ -775,7 +780,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-20200925/source/compiler/dttable1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable1.c ++++ acpica-unix2-20200925/source/compiler/dttable1.c +@@ -775,7 +775,8 @@ DtCompileDrtm ( + Count++; + } + +- DrtmVtl->ValidatedTableCount = Count; ++ AcpiUtWriteUint(&DrtmVtl->ValidatedTableCount, sizeof(UINT32), ++ &Count, sizeof(UINT32)); + DtPopSubtable (); + ParentTable = DtPeekSubtable (); + +@@ -813,7 +814,8 @@ DtCompileDrtm ( + Count++; + } + +- DrtmRl->ResourceCount = Count; ++ AcpiUtWriteUint(&DrtmRl->ResourceCount, sizeof(UINT32), ++ &Count, sizeof(UINT32)); + DtPopSubtable (); + ParentTable = DtPeekSubtable (); + diff --git a/0011-Support-EINJ-in-a-big-endian-world.patch b/0011-Support-EINJ-in-a-big-endian-world.patch new file mode 100644 index 0000000..acb64f1 --- /dev/null +++ b/0011-Support-EINJ-in-a-big-endian-world.patch @@ -0,0 +1,32 @@ +From b264cb9a07faa05e6d8e5e6c2381270c218d88c4 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Sat, 19 Sep 2020 15:50:19 -0600 +Subject: [PATCH 11/40] Support EINJ in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump1.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump1.c ++++ acpica-unix2-20200925/source/common/dmtbdump1.c +@@ -804,7 +804,7 @@ AcpiDmDumpEinj ( + { + ACPI_STATUS Status; + ACPI_WHEA_HEADER *Subtable; +- UINT32 Length = Table->Length; ++ UINT32 Length = AcpiUtReadUint32(&Table->Length); + UINT32 Offset = sizeof (ACPI_TABLE_EINJ); + + +@@ -819,7 +819,7 @@ AcpiDmDumpEinj ( + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); +- while (Offset < Table->Length) ++ while (Offset < Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, diff --git a/0012-Support-ERST-in-a-big-endian-world.patch b/0012-Support-ERST-in-a-big-endian-world.patch new file mode 100644 index 0000000..2bd176e --- /dev/null +++ b/0012-Support-ERST-in-a-big-endian-world.patch @@ -0,0 +1,32 @@ +From 99f27aa1a38868a716aefd9408a8cd3788644d13 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Sat, 19 Sep 2020 15:54:56 -0600 +Subject: [PATCH 12/40] Support ERST in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump1.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump1.c ++++ acpica-unix2-20200925/source/common/dmtbdump1.c +@@ -857,7 +857,7 @@ AcpiDmDumpErst ( + { + ACPI_STATUS Status; + ACPI_WHEA_HEADER *Subtable; +- UINT32 Length = Table->Length; ++ UINT32 Length = AcpiUtReadUint32(&Table->Length); + UINT32 Offset = sizeof (ACPI_TABLE_ERST); + + +@@ -872,7 +872,7 @@ AcpiDmDumpErst ( + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset); +- while (Offset < Table->Length) ++ while (Offset < Length) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, Subtable, diff --git a/0013-Support-FADT-aka-FACP-in-a-big-endian-world.patch b/0013-Support-FADT-aka-FACP-in-a-big-endian-world.patch new file mode 100644 index 0000000..9fd3120 --- /dev/null +++ b/0013-Support-FADT-aka-FACP-in-a-big-endian-world.patch @@ -0,0 +1,189 @@ +From 3288b60b3ddc2df4656842d424bfc1e6a51b2ad2 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Sun, 20 Sep 2020 11:42:21 -0600 +Subject: [PATCH 13/40] Support FADT (aka, FACP) in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump.c | 25 ++++++++++++----------- + source/components/tables/tbfadt.c | 34 +++++++++++++++++++++++-------- + 2 files changed, 38 insertions(+), 21 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump.c ++++ acpica-unix2-20200925/source/common/dmtbdump.c +@@ -358,11 +358,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)) + { +@@ -371,10 +372,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)) + { +@@ -384,9 +385,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)) + { +@@ -395,9 +396,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)) + { +@@ -407,9 +408,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)) + { +@@ -420,11 +421,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-20200925/source/components/tables/tbfadt.c +=================================================================== +--- acpica-unix2-20200925.orig/source/components/tables/tbfadt.c ++++ acpica-unix2-20200925/source/components/tables/tbfadt.c +@@ -289,7 +289,6 @@ AcpiTbSelectAddress ( + UINT32 Address32, + UINT64 Address64) + { +- + if (!Address64) + { + /* 64-bit address is zero, use 32-bit address */ +@@ -520,6 +519,9 @@ AcpiTbConvertFadt ( + UINT8 Length; + UINT8 Flags; + UINT32 i; ++ UINT32 Tmp; ++ UINT32 Value32; ++ UINT64 Value64; + + + /* +@@ -533,7 +535,7 @@ AcpiTbConvertFadt ( + * Note: The FADT revision value is unreliable. Only the length can be + * trusted. + */ +- if (AcpiGbl_FADT.Header.Length <= ACPI_FADT_V2_SIZE) ++ if (AcpiUtReadUint32(&AcpiGbl_FADT.Header.Length) <= ACPI_FADT_V2_SIZE) + { + AcpiGbl_FADT.PreferredProfile = 0; + AcpiGbl_FADT.PstateControl = 0; +@@ -546,14 +548,19 @@ AcpiTbConvertFadt ( + * current FADT version as defined by the ACPI specification. + * Thus, we will have a common FADT internally. + */ +- AcpiGbl_FADT.Header.Length = sizeof (ACPI_TABLE_FADT); ++ Tmp = sizeof (ACPI_TABLE_FADT); ++ AcpiUtWriteUint(&AcpiGbl_FADT.Header.Length, sizeof(UINT32), ++ &Tmp, sizeof(UINT32)); + + /* + * Expand the 32-bit DSDT addresses to 64-bit as necessary. + * Later ACPICA code will always use the X 64-bit field. + */ +- AcpiGbl_FADT.XDsdt = AcpiTbSelectAddress ("DSDT", +- AcpiGbl_FADT.Dsdt, AcpiGbl_FADT.XDsdt); ++ Value32 = AcpiUtReadUint32(&AcpiGbl_FADT.Dsdt); ++ Value64 = AcpiUtReadUint64(&AcpiGbl_FADT.XDsdt); ++ Value64 = AcpiTbSelectAddress ("DSDT", Value32, Value64); ++ AcpiUtWriteUint(&AcpiGbl_FADT.XDsdt, sizeof(UINT64), ++ &Value64, sizeof(UINT64)); + + /* If Hardware Reduced flag is set, we are all done */ + +@@ -614,7 +621,11 @@ AcpiTbConvertFadt ( + { + if (Address64->Address) + { +- if (Address64->Address != (UINT64) Address32) ++ Value32 = AcpiUtReadUint32(&Address32); ++ Value64 = AcpiUtReadUint64(&Address64->Address); ++ ++ /* if (Address64->Address != (UINT64) Address32) */ ++ if (Value64 != (UINT64) Value32) + { + /* Address mismatch */ + +@@ -655,9 +666,10 @@ AcpiTbConvertFadt ( + */ + if (!Address64->Address || AcpiGbl_Use32BitFadtAddresses) + { ++ Value32 = AcpiUtReadUint32(&Address32); + AcpiTbInitGenericAddress (Address64, + ACPI_ADR_SPACE_SYSTEM_IO, Length, +- (UINT64) Address32, Name, Flags); ++ (UINT64) Value32, Name, Flags); + } + } + +@@ -780,10 +792,14 @@ AcpiTbSetupFadtRegisters ( + + if (Source64->Address) + { ++ UINT64 Address64; ++ ++ Address64 = AcpiUtReadUint64(&Source64->Address); ++ Address64 += ++ (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth); + AcpiTbInitGenericAddress (FadtPmInfoTable[i].Target, + Source64->SpaceId, Pm1RegisterByteWidth, +- Source64->Address + +- (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth), ++ Address64, + "PmRegisters", 0); + } + } diff --git a/0014-Support-most-FPDTs-in-a-big-endian-world.patch b/0014-Support-most-FPDTs-in-a-big-endian-world.patch new file mode 100644 index 0000000..f1f9715 --- /dev/null +++ b/0014-Support-most-FPDTs-in-a-big-endian-world.patch @@ -0,0 +1,85 @@ +From f0cba59f1ce62095cb0a0cecdf8d661b77bf2baf Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Tue, 22 Sep 2020 17:51:45 -0600 +Subject: [PATCH 14/40] 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 +--- + source/common/dmtbdump1.c | 12 +++++++----- + source/compiler/dttable1.c | 4 +++- + 2 files changed, 10 insertions(+), 6 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump1.c ++++ acpica-unix2-20200925/source/common/dmtbdump1.c +@@ -910,9 +910,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) */ +@@ -920,19 +921,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: + +@@ -959,7 +961,7 @@ AcpiDmDumpFpdt ( + goto NextSubtable; + } + +- Status = AcpiDmDumpTable (Length, Offset, Subtable, ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { +Index: acpica-unix2-20200925/source/compiler/dttable1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable1.c ++++ acpica-unix2-20200925/source/compiler/dttable1.c +@@ -1051,6 +1051,7 @@ DtCompileFpdt ( + ACPI_DMTABLE_INFO *InfoTable; + DT_FIELD **PFieldList = (DT_FIELD **) List; + DT_FIELD *SubtableStart; ++ UINT16 SubtableType; + + + while (*PFieldList) +@@ -1069,7 +1070,8 @@ DtCompileFpdt ( + + FpdtHeader = ACPI_CAST_PTR (ACPI_FPDT_HEADER, Subtable->Buffer); + +- switch (FpdtHeader->Type) ++ SubtableType = AcpiUtReadUint16(&FpdtHeader->Type); ++ switch (SubtableType) + { + case ACPI_FPDT_TYPE_BOOT: + diff --git a/0015-Support-GTDT-in-a-big-endian-world.patch b/0015-Support-GTDT-in-a-big-endian-world.patch new file mode 100644 index 0000000..7302133 --- /dev/null +++ b/0015-Support-GTDT-in-a-big-endian-world.patch @@ -0,0 +1,69 @@ +From faba93b1dd7ce4aa8983880e917d108496cd173f Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Tue, 22 Sep 2020 18:12:01 -0600 +Subject: [PATCH 15/40] Support GTDT in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump1.c | 13 +++++++++---- + source/compiler/dttable1.c | 9 +++++++-- + 2 files changed, 16 insertions(+), 6 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump1.c ++++ acpica-unix2-20200925/source/common/dmtbdump1.c +@@ -997,7 +997,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; +@@ -1033,7 +1033,7 @@ AcpiDmDumpGtdt ( + + /* Subtables */ + +- while (Offset < Table->Length) ++ while (Offset < Length) + { + /* Common subtable header */ + +@@ -1051,8 +1051,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-20200925/source/compiler/dttable1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable1.c ++++ acpica-unix2-20200925/source/compiler/dttable1.c +@@ -997,8 +997,13 @@ DtCompileGtdt ( + DtPushSubtable (Subtable); + ParentTable = DtPeekSubtable (); + +- GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, +- Subtable->Buffer - sizeof(ACPI_GTDT_HEADER)))->TimerCount; ++ { ++ UINT32 Tmp32; ++ ++ Tmp32 = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, ++ Subtable->Buffer - sizeof(ACPI_GTDT_HEADER)))->TimerCount; ++ GtCount = AcpiUtReadUint32(&Tmp32); ++ } + + while (GtCount) + { diff --git a/0016-Support-HEST-in-a-big-endian-world.patch b/0016-Support-HEST-in-a-big-endian-world.patch new file mode 100644 index 0000000..e38456f --- /dev/null +++ b/0016-Support-HEST-in-a-big-endian-world.patch @@ -0,0 +1,75 @@ +From 1104928443b11ff1c0446ed1604882c0e6ae4dc1 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Wed, 23 Sep 2020 11:54:49 -0600 +Subject: [PATCH 16/40] Support HEST in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump1.c | 10 ++++++---- + source/compiler/dttable1.c | 4 +++- + 2 files changed, 9 insertions(+), 5 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump1.c ++++ acpica-unix2-20200925/source/common/dmtbdump1.c +@@ -1138,12 +1138,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 */ +@@ -1157,10 +1158,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: + +@@ -1227,7 +1229,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-20200925/source/compiler/dttable1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable1.c ++++ acpica-unix2-20200925/source/compiler/dttable1.c +@@ -1133,6 +1133,7 @@ DtCompileHest ( + DT_FIELD *SubtableStart; + ACPI_DMTABLE_INFO *InfoTable; + UINT16 Type; ++ UINT16 Tmp16; + UINT32 BankCount; + + +@@ -1151,7 +1152,8 @@ DtCompileHest ( + /* Get subtable type */ + + SubtableStart = *PFieldList; +- DtCompileInteger ((UINT8 *) &Type, *PFieldList, 2, 0); ++ DtCompileInteger ((UINT8 *) &Tmp16, *PFieldList, 2, 0); ++ Type = AcpiUtReadUint32(&Tmp16); + + switch (Type) + { diff --git a/0017-Support-RSDT-RSD-PTR-in-a-big-endian-world.patch b/0017-Support-RSDT-RSD-PTR-in-a-big-endian-world.patch new file mode 100644 index 0000000..4925302 --- /dev/null +++ b/0017-Support-RSDT-RSD-PTR-in-a-big-endian-world.patch @@ -0,0 +1,37 @@ +From 6565935b43c4795387aa4814d171dcd3c02bee33 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Wed, 23 Sep 2020 12:11:46 -0600 +Subject: [PATCH 17/40] Support RSDT ('RSD PTR') in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump.c ++++ acpica-unix2-20200925/source/common/dmtbdump.c +@@ -277,6 +277,7 @@ AcpiDmDumpRsdt ( + UINT32 Entries; + UINT32 Offset; + UINT32 i; ++ UINT32 TableLength = AcpiUtReadUint32(&Table->Length); + + + /* Point to start of table pointer array */ +@@ -286,12 +287,12 @@ AcpiDmDumpRsdt ( + + /* RSDT uses 32-bit pointers */ + +- Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32); ++ Entries = (TableLength - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32); + + for (i = 0; i < Entries; i++) + { + AcpiDmLineHeader2 (Offset, sizeof (UINT32), "ACPI Table Address", i); +- AcpiOsPrintf ("%8.8X\n", Array[i]); ++ AcpiOsPrintf ("%8.8X\n", AcpiUtReadUint32(&Array[i])); + Offset += sizeof (UINT32); + } + } diff --git a/0018-Support-XSDT-in-a-big-endian-world.patch b/0018-Support-XSDT-in-a-big-endian-world.patch new file mode 100644 index 0000000..7ae8ea1 --- /dev/null +++ b/0018-Support-XSDT-in-a-big-endian-world.patch @@ -0,0 +1,38 @@ +From 8d0ea4932cebc5d13cc811eb4f78b66a5e3cfd2c Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Wed, 23 Sep 2020 12:16:37 -0600 +Subject: [PATCH 18/40] Support XSDT in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump.c ++++ acpica-unix2-20200925/source/common/dmtbdump.c +@@ -318,6 +318,7 @@ AcpiDmDumpXsdt ( + UINT32 Entries; + UINT32 Offset; + UINT32 i; ++ UINT32 TableLength = AcpiUtReadUint32(&Table->Length); + + + /* Point to start of table pointer array */ +@@ -327,12 +328,13 @@ AcpiDmDumpXsdt ( + + /* XSDT uses 64-bit pointers */ + +- Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64); ++ Entries = (TableLength - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64); + + for (i = 0; i < Entries; i++) + { + AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i); +- AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Array[i])); ++ AcpiOsPrintf ("%8.8X%8.8X\n", ++ ACPI_FORMAT_UINT64 (AcpiUtReadUint64(&Array[i]))); + Offset += sizeof (UINT64); + } + } diff --git a/0019-Support-SRAT-in-a-big-endian-world.patch b/0019-Support-SRAT-in-a-big-endian-world.patch new file mode 100644 index 0000000..6bb6215 --- /dev/null +++ b/0019-Support-SRAT-in-a-big-endian-world.patch @@ -0,0 +1,52 @@ +From 82421dd7d534f78edf85b862b196bae256cf8f87 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Wed, 23 Sep 2020 12:25:38 -0600 +Subject: [PATCH 19/40] Support SRAT in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump3.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump3.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump3.c ++++ acpica-unix2-20200925/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)) + { +@@ -245,7 +246,7 @@ AcpiDmDumpSrat ( + } + + AcpiOsPrintf ("\n"); +- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, + Subtable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { diff --git a/0020-Support-SLIT-in-a-big-endian-world.patch b/0020-Support-SLIT-in-a-big-endian-world.patch new file mode 100644 index 0000000..a0e3a5e --- /dev/null +++ b/0020-Support-SLIT-in-a-big-endian-world.patch @@ -0,0 +1,61 @@ +From 4e76aa1a5556f250f51a3802734fd6cb77718299 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Wed, 23 Sep 2020 12:49:52 -0600 +Subject: [PATCH 20/40] Support SLIT in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump3.c | 8 +++++--- + source/compiler/dttable2.c | 2 +- + 2 files changed, 6 insertions(+), 4 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump3.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump3.c ++++ acpica-unix2-20200925/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-20200925/source/compiler/dttable2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable2.c ++++ acpica-unix2-20200925/source/compiler/dttable2.c +@@ -1529,7 +1529,7 @@ DtCompileSlit ( + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + +- Localities = *ACPI_CAST_PTR (UINT32, Subtable->Buffer); ++ Localities = (UINT32) AcpiUtReadUint64(Subtable->Buffer); + LocalityBuffer = UtLocalCalloc (Localities); + LocalityListLength = 0; + diff --git a/0021-Support-MSCT-in-a-big-endian-world.patch b/0021-Support-MSCT-in-a-big-endian-world.patch new file mode 100644 index 0000000..3a59eaa --- /dev/null +++ b/0021-Support-MSCT-in-a-big-endian-world.patch @@ -0,0 +1,43 @@ +From 4ca38d182bb40ba750d8f5ac6ff8560c40f06625 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Wed, 23 Sep 2020 15:44:21 -0600 +Subject: [PATCH 21/40] Support MSCT in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump2.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump2.c ++++ acpica-unix2-20200925/source/common/dmtbdump2.c +@@ -972,11 +972,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; +@@ -985,12 +986,12 @@ AcpiDmDumpMsct ( + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset); +- while (Offset < Table->Length) ++ while (Offset < TableLength) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); +- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, + sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0); + if (ACPI_FAILURE (Status)) + { diff --git a/0022-Support-MPST-in-a-big-endian-world.patch b/0022-Support-MPST-in-a-big-endian-world.patch new file mode 100644 index 0000000..2b4c2e3 --- /dev/null +++ b/0022-Support-MPST-in-a-big-endian-world.patch @@ -0,0 +1,152 @@ +From dfe414b053fb9feb905271785b319afa7ba72932 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Wed, 23 Sep 2020 16:08:24 -0600 +Subject: [PATCH 22/40] Support MPST in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump2.c | 33 +++++++++++++++++++-------------- + source/compiler/dttable2.c | 8 ++++---- + 2 files changed, 23 insertions(+), 18 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump2.c ++++ acpica-unix2-20200925/source/common/dmtbdump2.c +@@ -834,11 +834,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; +@@ -846,13 +848,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)) + { +@@ -861,8 +864,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) */ +@@ -873,7 +876,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)) + { +@@ -896,7 +899,7 @@ AcpiDmDumpMpst ( + + while (ComponentCount) + { +- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0B, ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable0B, + sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B); + if (ACPI_FAILURE (Status)) + { +@@ -913,22 +916,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) */ +@@ -936,10 +941,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-20200925/source/compiler/dttable2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable2.c ++++ acpica-unix2-20200925/source/compiler/dttable2.c +@@ -345,7 +345,7 @@ DtCompileMpst ( + DtPushSubtable (Subtable); + + MpstChannelInfo = ACPI_CAST_PTR (ACPI_MPST_CHANNEL, Subtable->Buffer); +- SubtableCount = MpstChannelInfo->PowerNodeCount; ++ SubtableCount = AcpiUtReadUint16(&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; ++ PowerStateCount = AcpiUtReadUint16(&MpstPowerNode->NumPowerStates); ++ ComponentCount = AcpiUtReadUint16(&MpstPowerNode->NumPhysicalComponents); + + ParentTable = DtPeekSubtable (); + +@@ -417,7 +417,7 @@ DtCompileMpst ( + DtPushSubtable (Subtable); + + MpstDataHeader = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable->Buffer); +- SubtableCount = MpstDataHeader->CharacteristicsCount; ++ SubtableCount = AcpiUtReadUint16(&MpstDataHeader->CharacteristicsCount); + + ParentTable = DtPeekSubtable (); + diff --git a/0023-Support-NFIT-in-a-big-endian-world.patch b/0023-Support-NFIT-in-a-big-endian-world.patch new file mode 100644 index 0000000..42d5a7d --- /dev/null +++ b/0023-Support-NFIT-in-a-big-endian-world.patch @@ -0,0 +1,221 @@ +From 2a1f049c35736ddba45300bc5aba4db9c9df3be7 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Thu, 24 Sep 2020 15:25:53 -0600 +Subject: [PATCH 23/40] Support NFIT in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtable.c | 4 ++-- + source/common/dmtbdump2.c | 47 +++++++++++++++++++++++--------------- + source/compiler/dttable2.c | 11 ++++++--- + 3 files changed, 38 insertions(+), 24 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtable.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtable.c ++++ acpica-unix2-20200925/source/common/dmtable.c +@@ -1429,13 +1429,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-20200925/source/common/dmtbdump2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump2.c ++++ acpica-unix2-20200925/source/common/dmtbdump2.c +@@ -1084,18 +1084,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; +@@ -1104,19 +1109,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: + +@@ -1167,11 +1174,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; +@@ -1180,8 +1187,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; +@@ -1189,14 +1196,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)) +@@ -1210,12 +1218,12 @@ 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, + Length, AcpiDmTableInfoNfit3a); +@@ -1230,9 +1238,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)) +@@ -1251,8 +1260,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-20200925/source/compiler/dttable2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable2.c ++++ acpica-unix2-20200925/source/compiler/dttable2.c +@@ -517,6 +517,7 @@ DtCompileNfit ( + UINT32 Count; + ACPI_NFIT_INTERLEAVE *Interleave = NULL; + ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL; ++ UINT16 NfitHeaderType; + + + /* Main table */ +@@ -550,7 +551,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: + +@@ -610,7 +612,7 @@ DtCompileNfit ( + DtInsertSubtable (ParentTable, Subtable); + DtPopSubtable (); + +- switch (NfitHeader->Type) ++ switch (NfitHeaderType) + { + case ACPI_NFIT_TYPE_INTERLEAVE: + +@@ -636,7 +638,8 @@ DtCompileNfit ( + Count++; + } + +- Interleave->LineCount = Count; ++ AcpiUtWriteUint(&Interleave->LineCount, sizeof(UINT32), ++ &Count, sizeof(UINT32)); + break; + + case ACPI_NFIT_TYPE_SMBIOS: +@@ -682,6 +685,8 @@ DtCompileNfit ( + } + + Hint->HintCount = (UINT16) Count; ++ AcpiUtWriteUint(&Hint->HintCount, sizeof(UINT16), ++ &Count, sizeof(UINT32)); + break; + + default: diff --git a/0024-Support-SDEV-in-a-big-endian-world.patch b/0024-Support-SDEV-in-a-big-endian-world.patch new file mode 100644 index 0000000..f6d36bd --- /dev/null +++ b/0024-Support-SDEV-in-a-big-endian-world.patch @@ -0,0 +1,256 @@ +From af44bec6c062a26034a43809d81af2a0ea17343e Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Fri, 25 Sep 2020 16:05:59 -0600 +Subject: [PATCH 24/40] Support SDEV in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump2.c | 50 +++++++++++++++++++----------------- + source/compiler/dttable2.c | 52 ++++++++++++++++++++++++++++---------- + 2 files changed, 65 insertions(+), 37 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump2.c ++++ acpica-unix2-20200925/source/common/dmtbdump2.c +@@ -1871,17 +1871,18 @@ AcpiDmDumpSdev ( + ACPI_SDEV_PCIE *Pcie; + ACPI_SDEV_NAMESPACE *Namesp; + ACPI_DMTABLE_INFO *InfoTable; +- UINT32 Length = Table->Length; ++ UINT32 TableLength = AcpiUtReadUint32(&Table->Length); + UINT32 Offset = sizeof (ACPI_TABLE_SDEV); + UINT16 PathOffset; + UINT16 PathLength; + UINT16 VendorDataOffset; + UINT16 VendorDataLength; ++ UINT16 SubtableLength; + + + /* Main table */ + +- Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSdev); ++ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoSdev); + if (ACPI_FAILURE (Status)) + { + return; +@@ -1890,13 +1891,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; +@@ -1919,8 +1921,8 @@ AcpiDmDumpSdev ( + } + + AcpiOsPrintf ("\n"); +- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, +- Subtable->Length, InfoTable); ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, ++ SubtableLength, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; +@@ -1933,12 +1935,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, 0, ++ Status = AcpiDmDumpTable (TableLength, 0, + ACPI_ADD_PTR (UINT8, Namesp, PathOffset), + PathLength, AcpiDmTableInfoSdev0a); + if (ACPI_FAILURE (Status)) +@@ -1949,14 +1951,14 @@ AcpiDmDumpSdev ( + + /* Dump the vendor-specific data */ + +- VendorDataLength = +- Namesp->VendorDataLength; +- VendorDataOffset = +- Namesp->DeviceIdOffset + Namesp->DeviceIdLength; ++ VendorDataLength = AcpiUtReadUint16(&Namesp->VendorDataLength); ++ VendorDataOffset = ++ 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)) +@@ -1971,12 +1973,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); +@@ -1991,12 +1993,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)) +@@ -2013,8 +2017,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-20200925/source/compiler/dttable2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable2.c ++++ acpica-unix2-20200925/source/compiler/dttable2.c +@@ -1268,6 +1268,7 @@ DtCompileSdev ( + ACPI_SDEV_PCIE *Pcie = NULL; + ACPI_SDEV_NAMESPACE *Namesp = NULL; + UINT32 EntryCount; ++ UINT16 Tmp16; + + + /* Subtables */ +@@ -1289,7 +1290,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) + { +@@ -1345,7 +1346,7 @@ DtCompileSdev ( + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + +- Namesp->DeviceIdOffset = sizeof (ACPI_SDEV_NAMESPACE); ++ Namesp->DeviceIdOffset = (UINT16) sizeof (ACPI_SDEV_NAMESPACE); + Namesp->DeviceIdLength = (UINT16) Subtable->Length; + + /* Append Vendor data */ +@@ -1367,18 +1368,32 @@ DtCompileSdev ( + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + +- Namesp->VendorDataOffset = +- Namesp->DeviceIdOffset + Namesp->DeviceIdLength; +- Namesp->VendorDataLength = +- (UINT16) Subtable->Length; ++ Namesp->VendorDataOffset = ++ Namesp->DeviceIdOffset + ++ Namesp->DeviceIdLength; ++ Namesp->VendorDataLength = (UINT16) Subtable->Length; + + /* Final size of entire namespace structure */ + +- SdevHeader->Length = (UINT16)(sizeof(ACPI_SDEV_NAMESPACE) + +- Subtable->Length + Namesp->DeviceIdLength); ++ SdevHeader->Length = (UINT16) ++ (sizeof(ACPI_SDEV_NAMESPACE) + ++ Subtable->Length + ++ Namesp->DeviceIdLength); + } + } + ++ /* 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: +@@ -1408,9 +1423,9 @@ DtCompileSdev ( + + /* Path offset will point immediately after the main subtable */ + +- Pcie->PathOffset = sizeof (ACPI_SDEV_PCIE); ++ Pcie->PathOffset = sizeof (ACPI_SDEV_PCIE); + Pcie->PathLength = (UINT16) +- (EntryCount * sizeof (ACPI_SDEV_PCIE_PATH)); ++ (EntryCount * sizeof (ACPI_SDEV_PCIE_PATH)); + + /* Append the Vendor Data last */ + +@@ -1432,15 +1447,24 @@ DtCompileSdev ( + DtInsertSubtable (ParentTable, Subtable); + + Pcie->VendorDataOffset = +- Pcie->PathOffset + Pcie->PathLength; +- Pcie->VendorDataLength = (UINT16) +- Subtable->Length; ++ Pcie->PathOffset + Pcie->PathLength; ++ Pcie->VendorDataLength = (UINT16) Subtable->Length; + } + } + + SdevHeader->Length = +- sizeof (ACPI_SDEV_PCIE) + ++ sizeof (ACPI_SDEV_PCIE) + + Pcie->PathLength + Pcie->VendorDataLength; ++ Tmp16 = AcpiUtReadUint16(&SdevHeader->Length); ++ SdevHeader->Length = Tmp16; ++ Tmp16 = AcpiUtReadUint16(&Pcie->PathOffset); ++ Pcie->PathOffset = Tmp16; ++ Tmp16 = AcpiUtReadUint16(&Pcie->PathLength); ++ Pcie->PathLength = Tmp16; ++ Tmp16 = AcpiUtReadUint16(&Pcie->VendorDataOffset); ++ Pcie->VendorDataOffset = Tmp16; ++ Tmp16 = AcpiUtReadUint16(&Pcie->VendorDataLength); ++ Pcie->VendorDataLength = Tmp16; + break; + + default: diff --git a/0025-Support-HMAT-in-a-big-endian-world.patch b/0025-Support-HMAT-in-a-big-endian-world.patch new file mode 100644 index 0000000..39ebf62 --- /dev/null +++ b/0025-Support-HMAT-in-a-big-endian-world.patch @@ -0,0 +1,278 @@ +From 03425774d2c19874ad4483ec6b7e13c0146e81f7 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Fri, 25 Sep 2020 16:56:55 -0600 +Subject: [PATCH 25/40] Support HMAT in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump1.c | 70 ++++++++++++++++++++++---------------- + source/compiler/dttable1.c | 24 ++++++++++--- + 2 files changed, 59 insertions(+), 35 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump1.c ++++ acpica-unix2-20200925/source/common/dmtbdump1.c +@@ -1301,37 +1301,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: + +@@ -1354,7 +1362,7 @@ AcpiDmDumpHmat ( + default: + + AcpiOsPrintf ("\n**** Unknown HMAT structure type 0x%X\n", +- HmatStruct->Type); ++ HmatStructType); + + /* Attempt to continue */ + +@@ -1363,13 +1371,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; +@@ -1377,7 +1385,7 @@ AcpiDmDumpHmat ( + + /* Dump HMAT structure additionals */ + +- switch (HmatStruct->Type) ++ switch (HmatStructType) + { + case ACPI_HMAT_TYPE_LOCALITY: + +@@ -1386,15 +1394,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)) +@@ -1407,15 +1416,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)) +@@ -1428,18 +1438,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)) +@@ -1459,15 +1468,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)) +@@ -1487,6 +1497,6 @@ AcpiDmDumpHmat ( + NextSubtable: + /* Point to next HMAT structure subtable */ + +- Offset += (HmatStruct->Length); ++ Offset += (HmatStructLength); + } + } +Index: acpica-unix2-20200925/source/compiler/dttable1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable1.c ++++ acpica-unix2-20200925/source/compiler/dttable1.c +@@ -1295,6 +1295,8 @@ DtCompileHmat ( + UINT32 TgtPDNumber; + UINT64 EntryNumber; + UINT16 SMBIOSHandleNumber; ++ UINT16 HmatStructType; ++ UINT32 Length; + + + ParentTable = DtPeekSubtable (); +@@ -1325,7 +1327,8 @@ DtCompileHmat ( + + /* Compile HMAT structure body */ + +- switch (HmatStruct->Type) ++ HmatStructType = AcpiUtReadUint16(&HmatStruct->Type); ++ switch (HmatStructType) + { + case ACPI_HMAT_TYPE_ADDRESS_RANGE: + +@@ -1358,7 +1361,7 @@ DtCompileHmat ( + + /* Compile HMAT structure additionals */ + +- switch (HmatStruct->Type) ++ switch (HmatStructType) + { + case ACPI_HMAT_TYPE_LOCALITY: + +@@ -1384,7 +1387,7 @@ DtCompileHmat ( + HmatStruct->Length += Subtable->Length; + IntPDNumber++; + } +- HmatLocality->NumberOfInitiatorPDs = IntPDNumber; ++ HmatLocality->NumberOfInitiatorPDs = AcpiUtReadUint32(&IntPDNumber); + + /* Compile target proximity domain list */ + +@@ -1405,7 +1408,7 @@ DtCompileHmat ( + HmatStruct->Length += Subtable->Length; + TgtPDNumber++; + } +- HmatLocality->NumberOfTargetPDs = TgtPDNumber; ++ HmatLocality->NumberOfTargetPDs = AcpiUtReadUint32(&TgtPDNumber); + + /* Save start of the entries for reporting errors */ + +@@ -1430,6 +1433,9 @@ DtCompileHmat ( + HmatStruct->Length += Subtable->Length; + EntryNumber++; + } ++ ++ Length = AcpiUtReadUint32(&HmatStruct->Length); ++ HmatStruct->Length = Length; + + /* Validate number of entries */ + +@@ -1464,11 +1470,19 @@ DtCompileHmat ( + HmatStruct->Length += Subtable->Length; + SMBIOSHandleNumber++; + } +- HmatCache->NumberOfSMBIOSHandles = SMBIOSHandleNumber; ++ HmatCache->NumberOfSMBIOSHandles = ++ AcpiUtReadUint16(&SMBIOSHandleNumber); ++ ++ Length = AcpiUtReadUint32(&HmatStruct->Length); ++ HmatStruct->Length = Length; ++ + break; + + default: + ++ Length = AcpiUtReadUint32(&HmatStruct->Length); ++ HmatStruct->Length = Length; ++ + break; + } + } diff --git a/0026-Support-PDTT-in-a-big-endian-world.patch b/0026-Support-PDTT-in-a-big-endian-world.patch new file mode 100644 index 0000000..5b4269f --- /dev/null +++ b/0026-Support-PDTT-in-a-big-endian-world.patch @@ -0,0 +1,43 @@ +From afaa9043357a3b8adbaa1ea389a62da48f561896 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Fri, 25 Sep 2020 17:03:05 -0600 +Subject: [PATCH 26/40] Support PDTT in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump2.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump2.c ++++ acpica-unix2-20200925/source/common/dmtbdump2.c +@@ -1385,13 +1385,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; +@@ -1400,10 +1400,10 @@ AcpiDmDumpPdtt ( + /* Subtables. Currently there is only one type, but can be multiples */ + + Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Table, Offset); +- while (Offset < Table->Length) ++ while (Offset < TableLength) + { + AcpiOsPrintf ("\n"); +- Status = AcpiDmDumpTable (Length, Offset, Subtable, ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, + sizeof (ACPI_PDTT_CHANNEL), AcpiDmTableInfoPdtt0); + if (ACPI_FAILURE (Status)) + { diff --git a/0027-Support-PPTT-in-a-big-endian-world.patch b/0027-Support-PPTT-in-a-big-endian-world.patch new file mode 100644 index 0000000..a047d45 --- /dev/null +++ b/0027-Support-PPTT-in-a-big-endian-world.patch @@ -0,0 +1,104 @@ +From c5d7294c6deb7fe87eac981234d4c484313d5e40 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Fri, 25 Sep 2020 17:16:12 -0600 +Subject: [PATCH 27/40] Support PPTT in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump2.c | 15 +++++++++------ + source/compiler/dttable2.c | 7 +++++-- + 2 files changed, 14 insertions(+), 8 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump2.c ++++ acpica-unix2-20200925/source/common/dmtbdump2.c +@@ -1649,6 +1649,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) */ +@@ -1656,7 +1658,7 @@ AcpiDmDumpPptt ( + /* Subtables */ + + Offset = sizeof (ACPI_TABLE_HEADER); +- while (Offset < Table->Length) ++ while (Offset < TableLength) + { + AcpiOsPrintf ("\n"); + +@@ -1668,7 +1670,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)) + { +@@ -1710,7 +1712,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)) + { +@@ -1726,15 +1728,16 @@ AcpiDmDumpPptt ( + + /* Dump SMBIOS handles */ + ++ NumPrivRes = AcpiUtReadUint32(&PpttProcessor->NumberOfPrivResources); + if ((UINT8)(Subtable->Length - SubtableOffset) < +- (UINT8)(PpttProcessor->NumberOfPrivResources * 4)) ++ (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-20200925/source/compiler/dttable2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable2.c ++++ acpica-unix2-20200925/source/compiler/dttable2.c +@@ -1028,6 +1028,7 @@ DtCompilePptt ( + ACPI_DMTABLE_INFO *InfoTable; + DT_FIELD **PFieldList = (DT_FIELD **) List; + DT_FIELD *SubtableStart; ++ UINT32 NumPrivRes; + + + ParentTable = DtPeekSubtable (); +@@ -1092,7 +1093,7 @@ DtCompilePptt ( + { + /* Compile initiator proximity domain list */ + +- PpttProcessor->NumberOfPrivResources = 0; ++ NumPrivRes = 0; + while (*PFieldList) + { + Status = DtCompileTable (PFieldList, +@@ -1108,8 +1109,10 @@ DtCompilePptt ( + + DtInsertSubtable (ParentTable, Subtable); + PpttHeader->Length += (UINT8)(Subtable->Length); +- PpttProcessor->NumberOfPrivResources++; ++ NumPrivRes++; + } ++ PpttProcessor->NumberOfPrivResources = ++ AcpiUtReadUint32(&NumPrivRes); + } + break; + diff --git a/0028-Support-PCCT-in-a-big-endian-world.patch b/0028-Support-PCCT-in-a-big-endian-world.patch new file mode 100644 index 0000000..49607ea --- /dev/null +++ b/0028-Support-PCCT-in-a-big-endian-world.patch @@ -0,0 +1,54 @@ +From 661f59c00e991553fb3f5fe7786eb0e2f640805c Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Fri, 25 Sep 2020 17:39:34 -0600 +Subject: [PATCH 28/40] Support PCCT in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump2.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump2.c ++++ acpica-unix2-20200925/source/common/dmtbdump2.c +@@ -1286,13 +1286,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; +@@ -1301,12 +1301,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)) + { +@@ -1349,7 +1349,7 @@ AcpiDmDumpPcct ( + } + + AcpiOsPrintf ("\n"); +- Status = AcpiDmDumpTable (Length, Offset, Subtable, ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, + Subtable->Header.Length, InfoTable); + if (ACPI_FAILURE (Status)) + { diff --git a/0029-Support-WDAT-in-a-big-endian-world.patch b/0029-Support-WDAT-in-a-big-endian-world.patch new file mode 100644 index 0000000..3e0661c --- /dev/null +++ b/0029-Support-WDAT-in-a-big-endian-world.patch @@ -0,0 +1,43 @@ +From 520e143b2bacb39032c06a33f61ae05583be6b2a Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Fri, 25 Sep 2020 18:13:20 -0600 +Subject: [PATCH 29/40] Support WDAT in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump3.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump3.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump3.c ++++ acpica-unix2-20200925/source/common/dmtbdump3.c +@@ -568,11 +568,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; +@@ -581,12 +582,12 @@ AcpiDmDumpWdat ( + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset); +- while (Offset < Table->Length) ++ while (Offset < TableLength) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); +- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, + sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0); + if (ACPI_FAILURE (Status)) + { diff --git a/0030-Support-TCPA-in-a-big-endian-world.patch b/0030-Support-TCPA-in-a-big-endian-world.patch new file mode 100644 index 0000000..4c9780e --- /dev/null +++ b/0030-Support-TCPA-in-a-big-endian-world.patch @@ -0,0 +1,76 @@ +From b2e9a4397077ad56fea5a8b3f9f63ce3be65ae48 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Sun, 27 Sep 2020 12:09:28 -0600 +Subject: [PATCH 30/40] Support TCPA in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump3.c | 13 ++++++++----- + source/compiler/dttable2.c | 4 +++- + 2 files changed, 11 insertions(+), 6 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump3.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump3.c ++++ acpica-unix2-20200925/source/common/dmtbdump3.c +@@ -342,11 +342,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)) + { +@@ -357,18 +359,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-20200925/source/compiler/dttable2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable2.c ++++ acpica-unix2-20200925/source/compiler/dttable2.c +@@ -1773,6 +1773,7 @@ DtCompileTcpa ( + ACPI_TABLE_TCPA_HDR *TcpaHeader; + DT_SUBTABLE *ParentTable; + ACPI_STATUS Status; ++ UINT16 PlatformClass; + + + /* Compile the main table */ +@@ -1793,7 +1794,8 @@ DtCompileTcpa ( + */ + TcpaHeader = ACPI_CAST_PTR (ACPI_TABLE_TCPA_HDR, ParentTable->Buffer); + +- switch (TcpaHeader->PlatformClass) ++ PlatformClass = AcpiUtReadUint16(&TcpaHeader->PlatformClass); ++ switch (PlatformClass) + { + case ACPI_TCPA_CLIENT_TABLE: + diff --git a/0031-Support-STAO-in-a-big-endian-world.patch b/0031-Support-STAO-in-a-big-endian-world.patch new file mode 100644 index 0000000..7ea55bc --- /dev/null +++ b/0031-Support-STAO-in-a-big-endian-world.patch @@ -0,0 +1,40 @@ +From 63fc38478f12b8c8b0d263d25f72ff7538fba2ce Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Mon, 28 Sep 2020 11:49:42 -0600 +Subject: [PATCH 31/40] Support STAO in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump3.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump3.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump3.c ++++ acpica-unix2-20200925/source/common/dmtbdump3.c +@@ -285,14 +285,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; +@@ -300,7 +300,7 @@ AcpiDmDumpStao ( + + /* The rest of the table consists of Namepath strings */ + +- while (Offset < Table->Length) ++ while (Offset < TableLength) + { + Namepath = ACPI_ADD_PTR (char, Table, Offset); + StringLength = strlen (Namepath) + 1; diff --git a/0032-Support-SLIC-and-MSDM-in-a-big-endian-world.patch b/0032-Support-SLIC-and-MSDM-in-a-big-endian-world.patch new file mode 100644 index 0000000..bc20a15 --- /dev/null +++ b/0032-Support-SLIC-and-MSDM-in-a-big-endian-world.patch @@ -0,0 +1,27 @@ +From 0455d918688d9d208644d7f5f6f10d6199486e9c Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Mon, 28 Sep 2020 12:49:23 -0600 +Subject: [PATCH 32/40] Support SLIC and MSDM in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump3.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump3.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump3.c ++++ acpica-unix2-20200925/source/common/dmtbdump3.c +@@ -68,9 +68,10 @@ 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), Table, ++ TableLength - sizeof (*Table), AcpiDmTableInfoSlic); + } + + diff --git a/0033-Support-MCFG-in-a-big-endian-world.patch b/0033-Support-MCFG-in-a-big-endian-world.patch new file mode 100644 index 0000000..f50441b --- /dev/null +++ b/0033-Support-MCFG-in-a-big-endian-world.patch @@ -0,0 +1,50 @@ +From 0fecc447cd64bf9da3345b2912e41e6005eb1011 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Mon, 28 Sep 2020 13:01:18 -0600 +Subject: [PATCH 33/40] Support MCFG in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump2.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump2.c ++++ acpica-unix2-20200925/source/common/dmtbdump2.c +@@ -769,11 +769,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; +@@ -782,17 +783,17 @@ AcpiDmDumpMcfg ( + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset); +- while (Offset < Table->Length) ++ while (Offset < TableLength) + { +- if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length) ++ if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > TableLength) + { + AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n", +- (UINT32) sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length)); ++ (UINT32) sizeof (ACPI_MCFG_ALLOCATION) - (Offset - TableLength)); + return; + } + + AcpiOsPrintf ("\n"); +- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, + sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0); + if (ACPI_FAILURE (Status)) + { diff --git a/0034-Support-LPIT-in-a-big-endian-world.patch b/0034-Support-LPIT-in-a-big-endian-world.patch new file mode 100644 index 0000000..fd68c2a --- /dev/null +++ b/0034-Support-LPIT-in-a-big-endian-world.patch @@ -0,0 +1,46 @@ +From b521edcfceab513a900a000aa462d7f86b65a040 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Mon, 28 Sep 2020 16:49:30 -0600 +Subject: [PATCH 34/40] Support LPIT in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump2.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump2.c ++++ acpica-unix2-20200925/source/common/dmtbdump2.c +@@ -534,7 +534,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; +@@ -543,11 +543,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)) + { +@@ -571,7 +571,7 @@ AcpiDmDumpLpit ( + return; + } + +- Status = AcpiDmDumpTable (Length, Offset, Subtable, ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, + SubtableLength, InfoTable); + if (ACPI_FAILURE (Status)) + { diff --git a/0035-Support-PMTT-in-a-big-endian-world.patch b/0035-Support-PMTT-in-a-big-endian-world.patch new file mode 100644 index 0000000..b6aaee6 --- /dev/null +++ b/0035-Support-PMTT-in-a-big-endian-world.patch @@ -0,0 +1,216 @@ +From b55af37d2419fc5ea630774f49b4ed9b724451b3 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Mon, 28 Sep 2020 18:37:04 -0600 +Subject: [PATCH 35/40] Support PMTT in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump2.c | 66 +++++++++++++++++++++----------------- + source/compiler/dttable2.c | 5 ++- + 2 files changed, 41 insertions(+), 30 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump2.c ++++ acpica-unix2-20200925/source/common/dmtbdump2.c +@@ -1442,17 +1442,21 @@ AcpiDmDumpPmtt ( + ACPI_PMTT_HEADER *MemSubtable; + ACPI_PMTT_HEADER *DimmSubtable; + ACPI_PMTT_DOMAIN *DomainArray; +- UINT32 Length = Table->Length; ++ UINT32 TableLength = AcpiUtReadUint32(&Table->Length); + UINT32 Offset = sizeof (ACPI_TABLE_PMTT); + UINT32 MemOffset; + UINT32 DimmOffset; + UINT32 DomainOffset; + UINT32 DomainCount; ++ UINT16 SubtableLength; ++ UINT16 MemSubtableLength; ++ UINT16 DimmSubtableLength; ++ UINT16 Tmp16; + + + /* Main table */ + +- Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPmtt); ++ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoPmtt); + if (ACPI_FAILURE (Status)) + { + return; +@@ -1461,13 +1465,14 @@ AcpiDmDumpPmtt ( + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset); +- while (Offset < Table->Length) ++ while (Offset < TableLength) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); +- Status = AcpiDmDumpTable (Length, Offset, Subtable, +- Subtable->Length, AcpiDmTableInfoPmttHdr); ++ SubtableLength = AcpiUtReadUint16(&Subtable->Length); ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, ++ SubtableLength, AcpiDmTableInfoPmttHdr); + if (ACPI_FAILURE (Status)) + { + return; +@@ -1485,8 +1490,8 @@ AcpiDmDumpPmtt ( + + /* Dump the fixed-length portion of the subtable */ + +- Status = AcpiDmDumpTable (Length, Offset, Subtable, +- Subtable->Length, AcpiDmTableInfoPmtt0); ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, ++ SubtableLength, AcpiDmTableInfoPmtt0); + if (ACPI_FAILURE (Status)) + { + return; +@@ -1498,15 +1503,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) < TableLength) && ++ (MemOffset < SubtableLength)) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); +- Status = AcpiDmDumpTable (Length, ++ MemSubtableLength = AcpiUtReadUint16(&MemSubtable->Length); ++ Status = AcpiDmDumpTable (TableLength, + Offset + MemOffset, MemSubtable, +- MemSubtable->Length, AcpiDmTableInfoPmttHdr); ++ MemSubtableLength, AcpiDmTableInfoPmttHdr); + if (ACPI_FAILURE (Status)) + { + return; +@@ -1524,9 +1530,9 @@ AcpiDmDumpPmtt ( + + /* Dump the fixed-length portion of the controller subtable */ + +- Status = AcpiDmDumpTable (Length, ++ Status = AcpiDmDumpTable (TableLength, + Offset + MemOffset, MemSubtable, +- MemSubtable->Length, AcpiDmTableInfoPmtt1); ++ MemSubtableLength, AcpiDmTableInfoPmtt1); + if (ACPI_FAILURE (Status)) + { + return; +@@ -1534,16 +1540,17 @@ AcpiDmDumpPmtt ( + + /* Walk the variable count of proximity domains */ + +- DomainCount = ((ACPI_PMTT_CONTROLLER *) MemSubtable)->DomainCount; ++ Tmp16 = ((ACPI_PMTT_CONTROLLER *) MemSubtable)->DomainCount; ++ DomainCount = AcpiUtReadUint16(&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) < TableLength) && ++ ((MemOffset + DomainOffset) < SubtableLength) && + DomainCount) + { +- Status = AcpiDmDumpTable (Length, ++ Status = AcpiDmDumpTable (TableLength, + Offset + MemOffset + DomainOffset, DomainArray, + sizeof (ACPI_PMTT_DOMAIN), AcpiDmTableInfoPmtt1a); + if (ACPI_FAILURE (Status)) +@@ -1568,15 +1575,16 @@ AcpiDmDumpPmtt ( + DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, MemSubtable, + DomainOffset); + +- while (((Offset + MemOffset + DimmOffset) < Table->Length) && +- (DimmOffset < MemSubtable->Length)) ++ while (((Offset + MemOffset + DimmOffset) < TableLength) && ++ (DimmOffset < MemSubtableLength)) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); +- Status = AcpiDmDumpTable (Length, ++ DimmSubtableLength = AcpiUtReadUint16(&DimmSubtable->Length); ++ Status = AcpiDmDumpTable (TableLength, + Offset + MemOffset + DimmOffset, DimmSubtable, +- DimmSubtable->Length, AcpiDmTableInfoPmttHdr); ++ DimmSubtableLength, AcpiDmTableInfoPmttHdr); + if (ACPI_FAILURE (Status)) + { + return; +@@ -1594,9 +1602,9 @@ AcpiDmDumpPmtt ( + + /* Dump the fixed-length DIMM subtable */ + +- Status = AcpiDmDumpTable (Length, ++ Status = AcpiDmDumpTable (TableLength, + Offset + MemOffset + DimmOffset, DimmSubtable, +- DimmSubtable->Length, AcpiDmTableInfoPmtt2); ++ DimmSubtableLength, AcpiDmTableInfoPmtt2); + if (ACPI_FAILURE (Status)) + { + return; +@@ -1604,23 +1612,23 @@ AcpiDmDumpPmtt ( + + /* Point to next DIMM subtable */ + +- DimmOffset += DimmSubtable->Length; ++ DimmOffset += DimmSubtableLength; + DimmSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, +- DimmSubtable, DimmSubtable->Length); ++ DimmSubtable, DimmSubtableLength); + } + + /* Point to next Controller subtable */ + +- MemOffset += MemSubtable->Length; ++ MemOffset += MemSubtableLength; + MemSubtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, +- MemSubtable, MemSubtable->Length); ++ MemSubtable, MemSubtableLength); + } + + /* Point to next Socket subtable */ + +- Offset += Subtable->Length; ++ Offset += SubtableLength; + Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, +- Subtable, Subtable->Length); ++ Subtable, SubtableLength); + } + } + +Index: acpica-unix2-20200925/source/compiler/dttable2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable2.c ++++ acpica-unix2-20200925/source/compiler/dttable2.c +@@ -885,6 +885,7 @@ DtCompilePmtt ( + ACPI_PMTT_HEADER *PmttHeader; + ACPI_PMTT_CONTROLLER *PmttController; + UINT16 DomainCount; ++ UINT16 Length; + UINT8 PrevType = ACPI_PMTT_TYPE_SOCKET; + + +@@ -929,6 +930,8 @@ DtCompilePmtt ( + DtInsertSubtable (ParentTable, Subtable); + DtPushSubtable (Subtable); + ++ Length = AcpiUtReadUint16(&PmttHeader->Length); ++ PmttHeader->Length = Length; + switch (PmttHeader->Type) + { + case ACPI_PMTT_TYPE_SOCKET: +@@ -962,7 +965,7 @@ DtCompilePmtt ( + + PmttController = ACPI_CAST_PTR (ACPI_PMTT_CONTROLLER, + (Subtable->Buffer - sizeof (ACPI_PMTT_HEADER))); +- DomainCount = PmttController->DomainCount; ++ DomainCount = AcpiUtReadUint16(&PmttController->DomainCount); + + while (DomainCount) + { diff --git a/0036-Support-IORT-in-a-big-endian-world.patch b/0036-Support-IORT-in-a-big-endian-world.patch new file mode 100644 index 0000000..e44456e --- /dev/null +++ b/0036-Support-IORT-in-a-big-endian-world.patch @@ -0,0 +1,365 @@ +From 88d16feb9d6982cc9c09f2ae9b76b26f0d9c96e0 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Wed, 30 Sep 2020 17:48:04 -0600 +Subject: [PATCH 36/40] Support IORT in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump2.c | 73 ++++++++++++++++++++++---------------- + source/compiler/dttable1.c | 37 ++++++++++--------- + 2 files changed, 64 insertions(+), 46 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump2.c ++++ acpica-unix2-20200925/source/common/dmtbdump2.c +@@ -75,16 +75,19 @@ AcpiDmDumpIort ( + ACPI_IORT_SMMU *IortSmmu = NULL; + UINT32 Offset; + UINT32 NodeOffset; ++ UINT32 NodeLength; + UINT32 Length; + ACPI_DMTABLE_INFO *InfoTable; + char *String; + UINT32 i; + UINT32 MappingByteLength; ++ 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; +@@ -95,25 +98,26 @@ 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 */ + + IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, Table, Offset); + AcpiOsPrintf ("\n"); + Length = ACPI_OFFSET (ACPI_IORT_NODE, NodeData); +- Status = AcpiDmDumpTable (Table->Length, Offset, ++ Status = AcpiDmDumpTable (TableLength, Offset, + IortNode, Length, AcpiDmTableInfoIortHdr); + if (ACPI_FAILURE (Status)) + { +@@ -142,7 +146,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: +@@ -155,13 +159,13 @@ 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; + + default: +@@ -171,7 +175,7 @@ AcpiDmDumpIort ( + + /* Attempt to continue */ + +- if (!IortNode->Length) ++ if (!AcpiUtReadUint16(&IortNode->Length)) + { + AcpiOsPrintf ("Invalid zero length IORT node\n"); + return; +@@ -182,7 +186,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)) +@@ -202,9 +206,11 @@ 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)) +@@ -221,12 +227,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)) + { +@@ -243,9 +251,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)) +@@ -253,10 +263,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)) +@@ -267,10 +278,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)) +@@ -290,12 +302,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)) +@@ -309,7 +322,7 @@ AcpiDmDumpIort ( + NextSubtable: + /* Point to next node subtable */ + +- Offset += IortNode->Length; ++ Offset += AcpiUtReadUint16(&IortNode->Length); + } + } + +Index: acpica-unix2-20200925/source/compiler/dttable1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable1.c ++++ acpica-unix2-20200925/source/compiler/dttable1.c +@@ -1516,6 +1516,7 @@ DtCompileIort ( + ACPI_IORT_NODE *IortNode; + ACPI_IORT_ITS_GROUP *IortItsGroup; + ACPI_IORT_SMMU *IortSmmu; ++ UINT32 IortNodeOffset; + UINT32 NodeNumber; + UINT32 NodeLength; + UINT32 IdMappingNumber; +@@ -1548,7 +1549,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)) +@@ -1558,7 +1559,7 @@ DtCompileIort ( + if (Subtable) + { + DtInsertSubtable (ParentTable, Subtable); +- Iort->NodeOffset += Subtable->Length; ++ IortNodeOffset += Subtable->Length; + } + else + { +@@ -1568,8 +1569,9 @@ DtCompileIort ( + { + return (Status); + } +- Iort->NodeOffset += PaddingLength; ++ IortNodeOffset += PaddingLength; + } ++ Iort->NodeOffset = AcpiUtReadUint32(&IortNodeOffset); + + NodeNumber = 0; + while (*PFieldList) +@@ -1623,7 +1625,7 @@ DtCompileIort ( + ItsNumber++; + } + +- IortItsGroup->ItsCount = ItsNumber; ++ IortItsGroup->ItsCount = AcpiUtReadUint32(&ItsNumber); + break; + + case ACPI_IORT_NODE_NAMED_COMPONENT: +@@ -1657,15 +1659,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)) + { +@@ -1673,7 +1678,7 @@ DtCompileIort ( + } + + DtInsertSubtable (ParentTable, Subtable); +- NodeLength = IortNode->MappingOffset; ++ NodeLength = MappingOffset; + } + } + break; +@@ -1706,7 +1711,7 @@ DtCompileIort ( + + /* Compile global interrupt array */ + +- IortSmmu->GlobalInterruptOffset = NodeLength; ++ IortSmmu->GlobalInterruptOffset = AcpiUtReadUint32(&NodeLength); + Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3a, + &Subtable); + if (ACPI_FAILURE (Status)) +@@ -1720,7 +1725,7 @@ DtCompileIort ( + /* Compile context interrupt array */ + + ContextIrptNumber = 0; +- IortSmmu->ContextInterruptOffset = NodeLength; ++ IortSmmu->ContextInterruptOffset = AcpiUtReadUint32(&NodeLength); + while (*PFieldList) + { + Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3b, +@@ -1740,12 +1745,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, +@@ -1765,7 +1770,7 @@ DtCompileIort ( + PmuIrptNumber++; + } + +- IortSmmu->PmuInterruptCount = PmuIrptNumber; ++ IortSmmu->PmuInterruptCount = AcpiUtReadUint32(&PmuIrptNumber); + break; + + case ACPI_IORT_NODE_SMMU_V3: +@@ -1802,7 +1807,7 @@ DtCompileIort ( + + /* Compile Array of ID mappings */ + +- IortNode->MappingOffset = NodeLength; ++ IortNode->MappingOffset = AcpiUtReadUint32(&NodeLength); + IdMappingNumber = 0; + while (*PFieldList) + { +@@ -1823,7 +1828,7 @@ DtCompileIort ( + IdMappingNumber++; + } + +- IortNode->MappingCount = IdMappingNumber; ++ IortNode->MappingCount = AcpiUtReadUint32(&IdMappingNumber); + if (!IdMappingNumber) + { + IortNode->MappingOffset = 0; +@@ -1838,7 +1843,7 @@ DtCompileIort ( + NodeNumber++; + } + +- Iort->NodeCount = NodeNumber; ++ Iort->NodeCount = AcpiUtReadUint32(&NodeNumber); + return (AE_OK); + } + diff --git a/0037-Support-IVRS-in-a-big-endian-world.patch b/0037-Support-IVRS-in-a-big-endian-world.patch new file mode 100644 index 0000000..53f8bf2 --- /dev/null +++ b/0037-Support-IVRS-in-a-big-endian-world.patch @@ -0,0 +1,96 @@ +From 49b3d77990241c7216412d78e52cf15b3aa6d1ad Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Wed, 30 Sep 2020 18:18:07 -0600 +Subject: [PATCH 37/40] Support IVRS in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump2.c | 25 ++++++++++++++----------- + 1 file changed, 14 insertions(+), 11 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump2.c ++++ acpica-unix2-20200925/source/common/dmtbdump2.c +@@ -353,11 +353,13 @@ 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; +@@ -366,13 +368,14 @@ AcpiDmDumpIvrs ( + /* Subtables */ + + Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset); +- while (Offset < Table->Length) ++ while (Offset < TableLength) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); +- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, +- Subtable->Length, AcpiDmTableInfoIvrsHdr); ++ SubtableLength = AcpiUtReadUint16(&Subtable->Length); ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, ++ SubtableLength, AcpiDmTableInfoIvrsHdr); + if (ACPI_FAILURE (Status)) + { + return; +@@ -404,7 +407,7 @@ AcpiDmDumpIvrs ( + + /* Attempt to continue */ + +- if (!Subtable->Length) ++ if (!SubtableLength) + { + AcpiOsPrintf ("Invalid zero length subtable\n"); + return; +@@ -415,8 +418,8 @@ AcpiDmDumpIvrs ( + /* Dump the subtable */ + + AcpiOsPrintf ("\n"); +- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, +- Subtable->Length, InfoTable); ++ Status = AcpiDmDumpTable (TableLength, Offset, Subtable, ++ SubtableLength, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; +@@ -442,7 +445,7 @@ AcpiDmDumpIvrs ( + sizeof (ACPI_IVRS_HARDWARE2)); + } + +- while (EntryOffset < (Offset + Subtable->Length)) ++ while (EntryOffset < (Offset + SubtableLength)) + { + AcpiOsPrintf ("\n"); + /* +@@ -504,7 +507,7 @@ AcpiDmDumpIvrs ( + + /* Dump the Device Entry */ + +- Status = AcpiDmDumpTable (Table->Length, EntryOffset, ++ Status = AcpiDmDumpTable (TableLength, EntryOffset, + DeviceEntry, EntryLength, InfoTable); + if (ACPI_FAILURE (Status)) + { +@@ -520,8 +523,8 @@ AcpiDmDumpIvrs ( + NextSubtable: + /* Point to next subtable */ + +- Offset += Subtable->Length; +- Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, Subtable->Length); ++ Offset += SubtableLength; ++ Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, SubtableLength); + } + } + diff --git a/0038-Support-TPM2-in-a-big-endian-world.patch b/0038-Support-TPM2-in-a-big-endian-world.patch new file mode 100644 index 0000000..b0298bb --- /dev/null +++ b/0038-Support-TPM2-in-a-big-endian-world.patch @@ -0,0 +1,119 @@ +From 1e1129d788087025cf31b0c3babdb9bca01f1c4e Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Wed, 30 Sep 2020 18:42:38 -0600 +Subject: [PATCH 38/40] Support TPM2 in a big-endian world + +Signed-off-by: Al Stone +--- + source/common/dmtbdump3.c | 18 ++++++++++-------- + source/compiler/dttable2.c | 8 +++++--- + 2 files changed, 15 insertions(+), 11 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump3.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump3.c ++++ acpica-unix2-20200925/source/common/dmtbdump3.c +@@ -409,11 +409,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; +@@ -425,8 +426,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: +@@ -456,6 +457,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) +@@ -466,7 +468,7 @@ AcpiDmDumpTpm2 ( + + /* Main table */ + +- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2); ++ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoTpm2); + + if (ACPI_FAILURE (Status)) + { +@@ -474,8 +476,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; +@@ -490,8 +492,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-20200925/source/compiler/dttable2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable2.c ++++ acpica-unix2-20200925/source/compiler/dttable2.c +@@ -1904,6 +1904,7 @@ DtCompileTpm2 ( + DT_SUBTABLE *ParentTable; + ACPI_STATUS Status = AE_OK; + ACPI_TABLE_HEADER *Header; ++ UINT8 StartMethod; + + + ParentTable = DtPeekSubtable (); +@@ -1947,7 +1948,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: + +@@ -1978,7 +1980,7 @@ DtCompileTpm2 ( + case ACPI_TPM2_RESERVED10: + + AcpiOsPrintf ("\n**** Reserved TPM2 Start Method type 0x%X\n", +- Tpm2Header->StartMethod); ++ StartMethod); + Status = AE_ERROR; + break; + +@@ -1986,7 +1988,7 @@ DtCompileTpm2 ( + default: + + AcpiOsPrintf ("\n**** Unknown TPM2 Start Method type 0x%X\n", +- Tpm2Header->StartMethod); ++ StartMethod); + Status = AE_ERROR; + break; + } diff --git a/0039-Add-partial-big-endian-support-for-WPBT-tables.patch b/0039-Add-partial-big-endian-support-for-WPBT-tables.patch new file mode 100644 index 0000000..e5192e5 --- /dev/null +++ b/0039-Add-partial-big-endian-support-for-WPBT-tables.patch @@ -0,0 +1,61 @@ +From 9d7f9c8f4ecbee2e621d471a8c4944cebe62947d Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Wed, 30 Sep 2020 18:59:57 -0600 +Subject: [PATCH 39/40] Add partial big-endian support for WPBT tables + +There's some weirdness here that at present does not warrant +further investigation; this is just a really low priority table. + +Signed-off-by: Al Stone +--- + source/common/dmtbdump3.c | 8 ++++---- + source/compiler/dttable2.c | 3 ++- + 2 files changed, 6 insertions(+), 5 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmtbdump3.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump3.c ++++ acpica-unix2-20200925/source/common/dmtbdump3.c +@@ -628,13 +628,13 @@ AcpiDmDumpWpbt ( + { + ACPI_STATUS Status; + ACPI_TABLE_WPBT *Subtable; +- UINT32 Length = Table->Length; ++ UINT32 TableLength = AcpiUtReadUint32(&Table->Length); + UINT16 ArgumentsLength; + + + /* Dump the main table */ + +- Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoWpbt); ++ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoWpbt); + if (ACPI_FAILURE (Status)) + { + return; +@@ -643,10 +643,10 @@ 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 */ + +- (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength, ++ (void) AcpiDmDumpTable (TableLength, 0, Table, ArgumentsLength, + AcpiDmTableInfoWpbt0); + } +Index: acpica-unix2-20200925/source/compiler/dttable2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/dttable2.c ++++ acpica-unix2-20200925/source/compiler/dttable2.c +@@ -2190,7 +2190,8 @@ DtCompileWpbt ( + + /* Extract the length of the Arguments buffer, insert into main table */ + +- Length = (UINT16) Subtable->TotalLength; ++ AcpiUtWriteUint(&Length, sizeof(UINT16), ++ &Subtable->TotalLength, sizeof(UINT32)); + Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer); + Table->ArgumentsLength = Length; + diff --git a/0040-Support-DSDT-SSDT-in-a-big-endian-world.patch b/0040-Support-DSDT-SSDT-in-a-big-endian-world.patch new file mode 100644 index 0000000..b5087dc --- /dev/null +++ b/0040-Support-DSDT-SSDT-in-a-big-endian-world.patch @@ -0,0 +1,2682 @@ +From 355bbdd2ecf184e56108a2446244761895f93a62 Mon Sep 17 00:00:00 2001 +From: Al Stone +Date: Thu, 15 Oct 2020 11:35:23 -0600 +Subject: [PATCH 40/40] 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 +--- + source/common/dmrestag.c | 2 +- + source/common/dmtables.c | 17 +- + source/common/dmtbdump.c | 3 +- + source/compiler/aslcodegen.c | 61 +++++-- + source/compiler/aslrestype1.c | 44 +++-- + source/compiler/aslrestype1i.c | 33 ++-- + source/compiler/aslrestype2.c | 20 ++- + source/compiler/aslrestype2d.c | 99 ++++++----- + source/compiler/aslrestype2e.c | 90 ++++++---- + source/compiler/aslrestype2q.c | 81 ++++++--- + source/compiler/aslrestype2s.c | 181 ++++++++++++++++++--- + source/compiler/aslrestype2w.c | 94 ++++++----- + source/components/disassembler/dmbuffer.c | 2 +- + source/components/disassembler/dmopcode.c | 8 +- + source/components/disassembler/dmresrc.c | 2 +- + source/components/disassembler/dmresrcl.c | 43 +++-- + source/components/disassembler/dmresrcl2.c | 64 +++++--- + source/components/disassembler/dmresrcs.c | 18 +- + source/components/dispatcher/dsfield.c | 16 +- + source/components/namespace/nsaccess.c | 2 +- + source/components/namespace/nsnames.c | 2 +- + source/components/namespace/nsparse.c | 6 +- + source/components/namespace/nsutils.c | 7 +- + 23 files changed, 613 insertions(+), 282 deletions(-) + +Index: acpica-unix2-20200925/source/common/dmrestag.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmrestag.c ++++ acpica-unix2-20200925/source/common/dmrestag.c +@@ -1038,7 +1038,7 @@ AcpiDmAddResourcesToNamespace ( + * NextOp contains the Aml pointer and the Aml length + */ + AcpiUtWalkAmlResources (NULL, (UINT8 *) NextOp->Named.Data, +- (ACPI_SIZE) NextOp->Common.Value.Integer, ++ (ACPI_SIZE) NextOp->Common.Value.Size, + AcpiDmAddResourceToNamespace, (void **) BufferNode); + } + +Index: acpica-unix2-20200925/source/common/dmtables.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtables.c ++++ acpica-unix2-20200925/source/common/dmtables.c +@@ -142,6 +142,10 @@ AdCreateTableHeader ( + ACPI_TABLE_HEADER *Table) + { + UINT8 Checksum; ++ UINT32 TableLength = AcpiUtReadUint32(&Table->Length); ++ UINT32 OemRevision = AcpiUtReadUint32(&Table->OemRevision); ++ UINT32 CompilerRevision = ++ AcpiUtReadUint32(&Table->AslCompilerRevision); + + + /* Reset globals for External statements */ +@@ -156,7 +160,7 @@ AdCreateTableHeader ( + + AcpiOsPrintf (" * Original Table Header:\n"); + AcpiOsPrintf (" * Signature \"%4.4s\"\n", Table->Signature); +- AcpiOsPrintf (" * Length 0x%8.8X (%u)\n", Table->Length, Table->Length); ++ AcpiOsPrintf (" * Length 0x%8.8X (%u)\n", TableLength, TableLength); + + /* Print and validate the revision */ + +@@ -188,7 +192,7 @@ AdCreateTableHeader ( + + AcpiOsPrintf ("\n * Checksum 0x%2.2X", Table->Checksum); + +- Checksum = AcpiTbChecksum (ACPI_CAST_PTR (UINT8, Table), Table->Length); ++ Checksum = AcpiTbChecksum (ACPI_CAST_PTR (UINT8, Table), TableLength); + if (Checksum) + { + AcpiOsPrintf (" **** Incorrect checksum, should be 0x%2.2X", +@@ -198,9 +202,9 @@ AdCreateTableHeader ( + AcpiOsPrintf ("\n"); + AcpiOsPrintf (" * OEM ID \"%.6s\"\n", Table->OemId); + AcpiOsPrintf (" * OEM Table ID \"%.8s\"\n", Table->OemTableId); +- AcpiOsPrintf (" * OEM Revision 0x%8.8X (%u)\n", Table->OemRevision, Table->OemRevision); ++ AcpiOsPrintf (" * OEM Revision 0x%8.8X (%u)\n", OemRevision, OemRevision); + AcpiOsPrintf (" * Compiler ID \"%.4s\"\n", Table->AslCompilerId); +- AcpiOsPrintf (" * Compiler Version 0x%8.8X (%u)\n", Table->AslCompilerRevision, Table->AslCompilerRevision); ++ AcpiOsPrintf (" * Compiler Version 0x%8.8X (%u)\n", CompilerRevision, CompilerRevision); + AcpiOsPrintf (" */\n"); + + /* +@@ -221,7 +225,7 @@ AdCreateTableHeader ( + AcpiOsPrintf ( + "DefinitionBlock (\"\", \"%4.4s\", %u, \"%.6s\", \"%.8s\", 0x%8.8X)\n", + Table->Signature, Table->Revision, +- Table->OemId, Table->OemTableId, Table->OemRevision); ++ Table->OemId, Table->OemTableId, OemRevision); + } + + +@@ -396,7 +400,8 @@ AdParseTable ( + + fprintf (stderr, "Pass 1 parse of [%4.4s]\n", (char *) Table->Signature); + +- AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER); ++ AmlLength = AcpiUtReadUint32(&Table->Length); ++ AmlLength -= sizeof (ACPI_TABLE_HEADER); + AmlStart = ((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER)); + + AcpiUtSetIntegerWidth (Table->Revision); +Index: acpica-unix2-20200925/source/common/dmtbdump.c +=================================================================== +--- acpica-unix2-20200925.orig/source/common/dmtbdump.c ++++ acpica-unix2-20200925/source/common/dmtbdump.c +@@ -333,8 +333,7 @@ AcpiDmDumpXsdt ( + for (i = 0; i < Entries; i++) + { + AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i); +- AcpiOsPrintf ("%8.8X%8.8X\n", +- ACPI_FORMAT_UINT64 (AcpiUtReadUint64(&Array[i]))); ++ AcpiOsPrintf ("%16.16lX\n", AcpiUtReadUint64(&Array[i])); + Offset += sizeof (UINT64); + } + } +Index: acpica-unix2-20200925/source/compiler/aslcodegen.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/aslcodegen.c ++++ acpica-unix2-20200925/source/compiler/aslcodegen.c +@@ -238,6 +238,10 @@ CgWriteAmlOpcode ( + { + UINT8 PkgLenFirstByte; + UINT32 i; ++ UINT8 Tmp8; ++ UINT16 Tmp16; ++ UINT32 Tmp32; ++ UINT64 Tmp64; + union { + UINT16 Opcode; + UINT8 OpcodeBytes[2]; +@@ -305,25 +309,26 @@ CgWriteAmlOpcode ( + + /* Value is the length to be encoded (Used in field definitions) */ + +- PkgLen.Len = (UINT32) Op->Asl.Value.Integer; ++ PkgLen.Len = (UINT32) Op->Asl.Value.Integer; + break; + + default: + + /* Check for two-byte opcode */ + ++ Tmp16 = AcpiUtReadUint16(&Aml.Opcode); + if (Aml.Opcode > 0x00FF) + { + /* Write the high byte first */ + +- CgLocalWriteAmlData (Op, &Aml.OpcodeBytes[1], 1); ++ CgLocalWriteAmlData (Op, ((UINT8 *)&Tmp16)+1, 1); + } + +- CgLocalWriteAmlData (Op, &Aml.OpcodeBytes[0], 1); ++ CgLocalWriteAmlData (Op, (UINT8 *)&Tmp16, 1); + + /* Subtreelength doesn't include length of package length bytes */ + +- PkgLen.Len = Op->Asl.AmlSubtreeLength + Op->Asl.AmlPkgLenBytes; ++ PkgLen.Len = Op->Asl.AmlSubtreeLength + Op->Asl.AmlPkgLenBytes; + break; + } + +@@ -335,7 +340,8 @@ CgWriteAmlOpcode ( + { + /* Simplest case -- no bytes to follow, just write the count */ + +- CgLocalWriteAmlData (Op, &PkgLen.LenBytes[0], 1); ++ Tmp8 = (UINT8) PkgLen.Len; ++ CgLocalWriteAmlData (Op, &Tmp8, 1); + } + else if (Op->Asl.AmlPkgLenBytes != 0) + { +@@ -343,9 +349,10 @@ CgWriteAmlOpcode ( + * Encode the "bytes to follow" in the first byte, top two bits. + * The low-order nybble of the length is in the bottom 4 bits + */ ++ Tmp8 = (UINT8) PkgLen.Len; + PkgLenFirstByte = (UINT8) + (((UINT32) (Op->Asl.AmlPkgLenBytes - 1) << 6) | +- (PkgLen.LenBytes[0] & 0x0F)); ++ (Tmp8 & 0x0F)); + + CgLocalWriteAmlData (Op, &PkgLenFirstByte, 1); + +@@ -359,6 +366,9 @@ CgWriteAmlOpcode ( + * Now we can write the remaining bytes - + * either 1, 2, or 3 bytes + */ ++ Tmp32 = PkgLen.Len; ++ AcpiUtWriteUint(&PkgLen.Len, Op->Asl.AmlPkgLenBytes, ++ &Tmp32, sizeof(UINT32)); + for (i = 0; i < (UINT32) (Op->Asl.AmlPkgLenBytes - 1); i++) + { + CgLocalWriteAmlData (Op, &PkgLen.LenBytes[i], 1); +@@ -370,22 +380,30 @@ CgWriteAmlOpcode ( + { + case AML_BYTE_OP: + +- CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 1); ++ Tmp64 = 0; ++ AcpiUtWriteUint(&Tmp64, 1, &Op->Asl.Value.Integer, 8); ++ CgLocalWriteAmlData (Op, &Tmp64, 1); + break; + + case AML_WORD_OP: + +- CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 2); ++ Tmp64 = 0; ++ AcpiUtWriteUint(&Tmp64, 2, &Op->Asl.Value.Integer, 8); ++ CgLocalWriteAmlData (Op, &Tmp64, 2); + break; + + case AML_DWORD_OP: + +- CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 4); ++ Tmp64 = 0; ++ AcpiUtWriteUint(&Tmp64, 4, &Op->Asl.Value.Integer, 8); ++ CgLocalWriteAmlData (Op, &Tmp64, 4); + break; + + case AML_QWORD_OP: + +- CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 8); ++ Tmp64 = 0; ++ AcpiUtWriteUint(&Tmp64, 8, &Op->Asl.Value.Integer, 8); ++ CgLocalWriteAmlData (Op, &Tmp64, 8); + break; + + case AML_STRING_OP: +@@ -423,6 +441,7 @@ CgWriteTableHeader ( + ACPI_PARSE_OBJECT *Child; + UINT32 CommentLength; + ACPI_COMMENT_NODE *Current; ++ UINT32 Tmp32; + + + memset (&AslGbl_TableHeader, 0, sizeof (ACPI_TABLE_HEADER)); +@@ -478,7 +497,9 @@ CgWriteTableHeader ( + /* OEM Revision */ + + Child = Child->Asl.Next; +- AslGbl_TableHeader.OemRevision = (UINT32) Child->Asl.Value.Integer; ++ AcpiUtWriteUint(&Tmp32, sizeof(UINT32), ++ &Child->Asl.Value.Integer, sizeof(Child->Asl.Value.Integer)); ++ AslGbl_TableHeader.OemRevision = Tmp32; + + /* Compiler ID */ + +@@ -486,7 +507,8 @@ CgWriteTableHeader ( + + /* Compiler version */ + +- AslGbl_TableHeader.AslCompilerRevision = ACPI_CA_VERSION; ++ Tmp32 = ACPI_CA_VERSION; ++ AslGbl_TableHeader.AslCompilerRevision = AcpiUtReadUint32(&Tmp32); + + /* Table length. Checksum zero for now, will rewrite later */ + +@@ -541,6 +563,15 @@ CgWriteTableHeader ( + AslGbl_TableHeader.Checksum = 0; + Op->Asl.FinalAmlOffset = ftell (AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle); + ++ /* ++ * Adjust the Table length; it will only change when big-endian ++ * but we have to wait until here in case there is arithmetic to ++ * be done on the length before this step in the function ++ */ ++ ++ Tmp32 = AslGbl_TableHeader.Length; ++ AslGbl_TableHeader.Length = AcpiUtReadUint32(&Tmp32); ++ + /* Write entire header and clear the table header global */ + + CgLocalWriteAmlData (Op, &AslGbl_TableHeader, sizeof (ACPI_TABLE_HEADER)); +@@ -625,6 +656,7 @@ CgWriteNode ( + ACPI_PARSE_OBJECT *Op) + { + ASL_RESOURCE_NODE *Rnode; ++ UINT64 Tmp64; + + + /* Write all comments here. */ +@@ -653,7 +685,10 @@ CgWriteNode ( + case AML_RAW_DATA_DWORD: + case AML_RAW_DATA_QWORD: + +- CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, Op->Asl.AmlLength); ++ Tmp64 = 0; ++ AcpiUtWriteUint(&Tmp64, Op->Asl.AmlLength, ++ &Op->Asl.Value.Integer, sizeof(UINT64)); ++ CgLocalWriteAmlData (Op, &Tmp64, Op->Asl.AmlLength); + return; + + +Index: acpica-unix2-20200925/source/compiler/aslrestype1.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/aslrestype1.c ++++ acpica-unix2-20200925/source/compiler/aslrestype1.c +@@ -143,6 +143,7 @@ RsDoMemory24Descriptor ( + ASL_RESOURCE_NODE *Rnode; + UINT32 CurrentByteOffset; + UINT32 i; ++ UINT16 Tmp16; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -151,7 +152,8 @@ RsDoMemory24Descriptor ( + + Descriptor = Rnode->Buffer; + Descriptor->Memory24.DescriptorType = ACPI_RESOURCE_NAME_MEMORY24; +- Descriptor->Memory24.ResourceLength = 9; ++ Tmp16 = 9; ++ Descriptor->Memory24.ResourceLength = AcpiUtReadUint16(&Tmp16); + + /* Process all child initialization nodes */ + +@@ -168,7 +170,8 @@ RsDoMemory24Descriptor ( + + case 1: /* Min Address */ + +- Descriptor->Memory24.Minimum = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Memory24.Minimum = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Minimum)); + MinOp = InitializerOp; +@@ -176,7 +179,8 @@ RsDoMemory24Descriptor ( + + case 2: /* Max Address */ + +- Descriptor->Memory24.Maximum = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Memory24.Maximum = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Maximum)); + MaxOp = InitializerOp; +@@ -184,14 +188,16 @@ RsDoMemory24Descriptor ( + + case 3: /* Alignment */ + +- Descriptor->Memory24.Alignment = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Memory24.Alignment = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_ALIGNMENT, + CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Alignment)); + break; + + case 4: /* Length */ + +- Descriptor->Memory24.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Memory24.AddressLength = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH, + CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.AddressLength)); + LengthOp = InitializerOp; +@@ -249,6 +255,8 @@ RsDoMemory32Descriptor ( + ASL_RESOURCE_NODE *Rnode; + UINT32 CurrentByteOffset; + UINT32 i; ++ UINT16 Tmp16; ++ UINT32 Tmp32; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -257,7 +265,8 @@ RsDoMemory32Descriptor ( + + Descriptor = Rnode->Buffer; + Descriptor->Memory32.DescriptorType = ACPI_RESOURCE_NAME_MEMORY32; +- Descriptor->Memory32.ResourceLength = 17; ++ Tmp16 = 17; ++ Descriptor->Memory32.ResourceLength = AcpiUtReadUint16(&Tmp16); + + /* Process all child initialization nodes */ + +@@ -274,7 +283,8 @@ RsDoMemory32Descriptor ( + + case 1: /* Min Address */ + +- Descriptor->Memory32.Minimum = (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Memory32.Minimum = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Minimum)); + MinOp = InitializerOp; +@@ -282,7 +292,8 @@ RsDoMemory32Descriptor ( + + case 2: /* Max Address */ + +- Descriptor->Memory32.Maximum = (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Memory32.Maximum = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Maximum)); + MaxOp = InitializerOp; +@@ -290,7 +301,8 @@ RsDoMemory32Descriptor ( + + case 3: /* Alignment */ + +- Descriptor->Memory32.Alignment = (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Memory32.Alignment = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_ALIGNMENT, + CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Alignment)); + AlignOp = InitializerOp; +@@ -298,7 +310,8 @@ RsDoMemory32Descriptor ( + + case 4: /* Length */ + +- Descriptor->Memory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Memory32.AddressLength = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH, + CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.AddressLength)); + LengthOp = InitializerOp; +@@ -352,6 +365,8 @@ RsDoMemory32FixedDescriptor ( + ASL_RESOURCE_NODE *Rnode; + UINT32 CurrentByteOffset; + UINT32 i; ++ UINT16 Tmp16; ++ UINT32 Tmp32; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -360,7 +375,8 @@ RsDoMemory32FixedDescriptor ( + + Descriptor = Rnode->Buffer; + Descriptor->FixedMemory32.DescriptorType = ACPI_RESOURCE_NAME_FIXED_MEMORY32; +- Descriptor->FixedMemory32.ResourceLength = 9; ++ Tmp16 = 9; ++ Descriptor->FixedMemory32.ResourceLength = AcpiUtReadUint16(&Tmp16); + + /* Process all child initialization nodes */ + +@@ -377,14 +393,16 @@ RsDoMemory32FixedDescriptor ( + + case 1: /* Address */ + +- Descriptor->FixedMemory32.Address = (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->FixedMemory32.Address = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_BASEADDRESS, + CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Address)); + break; + + case 2: /* Length */ + +- Descriptor->FixedMemory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->FixedMemory32.AddressLength = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH, + CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.AddressLength)); + break; +Index: acpica-unix2-20200925/source/compiler/aslrestype1i.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/aslrestype1i.c ++++ acpica-unix2-20200925/source/compiler/aslrestype1i.c +@@ -199,6 +199,7 @@ RsDoFixedDmaDescriptor ( + ASL_RESOURCE_NODE *Rnode; + UINT32 CurrentByteOffset; + UINT32 i; ++ UINT16 Tmp16; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -217,14 +218,16 @@ RsDoFixedDmaDescriptor ( + { + case 0: /* DMA Request Lines [WORD] (_DMA) */ + +- Descriptor->FixedDma.RequestLines = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->FixedDma.RequestLines = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_DMA, + CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.RequestLines)); + break; + + case 1: /* DMA Channel [WORD] (_TYP) */ + +- Descriptor->FixedDma.Channels = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->FixedDma.Channels = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_DMATYPE, + CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.Channels)); + break; +@@ -275,6 +278,7 @@ RsDoFixedIoDescriptor ( + ASL_RESOURCE_NODE *Rnode; + UINT32 CurrentByteOffset; + UINT32 i; ++ UINT16 Tmp16; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -293,8 +297,8 @@ RsDoFixedIoDescriptor ( + { + case 0: /* Base Address */ + +- Descriptor->FixedIo.Address = +- (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->FixedIo.Address = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_BASEADDRESS, + CurrentByteOffset + ASL_RESDESC_OFFSET (FixedIo.Address)); + AddressOp = InitializerOp; +@@ -358,6 +362,7 @@ RsDoIoDescriptor ( + ASL_RESOURCE_NODE *Rnode; + UINT32 CurrentByteOffset; + UINT32 i; ++ UINT16 Tmp16; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -383,8 +388,8 @@ RsDoIoDescriptor ( + + case 1: /* Min Address */ + +- Descriptor->Io.Minimum = +- (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Io.Minimum = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Minimum)); + MinOp = InitializerOp; +@@ -392,8 +397,8 @@ RsDoIoDescriptor ( + + case 2: /* Max Address */ + +- Descriptor->Io.Maximum = +- (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Io.Maximum = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Maximum)); + MaxOp = InitializerOp; +@@ -434,10 +439,10 @@ RsDoIoDescriptor ( + /* Validate the Min/Max/Len/Align values */ + + RsSmallAddressCheck (ACPI_RESOURCE_NAME_IO, +- Descriptor->Io.Minimum, +- Descriptor->Io.Maximum, +- Descriptor->Io.AddressLength, +- Descriptor->Io.Alignment, ++ (UINT32)(AcpiUtReadUint16(&Descriptor->Io.Minimum)), ++ (UINT32)(AcpiUtReadUint16(&Descriptor->Io.Maximum)), ++ (UINT32)Descriptor->Io.AddressLength, ++ (UINT32)Descriptor->Io.Alignment, + MinOp, MaxOp, LengthOp, AlignOp, Info->DescriptorTypeOp); + + return (Rnode); +@@ -561,7 +566,7 @@ RsDoIrqDescriptor ( + + /* Now we can set the channel mask */ + +- Descriptor->Irq.IrqMask = IrqMask; ++ Descriptor->Irq.IrqMask = AcpiUtReadUint16(&IrqMask); + return (Rnode); + } + +@@ -660,6 +665,6 @@ RsDoIrqNoFlagsDescriptor ( + + /* Now we can set the interrupt mask */ + +- Descriptor->Irq.IrqMask = IrqMask; ++ Descriptor->Irq.IrqMask = AcpiUtReadUint16(&IrqMask); + return (Rnode); + } +Index: acpica-unix2-20200925/source/compiler/aslrestype2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/aslrestype2.c ++++ acpica-unix2-20200925/source/compiler/aslrestype2.c +@@ -77,6 +77,8 @@ RsDoGeneralRegisterDescriptor ( + ASL_RESOURCE_NODE *Rnode; + UINT32 CurrentByteOffset; + UINT32 i; ++ UINT16 Tmp16; ++ UINT64 Tmp64; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -85,7 +87,8 @@ RsDoGeneralRegisterDescriptor ( + + Descriptor = Rnode->Buffer; + Descriptor->GenericReg.DescriptorType = ACPI_RESOURCE_NAME_GENERIC_REGISTER; +- Descriptor->GenericReg.ResourceLength = 12; ++ Tmp16 = 12; ++ Descriptor->GenericReg.ResourceLength = AcpiUtReadUint16(&Tmp16); + + /* Process all child initialization nodes */ + +@@ -116,7 +119,8 @@ RsDoGeneralRegisterDescriptor ( + + case 3: /* Register Address */ + +- Descriptor->GenericReg.Address = InitializerOp->Asl.Value.Integer; ++ Tmp64 = InitializerOp->Asl.Value.Integer; ++ Descriptor->GenericReg.Address = AcpiUtReadUint64(&Tmp64); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_ADDRESS, + CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.Address)); + break; +@@ -184,6 +188,8 @@ RsDoInterruptDescriptor ( + BOOLEAN HasResSourceIndex = FALSE; + UINT8 ResSourceIndex = 0; + UINT8 *ResSourceString = NULL; ++ UINT16 Tmp16; ++ UINT32 Tmp32; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -225,7 +231,7 @@ RsDoInterruptDescriptor ( + * Initial descriptor length -- may be enlarged if there are + * optional fields present + */ +- Descriptor->ExtendedIrq.ResourceLength = 2; /* Flags and table length byte */ ++ Descriptor->ExtendedIrq.ResourceLength = 2; /* Flags and table length byte */ + Descriptor->ExtendedIrq.InterruptCount = 0; + + Rover = ACPI_CAST_PTR (AML_RESOURCE, +@@ -333,7 +339,8 @@ RsDoInterruptDescriptor ( + + /* Save the integer and move pointer to the next one */ + +- Rover->DwordItem = (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Rover->DwordItem = AcpiUtReadUint32(&Tmp32); + Rover = ACPI_ADD_PTR (AML_RESOURCE, &(Rover->DwordItem), 4); + Descriptor->ExtendedIrq.InterruptCount++; + Descriptor->ExtendedIrq.ResourceLength += 4; +@@ -384,6 +391,8 @@ RsDoInterruptDescriptor ( + Descriptor->ExtendedIrq.ResourceLength = (UINT16) + (Descriptor->ExtendedIrq.ResourceLength + StringLength); + } ++ Tmp16 = Descriptor->ExtendedIrq.ResourceLength; ++ Descriptor->ExtendedIrq.ResourceLength = AcpiUtReadUint16(&Tmp16); + + Rnode->BufferLength = + (ASL_RESDESC_OFFSET (ExtendedIrq.Interrupts[0]) - +@@ -436,7 +445,8 @@ RsDoVendorLargeDescriptor ( + + Descriptor = Rnode->Buffer; + Descriptor->VendorLarge.DescriptorType = ACPI_RESOURCE_NAME_VENDOR_LARGE; +- Descriptor->VendorLarge.ResourceLength = (UINT16) i; ++ AcpiUtWriteUint(&Descriptor->VendorLarge.ResourceLength, sizeof(UINT16), ++ &i, sizeof(UINT32)); + + /* Point to end-of-descriptor for vendor data */ + +Index: acpica-unix2-20200925/source/compiler/aslrestype2d.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/aslrestype2d.c ++++ acpica-unix2-20200925/source/compiler/aslrestype2d.c +@@ -84,6 +84,8 @@ RsDoDwordIoDescriptor ( + UINT32 CurrentByteOffset; + UINT32 i; + BOOLEAN ResSourceIndex = FALSE; ++ UINT16 Tmp16; ++ UINT32 Tmp32; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -147,8 +149,8 @@ RsDoDwordIoDescriptor ( + + case 5: /* Address Granularity */ + +- Descriptor->Address32.Granularity = +- (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address32.Granularity = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity)); + GranOp = InitializerOp; +@@ -156,8 +158,8 @@ RsDoDwordIoDescriptor ( + + case 6: /* Address Min */ + +- Descriptor->Address32.Minimum = +- (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address32.Minimum = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum)); + MinOp = InitializerOp; +@@ -165,8 +167,8 @@ RsDoDwordIoDescriptor ( + + case 7: /* Address Max */ + +- Descriptor->Address32.Maximum = +- (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address32.Maximum = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum)); + MaxOp = InitializerOp; +@@ -174,16 +176,16 @@ RsDoDwordIoDescriptor ( + + case 8: /* Translation Offset */ + +- Descriptor->Address32.TranslationOffset = +- (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address32.TranslationOffset = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset)); + break; + + case 9: /* Address Length */ + +- Descriptor->Address32.AddressLength = +- (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address32.AddressLength = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength)); + LengthOp = InitializerOp; +@@ -271,11 +273,14 @@ RsDoDwordIoDescriptor ( + + /* Validate the Min/Max/Len/Gran values */ + ++ Tmp16 = Descriptor->Address32.ResourceLength; ++ Descriptor->Address32.ResourceLength = AcpiUtReadUint16(&Tmp16); ++ + RsLargeAddressCheck ( +- (UINT64) Descriptor->Address32.Minimum, +- (UINT64) Descriptor->Address32.Maximum, +- (UINT64) Descriptor->Address32.AddressLength, +- (UINT64) Descriptor->Address32.Granularity, ++ (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Minimum), ++ (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Maximum), ++ (UINT64) AcpiUtReadUint32(&Descriptor->Address32.AddressLength), ++ (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Granularity), + Descriptor->Address32.Flags, + MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); + +@@ -314,6 +319,8 @@ RsDoDwordMemoryDescriptor ( + UINT32 CurrentByteOffset; + UINT32 i; + BOOLEAN ResSourceIndex = FALSE; ++ UINT16 Tmp16; ++ UINT32 Tmp32; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -385,8 +392,8 @@ RsDoDwordMemoryDescriptor ( + + case 6: /* Address Granularity */ + +- Descriptor->Address32.Granularity = +- (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address32.Granularity = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity)); + GranOp = InitializerOp; +@@ -394,8 +401,8 @@ RsDoDwordMemoryDescriptor ( + + case 7: /* Min Address */ + +- Descriptor->Address32.Minimum = +- (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address32.Minimum = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum)); + MinOp = InitializerOp; +@@ -403,8 +410,8 @@ RsDoDwordMemoryDescriptor ( + + case 8: /* Max Address */ + +- Descriptor->Address32.Maximum = +- (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address32.Maximum = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum)); + MaxOp = InitializerOp; +@@ -412,16 +419,16 @@ RsDoDwordMemoryDescriptor ( + + case 9: /* Translation Offset */ + +- Descriptor->Address32.TranslationOffset = +- (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address32.TranslationOffset = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset)); + break; + + case 10: /* Address Length */ + +- Descriptor->Address32.AddressLength = +- (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address32.AddressLength = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength)); + LengthOp = InitializerOp; +@@ -506,11 +513,14 @@ RsDoDwordMemoryDescriptor ( + + /* Validate the Min/Max/Len/Gran values */ + ++ Tmp16 = Descriptor->Address32.ResourceLength; ++ Descriptor->Address32.ResourceLength = AcpiUtReadUint16(&Tmp16); ++ + RsLargeAddressCheck ( +- (UINT64) Descriptor->Address32.Minimum, +- (UINT64) Descriptor->Address32.Maximum, +- (UINT64) Descriptor->Address32.AddressLength, +- (UINT64) Descriptor->Address32.Granularity, ++ (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Minimum), ++ (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Maximum), ++ (UINT64) AcpiUtReadUint32(&Descriptor->Address32.AddressLength), ++ (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Granularity), + Descriptor->Address32.Flags, + MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); + +@@ -549,6 +559,8 @@ RsDoDwordSpaceDescriptor ( + UINT32 CurrentByteOffset; + UINT32 i; + BOOLEAN ResSourceIndex = FALSE; ++ UINT16 Tmp16; ++ UINT32 Tmp32; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -616,8 +628,8 @@ RsDoDwordSpaceDescriptor ( + + case 6: /* Address Granularity */ + +- Descriptor->Address32.Granularity = +- (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address32.Granularity = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity)); + GranOp = InitializerOp; +@@ -625,8 +637,8 @@ RsDoDwordSpaceDescriptor ( + + case 7: /* Min Address */ + +- Descriptor->Address32.Minimum = +- (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address32.Minimum = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum)); + MinOp = InitializerOp; +@@ -634,8 +646,8 @@ RsDoDwordSpaceDescriptor ( + + case 8: /* Max Address */ + +- Descriptor->Address32.Maximum = +- (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address32.Maximum = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum)); + MaxOp = InitializerOp; +@@ -643,16 +655,16 @@ RsDoDwordSpaceDescriptor ( + + case 9: /* Translation Offset */ + +- Descriptor->Address32.TranslationOffset = +- (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address32.TranslationOffset = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset)); + break; + + case 10: /* Address Length */ + +- Descriptor->Address32.AddressLength = +- (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address32.AddressLength = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength)); + LengthOp = InitializerOp; +@@ -723,11 +735,14 @@ RsDoDwordSpaceDescriptor ( + + /* Validate the Min/Max/Len/Gran values */ + ++ Tmp16 = Descriptor->Address32.ResourceLength; ++ Descriptor->Address32.ResourceLength = AcpiUtReadUint16(&Tmp16); ++ + RsLargeAddressCheck ( +- (UINT64) Descriptor->Address32.Minimum, +- (UINT64) Descriptor->Address32.Maximum, +- (UINT64) Descriptor->Address32.AddressLength, +- (UINT64) Descriptor->Address32.Granularity, ++ (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Minimum), ++ (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Maximum), ++ (UINT64) AcpiUtReadUint32(&Descriptor->Address32.AddressLength), ++ (UINT64) AcpiUtReadUint32(&Descriptor->Address32.Granularity), + Descriptor->Address32.Flags, + MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); + +Index: acpica-unix2-20200925/source/compiler/aslrestype2e.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/aslrestype2e.c ++++ acpica-unix2-20200925/source/compiler/aslrestype2e.c +@@ -80,6 +80,7 @@ RsDoExtendedIoDescriptor ( + UINT16 StringLength = 0; + UINT32 CurrentByteOffset; + UINT32 i; ++ UINT16 Tmp16; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -139,7 +140,8 @@ RsDoExtendedIoDescriptor ( + + case 5: /* Address Granularity */ + +- Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.Granularity = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity)); + GranOp = InitializerOp; +@@ -147,7 +149,8 @@ RsDoExtendedIoDescriptor ( + + case 6: /* Address Min */ + +- Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.Minimum = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum)); + MinOp = InitializerOp; +@@ -155,7 +158,8 @@ RsDoExtendedIoDescriptor ( + + case 7: /* Address Max */ + +- Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.Maximum = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum)); + MaxOp = InitializerOp; +@@ -163,14 +167,16 @@ RsDoExtendedIoDescriptor ( + + case 8: /* Translation Offset */ + +- Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.TranslationOffset = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset)); + break; + + case 9: /* Address Length */ + +- Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.AddressLength = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength)); + LengthOp = InitializerOp; +@@ -178,7 +184,8 @@ RsDoExtendedIoDescriptor ( + + case 10: /* Type-Specific Attributes */ + +- Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.TypeSpecific = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific)); + break; +@@ -213,11 +220,14 @@ RsDoExtendedIoDescriptor ( + + /* Validate the Min/Max/Len/Gran values */ + ++ Tmp16 = Descriptor->ExtAddress64.ResourceLength; ++ Descriptor->ExtAddress64.ResourceLength = AcpiUtReadUint16(&Tmp16); ++ + RsLargeAddressCheck ( +- Descriptor->ExtAddress64.Minimum, +- Descriptor->ExtAddress64.Maximum, +- Descriptor->ExtAddress64.AddressLength, +- Descriptor->ExtAddress64.Granularity, ++ AcpiUtReadUint64(&Descriptor->ExtAddress64.Minimum), ++ AcpiUtReadUint64(&Descriptor->ExtAddress64.Maximum), ++ AcpiUtReadUint64(&Descriptor->ExtAddress64.AddressLength), ++ AcpiUtReadUint64(&Descriptor->ExtAddress64.Granularity), + Descriptor->ExtAddress64.Flags, + MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); + +@@ -253,6 +263,7 @@ RsDoExtendedMemoryDescriptor ( + UINT16 StringLength = 0; + UINT32 CurrentByteOffset; + UINT32 i; ++ UINT16 Tmp16; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -319,7 +330,8 @@ RsDoExtendedMemoryDescriptor ( + + case 6: /* Address Granularity */ + +- Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.Granularity = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity)); + GranOp = InitializerOp; +@@ -327,7 +339,8 @@ RsDoExtendedMemoryDescriptor ( + + case 7: /* Min Address */ + +- Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.Minimum = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum)); + MinOp = InitializerOp; +@@ -335,7 +348,8 @@ RsDoExtendedMemoryDescriptor ( + + case 8: /* Max Address */ + +- Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.Maximum = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum)); + MaxOp = InitializerOp; +@@ -343,14 +357,16 @@ RsDoExtendedMemoryDescriptor ( + + case 9: /* Translation Offset */ + +- Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.TranslationOffset = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset)); + break; + + case 10: /* Address Length */ + +- Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.AddressLength = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength)); + LengthOp = InitializerOp; +@@ -358,7 +374,8 @@ RsDoExtendedMemoryDescriptor ( + + case 11: /* Type-Specific Attributes */ + +- Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.TypeSpecific = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific)); + break; +@@ -394,11 +411,14 @@ RsDoExtendedMemoryDescriptor ( + + /* Validate the Min/Max/Len/Gran values */ + ++ Tmp16 = Descriptor->ExtAddress64.ResourceLength; ++ Descriptor->ExtAddress64.ResourceLength = AcpiUtReadUint16(&Tmp16); ++ + RsLargeAddressCheck ( +- Descriptor->ExtAddress64.Minimum, +- Descriptor->ExtAddress64.Maximum, +- Descriptor->ExtAddress64.AddressLength, +- Descriptor->ExtAddress64.Granularity, ++ AcpiUtReadUint64(&Descriptor->ExtAddress64.Minimum), ++ AcpiUtReadUint64(&Descriptor->ExtAddress64.Maximum), ++ AcpiUtReadUint64(&Descriptor->ExtAddress64.AddressLength), ++ AcpiUtReadUint64(&Descriptor->ExtAddress64.Granularity), + Descriptor->ExtAddress64.Flags, + MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); + +@@ -434,6 +454,7 @@ RsDoExtendedSpaceDescriptor ( + UINT16 StringLength = 0; + UINT32 CurrentByteOffset; + UINT32 i; ++ UINT16 Tmp16; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -497,7 +518,8 @@ RsDoExtendedSpaceDescriptor ( + + case 6: /* Address Granularity */ + +- Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.Granularity = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity)); + GranOp = InitializerOp; +@@ -505,7 +527,8 @@ RsDoExtendedSpaceDescriptor ( + + case 7: /* Min Address */ + +- Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.Minimum = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum)); + MinOp = InitializerOp; +@@ -513,7 +536,8 @@ RsDoExtendedSpaceDescriptor ( + + case 8: /* Max Address */ + +- Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.Maximum = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum)); + MaxOp = InitializerOp; +@@ -521,14 +545,16 @@ RsDoExtendedSpaceDescriptor ( + + case 9: /* Translation Offset */ + +- Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.TranslationOffset = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset)); + break; + + case 10: /* Address Length */ + +- Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.AddressLength = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength)); + LengthOp = InitializerOp; +@@ -536,7 +562,8 @@ RsDoExtendedSpaceDescriptor ( + + case 11: /* Type-Specific Attributes */ + +- Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer; ++ Descriptor->ExtAddress64.TypeSpecific = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES, + CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific)); + break; +@@ -557,11 +584,14 @@ RsDoExtendedSpaceDescriptor ( + + /* Validate the Min/Max/Len/Gran values */ + ++ Tmp16 = Descriptor->ExtAddress64.ResourceLength; ++ Descriptor->ExtAddress64.ResourceLength = AcpiUtReadUint16(&Tmp16); ++ + RsLargeAddressCheck ( +- Descriptor->ExtAddress64.Minimum, +- Descriptor->ExtAddress64.Maximum, +- Descriptor->ExtAddress64.AddressLength, +- Descriptor->ExtAddress64.Granularity, ++ AcpiUtReadUint64(&Descriptor->ExtAddress64.Minimum), ++ AcpiUtReadUint64(&Descriptor->ExtAddress64.Maximum), ++ AcpiUtReadUint64(&Descriptor->ExtAddress64.AddressLength), ++ AcpiUtReadUint64(&Descriptor->ExtAddress64.Granularity), + Descriptor->ExtAddress64.Flags, + MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); + +Index: acpica-unix2-20200925/source/compiler/aslrestype2q.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/aslrestype2q.c ++++ acpica-unix2-20200925/source/compiler/aslrestype2q.c +@@ -84,6 +84,7 @@ RsDoQwordIoDescriptor ( + UINT32 CurrentByteOffset; + UINT32 i; + BOOLEAN ResSourceIndex = FALSE; ++ UINT16 Tmp16; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -147,7 +148,8 @@ RsDoQwordIoDescriptor ( + + case 5: /* Address Granularity */ + +- Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer; ++ Descriptor->Address64.Granularity = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity)); + GranOp = InitializerOp; +@@ -155,7 +157,8 @@ RsDoQwordIoDescriptor ( + + case 6: /* Address Min */ + +- Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer; ++ Descriptor->Address64.Minimum = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum)); + MinOp = InitializerOp; +@@ -163,7 +166,8 @@ RsDoQwordIoDescriptor ( + + case 7: /* Address Max */ + +- Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer; ++ Descriptor->Address64.Maximum = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum)); + MaxOp = InitializerOp; +@@ -171,14 +175,16 @@ RsDoQwordIoDescriptor ( + + case 8: /* Translation Offset */ + +- Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer; ++ Descriptor->Address64.TranslationOffset = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset)); + break; + + case 9: /* Address Length */ + +- Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer; ++ Descriptor->Address64.AddressLength = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength)); + LengthOp = InitializerOp; +@@ -262,11 +268,14 @@ RsDoQwordIoDescriptor ( + + /* Validate the Min/Max/Len/Gran values */ + ++ Tmp16 = Descriptor->Address64.ResourceLength; ++ Descriptor->Address64.ResourceLength = AcpiUtReadUint16(&Tmp16); ++ + RsLargeAddressCheck ( +- Descriptor->Address64.Minimum, +- Descriptor->Address64.Maximum, +- Descriptor->Address64.AddressLength, +- Descriptor->Address64.Granularity, ++ AcpiUtReadUint64(&Descriptor->Address64.Minimum), ++ AcpiUtReadUint64(&Descriptor->Address64.Maximum), ++ AcpiUtReadUint64(&Descriptor->Address64.AddressLength), ++ AcpiUtReadUint64(&Descriptor->Address64.Granularity), + Descriptor->Address64.Flags, + MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); + +@@ -305,6 +314,7 @@ RsDoQwordMemoryDescriptor ( + UINT32 CurrentByteOffset; + UINT32 i; + BOOLEAN ResSourceIndex = FALSE; ++ UINT16 Tmp16; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -375,7 +385,8 @@ RsDoQwordMemoryDescriptor ( + + case 6: /* Address Granularity */ + +- Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer; ++ Descriptor->Address64.Granularity = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity)); + GranOp = InitializerOp; +@@ -383,7 +394,8 @@ RsDoQwordMemoryDescriptor ( + + case 7: /* Min Address */ + +- Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer; ++ Descriptor->Address64.Minimum = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum)); + MinOp = InitializerOp; +@@ -391,7 +403,8 @@ RsDoQwordMemoryDescriptor ( + + case 8: /* Max Address */ + +- Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer; ++ Descriptor->Address64.Maximum = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum)); + MaxOp = InitializerOp; +@@ -399,14 +412,16 @@ RsDoQwordMemoryDescriptor ( + + case 9: /* Translation Offset */ + +- Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer; ++ Descriptor->Address64.TranslationOffset = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset)); + break; + + case 10: /* Address Length */ + +- Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer; ++ Descriptor->Address64.AddressLength = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength)); + LengthOp = InitializerOp; +@@ -491,11 +506,14 @@ RsDoQwordMemoryDescriptor ( + + /* Validate the Min/Max/Len/Gran values */ + ++ Tmp16 = Descriptor->Address64.ResourceLength; ++ Descriptor->Address64.ResourceLength = AcpiUtReadUint16(&Tmp16); ++ + RsLargeAddressCheck ( +- Descriptor->Address64.Minimum, +- Descriptor->Address64.Maximum, +- Descriptor->Address64.AddressLength, +- Descriptor->Address64.Granularity, ++ AcpiUtReadUint64(&Descriptor->Address64.Minimum), ++ AcpiUtReadUint64(&Descriptor->Address64.Maximum), ++ AcpiUtReadUint64(&Descriptor->Address64.AddressLength), ++ AcpiUtReadUint64(&Descriptor->Address64.Granularity), + Descriptor->Address64.Flags, + MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); + +@@ -534,6 +552,7 @@ RsDoQwordSpaceDescriptor ( + UINT32 CurrentByteOffset; + UINT32 i; + BOOLEAN ResSourceIndex = FALSE; ++ UINT16 Tmp16; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -601,7 +620,8 @@ RsDoQwordSpaceDescriptor ( + + case 6: /* Address Granularity */ + +- Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer; ++ Descriptor->Address64.Granularity = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity)); + GranOp = InitializerOp; +@@ -609,7 +629,8 @@ RsDoQwordSpaceDescriptor ( + + case 7: /* Min Address */ + +- Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer; ++ Descriptor->Address64.Minimum = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum)); + MinOp = InitializerOp; +@@ -617,7 +638,8 @@ RsDoQwordSpaceDescriptor ( + + case 8: /* Max Address */ + +- Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer; ++ Descriptor->Address64.Maximum = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum)); + MaxOp = InitializerOp; +@@ -625,14 +647,16 @@ RsDoQwordSpaceDescriptor ( + + case 9: /* Translation Offset */ + +- Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer; ++ Descriptor->Address64.TranslationOffset = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset)); + break; + + case 10: /* Address Length */ + +- Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer; ++ Descriptor->Address64.AddressLength = ++ AcpiUtReadUint64(&InitializerOp->Asl.Value.Integer); + RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength)); + LengthOp = InitializerOp; +@@ -702,11 +726,14 @@ RsDoQwordSpaceDescriptor ( + + /* Validate the Min/Max/Len/Gran values */ + ++ Tmp16 = Descriptor->Address64.ResourceLength; ++ Descriptor->Address64.ResourceLength = AcpiUtReadUint16(&Tmp16); ++ + RsLargeAddressCheck ( +- Descriptor->Address64.Minimum, +- Descriptor->Address64.Maximum, +- Descriptor->Address64.AddressLength, +- Descriptor->Address64.Granularity, ++ AcpiUtReadUint64(&Descriptor->Address64.Minimum), ++ AcpiUtReadUint64(&Descriptor->Address64.Maximum), ++ AcpiUtReadUint64(&Descriptor->Address64.AddressLength), ++ AcpiUtReadUint64(&Descriptor->Address64.Granularity), + Descriptor->Address64.Flags, + MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); + +Index: acpica-unix2-20200925/source/compiler/aslrestype2s.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/aslrestype2s.c ++++ acpica-unix2-20200925/source/compiler/aslrestype2s.c +@@ -343,6 +343,7 @@ RsDoGpioIntDescriptor ( + UINT32 CurrentByteOffset; + UINT32 PinCount = 0; + UINT32 i; ++ UINT16 Tmp16; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -485,7 +486,8 @@ RsDoGpioIntDescriptor ( + * (implies resource source must immediately follow the pin list.) + * Name: _PIN + */ +- *InterruptList = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ *InterruptList = AcpiUtReadUint16(&Tmp16); + InterruptList++; + PinCount++; + +@@ -518,6 +520,27 @@ RsDoGpioIntDescriptor ( + + MpSaveGpioInfo (Info->MappingOp, Descriptor, + PinCount, PinList, ResourceSource); ++ ++ /* correct endian-ness issues */ ++ Tmp16 = Descriptor->Gpio.ResourceLength; ++ Descriptor->Gpio.ResourceLength = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.Flags; ++ Descriptor->Gpio.Flags = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.IntFlags; ++ Descriptor->Gpio.IntFlags = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.DriveStrength; ++ Descriptor->Gpio.DriveStrength = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.DebounceTimeout; ++ Descriptor->Gpio.DebounceTimeout = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.PinTableOffset; ++ Descriptor->Gpio.PinTableOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.ResSourceOffset; ++ Descriptor->Gpio.ResSourceOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.VendorOffset; ++ Descriptor->Gpio.VendorOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.VendorLength; ++ Descriptor->Gpio.VendorLength = AcpiUtReadUint16(&Tmp16); ++ + return (Rnode); + } + +@@ -552,6 +575,7 @@ RsDoGpioIoDescriptor ( + UINT32 CurrentByteOffset; + UINT32 PinCount = 0; + UINT32 i; ++ UINT16 Tmp16; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -691,7 +715,8 @@ RsDoGpioIoDescriptor ( + * (implies resource source must immediately follow the pin list.) + * Name: _PIN + */ +- *InterruptList = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ *InterruptList = AcpiUtReadUint16(&Tmp16); + InterruptList++; + PinCount++; + +@@ -724,6 +749,27 @@ RsDoGpioIoDescriptor ( + + MpSaveGpioInfo (Info->MappingOp, Descriptor, + PinCount, PinList, ResourceSource); ++ ++ /* correct endian-ness issues */ ++ Tmp16 = Descriptor->Gpio.ResourceLength; ++ Descriptor->Gpio.ResourceLength = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.Flags; ++ Descriptor->Gpio.Flags = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.IntFlags; ++ Descriptor->Gpio.IntFlags = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.DriveStrength; ++ Descriptor->Gpio.DriveStrength = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.DebounceTimeout; ++ Descriptor->Gpio.DebounceTimeout = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.PinTableOffset; ++ Descriptor->Gpio.PinTableOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.ResSourceOffset; ++ Descriptor->Gpio.ResSourceOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.VendorOffset; ++ Descriptor->Gpio.VendorOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->Gpio.VendorLength; ++ Descriptor->Gpio.VendorLength = AcpiUtReadUint16(&Tmp16); ++ + return (Rnode); + } + +@@ -754,6 +800,8 @@ RsDoI2cSerialBusDescriptor ( + UINT16 DescriptorSize; + UINT32 CurrentByteOffset; + UINT32 i; ++ UINT16 Tmp16; ++ UINT32 Tmp32; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -781,7 +829,8 @@ RsDoI2cSerialBusDescriptor ( + Descriptor->I2cSerialBus.RevisionId = AML_RESOURCE_I2C_REVISION; + Descriptor->I2cSerialBus.TypeRevisionId = AML_RESOURCE_I2C_TYPE_REVISION; + Descriptor->I2cSerialBus.Type = AML_RESOURCE_I2C_SERIALBUSTYPE; +- Descriptor->I2cSerialBus.TypeDataLength = AML_RESOURCE_I2C_MIN_DATA_LEN + VendorLength; ++ Tmp16 = AML_RESOURCE_I2C_MIN_DATA_LEN + VendorLength; ++ Descriptor->I2cSerialBus.TypeDataLength = AcpiUtReadUint16(&Tmp16); + + if (Info->DescriptorTypeOp->Asl.ParseOpcode == PARSEOP_I2C_SERIALBUS_V2) + { +@@ -801,7 +850,8 @@ RsDoI2cSerialBusDescriptor ( + { + 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,7 +865,8 @@ 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; +@@ -913,6 +964,8 @@ RsDoSpiSerialBusDescriptor ( + UINT16 DescriptorSize; + UINT32 CurrentByteOffset; + UINT32 i; ++ UINT16 Tmp16; ++ UINT32 Tmp32; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -935,12 +988,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) + { +@@ -961,7 +1015,8 @@ RsDoSpiSerialBusDescriptor ( + { + 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; +@@ -996,7 +1051,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 +1157,8 @@ RsDoUartSerialBusDescriptor ( + UINT16 DescriptorSize; + UINT32 CurrentByteOffset; + UINT32 i; ++ UINT16 Tmp16; ++ UINT32 Tmp32; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -1123,12 +1181,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) + { +@@ -1148,7 +1207,8 @@ RsDoUartSerialBusDescriptor ( + { + 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; +@@ -1197,14 +1257,16 @@ RsDoUartSerialBusDescriptor ( + + case 7: /* Rx Buffer Size [WORD] (_RXL) */ + +- Descriptor->UartSerialBus.RxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->UartSerialBus.RxFifoSize = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH_RX, + CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.RxFifoSize)); + break; + + case 8: /* Tx Buffer Size [WORD] (_TXL) */ + +- Descriptor->UartSerialBus.TxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->UartSerialBus.TxFifoSize = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH_TX, + CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TxFifoSize)); + break; +@@ -1308,6 +1370,7 @@ RsDoPinFunctionDescriptor ( + UINT32 CurrentByteOffset; + UINT32 PinCount = 0; + UINT32 i; ++ UINT16 Tmp16; + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; + CurrentByteOffset = Info->CurrentByteOffset; +@@ -1331,7 +1394,7 @@ RsDoPinFunctionDescriptor ( + sizeof (AML_RESOURCE_LARGE_HEADER)); + + Descriptor = Rnode->Buffer; +- Descriptor->PinFunction.ResourceLength = DescriptorSize; ++ Descriptor->PinFunction.ResourceLength = AcpiUtReadUint16(&DescriptorSize); + Descriptor->PinFunction.DescriptorType = ACPI_RESOURCE_NAME_PIN_FUNCTION; + Descriptor->PinFunction.RevisionId = AML_RESOURCE_PIN_FUNCTION_REVISION; + +@@ -1371,7 +1434,8 @@ RsDoPinFunctionDescriptor ( + + case 2: /* Function Number [WORD] (_FUN) */ + +- Descriptor->PinFunction.FunctionNumber = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->PinFunction.FunctionNumber = AcpiUtReadUint16(&Tmp16); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_FUNCTION, + CurrentByteOffset + ASL_RESDESC_OFFSET (PinFunction.FunctionNumber)); + break; +@@ -1419,6 +1483,12 @@ RsDoPinFunctionDescriptor ( + { + Descriptor->PinFunction.VendorLength = VendorLength; + } ++ Tmp16 = (UINT16) ACPI_PTR_DIFF (VendorData, Descriptor); ++ Descriptor->PinFunction.VendorOffset = AcpiUtReadUint16(&Tmp16); ++ ++ Tmp16 = Descriptor->PinFunction.VendorLength; ++ Descriptor->PinFunction.VendorLength = AcpiUtReadUint16(&Tmp16); ++ + break; + + default: +@@ -1430,7 +1500,8 @@ RsDoPinFunctionDescriptor ( + * (implies resource source must immediately follow the pin list.) + * Name: _PIN + */ +- *PinList = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ *PinList = AcpiUtReadUint16(&Tmp16); + PinList++; + PinCount++; + +@@ -1461,6 +1532,13 @@ RsDoPinFunctionDescriptor ( + InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); + } + ++ /* correct the endian-ness of the values */ ++ Tmp16 = Descriptor->PinFunction.PinTableOffset; ++ Descriptor->PinFunction.PinTableOffset = AcpiUtReadUint16(&Tmp16); ++ ++ Tmp16 = Descriptor->PinFunction.ResSourceOffset; ++ Descriptor->PinFunction.ResSourceOffset = AcpiUtReadUint16(&Tmp16); ++ + return (Rnode); + } + +@@ -1494,6 +1572,8 @@ RsDoPinConfigDescriptor ( + UINT32 CurrentByteOffset; + UINT32 PinCount = 0; + UINT32 i; ++ UINT16 Tmp16; ++ UINT32 Tmp32; + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; + CurrentByteOffset = Info->CurrentByteOffset; +@@ -1517,7 +1597,7 @@ RsDoPinConfigDescriptor ( + sizeof (AML_RESOURCE_LARGE_HEADER)); + + Descriptor = Rnode->Buffer; +- Descriptor->PinConfig.ResourceLength = DescriptorSize; ++ Descriptor->PinConfig.ResourceLength = AcpiUtReadUint16(&DescriptorSize); + Descriptor->PinConfig.DescriptorType = ACPI_RESOURCE_NAME_PIN_CONFIG; + Descriptor->PinConfig.RevisionId = AML_RESOURCE_PIN_CONFIG_REVISION; + +@@ -1571,7 +1651,8 @@ RsDoPinConfigDescriptor ( + + case 2: /* Pin Config Value [DWORD] (_VAL) */ + +- Descriptor->PinConfig.PinConfigValue = (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->PinConfig.PinConfigValue = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_PINCONFIG_VALUE, + CurrentByteOffset + ASL_RESDESC_OFFSET (PinConfig.PinConfigValue)); + break; +@@ -1630,7 +1711,8 @@ RsDoPinConfigDescriptor ( + * (implies resource source must immediately follow the pin list.) + * Name: _PIN + */ +- *PinList = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ *PinList = AcpiUtReadUint16(&Tmp16); + PinList++; + PinCount++; + +@@ -1661,6 +1743,16 @@ RsDoPinConfigDescriptor ( + InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); + } + ++ /* correct the endianness if needed */ ++ Tmp16 = Descriptor->PinConfig.PinTableOffset; ++ Descriptor->PinConfig.PinTableOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->PinConfig.ResSourceOffset; ++ Descriptor->PinConfig.ResSourceOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->PinConfig.VendorOffset; ++ Descriptor->PinConfig.VendorOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->PinConfig.VendorLength; ++ Descriptor->PinConfig.VendorLength = AcpiUtReadUint16(&Tmp16); ++ + return (Rnode); + } + +@@ -1694,6 +1786,7 @@ RsDoPinGroupDescriptor ( + UINT32 CurrentByteOffset; + UINT32 PinCount = 0; + UINT32 i; ++ UINT16 Tmp16; + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; + CurrentByteOffset = Info->CurrentByteOffset; +@@ -1717,7 +1810,7 @@ RsDoPinGroupDescriptor ( + sizeof (AML_RESOURCE_LARGE_HEADER)); + + Descriptor = Rnode->Buffer; +- Descriptor->PinGroup.ResourceLength = DescriptorSize; ++ Descriptor->PinGroup.ResourceLength = AcpiUtReadUint16(&DescriptorSize); + Descriptor->PinGroup.DescriptorType = ACPI_RESOURCE_NAME_PIN_GROUP; + Descriptor->PinGroup.RevisionId = AML_RESOURCE_PIN_GROUP_REVISION; + +@@ -1784,7 +1877,8 @@ RsDoPinGroupDescriptor ( + * (implies resource source must immediately follow the pin list.) + * Name: _PIN + */ +- *PinList = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ *PinList = AcpiUtReadUint16(&Tmp16); + PinList++; + PinCount++; + +@@ -1815,6 +1909,16 @@ RsDoPinGroupDescriptor ( + InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); + } + ++ /* correct enddianness as needed */ ++ Tmp16 = Descriptor->PinGroup.PinTableOffset; ++ Descriptor->PinGroup.PinTableOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->PinGroup.LabelOffset; ++ Descriptor->PinGroup.LabelOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->PinGroup.VendorOffset; ++ Descriptor->PinGroup.VendorOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->PinGroup.VendorLength; ++ Descriptor->PinGroup.VendorLength = AcpiUtReadUint16(&Tmp16); ++ + return (Rnode); + } + +@@ -1847,6 +1951,7 @@ RsDoPinGroupFunctionDescriptor ( + UINT16 DescriptorSize; + UINT32 CurrentByteOffset; + UINT32 i; ++ UINT16 Tmp16; + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; + CurrentByteOffset = Info->CurrentByteOffset; +@@ -1870,7 +1975,7 @@ RsDoPinGroupFunctionDescriptor ( + sizeof (AML_RESOURCE_LARGE_HEADER)); + + Descriptor = Rnode->Buffer; +- Descriptor->PinGroupFunction.ResourceLength = DescriptorSize; ++ Descriptor->PinGroupFunction.ResourceLength = AcpiUtReadUint16(&DescriptorSize); + Descriptor->PinGroupFunction.DescriptorType = ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION; + Descriptor->PinGroupFunction.RevisionId = AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION; + +@@ -1902,7 +2007,8 @@ RsDoPinGroupFunctionDescriptor ( + + case 1: /* Function Number [WORD] */ + +- Descriptor->PinGroupFunction.FunctionNumber = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->PinGroupFunction.FunctionNumber = AcpiUtReadUint16(&Tmp16); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_FUNCTION, + CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupFunction.FunctionNumber)); + break; +@@ -1961,6 +2067,16 @@ RsDoPinGroupFunctionDescriptor ( + InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); + } + ++ /* correct enddianness as needed */ ++ Tmp16 = Descriptor->PinGroupFunction.ResSourceOffset; ++ Descriptor->PinGroupFunction.ResSourceOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->PinGroupFunction.ResSourceLabelOffset; ++ Descriptor->PinGroupFunction.ResSourceLabelOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->PinGroupFunction.VendorOffset; ++ Descriptor->PinGroupFunction.VendorOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->PinGroupFunction.VendorLength; ++ Descriptor->PinGroupFunction.VendorLength = AcpiUtReadUint16(&Tmp16); ++ + return (Rnode); + } + +@@ -1993,6 +2109,8 @@ RsDoPinGroupConfigDescriptor ( + UINT16 DescriptorSize; + UINT32 CurrentByteOffset; + UINT32 i; ++ UINT16 Tmp16; ++ UINT32 Tmp32; + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; + CurrentByteOffset = Info->CurrentByteOffset; +@@ -2016,7 +2134,7 @@ RsDoPinGroupConfigDescriptor ( + sizeof (AML_RESOURCE_LARGE_HEADER)); + + Descriptor = Rnode->Buffer; +- Descriptor->PinGroupConfig.ResourceLength = DescriptorSize; ++ Descriptor->PinGroupConfig.ResourceLength = AcpiUtReadUint16(&DescriptorSize); + Descriptor->PinGroupConfig.DescriptorType = ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG; + Descriptor->PinGroupConfig.RevisionId = AML_RESOURCE_PIN_GROUP_CONFIG_REVISION; + +@@ -2069,7 +2187,8 @@ RsDoPinGroupConfigDescriptor ( + + case 2: /* Pin Config Value [DWORD] (_VAL) */ + +- Descriptor->PinGroupConfig.PinConfigValue = (UINT32) InitializerOp->Asl.Value.Integer; ++ Tmp32 = (UINT32) InitializerOp->Asl.Value.Integer; ++ Descriptor->PinGroupConfig.PinConfigValue = AcpiUtReadUint32(&Tmp32); + RsCreateDwordField (InitializerOp, ACPI_RESTAG_PINCONFIG_VALUE, + CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupConfig.PinConfigValue)); + break; +@@ -2130,5 +2249,15 @@ RsDoPinGroupConfigDescriptor ( + InitializerOp = RsCompleteNodeAndGetNext (InitializerOp); + } + ++ /* correct enddianness as needed */ ++ Tmp16 = Descriptor->PinGroupConfig.ResSourceOffset; ++ Descriptor->PinGroupConfig.ResSourceOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->PinGroupConfig.ResSourceLabelOffset; ++ Descriptor->PinGroupConfig.ResSourceLabelOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->PinGroupConfig.VendorOffset; ++ Descriptor->PinGroupConfig.VendorOffset = AcpiUtReadUint16(&Tmp16); ++ Tmp16 = Descriptor->PinGroupConfig.VendorLength; ++ Descriptor->PinGroupConfig.VendorLength = AcpiUtReadUint16(&Tmp16); ++ + return (Rnode); + } +Index: acpica-unix2-20200925/source/compiler/aslrestype2w.c +=================================================================== +--- acpica-unix2-20200925.orig/source/compiler/aslrestype2w.c ++++ acpica-unix2-20200925/source/compiler/aslrestype2w.c +@@ -84,6 +84,7 @@ RsDoWordIoDescriptor ( + UINT32 CurrentByteOffset; + UINT32 i; + BOOLEAN ResSourceIndex = FALSE; ++ UINT16 Tmp16; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -147,7 +148,8 @@ RsDoWordIoDescriptor ( + + case 5: /* Address Granularity */ + +- Descriptor->Address16.Granularity = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address16.Granularity = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity)); + GranOp = InitializerOp; +@@ -155,7 +157,8 @@ RsDoWordIoDescriptor ( + + case 6: /* Address Min */ + +- Descriptor->Address16.Minimum = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address16.Minimum = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum)); + MinOp = InitializerOp; +@@ -163,7 +166,8 @@ RsDoWordIoDescriptor ( + + case 7: /* Address Max */ + +- Descriptor->Address16.Maximum = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address16.Maximum = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum)); + MaxOp = InitializerOp; +@@ -171,14 +175,16 @@ RsDoWordIoDescriptor ( + + case 8: /* Translation Offset */ + +- Descriptor->Address16.TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address16.TranslationOffset = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset)); + break; + + case 9: /* Address Length */ + +- Descriptor->Address16.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address16.AddressLength = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength)); + LengthOp = InitializerOp; +@@ -263,13 +269,17 @@ RsDoWordIoDescriptor ( + /* Validate the Min/Max/Len/Gran values */ + + RsLargeAddressCheck ( +- (UINT64) Descriptor->Address16.Minimum, +- (UINT64) Descriptor->Address16.Maximum, +- (UINT64) Descriptor->Address16.AddressLength, +- (UINT64) Descriptor->Address16.Granularity, ++ (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Minimum), ++ (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Maximum), ++ (UINT64) AcpiUtReadUint16(&Descriptor->Address16.AddressLength), ++ (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Granularity), + Descriptor->Address16.Flags, + MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); + ++ /* correct enddianness */ ++ Tmp16 = Descriptor->Address16.ResourceLength; ++ Descriptor->Address16.ResourceLength = AcpiUtReadUint16(&Tmp16); ++ + Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) + + OptionIndex + StringLength; + return (Rnode); +@@ -305,6 +315,7 @@ RsDoWordBusNumberDescriptor ( + UINT32 CurrentByteOffset; + UINT32 i; + BOOLEAN ResSourceIndex = FALSE; ++ UINT16 Tmp16; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -361,8 +372,8 @@ RsDoWordBusNumberDescriptor ( + + case 4: /* Address Granularity */ + +- Descriptor->Address16.Granularity = +- (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address16.Granularity = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity)); + GranOp = InitializerOp; +@@ -370,8 +381,8 @@ RsDoWordBusNumberDescriptor ( + + case 5: /* Min Address */ + +- Descriptor->Address16.Minimum = +- (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address16.Minimum = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum)); + MinOp = InitializerOp; +@@ -379,8 +390,8 @@ RsDoWordBusNumberDescriptor ( + + case 6: /* Max Address */ + +- Descriptor->Address16.Maximum = +- (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address16.Maximum = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum)); + MaxOp = InitializerOp; +@@ -388,16 +399,16 @@ RsDoWordBusNumberDescriptor ( + + case 7: /* Translation Offset */ + +- Descriptor->Address16.TranslationOffset = +- (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address16.TranslationOffset = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset)); + break; + + case 8: /* Address Length */ + +- Descriptor->Address16.AddressLength = +- (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address16.AddressLength = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength)); + LengthOp = InitializerOp; +@@ -468,13 +479,17 @@ RsDoWordBusNumberDescriptor ( + /* Validate the Min/Max/Len/Gran values */ + + RsLargeAddressCheck ( +- (UINT64) Descriptor->Address16.Minimum, +- (UINT64) Descriptor->Address16.Maximum, +- (UINT64) Descriptor->Address16.AddressLength, +- (UINT64) Descriptor->Address16.Granularity, ++ (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Minimum), ++ (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Maximum), ++ (UINT64) AcpiUtReadUint16(&Descriptor->Address16.AddressLength), ++ (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Granularity), + Descriptor->Address16.Flags, + MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); + ++ /* correct enddianness */ ++ Tmp16 = Descriptor->Address16.ResourceLength; ++ Descriptor->Address16.ResourceLength = AcpiUtReadUint16(&Tmp16); ++ + Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) + + OptionIndex + StringLength; + return (Rnode); +@@ -510,6 +525,7 @@ RsDoWordSpaceDescriptor ( + UINT32 CurrentByteOffset; + UINT32 i; + BOOLEAN ResSourceIndex = FALSE; ++ UINT16 Tmp16; + + + InitializerOp = Info->DescriptorTypeOp->Asl.Child; +@@ -577,8 +593,8 @@ RsDoWordSpaceDescriptor ( + + case 6: /* Address Granularity */ + +- Descriptor->Address16.Granularity = +- (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address16.Granularity = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity)); + GranOp = InitializerOp; +@@ -586,8 +602,8 @@ RsDoWordSpaceDescriptor ( + + case 7: /* Min Address */ + +- Descriptor->Address16.Minimum = +- (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address16.Minimum = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum)); + MinOp = InitializerOp; +@@ -595,8 +611,8 @@ RsDoWordSpaceDescriptor ( + + case 8: /* Max Address */ + +- Descriptor->Address16.Maximum = +- (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address16.Maximum = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum)); + MaxOp = InitializerOp; +@@ -604,16 +620,16 @@ RsDoWordSpaceDescriptor ( + + case 9: /* Translation Offset */ + +- Descriptor->Address16.TranslationOffset = +- (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address16.TranslationOffset = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset)); + break; + + case 10: /* Address Length */ + +- Descriptor->Address16.AddressLength = +- (UINT16) InitializerOp->Asl.Value.Integer; ++ Tmp16 = (UINT16) InitializerOp->Asl.Value.Integer; ++ Descriptor->Address16.AddressLength = AcpiUtReadUint16(&Tmp16); + RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH, + CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength)); + LengthOp = InitializerOp; +@@ -684,13 +700,17 @@ RsDoWordSpaceDescriptor ( + /* Validate the Min/Max/Len/Gran values */ + + RsLargeAddressCheck ( +- (UINT64) Descriptor->Address16.Minimum, +- (UINT64) Descriptor->Address16.Maximum, +- (UINT64) Descriptor->Address16.AddressLength, +- (UINT64) Descriptor->Address16.Granularity, ++ (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Minimum), ++ (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Maximum), ++ (UINT64) AcpiUtReadUint16(&Descriptor->Address16.AddressLength), ++ (UINT64) AcpiUtReadUint16(&Descriptor->Address16.Granularity), + Descriptor->Address16.Flags, + MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp); + ++ /* correct enddianness */ ++ Tmp16 = Descriptor->Address16.ResourceLength; ++ Descriptor->Address16.ResourceLength = AcpiUtReadUint16(&Tmp16); ++ + Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) + + OptionIndex + StringLength; + return (Rnode); +Index: acpica-unix2-20200925/source/components/disassembler/dmbuffer.c +=================================================================== +--- acpica-unix2-20200925.orig/source/components/disassembler/dmbuffer.c ++++ acpica-unix2-20200925/source/components/disassembler/dmbuffer.c +@@ -204,7 +204,7 @@ AcpiDmByteList ( + + + ByteData = Op->Named.Data; +- ByteCount = (UINT32) Op->Common.Value.Integer; ++ ByteCount = (UINT32) Op->Common.Value.Size; + + /* + * The byte list belongs to a buffer, and can be produced by either +Index: acpica-unix2-20200925/source/components/disassembler/dmopcode.c +=================================================================== +--- acpica-unix2-20200925.orig/source/components/disassembler/dmopcode.c ++++ acpica-unix2-20200925/source/components/disassembler/dmopcode.c +@@ -882,23 +882,23 @@ AcpiDmDisassembleOneOp ( + + case AML_INT_NAMEDFIELD_OP: + +- Length = AcpiDmDumpName (Op->Named.Name); ++ Length = AcpiDmDumpName (AcpiUtReadUint32(&Op->Named.Name)); + + AcpiOsPrintf (","); + ASL_CV_PRINT_ONE_COMMENT (Op, AML_NAMECOMMENT, NULL, 0); + AcpiOsPrintf ("%*.s %u", (unsigned) (5 - Length), " ", +- (UINT32) Op->Common.Value.Integer); ++ (UINT32) Op->Common.Value.Size); + + AcpiDmCommaIfFieldMember (Op); + +- Info->BitOffset += (UINT32) Op->Common.Value.Integer; ++ Info->BitOffset += (UINT32) Op->Common.Value.Size; + break; + + case AML_INT_RESERVEDFIELD_OP: + + /* Offset() -- Must account for previous offsets */ + +- Offset = (UINT32) Op->Common.Value.Integer; ++ Offset = (UINT32) Op->Common.Value.Size; + Info->BitOffset += Offset; + + if (Info->BitOffset % 8 == 0) +Index: acpica-unix2-20200925/source/components/disassembler/dmresrc.c +=================================================================== +--- acpica-unix2-20200925.orig/source/components/disassembler/dmresrc.c ++++ acpica-unix2-20200925/source/components/disassembler/dmresrc.c +@@ -417,7 +417,7 @@ AcpiDmIsResourceTemplate ( + return (AE_TYPE); + } + +- DeclaredBufferLength = NextOp->Common.Value.Size; ++ DeclaredBufferLength = NextOp->Common.Value.Integer; + + /* Get the length of the raw initialization byte list */ + +Index: acpica-unix2-20200925/source/components/disassembler/dmresrcl.c +=================================================================== +--- acpica-unix2-20200925.orig/source/components/disassembler/dmresrcl.c ++++ acpica-unix2-20200925/source/components/disassembler/dmresrcl.c +@@ -141,6 +141,8 @@ AcpiDmMemoryFields ( + UINT32 Level) + { + UINT32 i; ++ UINT16 Tmp16; ++ UINT32 Tmp32; + + + for (i = 0; i < 4; i++) +@@ -151,14 +153,16 @@ AcpiDmMemoryFields ( + { + case 16: + +- AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i], +- AcpiDmMemoryNames[i]); ++ Tmp16 = ACPI_CAST_PTR (UINT16, Source)[i]; ++ AcpiDmDumpInteger16 (AcpiUtReadUint16(&Tmp16), ++ AcpiDmMemoryNames[i]); + break; + + case 32: + +- AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i], +- AcpiDmMemoryNames[i]); ++ Tmp32 = ACPI_CAST_PTR (UINT32, Source)[i]; ++ AcpiDmDumpInteger32 (AcpiUtReadUint32(&Tmp32), ++ AcpiDmMemoryNames[i]); + break; + + default: +@@ -190,6 +194,9 @@ AcpiDmAddressFields ( + UINT32 Level) + { + UINT32 i; ++ UINT16 Tmp16; ++ UINT32 Tmp32; ++ UINT64 Tmp64; + + + AcpiOsPrintf ("\n"); +@@ -202,20 +209,23 @@ AcpiDmAddressFields ( + { + case 16: + +- AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i], +- AcpiDmAddressNames[i]); ++ Tmp16 = ACPI_CAST_PTR (UINT16, Source)[i]; ++ AcpiDmDumpInteger16 (AcpiUtReadUint16(&Tmp16), ++ AcpiDmAddressNames[i]); + break; + + case 32: + +- AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i], +- AcpiDmAddressNames[i]); ++ Tmp32 = ACPI_CAST_PTR (UINT32, Source)[i]; ++ AcpiDmDumpInteger32 (AcpiUtReadUint32(&Tmp32), ++ AcpiDmAddressNames[i]); + break; + + case 64: + +- AcpiDmDumpInteger64 (ACPI_CAST_PTR (UINT64, Source)[i], +- AcpiDmAddressNames[i]); ++ Tmp64 = ACPI_CAST_PTR (UINT64, Source)[i]; ++ AcpiDmDumpInteger64 (AcpiUtReadUint64(&Tmp64), ++ AcpiDmAddressNames[i]); + break; + + default: +@@ -749,7 +759,7 @@ AcpiDmExtendedDescriptor ( + /* Extra field for this descriptor only */ + + AcpiDmIndent (Level + 1); +- AcpiDmDumpInteger64 (Resource->ExtAddress64.TypeSpecific, ++ AcpiDmDumpInteger64 (AcpiUtReadUint64(&Resource->ExtAddress64.TypeSpecific), + "Type-Specific Attributes"); + + /* Insert a descriptor name */ +@@ -876,11 +886,11 @@ AcpiDmFixedMemory32Descriptor ( + AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (Resource->FixedMemory32.Flags)]); + + AcpiDmIndent (Level + 1); +- AcpiDmDumpInteger32 (Resource->FixedMemory32.Address, ++ AcpiDmDumpInteger32 (AcpiUtReadUint32(&Resource->FixedMemory32.Address), + "Address Base"); + + AcpiDmIndent (Level + 1); +- AcpiDmDumpInteger32 (Resource->FixedMemory32.AddressLength, ++ AcpiDmDumpInteger32 (AcpiUtReadUint32(&Resource->FixedMemory32.AddressLength), + "Address Length"); + + /* Insert a descriptor name */ +@@ -926,7 +936,8 @@ AcpiDmGenericRegisterDescriptor ( + AcpiDmDumpInteger8 (Resource->GenericReg.BitOffset, "Bit Offset"); + + AcpiDmIndent (Level + 1); +- AcpiDmDumpInteger64 (Resource->GenericReg.Address, "Address"); ++ AcpiDmDumpInteger64 (AcpiUtReadUint64(&Resource->GenericReg.Address), ++ "Address"); + + /* Optional field for ACPI 3.0 */ + +@@ -989,7 +1000,7 @@ AcpiDmInterruptDescriptor ( + AcpiDmResourceSource (Resource, + sizeof (AML_RESOURCE_EXTENDED_IRQ) + + ((UINT32) Resource->ExtendedIrq.InterruptCount - 1) * sizeof (UINT32), +- Resource->ExtendedIrq.ResourceLength); ++ AcpiUtReadUint16(&Resource->ExtendedIrq.ResourceLength)); + + /* Insert a descriptor name */ + +@@ -1004,7 +1015,7 @@ AcpiDmInterruptDescriptor ( + { + AcpiDmIndent (Level + 1); + AcpiOsPrintf ("0x%8.8X,\n", +- (UINT32) Resource->ExtendedIrq.Interrupts[i]); ++ AcpiUtReadUint32(&Resource->ExtendedIrq.Interrupts[i])); + } + + AcpiDmIndent (Level); +Index: acpica-unix2-20200925/source/components/disassembler/dmresrcl2.c +=================================================================== +--- acpica-unix2-20200925.orig/source/components/disassembler/dmresrcl2.c ++++ acpica-unix2-20200925/source/components/disassembler/dmresrcl2.c +@@ -191,15 +191,19 @@ AcpiDmGpioCommon ( + char *DeviceName = NULL; + UINT32 PinCount; + UINT32 i; ++ UINT16 ResSourceOffset; ++ UINT16 VendorOffset; ++ UINT16 VendorLength; + + + /* 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); + } + +@@ -215,15 +219,15 @@ AcpiDmGpioCommon ( + + /* Dump the vendor data */ + +- if (Resource->Gpio.VendorOffset) ++ VendorOffset = AcpiUtReadUint16(&Resource->Gpio.VendorOffset); ++ VendorLength = AcpiUtReadUint16(&Resource->Gpio.VendorLength); ++ if (VendorOffset) + { + AcpiOsPrintf ("\n"); + AcpiDmIndent (Level + 1); +- VendorData = ACPI_ADD_PTR (UINT8, Resource, +- Resource->Gpio.VendorOffset); ++ VendorData = ACPI_ADD_PTR (UINT8, Resource, VendorOffset); + +- AcpiDmDumpRawDataBuffer (VendorData, +- Resource->Gpio.VendorLength, Level); ++ AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level); + } + + AcpiOsPrintf (")\n"); +@@ -233,17 +237,21 @@ AcpiDmGpioCommon ( + AcpiDmIndent (Level + 1); + AcpiOsPrintf ("{ // Pin list\n"); + ++ PinCount = (UINT32) AcpiUtReadUint16(&Resource->Gpio.ResSourceOffset); ++ PinCount -= (UINT32) AcpiUtReadUint16(&Resource->Gpio.PinTableOffset); ++ PinCount /= sizeof (UINT16); ++ + PinCount = ((UINT32) (Resource->Gpio.ResSourceOffset - + Resource->Gpio.PinTableOffset)) / + 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) ? "," : ""); + } + +@@ -299,7 +307,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 */ + +@@ -350,8 +359,8 @@ AcpiDmGpioIoDescriptor ( + + /* DebounceTimeout, DriveStrength, IoRestriction */ + +- AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DebounceTimeout); +- AcpiOsPrintf ("0x%4.4X, ", Resource->Gpio.DriveStrength); ++ AcpiOsPrintf ("0x%4.4X, ", AcpiUtReadUint16(&Resource->Gpio.DebounceTimeout)); ++ AcpiOsPrintf ("0x%4.4X, ", AcpiUtReadUint16(&Resource->Gpio.DriveStrength)); + AcpiOsPrintf ("%s,\n", + AcpiGbl_IorDecode [ACPI_GET_2BIT_FLAG (Resource->Gpio.IntFlags)]); + +@@ -434,6 +443,9 @@ AcpiDmPinFunctionDescriptor ( + char *DeviceName = NULL; + UINT32 PinCount; + UINT32 i; ++ UINT16 ResSourceOffset; ++ UINT16 VendorOffset; ++ UINT16 VendorLength; + + AcpiDmIndent (Level); + AcpiOsPrintf ("PinFunction (%s, ", +@@ -451,12 +463,14 @@ AcpiDmPinFunctionDescriptor ( + + /* FunctionNumber */ + +- AcpiOsPrintf ("0x%4.4X, ", Resource->PinFunction.FunctionNumber); ++ AcpiOsPrintf ("0x%4.4X, ", ++ AcpiUtReadUint16(&Resource->PinFunction.FunctionNumber)); + +- if (Resource->PinFunction.ResSourceOffset) ++ ResSourceOffset = AcpiUtReadUint16(&Resource->PinFunction.ResSourceOffset); ++ if (ResSourceOffset) + { + DeviceName = ACPI_ADD_PTR (char, +- Resource, Resource->PinFunction.ResSourceOffset), ++ Resource, ResSourceOffset), + AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX); + } + +@@ -476,15 +490,15 @@ AcpiDmPinFunctionDescriptor ( + + /* Dump the vendor data */ + +- if (Resource->PinFunction.VendorLength) ++ VendorOffset = AcpiUtReadUint16(&Resource->PinFunction.VendorOffset); ++ VendorLength = AcpiUtReadUint16(&Resource->PinFunction.VendorLength); ++ if (VendorLength) + { + AcpiOsPrintf ("\n"); + AcpiDmIndent (Level + 1); +- VendorData = ACPI_ADD_PTR (UINT8, Resource, +- Resource->PinFunction.VendorOffset); ++ VendorData = ACPI_ADD_PTR (UINT8, Resource, VendorOffset); + +- AcpiDmDumpRawDataBuffer (VendorData, +- Resource->PinFunction.VendorLength, Level); ++ AcpiDmDumpRawDataBuffer (VendorData, VendorLength, Level); + } + + AcpiOsPrintf (")\n"); +@@ -495,17 +509,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) ? "," : ""); + } + +Index: acpica-unix2-20200925/source/components/disassembler/dmresrcs.c +=================================================================== +--- acpica-unix2-20200925.orig/source/components/disassembler/dmresrcs.c ++++ acpica-unix2-20200925/source/components/disassembler/dmresrcs.c +@@ -93,7 +93,7 @@ AcpiDmIrqDescriptor ( + AcpiOsPrintf (")\n"); + + AcpiDmIndent (Level + 1); +- AcpiDmBitList (Resource->Irq.IrqMask); ++ AcpiDmBitList (AcpiUtReadUint16(&Resource->Irq.IrqMask)); + } + + +@@ -161,8 +161,8 @@ AcpiDmFixedDmaDescriptor ( + + AcpiDmIndent (Level); + AcpiOsPrintf ("FixedDMA (0x%4.4X, 0x%4.4X, ", +- Resource->FixedDma.RequestLines, +- Resource->FixedDma.Channels); ++ AcpiUtReadUint16(&Resource->FixedDma.RequestLines), ++ AcpiUtReadUint16(&Resource->FixedDma.Channels)); + + if (Resource->FixedDma.Width <= 5) + { +@@ -210,10 +210,12 @@ AcpiDmIoDescriptor ( + AcpiGbl_IoDecode [ACPI_GET_1BIT_FLAG (Resource->Io.Flags)]); + + AcpiDmIndent (Level + 1); +- AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum"); ++ AcpiDmDumpInteger16 (AcpiUtReadUint16(&Resource->Io.Minimum), ++ "Range Minimum"); + + AcpiDmIndent (Level + 1); +- AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum"); ++ AcpiDmDumpInteger16 (AcpiUtReadUint16(&Resource->Io.Maximum), ++ "Range Maximum"); + + AcpiDmIndent (Level + 1); + AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment"); +@@ -256,10 +258,12 @@ AcpiDmFixedIoDescriptor ( + AcpiOsPrintf ("FixedIO (\n"); + + AcpiDmIndent (Level + 1); +- AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address"); ++ AcpiDmDumpInteger16 (AcpiUtReadUint16(&Resource->FixedIo.Address), ++ "Address"); + + AcpiDmIndent (Level + 1); +- AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length"); ++ AcpiDmDumpInteger8 (AcpiUtReadUint16(&Resource->FixedIo.AddressLength), ++ "Length"); + + /* Insert a descriptor name */ + +Index: acpica-unix2-20200925/source/components/dispatcher/dsfield.c +=================================================================== +--- acpica-unix2-20200925.orig/source/components/dispatcher/dsfield.c ++++ acpica-unix2-20200925/source/components/dispatcher/dsfield.c +@@ -336,6 +336,8 @@ AcpiDsGetFieldNames ( + char *NamePath; + #endif + ++ char TmpName[ACPI_NAMESEG_SIZE+1]; ++ + + ACPI_FUNCTION_TRACE_PTR (DsGetFieldNames, Info); + +@@ -442,14 +444,17 @@ AcpiDsGetFieldNames ( + + /* Lookup the name, it should already exist */ + ++ memset(TmpName, 0, ACPI_NAMESEG_SIZE+1); ++ AcpiUtWriteUint(TmpName, ACPI_NAMESEG_SIZE, ++ &Arg->Named.Name, ACPI_NAMESEG_SIZE); + Status = AcpiNsLookup (WalkState->ScopeInfo, +- (char *) &Arg->Named.Name, Info->FieldType, ++ TmpName, Info->FieldType, + ACPI_IMODE_EXECUTE, ACPI_NS_DONT_OPEN_SCOPE, + WalkState, &Info->FieldNode); + if (ACPI_FAILURE (Status)) + { + ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo, +- (char *) &Arg->Named.Name, Status); ++ TmpName, Status); + return_ACPI_STATUS (Status); + } + else +@@ -703,8 +708,13 @@ AcpiDsInitFieldObjects ( + */ + if (Arg->Common.AmlOpcode == AML_INT_NAMEDFIELD_OP) + { ++ char Tmp[ACPI_NAMESEG_SIZE+1]; ++ ++ memset(&Tmp, 0, ACPI_NAMESEG_SIZE+1); ++ AcpiUtWriteUint(&Tmp, ACPI_NAMESEG_SIZE, ++ &Arg->Named.Name, ACPI_NAMESEG_SIZE); + Status = AcpiNsLookup (WalkState->ScopeInfo, +- (char *) &Arg->Named.Name, Type, ACPI_IMODE_LOAD_PASS1, ++ Tmp, Type, ACPI_IMODE_LOAD_PASS1, + Flags, WalkState, &Node); + if (ACPI_FAILURE (Status)) + { +Index: acpica-unix2-20200925/source/components/namespace/nsaccess.c +=================================================================== +--- acpica-unix2-20200925.orig/source/components/namespace/nsaccess.c ++++ acpica-unix2-20200925/source/components/namespace/nsaccess.c +@@ -645,7 +645,7 @@ AcpiNsLookup ( + + /* Extract one ACPI name from the front of the pathname */ + +- ACPI_MOVE_32_TO_32 (&SimpleName, Path); ++ ACPI_COPY_NAMESEG (&SimpleName, Path); + + /* Try to find the single (4 character) ACPI name */ + +Index: acpica-unix2-20200925/source/components/namespace/nsnames.c +=================================================================== +--- acpica-unix2-20200925.orig/source/components/namespace/nsnames.c ++++ acpica-unix2-20200925/source/components/namespace/nsnames.c +@@ -300,7 +300,7 @@ AcpiNsBuildNormalizedPath ( + ACPI_PATH_PUT8(FullPath, PathSize, AML_DUAL_NAME_PREFIX, Length); + } + +- ACPI_MOVE_32_TO_32 (Name, &NextNode->Name); ++ ACPI_COPY_NAMESEG (Name, &NextNode->Name); + DoNoTrailing = NoTrailing; + for (i = 0; i < 4; i++) + { +Index: acpica-unix2-20200925/source/components/namespace/nsparse.c +=================================================================== +--- acpica-unix2-20200925.orig/source/components/namespace/nsparse.c ++++ acpica-unix2-20200925/source/components/namespace/nsparse.c +@@ -203,6 +203,7 @@ AcpiNsOneCompleteParse ( + ACPI_WALK_STATE *WalkState; + ACPI_TABLE_HEADER *Table; + ACPI_OWNER_ID OwnerId; ++ UINT32 TableLength; + + + ACPI_FUNCTION_TRACE (NsOneCompleteParse); +@@ -216,13 +217,14 @@ AcpiNsOneCompleteParse ( + + /* Table must consist of at least a complete header */ + +- if (Table->Length < sizeof (ACPI_TABLE_HEADER)) ++ TableLength = AcpiUtReadUint32(&Table->Length); ++ if (TableLength < sizeof (ACPI_TABLE_HEADER)) + { + return_ACPI_STATUS (AE_BAD_HEADER); + } + + AmlStart = (UINT8 *) Table + sizeof (ACPI_TABLE_HEADER); +- AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER); ++ AmlLength = TableLength - sizeof (ACPI_TABLE_HEADER); + + Status = AcpiTbGetOwnerId (TableIndex, &OwnerId); + if (ACPI_FAILURE (Status)) +Index: acpica-unix2-20200925/source/components/namespace/nsutils.c +=================================================================== +--- acpica-unix2-20200925.orig/source/components/namespace/nsutils.c ++++ acpica-unix2-20200925/source/components/namespace/nsutils.c +@@ -272,7 +272,6 @@ AcpiNsBuildInternalName ( + const char *ExternalName = Info->NextExternalChar; + char *Result = NULL; + UINT32 i; +- char TmpSeg[ACPI_NAMESEG_SIZE+1]; + + + ACPI_FUNCTION_TRACE (NsBuildInternalName); +@@ -336,7 +335,6 @@ AcpiNsBuildInternalName ( + + for (; NumSegments; NumSegments--) + { +- memset(TmpSeg, 0, ACPI_NAMESEG_SIZE+1); + for (i = 0; i < ACPI_NAMESEG_SIZE; i++) + { + if (ACPI_IS_PATH_SEPARATOR (*ExternalName) || +@@ -344,17 +342,16 @@ AcpiNsBuildInternalName ( + { + /* Pad the segment with underscore(s) if segment is short */ + +- TmpSeg[i] = '_'; ++ Result[i] = '_'; + } + else + { + /* Convert the character to uppercase and save it */ + +- TmpSeg[i] = (char) toupper ((int) *ExternalName); ++ Result[i] = (char) toupper ((int) *ExternalName); + ExternalName++; + } + } +- AcpiUtWriteUint(Result, ACPI_NAMESEG_SIZE, TmpSeg, ACPI_NAMESEG_SIZE); + + /* Now we must have a path separator, or the pathname is bad */ + diff --git a/OPT_LDFLAGS.patch b/OPT_LDFLAGS.patch index 610d66d..de12ce1 100644 --- a/OPT_LDFLAGS.patch +++ b/OPT_LDFLAGS.patch @@ -1,7 +1,7 @@ -Index: acpica-unix2-20200528/generate/unix/Makefile.config +Index: acpica-unix2-20200925/generate/unix/Makefile.config =================================================================== ---- acpica-unix2-20200528.orig/generate/unix/Makefile.config -+++ acpica-unix2-20200528/generate/unix/Makefile.config +--- acpica-unix2-20200925.orig/generate/unix/Makefile.config ++++ acpica-unix2-20200925/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. diff --git a/acpica-tools.spec b/acpica-tools.spec index ad94d67..7123e29 100644 --- a/acpica-tools.spec +++ b/acpica-tools.spec @@ -50,7 +50,7 @@ Patch22: 0023-Support-NFIT-in-a-big-endian-world.patch Patch23: 0024-Support-SDEV-in-a-big-endian-world.patch Patch24: 0025-Support-HMAT-in-a-big-endian-world.patch Patch25: 0026-Support-PDTT-in-a-big-endian-world.patch -Patch25: 0027-Support-PPTT-in-a-big-endian-world.patch +Patch26: 0027-Support-PPTT-in-a-big-endian-world.patch Patch27: 0028-Support-PCCT-in-a-big-endian-world.patch Patch28: 0029-Support-WDAT-in-a-big-endian-world.patch Patch29: 0030-Support-TCPA-in-a-big-endian-world.patch @@ -65,25 +65,26 @@ Patch37: 0038-Support-TPM2-in-a-big-endian-world.patch Patch38: 0039-Add-partial-big-endian-support-for-WPBT-tables.patch Patch39: 0040-Support-DSDT-SSDT-in-a-big-endian-world.patch -# other miscellaneous patch -Patch40: unaligned.patch -Patch41: OPT_LDFLAGS.patch -Patch42: int-format.patch -Patch43: f23-harden.patch -Patch44: template.patch -Patch45: ppc64le.patch -Patch46: arm7hl.patch -Patch47: simple-64bit.patch -Patch48: mips-be-fix.patch -Patch49: cve-2017-13693.patch -Patch50: cve-2017-13694.patch -Patch51: cve-2017-13695.patch -Patch52: str-trunc-warn.patch -Patch53: ptr-cast.patch -Patch54: aslcodegen.patch -Patch55: facp.patch -Patch56: armv7-str-fixes.patch -Patch57: dbtest.patch +# other miscellaneous patches +Patch100: unaligned.patch +Patch101: OPT_LDFLAGS.patch +Patch102: int-format.patch +Patch103: f23-harden.patch +Patch104: template.patch +Patch105: arm7hl.patch +Patch106: 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: facp.patch +Patch114: armv7-str-fixes.patch +Patch115: dbtest.patch +%ifarch i686 armv7hl +Patch116: ull-32bit.patch +%endif BuildRequires: bison patchutils flex gcc @@ -132,65 +133,68 @@ This version of the tools is being released under GPLv2 license. %setup -q -n acpica-unix2-%{version} gzip -dc %{SOURCE1} | tar -x --strip-components=1 -f - -# apply all the patches -%patch0 -%patch1 -%patch2 -%patch3 -%patch4 -%patch5 -%patch6 -%patch7 -%patch8 -%patch9 -%patch10 -%patch11 -%patch12 -%patch13 -%patch14 -%patch15 -%patch16 -%patch17 -%patch18 -%patch19 -%patch20 -%patch21 -%patch22 -%patch23 -%patch24 -%patch25 -%patch26 -%patch27 -%patch28 -%patch29 -%patch30 -%patch31 -%patch32 -%patch33 -%patch34 -%patch35 -%patch36 -%patch37 -%patch38 -%patch39 -%patch40 -%patch41 -%patch42 -%patch43 -%patch44 -%patch45 -%patch46 -%patch47 -%patch48 -%patch49 -%patch50 -%patch51 -%patch52 -%patch53 -%patch54 -%patch55 -%patch56 -%patch57 +# apply the big-endian patches +%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 +%patch19 -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 + +# apply the remaining patches +%patch100 -p1 +%patch101 -p1 +%patch102 -p1 +%patch103 -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 +%ifarch i686 armv7hl +%patch116 -p1 +%endif cp -p %{SOURCE2} README.Fedora cp -p %{SOURCE3} iasl.1 @@ -306,11 +310,13 @@ fi %changelog -* Thu Oct 15 2020 Al Stone - 20200925-1 +* Mon Oct 19 2020 Al Stone - 20200925-1 - Update to 20200925 source tree -- Completely revamp the old big-endian patches (maintainability was the goal) -- The acpinames command has been deprecated upstrean; acpiexec provides - replacement functionality +- Completely revamp the old big-endian patches (maintainability was the goal). + This results in a much larger patch set, but each patch is more clearly used + for a specific purpose. +- The acpinames command has been deprecated upstream; acpiexec provides + replacement functionality. * Fri Jul 31 2020 Fedora Release Engineering - 20200430-3 - Second attempt - Rebuilt for diff --git a/arm7hl.patch b/arm7hl.patch index 75abf45..bcac21f 100644 --- a/arm7hl.patch +++ b/arm7hl.patch @@ -1,8 +1,8 @@ -Index: acpica-unix-20191018/source/include/acmacros.h +Index: acpica-unix2-20200925/source/include/acmacros.h =================================================================== ---- acpica-unix-20191018.orig/source/include/acmacros.h -+++ acpica-unix-20191018/source/include/acmacros.h -@@ -178,6 +178,8 @@ +--- acpica-unix2-20200925.orig/source/include/acmacros.h ++++ acpica-unix2-20200925/source/include/acmacros.h +@@ -163,6 +163,8 @@ /* 16-bit source, 16/32/64 destination */ @@ -11,7 +11,7 @@ Index: acpica-unix-20191018/source/include/acmacros.h #define ACPI_MOVE_16_TO_16(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\ (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];} -@@ -199,6 +201,7 @@ +@@ -182,6 +184,7 @@ /* 64-bit source, 16/32/64 destination */ diff --git a/armv7-str-fixes.patch b/armv7-str-fixes.patch index 4de8226..fdc2434 100644 --- a/armv7-str-fixes.patch +++ b/armv7-str-fixes.patch @@ -1,7 +1,8 @@ -diff -Naur acpica-unix2-20200214.orig/source/include/actypes.h acpica-unix2-20200214/source/include/actypes.h ---- acpica-unix2-20200214.orig/source/include/actypes.h 2020-02-25 15:41:26.479349637 -0700 -+++ acpica-unix2-20200214/source/include/actypes.h 2020-02-25 15:44:49.519082258 -0700 -@@ -561,7 +561,7 @@ +Index: acpica-unix2-20200925/source/include/actypes.h +=================================================================== +--- acpica-unix2-20200925.orig/source/include/actypes.h ++++ acpica-unix2-20200925/source/include/actypes.h +@@ -561,7 +561,7 @@ typedef UINT64 #define ACPI_COPY_NAMESEG(dest,src) (*ACPI_CAST_PTR (UINT32, (dest)) = *ACPI_CAST_PTR (UINT32, (src))) #else #define ACPI_COMPARE_NAMESEG(a,b) (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_CAST_PTR (char, (b)), ACPI_NAMESEG_SIZE)) diff --git a/aslcodegen.patch b/aslcodegen.patch deleted file mode 100644 index 2e2854e..0000000 --- a/aslcodegen.patch +++ /dev/null @@ -1,29 +0,0 @@ -Changes in the handling of comments caused some length fields to be used -in new ways. The new way broke the existing adaptation for big endian -support; this patch repairs that adaptation. - -Signed-off-by: Al Stone - -Index: acpica-unix-20191018/source/compiler/aslcodegen.c -=================================================================== ---- acpica-unix-20191018.orig/source/compiler/aslcodegen.c -+++ acpica-unix-20191018/source/compiler/aslcodegen.c -@@ -497,8 +497,7 @@ CgWriteTableHeader ( - - /* Table length. Checksum zero for now, will rewrite later */ - -- DWord = sizeof (ACPI_TABLE_HEADER) + Op->Asl.AmlSubtreeLength; -- ACPI_MOVE_32_TO_32(&AslGbl_TableHeader.Length, &DWord); -+ AslGbl_TableHeader.Length = sizeof (ACPI_TABLE_HEADER) + Op->Asl.AmlSubtreeLength; - - /* Calculate the comment lengths for this definition block parseOp */ - -@@ -544,6 +543,8 @@ CgWriteTableHeader ( - CvDbgPrint (" Length: %u\n", CommentLength); - } - } -+ DWord = AslGbl_TableHeader.Length; -+ ACPI_MOVE_32_TO_32(&AslGbl_TableHeader.Length, &DWord); - - AslGbl_TableHeader.Checksum = 0; - Op->Asl.FinalAmlOffset = ftell (AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle); diff --git a/big-endian-dmtbdump.patch b/big-endian-dmtbdump.patch deleted file mode 100644 index fed81c1..0000000 --- a/big-endian-dmtbdump.patch +++ /dev/null @@ -1,162 +0,0 @@ -Index: acpica-unix-20191018/source/common/dmtbdump.c -=================================================================== ---- acpica-unix-20191018.orig/source/common/dmtbdump.c -+++ acpica-unix-20191018/source/common/dmtbdump.c -@@ -277,6 +277,8 @@ AcpiDmDumpRsdt ( - UINT32 Entries; - UINT32 Offset; - UINT32 i; -+ UINT32 Length; -+ UINT32 Address; - - - /* Point to start of table pointer array */ -@@ -286,12 +288,14 @@ AcpiDmDumpRsdt ( - - /* RSDT uses 32-bit pointers */ - -- Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32); -+ ACPI_MOVE_32_TO_32(&Length, &Table->Length); -+ Entries = (Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32); - - for (i = 0; i < Entries; i++) - { - AcpiDmLineHeader2 (Offset, sizeof (UINT32), "ACPI Table Address", i); -- AcpiOsPrintf ("%8.8X\n", Array[i]); -+ ACPI_MOVE_32_TO_32(&Address, &Array[i]); -+ AcpiOsPrintf ("%8.8X\n", Address); - Offset += sizeof (UINT32); - } - } -@@ -317,6 +321,8 @@ AcpiDmDumpXsdt ( - UINT32 Entries; - UINT32 Offset; - UINT32 i; -+ UINT32 Length; -+ UINT64 Address; - - - /* Point to start of table pointer array */ -@@ -326,12 +332,14 @@ AcpiDmDumpXsdt ( - - /* XSDT uses 64-bit pointers */ - -- Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64); -+ ACPI_MOVE_32_TO_32(&Length, &Table->Length); -+ Entries = (Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64); - - for (i = 0; i < Entries; i++) - { - AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i); -- AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Array[i])); -+ ACPI_MOVE_64_TO_64(&Address, &Array[i]); -+ AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Address)); - Offset += sizeof (UINT64); - } - } -@@ -358,12 +366,12 @@ AcpiDmDumpFadt ( - ACPI_TABLE_HEADER *Table) - { - ACPI_STATUS Status; -- -+ UINT32 Length; - - /* Always dump the minimum FADT revision 1 fields (ACPI 1.0) */ - -- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, -- AcpiDmTableInfoFadt1); -+ ACPI_MOVE_32_TO_32(&Length, &Table->Length); -+ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFadt1); - if (ACPI_FAILURE (Status)) - { - return; -@@ -371,11 +379,9 @@ AcpiDmDumpFadt ( - - /* Check for FADT revision 2 fields (ACPI 1.0B MS extensions) */ - -- if ((Table->Length > ACPI_FADT_V1_SIZE) && -- (Table->Length <= ACPI_FADT_V2_SIZE)) -+ if ((Length > ACPI_FADT_V1_SIZE) && (Length <= ACPI_FADT_V2_SIZE)) - { -- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, -- AcpiDmTableInfoFadt2); -+ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFadt2); - if (ACPI_FAILURE (Status)) - { - return; -@@ -384,10 +390,9 @@ AcpiDmDumpFadt ( - - /* Check for FADT revision 3/4 fields and up (ACPI 2.0+ extended data) */ - -- else if (Table->Length > ACPI_FADT_V2_SIZE) -+ else if (Length > ACPI_FADT_V2_SIZE) - { -- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, -- AcpiDmTableInfoFadt3); -+ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFadt3); - if (ACPI_FAILURE (Status)) - { - return; -@@ -395,9 +400,9 @@ AcpiDmDumpFadt ( - - /* Check for FADT revision 5 fields and up (ACPI 5.0+) */ - -- if (Table->Length > ACPI_FADT_V3_SIZE) -+ if (Length > ACPI_FADT_V3_SIZE) - { -- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, -+ Status = AcpiDmDumpTable (Length, 0, Table, 0, - AcpiDmTableInfoFadt5); - if (ACPI_FAILURE (Status)) - { -@@ -407,9 +412,9 @@ AcpiDmDumpFadt ( - - /* Check for FADT revision 6 fields and up (ACPI 6.0+) */ - -- if (Table->Length > ACPI_FADT_V3_SIZE) -+ if (Length > ACPI_FADT_V3_SIZE) - { -- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, -+ Status = AcpiDmDumpTable (Length, 0, Table, 0, - AcpiDmTableInfoFadt6); - if (ACPI_FAILURE (Status)) - { -@@ -420,11 +425,11 @@ AcpiDmDumpFadt ( - - /* Validate various fields in the FADT, including length */ - -- AcpiTbCreateLocalFadt (Table, Table->Length); -+ AcpiTbCreateLocalFadt (Table, Length); - - /* Validate FADT length against the revision */ - -- AcpiDmValidateFadtLength (Table->Revision, Table->Length); -+ AcpiDmValidateFadtLength (Table->Revision, Length); - } - - -@@ -450,6 +455,7 @@ AcpiDmValidateFadtLength ( - UINT32 Length) - { - UINT32 ExpectedLength; -+ UINT32 Tmp32; - - - switch (Revision) -@@ -485,7 +491,8 @@ AcpiDmValidateFadtLength ( - return; - } - -- if (Length == ExpectedLength) -+ ACPI_MOVE_32_TO_32(&Tmp32, &Length); -+ if (Tmp32 == ExpectedLength) - { - return; - } -@@ -493,5 +500,5 @@ AcpiDmValidateFadtLength ( - AcpiOsPrintf ( - "\n// ACPI Warning: FADT revision %X does not match length: " - "found %X expected %X\n", -- Revision, Length, ExpectedLength); -+ Revision, Tmp32, ExpectedLength); - } diff --git a/big-endian-dmtbdump1.patch b/big-endian-dmtbdump1.patch deleted file mode 100644 index ba37c6f..0000000 --- a/big-endian-dmtbdump1.patch +++ /dev/null @@ -1,637 +0,0 @@ -Index: acpica-unix-20191018/source/common/dmtbdump1.c -=================================================================== ---- acpica-unix-20191018.orig/source/common/dmtbdump1.c -+++ acpica-unix-20191018/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: - diff --git a/big-endian-dmtbdump2.patch b/big-endian-dmtbdump2.patch deleted file mode 100644 index 0997b5b..0000000 --- a/big-endian-dmtbdump2.patch +++ /dev/null @@ -1,887 +0,0 @@ -Index: acpica-unix2-20200528/source/common/dmtbdump2.c -=================================================================== ---- acpica-unix2-20200528.orig/source/common/dmtbdump2.c -+++ acpica-unix2-20200528/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; -@@ -429,7 +450,7 @@ AcpiDmDumpIvrs ( - sizeof (ACPI_IVRS_HARDWARE2)); - } - -- while (EntryOffset < (Offset + Subtable->Length)) -+ while (EntryOffset < (Offset + SubLength)) - { - AcpiOsPrintf ("\n"); - /* -@@ -491,7 +512,7 @@ AcpiDmDumpIvrs ( - - /* Dump the Device Entry */ - -- Status = AcpiDmDumpTable (Table->Length, EntryOffset, -+ Status = AcpiDmDumpTable (Length, EntryOffset, - DeviceEntry, EntryLength, InfoTable); - if (ACPI_FAILURE (Status)) - { -@@ -507,8 +528,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); - } - } - -@@ -534,7 +555,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; -@@ -542,8 +563,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 */ - -@@ -607,13 +629,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)) - { -@@ -623,7 +646,7 @@ AcpiDmDumpMadt ( - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset); -- while (Offset < Table->Length) -+ while (Offset < Length) - { - /* Common subtable header */ - -@@ -769,11 +792,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; -@@ -782,17 +807,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)) - { -@@ -826,6 +851,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; -@@ -834,11 +860,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; -@@ -846,13 +874,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)) - { -@@ -861,8 +890,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) */ -@@ -873,7 +902,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)) - { -@@ -883,7 +912,7 @@ AcpiDmDumpMpst ( - Subtable0A++; - PowerStateCount--; - Offset += sizeof (ACPI_MPST_POWER_STATE); -- } -+ } - - /* Sub-subtables - Physical Component ID Structure(s) */ - -@@ -896,7 +925,7 @@ AcpiDmDumpMpst ( - - while (ComponentCount) - { -- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0B, -+ Status = AcpiDmDumpTable (Length, Offset, Subtable0B, - sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B); - if (ACPI_FAILURE (Status)) - { -@@ -911,17 +940,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)) - { -@@ -936,10 +967,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)) - { -@@ -972,11 +1003,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; -@@ -985,12 +1018,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)) - { -@@ -1025,11 +1058,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; -@@ -1038,12 +1073,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)) - { -@@ -1085,11 +1120,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; -@@ -1098,19 +1139,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: - -@@ -1165,7 +1208,7 @@ AcpiDmDumpNfit ( - - /* Attempt to continue */ - -- if (!Subtable->Length) -+ if (!SubLength) - { - AcpiOsPrintf ("Invalid zero length subtable\n"); - return; -@@ -1174,8 +1217,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; -@@ -1183,14 +1226,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)) -@@ -1204,12 +1248,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); -@@ -1224,9 +1267,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)) -@@ -1245,8 +1289,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); - } - } - -@@ -1271,12 +1315,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)) - { -@@ -1286,7 +1331,7 @@ AcpiDmDumpPcct ( - /* Subtables */ - - Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset); -- while (Offset < Table->Length) -+ while (Offset < Length) - { - /* Common subtable header */ - -@@ -1426,16 +1471,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)) - { -@@ -1445,13 +1495,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; -@@ -1470,7 +1521,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; -@@ -1482,15 +1533,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; -@@ -1510,7 +1562,7 @@ AcpiDmDumpPmtt ( - - Status = AcpiDmDumpTable (Length, - Offset + MemOffset, MemSubtable, -- MemSubtable->Length, AcpiDmTableInfoPmtt1); -+ MemLength, AcpiDmTableInfoPmtt1); - if (ACPI_FAILURE (Status)) - { - return; -@@ -1518,13 +1570,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, -@@ -1552,15 +1605,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; -@@ -1580,7 +1634,7 @@ AcpiDmDumpPmtt ( - - Status = AcpiDmDumpTable (Length, - Offset + MemOffset + DimmOffset, DimmSubtable, -- DimmSubtable->Length, AcpiDmTableInfoPmtt2); -+ DimmLength, AcpiDmTableInfoPmtt2); - if (ACPI_FAILURE (Status)) - { - return; -@@ -1588,23 +1642,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); - } - } - -@@ -1765,6 +1818,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 */ -@@ -1775,20 +1830,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: - -@@ -1803,7 +1860,7 @@ AcpiDmDumpS3pt ( - default: - - AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n", -- Subtable->Type); -+ SubType); - - /* Attempt to continue */ - -@@ -1816,7 +1873,7 @@ AcpiDmDumpS3pt ( - } - - AcpiOsPrintf ("\n"); -- Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable, -+ Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Length, InfoTable); - if (ACPI_FAILURE (Status)) - { diff --git a/big-endian-dmtbdump3.patch b/big-endian-dmtbdump3.patch deleted file mode 100644 index 4daf79c..0000000 --- a/big-endian-dmtbdump3.patch +++ /dev/null @@ -1,250 +0,0 @@ -Index: acpica-unix-20191018/source/common/dmtbdump3.c -=================================================================== ---- acpica-unix-20191018.orig/source/common/dmtbdump3.c -+++ acpica-unix-20191018/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); - } diff --git a/big-endian-v2.patch b/big-endian-v2.patch deleted file mode 100644 index 807e534..0000000 --- a/big-endian-v2.patch +++ /dev/null @@ -1,19 +0,0 @@ -Updated versions of upstream often contain fixes that were not seen -in the original big-endian patch; we try to capture those here. - -Signed-off-by: Al Stone - -Index: acpica-unix-20191018/source/compiler/asllookup.c -=================================================================== ---- acpica-unix-20191018.orig/source/compiler/asllookup.c -+++ acpica-unix-20191018/source/compiler/asllookup.c -@@ -249,7 +249,8 @@ LkIsObjectUsed ( - * ACPI names and are typically not referenced since they are meant - * to be called by the host OS. - */ -- if (Node->Name.Ascii[0] == '_') -+ ACPI_MOVE_32_TO_32(&tmp.Ascii, Node->Name.Ascii); -+ if (tmp.Ascii[0] == '_') - { - return (AE_OK); - } diff --git a/big-endian-v3.patch b/big-endian-v3.patch deleted file mode 100644 index 93ef67d..0000000 --- a/big-endian-v3.patch +++ /dev/null @@ -1,140 +0,0 @@ -diff -Naur acpica-unix2-20200214.orig/source/components/namespace/nsutils.c acpica-unix2-20200214/source/components/namespace/nsutils.c ---- acpica-unix2-20200214.orig/source/components/namespace/nsutils.c 2020-02-14 10:33:55.000000000 -0700 -+++ acpica-unix2-20200214/source/components/namespace/nsutils.c 2020-02-26 10:25:43.477022167 -0700 -@@ -363,6 +363,15 @@ - - /* Move on the next segment */ - -+ { -+ /* Make sure the name segment reflects endian-ness first */ -+ -+ UINT32 Tmp32 = 0; -+ -+ memcpy(&Tmp32, Result, ACPI_NAMESEG_SIZE); -+ ACPI_MOVE_32_TO_32(Result, &Tmp32); -+ } -+ - ExternalName++; - Result += ACPI_NAMESEG_SIZE; - } -diff -Naur acpica-unix2-20200214.orig/source/common/dmtbdump2.c acpica-unix2-20200214/source/common/dmtbdump2.c ---- acpica-unix2-20200214.orig/source/common/dmtbdump2.c 2020-02-26 11:44:13.732967820 -0700 -+++ acpica-unix2-20200214/source/common/dmtbdump2.c 2020-02-26 12:38:44.286849954 -0700 -@@ -1685,6 +1685,8 @@ - UINT32 Offset = sizeof (ACPI_TABLE_FPDT); - ACPI_DMTABLE_INFO *InfoTable; - UINT32 i; -+ UINT32 TableLen; -+ UINT32 NumPrivRes; - - - /* There is no main table (other than the standard ACPI header) */ -@@ -1692,7 +1694,8 @@ - /* Subtables */ - - Offset = sizeof (ACPI_TABLE_HEADER); -- while (Offset < Table->Length) -+ ACPI_MOVE_32_TO_32(&TableLen, &Table->Length); -+ while (Offset < TableLen) - { - AcpiOsPrintf ("\n"); - -@@ -1704,7 +1707,7 @@ - AcpiOsPrintf ("Invalid subtable length\n"); - return; - } -- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, -+ Status = AcpiDmDumpTable (TableLen, Offset, Subtable, - Subtable->Length, AcpiDmTableInfoPpttHdr); - if (ACPI_FAILURE (Status)) - { -@@ -1746,7 +1749,7 @@ - AcpiOsPrintf ("Invalid subtable length\n"); - return; - } -- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable, -+ Status = AcpiDmDumpTable (TableLen, Offset, Subtable, - Subtable->Length, InfoTable); - if (ACPI_FAILURE (Status)) - { -@@ -1762,15 +1765,16 @@ - - /* Dump SMBIOS handles */ - -+ ACPI_MOVE_32_TO_32(&NumPrivRes, &PpttProcessor->NumberOfPrivResources); - if ((UINT8)(Subtable->Length - SubtableOffset) < -- (UINT8)(PpttProcessor->NumberOfPrivResources * 4)) -+ (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 (TableLen, Offset + SubtableOffset, - ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset), - 4, AcpiDmTableInfoPptt0a); - if (ACPI_FAILURE (Status)) -diff -Naur acpica-unix2-20200214.orig/source/compiler/dttable2.c acpica-unix2-20200214/source/compiler/dttable2.c ---- acpica-unix2-20200214.orig/source/compiler/dttable2.c 2020-02-26 11:44:13.726967769 -0700 -+++ acpica-unix2-20200214/source/compiler/dttable2.c 2020-02-26 12:39:03.671014890 -0700 -@@ -1087,9 +1087,11 @@ - Subtable->Buffer, sizeof (ACPI_SUBTABLE_HEADER)); - if (PpttProcessor) - { -+ UINT32 NumPrivRes; -+ - /* Compile initiator proximity domain list */ - -- PpttProcessor->NumberOfPrivResources = 0; -+ NumPrivRes = 0; - while (*PFieldList) - { - Status = DtCompileTable (PFieldList, -@@ -1105,8 +1107,9 @@ - - DtInsertSubtable (ParentTable, Subtable); - PpttHeader->Length += (UINT8)(Subtable->Length); -- PpttProcessor->NumberOfPrivResources++; -+ NumPrivRes++; - } -+ ACPI_MOVE_32_TO_32(&PpttProcessor->NumberOfPrivResources, &NumPrivRes); - } - break; - -diff -Naur acpica-unix2-20200214.orig/source/compiler/aslload.c acpica-unix2-20200214/source/compiler/aslload.c ---- acpica-unix2-20200214.orig/source/compiler/aslload.c 2020-02-14 10:33:53.000000000 -0700 -+++ acpica-unix2-20200214/source/compiler/aslload.c 2020-02-27 13:25:19.308413494 -0700 -@@ -175,13 +175,17 @@ - ACPI_NAMESPACE_NODE *Node; - ACPI_STATUS Status; - char *ExternalPath; -+ char TmpPath[ACPI_NAMESEG_SIZE]; - - - SourceRegion = UtGetArg (Op, 0); - if (SourceRegion) - { -- Status = AcpiNsLookup (WalkState->ScopeInfo, -- SourceRegion->Asl.Value.String, AmlType, ACPI_IMODE_EXECUTE, -+ char TmpName[ACPI_NAMESEG_SIZE]; -+ -+ ACPI_MOVE_32_TO_32(TmpName, SourceRegion->Asl.Value.String); -+ Status = AcpiNsLookup (WalkState->ScopeInfo, TmpName, -+ AmlType, ACPI_IMODE_EXECUTE, - ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node); - if (Status == AE_NOT_FOUND) - { -@@ -232,8 +236,9 @@ - - default: - -+ ACPI_MOVE_32_TO_32(TmpPath, Child->Asl.Value.String); - Status = AcpiNsLookup (WalkState->ScopeInfo, -- Child->Asl.Value.String, -+ TmpPath, - ACPI_TYPE_LOCAL_REGION_FIELD, - ACPI_IMODE_LOAD_PASS1, - ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE | diff --git a/big-endian.patch b/big-endian.patch deleted file mode 100644 index 284bc46..0000000 --- a/big-endian.patch +++ /dev/null @@ -1,4693 +0,0 @@ -Big-endian support - -This is a combined patch that folds all of the past and present changes -for big-endian support into a single patch, hopefully eliminating any sort -of redundancy but also capturing all such changes in a single location. - -To date, this has been critical for the s390x architecture only. - -Signed-off-by: Al Stone - -Index: acpica-unix2-20200528/source/compiler/aslcodegen.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/aslcodegen.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/compiler/aslopcodes.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/aslopcodes.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/compiler/aslrestype1.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/aslrestype1.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/compiler/aslrestype1i.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/aslrestype1i.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/compiler/aslrestype2.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/aslrestype2.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/compiler/aslrestype2d.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/aslrestype2d.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/compiler/aslrestype2e.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/aslrestype2e.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/compiler/aslrestype2q.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/aslrestype2q.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/compiler/aslrestype2s.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/aslrestype2s.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/compiler/aslrestype2w.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/aslrestype2w.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/include/acmacros.h -=================================================================== ---- acpica-unix2-20200528.orig/source/include/acmacros.h -+++ acpica-unix2-20200528/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-unix2-20200528/source/include/platform/aclinux.h -=================================================================== ---- acpica-unix2-20200528.orig/source/include/platform/aclinux.h -+++ acpica-unix2-20200528/source/include/platform/aclinux.h -@@ -198,6 +198,7 @@ - - #ifdef ACPI_USE_STANDARD_HEADERS - #include -+#include - #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-unix2-20200528/source/compiler/aslanalyze.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/aslanalyze.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/compiler/asllookup.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/asllookup.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/compiler/aslmain.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/aslmain.c -+++ acpica-unix2-20200528/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-20200528/source/common/acfileio.c -=================================================================== ---- acpica-unix2-20200528.orig/source/common/acfileio.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/common/dmtable.c -=================================================================== ---- acpica-unix2-20200528.orig/source/common/dmtable.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/common/dmtables.c -=================================================================== ---- acpica-unix2-20200528.orig/source/common/dmtables.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/compiler/dtfield.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/dtfield.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/compiler/dtsubtable.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/dtsubtable.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/compiler/dttable1.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/dttable1.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/compiler/dttable2.c -=================================================================== ---- acpica-unix2-20200528.orig/source/compiler/dttable2.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/disassembler/dmbuffer.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/disassembler/dmbuffer.c -+++ acpica-unix2-20200528/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,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 */ - -@@ -432,7 +433,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); - - /* -@@ -869,19 +871,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 */ - -@@ -990,16 +995,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-unix2-20200528/source/components/disassembler/dmopcode.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/disassembler/dmopcode.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/disassembler/dmresrcl.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/disassembler/dmresrcl.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/disassembler/dmresrcl2.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/disassembler/dmresrcl2.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/disassembler/dmresrcs.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/disassembler/dmresrcs.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/dispatcher/dsfield.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/dispatcher/dsfield.c -+++ acpica-unix2-20200528/source/components/dispatcher/dsfield.c -@@ -329,6 +329,7 @@ AcpiDsGetFieldNames ( - ACPI_STATUS Status; - UINT64 Position; - ACPI_PARSE_OBJECT *Child; -+ UINT32 TmpName; - - #ifdef ACPI_EXEC_APP - ACPI_OPERAND_OBJECT *ResultDesc; -@@ -442,10 +443,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, -@@ -703,9 +711,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-unix2-20200528/source/components/events/evgpeblk.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/events/evgpeblk.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/hardware/hwregs.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/hardware/hwregs.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/hardware/hwvalid.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/hardware/hwvalid.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/namespace/nsaccess.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/namespace/nsaccess.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/namespace/nsparse.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/namespace/nsparse.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/tables/tbdata.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/tables/tbdata.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/tables/tbfadt.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/tables/tbfadt.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/tables/tbfind.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/tables/tbfind.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/tables/tbprint.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/tables/tbprint.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/tables/tbutils.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/tables/tbutils.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/tables/tbxface.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/tables/tbxface.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/components/tables/tbxfload.c -=================================================================== ---- acpica-unix2-20200528.orig/source/components/tables/tbxfload.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/tools/acpiexec/aetables.c -=================================================================== ---- acpica-unix2-20200528.orig/source/tools/acpiexec/aetables.c -+++ acpica-unix2-20200528/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-unix2-20200528/source/common/dmswitch.c -=================================================================== ---- acpica-unix2-20200528.orig/source/common/dmswitch.c -+++ acpica-unix2-20200528/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 */ - diff --git a/converterSample.asl.result b/converterSample.asl.result index 47c532c..064ef5f 100644 --- a/converterSample.asl.result +++ b/converterSample.asl.result @@ -1,12 +1,27 @@ +converterSample.asl 15: Name (b, 5) +Remark 2182 - ^ At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case (B___) + +converterSample.asl 16: Name(p008, Package() +Remark 2182 - ^ At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case (P008) + converterSample.asl 37: Method(MAIN) { Remark 2120 - ^ Control Method should be made Serialized due to creation of named objects within (\MAIN) +converterSample.asl 48: Name(b,0); +Remark 2182 - ^ At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case (B___) + converterSample.asl 48: Name(b,0); Remark 2089 - Object is not referenced ^ (Name [B___] is within a method [MAIN]) +converterSample.asl 53: Name (a, +Remark 2182 - ^ At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case (A___) + converterSample.asl 65: Method(SCOP) Remark 2120 - ^ Control Method should be made Serialized due to creation of named objects within (\SCOP) +converterSample.asl 68: Name (a1, 0x04) +Remark 2182 - ^ At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case (A1__) + converterSample.asl 68: Name (a1, 0x04) Remark 2089 - Object is not referenced ^ (Name [A1__] is within a method [SCOP]) @@ -23,4 +38,4 @@ Ignoring all errors, forcing AML file generation ASL Input: converterSample.asl - 1968 bytes 11 keywords 85 source lines AML Output: converterSample.aml - 182 bytes 2 opcodes 9 named objects -Compilation successful. 0 Errors, 0 Warnings, 5 Remarks, 10 Optimizations +Compilation successful. 0 Errors, 0 Warnings, 10 Remarks, 10 Optimizations diff --git a/cve-2017-13693.patch b/cve-2017-13693.patch index b0af7a6..fcda493 100644 --- a/cve-2017-13693.patch +++ b/cve-2017-13693.patch @@ -63,10 +63,10 @@ Github-Location: https://github.com/acpica/acpica/pull/295/commits/987a3b5cf7175 source/components/dispatcher/dsutils.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) -Index: acpica-unix-20191018/source/components/dispatcher/dsutils.c +Index: acpica-unix2-20200925/source/components/dispatcher/dsutils.c =================================================================== ---- acpica-unix-20191018.orig/source/components/dispatcher/dsutils.c -+++ acpica-unix-20191018/source/components/dispatcher/dsutils.c +--- acpica-unix2-20200925.orig/source/components/dispatcher/dsutils.c ++++ acpica-unix2-20200925/source/components/dispatcher/dsutils.c @@ -759,6 +759,8 @@ AcpiDsCreateOperands ( ACPI_PARSE_OBJECT *Arguments[ACPI_OBJ_NUM_OPERANDS]; UINT32 ArgCount = 0; diff --git a/cve-2017-13694.patch b/cve-2017-13694.patch index 8d582e0..40c1c08 100644 --- a/cve-2017-13694.patch +++ b/cve-2017-13694.patch @@ -130,10 +130,10 @@ Github-Location: https://github.com/acpica/acpica/pull/278/commits/4a0243ecb4c94 source/components/parser/psobject.c | 44 ++++++++++++++----------------------- 1 file changed, 16 insertions(+), 28 deletions(-) -Index: acpica-unix-20191018/source/components/parser/psobject.c +Index: acpica-unix2-20200925/source/components/parser/psobject.c =================================================================== ---- acpica-unix-20191018.orig/source/components/parser/psobject.c -+++ acpica-unix-20191018/source/components/parser/psobject.c +--- acpica-unix2-20200925.orig/source/components/parser/psobject.c ++++ acpica-unix2-20200925/source/components/parser/psobject.c @@ -707,7 +707,8 @@ AcpiPsCompleteFinalOp ( ACPI_PARSE_OBJECT *Op, ACPI_STATUS Status) diff --git a/cve-2017-13695.patch b/cve-2017-13695.patch index 5f77aaf..f521a16 100644 --- a/cve-2017-13695.patch +++ b/cve-2017-13695.patch @@ -67,10 +67,10 @@ Github-Location: https://github.com/acpica/acpica/pull/296/commits/37f2c716f2c6a source/components/namespace/nseval.c | 10 ++++++++++ 1 file changed, 10 insertions(+) -Index: acpica-unix-20191018/source/components/namespace/nseval.c +Index: acpica-unix2-20200925/source/components/namespace/nseval.c =================================================================== ---- acpica-unix-20191018.orig/source/components/namespace/nseval.c -+++ acpica-unix-20191018/source/components/namespace/nseval.c +--- acpica-unix2-20200925.orig/source/components/namespace/nseval.c ++++ acpica-unix2-20200925/source/components/namespace/nseval.c @@ -329,6 +329,16 @@ AcpiNsEvaluate ( Info->ReturnObject = NULL; } diff --git a/dbtest.patch b/dbtest.patch index eb8086e..6cf7f28 100644 --- a/dbtest.patch +++ b/dbtest.patch @@ -4,10 +4,11 @@ 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. -diff -Naur acpica-unix2-20200214.orig/source/components/debugger/dbtest.c acpica-unix2-20200214/source/components/debugger/dbtest.c ---- acpica-unix2-20200214.orig/source/components/debugger/dbtest.c 2020-02-14 10:33:54.000000000 -0700 -+++ acpica-unix2-20200214/source/components/debugger/dbtest.c 2020-02-25 10:50:42.793372070 -0700 -@@ -719,9 +719,10 @@ +Index: acpica-unix2-20200925/source/components/debugger/dbtest.c +=================================================================== +--- acpica-unix2-20200925.orig/source/components/debugger/dbtest.c ++++ acpica-unix2-20200925/source/components/debugger/dbtest.c +@@ -719,9 +719,10 @@ AcpiDbTestStringType ( ACPI_OBJECT *Temp1 = NULL; ACPI_OBJECT *Temp2 = NULL; ACPI_OBJECT *Temp3 = NULL; @@ -19,7 +20,7 @@ diff -Naur acpica-unix2-20200214.orig/source/components/debugger/dbtest.c acpica /* Read the original value */ -@@ -737,6 +738,9 @@ +@@ -737,6 +738,9 @@ AcpiDbTestStringType ( /* Write a new value */ @@ -29,7 +30,7 @@ diff -Naur acpica-unix2-20200214.orig/source/components/debugger/dbtest.c acpica WriteValue.Type = ACPI_TYPE_STRING; WriteValue.String.Length = strlen (ValueToWrite); WriteValue.String.Pointer = ValueToWrite; -@@ -790,6 +794,7 @@ +@@ -790,6 +794,7 @@ Exit: if (Temp1) {AcpiOsFree (Temp1);} if (Temp2) {AcpiOsFree (Temp2);} if (Temp3) {AcpiOsFree (Temp3);} diff --git a/f23-harden.patch b/f23-harden.patch index 5e80d46..e1fbbbd 100644 --- a/f23-harden.patch +++ b/f23-harden.patch @@ -8,10 +8,10 @@ From: Al Stone generate/unix/iasl/Makefile | 13 +++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) -Index: acpica-unix2-20200528/generate/unix/Makefile.config +Index: acpica-unix2-20200925/generate/unix/Makefile.config =================================================================== ---- acpica-unix2-20200528.orig/generate/unix/Makefile.config -+++ acpica-unix2-20200528/generate/unix/Makefile.config +--- acpica-unix2-20200925.orig/generate/unix/Makefile.config ++++ acpica-unix2-20200925/generate/unix/Makefile.config @@ -189,6 +189,8 @@ ifneq ($(NOFORTIFY),TRUE) OPT_CFLAGS += -D_FORTIFY_SOURCE=2 endif @@ -21,11 +21,11 @@ Index: acpica-unix2-20200528/generate/unix/Makefile.config CFLAGS += \ -D$(ACPI_HOST)\ -D_GNU_SOURCE\ -Index: acpica-unix2-20200528/generate/unix/iasl/Makefile +Index: acpica-unix2-20200925/generate/unix/iasl/Makefile =================================================================== ---- acpica-unix2-20200528.orig/generate/unix/iasl/Makefile -+++ acpica-unix2-20200528/generate/unix/iasl/Makefile -@@ -358,34 +358,35 @@ $(OBJDIR)/prparserparse.c $(OBJDIR)/prpa +--- acpica-unix2-20200925.orig/generate/unix/iasl/Makefile ++++ acpica-unix2-20200925/generate/unix/iasl/Makefile +@@ -359,34 +359,35 @@ $(OBJDIR)/prparserparse.c $(OBJDIR)/prpa # Cannot use the common compile warning flags since the C files are created # by the utilities above and they are not necessarily ANSI C, etc. # diff --git a/facp.patch b/facp.patch index a8e9fe9..1d7ffee 100644 --- a/facp.patch +++ b/facp.patch @@ -13,10 +13,10 @@ Signed-off-by: Al Stone source/common/dmtbinfo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -Index: acpica-unix2-20200528/source/common/dmtbinfo.c +Index: acpica-unix2-20200925/source/common/dmtbinfo.c =================================================================== ---- acpica-unix2-20200528.orig/source/common/dmtbinfo.c -+++ acpica-unix2-20200528/source/common/dmtbinfo.c +--- acpica-unix2-20200925.orig/source/common/dmtbinfo.c ++++ acpica-unix2-20200925/source/common/dmtbinfo.c @@ -184,7 +184,7 @@ ACPI_DMTABLE_INFO AcpiDmTableI ACPI_DMTABLE_INFO AcpiDmTableInfoFadt1[] = { diff --git a/gcc9.patch b/gcc9.patch deleted file mode 100644 index cd190a6..0000000 --- a/gcc9.patch +++ /dev/null @@ -1,65 +0,0 @@ -diff -Naur acpica-unix2-20190108/source/common/dmrestag.c acpica-unix2-20190108-patch/source/common/dmrestag.c ---- acpica-unix2-20190108/source/common/dmrestag.c 2019-01-08 14:10:31.000000000 -0700 -+++ acpica-unix2-20190108-patch/source/common/dmrestag.c 2019-05-10 13:57:10.768398838 -0600 -@@ -710,10 +710,25 @@ - * end up in the final compiled AML, it's just an appearance issue for the - * disassembled code. - */ -- Pathname[strlen (Pathname) - ACPI_NAME_SIZE] = 0; -- strncat (Pathname, ResourceNode->Name.Ascii, ACPI_NAME_SIZE); -- strcat (Pathname, "."); -- strncat (Pathname, Tag, ACPI_NAME_SIZE); -+ { -+ /* -+ * GCC9 forces some contortions when non-null-terminated char -+ * strings are being used; using strncat() might be simpler, -+ * but the assumption that the string is null-terminated gets -+ * checked and AML does not always guarantee that is true. -+ */ -+ char *tmp; -+ unsigned char dot = '.'; -+ -+ Pathname[strlen (Pathname) - ACPI_NAME_SIZE] = 0; -+ tmp = Pathname + strlen(Pathname); -+ memcpy (tmp, ResourceNode->Name.Ascii, ACPI_NAME_SIZE); -+ tmp += ACPI_NAME_SIZE; -+ memcpy (tmp, &dot, 1); -+ tmp++; -+ memcpy (tmp, Tag, ACPI_NAME_SIZE); -+ tmp += ACPI_NAME_SIZE; -+ } - - /* Internalize the namepath to AML format */ - -diff -Naur acpica-unix2-20190108/source/compiler/aslcodegen.c acpica-unix2-20190108-patch/source/compiler/aslcodegen.c ---- acpica-unix2-20190108/source/compiler/aslcodegen.c 2019-05-10 13:40:12.827411487 -0600 -+++ acpica-unix2-20190108-patch/source/compiler/aslcodegen.c 2019-05-10 13:25:34.667850614 -0600 -@@ -450,11 +450,11 @@ - */ - if (AcpiGbl_CaptureComments) - { -- strncpy(AcpiGbl_TableSig, Child->Asl.Value.String, ACPI_NAME_SIZE); -+ memcpy(AcpiGbl_TableSig, Child->Asl.Value.String, ACPI_NAME_SIZE); - Child->Asl.Value.String = ACPI_SIG_XXXX; - } - -- strncpy (AslGbl_TableHeader.Signature, Child->Asl.Value.String, ACPI_NAME_SIZE); -+ memcpy (AslGbl_TableHeader.Signature, Child->Asl.Value.String, ACPI_NAME_SIZE); - - /* Revision */ - -@@ -471,12 +471,12 @@ - /* OEMID */ - - Child = Child->Asl.Next; -- strncpy (AslGbl_TableHeader.OemId, Child->Asl.Value.String, ACPI_OEM_ID_SIZE); -+ memcpy (AslGbl_TableHeader.OemId, Child->Asl.Value.String, ACPI_OEM_ID_SIZE); - - /* OEM TableID */ - - Child = Child->Asl.Next; -- strncpy (AslGbl_TableHeader.OemTableId, Child->Asl.Value.String, ACPI_OEM_TABLE_ID_SIZE); -+ memcpy (AslGbl_TableHeader.OemTableId, Child->Asl.Value.String, ACPI_OEM_TABLE_ID_SIZE); - - /* OEM Revision */ - diff --git a/grammar.asl.result b/grammar.asl.result index 19f6e2e..97fae9a 100644 --- a/grammar.asl.result +++ b/grammar.asl.result @@ -40,6 +40,12 @@ Warning 3055 - ^ Invalid Hex/Octal Escape - Non- grammar.asl 523: NAME (ESC2, "abcdefg\000hijklmn") Warning 3055 - ^ Invalid Hex/Octal Escape - Non-ASCII or NULL +grammar.asl 552: IRQNoFlags(xxxt){3,4,10,11} +Remark 2182 - ^ At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case (XXXT) + +grammar.asl 566: Name(Bxxx,0xFFFFFFFF) +Remark 2182 - ^ At least one lower case letter found in NameSeg, ASL is case insensitive - converting to upper case (BXXX) + grammar.asl 620: RCIV (Subtract (Arg0, 1)) Remark 2098 - ^ Recursive method call (RCIV) @@ -581,4 +587,4 @@ Ignoring all errors, forcing AML file generation ASL Input: grammar.asl - 323653 bytes 4818 keywords 10284 source lines AML Output: grammar.aml - 43758 bytes 4148 opcodes 670 named objects -Compilation successful. 6 Errors, 93 Warnings, 92 Remarks, 1106 Optimizations +Compilation successful. 6 Errors, 93 Warnings, 94 Remarks, 1106 Optimizations diff --git a/int-format.patch b/int-format.patch index 5cbb5c3..f98906b 100644 --- a/int-format.patch +++ b/int-format.patch @@ -21,10 +21,10 @@ From: Al Stone source/components/utilities/utownerid.c | 2 +- 18 files changed, 28 insertions(+), 28 deletions(-) -Index: acpica-unix2-20200528/source/compiler/aslerror.c +Index: acpica-unix2-20200925/source/compiler/aslerror.c =================================================================== ---- acpica-unix2-20200528.orig/source/compiler/aslerror.c -+++ acpica-unix2-20200528/source/compiler/aslerror.c +--- acpica-unix2-20200925.orig/source/compiler/aslerror.c ++++ acpica-unix2-20200925/source/compiler/aslerror.c @@ -917,7 +917,7 @@ AslLogNewError ( AslGbl_ExceptionCount[ModifiedLevel]++; if (!AslGbl_IgnoreErrors && AslGbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT) @@ -34,10 +34,10 @@ Index: acpica-unix2-20200528/source/compiler/aslerror.c AslGbl_SourceLine = 0; AslGbl_NextError = AslGbl_ErrorLog; -Index: acpica-unix2-20200528/source/compiler/aslopt.c +Index: acpica-unix2-20200925/source/compiler/aslopt.c =================================================================== ---- acpica-unix2-20200528.orig/source/compiler/aslopt.c -+++ acpica-unix2-20200528/source/compiler/aslopt.c +--- acpica-unix2-20200925.orig/source/compiler/aslopt.c ++++ acpica-unix2-20200925/source/compiler/aslopt.c @@ -583,7 +583,7 @@ OptOptimizeNamePath ( } @@ -47,11 +47,11 @@ Index: acpica-unix2-20200528/source/compiler/aslopt.c Op->Asl.LogicalLineNumber, AcpiPsGetOpcodeName (Op->Common.Parent->Common.AmlOpcode), AcpiPsGetOpcodeName (Op->Common.AmlOpcode))); -Index: acpica-unix2-20200528/source/compiler/aslprepkg.c +Index: acpica-unix2-20200925/source/compiler/aslprepkg.c =================================================================== ---- acpica-unix2-20200528.orig/source/compiler/aslprepkg.c -+++ acpica-unix2-20200528/source/compiler/aslprepkg.c -@@ -309,7 +309,7 @@ ApCheckPackage ( +--- acpica-unix2-20200925.orig/source/compiler/aslprepkg.c ++++ acpica-unix2-20200925/source/compiler/aslprepkg.c +@@ -320,7 +320,7 @@ ApCheckPackage ( if (Count & 1) { @@ -60,11 +60,11 @@ Index: acpica-unix2-20200528/source/compiler/aslprepkg.c Predefined->Info.Name, Count); AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH, -Index: acpica-unix2-20200528/source/components/debugger/dbexec.c +Index: acpica-unix2-20200925/source/components/debugger/dbexec.c =================================================================== ---- acpica-unix2-20200528.orig/source/components/debugger/dbexec.c -+++ acpica-unix2-20200528/source/components/debugger/dbexec.c -@@ -230,7 +230,7 @@ AcpiDbExecuteMethod ( +--- acpica-unix2-20200925.orig/source/components/debugger/dbexec.c ++++ acpica-unix2-20200925/source/components/debugger/dbexec.c +@@ -231,7 +231,7 @@ AcpiDbExecuteMethod ( ACPI_ERROR ((AE_INFO, "Possible buffer overflow within AML Debugger " "buffer (size 0x%X needed 0x%X)", @@ -73,10 +73,10 @@ Index: acpica-unix2-20200528/source/components/debugger/dbexec.c } } -Index: acpica-unix2-20200528/source/components/dispatcher/dsmthdat.c +Index: acpica-unix2-20200925/source/components/dispatcher/dsmthdat.c =================================================================== ---- acpica-unix2-20200528.orig/source/components/dispatcher/dsmthdat.c -+++ acpica-unix2-20200528/source/components/dispatcher/dsmthdat.c +--- acpica-unix2-20200925.orig/source/components/dispatcher/dsmthdat.c ++++ acpica-unix2-20200925/source/components/dispatcher/dsmthdat.c @@ -291,7 +291,7 @@ AcpiDsMethodDataGetNode ( if (Index > ACPI_METHOD_MAX_LOCAL) { @@ -95,10 +95,10 @@ Index: acpica-unix2-20200528/source/components/dispatcher/dsmthdat.c Index, ACPI_METHOD_MAX_ARG)); return_ACPI_STATUS (AE_AML_INVALID_INDEX); } -Index: acpica-unix2-20200528/source/components/dispatcher/dsutils.c +Index: acpica-unix2-20200925/source/components/dispatcher/dsutils.c =================================================================== ---- acpica-unix2-20200528.orig/source/components/dispatcher/dsutils.c -+++ acpica-unix2-20200528/source/components/dispatcher/dsutils.c +--- acpica-unix2-20200925.orig/source/components/dispatcher/dsutils.c ++++ acpica-unix2-20200925/source/components/dispatcher/dsutils.c @@ -786,7 +786,7 @@ AcpiDsCreateOperands ( } @@ -108,10 +108,10 @@ Index: acpica-unix2-20200528/source/components/dispatcher/dsutils.c WalkState->NumOperands, ArgCount, Index)); /* Create the interpreter arguments, in reverse order */ -Index: acpica-unix2-20200528/source/components/dispatcher/dswscope.c +Index: acpica-unix2-20200925/source/components/dispatcher/dswscope.c =================================================================== ---- acpica-unix2-20200528.orig/source/components/dispatcher/dswscope.c -+++ acpica-unix2-20200528/source/components/dispatcher/dswscope.c +--- acpica-unix2-20200925.orig/source/components/dispatcher/dswscope.c ++++ acpica-unix2-20200925/source/components/dispatcher/dswscope.c @@ -149,7 +149,7 @@ AcpiDsScopeStackPush ( WalkState->ScopeDepth++; @@ -130,10 +130,10 @@ Index: acpica-unix2-20200528/source/components/dispatcher/dswscope.c (UINT32) WalkState->ScopeDepth, AcpiUtGetNodeName (ScopeInfo->Scope.Node), AcpiUtGetTypeName (ScopeInfo->Common.Value))); -Index: acpica-unix2-20200528/source/components/events/evgpe.c +Index: acpica-unix2-20200925/source/components/events/evgpe.c =================================================================== ---- acpica-unix2-20200528.orig/source/components/events/evgpe.c -+++ acpica-unix2-20200528/source/components/events/evgpe.c +--- acpica-unix2-20200925.orig/source/components/events/evgpe.c ++++ acpica-unix2-20200925/source/components/events/evgpe.c @@ -488,7 +488,7 @@ AcpiEvGpeDetect ( "Ignore disabled registers for GPE %02X-%02X: " "RunEnable=%02X, WakeEnable=%02X\n", @@ -143,10 +143,10 @@ Index: acpica-unix2-20200528/source/components/events/evgpe.c GpeRegisterInfo->EnableForRun, GpeRegisterInfo->EnableForWake)); continue; -Index: acpica-unix2-20200528/source/components/executer/exdump.c +Index: acpica-unix2-20200925/source/components/executer/exdump.c =================================================================== ---- acpica-unix2-20200528.orig/source/components/executer/exdump.c -+++ acpica-unix2-20200528/source/components/executer/exdump.c +--- acpica-unix2-20200925.orig/source/components/executer/exdump.c ++++ acpica-unix2-20200925/source/components/executer/exdump.c @@ -678,7 +678,7 @@ AcpiExDumpOperand ( if (Depth > 0) { @@ -156,10 +156,10 @@ Index: acpica-unix2-20200528/source/components/executer/exdump.c } else { -Index: acpica-unix2-20200528/source/components/executer/exfldio.c +Index: acpica-unix2-20200925/source/components/executer/exfldio.c =================================================================== ---- acpica-unix2-20200528.orig/source/components/executer/exfldio.c -+++ acpica-unix2-20200528/source/components/executer/exfldio.c +--- acpica-unix2-20200925.orig/source/components/executer/exfldio.c ++++ acpica-unix2-20200925/source/components/executer/exfldio.c @@ -681,8 +681,8 @@ AcpiExWriteWithUpdateRule ( ACPI_ERROR ((AE_INFO, @@ -171,10 +171,10 @@ Index: acpica-unix2-20200528/source/components/executer/exfldio.c return_ACPI_STATUS (AE_AML_OPERAND_VALUE); } } -Index: acpica-unix2-20200528/source/components/executer/exnames.c +Index: acpica-unix2-20200925/source/components/executer/exnames.c =================================================================== ---- acpica-unix2-20200528.orig/source/components/executer/exnames.c -+++ acpica-unix2-20200528/source/components/executer/exnames.c +--- acpica-unix2-20200925.orig/source/components/executer/exnames.c ++++ acpica-unix2-20200925/source/components/executer/exnames.c @@ -237,7 +237,7 @@ AcpiExNameSegment ( */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, @@ -193,10 +193,10 @@ Index: acpica-unix2-20200528/source/components/executer/exnames.c } *InAmlAddress = ACPI_CAST_PTR (UINT8, AmlAddress); -Index: acpica-unix2-20200528/source/components/hardware/hwregs.c +Index: acpica-unix2-20200925/source/components/hardware/hwregs.c =================================================================== ---- acpica-unix2-20200528.orig/source/components/hardware/hwregs.c -+++ acpica-unix2-20200528/source/components/hardware/hwregs.c +--- acpica-unix2-20200925.orig/source/components/hardware/hwregs.c ++++ acpica-unix2-20200925/source/components/hardware/hwregs.c @@ -460,7 +460,7 @@ AcpiHwClearAcpiStatus ( @@ -206,10 +206,10 @@ Index: acpica-unix2-20200528/source/components/hardware/hwregs.c ACPI_FORMAT_UINT64 (AcpiGbl_XPm1aStatus.Address))); LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock); -Index: acpica-unix2-20200528/source/components/tables/tbfadt.c +Index: acpica-unix2-20200925/source/components/tables/tbfadt.c =================================================================== ---- acpica-unix2-20200528.orig/source/components/tables/tbfadt.c -+++ acpica-unix2-20200528/source/components/tables/tbfadt.c +--- acpica-unix2-20200925.orig/source/components/tables/tbfadt.c ++++ acpica-unix2-20200925/source/components/tables/tbfadt.c @@ -233,7 +233,7 @@ AcpiTbInitGenericAddress ( if (!(Flags & ACPI_FADT_GPE_REGISTER)) { @@ -219,7 +219,7 @@ Index: acpica-unix2-20200528/source/components/tables/tbfadt.c "to convert to GAS struct - 255 bits max, truncating", RegisterName, ByteWidth, (ByteWidth * 8))); } -@@ -304,7 +304,7 @@ AcpiTbSelectAddress ( +@@ -303,7 +303,7 @@ AcpiTbSelectAddress ( ACPI_BIOS_WARNING ((AE_INFO, "32/64X %s address mismatch in FADT: " @@ -228,7 +228,7 @@ Index: acpica-unix2-20200528/source/components/tables/tbfadt.c RegisterName, Address32, ACPI_FORMAT_UINT64 (Address64), AcpiGbl_Use32BitFadtAddresses ? 32 : 64)); -@@ -628,7 +628,7 @@ AcpiTbConvertFadt ( +@@ -631,7 +631,7 @@ AcpiTbConvertFadt ( ACPI_BIOS_WARNING ((AE_INFO, "32/64X address mismatch in FADT/%s: " @@ -237,10 +237,10 @@ Index: acpica-unix2-20200528/source/components/tables/tbfadt.c Name, Address32, ACPI_FORMAT_UINT64 (Address64->Address), AcpiGbl_Use32BitFadtAddresses ? 32 : 64)); -Index: acpica-unix2-20200528/source/components/tables/tbxfroot.c +Index: acpica-unix2-20200925/source/components/tables/tbxfroot.c =================================================================== ---- acpica-unix2-20200528.orig/source/components/tables/tbxfroot.c -+++ acpica-unix2-20200528/source/components/tables/tbxfroot.c +--- acpica-unix2-20200925.orig/source/components/tables/tbxfroot.c ++++ acpica-unix2-20200925/source/components/tables/tbxfroot.c @@ -177,7 +177,7 @@ AcpiFindRootPointer ( { ACPI_ERROR ((AE_INFO, @@ -268,10 +268,10 @@ Index: acpica-unix2-20200528/source/components/tables/tbxfroot.c return_ACPI_STATUS (AE_NO_MEMORY); } -Index: acpica-unix2-20200528/source/components/utilities/utownerid.c +Index: acpica-unix2-20200925/source/components/utilities/utownerid.c =================================================================== ---- acpica-unix2-20200528.orig/source/components/utilities/utownerid.c -+++ acpica-unix2-20200528/source/components/utilities/utownerid.c +--- acpica-unix2-20200925.orig/source/components/utilities/utownerid.c ++++ acpica-unix2-20200925/source/components/utilities/utownerid.c @@ -237,7 +237,7 @@ AcpiUtReleaseOwnerId ( else { diff --git a/mips-be-fix.patch b/mips-be-fix.patch index 0e7fa91..485fb77 100644 --- a/mips-be-fix.patch +++ b/mips-be-fix.patch @@ -1,8 +1,8 @@ -Index: acpica-unix-20191018/source/compiler/aslparseop.c +Index: acpica-unix2-20200925/source/compiler/aslparseop.c =================================================================== ---- acpica-unix-20191018.orig/source/compiler/aslparseop.c -+++ acpica-unix-20191018/source/compiler/aslparseop.c -@@ -283,7 +283,16 @@ TrCreateValuedLeafOp ( +--- acpica-unix2-20200925.orig/source/compiler/aslparseop.c ++++ acpica-unix2-20200925/source/compiler/aslparseop.c +@@ -285,7 +285,16 @@ TrCreateValuedLeafOp ( Op = TrAllocateOp (ParseOpcode); @@ -20,18 +20,3 @@ Index: acpica-unix-20191018/source/compiler/aslparseop.c DbgPrint (ASL_PARSE_OUTPUT, "\nCreateValuedLeafOp Ln/Col %u/%u NewOp %p " -Index: acpica-unix-20191018/source/include/platform/aclinux.h -=================================================================== ---- acpica-unix-20191018.orig/source/include/platform/aclinux.h -+++ acpica-unix-20191018/source/include/platform/aclinux.h -@@ -232,10 +232,8 @@ - #endif - - #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ --#if defined(__PPC64__) || defined(__s390x__) - #define ACPI_BIG_ENDIAN - #endif --#endif - - #endif /* __KERNEL__ */ - diff --git a/ppc64le.patch b/ppc64le.patch deleted file mode 100644 index 228f9d9..0000000 --- a/ppc64le.patch +++ /dev/null @@ -1,16 +0,0 @@ -Index: acpica-unix-20191018/source/include/platform/aclinux.h -=================================================================== ---- acpica-unix-20191018.orig/source/include/platform/aclinux.h -+++ acpica-unix-20191018/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__ */ - diff --git a/ptr-cast.patch b/ptr-cast.patch index d052057..8f32d8c 100644 --- a/ptr-cast.patch +++ b/ptr-cast.patch @@ -1,12 +1,12 @@ -Index: acpica-unix-20191018/source/components/tables/tbutils.c +Index: acpica-unix2-20200925/source/components/tables/tbutils.c =================================================================== ---- acpica-unix-20191018.orig/source/components/tables/tbutils.c -+++ acpica-unix-20191018/source/components/tables/tbutils.c +--- acpica-unix2-20200925.orig/source/components/tables/tbutils.c ++++ acpica-unix2-20200925/source/components/tables/tbutils.c @@ -238,9 +238,11 @@ AcpiTbGetRootTableEntry ( * 64-bit platform, XSDT: Move (unaligned) 64-bit to local, * return 64-bit */ -- Address64 = (UINT64) TableEntry; +- ACPI_MOVE_64_TO_64 (&Address64, TableEntry); #if ACPI_MACHINE_WIDTH == 32 + UINT32 Tmp32 = (UINT32) TableEntry; @@ -15,7 +15,7 @@ Index: acpica-unix-20191018/source/components/tables/tbutils.c if (Address64 > ACPI_UINT32_MAX) { /* Will truncate 64-bit address to 32 bits, issue warning */ -@@ -250,9 +252,15 @@ AcpiTbGetRootTableEntry ( +@@ -250,8 +252,14 @@ AcpiTbGetRootTableEntry ( " truncating", ACPI_FORMAT_UINT64 (Address64))); } @@ -26,17 +26,16 @@ Index: acpica-unix-20191018/source/components/tables/tbutils.c +#else + Address64 = (UINT64) TableEntry; + - return ((ACPI_PHYSICAL_ADDRESS) (*ACPI_CAST_PTR ( - UINT64, Address64))); + return ((ACPI_PHYSICAL_ADDRESS) (Address64)); +#endif } } -Index: acpica-unix-20191018/source/compiler/aslparseop.c +Index: acpica-unix2-20200925/source/compiler/aslparseop.c =================================================================== ---- acpica-unix-20191018.orig/source/compiler/aslparseop.c -+++ acpica-unix-20191018/source/compiler/aslparseop.c -@@ -287,7 +287,11 @@ TrCreateValuedLeafOp ( +--- acpica-unix2-20200925.orig/source/compiler/aslparseop.c ++++ acpica-unix2-20200925/source/compiler/aslparseop.c +@@ -289,7 +289,11 @@ TrCreateValuedLeafOp ( ParseOpcode == PARSEOP_NAMESEG || ParseOpcode == PARSEOP_STRING_LITERAL) { diff --git a/simple-64bit.patch b/simple-64bit.patch index 80c771f..aeead35 100644 --- a/simple-64bit.patch +++ b/simple-64bit.patch @@ -3,17 +3,18 @@ Description: Stop listing all 64bit architectures 64bit architectures. Author: Adrian Bunk -Index: acpica-unix-20191018/source/include/platform/aclinux.h +Index: acpica-unix2-20200925/source/include/platform/aclinux.h =================================================================== ---- acpica-unix-20191018.orig/source/include/platform/aclinux.h -+++ acpica-unix-20191018/source/include/platform/aclinux.h -@@ -215,9 +215,7 @@ +--- acpica-unix2-20200925.orig/source/include/platform/aclinux.h ++++ acpica-unix2-20200925/source/include/platform/aclinux.h +@@ -215,10 +215,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(__s390x__) ||\ +- (defined(__riscv) && (defined(__LP64__) || defined(_LP64))) +#if defined(__LP64__) #define ACPI_MACHINE_WIDTH 64 #define COMPILER_DEPENDENT_INT64 long diff --git a/str-trunc-warn.patch b/str-trunc-warn.patch index 763ae68..1355b0c 100644 --- a/str-trunc-warn.patch +++ b/str-trunc-warn.patch @@ -1,7 +1,7 @@ -Index: acpica-unix-20200214/source/compiler/aslanalyze.c +Index: acpica-unix2-20200925/source/compiler/aslanalyze.c =================================================================== ---- acpica-unix-20200214.orig/source/compiler/aslanalyze.c -+++ acpica-unix-20200214/source/compiler/aslanalyze.c +--- acpica-unix2-20200925.orig/source/compiler/aslanalyze.c ++++ acpica-unix2-20200925/source/compiler/aslanalyze.c @@ -358,11 +358,16 @@ AnCheckMethodReturnValue ( */ if (ThisNodeBtype != 0) @@ -21,10 +21,10 @@ Index: acpica-unix-20200214/source/compiler/aslanalyze.c } } -Index: acpica-unix-20200214/source/compiler/aslpredef.c +Index: acpica-unix2-20200925/source/compiler/aslpredef.c =================================================================== ---- acpica-unix-20200214.orig/source/compiler/aslpredef.c -+++ acpica-unix-20200214/source/compiler/aslpredef.c +--- acpica-unix2-20200925.orig/source/compiler/aslpredef.c ++++ acpica-unix2-20200925/source/compiler/aslpredef.c @@ -159,14 +159,19 @@ ApCheckForPredefinedMethod ( if (MethodInfo->NumReturnNoValue && ThisName->Info.ExpectedBtypes) @@ -84,10 +84,10 @@ Index: acpica-unix-20200214/source/compiler/aslpredef.c return (AE_TYPE); } -Index: acpica-unix-20200214/source/compiler/aslwalks.c +Index: acpica-unix2-20200925/source/compiler/aslwalks.c =================================================================== ---- acpica-unix-20200214.orig/source/compiler/aslwalks.c -+++ acpica-unix-20200214/source/compiler/aslwalks.c +--- acpica-unix2-20200925.orig/source/compiler/aslwalks.c ++++ acpica-unix2-20200925/source/compiler/aslwalks.c @@ -515,15 +515,19 @@ AnOperandTypecheckWalkEnd ( else if (!CommonBtypes) { diff --git a/template.patch b/template.patch index 662216a..408541a 100644 --- a/template.patch +++ b/template.patch @@ -7,10 +7,10 @@ From: Al Stone tests/templates/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -Index: acpica-unix-20191018/tests/templates/Makefile +Index: acpica-unix2-20200925/tests/templates/Makefile =================================================================== ---- acpica-unix-20191018.orig/tests/templates/Makefile -+++ acpica-unix-20191018/tests/templates/Makefile +--- acpica-unix2-20200925.orig/tests/templates/Makefile ++++ acpica-unix2-20200925/tests/templates/Makefile @@ -26,7 +26,7 @@ $(aml_obj): %.aml: %.asl diff --git a/ull-32bit.patch b/ull-32bit.patch new file mode 100644 index 0000000..0568e11 --- /dev/null +++ b/ull-32bit.patch @@ -0,0 +1,12 @@ +diff -Naur acpica-unix2-20200925.orig/source/common/dmtbdump.c acpica-unix2-20200925/source/common/dmtbdump.c +--- acpica-unix2-20200925.orig/source/common/dmtbdump.c 2020-10-16 18:33:41.108600489 -0600 ++++ acpica-unix2-20200925/source/common/dmtbdump.c 2020-10-16 18:35:01.970316862 -0600 +@@ -333,7 +333,7 @@ + for (i = 0; i < Entries; i++) + { + AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i); +- AcpiOsPrintf ("%16.16lX\n", AcpiUtReadUint64(&Array[i])); ++ AcpiOsPrintf ("%16.16llX\n", AcpiUtReadUint64(&Array[i])); + Offset += sizeof (UINT64); + } + } diff --git a/unaligned.patch b/unaligned.patch index f1f35a0..6d3f9c6 100644 --- a/unaligned.patch +++ b/unaligned.patch @@ -14,10 +14,10 @@ Signed-off-by: Paolo Bonzini source/include/actypes.h | 26 +++++++++++++------------- 3 files changed, 32 insertions(+), 21 deletions(-) -Index: acpica-unix-20191018/source/components/executer/exoparg2.c +Index: acpica-unix2-20200925/source/components/executer/exoparg2.c =================================================================== ---- acpica-unix-20191018.orig/source/components/executer/exoparg2.c -+++ acpica-unix-20191018/source/components/executer/exoparg2.c +--- acpica-unix2-20200925.orig/source/components/executer/exoparg2.c ++++ acpica-unix2-20200925/source/components/executer/exoparg2.c @@ -172,6 +172,8 @@ AcpiExOpcode_2A_2T_1R ( ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0]; ACPI_OPERAND_OBJECT *ReturnDesc1 = NULL; @@ -58,10 +58,10 @@ Index: acpica-unix-20191018/source/components/executer/exoparg2.c break; case AML_CONCATENATE_OP: /* Concatenate (Data1, Data2, Result) */ -Index: acpica-unix-20191018/source/include/actypes.h +Index: acpica-unix2-20200925/source/include/actypes.h =================================================================== ---- acpica-unix-20191018.orig/source/include/actypes.h -+++ acpica-unix-20191018/source/include/actypes.h +--- acpica-unix2-20200925.orig/source/include/actypes.h ++++ acpica-unix2-20200925/source/include/actypes.h @@ -143,6 +143,19 @@ typedef COMPILER_DEPENDENT_INT64 */ #define ACPI_THREAD_ID UINT64