Update to 20240322 and remove support for big-endian architectures

As s390x was the only one remaining, it has now been excluded.  This
was best done with an update of the source tree to match upstream.
This is turn caused additional patch updates.

With s390x gone, all of the big-endian patches can be removed,
simplifying things enormously.  This is the biggest change.

Several other patches that are no longer needed due to changes
in Fedora builds (ld flags, for example), or that are no longer needed
(such as armv7) have also been removed.

Added three new patches to fix problems with dumping various
tables, and removed all the remaining patches that no longer
serve a purpose.

Thanks to the contributors for PR#4 and PR#5 for the suggestions.
These have all been incorporated even if they are not in exactly
the same form.

Signed-off-by: Al Stone <ahs3@ahs3.net>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
Al Stone 2024-08-12 15:16:04 -06:00 committed by Gerd Hoffmann
parent f7b51c7ebc
commit 1b78585135
79 changed files with 283 additions and 9110 deletions

6
.gitignore vendored
View File

@ -156,3 +156,9 @@ series
/acpitests-unix-20211217.tar.gz
/acpica-unix2-20220331.tar.gz
/acpitests-unix-20220331.tar.gz
/acpica-unix2-20230331.tar.gz
/acpitests-unix-20230331.tar.gz
/acpica-unix2-20240321.tar.gz
/acpitests-unix-20240321.tar.gz
/acpica-unix2-20240322.tar.gz
/acpitests-unix-20240322.tar.gz

View File

@ -1,530 +0,0 @@
From 4594630ec2e6a33efce3047a86b08fa170b75848 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Thu, 15 Oct 2020 11:53:33 -0600
Subject: [PATCH 01/45] Add in basic infrastructure for big-endian support
This adds in some basic functions -- AcpiUtReadUint32(), for example,
to read a UINT32 value in little-endian form and return it in host-native
format -- along with AcpiUtWriteUint() that writes out an integer in
host-native format as a little-endian value.
But, to do that, I'm adding the functions in a new file: utendian.c. So,
the header files need fixing, and the makefiles need to be sure to compile
the new code. Further, UtIsBigEndianMachine() needed to be moved out of
compiler/aslutils.c so it could be used in the new functions and avoid
having to do some conditional compilation depending on endian-ness.
However, this sets things up for the future, where endian-aware code can
be added as the need is uncovered. For now, these functions cover all of
the cases I know about.
Signed-off-by: Al Stone <ahs3@redhat.com>
---
generate/unix/acpibin/Makefile | 1 +
generate/unix/acpidump/Makefile | 1 +
generate/unix/acpiexamples/Makefile | 1 +
generate/unix/acpiexec/Makefile | 1 +
generate/unix/acpihelp/Makefile | 1 +
generate/unix/iasl/Makefile | 1 +
source/compiler/aslcompiler.h | 4 -
source/compiler/aslutils.c | 27 ---
source/components/utilities/utendian.c | 236 +++++++++++++++++++++++++
source/include/acmacros.h | 56 ------
source/include/acutils.h | 32 ++++
source/include/platform/aclinux.h | 1 +
12 files changed, 275 insertions(+), 87 deletions(-)
create mode 100644 source/components/utilities/utendian.c
Index: acpica-unix2-20220331/generate/unix/acpibin/Makefile
===================================================================
--- acpica-unix2-20220331.orig/generate/unix/acpibin/Makefile
+++ acpica-unix2-20220331/generate/unix/acpibin/Makefile
@@ -37,6 +37,7 @@ OBJECTS = \
$(OBJDIR)/utcache.o\
$(OBJDIR)/utdebug.o\
$(OBJDIR)/utdecode.o\
+ $(OBJDIR)/utendian.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utglobal.o\
$(OBJDIR)/utlock.o\
Index: acpica-unix2-20220331/generate/unix/acpidump/Makefile
===================================================================
--- acpica-unix2-20220331.orig/generate/unix/acpidump/Makefile
+++ acpica-unix2-20220331/generate/unix/acpidump/Makefile
@@ -36,6 +36,7 @@ OBJECTS = \
$(OBJDIR)/osunixdir.o\
$(OBJDIR)/osunixmap.o\
$(OBJDIR)/osunixxf.o\
+ $(OBJDIR)/utendian.o\
$(OBJDIR)/tbprint.o\
$(OBJDIR)/tbxfroot.o\
$(OBJDIR)/utascii.o\
Index: acpica-unix2-20220331/generate/unix/acpiexamples/Makefile
===================================================================
--- acpica-unix2-20220331.orig/generate/unix/acpiexamples/Makefile
+++ acpica-unix2-20220331/generate/unix/acpiexamples/Makefile
@@ -139,6 +139,7 @@ OBJECTS = \
$(OBJDIR)/utdebug.o\
$(OBJDIR)/utdecode.o\
$(OBJDIR)/utdelete.o\
+ $(OBJDIR)/utendian.o\
$(OBJDIR)/uterror.o\
$(OBJDIR)/uteval.o\
$(OBJDIR)/utexcep.o\
Index: acpica-unix2-20220331/generate/unix/acpiexec/Makefile
===================================================================
--- acpica-unix2-20220331.orig/generate/unix/acpiexec/Makefile
+++ acpica-unix2-20220331/generate/unix/acpiexec/Makefile
@@ -214,6 +214,7 @@ OBJECTS = \
$(OBJDIR)/utdebug.o\
$(OBJDIR)/utdecode.o\
$(OBJDIR)/utdelete.o\
+ $(OBJDIR)/utendian.o\
$(OBJDIR)/uterror.o\
$(OBJDIR)/uteval.o\
$(OBJDIR)/utexcep.o\
Index: acpica-unix2-20220331/generate/unix/acpihelp/Makefile
===================================================================
--- acpica-unix2-20220331.orig/generate/unix/acpihelp/Makefile
+++ acpica-unix2-20220331/generate/unix/acpihelp/Makefile
@@ -45,6 +45,7 @@ OBJECTS = \
$(OBJDIR)/getopt.o\
$(OBJDIR)/osunixxf.o\
$(OBJDIR)/utdebug.o\
+ $(OBJDIR)/utendian.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utglobal.o\
$(OBJDIR)/uthex.o\
Index: acpica-unix2-20220331/generate/unix/iasl/Makefile
===================================================================
--- acpica-unix2-20220331.orig/generate/unix/iasl/Makefile
+++ acpica-unix2-20220331/generate/unix/iasl/Makefile
@@ -225,6 +225,7 @@ OBJECTS = \
$(OBJDIR)/utdebug.o\
$(OBJDIR)/utdecode.o\
$(OBJDIR)/utdelete.o\
+ $(OBJDIR)/utendian.o\
$(OBJDIR)/uterror.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utglobal.o\
Index: acpica-unix2-20220331/source/compiler/aslcompiler.h
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/aslcompiler.h
+++ acpica-unix2-20220331/source/compiler/aslcompiler.h
@@ -1120,10 +1120,6 @@ BOOLEAN
UtIsIdInteger (
UINT8 *Target);
-UINT8
-UtIsBigEndianMachine (
- void);
-
BOOLEAN
UtQueryForOverwrite (
char *Pathname);
Index: acpica-unix2-20220331/source/compiler/aslutils.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/aslutils.c
+++ acpica-unix2-20220331/source/compiler/aslutils.c
@@ -73,33 +73,6 @@ UtDisplayErrorSummary (
/*******************************************************************************
*
- * FUNCTION: UtIsBigEndianMachine
- *
- * PARAMETERS: None
- *
- * RETURN: TRUE if machine is big endian
- * FALSE if machine is little endian
- *
- * DESCRIPTION: Detect whether machine is little endian or big endian.
- *
- ******************************************************************************/
-
-UINT8
-UtIsBigEndianMachine (
- void)
-{
- union {
- UINT32 Integer;
- UINT8 Bytes[4];
- } Overlay = {0xFF000000};
-
-
- return (Overlay.Bytes[0]); /* Returns 0xFF (TRUE) for big endian */
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: UtIsIdInteger
*
* PARAMETERS: Pointer to an ACPI ID (HID, CID) string
Index: acpica-unix2-20220331/source/components/utilities/utendian.c
===================================================================
--- /dev/null
+++ acpica-unix2-20220331/source/components/utilities/utendian.c
@@ -0,0 +1,236 @@
+/******************************************************************************
+ *
+ * Module Name: utendian -- byte swapping support for other-endianness
+ *
+ *****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Copyright (c) 2020, Al Stone <ahs3@redhat.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions, and the following disclaimer,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * substantially similar to the "NO WARRANTY" disclaimer below
+ * ("Disclaimer") and any redistribution must be conditioned upon
+ * including a substantially similar Disclaimer requirement for further
+ * binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ * of any contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Alternatively, you may choose to be licensed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ *****************************************************************************/
+
+#include "acpi.h"
+#include "accommon.h"
+
+#define _COMPONENT ACPI_COMPILER
+ ACPI_MODULE_NAME ("utendian")
+
+/*
+ * Endianness support functions.
+ *
+ * Ultimately, everything in ACPI tables or AML must be in little-endian
+ * format. However, we sometimes find it necessary to run on a big-endian
+ * machine and create or read those little-endian values. This is a small
+ * libary of functions to make that easier, and more visible.
+ *
+ */
+
+/*******************************************************************************
+ *
+ * FUNCTION: UtIsBigEndianMachine
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: TRUE if machine is big endian
+ * FALSE if machine is little endian
+ *
+ * DESCRIPTION: Detect whether machine is little endian or big endian.
+ *
+ ******************************************************************************/
+
+UINT8
+UtIsBigEndianMachine (
+ void)
+{
+ union {
+ UINT32 Integer;
+ UINT8 Bytes[4];
+ } Overlay = {0xFF000000};
+
+
+ return (Overlay.Bytes[0]); /* Returns 0xFF (TRUE) for big endian */
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiUtReadUint16
+ *
+ * PARAMETERS: Src - location containing the little-endian
+ * value
+ *
+ * RETURN: UINT16 value in host-native form
+ *
+ * DESCRIPTION: Read a UINT16 little-endian value from a given location
+ * and return it in host-native form
+ *
+ ******************************************************************************/
+
+UINT16
+AcpiUtReadUint16 (
+ void *SrcPtr)
+{
+ UINT16 Result = 0;
+ UINT8 *Dst = (UINT8 *) &Result;
+ UINT8 *Src = (UINT8 *) SrcPtr;
+
+ if (!UtIsBigEndianMachine())
+ {
+ return (*(UINT16 *) SrcPtr);
+ }
+
+ Dst[0] = Src[1];
+ Dst[1] = Src[0];
+
+ return (Result);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiUtReadUint32
+ *
+ * PARAMETERS: Src - location containing the little-endian
+ * value
+ *
+ * RETURN: UINT32 value in host-native form
+ *
+ * DESCRIPTION: Read a UINT32 little-endian value from a given location
+ * and return it in host-native form
+ *
+ ******************************************************************************/
+
+UINT32
+AcpiUtReadUint32 (
+ void *SrcPtr)
+{
+ UINT32 Result = 0;
+ UINT8 *Dst = (UINT8 *) &Result;
+ UINT8 *Src = (UINT8 *) SrcPtr;
+
+ if (!UtIsBigEndianMachine())
+ {
+ return (*(UINT32 *) SrcPtr);
+ }
+
+ Dst[0] = Src[3];
+ Dst[1] = Src[2];
+ Dst[2] = Src[1];
+ Dst[3] = Src[0];
+
+ return (Result);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiUtReadUint64
+ *
+ * PARAMETERS: Src - location containing the little-endian
+ * value
+ *
+ * RETURN: UINT64 value in host-native form
+ *
+ * DESCRIPTION: Read a UINT64 little-endian value from a given location
+ * and return it in host-native form
+ *
+ ******************************************************************************/
+
+UINT64
+AcpiUtReadUint64 (
+ void *SrcPtr)
+{
+ UINT64 Result = 0;
+ UINT8 *Dst = (UINT8 *) &Result;
+ UINT8 *Src = (UINT8 *) SrcPtr;
+
+ if (!UtIsBigEndianMachine())
+ {
+ return (*(UINT64 *) SrcPtr);
+ }
+
+ Dst[0] = Src[7];
+ Dst[1] = Src[6];
+ Dst[2] = Src[5];
+ Dst[3] = Src[4];
+ Dst[4] = Src[3];
+ Dst[5] = Src[2];
+ Dst[6] = Src[1];
+ Dst[7] = Src[0];
+
+ return (Result);
+}
+
+/*******************************************************************************
+ *
+ * FUNCTION: AcpiUtWriteUint
+ *
+ * PARAMETERS: DstPtr - where to place the retrieved value
+ * DstLength - space in bytes for this int type
+ * SrcPtr - where the little-endian value lives
+ * SrcLength - space in bytes for this int type
+ *
+ * RETURN: None.
+ *
+ * DESCRIPTION: Write a host-native integer value of the given size, and
+ * store it in the location specified in little-endian form.
+ * Given the amount of integer type casting done, this general
+ * version seems the most useful (vs 32->32, 32->16, 16->32,
+ * ad infinitum)
+ *
+ ******************************************************************************/
+
+void
+AcpiUtWriteUint (
+ void *DstPtr,
+ int DstLength,
+ const void *SrcPtr,
+ const int SrcLength)
+{
+ UINT8 *Dst = (UINT8 *) DstPtr;
+ UINT8 *Src = (UINT8 *) SrcPtr;
+ int Length;
+ int ii;
+
+ if (!UtIsBigEndianMachine())
+ {
+ Length = SrcLength > DstLength ? DstLength : SrcLength;
+ memcpy (Dst, Src, Length);
+ return;
+ }
+
+ Length = SrcLength >= DstLength ? DstLength : SrcLength;
+ for (ii = 0; ii < Length; ii++)
+ Dst[ii] = Src[SrcLength - ii - 1];
+
+}
Index: acpica-unix2-20220331/source/include/acmacros.h
===================================================================
--- acpica-unix2-20220331.orig/source/include/acmacros.h
+++ acpica-unix2-20220331/source/include/acmacros.h
@@ -76,61 +76,6 @@
* If the hardware supports the transfer of unaligned data, just do the store.
* Otherwise, we have to move one byte at a time.
*/
-#ifdef ACPI_BIG_ENDIAN
-/*
- * Macros for big-endian machines
- */
-
-/* These macros reverse the bytes during the move, converting little-endian to big endian */
-
- /* Big Endian <== Little Endian */
- /* Hi...Lo Lo...Hi */
-/* 16-bit source, 16/32/64 destination */
-
-#define ACPI_MOVE_16_TO_16(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[1];\
- (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[0];}
-
-#define ACPI_MOVE_16_TO_32(d, s) {(*(UINT32 *)(void *)(d))=0;\
- ((UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[1];\
- ((UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[0];}
-
-#define ACPI_MOVE_16_TO_64(d, s) {(*(UINT64 *)(void *)(d))=0;\
- ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\
- ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];}
-
-/* 32-bit source, 16/32/64 destination */
-
-#define ACPI_MOVE_32_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
-
-#define ACPI_MOVE_32_TO_32(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];\
- (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[2];\
- (( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[1];\
- (( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[0];}
-
-#define ACPI_MOVE_32_TO_64(d, s) {(*(UINT64 *)(void *)(d))=0;\
- ((UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[3];\
- ((UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[2];\
- ((UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\
- ((UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];}
-
-/* 64-bit source, 16/32/64 destination */
-
-#define ACPI_MOVE_64_TO_16(d, s) ACPI_MOVE_16_TO_16(d, s) /* Truncate to 16 */
-
-#define ACPI_MOVE_64_TO_32(d, s) ACPI_MOVE_32_TO_32(d, s) /* Truncate to 32 */
-
-#define ACPI_MOVE_64_TO_64(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\
- (( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];\
- (( UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[5];\
- (( UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[4];\
- (( UINT8 *)(void *)(d))[4] = ((UINT8 *)(void *)(s))[3];\
- (( UINT8 *)(void *)(d))[5] = ((UINT8 *)(void *)(s))[2];\
- (( UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[1];\
- (( UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[0];}
-#else
-/*
- * Macros for little-endian machines
- */
#ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
@@ -193,7 +138,6 @@
(( UINT8 *)(void *)(d))[6] = ((UINT8 *)(void *)(s))[6];\
(( UINT8 *)(void *)(d))[7] = ((UINT8 *)(void *)(s))[7];}
#endif
-#endif
/*
Index: acpica-unix2-20220331/source/include/acutils.h
===================================================================
--- acpica-unix2-20220331.orig/source/include/acutils.h
+++ acpica-unix2-20220331/source/include/acutils.h
@@ -1167,4 +1167,36 @@ AcpiUtConvertUuidToString (
char *OutString);
#endif
+
+/*
+ * utendian -- byte-swapping for big-endian support
+ */
+
+UINT8
+UtIsBigEndianMachine (
+ void);
+
+#if defined(ACPI_ASL_COMPILER) || defined(ACPI_EXEC_APP) || \
+ defined(ACPI_HELP_APP) || defined(ACPI_DUMP_APP) || \
+ defined(ACPI_EXAMPLE_APP) || defined(ACPI_BIN_APP)
+UINT32
+AcpiUtReadUint32 (
+ void *SrcPtr);
+
+UINT16
+AcpiUtReadUint16 (
+ void *SrcPtr);
+
+UINT64
+AcpiUtReadUint64 (
+ void *SrcPtr);
+
+void
+AcpiUtWriteUint (
+ void *DstPtr,
+ int DstLength,
+ const void *SrcPtr,
+ const int SrcLength);
+#endif
+
#endif /* _ACUTILS_H */
Index: acpica-unix2-20220331/source/include/platform/aclinux.h
===================================================================
--- acpica-unix2-20220331.orig/source/include/platform/aclinux.h
+++ acpica-unix2-20220331/source/include/platform/aclinux.h
@@ -203,6 +203,7 @@
#ifdef ACPI_USE_STANDARD_HEADERS
#include <unistd.h>
+#include <endian.h>
#endif
/* Define/disable kernel-specific declarators */

View File

@ -0,0 +1,34 @@
From ec87f7e157a23078dc5458d6d26951fe4e2ac926 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@ahs3.net>
Date: Wed, 14 Apr 2021 20:52:05 -0600
Subject: [PATCH 1/2] Correct DBG2 dump of OemData
When OemData is present in a Device subtable, the original code was
reading data to put in OemData from the beginning of the DBG2 table,
not from the subtable that was being built. So, when dumping the
table, read from the proper place (the subtable) and not the beginning
of the DBG2 table.
Signed-off-by: Al Stone <ahs3@ahs3.net>
---
source/common/dmtbdump1.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source/common/dmtbdump1.c b/source/common/dmtbdump1.c
index bcf985325..56d959fd0 100644
--- a/source/common/dmtbdump1.c
+++ b/source/common/dmtbdump1.c
@@ -1371,8 +1371,8 @@ AcpiDmDumpDbg2 (
if (Subtable->OemDataOffset)
{
- Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset,
- Table, Subtable->OemDataLength,
+ Status = AcpiDmDumpTable (Length, Subtable->OemDataOffset,
+ Subtable, Subtable->OemDataLength,
AcpiDmTableInfoDbg2OemData);
if (ACPI_FAILURE (Status))
{
--
2.45.2

View File

@ -0,0 +1,30 @@
From 957662e99f6ec38849a9cf47eaebe1c232f74bbd Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@ahs3.net>
Date: Wed, 14 Apr 2021 21:18:12 -0600
Subject: [PATCH 2/2] Correct dumping of SLIC tables
When dumping the SLIC table, the code was not starting at the proper
offset. Set the offset to the first byte after the header.
Signed-off-by: Al Stone <ahs3@ahs3.net>
---
source/common/dmtbdump3.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/source/common/dmtbdump3.c b/source/common/dmtbdump3.c
index 6e5f5d7ff..9a5b5ecd5 100644
--- a/source/common/dmtbdump3.c
+++ b/source/common/dmtbdump3.c
@@ -177,7 +177,8 @@ AcpiDmDumpSlic (
ACPI_TABLE_HEADER *Table)
{
- (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table,
+ (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER),
+ (void *) (Table + sizeof (*Table)),
Table->Length - sizeof (*Table), AcpiDmTableInfoSlic);
}
--
2.45.2

View File

@ -1,200 +0,0 @@
From 51b0d06c0a6c4d4e19432ebf930299855c8fcf23 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Fri, 18 Sep 2020 15:14:30 -0600
Subject: [PATCH 02/45] Modify utility functions to be endian-agnostic
All of the modifications here use the big-endian code previously added
(see utendian.c) to make themselves endian-agnostic; i.e., that the code
does not need to change further to work on both big- and little-endian
machines.
These particular files were changed to handle the reading and writing
of files (the length is often embedded in the binary stream), and to
handle the reading and writing of integer values. The common cases are
to "read" a 32-bit unsigned int in little-endian format, but convert it
to host-native, and to write a byte, word, double word or quad word value
as little-endian, regardless of host-native format.
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/acfileio.c | 16 ++++++++++------
source/common/dmtable.c | 8 ++++----
source/compiler/dtfield.c | 2 +-
source/compiler/dtsubtable.c | 4 ++--
source/components/tables/tbprint.c | 13 +++++++++----
5 files changed, 26 insertions(+), 17 deletions(-)
Index: acpica-unix2-20220331/source/common/acfileio.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/acfileio.c
+++ acpica-unix2-20220331/source/common/acfileio.c
@@ -280,6 +280,7 @@ AcGetOneTableFromFile (
ACPI_TABLE_HEADER *Table;
INT32 Count;
long TableOffset;
+ UINT32 Length;
*ReturnTable = NULL;
@@ -319,7 +320,8 @@ AcGetOneTableFromFile (
/* Allocate a buffer for the entire table */
- Table = AcpiOsAllocate ((ACPI_SIZE) TableHeader.Length);
+ Length = AcpiUtReadUint32 (&TableHeader.Length);
+ Table = AcpiOsAllocate ((ACPI_SIZE) Length);
if (!Table)
{
return (AE_NO_MEMORY);
@@ -329,13 +331,13 @@ AcGetOneTableFromFile (
fseek (File, TableOffset, SEEK_SET);
- Count = fread (Table, 1, TableHeader.Length, File);
+ Count = fread (Table, 1, Length, File);
/*
* Checks for data table headers happen later in the execution. Only verify
* for Aml tables at this point in the code.
*/
- if (GetOnlyAmlTables && Count != (INT32) TableHeader.Length)
+ if (GetOnlyAmlTables && Count != (INT32) Length)
{
Status = AE_ERROR;
goto ErrorExit;
@@ -343,7 +345,7 @@ AcGetOneTableFromFile (
/* Validate the checksum (just issue a warning) */
- Status = AcpiTbVerifyChecksum (Table, TableHeader.Length);
+ Status = AcpiTbVerifyChecksum (Table, Length);
if (ACPI_FAILURE (Status))
{
Status = AcCheckTextModeCorruption (Table);
@@ -436,6 +438,7 @@ AcValidateTableHeader (
long OriginalOffset;
UINT32 FileSize;
UINT32 i;
+ UINT32 Length;
ACPI_FUNCTION_TRACE (AcValidateTableHeader);
@@ -472,11 +475,12 @@ AcValidateTableHeader (
/* Validate table length against bytes remaining in the file */
FileSize = CmGetFileSize (File);
- if (TableHeader.Length > (UINT32) (FileSize - TableOffset))
+ Length = AcpiUtReadUint32 (&TableHeader.Length);
+ if (Length > (UINT32) (FileSize - TableOffset))
{
fprintf (stderr, "Table [%4.4s] is too long for file - "
"needs: 0x%.2X, remaining in file: 0x%.2X\n",
- TableHeader.Signature, TableHeader.Length,
+ TableHeader.Signature, Length,
(UINT32) (FileSize - TableOffset));
return (AE_BAD_HEADER);
}
Index: acpica-unix2-20220331/source/common/dmtable.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtable.c
+++ acpica-unix2-20220331/source/common/dmtable.c
@@ -713,7 +713,7 @@ AcpiDmDumpDataTable (
{
/* Dump the raw table data */
- Length = Table->Length;
+ Length = AcpiUtReadUint32 (&Table->Length);
AcpiOsPrintf ("\n/*\n%s: Length %d (0x%X)\n\n",
ACPI_RAW_TABLE_DATA_HEADER, Length, Length);
@@ -730,7 +730,7 @@ AcpiDmDumpDataTable (
*/
if (ACPI_COMPARE_NAMESEG (Table->Signature, ACPI_SIG_FACS))
{
- Length = Table->Length;
+ Length = AcpiUtReadUint32 (&Table->Length);
Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFacs);
if (ACPI_FAILURE (Status))
{
@@ -751,7 +751,7 @@ AcpiDmDumpDataTable (
/*
* All other tables must use the common ACPI table header, dump it now
*/
- Length = Table->Length;
+ Length = AcpiUtReadUint32(&Table->Length);
Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoHeader);
if (ACPI_FAILURE (Status))
{
@@ -1415,7 +1415,7 @@ AcpiDmDumpTable (
AcpiOsPrintf ("%2.2X", *Target);
Temp8 = AcpiDmGenerateChecksum (Table,
- ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length,
+ AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Length)),
ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum);
if (Temp8 != ACPI_CAST_PTR (ACPI_TABLE_HEADER, Table)->Checksum)
Index: acpica-unix2-20220331/source/compiler/dtfield.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dtfield.c
+++ acpica-unix2-20220331/source/compiler/dtfield.c
@@ -361,7 +361,7 @@ DtCompileInteger (
DtError (ASL_ERROR, ASL_MSG_INTEGER_SIZE, Field, AslGbl_MsgBuffer);
}
- memcpy (Buffer, &Value, ByteLength);
+ AcpiUtWriteUint (Buffer, ByteLength, &Value, sizeof (UINT64));
return;
}
Index: acpica-unix2-20220331/source/compiler/dtsubtable.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dtsubtable.c
+++ acpica-unix2-20220331/source/compiler/dtsubtable.c
@@ -378,6 +378,6 @@ DtSetSubtableLength (
return;
}
- memcpy (Subtable->LengthField, &Subtable->TotalLength,
- Subtable->SizeOfLengthField);
+ AcpiUtWriteUint (Subtable->LengthField, Subtable->SizeOfLengthField,
+ &Subtable->TotalLength, sizeof (Subtable->TotalLength));
}
Index: acpica-unix2-20220331/source/components/tables/tbprint.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/tables/tbprint.c
+++ acpica-unix2-20220331/source/components/tables/tbprint.c
@@ -44,6 +44,8 @@
#include "acpi.h"
#include "accommon.h"
#include "actables.h"
+#include "platform/acenv.h"
+#include "acutils.h"
#define _COMPONENT ACPI_TABLES
ACPI_MODULE_NAME ("tbprint")
@@ -151,7 +153,7 @@ AcpiTbPrintTableHeader (
ACPI_INFO (("%-4.4s 0x%8.8X%8.8X %06X",
Header->Signature, ACPI_FORMAT_UINT64 (Address),
- Header->Length));
+ AcpiUtReadUint32 (&Header->Length)));
}
else if (ACPI_VALIDATE_RSDP_SIG (ACPI_CAST_PTR (ACPI_TABLE_RSDP,
Header)->Signature))
@@ -179,9 +181,12 @@ AcpiTbPrintTableHeader (
"%-4.4s 0x%8.8X%8.8X"
" %06X (v%.2d %-6.6s %-8.8s %08X %-4.4s %08X)",
LocalHeader.Signature, ACPI_FORMAT_UINT64 (Address),
- LocalHeader.Length, LocalHeader.Revision, LocalHeader.OemId,
- LocalHeader.OemTableId, LocalHeader.OemRevision,
- LocalHeader.AslCompilerId, LocalHeader.AslCompilerRevision));
+ AcpiUtReadUint32 (&LocalHeader.Length),
+ LocalHeader.Revision, LocalHeader.OemId,
+ LocalHeader.OemTableId,
+ AcpiUtReadUint32 (&LocalHeader.OemRevision),
+ LocalHeader.AslCompilerId,
+ AcpiUtReadUint32 (&LocalHeader.AslCompilerRevision)));
}
}

View File

@ -1,45 +0,0 @@
From 62cc2f4ae212bd0fad83f643921ac216ebb9a986 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Fri, 18 Sep 2020 15:20:37 -0600
Subject: [PATCH 03/45] Always display table header content in human-readable
form
When comparing two binary data tables, little-endian values are read
from each table header and printed out. Make sure they show up in a
form that makes sense to humans.
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/tools/acpibin/abcompare.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
Index: acpica-unix2-20220331/source/tools/acpibin/abcompare.c
===================================================================
--- acpica-unix2-20220331.orig/source/tools/acpibin/abcompare.c
+++ acpica-unix2-20220331/source/tools/acpibin/abcompare.c
@@ -42,6 +42,7 @@
*/
#include "acpibin.h"
+#include "acutils.h"
ACPI_TABLE_HEADER Header1;
@@ -179,14 +180,14 @@ AbPrintHeadersInfo (
/* Display header information for both headers */
printf ("Signature %8.4s : %4.4s\n", Header->Signature, Header2->Signature);
- printf ("Length %8.8X : %8.8X\n", Header->Length, Header2->Length);
+ printf ("Length %8.8X : %8.8X\n", AcpiUtReadUint32 (&Header->Length), AcpiUtReadUint32 (&Header2->Length));
printf ("Revision %8.2X : %2.2X\n", Header->Revision, Header2->Revision);
printf ("Checksum %8.2X : %2.2X\n", Header->Checksum, Header2->Checksum);
printf ("OEM ID %8.6s : %.6s\n", Header->OemId, Header2->OemId);
printf ("OEM Table ID %8.8s : %.8s\n", Header->OemTableId, Header2->OemTableId);
- printf ("OEM Revision %8.8X : %8.8X\n", Header->OemRevision, Header2->OemRevision);
+ printf ("OEM Revision %8.8X : %8.8X\n", AcpiUtReadUint32 (&Header->OemRevision), AcpiUtReadUint32 (&Header2->OemRevision));
printf ("ASL Compiler ID %8.4s : %.4s\n", Header->AslCompilerId, Header2->AslCompilerId);
- printf ("Compiler Revision %8.8X : %8.8X\n", Header->AslCompilerRevision, Header2->AslCompilerRevision);
+ printf ("Compiler Revision %8.8X : %8.8X\n", AcpiUtReadUint32 (&Header->AslCompilerRevision), AcpiUtReadUint32 (&Header2->AslCompilerRevision));
printf ("\n");
}

View File

@ -0,0 +1,37 @@
From 1fb473e41bcbfbe21c02bcb30983b87aa94a6cb8 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@ahs3.net>
Date: Tue, 13 Aug 2024 09:50:37 -0600
Subject: [PATCH] PHAT FW health table can be zero-length
When calculating the VendorLength of the PHAT FW health data subtable,
the result becomes a negative integer. However, since UINT32 is being
used, it looks like a huge positive integer instead. Conditionalize
the length calculation to handle this case properly.
This was discovered by using the command: iasl -T phat
Signed-off-by: Al Stone <ahs3@ahs3.net>
---
source/common/dmtbdump2.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/source/common/dmtbdump2.c b/source/common/dmtbdump2.c
index 32b76b382..dd4d4878e 100644
--- a/source/common/dmtbdump2.c
+++ b/source/common/dmtbdump2.c
@@ -2432,8 +2432,10 @@ AcpiDmDumpPhat (
/* Get Device-Specific Data - length of which is the remaining subtable length. */
- VendorLength =
- Subtable->Length - sizeof (ACPI_PHAT_HEALTH_DATA) - PathLength;
+ VendorLength = 0;
+ if (Subtable->Length > sizeof (ACPI_PHAT_HEALTH_DATA) + PathLength)
+ VendorLength =
+ Subtable->Length - sizeof (ACPI_PHAT_HEALTH_DATA) - PathLength;
DbgPrint (ASL_DEBUG_OUTPUT, "%u, Subtable->Length %X, VendorLength %X, Offset %X PathLength: %X\n",
__LINE__, Subtable->Length, VendorLength, Offset, PathLength);
--
2.45.2

View File

@ -1,78 +0,0 @@
From 16734feab4204d6930c1ede62e527920607daace Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Wed, 16 Sep 2020 16:27:06 -0600
Subject: [PATCH 04/45] Re-enable support for big-endian machines
First, disable the big-endian check and fail. Then, make sure the
namespace gets initialized properly (NB: needed even if we are only
compiling/disassembling data tables).
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/compiler/aslmain.c | 12 ------------
source/components/namespace/nsutils.c | 7 +++++--
2 files changed, 5 insertions(+), 14 deletions(-)
Index: acpica-unix2-20220331/source/compiler/aslmain.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/aslmain.c
+++ acpica-unix2-20220331/source/compiler/aslmain.c
@@ -101,18 +101,6 @@ main (
signal (SIGINT, AslSignalHandler);
- /*
- * Big-endian machines are not currently supported. ACPI tables must
- * be little-endian, and support for big-endian machines needs to
- * be implemented.
- */
- if (UtIsBigEndianMachine ())
- {
- fprintf (stderr,
- "iASL is not currently supported on big-endian machines.\n");
- return (-1);
- }
-
AcpiOsInitialize ();
ACPI_DEBUG_INITIALIZE (); /* For debug version only */
Index: acpica-unix2-20220331/source/components/namespace/nsutils.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/namespace/nsutils.c
+++ acpica-unix2-20220331/source/components/namespace/nsutils.c
@@ -272,6 +272,7 @@ AcpiNsBuildInternalName (
const char *ExternalName = Info->NextExternalChar;
char *Result = NULL;
UINT32 i;
+ char TmpSeg[ACPI_NAMESEG_SIZE+1];
ACPI_FUNCTION_TRACE (NsBuildInternalName);
@@ -335,6 +336,7 @@ AcpiNsBuildInternalName (
for (; NumSegments; NumSegments--)
{
+ memset (TmpSeg, 0, ACPI_NAMESEG_SIZE+1);
for (i = 0; i < ACPI_NAMESEG_SIZE; i++)
{
if (ACPI_IS_PATH_SEPARATOR (*ExternalName) ||
@@ -342,16 +344,17 @@ AcpiNsBuildInternalName (
{
/* Pad the segment with underscore(s) if segment is short */
- Result[i] = '_';
+ TmpSeg[i] = '_';
}
else
{
/* Convert the character to uppercase and save it */
- Result[i] = (char) toupper ((int) *ExternalName);
+ TmpSeg[i] = (char) toupper ((int) *ExternalName);
ExternalName++;
}
}
+ AcpiUtWriteUint (Result, ACPI_NAMESEG_SIZE, TmpSeg, ACPI_NAMESEG_SIZE);
/* Now we must have a path separator, or the pathname is bad */

View File

@ -1,41 +0,0 @@
From 055fee09d8f9244b6c437ad18b98edb81a87e8bc Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Tue, 27 Oct 2020 17:50:52 -0600
Subject: [PATCH 05/45] Correct an endian-ness problem when converting ASL to
ASL+
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/compiler/cvparser.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
Index: acpica-unix2-20220331/source/compiler/cvparser.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/cvparser.c
+++ acpica-unix2-20220331/source/compiler/cvparser.c
@@ -144,6 +144,7 @@ CvInitFileTree (
char *ChildFilename = NULL;
UINT8 *AmlStart;
UINT32 AmlLength;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
if (!AcpiGbl_CaptureComments)
@@ -152,7 +153,7 @@ CvInitFileTree (
}
- AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
+ AmlLength = TableLength - sizeof (ACPI_TABLE_HEADER);
AmlStart = ((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER));
CvDbgPrint ("AmlLength: %x\n", AmlLength);
@@ -162,7 +163,7 @@ CvInitFileTree (
AcpiGbl_FileTreeRoot = AcpiOsAcquireObject (AcpiGbl_FileCache);
AcpiGbl_FileTreeRoot->FileStart = (char *)(AmlStart);
- AcpiGbl_FileTreeRoot->FileEnd = (char *)(AmlStart + Table->Length);
+ AcpiGbl_FileTreeRoot->FileEnd = (char *)(AmlStart + TableLength);
AcpiGbl_FileTreeRoot->Next = NULL;
AcpiGbl_FileTreeRoot->Parent = NULL;
AcpiGbl_FileTreeRoot->Filename = (char *)(AmlStart+2);

View File

@ -1,32 +0,0 @@
From 790c016107e98ded2d0ae579f84dd4cd3fa06587 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Tue, 29 Jun 2021 17:48:31 -0600
Subject: [PATCH 06/45] Use more reliable ACPI_COPY_NAMSEG in GPE name checks
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/compiler/aslanalyze.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Index: acpica-unix2-20220331/source/compiler/aslanalyze.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/aslanalyze.c
+++ acpica-unix2-20220331/source/compiler/aslanalyze.c
@@ -469,7 +469,7 @@ ApCheckForGpeNameConflict (
/* Need a null-terminated string version of NameSeg */
- ACPI_MOVE_32_TO_32 (Name, Op->Asl.NameSeg);
+ ACPI_COPY_NAMESEG (Name, Op->Asl.NameSeg);
Name[ACPI_NAMESEG_SIZE] = 0;
/*
@@ -496,7 +496,7 @@ ApCheckForGpeNameConflict (
* We are now sure we have an _Lxx or _Exx.
* Create the target name that would cause collision (Flip E/L)
*/
- ACPI_MOVE_32_TO_32 (Target, Name);
+ ACPI_COPY_NAMESEG (Target, Name);
/* Inject opposite letter ("L" versus "E") */

View File

@ -1,53 +0,0 @@
From 9a4a32c597fcdfa8a3bc33230c40a18e39c3449d Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Thu, 1 Jul 2021 17:46:19 -0600
Subject: [PATCH 07/45] Handle dumping Unicode properly when big-endian
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump.c
+++ acpica-unix2-20220331/source/common/dmtbdump.c
@@ -200,6 +200,8 @@ AcpiDmDumpUnicode (
UINT8 *Buffer;
UINT32 Length;
UINT32 i;
+ UINT16 Tmp16;
+ UINT32 start;
Buffer = ((UINT8 *) Table) + BufferOffset;
@@ -209,7 +211,8 @@ AcpiDmDumpUnicode (
for (i = 0; i < Length; i += 2)
{
- if (!isprint (Buffer[i]))
+ Tmp16 = AcpiUtReadUint16 (&Buffer[i]);
+ if (!isprint (Tmp16))
{
goto DumpRawBuffer;
}
@@ -217,7 +220,8 @@ AcpiDmDumpUnicode (
/* Ensure all high bytes are zero */
- for (i = 1; i < Length; i += 2)
+ start = UtIsBigEndianMachine() ? 0 : 1;
+ for (i = start; i < Length; i += 2)
{
if (Buffer[i])
{
@@ -230,7 +234,8 @@ AcpiDmDumpUnicode (
AcpiOsPrintf ("\"");
for (i = 0; i < Length; i += 2)
{
- AcpiOsPrintf ("%c", Buffer[i]);
+ Tmp16 = AcpiUtReadUint16 (&Buffer[i]);
+ AcpiOsPrintf ("%c", Tmp16);
}
AcpiOsPrintf ("\"\n");

View File

@ -1,32 +0,0 @@
From 7b107ab7348d903108140f6033e90596b12325c4 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Thu, 15 Oct 2020 12:12:11 -0600
Subject: [PATCH 08/45] Support MADT (aka APIC) in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump2.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -763,7 +763,7 @@ AcpiDmDumpMadt (
{
ACPI_STATUS Status;
ACPI_SUBTABLE_HEADER *Subtable;
- UINT32 Length = Table->Length;
+ UINT32 Length = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_MADT);
ACPI_DMTABLE_INFO *InfoTable;
@@ -781,7 +781,7 @@ AcpiDmDumpMadt (
Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
DbgPrint (ASL_PARSE_OUTPUT, "//0B) Offset %X, from table start: 0x%8.8X%8.8X\n",
Offset, ACPI_FORMAT_UINT64 (ACPI_CAST_PTR (char, Subtable) - ACPI_CAST_PTR (char, Table)));
- while (Offset < Table->Length)
+ while (Offset < Length)
{
/* Common subtable header */

View File

@ -1,55 +0,0 @@
From ce811b4c38b9a09533ee8bafa22813f6e43c023d Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Fri, 18 Sep 2020 16:41:02 -0600
Subject: [PATCH 09/45] Support ASF! tables in a big-endian world
Read the table length properly and it all works right for big-endian.
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump1.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump1.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
+++ acpica-unix2-20220331/source/common/dmtbdump1.c
@@ -358,16 +358,18 @@ AcpiDmDumpAsf (
UINT32 DataOffset = 0;
UINT32 i;
UINT8 Type;
+ UINT32 TableLength;
/* No main table, only subtables */
Subtable = ACPI_ADD_PTR (ACPI_ASF_INFO, Table, Offset);
- while (Offset < Table->Length)
+ TableLength = AcpiUtReadUint32 (&Table->Length);
+ while (Offset < TableLength)
{
/* Common subtable header */
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
Subtable->Header.Length, AcpiDmTableInfoAsfHdr);
if (ACPI_FAILURE (Status))
{
@@ -425,7 +427,7 @@ AcpiDmDumpAsf (
return;
}
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
Subtable->Header.Length, InfoTable);
if (ACPI_FAILURE (Status))
{
@@ -442,7 +444,7 @@ AcpiDmDumpAsf (
for (i = 0; i < DataCount; i++)
{
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, DataOffset,
+ Status = AcpiDmDumpTable (TableLength, DataOffset,
DataTable, DataLength, DataInfoTable);
if (ACPI_FAILURE (Status))
{

View File

@ -1,32 +0,0 @@
From 0c4be57a5e0e45b4197c2d9a0b26462d3b1a9b80 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Fri, 18 Sep 2020 16:54:13 -0600
Subject: [PATCH 10/45] Support CPEP tables in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump1.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump1.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
+++ acpica-unix2-20220331/source/common/dmtbdump1.c
@@ -614,7 +614,7 @@ AcpiDmDumpCpep (
{
ACPI_STATUS Status;
ACPI_CPEP_POLLING *Subtable;
- UINT32 Length = Table->Length;
+ UINT32 Length = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_CPEP);
@@ -629,7 +629,7 @@ AcpiDmDumpCpep (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_CPEP_POLLING, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < Length)
{
AcpiOsPrintf ("\n");
Status = AcpiDmDumpTable (Length, Offset, Subtable,

View File

@ -1,256 +0,0 @@
From 2cb0b87a15682da4f19f707fa3ffece504f94b5a Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Sat, 19 Sep 2020 13:37:38 -0600
Subject: [PATCH 11/45] Support DBG2 table in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump1.c | 37 ++++++++++++++++++--------------
source/compiler/dttable1.c | 43 ++++++++++++++++++++++++--------------
2 files changed, 48 insertions(+), 32 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump1.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
+++ acpica-unix2-20220331/source/common/dmtbdump1.c
@@ -669,7 +669,7 @@ AcpiDmDumpCsrt (
ACPI_CSRT_GROUP *Subtable;
ACPI_CSRT_SHARED_INFO *SharedInfoTable;
ACPI_CSRT_DESCRIPTOR *SubSubtable;
- UINT32 Length = Table->Length;
+ UINT32 Length = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_CSRT);
UINT32 SubOffset;
UINT32 SubSubOffset;
@@ -681,7 +681,7 @@ AcpiDmDumpCsrt (
/* Subtables (Resource Groups) */
Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < Length)
{
/* Resource group subtable */
@@ -715,7 +715,7 @@ AcpiDmDumpCsrt (
Offset + SubOffset);
while ((SubOffset < Subtable->Length) &&
- ((Offset + SubOffset) < Table->Length))
+ ((Offset + SubOffset) < Length))
{
AcpiOsPrintf ("\n");
Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable,
@@ -776,12 +776,13 @@ AcpiDmDumpDbg2 (
{
ACPI_STATUS Status;
ACPI_DBG2_DEVICE *Subtable;
- UINT32 Length = Table->Length;
+ UINT32 Length = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_DBG2);
UINT32 i;
UINT32 ArrayOffset;
UINT32 AbsoluteOffset;
UINT8 *Array;
+ UINT16 SubtableLength;
/* Main table */
@@ -795,11 +796,12 @@ AcpiDmDumpDbg2 (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < Length)
{
AcpiOsPrintf ("\n");
+ SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
Status = AcpiDmDumpTable (Length, Offset, Subtable,
- Subtable->Length, AcpiDmTableInfoDbg2Device);
+ SubtableLength, AcpiDmTableInfoDbg2Device);
if (ACPI_FAILURE (Status))
{
return;
@@ -809,13 +811,13 @@ AcpiDmDumpDbg2 (
for (i = 0; i < Subtable->RegisterCount; i++)
{
- ArrayOffset = Subtable->BaseAddressOffset +
+ ArrayOffset = AcpiUtReadUint16 (&Subtable->BaseAddressOffset) +
(sizeof (ACPI_GENERIC_ADDRESS) * i);
AbsoluteOffset = Offset + ArrayOffset;
Array = (UINT8 *) Subtable + ArrayOffset;
Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
- Subtable->Length, AcpiDmTableInfoDbg2Addr);
+ SubtableLength, AcpiDmTableInfoDbg2Addr);
if (ACPI_FAILURE (Status))
{
return;
@@ -826,13 +828,13 @@ AcpiDmDumpDbg2 (
for (i = 0; i < Subtable->RegisterCount; i++)
{
- ArrayOffset = Subtable->AddressSizeOffset +
+ ArrayOffset = AcpiUtReadUint16 (&Subtable->AddressSizeOffset) +
(sizeof (UINT32) * i);
AbsoluteOffset = Offset + ArrayOffset;
Array = (UINT8 *) Subtable + ArrayOffset;
Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
- Subtable->Length, AcpiDmTableInfoDbg2Size);
+ SubtableLength, AcpiDmTableInfoDbg2Size);
if (ACPI_FAILURE (Status))
{
return;
@@ -842,12 +844,12 @@ AcpiDmDumpDbg2 (
/* Dump the Namestring (required) */
AcpiOsPrintf ("\n");
- ArrayOffset = Subtable->NamepathOffset;
+ ArrayOffset = AcpiUtReadUint16 (&Subtable->NamepathOffset);
AbsoluteOffset = Offset + ArrayOffset;
Array = (UINT8 *) Subtable + ArrayOffset;
Status = AcpiDmDumpTable (Length, AbsoluteOffset, Array,
- Subtable->Length, AcpiDmTableInfoDbg2Name);
+ SubtableLength, AcpiDmTableInfoDbg2Name);
if (ACPI_FAILURE (Status))
{
return;
@@ -857,8 +859,11 @@ AcpiDmDumpDbg2 (
if (Subtable->OemDataOffset)
{
- Status = AcpiDmDumpTable (Length, Offset + Subtable->OemDataOffset,
- Table, Subtable->OemDataLength,
+ Array = (UINT8 *) Subtable + AcpiUtReadUint16 (&Subtable->OemDataOffset);
+
+ Status = AcpiDmDumpTable (Length,
+ Offset + AcpiUtReadUint16 (&Subtable->OemDataOffset),
+ Array, AcpiUtReadUint16 (&Subtable->OemDataLength),
AcpiDmTableInfoDbg2OemData);
if (ACPI_FAILURE (Status))
{
@@ -868,9 +873,9 @@ AcpiDmDumpDbg2 (
/* Point to next subtable */
- Offset += Subtable->Length;
+ Offset += SubtableLength;
Subtable = ACPI_ADD_PTR (ACPI_DBG2_DEVICE, Subtable,
- Subtable->Length);
+ SubtableLength);
}
}
Index: acpica-unix2-20220331/source/compiler/dttable1.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
+++ acpica-unix2-20220331/source/compiler/dttable1.c
@@ -718,6 +718,7 @@ DtCompileCsrt (
DT_FIELD **PFieldList = (DT_FIELD **) List;
UINT32 DescriptorCount;
UINT32 GroupLength;
+ UINT32 Tmp;
/* Subtables (Resource Groups) */
@@ -736,12 +737,13 @@ DtCompileCsrt (
/* Compute the number of resource descriptors */
- GroupLength =
- (ACPI_CAST_PTR (ACPI_CSRT_GROUP,
- Subtable->Buffer))->Length -
- (ACPI_CAST_PTR (ACPI_CSRT_GROUP,
- Subtable->Buffer))->SharedInfoLength -
- sizeof (ACPI_CSRT_GROUP);
+ Tmp = AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
+ Subtable->Buffer))->Length);
+ GroupLength = Tmp;
+ Tmp = AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
+ Subtable->Buffer))->SharedInfoLength);
+ GroupLength -= Tmp;
+ GroupLength -= sizeof (ACPI_CSRT_GROUP);
DescriptorCount = (GroupLength /
sizeof (ACPI_CSRT_DESCRIPTOR));
@@ -829,6 +831,7 @@ DtCompileDbg2 (
ACPI_DBG2_DEVICE *DeviceInfo;
UINT16 CurrentOffset;
UINT32 i;
+ UINT32 Tmp;
/* Main table */
@@ -845,10 +848,12 @@ DtCompileDbg2 (
/* Main table fields */
Dbg2Header = ACPI_CAST_PTR (ACPI_DBG2_HEADER, Subtable->Buffer);
- Dbg2Header->InfoOffset = sizeof (ACPI_TABLE_HEADER) + ACPI_PTR_DIFF (
- ACPI_ADD_PTR (UINT8, Dbg2Header, sizeof (ACPI_DBG2_HEADER)), Dbg2Header);
+ Tmp = sizeof (ACPI_TABLE_HEADER) + ACPI_PTR_DIFF (
+ ACPI_ADD_PTR (UINT8, Dbg2Header, sizeof (ACPI_DBG2_HEADER)), Dbg2Header);
+ AcpiUtWriteUint (&Dbg2Header->InfoOffset, sizeof (UINT32),
+ &Tmp, sizeof (UINT32));
- SubtableCount = Dbg2Header->InfoCount;
+ SubtableCount = Tmp;
DtPushSubtable (Subtable);
/* Process all Device Information subtables (Count = InfoCount) */
@@ -875,7 +880,8 @@ DtCompileDbg2 (
/* BaseAddressRegister GAS array (Required, size is RegisterCount) */
- DeviceInfo->BaseAddressOffset = CurrentOffset;
+ AcpiUtWriteUint (&DeviceInfo->BaseAddressOffset, sizeof (UINT16),
+ &CurrentOffset, sizeof (UINT16));
for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++)
{
Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Addr,
@@ -891,7 +897,8 @@ DtCompileDbg2 (
/* AddressSize array (Required, size = RegisterCount) */
- DeviceInfo->AddressSizeOffset = CurrentOffset;
+ AcpiUtWriteUint (&DeviceInfo->AddressSizeOffset, sizeof (UINT16),
+ &CurrentOffset, sizeof (UINT16));
for (i = 0; *PFieldList && (i < DeviceInfo->RegisterCount); i++)
{
Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Size,
@@ -907,7 +914,8 @@ DtCompileDbg2 (
/* NamespaceString device identifier (Required, size = NamePathLength) */
- DeviceInfo->NamepathOffset = CurrentOffset;
+ AcpiUtWriteUint (&DeviceInfo->NamepathOffset, sizeof (UINT16),
+ &CurrentOffset, sizeof (UINT16));
Status = DtCompileTable (PFieldList, AcpiDmTableInfoDbg2Name,
&Subtable);
if (ACPI_FAILURE (Status))
@@ -917,8 +925,9 @@ DtCompileDbg2 (
/* Update the device info header */
- DeviceInfo->NamepathLength = (UINT16) Subtable->Length;
- CurrentOffset += (UINT16) DeviceInfo->NamepathLength;
+ AcpiUtWriteUint (&DeviceInfo->NamepathLength, sizeof (UINT16),
+ &Subtable->Length, sizeof (UINT32));
+ CurrentOffset += AcpiUtReadUint16 (&DeviceInfo->NamepathLength);
DtInsertSubtable (ParentTable, Subtable);
/* OemData - Variable-length data (Optional, size = OemDataLength) */
@@ -945,8 +954,10 @@ DtCompileDbg2 (
if (Subtable && Subtable->Length)
{
- DeviceInfo->OemDataOffset = CurrentOffset;
- DeviceInfo->OemDataLength = (UINT16) Subtable->Length;
+ AcpiUtWriteUint (&DeviceInfo->OemDataOffset, sizeof (UINT16),
+ &CurrentOffset, sizeof (UINT16));
+ AcpiUtWriteUint (&DeviceInfo->OemDataLength, sizeof (UINT16),
+ &Subtable->Length, sizeof (UINT32));
DtInsertSubtable (ParentTable, Subtable);
}

View File

@ -1,171 +0,0 @@
From 06623392351dfea54bd69507b6672c933a5e3fd2 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Sat, 19 Sep 2020 15:22:00 -0600
Subject: [PATCH 12/45] Support DMAR in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtable.c | 4 ++--
source/common/dmtbdump1.c | 26 +++++++++++++++-----------
source/compiler/dttable1.c | 12 +++++++-----
3 files changed, 24 insertions(+), 18 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtable.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtable.c
+++ acpica-unix2-20220331/source/common/dmtable.c
@@ -1578,13 +1578,13 @@ AcpiDmDumpTable (
/* DMAR subtable types */
- Temp16 = ACPI_GET16 (Target);
+ Temp16 = AcpiUtReadUint16 (Target);
if (Temp16 > ACPI_DMAR_TYPE_RESERVED)
{
Temp16 = ACPI_DMAR_TYPE_RESERVED;
}
- AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
+ AcpiOsPrintf (UINT16_FORMAT, Temp16,
AcpiDmDmarSubnames[Temp16]);
break;
Index: acpica-unix2-20220331/source/common/dmtbdump1.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
+++ acpica-unix2-20220331/source/common/dmtbdump1.c
@@ -899,13 +899,15 @@ AcpiDmDumpDmar (
{
ACPI_STATUS Status;
ACPI_DMAR_HEADER *Subtable;
- UINT32 Length = Table->Length;
+ UINT32 Length = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_DMAR);
ACPI_DMTABLE_INFO *InfoTable;
ACPI_DMAR_DEVICE_SCOPE *ScopeTable;
UINT32 ScopeOffset;
UINT8 *PciPath;
UINT32 PathOffset;
+ UINT16 SubtableType;
+ UINT16 SubtableLength;
/* Main table */
@@ -919,13 +921,14 @@ AcpiDmDumpDmar (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < Length)
{
/* Common subtable header */
AcpiOsPrintf ("\n");
+ SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
Status = AcpiDmDumpTable (Length, Offset, Subtable,
- Subtable->Length, AcpiDmTableInfoDmarHdr);
+ SubtableLength, AcpiDmTableInfoDmarHdr);
if (ACPI_FAILURE (Status))
{
return;
@@ -933,7 +936,8 @@ AcpiDmDumpDmar (
AcpiOsPrintf ("\n");
- switch (Subtable->Type)
+ SubtableType = AcpiUtReadUint16 (&Subtable->Type);
+ switch (SubtableType)
{
case ACPI_DMAR_TYPE_HARDWARE_UNIT:
@@ -974,12 +978,12 @@ AcpiDmDumpDmar (
default:
AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n",
- Subtable->Type);
+ SubtableType);
return;
}
Status = AcpiDmDumpTable (Length, Offset, Subtable,
- Subtable->Length, InfoTable);
+ SubtableLength, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
@@ -988,8 +992,8 @@ AcpiDmDumpDmar (
/*
* Dump the optional device scope entries
*/
- if ((Subtable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
- (Subtable->Type == ACPI_DMAR_TYPE_NAMESPACE))
+ if ((SubtableType == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
+ (SubtableType == ACPI_DMAR_TYPE_NAMESPACE))
{
/* These types do not support device scopes */
@@ -997,7 +1001,7 @@ AcpiDmDumpDmar (
}
ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable, ScopeOffset);
- while (ScopeOffset < Subtable->Length)
+ while (ScopeOffset < SubtableLength)
{
AcpiOsPrintf ("\n");
Status = AcpiDmDumpTable (Length, Offset + ScopeOffset, ScopeTable,
@@ -1038,9 +1042,9 @@ AcpiDmDumpDmar (
NextSubtable:
/* Point to next subtable */
- Offset += Subtable->Length;
+ Offset += SubtableLength;
Subtable = ACPI_ADD_PTR (ACPI_DMAR_HEADER, Subtable,
- Subtable->Length);
+ SubtableLength);
}
}
Index: acpica-unix2-20220331/source/compiler/dttable1.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
+++ acpica-unix2-20220331/source/compiler/dttable1.c
@@ -997,6 +997,7 @@ DtCompileDmar (
ACPI_DMAR_DEVICE_SCOPE *DmarDeviceScope;
UINT32 DeviceScopeLength;
UINT32 PciPathLength;
+ UINT16 DmarHeaderType;
Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmar, &Subtable);
@@ -1027,7 +1028,8 @@ DtCompileDmar (
DmarHeader = ACPI_CAST_PTR (ACPI_DMAR_HEADER, Subtable->Buffer);
- switch (DmarHeader->Type)
+ DmarHeaderType = AcpiUtReadUint16 (&DmarHeader->Type);
+ switch (DmarHeaderType)
{
case ACPI_DMAR_TYPE_HARDWARE_UNIT:
@@ -1079,8 +1081,8 @@ DtCompileDmar (
/*
* Optional Device Scope subtables
*/
- if ((DmarHeader->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
- (DmarHeader->Type == ACPI_DMAR_TYPE_NAMESPACE))
+ if ((DmarHeaderType == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) ||
+ (DmarHeaderType == ACPI_DMAR_TYPE_NAMESPACE))
{
/* These types do not support device scopes */
@@ -1089,8 +1091,8 @@ DtCompileDmar (
}
DtPushSubtable (Subtable);
- DeviceScopeLength = DmarHeader->Length - Subtable->Length -
- ParentTable->Length;
+ DeviceScopeLength = AcpiUtReadUint16 (&DmarHeader->Length) -
+ Subtable->Length - ParentTable->Length;
while (DeviceScopeLength)
{
Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarScope,

View File

@ -1,112 +0,0 @@
From bcdec27f562b0df37546b5e8ad2eab76348062eb Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Sat, 19 Sep 2020 15:44:06 -0600
Subject: [PATCH 13/45] Support DRTM in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump1.c | 25 +++++++++++++++----------
source/compiler/dttable1.c | 6 ++++--
2 files changed, 19 insertions(+), 12 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump1.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
+++ acpica-unix2-20220331/source/common/dmtbdump1.c
@@ -1071,11 +1071,14 @@ AcpiDmDumpDrtm (
ACPI_DRTM_RESOURCE_LIST *DrtmRl;
ACPI_DRTM_DPS_ID *DrtmDps;
UINT32 Count;
+ UINT32 ResourceCount;
+ UINT32 ValidatedTableCount;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
/* Main table */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
AcpiDmTableInfoDrtm);
if (ACPI_FAILURE (Status))
{
@@ -1090,7 +1093,7 @@ AcpiDmDumpDrtm (
DrtmVtl = ACPI_ADD_PTR (ACPI_DRTM_VTABLE_LIST, Table, Offset);
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset,
+ Status = AcpiDmDumpTable (TableLength, Offset,
DrtmVtl, ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST, ValidatedTables),
AcpiDmTableInfoDrtm0);
if (ACPI_FAILURE (Status))
@@ -1103,10 +1106,11 @@ AcpiDmDumpDrtm (
/* Dump Validated table addresses */
Count = 0;
- while ((Offset < Table->Length) &&
- (DrtmVtl->ValidatedTableCount > Count))
+ ValidatedTableCount = AcpiUtReadUint32 (&DrtmVtl->ValidatedTableCount);
+ while ((Offset < TableLength) &&
+ (ValidatedTableCount > Count))
{
- Status = AcpiDmDumpTable (Table->Length, Offset,
+ Status = AcpiDmDumpTable (TableLength, Offset,
ACPI_ADD_PTR (void, Table, Offset), sizeof (UINT64),
AcpiDmTableInfoDrtm0a);
if (ACPI_FAILURE (Status))
@@ -1122,7 +1126,7 @@ AcpiDmDumpDrtm (
DrtmRl = ACPI_ADD_PTR (ACPI_DRTM_RESOURCE_LIST, Table, Offset);
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset,
+ Status = AcpiDmDumpTable (TableLength, Offset,
DrtmRl, ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources),
AcpiDmTableInfoDrtm1);
if (ACPI_FAILURE (Status))
@@ -1135,10 +1139,11 @@ AcpiDmDumpDrtm (
/* Dump the Resource List */
Count = 0;
- while ((Offset < Table->Length) &&
- (DrtmRl->ResourceCount > Count))
+ ResourceCount = AcpiUtReadUint32 (&DrtmRl->ResourceCount);
+ while ((Offset < TableLength) &&
+ (ResourceCount > Count))
{
- Status = AcpiDmDumpTable (Table->Length, Offset,
+ Status = AcpiDmDumpTable (TableLength, Offset,
ACPI_ADD_PTR (void, Table, Offset),
sizeof (ACPI_DRTM_RESOURCE), AcpiDmTableInfoDrtm1a);
if (ACPI_FAILURE (Status))
@@ -1154,7 +1159,7 @@ AcpiDmDumpDrtm (
DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset);
AcpiOsPrintf ("\n");
- (void) AcpiDmDumpTable (Table->Length, Offset,
+ (void) AcpiDmDumpTable (TableLength, Offset,
DrtmDps, sizeof (ACPI_DRTM_DPS_ID), AcpiDmTableInfoDrtm2);
}
Index: acpica-unix2-20220331/source/compiler/dttable1.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
+++ acpica-unix2-20220331/source/compiler/dttable1.c
@@ -1217,7 +1217,8 @@ DtCompileDrtm (
Count++;
}
- DrtmVtl->ValidatedTableCount = Count;
+ AcpiUtWriteUint (&DrtmVtl->ValidatedTableCount, sizeof (UINT32),
+ &Count, sizeof (UINT32));
DtPopSubtable ();
ParentTable = DtPeekSubtable ();
@@ -1255,7 +1256,8 @@ DtCompileDrtm (
Count++;
}
- DrtmRl->ResourceCount = Count;
+ AcpiUtWriteUint(&DrtmRl->ResourceCount, sizeof(UINT32),
+ &Count, sizeof(UINT32));
DtPopSubtable ();
ParentTable = DtPeekSubtable ();

View File

@ -1,32 +0,0 @@
From 70d1047abe010c80c2dd74f6afdc7005b91e6163 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Sat, 19 Sep 2020 15:50:19 -0600
Subject: [PATCH 14/45] Support EINJ in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump1.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump1.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
+++ acpica-unix2-20220331/source/common/dmtbdump1.c
@@ -1183,7 +1183,7 @@ AcpiDmDumpEinj (
{
ACPI_STATUS Status;
ACPI_WHEA_HEADER *Subtable;
- UINT32 Length = Table->Length;
+ UINT32 Length = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_EINJ);
@@ -1198,7 +1198,7 @@ AcpiDmDumpEinj (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < Length)
{
AcpiOsPrintf ("\n");
Status = AcpiDmDumpTable (Length, Offset, Subtable,

View File

@ -1,32 +0,0 @@
From e588961ca36e70c24aa1c49e96bcd1997bf98f89 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Sat, 19 Sep 2020 15:54:56 -0600
Subject: [PATCH 15/45] Support ERST in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump1.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump1.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
+++ acpica-unix2-20220331/source/common/dmtbdump1.c
@@ -1236,7 +1236,7 @@ AcpiDmDumpErst (
{
ACPI_STATUS Status;
ACPI_WHEA_HEADER *Subtable;
- UINT32 Length = Table->Length;
+ UINT32 Length = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_ERST);
@@ -1251,7 +1251,7 @@ AcpiDmDumpErst (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_WHEA_HEADER, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < Length)
{
AcpiOsPrintf ("\n");
Status = AcpiDmDumpTable (Length, Offset, Subtable,

View File

@ -1,189 +0,0 @@
From b3051bc2bad8988f3ad81a8307de6f1d0eef4ace Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Sun, 20 Sep 2020 11:42:21 -0600
Subject: [PATCH 16/45] Support FADT (aka, FACP) in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump.c | 25 ++++++++++++-----------
source/components/tables/tbfadt.c | 34 +++++++++++++++++++++++--------
2 files changed, 38 insertions(+), 21 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump.c
+++ acpica-unix2-20220331/source/common/dmtbdump.c
@@ -417,11 +417,12 @@ AcpiDmDumpFadt (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
/* Always dump the minimum FADT revision 1 fields (ACPI 1.0) */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
AcpiDmTableInfoFadt1);
if (ACPI_FAILURE (Status))
{
@@ -430,10 +431,10 @@ AcpiDmDumpFadt (
/* Check for FADT revision 2 fields (ACPI 1.0B MS extensions) */
- if ((Table->Length > ACPI_FADT_V1_SIZE) &&
- (Table->Length <= ACPI_FADT_V2_SIZE))
+ if ((TableLength > ACPI_FADT_V1_SIZE) &&
+ (TableLength <= ACPI_FADT_V2_SIZE))
{
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
AcpiDmTableInfoFadt2);
if (ACPI_FAILURE (Status))
{
@@ -443,9 +444,9 @@ AcpiDmDumpFadt (
/* Check for FADT revision 3/4 fields and up (ACPI 2.0+ extended data) */
- else if (Table->Length > ACPI_FADT_V2_SIZE)
+ else if (TableLength > ACPI_FADT_V2_SIZE)
{
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
AcpiDmTableInfoFadt3);
if (ACPI_FAILURE (Status))
{
@@ -454,9 +455,9 @@ AcpiDmDumpFadt (
/* Check for FADT revision 5 fields and up (ACPI 5.0+) */
- if (Table->Length > ACPI_FADT_V3_SIZE)
+ if (TableLength > ACPI_FADT_V3_SIZE)
{
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
AcpiDmTableInfoFadt5);
if (ACPI_FAILURE (Status))
{
@@ -466,9 +467,9 @@ AcpiDmDumpFadt (
/* Check for FADT revision 6 fields and up (ACPI 6.0+) */
- if (Table->Length > ACPI_FADT_V3_SIZE)
+ if (TableLength > ACPI_FADT_V3_SIZE)
{
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0,
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0,
AcpiDmTableInfoFadt6);
if (ACPI_FAILURE (Status))
{
@@ -479,11 +480,11 @@ AcpiDmDumpFadt (
/* Validate various fields in the FADT, including length */
- AcpiTbCreateLocalFadt (Table, Table->Length);
+ AcpiTbCreateLocalFadt (Table, TableLength);
/* Validate FADT length against the revision */
- AcpiDmValidateFadtLength (Table->Revision, Table->Length);
+ AcpiDmValidateFadtLength (Table->Revision, TableLength);
}
Index: acpica-unix2-20220331/source/components/tables/tbfadt.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/tables/tbfadt.c
+++ acpica-unix2-20220331/source/components/tables/tbfadt.c
@@ -289,7 +289,6 @@ AcpiTbSelectAddress (
UINT32 Address32,
UINT64 Address64)
{
-
if (!Address64)
{
/* 64-bit address is zero, use 32-bit address */
@@ -520,6 +519,9 @@ AcpiTbConvertFadt (
UINT8 Length;
UINT8 Flags;
UINT32 i;
+ UINT32 Tmp;
+ UINT32 Value32;
+ UINT64 Value64;
/*
@@ -533,7 +535,7 @@ AcpiTbConvertFadt (
* Note: The FADT revision value is unreliable. Only the length can be
* trusted.
*/
- if (AcpiGbl_FADT.Header.Length <= ACPI_FADT_V2_SIZE)
+ if (AcpiUtReadUint32 (&AcpiGbl_FADT.Header.Length) <= ACPI_FADT_V2_SIZE)
{
AcpiGbl_FADT.PreferredProfile = 0;
AcpiGbl_FADT.PstateControl = 0;
@@ -546,14 +548,19 @@ AcpiTbConvertFadt (
* current FADT version as defined by the ACPI specification.
* Thus, we will have a common FADT internally.
*/
- AcpiGbl_FADT.Header.Length = sizeof (ACPI_TABLE_FADT);
+ Tmp = sizeof (ACPI_TABLE_FADT);
+ AcpiUtWriteUint (&AcpiGbl_FADT.Header.Length, sizeof (UINT32),
+ &Tmp, sizeof (UINT32));
/*
* Expand the 32-bit DSDT addresses to 64-bit as necessary.
* Later ACPICA code will always use the X 64-bit field.
*/
- AcpiGbl_FADT.XDsdt = AcpiTbSelectAddress ("DSDT",
- AcpiGbl_FADT.Dsdt, AcpiGbl_FADT.XDsdt);
+ Value32 = AcpiUtReadUint32 (&AcpiGbl_FADT.Dsdt);
+ Value64 = AcpiUtReadUint64 (&AcpiGbl_FADT.XDsdt);
+ Value64 = AcpiTbSelectAddress ("DSDT", Value32, Value64);
+ AcpiUtWriteUint (&AcpiGbl_FADT.XDsdt, sizeof (UINT64),
+ &Value64, sizeof (UINT64));
/* If Hardware Reduced flag is set, we are all done */
@@ -614,7 +621,11 @@ AcpiTbConvertFadt (
{
if (Address64->Address)
{
- if (Address64->Address != (UINT64) Address32)
+ Value32 = AcpiUtReadUint32 (&Address32);
+ Value64 = AcpiUtReadUint64 (&Address64->Address);
+
+ /* if (Address64->Address != (UINT64) Address32) */
+ if (Value64 != (UINT64) Value32)
{
/* Address mismatch */
@@ -655,9 +666,10 @@ AcpiTbConvertFadt (
*/
if (!Address64->Address || AcpiGbl_Use32BitFadtAddresses)
{
+ Value32 = AcpiUtReadUint32 (&Address32);
AcpiTbInitGenericAddress (Address64,
ACPI_ADR_SPACE_SYSTEM_IO, Length,
- (UINT64) Address32, Name, Flags);
+ (UINT64) Value32, Name, Flags);
}
}
@@ -780,10 +792,14 @@ AcpiTbSetupFadtRegisters (
if (Source64->Address)
{
+ UINT64 Address64;
+
+ Address64 = AcpiUtReadUint64 (&Source64->Address);
+ Address64 +=
+ (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth);
AcpiTbInitGenericAddress (FadtPmInfoTable[i].Target,
Source64->SpaceId, Pm1RegisterByteWidth,
- Source64->Address +
- (FadtPmInfoTable[i].RegisterNum * Pm1RegisterByteWidth),
+ Address64,
"PmRegisters", 0);
}
}

View File

@ -1,85 +0,0 @@
From 35f533074fb78d52e87c5a14406a136480a6fe62 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Tue, 22 Sep 2020 17:51:45 -0600
Subject: [PATCH 17/45] Support most FPDTs in a big-endian world
NB: there is no support for vendor specific records even in
the little-endian version.
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump1.c | 12 +++++++-----
source/compiler/dttable1.c | 4 +++-
2 files changed, 10 insertions(+), 6 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump1.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
+++ acpica-unix2-20220331/source/common/dmtbdump1.c
@@ -1289,9 +1289,10 @@ AcpiDmDumpFpdt (
{
ACPI_STATUS Status;
ACPI_FPDT_HEADER *Subtable;
- UINT32 Length = Table->Length;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_FPDT);
ACPI_DMTABLE_INFO *InfoTable;
+ UINT16 SubtableType;
/* There is no main table (other than the standard ACPI header) */
@@ -1299,19 +1300,20 @@ AcpiDmDumpFpdt (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
/* Common subtable header */
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
Subtable->Length, AcpiDmTableInfoFpdtHdr);
if (ACPI_FAILURE (Status))
{
return;
}
- switch (Subtable->Type)
+ SubtableType = AcpiUtReadUint16 (&Subtable->Type);
+ switch (SubtableType)
{
case ACPI_FPDT_TYPE_BOOT:
@@ -1338,7 +1340,7 @@ AcpiDmDumpFpdt (
goto NextSubtable;
}
- Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
Subtable->Length, InfoTable);
if (ACPI_FAILURE (Status))
{
Index: acpica-unix2-20220331/source/compiler/dttable1.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
+++ acpica-unix2-20220331/source/compiler/dttable1.c
@@ -1493,6 +1493,7 @@ DtCompileFpdt (
ACPI_DMTABLE_INFO *InfoTable;
DT_FIELD **PFieldList = (DT_FIELD **) List;
DT_FIELD *SubtableStart;
+ UINT16 SubtableType;
while (*PFieldList)
@@ -1511,7 +1512,8 @@ DtCompileFpdt (
FpdtHeader = ACPI_CAST_PTR (ACPI_FPDT_HEADER, Subtable->Buffer);
- switch (FpdtHeader->Type)
+ SubtableType = AcpiUtReadUint16 (&FpdtHeader->Type);
+ switch (SubtableType)
{
case ACPI_FPDT_TYPE_BOOT:

View File

@ -1,69 +0,0 @@
From 492e41a24fd088c7ab609ee8ad518f69c9cd29e3 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Tue, 22 Sep 2020 18:12:01 -0600
Subject: [PATCH 18/45] Support GTDT in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump1.c | 13 +++++++++----
source/compiler/dttable1.c | 9 +++++++--
2 files changed, 16 insertions(+), 6 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump1.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
+++ acpica-unix2-20220331/source/common/dmtbdump1.c
@@ -1376,7 +1376,7 @@ AcpiDmDumpGtdt (
{
ACPI_STATUS Status;
ACPI_GTDT_HEADER *Subtable;
- UINT32 Length = Table->Length;
+ UINT32 Length = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_GTDT);
ACPI_DMTABLE_INFO *InfoTable;
UINT32 SubtableLength;
@@ -1412,7 +1412,7 @@ AcpiDmDumpGtdt (
/* Subtables */
- while (Offset < Table->Length)
+ while (Offset < Length)
{
/* Common subtable header */
@@ -1430,8 +1430,13 @@ AcpiDmDumpGtdt (
case ACPI_GTDT_TYPE_TIMER_BLOCK:
SubtableLength = sizeof (ACPI_GTDT_TIMER_BLOCK);
- GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
- Subtable))->TimerCount;
+ {
+ UINT32 Tmp32;
+
+ Tmp32 = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
+ Subtable))->TimerCount;
+ GtCount = AcpiUtReadUint32 (&Tmp32);
+ }
InfoTable = AcpiDmTableInfoGtdt0;
break;
Index: acpica-unix2-20220331/source/compiler/dttable1.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
+++ acpica-unix2-20220331/source/compiler/dttable1.c
@@ -1439,8 +1439,13 @@ DtCompileGtdt (
DtPushSubtable (Subtable);
ParentTable = DtPeekSubtable ();
- GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
- Subtable->Buffer - sizeof(ACPI_GTDT_HEADER)))->TimerCount;
+ {
+ UINT32 Tmp32;
+
+ Tmp32 = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK,
+ Subtable->Buffer - sizeof (ACPI_GTDT_HEADER)))->TimerCount;
+ GtCount = AcpiUtReadUint32 (&Tmp32);
+ }
while (GtCount)
{

View File

@ -1,75 +0,0 @@
From 6b73a4881e436bb8cf86c05c1cc4b5360efe1c7f Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Wed, 23 Sep 2020 11:54:49 -0600
Subject: [PATCH 19/45] Support HEST in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump1.c | 10 ++++++----
source/compiler/dttable1.c | 4 +++-
2 files changed, 9 insertions(+), 5 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump1.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
+++ acpica-unix2-20220331/source/common/dmtbdump1.c
@@ -1517,12 +1517,13 @@ AcpiDmDumpHest (
{
ACPI_STATUS Status;
ACPI_HEST_HEADER *Subtable;
- UINT32 Length = Table->Length;
+ UINT32 Length = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_HEST);
ACPI_DMTABLE_INFO *InfoTable;
UINT32 SubtableLength;
UINT32 BankCount;
ACPI_HEST_IA_ERROR_BANK *BankTable;
+ UINT16 SubtableType;
/* Main table */
@@ -1536,10 +1537,11 @@ AcpiDmDumpHest (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_HEST_HEADER, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < Length)
{
BankCount = 0;
- switch (Subtable->Type)
+ SubtableType = Subtable->Type;
+ switch (SubtableType)
{
case ACPI_HEST_TYPE_IA32_CHECK:
@@ -1606,7 +1608,7 @@ AcpiDmDumpHest (
/* Cannot continue on unknown type - no length */
AcpiOsPrintf ("\n**** Unknown HEST subtable type 0x%X\n",
- Subtable->Type);
+ SubtableType);
return;
}
Index: acpica-unix2-20220331/source/compiler/dttable1.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
+++ acpica-unix2-20220331/source/compiler/dttable1.c
@@ -1575,6 +1575,7 @@ DtCompileHest (
DT_FIELD *SubtableStart;
ACPI_DMTABLE_INFO *InfoTable;
UINT16 Type;
+ UINT16 Tmp16;
UINT32 BankCount;
@@ -1593,7 +1594,8 @@ DtCompileHest (
/* Get subtable type */
SubtableStart = *PFieldList;
- DtCompileInteger ((UINT8 *) &Type, *PFieldList, 2, 0);
+ DtCompileInteger ((UINT8 *) &Tmp16, *PFieldList, 2, 0);
+ Type = AcpiUtReadUint32 (&Tmp16);
switch (Type)
{

View File

@ -1,37 +0,0 @@
From 198abe6e9fcb03676513146bf2f9b8ccc49e5827 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Wed, 23 Sep 2020 12:11:46 -0600
Subject: [PATCH 20/45] Support RSDT ('RSD PTR') in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump.c
+++ acpica-unix2-20220331/source/common/dmtbdump.c
@@ -336,6 +336,7 @@ AcpiDmDumpRsdt (
UINT32 Entries;
UINT32 Offset;
UINT32 i;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
/* Point to start of table pointer array */
@@ -345,12 +346,12 @@ AcpiDmDumpRsdt (
/* RSDT uses 32-bit pointers */
- Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32);
+ Entries = (TableLength - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT32);
for (i = 0; i < Entries; i++)
{
AcpiDmLineHeader2 (Offset, sizeof (UINT32), "ACPI Table Address", i);
- AcpiOsPrintf ("%8.8X\n", Array[i]);
+ AcpiOsPrintf ("%8.8X\n", AcpiUtReadUint32 (&Array[i]));
Offset += sizeof (UINT32);
}
}

View File

@ -1,38 +0,0 @@
From 75d974e42fefabfd6684d62f58bff678b55f396b Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Wed, 23 Sep 2020 12:16:37 -0600
Subject: [PATCH 21/45] Support XSDT in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump.c
+++ acpica-unix2-20220331/source/common/dmtbdump.c
@@ -377,6 +377,7 @@ AcpiDmDumpXsdt (
UINT32 Entries;
UINT32 Offset;
UINT32 i;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
/* Point to start of table pointer array */
@@ -386,12 +387,13 @@ AcpiDmDumpXsdt (
/* XSDT uses 64-bit pointers */
- Entries = (Table->Length - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64);
+ Entries = (TableLength - sizeof (ACPI_TABLE_HEADER)) / sizeof (UINT64);
for (i = 0; i < Entries; i++)
{
AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i);
- AcpiOsPrintf ("%8.8X%8.8X\n", ACPI_FORMAT_UINT64 (Array[i]));
+ AcpiOsPrintf ("%8.8X%8.8X\n",
+ ACPI_FORMAT_UINT64 (AcpiUtReadUint64 (&Array[i])));
Offset += sizeof (UINT64);
}
}

View File

@ -1,52 +0,0 @@
From 724fcc83d359e4c8abbd2a48755e96049afa06d6 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Wed, 23 Sep 2020 12:25:38 -0600
Subject: [PATCH 22/45] Support SRAT in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump3.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump3.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
+++ acpica-unix2-20220331/source/common/dmtbdump3.c
@@ -173,11 +173,12 @@ AcpiDmDumpSrat (
UINT32 Offset = sizeof (ACPI_TABLE_SRAT);
ACPI_SUBTABLE_HEADER *Subtable;
ACPI_DMTABLE_INFO *InfoTable;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
/* Main table */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSrat);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoSrat);
if (ACPI_FAILURE (Status))
{
return;
@@ -186,12 +187,12 @@ AcpiDmDumpSrat (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
/* Common subtable header */
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
Subtable->Length, AcpiDmTableInfoSratHdr);
if (ACPI_FAILURE (Status))
{
@@ -250,7 +251,7 @@ AcpiDmDumpSrat (
}
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
Subtable->Length, InfoTable);
if (ACPI_FAILURE (Status))
{

View File

@ -1,61 +0,0 @@
From b11d50752feb9f1b52db076d1fb4753b30a53642 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Wed, 23 Sep 2020 12:49:52 -0600
Subject: [PATCH 23/45] Support SLIT in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump3.c | 8 +++++---
source/compiler/dttable2.c | 2 +-
2 files changed, 6 insertions(+), 4 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump3.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
+++ acpica-unix2-20220331/source/common/dmtbdump3.c
@@ -96,11 +96,12 @@ AcpiDmDumpSlit (
UINT32 Localities;
UINT32 i;
UINT32 j;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
/* Main table */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoSlit);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoSlit);
if (ACPI_FAILURE (Status))
{
return;
@@ -108,7 +109,8 @@ AcpiDmDumpSlit (
/* Display the Locality NxN Matrix */
- Localities = (UINT32) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount;
+ Localities = (UINT32)
+ AcpiUtReadUint64 (&ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->LocalityCount);
Offset = ACPI_OFFSET (ACPI_TABLE_SLIT, Entry[0]);
Row = (UINT8 *) ACPI_CAST_PTR (ACPI_TABLE_SLIT, Table)->Entry;
@@ -121,7 +123,7 @@ AcpiDmDumpSlit (
{
/* Check for beyond EOT */
- if (Offset >= Table->Length)
+ if (Offset >= TableLength)
{
AcpiOsPrintf (
"\n**** Not enough room in table for all localities\n");
Index: acpica-unix2-20220331/source/compiler/dttable2.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
+++ acpica-unix2-20220331/source/compiler/dttable2.c
@@ -2234,7 +2234,7 @@ DtCompileSlit (
ParentTable = DtPeekSubtable ();
DtInsertSubtable (ParentTable, Subtable);
- Localities = *ACPI_CAST_PTR (UINT32, Subtable->Buffer);
+ Localities = (UINT32) AcpiUtReadUint64 (Subtable->Buffer);
LocalityBuffer = UtLocalCalloc (Localities);
LocalityListLength = 0;

View File

@ -1,43 +0,0 @@
From ae38e1578d18abf41330bb3dbaef9ea56a52f49b Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Wed, 23 Sep 2020 15:44:21 -0600
Subject: [PATCH 24/45] Support MSCT in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump2.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -1185,11 +1185,12 @@ AcpiDmDumpMsct (
ACPI_STATUS Status;
UINT32 Offset = sizeof (ACPI_TABLE_MSCT);
ACPI_MSCT_PROXIMITY *Subtable;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
/* Main table */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMsct);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoMsct);
if (ACPI_FAILURE (Status))
{
return;
@@ -1198,12 +1199,12 @@ AcpiDmDumpMsct (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_MSCT_PROXIMITY, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
/* Common subtable header */
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
sizeof (ACPI_MSCT_PROXIMITY), AcpiDmTableInfoMsct0);
if (ACPI_FAILURE (Status))
{

View File

@ -1,152 +0,0 @@
From 0a25688f36df62579f4dd0444ceba33a0f8d4dcc Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Wed, 23 Sep 2020 16:08:24 -0600
Subject: [PATCH 25/45] Support MPST in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump2.c | 33 +++++++++++++++++++--------------
source/compiler/dttable2.c | 8 ++++----
2 files changed, 23 insertions(+), 18 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -1047,11 +1047,13 @@ AcpiDmDumpMpst (
UINT16 SubtableCount;
UINT32 PowerStateCount;
UINT32 ComponentCount;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
+ UINT16 Tmp16;
/* Main table */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMpst);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoMpst);
if (ACPI_FAILURE (Status))
{
return;
@@ -1059,13 +1061,14 @@ AcpiDmDumpMpst (
/* Subtable: Memory Power Node(s) */
- SubtableCount = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount;
+ Tmp16 = (ACPI_CAST_PTR (ACPI_TABLE_MPST, Table))->PowerNodeCount;
+ SubtableCount = AcpiUtReadUint16 (&Tmp16);
Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Table, Offset);
- while ((Offset < Table->Length) && SubtableCount)
+ while ((Offset < TableLength) && SubtableCount)
{
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable0,
sizeof (ACPI_MPST_POWER_NODE), AcpiDmTableInfoMpst0);
if (ACPI_FAILURE (Status))
{
@@ -1074,8 +1077,8 @@ AcpiDmDumpMpst (
/* Extract the sub-subtable counts */
- PowerStateCount = Subtable0->NumPowerStates;
- ComponentCount = Subtable0->NumPhysicalComponents;
+ PowerStateCount = AcpiUtReadUint16 (&Subtable0->NumPowerStates);
+ ComponentCount = AcpiUtReadUint16 (&Subtable0->NumPhysicalComponents);
Offset += sizeof (ACPI_MPST_POWER_NODE);
/* Sub-subtables - Memory Power State Structure(s) */
@@ -1086,7 +1089,7 @@ AcpiDmDumpMpst (
while (PowerStateCount)
{
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0A,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable0A,
sizeof (ACPI_MPST_POWER_STATE), AcpiDmTableInfoMpst0A);
if (ACPI_FAILURE (Status))
{
@@ -1109,7 +1112,7 @@ AcpiDmDumpMpst (
while (ComponentCount)
{
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable0B,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable0B,
sizeof (ACPI_MPST_COMPONENT), AcpiDmTableInfoMpst0B);
if (ACPI_FAILURE (Status))
{
@@ -1126,22 +1129,24 @@ AcpiDmDumpMpst (
SubtableCount--;
Subtable0 = ACPI_ADD_PTR (ACPI_MPST_POWER_NODE, Subtable0,
sizeof (ACPI_MPST_POWER_NODE) +
- (sizeof (ACPI_MPST_POWER_STATE) * Subtable0->NumPowerStates) +
- (sizeof (ACPI_MPST_COMPONENT) * Subtable0->NumPhysicalComponents));
+ (sizeof (ACPI_MPST_POWER_STATE) *
+ AcpiUtReadUint16 (&Subtable0->NumPowerStates)) +
+ (sizeof (ACPI_MPST_COMPONENT) *
+ AcpiUtReadUint16 (&Subtable0->NumPhysicalComponents)));
}
/* Subtable: Count of Memory Power State Characteristic structures */
AcpiOsPrintf ("\n");
Subtable1 = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable0);
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable1,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable1,
sizeof (ACPI_MPST_DATA_HDR), AcpiDmTableInfoMpst1);
if (ACPI_FAILURE (Status))
{
return;
}
- SubtableCount = Subtable1->CharacteristicsCount;
+ SubtableCount = AcpiUtReadUint16 (&Subtable1->CharacteristicsCount);
Offset += sizeof (ACPI_MPST_DATA_HDR);
/* Subtable: Memory Power State Characteristics structure(s) */
@@ -1149,10 +1154,10 @@ AcpiDmDumpMpst (
Subtable2 = ACPI_ADD_PTR (ACPI_MPST_POWER_DATA, Subtable1,
sizeof (ACPI_MPST_DATA_HDR));
- while ((Offset < Table->Length) && SubtableCount)
+ while ((Offset < TableLength) && SubtableCount)
{
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable2,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable2,
sizeof (ACPI_MPST_POWER_DATA), AcpiDmTableInfoMpst2);
if (ACPI_FAILURE (Status))
{
Index: acpica-unix2-20220331/source/compiler/dttable2.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
+++ acpica-unix2-20220331/source/compiler/dttable2.c
@@ -359,7 +359,7 @@ DtCompileMpst (
DtPushSubtable (Subtable);
MpstChannelInfo = ACPI_CAST_PTR (ACPI_MPST_CHANNEL, Subtable->Buffer);
- SubtableCount = MpstChannelInfo->PowerNodeCount;
+ SubtableCount = AcpiUtReadUint16 (&MpstChannelInfo->PowerNodeCount);
while (*PFieldList && SubtableCount)
{
@@ -377,8 +377,8 @@ DtCompileMpst (
DtPushSubtable (Subtable);
MpstPowerNode = ACPI_CAST_PTR (ACPI_MPST_POWER_NODE, Subtable->Buffer);
- PowerStateCount = MpstPowerNode->NumPowerStates;
- ComponentCount = MpstPowerNode->NumPhysicalComponents;
+ PowerStateCount = AcpiUtReadUint16 (&MpstPowerNode->NumPowerStates);
+ ComponentCount = AcpiUtReadUint16 (&MpstPowerNode->NumPhysicalComponents);
ParentTable = DtPeekSubtable ();
@@ -431,7 +431,7 @@ DtCompileMpst (
DtPushSubtable (Subtable);
MpstDataHeader = ACPI_CAST_PTR (ACPI_MPST_DATA_HDR, Subtable->Buffer);
- SubtableCount = MpstDataHeader->CharacteristicsCount;
+ SubtableCount = AcpiUtReadUint16(&MpstDataHeader->CharacteristicsCount);
ParentTable = DtPeekSubtable ();

View File

@ -1,227 +0,0 @@
From 5aec8511fc433a71cb8b6d26be464355d0c3f5cc Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Thu, 24 Sep 2020 15:25:53 -0600
Subject: [PATCH 26/45] Support NFIT in a big-endian world
NB: this required correcting the starting pointer for the NFIT
SMBIOS subtable; otherwise, disassembly did not work properly.
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtable.c | 4 ++--
source/common/dmtbdump2.c | 49 ++++++++++++++++++++++----------------
source/compiler/dttable2.c | 11 ++++++---
3 files changed, 39 insertions(+), 25 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtable.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtable.c
+++ acpica-unix2-20220331/source/common/dmtable.c
@@ -1766,13 +1766,13 @@ AcpiDmDumpTable (
/* NFIT subtable types */
- Temp16 = ACPI_GET16 (Target);
+ Temp16 = AcpiUtReadUint16 (Target);
if (Temp16 > ACPI_NFIT_TYPE_RESERVED)
{
Temp16 = ACPI_NFIT_TYPE_RESERVED;
}
- AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target),
+ AcpiOsPrintf (UINT16_FORMAT, Temp16,
AcpiDmNfitSubnames[Temp16]);
break;
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -1244,18 +1244,23 @@ AcpiDmDumpNfit (
ACPI_STATUS Status;
UINT32 Offset = sizeof (ACPI_TABLE_NFIT);
UINT32 FieldOffset = 0;
- UINT32 Length;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
ACPI_NFIT_HEADER *Subtable;
ACPI_DMTABLE_INFO *InfoTable;
ACPI_NFIT_INTERLEAVE *Interleave = NULL;
ACPI_NFIT_SMBIOS *SmbiosInfo = NULL;
ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL;
UINT32 i;
+ UINT32 Length;
+ UINT32 LineCount;
+ UINT16 SubtableLength;
+ UINT16 SubtableType;
+ UINT16 HintCount;
/* Main table */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoNfit);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoNfit);
if (ACPI_FAILURE (Status))
{
return;
@@ -1264,19 +1269,21 @@ AcpiDmDumpNfit (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
/* NFIT subtable header */
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
- Subtable->Length, AcpiDmTableInfoNfitHdr);
+ SubtableType = AcpiUtReadUint16 (&Subtable->Type);
+ SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+ SubtableLength, AcpiDmTableInfoNfitHdr);
if (ACPI_FAILURE (Status))
{
return;
}
- switch (Subtable->Type)
+ switch (SubtableType)
{
case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
@@ -1327,11 +1334,11 @@ AcpiDmDumpNfit (
default:
AcpiOsPrintf ("\n**** Unknown NFIT subtable type 0x%X\n",
- Subtable->Type);
+ SubtableType);
/* Attempt to continue */
- if (!Subtable->Length)
+ if (!SubtableLength)
{
AcpiOsPrintf ("Invalid zero length subtable\n");
return;
@@ -1340,8 +1347,8 @@ AcpiDmDumpNfit (
}
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
- Subtable->Length, InfoTable);
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+ SubtableLength, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
@@ -1349,14 +1356,15 @@ AcpiDmDumpNfit (
/* Per-subtable variable-length fields */
- switch (Subtable->Type)
+ switch (SubtableType)
{
case ACPI_NFIT_TYPE_INTERLEAVE:
Interleave = ACPI_CAST_PTR (ACPI_NFIT_INTERLEAVE, Subtable);
- for (i = 0; i < Interleave->LineCount; i++)
+ LineCount = AcpiUtReadUint32 (&Interleave->LineCount);
+ for (i = 0; i < LineCount; i++)
{
- Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset,
+ Status = AcpiDmDumpTable (TableLength, Offset + FieldOffset,
&Interleave->LineOffset[i],
sizeof (UINT32), AcpiDmTableInfoNfit2a);
if (ACPI_FAILURE (Status))
@@ -1370,14 +1378,14 @@ AcpiDmDumpNfit (
case ACPI_NFIT_TYPE_SMBIOS:
- Length = Subtable->Length -
+ Length = SubtableLength -
sizeof (ACPI_NFIT_SMBIOS) + sizeof (UINT8);
if (Length)
{
- Status = AcpiDmDumpTable (Table->Length,
+ Status = AcpiDmDumpTable (TableLength,
sizeof (ACPI_NFIT_SMBIOS) - sizeof (UINT8),
- SmbiosInfo,
+ SmbiosInfo + Offset,
Length, AcpiDmTableInfoNfit3a);
if (ACPI_FAILURE (Status))
{
@@ -1390,9 +1398,10 @@ AcpiDmDumpNfit (
case ACPI_NFIT_TYPE_FLUSH_ADDRESS:
Hint = ACPI_CAST_PTR (ACPI_NFIT_FLUSH_ADDRESS, Subtable);
- for (i = 0; i < Hint->HintCount; i++)
+ HintCount = AcpiUtReadUint16 (&Hint->HintCount);
+ for (i = 0; i < HintCount; i++)
{
- Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset,
+ Status = AcpiDmDumpTable (TableLength, Offset + FieldOffset,
&Hint->HintAddress[i],
sizeof (UINT64), AcpiDmTableInfoNfit6a);
if (ACPI_FAILURE (Status))
@@ -1411,8 +1420,8 @@ AcpiDmDumpNfit (
NextSubtable:
/* Point to next subtable */
- Offset += Subtable->Length;
- Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, Subtable->Length);
+ Offset += SubtableLength;
+ Subtable = ACPI_ADD_PTR (ACPI_NFIT_HEADER, Subtable, SubtableLength);
}
}
Index: acpica-unix2-20220331/source/compiler/dttable2.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
+++ acpica-unix2-20220331/source/compiler/dttable2.c
@@ -506,6 +506,7 @@ DtCompileNfit (
UINT32 Count;
ACPI_NFIT_INTERLEAVE *Interleave = NULL;
ACPI_NFIT_FLUSH_ADDRESS *Hint = NULL;
+ UINT16 NfitHeaderType;
/* Main table */
@@ -539,7 +540,8 @@ DtCompileNfit (
NfitHeader = ACPI_CAST_PTR (ACPI_NFIT_HEADER, Subtable->Buffer);
- switch (NfitHeader->Type)
+ NfitHeaderType = AcpiUtReadUint16 (&NfitHeader->Type);
+ switch (NfitHeaderType)
{
case ACPI_NFIT_TYPE_SYSTEM_ADDRESS:
@@ -599,7 +601,7 @@ DtCompileNfit (
DtInsertSubtable (ParentTable, Subtable);
DtPopSubtable ();
- switch (NfitHeader->Type)
+ switch (NfitHeaderType)
{
case ACPI_NFIT_TYPE_INTERLEAVE:
@@ -625,7 +627,8 @@ DtCompileNfit (
Count++;
}
- Interleave->LineCount = Count;
+ AcpiUtWriteUint (&Interleave->LineCount, sizeof (UINT32),
+ &Count, sizeof (UINT32));
break;
case ACPI_NFIT_TYPE_SMBIOS:
@@ -671,6 +674,8 @@ DtCompileNfit (
}
Hint->HintCount = (UINT16) Count;
+ AcpiUtWriteUint (&Hint->HintCount, sizeof (UINT16),
+ &Count, sizeof (UINT32));
break;
default:

View File

@ -1,206 +0,0 @@
From 3d1ac6e76ad0c0d6454671b190ccbbfafb0cb4cc Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Tue, 29 Jun 2021 16:03:36 -0600
Subject: [PATCH 27/45] Support SDEV in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump2.c | 48 +++++++++++++++++++++-----------------
source/compiler/dttable2.c | 27 ++++++++++++++++++++-
2 files changed, 52 insertions(+), 23 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -2581,7 +2581,7 @@ AcpiDmDumpSdev (
ACPI_SDEV_NAMESPACE *Namesp;
ACPI_DMTABLE_INFO *InfoTable;
ACPI_DMTABLE_INFO *SecureComponentInfoTable;
- UINT32 Length = Table->Length;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_SDEV);
UINT16 PathOffset;
UINT16 PathLength;
@@ -2589,11 +2589,12 @@ AcpiDmDumpSdev (
UINT16 VendorDataLength;
ACPI_SDEV_SECURE_COMPONENT *SecureComponent = NULL;
UINT32 CurrentOffset = 0;
+ UINT16 SubtableLength;
/* Main table */
- Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSdev);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoSdev);
if (ACPI_FAILURE (Status))
{
return;
@@ -2602,13 +2603,14 @@ AcpiDmDumpSdev (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
/* Common subtable header */
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
- Subtable->Length, AcpiDmTableInfoSdevHdr);
+ SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+ SubtableLength, AcpiDmTableInfoSdevHdr);
if (ACPI_FAILURE (Status))
{
return;
@@ -2631,8 +2633,8 @@ AcpiDmDumpSdev (
}
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, 0, Subtable,
- Subtable->Length, InfoTable);
+ Status = AcpiDmDumpTable (TableLength, 0, Subtable,
+ SubtableLength, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
@@ -2691,12 +2693,12 @@ AcpiDmDumpSdev (
/* Dump the PCIe device ID(s) */
Namesp = ACPI_CAST_PTR (ACPI_SDEV_NAMESPACE, Subtable);
- PathOffset = Namesp->DeviceIdOffset;
- PathLength = Namesp->DeviceIdLength;
+ PathOffset = AcpiUtReadUint16 (&Namesp->DeviceIdOffset);
+ PathLength = AcpiUtReadUint16 (&Namesp->DeviceIdLength);
if (PathLength)
{
- Status = AcpiDmDumpTable (Table->Length, CurrentOffset,
+ Status = AcpiDmDumpTable (TableLength, CurrentOffset,
ACPI_ADD_PTR (UINT8, Namesp, PathOffset),
PathLength, AcpiDmTableInfoSdev0a);
if (ACPI_FAILURE (Status))
@@ -2708,14 +2710,14 @@ AcpiDmDumpSdev (
/* Dump the vendor-specific data */
- VendorDataLength =
- Namesp->VendorDataLength;
+ VendorDataLength = AcpiUtReadUint16 (&Namesp->VendorDataLength);
VendorDataOffset =
- Namesp->DeviceIdOffset + Namesp->DeviceIdLength;
+ AcpiUtReadUint16 (&Namesp->DeviceIdOffset) +
+ AcpiUtReadUint16 (&Namesp->DeviceIdLength);
if (VendorDataLength)
{
- Status = AcpiDmDumpTable (Table->Length, 0,
+ Status = AcpiDmDumpTable (TableLength, 0,
ACPI_ADD_PTR (UINT8, Namesp, VendorDataOffset),
VendorDataLength, AcpiDmTableInfoSdev1b);
if (ACPI_FAILURE (Status))
@@ -2730,12 +2732,12 @@ AcpiDmDumpSdev (
/* PCI path substructures */
Pcie = ACPI_CAST_PTR (ACPI_SDEV_PCIE, Subtable);
- PathOffset = Pcie->PathOffset;
- PathLength = Pcie->PathLength;
+ PathOffset = AcpiUtReadUint16 (&Pcie->PathOffset);
+ PathLength = AcpiUtReadUint16 (&Pcie->PathLength);
while (PathLength)
{
- Status = AcpiDmDumpTable (Table->Length,
+ Status = AcpiDmDumpTable (TableLength,
PathOffset + Offset,
ACPI_ADD_PTR (UINT8, Pcie, PathOffset),
sizeof (ACPI_SDEV_PCIE_PATH), AcpiDmTableInfoSdev1a);
@@ -2750,12 +2752,14 @@ AcpiDmDumpSdev (
/* VendorData */
- VendorDataLength = Pcie->VendorDataLength;
- VendorDataOffset = Pcie->PathOffset + Pcie->PathLength;
+ VendorDataLength = AcpiUtReadUint16 (&Pcie->VendorDataLength);
+ VendorDataOffset =
+ AcpiUtReadUint16 (&Pcie->PathOffset) +
+ AcpiUtReadUint16 (&Pcie->PathLength);
if (VendorDataLength)
{
- Status = AcpiDmDumpTable (Table->Length, 0,
+ Status = AcpiDmDumpTable (TableLength, 0,
ACPI_ADD_PTR (UINT8, Pcie, VendorDataOffset),
VendorDataLength, AcpiDmTableInfoSdev1b);
if (ACPI_FAILURE (Status))
@@ -2772,8 +2776,8 @@ AcpiDmDumpSdev (
NextSubtable:
/* Point to next subtable */
- Offset += Subtable->Length;
+ Offset += SubtableLength;
Subtable = ACPI_ADD_PTR (ACPI_SDEV_HEADER, Subtable,
- Subtable->Length);
+ SubtableLength);
}
}
Index: acpica-unix2-20220331/source/compiler/dttable2.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
+++ acpica-unix2-20220331/source/compiler/dttable2.c
@@ -1890,6 +1890,7 @@ DtCompileSdev (
UINT32 EntryCount;
ACPI_SDEV_SECURE_COMPONENT *SecureComponent = NULL;
UINT16 ComponentLength = 0;
+ UINT16 Tmp16;
/* Subtables */
@@ -1911,7 +1912,7 @@ DtCompileSdev (
DtPushSubtable (Subtable);
SdevHeader = ACPI_CAST_PTR (ACPI_SDEV_HEADER, Subtable->Buffer);
- SdevHeader->Length = (UINT8)(sizeof (ACPI_SDEV_HEADER));
+ SdevHeader->Length = (UINT16) (sizeof (ACPI_SDEV_HEADER));
switch (SdevHeader->Type)
{
@@ -2084,6 +2085,18 @@ DtCompileSdev (
}
}
+ /* Make sure everything is now little-endian */
+ Tmp16 = AcpiUtReadUint16 (&SdevHeader->Length);
+ SdevHeader->Length = Tmp16;
+ Tmp16 = AcpiUtReadUint16 (&Namesp->DeviceIdOffset);
+ Namesp->DeviceIdOffset = Tmp16;
+ Tmp16 = AcpiUtReadUint16 (&Namesp->DeviceIdLength);
+ Namesp->DeviceIdLength = Tmp16;
+ Tmp16 = AcpiUtReadUint16 (&Namesp->VendorDataOffset);
+ Namesp->VendorDataOffset = Tmp16;
+ Tmp16 = AcpiUtReadUint16 (&Namesp->VendorDataLength);
+ Namesp->VendorDataLength = Tmp16;
+
break;
case ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE:
@@ -2146,6 +2159,18 @@ DtCompileSdev (
SdevHeader->Length =
sizeof (ACPI_SDEV_PCIE) +
Pcie->PathLength + Pcie->VendorDataLength;
+
+ Tmp16 = AcpiUtReadUint16 (&SdevHeader->Length);
+ SdevHeader->Length = Tmp16;
+ Tmp16 = AcpiUtReadUint16 (&Pcie->PathOffset);
+ Pcie->PathOffset = Tmp16;
+ Tmp16 = AcpiUtReadUint16 (&Pcie->PathLength);
+ Pcie->PathLength = Tmp16;
+ Tmp16 = AcpiUtReadUint16 (&Pcie->VendorDataOffset);
+ Pcie->VendorDataOffset = Tmp16;
+ Tmp16 = AcpiUtReadUint16 (&Pcie->VendorDataLength);
+ Pcie->VendorDataLength = Tmp16;
+
break;
default:

View File

@ -1,278 +0,0 @@
From 915b8b70726fd01befdeac0c8630db528ac40552 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Fri, 25 Sep 2020 16:56:55 -0600
Subject: [PATCH 28/45] Support HMAT in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump1.c | 70 ++++++++++++++++++++++----------------
source/compiler/dttable1.c | 24 ++++++++++---
2 files changed, 59 insertions(+), 35 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump1.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
+++ acpica-unix2-20220331/source/common/dmtbdump1.c
@@ -1680,37 +1680,45 @@ AcpiDmDumpHmat (
UINT32 Length;
ACPI_DMTABLE_INFO *InfoTable;
UINT32 i, j;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
+ UINT16 HmatStructType;
+ UINT32 HmatStructLength;
+ UINT32 InitPDs;
+ UINT32 TgtPDs;
+ UINT16 SMBIOSHandles;
/* Main table */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoHmat);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoHmat);
if (ACPI_FAILURE (Status))
{
return;
}
Offset = sizeof (ACPI_TABLE_HMAT);
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
AcpiOsPrintf ("\n");
/* Dump HMAT structure header */
HmatStruct = ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, Table, Offset);
- if (HmatStruct->Length < sizeof (ACPI_HMAT_STRUCTURE))
+ HmatStructLength = AcpiUtReadUint32 (&HmatStruct->Length);
+ if (HmatStructLength < sizeof (ACPI_HMAT_STRUCTURE))
{
AcpiOsPrintf ("Invalid HMAT structure length\n");
return;
}
- Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct,
- HmatStruct->Length, AcpiDmTableInfoHmatHdr);
+ Status = AcpiDmDumpTable (TableLength, Offset, HmatStruct,
+ HmatStructLength, AcpiDmTableInfoHmatHdr);
if (ACPI_FAILURE (Status))
{
return;
}
- switch (HmatStruct->Type)
+ HmatStructType = AcpiUtReadUint16 (&HmatStruct->Type);
+ switch (HmatStructType)
{
case ACPI_HMAT_TYPE_ADDRESS_RANGE:
@@ -1733,7 +1741,7 @@ AcpiDmDumpHmat (
default:
AcpiOsPrintf ("\n**** Unknown HMAT structure type 0x%X\n",
- HmatStruct->Type);
+ HmatStructType);
/* Attempt to continue */
@@ -1742,13 +1750,13 @@ AcpiDmDumpHmat (
/* Dump HMAT structure body */
- if (HmatStruct->Length < Length)
+ if (HmatStructLength < Length)
{
AcpiOsPrintf ("Invalid HMAT structure length\n");
return;
}
- Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct,
- HmatStruct->Length, InfoTable);
+ Status = AcpiDmDumpTable (TableLength, Offset, HmatStruct,
+ HmatStructLength, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
@@ -1756,7 +1764,7 @@ AcpiDmDumpHmat (
/* Dump HMAT structure additionals */
- switch (HmatStruct->Type)
+ switch (HmatStructType)
{
case ACPI_HMAT_TYPE_LOCALITY:
@@ -1765,15 +1773,16 @@ AcpiDmDumpHmat (
/* Dump initiator proximity domains */
- if ((UINT32)(HmatStruct->Length - SubtableOffset) <
- (UINT32)(HmatLocality->NumberOfInitiatorPDs * 4))
+ InitPDs = AcpiUtReadUint32 (&HmatLocality->NumberOfInitiatorPDs);
+ if ((UINT32) (HmatStructLength - SubtableOffset) <
+ (UINT32) (InitPDs * 4))
{
AcpiOsPrintf ("Invalid initiator proximity domain number\n");
return;
}
- for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++)
+ for (i = 0; i < InitPDs; i++)
{
- Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
+ Status = AcpiDmDumpTable (TableLength, Offset + SubtableOffset,
ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
4, AcpiDmTableInfoHmat1a);
if (ACPI_FAILURE (Status))
@@ -1786,15 +1795,16 @@ AcpiDmDumpHmat (
/* Dump target proximity domains */
- if ((UINT32)(HmatStruct->Length - SubtableOffset) <
- (UINT32)(HmatLocality->NumberOfTargetPDs * 4))
+ TgtPDs = AcpiUtReadUint32 (&HmatLocality->NumberOfTargetPDs);
+ if ((UINT32) (HmatStructLength - SubtableOffset) <
+ (UINT32) (TgtPDs * 4))
{
AcpiOsPrintf ("Invalid target proximity domain number\n");
return;
}
- for (i = 0; i < HmatLocality->NumberOfTargetPDs; i++)
+ for (i = 0; i < TgtPDs; i++)
{
- Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
+ Status = AcpiDmDumpTable (TableLength, Offset + SubtableOffset,
ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
4, AcpiDmTableInfoHmat1b);
if (ACPI_FAILURE (Status))
@@ -1807,18 +1817,17 @@ AcpiDmDumpHmat (
/* Dump latency/bandwidth entris */
- if ((UINT32)(HmatStruct->Length - SubtableOffset) <
- (UINT32)(HmatLocality->NumberOfInitiatorPDs *
- HmatLocality->NumberOfTargetPDs * 2))
+ if ((UINT32) (HmatStructLength - SubtableOffset) <
+ (UINT32) (InitPDs * TgtPDs * 2))
{
AcpiOsPrintf ("Invalid latency/bandwidth entry number\n");
return;
}
- for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++)
+ for (i = 0; i < InitPDs; i++)
{
- for (j = 0; j < HmatLocality->NumberOfTargetPDs; j++)
+ for (j = 0; j < TgtPDs; j++)
{
- Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
+ Status = AcpiDmDumpTable (TableLength, Offset + SubtableOffset,
ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
2, AcpiDmTableInfoHmat1c);
if (ACPI_FAILURE(Status))
@@ -1838,15 +1847,16 @@ AcpiDmDumpHmat (
/* Dump SMBIOS handles */
- if ((UINT32)(HmatStruct->Length - SubtableOffset) <
- (UINT32)(HmatCache->NumberOfSMBIOSHandles * 2))
+ SMBIOSHandles = AcpiUtReadUint16 (&HmatCache->NumberOfSMBIOSHandles);
+ if ((UINT32) (HmatStructLength - SubtableOffset) <
+ (UINT32) (SMBIOSHandles * 2))
{
AcpiOsPrintf ("Invalid SMBIOS handle number\n");
return;
}
- for (i = 0; i < HmatCache->NumberOfSMBIOSHandles; i++)
+ for (i = 0; i < SMBIOSHandles; i++)
{
- Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
+ Status = AcpiDmDumpTable (TableLength, Offset + SubtableOffset,
ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubtableOffset),
2, AcpiDmTableInfoHmat2a);
if (ACPI_FAILURE (Status))
@@ -1866,6 +1876,6 @@ AcpiDmDumpHmat (
NextSubtable:
/* Point to next HMAT structure subtable */
- Offset += (HmatStruct->Length);
+ Offset += (HmatStructLength);
}
}
Index: acpica-unix2-20220331/source/compiler/dttable1.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
+++ acpica-unix2-20220331/source/compiler/dttable1.c
@@ -1737,6 +1737,8 @@ DtCompileHmat (
UINT32 TgtPDNumber;
UINT64 EntryNumber;
UINT16 SMBIOSHandleNumber;
+ UINT16 HmatStructType;
+ UINT32 Length;
ParentTable = DtPeekSubtable ();
@@ -1767,7 +1769,8 @@ DtCompileHmat (
/* Compile HMAT structure body */
- switch (HmatStruct->Type)
+ HmatStructType = AcpiUtReadUint16 (&HmatStruct->Type);
+ switch (HmatStructType)
{
case ACPI_HMAT_TYPE_ADDRESS_RANGE:
@@ -1800,7 +1803,7 @@ DtCompileHmat (
/* Compile HMAT structure additionals */
- switch (HmatStruct->Type)
+ switch (HmatStructType)
{
case ACPI_HMAT_TYPE_LOCALITY:
@@ -1826,7 +1829,7 @@ DtCompileHmat (
HmatStruct->Length += Subtable->Length;
IntPDNumber++;
}
- HmatLocality->NumberOfInitiatorPDs = IntPDNumber;
+ HmatLocality->NumberOfInitiatorPDs = AcpiUtReadUint32 (&IntPDNumber);
/* Compile target proximity domain list */
@@ -1847,7 +1850,7 @@ DtCompileHmat (
HmatStruct->Length += Subtable->Length;
TgtPDNumber++;
}
- HmatLocality->NumberOfTargetPDs = TgtPDNumber;
+ HmatLocality->NumberOfTargetPDs = AcpiUtReadUint32 (&TgtPDNumber);
/* Save start of the entries for reporting errors */
@@ -1873,6 +1876,9 @@ DtCompileHmat (
EntryNumber++;
}
+ Length = AcpiUtReadUint32 (&HmatStruct->Length);
+ HmatStruct->Length = Length;
+
/* Validate number of entries */
if (EntryNumber !=
@@ -1906,11 +1912,19 @@ DtCompileHmat (
HmatStruct->Length += Subtable->Length;
SMBIOSHandleNumber++;
}
- HmatCache->NumberOfSMBIOSHandles = SMBIOSHandleNumber;
+ HmatCache->NumberOfSMBIOSHandles =
+ AcpiUtReadUint16 (&SMBIOSHandleNumber);
+
+ Length = AcpiUtReadUint32 (&HmatStruct->Length);
+ HmatStruct->Length = Length;
+
break;
default:
+ Length = AcpiUtReadUint32(&HmatStruct->Length);
+ HmatStruct->Length = Length;
+
break;
}
}

View File

@ -1,43 +0,0 @@
From 253fe3545e7d4eaa9cb93c771c9619f410109a02 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Fri, 25 Sep 2020 17:03:05 -0600
Subject: [PATCH 29/45] Support PDTT in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump2.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -1954,13 +1954,13 @@ AcpiDmDumpPdtt (
{
ACPI_STATUS Status;
ACPI_PDTT_CHANNEL *Subtable;
- UINT32 Length = Table->Length;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_PDTT);
/* Main table */
- Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPdtt);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoPdtt);
if (ACPI_FAILURE (Status))
{
return;
@@ -1969,10 +1969,10 @@ AcpiDmDumpPdtt (
/* Subtables. Currently there is only one type, but can be multiples */
Subtable = ACPI_ADD_PTR (ACPI_PDTT_CHANNEL, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
sizeof (ACPI_PDTT_CHANNEL), AcpiDmTableInfoPdtt0);
if (ACPI_FAILURE (Status))
{

View File

@ -1,105 +0,0 @@
From 8923211d8bc1b0e4d3af6ff31ed6479057f612f6 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Fri, 25 Sep 2020 17:16:12 -0600
Subject: [PATCH 30/45] Support PPTT in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump2.c | 17 ++++++++++-------
source/compiler/dttable2.c | 7 +++++--
2 files changed, 15 insertions(+), 9 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -2241,6 +2241,8 @@ AcpiDmDumpPptt (
UINT32 Offset = sizeof (ACPI_TABLE_FPDT);
ACPI_DMTABLE_INFO *InfoTable;
UINT32 i;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
+ UINT32 NumPrivRes;
/* There is no main table (other than the standard ACPI header) */
@@ -2248,7 +2250,7 @@ AcpiDmDumpPptt (
/* Subtables */
Offset = sizeof (ACPI_TABLE_HEADER);
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
AcpiOsPrintf ("\n");
@@ -2260,7 +2262,7 @@ AcpiDmDumpPptt (
AcpiOsPrintf ("Invalid subtable length\n");
return;
}
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
Subtable->Length, AcpiDmTableInfoPpttHdr);
if (ACPI_FAILURE (Status))
{
@@ -2302,7 +2304,7 @@ AcpiDmDumpPptt (
AcpiOsPrintf ("Invalid subtable length\n");
return;
}
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
Subtable->Length, InfoTable);
if (ACPI_FAILURE (Status))
{
@@ -2318,15 +2320,16 @@ AcpiDmDumpPptt (
/* Dump SMBIOS handles */
- if ((UINT8)(Subtable->Length - SubtableOffset) <
- (UINT8)(PpttProcessor->NumberOfPrivResources * 4))
+ NumPrivRes = AcpiUtReadUint32 (&PpttProcessor->NumberOfPrivResources);
+ if ((UINT8) (Subtable->Length - SubtableOffset) <
+ (UINT8) (NumPrivRes * 4))
{
AcpiOsPrintf ("Invalid private resource number\n");
return;
}
- for (i = 0; i < PpttProcessor->NumberOfPrivResources; i++)
+ for (i = 0; i < NumPrivRes; i++)
{
- Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
+ Status = AcpiDmDumpTable (TableLength, Offset + SubtableOffset,
ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset),
4, AcpiDmTableInfoPptt0a);
if (ACPI_FAILURE (Status))
Index: acpica-unix2-20220331/source/compiler/dttable2.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
+++ acpica-unix2-20220331/source/compiler/dttable2.c
@@ -1520,6 +1520,7 @@ DtCompilePptt (
DT_FIELD **PFieldList = (DT_FIELD **) List;
DT_FIELD *SubtableStart;
ACPI_TABLE_HEADER *PpttAcpiHeader;
+ UINT32 NumPrivRes;
ParentTable = DtPeekSubtable ();
@@ -1584,7 +1585,7 @@ DtCompilePptt (
{
/* Compile initiator proximity domain list */
- PpttProcessor->NumberOfPrivResources = 0;
+ NumPrivRes = 0;
while (*PFieldList)
{
Status = DtCompileTable (PFieldList,
@@ -1600,8 +1601,10 @@ DtCompilePptt (
DtInsertSubtable (ParentTable, Subtable);
PpttHeader->Length += (UINT8)(Subtable->Length);
- PpttProcessor->NumberOfPrivResources++;
+ NumPrivRes++;
}
+ PpttProcessor->NumberOfPrivResources =
+ AcpiUtReadUint32 (&NumPrivRes);
}
break;

View File

@ -1,54 +0,0 @@
From a58ff76fc6e68488d93b55016a7aeb257971a252 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Fri, 25 Sep 2020 17:39:34 -0600
Subject: [PATCH 31/45] Support PCCT in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump2.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -1850,13 +1850,13 @@ AcpiDmDumpPcct (
ACPI_STATUS Status;
ACPI_PCCT_SUBSPACE *Subtable;
ACPI_DMTABLE_INFO *InfoTable;
- UINT32 Length = Table->Length;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_PCCT);
/* Main table */
- Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoPcct);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoPcct);
if (ACPI_FAILURE (Status))
{
return;
@@ -1865,12 +1865,12 @@ AcpiDmDumpPcct (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_PCCT_SUBSPACE, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
/* Common subtable header */
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
Subtable->Header.Length, AcpiDmTableInfoPcctHdr);
if (ACPI_FAILURE (Status))
{
@@ -1918,7 +1918,7 @@ AcpiDmDumpPcct (
}
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
Subtable->Header.Length, InfoTable);
if (ACPI_FAILURE (Status))
{

View File

@ -1,43 +0,0 @@
From ff1449919ee7d395d301e3a56a4ba333604d0458 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Fri, 25 Sep 2020 18:13:20 -0600
Subject: [PATCH 32/45] Support WDAT in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump3.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump3.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
+++ acpica-unix2-20220331/source/common/dmtbdump3.c
@@ -680,11 +680,12 @@ AcpiDmDumpWdat (
ACPI_STATUS Status;
UINT32 Offset = sizeof (ACPI_TABLE_WDAT);
ACPI_WDAT_ENTRY *Subtable;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
/* Main table */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoWdat);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoWdat);
if (ACPI_FAILURE (Status))
{
return;
@@ -693,12 +694,12 @@ AcpiDmDumpWdat (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_WDAT_ENTRY, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
/* Common subtable header */
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
sizeof (ACPI_WDAT_ENTRY), AcpiDmTableInfoWdat0);
if (ACPI_FAILURE (Status))
{

View File

@ -1,76 +0,0 @@
From b69b833f5a9205080b27d83379a31fad7fca1575 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Sun, 27 Sep 2020 12:09:28 -0600
Subject: [PATCH 33/45] Support TCPA in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump3.c | 13 ++++++++-----
source/compiler/dttable2.c | 4 +++-
2 files changed, 11 insertions(+), 6 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump3.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
+++ acpica-unix2-20220331/source/common/dmtbdump3.c
@@ -406,11 +406,13 @@ AcpiDmDumpTcpa (
ACPI_TABLE_TCPA_HDR *Subtable = ACPI_ADD_PTR (
ACPI_TABLE_TCPA_HDR, Table, Offset);
ACPI_STATUS Status;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
+ UINT16 PlatformClass;
/* Main table */
- Status = AcpiDmDumpTable (Table->Length, 0, Table,
+ Status = AcpiDmDumpTable (TableLength, 0, Table,
0, AcpiDmTableInfoTcpaHdr);
if (ACPI_FAILURE (Status))
{
@@ -421,18 +423,19 @@ AcpiDmDumpTcpa (
* Examine the PlatformClass field to determine the table type.
* Either a client or server table. Only one.
*/
- switch (CommonHeader->PlatformClass)
+ PlatformClass = AcpiUtReadUint16 (&CommonHeader->PlatformClass);
+ switch (PlatformClass)
{
case ACPI_TCPA_CLIENT_TABLE:
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
Table->Length - Offset, AcpiDmTableInfoTcpaClient);
break;
case ACPI_TCPA_SERVER_TABLE:
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
- Table->Length - Offset, AcpiDmTableInfoTcpaServer);
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+ TableLength - Offset, AcpiDmTableInfoTcpaServer);
break;
default:
Index: acpica-unix2-20220331/source/compiler/dttable2.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
+++ acpica-unix2-20220331/source/compiler/dttable2.c
@@ -2540,6 +2540,7 @@ DtCompileTcpa (
ACPI_TABLE_TCPA_HDR *TcpaHeader;
DT_SUBTABLE *ParentTable;
ACPI_STATUS Status;
+ UINT16 PlatformClass;
/* Compile the main table */
@@ -2560,7 +2561,8 @@ DtCompileTcpa (
*/
TcpaHeader = ACPI_CAST_PTR (ACPI_TABLE_TCPA_HDR, ParentTable->Buffer);
- switch (TcpaHeader->PlatformClass)
+ PlatformClass = AcpiUtReadUint16 (&TcpaHeader->PlatformClass);
+ switch (PlatformClass)
{
case ACPI_TCPA_CLIENT_TABLE:

View File

@ -1,40 +0,0 @@
From c313a76ce818135f02ab158a9f0c8e4b8e96698a Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Mon, 28 Sep 2020 11:49:42 -0600
Subject: [PATCH 34/45] Support STAO in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump3.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump3.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
+++ acpica-unix2-20220331/source/common/dmtbdump3.c
@@ -290,14 +290,14 @@ AcpiDmDumpStao (
{
ACPI_STATUS Status;
char *Namepath;
- UINT32 Length = Table->Length;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
UINT32 StringLength;
UINT32 Offset = sizeof (ACPI_TABLE_STAO);
/* Main table */
- Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoStao);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoStao);
if (ACPI_FAILURE (Status))
{
return;
@@ -305,7 +305,7 @@ AcpiDmDumpStao (
/* The rest of the table consists of Namepath strings */
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
Namepath = ACPI_ADD_PTR (char, Table, Offset);
StringLength = strlen (Namepath) + 1;

View File

@ -1,33 +0,0 @@
From 948bebd1a0999bc3481641d3fc996c49432709c6 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Mon, 28 Sep 2020 12:49:23 -0600
Subject: [PATCH 35/45] Support SLIC and MSDM in a big-endian world
When dumping the SLIC table, it was also found that the code was
not starting at the proper offset on disassembly. Set the offset
to the first byte after the header instead of the very beginning
of the table.
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump3.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump3.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
+++ acpica-unix2-20220331/source/common/dmtbdump3.c
@@ -68,9 +68,11 @@ void
AcpiDmDumpSlic (
ACPI_TABLE_HEADER *Table)
{
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
- (void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table,
- Table->Length - sizeof (*Table), AcpiDmTableInfoSlic);
+ (void) AcpiDmDumpTable (TableLength, sizeof (ACPI_TABLE_HEADER),
+ (void *) (Table + sizeof (*Table)),
+ TableLength - sizeof (*Table), AcpiDmTableInfoSlic);
}

View File

@ -1,50 +0,0 @@
From 0fb79a24fb70ab1e1e4879220af82a9fa00af586 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Mon, 28 Sep 2020 13:01:18 -0600
Subject: [PATCH 36/45] Support MCFG in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump2.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -982,11 +982,12 @@ AcpiDmDumpMcfg (
ACPI_STATUS Status;
UINT32 Offset = sizeof (ACPI_TABLE_MCFG);
ACPI_MCFG_ALLOCATION *Subtable;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
/* Main table */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoMcfg);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoMcfg);
if (ACPI_FAILURE (Status))
{
return;
@@ -995,17 +996,17 @@ AcpiDmDumpMcfg (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_MCFG_ALLOCATION, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
- if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > Table->Length)
+ if (Offset + sizeof (ACPI_MCFG_ALLOCATION) > TableLength)
{
AcpiOsPrintf ("Warning: there are %u invalid trailing bytes\n",
- (UINT32) sizeof (ACPI_MCFG_ALLOCATION) - (Offset - Table->Length));
+ (UINT32) sizeof (ACPI_MCFG_ALLOCATION) - (Offset - TableLength));
return;
}
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
sizeof (ACPI_MCFG_ALLOCATION), AcpiDmTableInfoMcfg0);
if (ACPI_FAILURE (Status))
{

View File

@ -1,46 +0,0 @@
From d10bfd67b5352ff5587e06fc1f82b896bab49614 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Mon, 28 Sep 2020 16:49:30 -0600
Subject: [PATCH 37/45] Support LPIT in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump2.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -690,7 +690,7 @@ AcpiDmDumpLpit (
{
ACPI_STATUS Status;
ACPI_LPIT_HEADER *Subtable;
- UINT32 Length = Table->Length;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_LPIT);
ACPI_DMTABLE_INFO *InfoTable;
UINT32 SubtableLength;
@@ -699,11 +699,11 @@ AcpiDmDumpLpit (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_LPIT_HEADER, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
/* Common subtable header */
- Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
sizeof (ACPI_LPIT_HEADER), AcpiDmTableInfoLpitHdr);
if (ACPI_FAILURE (Status))
{
@@ -727,7 +727,7 @@ AcpiDmDumpLpit (
return;
}
- Status = AcpiDmDumpTable (Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
SubtableLength, InfoTable);
if (ACPI_FAILURE (Status))
{

View File

@ -1,85 +0,0 @@
From bd19995fa268ed3e93c071162d0e9c2d35ada0d4 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Tue, 29 Jun 2021 16:23:30 -0600
Subject: [PATCH 38/45] Support PMTT in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump2.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -2142,8 +2142,9 @@ AcpiDmDumpPmtt (
{
ACPI_STATUS Status;
ACPI_PMTT_HEADER *Subtable;
- UINT32 Length = Table->Length;
+ UINT32 Length = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_PMTT);
+ UINT16 SubtableLength;
/* Main table */
@@ -2157,17 +2158,18 @@ AcpiDmDumpPmtt (
/* Subtables */
Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < Length)
{
/* Each of the types below contain the common subtable header */
AcpiOsPrintf ("\n");
+ SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
switch (Subtable->Type)
{
case ACPI_PMTT_TYPE_SOCKET:
Status = AcpiDmDumpTable (Length, Offset, Subtable,
- Subtable->Length, AcpiDmTableInfoPmtt0);
+ SubtableLength, AcpiDmTableInfoPmtt0);
if (ACPI_FAILURE (Status))
{
return;
@@ -2176,7 +2178,7 @@ AcpiDmDumpPmtt (
case ACPI_PMTT_TYPE_CONTROLLER:
Status = AcpiDmDumpTable (Length, Offset, Subtable,
- Subtable->Length, AcpiDmTableInfoPmtt1);
+ SubtableLength, AcpiDmTableInfoPmtt1);
if (ACPI_FAILURE (Status))
{
return;
@@ -2185,7 +2187,7 @@ AcpiDmDumpPmtt (
case ACPI_PMTT_TYPE_DIMM:
Status = AcpiDmDumpTable (Length, Offset, Subtable,
- Subtable->Length, AcpiDmTableInfoPmtt2);
+ SubtableLength, AcpiDmTableInfoPmtt2);
if (ACPI_FAILURE (Status))
{
return;
@@ -2194,7 +2196,7 @@ AcpiDmDumpPmtt (
case ACPI_PMTT_TYPE_VENDOR:
Status = AcpiDmDumpTable (Length, Offset, Subtable,
- Subtable->Length, AcpiDmTableInfoPmttVendor);
+ SubtableLength, AcpiDmTableInfoPmttVendor);
if (ACPI_FAILURE (Status))
{
return;
@@ -2210,9 +2212,9 @@ AcpiDmDumpPmtt (
/* Point to next subtable */
- Offset += Subtable->Length;
+ Offset += SubtableLength;
Subtable = ACPI_ADD_PTR (ACPI_PMTT_HEADER,
- Subtable, Subtable->Length);
+ Subtable, SubtableLength);
}
}

View File

@ -1,119 +0,0 @@
From c240ab3af6a4ad4405def7188e3d64da06a69f37 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Wed, 30 Sep 2020 18:42:38 -0600
Subject: [PATCH 39/45] Support TPM2 in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump3.c | 18 ++++++++++--------
source/compiler/dttable2.c | 8 +++++---
2 files changed, 15 insertions(+), 11 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump3.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
+++ acpica-unix2-20220331/source/common/dmtbdump3.c
@@ -475,11 +475,12 @@ AcpiDmDumpTpm2Rev3 (
ACPI_TABLE_TPM23 *CommonHeader = ACPI_CAST_PTR (ACPI_TABLE_TPM23, Table);
ACPI_TPM23_TRAILER *Subtable = ACPI_ADD_PTR (ACPI_TPM23_TRAILER, Table, Offset);
ACPI_STATUS Status;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
/* Main table */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm23);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoTpm23);
if (ACPI_FAILURE (Status))
{
return;
@@ -491,8 +492,8 @@ AcpiDmDumpTpm2Rev3 (
{
case ACPI_TPM23_ACPI_START_METHOD:
- (void) AcpiDmDumpTable (Table->Length, Offset, Subtable,
- Table->Length - Offset, AcpiDmTableInfoTpm23a);
+ (void) AcpiDmDumpTable (TableLength, Offset, Subtable,
+ TableLength - Offset, AcpiDmTableInfoTpm23a);
break;
default:
@@ -522,6 +523,7 @@ AcpiDmDumpTpm2 (
ACPI_TPM2_TRAILER *Subtable = ACPI_ADD_PTR (ACPI_TPM2_TRAILER, Table, Offset);
ACPI_TPM2_ARM_SMC *ArmSubtable;
ACPI_STATUS Status;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
if (Table->Revision == 3)
@@ -532,7 +534,7 @@ AcpiDmDumpTpm2 (
/* Main table */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoTpm2);
if (ACPI_FAILURE (Status))
{
@@ -540,8 +542,8 @@ AcpiDmDumpTpm2 (
}
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
- Table->Length - Offset, AcpiDmTableInfoTpm2a);
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+ TableLength - Offset, AcpiDmTableInfoTpm2a);
if (ACPI_FAILURE (Status))
{
return;
@@ -556,8 +558,8 @@ AcpiDmDumpTpm2 (
Offset += sizeof (ACPI_TPM2_TRAILER);
AcpiOsPrintf ("\n");
- (void) AcpiDmDumpTable (Table->Length, Offset, ArmSubtable,
- Table->Length - Offset, AcpiDmTableInfoTpm211);
+ (void) AcpiDmDumpTable (TableLength, Offset, ArmSubtable,
+ TableLength - Offset, AcpiDmTableInfoTpm211);
break;
default:
Index: acpica-unix2-20220331/source/compiler/dttable2.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
+++ acpica-unix2-20220331/source/compiler/dttable2.c
@@ -2668,6 +2668,7 @@ DtCompileTpm2 (
DT_SUBTABLE *ParentTable;
ACPI_STATUS Status = AE_OK;
ACPI_TABLE_HEADER *Header;
+ UINT8 StartMethod;
ParentTable = DtPeekSubtable ();
@@ -2711,7 +2712,8 @@ DtCompileTpm2 (
/* Subtable type depends on the StartMethod */
- switch (Tpm2Header->StartMethod)
+ StartMethod = *(UINT8 *) &Tpm2Header->StartMethod;
+ switch (StartMethod)
{
case ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC:
@@ -2742,7 +2744,7 @@ DtCompileTpm2 (
case ACPI_TPM2_RESERVED10:
AcpiOsPrintf ("\n**** Reserved TPM2 Start Method type 0x%X\n",
- Tpm2Header->StartMethod);
+ StartMethod);
Status = AE_ERROR;
break;
@@ -2750,7 +2752,7 @@ DtCompileTpm2 (
default:
AcpiOsPrintf ("\n**** Unknown TPM2 Start Method type 0x%X\n",
- Tpm2Header->StartMethod);
+ StartMethod);
Status = AE_ERROR;
break;
}

View File

@ -1,96 +0,0 @@
From 9fc0e46189feb926b13713422ea2722e273a31b5 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Mon, 19 Oct 2020 17:30:30 -0400
Subject: [PATCH 40/45] Support S3PT in a big-endian world
---
source/common/dmtbdump2.c | 15 +++++++++------
source/compiler/dttable2.c | 4 +++-
2 files changed, 12 insertions(+), 7 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -2495,6 +2495,8 @@ AcpiDmDumpS3pt (
ACPI_FPDT_HEADER *Subtable;
ACPI_DMTABLE_INFO *InfoTable;
ACPI_TABLE_S3PT *S3ptTable = ACPI_CAST_PTR (ACPI_TABLE_S3PT, Tables);
+ UINT32 S3ptTableLength = AcpiUtReadUint32 (&S3ptTable->Length);
+ UINT16 SubtableType;
/* Main table */
@@ -2506,19 +2508,20 @@ AcpiDmDumpS3pt (
}
Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, S3ptTable, Offset);
- while (Offset < S3ptTable->Length)
+ while (Offset < S3ptTableLength)
{
/* Common subtable header */
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (S3ptTableLength, Offset, Subtable,
Subtable->Length, AcpiDmTableInfoS3ptHdr);
if (ACPI_FAILURE (Status))
{
return 0;
}
- switch (Subtable->Type)
+ SubtableType = AcpiUtReadUint16 (&Subtable->Type);
+ switch (SubtableType)
{
case ACPI_S3PT_TYPE_RESUME:
@@ -2533,7 +2536,7 @@ AcpiDmDumpS3pt (
default:
AcpiOsPrintf ("\n**** Unknown S3PT subtable type 0x%X\n",
- Subtable->Type);
+ SubtableType);
/* Attempt to continue */
@@ -2546,7 +2549,7 @@ AcpiDmDumpS3pt (
}
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (S3ptTable->Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (S3ptTableLength, Offset, Subtable,
Subtable->Length, InfoTable);
if (ACPI_FAILURE (Status))
{
@@ -2560,7 +2563,7 @@ NextSubtable:
Subtable = ACPI_ADD_PTR (ACPI_FPDT_HEADER, Subtable, Subtable->Length);
}
- return (S3ptTable->Length);
+ return (S3ptTableLength);
}
Index: acpica-unix2-20220331/source/compiler/dttable2.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
+++ acpica-unix2-20220331/source/compiler/dttable2.c
@@ -1803,6 +1803,7 @@ DtCompileS3pt (
DT_SUBTABLE *ParentTable;
ACPI_DMTABLE_INFO *InfoTable;
DT_FIELD *SubtableStart;
+ UINT16 S3ptHeaderType;
Status = DtCompileTable (PFieldList, AcpiDmTableInfoS3pt,
@@ -1830,7 +1831,8 @@ DtCompileS3pt (
S3ptHeader = ACPI_CAST_PTR (ACPI_FPDT_HEADER, Subtable->Buffer);
- switch (S3ptHeader->Type)
+ S3ptHeaderType = AcpiUtReadUint16 (&S3ptHeader->Type);
+ switch (S3ptHeaderType)
{
case ACPI_S3PT_TYPE_RESUME:

View File

@ -1,414 +0,0 @@
From 5bd43bca1708a56d32e63da0278e04caf2865927 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Tue, 29 Jun 2021 17:38:20 -0600
Subject: [PATCH 41/45] Support IORT in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump2.c | 85 ++++++++++++++++++++++----------------
source/compiler/dttable1.c | 40 ++++++++++--------
2 files changed, 72 insertions(+), 53 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -77,17 +77,20 @@ AcpiDmDumpIort (
ACPI_IORT_RMR *IortRmr = NULL;
UINT32 Offset;
UINT32 NodeOffset;
+ UINT32 NodeLength;
UINT32 Length;
ACPI_DMTABLE_INFO *InfoTable;
char *String;
UINT32 i;
UINT32 MappingByteLength;
UINT8 Revision;
+ UINT32 MappingCount;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
/* Main table */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIort);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoIort);
if (ACPI_FAILURE (Status))
{
return;
@@ -109,18 +112,19 @@ AcpiDmDumpIort (
/* Dump the OptionalPadding (optional) */
- if (Iort->NodeOffset > Offset)
+ NodeOffset = AcpiUtReadUint32 (&Iort->NodeOffset);
+ if (NodeOffset > Offset)
{
- Status = AcpiDmDumpTable (Table->Length, Offset, Table,
- Iort->NodeOffset - Offset, AcpiDmTableInfoIortPad);
+ Status = AcpiDmDumpTable (TableLength, Offset, Table,
+ NodeOffset - Offset, AcpiDmTableInfoIortPad);
if (ACPI_FAILURE (Status))
{
return;
}
}
- Offset = Iort->NodeOffset;
- while (Offset < Table->Length)
+ Offset = AcpiUtReadUint32 (&Iort->NodeOffset);
+ while (Offset < TableLength)
{
/* Common subtable header */
@@ -130,12 +134,12 @@ AcpiDmDumpIort (
if (Revision == 0)
{
- Status = AcpiDmDumpTable (Table->Length, Offset,
+ Status = AcpiDmDumpTable (TableLength, Offset,
IortNode, Length, AcpiDmTableInfoIortHdr);
}
else if (Revision >= 3)
{
- Status = AcpiDmDumpTable (Table->Length, Offset,
+ Status = AcpiDmDumpTable (TableLength, Offset,
IortNode, Length, AcpiDmTableInfoIortHdr3);
}
@@ -166,7 +170,7 @@ AcpiDmDumpIort (
case ACPI_IORT_NODE_PCI_ROOT_COMPLEX:
InfoTable = AcpiDmTableInfoIort2;
- Length = IortNode->Length - NodeOffset;
+ Length = AcpiUtReadUint16 (&IortNode->Length) - NodeOffset;
break;
case ACPI_IORT_NODE_SMMU:
@@ -179,19 +183,19 @@ AcpiDmDumpIort (
case ACPI_IORT_NODE_SMMU_V3:
InfoTable = AcpiDmTableInfoIort4;
- Length = IortNode->Length - NodeOffset;
+ Length = AcpiUtReadUint16 (&IortNode->Length) - NodeOffset;
break;
case ACPI_IORT_NODE_PMCG:
InfoTable = AcpiDmTableInfoIort5;
- Length = IortNode->Length - NodeOffset;
+ Length = AcpiUtReadUint16 (&IortNode->Length) - NodeOffset;
break;
case ACPI_IORT_NODE_RMR:
InfoTable = AcpiDmTableInfoIort6;
- Length = IortNode->Length - NodeOffset;
+ Length = AcpiUtReadUint16 (&IortNode->Length) - NodeOffset;
IortRmr = ACPI_ADD_PTR (ACPI_IORT_RMR, IortNode, NodeOffset);
break;
@@ -202,7 +206,7 @@ AcpiDmDumpIort (
/* Attempt to continue */
- if (!IortNode->Length)
+ if (!AcpiUtReadUint16 (&IortNode->Length))
{
AcpiOsPrintf ("Invalid zero length IORT node\n");
return;
@@ -213,7 +217,7 @@ AcpiDmDumpIort (
/* Dump the node subtable header */
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
+ Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
Length, InfoTable);
if (ACPI_FAILURE (Status))
@@ -233,9 +237,10 @@ AcpiDmDumpIort (
if (IortItsGroup)
{
- for (i = 0; i < IortItsGroup->ItsCount; i++)
+ UINT32 ItsCount = AcpiUtReadUint32 (&IortItsGroup->ItsCount);
+ for (i = 0; i < ItsCount; i++)
{
- Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
+ Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
4, AcpiDmTableInfoIort0a);
if (ACPI_FAILURE (Status))
@@ -252,12 +257,14 @@ AcpiDmDumpIort (
/* Dump the Padding (optional) */
- if (IortNode->Length > NodeOffset)
+ NodeLength = AcpiUtReadUint16 (&IortNode->Length);
+ if (NodeLength > NodeOffset)
{
MappingByteLength =
- IortNode->MappingCount * sizeof (ACPI_IORT_ID_MAPPING);
- Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
- Table, IortNode->Length - NodeOffset - MappingByteLength,
+ AcpiUtReadUint32 (&IortNode->MappingCount) *
+ sizeof (ACPI_IORT_ID_MAPPING);
+ Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
+ Table, NodeLength - NodeOffset - MappingByteLength,
AcpiDmTableInfoIort1a);
if (ACPI_FAILURE (Status))
{
@@ -274,9 +281,11 @@ AcpiDmDumpIort (
if (IortSmmu)
{
+ UINT32 InterruptCount;
+
Length = 2 * sizeof (UINT64);
- NodeOffset = IortSmmu->GlobalInterruptOffset;
- Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
+ NodeOffset = AcpiUtReadUint32 (&IortSmmu->GlobalInterruptOffset);
+ Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
Length, AcpiDmTableInfoIort3a);
if (ACPI_FAILURE (Status))
@@ -284,10 +293,11 @@ AcpiDmDumpIort (
return;
}
- NodeOffset = IortSmmu->ContextInterruptOffset;
- for (i = 0; i < IortSmmu->ContextInterruptCount; i++)
+ NodeOffset = AcpiUtReadUint32 (&IortSmmu->ContextInterruptOffset);
+ InterruptCount = AcpiUtReadUint32 (&IortSmmu->ContextInterruptCount);
+ for (i = 0; i < InterruptCount; i++)
{
- Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
+ Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
8, AcpiDmTableInfoIort3b);
if (ACPI_FAILURE (Status))
@@ -298,10 +308,11 @@ AcpiDmDumpIort (
NodeOffset += 8;
}
- NodeOffset = IortSmmu->PmuInterruptOffset;
- for (i = 0; i < IortSmmu->PmuInterruptCount; i++)
+ NodeOffset = AcpiUtReadUint32 (&IortSmmu->PmuInterruptOffset);
+ InterruptCount = AcpiUtReadUint32 (&IortSmmu->PmuInterruptCount);
+ for (i = 0; i < InterruptCount; i++)
{
- Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
+ Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
8, AcpiDmTableInfoIort3c);
if (ACPI_FAILURE (Status))
@@ -319,12 +330,15 @@ AcpiDmDumpIort (
/* Validate IortRmr to avoid compiler warnings */
if (IortRmr)
{
- NodeOffset = IortRmr->RmrOffset;
+ UINT32 RmrCount;
+
+ NodeOffset = AcpiUtReadUint32 (&IortRmr->RmrOffset);
+ RmrCount = AcpiUtReadUint32 (&IortRmr->RmrCount);
Length = sizeof (ACPI_IORT_RMR_DESC);
- for (i = 0; i < IortRmr->RmrCount; i++)
+ for (i = 0; i < RmrCount; i++)
{
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
+ Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
Length, AcpiDmTableInfoIort6a);
if (ACPI_FAILURE (Status))
@@ -344,12 +358,13 @@ AcpiDmDumpIort (
/* Dump the ID mappings */
- NodeOffset = IortNode->MappingOffset;
- for (i = 0; i < IortNode->MappingCount; i++)
+ NodeOffset = AcpiUtReadUint32 (&IortNode->MappingOffset);
+ MappingCount = AcpiUtReadUint32 (&IortNode->MappingCount);
+ for (i = 0; i < MappingCount; i++)
{
AcpiOsPrintf ("\n");
Length = sizeof (ACPI_IORT_ID_MAPPING);
- Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
+ Status = AcpiDmDumpTable (TableLength, Offset + NodeOffset,
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
Length, AcpiDmTableInfoIortMap);
if (ACPI_FAILURE (Status))
@@ -363,7 +378,7 @@ AcpiDmDumpIort (
NextSubtable:
/* Point to next node subtable */
- Offset += IortNode->Length;
+ Offset += AcpiUtReadUint16 (&IortNode->Length);
}
}
Index: acpica-unix2-20220331/source/compiler/dttable1.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
+++ acpica-unix2-20220331/source/compiler/dttable1.c
@@ -1960,6 +1960,7 @@ DtCompileIort (
ACPI_IORT_ITS_GROUP *IortItsGroup;
ACPI_IORT_SMMU *IortSmmu;
ACPI_IORT_RMR *IortRmr;
+ UINT32 IortNodeOffset;
UINT32 NodeNumber;
UINT32 NodeLength;
UINT32 IdMappingNumber;
@@ -2005,7 +2006,7 @@ DtCompileIort (
* Optionally allows the generic data types to be used for filling
* this field.
*/
- Iort->NodeOffset = sizeof (ACPI_TABLE_IORT);
+ IortNodeOffset = sizeof (ACPI_TABLE_IORT);
Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortPad,
&Subtable);
if (ACPI_FAILURE (Status))
@@ -2015,7 +2016,7 @@ DtCompileIort (
if (Subtable)
{
DtInsertSubtable (ParentTable, Subtable);
- Iort->NodeOffset += Subtable->Length;
+ IortNodeOffset += Subtable->Length;
}
else
{
@@ -2025,7 +2026,7 @@ DtCompileIort (
{
return (Status);
}
- Iort->NodeOffset += PaddingLength;
+ IortNodeOffset += PaddingLength;
}
NodeNumber = 0;
@@ -2089,7 +2090,7 @@ DtCompileIort (
ItsNumber++;
}
- IortItsGroup->ItsCount = ItsNumber;
+ IortItsGroup->ItsCount = AcpiUtReadUint32 (&ItsNumber);
break;
case ACPI_IORT_NODE_NAMED_COMPONENT:
@@ -2123,15 +2124,18 @@ DtCompileIort (
}
else
{
- if (NodeLength > IortNode->MappingOffset)
+ UINT32 MappingOffset;
+
+ MappingOffset = IortNode->MappingOffset;
+ if (NodeLength > MappingOffset)
{
return (AE_BAD_DATA);
}
- if (NodeLength < IortNode->MappingOffset)
+ if (NodeLength < MappingOffset)
{
Status = DtCompilePadding (
- IortNode->MappingOffset - NodeLength,
+ MappingOffset - NodeLength,
&Subtable);
if (ACPI_FAILURE (Status))
{
@@ -2139,7 +2143,7 @@ DtCompileIort (
}
DtInsertSubtable (ParentTable, Subtable);
- NodeLength = IortNode->MappingOffset;
+ NodeLength = MappingOffset;
}
}
break;
@@ -2172,7 +2176,7 @@ DtCompileIort (
/* Compile global interrupt array */
- IortSmmu->GlobalInterruptOffset = NodeLength;
+ IortSmmu->GlobalInterruptOffset = AcpiUtReadUint32 (&NodeLength);
Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3a,
&Subtable);
if (ACPI_FAILURE (Status))
@@ -2186,7 +2190,7 @@ DtCompileIort (
/* Compile context interrupt array */
ContextIrptNumber = 0;
- IortSmmu->ContextInterruptOffset = NodeLength;
+ IortSmmu->ContextInterruptOffset = AcpiUtReadUint32 (&NodeLength);
while (*PFieldList)
{
Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3b,
@@ -2206,12 +2210,12 @@ DtCompileIort (
ContextIrptNumber++;
}
- IortSmmu->ContextInterruptCount = ContextIrptNumber;
+ IortSmmu->ContextInterruptCount = AcpiUtReadUint32 (&ContextIrptNumber);
/* Compile PMU interrupt array */
PmuIrptNumber = 0;
- IortSmmu->PmuInterruptOffset = NodeLength;
+ IortSmmu->PmuInterruptOffset = AcpiUtReadUint32 (&NodeLength);
while (*PFieldList)
{
Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort3c,
@@ -2231,7 +2235,7 @@ DtCompileIort (
PmuIrptNumber++;
}
- IortSmmu->PmuInterruptCount = PmuIrptNumber;
+ IortSmmu->PmuInterruptCount = AcpiUtReadUint32 (&PmuIrptNumber);
break;
case ACPI_IORT_NODE_SMMU_V3:
@@ -2276,7 +2280,7 @@ DtCompileIort (
/* Compile RMR Descriptors */
RmrCount = 0;
- IortRmr->RmrOffset = NodeLength;
+ IortRmr->RmrOffset = AcpiUtReadUint32 (&NodeLength);
while (*PFieldList)
{
Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort6a,
@@ -2296,7 +2300,7 @@ DtCompileIort (
RmrCount++;
}
- IortRmr->RmrCount = RmrCount;
+ IortRmr->RmrCount = AcpiUtReadUint32 (&RmrCount);
break;
default:
@@ -2307,7 +2311,7 @@ DtCompileIort (
/* Compile Array of ID mappings */
- IortNode->MappingOffset = NodeLength;
+ IortNode->MappingOffset = AcpiUtReadUint32 (&NodeLength);
IdMappingNumber = 0;
while (*PFieldList)
{
@@ -2328,7 +2332,7 @@ DtCompileIort (
IdMappingNumber++;
}
- IortNode->MappingCount = IdMappingNumber;
+ IortNode->MappingCount = AcpiUtReadUint32 (&IdMappingNumber);
if (!IdMappingNumber)
{
IortNode->MappingOffset = 0;
@@ -2343,7 +2347,7 @@ DtCompileIort (
NodeNumber++;
}
- Iort->NodeCount = NodeNumber;
+ Iort->NodeCount = AcpiUtReadUint32 (&NodeNumber);
return (AE_OK);
}

View File

@ -1,138 +0,0 @@
From b64cff82b2b33ed659826d777d2db039f64fd198 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Tue, 29 Jun 2021 17:45:24 -0600
Subject: [PATCH 42/45] Support IVRS in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump2.c | 34 +++++++++++++++++++---------------
1 file changed, 19 insertions(+), 15 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -419,11 +419,14 @@ AcpiDmDumpIvrs (
ACPI_IVRS_DE_HEADER *DeviceEntry;
ACPI_IVRS_HEADER *Subtable;
ACPI_DMTABLE_INFO *InfoTable;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
+ UINT16 SubtableLength;
+
/* Main table */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIvrs);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoIvrs);
if (ACPI_FAILURE (Status))
{
return;
@@ -433,8 +436,9 @@ AcpiDmDumpIvrs (
Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
+ SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
switch (Subtable->Type)
{
/* Type 10h, IVHD (I/O Virtualization Hardware Definition) */
@@ -471,7 +475,7 @@ AcpiDmDumpIvrs (
/* Attempt to continue */
- if (!Subtable->Length)
+ if (!SubtableLength)
{
AcpiOsPrintf ("Invalid zero length subtable\n");
return;
@@ -481,8 +485,8 @@ AcpiDmDumpIvrs (
/* Dump the subtable */
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
- Subtable->Length, InfoTable);
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+ SubtableLength, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
@@ -511,7 +515,7 @@ AcpiDmDumpIvrs (
/* Process all of the Device Entries */
- while (EntryOffset < (Offset + Subtable->Length))
+ while (EntryOffset < (Offset + SubtableLength))
{
AcpiOsPrintf ("\n");
@@ -581,7 +585,7 @@ AcpiDmDumpIvrs (
/* Dump the Device Entry */
- Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+ Status = AcpiDmDumpTable (TableLength, EntryOffset,
DeviceEntry, EntryLength, InfoTable);
if (ACPI_FAILURE (Status))
{
@@ -605,12 +609,12 @@ AcpiDmDumpIvrs (
*/
if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiHid))
{
- Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+ Status = AcpiDmDumpTable (TableLength, EntryOffset,
&HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidInteger);
}
else
{
- Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+ Status = AcpiDmDumpTable (TableLength, EntryOffset,
&HidSubtable->AcpiHid, 8, AcpiDmTableInfoIvrsHidString);
}
if (ACPI_FAILURE (Status))
@@ -628,12 +632,12 @@ AcpiDmDumpIvrs (
*/
if (UtIsIdInteger ((UINT8 *) &HidSubtable->AcpiCid))
{
- Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+ Status = AcpiDmDumpTable (TableLength, EntryOffset,
&HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidInteger);
}
else
{
- Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+ Status = AcpiDmDumpTable (TableLength, EntryOffset,
&HidSubtable->AcpiCid, 8, AcpiDmTableInfoIvrsCidString);
}
if (ACPI_FAILURE (Status))
@@ -650,7 +654,7 @@ AcpiDmDumpIvrs (
if (HidSubtable->UidType == ACPI_IVRS_UID_IS_STRING)
{
- Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+ Status = AcpiDmDumpTable (TableLength, EntryOffset,
&HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidString);
if (ACPI_FAILURE (Status))
{
@@ -659,7 +663,7 @@ AcpiDmDumpIvrs (
}
else /* ACPI_IVRS_UID_IS_INTEGER */
{
- Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+ Status = AcpiDmDumpTable (TableLength, EntryOffset,
&HidSubtable->UidType, EntryLength, AcpiDmTableInfoIvrsUidInteger);
if (ACPI_FAILURE (Status))
{
@@ -678,8 +682,8 @@ AcpiDmDumpIvrs (
NextSubtable:
/* Point to next subtable */
- Offset += Subtable->Length;
- Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, Subtable->Length);
+ Offset += SubtableLength;
+ Subtable = ACPI_ADD_PTR (ACPI_IVRS_HEADER, Subtable, SubtableLength);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,23 +0,0 @@
From bd137d3712e6bc7e4d2d11350a208a36750e4063 Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Tue, 6 Jul 2021 18:26:41 -0600
Subject: [PATCH 44/45] Initial support for WPBT in big-endian, needs more
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/compiler/dttable2.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: acpica-unix2-20210604/source/compiler/dttable2.c
===================================================================
--- acpica-unix2-20210604.orig/source/compiler/dttable2.c
+++ acpica-unix2-20210604/source/compiler/dttable2.c
@@ -2638,7 +2638,7 @@ DtCompileWpbt (
AcpiUtWriteUint (&Length, sizeof (UINT16),
&Subtable->TotalLength, sizeof (UINT32));
Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer);
- Table->ArgumentsLength = Length;
+ Table->ArgumentsLength = AcpiUtReadUint16 (&Length);
ParentTable = DtPeekSubtable ();
DtInsertSubtable (ParentTable, Subtable);

View File

@ -1,213 +0,0 @@
From 0d87ee42adda7837bec3cc0ff86e40c2f2e8dc4f Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Fri, 9 Jul 2021 14:52:55 -0600
Subject: [PATCH 45/45] CSRT: fixed use of optional ResourceInfo
In a resource sub-sub-table, there may be a ResourceInfo entry. Neither
the compiler nor disassembler accounted for that possibility properly.
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump1.c | 43 +++++++++++++++++++++-----------------
source/compiler/dttable1.c | 28 +++++++++++++------------
2 files changed, 39 insertions(+), 32 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump1.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump1.c
+++ acpica-unix2-20220331/source/common/dmtbdump1.c
@@ -669,11 +669,13 @@ AcpiDmDumpCsrt (
ACPI_CSRT_GROUP *Subtable;
ACPI_CSRT_SHARED_INFO *SharedInfoTable;
ACPI_CSRT_DESCRIPTOR *SubSubtable;
- UINT32 Length = AcpiUtReadUint32 (&Table->Length);
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_CSRT);
UINT32 SubOffset;
UINT32 SubSubOffset;
UINT32 InfoLength;
+ UINT32 SubtableLength;
+ UINT32 SubSubtableLength;
/* The main table only contains the ACPI header, thus already handled */
@@ -681,13 +683,14 @@ AcpiDmDumpCsrt (
/* Subtables (Resource Groups) */
Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Table, Offset);
- while (Offset < Length)
+ while (Offset < TableLength)
{
/* Resource group subtable */
+ SubtableLength = AcpiUtReadUint32 (&Subtable->Length);
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Length, Offset, Subtable,
- Subtable->Length, AcpiDmTableInfoCsrt0);
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
+ SubtableLength, AcpiDmTableInfoCsrt0);
if (ACPI_FAILURE (Status))
{
return;
@@ -700,26 +703,28 @@ AcpiDmDumpCsrt (
Offset + SubOffset);
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Length, Offset + SubOffset, SharedInfoTable,
- sizeof (ACPI_CSRT_SHARED_INFO), AcpiDmTableInfoCsrt1);
+ Status = AcpiDmDumpTable (TableLength, Offset + SubOffset,
+ SharedInfoTable, sizeof (ACPI_CSRT_SHARED_INFO),
+ AcpiDmTableInfoCsrt1);
if (ACPI_FAILURE (Status))
{
return;
}
- SubOffset += Subtable->SharedInfoLength;
+ SubOffset += AcpiUtReadUint32 (&Subtable->SharedInfoLength);
/* Sub-Subtables (Resource Descriptors) */
SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, Table,
Offset + SubOffset);
- while ((SubOffset < Subtable->Length) &&
- ((Offset + SubOffset) < Length))
+ while ((SubOffset < SubtableLength) &&
+ ((Offset + SubOffset) < TableLength))
{
+ SubSubtableLength = AcpiUtReadUint32 (&SubSubtable->Length);
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Length, Offset + SubOffset, SubSubtable,
- SubSubtable->Length, AcpiDmTableInfoCsrt2);
+ Status = AcpiDmDumpTable (TableLength, Offset + SubOffset,
+ SubSubtable, SubSubtableLength, AcpiDmTableInfoCsrt2);
if (ACPI_FAILURE (Status))
{
return;
@@ -729,11 +734,12 @@ AcpiDmDumpCsrt (
/* Resource-specific info buffer */
- InfoLength = SubSubtable->Length - SubSubOffset;
+ InfoLength = SubSubtableLength - SubSubOffset;
if (InfoLength)
{
- Status = AcpiDmDumpTable (Length,
- Offset + SubOffset + SubSubOffset, Table,
+ Status = AcpiDmDumpTable (TableLength,
+ Offset + SubOffset + SubSubOffset,
+ (UINT8 *)SubSubtable + SubSubOffset,
InfoLength, AcpiDmTableInfoCsrt2a);
if (ACPI_FAILURE (Status))
{
@@ -743,16 +749,15 @@ AcpiDmDumpCsrt (
/* Point to next sub-subtable */
- SubOffset += SubSubtable->Length;
+ SubOffset += SubSubtableLength;
SubSubtable = ACPI_ADD_PTR (ACPI_CSRT_DESCRIPTOR, SubSubtable,
- SubSubtable->Length);
+ SubSubtableLength);
}
/* Point to next subtable */
- Offset += Subtable->Length;
- Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable,
- Subtable->Length);
+ Offset += SubtableLength;
+ Subtable = ACPI_ADD_PTR (ACPI_CSRT_GROUP, Subtable, SubtableLength);
}
}
Index: acpica-unix2-20220331/source/compiler/dttable1.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable1.c
+++ acpica-unix2-20220331/source/compiler/dttable1.c
@@ -716,14 +716,16 @@ DtCompileCsrt (
DT_SUBTABLE *Subtable;
DT_SUBTABLE *ParentTable;
DT_FIELD **PFieldList = (DT_FIELD **) List;
- UINT32 DescriptorCount;
+ UINT32 DescriptorLength;
UINT32 GroupLength;
UINT32 Tmp;
+ UINT32 Offset;
/* Subtables (Resource Groups) */
ParentTable = DtPeekSubtable ();
+
while (*PFieldList)
{
/* Resource group subtable */
@@ -738,16 +740,13 @@ DtCompileCsrt (
/* Compute the number of resource descriptors */
Tmp = AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
- Subtable->Buffer))->Length);
+ Subtable->Buffer))->Length);
GroupLength = Tmp;
Tmp = AcpiUtReadUint32 (&(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
- Subtable->Buffer))->SharedInfoLength);
+ Subtable->Buffer))->SharedInfoLength);
GroupLength -= Tmp;
GroupLength -= sizeof (ACPI_CSRT_GROUP);
- DescriptorCount = (GroupLength /
- sizeof (ACPI_CSRT_DESCRIPTOR));
-
DtInsertSubtable (ParentTable, Subtable);
DtPushSubtable (Subtable);
ParentTable = DtPeekSubtable ();
@@ -762,10 +761,13 @@ DtCompileCsrt (
}
DtInsertSubtable (ParentTable, Subtable);
+ DtPushSubtable (Subtable);
+ ParentTable = DtPeekSubtable ();
/* Sub-Subtables (Resource Descriptors) */
- while (*PFieldList && DescriptorCount)
+ Offset = 0;
+ while (*PFieldList && (Offset < GroupLength))
{
Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2,
@@ -774,6 +776,10 @@ DtCompileCsrt (
{
return (Status);
}
+ DescriptorLength = AcpiUtReadUint32 (
+ &(ACPI_CAST_PTR (ACPI_CSRT_GROUP,
+ Subtable->Buffer))->Length);
+
DtInsertSubtable (ParentTable, Subtable);
@@ -783,11 +789,7 @@ DtCompileCsrt (
{
Status = DtCompileTable (PFieldList, AcpiDmTableInfoCsrt2a,
&Subtable);
- if (ACPI_FAILURE (Status))
- {
- return (Status);
- }
- if (Subtable)
+ if (ACPI_SUCCESS (Status) && Subtable)
{
DtInsertSubtable (ParentTable, Subtable);
}
@@ -795,7 +797,7 @@ DtCompileCsrt (
DtPopSubtable ();
ParentTable = DtPeekSubtable ();
- DescriptorCount--;
+ Offset += DescriptorLength;
}
DtPopSubtable ();

View File

@ -1,180 +0,0 @@
From 5fd729c8f6c4ce295edd142fc41e03e831ba4afb Mon Sep 17 00:00:00 2001
From: Al Stone <ahs3@redhat.com>
Date: Mon, 12 Jul 2021 09:39:38 -0600
Subject: [PATCH] Support PHAT in a big-endian world
Signed-off-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump2.c | 36 ++++++++++++++++++++----------------
source/compiler/dttable2.c | 12 +++++++++---
2 files changed, 29 insertions(+), 19 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -2029,39 +2029,41 @@ AcpiDmDumpPhat (
ACPI_PHAT_HEADER *Subtable;
ACPI_PHAT_VERSION_DATA *VersionData;
UINT32 RecordCount;
- UINT32 Length = Table->Length;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_PHAT);
- UINT32 SubtableLength;
+ UINT16 SubtableLength;
UINT32 PathLength;
UINT32 VendorLength;
+ UINT16 SubtableType;
Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Table, sizeof (ACPI_TABLE_PHAT));
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
/* Common subtable header */
+ SubtableType = AcpiUtReadUint16 (&Subtable->Type);
+ SubtableLength = AcpiUtReadUint16 (&Subtable->Length);
+
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Length, 0, Subtable,
+ Status = AcpiDmDumpTable (TableLength, 0, Subtable,
sizeof (ACPI_PHAT_HEADER), AcpiDmTableInfoPhatHdr);
if (ACPI_FAILURE (Status))
{
return;
}
- switch (Subtable->Type)
+ switch (SubtableType)
{
case ACPI_PHAT_TYPE_FW_VERSION_DATA:
InfoTable = AcpiDmTableInfoPhat0;
- SubtableLength = sizeof (ACPI_PHAT_VERSION_DATA);
break;
case ACPI_PHAT_TYPE_FW_HEALTH_DATA:
InfoTable = AcpiDmTableInfoPhat1;
- SubtableLength = sizeof (ACPI_PHAT_HEALTH_DATA);
break;
default:
@@ -2072,22 +2074,22 @@ AcpiDmDumpPhat (
return;
}
- Status = AcpiDmDumpTable (Length, 0, Subtable,
+ Status = AcpiDmDumpTable (TableLength, 0, Subtable,
SubtableLength, InfoTable);
if (ACPI_FAILURE (Status))
{
return;
}
- switch (Subtable->Type)
+ switch (SubtableType)
{
case ACPI_PHAT_TYPE_FW_VERSION_DATA:
VersionData = ACPI_CAST_PTR (ACPI_PHAT_VERSION_DATA, Subtable);
- RecordCount = VersionData->ElementCount;
+ RecordCount = AcpiUtReadUint32 (&VersionData->ElementCount);
while (RecordCount)
{
- Status = AcpiDmDumpTable (Length, Offset,
+ Status = AcpiDmDumpTable (TableLength, Offset,
ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_VERSION_DATA)),
sizeof (ACPI_PHAT_VERSION_ELEMENT), AcpiDmTableInfoPhat0a);
if (ACPI_FAILURE (Status))
@@ -2105,7 +2107,7 @@ AcpiDmDumpPhat (
/* account for the null terminator */
PathLength = strlen (ACPI_ADD_PTR (char, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA))) + 1;
- Status = AcpiDmDumpTable (Length, Offset,
+ Status = AcpiDmDumpTable (TableLength, Offset,
ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA)),
PathLength, AcpiDmTableInfoPhat1a);
if (ACPI_FAILURE (Status))
@@ -2116,8 +2118,8 @@ AcpiDmDumpPhat (
/* Get vendor data - data length is the remaining subtable length */
VendorLength =
- Subtable->Length - sizeof (ACPI_PHAT_HEALTH_DATA) - PathLength;
- Status = AcpiDmDumpTable (Length, 0,
+ SubtableLength - sizeof (ACPI_PHAT_HEALTH_DATA) - PathLength;
+ Status = AcpiDmDumpTable (TableLength, 0,
ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable, sizeof (ACPI_PHAT_HEALTH_DATA) + PathLength),
VendorLength, AcpiDmTableInfoPhat1b);
if (ACPI_FAILURE (Status))
@@ -2129,15 +2131,15 @@ AcpiDmDumpPhat (
default:
AcpiOsPrintf ("\n**** Unknown PHAT subtable type 0x%X\n\n",
- Subtable->Type);
+ SubtableType);
return;
}
/* Next subtable */
- Offset += Subtable->Length;
+ Offset += SubtableLength;
Subtable = ACPI_ADD_PTR (ACPI_PHAT_HEADER, Subtable,
- Subtable->Length);
+ SubtableLength);
}
}
Index: acpica-unix2-20220331/source/compiler/dttable2.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/dttable2.c
+++ acpica-unix2-20220331/source/compiler/dttable2.c
@@ -1267,6 +1267,8 @@ DtCompilePhat (
ACPI_DMTABLE_INFO *Info;
ACPI_PHAT_VERSION_DATA *VersionData;
UINT32 RecordCount;
+ UINT16 SubtableType;
+ UINT16 Tmp16;
/* The table consist of subtables */
@@ -1284,8 +1286,9 @@ DtCompilePhat (
DtPushSubtable (Subtable);
PhatHeader = ACPI_CAST_PTR (ACPI_PHAT_HEADER, Subtable->Buffer);
+ SubtableType = AcpiUtReadUint16 (&PhatHeader->Type);
- switch (PhatHeader->Type)
+ switch (SubtableType)
{
case ACPI_PHAT_TYPE_FW_VERSION_DATA:
@@ -1316,13 +1319,13 @@ DtCompilePhat (
ParentTable = DtPeekSubtable ();
DtInsertSubtable (ParentTable, Subtable);
- switch (PhatHeader->Type)
+ switch (SubtableType)
{
case ACPI_PHAT_TYPE_FW_VERSION_DATA:
VersionData = ACPI_CAST_PTR (ACPI_PHAT_VERSION_DATA,
(Subtable->Buffer - sizeof (ACPI_PHAT_HEADER)));
- RecordCount = VersionData->ElementCount;
+ RecordCount = AcpiUtReadUint32 (&VersionData->ElementCount);
while (RecordCount)
{
@@ -1373,6 +1376,9 @@ DtCompilePhat (
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, *PFieldList, "PHAT");
return (AE_ERROR);
}
+
+ Tmp16 = AcpiUtReadUint16 (&PhatHeader->Length);
+ PhatHeader->Length = Tmp16;
}
return (Status);

View File

@ -1,51 +0,0 @@
Signed-off-by: Dean Nelson <dnelson@redhat.com>
Reviewed-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump2.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -2415,13 +2415,14 @@ AcpiDmDumpPrmt (
ACPI_PRMT_MODULE_INFO *PrmtModuleInfo;
ACPI_PRMT_HANDLER_INFO *PrmtHandlerInfo;
ACPI_STATUS Status;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
UINT32 i, j;
/* Main table header */
PrmtHeader = ACPI_ADD_PTR (ACPI_TABLE_PRMT_HEADER, Table, CurrentOffset);
- Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtHeader,
+ Status = AcpiDmDumpTable (TableLength, CurrentOffset, PrmtHeader,
sizeof (ACPI_TABLE_PRMT_HEADER), AcpiDmTableInfoPrmtHdr);
if (ACPI_FAILURE (Status))
{
@@ -2433,20 +2434,20 @@ AcpiDmDumpPrmt (
/* PRM Module Information Structure array */
- for (i = 0; i < PrmtHeader->ModuleInfoCount; ++i)
+ for (i = 0; i < AcpiUtReadUint32 (&PrmtHeader->ModuleInfoCount); ++i)
{
PrmtModuleInfo = ACPI_ADD_PTR (ACPI_PRMT_MODULE_INFO, Table, CurrentOffset);
- Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtModuleInfo,
+ Status = AcpiDmDumpTable (TableLength, CurrentOffset, PrmtModuleInfo,
sizeof (ACPI_PRMT_MODULE_INFO), AcpiDmTableInfoPrmtModule);
CurrentOffset += sizeof (ACPI_PRMT_MODULE_INFO);
/* PRM handler information structure array */
- for (j = 0; j < PrmtModuleInfo->HandlerInfoCount; ++j)
+ for (j = 0; j < AcpiUtReadUint16 (&PrmtModuleInfo->HandlerInfoCount); ++j)
{
PrmtHandlerInfo = ACPI_ADD_PTR (ACPI_PRMT_HANDLER_INFO, Table, CurrentOffset);
- Status = AcpiDmDumpTable (Table->Length, CurrentOffset, PrmtHandlerInfo,
+ Status = AcpiDmDumpTable (TableLength, CurrentOffset, PrmtHandlerInfo,
sizeof (ACPI_PRMT_HANDLER_INFO), AcpiDmTableInfoPrmtHandler);
CurrentOffset += sizeof (ACPI_PRMT_HANDLER_INFO);

View File

@ -1,35 +0,0 @@
Signed-off-by: Dean Nelson <dnelson@redhat.com>
Reviewed-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump2.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump2.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump2.c
+++ acpica-unix2-20220331/source/common/dmtbdump2.c
@@ -2475,11 +2475,12 @@ AcpiDmDumpRgrt (
ACPI_STATUS Status;
ACPI_TABLE_RGRT *Subtable = ACPI_CAST_PTR (ACPI_TABLE_RGRT, Table);
UINT32 Offset = sizeof (ACPI_TABLE_RGRT);
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
/* Main table */
- Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoRgrt);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoRgrt);
if (ACPI_FAILURE (Status))
{
return;
@@ -2487,8 +2488,8 @@ AcpiDmDumpRgrt (
/* Dump the binary image as a subtable */
- Status = AcpiDmDumpTable (Table->Length, Offset, &Subtable->Image,
- Table->Length - Offset, AcpiDmTableInfoRgrt0);
+ Status = AcpiDmDumpTable (TableLength, Offset, &Subtable->Image,
+ TableLength - Offset, AcpiDmTableInfoRgrt0);
if (ACPI_FAILURE (Status))
{
return;

View File

@ -1,42 +0,0 @@
Signed-off-by: Dean Nelson <dnelson@redhat.com>
Reviewed-by: Al Stone <ahs3@redhat.com>
---
source/common/dmtbdump3.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
Index: acpica-unix2-20220331/source/common/dmtbdump3.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump3.c
+++ acpica-unix2-20220331/source/common/dmtbdump3.c
@@ -344,14 +344,14 @@ AcpiDmDumpSvkl (
ACPI_TABLE_HEADER *Table)
{
ACPI_STATUS Status;
- UINT32 Length = Table->Length;
+ UINT32 TableLength = AcpiUtReadUint32 (&Table->Length);
UINT32 Offset = sizeof (ACPI_TABLE_SVKL);
ACPI_SVKL_KEY *Subtable;
/* Main table */
- Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSvkl);
+ Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoSvkl);
if (ACPI_FAILURE (Status))
{
return;
@@ -360,12 +360,12 @@ AcpiDmDumpSvkl (
/* The rest of the table consists of subtables (single type) */
Subtable = ACPI_ADD_PTR (ACPI_SVKL_KEY, Table, Offset);
- while (Offset < Table->Length)
+ while (Offset < TableLength)
{
/* Dump the subtable */
AcpiOsPrintf ("\n");
- Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
+ Status = AcpiDmDumpTable (TableLength, Offset, Subtable,
sizeof (ACPI_SVKL_KEY), AcpiDmTableInfoSvkl0);
if (ACPI_FAILURE (Status))
{

View File

@ -1,26 +0,0 @@
Index: acpica-unix2-20220331/generate/unix/Makefile.config
===================================================================
--- acpica-unix2-20220331.orig/generate/unix/Makefile.config
+++ acpica-unix2-20220331/generate/unix/Makefile.config
@@ -23,6 +23,9 @@
# OPT_CFLAGS can be overridden on the make command line by
# adding OPT_CFLAGS="..." to the invocation.
#
+# OPT_LDFLAGS can be overridden on the make command line by
+# adding OPT_LDFLAGS="..." to the invocation.
+#
# Notes:
# gcc should be version 4 or greater, otherwise some of the options
# used will not be recognized.
@@ -164,6 +167,11 @@ LDFLAGS +=-m32
endif
#
+# Common linker flags
+#
+OPT_LDFLAGS ?=
+
+#
# Optionally disable optimizations. Optimization causes problems on
# some compilers such as gcc 4.4
#

View File

@ -1,12 +1,12 @@
Name: acpica-tools
Version: 20220331
Release: 10%{?dist}
Version: 20240322
Release: 1%{?dist}
Summary: ACPICA tools for the development and debug of ACPI tables
License: GPLv2
URL: https://www.acpica.org/
ExcludeArch: i686 armv7hl
ExcludeArch: i686 armv7hl s390x
Source0: https://acpica.org/sites/acpica/files/acpica-unix2-%{version}.tar.gz
Source1: https://acpica.org/sites/acpica/files/acpitests-unix-%{version}.tar.gz
@ -25,75 +25,20 @@ Source14: converterSample.asl.result
Source15: run-misc-tests.sh
Source16: COPYING
# the big-endian patch set
Patch0: 0001-Add-in-basic-infrastructure-for-big-endian-support.patch
Patch1: 0002-Modify-utility-functions-to-be-endian-agnostic.patch
Patch2: 0003-Always-display-table-header-content-in-human-readabl.patch
Patch3: 0004-Re-enable-support-for-big-endian-machines.patch
Patch4: 0005-Correct-an-endian-ness-problem-when-converting-ASL-t.patch
Patch5: 0006-Use-more-reliable-ACPI_COPY_NAMSEG-in-GPE-name-check.patch
Patch6: 0007-Handle-dumping-Unicode-properly-when-big-endian.patch
Patch7: 0008-Support-MADT-aka-APIC-in-a-big-endian-world.patch
Patch8: 0009-Support-ASF-tables-in-a-big-endian-world.patch
Patch9: 0010-Support-CPEP-tables-in-a-big-endian-world.patch
Patch10: 0011-Support-DBG2-table-in-a-big-endian-world.patch
Patch11: 0012-Support-DMAR-in-a-big-endian-world.patch
Patch12: 0013-Support-DRTM-in-a-big-endian-world.patch
Patch13: 0014-Support-EINJ-in-a-big-endian-world.patch
Patch14: 0015-Support-ERST-in-a-big-endian-world.patch
Patch15: 0016-Support-FADT-aka-FACP-in-a-big-endian-world.patch
Patch16: 0017-Support-most-FPDTs-in-a-big-endian-world.patch
Patch17: 0018-Support-GTDT-in-a-big-endian-world.patch
Patch18: 0019-Support-HEST-in-a-big-endian-world.patch
Patch19: 0020-Support-RSDT-RSD-PTR-in-a-big-endian-world.patch
Patch20: 0021-Support-XSDT-in-a-big-endian-world.patch
Patch21: 0022-Support-SRAT-in-a-big-endian-world.patch
Patch22: 0023-Support-SLIT-in-a-big-endian-world.patch
Patch23: 0024-Support-MSCT-in-a-big-endian-world.patch
Patch24: 0025-Support-MPST-in-a-big-endian-world.patch
Patch25: 0026-Support-NFIT-in-a-big-endian-world.patch
Patch26: 0027-Support-SDEV-in-a-big-endian-world.patch
Patch27: 0028-Support-HMAT-in-a-big-endian-world.patch
Patch28: 0029-Support-PDTT-in-a-big-endian-world.patch
Patch29: 0030-Support-PPTT-in-a-big-endian-world.patch
Patch30: 0031-Support-PCCT-in-a-big-endian-world.patch
Patch31: 0032-Support-WDAT-in-a-big-endian-world.patch
Patch32: 0033-Support-TCPA-in-a-big-endian-world.patch
Patch33: 0034-Support-STAO-in-a-big-endian-world.patch
Patch34: 0035-Support-SLIC-and-MSDM-in-a-big-endian-world.patch
Patch35: 0036-Support-MCFG-in-a-big-endian-world.patch
Patch36: 0037-Support-LPIT-in-a-big-endian-world.patch
Patch37: 0038-Support-PMTT-in-a-big-endian-world.patch
Patch38: 0039-Support-TPM2-in-a-big-endian-world.patch
Patch39: 0040-Support-S3PT-in-a-big-endian-world.patch
Patch40: 0041-Support-IORT-in-a-big-endian-world.patch
Patch41: 0042-Support-IVRS-in-a-big-endian-world.patch
Patch42: 0043-Support-DSDT-SSDT-in-a-big-endian-world.patch
Patch43: 0045-CSRT-fixed-use-of-optional-ResourceInfo.patch
Patch44: 0046-Support-PHAT-in-a-big-endian-world.patch
Patch45: 0047-Support-PRMT-in-a-big-endian-world.patch
Patch46: 0048-Support-RGRT-in-a-big-endian-world.patch
Patch47: 0049-Support-SVKL-in-a-big-endian-world.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: armv7-str-fixes.patch
Patch114: dbtest.patch
Patch115: ull-32bit.patch
Patch116: dangling-ptr.patch
Patch117: uuid-len.patch
Patch00: unaligned.patch
Patch01: template.patch
Patch02: cve-2017-13693.patch
Patch03: cve-2017-13694.patch
Patch04: cve-2017-13695.patch
Patch05: str-trunc-warn.patch
Patch06: dbtest.patch
Patch07: dangling-ptr.patch
Patch08: uuid-len.patch
Patch09: fix-version.patch
Patch10: 0001-Correct-DBG2-dump-of-OemData.patch
Patch11: 0002-Correct-dumping-of-SLIC-tables.patch
Patch12: 0003-PHAT-FW-health-table-can-be-zero-length.patch
BuildRequires: make
BuildRequires: bison patchutils flex gcc
@ -203,7 +148,7 @@ OPT_LDFLAGS="%{__global_ldflags}"
export OPT_CFLAGS
export OPT_LDFLAGS
make
%{make_build}
%install
@ -259,6 +204,24 @@ fi
%changelog
* Wed Nov 6 2024 Al Stone <ahs3@fedoraproject.org> - 20240322-1
- Update source tree to 20240322 version from upstream. NB: this update
is done in conjunction with removing s390x support due to the large
number of patches that are now rendered obsolete. Closes BZ#2138250.
- Note, too, that the upstream version of the tarball is missing two
commits and has the wrong name; discussed this with upstream and
included a patch with the two commits to correct this, and renamed
the tarballs to try to maintain consistency. So, upstream is actually
named version 20240321, but it should be 20240322 according to their
own git tree (see tag G20240322 on github).
- Removed executable bit from all the upstream source files
- Remove big-endian support, aka s390x. Closes BZ#2298855.
- Remove several 32-bit only patches that are also obsolete since they
are for unsupported architectures (thanks to pbonzini and PR#5).
- Remove PIE patches since that is currently the default (again, thanks
to pbonzini and PR#5)
- Resolves: RHEL-66144
* Tue Oct 29 2024 Troy Dawson <tdawson@redhat.com> - 20220331-10
- Bump release for October 2024 mass rebuild:
Resolves: RHEL-64018

View File

@ -1,21 +0,0 @@
Index: acpica-unix2-20220331/source/include/acmacros.h
===================================================================
--- acpica-unix2-20220331.orig/source/include/acmacros.h
+++ acpica-unix2-20220331/source/include/acmacros.h
@@ -108,6 +108,8 @@
/* 16-bit source, 16/32/64 destination */
+#define ACPI_MOVE_16_TO_8(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];}
+
#define ACPI_MOVE_16_TO_16(d, s) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\
(( UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];}
@@ -127,6 +129,7 @@
/* 64-bit source, 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) {(( UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\

View File

@ -1,13 +0,0 @@
Index: acpica-unix2-20220331/source/include/actypes.h
===================================================================
--- acpica-unix2-20220331.orig/source/include/actypes.h
+++ acpica-unix2-20220331/source/include/actypes.h
@@ -564,7 +564,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))
-#define ACPI_COPY_NAMESEG(dest,src) (strncpy (ACPI_CAST_PTR (char, (dest)), ACPI_CAST_PTR (char, (src)), ACPI_NAMESEG_SIZE))
+#define ACPI_COPY_NAMESEG(dest,src) (memcpy (ACPI_CAST_PTR (char, (dest)), ACPI_CAST_PTR (char, (src)), ACPI_NAMESEG_SIZE))
#endif
/* Support for the special RSDP signature (8 characters) */

View File

@ -1,3 +1,12 @@
badcode.asl 37: Name (PATH, Buffer() {"\_SB_.PCI2._CRS"})
Warning 3046 - ^ Invalid or unknown escape sequence
badcode.asl 41: Name (ESC1, "abcdefg\x00hijklmn")
Warning 3055 - ^ Invalid Hex/Octal Escape - Non-ASCII or NULL
badcode.asl 268: QWordSpace (0xB0, ResourceConsumer, PosDecode, MinFixed, MaxFixed, 0xA5,
Error 6139 - Constant out of range ^ (0xB0, allowable: 0xC0-0xFF)
badcode.asl 25: Mutex (MTX1, 32)
Error 6125 - ^ SyncLevel must be in the range 0-15
@ -256,11 +265,11 @@ Warning 3144 - ^ Method Local is set but never used
Intel ACPI Component Architecture
ASL+ Optimizing Compiler/Disassembler version VVVVVVVV
Copyright (c) 2000 - 2022 Intel Corporation
Copyright (c) 2000 - 2023 Intel Corporation
Ignoring all errors, forcing AML file generation
ASL Input: badcode.asl - 11588 bytes 81 keywords 408 source lines
ASL Input: badcode.asl - 11588 bytes 81 keywords 0 source lines
AML Output: badcode.aml - 1195 bytes 20 opcodes 61 named objects
Compilation successful. 0 Errors, 28 Warnings, 11 Remarks, 16 Optimizations, 1 Constants Folded
Compilation successful. 46 Errors, 28 Warnings, 11 Remarks, 16 Optimizations, 1 Constants Folded

View File

@ -4,6 +4,21 @@ Remark 2182 - ^ At least one lower case letter found in N
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 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 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 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 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)
@ -28,11 +43,11 @@ Remark 2089 - Object is not referenced ^ (Name [A1__] is within a method [SC
Intel ACPI Component Architecture
ASL+ Optimizing Compiler/Disassembler version VVVVVVVV
Copyright (c) 2000 - 2022 Intel Corporation
Copyright (c) 2000 - 2023 Intel Corporation
Ignoring all errors, forcing AML file generation
ASL Input: converterSample.asl - 1968 bytes 11 keywords 85 source lines
ASL Input: converterSample.asl - 1968 bytes 11 keywords 0 source lines
AML Output: converterSample.aml - 184 bytes 2 opcodes 9 named objects
Compilation successful. 0 Errors, 0 Warnings, 9 Remarks, 9 Optimizations

View File

@ -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-unix2-20220331/source/components/dispatcher/dsutils.c
Index: acpica-unix2-20240321/source/components/dispatcher/dsutils.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/dispatcher/dsutils.c
+++ acpica-unix2-20220331/source/components/dispatcher/dsutils.c
--- acpica-unix2-20240321.orig/source/components/dispatcher/dsutils.c
+++ acpica-unix2-20240321/source/components/dispatcher/dsutils.c
@@ -759,6 +759,8 @@ AcpiDsCreateOperands (
ACPI_PARSE_OBJECT *Arguments[ACPI_OBJ_NUM_OPERANDS];
UINT32 ArgCount = 0;

View File

@ -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-unix2-20220331/source/components/parser/psobject.c
Index: acpica-unix2-20240321/source/components/parser/psobject.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/parser/psobject.c
+++ acpica-unix2-20220331/source/components/parser/psobject.c
--- acpica-unix2-20240321.orig/source/components/parser/psobject.c
+++ acpica-unix2-20240321/source/components/parser/psobject.c
@@ -707,7 +707,8 @@ AcpiPsCompleteFinalOp (
ACPI_PARSE_OBJECT *Op,
ACPI_STATUS Status)

View File

@ -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-unix2-20220331/source/components/namespace/nseval.c
Index: acpica-unix2-20240321/source/components/namespace/nseval.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/namespace/nseval.c
+++ acpica-unix2-20220331/source/components/namespace/nseval.c
--- acpica-unix2-20240321.orig/source/components/namespace/nseval.c
+++ acpica-unix2-20240321/source/components/namespace/nseval.c
@@ -329,6 +329,16 @@ AcpiNsEvaluate (
Info->ReturnObject = NULL;
}

View File

@ -1,7 +1,8 @@
diff -Naur acpica-unix2-20211217/source/components/utilities/utdebug.c acpica-unix2-20211217.orig/source/components/utilities/utdebug.c
--- acpica-unix2-20211217/source/components/utilities/utdebug.c 2022-03-15 17:05:07.992387565 -0600
+++ acpica-unix2-20211217.orig/source/components/utilities/utdebug.c 2021-12-17 10:48:16.000000000 -0700
@@ -58,6 +58,10 @@
Index: acpica-unix2-20240321/source/components/utilities/utdebug.c
===================================================================
--- acpica-unix2-20240321.orig/source/components/utilities/utdebug.c
+++ acpica-unix2-20240321/source/components/utilities/utdebug.c
@@ -58,6 +58,10 @@ static const char *AcpiGbl_Fun
static const char *AcpiGbl_FunctionExitPrefix = "----Exit-";
@ -12,7 +13,7 @@ diff -Naur acpica-unix2-20211217/source/components/utilities/utdebug.c acpica-un
/*******************************************************************************
*
* FUNCTION: AcpiUtInitStackPtrTrace
@@ -114,6 +110,9 @@
@@ -120,6 +124,9 @@ AcpiUtTrackStackPtr (
AcpiGbl_DeepestNesting = AcpiGbl_NestingLevel;
}
}

View File

@ -4,10 +4,10 @@ into an ACPI_OBJECT instead of just the pointer (see the use in the call
to memcpy()). So, move the init so GCC recognizes that ValueToWrite is
only a pointer, and not a whole string that needs to be moved.
Index: acpica-unix2-20220331/source/components/debugger/dbtest.c
Index: acpica-unix2-20240321/source/components/debugger/dbtest.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/debugger/dbtest.c
+++ acpica-unix2-20220331/source/components/debugger/dbtest.c
--- acpica-unix2-20240321.orig/source/components/debugger/dbtest.c
+++ acpica-unix2-20240321/source/components/debugger/dbtest.c
@@ -719,9 +719,10 @@ AcpiDbTestStringType (
ACPI_OBJECT *Temp1 = NULL;
ACPI_OBJECT *Temp2 = NULL;

View File

@ -1,71 +0,0 @@
Introduce build hardening flags for f23
From: Al Stone <ahs3@redhat.com>
---
generate/unix/Makefile.config | 2 ++
generate/unix/iasl/Makefile | 13 +++++++------
2 files changed, 9 insertions(+), 6 deletions(-)
Index: acpica-unix2-20220331/generate/unix/Makefile.config
===================================================================
--- acpica-unix2-20220331.orig/generate/unix/Makefile.config
+++ acpica-unix2-20220331/generate/unix/Makefile.config
@@ -189,6 +189,8 @@ ifneq ($(NOFORTIFY),TRUE)
OPT_CFLAGS += -D_FORTIFY_SOURCE=2
endif
+OPT_CFLAGS += -fPIC -pie
+
CFLAGS += \
-D$(ACPI_HOST)\
-D_GNU_SOURCE\
Index: acpica-unix2-20220331/generate/unix/iasl/Makefile
===================================================================
--- acpica-unix2-20220331.orig/generate/unix/iasl/Makefile
+++ acpica-unix2-20220331/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.
#
+HARDENING_FLAGS = -fPIC -pie
$(OBJDIR)/aslcompilerlex.o : $(OBJDIR)/aslcompilerlex.c
@echo "- " "Intermediate" $<
- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
+ @$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<
$(OBJDIR)/aslcompilerparse.o : $(OBJDIR)/aslcompilerparse.c
@echo "- " "Intermediate" $<
- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
+ @$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<
$(OBJDIR)/dtcompilerparserlex.o : $(OBJDIR)/dtcompilerparserlex.c
@echo "- " "Intermediate" $<
- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
+ @$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<
$(OBJDIR)/dtcompilerparserparse.o : $(OBJDIR)/dtcompilerparserparse.c
@echo "- " "Intermediate" $<
- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
+ @$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<
$(OBJDIR)/dtparserlex.o : $(OBJDIR)/dtparserlex.c
@echo "- " "Intermediate" $<
- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
+ @$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<
$(OBJDIR)/dtparserparse.o : $(OBJDIR)/dtparserparse.c
@echo "- " "Intermediate" $<
- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
+ @$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<
$(OBJDIR)/prparserlex.o : $(OBJDIR)/prparserlex.c
@echo "- " "Intermediate" $<
- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
+ @$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<
$(OBJDIR)/prparserparse.o : $(OBJDIR)/prparserparse.c
@echo "- " "Intermediate" $<
- @$(CC) -c $(CFLAGS) -Wall -Werror -o$@ $<
+ @$(CC) -c $(CFLAGS) $(HARDENING_FLAGS) -Wall -Werror -o$@ $<

50
fix-version.patch Normal file
View File

@ -0,0 +1,50 @@
The two changes that follow were inadvertently dropped by upstream
when creating the source tarball; the G20240322 tag in github contains
them.
Signed-off-by: Al Stone <ahs3@fedoraproject.org>
diff -Naur acpica-unix-20240321/changes.txt acpica-unix-20240808/changes.txt
--- acpica-unix-20240321/changes.txt 2024-03-22 00:16:29.000000000 -0600
+++ acpica-unix-20240808/changes.txt 2024-08-08 10:54:25.000000000 -0600
@@ -1,4 +1,28 @@
----------------------------------------
+22 March 2024. Summary of changes for version 20240322:
+
+Major changes:
+
+Update all the license header year from 2023 to 2024.
+
+Fix table argument ordering to work properly with iasl.
+
+Get rid of the annoying repeated warning types in MSVC and Windows.
+
+Fix a test in ASLTS with edge case failure.
+
+Fix a couple of issues with how GPEs are counted and enabled.
+
+Add new tables for various architectures/OS, mainly RISC-V and also update many more.
+
+Add an option to either make the output deterministic or non-deterministic.
+
+Remove redundant checks, duplicated code and fix spellings in various files.
+
+Fix flex arrays for C++ compilers and also make ACPICA overall more compatible with different compilers which throw warnings related to memory sanitization etc.
+
+
+----------------------------------------
28 June 2023. Summary of changes for version 20230628:
0) Global changes:
diff -Naur acpica-unix-20240321/source/include/acpixf.h acpica-unix-20240808/source/include/acpixf.h
--- acpica-unix-20240321/source/include/acpixf.h 2024-03-22 00:16:32.000000000 -0600
+++ acpica-unix-20240808/source/include/acpixf.h 2024-08-08 10:54:25.000000000 -0600
@@ -154,7 +154,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
-#define ACPI_CA_VERSION 0x20230628
+#define ACPI_CA_VERSION 0x20240322
#include "acconfig.h"
#include "actypes.h"

View File

@ -1,3 +1,18 @@
grammar.asl 522: NAME (ESC1, "abcdefg\x00hijklmn")
Warning 3055 - ^ Invalid Hex/Octal Escape - Non-ASCII or NULL
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 6478: Name (_CRS, Buffer(26) {"\_SB_.PCI2._CRS..........."})
Warning 3046 - Invalid or unknown escape sequence ^
grammar.asl 120: Device (A1)
Error 6141 - ^ Missing dependency (Device object requires a _HID or _ADR)
@ -595,11 +610,11 @@ Error 6141 - Missing dependency ^ (Device object requires a _HID or _ADR)
Intel ACPI Component Architecture
ASL+ Optimizing Compiler/Disassembler version VVVVVVVV
Copyright (c) 2000 - 2022 Intel Corporation
Copyright (c) 2000 - 2023 Intel Corporation
Ignoring all errors, forcing AML file generation
ASL Input: grammar.asl - 323653 bytes 4818 keywords 10284 source lines
ASL Input: grammar.asl - 323653 bytes 4818 keywords 0 source lines
AML Output: grammar.aml - 43758 bytes 4148 opcodes 670 named objects
Compilation successful. 0 Errors, 41 Warnings, 97 Remarks, 1106 Optimizations
Compilation successful. 60 Errors, 41 Warnings, 97 Remarks, 1106 Optimizations

View File

@ -1,283 +0,0 @@
Use proper integer formatting
From: Al Stone <ahs3@redhat.com>
---
source/compiler/aslerror.c | 4 ++--
source/compiler/aslopt.c | 2 +-
source/compiler/aslprepkg.c | 2 +-
source/components/debugger/dbexec.c | 2 +-
source/components/dispatcher/dsmthdat.c | 4 ++--
source/components/dispatcher/dsutils.c | 2 +-
source/components/dispatcher/dswscope.c | 4 ++--
source/components/events/evgpe.c | 4 ++--
source/components/executer/exdump.c | 2 +-
source/components/executer/exfldio.c | 4 ++--
source/components/executer/exnames.c | 4 ++--
source/components/hardware/hwregs.c | 2 +-
source/components/tables/tbfadt.c | 6 +++---
source/components/tables/tbxfroot.c | 6 +++---
source/components/utilities/utownerid.c | 2 +-
18 files changed, 28 insertions(+), 28 deletions(-)
Index: acpica-unix2-20220331/source/compiler/aslerror.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/aslerror.c
+++ acpica-unix2-20220331/source/compiler/aslerror.c
@@ -917,7 +917,7 @@ AslLogNewError (
AslGbl_ExceptionCount[ModifiedLevel]++;
if (!AslGbl_IgnoreErrors && AslGbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT)
{
- printf ("\nMaximum error count (%u) exceeded (aslerror.c)\n", ASL_MAX_ERROR_COUNT);
+ printf ("\nMaximum error count (%d) exceeded (aslerror.c)\n", ASL_MAX_ERROR_COUNT);
AslGbl_SourceLine = 0;
AslGbl_NextError = AslGbl_ErrorLog;
Index: acpica-unix2-20220331/source/compiler/aslopt.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/aslopt.c
+++ acpica-unix2-20220331/source/compiler/aslopt.c
@@ -583,7 +583,7 @@ OptOptimizeNamePath (
}
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS,
- "PATH OPTIMIZE: Line %5d ParentOp [%12.12s] ThisOp [%12.12s] ",
+ "PATH OPTIMIZE: Line %5u ParentOp [%12.12s] ThisOp [%12.12s] ",
Op->Asl.LogicalLineNumber,
AcpiPsGetOpcodeName (Op->Common.Parent->Common.AmlOpcode),
AcpiPsGetOpcodeName (Op->Common.AmlOpcode)));
Index: acpica-unix2-20220331/source/compiler/aslprepkg.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/aslprepkg.c
+++ acpica-unix2-20220331/source/compiler/aslprepkg.c
@@ -320,7 +320,7 @@ ApCheckPackage (
if (Count & 1)
{
- sprintf (AslGbl_MsgBuffer, "%4.4s: Package length, %d, must be even.",
+ sprintf (AslGbl_MsgBuffer, "%4.4s: Package length, %u, must be even.",
Predefined->Info.Name, Count);
AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH,
Index: acpica-unix2-20220331/source/components/debugger/dbexec.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/debugger/dbexec.c
+++ acpica-unix2-20220331/source/components/debugger/dbexec.c
@@ -231,7 +231,7 @@ AcpiDbExecuteMethod (
ACPI_ERROR ((AE_INFO,
"Possible buffer overflow within AML Debugger "
"buffer (size 0x%X needed 0x%X)",
- ACPI_DEBUG_BUFFER_SIZE, (UINT32) ReturnObj->Length));
+ (UINT32) ACPI_DEBUG_BUFFER_SIZE, (UINT32) ReturnObj->Length));
}
}
Index: acpica-unix2-20220331/source/components/dispatcher/dsmthdat.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/dispatcher/dsmthdat.c
+++ acpica-unix2-20220331/source/components/dispatcher/dsmthdat.c
@@ -291,7 +291,7 @@ AcpiDsMethodDataGetNode (
if (Index > ACPI_METHOD_MAX_LOCAL)
{
ACPI_ERROR ((AE_INFO,
- "Local index %u is invalid (max %u)",
+ "Local index %u is invalid (max %d)",
Index, ACPI_METHOD_MAX_LOCAL));
return_ACPI_STATUS (AE_AML_INVALID_INDEX);
}
@@ -306,7 +306,7 @@ AcpiDsMethodDataGetNode (
if (Index > ACPI_METHOD_MAX_ARG)
{
ACPI_ERROR ((AE_INFO,
- "Arg index %u is invalid (max %u)",
+ "Arg index %u is invalid (max %d)",
Index, ACPI_METHOD_MAX_ARG));
return_ACPI_STATUS (AE_AML_INVALID_INDEX);
}
Index: acpica-unix2-20220331/source/components/dispatcher/dsutils.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/dispatcher/dsutils.c
+++ acpica-unix2-20220331/source/components/dispatcher/dsutils.c
@@ -786,7 +786,7 @@ AcpiDsCreateOperands (
}
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
- "NumOperands %d, ArgCount %d, Index %d\n",
+ "NumOperands %d, ArgCount %u, Index %u\n",
WalkState->NumOperands, ArgCount, Index));
/* Create the interpreter arguments, in reverse order */
Index: acpica-unix2-20220331/source/components/dispatcher/dswscope.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/dispatcher/dswscope.c
+++ acpica-unix2-20220331/source/components/dispatcher/dswscope.c
@@ -149,7 +149,7 @@ AcpiDsScopeStackPush (
WalkState->ScopeDepth++;
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
- "[%.2d] Pushed scope ", (UINT32) WalkState->ScopeDepth));
+ "[%.2d] Pushed scope ", WalkState->ScopeDepth));
OldScopeInfo = WalkState->ScopeInfo;
if (OldScopeInfo)
@@ -211,7 +211,7 @@ AcpiDsScopeStackPop (
WalkState->ScopeDepth--;
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
- "[%.2d] Popped scope [%4.4s] (%s), New scope -> ",
+ "[%.2u] Popped scope [%4.4s] (%s), New scope -> ",
(UINT32) WalkState->ScopeDepth,
AcpiUtGetNodeName (ScopeInfo->Scope.Node),
AcpiUtGetTypeName (ScopeInfo->Common.Value)));
Index: acpica-unix2-20220331/source/components/events/evgpe.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/events/evgpe.c
+++ acpica-unix2-20220331/source/components/events/evgpe.c
@@ -488,7 +488,7 @@ AcpiEvGpeDetect (
"Ignore disabled registers for GPE %02X-%02X: "
"RunEnable=%02X, WakeEnable=%02X\n",
GpeRegisterInfo->BaseGpeNumber,
- GpeRegisterInfo->BaseGpeNumber + (ACPI_GPE_REGISTER_WIDTH - 1),
+ (unsigned int) (GpeRegisterInfo->BaseGpeNumber + (ACPI_GPE_REGISTER_WIDTH - 1)),
GpeRegisterInfo->EnableForRun,
GpeRegisterInfo->EnableForWake));
continue;
Index: acpica-unix2-20220331/source/components/executer/exdump.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/executer/exdump.c
+++ acpica-unix2-20220331/source/components/executer/exdump.c
@@ -678,7 +678,7 @@ AcpiExDumpOperand (
if (Depth > 0)
{
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p Refs=%u ",
- Depth, " ", Depth, ObjDesc, ObjDesc->Common.ReferenceCount));
+ (int) Depth, " ", Depth, ObjDesc, ObjDesc->Common.ReferenceCount));
}
else
{
Index: acpica-unix2-20220331/source/components/executer/exfldio.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/executer/exfldio.c
+++ acpica-unix2-20220331/source/components/executer/exfldio.c
@@ -681,8 +681,8 @@ AcpiExWriteWithUpdateRule (
ACPI_ERROR ((AE_INFO,
"Unknown UpdateRule value: 0x%X",
- (ObjDesc->CommonField.FieldFlags &
- AML_FIELD_UPDATE_RULE_MASK)));
+ (unsigned int) (ObjDesc->CommonField.FieldFlags &
+ AML_FIELD_UPDATE_RULE_MASK)));
return_ACPI_STATUS (AE_AML_OPERAND_VALUE);
}
}
Index: acpica-unix2-20220331/source/components/executer/exnames.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/executer/exnames.c
+++ acpica-unix2-20220331/source/components/executer/exnames.c
@@ -237,7 +237,7 @@ AcpiExNameSegment (
*/
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"Leading character is not alpha: %02Xh (not a name)\n",
- CharBuf[0]));
+ (unsigned int) CharBuf[0]));
Status = AE_CTRL_PENDING;
}
else
@@ -249,7 +249,7 @@ AcpiExNameSegment (
Status = AE_AML_BAD_NAME;
ACPI_ERROR ((AE_INFO,
"Bad character 0x%02x in name, at %p",
- *AmlAddress, AmlAddress));
+ (unsigned int) (*AmlAddress), AmlAddress));
}
*InAmlAddress = ACPI_CAST_PTR (UINT8, AmlAddress);
Index: acpica-unix2-20220331/source/components/hardware/hwregs.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/hardware/hwregs.c
+++ acpica-unix2-20220331/source/components/hardware/hwregs.c
@@ -460,7 +460,7 @@ AcpiHwClearAcpiStatus (
ACPI_DEBUG_PRINT ((ACPI_DB_IO, "About to write %04X to %8.8X%8.8X\n",
- ACPI_BITMASK_ALL_FIXED_STATUS,
+ (UINT32) ACPI_BITMASK_ALL_FIXED_STATUS,
ACPI_FORMAT_UINT64 (AcpiGbl_XPm1aStatus.Address)));
LockFlags = AcpiOsAcquireLock (AcpiGbl_HardwareLock);
Index: acpica-unix2-20220331/source/components/tables/tbfadt.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/tables/tbfadt.c
+++ acpica-unix2-20220331/source/components/tables/tbfadt.c
@@ -233,7 +233,7 @@ AcpiTbInitGenericAddress (
if (!(Flags & ACPI_FADT_GPE_REGISTER))
{
ACPI_ERROR ((AE_INFO,
- "%s - 32-bit FADT register is too long (%u bytes, %u bits) "
+ "%s - 32-bit FADT register is too long (%u bytes, %d bits) "
"to convert to GAS struct - 255 bits max, truncating",
RegisterName, ByteWidth, (ByteWidth * 8)));
}
@@ -303,7 +303,7 @@ AcpiTbSelectAddress (
ACPI_BIOS_WARNING ((AE_INFO,
"32/64X %s address mismatch in FADT: "
- "0x%8.8X/0x%8.8X%8.8X, using %u-bit address",
+ "0x%8.8X/0x%8.8X%8.8X, using %d-bit address",
RegisterName, Address32, ACPI_FORMAT_UINT64 (Address64),
AcpiGbl_Use32BitFadtAddresses ? 32 : 64));
@@ -631,7 +631,7 @@ AcpiTbConvertFadt (
ACPI_BIOS_WARNING ((AE_INFO,
"32/64X address mismatch in FADT/%s: "
- "0x%8.8X/0x%8.8X%8.8X, using %u-bit address",
+ "0x%8.8X/0x%8.8X%8.8X, using %d-bit address",
Name, Address32,
ACPI_FORMAT_UINT64 (Address64->Address),
AcpiGbl_Use32BitFadtAddresses ? 32 : 64));
Index: acpica-unix2-20220331/source/components/tables/tbxfroot.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/tables/tbxfroot.c
+++ acpica-unix2-20220331/source/components/tables/tbxfroot.c
@@ -177,7 +177,7 @@ AcpiFindRootPointer (
{
ACPI_ERROR ((AE_INFO,
"Could not map memory at 0x%8.8X for length %u",
- ACPI_EBDA_PTR_LOCATION, ACPI_EBDA_PTR_LENGTH));
+ (UINT32) ACPI_EBDA_PTR_LOCATION, (UINT32) ACPI_EBDA_PTR_LENGTH));
return_ACPI_STATUS (AE_NO_MEMORY);
}
@@ -204,7 +204,7 @@ AcpiFindRootPointer (
{
ACPI_ERROR ((AE_INFO,
"Could not map memory at 0x%8.8X for length %u",
- PhysicalAddress, ACPI_EBDA_WINDOW_SIZE));
+ PhysicalAddress, (UINT32) ACPI_EBDA_WINDOW_SIZE));
return_ACPI_STATUS (AE_NO_MEMORY);
}
@@ -236,7 +236,7 @@ AcpiFindRootPointer (
{
ACPI_ERROR ((AE_INFO,
"Could not map memory at 0x%8.8X for length %u",
- ACPI_HI_RSDP_WINDOW_BASE, ACPI_HI_RSDP_WINDOW_SIZE));
+ (UINT32) ACPI_HI_RSDP_WINDOW_BASE, (UINT32) ACPI_HI_RSDP_WINDOW_SIZE));
return_ACPI_STATUS (AE_NO_MEMORY);
}
Index: acpica-unix2-20220331/source/components/utilities/utownerid.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/utilities/utownerid.c
+++ acpica-unix2-20220331/source/components/utilities/utownerid.c
@@ -237,7 +237,7 @@ AcpiUtReleaseOwnerId (
else
{
ACPI_ERROR ((AE_INFO,
- "Attempted release of non-allocated OwnerId: 0x%3.3X", OwnerId + 1));
+ "Release of non-allocated OwnerId: 0x%2.2X", (UINT32) OwnerId + 1));
}
(void) AcpiUtReleaseMutex (ACPI_MTX_CACHES);

View File

@ -1,22 +0,0 @@
Index: acpica-unix2-20220331/source/compiler/aslparseop.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/aslparseop.c
+++ acpica-unix2-20220331/source/compiler/aslparseop.c
@@ -285,7 +285,16 @@ TrCreateValuedLeafOp (
Op = TrAllocateOp (ParseOpcode);
- Op->Asl.Value.Integer = Value;
+ if (ParseOpcode == PARSEOP_NAMESTRING ||
+ ParseOpcode == PARSEOP_NAMESEG ||
+ ParseOpcode == PARSEOP_STRING_LITERAL)
+ {
+ Op->Asl.Value.String = (char *) Value;
+ }
+ else
+ {
+ Op->Asl.Value.Integer = Value;
+ }
DbgPrint (ASL_PARSE_OUTPUT,
"\nCreateValuedLeafOp Ln/Col %u/%u NewOp %p "

View File

@ -1,49 +0,0 @@
Index: acpica-unix2-20220331/source/components/tables/tbutils.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/tables/tbutils.c
+++ acpica-unix2-20220331/source/components/tables/tbutils.c
@@ -238,9 +238,11 @@ AcpiTbGetRootTableEntry (
* 64-bit platform, XSDT: Move (unaligned) 64-bit to local,
* return 64-bit
*/
- ACPI_MOVE_64_TO_64 (&Address64, TableEntry);
#if ACPI_MACHINE_WIDTH == 32
+ UINT32 Tmp32 = (UINT32) TableEntry;
+
+ Address64 = (UINT64) Tmp32;
if (Address64 > ACPI_UINT32_MAX)
{
/* Will truncate 64-bit address to 32 bits, issue warning */
@@ -250,8 +252,14 @@ AcpiTbGetRootTableEntry (
" truncating",
ACPI_FORMAT_UINT64 (Address64)));
}
-#endif
+
+ return ((ACPI_PHYSICAL_ADDRESS) (*ACPI_CAST_PTR (
+ UINT32, TableEntry)));
+#else
+ Address64 = (UINT64) TableEntry;
+
return ((ACPI_PHYSICAL_ADDRESS) (Address64));
+#endif
}
}
Index: acpica-unix2-20220331/source/compiler/aslparseop.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/aslparseop.c
+++ acpica-unix2-20220331/source/compiler/aslparseop.c
@@ -289,7 +289,11 @@ TrCreateValuedLeafOp (
ParseOpcode == PARSEOP_NAMESEG ||
ParseOpcode == PARSEOP_STRING_LITERAL)
{
+#if ACPI_MACHINE_WIDTH == 32
+ Op->Asl.Value.String = (char *) (UINT32) Value;
+#else
Op->Asl.Value.String = (char *) Value;
+#endif
}
else
{

View File

@ -16,7 +16,7 @@ BINDIR="$1"
VERSION="$2"
# create files to compare against
$BINDIR/iasl -hZZ
$BINDIR/iasl -h
sed -e "s/VVVVVVVV/$VERSION/" \
../badcode.asl.result > misc/badcode.asl.expected

View File

@ -1,21 +0,0 @@
Description: Stop listing all 64bit architectures
Check __LP64__ instead of maintaining a list of all
64bit architectures.
Author: Adrian Bunk <bunk@debian.org>
Index: acpica-unix2-20220331/source/include/platform/aclinux.h
===================================================================
--- acpica-unix2-20220331.orig/source/include/platform/aclinux.h
+++ acpica-unix2-20220331/source/include/platform/aclinux.h
@@ -220,10 +220,7 @@
#define ACPI_FLUSH_CPU_CACHE()
#define ACPI_CAST_PTHREAD_T(Pthread) ((ACPI_THREAD_ID) (Pthread))
-#if defined(__ia64__) || (defined(__x86_64__) && !defined(__ILP32__)) ||\
- defined(__aarch64__) || defined(__PPC64__) ||\
- defined(__s390x__) ||\
- (defined(__riscv) && (defined(__LP64__) || defined(_LP64)))
+#if defined(__LP64__)
#define ACPI_MACHINE_WIDTH 64
#define COMPILER_DEPENDENT_INT64 long
#define COMPILER_DEPENDENT_UINT64 unsigned long

View File

@ -1,2 +1,2 @@
SHA512 (acpica-unix2-20220331.tar.gz) = c606396323dc342ae4c7bab9526b04aca09b00a932363146c1791523962ade0bdb4e40b67ff2a0a246df3ce322592879288c3fcc5fb7a450beb87a6d70c5ef40
SHA512 (acpitests-unix-20220331.tar.gz) = 28ead3ff06fc7e409e5fd02358048470daac6d3a96f24408068b84199f33513b5fcaa7c00a31972e63fc481d4b5980f8b8f131549d9d1bcd19fa20f3a1c2aaaf
SHA512 (acpica-unix2-20240322.tar.gz) = 199a5acb93193f22b9f85690ad87cdf914185fdf52beafaec8c4299c29f4c9d5b618c72a62413b228307f5be3933cf51cdcd91a6728d9caea66408534006e3f8
SHA512 (acpitests-unix-20240322.tar.gz) = e09b0b953d53e28b9849b1ed41068c5542f0e36eb47f442bba6238727bfd96ad94584c0aa1e8d92c307c317dbd208388d3d9c83c2d17e146571a7373bff40b98

View File

@ -1,7 +1,7 @@
Index: acpica-unix2-20220331/source/compiler/aslanalyze.c
Index: acpica-unix2-20240321/source/compiler/aslanalyze.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/aslanalyze.c
+++ acpica-unix2-20220331/source/compiler/aslanalyze.c
--- acpica-unix2-20240321.orig/source/compiler/aslanalyze.c
+++ acpica-unix2-20240321/source/compiler/aslanalyze.c
@@ -358,11 +358,16 @@ AnCheckMethodReturnValue (
*/
if (ThisNodeBtype != 0)
@ -21,10 +21,10 @@ Index: acpica-unix2-20220331/source/compiler/aslanalyze.c
}
}
Index: acpica-unix2-20220331/source/compiler/aslpredef.c
Index: acpica-unix2-20240321/source/compiler/aslpredef.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/aslpredef.c
+++ acpica-unix2-20220331/source/compiler/aslpredef.c
--- acpica-unix2-20240321.orig/source/compiler/aslpredef.c
+++ acpica-unix2-20240321/source/compiler/aslpredef.c
@@ -159,14 +159,19 @@ ApCheckForPredefinedMethod (
if (MethodInfo->NumReturnNoValue &&
ThisName->Info.ExpectedBtypes)
@ -84,10 +84,10 @@ Index: acpica-unix2-20220331/source/compiler/aslpredef.c
return (AE_TYPE);
}
Index: acpica-unix2-20220331/source/compiler/aslwalks.c
Index: acpica-unix2-20240321/source/compiler/aslwalks.c
===================================================================
--- acpica-unix2-20220331.orig/source/compiler/aslwalks.c
+++ acpica-unix2-20220331/source/compiler/aslwalks.c
--- acpica-unix2-20240321.orig/source/compiler/aslwalks.c
+++ acpica-unix2-20240321/source/compiler/aslwalks.c
@@ -515,15 +515,19 @@ AnOperandTypecheckWalkEnd (
else if (!CommonBtypes)
{

View File

@ -7,10 +7,10 @@ From: Al Stone <ahs3@redhat.com>
tests/templates/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: acpica-unix2-20220331/tests/templates/Makefile
Index: acpica-unix2-20240321/tests/templates/Makefile
===================================================================
--- acpica-unix2-20220331.orig/tests/templates/Makefile
+++ acpica-unix2-20220331/tests/templates/Makefile
--- acpica-unix2-20240321.orig/tests/templates/Makefile
+++ acpica-unix2-20240321/tests/templates/Makefile
@@ -26,7 +26,7 @@ $(aml_obj): %.aml: %.asl

View File

@ -1,16 +0,0 @@
Index: acpica-unix2-20220331/source/common/dmtbdump.c
===================================================================
--- acpica-unix2-20220331.orig/source/common/dmtbdump.c
+++ acpica-unix2-20220331/source/common/dmtbdump.c
@@ -392,7 +392,11 @@ AcpiDmDumpXsdt (
for (i = 0; i < Entries; i++)
{
AcpiDmLineHeader2 (Offset, sizeof (UINT64), "ACPI Table Address", i);
+#if ACPI_MACHINE_WIDTH == 32
+ AcpiOsPrintf ("%16.16llX\n", AcpiUtReadUint64 (&Array[i]));
+#else
AcpiOsPrintf ("%16.16lX\n", AcpiUtReadUint64 (&Array[i]));
+#endif
Offset += sizeof (UINT64);
}
}

View File

@ -14,10 +14,10 @@ Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
source/include/actypes.h | 26 +++++++++++++-------------
3 files changed, 32 insertions(+), 21 deletions(-)
Index: acpica-unix2-20220331/source/components/executer/exoparg2.c
Index: acpica-unix2-20240321/source/components/executer/exoparg2.c
===================================================================
--- acpica-unix2-20220331.orig/source/components/executer/exoparg2.c
+++ acpica-unix2-20220331/source/components/executer/exoparg2.c
--- acpica-unix2-20240321.orig/source/components/executer/exoparg2.c
+++ acpica-unix2-20240321/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-unix2-20220331/source/components/executer/exoparg2.c
break;
case AML_CONCATENATE_OP: /* Concatenate (Data1, Data2, Result) */
Index: acpica-unix2-20220331/source/include/actypes.h
Index: acpica-unix2-20240321/source/include/actypes.h
===================================================================
--- acpica-unix2-20220331.orig/source/include/actypes.h
+++ acpica-unix2-20220331/source/include/actypes.h
--- acpica-unix2-20240321.orig/source/include/actypes.h
+++ acpica-unix2-20240321/source/include/actypes.h
@@ -143,6 +143,19 @@ typedef COMPILER_DEPENDENT_INT64
*/
#define ACPI_THREAD_ID UINT64

View File

@ -1,7 +1,8 @@
diff -Naur acpica-unix2-20211217.orig/source/tools/acpiexec/aeregion.c acpica-unix2-20211217/source/tools/acpiexec/aeregion.c
--- acpica-unix2-20211217.orig/source/tools/acpiexec/aeregion.c 2021-12-17 10:48:17.000000000 -0700
+++ acpica-unix2-20211217/source/tools/acpiexec/aeregion.c 2022-03-18 15:53:25.032687782 -0600
@@ -97,7 +97,7 @@
Index: acpica-unix2-20240321/source/tools/acpiexec/aeregion.c
===================================================================
--- acpica-unix2-20240321.orig/source/tools/acpiexec/aeregion.c
+++ acpica-unix2-20240321/source/tools/acpiexec/aeregion.c
@@ -97,7 +97,7 @@ AeRegionHandler (
UINT32 Value1;
UINT32 Value2;
ACPI_RESOURCE *Resource;

View File

@ -1,196 +0,0 @@
Index: acpica-unix2-20210604/source/common/dmtable.c
===================================================================
--- acpica-unix2-20210604.orig/source/common/dmtable.c
+++ acpica-unix2-20210604/source/common/dmtable.c
@@ -979,6 +979,12 @@ AcpiDmDumpTable (
ByteLength = 128;
break;
+ case ACPI_DMT_WPBT_UNICODE:
+
+ ByteLength = SubtableLength;
+ CurrentOffset = sizeof (ACPI_TABLE_WPBT);
+ break;
+
case ACPI_DMT_UNICODE:
case ACPI_DMT_BUFFER:
case ACPI_DMT_RAW_BUFFER:
@@ -1596,6 +1602,7 @@ AcpiDmDumpTable (
break;
case ACPI_DMT_UNICODE:
+ case ACPI_DMT_WPBT_UNICODE:
if (ByteLength == 0)
{
Index: acpica-unix2-20210604/source/common/dmtbdump3.c
===================================================================
--- acpica-unix2-20210604.orig/source/common/dmtbdump3.c
+++ acpica-unix2-20210604/source/common/dmtbdump3.c
@@ -753,8 +753,11 @@ AcpiDmDumpWpbt (
Subtable = ACPI_CAST_PTR (ACPI_TABLE_WPBT, Table);
ArgumentsLength = AcpiUtReadUint16 (&Subtable->ArgumentsLength);
- /* Dump the arguments buffer */
+ /* Dump the arguments buffer if present */
- (void) AcpiDmDumpTable (TableLength, 0, Table, ArgumentsLength,
- AcpiDmTableInfoWpbt0);
+ if (ArgumentsLength)
+ {
+ (void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength,
+ AcpiDmTableInfoWpbt0);
+ }
}
Index: acpica-unix2-20210604/source/common/dmtbinfo3.c
===================================================================
--- acpica-unix2-20210604.orig/source/common/dmtbinfo3.c
+++ acpica-unix2-20210604/source/common/dmtbinfo3.c
@@ -651,7 +651,7 @@ ACPI_DMTABLE_INFO AcpiDmTableI
ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[] =
{
- {ACPI_DMT_UNICODE, sizeof (ACPI_TABLE_WPBT), "Command-line Arguments", 0},
+ {ACPI_DMT_WPBT_UNICODE, ACPI_WPBT2_OFFSET (UnicodeString), "Command-line Arguments", DT_DESCRIBES_OPTIONAL},
ACPI_DMT_TERMINATOR
};
Index: acpica-unix2-20210604/source/compiler/dttable2.c
===================================================================
--- acpica-unix2-20210604.orig/source/compiler/dttable2.c
+++ acpica-unix2-20210604/source/compiler/dttable2.c
@@ -2615,13 +2615,11 @@ DtCompileWpbt (
DT_SUBTABLE *ParentTable;
ACPI_TABLE_WPBT *Table;
ACPI_STATUS Status;
- UINT16 Length;
/* Compile the main table */
- Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt,
- &Subtable);
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt, &Subtable);
if (ACPI_FAILURE (Status))
{
return (Status);
@@ -2629,11 +2627,23 @@ DtCompileWpbt (
ParentTable = DtPeekSubtable ();
DtInsertSubtable (ParentTable, Subtable);
+ Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer);
+
+ /*
+ * Exit now if there are no arguments specified. This is indicated by:
+ * The "Command-line Arguments" field has not been specified (if specified,
+ * it will be the last field in the field list -- after the main table).
+ * Set the Argument Length in the main table to zero.
+ */
+ if (!*PFieldList)
+ {
+ Table->ArgumentsLength = 0;
+ return (AE_OK);
+ }
/* Compile the argument list subtable */
- Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0,
- &Subtable);
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoWpbt0, &Subtable);
if (ACPI_FAILURE (Status))
{
return (Status);
@@ -2641,12 +2651,8 @@ DtCompileWpbt (
/* Extract the length of the Arguments buffer, insert into main table */
- AcpiUtWriteUint (&Length, sizeof (UINT16),
+ AcpiUtWriteUint (&Table->ArgumentsLength, sizeof (UINT16),
&Subtable->TotalLength, sizeof (UINT32));
- Table = ACPI_CAST_PTR (ACPI_TABLE_WPBT, ParentTable->Buffer);
- Table->ArgumentsLength = AcpiUtReadUint16 (&Length);
-
- ParentTable = DtPeekSubtable ();
DtInsertSubtable (ParentTable, Subtable);
return (AE_OK);
}
Index: acpica-unix2-20210604/source/compiler/dtutils.c
===================================================================
--- acpica-unix2-20210604.orig/source/compiler/dtutils.c
+++ acpica-unix2-20210604/source/compiler/dtutils.c
@@ -344,6 +344,7 @@ DtGetFieldType (
break;
case ACPI_DMT_UNICODE:
+ case ACPI_DMT_WPBT_UNICODE:
Type = DT_FIELD_TYPE_UNICODE;
break;
@@ -626,12 +627,13 @@ DtGetFieldLength (
break;
case ACPI_DMT_UNICODE:
+ case ACPI_DMT_WPBT_UNICODE:
Value = DtGetFieldValue (Field);
/* TBD: error if Value is NULL? (as below?) */
- ByteLength = (strlen (Value) + 1) * sizeof(UINT16);
+ ByteLength = (strlen (Value) + 1) * sizeof (UINT16);
break;
default:
Index: acpica-unix2-20210604/source/include/acdisasm.h
===================================================================
--- acpica-unix2-20210604.orig/source/include/acdisasm.h
+++ acpica-unix2-20210604/source/include/acdisasm.h
@@ -175,6 +175,7 @@ typedef enum
ACPI_DMT_SRAT,
ACPI_DMT_TPM2,
ACPI_DMT_VIOT,
+ ACPI_DMT_WPBT_UNICODE,
/* Special opcodes */
Index: acpica-unix2-20210604/source/include/actbinfo.h
===================================================================
--- acpica-unix2-20210604.orig/source/include/actbinfo.h
+++ acpica-unix2-20210604/source/include/actbinfo.h
@@ -97,6 +97,7 @@
#define ACPI_WDDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDDT,f)
#define ACPI_WDRT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDRT,f)
#define ACPI_WPBT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WPBT,f)
+#define ACPI_WPBT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WPBT_UNICODE,f)
#define ACPI_WSMT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WSMT,f)
#define ACPI_XENV_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_XENV,f)
Index: acpica-unix2-20210604/source/include/actbl3.h
===================================================================
--- acpica-unix2-20210604.orig/source/include/actbl3.h
+++ acpica-unix2-20210604/source/include/actbl3.h
@@ -847,6 +847,12 @@ typedef struct acpi_table_wpbt
} ACPI_TABLE_WPBT;
+typedef struct acpi_wpbt_unicode
+{
+ UINT16 *UnicodeString;
+
+} ACPI_WPBT_UNICODE;
+
/*******************************************************************************
*
Index: acpica-unix2-20210604/source/tools/acpisrc/astable.c
===================================================================
--- acpica-unix2-20210604.orig/source/tools/acpisrc/astable.c
+++ acpica-unix2-20210604/source/tools/acpisrc/astable.c
@@ -772,6 +772,7 @@ ACPI_TYPED_IDENTIFIER_TABLE Ac
{"ACPI_VIOT_VIRTIO_IOMMU_PCI", SRC_TYPE_STRUCT},
{"ACPI_VIOT_VIRTIO_IOMMU_MMIO", SRC_TYPE_STRUCT},
{"ACPI_WDAT_ENTRY", SRC_TYPE_STRUCT},
+ {"ACPI_WPBT_UNICODE", SRC_TYPE_STRUCT},
/* Data Table compiler */