diff options
| author | Jung-uk Kim <jkim@FreeBSD.org> | 2025-12-19 05:24:03 +0000 |
|---|---|---|
| committer | Jung-uk Kim <jkim@FreeBSD.org> | 2025-12-19 05:24:03 +0000 |
| commit | 5cab380e2a2644aaa920b93f1580a1cfc803a8de (patch) | |
| tree | ddcdfcba94a4c4166cab7c4f37d1c57d1ec6ea91 | |
| parent | 5bb60d44e94172a567412968545c82065695d871 (diff) | |
Import ACPICA 20251212vendor/acpica/20251212vendor/acpica
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}, |
