Message ID | 20211004093941.36872-1-ivan.hu@canonical.com |
---|---|
State | Accepted |
Headers | show |
Series | ACPICA: Update to version 20210930 | expand |
On 2021-10-04 3:39 a.m., Ivan Hu wrote: > Changes in this release of ACPICA are detailed at the following > link on the ACPICA developer mailing list: > > https://lists.acpica.org/hyperkitty/list/devel@acpica.org/thread/AMZT7XOO2HPVPMACSBAU5ELTVFEHDKAR/ > > Signed-off-by: Ivan Hu <ivan.hu@canonical.com> > --- > src/acpica/source/common/dmtable.c | 58 ++++ > src/acpica/source/common/dmtbdump2.c | 300 ++++++++++++++++++ > src/acpica/source/common/dmtbdump3.c | 5 + > src/acpica/source/common/dmtbinfo2.c | 183 +++++++++++ > src/acpica/source/common/dmtbinfo3.c | 28 +- > src/acpica/source/compiler/aslmethod.c | 70 ++-- > src/acpica/source/compiler/dtcompiler.h | 4 + > src/acpica/source/compiler/dttable2.c | 5 + > src/acpica/source/compiler/dtutils.c | 2 + > src/acpica/source/compiler/preprocess.h | 2 +- > .../source/components/dispatcher/dsfield.c | 2 +- > .../source/components/hardware/hwesleep.c | 7 +- > .../source/components/hardware/hwsleep.c | 10 +- > .../source/components/hardware/hwxfsleep.c | 6 + > .../source/components/utilities/utosi.c | 1 + > src/acpica/source/include/acdisasm.h | 25 +- > src/acpica/source/include/acglobal.h | 2 + > src/acpica/source/include/acpixf.h | 2 +- > src/acpica/source/include/actbinfo.h | 14 + > src/acpica/source/include/actbl2.h | 289 ++++++++++++++++- > src/acpica/source/include/actbl3.h | 10 +- > src/acpica/source/include/actypes.h | 1 + > 22 files changed, 955 insertions(+), 71 deletions(-) > > diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c > index 1fa9ba16..dff1c613 100644 > --- a/src/acpica/source/common/dmtable.c > +++ b/src/acpica/source/common/dmtable.c > @@ -417,6 +417,26 @@ static const char *AcpiDmNfitSubnames[] = > "Unknown Subtable Type" /* Reserved */ > }; > > +static const char *AcpiDmNhltLinkTypeNames[] = > +{ > + "Reserved for HD-Audio", /* ACPI_NHLT_RESERVED_HD_AUDIO */ > + "Reserved for DSP", /* ACPI_NHLT_RESERVED_DSP */ > + "Type PDM", /* ACPI_NHLT_PDM */ > + "Type SSP", /* ACPI_NHLT_SSP */ > + "Reserved for SlimBus", /* ACPI_NHLT_RESERVED_SLIMBUS */ > + "Reserved for SoundWire", /* ACPI_NHLT_RESERVED_SOUNDWIRE */ > + "Unknown Link Type" /* Reserved */ > +}; > + > +static const char *AcpiDmNhltDirectionNames[] = > +{ > + "Render", /* ACPI_NHLT_DIR_RENDER */ > + "Capture", /* ACPI_NHLT_DIR_CAPTURE */ > + "Render with Loopback", /* ACPI_NHLT_DIR_RENDER_LOOPBACK */ > + "Feedback for Render", /* ACPI_NHLT_DIR_RENDER_FEEDBACK */ > + "Unknown Direction" /* Reserved */ > +}; > + > static const char *AcpiDmPcctSubnames[] = > { > "Generic Communications Subspace", /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */ > @@ -473,6 +493,7 @@ static const char *AcpiDmSratSubnames[] = > "GICC Affinity", > "GIC ITS Affinity", /* Acpi 6.2 */ > "Generic Initiator Affinity", /* Acpi 6.3 */ > + "Generic Port Affinity", /* Acpi 6.4 */ > "Unknown Subtable Type" /* Reserved */ > }; > > @@ -614,6 +635,7 @@ const ACPI_DMTABLE_DATA AcpiDmTableData[] = > {ACPI_SIG_MSCT, NULL, AcpiDmDumpMsct, DtCompileMsct, TemplateMsct}, > {ACPI_SIG_MSDM, NULL, AcpiDmDumpSlic, DtCompileSlic, TemplateMsdm}, > {ACPI_SIG_NFIT, AcpiDmTableInfoNfit, AcpiDmDumpNfit, DtCompileNfit, TemplateNfit}, > + {ACPI_SIG_NHLT, AcpiDmTableInfoNhlt, AcpiDmDumpNhlt, NULL, NULL}, > {ACPI_SIG_PCCT, AcpiDmTableInfoPcct, AcpiDmDumpPcct, DtCompilePcct, TemplatePcct}, > {ACPI_SIG_PDTT, AcpiDmTableInfoPdtt, AcpiDmDumpPdtt, DtCompilePdtt, TemplatePdtt}, > {ACPI_SIG_PHAT, NULL, AcpiDmDumpPhat, DtCompilePhat, TemplatePhat}, > @@ -1050,6 +1072,8 @@ AcpiDmDumpTable ( > case ACPI_DMT_IVRS_DE: > case ACPI_DMT_GTDT: > case ACPI_DMT_MADT: > + case ACPI_DMT_NHLT1: > + case ACPI_DMT_NHLT1a: > case ACPI_DMT_PCCT: > case ACPI_DMT_PMTT: > case ACPI_DMT_PPTT: > @@ -1138,6 +1162,11 @@ AcpiDmDumpTable ( > ByteLength = 16; > break; > > + case ACPI_DMT_BUF18: > + > + ByteLength = 18; > + break; > + > case ACPI_DMT_BUF128: > > ByteLength = 128; > @@ -1343,6 +1372,7 @@ AcpiDmDumpTable ( > case ACPI_DMT_BUF10: > case ACPI_DMT_BUF12: > case ACPI_DMT_BUF16: > + case ACPI_DMT_BUF18: > case ACPI_DMT_BUF128: > /* > * Buffer: Size depends on the opcode and was set above. > @@ -1790,6 +1820,34 @@ AcpiDmDumpTable ( > AcpiDmNfitSubnames[Temp16]); > break; > > + case ACPI_DMT_NHLT1: > + > + /* NHLT link types */ > + > + Temp8 = *Target; > + if (Temp8 > ACPI_NHLT_TYPE_RESERVED) > + { > + Temp8 = ACPI_NHLT_TYPE_RESERVED; > + } > + > + AcpiOsPrintf (UINT8_FORMAT, *Target, > + AcpiDmNhltLinkTypeNames[Temp8]); > + break; > + > + case ACPI_DMT_NHLT1a: > + > + /* NHLT direction */ > + > + Temp8 = *Target; > + if (Temp8 > ACPI_NHLT_DIR_RESERVED) > + { > + Temp8 = ACPI_NHLT_DIR_RESERVED; > + } > + > + AcpiOsPrintf (UINT8_FORMAT, *Target, > + AcpiDmNhltDirectionNames[Temp8]); > + break; > + > case ACPI_DMT_PCCT: > > /* PCCT subtable types */ > diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c > index 1b3cdf76..118b96ee 100644 > --- a/src/acpica/source/common/dmtbdump2.c > +++ b/src/acpica/source/common/dmtbdump2.c > @@ -1467,6 +1467,306 @@ NextSubtable: > } > > > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmDumpNhlt > + * > + * PARAMETERS: Table - A NHLT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of an NHLT. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpNhlt ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + UINT32 Offset; > + UINT32 TableLength = Table->Length; > + UINT32 EndpointCount; > + UINT8 FormatsCount; > + ACPI_NHLT_ENDPOINT *Subtable; > + ACPI_NHLT_FORMAT_CONFIG *FormatSubtable; > + ACPI_TABLE_NHLT *InfoTable; > + UINT32 CapabilitiesSize; > + UINT32 i; > + UINT32 j; > + UINT32 k; > + UINT32 EndpointEndOffset; > + UINT8 ConfigType = 0; > + UINT8 ArrayType; > + ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A *DevSpecific; > + ACPI_NHLT_FORMATS_CONFIG *FormatsConfig; > + ACPI_NHLT_LINUX_SPECIFIC_COUNT *Count; > + ACPI_NHLT_LINUX_SPECIFIC_DATA *LinuxData; > + > + > + /* Main table */ > + > + AcpiOsPrintf ("/* Main table */\n"); > + > + Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoNhlt); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Get the Endpoint Descriptor Count */ > + > + InfoTable = ACPI_ADD_PTR (ACPI_TABLE_NHLT, Table, 0); > + EndpointCount = InfoTable->EndpointCount; > + > + /* Subtables */ > + > + Offset = sizeof (ACPI_TABLE_NHLT); > + > + while (Offset < TableLength) > + { > + /* A variable number of Endpoint Descriptors - process each */ > + > + for (i = 0; i < EndpointCount; i++) > + { > + /* Do the Endpoint Descriptor table */ > + > + Subtable = ACPI_ADD_PTR (ACPI_NHLT_ENDPOINT, Table, Offset); > + if (Subtable->DescriptorLength > TableLength) > + { > + Offset += 1; > + AcpiOsPrintf ("\n/* Endpoint Descriptor Length larger than" > + " table size: %X, table %X, adjusting table offset (+1) */\n", > + Subtable->DescriptorLength, TableLength); > + > + Subtable = ACPI_ADD_PTR (ACPI_NHLT_ENDPOINT, Table, Offset); > + } > + > + AcpiOsPrintf ("\n/* Endpoint Descriptor #%u */\n", i+1); > + Status = AcpiDmDumpTable (TableLength, Offset, Subtable, > + Subtable->DescriptorLength, AcpiDmTableInfoNhlt0); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + EndpointEndOffset = Subtable->DescriptorLength + Offset; > + > + /* Check for endpoint descriptor beyond end-of-table */ > + > + if (Subtable->DescriptorLength > TableLength) > + { > + AcpiOsPrintf ("\n/* Endpoint Descriptor Length larger than table size: %X, table %X */\n", > + Subtable->DescriptorLength, TableLength); > + } > + Offset += sizeof (ACPI_NHLT_ENDPOINT); > + Subtable = ACPI_ADD_PTR (ACPI_NHLT_ENDPOINT, Table, Offset); > + > + /* Do the Device Specific table */ > + > + AcpiOsPrintf ("\n/* Endpoint Device_Specific_Config table */\n"); > + DevSpecific = ACPI_CAST_PTR (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A, Subtable); > + CapabilitiesSize = DevSpecific->CapabilitiesSize; > + > + /* Different subtables based upon capabilities_size */ > + > + switch (CapabilitiesSize) > + { > + case 0: > + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific, > + sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B), AcpiDmTableInfoNhlt5b); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + Offset += sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B); > + break; > + > + case 1: > + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific, > + sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_C), AcpiDmTableInfoNhlt5c); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + Offset += sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_C); > + break; > + > + case 2: > + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific, > + sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG), AcpiDmTableInfoNhlt5); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + Offset += sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG); > + break; > + > + case 3: > + ConfigType = DevSpecific->ConfigType; > + ArrayType = DevSpecific->ArrayType; > + > + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific, > + sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A), AcpiDmTableInfoNhlt5a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Capabilities Size == 3 */ > + Offset += sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A); > + > + /* Check for a vendor-defined mic array */ > + > + if ((ConfigType == ACPI_NHLT_TYPE_MIC_ARRAY) && ((ArrayType & ARRAY_TYPE_MASK) == VENDOR_DEFINED)) > + { > + /* Vendor-defined microphone array */ > + > + AcpiOsPrintf ("\n/* Vendor-defined microphone array */\n"); > + > + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific, > + sizeof (ACPI_NHLT_VENDOR_MIC_CONFIG), AcpiDmTableInfoNhlt6); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + Offset += sizeof (ACPI_NHLT_VENDOR_MIC_CONFIG); > + } > + break; > + > + default: > + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific, > + sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B), AcpiDmTableInfoNhlt5b); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + Offset += sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B); > + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific, > + CapabilitiesSize, AcpiDmTableInfoNhlt3a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + Offset += CapabilitiesSize; > + break; > + } > + > + /* Do the Formats_Config table */ > + > + FormatsConfig = ACPI_ADD_PTR (ACPI_NHLT_FORMATS_CONFIG, Table, Offset); > + FormatsCount = FormatsConfig->FormatsCount; > + > + AcpiOsPrintf ("\n/* Formats_Config table */\n"); > + > + Status = AcpiDmDumpTable (TableLength, Offset, FormatsConfig, > + sizeof (ACPI_NHLT_FORMATS_CONFIG), AcpiDmTableInfoNhlt4); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + Offset += sizeof (ACPI_NHLT_FORMATS_CONFIG); > + > + /* A variable number of Format_Config Descriptors - process each */ > + > + for (j = 0; j < FormatsCount; j++) > + { > + FormatSubtable = ACPI_ADD_PTR (ACPI_NHLT_FORMAT_CONFIG, Table, Offset); > + CapabilitiesSize = FormatSubtable->CapabilitySize; > + > + /* Do the Wave_extensible struct */ > + > + AcpiOsPrintf ("\n/* Wave_Format_Extensible table #%u */\n", j+1); > + Status = AcpiDmDumpTable (TableLength, Offset, FormatSubtable, > + sizeof (ACPI_NHLT_FORMAT_CONFIG), AcpiDmTableInfoNhlt3); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + Offset += sizeof (ACPI_NHLT_WAVE_EXTENSIBLE); > + > + /* Do the Capabilities array */ > + > + Offset += sizeof (UINT32); > + AcpiOsPrintf ("\n/* Specific_Config table #%u */\n", j+1); > + FormatSubtable = ACPI_ADD_PTR (ACPI_NHLT_FORMAT_CONFIG, Table, Offset); > + Status = AcpiDmDumpTable (TableLength, Offset, FormatSubtable, > + CapabilitiesSize, AcpiDmTableInfoNhlt3a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + Offset += CapabilitiesSize; > + } > + > + /* > + * If we are not done with the Endpoint(s) yet, then there must be > + * some Linux-specific structure(s) yet to be processed. > + */ > + if (Offset < EndpointEndOffset) > + { > + AcpiOsPrintf ("\n"); > + Count = ACPI_ADD_PTR (ACPI_NHLT_LINUX_SPECIFIC_COUNT, Table, Offset); > + Status = AcpiDmDumpTable (TableLength, Offset, Count, > + sizeof (ACPI_NHLT_LINUX_SPECIFIC_COUNT), AcpiDmTableInfoNhlt7); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + Offset += sizeof (ACPI_NHLT_LINUX_SPECIFIC_COUNT); > + > + /* Variable number of linux-specific structures */ > + > + for (k = 0; k < Count->StructureCount; k++) > + { > + LinuxData = ACPI_ADD_PTR (ACPI_NHLT_LINUX_SPECIFIC_DATA, Table, Offset); > + > + AcpiOsPrintf ("\n/* Linux-specific structure #%u */\n", k+1); > + > + Status = AcpiDmDumpTable (TableLength, Offset, LinuxData, > + sizeof (ACPI_NHLT_LINUX_SPECIFIC_DATA), AcpiDmTableInfoNhlt7a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + Offset += sizeof (ACPI_NHLT_LINUX_SPECIFIC_DATA); > + } > + > + /* Should be at the end of the Endpoint structure. Skip any extra bytes */ > + > + if (Offset < EndpointEndOffset) > + { > + AcpiOsPrintf ("\n/* Endpoint descriptor ended before endpoint size was reached. " > + "skipped %X input bytes, current offset: %X, Endpoint End Offset: %X */\n", > + EndpointEndOffset - Offset, Offset, EndpointEndOffset); > + AcpiUtDumpBuffer (((UINT8 *)Table)+Offset, > + EndpointEndOffset - Offset, DB_BYTE_DISPLAY, Offset); > + Offset = EndpointEndOffset; > + } > + } > + } > + > + /* Emit the table terminator (if present) */ > + > + if (Offset == TableLength - sizeof (ACPI_NHLT_TABLE_TERMINATOR)) > + { > + LinuxData = ACPI_ADD_PTR (ACPI_NHLT_LINUX_SPECIFIC_DATA, Table, Offset); > + AcpiOsPrintf ("\n/* Table terminator structure */\n"); > + > + Status = AcpiDmDumpTable (TableLength, Offset, LinuxData, > + sizeof (ACPI_NHLT_TABLE_TERMINATOR), AcpiDmTableInfoNhlt8); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + } > + > + return; > + } > +} > + > + > /******************************************************************************* > * > * FUNCTION: AcpiDmDumpPcct > diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c > index 981a51e0..63b6d2d5 100644 > --- a/src/acpica/source/common/dmtbdump3.c > +++ b/src/acpica/source/common/dmtbdump3.c > @@ -338,6 +338,11 @@ AcpiDmDumpSrat ( > InfoTable = AcpiDmTableInfoSrat5; > break; > > + case ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY: > + > + InfoTable = AcpiDmTableInfoSrat6; > + break; > + > default: > AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n", > Subtable->Type); > diff --git a/src/acpica/source/common/dmtbinfo2.c b/src/acpica/source/common/dmtbinfo2.c > index 00cf2e4d..4cbe112e 100644 > --- a/src/acpica/source/common/dmtbinfo2.c > +++ b/src/acpica/source/common/dmtbinfo2.c > @@ -1194,6 +1194,189 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNfit7[] = > }; > > > +/******************************************************************************* > + * > + * NHLT - Non HD Audio Link Table. Conforms to Intel Smart Sound Technology > + * NHLT Specification, January 2020 Revision 0.8.1 > + * > + ******************************************************************************/ > + > +/* Main table */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt[] = > +{ > + {ACPI_DMT_UINT8, ACPI_NHLT_OFFSET (EndpointCount), "Endpoint Count", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Endpoint config */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt0[] = > +{ > + {ACPI_DMT_UINT32, ACPI_NHLT0_OFFSET (DescriptorLength), "Descriptor Length", DT_LENGTH}, > + {ACPI_DMT_NHLT1, ACPI_NHLT0_OFFSET (LinkType), "Link Type", 0}, > + {ACPI_DMT_UINT8, ACPI_NHLT0_OFFSET (InstanceId), "Instance Id", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT0_OFFSET (VendorId), "Vendor Id", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT0_OFFSET (DeviceId), "Device Id", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT0_OFFSET (RevisionId), "Revision Id", 0}, > + {ACPI_DMT_UINT32, ACPI_NHLT0_OFFSET (SubsystemId), "Subsystem Id", 0}, > + {ACPI_DMT_UINT8, ACPI_NHLT0_OFFSET (DeviceType), "Device Type", 0}, > + {ACPI_DMT_NHLT1a, ACPI_NHLT0_OFFSET (Direction), "Direction", 0}, > + {ACPI_DMT_UINT8, ACPI_NHLT0_OFFSET (VirtualBusId), "Virtual Bus Id", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Device_Specific config */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt1[] = > +{ > + {ACPI_DMT_UINT32, ACPI_NHLT1_OFFSET (CapabilitiesSize), "Capabilities Size", DT_LENGTH}, > + {ACPI_DMT_UINT8, ACPI_NHLT1_OFFSET (VirtualSlot), "Virtual Slot", 0}, > + {ACPI_DMT_UINT8, ACPI_NHLT1_OFFSET (ConfigType), "Config Type", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Wave Format Extensible */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt2[] = > +{ > + {ACPI_DMT_UINT16, ACPI_NHLT2_OFFSET (FormatTag), "Format Tag", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT2_OFFSET (ChannelCount), "Channel Count", 0}, > + {ACPI_DMT_UINT32, ACPI_NHLT2_OFFSET (SamplesPerSec), "Samples Per Second", 0}, > + {ACPI_DMT_UINT32, ACPI_NHLT2_OFFSET (AvgBytesPerSec), "Average Bytes Per Second", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT2_OFFSET (BlockAlign), "Block Alignment", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT2_OFFSET (BitsPerSample), "Bits Per Sample", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT2_OFFSET (ExtraFormatSize), "Extra Format Size", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT2_OFFSET (ValidBitsPerSample), "Valid Bits Per Sample", 0}, > + {ACPI_DMT_UINT32, ACPI_NHLT2_OFFSET (ChannelMask), "Channel Mask", 0}, > + {ACPI_DMT_UUID, ACPI_NHLT2_OFFSET (SubFormatGuid), "SubFormat GUID", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Format Config */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt3[] = > +{ > + {ACPI_DMT_UINT16, ACPI_NHLT3_OFFSET (Format.FormatTag), "Format Tag", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT3_OFFSET (Format.ChannelCount), "Channel Count", 0}, > + {ACPI_DMT_UINT32, ACPI_NHLT3_OFFSET (Format.SamplesPerSec), "Samples Per Second", 0}, > + {ACPI_DMT_UINT32, ACPI_NHLT3_OFFSET (Format.AvgBytesPerSec), "Average Bytes Per Second", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT3_OFFSET (Format.BlockAlign), "Block Alignment", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT3_OFFSET (Format.BitsPerSample), "Bits Per Sample", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT3_OFFSET (Format.ExtraFormatSize), "Extra Format Size", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT3_OFFSET (Format.ValidBitsPerSample), "Valid Bits Per Sample", 0}, > + {ACPI_DMT_UINT32, ACPI_NHLT3_OFFSET (Format.ChannelMask), "Channel Mask", 0}, > + {ACPI_DMT_UUID, ACPI_NHLT3_OFFSET (Format.SubFormatGuid), "SubFormat GUID", 0}, > + {ACPI_DMT_UINT32, ACPI_NHLT3_OFFSET (CapabilitySize), "Capabilities Length", DT_LENGTH}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* > + * We treat the binary Capabilities field as its own subtable (to make > + * ACPI_DMT_RAW_BUFFER work properly). > + */ > +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt3a[] = > +{ > + {ACPI_DMT_RAW_BUFFER, 0, "Capabilities", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > +/* Formats Config */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt4[] = > +{ > + {ACPI_DMT_UINT8, ACPI_NHLT4_OFFSET (FormatsCount), "Formats Count", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Specific Config, CapabilitiesSize == 2 */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5[] = > +{ > + {ACPI_DMT_UINT32, ACPI_NHLT5_OFFSET (CapabilitiesSize), "Capabilities Size", DT_LENGTH}, > + {ACPI_DMT_UINT8, ACPI_NHLT5_OFFSET (VirtualSlot), "Virtual Slot", 0}, > + {ACPI_DMT_UINT8, ACPI_NHLT5_OFFSET (ConfigType), "Config Type", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Specific Config, CapabilitiesSize == 3 */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5a[] = > +{ > + {ACPI_DMT_UINT32, ACPI_NHLT5A_OFFSET (CapabilitiesSize), "Capabilities Size", DT_LENGTH}, > + {ACPI_DMT_UINT8, ACPI_NHLT5A_OFFSET (VirtualSlot), "Virtual Slot", 0}, > + {ACPI_DMT_UINT8, ACPI_NHLT5A_OFFSET (ConfigType), "Config Type", 0}, > + {ACPI_DMT_UINT8, ACPI_NHLT5A_OFFSET (ArrayType), "Array Type", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Specific Config, CapabilitiesSize == 0 */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5b[] = > +{ > + {ACPI_DMT_UINT32, ACPI_NHLT5B_OFFSET (CapabilitiesSize), "Capabilities Size", DT_LENGTH}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Specific Config, CapabilitiesSize == 1 */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5c[] = > +{ > + {ACPI_DMT_UINT32, ACPI_NHLT5C_OFFSET (CapabilitiesSize), "Capabilities Size", DT_LENGTH}, > + {ACPI_DMT_UINT8, ACPI_NHLT5C_OFFSET (VirtualSlot), "Virtual Slot", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Microphone array Config */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt6[] = > +{ > + {ACPI_DMT_UINT8, ACPI_NHLT6_OFFSET (Type), "Type", 0}, > + {ACPI_DMT_UINT8, ACPI_NHLT6_OFFSET (Panel), "Panel", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (SpeakerPositionDistance), "Speaker Position Distance", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (HorizontalOffset), "Horizontal Offset", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (VerticalOffset), "Vertical Offset", 0}, > + {ACPI_DMT_UINT8, ACPI_NHLT6_OFFSET (FrequencyLowBand), "Frequency Low Band", 0}, > + {ACPI_DMT_UINT8, ACPI_NHLT6_OFFSET (FrequencyHighBand), "Frequency High Band", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (DirectionAngle), "Direction Angle", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (ElevationAngle), "Elevation Angle", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (WorkVerticalAngleBegin), "Work Vertical Angle Begin", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (WorkVerticalAngleEnd), "Work Vertical Angle End", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (WorkHorizontalAngleBegin), "Work Horizontal Angle Begin", 0}, > + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (WorkHorizontalAngleEnd), "Work Horizontal Angle End", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Number of Linux-specific structures */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt7[] = > +{ > + {ACPI_DMT_UINT8, ACPI_NHLT7_OFFSET (StructureCount), "Linux-specific struct count", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* The Linux-specific structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt7a[] = > +{ > + {ACPI_DMT_BUF16, ACPI_NHLT7A_OFFSET (DeviceId), "Device ID", 0}, > + {ACPI_DMT_UINT8, ACPI_NHLT7A_OFFSET (DeviceInstanceId), "Device Instance ID", 0}, > + {ACPI_DMT_UINT8, ACPI_NHLT7A_OFFSET (DevicePortId), "Device Port ID", 0}, > + {ACPI_DMT_BUF18, ACPI_NHLT7A_OFFSET (Filler), "Specific Data", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* Table terminator (may or may not be present) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt8[] = > +{ > + {ACPI_DMT_UINT32, ACPI_NHLT8_OFFSET (TerminatorValue), "Terminator Value", 0}, > + {ACPI_DMT_UINT32, ACPI_NHLT8_OFFSET (TerminatorSignature), "Terminator Signature", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > + > /******************************************************************************* > * > * PCCT - Platform Communications Channel Table (ACPI 5.0) > diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c > index e573676a..12e1be4c 100644 > --- a/src/acpica/source/common/dmtbinfo3.c > +++ b/src/acpica/source/common/dmtbinfo3.c > @@ -368,21 +368,33 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat4[] = > ACPI_DMT_TERMINATOR > }; > > +/* Common SRAT structure for Generic Affinity Subtables */ > + > +#define ACPI_DM_SRAT_GENERIC_AFFINITY \ > + {ACPI_DMT_UINT8, ACPI_SRAT5_OFFSET (Reserved), "Reserved1", 0}, \ > + {ACPI_DMT_UINT8, ACPI_SRAT5_OFFSET (DeviceHandleType), "Device Handle Type", 0}, \ > + {ACPI_DMT_UINT32, ACPI_SRAT5_OFFSET (ProximityDomain), "Proximity Domain", 0}, \ > + {ACPI_DMT_BUF16, ACPI_SRAT5_OFFSET (DeviceHandle), "Device Handle", 0}, \ > + {ACPI_DMT_UINT32, ACPI_SRAT5_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, \ > + {ACPI_DMT_FLAG0, ACPI_SRAT5_FLAG_OFFSET (Flags,0), "Enabled", 0}, \ > + {ACPI_DMT_FLAG1, ACPI_SRAT5_FLAG_OFFSET (Flags,0), "Architectural Transactions", 0}, \ > + {ACPI_DMT_UINT32, ACPI_SRAT5_OFFSET (Reserved1), "Reserved2", 0} > + > /* 5: Generic Initiator Affinity Structure (ACPI 6.3) */ > > ACPI_DMTABLE_INFO AcpiDmTableInfoSrat5[] = > { > - {ACPI_DMT_UINT8, ACPI_SRAT5_OFFSET (Reserved), "Reserved1", 0}, > - {ACPI_DMT_UINT8, ACPI_SRAT5_OFFSET (DeviceHandleType), "Device Handle Type", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT5_OFFSET (ProximityDomain), "Proximity Domain", 0}, > - {ACPI_DMT_BUF16, ACPI_SRAT5_OFFSET (DeviceHandle), "Device Handle", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT5_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_SRAT5_FLAG_OFFSET (Flags,0), "Enabled", 0}, > - {ACPI_DMT_FLAG1, ACPI_SRAT5_FLAG_OFFSET (Flags,0), "Architectural Transactions", 0}, > - {ACPI_DMT_UINT32, ACPI_SRAT5_OFFSET (Reserved1), "Reserved2", 0}, > + ACPI_DM_SRAT_GENERIC_AFFINITY, > ACPI_DMT_TERMINATOR > }; > > +/* 6: Generic Port Affinity Structure (ACPI 6.4) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat6[] = > +{ > + ACPI_DM_SRAT_GENERIC_AFFINITY, > + ACPI_DMT_TERMINATOR > +}; > > /******************************************************************************* > * > diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c > index 5bec65e8..4b3b66a5 100644 > --- a/src/acpica/source/compiler/aslmethod.c > +++ b/src/acpica/source/compiler/aslmethod.c > @@ -559,74 +559,56 @@ MtMethodAnalysisWalkBegin ( > * > * Under the Device Object: > * > - * 1) If _DIS is present, must have a _CRS, _PRS, and _SRS > - * 2) If _PRS is present, must have a _CRS and _SRS > - * 3) If _SRS is present, must have a _CRS and _PRS > + * 1) If _PRS present, must have _CRS and _SRS > + * 2) If _SRS present, must have _PRS (_PRS requires _CRS and _SRS) > + * 3) If _DIS present, must have _SRS (_SRS requires _PRS, _PRS requires _CRS and _SRS) > + * 4) If _SRS present, probably should have a _DIS (Remark only) > */ > CrsExists = ApFindNameInDeviceTree (METHOD_NAME__CRS, Op); > DisExists = ApFindNameInDeviceTree (METHOD_NAME__DIS, Op); > PrsExists = ApFindNameInDeviceTree (METHOD_NAME__PRS, Op); > SrsExists = ApFindNameInDeviceTree (METHOD_NAME__SRS, Op); > > - /* 1) If _DIS is present, must have a _CRS, _PRS, and _SRS */ > + /* 1) If _PRS is present, must have a _CRS and _SRS */ > > - if (DisExists) > + if (PrsExists) > { > if (!CrsExists) > { > AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > - "_DIS is missing a _CRS, requires a _CRS, _PRS, and a _SRS"); > - } > - > - if (!PrsExists) > - { > - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > - "_DIS is missing a _PRS, requires a _CRS, _PRS, and a _SRS"); > + "Device has a _PRS, missing a _CRS, required"); > } > - > if (!SrsExists) > { > AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > - "_DIS is missing a _SRS, requires a _CRS, _PRS, and a _SRS"); > + "Device has a _PRS, missing a _SRS, required"); > } > } > > - /* 2) If _PRS is present, must have a _CRS and _SRS */ > + /* 2) If _SRS is present, must have _PRS (_PRS requires _CRS and _SRS) */ > > - if (PrsExists) > + if ((SrsExists) && (!PrsExists)) > { > - if (!CrsExists) > - { > - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > - "_PRS is missing a _CRS, requires a _CRS and a _SRS"); > - } > - > - if (!SrsExists) > - { > - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > - "_PRS is missing a _SRS, requires a _CRS and a _SRS"); > - } > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "Device has a _SRS, missing a _PRS, required"); > } > > - /* 3) If _SRS is present, must have a _CRS and _PRS */ > + /* 3) If _DIS is present, must have a _SRS */ > > - if (SrsExists) > + if ((DisExists) && (!SrsExists)) > { > - if (!CrsExists) > - { > - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > - "_SRS is missing a _CRS, requires a _CRS and a _PRS"); > - } > - if (!PrsExists) > - { > - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > - "_SRS is missing a _PRS, requires a _CRS and a _PRS"); > - } > - if (!DisExists) > - { > - AslError (ASL_REMARK, ASL_MSG_MISSING_DEPENDENCY, Op, > - "_SRS is missing a _DIS"); > - } > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "Device has a _DIS, missing a _SRS, required"); > + } > + > + /* > + * 4) If _SRS is present, should have a _DIS (_PRS requires _CRS > + * and _SRS) Remark only. > + */ > + if ((SrsExists) && (!DisExists)) > + { > + AslError (ASL_REMARK, ASL_MSG_MISSING_DEPENDENCY, Op, > + "Device has a _SRS, no corresponding _DIS"); > } > break; > > diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h > index 6d3dbefa..614a686f 100644 > --- a/src/acpica/source/compiler/dtcompiler.h > +++ b/src/acpica/source/compiler/dtcompiler.h > @@ -657,6 +657,10 @@ ACPI_STATUS > DtCompileNfit ( > void **PFieldList); > > +ACPI_STATUS > +DtCompileNhlt ( > + void **PFieldList); > + > ACPI_STATUS > DtCompilePcct ( > void **PFieldList); > diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c > index fb41ac87..b9445122 100644 > --- a/src/acpica/source/compiler/dttable2.c > +++ b/src/acpica/source/compiler/dttable2.c > @@ -2062,6 +2062,11 @@ DtCompileSrat ( > InfoTable = AcpiDmTableInfoSrat5; > break; > > + case ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY: > + > + InfoTable = AcpiDmTableInfoSrat6; > + break; > + > default: > > DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SRAT"); > diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c > index 7d706da6..52180fb3 100644 > --- a/src/acpica/source/compiler/dtutils.c > +++ b/src/acpica/source/compiler/dtutils.c > @@ -581,6 +581,8 @@ DtGetFieldLength ( > case ACPI_DMT_IVRS_DE: > case ACPI_DMT_GTDT: > case ACPI_DMT_MADT: > + case ACPI_DMT_NHLT1: > + case ACPI_DMT_NHLT1a: > case ACPI_DMT_PCCT: > case ACPI_DMT_PMTT: > case ACPI_DMT_PPTT: > diff --git a/src/acpica/source/compiler/preprocess.h b/src/acpica/source/compiler/preprocess.h > index 6343a49c..f4c8c309 100644 > --- a/src/acpica/source/compiler/preprocess.h > +++ b/src/acpica/source/compiler/preprocess.h > @@ -355,7 +355,7 @@ PrEvaluateExpression ( > > > /* > - * prutils - Preprocesor utilities > + * prutils - Preprocessor utilities > */ > char * > PrGetNextToken ( > diff --git a/src/acpica/source/components/dispatcher/dsfield.c b/src/acpica/source/components/dispatcher/dsfield.c > index 90f895b7..bd2755ae 100644 > --- a/src/acpica/source/components/dispatcher/dsfield.c > +++ b/src/acpica/source/components/dispatcher/dsfield.c > @@ -797,7 +797,7 @@ AcpiDsInitFieldObjects ( > } > > #ifdef ACPI_EXEC_APP > - Flags |= ACPI_NS_OVERRIDE_IF_FOUND; > + Flags |= ACPI_NS_OVERRIDE_IF_FOUND; > #endif > /* > * Walk the list of entries in the FieldList > diff --git a/src/acpica/source/components/hardware/hwesleep.c b/src/acpica/source/components/hardware/hwesleep.c > index fcc28581..e8db4d26 100644 > --- a/src/acpica/source/components/hardware/hwesleep.c > +++ b/src/acpica/source/components/hardware/hwesleep.c > @@ -312,18 +312,15 @@ ACPI_STATUS > AcpiHwExtendedWakePrep ( > UINT8 SleepState) > { > - ACPI_STATUS Status; > UINT8 SleepTypeValue; > > > ACPI_FUNCTION_TRACE (HwExtendedWakePrep); > > > - Status = AcpiGetSleepTypeData (ACPI_STATE_S0, > - &AcpiGbl_SleepTypeA, &AcpiGbl_SleepTypeB); > - if (ACPI_SUCCESS (Status)) > + if (AcpiGbl_SleepTypeAS0 != ACPI_SLEEP_TYPE_INVALID) > { > - SleepTypeValue = ((AcpiGbl_SleepTypeA << ACPI_X_SLEEP_TYPE_POSITION) & > + SleepTypeValue = ((AcpiGbl_SleepTypeAS0 << ACPI_X_SLEEP_TYPE_POSITION) & > ACPI_X_SLEEP_TYPE_MASK); > > (void) AcpiWrite ((UINT64) (SleepTypeValue | ACPI_X_SLEEP_ENABLE), > diff --git a/src/acpica/source/components/hardware/hwsleep.c b/src/acpica/source/components/hardware/hwsleep.c > index d85d0478..2b857d97 100644 > --- a/src/acpica/source/components/hardware/hwsleep.c > +++ b/src/acpica/source/components/hardware/hwsleep.c > @@ -339,7 +339,7 @@ ACPI_STATUS > AcpiHwLegacyWakePrep ( > UINT8 SleepState) > { > - ACPI_STATUS Status; > + ACPI_STATUS Status = AE_OK; > ACPI_BIT_REGISTER_INFO *SleepTypeRegInfo; > ACPI_BIT_REGISTER_INFO *SleepEnableRegInfo; > UINT32 Pm1aControl; > @@ -353,9 +353,7 @@ AcpiHwLegacyWakePrep ( > * This is unclear from the ACPI Spec, but it is required > * by some machines. > */ > - Status = AcpiGetSleepTypeData (ACPI_STATE_S0, > - &AcpiGbl_SleepTypeA, &AcpiGbl_SleepTypeB); > - if (ACPI_SUCCESS (Status)) > + if (AcpiGbl_SleepTypeAS0 != ACPI_SLEEP_TYPE_INVALID) > { > SleepTypeRegInfo = > AcpiHwGetBitRegisterInfo (ACPI_BITREG_SLEEP_TYPE); > @@ -376,9 +374,9 @@ AcpiHwLegacyWakePrep ( > > /* Insert the SLP_TYP bits */ > > - Pm1aControl |= (AcpiGbl_SleepTypeA << > + Pm1aControl |= (AcpiGbl_SleepTypeAS0 << > SleepTypeRegInfo->BitPosition); > - Pm1bControl |= (AcpiGbl_SleepTypeB << > + Pm1aControl |= (AcpiGbl_SleepTypeBS0 << > SleepTypeRegInfo->BitPosition); > > /* Write the control registers and ignore any errors */ > diff --git a/src/acpica/source/components/hardware/hwxfsleep.c b/src/acpica/source/components/hardware/hwxfsleep.c > index 26b48ccb..f1a1344c 100644 > --- a/src/acpica/source/components/hardware/hwxfsleep.c > +++ b/src/acpica/source/components/hardware/hwxfsleep.c > @@ -471,6 +471,12 @@ AcpiEnterSleepStatePrep ( > return_ACPI_STATUS (Status); > } > > + Status = AcpiGetSleepTypeData (ACPI_STATE_S0, > + &AcpiGbl_SleepTypeAS0, &AcpiGbl_SleepTypeBS0); > + if (ACPI_FAILURE (Status)) { > + AcpiGbl_SleepTypeAS0 = ACPI_SLEEP_TYPE_INVALID; > + } > + > /* Execute the _PTS method (Prepare To Sleep) */ > > ArgList.Count = 1; > diff --git a/src/acpica/source/components/utilities/utosi.c b/src/acpica/source/components/utilities/utosi.c > index 61867f71..756ca35c 100644 > --- a/src/acpica/source/components/utilities/utosi.c > +++ b/src/acpica/source/components/utilities/utosi.c > @@ -220,6 +220,7 @@ static ACPI_INTERFACE_INFO AcpiDefaultSupportedInterfaces[] = > {"Windows 2018", NULL, 0, ACPI_OSI_WIN_10_RS4}, /* Windows 10 version 1803 - Added 11/2018 */ > {"Windows 2018.2", NULL, 0, ACPI_OSI_WIN_10_RS5}, /* Windows 10 version 1809 - Added 11/2018 */ > {"Windows 2019", NULL, 0, ACPI_OSI_WIN_10_19H1}, /* Windows 10 version 1903 - Added 08/2019 */ > + {"Windows 2020", NULL, 0, ACPI_OSI_WIN_10_20H1}, /* Windows 10 version 2004 - Added 08/2021 */ > > /* Feature Group Strings */ > > diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h > index 839c0edd..6e162d6a 100644 > --- a/src/acpica/source/include/acdisasm.h > +++ b/src/acpica/source/include/acdisasm.h > @@ -224,6 +224,7 @@ typedef enum > ACPI_DMT_BUF10, > ACPI_DMT_BUF12, > ACPI_DMT_BUF16, > + ACPI_DMT_BUF18, > ACPI_DMT_BUF128, > ACPI_DMT_SIG, > ACPI_DMT_STRING, > @@ -277,6 +278,8 @@ typedef enum > ACPI_DMT_LPIT, > ACPI_DMT_MADT, > ACPI_DMT_NFIT, > + ACPI_DMT_NHLT1, > + ACPI_DMT_NHLT1a, > ACPI_DMT_PCCT, > ACPI_DMT_PHAT, > ACPI_DMT_PMTT, > @@ -544,7 +547,21 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit5[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6a[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit7[]; > -extern ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt0[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt1[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt2[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt3[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt3a[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt4[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5a[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5b[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5c[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt6[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt7[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt7a[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt8[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoPhatHdr[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoPhat0[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoPhat0a[]; > @@ -565,6 +582,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct3[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct4[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct5[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt0[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0a[]; > @@ -609,6 +627,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat4[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat5[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat6[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoStao[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoStaoStr[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoSvkl[]; > @@ -791,6 +810,10 @@ void > AcpiDmDumpNfit ( > ACPI_TABLE_HEADER *Table); > > +void > +AcpiDmDumpNhlt ( > + ACPI_TABLE_HEADER *Table); > + > void > AcpiDmDumpPcct ( > ACPI_TABLE_HEADER *Table); > diff --git a/src/acpica/source/include/acglobal.h b/src/acpica/source/include/acglobal.h > index c2107df0..35426865 100644 > --- a/src/acpica/source/include/acglobal.h > +++ b/src/acpica/source/include/acglobal.h > @@ -365,6 +365,8 @@ ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_LastListHead, NULL); > extern ACPI_BIT_REGISTER_INFO AcpiGbl_BitRegisterInfo[ACPI_NUM_BITREG]; > ACPI_GLOBAL (UINT8, AcpiGbl_SleepTypeA); > ACPI_GLOBAL (UINT8, AcpiGbl_SleepTypeB); > +ACPI_GLOBAL (UINT8, AcpiGbl_SleepTypeAS0); > +ACPI_GLOBAL (UINT8, AcpiGbl_SleepTypeBS0); > > > /***************************************************************************** > diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h > index 7610f2e3..7f4b31ee 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 0x20210730 > +#define ACPI_CA_VERSION 0x20210930 > > #include "acconfig.h" > #include "actypes.h" > diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h > index f2a1a48c..8a9ff736 100644 > --- a/src/acpica/source/include/actbinfo.h > +++ b/src/acpica/source/include/actbinfo.h > @@ -180,6 +180,7 @@ > #define ACPI_MPST_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MPST,f) > #define ACPI_MSCT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MSCT,f) > #define ACPI_NFIT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_NFIT,f) > +#define ACPI_NHLT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_NHLT,f) > #define ACPI_PCCT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_PCCT,f) > #define ACPI_PDTT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_PDTT,f) > #define ACPI_PMTT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_PMTT,f) > @@ -328,6 +329,19 @@ > #define ACPI_NFIT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_DATA_REGION,f) > #define ACPI_NFIT6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_FLUSH_ADDRESS,f) > #define ACPI_NFIT7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_CAPABILITIES,f) > +#define ACPI_NHLT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_ENDPOINT,f) > +#define ACPI_NHLT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG,f) > +#define ACPI_NHLT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_WAVE_EXTENSIBLE,f) > +#define ACPI_NHLT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_FORMAT_CONFIG,f) > +#define ACPI_NHLT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_FORMATS_CONFIG,f) > +#define ACPI_NHLT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG,f) > +#define ACPI_NHLT5A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A,f) > +#define ACPI_NHLT5B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B,f) > +#define ACPI_NHLT5C_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_C,f) > +#define ACPI_NHLT6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_VENDOR_MIC_CONFIG,f) > +#define ACPI_NHLT7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_LINUX_SPECIFIC_COUNT,f) > +#define ACPI_NHLT7A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_LINUX_SPECIFIC_DATA,f) > +#define ACPI_NHLT8_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_TABLE_TERMINATOR,f) > #define ACPI_PCCT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_SUBSPACE,f) > #define ACPI_PCCT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED,f) > #define ACPI_PCCT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f) > diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h > index 58c1570c..0c80aae2 100644 > --- a/src/acpica/source/include/actbl2.h > +++ b/src/acpica/source/include/actbl2.h > @@ -179,6 +179,7 @@ > #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ > #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ > #define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ > +#define ACPI_SIG_NHLT "NHLT" /* Non HD Audio Link Table */ > #define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ > #define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ > #define ACPI_SIG_PHAT "PHAT" /* Platform Health Assessment Table */ > @@ -190,7 +191,6 @@ > #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ > #define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ > #define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ > -#define ACPI_SIG_NHLT "NHLT" /* Non-HDAudio Link Table */ > #define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */ > > > @@ -1271,6 +1271,7 @@ typedef struct acpi_madt_multiproc_wakeup_mailbox > /* MADT Local APIC flags */ > > #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ > +#define ACPI_MADT_ONLINE_CAPABLE (2) /* 01: System HW supports enabling processor at runtime */ > > /* MADT MPS INTI flags (IntiFlags) */ > > @@ -1777,6 +1778,292 @@ typedef struct nfit_device_handle > (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) > > > +/******************************************************************************* > + * > + * NHLT - Non HD Audio Link Table > + * > + * Conforms to: Intel Smart Sound Technology NHLT Specification > + * Version 0.8.1, January 2020. > + * > + ******************************************************************************/ > + > +/* Main table */ > + > +typedef struct acpi_table_nhlt > +{ > + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > + UINT8 EndpointCount; > + > +} ACPI_TABLE_NHLT; > + > +typedef struct acpi_nhlt_endpoint > +{ > + UINT32 DescriptorLength; > + UINT8 LinkType; > + UINT8 InstanceId; > + UINT16 VendorId; > + UINT16 DeviceId; > + UINT16 RevisionId; > + UINT32 SubsystemId; > + UINT8 DeviceType; > + UINT8 Direction; > + UINT8 VirtualBusId; > + > +} ACPI_NHLT_ENDPOINT; > + > +/* Types for LinkType field above */ > + > +#define ACPI_NHLT_RESERVED_HD_AUDIO 0 > +#define ACPI_NHLT_RESERVED_DSP 1 > +#define ACPI_NHLT_PDM 2 > +#define ACPI_NHLT_SSP 3 > +#define ACPI_NHLT_RESERVED_SLIMBUS 4 > +#define ACPI_NHLT_RESERVED_SOUNDWIRE 5 > +#define ACPI_NHLT_TYPE_RESERVED 6 /* 6 and above are reserved */ > + > +/* All other values above are reserved */ > + > +/* Values for DeviceId field above */ > + > +#define ACPI_NHLT_PDM_DMIC 0xAE20 > +#define ACPI_NHLT_BT_SIDEBAND 0xAE30 > +#define ACPI_NHLT_I2S_TDM_CODECS 0xAE23 > + > +/* Values for DeviceType field above */ > + > +/* SSP Link */ > + > +#define ACPI_NHLT_LINK_BT_SIDEBAND 0 > +#define ACPI_NHLT_LINK_FM 1 > +#define ACPI_NHLT_LINK_MODEM 2 > +/* 3 is reserved */ > +#define ACPI_NHLT_LINK_SSP_ANALOG_CODEC 4 > + > +/* PDM Link */ > + > +#define ACPI_NHLT_PDM_ON_CAVS_1P8 0 > +#define ACPI_NHLT_PDM_ON_CAVS_1P5 1 > + > +/* Values for Direction field above */ > + > +#define ACPI_NHLT_DIR_RENDER 0 > +#define ACPI_NHLT_DIR_CAPTURE 1 > +#define ACPI_NHLT_DIR_RENDER_LOOPBACK 2 > +#define ACPI_NHLT_DIR_RENDER_FEEDBACK 3 > +#define ACPI_NHLT_DIR_RESERVED 4 /* 4 and above are reserved */ > + > +typedef struct acpi_nhlt_device_specific_config > +{ > + UINT32 CapabilitiesSize; > + UINT8 VirtualSlot; > + UINT8 ConfigType; > + > +} ACPI_NHLT_DEVICE_SPECIFIC_CONFIG; > + > +typedef struct acpi_nhlt_device_specific_config_a > +{ > + UINT32 CapabilitiesSize; > + UINT8 VirtualSlot; > + UINT8 ConfigType; > + UINT8 ArrayType; > + > +} ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A; > + > +/* Values for Config Type above */ > + > +#define ACPI_NHLT_TYPE_MIC_ARRAY 0x01 > +#define ACPI_NHLT_TYPE_GENERIC 0x00 > + > +/* Mask for Extension field of ArrayType */ > + > +#define ACPI_NHLT_ARRAY_TYPE_MASK 0x10 > + > +typedef struct acpi_nhlt_device_specific_config_b > +{ > + UINT32 CapabilitiesSize; > + > +} ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B; > + > +typedef struct acpi_nhlt_device_specific_config_c > +{ > + UINT32 CapabilitiesSize; > + UINT8 VirtualSlot; > + > +} ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_C; > + > +typedef struct acpi_nhlt_wave_extensible > +{ > + UINT16 FormatTag; > + UINT16 ChannelCount; > + UINT32 SamplesPerSec; > + UINT32 AvgBytesPerSec; > + UINT16 BlockAlign; > + UINT16 BitsPerSample; > + UINT16 ExtraFormatSize; > + UINT16 ValidBitsPerSample; > + UINT32 ChannelMask; > + UINT8 SubFormatGuid[16]; > + > +} ACPI_NHLT_WAVE_EXTENSIBLE; > + > +/* Values for ChannelMask above */ > + > +#define ACPI_NHLT_SPKR_FRONT_LEFT 0x1 > +#define ACPI_NHLT_SPKR_FRONT_RIGHT 0x2 > +#define ACPI_NHLT_SPKR_FRONT_CENTER 0x4 > +#define ACPI_NHLT_SPKR_LOW_FREQ 0x8 > +#define ACPI_NHLT_SPKR_BACK_LEFT 0x10 > +#define ACPI_NHLT_SPKR_BACK_RIGHT 0x20 > +#define ACPI_NHLT_SPKR_FRONT_LEFT_OF_CENTER 0x40 > +#define ACPI_NHLT_SPKR_FRONT_RIGHT_OF_CENTER 0x80 > +#define ACPI_NHLT_SPKR_BACK_CENTER 0x100 > +#define ACPI_NHLT_SPKR_SIDE_LEFT 0x200 > +#define ACPI_NHLT_SPKR_SIDE_RIGHT 0x400 > +#define ACPI_NHLT_SPKR_TOP_CENTER 0x800 > +#define ACPI_NHLT_SPKR_TOP_FRONT_LEFT 0x1000 > +#define ACPI_NHLT_SPKR_TOP_FRONT_CENTER 0x2000 > +#define ACPI_NHLT_SPKR_TOP_FRONT_RIGHT 0x4000 > +#define ACPI_NHLT_SPKR_TOP_BACK_LEFT 0x8000 > +#define ACPI_NHLT_SPKR_TOP_BACK_CENTER 0x10000 > +#define ACPI_NHLT_SPKR_TOP_BACK_RIGHT 0x20000 > + > +typedef struct acpi_nhlt_format_config > +{ > + ACPI_NHLT_WAVE_EXTENSIBLE Format; > + UINT32 CapabilitySize; > + UINT8 Capabilities[]; > + > +} ACPI_NHLT_FORMAT_CONFIG; > + > +typedef struct acpi_nhlt_formats_config > +{ > + UINT8 FormatsCount; > + > +} ACPI_NHLT_FORMATS_CONFIG; > + > +typedef struct acpi_nhlt_device_specific_hdr > +{ > + UINT8 VirtualSlot; > + UINT8 ConfigType; > + > +} ACPI_NHLT_DEVICE_SPECIFIC_HDR; > + > +/* Types for ConfigType above */ > + > +#define ACPI_NHLT_GENERIC 0 > +#define ACPI_NHLT_MIC 1 > +#define ACPI_NHLT_RENDER 3 > + > +typedef struct acpi_nhlt_mic_device_specific_config > +{ > + ACPI_NHLT_DEVICE_SPECIFIC_HDR DeviceConfig; > + UINT8 ArrayTypeExt; > + > +} ACPI_NHLT_MIC_DEVICE_SPECIFIC_CONFIG; > + > +/* Values for ArrayTypeExt above */ > + > +#define SMALL_LINEAR_2ELEMENT 0x0A > +#define BIG_LINEAR_2ELEMENT 0x0B > +#define FIRST_GEOMETRY_LINEAR_4ELEMENT 0x0C > +#define PLANAR_LSHAPED_4ELEMENT 0x0D > +#define SECOND_GEOMETRY_LINEAR_4ELEMENT 0x0E > +#define VENDOR_DEFINED 0x0F > +#define ARRAY_TYPE_MASK 0x0F > +#define ARRAY_TYPE_EXT_MASK 0x10 > + > +#define NO_EXTENSION 0x0 > +#define MIC_SNR_SENSITIVITY_EXT 0x1 > + > + > +typedef struct acpi_nhlt_vendor_mic_config > +{ > + UINT8 Type; > + UINT8 Panel; > + UINT16 SpeakerPositionDistance; // mm > + UINT16 HorizontalOffset; // mm > + UINT16 VerticalOffset; // mm > + UINT8 FrequencyLowBand; // 5*Hz > + UINT8 FrequencyHighBand; // 500*Hz > + UINT16 DirectionAngle; // -180 - + 180 > + UINT16 ElevationAngle; // -180 - + 180 > + UINT16 WorkVerticalAngleBegin; // -180 - + 180 with 2 deg step > + UINT16 WorkVerticalAngleEnd; // -180 - + 180 with 2 deg step > + UINT16 WorkHorizontalAngleBegin; // -180 - + 180 with 2 deg step > + UINT16 WorkHorizontalAngleEnd; // -180 - + 180 with 2 deg step > + > +} ACPI_NHLT_VENDOR_MIC_CONFIG; > + > +/* Values for Type field above */ > + > +#define MIC_OMNIDIRECTIONAL 0 > +#define MIC_SUBCARDIOID 1 > +#define MIC_CARDIOID 2 > +#define MIC_SUPER_CARDIOID 3 > +#define MIC_HYPER_CARDIOID 4 > +#define MIC_8_SHAPED 5 > +#define MIC_VENDOR_DEFINED 7 > + > +/* Values for Panel field above */ > + > +#define MIC_TOP 0 > +#define MIC_BOTTOM 1 > +#define MIC_LEFT 2 > +#define MIC_RIGHT 3 > +#define MIC_FRONT 4 > +#define MIC_REAR 5 > + > +typedef struct acpi_nhlt_vendor_mic_device_specific_config > +{ > + ACPI_NHLT_MIC_DEVICE_SPECIFIC_CONFIG MicArrayDeviceConfig; > + UINT8 NumberOfMicrophones; > + ACPI_NHLT_VENDOR_MIC_CONFIG MicConfig[]; // Indexed by NumberOfMicrophones > + > +} ACPI_NHLT_VENDOR_MIC_DEVICE_SPECIFIC_CONFIG; > + > +/* Microphone SNR and Sensitivity extension */ > + > +typedef struct acpi_nhlt_mic_snr_sensitivity_extension > +{ > + UINT32 SNR; > + UINT32 Sensitivity; > + > +} ACPI_NHLT_MIC_SNR_SENSITIVITY_EXTENSION; > + > +typedef struct acpi_nhlt_render_feedback_device_specific_config > +{ > + ACPI_NHLT_DEVICE_SPECIFIC_CONFIG DeviceConfig; > + UINT8 FeedbackVirtualSlot; // Render slot in case of capture > + UINT16 FeedbackChannels; // Informative only > + UINT16 FeedbackValidBitsPerSample; > + > +} ACPI_NHLT_RENDER_FEEDBACK_DEVICE_SPECIFIC_CONFIG; > + > +/* Linux-specific structures */ > + > +typedef struct acpi_nhlt_linux_specific_count > +{ > + UINT8 StructureCount; > + > +} ACPI_NHLT_LINUX_SPECIFIC_COUNT; > + > +typedef struct acpi_nhlt_linux_specific_data > +{ > + UINT8 DeviceId[16]; > + UINT8 DeviceInstanceId; > + UINT8 DevicePortId; > + UINT8 Filler[18]; > + > +} ACPI_NHLT_LINUX_SPECIFIC_DATA; > + > +typedef struct acpi_nhlt_table_terminator > +{ > + UINT32 TerminatorValue; > + UINT32 TerminatorSignature; > + > +} ACPI_NHLT_TABLE_TERMINATOR; > + > + > /******************************************************************************* > * > * PCCT - Platform Communications Channel Table (ACPI 5.0) > diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h > index d0f7025f..40cf7130 100644 > --- a/src/acpica/source/include/actbl3.h > +++ b/src/acpica/source/include/actbl3.h > @@ -352,7 +352,8 @@ enum AcpiSratType > ACPI_SRAT_TYPE_GICC_AFFINITY = 3, > ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ > ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5, /* ACPI 6.3 */ > - ACPI_SRAT_TYPE_RESERVED = 6 /* 5 and greater are reserved */ > + ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY = 6, /* ACPI 6.4 */ > + ACPI_SRAT_TYPE_RESERVED = 7 /* 7 and greater are reserved */ > }; > > /* > @@ -447,8 +448,11 @@ typedef struct acpi_srat_gic_its_affinity > > } ACPI_SRAT_GIC_ITS_AFFINITY; > > - > -/* 5: Generic Initiator Affinity Structure (ACPI 6.3) */ > +/* > + * Common structure for SRAT subtable types: > + * 5: ACPI_SRAT_TYPE_GENERIC_AFFINITY > + * 6: ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY > + */ > > typedef struct acpi_srat_generic_affinity > { > diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h > index e98e636a..5138342c 100644 > --- a/src/acpica/source/include/actypes.h > +++ b/src/acpica/source/include/actypes.h > @@ -1531,6 +1531,7 @@ typedef enum > #define ACPI_OSI_WIN_10_RS4 0x12 > #define ACPI_OSI_WIN_10_RS5 0x13 > #define ACPI_OSI_WIN_10_19H1 0x14 > +#define ACPI_OSI_WIN_10_20H1 0x15 > > > /* Definitions of getopt */ > Acked-by: Alex Hung <alex.hung@canonical.com>
diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c index 1fa9ba16..dff1c613 100644 --- a/src/acpica/source/common/dmtable.c +++ b/src/acpica/source/common/dmtable.c @@ -417,6 +417,26 @@ static const char *AcpiDmNfitSubnames[] = "Unknown Subtable Type" /* Reserved */ }; +static const char *AcpiDmNhltLinkTypeNames[] = +{ + "Reserved for HD-Audio", /* ACPI_NHLT_RESERVED_HD_AUDIO */ + "Reserved for DSP", /* ACPI_NHLT_RESERVED_DSP */ + "Type PDM", /* ACPI_NHLT_PDM */ + "Type SSP", /* ACPI_NHLT_SSP */ + "Reserved for SlimBus", /* ACPI_NHLT_RESERVED_SLIMBUS */ + "Reserved for SoundWire", /* ACPI_NHLT_RESERVED_SOUNDWIRE */ + "Unknown Link Type" /* Reserved */ +}; + +static const char *AcpiDmNhltDirectionNames[] = +{ + "Render", /* ACPI_NHLT_DIR_RENDER */ + "Capture", /* ACPI_NHLT_DIR_CAPTURE */ + "Render with Loopback", /* ACPI_NHLT_DIR_RENDER_LOOPBACK */ + "Feedback for Render", /* ACPI_NHLT_DIR_RENDER_FEEDBACK */ + "Unknown Direction" /* Reserved */ +}; + static const char *AcpiDmPcctSubnames[] = { "Generic Communications Subspace", /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */ @@ -473,6 +493,7 @@ static const char *AcpiDmSratSubnames[] = "GICC Affinity", "GIC ITS Affinity", /* Acpi 6.2 */ "Generic Initiator Affinity", /* Acpi 6.3 */ + "Generic Port Affinity", /* Acpi 6.4 */ "Unknown Subtable Type" /* Reserved */ }; @@ -614,6 +635,7 @@ const ACPI_DMTABLE_DATA AcpiDmTableData[] = {ACPI_SIG_MSCT, NULL, AcpiDmDumpMsct, DtCompileMsct, TemplateMsct}, {ACPI_SIG_MSDM, NULL, AcpiDmDumpSlic, DtCompileSlic, TemplateMsdm}, {ACPI_SIG_NFIT, AcpiDmTableInfoNfit, AcpiDmDumpNfit, DtCompileNfit, TemplateNfit}, + {ACPI_SIG_NHLT, AcpiDmTableInfoNhlt, AcpiDmDumpNhlt, NULL, NULL}, {ACPI_SIG_PCCT, AcpiDmTableInfoPcct, AcpiDmDumpPcct, DtCompilePcct, TemplatePcct}, {ACPI_SIG_PDTT, AcpiDmTableInfoPdtt, AcpiDmDumpPdtt, DtCompilePdtt, TemplatePdtt}, {ACPI_SIG_PHAT, NULL, AcpiDmDumpPhat, DtCompilePhat, TemplatePhat}, @@ -1050,6 +1072,8 @@ AcpiDmDumpTable ( case ACPI_DMT_IVRS_DE: case ACPI_DMT_GTDT: case ACPI_DMT_MADT: + case ACPI_DMT_NHLT1: + case ACPI_DMT_NHLT1a: case ACPI_DMT_PCCT: case ACPI_DMT_PMTT: case ACPI_DMT_PPTT: @@ -1138,6 +1162,11 @@ AcpiDmDumpTable ( ByteLength = 16; break; + case ACPI_DMT_BUF18: + + ByteLength = 18; + break; + case ACPI_DMT_BUF128: ByteLength = 128; @@ -1343,6 +1372,7 @@ AcpiDmDumpTable ( case ACPI_DMT_BUF10: case ACPI_DMT_BUF12: case ACPI_DMT_BUF16: + case ACPI_DMT_BUF18: case ACPI_DMT_BUF128: /* * Buffer: Size depends on the opcode and was set above. @@ -1790,6 +1820,34 @@ AcpiDmDumpTable ( AcpiDmNfitSubnames[Temp16]); break; + case ACPI_DMT_NHLT1: + + /* NHLT link types */ + + Temp8 = *Target; + if (Temp8 > ACPI_NHLT_TYPE_RESERVED) + { + Temp8 = ACPI_NHLT_TYPE_RESERVED; + } + + AcpiOsPrintf (UINT8_FORMAT, *Target, + AcpiDmNhltLinkTypeNames[Temp8]); + break; + + case ACPI_DMT_NHLT1a: + + /* NHLT direction */ + + Temp8 = *Target; + if (Temp8 > ACPI_NHLT_DIR_RESERVED) + { + Temp8 = ACPI_NHLT_DIR_RESERVED; + } + + AcpiOsPrintf (UINT8_FORMAT, *Target, + AcpiDmNhltDirectionNames[Temp8]); + break; + case ACPI_DMT_PCCT: /* PCCT subtable types */ diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c index 1b3cdf76..118b96ee 100644 --- a/src/acpica/source/common/dmtbdump2.c +++ b/src/acpica/source/common/dmtbdump2.c @@ -1467,6 +1467,306 @@ NextSubtable: } +/******************************************************************************* + * + * FUNCTION: AcpiDmDumpNhlt + * + * PARAMETERS: Table - A NHLT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of an NHLT. + * + ******************************************************************************/ + +void +AcpiDmDumpNhlt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + UINT32 Offset; + UINT32 TableLength = Table->Length; + UINT32 EndpointCount; + UINT8 FormatsCount; + ACPI_NHLT_ENDPOINT *Subtable; + ACPI_NHLT_FORMAT_CONFIG *FormatSubtable; + ACPI_TABLE_NHLT *InfoTable; + UINT32 CapabilitiesSize; + UINT32 i; + UINT32 j; + UINT32 k; + UINT32 EndpointEndOffset; + UINT8 ConfigType = 0; + UINT8 ArrayType; + ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A *DevSpecific; + ACPI_NHLT_FORMATS_CONFIG *FormatsConfig; + ACPI_NHLT_LINUX_SPECIFIC_COUNT *Count; + ACPI_NHLT_LINUX_SPECIFIC_DATA *LinuxData; + + + /* Main table */ + + AcpiOsPrintf ("/* Main table */\n"); + + Status = AcpiDmDumpTable (TableLength, 0, Table, 0, AcpiDmTableInfoNhlt); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Get the Endpoint Descriptor Count */ + + InfoTable = ACPI_ADD_PTR (ACPI_TABLE_NHLT, Table, 0); + EndpointCount = InfoTable->EndpointCount; + + /* Subtables */ + + Offset = sizeof (ACPI_TABLE_NHLT); + + while (Offset < TableLength) + { + /* A variable number of Endpoint Descriptors - process each */ + + for (i = 0; i < EndpointCount; i++) + { + /* Do the Endpoint Descriptor table */ + + Subtable = ACPI_ADD_PTR (ACPI_NHLT_ENDPOINT, Table, Offset); + if (Subtable->DescriptorLength > TableLength) + { + Offset += 1; + AcpiOsPrintf ("\n/* Endpoint Descriptor Length larger than" + " table size: %X, table %X, adjusting table offset (+1) */\n", + Subtable->DescriptorLength, TableLength); + + Subtable = ACPI_ADD_PTR (ACPI_NHLT_ENDPOINT, Table, Offset); + } + + AcpiOsPrintf ("\n/* Endpoint Descriptor #%u */\n", i+1); + Status = AcpiDmDumpTable (TableLength, Offset, Subtable, + Subtable->DescriptorLength, AcpiDmTableInfoNhlt0); + if (ACPI_FAILURE (Status)) + { + return; + } + EndpointEndOffset = Subtable->DescriptorLength + Offset; + + /* Check for endpoint descriptor beyond end-of-table */ + + if (Subtable->DescriptorLength > TableLength) + { + AcpiOsPrintf ("\n/* Endpoint Descriptor Length larger than table size: %X, table %X */\n", + Subtable->DescriptorLength, TableLength); + } + Offset += sizeof (ACPI_NHLT_ENDPOINT); + Subtable = ACPI_ADD_PTR (ACPI_NHLT_ENDPOINT, Table, Offset); + + /* Do the Device Specific table */ + + AcpiOsPrintf ("\n/* Endpoint Device_Specific_Config table */\n"); + DevSpecific = ACPI_CAST_PTR (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A, Subtable); + CapabilitiesSize = DevSpecific->CapabilitiesSize; + + /* Different subtables based upon capabilities_size */ + + switch (CapabilitiesSize) + { + case 0: + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific, + sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B), AcpiDmTableInfoNhlt5b); + if (ACPI_FAILURE (Status)) + { + return; + } + Offset += sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B); + break; + + case 1: + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific, + sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_C), AcpiDmTableInfoNhlt5c); + if (ACPI_FAILURE (Status)) + { + return; + } + Offset += sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_C); + break; + + case 2: + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific, + sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG), AcpiDmTableInfoNhlt5); + if (ACPI_FAILURE (Status)) + { + return; + } + Offset += sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG); + break; + + case 3: + ConfigType = DevSpecific->ConfigType; + ArrayType = DevSpecific->ArrayType; + + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific, + sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A), AcpiDmTableInfoNhlt5a); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Capabilities Size == 3 */ + Offset += sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A); + + /* Check for a vendor-defined mic array */ + + if ((ConfigType == ACPI_NHLT_TYPE_MIC_ARRAY) && ((ArrayType & ARRAY_TYPE_MASK) == VENDOR_DEFINED)) + { + /* Vendor-defined microphone array */ + + AcpiOsPrintf ("\n/* Vendor-defined microphone array */\n"); + + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific, + sizeof (ACPI_NHLT_VENDOR_MIC_CONFIG), AcpiDmTableInfoNhlt6); + if (ACPI_FAILURE (Status)) + { + return; + } + Offset += sizeof (ACPI_NHLT_VENDOR_MIC_CONFIG); + } + break; + + default: + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific, + sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B), AcpiDmTableInfoNhlt5b); + if (ACPI_FAILURE (Status)) + { + return; + } + + Offset += sizeof (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B); + Status = AcpiDmDumpTable (TableLength, Offset, DevSpecific, + CapabilitiesSize, AcpiDmTableInfoNhlt3a); + if (ACPI_FAILURE (Status)) + { + return; + } + Offset += CapabilitiesSize; + break; + } + + /* Do the Formats_Config table */ + + FormatsConfig = ACPI_ADD_PTR (ACPI_NHLT_FORMATS_CONFIG, Table, Offset); + FormatsCount = FormatsConfig->FormatsCount; + + AcpiOsPrintf ("\n/* Formats_Config table */\n"); + + Status = AcpiDmDumpTable (TableLength, Offset, FormatsConfig, + sizeof (ACPI_NHLT_FORMATS_CONFIG), AcpiDmTableInfoNhlt4); + if (ACPI_FAILURE (Status)) + { + return; + } + Offset += sizeof (ACPI_NHLT_FORMATS_CONFIG); + + /* A variable number of Format_Config Descriptors - process each */ + + for (j = 0; j < FormatsCount; j++) + { + FormatSubtable = ACPI_ADD_PTR (ACPI_NHLT_FORMAT_CONFIG, Table, Offset); + CapabilitiesSize = FormatSubtable->CapabilitySize; + + /* Do the Wave_extensible struct */ + + AcpiOsPrintf ("\n/* Wave_Format_Extensible table #%u */\n", j+1); + Status = AcpiDmDumpTable (TableLength, Offset, FormatSubtable, + sizeof (ACPI_NHLT_FORMAT_CONFIG), AcpiDmTableInfoNhlt3); + if (ACPI_FAILURE (Status)) + { + return; + } + Offset += sizeof (ACPI_NHLT_WAVE_EXTENSIBLE); + + /* Do the Capabilities array */ + + Offset += sizeof (UINT32); + AcpiOsPrintf ("\n/* Specific_Config table #%u */\n", j+1); + FormatSubtable = ACPI_ADD_PTR (ACPI_NHLT_FORMAT_CONFIG, Table, Offset); + Status = AcpiDmDumpTable (TableLength, Offset, FormatSubtable, + CapabilitiesSize, AcpiDmTableInfoNhlt3a); + if (ACPI_FAILURE (Status)) + { + return; + } + Offset += CapabilitiesSize; + } + + /* + * If we are not done with the Endpoint(s) yet, then there must be + * some Linux-specific structure(s) yet to be processed. + */ + if (Offset < EndpointEndOffset) + { + AcpiOsPrintf ("\n"); + Count = ACPI_ADD_PTR (ACPI_NHLT_LINUX_SPECIFIC_COUNT, Table, Offset); + Status = AcpiDmDumpTable (TableLength, Offset, Count, + sizeof (ACPI_NHLT_LINUX_SPECIFIC_COUNT), AcpiDmTableInfoNhlt7); + if (ACPI_FAILURE (Status)) + { + return; + } + Offset += sizeof (ACPI_NHLT_LINUX_SPECIFIC_COUNT); + + /* Variable number of linux-specific structures */ + + for (k = 0; k < Count->StructureCount; k++) + { + LinuxData = ACPI_ADD_PTR (ACPI_NHLT_LINUX_SPECIFIC_DATA, Table, Offset); + + AcpiOsPrintf ("\n/* Linux-specific structure #%u */\n", k+1); + + Status = AcpiDmDumpTable (TableLength, Offset, LinuxData, + sizeof (ACPI_NHLT_LINUX_SPECIFIC_DATA), AcpiDmTableInfoNhlt7a); + if (ACPI_FAILURE (Status)) + { + return; + } + + Offset += sizeof (ACPI_NHLT_LINUX_SPECIFIC_DATA); + } + + /* Should be at the end of the Endpoint structure. Skip any extra bytes */ + + if (Offset < EndpointEndOffset) + { + AcpiOsPrintf ("\n/* Endpoint descriptor ended before endpoint size was reached. " + "skipped %X input bytes, current offset: %X, Endpoint End Offset: %X */\n", + EndpointEndOffset - Offset, Offset, EndpointEndOffset); + AcpiUtDumpBuffer (((UINT8 *)Table)+Offset, + EndpointEndOffset - Offset, DB_BYTE_DISPLAY, Offset); + Offset = EndpointEndOffset; + } + } + } + + /* Emit the table terminator (if present) */ + + if (Offset == TableLength - sizeof (ACPI_NHLT_TABLE_TERMINATOR)) + { + LinuxData = ACPI_ADD_PTR (ACPI_NHLT_LINUX_SPECIFIC_DATA, Table, Offset); + AcpiOsPrintf ("\n/* Table terminator structure */\n"); + + Status = AcpiDmDumpTable (TableLength, Offset, LinuxData, + sizeof (ACPI_NHLT_TABLE_TERMINATOR), AcpiDmTableInfoNhlt8); + if (ACPI_FAILURE (Status)) + { + return; + } + } + + return; + } +} + + /******************************************************************************* * * FUNCTION: AcpiDmDumpPcct diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c index 981a51e0..63b6d2d5 100644 --- a/src/acpica/source/common/dmtbdump3.c +++ b/src/acpica/source/common/dmtbdump3.c @@ -338,6 +338,11 @@ AcpiDmDumpSrat ( InfoTable = AcpiDmTableInfoSrat5; break; + case ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY: + + InfoTable = AcpiDmTableInfoSrat6; + break; + default: AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n", Subtable->Type); diff --git a/src/acpica/source/common/dmtbinfo2.c b/src/acpica/source/common/dmtbinfo2.c index 00cf2e4d..4cbe112e 100644 --- a/src/acpica/source/common/dmtbinfo2.c +++ b/src/acpica/source/common/dmtbinfo2.c @@ -1194,6 +1194,189 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNfit7[] = }; +/******************************************************************************* + * + * NHLT - Non HD Audio Link Table. Conforms to Intel Smart Sound Technology + * NHLT Specification, January 2020 Revision 0.8.1 + * + ******************************************************************************/ + +/* Main table */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt[] = +{ + {ACPI_DMT_UINT8, ACPI_NHLT_OFFSET (EndpointCount), "Endpoint Count", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Endpoint config */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt0[] = +{ + {ACPI_DMT_UINT32, ACPI_NHLT0_OFFSET (DescriptorLength), "Descriptor Length", DT_LENGTH}, + {ACPI_DMT_NHLT1, ACPI_NHLT0_OFFSET (LinkType), "Link Type", 0}, + {ACPI_DMT_UINT8, ACPI_NHLT0_OFFSET (InstanceId), "Instance Id", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT0_OFFSET (VendorId), "Vendor Id", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT0_OFFSET (DeviceId), "Device Id", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT0_OFFSET (RevisionId), "Revision Id", 0}, + {ACPI_DMT_UINT32, ACPI_NHLT0_OFFSET (SubsystemId), "Subsystem Id", 0}, + {ACPI_DMT_UINT8, ACPI_NHLT0_OFFSET (DeviceType), "Device Type", 0}, + {ACPI_DMT_NHLT1a, ACPI_NHLT0_OFFSET (Direction), "Direction", 0}, + {ACPI_DMT_UINT8, ACPI_NHLT0_OFFSET (VirtualBusId), "Virtual Bus Id", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Device_Specific config */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt1[] = +{ + {ACPI_DMT_UINT32, ACPI_NHLT1_OFFSET (CapabilitiesSize), "Capabilities Size", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_NHLT1_OFFSET (VirtualSlot), "Virtual Slot", 0}, + {ACPI_DMT_UINT8, ACPI_NHLT1_OFFSET (ConfigType), "Config Type", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Wave Format Extensible */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt2[] = +{ + {ACPI_DMT_UINT16, ACPI_NHLT2_OFFSET (FormatTag), "Format Tag", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT2_OFFSET (ChannelCount), "Channel Count", 0}, + {ACPI_DMT_UINT32, ACPI_NHLT2_OFFSET (SamplesPerSec), "Samples Per Second", 0}, + {ACPI_DMT_UINT32, ACPI_NHLT2_OFFSET (AvgBytesPerSec), "Average Bytes Per Second", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT2_OFFSET (BlockAlign), "Block Alignment", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT2_OFFSET (BitsPerSample), "Bits Per Sample", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT2_OFFSET (ExtraFormatSize), "Extra Format Size", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT2_OFFSET (ValidBitsPerSample), "Valid Bits Per Sample", 0}, + {ACPI_DMT_UINT32, ACPI_NHLT2_OFFSET (ChannelMask), "Channel Mask", 0}, + {ACPI_DMT_UUID, ACPI_NHLT2_OFFSET (SubFormatGuid), "SubFormat GUID", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Format Config */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt3[] = +{ + {ACPI_DMT_UINT16, ACPI_NHLT3_OFFSET (Format.FormatTag), "Format Tag", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT3_OFFSET (Format.ChannelCount), "Channel Count", 0}, + {ACPI_DMT_UINT32, ACPI_NHLT3_OFFSET (Format.SamplesPerSec), "Samples Per Second", 0}, + {ACPI_DMT_UINT32, ACPI_NHLT3_OFFSET (Format.AvgBytesPerSec), "Average Bytes Per Second", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT3_OFFSET (Format.BlockAlign), "Block Alignment", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT3_OFFSET (Format.BitsPerSample), "Bits Per Sample", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT3_OFFSET (Format.ExtraFormatSize), "Extra Format Size", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT3_OFFSET (Format.ValidBitsPerSample), "Valid Bits Per Sample", 0}, + {ACPI_DMT_UINT32, ACPI_NHLT3_OFFSET (Format.ChannelMask), "Channel Mask", 0}, + {ACPI_DMT_UUID, ACPI_NHLT3_OFFSET (Format.SubFormatGuid), "SubFormat GUID", 0}, + {ACPI_DMT_UINT32, ACPI_NHLT3_OFFSET (CapabilitySize), "Capabilities Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* + * We treat the binary Capabilities field as its own subtable (to make + * ACPI_DMT_RAW_BUFFER work properly). + */ +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt3a[] = +{ + {ACPI_DMT_RAW_BUFFER, 0, "Capabilities", 0}, + ACPI_DMT_TERMINATOR +}; + + +/* Formats Config */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt4[] = +{ + {ACPI_DMT_UINT8, ACPI_NHLT4_OFFSET (FormatsCount), "Formats Count", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Specific Config, CapabilitiesSize == 2 */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5[] = +{ + {ACPI_DMT_UINT32, ACPI_NHLT5_OFFSET (CapabilitiesSize), "Capabilities Size", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_NHLT5_OFFSET (VirtualSlot), "Virtual Slot", 0}, + {ACPI_DMT_UINT8, ACPI_NHLT5_OFFSET (ConfigType), "Config Type", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Specific Config, CapabilitiesSize == 3 */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5a[] = +{ + {ACPI_DMT_UINT32, ACPI_NHLT5A_OFFSET (CapabilitiesSize), "Capabilities Size", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_NHLT5A_OFFSET (VirtualSlot), "Virtual Slot", 0}, + {ACPI_DMT_UINT8, ACPI_NHLT5A_OFFSET (ConfigType), "Config Type", 0}, + {ACPI_DMT_UINT8, ACPI_NHLT5A_OFFSET (ArrayType), "Array Type", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Specific Config, CapabilitiesSize == 0 */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5b[] = +{ + {ACPI_DMT_UINT32, ACPI_NHLT5B_OFFSET (CapabilitiesSize), "Capabilities Size", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* Specific Config, CapabilitiesSize == 1 */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5c[] = +{ + {ACPI_DMT_UINT32, ACPI_NHLT5C_OFFSET (CapabilitiesSize), "Capabilities Size", DT_LENGTH}, + {ACPI_DMT_UINT8, ACPI_NHLT5C_OFFSET (VirtualSlot), "Virtual Slot", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Microphone array Config */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt6[] = +{ + {ACPI_DMT_UINT8, ACPI_NHLT6_OFFSET (Type), "Type", 0}, + {ACPI_DMT_UINT8, ACPI_NHLT6_OFFSET (Panel), "Panel", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (SpeakerPositionDistance), "Speaker Position Distance", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (HorizontalOffset), "Horizontal Offset", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (VerticalOffset), "Vertical Offset", 0}, + {ACPI_DMT_UINT8, ACPI_NHLT6_OFFSET (FrequencyLowBand), "Frequency Low Band", 0}, + {ACPI_DMT_UINT8, ACPI_NHLT6_OFFSET (FrequencyHighBand), "Frequency High Band", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (DirectionAngle), "Direction Angle", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (ElevationAngle), "Elevation Angle", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (WorkVerticalAngleBegin), "Work Vertical Angle Begin", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (WorkVerticalAngleEnd), "Work Vertical Angle End", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (WorkHorizontalAngleBegin), "Work Horizontal Angle Begin", 0}, + {ACPI_DMT_UINT16, ACPI_NHLT6_OFFSET (WorkHorizontalAngleEnd), "Work Horizontal Angle End", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Number of Linux-specific structures */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt7[] = +{ + {ACPI_DMT_UINT8, ACPI_NHLT7_OFFSET (StructureCount), "Linux-specific struct count", 0}, + ACPI_DMT_TERMINATOR +}; + +/* The Linux-specific structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt7a[] = +{ + {ACPI_DMT_BUF16, ACPI_NHLT7A_OFFSET (DeviceId), "Device ID", 0}, + {ACPI_DMT_UINT8, ACPI_NHLT7A_OFFSET (DeviceInstanceId), "Device Instance ID", 0}, + {ACPI_DMT_UINT8, ACPI_NHLT7A_OFFSET (DevicePortId), "Device Port ID", 0}, + {ACPI_DMT_BUF18, ACPI_NHLT7A_OFFSET (Filler), "Specific Data", 0}, + ACPI_DMT_TERMINATOR +}; + +/* Table terminator (may or may not be present) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt8[] = +{ + {ACPI_DMT_UINT32, ACPI_NHLT8_OFFSET (TerminatorValue), "Terminator Value", 0}, + {ACPI_DMT_UINT32, ACPI_NHLT8_OFFSET (TerminatorSignature), "Terminator Signature", 0}, + ACPI_DMT_TERMINATOR +}; + + /******************************************************************************* * * PCCT - Platform Communications Channel Table (ACPI 5.0) diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c index e573676a..12e1be4c 100644 --- a/src/acpica/source/common/dmtbinfo3.c +++ b/src/acpica/source/common/dmtbinfo3.c @@ -368,21 +368,33 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat4[] = ACPI_DMT_TERMINATOR }; +/* Common SRAT structure for Generic Affinity Subtables */ + +#define ACPI_DM_SRAT_GENERIC_AFFINITY \ + {ACPI_DMT_UINT8, ACPI_SRAT5_OFFSET (Reserved), "Reserved1", 0}, \ + {ACPI_DMT_UINT8, ACPI_SRAT5_OFFSET (DeviceHandleType), "Device Handle Type", 0}, \ + {ACPI_DMT_UINT32, ACPI_SRAT5_OFFSET (ProximityDomain), "Proximity Domain", 0}, \ + {ACPI_DMT_BUF16, ACPI_SRAT5_OFFSET (DeviceHandle), "Device Handle", 0}, \ + {ACPI_DMT_UINT32, ACPI_SRAT5_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, \ + {ACPI_DMT_FLAG0, ACPI_SRAT5_FLAG_OFFSET (Flags,0), "Enabled", 0}, \ + {ACPI_DMT_FLAG1, ACPI_SRAT5_FLAG_OFFSET (Flags,0), "Architectural Transactions", 0}, \ + {ACPI_DMT_UINT32, ACPI_SRAT5_OFFSET (Reserved1), "Reserved2", 0} + /* 5: Generic Initiator Affinity Structure (ACPI 6.3) */ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat5[] = { - {ACPI_DMT_UINT8, ACPI_SRAT5_OFFSET (Reserved), "Reserved1", 0}, - {ACPI_DMT_UINT8, ACPI_SRAT5_OFFSET (DeviceHandleType), "Device Handle Type", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT5_OFFSET (ProximityDomain), "Proximity Domain", 0}, - {ACPI_DMT_BUF16, ACPI_SRAT5_OFFSET (DeviceHandle), "Device Handle", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT5_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_SRAT5_FLAG_OFFSET (Flags,0), "Enabled", 0}, - {ACPI_DMT_FLAG1, ACPI_SRAT5_FLAG_OFFSET (Flags,0), "Architectural Transactions", 0}, - {ACPI_DMT_UINT32, ACPI_SRAT5_OFFSET (Reserved1), "Reserved2", 0}, + ACPI_DM_SRAT_GENERIC_AFFINITY, ACPI_DMT_TERMINATOR }; +/* 6: Generic Port Affinity Structure (ACPI 6.4) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat6[] = +{ + ACPI_DM_SRAT_GENERIC_AFFINITY, + ACPI_DMT_TERMINATOR +}; /******************************************************************************* * diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c index 5bec65e8..4b3b66a5 100644 --- a/src/acpica/source/compiler/aslmethod.c +++ b/src/acpica/source/compiler/aslmethod.c @@ -559,74 +559,56 @@ MtMethodAnalysisWalkBegin ( * * Under the Device Object: * - * 1) If _DIS is present, must have a _CRS, _PRS, and _SRS - * 2) If _PRS is present, must have a _CRS and _SRS - * 3) If _SRS is present, must have a _CRS and _PRS + * 1) If _PRS present, must have _CRS and _SRS + * 2) If _SRS present, must have _PRS (_PRS requires _CRS and _SRS) + * 3) If _DIS present, must have _SRS (_SRS requires _PRS, _PRS requires _CRS and _SRS) + * 4) If _SRS present, probably should have a _DIS (Remark only) */ CrsExists = ApFindNameInDeviceTree (METHOD_NAME__CRS, Op); DisExists = ApFindNameInDeviceTree (METHOD_NAME__DIS, Op); PrsExists = ApFindNameInDeviceTree (METHOD_NAME__PRS, Op); SrsExists = ApFindNameInDeviceTree (METHOD_NAME__SRS, Op); - /* 1) If _DIS is present, must have a _CRS, _PRS, and _SRS */ + /* 1) If _PRS is present, must have a _CRS and _SRS */ - if (DisExists) + if (PrsExists) { if (!CrsExists) { AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, - "_DIS is missing a _CRS, requires a _CRS, _PRS, and a _SRS"); - } - - if (!PrsExists) - { - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, - "_DIS is missing a _PRS, requires a _CRS, _PRS, and a _SRS"); + "Device has a _PRS, missing a _CRS, required"); } - if (!SrsExists) { AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, - "_DIS is missing a _SRS, requires a _CRS, _PRS, and a _SRS"); + "Device has a _PRS, missing a _SRS, required"); } } - /* 2) If _PRS is present, must have a _CRS and _SRS */ + /* 2) If _SRS is present, must have _PRS (_PRS requires _CRS and _SRS) */ - if (PrsExists) + if ((SrsExists) && (!PrsExists)) { - if (!CrsExists) - { - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, - "_PRS is missing a _CRS, requires a _CRS and a _SRS"); - } - - if (!SrsExists) - { - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, - "_PRS is missing a _SRS, requires a _CRS and a _SRS"); - } + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, + "Device has a _SRS, missing a _PRS, required"); } - /* 3) If _SRS is present, must have a _CRS and _PRS */ + /* 3) If _DIS is present, must have a _SRS */ - if (SrsExists) + if ((DisExists) && (!SrsExists)) { - if (!CrsExists) - { - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, - "_SRS is missing a _CRS, requires a _CRS and a _PRS"); - } - if (!PrsExists) - { - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, - "_SRS is missing a _PRS, requires a _CRS and a _PRS"); - } - if (!DisExists) - { - AslError (ASL_REMARK, ASL_MSG_MISSING_DEPENDENCY, Op, - "_SRS is missing a _DIS"); - } + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, + "Device has a _DIS, missing a _SRS, required"); + } + + /* + * 4) If _SRS is present, should have a _DIS (_PRS requires _CRS + * and _SRS) Remark only. + */ + if ((SrsExists) && (!DisExists)) + { + AslError (ASL_REMARK, ASL_MSG_MISSING_DEPENDENCY, Op, + "Device has a _SRS, no corresponding _DIS"); } break; diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h index 6d3dbefa..614a686f 100644 --- a/src/acpica/source/compiler/dtcompiler.h +++ b/src/acpica/source/compiler/dtcompiler.h @@ -657,6 +657,10 @@ ACPI_STATUS DtCompileNfit ( void **PFieldList); +ACPI_STATUS +DtCompileNhlt ( + void **PFieldList); + ACPI_STATUS DtCompilePcct ( void **PFieldList); diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c index fb41ac87..b9445122 100644 --- a/src/acpica/source/compiler/dttable2.c +++ b/src/acpica/source/compiler/dttable2.c @@ -2062,6 +2062,11 @@ DtCompileSrat ( InfoTable = AcpiDmTableInfoSrat5; break; + case ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY: + + InfoTable = AcpiDmTableInfoSrat6; + break; + default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SRAT"); diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c index 7d706da6..52180fb3 100644 --- a/src/acpica/source/compiler/dtutils.c +++ b/src/acpica/source/compiler/dtutils.c @@ -581,6 +581,8 @@ DtGetFieldLength ( case ACPI_DMT_IVRS_DE: case ACPI_DMT_GTDT: case ACPI_DMT_MADT: + case ACPI_DMT_NHLT1: + case ACPI_DMT_NHLT1a: case ACPI_DMT_PCCT: case ACPI_DMT_PMTT: case ACPI_DMT_PPTT: diff --git a/src/acpica/source/compiler/preprocess.h b/src/acpica/source/compiler/preprocess.h index 6343a49c..f4c8c309 100644 --- a/src/acpica/source/compiler/preprocess.h +++ b/src/acpica/source/compiler/preprocess.h @@ -355,7 +355,7 @@ PrEvaluateExpression ( /* - * prutils - Preprocesor utilities + * prutils - Preprocessor utilities */ char * PrGetNextToken ( diff --git a/src/acpica/source/components/dispatcher/dsfield.c b/src/acpica/source/components/dispatcher/dsfield.c index 90f895b7..bd2755ae 100644 --- a/src/acpica/source/components/dispatcher/dsfield.c +++ b/src/acpica/source/components/dispatcher/dsfield.c @@ -797,7 +797,7 @@ AcpiDsInitFieldObjects ( } #ifdef ACPI_EXEC_APP - Flags |= ACPI_NS_OVERRIDE_IF_FOUND; + Flags |= ACPI_NS_OVERRIDE_IF_FOUND; #endif /* * Walk the list of entries in the FieldList diff --git a/src/acpica/source/components/hardware/hwesleep.c b/src/acpica/source/components/hardware/hwesleep.c index fcc28581..e8db4d26 100644 --- a/src/acpica/source/components/hardware/hwesleep.c +++ b/src/acpica/source/components/hardware/hwesleep.c @@ -312,18 +312,15 @@ ACPI_STATUS AcpiHwExtendedWakePrep ( UINT8 SleepState) { - ACPI_STATUS Status; UINT8 SleepTypeValue; ACPI_FUNCTION_TRACE (HwExtendedWakePrep); - Status = AcpiGetSleepTypeData (ACPI_STATE_S0, - &AcpiGbl_SleepTypeA, &AcpiGbl_SleepTypeB); - if (ACPI_SUCCESS (Status)) + if (AcpiGbl_SleepTypeAS0 != ACPI_SLEEP_TYPE_INVALID) { - SleepTypeValue = ((AcpiGbl_SleepTypeA << ACPI_X_SLEEP_TYPE_POSITION) & + SleepTypeValue = ((AcpiGbl_SleepTypeAS0 << ACPI_X_SLEEP_TYPE_POSITION) & ACPI_X_SLEEP_TYPE_MASK); (void) AcpiWrite ((UINT64) (SleepTypeValue | ACPI_X_SLEEP_ENABLE), diff --git a/src/acpica/source/components/hardware/hwsleep.c b/src/acpica/source/components/hardware/hwsleep.c index d85d0478..2b857d97 100644 --- a/src/acpica/source/components/hardware/hwsleep.c +++ b/src/acpica/source/components/hardware/hwsleep.c @@ -339,7 +339,7 @@ ACPI_STATUS AcpiHwLegacyWakePrep ( UINT8 SleepState) { - ACPI_STATUS Status; + ACPI_STATUS Status = AE_OK; ACPI_BIT_REGISTER_INFO *SleepTypeRegInfo; ACPI_BIT_REGISTER_INFO *SleepEnableRegInfo; UINT32 Pm1aControl; @@ -353,9 +353,7 @@ AcpiHwLegacyWakePrep ( * This is unclear from the ACPI Spec, but it is required * by some machines. */ - Status = AcpiGetSleepTypeData (ACPI_STATE_S0, - &AcpiGbl_SleepTypeA, &AcpiGbl_SleepTypeB); - if (ACPI_SUCCESS (Status)) + if (AcpiGbl_SleepTypeAS0 != ACPI_SLEEP_TYPE_INVALID) { SleepTypeRegInfo = AcpiHwGetBitRegisterInfo (ACPI_BITREG_SLEEP_TYPE); @@ -376,9 +374,9 @@ AcpiHwLegacyWakePrep ( /* Insert the SLP_TYP bits */ - Pm1aControl |= (AcpiGbl_SleepTypeA << + Pm1aControl |= (AcpiGbl_SleepTypeAS0 << SleepTypeRegInfo->BitPosition); - Pm1bControl |= (AcpiGbl_SleepTypeB << + Pm1aControl |= (AcpiGbl_SleepTypeBS0 << SleepTypeRegInfo->BitPosition); /* Write the control registers and ignore any errors */ diff --git a/src/acpica/source/components/hardware/hwxfsleep.c b/src/acpica/source/components/hardware/hwxfsleep.c index 26b48ccb..f1a1344c 100644 --- a/src/acpica/source/components/hardware/hwxfsleep.c +++ b/src/acpica/source/components/hardware/hwxfsleep.c @@ -471,6 +471,12 @@ AcpiEnterSleepStatePrep ( return_ACPI_STATUS (Status); } + Status = AcpiGetSleepTypeData (ACPI_STATE_S0, + &AcpiGbl_SleepTypeAS0, &AcpiGbl_SleepTypeBS0); + if (ACPI_FAILURE (Status)) { + AcpiGbl_SleepTypeAS0 = ACPI_SLEEP_TYPE_INVALID; + } + /* Execute the _PTS method (Prepare To Sleep) */ ArgList.Count = 1; diff --git a/src/acpica/source/components/utilities/utosi.c b/src/acpica/source/components/utilities/utosi.c index 61867f71..756ca35c 100644 --- a/src/acpica/source/components/utilities/utosi.c +++ b/src/acpica/source/components/utilities/utosi.c @@ -220,6 +220,7 @@ static ACPI_INTERFACE_INFO AcpiDefaultSupportedInterfaces[] = {"Windows 2018", NULL, 0, ACPI_OSI_WIN_10_RS4}, /* Windows 10 version 1803 - Added 11/2018 */ {"Windows 2018.2", NULL, 0, ACPI_OSI_WIN_10_RS5}, /* Windows 10 version 1809 - Added 11/2018 */ {"Windows 2019", NULL, 0, ACPI_OSI_WIN_10_19H1}, /* Windows 10 version 1903 - Added 08/2019 */ + {"Windows 2020", NULL, 0, ACPI_OSI_WIN_10_20H1}, /* Windows 10 version 2004 - Added 08/2021 */ /* Feature Group Strings */ diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h index 839c0edd..6e162d6a 100644 --- a/src/acpica/source/include/acdisasm.h +++ b/src/acpica/source/include/acdisasm.h @@ -224,6 +224,7 @@ typedef enum ACPI_DMT_BUF10, ACPI_DMT_BUF12, ACPI_DMT_BUF16, + ACPI_DMT_BUF18, ACPI_DMT_BUF128, ACPI_DMT_SIG, ACPI_DMT_STRING, @@ -277,6 +278,8 @@ typedef enum ACPI_DMT_LPIT, ACPI_DMT_MADT, ACPI_DMT_NFIT, + ACPI_DMT_NHLT1, + ACPI_DMT_NHLT1a, ACPI_DMT_PCCT, ACPI_DMT_PHAT, ACPI_DMT_PMTT, @@ -544,7 +547,21 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit5[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6a[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoNfit7[]; -extern ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt0[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt1[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt2[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt3[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt3a[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt4[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5a[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5b[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt5c[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt6[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt7[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt7a[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoNhlt8[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPhatHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPhat0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPhat0a[]; @@ -565,6 +582,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct3[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct4[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct5[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPdtt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0a[]; @@ -609,6 +627,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat4[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat5[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat6[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoStao[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoStaoStr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoSvkl[]; @@ -791,6 +810,10 @@ void AcpiDmDumpNfit ( ACPI_TABLE_HEADER *Table); +void +AcpiDmDumpNhlt ( + ACPI_TABLE_HEADER *Table); + void AcpiDmDumpPcct ( ACPI_TABLE_HEADER *Table); diff --git a/src/acpica/source/include/acglobal.h b/src/acpica/source/include/acglobal.h index c2107df0..35426865 100644 --- a/src/acpica/source/include/acglobal.h +++ b/src/acpica/source/include/acglobal.h @@ -365,6 +365,8 @@ ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_LastListHead, NULL); extern ACPI_BIT_REGISTER_INFO AcpiGbl_BitRegisterInfo[ACPI_NUM_BITREG]; ACPI_GLOBAL (UINT8, AcpiGbl_SleepTypeA); ACPI_GLOBAL (UINT8, AcpiGbl_SleepTypeB); +ACPI_GLOBAL (UINT8, AcpiGbl_SleepTypeAS0); +ACPI_GLOBAL (UINT8, AcpiGbl_SleepTypeBS0); /***************************************************************************** diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h index 7610f2e3..7f4b31ee 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 0x20210730 +#define ACPI_CA_VERSION 0x20210930 #include "acconfig.h" #include "actypes.h" diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h index f2a1a48c..8a9ff736 100644 --- a/src/acpica/source/include/actbinfo.h +++ b/src/acpica/source/include/actbinfo.h @@ -180,6 +180,7 @@ #define ACPI_MPST_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MPST,f) #define ACPI_MSCT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MSCT,f) #define ACPI_NFIT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_NFIT,f) +#define ACPI_NHLT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_NHLT,f) #define ACPI_PCCT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_PCCT,f) #define ACPI_PDTT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_PDTT,f) #define ACPI_PMTT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_PMTT,f) @@ -328,6 +329,19 @@ #define ACPI_NFIT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_DATA_REGION,f) #define ACPI_NFIT6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_FLUSH_ADDRESS,f) #define ACPI_NFIT7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NFIT_CAPABILITIES,f) +#define ACPI_NHLT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_ENDPOINT,f) +#define ACPI_NHLT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG,f) +#define ACPI_NHLT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_WAVE_EXTENSIBLE,f) +#define ACPI_NHLT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_FORMAT_CONFIG,f) +#define ACPI_NHLT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_FORMATS_CONFIG,f) +#define ACPI_NHLT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG,f) +#define ACPI_NHLT5A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A,f) +#define ACPI_NHLT5B_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B,f) +#define ACPI_NHLT5C_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_C,f) +#define ACPI_NHLT6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_VENDOR_MIC_CONFIG,f) +#define ACPI_NHLT7_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_LINUX_SPECIFIC_COUNT,f) +#define ACPI_NHLT7A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_LINUX_SPECIFIC_DATA,f) +#define ACPI_NHLT8_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_NHLT_TABLE_TERMINATOR,f) #define ACPI_PCCT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_SUBSPACE,f) #define ACPI_PCCT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED,f) #define ACPI_PCCT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f) diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h index 58c1570c..0c80aae2 100644 --- a/src/acpica/source/include/actbl2.h +++ b/src/acpica/source/include/actbl2.h @@ -179,6 +179,7 @@ #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */ #define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ #define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ +#define ACPI_SIG_NHLT "NHLT" /* Non HD Audio Link Table */ #define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ #define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ #define ACPI_SIG_PHAT "PHAT" /* Platform Health Assessment Table */ @@ -190,7 +191,6 @@ #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ #define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ #define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ -#define ACPI_SIG_NHLT "NHLT" /* Non-HDAudio Link Table */ #define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */ @@ -1271,6 +1271,7 @@ typedef struct acpi_madt_multiproc_wakeup_mailbox /* MADT Local APIC flags */ #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ +#define ACPI_MADT_ONLINE_CAPABLE (2) /* 01: System HW supports enabling processor at runtime */ /* MADT MPS INTI flags (IntiFlags) */ @@ -1777,6 +1778,292 @@ typedef struct nfit_device_handle (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) +/******************************************************************************* + * + * NHLT - Non HD Audio Link Table + * + * Conforms to: Intel Smart Sound Technology NHLT Specification + * Version 0.8.1, January 2020. + * + ******************************************************************************/ + +/* Main table */ + +typedef struct acpi_table_nhlt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 EndpointCount; + +} ACPI_TABLE_NHLT; + +typedef struct acpi_nhlt_endpoint +{ + UINT32 DescriptorLength; + UINT8 LinkType; + UINT8 InstanceId; + UINT16 VendorId; + UINT16 DeviceId; + UINT16 RevisionId; + UINT32 SubsystemId; + UINT8 DeviceType; + UINT8 Direction; + UINT8 VirtualBusId; + +} ACPI_NHLT_ENDPOINT; + +/* Types for LinkType field above */ + +#define ACPI_NHLT_RESERVED_HD_AUDIO 0 +#define ACPI_NHLT_RESERVED_DSP 1 +#define ACPI_NHLT_PDM 2 +#define ACPI_NHLT_SSP 3 +#define ACPI_NHLT_RESERVED_SLIMBUS 4 +#define ACPI_NHLT_RESERVED_SOUNDWIRE 5 +#define ACPI_NHLT_TYPE_RESERVED 6 /* 6 and above are reserved */ + +/* All other values above are reserved */ + +/* Values for DeviceId field above */ + +#define ACPI_NHLT_PDM_DMIC 0xAE20 +#define ACPI_NHLT_BT_SIDEBAND 0xAE30 +#define ACPI_NHLT_I2S_TDM_CODECS 0xAE23 + +/* Values for DeviceType field above */ + +/* SSP Link */ + +#define ACPI_NHLT_LINK_BT_SIDEBAND 0 +#define ACPI_NHLT_LINK_FM 1 +#define ACPI_NHLT_LINK_MODEM 2 +/* 3 is reserved */ +#define ACPI_NHLT_LINK_SSP_ANALOG_CODEC 4 + +/* PDM Link */ + +#define ACPI_NHLT_PDM_ON_CAVS_1P8 0 +#define ACPI_NHLT_PDM_ON_CAVS_1P5 1 + +/* Values for Direction field above */ + +#define ACPI_NHLT_DIR_RENDER 0 +#define ACPI_NHLT_DIR_CAPTURE 1 +#define ACPI_NHLT_DIR_RENDER_LOOPBACK 2 +#define ACPI_NHLT_DIR_RENDER_FEEDBACK 3 +#define ACPI_NHLT_DIR_RESERVED 4 /* 4 and above are reserved */ + +typedef struct acpi_nhlt_device_specific_config +{ + UINT32 CapabilitiesSize; + UINT8 VirtualSlot; + UINT8 ConfigType; + +} ACPI_NHLT_DEVICE_SPECIFIC_CONFIG; + +typedef struct acpi_nhlt_device_specific_config_a +{ + UINT32 CapabilitiesSize; + UINT8 VirtualSlot; + UINT8 ConfigType; + UINT8 ArrayType; + +} ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A; + +/* Values for Config Type above */ + +#define ACPI_NHLT_TYPE_MIC_ARRAY 0x01 +#define ACPI_NHLT_TYPE_GENERIC 0x00 + +/* Mask for Extension field of ArrayType */ + +#define ACPI_NHLT_ARRAY_TYPE_MASK 0x10 + +typedef struct acpi_nhlt_device_specific_config_b +{ + UINT32 CapabilitiesSize; + +} ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B; + +typedef struct acpi_nhlt_device_specific_config_c +{ + UINT32 CapabilitiesSize; + UINT8 VirtualSlot; + +} ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_C; + +typedef struct acpi_nhlt_wave_extensible +{ + UINT16 FormatTag; + UINT16 ChannelCount; + UINT32 SamplesPerSec; + UINT32 AvgBytesPerSec; + UINT16 BlockAlign; + UINT16 BitsPerSample; + UINT16 ExtraFormatSize; + UINT16 ValidBitsPerSample; + UINT32 ChannelMask; + UINT8 SubFormatGuid[16]; + +} ACPI_NHLT_WAVE_EXTENSIBLE; + +/* Values for ChannelMask above */ + +#define ACPI_NHLT_SPKR_FRONT_LEFT 0x1 +#define ACPI_NHLT_SPKR_FRONT_RIGHT 0x2 +#define ACPI_NHLT_SPKR_FRONT_CENTER 0x4 +#define ACPI_NHLT_SPKR_LOW_FREQ 0x8 +#define ACPI_NHLT_SPKR_BACK_LEFT 0x10 +#define ACPI_NHLT_SPKR_BACK_RIGHT 0x20 +#define ACPI_NHLT_SPKR_FRONT_LEFT_OF_CENTER 0x40 +#define ACPI_NHLT_SPKR_FRONT_RIGHT_OF_CENTER 0x80 +#define ACPI_NHLT_SPKR_BACK_CENTER 0x100 +#define ACPI_NHLT_SPKR_SIDE_LEFT 0x200 +#define ACPI_NHLT_SPKR_SIDE_RIGHT 0x400 +#define ACPI_NHLT_SPKR_TOP_CENTER 0x800 +#define ACPI_NHLT_SPKR_TOP_FRONT_LEFT 0x1000 +#define ACPI_NHLT_SPKR_TOP_FRONT_CENTER 0x2000 +#define ACPI_NHLT_SPKR_TOP_FRONT_RIGHT 0x4000 +#define ACPI_NHLT_SPKR_TOP_BACK_LEFT 0x8000 +#define ACPI_NHLT_SPKR_TOP_BACK_CENTER 0x10000 +#define ACPI_NHLT_SPKR_TOP_BACK_RIGHT 0x20000 + +typedef struct acpi_nhlt_format_config +{ + ACPI_NHLT_WAVE_EXTENSIBLE Format; + UINT32 CapabilitySize; + UINT8 Capabilities[]; + +} ACPI_NHLT_FORMAT_CONFIG; + +typedef struct acpi_nhlt_formats_config +{ + UINT8 FormatsCount; + +} ACPI_NHLT_FORMATS_CONFIG; + +typedef struct acpi_nhlt_device_specific_hdr +{ + UINT8 VirtualSlot; + UINT8 ConfigType; + +} ACPI_NHLT_DEVICE_SPECIFIC_HDR; + +/* Types for ConfigType above */ + +#define ACPI_NHLT_GENERIC 0 +#define ACPI_NHLT_MIC 1 +#define ACPI_NHLT_RENDER 3 + +typedef struct acpi_nhlt_mic_device_specific_config +{ + ACPI_NHLT_DEVICE_SPECIFIC_HDR DeviceConfig; + UINT8 ArrayTypeExt; + +} ACPI_NHLT_MIC_DEVICE_SPECIFIC_CONFIG; + +/* Values for ArrayTypeExt above */ + +#define SMALL_LINEAR_2ELEMENT 0x0A +#define BIG_LINEAR_2ELEMENT 0x0B +#define FIRST_GEOMETRY_LINEAR_4ELEMENT 0x0C +#define PLANAR_LSHAPED_4ELEMENT 0x0D +#define SECOND_GEOMETRY_LINEAR_4ELEMENT 0x0E +#define VENDOR_DEFINED 0x0F +#define ARRAY_TYPE_MASK 0x0F +#define ARRAY_TYPE_EXT_MASK 0x10 + +#define NO_EXTENSION 0x0 +#define MIC_SNR_SENSITIVITY_EXT 0x1 + + +typedef struct acpi_nhlt_vendor_mic_config +{ + UINT8 Type; + UINT8 Panel; + UINT16 SpeakerPositionDistance; // mm + UINT16 HorizontalOffset; // mm + UINT16 VerticalOffset; // mm + UINT8 FrequencyLowBand; // 5*Hz + UINT8 FrequencyHighBand; // 500*Hz + UINT16 DirectionAngle; // -180 - + 180 + UINT16 ElevationAngle; // -180 - + 180 + UINT16 WorkVerticalAngleBegin; // -180 - + 180 with 2 deg step + UINT16 WorkVerticalAngleEnd; // -180 - + 180 with 2 deg step + UINT16 WorkHorizontalAngleBegin; // -180 - + 180 with 2 deg step + UINT16 WorkHorizontalAngleEnd; // -180 - + 180 with 2 deg step + +} ACPI_NHLT_VENDOR_MIC_CONFIG; + +/* Values for Type field above */ + +#define MIC_OMNIDIRECTIONAL 0 +#define MIC_SUBCARDIOID 1 +#define MIC_CARDIOID 2 +#define MIC_SUPER_CARDIOID 3 +#define MIC_HYPER_CARDIOID 4 +#define MIC_8_SHAPED 5 +#define MIC_VENDOR_DEFINED 7 + +/* Values for Panel field above */ + +#define MIC_TOP 0 +#define MIC_BOTTOM 1 +#define MIC_LEFT 2 +#define MIC_RIGHT 3 +#define MIC_FRONT 4 +#define MIC_REAR 5 + +typedef struct acpi_nhlt_vendor_mic_device_specific_config +{ + ACPI_NHLT_MIC_DEVICE_SPECIFIC_CONFIG MicArrayDeviceConfig; + UINT8 NumberOfMicrophones; + ACPI_NHLT_VENDOR_MIC_CONFIG MicConfig[]; // Indexed by NumberOfMicrophones + +} ACPI_NHLT_VENDOR_MIC_DEVICE_SPECIFIC_CONFIG; + +/* Microphone SNR and Sensitivity extension */ + +typedef struct acpi_nhlt_mic_snr_sensitivity_extension +{ + UINT32 SNR; + UINT32 Sensitivity; + +} ACPI_NHLT_MIC_SNR_SENSITIVITY_EXTENSION; + +typedef struct acpi_nhlt_render_feedback_device_specific_config +{ + ACPI_NHLT_DEVICE_SPECIFIC_CONFIG DeviceConfig; + UINT8 FeedbackVirtualSlot; // Render slot in case of capture + UINT16 FeedbackChannels; // Informative only + UINT16 FeedbackValidBitsPerSample; + +} ACPI_NHLT_RENDER_FEEDBACK_DEVICE_SPECIFIC_CONFIG; + +/* Linux-specific structures */ + +typedef struct acpi_nhlt_linux_specific_count +{ + UINT8 StructureCount; + +} ACPI_NHLT_LINUX_SPECIFIC_COUNT; + +typedef struct acpi_nhlt_linux_specific_data +{ + UINT8 DeviceId[16]; + UINT8 DeviceInstanceId; + UINT8 DevicePortId; + UINT8 Filler[18]; + +} ACPI_NHLT_LINUX_SPECIFIC_DATA; + +typedef struct acpi_nhlt_table_terminator +{ + UINT32 TerminatorValue; + UINT32 TerminatorSignature; + +} ACPI_NHLT_TABLE_TERMINATOR; + + /******************************************************************************* * * PCCT - Platform Communications Channel Table (ACPI 5.0) diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h index d0f7025f..40cf7130 100644 --- a/src/acpica/source/include/actbl3.h +++ b/src/acpica/source/include/actbl3.h @@ -352,7 +352,8 @@ enum AcpiSratType ACPI_SRAT_TYPE_GICC_AFFINITY = 3, ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */ ACPI_SRAT_TYPE_GENERIC_AFFINITY = 5, /* ACPI 6.3 */ - ACPI_SRAT_TYPE_RESERVED = 6 /* 5 and greater are reserved */ + ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY = 6, /* ACPI 6.4 */ + ACPI_SRAT_TYPE_RESERVED = 7 /* 7 and greater are reserved */ }; /* @@ -447,8 +448,11 @@ typedef struct acpi_srat_gic_its_affinity } ACPI_SRAT_GIC_ITS_AFFINITY; - -/* 5: Generic Initiator Affinity Structure (ACPI 6.3) */ +/* + * Common structure for SRAT subtable types: + * 5: ACPI_SRAT_TYPE_GENERIC_AFFINITY + * 6: ACPI_SRAT_TYPE_GENERIC_PORT_AFFINITY + */ typedef struct acpi_srat_generic_affinity { diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h index e98e636a..5138342c 100644 --- a/src/acpica/source/include/actypes.h +++ b/src/acpica/source/include/actypes.h @@ -1531,6 +1531,7 @@ typedef enum #define ACPI_OSI_WIN_10_RS4 0x12 #define ACPI_OSI_WIN_10_RS5 0x13 #define ACPI_OSI_WIN_10_19H1 0x14 +#define ACPI_OSI_WIN_10_20H1 0x15 /* Definitions of getopt */
Changes in this release of ACPICA are detailed at the following link on the ACPICA developer mailing list: https://lists.acpica.org/hyperkitty/list/devel@acpica.org/thread/AMZT7XOO2HPVPMACSBAU5ELTVFEHDKAR/ Signed-off-by: Ivan Hu <ivan.hu@canonical.com> --- src/acpica/source/common/dmtable.c | 58 ++++ src/acpica/source/common/dmtbdump2.c | 300 ++++++++++++++++++ src/acpica/source/common/dmtbdump3.c | 5 + src/acpica/source/common/dmtbinfo2.c | 183 +++++++++++ src/acpica/source/common/dmtbinfo3.c | 28 +- src/acpica/source/compiler/aslmethod.c | 70 ++-- src/acpica/source/compiler/dtcompiler.h | 4 + src/acpica/source/compiler/dttable2.c | 5 + src/acpica/source/compiler/dtutils.c | 2 + src/acpica/source/compiler/preprocess.h | 2 +- .../source/components/dispatcher/dsfield.c | 2 +- .../source/components/hardware/hwesleep.c | 7 +- .../source/components/hardware/hwsleep.c | 10 +- .../source/components/hardware/hwxfsleep.c | 6 + .../source/components/utilities/utosi.c | 1 + src/acpica/source/include/acdisasm.h | 25 +- src/acpica/source/include/acglobal.h | 2 + src/acpica/source/include/acpixf.h | 2 +- src/acpica/source/include/actbinfo.h | 14 + src/acpica/source/include/actbl2.h | 289 ++++++++++++++++- src/acpica/source/include/actbl3.h | 10 +- src/acpica/source/include/actypes.h | 1 + 22 files changed, 955 insertions(+), 71 deletions(-)