aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2025-12-19 05:24:03 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2025-12-19 05:24:03 +0000
commit5cab380e2a2644aaa920b93f1580a1cfc803a8de (patch)
treeddcdfcba94a4c4166cab7c4f37d1c57d1ec6ea91
parent5bb60d44e94172a567412968545c82065695d871 (diff)
-rw-r--r--changes.txt140
-rw-r--r--source/common/ahids.c2
-rw-r--r--source/common/ahpredef.c1
-rw-r--r--source/common/ahtable.c1
-rw-r--r--source/common/ahuuids.c6
-rw-r--r--source/common/dmtable.c117
-rw-r--r--source/common/dmtbdump2.c185
-rw-r--r--source/common/dmtbdump3.c67
-rw-r--r--source/common/dmtbinfo2.c123
-rw-r--r--source/common/dmtbinfo3.c25
-rw-r--r--source/compiler/dtcompiler.h10
-rw-r--r--source/compiler/dttable1.c85
-rw-r--r--source/compiler/dttable2.c85
-rw-r--r--source/compiler/dttemplate.h65
-rw-r--r--source/compiler/dtutils.c2
-rw-r--r--source/components/events/evregion.c2
-rw-r--r--source/components/executer/exoparg3.c46
-rw-r--r--source/components/namespace/nswalk.c11
-rw-r--r--source/components/namespace/nsxfname.c2
-rw-r--r--source/components/tables/tbprint.c5
-rw-r--r--source/components/utilities/utobject.c2
-rw-r--r--source/components/utilities/utosi.c6
-rw-r--r--source/include/acdisasm.h21
-rw-r--r--source/include/aclocal.h2
-rw-r--r--source/include/acpixf.h2
-rw-r--r--source/include/acpredef.h5
-rw-r--r--source/include/actbinfo.h12
-rw-r--r--source/include/actbl1.h5
-rw-r--r--source/include/actbl2.h220
-rw-r--r--source/include/actbl3.h1
-rw-r--r--source/include/acuuid.h6
-rw-r--r--source/tools/acpidump/apdump.c3
-rw-r--r--source/tools/acpisrc/astable.c4
33 files changed, 1112 insertions, 157 deletions
diff --git a/changes.txt b/changes.txt
index 4e3cf4f2f41c..2c13c692d194 100644
--- a/changes.txt
+++ b/changes.txt
@@ -1,4 +1,24 @@
----------------------------------------
+12 December 2025. Summary of changes for version 20251212:
+
+Major changes:
+
+Update many existing ACPI tables to follow the ACPI 6.6 Specification
+changes and/or newly approved ASWG ECRs - multiple contributors
+
+Add a few new ACPI tables: IOVT, SWFT, KEYP - multiple contributors
+
+Add many new UUIDs, Hardware/PnP/ACPI IDs - Armin Wolf and Pawel
+Chmielewski
+
+Support a few new special methods (_xxx format) and modify few existing
+ones to stay compliant with the latest ACPI Specification changes
+
+Improve existing tools/utilities and fix/clean up some problematic usages
+along with patching certain vulnerabilities
+
+
+----------------------------------------
7 August 2025. Summary of changes for version 20250807:
Major changes:
@@ -9,11 +29,15 @@ Fixed non-NUL terminated string implementations - Ahmed Salem
Fixed CCEL and CDAT templates - Ahmed Salem
-Fixed a major Linux kernel bug (UAF) that was triggered by unequal number of method parameters (definition) vs arguments (invocation) in different places - Peter Williams, Hans de Goede, Rafael Wysocki
+Fixed a major Linux kernel bug (UAF) that was triggered by unequal number
+of method parameters (definition) vs arguments (invocation) in different
+places - Peter Williams, Hans de Goede, Rafael Wysocki
-Define distinct D3 states (D3Hot and D3Cold) that help clarify the device behavior support - Aymeric Wibo
+Define distinct D3 states (D3Hot and D3Cold) that help clarify the device
+behavior support - Aymeric Wibo
-A few cleanups, improvements to existing table supports, small fixes, spelling corrections etc.
+A few cleanups, improvements to existing table supports, small fixes,
+spelling corrections etc.
----------------------------------------
@@ -21,15 +45,22 @@ A few cleanups, improvements to existing table supports, small fixes, spelling c
Major changes:
-Update all the copyright continuation year to 2025 in the license header of all files
+Update all the copyright continuation year to 2025 in the license header
+of all files
-Add complete support for 3 new ACPI tables - MRRM,ERDT and RIMT (Tony Luck & V L Sunil)
+Add complete support for 3 new ACPI tables - MRRM,ERDT and RIMT (Tony
+Luck & V L Sunil)
-Add a license file to the project which is a great improvement (Dionna Glaze)
+Add a license file to the project which is a great improvement (Dionna
+Glaze)
-Update DMAR and TPM2 tables to support their latest versions (Alexey Neyman and Stuart Yoder)
+Update DMAR and TPM2 tables to support their latest versions (Alexey
+Neyman and Stuart Yoder)
-A few fixes including local cache allocation, FFixedHW Region, attribute packing, string vs. non-string char array, vsnprintf()etc. along with some comments, spelling errors and code alignment (multiple awesome contributors)
+A few fixes including local cache allocation, FFixedHW Region, attribute
+packing, string vs. non-string char array, vsnprintf()etc. along with
+some comments, spelling errors and code alignment (multiple awesome
+contributors)
----------------------------------------
@@ -43,9 +74,11 @@ EINJ V2 updates - Zaid Alali (Ampere Computing)
CDAT updates - Ira Weiny (Intel Corporation)
-Fix mutex handling, do not release ones that were never acquired - Daniil Tatianin
+Fix mutex handling, do not release ones that were never acquired - Daniil
+Tatianin
-Experiment with new tag name format Ryyyy_mm_dd to solve chronological sorting problems
+Experiment with new tag name format Ryyyy_mm_dd to solve chronological
+sorting problems
----------------------------------------
@@ -53,11 +86,14 @@ Experiment with new tag name format Ryyyy_mm_dd to solve chronological sorting p
Major changes:
-Fix the acpixf.h file which caused issues for the last release (before this) 20240827
+Fix the acpixf.h file which caused issues for the last release (before
+this) 20240827
Fix the pointer offset for the SLIC table
-Verify the local environment and GitHub commits are all in sync which was a problem with the second from last release (before this)20240322 (aka 20240323 - date issue)
+Verify the local environment and GitHub commits are all in sync which was
+a problem with the second from last release (before this)20240322 (aka
+20240323 - date issue)
@@ -66,23 +102,31 @@ Verify the local environment and GitHub commits are all in sync which was a prob
Major changes:
-Fix the PHAT table working: ensure that the PHAT firmware health record offset works correctly, fix various sub-table offsets, prevent segmentation faults when encountering invalid device paths. Contributed by: Armin Wolf <W_Armin@gmx.de>
+Fix the PHAT table working: ensure that the PHAT firmware health record
+offset works correctly, fix various sub-table offsets, prevent
+segmentation faults when encountering invalid device paths. Contributed
+by: Armin Wolf <W_Armin@gmx.de>
-Fix the optional table 4-byte signature. Contributed by: Daniil Tatianin <99danilt@gmail.com>
+Fix the optional table 4-byte signature. Contributed by: Daniil Tatianin
+<99danilt@gmail.com>
-Correct the dumping of SLIC and DBG2 tables. Contributed by: Al Stone (Fedora) <ahs3@ahs3.net>
+Correct the dumping of SLIC and DBG2 tables. Contributed by: Al Stone
+(Fedora) <ahs3@ahs3.net>
Add support for QWordPCC and DWordPCC by Jose Marinho (ARM)
Fix the integer to hex string conversions by Armin Wolf
-Detecting FACS in reduced HW mode and allowing setting waking vector thereby waking up from S3 state
+Detecting FACS in reduced HW mode and allowing setting waking vector
+thereby waking up from S3 state
-Fixing issues with crossing page boundaries when mapping operation regions by Raju Rangoju, Sanath S and Mario Limonciello (AMD)
+Fixing issues with crossing page boundaries when mapping operation
+regions by Raju Rangoju, Sanath S and Mario Limonciello (AMD)
Update the support for IORT, HMAT, MPAM, AEST, CEDT, SPCR etc. tables
-Fix multiple issues with table parsing, compilation and disassembly by Myra DeMere (Google)
+Fix multiple issues with table parsing, compilation and disassembly by
+Myra DeMere (Google)
Allow for more flexibility in _DSM usage.
@@ -102,13 +146,18 @@ 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 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.
+Add an option to either make the output deterministic or non-
+deterministic.
-Remove redundant checks, duplicated code and fix spellings in various files.
+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.
+Fix flex arrays for C++ compilers and also make ACPICA overall more
+compatible with different compilers which throw warnings related to
+memory sanitization etc.
----------------------------------------
@@ -116,31 +165,56 @@ Fix flex arrays for C++ compilers and also make ACPICA overall more compatible w
0) Global changes:
-Fixed a problem with the ASL/AML Timer() operator. Discovered by UBSAN: ?array-index-out-of-bounds in acpica/dswexec.c:401:12 index -1 is out of range for type 'acpi_operand_object?. Added AML_NO_OPERAND_RESOLVE flag to Timer (since there are no runtime arguments). Reported by: Abhishek Mainkar abmainkar@nvidia.com.
+Fixed a problem with the ASL/AML Timer() operator. Discovered by UBSAN:
+?array-index-out-of-bounds in acpica/dswexec.c:401:12 index -1 is out of
+range for type 'acpi_operand_object?. Added AML_NO_OPERAND_RESOLVE flag
+to Timer (since there are no runtime arguments). Reported by: Abhishek
+Mainkar abmainkar@nvidia.com.
-Added a define for size of acpi_srat_generic_affinity DeviceHandle. Replaced a magic number with a define. The Linux kernel code will utilize this. Reported by Dave Jiang dave.jiang@intel.com.
+Added a define for size of acpi_srat_generic_affinity DeviceHandle.
+Replaced a magic number with a define. The Linux kernel code will utilize
+this. Reported by Dave Jiang dave.jiang@intel.com.
Added support for _DSC (Deepest State for Configuration) as per ACPI 6.5.
1) ACPICA kernel-resident subsystem:
-Added port definitions for CDAT SSLBIS. Add upstream port and any port definitions for SSLBIS. Reported by: Dave Jiang dave.jiang@intel.com.
+Added port definitions for CDAT SSLBIS. Add upstream port and any port
+definitions for SSLBIS. Reported by: Dave Jiang dave.jiang@intel.com.
-Fixed misspelled CDAT DSMAS define: ACPI_CEDT_DSMAS_NON_VOLATILE -> ACPI_CDAT_DSMAS_NON_VOLATILE. Reported by: Dave Jiang dave.jiang@intel.com.
+Fixed misspelled CDAT DSMAS define: ACPI_CEDT_DSMAS_NON_VOLATILE ->
+ACPI_CDAT_DSMAS_NON_VOLATILE. Reported by: Dave Jiang
+dave.jiang@intel.com.
1) ACPICA kernel-resident subsystem:
-Fix GCC 12 dangling-pointer warning. We're storing a persistent pointer to an ephemeral local variable which technically is a dangling pointer and the compiler is correct. However, since we never indirect the pointer, this is a safe operation and we can suppress the warning.
+Fix GCC 12 dangling-pointer warning. We're storing a persistent pointer
+to an ephemeral local variable which technically is a dangling pointer
+and the compiler is correct. However, since we never indirect the
+pointer, this is a safe operation and we can suppress the warning.
-Also, some C run-times (like MUSL) aren't including <stdint.h> indirectly so we must include it explicitly or we won't have the type definition for uintptr_t.
+Also, some C run-times (like MUSL) aren't including <stdint.h> indirectly
+so we must include it explicitly or we won't have the type definition for
+uintptr_t.
2) iASL Compiler/Disassembler and ACPICA tools:.
-IASL/RHCT: Enable dumping and compiling newly added nodes. The RHCT table is updated with new nodes. Add compile and dump functionality for these new structures.
-
-AcpiExec: Added a new command, ?interrupt?. The Interrupt command simulates an interrupt with a IntID (GSIV) equal to the first argument of the call/invocation. The acpiexec code simulates the behavior by OSPM: execute the _EVT method of the GED device associated with that IntID. Submitted by: Jose Marinho jose.marinho@arm.com.
-
-AcpiExec: Detect GED device and keep track of _EVT. The GED device is described by a _HID of ACPI0013. This code traverses the namespace identifying all GED devices. For each GED device in the namespace we record the Interrupt object and the _EVT method. This information is used when an interrupt is simulated via the ?interrupt? command. Submitted by: Jose Marinho jose.marinho@arm.com.
+IASL/RHCT: Enable dumping and compiling newly added nodes. The RHCT table
+is updated with new nodes. Add compile and dump functionality for these
+new structures.
+
+AcpiExec: Added a new command, ?interrupt?. The Interrupt command
+simulates an interrupt with a IntID (GSIV) equal to the first argument of
+the call/invocation. The acpiexec code simulates the behavior by OSPM:
+execute the _EVT method of the GED device associated with that IntID.
+Submitted by: Jose Marinho jose.marinho@arm.com.
+
+AcpiExec: Detect GED device and keep track of _EVT. The GED device is
+described by a _HID of ACPI0013. This code traverses the namespace
+identifying all GED devices. For each GED device in the namespace we
+record the Interrupt object and the _EVT method. This information is used
+when an interrupt is simulated via the ?interrupt? command. Submitted by:
+Jose Marinho jose.marinho@arm.com.
----------------------------------------
31 March 2023. Summary of changes for version 20230331:
diff --git a/source/common/ahids.c b/source/common/ahids.c
index 896e8cd61f46..018d009bb0c5 100644
--- a/source/common/ahids.c
+++ b/source/common/ahids.c
@@ -190,6 +190,7 @@ const AH_DEVICE_ID AslDeviceIds[] =
{"ACPI0014", "Wireless Power Calibration Device"},
{"ACPI0015", "USB4 host interface device"},
{"ACPI0016", "Compute Express Link Host Bridge"},
+ {"ACPI0019", "Firmware Inventory Device"},
{"ADMA0F28", "Intel Audio DMA"},
{"AMCR0F28", "Intel Audio Machine Driver"},
{"ATK4001", "Asus Radio Control Button"},
@@ -300,6 +301,7 @@ const AH_DEVICE_ID AslDeviceIds[] =
{"PNP0C12", "Device Bay Controller"},
{"PNP0C14", "Windows Management Instrumentation Device"},
{"PNP0C15", "Docking Station"},
+ {"PNP0C32", "Direct App Launch Button"},
{"PNP0C33", "Error Device"},
{"PNP0C40", "Standard Button Controller"},
{"PNP0C50", "HID Protocol Device (I2C bus)"},
diff --git a/source/common/ahpredef.c b/source/common/ahpredef.c
index c51f7c679d37..601650e6f935 100644
--- a/source/common/ahpredef.c
+++ b/source/common/ahpredef.c
@@ -280,6 +280,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
AH_PREDEF ("_HOT", "Hot Temperature", "Returns the critical temperature for sleep (entry to S4)"),
AH_PREDEF ("_HPP", "Hot Plug Parameters", "Returns a list of hot-plug information for a PCI device"),
AH_PREDEF ("_HPX", "Hot Plug Parameter Extensions", "Returns a list of hot-plug information for a PCI device. Supersedes _HPP"),
+ AH_PREDEF ("_VDM", "Voltage Domain", "A DWORD identifier specifying the voltage domain to which the processor belongs."),
AH_PREDEF ("_HRV", "Hardware Revision", "Returns a hardware revision value"),
AH_PREDEF ("_IFT", "IPMI Interface Type", "See the Intelligent Platform Management Interface Specification"),
AH_PREDEF ("_INI", "Initialize", "Performs device specific initialization"),
diff --git a/source/common/ahtable.c b/source/common/ahtable.c
index 705a61882a99..46c6c3b381a5 100644
--- a/source/common/ahtable.c
+++ b/source/common/ahtable.c
@@ -229,6 +229,7 @@ const AH_TABLE AcpiGbl_SupportedTables[] =
{ACPI_SIG_HMAT, "Heterogeneous Memory Attributes Table"},
{ACPI_SIG_HPET, "High Precision Event Timer Table"},
{ACPI_SIG_IORT, "IO Remapping Table"},
+ {ACPI_SIG_IOVT, "I/O Virtualization Table"},
{ACPI_SIG_IVRS, "I/O Virtualization Reporting Structure"},
{ACPI_SIG_LPIT, "Low Power Idle Table"},
{ACPI_SIG_MADT, "Multiple APIC Description Table (MADT)"},
diff --git a/source/common/ahuuids.c b/source/common/ahuuids.c
index dd311a46e811..2986f737977c 100644
--- a/source/common/ahuuids.c
+++ b/source/common/ahuuids.c
@@ -180,6 +180,11 @@ const AH_UUID Gbl_AcpiUuids[] =
{"Device Labeling Interface", UUID_DEVICE_LABELING},
{"Physical Presence Interface", UUID_PHYSICAL_PRESENCE},
+ {"[Trusted Platform Module]", NULL},
+ {"TPM Hardware Information", UUID_HARDWARE_INFORMATION},
+ {"TPM Start Method", UUID_START_METHOD},
+ {"TPM Memory Clear", UUID_MEMORY_CLEAR},
+
{"[Non-volatile DIMM and NFIT table]", NULL},
{"NVDIMM Device", UUID_NFIT_DIMM},
{"Volatile Memory Region", UUID_VOLATILE_MEMORY},
@@ -211,6 +216,7 @@ const AH_UUID Gbl_AcpiUuids[] =
{"USB4 Capabilities", UUID_USB4_CAPABILITIES},
{"First Function ID for _DSM", UUID_1ST_FUNCTION_ID},
{"Second Function ID for _DSM", UUID_2ND_FUNCTION_ID},
+ {"Fan Trip Points", UUID_FAN_TRIP_POINTS},
{NULL, NULL}
};
diff --git a/source/common/dmtable.c b/source/common/dmtable.c
index 02125db1bf18..6eb0fd65758e 100644
--- a/source/common/dmtable.c
+++ b/source/common/dmtable.c
@@ -299,6 +299,14 @@ static const char *AcpiDmEinjActions[] =
"Get Command Status",
"Set Error Type With Address",
"Get Execute Timings",
+ "Unassigned",
+ "Unassigned",
+ "Unassigned",
+ "Unassigned",
+ "Unassigned",
+ "Unassigned",
+ "EinjV2 Set Error Type(deprecated)",
+ "EinjV2 Get Error Type",
"Unknown Action"
};
@@ -426,36 +434,39 @@ static const char *AcpiDmHmatSubnames[] =
static const char *AcpiDmMadtSubnames[] =
{
- "Processor Local APIC", /* ACPI_MADT_TYPE_LOCAL_APIC */
- "I/O APIC", /* ACPI_MADT_TYPE_IO_APIC */
- "Interrupt Source Override", /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */
- "NMI Source", /* ACPI_MADT_TYPE_NMI_SOURCE */
- "Local APIC NMI", /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */
- "Local APIC Address Override", /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */
- "I/O SAPIC", /* ACPI_MADT_TYPE_IO_SAPIC */
- "Local SAPIC", /* ACPI_MADT_TYPE_LOCAL_SAPIC */
- "Platform Interrupt Sources", /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */
- "Processor Local x2APIC", /* ACPI_MADT_TYPE_LOCAL_X2APIC */
- "Local x2APIC NMI", /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */
- "Generic Interrupt Controller", /* ACPI_MADT_GENERIC_INTERRUPT */
- "Generic Interrupt Distributor", /* ACPI_MADT_GENERIC_DISTRIBUTOR */
- "Generic MSI Frame", /* ACPI_MADT_GENERIC_MSI_FRAME */
- "Generic Interrupt Redistributor", /* ACPI_MADT_GENERIC_REDISTRIBUTOR */
- "Generic Interrupt Translator", /* ACPI_MADT_GENERIC_TRANSLATOR */
- "Mutiprocessor Wakeup", /* ACPI_MADT_TYPE_MULTIPROC_WAKEUP */
- "CPU Core Interrupt Controller", /* ACPI_MADT_TYPE_CORE_PIC */
- "Legacy I/O Interrupt Controller", /* ACPI_MADT_TYPE_LIO_PIC */
- "HT Interrupt Controller", /* ACPI_MADT_TYPE_HT_PIC */
- "Extend I/O Interrupt Controller", /* ACPI_MADT_TYPE_EIO_PIC */
- "MSI Interrupt Controller", /* ACPI_MADT_TYPE_MSI_PIC */
- "Bridge I/O Interrupt Controller", /* ACPI_MADT_TYPE_BIO_PIC */
- "LPC Interrupt Controller", /* ACPI_MADT_TYPE_LPC_PIC */
- "RISC-V Interrupt Controller", /* ACPI_MADT_TYPE_RINTC */
- "RISC-V Incoming MSI Controller", /* ACPI_MADT_TYPE_IMSIC */
- "RISC-V APLIC Controller", /* ACPI_MADT_TYPE_APLIC */
- "RISC-V PLIC Controller", /* ACPI_MADT_TYPE_PLIC */
- "Unknown Subtable Type", /* Reserved */
- "Types 80-FF are used for OEM data" /* Reserved for OEM data */
+ "Processor Local APIC", /* ACPI_MADT_TYPE_LOCAL_APIC */
+ "I/O APIC", /* ACPI_MADT_TYPE_IO_APIC */
+ "Interrupt Source Override", /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */
+ "NMI Source", /* ACPI_MADT_TYPE_NMI_SOURCE */
+ "Local APIC NMI", /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */
+ "Local APIC Address Override", /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */
+ "I/O SAPIC", /* ACPI_MADT_TYPE_IO_SAPIC */
+ "Local SAPIC", /* ACPI_MADT_TYPE_LOCAL_SAPIC */
+ "Platform Interrupt Sources", /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */
+ "Processor Local x2APIC", /* ACPI_MADT_TYPE_LOCAL_X2APIC */
+ "Local x2APIC NMI", /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */
+ "Generic Interrupt Controller", /* ACPI_MADT_GENERIC_INTERRUPT */
+ "Generic Interrupt Distributor", /* ACPI_MADT_GENERIC_DISTRIBUTOR */
+ "Generic MSI Frame", /* ACPI_MADT_GENERIC_MSI_FRAME */
+ "Generic Interrupt Redistributor", /* ACPI_MADT_GENERIC_REDISTRIBUTOR */
+ "Generic Interrupt Translator", /* ACPI_MADT_GENERIC_TRANSLATOR */
+ "Mutiprocessor Wakeup", /* ACPI_MADT_TYPE_MULTIPROC_WAKEUP */
+ "CPU Core Interrupt Controller", /* ACPI_MADT_TYPE_CORE_PIC */
+ "Legacy I/O Interrupt Controller", /* ACPI_MADT_TYPE_LIO_PIC */
+ "HT Interrupt Controller", /* ACPI_MADT_TYPE_HT_PIC */
+ "Extend I/O Interrupt Controller", /* ACPI_MADT_TYPE_EIO_PIC */
+ "MSI Interrupt Controller", /* ACPI_MADT_TYPE_MSI_PIC */
+ "Bridge I/O Interrupt Controller", /* ACPI_MADT_TYPE_BIO_PIC */
+ "LPC Interrupt Controller", /* ACPI_MADT_TYPE_LPC_PIC */
+ "RISC-V Interrupt Controller", /* ACPI_MADT_TYPE_RINTC */
+ "RISC-V Incoming MSI Controller", /* ACPI_MADT_TYPE_IMSIC */
+ "RISC-V APLIC Controller", /* ACPI_MADT_TYPE_APLIC */
+ "RISC-V PLIC Controller", /* ACPI_MADT_TYPE_PLIC */
+ "Generic Interrupt v5 Router", /* ACPI_MADT_TYPE_GICV5_IRS */
+ "Generic Interrupt v5 Translator Config", /* ACPI_MADT_TYPE_GICV5_ITS */
+ "Generic Interrupt v5 Translator Entry", /* ACPI_MADT_TYPE_GICV5_ITS_TRANSLATE */
+ "Unknown Subtable Type", /* Reserved */
+ "Types 80-FF are used for OEM data" /* Reserved for OEM data */
};
static const char *AcpiDmMpamSubnames[] =
@@ -560,6 +571,20 @@ static const char *AcpiDmTpm2Subnames[] =
"Unknown Subtable Type" /* Reserved */
};
+static const char *AcpiDmIovtSubnames[] =
+{
+ "IOMMUv1",
+ "Unknown Subtable Type" /* Reserved */
+};
+
+static const char *AcpiDmIovtdevSubnames[] =
+{
+ "A single PCI device",
+ "Start of range",
+ "End of range",
+ "Unknown Subtable Type" /* Reserved */
+};
+
static const char *AcpiDmIvrsSubnames[] =
{
"Hardware Definition Block (IVHD)",
@@ -686,6 +711,7 @@ const ACPI_DMTABLE_DATA AcpiDmTableData[] =
{ACPI_SIG_HMAT, NULL, AcpiDmDumpHmat, DtCompileHmat, TemplateHmat},
{ACPI_SIG_HPET, AcpiDmTableInfoHpet, NULL, NULL, TemplateHpet},
{ACPI_SIG_IORT, NULL, AcpiDmDumpIort, DtCompileIort, TemplateIort},
+ {ACPI_SIG_IOVT, AcpiDmTableInfoIovt, AcpiDmDumpIovt, DtCompileIovt, TemplateIovt},
{ACPI_SIG_IVRS, NULL, AcpiDmDumpIvrs, DtCompileIvrs, TemplateIvrs},
{ACPI_SIG_LPIT, NULL, AcpiDmDumpLpit, DtCompileLpit, TemplateLpit},
{ACPI_SIG_MADT, NULL, AcpiDmDumpMadt, DtCompileMadt, TemplateMadt},
@@ -721,7 +747,7 @@ const ACPI_DMTABLE_DATA AcpiDmTableData[] =
{ACPI_SIG_SRAT, NULL, AcpiDmDumpSrat, DtCompileSrat, TemplateSrat},
{ACPI_SIG_STAO, NULL, AcpiDmDumpStao, DtCompileStao, TemplateStao},
{ACPI_SIG_SVKL, AcpiDmTableInfoSvkl, AcpiDmDumpSvkl, DtCompileSvkl, TemplateSvkl},
- {ACPI_SIG_SWFT, NULL, NULL, NULL, NULL},
+ {ACPI_SIG_SWFT, AcpiDmTableInfoSwft, AcpiDmDumpSwft, DtCompileSwft, TemplateSwft},
{ACPI_SIG_TCPA, NULL, AcpiDmDumpTcpa, DtCompileTcpa, TemplateTcpa},
{ACPI_SIG_TDEL, AcpiDmTableInfoTdel, NULL, NULL, TemplateTdel},
{ACPI_SIG_TPM2, AcpiDmTableInfoTpm2, AcpiDmDumpTpm2, DtCompileTpm2, TemplateTpm2},
@@ -1145,6 +1171,7 @@ AcpiDmDumpTable (
case ACPI_DMT_ERSTACT:
case ACPI_DMT_ERSTINST:
case ACPI_DMT_DMAR_SCOPE:
+ case ACPI_DMT_IOVTDEV:
case ACPI_DMT_VIOT:
ByteLength = 1;
@@ -1156,6 +1183,7 @@ AcpiDmDumpTable (
case ACPI_DMT_ERDT:
case ACPI_DMT_HEST:
case ACPI_DMT_HMAT:
+ case ACPI_DMT_IOVT:
case ACPI_DMT_NFIT:
case ACPI_DMT_PHAT:
case ACPI_DMT_RHCT:
@@ -2136,6 +2164,33 @@ AcpiDmDumpTable (
AcpiDmFadtProfiles[Temp8]);
break;
+ case ACPI_DMT_IOVT:
+
+ /* IOVT subtable types */
+
+ Temp16 = ACPI_GET16(Target);
+ if (Temp16 > ACPI_IOVT_IOMMU_RESERVED)
+ {
+ Temp16 = ACPI_IOVT_IOMMU_RESERVED;
+ }
+
+ AcpiOsPrintf(UINT16_FORMAT, Temp16, AcpiDmIovtSubnames[Temp16]);
+ break;
+
+ case ACPI_DMT_IOVTDEV:
+
+ /* IOVT subtable types */
+
+ Temp8 = *Target;
+ if (Temp8 > ACPI_IOVT_DEVICE_ENTRY_RESERVED)
+ {
+ Temp8 = ACPI_IOVT_DEVICE_ENTRY_RESERVED;
+ }
+
+ AcpiOsPrintf (UINT8_FORMAT, *Target,
+ AcpiDmIovtdevSubnames[Temp8]);
+ break;
+
case ACPI_DMT_IVRS:
/* IVRS subtable types */
diff --git a/source/common/dmtbdump2.c b/source/common/dmtbdump2.c
index f9145d7cb532..a5125bae971f 100644
--- a/source/common/dmtbdump2.c
+++ b/source/common/dmtbdump2.c
@@ -304,6 +304,14 @@ AcpiDmDumpIort (
IortRmr = ACPI_ADD_PTR (ACPI_IORT_RMR, IortNode, NodeOffset);
break;
+ case ACPI_IORT_NODE_IWB:
+
+ InfoTable = AcpiDmTableInfoIort7;
+ Length = ACPI_OFFSET (ACPI_IORT_IWB, DeviceName);
+ String = ACPI_ADD_PTR (char, IortNode, NodeOffset + Length);
+ Length += strlen (String) + 1;
+ break;
+
default:
AcpiOsPrintf ("\n**** Unknown IORT node type 0x%X\n",
@@ -479,6 +487,140 @@ NextSubtable:
/*******************************************************************************
*
+ * FUNCTION: AcpiDmDumpIovt
+ *
+ * PARAMETERS: Table - A IOVT table
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Format the contents of a IOVT
+ *
+ ******************************************************************************/
+
+void
+AcpiDmDumpIovt (
+ ACPI_TABLE_HEADER *Table)
+{
+ ACPI_STATUS Status;
+ UINT32 Offset;
+ UINT32 EntryOffset;
+ UINT32 EntryLength;
+ UINT32 EntryType;
+ ACPI_IOVT_DEVICE_ENTRY *DeviceEntry;
+ ACPI_IOVT_HEADER *SubtableHeader;
+ ACPI_IOVT_IOMMU *Subtable;
+ ACPI_DMTABLE_INFO *InfoTable;
+ ACPI_TABLE_IOVT *Iovt;
+
+
+ /* Main table */
+
+ Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoIovt);
+ if (ACPI_FAILURE (Status))
+ {
+ return;
+ }
+
+ Iovt = ACPI_CAST_PTR (ACPI_TABLE_IOVT, Table);
+ Offset = Iovt->IommuOffset;
+
+ /* Subtables */
+
+ SubtableHeader = ACPI_ADD_PTR (ACPI_IOVT_HEADER, Table, Offset);
+
+ while (Offset < Table->Length)
+ {
+ switch (SubtableHeader->Type)
+ {
+
+ case ACPI_IOVT_IOMMU_V1:
+
+ AcpiOsPrintf ("\n");
+ InfoTable = AcpiDmTableInfoIovt0;
+ break;
+
+ default:
+
+ AcpiOsPrintf ("\n**** Unknown IOVT subtable type 0x%X\n",
+ SubtableHeader->Type);
+
+ /* Attempt to continue */
+
+ if (!SubtableHeader->Length)
+ {
+ AcpiOsPrintf ("Invalid zero length subtable\n");
+ return;
+ }
+ goto NextSubtable;
+ }
+
+ /* Dump the subtable */
+
+ Status = AcpiDmDumpTable (Table->Length, Offset, SubtableHeader,
+ SubtableHeader->Length, InfoTable);
+ if (ACPI_FAILURE (Status))
+ {
+ return;
+ }
+
+ /* The hardware subtables (IOVT) can contain multiple device entries */
+
+ if (SubtableHeader->Type == ACPI_IOVT_IOMMU_V1)
+ {
+ Subtable = ACPI_ADD_PTR (ACPI_IOVT_IOMMU, Table, Offset);
+
+ EntryOffset = Offset + Subtable->DeviceEntryOffset;
+ /* Process all of the Device Entries */
+
+ do {
+ AcpiOsPrintf ("\n");
+
+ DeviceEntry = ACPI_ADD_PTR (ACPI_IOVT_DEVICE_ENTRY,
+ Table, EntryOffset);
+ EntryType = DeviceEntry->Type;
+ EntryLength = DeviceEntry->Length;
+
+ switch (EntryType)
+ {
+ case ACPI_IOVT_DEVICE_ENTRY_SINGLE:
+ case ACPI_IOVT_DEVICE_ENTRY_START:
+ case ACPI_IOVT_DEVICE_ENTRY_END:
+ InfoTable = AcpiDmTableInfoIovtdev;
+ break;
+
+ default:
+ InfoTable = AcpiDmTableInfoIovtdev;
+ AcpiOsPrintf (
+ "\n**** Unknown IOVT device entry type/length: "
+ "0x%.2X/0x%X at offset 0x%.4X: (header below)\n",
+ EntryType, EntryLength, EntryOffset);
+ break;
+ }
+
+ /* Dump the Device Entry */
+
+ Status = AcpiDmDumpTable (Table->Length, EntryOffset,
+ DeviceEntry, EntryLength, InfoTable);
+ if (ACPI_FAILURE (Status))
+ {
+ return;
+ }
+
+ EntryOffset += EntryLength;
+ } while (EntryOffset < (Offset + Subtable->Header.Length));
+ }
+
+NextSubtable:
+ /* Point to next subtable */
+
+ Offset += SubtableHeader->Length;
+ SubtableHeader = ACPI_ADD_PTR (ACPI_IOVT_HEADER, SubtableHeader, SubtableHeader->Length);
+ }
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: AcpiDmDumpIvrs
*
* PARAMETERS: Table - A IVRS table
@@ -1055,6 +1197,21 @@ AcpiDmDumpMadt (
InfoTable = AcpiDmTableInfoMadt27;
break;
+ case ACPI_MADT_TYPE_GICV5_IRS:
+
+ InfoTable = AcpiDmTableInfoMadt28;
+ break;
+
+ case ACPI_MADT_TYPE_GICV5_ITS:
+
+ InfoTable = AcpiDmTableInfoMadt29;
+ break;
+
+ case ACPI_MADT_TYPE_GICV5_ITS_TRANSLATE:
+
+ InfoTable = AcpiDmTableInfoMadt30;
+ break;
+
default:
if ((Subtable->Type >= ACPI_MADT_TYPE_RESERVED) &&
@@ -2290,8 +2447,16 @@ AcpiDmDumpPptt (
case ACPI_PPTT_TYPE_CACHE:
- InfoTable = AcpiDmTableInfoPptt1;
- Length = sizeof (ACPI_PPTT_CACHE);
+ if (Table->Revision < 3)
+ {
+ InfoTable = AcpiDmTableInfoPptt1;
+ Length = sizeof (ACPI_PPTT_CACHE);
+ }
+ else
+ {
+ InfoTable = AcpiDmTableInfoPptt1a;
+ Length = sizeof (ACPI_PPTT_CACHE_V1);
+ }
break;
case ACPI_PPTT_TYPE_ID:
@@ -2350,22 +2515,6 @@ AcpiDmDumpPptt (
SubtableOffset += 4;
}
break;
-
- case ACPI_PPTT_TYPE_CACHE:
-
- if (Table->Revision < 3)
- {
- break;
- }
- Status = AcpiDmDumpTable (Table->Length, Offset + SubtableOffset,
- ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Subtable, SubtableOffset),
- sizeof (ACPI_PPTT_CACHE_V1), AcpiDmTableInfoPptt1a);
- if (ACPI_FAILURE (Status))
- {
- return;
- }
- break;
-
default:
break;
diff --git a/source/common/dmtbdump3.c b/source/common/dmtbdump3.c
index 503bad5ff22d..544792926b84 100644
--- a/source/common/dmtbdump3.c
+++ b/source/common/dmtbdump3.c
@@ -492,6 +492,73 @@ AcpiDmDumpSvkl (
/*******************************************************************************
*
+ * FUNCTION: AcpiDmDumpSwft
+ *
+ * PARAMETERS: Table - A SWFT table
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Format the contents of a SWFT. This is a variable-length
+ * table that contains an open-ended number of SoundWire files
+ * after the end of the header.
+ *
+ ******************************************************************************/
+
+void
+AcpiDmDumpSwft (
+ ACPI_TABLE_HEADER *Table)
+{
+ ACPI_STATUS Status;
+ UINT32 Length = Table->Length;
+ UINT32 Offset = sizeof (ACPI_TABLE_SWFT);
+ ACPI_SWFT_FILE *SubtableHdr;
+ ACPI_SWFT_FILE *SubtableData;
+
+
+ /* Main table */
+
+ Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoSwft);
+ if (ACPI_FAILURE (Status))
+ {
+ return;
+ }
+
+ /* The rest of the table consists of subtables (single type) */
+
+ while (Offset < Table->Length)
+ {
+ SubtableHdr = ACPI_ADD_PTR (ACPI_SWFT_FILE, Table, Offset);
+
+ /* Dump the subtable */
+
+ AcpiOsPrintf ("\n");
+ Status = AcpiDmDumpTable (Table->Length, Offset, SubtableHdr,
+ sizeof (ACPI_SWFT_FILE), AcpiDmTableInfoSwftFileHdr);
+ if (ACPI_FAILURE (Status))
+ {
+ return;
+ }
+
+ Offset += sizeof(ACPI_SWFT_FILE);
+
+ SubtableData = ACPI_ADD_PTR (ACPI_SWFT_FILE, Table, Offset);
+
+ Status = AcpiDmDumpTable (Table->Length, Offset, SubtableData,
+ SubtableHdr->FileLength - sizeof(ACPI_SWFT_FILE), AcpiDmTableInfoSwftFileData);
+ if (ACPI_FAILURE (Status))
+ {
+ return;
+ }
+
+ /* Point to next subtable */
+
+ Offset += SubtableHdr->FileLength - sizeof(ACPI_SWFT_FILE);
+ }
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: AcpiDmDumpTcpa
*
* PARAMETERS: Table - A TCPA table
diff --git a/source/common/dmtbinfo2.c b/source/common/dmtbinfo2.c
index 570540e50991..c936af40586d 100644
--- a/source/common/dmtbinfo2.c
+++ b/source/common/dmtbinfo2.c
@@ -459,6 +459,74 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoIort6a[] =
ACPI_DMT_TERMINATOR
};
+/* 0x07: IWB */
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoIort7[] =
+{
+ {ACPI_DMT_UINT64, ACPI_IORT7_OFFSET (BaseAddress), "Config Frame base", 0},
+ {ACPI_DMT_UINT16, ACPI_IORT7_OFFSET (IwbIndex), "IWB Index", 0},
+ {ACPI_DMT_STRING, ACPI_IORT7_OFFSET (DeviceName[0]), "IWB Device Name", 0},
+ ACPI_DMT_TERMINATOR
+};
+
+
+/*******************************************************************************
+ *
+ * IOVT - I/O Virtualization Table
+ *
+ ******************************************************************************/
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoIovt[] =
+{
+ {ACPI_DMT_UINT16, ACPI_IOVT_OFFSET (IommuCount), "IOMMU Count", 0},
+ {ACPI_DMT_UINT16, ACPI_IOVT_OFFSET (IommuOffset), "IOMMU Offset", 0},
+ {ACPI_DMT_UINT64, ACPI_IOVT_OFFSET (Reserved), "Reserved", 0},
+ ACPI_DMT_TERMINATOR
+};
+
+/* IOVT Subtables */
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoIovt0[] =
+{
+ {ACPI_DMT_IOVT, ACPI_IOVTH_OFFSET (Type), "Subtable Type", 0},
+ {ACPI_DMT_UINT16, ACPI_IOVTH_OFFSET (Length), "Length", DT_LENGTH},
+ {ACPI_DMT_UINT32, ACPI_IOVT0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG},
+ {ACPI_DMT_FLAG0, ACPI_IOVT0_FLAG_OFFSET (Flags,0), "PCI Device", 0},
+ {ACPI_DMT_FLAG1, ACPI_IOVT0_FLAG_OFFSET (Flags,0), "Proximity Domain Valid", 0},
+ {ACPI_DMT_FLAG2, ACPI_IOVT0_FLAG_OFFSET (Flags,0), "Manageable Devices Range", 0},
+ {ACPI_DMT_FLAG3, ACPI_IOVT0_FLAG_OFFSET (Flags,0), "HW Capability Supported", 0},
+ {ACPI_DMT_FLAG4, ACPI_IOVT0_FLAG_OFFSET (Flags,0), "MSI Interrupt Address", 0},
+ {ACPI_DMT_UINT16, ACPI_IOVT0_OFFSET (Segment), "PCI Segment Number", 0},
+ {ACPI_DMT_UINT16, ACPI_IOVT0_OFFSET (PhyWidth), "Physical Address Width", 0},
+ {ACPI_DMT_UINT16, ACPI_IOVT0_OFFSET (VirtWidth), "Virtual Address Width", 0},
+ {ACPI_DMT_UINT16, ACPI_IOVT0_OFFSET (MaxPageLevel), "Max Page Level", 0},
+ {ACPI_DMT_UINT64, ACPI_IOVT0_OFFSET (PageSize), "Page Size Supported", 0},
+ {ACPI_DMT_UINT32, ACPI_IOVT0_OFFSET (DeviceId), "IOMMU DeviceID", 0},
+ {ACPI_DMT_UINT64, ACPI_IOVT0_OFFSET (BaseAddress), "IOMMU Base Address", 0},
+ {ACPI_DMT_UINT32, ACPI_IOVT0_OFFSET (AddressSpaceSize), "IOMMU Register Size", 0},
+ {ACPI_DMT_UINT8, ACPI_IOVT0_OFFSET (InterruptType), "Interrupt Type", 0},
+ {ACPI_DMT_UINT24, ACPI_IOVT0_OFFSET (Reserved), "Reserved", 0},
+ {ACPI_DMT_UINT32, ACPI_IOVT0_OFFSET (GsiNumber), "Global System Interrupt", 0},
+ {ACPI_DMT_UINT32, ACPI_IOVT0_OFFSET (ProximityDomain), "Proximity Domain", 0},
+ {ACPI_DMT_UINT32, ACPI_IOVT0_OFFSET (MaxDeviceNum), "Max Device Num", 0},
+ {ACPI_DMT_UINT32, ACPI_IOVT0_OFFSET (DeviceEntryNum), "Number of Device Entries", 0},
+ {ACPI_DMT_UINT32, ACPI_IOVT0_OFFSET (DeviceEntryOffset), "Offset of Device Entries", 0},
+ ACPI_DMT_TERMINATOR
+};
+
+/* device entry */
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoIovtdev[] =
+{
+ {ACPI_DMT_IOVTDEV, ACPI_IOVTDEV_OFFSET (Type), "Subtable Type", 0},
+ {ACPI_DMT_UINT8, ACPI_IOVTDEV_OFFSET (Length), "Length", 0},
+ {ACPI_DMT_UINT8, ACPI_IOVTDEV_OFFSET (Flags), "Flags", 0},
+ {ACPI_DMT_UINT24, ACPI_IOVTDEV_OFFSET (Reserved), "Reserved", 0},
+ {ACPI_DMT_UINT16, ACPI_IOVTDEV_OFFSET (DeviceId), "DeviceID", 0},
+ ACPI_DMT_TERMINATOR
+};
+
+
/*******************************************************************************
*
* IVRS - I/O Virtualization Reporting Structure
@@ -995,13 +1063,14 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt15a[] =
ACPI_DMT_TERMINATOR
};
-/* 16: Multiprocessor wakeup structure (ACPI 6.4) */
+/* 16: Multiprocessor wakeup structure (ACPI 6.6) */
ACPI_DMTABLE_INFO AcpiDmTableInfoMadt16[] =
{
{ACPI_DMT_UINT16, ACPI_MADT16_OFFSET (MailboxVersion), "Mailbox Version", 0},
{ACPI_DMT_UINT32, ACPI_MADT16_OFFSET (Reserved), "Reserved", 0},
{ACPI_DMT_UINT64, ACPI_MADT16_OFFSET (BaseAddress), "Mailbox Address", 0},
+ {ACPI_DMT_UINT64, ACPI_MADT16_OFFSET (ResetVector), "ResetVector", 0},
ACPI_DMT_TERMINATOR
};
@@ -1147,6 +1216,39 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt27[] =
ACPI_DMT_TERMINATOR
};
+ACPI_DMTABLE_INFO AcpiDmTableInfoMadt28[] =
+{
+ {ACPI_DMT_UINT8, ACPI_MADT28_OFFSET (Version), "Gic version", 0},
+ {ACPI_DMT_UINT8, ACPI_MADT28_OFFSET (Reserved), "Reserved", 0},
+ {ACPI_DMT_UINT32, ACPI_MADT28_OFFSET (IrsId), "Irs Id", 0},
+ {ACPI_DMT_UINT32, ACPI_MADT28_OFFSET (Flags), "Flags (decoded below)", DT_FLAG},
+ {ACPI_DMT_FLAG0, ACPI_MADT28_FLAG_OFFSET (Flags,0), "GICV5 IRS non-coherent", 0},
+ {ACPI_DMT_UINT32, ACPI_MADT28_OFFSET (Reserved2), "Reserved", 0},
+ {ACPI_DMT_UINT64, ACPI_MADT28_OFFSET (ConfigBaseAddress), "Irs Config Frame Physical Base Address", 0},
+ {ACPI_DMT_UINT64, ACPI_MADT28_OFFSET (SetlpiBaseAddress), "Irs Setlpi Frame Physical Base Address", 0},
+ ACPI_DMT_TERMINATOR
+};
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoMadt29[] =
+{
+ {ACPI_DMT_UINT8, ACPI_MADT29_OFFSET (Flags), "Flags (decoded below)", DT_FLAG},
+ {ACPI_DMT_FLAG0, ACPI_MADT29_FLAG_OFFSET (Flags,0), "GICV5 ITS non-coherent", 0},
+ {ACPI_DMT_UINT8, ACPI_MADT29_OFFSET (Reserved), "Reserved", 0},
+ {ACPI_DMT_UINT32, ACPI_MADT29_OFFSET (TranslatorId), "Gic Its Id", 0},
+ {ACPI_DMT_UINT64, ACPI_MADT29_OFFSET (BaseAddress), "Physical Base Address", 0},
+ ACPI_DMT_TERMINATOR
+};
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoMadt30[] =
+{
+ {ACPI_DMT_UINT16, ACPI_MADT30_OFFSET (Reserved), "Reserved", 0},
+ {ACPI_DMT_UINT32, ACPI_MADT30_OFFSET (LinkedTranslatorId), "Linked Its Id", 0},
+ {ACPI_DMT_UINT32, ACPI_MADT30_OFFSET (TranslateFrameId), "Its Transalte Id", 0},
+ {ACPI_DMT_UINT32, ACPI_MADT30_OFFSET (Reserved2), "Reserved", 0},
+ {ACPI_DMT_UINT64, ACPI_MADT30_OFFSET (BaseAddress), "Its Translate Frame Physical Base Address", 0},
+ ACPI_DMT_TERMINATOR
+};
+
/* 128: OEM data structure */
ACPI_DMTABLE_INFO AcpiDmTableInfoMadt128[] =
@@ -2031,6 +2133,25 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1[] =
ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1a[] =
{
+ {ACPI_DMT_UINT16, ACPI_PPTT1A_OFFSET (Reserved), "Reserved", 0},
+ {ACPI_DMT_UINT32, ACPI_PPTT1A_OFFSET (Flags), "Flags (decoded below)", 0},
+ {ACPI_DMT_FLAG0, ACPI_PPTT1A_FLAG_OFFSET (Flags,0), "Size valid", 0},
+ {ACPI_DMT_FLAG1, ACPI_PPTT1A_FLAG_OFFSET (Flags,0), "Number of Sets valid", 0},
+ {ACPI_DMT_FLAG2, ACPI_PPTT1A_FLAG_OFFSET (Flags,0), "Associativity valid", 0},
+ {ACPI_DMT_FLAG3, ACPI_PPTT1A_FLAG_OFFSET (Flags,0), "Allocation Type valid", 0},
+ {ACPI_DMT_FLAG4, ACPI_PPTT1A_FLAG_OFFSET (Flags,0), "Cache Type valid", 0},
+ {ACPI_DMT_FLAG5, ACPI_PPTT1A_FLAG_OFFSET (Flags,0), "Write Policy valid", 0},
+ {ACPI_DMT_FLAG6, ACPI_PPTT1A_FLAG_OFFSET (Flags,0), "Line Size valid", 0},
+ {ACPI_DMT_FLAG7, ACPI_PPTT1A_FLAG_OFFSET (Flags,0), "Cache ID valid", 0},
+ {ACPI_DMT_UINT32, ACPI_PPTT1A_OFFSET (NextLevelOfCache), "Next Level of Cache", 0},
+ {ACPI_DMT_UINT32, ACPI_PPTT1A_OFFSET (Size), "Size", 0},
+ {ACPI_DMT_UINT32, ACPI_PPTT1A_OFFSET (NumberOfSets), "Number of Sets", 0},
+ {ACPI_DMT_UINT8, ACPI_PPTT1A_OFFSET (Associativity), "Associativity", 0},
+ {ACPI_DMT_UINT8, ACPI_PPTT1A_OFFSET (Attributes), "Attributes", 0},
+ {ACPI_DMT_FLAGS0, ACPI_PPTT1A_OFFSET (Attributes), "Allocation Type", 0},
+ {ACPI_DMT_FLAGS2, ACPI_PPTT1A_OFFSET (Attributes), "Cache Type", 0},
+ {ACPI_DMT_FLAG4, ACPI_PPTT1A_OFFSET (Attributes), "Write Policy", 0},
+ {ACPI_DMT_UINT16, ACPI_PPTT1A_OFFSET (LineSize), "Line Size", 0},
{ACPI_DMT_UINT32, ACPI_PPTT1A_OFFSET (CacheId), "Cache ID", 0},
ACPI_DMT_TERMINATOR
};
diff --git a/source/common/dmtbinfo3.c b/source/common/dmtbinfo3.c
index 24187f6afbc7..2b5891c0500e 100644
--- a/source/common/dmtbinfo3.c
+++ b/source/common/dmtbinfo3.c
@@ -472,6 +472,31 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoSvkl0[] =
ACPI_DMT_TERMINATOR
};
+/*******************************************************************************
+ *
+ * SWFT - SoundWire File Table
+ *
+ ******************************************************************************/
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoSwft[] =
+{
+ ACPI_DMT_TERMINATOR
+};
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoSwftFileHdr[] =
+{
+ {ACPI_DMT_UINT16, ACPI_SWFT_FILE_OFFSET (VendorID), "File Vendor ID", 0},
+ {ACPI_DMT_UINT32, ACPI_SWFT_FILE_OFFSET (FileID), "File ID", 0},
+ {ACPI_DMT_UINT16, ACPI_SWFT_FILE_OFFSET (FileVersion), "File Version", 0},
+ {ACPI_DMT_UINT32, ACPI_SWFT_FILE_OFFSET (FileLength), "File Length", 0},
+ ACPI_DMT_TERMINATOR
+};
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoSwftFileData[] =
+{
+ {ACPI_DMT_BUFFER, 0, "File Data", 0},
+ ACPI_DMT_TERMINATOR
+};
/*******************************************************************************
*
diff --git a/source/compiler/dtcompiler.h b/source/compiler/dtcompiler.h
index c3b87769573f..503700fe3c88 100644
--- a/source/compiler/dtcompiler.h
+++ b/source/compiler/dtcompiler.h
@@ -646,6 +646,10 @@ DtCompileIort (
void **PFieldList);
ACPI_STATUS
+DtCompileIovt (
+ void **List);
+
+ACPI_STATUS
DtCompileIvrs (
void **PFieldList);
@@ -754,6 +758,10 @@ DtCompileSvkl (
void **PFieldList);
ACPI_STATUS
+DtCompileSwft (
+ void **PFieldList);
+
+ACPI_STATUS
DtCompileTcpa (
void **PFieldList);
@@ -822,6 +830,7 @@ extern const unsigned char TemplateHest[];
extern const unsigned char TemplateHmat[];
extern const unsigned char TemplateHpet[];
extern const unsigned char TemplateIort[];
+extern const unsigned char TemplateIovt[];
extern const unsigned char TemplateIvrs[];
extern const unsigned char TemplateLpit[];
extern const unsigned char TemplateMadt[];
@@ -856,6 +865,7 @@ extern const unsigned char TemplateSpmi[];
extern const unsigned char TemplateSrat[];
extern const unsigned char TemplateStao[];
extern const unsigned char TemplateSvkl[];
+extern const unsigned char TemplateSwft[];
extern const unsigned char TemplateTcpa[];
extern const unsigned char TemplateTdel[];
extern const unsigned char TemplateTpm2[];
diff --git a/source/compiler/dttable1.c b/source/compiler/dttable1.c
index 6ceaf135d229..e5f6115bf9cf 100644
--- a/source/compiler/dttable1.c
+++ b/source/compiler/dttable1.c
@@ -3035,6 +3035,91 @@ DtCompileIort (
/******************************************************************************
*
+ * FUNCTION: DtCompileIovt
+ *
+ * PARAMETERS: List - Current field list pointer
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Compile Iovt. Notes:
+ * The IOVT is essentially a flat table, with the following
+ * structure:
+ * <Main ACPI Table Header>
+ * <Main subtable - virtualization info>
+ * <IOVT>
+ * <Device Entries>
+ * ...
+ * <IOVT>
+ * <IOVT>
+ * ...
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+DtCompileIovt (
+ void **List)
+{
+ ACPI_STATUS Status;
+ DT_SUBTABLE *Subtable;
+ DT_SUBTABLE *ParentTable;
+ DT_FIELD **PFieldList = (DT_FIELD **) List;
+ ACPI_TABLE_IOVT *Iovt;
+ UINT16 IommuCount;
+ ACPI_IOVT_IOMMU *Iommu;
+ UINT32 DeviceEntryNum;
+
+
+ ParentTable = DtPeekSubtable ();
+ /* Main table */
+
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoIovt,
+ &Subtable);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ DtInsertSubtable (ParentTable, Subtable);
+ DtPushSubtable (Subtable);
+
+ Iovt = ACPI_SUB_PTR (ACPI_TABLE_IOVT, Subtable->Buffer,
+ sizeof (ACPI_TABLE_HEADER));
+
+ for (IommuCount = 0; IommuCount < Iovt->IommuCount; IommuCount++)
+ {
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoIovt0,
+ &Subtable);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ ParentTable = DtPeekSubtable ();
+ DtInsertSubtable (ParentTable, Subtable);
+ DtPushSubtable (Subtable);
+
+ Iommu = ACPI_CAST_PTR(ACPI_IOVT_IOMMU, Subtable->Buffer);
+ for (DeviceEntryNum = 0; DeviceEntryNum < Iommu->DeviceEntryNum; DeviceEntryNum++)
+ {
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoIovtdev,
+ &Subtable);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ ParentTable = DtPeekSubtable ();
+ DtInsertSubtable (ParentTable, Subtable);
+ }
+ DtPopSubtable();
+ }
+
+ return (AE_OK);
+}
+
+
+/******************************************************************************
+ *
* FUNCTION: DtCompileIvrs
*
* PARAMETERS: List - Current field list pointer
diff --git a/source/compiler/dttable2.c b/source/compiler/dttable2.c
index c752965c3dbe..12dd29561053 100644
--- a/source/compiler/dttable2.c
+++ b/source/compiler/dttable2.c
@@ -1634,6 +1634,9 @@ DtCompilePptt (
ParentTable = DtPeekSubtable ();
+
+ PpttAcpiHeader = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer);
+
while (*PFieldList)
{
SubtableStart = *PFieldList;
@@ -1659,7 +1662,14 @@ DtCompilePptt (
case ACPI_PPTT_TYPE_CACHE:
- InfoTable = AcpiDmTableInfoPptt1;
+ if (PpttAcpiHeader->Revision < 3)
+ {
+ InfoTable = AcpiDmTableInfoPptt1;
+ }
+ else
+ {
+ InfoTable = AcpiDmTableInfoPptt1a;
+ }
break;
case ACPI_PPTT_TYPE_ID:
@@ -1715,21 +1725,6 @@ DtCompilePptt (
}
}
break;
-
- case ACPI_PPTT_TYPE_CACHE:
-
- PpttAcpiHeader = ACPI_CAST_PTR (ACPI_TABLE_HEADER,
- AslGbl_RootTable->Buffer);
- if (PpttAcpiHeader->Revision < 3)
- {
- break;
- }
- Status = DtCompileTable (PFieldList, AcpiDmTableInfoPptt1a,
- &Subtable);
- DtInsertSubtable (ParentTable, Subtable);
- PpttHeader->Length += (UINT8)(Subtable->Length);
- break;
-
default:
break;
@@ -2829,6 +2824,64 @@ DtCompileSvkl (
/******************************************************************************
*
+ * FUNCTION: DtCompileSwft
+ *
+ * PARAMETERS: PFieldList - Current field list pointer
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Compile SWFT.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+DtCompileSwft (
+ void **List)
+{
+ DT_FIELD **PFieldList = (DT_FIELD **) List;
+ DT_SUBTABLE *HdrSub;
+ DT_SUBTABLE *DataSub;
+ DT_SUBTABLE *ParentTable;
+ ACPI_STATUS Status;
+
+ /* Main SWFT header */
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoSwft, &HdrSub);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ ParentTable = DtPeekSubtable ();
+ DtInsertSubtable (ParentTable, HdrSub);
+
+ while (*PFieldList)
+ {
+ /* File header */
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoSwftFileHdr,
+ &HdrSub);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ DtInsertSubtable (ParentTable, HdrSub);
+
+ /* File data */
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoSwftFileData,
+ &DataSub);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ DtInsertSubtable (ParentTable, DataSub);
+ }
+
+ return (AE_OK);
+}
+
+/******************************************************************************
+ *
* FUNCTION: DtCompileTcpa
*
* PARAMETERS: PFieldList - Current field list pointer
diff --git a/source/compiler/dttemplate.h b/source/compiler/dttemplate.h
index 51a34be5c36b..88bc38f25c39 100644
--- a/source/compiler/dttemplate.h
+++ b/source/compiler/dttemplate.h
@@ -1262,6 +1262,38 @@ const unsigned char TemplateIort[] =
0x00,0x00,0x00,0x00 /* 00000238 "...." */
};
+const unsigned char TemplateIovt[] =
+{
+ 0x49,0x4f,0x56,0x54,0xe0,0x00,0x00,0x00, /* 00000000 "IOVT...." */
+ 0x00,0x21,0x4c,0x4f,0x4f,0x4e,0x47,0x00, /* 00000008 ".!LOONG." */
+ 0x54,0x45,0x4d,0x50,0x4c,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */
+ 0x00,0x00,0x00,0x00,0x4c,0x4f,0x4f,0x4e, /* 00000018 "....LOON" */
+ 0x18,0x08,0x25,0x20,0x02,0x00,0x30,0x00, /* 00000020 "..% ..0." */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */
+ 0x00,0x00,0x58,0x00,0x00,0x00,0x00,0x00, /* 00000030 "..X....." */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */
+ 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00, /* 00000060 "........" */
+ 0x03,0x00,0x00,0x00,0x40,0x00,0x00,0x00, /* 00000068 "....@..." */
+ 0x00,0x08,0x00,0x00,0x00,0x00,0x18,0x00, /* 00000070 "........" */
+ 0x01,0x08,0x00,0x00,0x00,0x00,0x20,0x00, /* 00000078 "...... ." */
+ 0x02,0x08,0x00,0x00,0x00,0x00,0x20,0x10, /* 00000080 "...... ." */
+ 0x00,0x00,0x58,0x00,0x00,0x00,0x00,0x00, /* 00000088 "..X....." */
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000090 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000098 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000a0 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000a8 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000b0 "........" */
+ 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00, /* 000000b8 "........" */
+ 0x03,0x00,0x00,0x00,0x40,0x00,0x00,0x00, /* 000000c0 "....@..." */
+ 0x00,0x08,0x00,0x00,0x00,0x00,0x08,0x00, /* 000000c8 "........" */
+ 0x01,0x08,0x00,0x00,0x00,0x00,0x10,0x00, /* 000000d0 "........" */
+ 0x02,0x08,0x00,0x00,0x00,0x00,0x00,0x06, /* 000000d8 "........" */
+};
+
const unsigned char TemplateIvrs[] =
{
0x49,0x56,0x52,0x53,0x10,0x02,0x00,0x00, /* 00000000 "IVRS...." */
@@ -1804,23 +1836,25 @@ const unsigned char TemplatePmtt[] =
0x56,0x34,0x12 /* 000000B8 "V4." */
};
+/* PPTT with ACPI 6.4 subtables */
+
const unsigned char TemplatePptt[] =
{
- 0x50,0x50,0x54,0x54,0x72,0x00,0x00,0x00, /* 00000000 "PPTTr..." */
- 0x01,0x86,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
+ 0x50,0x50,0x54,0x54,0x76,0x00,0x00,0x00, /* 00000000 "PPTTr..." */
+ 0x03,0xCB,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */
0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
- 0x03,0x03,0x17,0x20,0x00,0x18,0x00,0x00, /* 00000020 "... ...." */
+ 0x07,0x08,0x25,0x20,0x00,0x18,0x00,0x00, /* 00000020 "... ...." */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */
- 0x00,0x00,0x00,0x00,0x01,0x18,0x00,0x00, /* 00000038 "........" */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */
+ 0x00,0x00,0x00,0x00,0x01,0x1C,0x00,0x00, /* 00000038 "........" */
+ 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */
- 0x00,0x00,0x00,0x00,0x02,0x1E,0x00,0x00, /* 00000050 "........" */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */
+ 0x00,0x00,0x00,0x00,0x0D,0x01,0x00,0x0C, /* 00000050 "........" */
+ 0x02,0x1E,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */
- 0x00,0x00 /* 00000070 ".." */
+ 0x00,0x00,0x00,0x00,0x00,0x00 /* 00000070 "......" */
};
const unsigned char TemplatePrmt[] =
@@ -2270,6 +2304,21 @@ const unsigned char TemplateSvkl[] =
0xEF,0xCD,0xAB,0x89,0x67,0x45,0x23,0x01 /* 00000040 "....gE#." */
};
+const unsigned char TemplateSwft[] =
+{
+ 0x53,0x57,0x46,0x54,0x53,0x00,0x00,0x00, /* 00000000 "SWFTS..." */
+ 0x01,0x53,0x43,0x52,0x55,0x53,0x00,0x00, /* 00000008 ".SCRUS.." */
+ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */
+ 0x02,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
+ 0x07,0x08,0x25,0x20,0xFA,0x01,0x01,0x00, /* 00000020 "..% ...." */
+ 0x00,0x00,0x01,0x00,0x14,0x00,0x00,0x00, /* 00000028 "........" */
+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, /* 00000030 "........" */
+ 0xFA,0x01,0x02,0x00,0x00,0x00,0x01,0x00, /* 00000038 "........" */
+ 0x0E,0x00,0x00,0x00,0x13,0x37,0xFA,0x01, /* 00000040 ".....7.." */
+ 0x03,0x00,0x00,0x00,0x01,0x00,0x0D,0x00, /* 00000048 "........" */
+ 0x00,0x00,0x00 /* 00000050 "..." */
+};
+
const unsigned char TemplateTcpa[] =
{
0x54,0x43,0x50,0x41,0x64,0x00,0x00,0x00, /* 00000000 "TCPAd..." */
diff --git a/source/compiler/dtutils.c b/source/compiler/dtutils.c
index d2c0ac715667..5b69a359b0a4 100644
--- a/source/compiler/dtutils.c
+++ b/source/compiler/dtutils.c
@@ -609,6 +609,7 @@ DtGetFieldLength (
case ACPI_DMT_ERSTACT:
case ACPI_DMT_ERSTINST:
case ACPI_DMT_DMAR_SCOPE:
+ case ACPI_DMT_IOVTDEV:
case ACPI_DMT_VIOT:
ByteLength = 1;
@@ -620,6 +621,7 @@ DtGetFieldLength (
case ACPI_DMT_ERDT:
case ACPI_DMT_HEST:
case ACPI_DMT_HMAT:
+ case ACPI_DMT_IOVT:
case ACPI_DMT_NFIT:
case ACPI_DMT_PCI_PATH:
case ACPI_DMT_PHAT:
diff --git a/source/components/events/evregion.c b/source/components/events/evregion.c
index d3777b63568e..757983b35b76 100644
--- a/source/components/events/evregion.c
+++ b/source/components/events/evregion.c
@@ -320,7 +320,7 @@ AcpiEvAddressSpaceDispatch (
return_ACPI_STATUS (AE_NOT_EXIST);
}
- if (RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_COMM)
+ if (FieldObj && RegionObj->Region.SpaceId == ACPI_ADR_SPACE_PLATFORM_COMM)
{
ACPI_PCC_INFO *Ctx = HandlerDesc->AddressSpace.Context;
diff --git a/source/components/executer/exoparg3.c b/source/components/executer/exoparg3.c
index 872fbbdb44eb..722bbec46521 100644
--- a/source/components/executer/exoparg3.c
+++ b/source/components/executer/exoparg3.c
@@ -153,6 +153,7 @@
#include "acpi.h"
#include "accommon.h"
#include "acinterp.h"
+#include "acoutput.h"
#include "acparser.h"
#include "amlcode.h"
@@ -201,8 +202,7 @@ AcpiExOpcode_3A_0T_0R (
ACPI_WALK_STATE *WalkState)
{
ACPI_OPERAND_OBJECT **Operand = &WalkState->Operands[0];
- ACPI_SIGNAL_FATAL_INFO *Fatal;
- ACPI_STATUS Status = AE_OK;
+ ACPI_SIGNAL_FATAL_INFO Fatal;
ACPI_FUNCTION_TRACE_STR (ExOpcode_3A_0T_0R,
@@ -213,29 +213,23 @@ AcpiExOpcode_3A_0T_0R (
{
case AML_FATAL_OP: /* Fatal (FatalType FatalCode FatalArg) */
- ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
- "FatalOp: Type %X Code %X Arg %X "
- "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n",
- (UINT32) Operand[0]->Integer.Value,
- (UINT32) Operand[1]->Integer.Value,
- (UINT32) Operand[2]->Integer.Value));
+ Fatal.Type = (UINT32) Operand[0]->Integer.Value;
+ Fatal.Code = (UINT32) Operand[1]->Integer.Value;
+ Fatal.Argument = (UINT32) Operand[2]->Integer.Value;
- Fatal = ACPI_ALLOCATE (sizeof (ACPI_SIGNAL_FATAL_INFO));
- if (Fatal)
- {
- Fatal->Type = (UINT32) Operand[0]->Integer.Value;
- Fatal->Code = (UINT32) Operand[1]->Integer.Value;
- Fatal->Argument = (UINT32) Operand[2]->Integer.Value;
- }
+ ACPI_BIOS_ERROR ((AE_INFO,
+ "Fatal ACPI BIOS error (Type 0x%X Code 0x%X Arg 0x%X)\n",
+ Fatal.Type, Fatal.Code, Fatal.Argument));
/* Always signal the OS! */
- Status = AcpiOsSignal (ACPI_SIGNAL_FATAL, Fatal);
-
- /* Might return while OS is shutting down, just continue */
+ AcpiOsSignal (ACPI_SIGNAL_FATAL, &Fatal);
- ACPI_FREE (Fatal);
- goto Cleanup;
+ /*
+ * Might return while OS is shutting down, so abort the AML execution
+ * by returning an error.
+ */
+ return_ACPI_STATUS (AE_ERROR);
case AML_EXTERNAL_OP:
/*
@@ -247,22 +241,16 @@ AcpiExOpcode_3A_0T_0R (
* wrong if an external opcode ever gets here.
*/
ACPI_ERROR ((AE_INFO, "Executed External Op"));
- Status = AE_OK;
- goto Cleanup;
+
+ return_ACPI_STATUS (AE_OK);
default:
ACPI_ERROR ((AE_INFO, "Unknown AML opcode 0x%X",
WalkState->Opcode));
- Status = AE_AML_BAD_OPCODE;
- goto Cleanup;
+ return_ACPI_STATUS (AE_AML_BAD_OPCODE);
}
-
-
-Cleanup:
-
- return_ACPI_STATUS (Status);
}
diff --git a/source/components/namespace/nswalk.c b/source/components/namespace/nswalk.c
index 18cb6921c4fb..ca5f39475ef9 100644
--- a/source/components/namespace/nswalk.c
+++ b/source/components/namespace/nswalk.c
@@ -322,10 +322,13 @@ AcpiNsWalkNamespace (
if (StartNode == ACPI_ROOT_OBJECT)
{
StartNode = AcpiGbl_RootNode;
- if (!StartNode)
- {
- return_ACPI_STATUS (AE_NO_NAMESPACE);
- }
+ }
+
+ /* Avoid walking the namespace if the StartNode is NULL */
+
+ if (!StartNode)
+ {
+ return_ACPI_STATUS (AE_NO_NAMESPACE);
}
/* Null child means "get first node" */
diff --git a/source/components/namespace/nsxfname.c b/source/components/namespace/nsxfname.c
index 7779ee3fc480..939ad04d514e 100644
--- a/source/components/namespace/nsxfname.c
+++ b/source/components/namespace/nsxfname.c
@@ -805,7 +805,7 @@ AcpiInstallMethod (
ErrorExit:
ACPI_FREE (AmlBuffer);
- ACPI_FREE (MethodObj);
+ AcpiUtDeleteObjectDesc (MethodObj);
return (Status);
}
diff --git a/source/components/tables/tbprint.c b/source/components/tables/tbprint.c
index d82cfddb4758..72dab8dafab2 100644
--- a/source/components/tables/tbprint.c
+++ b/source/components/tables/tbprint.c
@@ -254,6 +254,10 @@ AcpiTbPrintTableHeader (
{
ACPI_TABLE_HEADER LocalHeader;
+#pragma GCC diagnostic push
+#if defined(__GNUC__) && __GNUC__ >= 11
+#pragma GCC diagnostic ignored "-Wstringop-overread"
+#endif
if (ACPI_COMPARE_NAMESEG (Header->Signature, ACPI_SIG_FACS))
{
@@ -301,4 +305,5 @@ AcpiTbPrintTableHeader (
LocalHeader.OemTableId, LocalHeader.OemRevision,
LocalHeader.AslCompilerId, LocalHeader.AslCompilerRevision));
}
+#pragma GCC diagnostic pop
}
diff --git a/source/components/utilities/utobject.c b/source/components/utilities/utobject.c
index 30b2fd99c92f..3278f0578c13 100644
--- a/source/components/utilities/utobject.c
+++ b/source/components/utilities/utobject.c
@@ -305,7 +305,7 @@ AcpiUtCreatePackageObject (
((ACPI_SIZE) Count + 1) * sizeof (void *));
if (!PackageElements)
{
- ACPI_FREE (PackageDesc);
+ AcpiUtDeleteObjectDesc (PackageDesc);
return_PTR (NULL);
}
diff --git a/source/components/utilities/utosi.c b/source/components/utilities/utosi.c
index 8edd783ccf23..6e034eb35816 100644
--- a/source/components/utilities/utosi.c
+++ b/source/components/utilities/utosi.c
@@ -239,7 +239,11 @@ static ACPI_INTERFACE_INFO AcpiDefaultSupportedInterfaces[] =
{"Processor Device", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0},
{"3.0 Thermal Model", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0},
{"3.0 _SCP Extensions", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0},
- {"Processor Aggregator Device", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0}
+ {"Processor Aggregator Device", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0},
+
+ /* See https://learn.microsoft.com/en-us/windows-hardware/drivers/display/automatic-display-switch */
+
+ {"DisplayMux", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0}
};
diff --git a/source/include/acdisasm.h b/source/include/acdisasm.h
index 9e8d4976221d..5416d0b3f2bd 100644
--- a/source/include/acdisasm.h
+++ b/source/include/acdisasm.h
@@ -282,6 +282,8 @@ typedef enum
ACPI_DMT_HESTNTYP,
ACPI_DMT_HMAT,
ACPI_DMT_IORTMEM,
+ ACPI_DMT_IOVT,
+ ACPI_DMT_IOVTDEV,
ACPI_DMT_IVRS,
ACPI_DMT_IVRS_DE,
ACPI_DMT_IVRS_UNTERMINATED_STRING,
@@ -301,6 +303,7 @@ typedef enum
ACPI_DMT_SDEV,
ACPI_DMT_SLIC,
ACPI_DMT_SRAT,
+ ACPI_DMT_SWFT,
ACPI_DMT_TPM2,
ACPI_DMT_VIOT,
ACPI_DMT_WPBT_UNICODE,
@@ -544,11 +547,15 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort4[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort5[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort6[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort6a[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort7[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortAcc[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr3[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortMap[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortPad[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoIovt[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoIovt0[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoIovtdev[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHware1[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrsHware23[];
@@ -597,6 +604,9 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt24[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt25[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt26[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt27[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt28[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt29[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt30[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt128[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadtHdr[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg[];
@@ -725,6 +735,9 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoStao[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoStaoStr[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoSvkl[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoSvkl0[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoSwft[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoSwftFileHdr[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoSwftFileData[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaHdr[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaClient[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[];
@@ -897,6 +910,10 @@ AcpiDmDumpIort (
ACPI_TABLE_HEADER *Table);
void
+AcpiDmDumpIovt (
+ ACPI_TABLE_HEADER *Table);
+
+void
AcpiDmDumpIvrs (
ACPI_TABLE_HEADER *Table);
@@ -1009,6 +1026,10 @@ AcpiDmDumpSvkl (
ACPI_TABLE_HEADER *Table);
void
+AcpiDmDumpSwft (
+ ACPI_TABLE_HEADER *Table);
+
+void
AcpiDmDumpTcpa (
ACPI_TABLE_HEADER *Table);
diff --git a/source/include/aclocal.h b/source/include/aclocal.h
index 56ce42ba89fc..ff18d617f79a 100644
--- a/source/include/aclocal.h
+++ b/source/include/aclocal.h
@@ -1464,7 +1464,7 @@ typedef struct acpi_port_info
#define ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION 0x91
#define ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG 0x92
#define ACPI_RESOURCE_NAME_CLOCK_INPUT 0x93
-#define ACPI_RESOURCE_NAME_LARGE_MAX 0x94
+#define ACPI_RESOURCE_NAME_LARGE_MAX 0x93
/*****************************************************************************
diff --git a/source/include/acpixf.h b/source/include/acpixf.h
index 8f7047cda920..67d60c68b6c5 100644
--- a/source/include/acpixf.h
+++ b/source/include/acpixf.h
@@ -154,7 +154,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
-#define ACPI_CA_VERSION 0x20250807
+#define ACPI_CA_VERSION 0x20251212
#include "acconfig.h"
#include "actypes.h"
diff --git a/source/include/acpredef.h b/source/include/acpredef.h
index 91fd49723b7f..8cf6cf2dfcad 100644
--- a/source/include/acpredef.h
+++ b/source/include/acpredef.h
@@ -587,7 +587,7 @@ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] =
METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each: 1 Buf, 1 Pkg */
PACKAGE_INFO (ACPI_PTYPE2_UUID_PAIR, ACPI_RTYPE_BUFFER, 1, ACPI_RTYPE_PACKAGE, 1,0),
- {{"_DSM", METHOD_4ARGS (ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_ANY) | ARG_COUNT_IS_MINIMUM,
+ {{"_DSM", METHOD_4ARGS (ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_ANY | ACPI_TYPE_PACKAGE) | ARG_COUNT_IS_MINIMUM,
METHOD_RETURNS (ACPI_RTYPE_ALL)}}, /* Must return a value, but it can be of any type */
{{"_DSS", METHOD_1ARGS (ACPI_TYPE_INTEGER),
@@ -721,6 +721,9 @@ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] =
METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each (var Ints) */
PACKAGE_INFO (ACPI_PTYPE2_MIN, ACPI_RTYPE_INTEGER, 5,0,0,0),
+ {{"_VDM", METHOD_0ARGS,
+ METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
+
{{"_HRV", METHOD_0ARGS,
METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
diff --git a/source/include/actbinfo.h b/source/include/actbinfo.h
index fdf2a989ef6b..0d80f67b6982 100644
--- a/source/include/actbinfo.h
+++ b/source/include/actbinfo.h
@@ -177,6 +177,7 @@
#define ACPI_HPET_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HPET,f)
#define ACPI_HMAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HMAT,f)
#define ACPI_IORT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_IORT,f)
+#define ACPI_IOVT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_IOVT,f)
#define ACPI_IVRS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_IVRS,f)
#define ACPI_MADT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MADT,f)
#define ACPI_MCFG_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MCFG,f)
@@ -330,9 +331,13 @@
#define ACPI_IORT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_PMCG,f)
#define ACPI_IORT6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_RMR,f)
#define ACPI_IORT6A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_RMR_DESC,f)
+#define ACPI_IORT7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_IWB,f)
#define ACPI_IORTA_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_MEMORY_ACCESS,f)
#define ACPI_IORTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_NODE,f)
#define ACPI_IORTM_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ID_MAPPING,f)
+#define ACPI_IOVTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IOVT_HEADER,f)
+#define ACPI_IOVT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IOVT_IOMMU,f)
+#define ACPI_IOVTDEV_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IOVT_DEVICE_ENTRY,f)
#define ACPI_IVRSH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_HEADER,f)
#define ACPI_IVRS0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE1,f)
#define ACPI_IVRS01_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE2,f)
@@ -372,6 +377,9 @@
#define ACPI_MADT25_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_IMSIC,f)
#define ACPI_MADT26_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_APLIC,f)
#define ACPI_MADT27_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_PLIC,f)
+#define ACPI_MADT28_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GICV5_IRS,f)
+#define ACPI_MADT29_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GICv5_ITS,f)
+#define ACPI_MADT30_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GICv5_ITS_TRANSLATE,f)
#define ACPI_MADT128_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_OEM_DATA,f)
#define ACPI_MADTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f)
#define ACPI_MCFG0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MCFG_ALLOCATION,f)
@@ -458,6 +466,7 @@
#define ACPI_SRAT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_GENERIC_AFFINITY,f)
#define ACPI_SRAT7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_RINTC_AFFINITY,f)
#define ACPI_SVKL0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SVKL_KEY,f)
+#define ACPI_SWFT_FILE_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SWFT_FILE,f)
#define ACPI_TCPA_CLIENT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_CLIENT,f)
#define ACPI_TCPA_SERVER_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_SERVER,f)
#define ACPI_TPM2A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TPM2_TRAILER,f)
@@ -512,6 +521,7 @@
#define ACPI_IORT6_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_RMR,f,o)
#define ACPI_IORTA_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_MEMORY_ACCESS,f,o)
#define ACPI_IORTM_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_ID_MAPPING,f,o)
+#define ACPI_IOVT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IOVT_IOMMU,f,o)
#define ACPI_IVRS_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IVRS_HEADER,f,o)
#define ACPI_IVRSDE_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IVRS_DE_HEADER,f,o)
#define ACPI_LPITH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_LPIT_HEADER,f,o)
@@ -528,6 +538,8 @@
#define ACPI_MADT13_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_MSI_FRAME,f,o)
#define ACPI_MADT14_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_REDISTRIBUTOR,f,o)
#define ACPI_MADT15_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_TRANSLATOR,f,o)
+#define ACPI_MADT28_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GICV5_IRS,f,o)
+#define ACPI_MADT29_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GICv5_ITS,f,o)
#define ACPI_MPST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MPST_POWER_NODE,f,o)
#define ACPI_MPST2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MPST_POWER_DATA,f,o)
#define ACPI_NFIT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_NFIT_SYSTEM_ADDRESS,f,o)
diff --git a/source/include/actbl1.h b/source/include/actbl1.h
index ec04f0a0ab9f..6e7937999a5b 100644
--- a/source/include/actbl1.h
+++ b/source/include/actbl1.h
@@ -826,11 +826,12 @@ typedef struct acpi_cedt_cfmws_target_element
/* Values for Restrictions field above */
-#define ACPI_CEDT_CFMWS_RESTRICT_TYPE2 (1)
-#define ACPI_CEDT_CFMWS_RESTRICT_TYPE3 (1<<1)
+#define ACPI_CEDT_CFMWS_RESTRICT_DEVMEM (1)
+#define ACPI_CEDT_CFMWS_RESTRICT_HOSTONLYMEM (1<<1)
#define ACPI_CEDT_CFMWS_RESTRICT_VOLATILE (1<<2)
#define ACPI_CEDT_CFMWS_RESTRICT_PMEM (1<<3)
#define ACPI_CEDT_CFMWS_RESTRICT_FIXED (1<<4)
+#define ACPI_CEDT_CFMWS_RESTRICT_BI (1<<5)
/* 2: CXL XOR Interleave Math Structure */
diff --git a/source/include/actbl2.h b/source/include/actbl2.h
index a74b6d555a3a..a51ff1ecaa09 100644
--- a/source/include/actbl2.h
+++ b/source/include/actbl2.h
@@ -175,7 +175,9 @@
#define ACPI_SIG_CDAT "CDAT" /* Coherent Device Attribute Table */
#define ACPI_SIG_ERDT "ERDT" /* Enhanced Resource Director Technology */
#define ACPI_SIG_IORT "IORT" /* IO Remapping Table */
+#define ACPI_SIG_IOVT "IOVT" /* I/O Virtualization Table */
#define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */
+#define ACPI_SIG_KEYP "KEYP" /* Key Programming Interface for IDE */
#define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */
#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */
#define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */
@@ -917,6 +919,7 @@ enum AcpiIortNodeType
ACPI_IORT_NODE_SMMU_V3 = 0x04,
ACPI_IORT_NODE_PMCG = 0x05,
ACPI_IORT_NODE_RMR = 0x06,
+ ACPI_IORT_NODE_IWB = 0x07,
};
@@ -1120,6 +1123,92 @@ typedef struct acpi_iort_rmr_desc {
} ACPI_IORT_RMR_DESC;
+typedef struct acpi_iort_iwb {
+ UINT64 BaseAddress;
+ UINT16 IwbIndex; /* Unique IWB identifier matching with the IWB GSI namespace. */
+ char DeviceName[]; /* Path of the IWB namespace object */
+
+} ACPI_IORT_IWB;
+
+
+/*******************************************************************************
+ *
+ * IOVT - I/O Virtualization Table
+ *
+ * Conforms to "LoongArch I/O Virtualization Table",
+ * Version 0.1, October 2024
+ *
+ ******************************************************************************/
+
+typedef struct acpi_table_iovt
+{
+ ACPI_TABLE_HEADER Header; /* Common ACPI table header */
+ UINT16 IommuCount;
+ UINT16 IommuOffset;
+ UINT8 Reserved[8];
+
+} ACPI_TABLE_IOVT;
+
+/* IOVT subtable header */
+
+typedef struct acpi_iovt_header
+{
+ UINT16 Type;
+ UINT16 Length;
+
+} ACPI_IOVT_HEADER;
+
+/* Values for Type field above */
+
+enum AcpiIovtIommuType
+{
+ ACPI_IOVT_IOMMU_V1 = 0x00,
+ ACPI_IOVT_IOMMU_RESERVED = 0x01 /* 1 and greater are reserved */
+};
+
+/* IOVT subtables */
+
+typedef struct acpi_iovt_iommu
+{
+ ACPI_IOVT_HEADER Header;
+ UINT32 Flags;
+ UINT16 Segment;
+ UINT16 PhyWidth; /* Physical Address Width */
+ UINT16 VirtWidth; /* Virtual Address Width */
+ UINT16 MaxPageLevel;
+ UINT64 PageSize;
+ UINT32 DeviceId;
+ UINT64 BaseAddress;
+ UINT32 AddressSpaceSize;
+ UINT8 InterruptType;
+ UINT8 Reserved[3];
+ UINT32 GsiNumber;
+ UINT32 ProximityDomain;
+ UINT32 MaxDeviceNum;
+ UINT32 DeviceEntryNum;
+ UINT32 DeviceEntryOffset;
+
+} ACPI_IOVT_IOMMU;
+
+typedef struct acpi_iovt_device_entry
+{
+ UINT8 Type;
+ UINT8 Length;
+ UINT8 Flags;
+ UINT8 Reserved[3];
+ UINT16 DeviceId;
+
+} ACPI_IOVT_DEVICE_ENTRY;
+
+enum AcpiIovtDeviceEntryType
+{
+ ACPI_IOVT_DEVICE_ENTRY_SINGLE = 0x00,
+ ACPI_IOVT_DEVICE_ENTRY_START = 0x01,
+ ACPI_IOVT_DEVICE_ENTRY_END = 0x02,
+ ACPI_IOVT_DEVICE_ENTRY_RESERVED = 0x03 /* 3 and greater are reserved */
+};
+
+
/*******************************************************************************
*
* IVRS - I/O Virtualization Reporting Structure
@@ -1354,6 +1443,65 @@ typedef struct acpi_ivrs_memory
} ACPI_IVRS_MEMORY;
+/*******************************************************************************
+ *
+ * KEYP - Key Programming Interface for Root Complex Integrity and Data
+ * Encryption (IDE)
+ * Version 1
+ *
+ * Conforms to "Key Programming Interface for Root Complex Integrity and Data
+ * Encryption (IDE)" document. See under ACPI-Related Documents.
+ *
+ ******************************************************************************/
+typedef struct acpi_table_keyp {
+ ACPI_TABLE_HEADER Header; /* Common ACPI table header */
+ UINT32 Reserved;
+} ACPI_TABLE_KEYP;
+
+/* KEYP common subtable header */
+
+typedef struct acpi_keyp_common_header {
+ UINT8 Type;
+ UINT8 Reserved;
+ UINT16 Length;
+} ACPI_KEYP_COMMON_HEADER;
+
+/* Values for Type field above */
+
+enum AcpiKeypType
+{
+ ACPI_KEYP_TYPE_CONFIG_UNIT = 0,
+};
+
+/* Root Port Information Structure */
+
+typedef struct acpi_keyp_rp_info {
+ UINT16 Segment;
+ UINT8 Bus;
+ UINT8 Devfn;
+} ACPI_KEYP_RP_INFO;
+
+/* Key Configuration Unit Structure */
+
+typedef struct acpi_keyp_config_unit {
+ ACPI_KEYP_COMMON_HEADER Header;
+ UINT8 ProtocolType;
+ UINT8 Version;
+ UINT8 RootPortCount;
+ UINT8 Flags;
+ UINT64 RegisterBaseAddress;
+ ACPI_KEYP_RP_INFO RpInfo[];
+} ACPI_KEYP_CONFIG_UNIT;
+
+enum AcpiKeypProtocolType
+{
+ ACPI_KEYP_PROTO_TYPE_INVALID = 0,
+ ACPI_KEYP_PROTO_TYPE_PCIE,
+ ACPI_KEYP_PROTO_TYPE_CXL,
+ ACPI_KEYP_PROTO_TYPE_RESERVED
+};
+
+#define ACPI_KEYP_F_TVM_USABLE (1)
/*******************************************************************************
*
@@ -1470,7 +1618,10 @@ enum AcpiMadtType
ACPI_MADT_TYPE_IMSIC = 25,
ACPI_MADT_TYPE_APLIC = 26,
ACPI_MADT_TYPE_PLIC = 27,
- ACPI_MADT_TYPE_RESERVED = 28, /* 28 to 0x7F are reserved */
+ ACPI_MADT_TYPE_GICV5_IRS = 28,
+ ACPI_MADT_TYPE_GICV5_ITS = 29,
+ ACPI_MADT_TYPE_GICV5_ITS_TRANSLATE = 30,
+ ACPI_MADT_TYPE_RESERVED = 31, /* 31 to 0x7F are reserved */
ACPI_MADT_TYPE_OEM_RESERVED = 0x80 /* 0x80 to 0xFF are reserved for OEM use */
};
@@ -1626,7 +1777,7 @@ typedef struct acpi_madt_local_x2apic_nmi
} ACPI_MADT_LOCAL_X2APIC_NMI;
-/* 11: Generic Interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 + ACPI 6.5 changes) */
+/* 11: Generic Interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 + ACPI 6.5 + ACPI 6.7 changes) */
typedef struct acpi_madt_generic_interrupt
{
@@ -1648,6 +1799,8 @@ typedef struct acpi_madt_generic_interrupt
UINT8 Reserved2[1];
UINT16 SpeInterrupt; /* ACPI 6.3 */
UINT16 TrbeInterrupt; /* ACPI 6.5 */
+ UINT16 Iaffid; /* ACPI 6.7 */
+ UINT32 IrsId;
} ACPI_MADT_GENERIC_INTERRUPT;
@@ -1673,7 +1826,7 @@ typedef struct acpi_madt_generic_distributor
} ACPI_MADT_GENERIC_DISTRIBUTOR;
-/* Values for Version field above */
+/* Values for Version field above and Version field in acpi_madt_gicv5_irs */
enum AcpiMadtGicVersion
{
@@ -1682,7 +1835,8 @@ enum AcpiMadtGicVersion
ACPI_MADT_GIC_VERSION_V2 = 2,
ACPI_MADT_GIC_VERSION_V3 = 3,
ACPI_MADT_GIC_VERSION_V4 = 4,
- ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */
+ ACPI_MADT_GIC_VERSION_V5 = 5,
+ ACPI_MADT_GIC_VERSION_RESERVED = 6 /* 6 and greater are reserved */
};
@@ -1734,7 +1888,7 @@ typedef struct acpi_madt_generic_translator
#define ACPI_MADT_ITS_NON_COHERENT (1)
-/* 16: Multiprocessor wakeup (ACPI 6.4) */
+/* 16: Multiprocessor wakeup (ACPI 6.6) */
typedef struct acpi_madt_multiproc_wakeup
{
@@ -1742,6 +1896,7 @@ typedef struct acpi_madt_multiproc_wakeup
UINT16 MailboxVersion;
UINT32 Reserved; /* reserved - must be zero */
UINT64 BaseAddress;
+ UINT64 ResetVector;
} ACPI_MADT_MULTIPROC_WAKEUP;
@@ -1760,6 +1915,7 @@ typedef struct acpi_madt_multiproc_wakeup_mailbox
} ACPI_MADT_MULTIPROC_WAKEUP_MAILBOX;
#define ACPI_MP_WAKE_COMMAND_WAKEUP 1
+#define ACPI_MP_WAKE_COMMAND_TEST 2
/* 17: CPU Core Interrupt Controller (ACPI 6.5) */
@@ -1952,6 +2108,46 @@ typedef struct acpi_madt_plic {
UINT32 GsiBase;
} ACPI_MADT_PLIC;
+/* 28: Arm GICv5 IRS (ACPI 6.7) */
+typedef struct acpi_madt_gicv5_irs {
+ ACPI_SUBTABLE_HEADER Header;
+ UINT8 Version;
+ UINT8 Reserved;
+ UINT32 IrsId;
+ UINT32 Flags;
+ UINT32 Reserved2;
+ UINT64 ConfigBaseAddress;
+ UINT64 SetlpiBaseAddress;
+} ACPI_MADT_GICV5_IRS;
+
+#define ACPI_MADT_IRS_NON_COHERENT (1)
+
+
+/* 29: Arm GICv5 ITS Config Frame (ACPI 6.7) */
+typedef struct acpi_madt_gicv5_translator
+{
+ ACPI_SUBTABLE_HEADER Header;
+ UINT8 Flags;
+ UINT8 Reserved; /* reserved - must be zero */
+ UINT32 TranslatorId;
+ UINT64 BaseAddress;
+
+} ACPI_MADT_GICv5_ITS;
+
+#define ACPI_MADT_GICV5_ITS_NON_COHERENT (1)
+
+/* 30: Arm GICv5 ITS Translate Frame (ACPI 6.7) */
+typedef struct acpi_madt_gicv5_translate_frame
+{
+ ACPI_SUBTABLE_HEADER Header;
+ UINT16 Reserved; /* reserved - must be zero */
+ UINT32 LinkedTranslatorId;
+ UINT32 TranslateFrameId;
+ UINT32 Reserved2;
+ UINT64 BaseAddress;
+
+} ACPI_MADT_GICv5_ITS_TRANSLATE;
+
/* 80: OEM data */
@@ -3356,6 +3552,15 @@ typedef struct acpi_pptt_cache
typedef struct acpi_pptt_cache_v1
{
+ ACPI_SUBTABLE_HEADER Header;
+ UINT16 Reserved;
+ UINT32 Flags;
+ UINT32 NextLevelOfCache;
+ UINT32 Size;
+ UINT32 NumberOfSets;
+ UINT8 Associativity;
+ UINT8 Attributes;
+ UINT16 LineSize;
UINT32 CacheId;
} ACPI_PPTT_CACHE_V1;
@@ -3629,6 +3834,8 @@ typedef struct acpi_ras2_patrol_scrub_param {
UINT32 Flags;
UINT32 ScrubParamsOut;
UINT32 ScrubParamsIn;
+ UINT32 ExtScrubParams;
+ UINT8 ScrubRateDesc[256];
} ACPI_RAS2_PATROL_SCRUB_PARAM;
@@ -4115,9 +4322,8 @@ typedef struct acpi_swft_file
UINT16 VendorID;
UINT32 FileID;
UINT16 FileVersion;
- UINT16 FileLength;
+ UINT32 FileLength;
UINT8 FileData[];
-
} ACPI_SWFT_FILE;
/*******************************************************************************
diff --git a/source/include/actbl3.h b/source/include/actbl3.h
index 07bc8713becc..6392359249c9 100644
--- a/source/include/actbl3.h
+++ b/source/include/actbl3.h
@@ -404,6 +404,7 @@ typedef struct acpi_srat_mem_affinity
#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */
#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */
#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */
+#define ACPI_SRAT_MEM_SPEC_PURPOSE (1<<3) /* 03: Memory is intended for specific-purpose usage */
/* 2: Processor Local X2_APIC Affinity (ACPI 4.0) */
diff --git a/source/include/acuuid.h b/source/include/acuuid.h
index 071e9a5ad610..a950972b01b3 100644
--- a/source/include/acuuid.h
+++ b/source/include/acuuid.h
@@ -179,6 +179,11 @@
#define UUID_DEVICE_LABELING "e5c937d0-3553-4d7a-9117-ea4d19c3434d"
#define UUID_PHYSICAL_PRESENCE "3dddfaa6-361b-4eb4-a424-8d10089d1653"
+/* TPM */
+#define UUID_HARDWARE_INFORMATION "cf8e16a5-c1e8-4e25-b712-4f54a96702c8"
+#define UUID_START_METHOD "6bbf6cab-5463-4714-b7cd-f0203c0368d4"
+#define UUID_MEMORY_CLEAR "376054ed-cc13-4675-901c-4756d7f2d45d"
+
/* NVDIMM - NFIT table */
#define UUID_NFIT_DIMM "4309ac30-0d11-11e4-9191-0800200c9a66"
@@ -213,4 +218,5 @@
#define UUID_USB4_CAPABILITIES "23a0d13a-26ab-486c-9c5f-0ffa525a575a"
#define UUID_1ST_FUNCTION_ID "893f00a6-660c-494e-bcfd-3043f4fb67c0"
#define UUID_2ND_FUNCTION_ID "107ededd-d381-4fd7-8da9-08e9a6c79644"
+#define UUID_FAN_TRIP_POINTS "a7611840-99fe-41ae-a488-35c75926c8eb"
#endif /* __ACUUID_H__ */
diff --git a/source/tools/acpidump/apdump.c b/source/tools/acpidump/apdump.c
index c582b4342f4c..0d770820f77a 100644
--- a/source/tools/acpidump/apdump.c
+++ b/source/tools/acpidump/apdump.c
@@ -243,9 +243,10 @@ ApIsValidChecksum (
{
fprintf (stderr, "%4.4s: Warning: wrong checksum in table\n",
Table->Signature);
+ return (FALSE);
}
- return (AE_OK);
+ return (TRUE);
}
diff --git a/source/tools/acpisrc/astable.c b/source/tools/acpisrc/astable.c
index 367f3d057f0d..25d70c2e11fe 100644
--- a/source/tools/acpisrc/astable.c
+++ b/source/tools/acpisrc/astable.c
@@ -678,6 +678,7 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = {
{"ACPI_TABLE_HPET", SRC_TYPE_STRUCT},
{"ACPI_TABLE_IBFT", SRC_TYPE_STRUCT},
{"ACPI_TABLE_IORT", SRC_TYPE_STRUCT},
+ {"ACPI_TABLE_IOVT", SRC_TYPE_STRUCT},
{"ACPI_TABLE_IVRS", SRC_TYPE_STRUCT},
{"ACPI_TABLE_MADT", SRC_TYPE_STRUCT},
{"ACPI_TABLE_MCFG", SRC_TYPE_STRUCT},
@@ -826,6 +827,9 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = {
{"ACPI_IORT_PMCG", SRC_TYPE_STRUCT},
{"ACPI_IORT_RMR", SRC_TYPE_STRUCT},
{"ACPI_IORT_RMR_DESC", SRC_TYPE_STRUCT},
+ {"ACPI_IOVT_HEADER", SRC_TYPE_STRUCT},
+ {"ACPI_IOVT_IOMMU", SRC_TYPE_STRUCT},
+ {"ACPI_IOVT_DEVICE_ENTRY", SRC_TYPE_STRUCT},
{"ACPI_IVRS_HEADER", SRC_TYPE_STRUCT},
{"ACPI_IVRS_HARDWARE", SRC_TYPE_STRUCT},
{"ACPI_IVRS_DE_HEADER", SRC_TYPE_STRUCT},