From ivan.hu at canonical.com Mon Dec 1 01:53:36 2025 From: ivan.hu at canonical.com (Ivan Hu) Date: Mon, 1 Dec 2025 09:53:36 +0800 Subject: [Call for Testing] FWTS supports on ACPI 6.6 Message-ID: Hi, All new features and changes in 6.6 were added in FWTS 25.11.00, along with addressing reported bugs and implementing improvements in this release. It would be greatly appreciated if anyone can verify their ACPI 6.6 firmware with FWTS and report bugs or missing features. The source code is available on GitHub: https://github.com/fwts/fwts For your convenience, the latest live version designed for x86 can be downloaded from: https://github.com/fwts/fwts-live/releases/ or https://fwts.ubuntu.com/fwts-live/ Additional details can be found at: https://wiki.ubuntu.com/FirmwareTestSuite/FirmwareTestSuiteLive Best Regards, Ivan -------------- next part -------------- An HTML attachment was scrubbed... URL: From ivan.hu at canonical.com Wed Dec 24 02:09:28 2025 From: ivan.hu at canonical.com (Ivan Hu) Date: Wed, 24 Dec 2025 10:09:28 +0800 Subject: [PATCH] libfwtsacpica: guard AcpiOsDeleteSemaphore against stale handles Message-ID: <20251224020928.482408-1-ivan.hu@canonical.com> BugLink: https://bugs.launchpad.net/fwts/+bug/2137075 Running "sudo fwts method" could segfault while tearing down ACPICA. During namespace shutdown ACPICA sometimes passed our OS layer a semaphore handle that had already been freed; the pointer showed up as 0xeaeaeaeaeaeaeaea and sem_destroy() hit invalid memory. Walk the semaphore table to confirm the handle belongs to an active slot and bail out early if it was never created or has already been deleted. When a valid entry is destroyed clear its bookkeeping fields so a second cleanup doesn’t reuse the stale values. Signed-off-by: Ivan Hu --- src/libfwtsacpica/fwts_acpica.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/libfwtsacpica/fwts_acpica.c b/src/libfwtsacpica/fwts_acpica.c index a6e3cc93..bde06a5e 100644 --- a/src/libfwtsacpica/fwts_acpica.c +++ b/src/libfwtsacpica/fwts_acpica.c @@ -555,15 +555,30 @@ ACPI_STATUS AcpiOsCreateSemaphore(UINT32 MaxUnits, ACPI_STATUS AcpiOsDeleteSemaphore(ACPI_HANDLE Handle) { sem_info *sem = (sem_info *)Handle; + sem_info *entry = NULL; ACPI_STATUS ret = AE_OK; + int i; if (!sem) return AE_BAD_PARAMETER; pthread_mutex_lock(&mutex_lock_sem_table); - if (sem_destroy(&sem->sem) == -1) + for (i = 0; i < MAX_SEMAPHORES; i++) { + if (&sem_table[i] == sem) { + entry = &sem_table[i]; + break; + } + } + + if (entry == NULL || !entry->used) { + pthread_mutex_unlock(&mutex_lock_sem_table); + return AE_BAD_PARAMETER; + } + + if (sem_destroy(&entry->sem) == -1) ret = AE_BAD_PARAMETER; - sem->used = false; + entry->used = false; + entry->count = 0; pthread_mutex_unlock(&mutex_lock_sem_table); -- 2.43.0 From ivan.hu at canonical.com Mon Dec 29 06:58:45 2025 From: ivan.hu at canonical.com (Ivan Hu) Date: Mon, 29 Dec 2025 14:58:45 +0800 Subject: [PATCH] acpi: apmt: fix typo in APMTNodeTypeUnknown Message-ID: <20251229065845.1502827-1-ivan.hu@canonical.com> Fix typo, no function impact. Signed-off-by: Ivan Hu --- fwts-test/apmt-0001/apmt-0002.log | 2 +- src/acpi/apmt/apmt.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fwts-test/apmt-0001/apmt-0002.log b/fwts-test/apmt-0001/apmt-0002.log index 0a48f7b7..1b42ada9 100644 --- a/fwts-test/apmt-0001/apmt-0002.log +++ b/fwts-test/apmt-0001/apmt-0002.log @@ -51,7 +51,7 @@ apmt Node type: 0x05 apmt Identifier: 0x00000001 apmt Node Instance primary: 0x0000000000000002 apmt Node Instance secondary: 0x00000000 -apmt FAILED [HIGH] APMTNodeTypeUnknow: Test 1, APMT Node Type +apmt FAILED [HIGH] APMTNodeTypeUnknown: Test 1, APMT Node Type apmt 0x05 is unknown. apmt Base address 0: 0x0000000000003000 apmt Base address 1: 0x0000000000003000 diff --git a/src/acpi/apmt/apmt.c b/src/acpi/apmt/apmt.c index 3058809a..8a5db021 100644 --- a/src/acpi/apmt/apmt.c +++ b/src/acpi/apmt/apmt.c @@ -85,7 +85,7 @@ static int apmt_test1(fwts_framework *fw) /* reserved */ passed = false; fwts_failed(fw, LOG_LEVEL_HIGH, - "APMTNodeTypeUnknow", + "APMTNodeTypeUnknown", "APMT Node Type 0x%2.2" PRIx8 " is unknown.", entry->type); break; -- 2.43.0 From ivan.hu at canonical.com Mon Dec 29 08:34:02 2025 From: ivan.hu at canonical.com (Ivan Hu) Date: Mon, 29 Dec 2025 16:34:02 +0800 Subject: [PATCH] autobrightness: Drop test2 that checks actual_brightness Message-ID: <20251229083402.1526454-1-ivan.hu@canonical.com> BugLink: https://bugs.launchpad.net/fwts/+bug/2136751 The autobrightness test2 checks if actual_brightness matches the programmed brightness value. This is a flawed check as actual_brightness intentionally doesn't need to match the programmed brightness. On AMD systems with eDP panels that support custom brightness curves, actual_brightness will not match the programmed value. This behavior was clarified in kernel documentation: https://github.com/torvalds/linux/commit/8ecd32b668238a7a79b2f44b66dae8ffb87ac763 systemd also stopped using actual_brightness for the same reason: https://github.com/systemd/systemd/commit/9a224c307b36610e3675390eb2620e74d0f4efb0 This removes test2 which was causing false failures on AMD systems. Signed-off-by: Ivan Hu --- src/acpi/brightness/autobrightness.c | 111 --------------------------- 1 file changed, 111 deletions(-) diff --git a/src/acpi/brightness/autobrightness.c b/src/acpi/brightness/autobrightness.c index 174936dd..997bbdc4 100644 --- a/src/acpi/brightness/autobrightness.c +++ b/src/acpi/brightness/autobrightness.c @@ -89,119 +89,8 @@ static int auto_brightness_test1(fwts_framework *fw) return FWTS_OK; } -static int auto_brightness_test2(fwts_framework *fw) -{ - struct dirent *entry; - int max_brightness; - int actual_brightness; - int saved_brightness; - DIR *brightness_dir = brightness_get_dir(); - - rewinddir(brightness_dir); - do { - int i; - int failures = 0; - bool *brightness_fail; - - entry = readdir(brightness_dir); - if (entry == NULL || entry->d_name[0] == '.') - continue; - - if (brightness_get_setting(entry->d_name, "max_brightness", &max_brightness) != FWTS_OK) { - fwts_failed(fw, LOG_LEVEL_HIGH, - "BrightnessNotExist", - "Maximum brightness could not be accessed for %s.", - entry->d_name); - continue; - } - - if (max_brightness <= 0) { - fwts_failed(fw, LOG_LEVEL_HIGH, - "BrightnessMaxTest2", - "Maximum brightness for %s is %d and should be > 0.", - entry->d_name, max_brightness); - continue; - } - - if (brightness_get_setting(entry->d_name, "actual_brightness", &saved_brightness) != FWTS_OK) { - fwts_failed(fw, LOG_LEVEL_HIGH, - "BrightnessNotExist", - "Maximum brightness could not be accessed for %s.", - entry->d_name); - continue; - } - - brightness_fail = calloc(max_brightness + 1, sizeof(bool)); - if (brightness_fail == NULL) { - fwts_log_error(fw, "Cannot allocate brightness table."); - continue; - } - - for (i = 0; i <= max_brightness; i++) { - brightness_set_setting(entry->d_name, "brightness", i); - if (brightness_get_setting(entry->d_name, "actual_brightness", &actual_brightness) != FWTS_OK) { - fwts_log_info(fw, "Cannot get brightness setting %d for backlight %s.", i, entry->d_name); - failures++; - brightness_fail[i] = true; - continue; - } - if (actual_brightness != i) { - failures++; - brightness_fail[i] = true; - } else { - brightness_fail[i] = false; - } - } - - if (failures) { - char *msg = NULL; - char buf[40]; - - /* Find the ranges of the failed levels */ - for (i = 0; i <= max_brightness; i++) { - int end = i; - - if (brightness_fail[i]) { - int j; - - /* Scan until we don't find a failure */ - for (j = i; j <= max_brightness && brightness_fail[j]; j++) - end = j; - - if (i == end) { - /* Just one failure */ - snprintf(buf, sizeof(buf), " %d", i); - } else { - /* A contiguous range of failures */ - snprintf(buf, sizeof(buf), " %d-%d", i, end); - i = end; - } - msg = fwts_realloc_strcat(msg, buf); - } - } - fwts_failed(fw, LOG_LEVEL_MEDIUM, - "BrightnessMismatch", - "%d brightness levels did not match the brightness level " - "just set for backlight %s.", - failures, entry->d_name); - fwts_log_info(fw, "The failed brightness levels were:%s.", msg); - free(msg); - } else - fwts_passed(fw, "Actual brightness matches the brightness level for " - "all %d levels for backlight %s.", max_brightness, entry->d_name); - - free(brightness_fail); - - /* Restore original setting */ - brightness_set_setting(entry->d_name, "brightness", saved_brightness); - } while (entry); - - return FWTS_OK; -} - static fwts_framework_minor_test auto_brightness_tests[] = { { auto_brightness_test1, "Test for maximum and actual brightness." }, - { auto_brightness_test2, "Change actual brightness." }, { NULL, NULL } }; -- 2.43.0 From ivan.hu at canonical.com Tue Dec 30 05:36:17 2025 From: ivan.hu at canonical.com (Ivan Hu) Date: Tue, 30 Dec 2025 13:36:17 +0800 Subject: [PATCH] ACPICA: Update to version 20251212 Message-ID: <20251230053617.1720244-1-ivan.hu@canonical.com> BugLink: https://bugs.launchpad.net/fwts/+bug/2137244 Major changes in this release of ACPICA are detailed below (from ACPICA documents/changes.txt): 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 Signed-off-by: Ivan Hu --- src/acpica/source/common/ahids.c | 2 + src/acpica/source/common/ahpredef.c | 1 + src/acpica/source/common/ahtable.c | 1 + src/acpica/source/common/ahuuids.c | 6 + src/acpica/source/common/dmtable.c | 117 +++++++--- src/acpica/source/common/dmtbdump2.c | 185 +++++++++++++-- src/acpica/source/common/dmtbdump3.c | 67 ++++++ src/acpica/source/common/dmtbinfo2.c | 123 +++++++++- src/acpica/source/common/dmtbinfo3.c | 25 ++ src/acpica/source/compiler/dtcompiler.h | 10 + src/acpica/source/compiler/dttable1.c | 85 +++++++ src/acpica/source/compiler/dttable2.c | 85 +++++-- src/acpica/source/compiler/dttemplate.h | 65 +++++- src/acpica/source/compiler/dtutils.c | 2 + .../source/components/events/evregion.c | 2 +- .../source/components/executer/exoparg3.c | 46 ++-- .../source/components/namespace/nswalk.c | 11 +- .../source/components/namespace/nsxfname.c | 2 +- src/acpica/source/components/tables/tbprint.c | 5 + .../source/components/utilities/utobject.c | 2 +- .../source/components/utilities/utosi.c | 6 +- src/acpica/source/include/acdisasm.h | 21 ++ src/acpica/source/include/aclocal.h | 2 +- src/acpica/source/include/acpixf.h | 2 +- src/acpica/source/include/acpredef.h | 5 +- src/acpica/source/include/actbinfo.h | 12 + src/acpica/source/include/actbl1.h | 5 +- src/acpica/source/include/actbl2.h | 220 +++++++++++++++++- src/acpica/source/include/actbl3.h | 1 + src/acpica/source/include/acuuid.h | 6 + 30 files changed, 999 insertions(+), 123 deletions(-) diff --git a/src/acpica/source/common/ahids.c b/src/acpica/source/common/ahids.c index 896e8cd6..018d009b 100644 --- a/src/acpica/source/common/ahids.c +++ b/src/acpica/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/src/acpica/source/common/ahpredef.c b/src/acpica/source/common/ahpredef.c index c51f7c67..601650e6 100644 --- a/src/acpica/source/common/ahpredef.c +++ b/src/acpica/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/src/acpica/source/common/ahtable.c b/src/acpica/source/common/ahtable.c index 705a6188..46c6c3b3 100644 --- a/src/acpica/source/common/ahtable.c +++ b/src/acpica/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/src/acpica/source/common/ahuuids.c b/src/acpica/source/common/ahuuids.c index dd311a46..2986f737 100644 --- a/src/acpica/source/common/ahuuids.c +++ b/src/acpica/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/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c index 02125db1..6eb0fd65 100644 --- a/src/acpica/source/common/dmtable.c +++ b/src/acpica/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/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c index f9145d7c..a5125bae 100644 --- a/src/acpica/source/common/dmtbdump2.c +++ b/src/acpica/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", @@ -477,6 +485,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 @@ -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/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c index 503bad5f..54479292 100644 --- a/src/acpica/source/common/dmtbdump3.c +++ b/src/acpica/source/common/dmtbdump3.c @@ -490,6 +490,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 diff --git a/src/acpica/source/common/dmtbinfo2.c b/src/acpica/source/common/dmtbinfo2.c index 570540e5..c936af40 100644 --- a/src/acpica/source/common/dmtbinfo2.c +++ b/src/acpica/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/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c index 24187f6a..2b5891c0 100644 --- a/src/acpica/source/common/dmtbinfo3.c +++ b/src/acpica/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/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h index c3b87769..503700fe 100644 --- a/src/acpica/source/compiler/dtcompiler.h +++ b/src/acpica/source/compiler/dtcompiler.h @@ -645,6 +645,10 @@ ACPI_STATUS DtCompileIort ( void **PFieldList); +ACPI_STATUS +DtCompileIovt ( + void **List); + ACPI_STATUS DtCompileIvrs ( void **PFieldList); @@ -753,6 +757,10 @@ ACPI_STATUS 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/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c index 6ceaf135..e5f6115b 100644 --- a/src/acpica/source/compiler/dttable1.c +++ b/src/acpica/source/compiler/dttable1.c @@ -3033,6 +3033,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: + *
+ *
+ * + * + * ... + * + * + * ... + * + *****************************************************************************/ + +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 diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c index c752965c..12dd2956 100644 --- a/src/acpica/source/compiler/dttable2.c +++ b/src/acpica/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; @@ -2827,6 +2822,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 diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h index 51a34be5..88bc38f2 100644 --- a/src/acpica/source/compiler/dttemplate.h +++ b/src/acpica/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 ".... at ..." */ + 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 ".... at ..." */ + 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/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c index d2c0ac71..5b69a359 100644 --- a/src/acpica/source/compiler/dtutils.c +++ b/src/acpica/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/src/acpica/source/components/events/evregion.c b/src/acpica/source/components/events/evregion.c index d3777b63..757983b3 100644 --- a/src/acpica/source/components/events/evregion.c +++ b/src/acpica/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/src/acpica/source/components/executer/exoparg3.c b/src/acpica/source/components/executer/exoparg3.c index 872fbbdb..722bbec4 100644 --- a/src/acpica/source/components/executer/exoparg3.c +++ b/src/acpica/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/src/acpica/source/components/namespace/nswalk.c b/src/acpica/source/components/namespace/nswalk.c index 18cb6921..ca5f3947 100644 --- a/src/acpica/source/components/namespace/nswalk.c +++ b/src/acpica/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/src/acpica/source/components/namespace/nsxfname.c b/src/acpica/source/components/namespace/nsxfname.c index 7779ee3f..939ad04d 100644 --- a/src/acpica/source/components/namespace/nsxfname.c +++ b/src/acpica/source/components/namespace/nsxfname.c @@ -805,7 +805,7 @@ AcpiInstallMethod ( ErrorExit: ACPI_FREE (AmlBuffer); - ACPI_FREE (MethodObj); + AcpiUtDeleteObjectDesc (MethodObj); return (Status); } diff --git a/src/acpica/source/components/tables/tbprint.c b/src/acpica/source/components/tables/tbprint.c index d82cfddb..72dab8da 100644 --- a/src/acpica/source/components/tables/tbprint.c +++ b/src/acpica/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/src/acpica/source/components/utilities/utobject.c b/src/acpica/source/components/utilities/utobject.c index 30b2fd99..3278f057 100644 --- a/src/acpica/source/components/utilities/utobject.c +++ b/src/acpica/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/src/acpica/source/components/utilities/utosi.c b/src/acpica/source/components/utilities/utosi.c index 8edd783c..6e034eb3 100644 --- a/src/acpica/source/components/utilities/utosi.c +++ b/src/acpica/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/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h index 9e8d4976..5416d0b3 100644 --- a/src/acpica/source/include/acdisasm.h +++ b/src/acpica/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[]; @@ -896,6 +909,10 @@ void AcpiDmDumpIort ( ACPI_TABLE_HEADER *Table); +void +AcpiDmDumpIovt ( + ACPI_TABLE_HEADER *Table); + void AcpiDmDumpIvrs ( ACPI_TABLE_HEADER *Table); @@ -1008,6 +1025,10 @@ void AcpiDmDumpSvkl ( ACPI_TABLE_HEADER *Table); +void +AcpiDmDumpSwft ( + ACPI_TABLE_HEADER *Table); + void AcpiDmDumpTcpa ( ACPI_TABLE_HEADER *Table); diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h index 56ce42ba..ff18d617 100644 --- a/src/acpica/source/include/aclocal.h +++ b/src/acpica/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/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h index 8f7047cd..67d60c68 100644 --- a/src/acpica/source/include/acpixf.h +++ b/src/acpica/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/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h index 91fd4972..8cf6cf2d 100644 --- a/src/acpica/source/include/acpredef.h +++ b/src/acpica/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/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h index fdf2a989..0d80f67b 100644 --- a/src/acpica/source/include/actbinfo.h +++ b/src/acpica/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/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h index ec04f0a0..6e793799 100644 --- a/src/acpica/source/include/actbl1.h +++ b/src/acpica/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/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h index a74b6d55..a51ff1ec 100644 --- a/src/acpica/source/include/actbl2.h +++ b/src/acpica/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/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h index 07bc8713..63923592 100644 --- a/src/acpica/source/include/actbl3.h +++ b/src/acpica/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/src/acpica/source/include/acuuid.h b/src/acpica/source/include/acuuid.h index 071e9a5a..a950972b 100644 --- a/src/acpica/source/include/acuuid.h +++ b/src/acpica/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__ */ -- 2.43.0