Message ID | 1406231880-22595-2-git-send-email-colin.king@canonical.com |
---|---|
State | Accepted |
Headers | show |
On 07/25/2014 03:57 AM, Colin King wrote: > From: Colin Ian King <colin.king@canonical.com> > > Update to ACPICA version 20140724. Refer to > https://lists.acpica.org/pipermail/devel/2014-July/000658.html > for a full list of new features and fixes. > > Signed-off-by: Colin Ian King <colin.king@canonical.com> > --- > src/acpica/Makefile.am | 3 + > src/acpica/source/common/ahids.c | 6 +- > src/acpica/source/common/ahpredef.c | 2 + > src/acpica/source/common/ahuuids.c | 201 +++++++++++++++++++++ > src/acpica/source/common/dmextern.c | 31 +++- > src/acpica/source/common/dmtable.c | 80 ++++++-- > src/acpica/source/common/dmtbdump.c | 171 +++++++++++++++++- > src/acpica/source/common/dmtbinfo.c | 178 ++++++++++++++++-- > src/acpica/source/compiler/Makefile.am | 2 + > src/acpica/source/compiler/aslanalyze.c | 48 +++++ > src/acpica/source/compiler/aslcompiler.h | 14 +- > src/acpica/source/compiler/aslcompiler.l | 10 +- > src/acpica/source/compiler/asldefine.h | 2 +- > src/acpica/source/compiler/aslglobal.h | 6 - > src/acpica/source/compiler/aslmessages.c | 1 + > src/acpica/source/compiler/aslmessages.h | 1 + > src/acpica/source/compiler/aslmethod.c | 20 ++ > src/acpica/source/compiler/aslopcodes.c | 12 +- > src/acpica/source/compiler/aslprepkg.c | 35 ++++ > src/acpica/source/compiler/aslutils.c | 41 +---- > src/acpica/source/compiler/asluuid.c | 74 +------- > src/acpica/source/compiler/dtcompiler.h | 4 + > src/acpica/source/compiler/dtfield.c | 2 +- > src/acpica/source/compiler/dttable.c | 157 +++++++++++++++- > src/acpica/source/compiler/dttemplate.h | 127 +++++++------ > src/acpica/source/compiler/dtutils.c | 2 + > .../source/components/disassembler/dmbuffer.c | 143 ++++++++++++++- > .../source/components/disassembler/dmopcode.c | 7 +- > src/acpica/source/components/disassembler/dmwalk.c | 3 +- > src/acpica/source/components/events/evgpe.c | 34 ++-- > src/acpica/source/components/events/evxfgpe.c | 71 +++++++- > src/acpica/source/components/executer/exdebug.c | 11 +- > src/acpica/source/components/executer/exdump.c | 6 +- > src/acpica/source/components/executer/exfield.c | 30 ++- > src/acpica/source/components/namespace/nsobject.c | 19 +- > src/acpica/source/components/utilities/utdecode.c | 37 +--- > src/acpica/source/components/utilities/utfileio.c | 3 +- > src/acpica/source/components/utilities/uthex.c | 185 +++++++++++++++++++ > src/acpica/source/components/utilities/utprint.c | 65 ++++--- > src/acpica/source/components/utilities/utuuid.c | 175 ++++++++++++++++++ > src/acpica/source/include/acconfig.h | 19 ++ > src/acpica/source/include/acdisasm.h | 18 ++ > src/acpica/source/include/aclocal.h | 20 +- > src/acpica/source/include/acnames.h | 1 + > src/acpica/source/include/acpixf.h | 8 +- > src/acpica/source/include/acpredef.h | 15 +- > src/acpica/source/include/actbl.h | 12 +- > src/acpica/source/include/actbl1.h | 76 ++++++-- > src/acpica/source/include/actbl2.h | 26 ++- > src/acpica/source/include/actbl3.h | 134 ++++++++++++-- > src/acpica/source/include/actypes.h | 5 +- > src/acpica/source/include/acutils.h | 16 ++ > src/acpica/source/include/platform/aclinux.h | 6 - > src/acpica/source/include/platform/aclinuxex.h | 10 - > .../source/os_specific/service_layers/oslibcfs.c | 34 ++-- > .../source/os_specific/service_layers/osunixxf.c | 8 +- > src/acpica/source/tools/acpiexec/aehandlers.c | 6 +- > 57 files changed, 1992 insertions(+), 441 deletions(-) > create mode 100644 src/acpica/source/common/ahuuids.c > create mode 100644 src/acpica/source/components/utilities/uthex.c > create mode 100644 src/acpica/source/components/utilities/utuuid.c > > diff --git a/src/acpica/Makefile.am b/src/acpica/Makefile.am > index b2dd752..cbd38c6 100644 > --- a/src/acpica/Makefile.am > +++ b/src/acpica/Makefile.am > @@ -216,6 +216,7 @@ libfwtsacpica_la_SOURCES = \ > source/components/utilities/uteval.c \ > source/components/utilities/utfileio.c \ > source/components/utilities/utglobal.c \ > + source/components/utilities/uthex.c \ > source/components/utilities/utids.c \ > source/components/utilities/utinit.c \ > source/components/utilities/utlock.c \ > @@ -238,9 +239,11 @@ libfwtsacpica_la_SOURCES = \ > source/components/utilities/utxfinit.c \ > source/components/utilities/uterror.c \ > source/components/utilities/utbuffer.c \ > + source/components/utilities/utuuid.c \ > source/common/acgetline.c \ > source/common/ahids.c \ > source/common/cmfsize.c \ > + source/common/ahuuids.c \ > source/tools/acpiexec/aehandlers.c > > libfwtsacpica_la_LIBADD = \ > diff --git a/src/acpica/source/common/ahids.c b/src/acpica/source/common/ahids.c > index 3e12961..af6771b 100755 > --- a/src/acpica/source/common/ahids.c > +++ b/src/acpica/source/common/ahids.c > @@ -246,7 +246,11 @@ const AH_DEVICE_ID AslDeviceIds[] = > {"PNP0C60", "Display Sensor Device"}, > {"PNP0C70", "Dock Sensor Device"}, > {"PNP0C80", "Memory Device"}, > - {"PNP0D40", "Standard Compliant SD Host Controller"}, > + {"PNP0D10", "XHCI USB Controller with debug"}, > + {"PNP0D15", "XHCI USB Controller without debug"}, > + {"PNP0D20", "EHCI USB Controller without debug"}, > + {"PNP0D25", "EHCI USB Controller with debug"}, > + {"PNP0D40", "SDA Standard Compliant SD Host Controller"}, > {"PNP0D80", "Windows-compatible System Power Management Controller"}, > {"PNP0F03", "Microsoft PS/2-style Mouse"}, > {"SMO91D0", "Sensor Hub"}, > diff --git a/src/acpica/source/common/ahpredef.c b/src/acpica/source/common/ahpredef.c > index 525c7bb..7123b7f 100644 > --- a/src/acpica/source/common/ahpredef.c > +++ b/src/acpica/source/common/ahpredef.c > @@ -169,6 +169,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] = > AH_PREDEF ("_BTM", "Battery Time", "Returns the battery runtime"), > AH_PREDEF ("_BTP", "Battery Trip Point", "Sets a Control Method Battery trip point"), > AH_PREDEF ("_CBA", "Configuration Base Address", "Sets the base address for a PCI Express host bridge"), > + AH_PREDEF ("_CCA", "Cache Coherency Attribute", "Returns a device's support level for cache coherency"), > AH_PREDEF ("_CDM", "Clock Domain", "Returns a logical processor's clock domain identifier"), > AH_PREDEF ("_CID", "Compatible ID", "Returns a device's Plug and Play Compatible ID list"), > AH_PREDEF ("_CLS", "Class Code", "Returns PCI class code and subclass"), > @@ -193,6 +194,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] = > AH_PREDEF ("_DOS", "Disable Output Switching", "Sets the display output switching mode"), > AH_PREDEF ("_DPL", "Device Selection Polarity", "Polarity of Device Selection signal, Resource Descriptor field"), > AH_PREDEF ("_DRS", "Drive Strength", "Drive Strength setting for GPIO connection, Resource Descriptor field"), > + AH_PREDEF ("_DSD", "Device-Specific Data", "Returns a list of device property information"), > AH_PREDEF ("_DSM", "Device-Specific Method", "Executes device-specific functions"), > AH_PREDEF ("_DSS", "Device Set State", "Sets the display device state"), > AH_PREDEF ("_DSW", "Device Sleep Wake", "Sets the sleep and wake transition states for a device"), > diff --git a/src/acpica/source/common/ahuuids.c b/src/acpica/source/common/ahuuids.c > new file mode 100644 > index 0000000..1bf362c > --- /dev/null > +++ b/src/acpica/source/common/ahuuids.c > @@ -0,0 +1,201 @@ > +/****************************************************************************** > + * > + * Module Name: ahuuids - Table of known ACPI-related UUIDs > + * > + *****************************************************************************/ > + > +/****************************************************************************** > + * > + * 1. Copyright Notice > + * > + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp. > + * All rights reserved. > + * > + * 2. License > + * > + * 2.1. This is your license from Intel Corp. under its intellectual property > + * rights. You may have additional license terms from the party that provided > + * you this software, covering your right to use that party's intellectual > + * property rights. > + * > + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a > + * copy of the source code appearing in this file ("Covered Code") an > + * irrevocable, perpetual, worldwide license under Intel's copyrights in the > + * base code distributed originally by Intel ("Original Intel Code") to copy, > + * make derivatives, distribute, use and display any portion of the Covered > + * Code in any form, with the right to sublicense such rights; and > + * > + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent > + * license (with the right to sublicense), under only those claims of Intel > + * patents that are infringed by the Original Intel Code, to make, use, sell, > + * offer to sell, and import the Covered Code and derivative works thereof > + * solely to the minimum extent necessary to exercise the above copyright > + * license, and in no event shall the patent license extend to any additions > + * to or modifications of the Original Intel Code. No other license or right > + * is granted directly or by implication, estoppel or otherwise; > + * > + * The above copyright and patent license is granted only if the following > + * conditions are met: > + * > + * 3. Conditions > + * > + * 3.1. Redistribution of Source with Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification with rights to further distribute source must include > + * the above Copyright Notice, the above License, this list of Conditions, > + * and the following Disclaimer and Export Compliance provision. In addition, > + * Licensee must cause all Covered Code to which Licensee contributes to > + * contain a file documenting the changes Licensee made to create that Covered > + * Code and the date of any change. Licensee must include in that file the > + * documentation of any changes made by any predecessor Licensee. Licensee > + * must include a prominent statement that the modification is derived, > + * directly or indirectly, from Original Intel Code. > + * > + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification without rights to further distribute source must > + * include the following Disclaimer and Export Compliance provision in the > + * documentation and/or other materials provided with distribution. In > + * addition, Licensee may not authorize further sublicense of source of any > + * portion of the Covered Code, and must include terms to the effect that the > + * license from Licensee to its licensee is limited to the intellectual > + * property embodied in the software Licensee provides to its licensee, and > + * not to intellectual property embodied in modifications its licensee may > + * make. > + * > + * 3.3. Redistribution of Executable. Redistribution in executable form of any > + * substantial portion of the Covered Code or modification must reproduce the > + * above Copyright Notice, and the following Disclaimer and Export Compliance > + * provision in the documentation and/or other materials provided with the > + * distribution. > + * > + * 3.4. Intel retains all right, title, and interest in and to the Original > + * Intel Code. > + * > + * 3.5. Neither the name Intel nor any other trademark owned or controlled by > + * Intel shall be used in advertising or otherwise to promote the sale, use or > + * other dealings in products derived from or relating to the Covered Code > + * without prior written authorization from Intel. > + * > + * 4. Disclaimer and Export Compliance > + * > + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED > + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE > + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, > + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY > + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY > + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A > + * PARTICULAR PURPOSE. > + * > + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES > + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR > + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, > + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY > + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL > + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS > + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY > + * LIMITED REMEDY. > + * > + * 4.3. Licensee shall not export, either directly or indirectly, any of this > + * software or system incorporating such software without first obtaining any > + * required license or other approval from the U. S. Department of Commerce or > + * any other agency or department of the United States Government. In the > + * event Licensee exports any such software from the United States or > + * re-exports any such software from a foreign destination, Licensee shall > + * ensure that the distribution and export/re-export of the software is in > + * compliance with all laws, regulations, orders, or other restrictions of the > + * U.S. Export Administration Regulations. Licensee agrees that neither it nor > + * any of its subsidiaries will export/re-export any technical data, process, > + * software, or service, directly or indirectly, to any country for which the > + * United States government or any agency thereof requires an export license, > + * other governmental approval, or letter of assurance, without first obtaining > + * such license, approval or letter. > + * > + *****************************************************************************/ > + > +#include "acpi.h" > +#include "accommon.h" > + > +#define _COMPONENT ACPI_UTILITIES > + ACPI_MODULE_NAME ("ahuuids") > + > +/* > + * Table of "known" (ACPI-related) UUIDs > + */ > +const AH_UUID AcpiUuids[] = > +{ > + {"PCI Host Bridge Device", > + "33db4d5b-1ff7-401c-9657-7441c03dd766"}, > + > + {"Platform-wide Capabilities", > + "0811b06e-4a27-44f9-8d60-3cbbc22e7b48"}, > + > + {"Dynamic Enumeration", > + "d8c1a3a6-be9b-4c9b-91bf-c3cb81fc5daf"}, > + > + {"GPIO Controller", > + "4f248f40-d5e2-499f-834c-27758ea1cd3f"}, > + > + {"Battery Thermal Limit", > + "4c2067e3-887d-475c-9720-4af1d3ed602e"}, > + > + {"Thermal Extensions", > + "14d399cd-7a27-4b18-8fb4-7cb7b9f4e500"}, > + > + {"USB Controller", > + "ce2ee385-00e6-48cb-9f05-2edb927c4899"}, > + > + {"HID I2C Device", > + "3cdff6f7-4267-4555-ad05-b30a3d8938de"}, > + > + {"Power Button Device", > + "dfbcf3c5-e7a5-44e6-9c1f-29c76f6e059c"}, > + > + {"Device Labeling Interface", > + "e5c937d0-3553-4d7a-9117-ea4d19c3434d"}, > + > + {"SATA Controller", > + "e4db149b-fcfe-425b-a6d8-92357d78fc7f"}, > + > + {"Physical Presence Interface", > + "3dddfaa6-361b-4eb4-a424-8d10089d1653"}, > + > + {NULL, NULL} > +}; > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiAhMatchUuid > + * > + * PARAMETERS: Data - Data buffer containing a UUID > + * > + * RETURN: ASCII description string for the UUID if it is found. > + * > + * DESCRIPTION: Returns a description string for "known" UUIDs, which are > + * are UUIDs that are related to ACPI in some way. > + * > + ******************************************************************************/ > + > +const char * > +AcpiAhMatchUuid ( > + UINT8 *Data) > +{ > + const AH_UUID *Info; > + UINT8 UuidBuffer[UUID_BUFFER_LENGTH]; > + > + > + /* Walk the table of known ACPI-related UUIDs */ > + > + for (Info = AcpiUuids; Info->Description; Info++) > + { > + AcpiUtConvertStringToUuid (Info->String, UuidBuffer); > + > + if (!ACPI_MEMCMP (Data, UuidBuffer, UUID_BUFFER_LENGTH)) > + { > + return (Info->Description); > + } > + } > + > + return (NULL); > +} > diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c > index efd72f6..30196df 100644 > --- a/src/acpica/source/common/dmextern.c > +++ b/src/acpica/source/common/dmextern.c > @@ -478,18 +478,37 @@ AcpiDmGetExternalsFromFile ( > while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ExternalRefFile)) > { > Token = strtok (StringBuffer, METHOD_SEPARATORS); /* "External" */ > - if (!Token) continue; > - if (strcmp (Token, "External")) continue; > + if (!Token) > + { > + continue; > + } > + if (strcmp (Token, "External")) > + { > + continue; > + } > > MethodName = strtok (NULL, METHOD_SEPARATORS); /* Method namepath */ > - if (!MethodName) continue; > + if (!MethodName) > + { > + continue; > + } > > Token = strtok (NULL, METHOD_SEPARATORS); /* "MethodObj" */ > - if (!Token) continue; > - if (strcmp (Token, "MethodObj")) continue; > + if (!Token) > + { > + continue; > + } > + > + if (strcmp (Token, "MethodObj")) > + { > + continue; > + } > > Token = strtok (NULL, METHOD_SEPARATORS); /* Arg count */ > - if (!Token) continue; > + if (!Token) > + { > + continue; > + } > > /* Convert arg count string to an integer */ > > diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c > index e2abd7a..efb50b5 100644 > --- a/src/acpica/source/common/dmtable.c > +++ b/src/acpica/source/common/dmtable.c > @@ -159,9 +159,21 @@ static const char *AcpiDmDmarSubnames[] = > "Reserved Memory Region", > "Root Port ATS Capability", > "Remapping Hardware Static Affinity", > + "ACPI Namespace Device Declaration", > "Unknown SubTable Type" /* Reserved */ > }; > > +static const char *AcpiDmDmarScope[] = > +{ > + "Reserved value", > + "PCI Endpoint Device", > + "PCI Bridge Device", > + "IOAPIC Device", > + "Message-capable HPET Device", > + "Namespace Device", > + "Unknown Scope Type" /* Reserved */ > +}; > + > static const char *AcpiDmEinjActions[] = > { > "Begin Operation", > @@ -232,6 +244,13 @@ static const char *AcpiDmErstInstructions[] = > "Unknown Instruction" > }; > > +static const char *AcpiDmGtdtSubnames[] = > +{ > + "Generic Timer Block", > + "Generic Watchdog Timer", > + "Unknown SubTable Type" /* Reserved */ > +}; > + > static const char *AcpiDmHestSubnames[] = > { > "IA-32 Machine Check Exception", > @@ -261,25 +280,28 @@ static const char *AcpiDmHestNotifySubnames[] = > > static const char *AcpiDmMadtSubnames[] = > { > - "Processor Local APIC", /* ACPI_MADT_TYPE_LOCAL_APIC */ > - "I/O APIC", /* ACPI_MADT_TYPE_IO_APIC */ > - "Interrupt Source Override", /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */ > - "NMI Source", /* ACPI_MADT_TYPE_NMI_SOURCE */ > - "Local APIC NMI", /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */ > - "Local APIC Address Override", /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */ > - "I/O SAPIC", /* ACPI_MADT_TYPE_IO_SAPIC */ > - "Local SAPIC", /* ACPI_MADT_TYPE_LOCAL_SAPIC */ > - "Platform Interrupt Sources", /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */ > - "Processor Local x2APIC", /* ACPI_MADT_TYPE_LOCAL_X2APIC */ > - "Local x2APIC NMI", /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */ > - "Generic Interrupt Controller", /* ACPI_MADT_GENERIC_INTERRUPT */ > - "Generic Interrupt Distributor",/* ACPI_MADT_GENERIC_DISTRIBUTOR */ > - "Unknown SubTable Type" /* Reserved */ > + "Processor Local APIC", /* ACPI_MADT_TYPE_LOCAL_APIC */ > + "I/O APIC", /* ACPI_MADT_TYPE_IO_APIC */ > + "Interrupt Source Override", /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */ > + "NMI Source", /* ACPI_MADT_TYPE_NMI_SOURCE */ > + "Local APIC NMI", /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */ > + "Local APIC Address Override", /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */ > + "I/O SAPIC", /* ACPI_MADT_TYPE_IO_SAPIC */ > + "Local SAPIC", /* ACPI_MADT_TYPE_LOCAL_SAPIC */ > + "Platform Interrupt Sources", /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */ > + "Processor Local x2APIC", /* ACPI_MADT_TYPE_LOCAL_X2APIC */ > + "Local x2APIC NMI", /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */ > + "Generic Interrupt Controller", /* ACPI_MADT_GENERIC_INTERRUPT */ > + "Generic Interrupt Distributor", /* ACPI_MADT_GENERIC_DISTRIBUTOR */ > + "Generic MSI Frame", /* ACPI_MADT_GENERIC_MSI_FRAME */ > + "Generic Interrupt Redistributor", /* ACPI_MADT_GENERIC_REDISTRIBUTOR */ > + "Unknown SubTable Type" /* Reserved */ > }; > > static const char *AcpiDmPcctSubnames[] = > { > "Generic Communications Subspace", /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */ > + "HW-Reduced Communications Subspace", > "Unknown SubTable Type" /* Reserved */ > }; > > @@ -378,7 +400,7 @@ ACPI_DMTABLE_DATA AcpiDmTableData[] = > {ACPI_SIG_ERST, NULL, AcpiDmDumpErst, DtCompileErst, TemplateErst, "Error Record Serialization Table"}, > {ACPI_SIG_FADT, NULL, AcpiDmDumpFadt, DtCompileFadt, TemplateFadt, "Fixed ACPI Description Table (FADT)"}, > {ACPI_SIG_FPDT, NULL, AcpiDmDumpFpdt, DtCompileFpdt, TemplateFpdt, "Firmware Performance Data Table"}, > - {ACPI_SIG_GTDT, AcpiDmTableInfoGtdt, NULL, NULL, TemplateGtdt, "Generic Timer Description Table"}, > + {ACPI_SIG_GTDT, NULL, AcpiDmDumpGtdt, DtCompileGtdt, TemplateGtdt, "Generic Timer Description Table"}, > {ACPI_SIG_HEST, NULL, AcpiDmDumpHest, DtCompileHest, TemplateHest, "Hardware Error Source Table"}, > {ACPI_SIG_HPET, AcpiDmTableInfoHpet, NULL, NULL, TemplateHpet, "High Precision Event Timer table"}, > {ACPI_SIG_IVRS, NULL, AcpiDmDumpIvrs, DtCompileIvrs, TemplateIvrs, "I/O Virtualization Reporting Structure"}, > @@ -777,6 +799,7 @@ AcpiDmDumpTable ( > case ACPI_DMT_SPACEID: > case ACPI_DMT_ACCWIDTH: > case ACPI_DMT_IVRS: > + case ACPI_DMT_GTDT: > case ACPI_DMT_MADT: > case ACPI_DMT_PCCT: > case ACPI_DMT_PMTT: > @@ -788,6 +811,7 @@ AcpiDmDumpTable ( > case ACPI_DMT_EINJINST: > case ACPI_DMT_ERSTACT: > case ACPI_DMT_ERSTINST: > + case ACPI_DMT_DMAR_SCOPE: > > ByteLength = 1; > break; > @@ -1119,6 +1143,19 @@ AcpiDmDumpTable ( > AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target), AcpiDmDmarSubnames[Temp16]); > break; > > + case ACPI_DMT_DMAR_SCOPE: > + > + /* DMAR device scope types */ > + > + Temp8 = *Target; > + if (Temp8 > ACPI_DMAR_SCOPE_TYPE_RESERVED) > + { > + Temp8 = ACPI_DMAR_SCOPE_TYPE_RESERVED; > + } > + > + AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmDmarScope[Temp8]); > + break; > + > case ACPI_DMT_EINJACT: > > /* EINJ Action types */ > @@ -1171,6 +1208,19 @@ AcpiDmDumpTable ( > AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmErstInstructions[Temp8]); > break; > > + case ACPI_DMT_GTDT: > + > + /* GTDT subtable types */ > + > + Temp8 = *Target; > + if (Temp8 > ACPI_GTDT_TYPE_RESERVED) > + { > + Temp8 = ACPI_GTDT_TYPE_RESERVED; > + } > + > + AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmGtdtSubnames[Temp8]); > + break; > + > case ACPI_DMT_HEST: > > /* HEST subtable types */ > diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c > index 70e9d4e..b0ae905 100644 > --- a/src/acpica/source/common/dmtbdump.c > +++ b/src/acpica/source/common/dmtbdump.c > @@ -963,18 +963,24 @@ AcpiDmDumpDmar ( > ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY); > break; > > - case ACPI_DMAR_TYPE_ATSR: > + case ACPI_DMAR_TYPE_ROOT_ATS: > > InfoTable = AcpiDmTableInfoDmar2; > ScopeOffset = sizeof (ACPI_DMAR_ATSR); > break; > > - case ACPI_DMAR_HARDWARE_AFFINITY: > + case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: > > InfoTable = AcpiDmTableInfoDmar3; > ScopeOffset = sizeof (ACPI_DMAR_RHSA); > break; > > + case ACPI_DMAR_TYPE_NAMESPACE: > + > + InfoTable = AcpiDmTableInfoDmar4; > + ScopeOffset = sizeof (ACPI_DMAR_ANDD); > + break; > + > default: > > AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", SubTable->Type); > @@ -988,7 +994,16 @@ AcpiDmDumpDmar ( > return; > } > > - /* Dump the device scope entries (if any) */ > + /* > + * Dump the optional device scope entries > + */ > + if ((SubTable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) || > + (SubTable->Type == ACPI_DMAR_TYPE_NAMESPACE)) > + { > + /* These types do not support device scopes */ > + > + goto NextSubtable; > + } > > ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, SubTable, ScopeOffset); > while (ScopeOffset < SubTable->Length) > @@ -1028,6 +1043,7 @@ AcpiDmDumpDmar ( > ScopeTable, ScopeTable->Length); > } > > +NextSubtable: > /* Point to next subtable */ > > Offset += SubTable->Length; > @@ -1227,6 +1243,123 @@ NextSubTable: > > /******************************************************************************* > * > + * FUNCTION: AcpiDmDumpGtdt > + * > + * PARAMETERS: Table - A GTDT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a GTDT. This table type consists > + * of an open-ended number of subtables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpGtdt ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_GTDT_HEADER *SubTable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_GTDT); > + ACPI_DMTABLE_INFO *InfoTable; > + UINT32 SubTableLength; > + UINT32 GtCount; > + ACPI_GTDT_TIMER_ENTRY *GtxTable; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, SubTable, > + SubTable->Length, AcpiDmTableInfoGtdtHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + GtCount = 0; > + switch (SubTable->Type) > + { > + case ACPI_GTDT_TYPE_TIMER_BLOCK: > + > + SubTableLength = sizeof (ACPI_GTDT_TIMER_BLOCK); > + GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, > + SubTable))->TimerCount; > + > + InfoTable = AcpiDmTableInfoGtdt0; > + break; > + > + case ACPI_GTDT_TYPE_WATCHDOG: > + > + SubTableLength = sizeof (ACPI_GTDT_WATCHDOG); > + > + InfoTable = AcpiDmTableInfoGtdt1; > + break; > + > + default: > + > + /* Cannot continue on unknown type - no length */ > + > + AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n", SubTable->Type); > + return; > + } > + > + Status = AcpiDmDumpTable (Length, Offset, SubTable, > + SubTable->Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to end of current subtable (each subtable above is of fixed length) */ > + > + Offset += SubTableLength; > + > + /* If there are any Gt Timer Blocks from above, dump them now */ > + > + if (GtCount) > + { > + GtxTable = ACPI_ADD_PTR (ACPI_GTDT_TIMER_ENTRY, SubTable, SubTableLength); > + SubTableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY); > + > + while (GtCount) > + { > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, GtxTable, > + sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + Offset += sizeof (ACPI_GTDT_TIMER_ENTRY); > + GtxTable++; > + GtCount--; > + } > + } > + > + /* Point to next subtable */ > + > + SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, SubTable, SubTableLength); > + } > +} > + > + > +/******************************************************************************* > + * > * FUNCTION: AcpiDmDumpHest > * > * PARAMETERS: Table - A HEST table > @@ -1734,6 +1867,16 @@ AcpiDmDumpMadt ( > InfoTable = AcpiDmTableInfoMadt12; > break; > > + case ACPI_MADT_TYPE_GENERIC_MSI_FRAME: > + > + InfoTable = AcpiDmTableInfoMadt13; > + break; > + > + case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR: > + > + InfoTable = AcpiDmTableInfoMadt14; > + break; > + > default: > > AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", SubTable->Type); > @@ -2089,6 +2232,7 @@ AcpiDmDumpPcct ( > { > ACPI_STATUS Status; > ACPI_PCCT_SUBSPACE *SubTable; > + ACPI_DMTABLE_INFO *InfoTable; > UINT32 Length = Table->Length; > UINT32 Offset = sizeof (ACPI_TABLE_PCCT); > > @@ -2116,10 +2260,20 @@ AcpiDmDumpPcct ( > return; > } > > - /* ACPI 5.0: Only one type of PCCT subtable is supported */ > - > - if (SubTable->Header.Type != ACPI_PCCT_TYPE_GENERIC_SUBSPACE) > + switch (SubTable->Header.Type) > { > + case ACPI_PCCT_TYPE_GENERIC_SUBSPACE: > + > + InfoTable = AcpiDmTableInfoPcct0; > + break; > + > + case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE: > + > + InfoTable = AcpiDmTableInfoPcct1; > + break; > + > + default: > + > AcpiOsPrintf ( > "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n", > SubTable->Header.Type); > @@ -2128,7 +2282,7 @@ AcpiDmDumpPcct ( > > AcpiOsPrintf ("\n"); > Status = AcpiDmDumpTable (Length, Offset, SubTable, > - SubTable->Header.Length, AcpiDmTableInfoPcct0); > + SubTable->Header.Length, InfoTable); > if (ACPI_FAILURE (Status)) > { > return; > @@ -2282,8 +2436,7 @@ AcpiDmDumpPmtt ( > if (DomainCount) > { > AcpiOsPrintf ( > - "\n**** DomainCount exceeds subtable length\n\n", > - MemSubTable->Type); > + "\n**** DomainCount exceeds subtable length\n\n"); > } > > /* Walk the physical component (DIMM) subtables */ > diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c > index 7a9520d..2a3bed4 100644 > --- a/src/acpica/source/common/dmtbinfo.c > +++ b/src/acpica/source/common/dmtbinfo.c > @@ -209,11 +209,16 @@ > #define ACPI_DMAR1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_RESERVED_MEMORY,f) > #define ACPI_DMAR2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_ATSR,f) > #define ACPI_DMAR3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_RHSA,f) > +#define ACPI_DMAR4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_ANDD,f) > #define ACPI_EINJ0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f) > #define ACPI_ERST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f) > #define ACPI_FPDTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f) > #define ACPI_FPDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_BOOT,f) > #define ACPI_FPDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_S3PT_PTR,f) > +#define ACPI_GTDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_BLOCK,f) > +#define ACPI_GTDT0a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_ENTRY,f) > +#define ACPI_GTDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_WATCHDOG,f) > +#define ACPI_GTDTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_HEADER,f) > #define ACPI_HEST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f) > #define ACPI_HEST1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_CORRECTED,f) > #define ACPI_HEST2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_NMI,f) > @@ -246,6 +251,8 @@ > #define ACPI_MADT10_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f) > #define ACPI_MADT11_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f) > #define ACPI_MADT12_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_DISTRIBUTOR,f) > +#define ACPI_MADT13_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_MSI_FRAME,f) > +#define ACPI_MADT14_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_REDISTRIBUTOR,f) > #define ACPI_MADTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f) > #define ACPI_MCFG0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MCFG_ALLOCATION,f) > #define ACPI_MPST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_NODE,f) > @@ -256,6 +263,7 @@ > #define ACPI_MSCT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MSCT_PROXIMITY,f) > #define ACPI_MTMR0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MTMR_ENTRY,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_PMTT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_SOCKET,f) > #define ACPI_PMTT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_CONTROLLER,f) > #define ACPI_PMTT1A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_DOMAIN,f) > @@ -288,6 +296,8 @@ > #define ACPI_SRAT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_MEM_AFFINITY,f,o) > #define ACPI_SRAT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f,o) > #define ACPI_GTDT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_GTDT,f,o) > +#define ACPI_GTDT0a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_TIMER_ENTRY,f,o) > +#define ACPI_GTDT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_WATCHDOG,f,o) > #define ACPI_LPITH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_LPIT_HEADER,f,o) > #define ACPI_MADT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_MADT,f,o) > #define ACPI_MADT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_APIC,f,o) > @@ -299,9 +309,11 @@ > #define ACPI_MADT9_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC,f,o) > #define ACPI_MADT10_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f,o) > #define ACPI_MADT11_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f,o) > +#define ACPI_MADT13_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_MSI_FRAME,f,o) > #define ACPI_MPST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MPST_POWER_NODE,f,o) > #define ACPI_MPST2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MPST_POWER_DATA,f,o) > #define ACPI_PCCT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_PCCT,f,o) > +#define ACPI_PCCT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_HW_REDUCED,f,o) > #define ACPI_PMTTH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PMTT_HEADER,f,o) > #define ACPI_WDDT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_WDDT,f,o) > #define ACPI_EINJ0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o) > @@ -512,17 +524,22 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFadt2[] = > { > {ACPI_DMT_GAS, ACPI_FADT_OFFSET (ResetRegister), "Reset Register", 0}, > {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (ResetValue), "Value to cause reset", 0}, > - {ACPI_DMT_UINT24, ACPI_FADT_OFFSET (Reserved4[0]), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (ArmBootFlags), "Reserved", 0}, > + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MinorRevision), "Reserved", 0}, > ACPI_DMT_TERMINATOR > }; > > -/* ACPI 2.0+ Extensions (FADT version 3 and 4) */ > +/* ACPI 2.0+ Extensions (FADT version 3, 4, and 5) */ > > ACPI_DMTABLE_INFO AcpiDmTableInfoFadt3[] = > { > {ACPI_DMT_GAS, ACPI_FADT_OFFSET (ResetRegister), "Reset Register", 0}, > {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (ResetValue), "Value to cause reset", 0}, > - {ACPI_DMT_UINT24, ACPI_FADT_OFFSET (Reserved4[0]), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (ArmBootFlags), "ARM Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0), "PSCI Compliant", 0}, > + {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0), "Must use HVC for PSCI", 0}, > + ACPI_DMT_NEW_LINE, > + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MinorRevision), "FADT Minor Revision", 0}, > {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (XFacs), "FACS Address", 0}, > {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (XDsdt), "DSDT Address", 0}, > {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm1aEventBlock), "PM1A Event Block", 0}, > @@ -879,7 +896,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoDmarHdr[] = > > ACPI_DMTABLE_INFO AcpiDmTableInfoDmarScope[] = > { > - {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (EntryType), "Device Scope Entry Type", 0}, > + {ACPI_DMT_DMAR_SCOPE, ACPI_DMARS_OFFSET (EntryType), "Device Scope Type", 0}, > {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Length), "Entry Length", DT_LENGTH}, > {ACPI_DMT_UINT16, ACPI_DMARS_OFFSET (Reserved), "Reserved", 0}, > {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (EnumerationId), "Enumeration ID", 0}, > @@ -931,6 +948,16 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[] = > ACPI_DMT_TERMINATOR > }; > > +/* 4: ACPI Namespace Device Declaration Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[] = > +{ > + {ACPI_DMT_UINT24, ACPI_DMAR4_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_UINT8, ACPI_DMAR4_OFFSET (DeviceNumber), "Device Number", 0}, > + {ACPI_DMT_STRING, ACPI_DMAR4_OFFSET (DeviceName[0]), "Device Name", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > > /******************************************************************************* > * > @@ -1070,29 +1097,89 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[] = > > ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt[] = > { > - {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (Address), "Timer Address", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (Flags,0), "Memory Present", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterBlockAddresss), "Counter Block Address", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (Reserved), "Reserved", 0}, > ACPI_DMT_NEW_LINE, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecurePl1Interrupt), "Secure PL1 Interrupt", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecurePl1Flags), "SPL1 Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (SecurePl1Flags,0), "Trigger Mode", 0}, > - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (SecurePl1Flags,0), "Polarity", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Interrupt), "Secure EL1 Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Flags), "EL1 Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Always On", 0}, > ACPI_DMT_NEW_LINE, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecurePl1Interrupt), "Non-Secure PL1 Interrupt", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecurePl1Flags), "NSPL1 Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecurePl1Flags,0),"Trigger Mode", 0}, > - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecurePl1Flags,0),"Polarity", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Interrupt), "Non-Secure EL1 Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Flags), "NEL1 Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Always On", 0}, > ACPI_DMT_NEW_LINE, > {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, > {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerFlags), "VT Flags (decoded below)", DT_FLAG}, > {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Trigger Mode", 0}, > {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Always On", 0}, > + ACPI_DMT_NEW_LINE, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Interrupt), "Non-Secure EL2 Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Flags), "NEL2 Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Always On", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterReadBlockAddress), "Counter Read Block Address", 0}, > ACPI_DMT_NEW_LINE, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecurePl2Interrupt), "Non-Secure PL2 Interrupt", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecurePl2Flags), "NSPL2 Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecurePl2Flags,0),"Trigger Mode", 0}, > - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecurePl2Flags,0),"Polarity", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerCount), "Platform Timer Count", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerOffset), "Platform Timer Offset", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* GTDT Subtable header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtHdr[] = > +{ > + {ACPI_DMT_GTDT, ACPI_GTDTH_OFFSET (Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT16, ACPI_GTDTH_OFFSET (Length), "Length", DT_LENGTH}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* GTDT Subtables */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0[] = > +{ > + {ACPI_DMT_UINT8, ACPI_GTDT0_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT0_OFFSET (BlockAddress), "Block Address", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerCount), "Timer Count", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerOffset), "Timer Offset", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0a[] = > +{ > + {ACPI_DMT_UINT8 , ACPI_GTDT0a_OFFSET (FrameNumber), "Frame Number", 0}, > + {ACPI_DMT_UINT24, ACPI_GTDT0a_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (El0BaseAddress), "EL0 Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerFlags), "Timer Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerFlags), "Virtual Timer Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Polarity", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (CommonFlags), "Common Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Secure", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Always On", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt1[] = > +{ > + {ACPI_DMT_UINT8, ACPI_GTDT1_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (RefreshFrameAddress), "Refresh Frame Address", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (ControlFrameAddress), "Control Frame Address", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerFlags), "Timer Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Security", 0}, > ACPI_DMT_TERMINATOR > }; > > @@ -1599,14 +1686,21 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt10[] = > ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11[] = > { > {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (GicId), "Local GIC Hardware ID", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (CpuInterfaceNumber), "CPU Interface Number", 0}, > {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Uid), "Processor UID", 0}, > {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > {ACPI_DMT_FLAG0, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Processor Enabled", 0}, > + {ACPI_DMT_FLAG1, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Performance Interrupt Trigger Mode", 0}, > + {ACPI_DMT_FLAG2, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Virtual GIC Interrupt Trigger Mode", 0}, > {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (ParkingVersion), "Parking Protocol Version", 0}, > {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (PerformanceInterrupt), "Performance Interrupt", 0}, > {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ParkedAddress), "Parked Address", 0}, > {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicvBaseAddress), "Virtual GIC Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GichBaseAddress), "Hypervisor GIC Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (VgicInterrupt), "Virtual GIC Interrupt", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicrBaseAddress), "Redistributor Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ArmMpidr), "ARM MPIDR", 0}, > ACPI_DMT_TERMINATOR > }; > > @@ -1622,6 +1716,30 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt12[] = > ACPI_DMT_TERMINATOR > }; > > +/* 13: Generic MSI Frame (ACPI 5.1) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt13[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (MsiFrameId), "MSI Frame ID", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT13_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_MADT13_FLAG_OFFSET (Flags,0), "Select SPI", 0}, > + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiCount), "SPI Count", 0}, > + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiBase), "SPI Base", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 14: Generic Redistributor (ACPI 5.1) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MADT14_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT14_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT14_OFFSET (Length), "Length", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > > /******************************************************************************* > * > @@ -1841,6 +1959,26 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[] = > ACPI_DMT_TERMINATOR > }; > > +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[] = > +{ > + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (DoorbellInterrupt), "Doorbell Interrupt", 0}, > + {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Polarity", 0}, > + {ACPI_DMT_FLAG1, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Mode", 0}, > + {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (Length), "Address Length", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT1_OFFSET (DoorbellRegister), "Doorbell Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (PreserveMask), "Preserve Mask", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (WriteMask), "Write Mask", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (Latency), "Command Latency", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, > + {ACPI_DMT_UINT16, ACPI_PCCT1_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > > /******************************************************************************* > * > diff --git a/src/acpica/source/compiler/Makefile.am b/src/acpica/source/compiler/Makefile.am > index 55eccb9..a1de14a 100644 > --- a/src/acpica/source/compiler/Makefile.am > +++ b/src/acpica/source/compiler/Makefile.am > @@ -124,6 +124,7 @@ libfwtsiasl_la_SOURCES = \ > ../components/utilities/utdebug.c \ > ../components/utilities/utdelete.c \ > ../components/utilities/utglobal.c \ > + ../components/utilities/uthex.c \ > ../components/utilities/utinit.c \ > ../components/utilities/utlock.c \ > ../components/utilities/utobject.c \ > @@ -140,6 +141,7 @@ libfwtsiasl_la_SOURCES = \ > ../components/utilities/utaddress.c \ > ../components/utilities/utownerid.c \ > ../components/utilities/utexcep.c \ > + ../components/utilities/utuuid.c \ > ../components/namespace/nsaccess.c \ > ../components/namespace/nsalloc.c \ > ../components/namespace/nsdump.c \ > diff --git a/src/acpica/source/compiler/aslanalyze.c b/src/acpica/source/compiler/aslanalyze.c > index 16e28d3..8bfc9ac 100644 > --- a/src/acpica/source/compiler/aslanalyze.c > +++ b/src/acpica/source/compiler/aslanalyze.c > @@ -641,3 +641,51 @@ ApCheckRegMethod ( > > AslError (ASL_WARNING, ASL_MSG_NO_REGION, Op, NULL); > } > + > + > +/******************************************************************************* > + * > + * FUNCTION: ApFindNameInScope > + * > + * PARAMETERS: Name - Name to search for > + * Op - Current parse op > + * > + * RETURN: TRUE if name found in the same scope as Op. > + * > + * DESCRIPTION: Determine if a name appears in the same scope as Op, as either > + * a Method() or a Name(). > + * > + ******************************************************************************/ > + > +BOOLEAN > +ApFindNameInScope ( > + char *Name, > + ACPI_PARSE_OBJECT *Op) > +{ > + ACPI_PARSE_OBJECT *Next; > + ACPI_PARSE_OBJECT *Parent; > + > + > + /* Get the start of the current scope */ > + > + Parent = Op->Asl.Parent; > + Next = Parent->Asl.Child; > + > + /* Search entire scope for a match to the name */ > + > + while (Next) > + { > + if ((Next->Asl.ParseOpcode == PARSEOP_METHOD) || > + (Next->Asl.ParseOpcode == PARSEOP_NAME)) > + { > + if (ACPI_COMPARE_NAME (Name, Next->Asl.NameSeg)) > + { > + return (TRUE); > + } > + } > + > + Next = Next->Asl.Next; > + } > + > + return (FALSE); > +} > diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h > index 6e59b0f..c4afef4 100644 > --- a/src/acpica/source/compiler/aslcompiler.h > +++ b/src/acpica/source/compiler/aslcompiler.h > @@ -347,6 +347,11 @@ void > ApCheckRegMethod ( > ACPI_PARSE_OBJECT *Op); > > +BOOLEAN > +ApFindNameInScope ( > + char *Name, > + ACPI_PARSE_OBJECT *Op); > + > > /* > * aslerror - error handling/reporting > @@ -962,10 +967,6 @@ void > UtDisplaySummary ( > UINT32 FileId); > > -UINT8 > -UtHexCharToValue ( > - int HexChar); > - > void > UtConvertByteToHex ( > UINT8 RawByte, > @@ -1027,11 +1028,6 @@ AuValidateUuid ( > char *InString); > > ACPI_STATUS > -AuConvertStringToUuid ( > - char *InString, > - char *UuIdBuffer); > - > -ACPI_STATUS > AuConvertUuidToString ( > char *UuIdBuffer, > char *OutString); > diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l > index b06aa65..bdcc8ed 100644 > --- a/src/acpica/source/compiler/aslcompiler.l > +++ b/src/acpica/source/compiler/aslcompiler.l > @@ -182,10 +182,10 @@ NamePathTail [.]{NameSeg} > [ \t] { count (0); } > > > -"/*" { if (!AslDoComment ()) yyterminate (); } > -"//" { if (!AslDoCommentType2 ()) yyterminate (); } > +"/*" { if (!AslDoComment ()) {yyterminate ();} } > +"//" { if (!AslDoCommentType2 ()) {yyterminate ();} } > > -"\"" { if (AslDoStringLiteral ()) return (PARSEOP_STRING_LITERAL); else yyterminate (); } > +"\"" { if (AslDoStringLiteral ()) {return (PARSEOP_STRING_LITERAL);} else {yyterminate ();} } > ";" { count (0); return(';'); } > > > @@ -711,9 +711,9 @@ NamePathTail [.]{NameSeg} > AslCompilererror (MsgBuffer);} > > <<EOF>> { if (AslPopInputFileStack ()) > - yyterminate(); > + {yyterminate();} > else > - return (PARSEOP_INCLUDE_END);}; > + {return (PARSEOP_INCLUDE_END);} }; > > %% > > diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h > index 71f52db..b05bd7f 100644 > --- a/src/acpica/source/compiler/asldefine.h > +++ b/src/acpica/source/compiler/asldefine.h > @@ -127,7 +127,7 @@ > #define ASL_INVOCATION_NAME "iasl" > #define ASL_CREATOR_ID "INTL" > > -#define ASL_COMPLIANCE "Supports ACPI Specification Revision 5.0A" > +#define ASL_COMPLIANCE "Supports ACPI Specification Revision 5.1" > > > /* Configuration constants */ > diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h > index 4d56c05..53a500e 100644 > --- a/src/acpica/source/compiler/aslglobal.h > +++ b/src/acpica/source/compiler/aslglobal.h > @@ -135,11 +135,6 @@ > > #ifdef _DECLARE_GLOBALS > UINT32 Gbl_ExceptionCount[ASL_NUM_REPORT_LEVELS] = {0,0,0,0,0,0}; > -char AslHexLookup[] = > -{ > - '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' > -}; > - > > /* Table below must match ASL_FILE_TYPES in asltypes.h */ > > @@ -164,7 +159,6 @@ ASL_FILE_INFO Gbl_Files [ASL_NUM_FILES] = > > #else > extern UINT32 Gbl_ExceptionCount[ASL_NUM_REPORT_LEVELS]; > -extern char AslHexLookup[]; > extern ASL_FILE_INFO Gbl_Files [ASL_NUM_FILES]; > #endif > > diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c > index 5b271d3..11b5d57 100644 > --- a/src/acpica/source/compiler/aslmessages.c > +++ b/src/acpica/source/compiler/aslmessages.c > @@ -305,6 +305,7 @@ const char *AslCompilerMsgs [] = > /* ASL_MSG_WRITE */ "Could not write file", > /* ASL_MSG_RANGE */ "Constant out of range", > /* ASL_MSG_BUFFER_ALLOCATION */ "Could not allocate line buffer", > +/* ASL_MSG_MISSING_DEPENDENCY */ "Missing dependency" > }; > > /* Table compiler */ > diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h > index 150425c..5743075 100644 > --- a/src/acpica/source/compiler/aslmessages.h > +++ b/src/acpica/source/compiler/aslmessages.h > @@ -307,6 +307,7 @@ typedef enum > ASL_MSG_WRITE, > ASL_MSG_RANGE, > ASL_MSG_BUFFER_ALLOCATION, > + ASL_MSG_MISSING_DEPENDENCY, > > /* These messages are used by the Data Table compiler only */ > > diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c > index edf2fa4..58c1cc8 100644 > --- a/src/acpica/source/compiler/aslmethod.c > +++ b/src/acpica/source/compiler/aslmethod.c > @@ -180,6 +180,17 @@ MtMethodAnalysisWalkBegin ( > > WalkInfo->MethodStack = MethodInfo; > > + /* Special handling for _DSD, must have a _HID also */ > + > + if (!ACPI_STRCMP (METHOD_NAME__DSD, Op->Asl.NameSeg)) > + { > + if (!ApFindNameInScope (METHOD_NAME__HID, Op)) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_DSD requires _HID in same scope"); > + } > + } > + > /* Get the name node */ > > Next = Op->Asl.Child; > @@ -485,6 +496,15 @@ MtMethodAnalysisWalkBegin ( > } > } > > + else if (!ACPI_STRCMP (METHOD_NAME__DSD, Op->Asl.NameSeg)) > + { > + if (!ApFindNameInScope (METHOD_NAME__HID, Op)) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_DSD requires _HID in same scope"); > + } > + } > + > break; > > default: > diff --git a/src/acpica/source/compiler/aslopcodes.c b/src/acpica/source/compiler/aslopcodes.c > index 53971e0..bd8ea0e 100644 > --- a/src/acpica/source/compiler/aslopcodes.c > +++ b/src/acpica/source/compiler/aslopcodes.c > @@ -695,10 +695,10 @@ OpcDoEisaId ( > (UINT32) ((UINT8) (InString[1] - 0x40)) << 21 | > (UINT32) ((UINT8) (InString[2] - 0x40)) << 16 | > > - (UtHexCharToValue (InString[3])) << 12 | > - (UtHexCharToValue (InString[4])) << 8 | > - (UtHexCharToValue (InString[5])) << 4 | > - UtHexCharToValue (InString[6]); > + (AcpiUtAsciiCharToHex (InString[3])) << 12 | > + (AcpiUtAsciiCharToHex (InString[4])) << 8 | > + (AcpiUtAsciiCharToHex (InString[5])) << 4 | > + AcpiUtAsciiCharToHex (InString[6]); > > /* Swap to little-endian to get final ID (see function header) */ > > @@ -738,7 +738,7 @@ OpcDoUuId ( > ACPI_PARSE_OBJECT *Op) > { > char *InString; > - char *Buffer; > + UINT8 *Buffer; > ACPI_STATUS Status = AE_OK; > ACPI_PARSE_OBJECT *NewOp; > > @@ -753,7 +753,7 @@ OpcDoUuId ( > } > else > { > - (void) AuConvertStringToUuid (InString, Buffer); > + AcpiUtConvertStringToUuid (InString, Buffer); > } > > /* Change Op to a Buffer */ > diff --git a/src/acpica/source/compiler/aslprepkg.c b/src/acpica/source/compiler/aslprepkg.c > index 2de5559..8184a3d 100644 > --- a/src/acpica/source/compiler/aslprepkg.c > +++ b/src/acpica/source/compiler/aslprepkg.c > @@ -361,6 +361,41 @@ ApCheckPackage ( > Package, 1, Count); > break; > > + case ACPI_PTYPE2_UUID_PAIR: > + > + /* The package contains a variable list of UUID Buffer/Package pairs */ > + > + /* The length of the package must be even */ > + > + if (Count & 1) > + { > + sprintf (MsgBuffer, "%4.4s: Package length, %d, must be even.", > + Predefined->Info.Name, Count); > + > + AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH, > + ParentOp->Asl.Child, MsgBuffer); > + } > + > + /* Validate the alternating types */ > + > + for (i = 0; i < Count; ++i) > + { > + if (i & 1) > + { > + ApCheckObjectType (Predefined->Info.Name, Op, > + Package->RetInfo.ObjectType2, i); > + } > + else > + { > + ApCheckObjectType (Predefined->Info.Name, Op, > + Package->RetInfo.ObjectType1, i); > + } > + > + Op = Op->Asl.Next; > + } > + > + break; > + > case ACPI_PTYPE2: > case ACPI_PTYPE2_FIXED: > case ACPI_PTYPE2_MIN: > diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c > index f33c3bd..5a02470 100644 > --- a/src/acpica/source/compiler/aslutils.c > +++ b/src/acpica/source/compiler/aslutils.c > @@ -315,37 +315,6 @@ UtEndEvent ( > > /******************************************************************************* > * > - * FUNCTION: UtHexCharToValue > - * > - * PARAMETERS: HexChar - Hex character in Ascii > - * > - * RETURN: The binary value of the hex character > - * > - * DESCRIPTION: Perform ascii-to-hex translation > - * > - ******************************************************************************/ > - > -UINT8 > -UtHexCharToValue ( > - int HexChar) > -{ > - > - if (HexChar <= 0x39) > - { > - return ((UINT8) (HexChar - 0x30)); > - } > - > - if (HexChar <= 0x46) > - { > - return ((UINT8) (HexChar - 0x37)); > - } > - > - return ((UINT8) (HexChar - 0x57)); > -} > - > - > -/******************************************************************************* > - * > * FUNCTION: UtConvertByteToHex > * > * PARAMETERS: RawByte - Binary data > @@ -368,8 +337,8 @@ UtConvertByteToHex ( > Buffer[0] = '0'; > Buffer[1] = 'x'; > > - Buffer[2] = (UINT8) AslHexLookup[(RawByte >> 4) & 0xF]; > - Buffer[3] = (UINT8) AslHexLookup[RawByte & 0xF]; > + Buffer[2] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 4); > + Buffer[3] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 0); > } > > > @@ -384,7 +353,7 @@ UtConvertByteToHex ( > * RETURN: Ascii hex byte is stored in Buffer. > * > * DESCRIPTION: Perform hex-to-ascii translation. The return data is prefixed > - * with "0x" > + * with '0', and a trailing 'h' is added. > * > ******************************************************************************/ > > @@ -395,8 +364,8 @@ UtConvertByteToAsmHex ( > { > > Buffer[0] = '0'; > - Buffer[1] = (UINT8) AslHexLookup[(RawByte >> 4) & 0xF]; > - Buffer[2] = (UINT8) AslHexLookup[RawByte & 0xF]; > + Buffer[1] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 4); > + Buffer[2] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 0); > Buffer[3] = 'h'; > } > > diff --git a/src/acpica/source/compiler/asluuid.c b/src/acpica/source/compiler/asluuid.c > index ad76c2d..98a63a3 100644 > --- a/src/acpica/source/compiler/asluuid.c > +++ b/src/acpica/source/compiler/asluuid.c > @@ -113,42 +113,13 @@ > * > *****************************************************************************/ > > - > #include "aslcompiler.h" > > #define _COMPONENT ACPI_COMPILER > ACPI_MODULE_NAME ("asluuid") > > > -/* > - * UUID support functions. > - * > - * This table is used to convert an input UUID ascii string to a 16 byte > - * buffer and the reverse. The table maps a UUID buffer index 0-15 to > - * the index within the 36-byte UUID string where the associated 2-byte > - * hex value can be found. > - * > - * 36-byte UUID strings are of the form: > - * aabbccdd-eeff-gghh-iijj-kkllmmnnoopp > - * Where aa-pp are one byte hex numbers, made up of two hex digits > - * > - * Note: This table is basically the inverse of the string-to-offset table > - * found in the ACPI spec in the description of the ToUUID macro. > - */ > -static UINT8 Gbl_MapToUuidOffset[16] = > -{ > - 6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34 > -}; > - > -#define UUID_BUFFER_LENGTH 16 > -#define UUID_STRING_LENGTH 36 > - > -/* Positions for required hyphens (dashes) in UUID strings */ > - > -#define UUID_HYPHEN1_OFFSET 8 > -#define UUID_HYPHEN2_OFFSET 13 > -#define UUID_HYPHEN3_OFFSET 18 > -#define UUID_HYPHEN4_OFFSET 23 > +extern UINT8 AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH]; > > > /******************************************************************************* > @@ -209,42 +180,6 @@ AuValidateUuid ( > > /******************************************************************************* > * > - * FUNCTION: AuConvertStringToUuid > - * > - * PARAMETERS: InString - 36-byte formatted UUID string > - * UuidBuffer - 16-byte UUID buffer > - * > - * RETURN: Status > - * > - * DESCRIPTION: Convert 36-byte formatted UUID string to 16-byte UUID buffer > - * > - ******************************************************************************/ > - > -ACPI_STATUS > -AuConvertStringToUuid ( > - char *InString, > - char *UuidBuffer) > -{ > - UINT32 i; > - > - > - if (!InString || !UuidBuffer) > - { > - return (AE_BAD_PARAMETER); > - } > - > - for (i = 0; i < UUID_BUFFER_LENGTH; i++) > - { > - UuidBuffer[i] = (char) (UtHexCharToValue (InString[Gbl_MapToUuidOffset[i]]) << 4); > - UuidBuffer[i] |= (char) UtHexCharToValue (InString[Gbl_MapToUuidOffset[i] + 1]); > - } > - > - return (AE_OK); > -} > - > - > -/******************************************************************************* > - * > * FUNCTION: AuConvertUuidToString > * > * PARAMETERS: UuidBuffer - 16-byte UUID buffer > @@ -272,8 +207,11 @@ AuConvertUuidToString ( > > for (i = 0; i < UUID_BUFFER_LENGTH; i++) > { > - OutString[Gbl_MapToUuidOffset[i]] = (UINT8) AslHexLookup[(UuidBuffer[i] >> 4) & 0xF]; > - OutString[Gbl_MapToUuidOffset[i] + 1] = (UINT8) AslHexLookup[UuidBuffer[i] & 0xF]; > + OutString[AcpiGbl_MapToUuidOffset[i]] = > + AcpiUtHexToAsciiChar (UuidBuffer[i], 4); > + > + OutString[AcpiGbl_MapToUuidOffset[i] + 1] = > + AcpiUtHexToAsciiChar (UuidBuffer[i], 0); > } > > /* Insert required hyphens (dashes) */ > diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h > index 313650a..1fb1f12 100644 > --- a/src/acpica/source/compiler/dtcompiler.h > +++ b/src/acpica/source/compiler/dtcompiler.h > @@ -492,6 +492,10 @@ DtCompileFpdt ( > void **PFieldList); > > ACPI_STATUS > +DtCompileGtdt ( > + void **PFieldList); > + > +ACPI_STATUS > DtCompileHest ( > void **PFieldList); > > diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c > index 46d56f8..e03f891 100644 > --- a/src/acpica/source/compiler/dtfield.c > +++ b/src/acpica/source/compiler/dtfield.c > @@ -331,7 +331,7 @@ DtCompileUuid ( > } > else > { > - Status = AuConvertStringToUuid (InString, (char *) Buffer); > + AcpiUtConvertStringToUuid (InString, Buffer); > } > > return (Status); > diff --git a/src/acpica/source/compiler/dttable.c b/src/acpica/source/compiler/dttable.c > index 5e310d6..db95850 100644 > --- a/src/acpica/source/compiler/dttable.c > +++ b/src/acpica/source/compiler/dttable.c > @@ -808,16 +808,21 @@ DtCompileDmar ( > InfoTable = AcpiDmTableInfoDmar1; > break; > > - case ACPI_DMAR_TYPE_ATSR: > + case ACPI_DMAR_TYPE_ROOT_ATS: > > InfoTable = AcpiDmTableInfoDmar2; > break; > > - case ACPI_DMAR_HARDWARE_AFFINITY: > + case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: > > InfoTable = AcpiDmTableInfoDmar3; > break; > > + case ACPI_DMAR_TYPE_NAMESPACE: > + > + InfoTable = AcpiDmTableInfoDmar4; > + break; > + > default: > > DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "DMAR"); > @@ -834,10 +839,20 @@ DtCompileDmar ( > > ParentTable = DtPeekSubtable (); > DtInsertSubtable (ParentTable, Subtable); > - DtPushSubtable (Subtable); > > - /* Optional Device Scope subtables */ > + /* > + * Optional Device Scope subtables > + */ > + if ((DmarHeader->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) || > + (DmarHeader->Type == ACPI_DMAR_TYPE_NAMESPACE)) > + { > + /* These types do not support device scopes */ > > + DtPopSubtable (); > + continue; > + } > + > + DtPushSubtable (Subtable); > DeviceScopeLength = DmarHeader->Length - Subtable->Length - > ParentTable->Length; > while (DeviceScopeLength) > @@ -1010,6 +1025,125 @@ DtCompileFadt ( > return (AE_OK); > } > > +/****************************************************************************** > + * > + * FUNCTION: DtCompileGtdt > + * > + * PARAMETERS: List - Current field list pointer > + * > + * RETURN: Status > + * > + * DESCRIPTION: Compile GTDT. > + * > + *****************************************************************************/ > + > +ACPI_STATUS > +DtCompileGtdt ( > + void **List) > +{ > + ACPI_STATUS Status; > + DT_SUBTABLE *Subtable; > + DT_SUBTABLE *ParentTable; > + DT_FIELD **PFieldList = (DT_FIELD **) List; > + DT_FIELD *SubtableStart; > + ACPI_SUBTABLE_HEADER *GtdtHeader; > + ACPI_DMTABLE_INFO *InfoTable; > + UINT32 GtCount; > + > + > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt, > + &Subtable, TRUE); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + > + while (*PFieldList) > + { > + SubtableStart = *PFieldList; > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdtHdr, > + &Subtable, TRUE); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + DtPushSubtable (Subtable); > + > + GtdtHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer); > + > + switch (GtdtHeader->Type) > + { > + case ACPI_GTDT_TYPE_TIMER_BLOCK: > + > + InfoTable = AcpiDmTableInfoGtdt0; > + break; > + > + case ACPI_GTDT_TYPE_WATCHDOG: > + > + InfoTable = AcpiDmTableInfoGtdt1; > + break; > + > + default: > + > + DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "GTDT"); > + return (AE_ERROR); > + } > + > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + > + /* > + * Additional GT block subtable data > + */ > + > + switch (GtdtHeader->Type) > + { > + case ACPI_GTDT_TYPE_TIMER_BLOCK: > + > + DtPushSubtable (Subtable); > + ParentTable = DtPeekSubtable (); > + > + GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, > + Subtable->Buffer - sizeof(ACPI_GTDT_HEADER)))->TimerCount; > + while (GtCount) > + { > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt0a, > + &Subtable, TRUE); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + > + DtInsertSubtable (ParentTable, Subtable); > + GtCount--; > + } > + DtPopSubtable (); > + break; > + > + default: > + > + break; > + } > + > + DtPopSubtable (); > + } > + > + return (AE_OK); > +} > + > > /****************************************************************************** > * > @@ -1573,6 +1707,16 @@ DtCompileMadt ( > InfoTable = AcpiDmTableInfoMadt12; > break; > > + case ACPI_MADT_TYPE_GENERIC_MSI_FRAME: > + > + InfoTable = AcpiDmTableInfoMadt13; > + break; > + > + case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR: > + > + InfoTable = AcpiDmTableInfoMadt14; > + break; > + > default: > > DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "MADT"); > @@ -1864,6 +2008,11 @@ DtCompilePcct ( > InfoTable = AcpiDmTableInfoPcct0; > break; > > + case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE: > + > + InfoTable = AcpiDmTableInfoPcct1; > + break; > + > default: > > DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PCCT"); > diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h > index 681d3e5..eefae69 100644 > --- a/src/acpica/source/compiler/dttemplate.h > +++ b/src/acpica/source/compiler/dttemplate.h > @@ -467,7 +467,7 @@ const unsigned char TemplateFadt[] = > 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ > 0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x01, /* 00000070 "........" */ > 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ > - 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000080 "........" */ > + 0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00, /* 00000080 "........" */ > 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000088 "........" */ > 0x00,0x00,0x00,0x00,0x01,0x20,0x00,0x02, /* 00000090 "..... .." */ > 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000098 "........" */ > @@ -506,16 +506,34 @@ const unsigned char TemplateFpdt[] = > > const unsigned char TemplateGtdt[] = > { > - 0x47,0x54,0x44,0x54,0x50,0x00,0x00,0x00, /* 00000000 "GTDTP..." */ > - 0x01,0xF1,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ > - 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ > - 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ > - 0x23,0x06,0x11,0x20,0x00,0x00,0x00,0x00, /* 00000020 "#.. ...." */ > - 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000028 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000048 "........" */ > + 0x47,0x54,0x44,0x54,0xe0,0x00,0x00,0x00, /* 00000000 "GTDT...." */ > + 0x02,0xb0,0x4c,0x49,0x4e,0x41,0x52,0x4f, /* 00000008 "..LINARO" */ > + 0x52,0x54,0x53,0x4d,0x56,0x45,0x56,0x38, /* 00000010 "RTSMVEV8" */ > + 0x01,0x00,0x00,0x00,0x49,0x4e,0x54,0x4c, /* 00000018 "....INTL" */ > + 0x24,0x04,0x14,0x20,0x00,0x00,0x00,0x00, /* 00000020 "$.. ...." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ > + 0x1d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */ > + 0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000038 "........" */ > + 0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000040 "........" */ > + 0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000048 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ > + 0x02,0x00,0x00,0x00,0x60,0x00,0x00,0x00, /* 00000058 "....`..." */ > + 0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 ".d......" */ > + 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000068 "........" */ > + 0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000070 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000088 "........" */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000090 "........" */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000098 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000a0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000a8 "........" */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000b0 "........" */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000b8 "........" */ > + 0x00,0x00,0x00,0x00,0x01,0x1c,0x00,0x00, /* 000000c0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000c8 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000d0 "........" */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000d8 "........" */ > }; > > const unsigned char TemplateHest[] = > @@ -647,41 +665,48 @@ const unsigned char TemplateLpit[] = > 0x00,0x00,0x00,0x00 /* 000000B0 "...." */ > }; > > -/* MADT with ACPI 5.0 subtables */ > +/* MADT with ACPI 5.1 subtables */ > > const unsigned char TemplateMadt[] = > { > - 0x41,0x50,0x49,0x43,0xF6,0x00,0x00,0x00, /* 00000000 "APIC...." */ > - 0x01,0xB0,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ > - 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ > - 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ > - 0x23,0x06,0x11,0x20,0x00,0x00,0x00,0x00, /* 00000020 "#.. ...." */ > + 0x41,0x50,0x49,0x43,0x2a,0x01,0x00,0x00, /* 00000000 "APIC*..." */ > + 0x04,0x34,0x49,0x4e,0x54,0x45,0x4c,0x20, /* 00000008 ".4INTEL " */ > + 0x54,0x45,0x4d,0x50,0x4c,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ > + 0x01,0x00,0x00,0x00,0x49,0x4e,0x54,0x4c, /* 00000018 "....INTL" */ > + 0x24,0x04,0x14,0x20,0x00,0x00,0x00,0x00, /* 00000020 "$.. ...." */ > 0x01,0x00,0x00,0x00,0x00,0x08,0x00,0x00, /* 00000028 "........" */ > - 0x01,0x00,0x00,0x00,0x01,0x0C,0x01,0x00, /* 00000030 "........" */ > + 0x01,0x00,0x00,0x00,0x01,0x0c,0x01,0x00, /* 00000030 "........" */ > 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ > - 0x02,0x0A,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ > - 0x00,0x00,0x03,0x08,0x0D,0x00,0x01,0x00, /* 00000048 "........" */ > + 0x02,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ > + 0x00,0x00,0x03,0x08,0x0d,0x00,0x01,0x00, /* 00000048 "........" */ > 0x00,0x00,0x04,0x06,0x00,0x05,0x00,0x01, /* 00000050 "........" */ > - 0x05,0x0C,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ > + 0x05,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ > 0x00,0x00,0x00,0x00,0x06,0x10,0x00,0x00, /* 00000060 "........" */ > 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ > 0x00,0x00,0x00,0x00,0x07,0x16,0x00,0x00, /* 00000070 "........" */ > 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000078 "........" */ > - 0x00,0x00,0x00,0x00,0x5C,0x43,0x50,0x55, /* 00000080 "....\CPU" */ > + 0x00,0x00,0x00,0x00,0x5c,0x43,0x50,0x55, /* 00000080 "....\CPU" */ > 0x30,0x00,0x08,0x10,0x05,0x00,0x00,0x00, /* 00000088 "0......." */ > 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, /* 00000090 "........" */ > 0x00,0x00,0x09,0x10,0x00,0x00,0x00,0x00, /* 00000098 "........" */ > - 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */ > - 0x00,0x00,0x0A,0x0C,0x05,0x00,0x00,0x00, /* 000000A8 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x0B,0x28, /* 000000B0 ".......(" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */ > - 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C8 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D0 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18, /* 000000D8 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E0 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E8 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00 /* 000000F0 "......" */ > + 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000a0 "........" */ > + 0x00,0x00,0x0a,0x0c,0x05,0x00,0x00,0x00, /* 000000a8 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x4c, /* 000000b0 ".......L" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000b8 "........" */ > + 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000c0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000c8 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000d0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000d8 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000e0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000e8 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000f0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000f8 "........" */ > + 0x00,0x00,0x0e,0x10,0x00,0x00,0x00,0x00, /* 00000100 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */ > + 0x00,0x00,0x0c,0x18,0x00,0x00,0x00,0x00, /* 00000110 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000118 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "........" */ > + 0x00,0x00 /* 00000128 ".. " */ > }; > > const unsigned char TemplateMcfg[] = > @@ -775,27 +800,27 @@ const unsigned char TemplateMtmr[] = > const unsigned char TemplatePcct[] = > { > 0x50,0x43,0x43,0x54,0xAC,0x00,0x00,0x00, /* 00000000 "PCCT...." */ > - 0x01,0x97,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ > - 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ > + 0x01,0xCF,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ > + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ > 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ > - 0x15,0x11,0x13,0x20,0x01,0x00,0x00,0x00, /* 00000020 "... ...." */ > + 0x27,0x06,0x14,0x20,0x01,0x00,0x00,0x00, /* 00000020 "'.. ...." */ > 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ > 0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 ".>......" */ > - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, /* 00000038 "........" */ > - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, /* 00000040 """""""""" */ > - 0x01,0x32,0x00,0x03,0x33,0x33,0x33,0x33, /* 00000048 ".2..3333" */ > - 0x33,0x33,0x33,0x33,0x44,0x44,0x44,0x44, /* 00000050 "3333DDDD" */ > - 0x44,0x44,0x44,0x44,0x55,0x55,0x55,0x55, /* 00000058 "DDDDUUUU" */ > - 0x55,0x55,0x55,0x55,0x66,0x66,0x66,0x66, /* 00000060 "UUUUffff" */ > - 0x77,0x77,0x77,0x77,0x88,0x88,0x00,0x3E, /* 00000068 "wwww...>" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, /* 00000070 "........" */ > - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEE,0xEE, /* 00000078 "........" */ > - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0x01,0x32, /* 00000080 ".......2" */ > - 0x00,0x03,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, /* 00000088 "........" */ > - 0xDD,0xDD,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, /* 00000090 "........" */ > - 0xCC,0xCC,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, /* 00000098 "........" */ > - 0xBB,0xBB,0xAA,0xAA,0xAA,0xAA,0x99,0x99, /* 000000A0 "........" */ > - 0x99,0x99,0x88,0x88 /* 000000A8 "...." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ > + 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ > + 0x01,0x32,0x00,0x03,0x00,0x00,0x00,0x00, /* 00000048 ".2......" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ > + 0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, /* 00000058 "........" */ > + 0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00, /* 00000060 "........" */ > + 0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x3E, /* 00000068 ".......>" */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000070 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00, /* 00000078 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x32, /* 00000080 ".......2" */ > + 0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000090 "........" */ > + 0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000098 "........" */ > + 0xFF,0xFF,0x01,0x00,0x00,0x00,0x01,0x00, /* 000000A0 "........" */ > + 0x00,0x00,0x01,0x00 /* 000000A8 "...." */ > }; > > const unsigned char TemplatePmtt[] = > diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c > index d3cedf1..51d50c7 100644 > --- a/src/acpica/source/compiler/dtutils.c > +++ b/src/acpica/source/compiler/dtutils.c > @@ -573,6 +573,7 @@ DtGetFieldLength ( > case ACPI_DMT_SPACEID: > case ACPI_DMT_ACCWIDTH: > case ACPI_DMT_IVRS: > + case ACPI_DMT_GTDT: > case ACPI_DMT_MADT: > case ACPI_DMT_PCCT: > case ACPI_DMT_PMTT: > @@ -584,6 +585,7 @@ DtGetFieldLength ( > case ACPI_DMT_EINJINST: > case ACPI_DMT_ERSTACT: > case ACPI_DMT_ERSTINST: > + case ACPI_DMT_DMAR_SCOPE: > > ByteLength = 1; > break; > diff --git a/src/acpica/source/components/disassembler/dmbuffer.c b/src/acpica/source/components/disassembler/dmbuffer.c > index 70d28e3..a43497c 100644 > --- a/src/acpica/source/components/disassembler/dmbuffer.c > +++ b/src/acpica/source/components/disassembler/dmbuffer.c > @@ -113,9 +113,9 @@ > * > *****************************************************************************/ > > - > #include "acpi.h" > #include "accommon.h" > +#include "acutils.h" > #include "acdisasm.h" > #include "acparser.h" > #include "amlcode.h" > @@ -130,6 +130,10 @@ > /* Local prototypes */ > > static void > +AcpiDmUuid ( > + ACPI_PARSE_OBJECT *Op); > + > +static void > AcpiDmUnicode ( > ACPI_PARSE_OBJECT *Op); > > @@ -143,6 +147,7 @@ AcpiDmPldBuffer ( > UINT8 *ByteData, > UINT32 ByteCount); > > + > #define ACPI_BUFFER_BYTES_PER_LINE 8 > > > @@ -288,6 +293,11 @@ AcpiDmByteList ( > AcpiOsPrintf ("\n"); > break; > > + case ACPI_DASM_UUID: > + > + AcpiDmUuid (Op); > + break; > + > case ACPI_DASM_UNICODE: > > AcpiDmUnicode (Op); > @@ -313,6 +323,137 @@ AcpiDmByteList ( > > /******************************************************************************* > * > + * FUNCTION: AcpiDmIsUuidBuffer > + * > + * PARAMETERS: Op - Buffer Object to be examined > + * > + * RETURN: TRUE if buffer contains a UUID > + * > + * DESCRIPTION: Determine if a buffer Op contains a UUID > + * > + * To help determine whether the buffer is a UUID versus a raw data buffer, > + * there a are a couple bytes we can look at: > + * > + * xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx > + * > + * The variant covered by the UUID specification is indicated by the two most > + * significant bits of N being 1 0 (i.e., the hexadecimal N will always be > + * 8, 9, A, or B). > + * > + * The variant covered by the UUID specification has five versions. For this > + * variant, the four bits of M indicates the UUID version (i.e., the > + * hexadecimal M will be either 1, 2, 3, 4, or 5). > + * > + ******************************************************************************/ > + > +BOOLEAN > +AcpiDmIsUuidBuffer ( > + ACPI_PARSE_OBJECT *Op) > +{ > + UINT8 *ByteData; > + UINT32 ByteCount; > + ACPI_PARSE_OBJECT *SizeOp; > + ACPI_PARSE_OBJECT *NextOp; > + > + > + /* Buffer size is the buffer argument */ > + > + SizeOp = Op->Common.Value.Arg; > + > + /* Next, the initializer byte list to examine */ > + > + NextOp = SizeOp->Common.Next; > + if (!NextOp) > + { > + return (FALSE); > + } > + > + /* Extract the byte list info */ > + > + ByteData = NextOp->Named.Data; > + ByteCount = (UINT32) NextOp->Common.Value.Integer; > + > + /* Byte count must be exactly 16 */ > + > + if (ByteCount != UUID_BUFFER_LENGTH) > + { > + return (FALSE); > + } > + > + /* Check for valid "M" and "N" values (see function header above) */ > + > + if (((ByteData[7] & 0xF0) == 0x00) || /* M={1,2,3,4,5} */ > + ((ByteData[7] & 0xF0) > 0x50) || > + ((ByteData[8] & 0xF0) < 0x80) || /* N={8,9,A,B} */ > + ((ByteData[8] & 0xF0) > 0xB0)) > + { > + return (FALSE); > + } > + > + /* Ignore the Size argument in the disassembly of this buffer op */ > + > + SizeOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; > + return (TRUE); > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmUuid > + * > + * PARAMETERS: Op - Byte List op containing a UUID > + * > + * RETURN: None > + * > + * DESCRIPTION: Dump a buffer containing a UUID as a standard ASCII string. > + * > + * Output Format: > + * In its canonical form, the UUID is represented by a string containing 32 > + * lowercase hexadecimal digits, displayed in 5 groups separated by hyphens. > + * The complete form is 8-4-4-4-12 for a total of 36 characters (32 > + * alphanumeric characters representing hex digits and 4 hyphens). In bytes, > + * 4-2-2-2-6. Example: > + * > + * ToUUID ("107ededd-d381-4fd7-8da9-08e9a6c79644") > + * > + ******************************************************************************/ > + > +static void > +AcpiDmUuid ( > + ACPI_PARSE_OBJECT *Op) > +{ > + UINT8 *Data; > + const char *Description; > + > + > + Data = ACPI_CAST_PTR (UINT8, Op->Named.Data); > + > + /* Emit the 36-byte UUID string in the proper format/order */ > + > + AcpiOsPrintf ( > + "\"%2.2x%2.2x%2.2x%2.2x-" > + "%2.2x%2.2x-" > + "%2.2x%2.2x-" > + "%2.2x%2.2x-" > + "%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\")", > + Data[3], Data[2], Data[1], Data[0], > + Data[5], Data[4], > + Data[7], Data[6], > + Data[8], Data[9], > + Data[10], Data[11], Data[12], Data[13], Data[14], Data[15]); > + > + /* Dump the UUID description string if available */ > + > + Description = AcpiAhMatchUuid (Data); > + if (Description) > + { > + AcpiOsPrintf (" /* %s */", Description); > + } > +} > + > + > +/******************************************************************************* > + * > * FUNCTION: AcpiDmIsUnicodeBuffer > * > * PARAMETERS: Op - Buffer Object to be examined > diff --git a/src/acpica/source/components/disassembler/dmopcode.c b/src/acpica/source/components/disassembler/dmopcode.c > index db30c00..d15e215 100644 > --- a/src/acpica/source/components/disassembler/dmopcode.c > +++ b/src/acpica/source/components/disassembler/dmopcode.c > @@ -899,7 +899,12 @@ AcpiDmDisassembleOneOp ( > } > } > > - if (AcpiDmIsUnicodeBuffer (Op)) > + if (AcpiDmIsUuidBuffer (Op)) > + { > + Op->Common.DisasmOpcode = ACPI_DASM_UUID; > + AcpiOsPrintf ("ToUUID ("); > + } > + else if (AcpiDmIsUnicodeBuffer (Op)) > { > Op->Common.DisasmOpcode = ACPI_DASM_UNICODE; > AcpiOsPrintf ("Unicode ("); > diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c > index 8c877ae..1f63e08 100644 > --- a/src/acpica/source/components/disassembler/dmwalk.c > +++ b/src/acpica/source/components/disassembler/dmwalk.c > @@ -357,7 +357,8 @@ AcpiDmBlockType ( > > case AML_BUFFER_OP: > > - if (Op->Common.DisasmOpcode == ACPI_DASM_UNICODE) > + if ((Op->Common.DisasmOpcode == ACPI_DASM_UNICODE) || > + (Op->Common.DisasmOpcode == ACPI_DASM_UUID)) > { > return (BLOCK_NONE); > } > diff --git a/src/acpica/source/components/events/evgpe.c b/src/acpica/source/components/events/evgpe.c > index bb955ac..ea1a3a6 100644 > --- a/src/acpica/source/components/events/evgpe.c > +++ b/src/acpica/source/components/events/evgpe.c > @@ -833,22 +833,6 @@ AcpiEvGpeDispatch ( > } > > /* > - * If edge-triggered, clear the GPE status bit now. Note that > - * level-triggered events are cleared after the GPE is serviced. > - */ > - if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == > - ACPI_GPE_EDGE_TRIGGERED) > - { > - Status = AcpiHwClearGpe (GpeEventInfo); > - if (ACPI_FAILURE (Status)) > - { > - ACPI_EXCEPTION ((AE_INFO, Status, > - "Unable to clear GPE %02X", GpeNumber)); > - return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED); > - } > - } > - > - /* > * Always disable the GPE so that it does not keep firing before > * any asynchronous activity completes (either from the execution > * of a GPE method or an asynchronous GPE handler.) > @@ -866,6 +850,24 @@ AcpiEvGpeDispatch ( > } > > /* > + * If edge-triggered, clear the GPE status bit now. Note that > + * level-triggered events are cleared after the GPE is serviced. > + */ > + if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == > + ACPI_GPE_EDGE_TRIGGERED) > + { > + Status = AcpiHwClearGpe (GpeEventInfo); > + if (ACPI_FAILURE (Status)) > + { > + ACPI_EXCEPTION ((AE_INFO, Status, > + "Unable to clear GPE %02X", GpeNumber)); > + (void) AcpiHwLowSetGpe (GpeEventInfo, > + ACPI_GPE_CONDITIONAL_ENABLE); > + return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED); > + } > + } > + > + /* > * Dispatch the GPE to either an installed handler or the control > * method associated with this GPE (_Lxx or _Exx). If a handler > * exists, we invoke it and do not attempt to run the method. > diff --git a/src/acpica/source/components/events/evxfgpe.c b/src/acpica/source/components/events/evxfgpe.c > index e180bd3..b116322 100644 > --- a/src/acpica/source/components/events/evxfgpe.c > +++ b/src/acpica/source/components/events/evxfgpe.c > @@ -213,12 +213,23 @@ AcpiEnableGpe ( > > Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); > > - /* Ensure that we have a valid GPE number */ > - > + /* > + * Ensure that we have a valid GPE number and that there is some way > + * of handling the GPE (handler or a GPE method). In other words, we > + * won't allow a valid GPE to be enabled if there is no way to handle it. > + */ > GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); > if (GpeEventInfo) > { > - Status = AcpiEvAddGpeReference (GpeEventInfo); > + if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) != > + ACPI_GPE_DISPATCH_NONE) > + { > + Status = AcpiEvAddGpeReference (GpeEventInfo); > + } > + else > + { > + Status = AE_NO_HANDLER; > + } > } > > AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); > @@ -348,6 +359,60 @@ ACPI_EXPORT_SYMBOL (AcpiSetGpe) > > /******************************************************************************* > * > + * FUNCTION: AcpiMarkGpeForWake > + * > + * PARAMETERS: GpeDevice - Parent GPE Device. NULL for GPE0/GPE1 > + * GpeNumber - GPE level within the GPE block > + * > + * RETURN: Status > + * > + * DESCRIPTION: Mark a GPE as having the ability to wake the system. Simply > + * sets the ACPI_GPE_CAN_WAKE flag. > + * > + * Some potential callers of AcpiSetupGpeForWake may know in advance that > + * there won't be any notify handlers installed for device wake notifications > + * from the given GPE (one example is a button GPE in Linux). For these cases, > + * AcpiMarkGpeForWake should be used instead of AcpiSetupGpeForWake. > + * This will set the ACPI_GPE_CAN_WAKE flag for the GPE without trying to > + * setup implicit wake notification for it (since there's no handler method). > + * > + ******************************************************************************/ > + > +ACPI_STATUS > +AcpiMarkGpeForWake ( > + ACPI_HANDLE GpeDevice, > + UINT32 GpeNumber) > +{ > + ACPI_GPE_EVENT_INFO *GpeEventInfo; > + ACPI_STATUS Status = AE_BAD_PARAMETER; > + ACPI_CPU_FLAGS Flags; > + > + > + ACPI_FUNCTION_TRACE (AcpiMarkGpeForWake); > + > + > + Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); > + > + /* Ensure that we have a valid GPE number */ > + > + GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); > + if (GpeEventInfo) > + { > + /* Mark the GPE as a possible wake event */ > + > + GpeEventInfo->Flags |= ACPI_GPE_CAN_WAKE; > + Status = AE_OK; > + } > + > + AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); > + return_ACPI_STATUS (Status); > +} > + > +ACPI_EXPORT_SYMBOL (AcpiMarkGpeForWake) > + > + > +/******************************************************************************* > + * > * FUNCTION: AcpiSetupGpeForWake > * > * PARAMETERS: WakeDevice - Device associated with the GPE (via _PRW) > diff --git a/src/acpica/source/components/executer/exdebug.c b/src/acpica/source/components/executer/exdebug.c > index e374e13..b7d47fd 100644 > --- a/src/acpica/source/components/executer/exdebug.c > +++ b/src/acpica/source/components/executer/exdebug.c > @@ -154,6 +154,7 @@ AcpiExDoDebugObject ( > UINT32 Index) > { > UINT32 i; > + UINT32 Timer; > > > ACPI_FUNCTION_TRACE_PTR (ExDoDebugObject, SourceDesc); > @@ -168,12 +169,20 @@ AcpiExDoDebugObject ( > } > > /* > + * We will emit the current timer value (in microseconds) with each > + * debug output. Only need the lower 26 bits. This allows for 67 > + * million microseconds or 67 seconds before rollover. > + */ > + Timer = (UINT32) (AcpiOsGetTimer () / 10); /* (100 nanoseconds to microseconds) */ > + Timer &= 0x03FFFFFF; > + > + /* > * Print line header as long as we are not in the middle of an > * object display > */ > if (!((Level > 0) && Index == 0)) > { > - AcpiOsPrintf ("[ACPI Debug] %*s", Level, " "); > + AcpiOsPrintf ("[ACPI Debug %.8u] %*s", Timer, Level, " "); > } > > /* Display the index for package output only */ > diff --git a/src/acpica/source/components/executer/exdump.c b/src/acpica/source/components/executer/exdump.c > index 7f66714..68a0054 100644 > --- a/src/acpica/source/components/executer/exdump.c > +++ b/src/acpica/source/components/executer/exdump.c > @@ -580,7 +580,7 @@ AcpiExDumpObject ( > } > } > > - AcpiOsPrintf ("\n", Next); > + AcpiOsPrintf ("\n"); > break; > > case ACPI_EXD_HDLR_LIST: > @@ -614,7 +614,7 @@ AcpiExDumpObject ( > } > } > > - AcpiOsPrintf ("\n", Next); > + AcpiOsPrintf ("\n"); > break; > > case ACPI_EXD_RGN_LIST: > @@ -648,7 +648,7 @@ AcpiExDumpObject ( > } > } > > - AcpiOsPrintf ("\n", Next); > + AcpiOsPrintf ("\n"); > break; > > case ACPI_EXD_NODE: > diff --git a/src/acpica/source/components/executer/exfield.c b/src/acpica/source/components/executer/exfield.c > index e8ddec8..55934de 100644 > --- a/src/acpica/source/components/executer/exfield.c > +++ b/src/acpica/source/components/executer/exfield.c > @@ -275,14 +275,13 @@ AcpiExReadDataFromField ( > Length = AcpiExGetSerialAccessLength (AccessorType, > ObjDesc->Field.AccessLength); > > - /* > - * Add additional 2 bytes for modeled GenericSerialBus data buffer: > - * typedef struct { > - * BYTEStatus; // Byte 0 of the data buffer > - * BYTELength; // Byte 1 of the data buffer > - * BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer, > - * } > - */ > + /* > + * Add additional 2 bytes for the GenericSerialBus data buffer: > + * > + * Status; (Byte 0 of the data buffer) > + * Length; (Byte 1 of the data buffer) > + * Data[x-1]; (Bytes 2-x of the arbitrary length data buffer) > + */ > Length += 2; > Function = ACPI_READ | (AccessorType << 16); > } > @@ -469,14 +468,13 @@ AcpiExWriteDataToField ( > Length = AcpiExGetSerialAccessLength (AccessorType, > ObjDesc->Field.AccessLength); > > - /* > - * Add additional 2 bytes for modeled GenericSerialBus data buffer: > - * typedef struct { > - * BYTEStatus; // Byte 0 of the data buffer > - * BYTELength; // Byte 1 of the data buffer > - * BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer, > - * } > - */ > + /* > + * Add additional 2 bytes for the GenericSerialBus data buffer: > + * > + * Status; (Byte 0 of the data buffer) > + * Length; (Byte 1 of the data buffer) > + * Data[x-1]; (Bytes 2-x of the arbitrary length data buffer) > + */ > Length += 2; > Function = ACPI_WRITE | (AccessorType << 16); > } > diff --git a/src/acpica/source/components/namespace/nsobject.c b/src/acpica/source/components/namespace/nsobject.c > index 060157b..74470f0 100644 > --- a/src/acpica/source/components/namespace/nsobject.c > +++ b/src/acpica/source/components/namespace/nsobject.c > @@ -335,17 +335,16 @@ AcpiNsDetachObject ( > { > Node->Object = Node->Object->Common.NextObject; > } > - } > > - /* > - * Detach the object from any data objects (which are still held by > - * the namespace node) > - */ > - > - if (ObjDesc->Common.NextObject && > - ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA)) > - { > - ObjDesc->Common.NextObject = NULL; > + /* > + * Detach the object from any data objects (which are still held by > + * the namespace node) > + */ > + if (ObjDesc->Common.NextObject && > + ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA)) > + { > + ObjDesc->Common.NextObject = NULL; > + } > } > > /* Reset the node type to untyped */ > diff --git a/src/acpica/source/components/utilities/utdecode.c b/src/acpica/source/components/utilities/utdecode.c > index 8566819..61826fe 100644 > --- a/src/acpica/source/components/utilities/utdecode.c > +++ b/src/acpica/source/components/utilities/utdecode.c > @@ -165,38 +165,6 @@ const UINT8 AcpiGbl_NsProperties[ACPI_NUM_NS_TYPES] = > > /******************************************************************************* > * > - * FUNCTION: AcpiUtHexToAsciiChar > - * > - * PARAMETERS: Integer - Contains the hex digit > - * Position - bit position of the digit within the > - * integer (multiple of 4) > - * > - * RETURN: The converted Ascii character > - * > - * DESCRIPTION: Convert a hex digit to an Ascii character > - * > - ******************************************************************************/ > - > -/* Hex to ASCII conversion table */ > - > -static const char AcpiGbl_HexToAscii[] = > -{ > - '0','1','2','3','4','5','6','7', > - '8','9','A','B','C','D','E','F' > -}; > - > -char > -AcpiUtHexToAsciiChar ( > - UINT64 Integer, > - UINT32 Position) > -{ > - > - return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]); > -} > - > - > -/******************************************************************************* > - * > * FUNCTION: AcpiUtGetRegionName > * > * PARAMETERS: Space ID - ID for the region > @@ -613,7 +581,8 @@ static const char *AcpiGbl_GenericNotify[ACPI_NOTIFY_MAX + 1] = > /* 09 */ "Device PLD Check", > /* 0A */ "Reserved", > /* 0B */ "System Locality Update", > - /* 0C */ "Shutdown Request" > + /* 0C */ "Shutdown Request", > + /* 0D */ "System Resource Affinity Update" > }; > > static const char *AcpiGbl_DeviceNotify[4] = > @@ -647,7 +616,7 @@ AcpiUtGetNotifyName ( > ACPI_OBJECT_TYPE Type) > { > > - /* 00 - 0C are common to all object types */ > + /* 00 - 0D are common to all object types */ > > if (NotifyValue <= ACPI_NOTIFY_MAX) > { > diff --git a/src/acpica/source/components/utilities/utfileio.c b/src/acpica/source/components/utilities/utfileio.c > index 78807f2..9501e22 100644 > --- a/src/acpica/source/components/utilities/utfileio.c > +++ b/src/acpica/source/components/utilities/utfileio.c > @@ -304,8 +304,7 @@ AcpiUtReadTable ( > Status = FlCheckForAscii (fp, NULL, FALSE); > if (ACPI_SUCCESS (Status)) > { > - AcpiOsPrintf ("File appears to be ASCII only, must be binary\n", > - TableHeader.Length, FileSize); > + AcpiOsPrintf ("File appears to be ASCII only, must be binary\n"); > } > #endif > return (AE_BAD_HEADER); > diff --git a/src/acpica/source/components/utilities/uthex.c b/src/acpica/source/components/utilities/uthex.c > new file mode 100644 > index 0000000..ba2b259 > --- /dev/null > +++ b/src/acpica/source/components/utilities/uthex.c > @@ -0,0 +1,185 @@ > +/****************************************************************************** > + * > + * Module Name: uthex -- Hex/ASCII support functions > + * > + *****************************************************************************/ > + > +/****************************************************************************** > + * > + * 1. Copyright Notice > + * > + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp. > + * All rights reserved. > + * > + * 2. License > + * > + * 2.1. This is your license from Intel Corp. under its intellectual property > + * rights. You may have additional license terms from the party that provided > + * you this software, covering your right to use that party's intellectual > + * property rights. > + * > + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a > + * copy of the source code appearing in this file ("Covered Code") an > + * irrevocable, perpetual, worldwide license under Intel's copyrights in the > + * base code distributed originally by Intel ("Original Intel Code") to copy, > + * make derivatives, distribute, use and display any portion of the Covered > + * Code in any form, with the right to sublicense such rights; and > + * > + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent > + * license (with the right to sublicense), under only those claims of Intel > + * patents that are infringed by the Original Intel Code, to make, use, sell, > + * offer to sell, and import the Covered Code and derivative works thereof > + * solely to the minimum extent necessary to exercise the above copyright > + * license, and in no event shall the patent license extend to any additions > + * to or modifications of the Original Intel Code. No other license or right > + * is granted directly or by implication, estoppel or otherwise; > + * > + * The above copyright and patent license is granted only if the following > + * conditions are met: > + * > + * 3. Conditions > + * > + * 3.1. Redistribution of Source with Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification with rights to further distribute source must include > + * the above Copyright Notice, the above License, this list of Conditions, > + * and the following Disclaimer and Export Compliance provision. In addition, > + * Licensee must cause all Covered Code to which Licensee contributes to > + * contain a file documenting the changes Licensee made to create that Covered > + * Code and the date of any change. Licensee must include in that file the > + * documentation of any changes made by any predecessor Licensee. Licensee > + * must include a prominent statement that the modification is derived, > + * directly or indirectly, from Original Intel Code. > + * > + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification without rights to further distribute source must > + * include the following Disclaimer and Export Compliance provision in the > + * documentation and/or other materials provided with distribution. In > + * addition, Licensee may not authorize further sublicense of source of any > + * portion of the Covered Code, and must include terms to the effect that the > + * license from Licensee to its licensee is limited to the intellectual > + * property embodied in the software Licensee provides to its licensee, and > + * not to intellectual property embodied in modifications its licensee may > + * make. > + * > + * 3.3. Redistribution of Executable. Redistribution in executable form of any > + * substantial portion of the Covered Code or modification must reproduce the > + * above Copyright Notice, and the following Disclaimer and Export Compliance > + * provision in the documentation and/or other materials provided with the > + * distribution. > + * > + * 3.4. Intel retains all right, title, and interest in and to the Original > + * Intel Code. > + * > + * 3.5. Neither the name Intel nor any other trademark owned or controlled by > + * Intel shall be used in advertising or otherwise to promote the sale, use or > + * other dealings in products derived from or relating to the Covered Code > + * without prior written authorization from Intel. > + * > + * 4. Disclaimer and Export Compliance > + * > + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED > + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE > + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, > + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY > + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY > + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A > + * PARTICULAR PURPOSE. > + * > + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES > + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR > + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, > + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY > + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL > + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS > + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY > + * LIMITED REMEDY. > + * > + * 4.3. Licensee shall not export, either directly or indirectly, any of this > + * software or system incorporating such software without first obtaining any > + * required license or other approval from the U. S. Department of Commerce or > + * any other agency or department of the United States Government. In the > + * event Licensee exports any such software from the United States or > + * re-exports any such software from a foreign destination, Licensee shall > + * ensure that the distribution and export/re-export of the software is in > + * compliance with all laws, regulations, orders, or other restrictions of the > + * U.S. Export Administration Regulations. Licensee agrees that neither it nor > + * any of its subsidiaries will export/re-export any technical data, process, > + * software, or service, directly or indirectly, to any country for which the > + * United States government or any agency thereof requires an export license, > + * other governmental approval, or letter of assurance, without first obtaining > + * such license, approval or letter. > + * > + *****************************************************************************/ > + > +#define __UTHEX_C__ > + > +#include "acpi.h" > +#include "accommon.h" > + > +#define _COMPONENT ACPI_COMPILER > + ACPI_MODULE_NAME ("uthex") > + > + > +/* Hex to ASCII conversion table */ > + > +static char AcpiGbl_HexToAscii[] = > +{ > + '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' > +}; > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiUtHexToAsciiChar > + * > + * PARAMETERS: Integer - Contains the hex digit > + * Position - bit position of the digit within the > + * integer (multiple of 4) > + * > + * RETURN: The converted Ascii character > + * > + * DESCRIPTION: Convert a hex digit to an Ascii character > + * > + ******************************************************************************/ > + > +char > +AcpiUtHexToAsciiChar ( > + UINT64 Integer, > + UINT32 Position) > +{ > + > + return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]); > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiUtHexCharToValue > + * > + * PARAMETERS: AsciiChar - Hex character in Ascii > + * > + * RETURN: The binary value of the ascii/hex character > + * > + * DESCRIPTION: Perform ascii-to-hex translation > + * > + ******************************************************************************/ > + > +UINT8 > +AcpiUtAsciiCharToHex ( > + int HexChar) > +{ > + > + if (HexChar <= 0x39) > + { > + return ((UINT8) (HexChar - 0x30)); > + } > + > + if (HexChar <= 0x46) > + { > + return ((UINT8) (HexChar - 0x37)); > + } > + > + return ((UINT8) (HexChar - 0x57)); > +} > diff --git a/src/acpica/source/components/utilities/utprint.c b/src/acpica/source/components/utilities/utprint.c > index d1bcccf..543bad8 100644 > --- a/src/acpica/source/components/utilities/utprint.c > +++ b/src/acpica/source/components/utilities/utprint.c > @@ -160,6 +160,12 @@ AcpiUtPutNumber ( > BOOLEAN Upper); > > > +/* Module globals */ > + > +static const char AcpiGbl_LowerHexDigits[] = "0123456789abcdef"; > +static const char AcpiGbl_UpperHexDigits[] = "0123456789ABCDEF"; > + > + > /******************************************************************************* > * > * FUNCTION: AcpiUtBoundStringLength > @@ -167,7 +173,7 @@ AcpiUtPutNumber ( > * PARAMETERS: String - String with boundary > * Count - Boundary of the string > * > - * RETURN: Length of the string. > + * RETURN: Length of the string. Less than or equal to Count. > * > * DESCRIPTION: Calculate the length of a string with boundary. > * > @@ -217,8 +223,8 @@ AcpiUtBoundStringOutput ( > { > *String = c; > } > - ++String; > > + ++String; > return (String); > } > > @@ -246,15 +252,13 @@ AcpiUtPutNumber ( > UINT8 Base, > BOOLEAN Upper) > { > - const char LowerDigits[] = "0123456789abcdef"; > - const char UpperDigits[] = "0123456789ABCDEF"; > const char *Digits; > UINT64 DigitIndex; > char *Pos; > > > Pos = String; > - Digits = Upper ? UpperDigits : LowerDigits; > + Digits = Upper ? AcpiGbl_UpperHexDigits : AcpiGbl_LowerHexDigits; > > if (Number == 0) > { > @@ -268,8 +272,8 @@ AcpiUtPutNumber ( > *(Pos++) = Digits[DigitIndex]; > } > } > - /* *(Pos++) = '0'; */ > > + /* *(Pos++) = '0'; */ > return (Pos); > } > > @@ -300,8 +304,8 @@ AcpiUtScanNumber ( > Number *= 10; > Number += *(String++) - '0'; > } > - *NumberPtr = Number; > > + *NumberPtr = Number; > return (String); > } > > @@ -336,8 +340,8 @@ AcpiUtPrintNumber ( > { > *(Pos2++) = *(--Pos1); > } > - *Pos2 = 0; > > + *Pos2 = 0; > return (String); > } > > @@ -370,6 +374,7 @@ AcpiUtFormatNumber ( > INT32 Precision, > UINT8 Type) > { > + char *Pos; > char Sign; > char Zero; > BOOLEAN NeedPrefix; > @@ -378,12 +383,13 @@ AcpiUtFormatNumber ( > char ReversedString[66]; > > > - /* Perform sanity checks */ > + /* Parameter validation */ > > if (Base < 2 || Base > 16) > { > - return NULL; > + return (NULL); > } > + > if (Type & ACPI_FORMAT_LEFT) > { > Type &= ~ACPI_FORMAT_ZERO; > @@ -426,9 +432,8 @@ AcpiUtFormatNumber ( > > /* Generate full string in reverse order */ > > - i = ACPI_PTR_DIFF ( > - AcpiUtPutNumber (ReversedString, Number, Base, Upper), > - ReversedString); > + Pos = AcpiUtPutNumber (ReversedString, Number, Base, Upper); > + i = ACPI_PTR_DIFF (Pos, ReversedString); > > /* Printing 100 using %2d gives "100", not "00" */ > > @@ -436,6 +441,7 @@ AcpiUtFormatNumber ( > { > Precision = i; > } > + > Width -= Precision; > > /* Output the string */ > @@ -458,7 +464,7 @@ AcpiUtFormatNumber ( > { > String = AcpiUtBoundStringOutput (String, End, > Upper ? 'X' : 'x'); > - } > + } > } > if (!(Type & ACPI_FORMAT_LEFT)) > { > @@ -467,6 +473,7 @@ AcpiUtFormatNumber ( > String = AcpiUtBoundStringOutput (String, End, Zero); > } > } > + > while (i <= --Precision) > { > String = AcpiUtBoundStringOutput (String, End, '0'); > @@ -494,7 +501,7 @@ AcpiUtFormatNumber ( > * Format - Standard printf format > * Args - Argument list > * > - * RETURN: Size of successfully output bytes > + * RETURN: Number of bytes actually written. > * > * DESCRIPTION: Formatted output to a string using argument list pointer. > * > @@ -525,7 +532,7 @@ AcpiUtVsnprintf ( > Pos = String; > End = String + Size; > > - for (; *Format ; ++Format) > + for (; *Format; ++Format) > { > if (*Format != '%') > { > @@ -566,6 +573,7 @@ AcpiUtVsnprintf ( > > /* Process width */ > > + Width = -1; > if (ACPI_IS_DIGIT (*Format)) > { > Format = AcpiUtScanNumber (Format, &Number); > @@ -574,7 +582,7 @@ AcpiUtVsnprintf ( > else if (*Format == '*') > { > ++Format; > - Width = va_arg(Args, int); > + Width = va_arg (Args, int); > if (Width < 0) > { > Width = -Width; > @@ -584,6 +592,7 @@ AcpiUtVsnprintf ( > > /* Process precision */ > > + Precision = -1; > if (*Format == '.') > { > ++Format; > @@ -595,7 +604,7 @@ AcpiUtVsnprintf ( > else if (*Format == '*') > { > ++Format; > - Precision = va_arg(Args, int); > + Precision = va_arg (Args, int); > } > if (Precision < 0) > { > @@ -605,10 +614,12 @@ AcpiUtVsnprintf ( > > /* Process qualifier */ > > + Qualifier = -1; > if (*Format == 'h' || *Format == 'l' || *Format == 'L') > { > Qualifier = *Format; > ++Format; > + > if (Qualifier == 'l' && *Format == 'l') > { > Qualifier = 'L'; > @@ -632,8 +643,10 @@ AcpiUtVsnprintf ( > Pos = AcpiUtBoundStringOutput (Pos, End, ' '); > } > } > + > c = (char) va_arg (Args, int); > Pos = AcpiUtBoundStringOutput (Pos, End, c); > + > while (--Width > 0) > { > Pos = AcpiUtBoundStringOutput (Pos, End, ' '); > @@ -696,10 +709,10 @@ AcpiUtVsnprintf ( > Width = 2 * sizeof (void *); > Type |= ACPI_FORMAT_ZERO; > } > + > p = va_arg (Args, void *); > Pos = AcpiUtFormatNumber (Pos, End, > - ACPI_TO_INTEGER (p), > - 16, Width, Precision, Type); > + ACPI_TO_INTEGER (p), 16, Width, Precision, Type); > continue; > > default: > @@ -748,7 +761,8 @@ AcpiUtVsnprintf ( > Number = (signed int) Number; > } > } > - Pos = AcpiUtFormatNumber(Pos, End, Number, Base, > + > + Pos = AcpiUtFormatNumber (Pos, End, Number, Base, > Width, Precision, Type); > } > > @@ -776,7 +790,7 @@ AcpiUtVsnprintf ( > * Size - Boundary of the string > * Format, ... - Standard printf format > * > - * RETURN: Size of successfully output bytes > + * RETURN: Number of bytes actually written. > * > * DESCRIPTION: Formatted output to a string. > * > @@ -810,7 +824,7 @@ AcpiUtSnprintf ( > * Format - Standard printf format > * Args - Argument list > * > - * RETURN: Size of successfully output bytes > + * RETURN: Number of bytes actually written. > * > * DESCRIPTION: Formatted output to a file using argument list pointer. > * > @@ -827,8 +841,9 @@ AcpiUtFileVprintf ( > > > Flags = AcpiOsAcquireLock (AcpiGbl_PrintLock); > - Length = AcpiUtVsnprintf(AcpiGbl_PrintBuffer, > + Length = AcpiUtVsnprintf (AcpiGbl_PrintBuffer, > sizeof (AcpiGbl_PrintBuffer), Format, Args); > + > (void) AcpiOsWriteFile (File, AcpiGbl_PrintBuffer, Length, 1); > AcpiOsReleaseLock (AcpiGbl_PrintLock, Flags); > > @@ -843,7 +858,7 @@ AcpiUtFileVprintf ( > * PARAMETERS: File - File descriptor > * Format, ... - Standard printf format > * > - * RETURN: Size of successfully output bytes > + * RETURN: Number of bytes actually written. > * > * DESCRIPTION: Formatted output to a file. > * > diff --git a/src/acpica/source/components/utilities/utuuid.c b/src/acpica/source/components/utilities/utuuid.c > new file mode 100644 > index 0000000..f5c2e40 > --- /dev/null > +++ b/src/acpica/source/components/utilities/utuuid.c > @@ -0,0 +1,175 @@ > +/****************************************************************************** > + * > + * Module Name: utuuid -- UUID support functions > + * > + *****************************************************************************/ > + > +/****************************************************************************** > + * > + * 1. Copyright Notice > + * > + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp. > + * All rights reserved. > + * > + * 2. License > + * > + * 2.1. This is your license from Intel Corp. under its intellectual property > + * rights. You may have additional license terms from the party that provided > + * you this software, covering your right to use that party's intellectual > + * property rights. > + * > + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a > + * copy of the source code appearing in this file ("Covered Code") an > + * irrevocable, perpetual, worldwide license under Intel's copyrights in the > + * base code distributed originally by Intel ("Original Intel Code") to copy, > + * make derivatives, distribute, use and display any portion of the Covered > + * Code in any form, with the right to sublicense such rights; and > + * > + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent > + * license (with the right to sublicense), under only those claims of Intel > + * patents that are infringed by the Original Intel Code, to make, use, sell, > + * offer to sell, and import the Covered Code and derivative works thereof > + * solely to the minimum extent necessary to exercise the above copyright > + * license, and in no event shall the patent license extend to any additions > + * to or modifications of the Original Intel Code. No other license or right > + * is granted directly or by implication, estoppel or otherwise; > + * > + * The above copyright and patent license is granted only if the following > + * conditions are met: > + * > + * 3. Conditions > + * > + * 3.1. Redistribution of Source with Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification with rights to further distribute source must include > + * the above Copyright Notice, the above License, this list of Conditions, > + * and the following Disclaimer and Export Compliance provision. In addition, > + * Licensee must cause all Covered Code to which Licensee contributes to > + * contain a file documenting the changes Licensee made to create that Covered > + * Code and the date of any change. Licensee must include in that file the > + * documentation of any changes made by any predecessor Licensee. Licensee > + * must include a prominent statement that the modification is derived, > + * directly or indirectly, from Original Intel Code. > + * > + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification without rights to further distribute source must > + * include the following Disclaimer and Export Compliance provision in the > + * documentation and/or other materials provided with distribution. In > + * addition, Licensee may not authorize further sublicense of source of any > + * portion of the Covered Code, and must include terms to the effect that the > + * license from Licensee to its licensee is limited to the intellectual > + * property embodied in the software Licensee provides to its licensee, and > + * not to intellectual property embodied in modifications its licensee may > + * make. > + * > + * 3.3. Redistribution of Executable. Redistribution in executable form of any > + * substantial portion of the Covered Code or modification must reproduce the > + * above Copyright Notice, and the following Disclaimer and Export Compliance > + * provision in the documentation and/or other materials provided with the > + * distribution. > + * > + * 3.4. Intel retains all right, title, and interest in and to the Original > + * Intel Code. > + * > + * 3.5. Neither the name Intel nor any other trademark owned or controlled by > + * Intel shall be used in advertising or otherwise to promote the sale, use or > + * other dealings in products derived from or relating to the Covered Code > + * without prior written authorization from Intel. > + * > + * 4. Disclaimer and Export Compliance > + * > + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED > + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE > + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, > + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY > + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY > + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A > + * PARTICULAR PURPOSE. > + * > + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES > + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR > + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, > + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY > + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL > + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS > + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY > + * LIMITED REMEDY. > + * > + * 4.3. Licensee shall not export, either directly or indirectly, any of this > + * software or system incorporating such software without first obtaining any > + * required license or other approval from the U. S. Department of Commerce or > + * any other agency or department of the United States Government. In the > + * event Licensee exports any such software from the United States or > + * re-exports any such software from a foreign destination, Licensee shall > + * ensure that the distribution and export/re-export of the software is in > + * compliance with all laws, regulations, orders, or other restrictions of the > + * U.S. Export Administration Regulations. Licensee agrees that neither it nor > + * any of its subsidiaries will export/re-export any technical data, process, > + * software, or service, directly or indirectly, to any country for which the > + * United States government or any agency thereof requires an export license, > + * other governmental approval, or letter of assurance, without first obtaining > + * such license, approval or letter. > + * > + *****************************************************************************/ > + > +#define __UTUUID_C__ > + > +#include "acpi.h" > +#include "accommon.h" > + > +#define _COMPONENT ACPI_COMPILER > + ACPI_MODULE_NAME ("utuuid") > + > + > +/* > + * UUID support functions. > + * > + * This table is used to convert an input UUID ascii string to a 16 byte > + * buffer and the reverse. The table maps a UUID buffer index 0-15 to > + * the index within the 36-byte UUID string where the associated 2-byte > + * hex value can be found. > + * > + * 36-byte UUID strings are of the form: > + * aabbccdd-eeff-gghh-iijj-kkllmmnnoopp > + * Where aa-pp are one byte hex numbers, made up of two hex digits > + * > + * Note: This table is basically the inverse of the string-to-offset table > + * found in the ACPI spec in the description of the ToUUID macro. > + */ > +const UINT8 AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH] = > +{ > + 6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34 > +}; > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiUtConvertStringToUuid > + * > + * PARAMETERS: InString - 36-byte formatted UUID string > + * UuidBuffer - Where the 16-byte UUID buffer is returned > + * > + * RETURN: None. Output data is returned in the UuidBuffer > + * > + * DESCRIPTION: Convert a 36-byte formatted UUID string to 16-byte UUID buffer > + * > + ******************************************************************************/ > + > +void > +AcpiUtConvertStringToUuid ( > + char *InString, > + UINT8 *UuidBuffer) > +{ > + UINT32 i; > + > + > + for (i = 0; i < UUID_BUFFER_LENGTH; i++) > + { > + UuidBuffer[i] = > + (AcpiUtAsciiCharToHex (InString[AcpiGbl_MapToUuidOffset[i]]) << 4); > + > + UuidBuffer[i] |= > + AcpiUtAsciiCharToHex (InString[AcpiGbl_MapToUuidOffset[i] + 1]); > + } > +} > diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h > index 6b34484..3c7a3bd 100644 > --- a/src/acpica/source/include/acconfig.h > +++ b/src/acpica/source/include/acconfig.h > @@ -295,6 +295,25 @@ > > /****************************************************************************** > * > + * Miscellaneous constants > + * > + *****************************************************************************/ > + > +/* UUID constants */ > + > +#define UUID_BUFFER_LENGTH 16 /* Length of UUID in memory */ > +#define UUID_STRING_LENGTH 36 /* Total length of a UUID string */ > + > +/* Positions for required hyphens (dashes) in UUID strings */ > + > +#define UUID_HYPHEN1_OFFSET 8 > +#define UUID_HYPHEN2_OFFSET 13 > +#define UUID_HYPHEN3_OFFSET 18 > +#define UUID_HYPHEN4_OFFSET 23 > + > + > +/****************************************************************************** > + * > * ACPI AML Debugger > * > *****************************************************************************/ > diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h > index 049a95c..21e26e6 100644 > --- a/src/acpica/source/include/acdisasm.h > +++ b/src/acpica/source/include/acdisasm.h > @@ -209,11 +209,13 @@ typedef enum > > ACPI_DMT_ASF, > ACPI_DMT_DMAR, > + ACPI_DMT_DMAR_SCOPE, > ACPI_DMT_EINJACT, > ACPI_DMT_EINJINST, > ACPI_DMT_ERSTACT, > ACPI_DMT_ERSTINST, > ACPI_DMT_FADTPM, > + ACPI_DMT_GTDT, > ACPI_DMT_HEST, > ACPI_DMT_HESTNTFY, > ACPI_DMT_HESTNTYP, > @@ -327,6 +329,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar0[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar1[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar2[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoEcdt[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoEinj[]; > @@ -344,6 +347,10 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt0[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoGas[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtHdr[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0a[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt1[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoHeader[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest0[]; > @@ -381,6 +388,8 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt9[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt10[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt12[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt13[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadtHdr[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg0[]; > @@ -404,6 +413,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoPmttHdr[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcctHdr[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp1[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp2[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt[]; > @@ -517,6 +527,10 @@ AcpiDmDumpFpdt ( > ACPI_TABLE_HEADER *Table); > > void > +AcpiDmDumpGtdt ( > + ACPI_TABLE_HEADER *Table); > + > +void > AcpiDmDumpHest ( > ACPI_TABLE_HEADER *Table); > > @@ -727,6 +741,10 @@ AcpiDmDecompressEisaId ( > UINT32 EncodedId); > > BOOLEAN > +AcpiDmIsUuidBuffer ( > + ACPI_PARSE_OBJECT *Op); > + > +BOOLEAN > AcpiDmIsUnicodeBuffer ( > ACPI_PARSE_OBJECT *Op); > > diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h > index 12925a8..1ea772e 100644 > --- a/src/acpica/source/include/aclocal.h > +++ b/src/acpica/source/include/aclocal.h > @@ -950,12 +950,13 @@ typedef union acpi_parse_value > #define ACPI_DASM_STRING 0x02 /* Buffer is a ASCII string */ > #define ACPI_DASM_UNICODE 0x03 /* Buffer is a Unicode string */ > #define ACPI_DASM_PLD_METHOD 0x04 /* Buffer is a _PLD method bit-packed buffer */ > -#define ACPI_DASM_EISAID 0x05 /* Integer is an EISAID */ > -#define ACPI_DASM_MATCHOP 0x06 /* Parent opcode is a Match() operator */ > -#define ACPI_DASM_LNOT_PREFIX 0x07 /* Start of a LNotEqual (etc.) pair of opcodes */ > -#define ACPI_DASM_LNOT_SUFFIX 0x08 /* End of a LNotEqual (etc.) pair of opcodes */ > -#define ACPI_DASM_HID_STRING 0x09 /* String is a _HID or _CID */ > -#define ACPI_DASM_IGNORE 0x0A /* Not used at this time */ > +#define ACPI_DASM_UUID 0x05 /* Buffer is a UUID/GUID */ > +#define ACPI_DASM_EISAID 0x06 /* Integer is an EISAID */ > +#define ACPI_DASM_MATCHOP 0x07 /* Parent opcode is a Match() operator */ > +#define ACPI_DASM_LNOT_PREFIX 0x08 /* Start of a LNotEqual (etc.) pair of opcodes */ > +#define ACPI_DASM_LNOT_SUFFIX 0x09 /* End of a LNotEqual (etc.) pair of opcodes */ > +#define ACPI_DASM_HID_STRING 0x0A /* String is a _HID or _CID */ > +#define ACPI_DASM_IGNORE 0x0B /* Not used at this time */ > > /* > * Generic operation (for example: If, While, Store) > @@ -1430,4 +1431,11 @@ typedef struct ah_device_id > > } AH_DEVICE_ID; > > +typedef struct ah_uuid > +{ > + char *Description; > + char *String; > + > +} AH_UUID; > + > #endif /* __ACLOCAL_H__ */ > diff --git a/src/acpica/source/include/acnames.h b/src/acpica/source/include/acnames.h > index bde34f5..6ccf47f 100644 > --- a/src/acpica/source/include/acnames.h > +++ b/src/acpica/source/include/acnames.h > @@ -127,6 +127,7 @@ > #define METHOD_NAME__HID "_HID" > #define METHOD_NAME__INI "_INI" > #define METHOD_NAME__PLD "_PLD" > +#define METHOD_NAME__DSD "_DSD" > #define METHOD_NAME__PRS "_PRS" > #define METHOD_NAME__PRT "_PRT" > #define METHOD_NAME__PRW "_PRW" > diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h > index ef85424..cafc37b 100644 > --- a/src/acpica/source/include/acpixf.h > +++ b/src/acpica/source/include/acpixf.h > @@ -118,7 +118,7 @@ > > /* Current ACPICA subsystem version in YYYYMMDD format */ > > -#define ACPI_CA_VERSION 0x20140627 > +#define ACPI_CA_VERSION 0x20140724 > > #include "acconfig.h" > #include "actypes.h" > @@ -923,6 +923,12 @@ AcpiFinishGpe ( > > ACPI_HW_DEPENDENT_RETURN_STATUS ( > ACPI_STATUS > +AcpiMarkGpeForWake ( > + ACPI_HANDLE GpeDevice, > + UINT32 GpeNumber)) > + > +ACPI_HW_DEPENDENT_RETURN_STATUS ( > +ACPI_STATUS > AcpiSetupGpeForWake ( > ACPI_HANDLE ParentDevice, > ACPI_HANDLE GpeDevice, > diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h > index 1d42f1d..1c1776a 100644 > --- a/src/acpica/source/include/acpredef.h > +++ b/src/acpica/source/include/acpredef.h > @@ -178,6 +178,11 @@ > * count = 0 (optional) > * (Used for _DLM) > * > + * ACPI_PTYPE2_UUID_PAIR: Each subpackage is preceded by a UUID Buffer. The UUID > + * defines the format of the package. Zero-length parent package is > + * allowed. > + * (Used for _DSD) > + * > *****************************************************************************/ > > enum AcpiReturnPackageTypes > @@ -191,7 +196,8 @@ enum AcpiReturnPackageTypes > ACPI_PTYPE2_FIXED = 7, > ACPI_PTYPE2_MIN = 8, > ACPI_PTYPE2_REV_FIXED = 9, > - ACPI_PTYPE2_FIX_VAR = 10 > + ACPI_PTYPE2_FIX_VAR = 10, > + ACPI_PTYPE2_UUID_PAIR = 11 > }; > > > @@ -438,6 +444,9 @@ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] = > {{"_CBA", METHOD_0ARGS, > METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* See PCI firmware spec 3.0 */ > > + {{"_CCA", METHOD_0ARGS, > + METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* ACPI 5.1 */ > + > {{"_CDM", METHOD_0ARGS, > METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, > > @@ -506,6 +515,10 @@ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] = > {{"_DOS", METHOD_1ARGS (ACPI_TYPE_INTEGER), > METHOD_NO_RETURN_VALUE}}, > > + {{"_DSD", METHOD_0ARGS, > + METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each: 1 Buf, 1 Pkg */ > + PACKAGE_INFO (ACPI_PTYPE2_UUID_PAIR, ACPI_RTYPE_BUFFER, 1, ACPI_RTYPE_PACKAGE, 1,0), > + > {{"_DSM", METHOD_4ARGS (ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_PACKAGE), > METHOD_RETURNS (ACPI_RTYPE_ALL)}}, /* Must return a value, but it can be of any type */ > > diff --git a/src/acpica/source/include/actbl.h b/src/acpica/source/include/actbl.h > index 9a6625c..ea9fc58 100644 > --- a/src/acpica/source/include/actbl.h > +++ b/src/acpica/source/include/actbl.h > @@ -368,7 +368,8 @@ typedef struct acpi_table_fadt > UINT32 Flags; /* Miscellaneous flag bits (see below for individual flags) */ > ACPI_GENERIC_ADDRESS ResetRegister; /* 64-bit address of the Reset register */ > UINT8 ResetValue; /* Value to write to the ResetRegister port to reset the system */ > - UINT8 Reserved4[3]; /* Reserved, must be zero */ > + UINT16 ArmBootFlags; /* ARM-Specific Boot Flags (see below for individual flags) (ACPI 5.1) */ > + UINT8 MinorRevision; /* FADT Minor Revision (ACPI 5.1) */ > UINT64 XFacs; /* 64-bit physical address of FACS */ > UINT64 XDsdt; /* 64-bit physical address of DSDT */ > ACPI_GENERIC_ADDRESS XPm1aEventBlock; /* 64-bit Extended Power Mgt 1a Event Reg Blk address */ > @@ -385,7 +386,7 @@ typedef struct acpi_table_fadt > } ACPI_TABLE_FADT; > > > -/* Masks for FADT Boot Architecture Flags (BootFlags) [Vx]=Introduced in this FADT revision */ > +/* Masks for FADT IA-PC Boot Architecture Flags (boot_flags) [Vx]=Introduced in this FADT revision */ > > #define ACPI_FADT_LEGACY_DEVICES (1) /* 00: [V2] System has LPC or ISA bus devices */ > #define ACPI_FADT_8042 (1<<1) /* 01: [V3] System has an 8042 controller on port 60/64 */ > @@ -394,6 +395,11 @@ typedef struct acpi_table_fadt > #define ACPI_FADT_NO_ASPM (1<<4) /* 04: [V4] PCIe ASPM control must not be enabled */ > #define ACPI_FADT_NO_CMOS_RTC (1<<5) /* 05: [V5] No CMOS real-time clock present */ > > +/* Masks for FADT ARM Boot Architecture Flags (arm_boot_flags) ACPI 5.1 */ > + > +#define ACPI_FADT_PSCI_COMPLIANT (1) /* 00: [V5+] PSCI 0.2+ is implemented */ > +#define ACPI_FADT_PSCI_USE_HVC (1<<1) /* 01: [V5+] HVC must be used instead of SMC as the PSCI conduit */ > + > /* Masks for FADT flags */ > > #define ACPI_FADT_WBINVD (1) /* 00: [V1] The WBINVD instruction works properly */ > @@ -507,7 +513,7 @@ typedef struct acpi_table_desc > * FADT V5 size: 0x10C > */ > #define ACPI_FADT_V1_SIZE (UINT32) (ACPI_FADT_OFFSET (Flags) + 4) > -#define ACPI_FADT_V2_SIZE (UINT32) (ACPI_FADT_OFFSET (Reserved4[0]) + 3) > +#define ACPI_FADT_V2_SIZE (UINT32) (ACPI_FADT_OFFSET (MinorRevision) + 1) > #define ACPI_FADT_V3_SIZE (UINT32) (ACPI_FADT_OFFSET (SleepControl)) > #define ACPI_FADT_V5_SIZE (UINT32) (sizeof (ACPI_TABLE_FADT)) > > diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h > index e0905ee..d28faa3 100644 > --- a/src/acpica/source/include/actbl1.h > +++ b/src/acpica/source/include/actbl1.h > @@ -834,20 +834,22 @@ typedef struct acpi_table_madt > > enum AcpiMadtType > { > - ACPI_MADT_TYPE_LOCAL_APIC = 0, > - ACPI_MADT_TYPE_IO_APIC = 1, > - ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, > - ACPI_MADT_TYPE_NMI_SOURCE = 3, > - ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, > - ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, > - ACPI_MADT_TYPE_IO_SAPIC = 6, > - ACPI_MADT_TYPE_LOCAL_SAPIC = 7, > - ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, > - ACPI_MADT_TYPE_LOCAL_X2APIC = 9, > - ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, > - ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, > - ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, > - ACPI_MADT_TYPE_RESERVED = 13 /* 13 and greater are reserved */ > + ACPI_MADT_TYPE_LOCAL_APIC = 0, > + ACPI_MADT_TYPE_IO_APIC = 1, > + ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, > + ACPI_MADT_TYPE_NMI_SOURCE = 3, > + ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, > + ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, > + ACPI_MADT_TYPE_IO_SAPIC = 6, > + ACPI_MADT_TYPE_LOCAL_SAPIC = 7, > + ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, > + ACPI_MADT_TYPE_LOCAL_X2APIC = 9, > + ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, > + ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, > + ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, > + ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, > + ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, > + ACPI_MADT_TYPE_RESERVED = 15 /* 15 and greater are reserved */ > }; > > > @@ -1008,16 +1010,27 @@ typedef struct acpi_madt_generic_interrupt > { > ACPI_SUBTABLE_HEADER Header; > UINT16 Reserved; /* Reserved - must be zero */ > - UINT32 GicId; > + UINT32 CpuInterfaceNumber; > UINT32 Uid; > UINT32 Flags; > UINT32 ParkingVersion; > UINT32 PerformanceInterrupt; > UINT64 ParkedAddress; > UINT64 BaseAddress; > + UINT64 GicvBaseAddress; > + UINT64 GichBaseAddress; > + UINT32 VgicInterrupt; > + UINT64 GicrBaseAddress; > + UINT64 ArmMpidr; > > } ACPI_MADT_GENERIC_INTERRUPT; > > +/* Masks for Flags field above */ > + > +/* ACPI_MADT_ENABLED (1) Processor is usable if set */ > +#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ > +#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ > + > > /* 12: Generic Distributor (ACPI 5.0) */ > > @@ -1033,11 +1046,42 @@ typedef struct acpi_madt_generic_distributor > } ACPI_MADT_GENERIC_DISTRIBUTOR; > > > +/* 13: Generic MSI Frame (ACPI 5.1) */ > + > +typedef struct acpi_madt_generic_msi_frame > +{ > + ACPI_SUBTABLE_HEADER Header; > + UINT16 Reserved; /* Reserved - must be zero */ > + UINT32 MsiFrameId; > + UINT64 BaseAddress; > + UINT32 Flags; > + UINT16 SpiCount; > + UINT16 SpiBase; > + > +} ACPI_MADT_GENERIC_MSI_FRAME; > + > +/* Masks for Flags field above */ > + > +#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) > + > + > +/* 14: Generic Redistributor (ACPI 5.1) */ > + > +typedef struct acpi_madt_generic_redistributor > +{ > + ACPI_SUBTABLE_HEADER Header; > + UINT16 Reserved; /* reserved - must be zero */ > + UINT64 BaseAddress; > + UINT32 Length; > + > +} ACPI_MADT_GENERIC_REDISTRIBUTOR; > + > + > /* > * Common flags fields for MADT subtables > */ > > -/* MADT Local APIC flags (LapicFlags) and GIC flags */ > +/* MADT Local APIC flags */ > > #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ > > diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h > index 7a64788..7d62862 100644 > --- a/src/acpica/source/include/actbl2.h > +++ b/src/acpica/source/include/actbl2.h > @@ -522,7 +522,7 @@ typedef struct acpi_table_dbgp > * Version 1 > * > * Conforms to "Intel Virtualization Technology for Directed I/O", > - * Version 1.2, Sept. 2008 > + * Version 2.2, Sept. 2013 > * > ******************************************************************************/ > > @@ -555,9 +555,10 @@ enum AcpiDmarType > { > ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, > ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, > - ACPI_DMAR_TYPE_ATSR = 2, > - ACPI_DMAR_HARDWARE_AFFINITY = 3, > - ACPI_DMAR_TYPE_RESERVED = 4 /* 4 and greater are reserved */ > + ACPI_DMAR_TYPE_ROOT_ATS = 2, > + ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, > + ACPI_DMAR_TYPE_NAMESPACE = 4, > + ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ > }; > > > @@ -573,7 +574,7 @@ typedef struct acpi_dmar_device_scope > > } ACPI_DMAR_DEVICE_SCOPE; > > -/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE */ > +/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ > > enum AcpiDmarScopeType > { > @@ -582,7 +583,8 @@ enum AcpiDmarScopeType > ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, > ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, > ACPI_DMAR_SCOPE_TYPE_HPET = 4, > - ACPI_DMAR_SCOPE_TYPE_RESERVED = 5 /* 5 and greater are reserved */ > + ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, > + ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ > }; > > typedef struct acpi_dmar_pci_path > @@ -659,6 +661,18 @@ typedef struct acpi_dmar_rhsa > } ACPI_DMAR_RHSA; > > > +/* 4: ACPI Namespace Device Declaration Structure */ > + > +typedef struct acpi_dmar_andd > +{ > + ACPI_DMAR_HEADER Header; > + UINT8 Reserved[3]; > + UINT8 DeviceNumber; > + char DeviceName[1]; > + > +} ACPI_DMAR_ANDD; > + > + > /******************************************************************************* > * > * HPET - High Precision Event Timer table > diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h > index efec7e8..b30e80f 100644 > --- a/src/acpica/source/include/actbl3.h > +++ b/src/acpica/source/include/actbl3.h > @@ -352,35 +352,111 @@ typedef struct acpi_s3pt_suspend > > /******************************************************************************* > * > - * GTDT - Generic Timer Description Table (ACPI 5.0) > - * Version 1 > + * GTDT - Generic Timer Description Table (ACPI 5.1) > + * Version 2 > * > ******************************************************************************/ > > typedef struct acpi_table_gtdt > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT64 Address; > - UINT32 Flags; > - UINT32 SecurePl1Interrupt; > - UINT32 SecurePl1Flags; > - UINT32 NonSecurePl1Interrupt; > - UINT32 NonSecurePl1Flags; > + UINT64 CounterBlockAddresss; > + UINT32 Reserved; > + UINT32 SecureEl1Interrupt; > + UINT32 SecureEl1Flags; > + UINT32 NonSecureEl1Interrupt; > + UINT32 NonSecureEl1Flags; > UINT32 VirtualTimerInterrupt; > UINT32 VirtualTimerFlags; > - UINT32 NonSecurePl2Interrupt; > - UINT32 NonSecurePl2Flags; > + UINT32 NonSecureEl2Interrupt; > + UINT32 NonSecureEl2Flags; > + UINT64 CounterReadBlockAddress; > + UINT32 PlatformTimerCount; > + UINT32 PlatformTimerOffset; > > } ACPI_TABLE_GTDT; > > -/* Values for Flags field above */ > +/* Flag Definitions: Timer Block Physical Timers and Virtual timers */ > + > +#define ACPI_GTDT_INTERRUPT_MODE (1) > +#define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) > +#define ACPI_GTDT_ALWAYS_ON (1<<2) > + > + > +/* Common GTDT subtable header */ > + > +typedef struct acpi_gtdt_header > +{ > + UINT8 Type; > + UINT16 Length; > + > +} ACPI_GTDT_HEADER; > + > +/* Values for GTDT subtable type above */ > + > +enum AcpiGtdtType > +{ > + ACPI_GTDT_TYPE_TIMER_BLOCK = 0, > + ACPI_GTDT_TYPE_WATCHDOG = 1, > + ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ > +}; > + > + > +/* GTDT Subtables, correspond to Type in acpi_gtdt_header */ > + > +/* 0: Generic Timer Block */ > + > +typedef struct acpi_gtdt_timer_block > +{ > + ACPI_GTDT_HEADER Header; > + UINT8 Reserved; > + UINT64 BlockAddress; > + UINT32 TimerCount; > + UINT32 TimerOffset; > + > +} ACPI_GTDT_TIMER_BLOCK; > + > +/* Timer Sub-Structure, one per timer */ > + > +typedef struct acpi_gtdt_timer_entry > +{ > + UINT8 FrameNumber; > + UINT8 Reserved[3]; > + UINT64 BaseAddress; > + UINT64 El0BaseAddress; > + UINT32 TimerInterrupt; > + UINT32 TimerFlags; > + UINT32 VirtualTimerInterrupt; > + UINT32 VirtualTimerFlags; > + UINT32 CommonFlags; > + > +} ACPI_GTDT_TIMER_ENTRY; > + > + > +/* Flag Definitions: CommonFlags above */ > + > +#define ACPI_GTDT_GT_IS_SECURE_TIMER (1) > +#define ACPI_GTDT_GT_ALWAYS_ON (1<<1) > + > > -#define ACPI_GTDT_MAPPED_BLOCK_PRESENT 1 > +/* 1: SBSA Generic Watchdog Structure */ > > -/* Values for all "TimerFlags" fields above */ > +typedef struct acpi_gtdt_watchdog > +{ > + ACPI_GTDT_HEADER Header; > + UINT8 Reserved; > + UINT64 RefreshFrameAddress; > + UINT64 ControlFrameAddress; > + UINT32 TimerInterrupt; > + UINT32 TimerFlags; > + > +} ACPI_GTDT_WATCHDOG; > > -#define ACPI_GTDT_INTERRUPT_MODE 1 > -#define ACPI_GTDT_INTERRUPT_POLARITY 2 > +/* Flag Definitions: TimerFlags above */ > + > +#define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) > +#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) > +#define ACPI_GTDT_WATCHDOG_SECURE (1<<2) > > > /******************************************************************************* > @@ -525,7 +601,8 @@ typedef struct acpi_table_pcct > enum AcpiPcctType > { > ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, > - ACPI_PCCT_TYPE_RESERVED = 1 /* 1 and greater are reserved */ > + ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, > + ACPI_PCCT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ > }; > > /* > @@ -550,6 +627,31 @@ typedef struct acpi_pcct_subspace > } ACPI_PCCT_SUBSPACE; > > > +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ > + > +typedef struct acpi_pcct_hw_reduced > +{ > + ACPI_SUBTABLE_HEADER Header; > + UINT32 DoorbellInterrupt; > + UINT8 Flags; > + UINT8 Reserved; > + UINT64 BaseAddress; > + UINT64 Length; > + ACPI_GENERIC_ADDRESS DoorbellRegister; > + UINT64 PreserveMask; > + UINT64 WriteMask; > + UINT32 Latency; > + UINT32 MaxAccessRate; > + UINT16 MinTurnaroundTime; > + > +} ACPI_PCCT_HW_REDUCED; > + > +/* Values for doorbell flags above */ > + > +#define ACPI_PCCT_INTERRUPT_POLARITY (1) > +#define ACPI_PCCT_INTERRUPT_MODE (1<<1) > + > + > /* > * PCC memory structures (not part of the ACPI table) > */ > diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h > index 6ffb2ce..b6371ae 100644 > --- a/src/acpica/source/include/actypes.h > +++ b/src/acpica/source/include/actypes.h > @@ -596,7 +596,7 @@ typedef UINT64 ACPI_INTEGER; > > #define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) NULL,(ACPI_SIZE) i) > #define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) NULL) > -#define ACPI_OFFSET(d, f) (ACPI_SIZE) ACPI_PTR_DIFF (&(((d *)0)->f), (void *) NULL) > +#define ACPI_OFFSET(d, f) ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) NULL) > #define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i) > #define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i) > > @@ -690,8 +690,9 @@ typedef UINT64 ACPI_INTEGER; > #define ACPI_NOTIFY_RESERVED (UINT8) 0x0A > #define ACPI_NOTIFY_LOCALITY_UPDATE (UINT8) 0x0B > #define ACPI_NOTIFY_SHUTDOWN_REQUEST (UINT8) 0x0C > +#define ACPI_NOTIFY_AFFINITY_UPDATE (UINT8) 0x0D > > -#define ACPI_NOTIFY_MAX 0x0C > +#define ACPI_NOTIFY_MAX 0x0D > > /* > * Types associated with ACPI names and objects. The first group of > diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h > index bac5fd8..2aea248 100644 > --- a/src/acpica/source/include/acutils.h > +++ b/src/acpica/source/include/acutils.h > @@ -297,6 +297,10 @@ AcpiUtHexToAsciiChar ( > UINT64 Integer, > UINT32 Position); > > +UINT8 > +AcpiUtAsciiCharToHex ( > + int HexChar); > + > BOOLEAN > AcpiUtValidObjectType ( > ACPI_OBJECT_TYPE Type); > @@ -1207,6 +1211,10 @@ const AH_DEVICE_ID * > AcpiAhMatchHardwareId ( > char *Hid); > > +const char * > +AcpiAhMatchUuid ( > + UINT8 *Data); > + > /* > * utprint - printf/vprintf output functions > */ > @@ -1248,4 +1256,12 @@ AcpiUtFilePrintf ( > ...); > #endif > > +/* > + * utuuid -- UUID support functions > + */ > +void > +AcpiUtConvertStringToUuid ( > + char *InString, > + UINT8 *UuidBuffer); > + > #endif /* _ACUTILS_H */ > diff --git a/src/acpica/source/include/platform/aclinux.h b/src/acpica/source/include/platform/aclinux.h > index 1f1d7c1..d5c1501 100644 > --- a/src/acpica/source/include/platform/aclinux.h > +++ b/src/acpica/source/include/platform/aclinux.h > @@ -201,8 +201,6 @@ > #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject > #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId > #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock > -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory > -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory > > /* > * OSL interfaces used by debugger/disassembler > @@ -236,10 +234,6 @@ > #define __init > #endif > > -#ifndef __iomem > -#define __iomem > -#endif > - > /* Host-dependent types and defines for user-space ACPICA */ > > #define ACPI_FLUSH_CPU_CACHE() > diff --git a/src/acpica/source/include/platform/aclinuxex.h b/src/acpica/source/include/platform/aclinuxex.h > index 67e42ab..e3d5d5b 100644 > --- a/src/acpica/source/include/platform/aclinuxex.h > +++ b/src/acpica/source/include/platform/aclinuxex.h > @@ -186,16 +186,6 @@ AcpiOsGetThreadId ( > Lock ? AE_OK : AE_NO_MEMORY; \ > }) > > -void __iomem * > -AcpiOsMapMemory ( > - ACPI_PHYSICAL_ADDRESS Where, > - ACPI_SIZE Length); > - > -void > -AcpiOsUnmapMemory ( > - void __iomem *LogicalAddress, > - ACPI_SIZE Size); > - > /* > * OSL interfaces added by Linux > */ > diff --git a/src/acpica/source/os_specific/service_layers/oslibcfs.c b/src/acpica/source/os_specific/service_layers/oslibcfs.c > index 3343a0c..e1ca8be 100644 > --- a/src/acpica/source/os_specific/service_layers/oslibcfs.c > +++ b/src/acpica/source/os_specific/service_layers/oslibcfs.c > @@ -1,6 +1,6 @@ > /****************************************************************************** > * > - * Module Name: oslibcfs - C library OSL for file IO > + * Module Name: oslibcfs - C library OSL for file I/O > * > *****************************************************************************/ > > @@ -141,8 +141,9 @@ AcpiOsOpenFile ( > UINT8 Modes) > { > ACPI_FILE File; > - char ModesStr[4]; > UINT32 i = 0; > + char ModesStr[4]; > + > > if (Modes & ACPI_FILE_READING) > { > @@ -156,6 +157,7 @@ AcpiOsOpenFile ( > { > ModesStr[i++] = 'b'; > } > + > ModesStr[i++] = '\0'; > > File = fopen (Path, ModesStr); > @@ -172,11 +174,11 @@ AcpiOsOpenFile ( > * > * FUNCTION: AcpiOsCloseFile > * > - * PARAMETERS: File - File descriptor > + * PARAMETERS: File - An open file descriptor > * > * RETURN: None. > * > - * DESCRIPTION: Close a file. > + * DESCRIPTION: Close a file opened via AcpiOsOpenFile. > * > ******************************************************************************/ > > @@ -192,14 +194,14 @@ AcpiOsCloseFile ( > * > * FUNCTION: AcpiOsReadFile > * > - * PARAMETERS: File - File descriptor > + * PARAMETERS: File - An open file descriptor > * Buffer - Data buffer > * Size - Data block size > * Count - Number of data blocks > * > - * RETURN: Size of successfully read buffer. > + * RETURN: Number of bytes actually read. > * > - * DESCRIPTION: Read a file. > + * DESCRIPTION: Read from a file. > * > ******************************************************************************/ > > @@ -212,6 +214,7 @@ AcpiOsReadFile ( > { > int Length; > > + > Length = fread (Buffer, Size, Count, File); > if (Length < 0) > { > @@ -226,14 +229,14 @@ AcpiOsReadFile ( > * > * FUNCTION: AcpiOsWriteFile > * > - * PARAMETERS: File - File descriptor > + * PARAMETERS: File - An open file descriptor > * Buffer - Data buffer > * Size - Data block size > * Count - Number of data blocks > * > - * RETURN: Size of successfully written buffer. > + * RETURN: Number of bytes actually written. > * > - * DESCRIPTION: Write a file. > + * DESCRIPTION: Write to a file. > * > ******************************************************************************/ > > @@ -246,6 +249,7 @@ AcpiOsWriteFile ( > { > int Length; > > + > Length = fwrite (Buffer, Size, Count, File); > if (Length < 0) > { > @@ -260,9 +264,9 @@ AcpiOsWriteFile ( > * > * FUNCTION: AcpiOsGetFileOffset > * > - * PARAMETERS: File - File descriptor > + * PARAMETERS: File - An open file descriptor > * > - * RETURN: Size of current position. > + * RETURN: Current file pointer position. > * > * DESCRIPTION: Get current file offset. > * > @@ -274,8 +278,8 @@ AcpiOsGetFileOffset ( > { > long Offset; > > - Offset = ftell (File); > > + Offset = ftell (File); > return (Offset); > } > > @@ -284,8 +288,8 @@ AcpiOsGetFileOffset ( > * > * FUNCTION: AcpiOsSetFileOffset > * > - * PARAMETERS: File - File descriptor > - * Offset - File offset > + * PARAMETERS: File - An open file descriptor > + * Offset - New file offset > * From - From begin/end of file > * > * RETURN: Status > diff --git a/src/acpica/source/os_specific/service_layers/osunixxf.c b/src/acpica/source/os_specific/service_layers/osunixxf.c > index c237ac2..6f0bdfe 100644 > --- a/src/acpica/source/os_specific/service_layers/osunixxf.c > +++ b/src/acpica/source/os_specific/service_layers/osunixxf.c > @@ -1231,7 +1231,7 @@ AcpiOsGetTimer ( > * FUNCTION: AcpiOsReadPciConfiguration > * > * PARAMETERS: PciId - Seg/Bus/Dev > - * Register - Device Register > + * PciRegister - Device Register > * Value - Buffer where value is placed > * Width - Number of bits > * > @@ -1244,7 +1244,7 @@ AcpiOsGetTimer ( > ACPI_STATUS > AcpiOsReadPciConfiguration ( > ACPI_PCI_ID *PciId, > - UINT32 Register, > + UINT32 PciRegister, > UINT64 *Value, > UINT32 Width) > { > @@ -1259,7 +1259,7 @@ AcpiOsReadPciConfiguration ( > * FUNCTION: AcpiOsWritePciConfiguration > * > * PARAMETERS: PciId - Seg/Bus/Dev > - * Register - Device Register > + * PciRegister - Device Register > * Value - Value to be written > * Width - Number of bits > * > @@ -1272,7 +1272,7 @@ AcpiOsReadPciConfiguration ( > ACPI_STATUS > AcpiOsWritePciConfiguration ( > ACPI_PCI_ID *PciId, > - UINT32 Register, > + UINT32 PciRegister, > UINT64 Value, > UINT32 Width) > { > diff --git a/src/acpica/source/tools/acpiexec/aehandlers.c b/src/acpica/source/tools/acpiexec/aehandlers.c > index 06283f4..14b5e90 100644 > --- a/src/acpica/source/tools/acpiexec/aehandlers.c > +++ b/src/acpica/source/tools/acpiexec/aehandlers.c > @@ -1413,8 +1413,7 @@ AeRegionHandler ( > case AML_FIELD_ATTRIB_RAW_BYTES: > case AML_FIELD_ATTRIB_RAW_PROCESS: > > - /* (-2) for status/length */ > - Length = MyContext->AccessLength - 2; > + Length = MyContext->AccessLength; > break; > > default: > @@ -1448,8 +1447,7 @@ AeRegionHandler ( > case AML_FIELD_ATTRIB_RAW_BYTES: > case AML_FIELD_ATTRIB_RAW_PROCESS: > > - /* (-2) for status/length */ > - Length = MyContext->AccessLength - 2; > + Length = MyContext->AccessLength; > break; > > default: > Acked-by: Alex Hung <alex.hung@canonical.com>
On 07/25/2014 03:57 AM, Colin King wrote: > From: Colin Ian King <colin.king@canonical.com> > > Update to ACPICA version 20140724. Refer to > https://lists.acpica.org/pipermail/devel/2014-July/000658.html > for a full list of new features and fixes. > > Signed-off-by: Colin Ian King <colin.king@canonical.com> > --- > src/acpica/Makefile.am | 3 + > src/acpica/source/common/ahids.c | 6 +- > src/acpica/source/common/ahpredef.c | 2 + > src/acpica/source/common/ahuuids.c | 201 +++++++++++++++++++++ > src/acpica/source/common/dmextern.c | 31 +++- > src/acpica/source/common/dmtable.c | 80 ++++++-- > src/acpica/source/common/dmtbdump.c | 171 +++++++++++++++++- > src/acpica/source/common/dmtbinfo.c | 178 ++++++++++++++++-- > src/acpica/source/compiler/Makefile.am | 2 + > src/acpica/source/compiler/aslanalyze.c | 48 +++++ > src/acpica/source/compiler/aslcompiler.h | 14 +- > src/acpica/source/compiler/aslcompiler.l | 10 +- > src/acpica/source/compiler/asldefine.h | 2 +- > src/acpica/source/compiler/aslglobal.h | 6 - > src/acpica/source/compiler/aslmessages.c | 1 + > src/acpica/source/compiler/aslmessages.h | 1 + > src/acpica/source/compiler/aslmethod.c | 20 ++ > src/acpica/source/compiler/aslopcodes.c | 12 +- > src/acpica/source/compiler/aslprepkg.c | 35 ++++ > src/acpica/source/compiler/aslutils.c | 41 +---- > src/acpica/source/compiler/asluuid.c | 74 +------- > src/acpica/source/compiler/dtcompiler.h | 4 + > src/acpica/source/compiler/dtfield.c | 2 +- > src/acpica/source/compiler/dttable.c | 157 +++++++++++++++- > src/acpica/source/compiler/dttemplate.h | 127 +++++++------ > src/acpica/source/compiler/dtutils.c | 2 + > .../source/components/disassembler/dmbuffer.c | 143 ++++++++++++++- > .../source/components/disassembler/dmopcode.c | 7 +- > src/acpica/source/components/disassembler/dmwalk.c | 3 +- > src/acpica/source/components/events/evgpe.c | 34 ++-- > src/acpica/source/components/events/evxfgpe.c | 71 +++++++- > src/acpica/source/components/executer/exdebug.c | 11 +- > src/acpica/source/components/executer/exdump.c | 6 +- > src/acpica/source/components/executer/exfield.c | 30 ++- > src/acpica/source/components/namespace/nsobject.c | 19 +- > src/acpica/source/components/utilities/utdecode.c | 37 +--- > src/acpica/source/components/utilities/utfileio.c | 3 +- > src/acpica/source/components/utilities/uthex.c | 185 +++++++++++++++++++ > src/acpica/source/components/utilities/utprint.c | 65 ++++--- > src/acpica/source/components/utilities/utuuid.c | 175 ++++++++++++++++++ > src/acpica/source/include/acconfig.h | 19 ++ > src/acpica/source/include/acdisasm.h | 18 ++ > src/acpica/source/include/aclocal.h | 20 +- > src/acpica/source/include/acnames.h | 1 + > src/acpica/source/include/acpixf.h | 8 +- > src/acpica/source/include/acpredef.h | 15 +- > src/acpica/source/include/actbl.h | 12 +- > src/acpica/source/include/actbl1.h | 76 ++++++-- > src/acpica/source/include/actbl2.h | 26 ++- > src/acpica/source/include/actbl3.h | 134 ++++++++++++-- > src/acpica/source/include/actypes.h | 5 +- > src/acpica/source/include/acutils.h | 16 ++ > src/acpica/source/include/platform/aclinux.h | 6 - > src/acpica/source/include/platform/aclinuxex.h | 10 - > .../source/os_specific/service_layers/oslibcfs.c | 34 ++-- > .../source/os_specific/service_layers/osunixxf.c | 8 +- > src/acpica/source/tools/acpiexec/aehandlers.c | 6 +- > 57 files changed, 1992 insertions(+), 441 deletions(-) > create mode 100644 src/acpica/source/common/ahuuids.c > create mode 100644 src/acpica/source/components/utilities/uthex.c > create mode 100644 src/acpica/source/components/utilities/utuuid.c > > diff --git a/src/acpica/Makefile.am b/src/acpica/Makefile.am > index b2dd752..cbd38c6 100644 > --- a/src/acpica/Makefile.am > +++ b/src/acpica/Makefile.am > @@ -216,6 +216,7 @@ libfwtsacpica_la_SOURCES = \ > source/components/utilities/uteval.c \ > source/components/utilities/utfileio.c \ > source/components/utilities/utglobal.c \ > + source/components/utilities/uthex.c \ > source/components/utilities/utids.c \ > source/components/utilities/utinit.c \ > source/components/utilities/utlock.c \ > @@ -238,9 +239,11 @@ libfwtsacpica_la_SOURCES = \ > source/components/utilities/utxfinit.c \ > source/components/utilities/uterror.c \ > source/components/utilities/utbuffer.c \ > + source/components/utilities/utuuid.c \ > source/common/acgetline.c \ > source/common/ahids.c \ > source/common/cmfsize.c \ > + source/common/ahuuids.c \ > source/tools/acpiexec/aehandlers.c > > libfwtsacpica_la_LIBADD = \ > diff --git a/src/acpica/source/common/ahids.c b/src/acpica/source/common/ahids.c > index 3e12961..af6771b 100755 > --- a/src/acpica/source/common/ahids.c > +++ b/src/acpica/source/common/ahids.c > @@ -246,7 +246,11 @@ const AH_DEVICE_ID AslDeviceIds[] = > {"PNP0C60", "Display Sensor Device"}, > {"PNP0C70", "Dock Sensor Device"}, > {"PNP0C80", "Memory Device"}, > - {"PNP0D40", "Standard Compliant SD Host Controller"}, > + {"PNP0D10", "XHCI USB Controller with debug"}, > + {"PNP0D15", "XHCI USB Controller without debug"}, > + {"PNP0D20", "EHCI USB Controller without debug"}, > + {"PNP0D25", "EHCI USB Controller with debug"}, > + {"PNP0D40", "SDA Standard Compliant SD Host Controller"}, > {"PNP0D80", "Windows-compatible System Power Management Controller"}, > {"PNP0F03", "Microsoft PS/2-style Mouse"}, > {"SMO91D0", "Sensor Hub"}, > diff --git a/src/acpica/source/common/ahpredef.c b/src/acpica/source/common/ahpredef.c > index 525c7bb..7123b7f 100644 > --- a/src/acpica/source/common/ahpredef.c > +++ b/src/acpica/source/common/ahpredef.c > @@ -169,6 +169,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] = > AH_PREDEF ("_BTM", "Battery Time", "Returns the battery runtime"), > AH_PREDEF ("_BTP", "Battery Trip Point", "Sets a Control Method Battery trip point"), > AH_PREDEF ("_CBA", "Configuration Base Address", "Sets the base address for a PCI Express host bridge"), > + AH_PREDEF ("_CCA", "Cache Coherency Attribute", "Returns a device's support level for cache coherency"), > AH_PREDEF ("_CDM", "Clock Domain", "Returns a logical processor's clock domain identifier"), > AH_PREDEF ("_CID", "Compatible ID", "Returns a device's Plug and Play Compatible ID list"), > AH_PREDEF ("_CLS", "Class Code", "Returns PCI class code and subclass"), > @@ -193,6 +194,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] = > AH_PREDEF ("_DOS", "Disable Output Switching", "Sets the display output switching mode"), > AH_PREDEF ("_DPL", "Device Selection Polarity", "Polarity of Device Selection signal, Resource Descriptor field"), > AH_PREDEF ("_DRS", "Drive Strength", "Drive Strength setting for GPIO connection, Resource Descriptor field"), > + AH_PREDEF ("_DSD", "Device-Specific Data", "Returns a list of device property information"), > AH_PREDEF ("_DSM", "Device-Specific Method", "Executes device-specific functions"), > AH_PREDEF ("_DSS", "Device Set State", "Sets the display device state"), > AH_PREDEF ("_DSW", "Device Sleep Wake", "Sets the sleep and wake transition states for a device"), > diff --git a/src/acpica/source/common/ahuuids.c b/src/acpica/source/common/ahuuids.c > new file mode 100644 > index 0000000..1bf362c > --- /dev/null > +++ b/src/acpica/source/common/ahuuids.c > @@ -0,0 +1,201 @@ > +/****************************************************************************** > + * > + * Module Name: ahuuids - Table of known ACPI-related UUIDs > + * > + *****************************************************************************/ > + > +/****************************************************************************** > + * > + * 1. Copyright Notice > + * > + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp. > + * All rights reserved. > + * > + * 2. License > + * > + * 2.1. This is your license from Intel Corp. under its intellectual property > + * rights. You may have additional license terms from the party that provided > + * you this software, covering your right to use that party's intellectual > + * property rights. > + * > + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a > + * copy of the source code appearing in this file ("Covered Code") an > + * irrevocable, perpetual, worldwide license under Intel's copyrights in the > + * base code distributed originally by Intel ("Original Intel Code") to copy, > + * make derivatives, distribute, use and display any portion of the Covered > + * Code in any form, with the right to sublicense such rights; and > + * > + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent > + * license (with the right to sublicense), under only those claims of Intel > + * patents that are infringed by the Original Intel Code, to make, use, sell, > + * offer to sell, and import the Covered Code and derivative works thereof > + * solely to the minimum extent necessary to exercise the above copyright > + * license, and in no event shall the patent license extend to any additions > + * to or modifications of the Original Intel Code. No other license or right > + * is granted directly or by implication, estoppel or otherwise; > + * > + * The above copyright and patent license is granted only if the following > + * conditions are met: > + * > + * 3. Conditions > + * > + * 3.1. Redistribution of Source with Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification with rights to further distribute source must include > + * the above Copyright Notice, the above License, this list of Conditions, > + * and the following Disclaimer and Export Compliance provision. In addition, > + * Licensee must cause all Covered Code to which Licensee contributes to > + * contain a file documenting the changes Licensee made to create that Covered > + * Code and the date of any change. Licensee must include in that file the > + * documentation of any changes made by any predecessor Licensee. Licensee > + * must include a prominent statement that the modification is derived, > + * directly or indirectly, from Original Intel Code. > + * > + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification without rights to further distribute source must > + * include the following Disclaimer and Export Compliance provision in the > + * documentation and/or other materials provided with distribution. In > + * addition, Licensee may not authorize further sublicense of source of any > + * portion of the Covered Code, and must include terms to the effect that the > + * license from Licensee to its licensee is limited to the intellectual > + * property embodied in the software Licensee provides to its licensee, and > + * not to intellectual property embodied in modifications its licensee may > + * make. > + * > + * 3.3. Redistribution of Executable. Redistribution in executable form of any > + * substantial portion of the Covered Code or modification must reproduce the > + * above Copyright Notice, and the following Disclaimer and Export Compliance > + * provision in the documentation and/or other materials provided with the > + * distribution. > + * > + * 3.4. Intel retains all right, title, and interest in and to the Original > + * Intel Code. > + * > + * 3.5. Neither the name Intel nor any other trademark owned or controlled by > + * Intel shall be used in advertising or otherwise to promote the sale, use or > + * other dealings in products derived from or relating to the Covered Code > + * without prior written authorization from Intel. > + * > + * 4. Disclaimer and Export Compliance > + * > + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED > + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE > + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, > + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY > + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY > + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A > + * PARTICULAR PURPOSE. > + * > + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES > + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR > + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, > + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY > + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL > + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS > + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY > + * LIMITED REMEDY. > + * > + * 4.3. Licensee shall not export, either directly or indirectly, any of this > + * software or system incorporating such software without first obtaining any > + * required license or other approval from the U. S. Department of Commerce or > + * any other agency or department of the United States Government. In the > + * event Licensee exports any such software from the United States or > + * re-exports any such software from a foreign destination, Licensee shall > + * ensure that the distribution and export/re-export of the software is in > + * compliance with all laws, regulations, orders, or other restrictions of the > + * U.S. Export Administration Regulations. Licensee agrees that neither it nor > + * any of its subsidiaries will export/re-export any technical data, process, > + * software, or service, directly or indirectly, to any country for which the > + * United States government or any agency thereof requires an export license, > + * other governmental approval, or letter of assurance, without first obtaining > + * such license, approval or letter. > + * > + *****************************************************************************/ > + > +#include "acpi.h" > +#include "accommon.h" > + > +#define _COMPONENT ACPI_UTILITIES > + ACPI_MODULE_NAME ("ahuuids") > + > +/* > + * Table of "known" (ACPI-related) UUIDs > + */ > +const AH_UUID AcpiUuids[] = > +{ > + {"PCI Host Bridge Device", > + "33db4d5b-1ff7-401c-9657-7441c03dd766"}, > + > + {"Platform-wide Capabilities", > + "0811b06e-4a27-44f9-8d60-3cbbc22e7b48"}, > + > + {"Dynamic Enumeration", > + "d8c1a3a6-be9b-4c9b-91bf-c3cb81fc5daf"}, > + > + {"GPIO Controller", > + "4f248f40-d5e2-499f-834c-27758ea1cd3f"}, > + > + {"Battery Thermal Limit", > + "4c2067e3-887d-475c-9720-4af1d3ed602e"}, > + > + {"Thermal Extensions", > + "14d399cd-7a27-4b18-8fb4-7cb7b9f4e500"}, > + > + {"USB Controller", > + "ce2ee385-00e6-48cb-9f05-2edb927c4899"}, > + > + {"HID I2C Device", > + "3cdff6f7-4267-4555-ad05-b30a3d8938de"}, > + > + {"Power Button Device", > + "dfbcf3c5-e7a5-44e6-9c1f-29c76f6e059c"}, > + > + {"Device Labeling Interface", > + "e5c937d0-3553-4d7a-9117-ea4d19c3434d"}, > + > + {"SATA Controller", > + "e4db149b-fcfe-425b-a6d8-92357d78fc7f"}, > + > + {"Physical Presence Interface", > + "3dddfaa6-361b-4eb4-a424-8d10089d1653"}, > + > + {NULL, NULL} > +}; > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiAhMatchUuid > + * > + * PARAMETERS: Data - Data buffer containing a UUID > + * > + * RETURN: ASCII description string for the UUID if it is found. > + * > + * DESCRIPTION: Returns a description string for "known" UUIDs, which are > + * are UUIDs that are related to ACPI in some way. > + * > + ******************************************************************************/ > + > +const char * > +AcpiAhMatchUuid ( > + UINT8 *Data) > +{ > + const AH_UUID *Info; > + UINT8 UuidBuffer[UUID_BUFFER_LENGTH]; > + > + > + /* Walk the table of known ACPI-related UUIDs */ > + > + for (Info = AcpiUuids; Info->Description; Info++) > + { > + AcpiUtConvertStringToUuid (Info->String, UuidBuffer); > + > + if (!ACPI_MEMCMP (Data, UuidBuffer, UUID_BUFFER_LENGTH)) > + { > + return (Info->Description); > + } > + } > + > + return (NULL); > +} > diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c > index efd72f6..30196df 100644 > --- a/src/acpica/source/common/dmextern.c > +++ b/src/acpica/source/common/dmextern.c > @@ -478,18 +478,37 @@ AcpiDmGetExternalsFromFile ( > while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ExternalRefFile)) > { > Token = strtok (StringBuffer, METHOD_SEPARATORS); /* "External" */ > - if (!Token) continue; > - if (strcmp (Token, "External")) continue; > + if (!Token) > + { > + continue; > + } > + if (strcmp (Token, "External")) > + { > + continue; > + } > > MethodName = strtok (NULL, METHOD_SEPARATORS); /* Method namepath */ > - if (!MethodName) continue; > + if (!MethodName) > + { > + continue; > + } > > Token = strtok (NULL, METHOD_SEPARATORS); /* "MethodObj" */ > - if (!Token) continue; > - if (strcmp (Token, "MethodObj")) continue; > + if (!Token) > + { > + continue; > + } > + > + if (strcmp (Token, "MethodObj")) > + { > + continue; > + } > > Token = strtok (NULL, METHOD_SEPARATORS); /* Arg count */ > - if (!Token) continue; > + if (!Token) > + { > + continue; > + } > > /* Convert arg count string to an integer */ > > diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c > index e2abd7a..efb50b5 100644 > --- a/src/acpica/source/common/dmtable.c > +++ b/src/acpica/source/common/dmtable.c > @@ -159,9 +159,21 @@ static const char *AcpiDmDmarSubnames[] = > "Reserved Memory Region", > "Root Port ATS Capability", > "Remapping Hardware Static Affinity", > + "ACPI Namespace Device Declaration", > "Unknown SubTable Type" /* Reserved */ > }; > > +static const char *AcpiDmDmarScope[] = > +{ > + "Reserved value", > + "PCI Endpoint Device", > + "PCI Bridge Device", > + "IOAPIC Device", > + "Message-capable HPET Device", > + "Namespace Device", > + "Unknown Scope Type" /* Reserved */ > +}; > + > static const char *AcpiDmEinjActions[] = > { > "Begin Operation", > @@ -232,6 +244,13 @@ static const char *AcpiDmErstInstructions[] = > "Unknown Instruction" > }; > > +static const char *AcpiDmGtdtSubnames[] = > +{ > + "Generic Timer Block", > + "Generic Watchdog Timer", > + "Unknown SubTable Type" /* Reserved */ > +}; > + > static const char *AcpiDmHestSubnames[] = > { > "IA-32 Machine Check Exception", > @@ -261,25 +280,28 @@ static const char *AcpiDmHestNotifySubnames[] = > > static const char *AcpiDmMadtSubnames[] = > { > - "Processor Local APIC", /* ACPI_MADT_TYPE_LOCAL_APIC */ > - "I/O APIC", /* ACPI_MADT_TYPE_IO_APIC */ > - "Interrupt Source Override", /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */ > - "NMI Source", /* ACPI_MADT_TYPE_NMI_SOURCE */ > - "Local APIC NMI", /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */ > - "Local APIC Address Override", /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */ > - "I/O SAPIC", /* ACPI_MADT_TYPE_IO_SAPIC */ > - "Local SAPIC", /* ACPI_MADT_TYPE_LOCAL_SAPIC */ > - "Platform Interrupt Sources", /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */ > - "Processor Local x2APIC", /* ACPI_MADT_TYPE_LOCAL_X2APIC */ > - "Local x2APIC NMI", /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */ > - "Generic Interrupt Controller", /* ACPI_MADT_GENERIC_INTERRUPT */ > - "Generic Interrupt Distributor",/* ACPI_MADT_GENERIC_DISTRIBUTOR */ > - "Unknown SubTable Type" /* Reserved */ > + "Processor Local APIC", /* ACPI_MADT_TYPE_LOCAL_APIC */ > + "I/O APIC", /* ACPI_MADT_TYPE_IO_APIC */ > + "Interrupt Source Override", /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */ > + "NMI Source", /* ACPI_MADT_TYPE_NMI_SOURCE */ > + "Local APIC NMI", /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */ > + "Local APIC Address Override", /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */ > + "I/O SAPIC", /* ACPI_MADT_TYPE_IO_SAPIC */ > + "Local SAPIC", /* ACPI_MADT_TYPE_LOCAL_SAPIC */ > + "Platform Interrupt Sources", /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */ > + "Processor Local x2APIC", /* ACPI_MADT_TYPE_LOCAL_X2APIC */ > + "Local x2APIC NMI", /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */ > + "Generic Interrupt Controller", /* ACPI_MADT_GENERIC_INTERRUPT */ > + "Generic Interrupt Distributor", /* ACPI_MADT_GENERIC_DISTRIBUTOR */ > + "Generic MSI Frame", /* ACPI_MADT_GENERIC_MSI_FRAME */ > + "Generic Interrupt Redistributor", /* ACPI_MADT_GENERIC_REDISTRIBUTOR */ > + "Unknown SubTable Type" /* Reserved */ > }; > > static const char *AcpiDmPcctSubnames[] = > { > "Generic Communications Subspace", /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */ > + "HW-Reduced Communications Subspace", > "Unknown SubTable Type" /* Reserved */ > }; > > @@ -378,7 +400,7 @@ ACPI_DMTABLE_DATA AcpiDmTableData[] = > {ACPI_SIG_ERST, NULL, AcpiDmDumpErst, DtCompileErst, TemplateErst, "Error Record Serialization Table"}, > {ACPI_SIG_FADT, NULL, AcpiDmDumpFadt, DtCompileFadt, TemplateFadt, "Fixed ACPI Description Table (FADT)"}, > {ACPI_SIG_FPDT, NULL, AcpiDmDumpFpdt, DtCompileFpdt, TemplateFpdt, "Firmware Performance Data Table"}, > - {ACPI_SIG_GTDT, AcpiDmTableInfoGtdt, NULL, NULL, TemplateGtdt, "Generic Timer Description Table"}, > + {ACPI_SIG_GTDT, NULL, AcpiDmDumpGtdt, DtCompileGtdt, TemplateGtdt, "Generic Timer Description Table"}, > {ACPI_SIG_HEST, NULL, AcpiDmDumpHest, DtCompileHest, TemplateHest, "Hardware Error Source Table"}, > {ACPI_SIG_HPET, AcpiDmTableInfoHpet, NULL, NULL, TemplateHpet, "High Precision Event Timer table"}, > {ACPI_SIG_IVRS, NULL, AcpiDmDumpIvrs, DtCompileIvrs, TemplateIvrs, "I/O Virtualization Reporting Structure"}, > @@ -777,6 +799,7 @@ AcpiDmDumpTable ( > case ACPI_DMT_SPACEID: > case ACPI_DMT_ACCWIDTH: > case ACPI_DMT_IVRS: > + case ACPI_DMT_GTDT: > case ACPI_DMT_MADT: > case ACPI_DMT_PCCT: > case ACPI_DMT_PMTT: > @@ -788,6 +811,7 @@ AcpiDmDumpTable ( > case ACPI_DMT_EINJINST: > case ACPI_DMT_ERSTACT: > case ACPI_DMT_ERSTINST: > + case ACPI_DMT_DMAR_SCOPE: > > ByteLength = 1; > break; > @@ -1119,6 +1143,19 @@ AcpiDmDumpTable ( > AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target), AcpiDmDmarSubnames[Temp16]); > break; > > + case ACPI_DMT_DMAR_SCOPE: > + > + /* DMAR device scope types */ > + > + Temp8 = *Target; > + if (Temp8 > ACPI_DMAR_SCOPE_TYPE_RESERVED) > + { > + Temp8 = ACPI_DMAR_SCOPE_TYPE_RESERVED; > + } > + > + AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmDmarScope[Temp8]); > + break; > + > case ACPI_DMT_EINJACT: > > /* EINJ Action types */ > @@ -1171,6 +1208,19 @@ AcpiDmDumpTable ( > AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmErstInstructions[Temp8]); > break; > > + case ACPI_DMT_GTDT: > + > + /* GTDT subtable types */ > + > + Temp8 = *Target; > + if (Temp8 > ACPI_GTDT_TYPE_RESERVED) > + { > + Temp8 = ACPI_GTDT_TYPE_RESERVED; > + } > + > + AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmGtdtSubnames[Temp8]); > + break; > + > case ACPI_DMT_HEST: > > /* HEST subtable types */ > diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c > index 70e9d4e..b0ae905 100644 > --- a/src/acpica/source/common/dmtbdump.c > +++ b/src/acpica/source/common/dmtbdump.c > @@ -963,18 +963,24 @@ AcpiDmDumpDmar ( > ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY); > break; > > - case ACPI_DMAR_TYPE_ATSR: > + case ACPI_DMAR_TYPE_ROOT_ATS: > > InfoTable = AcpiDmTableInfoDmar2; > ScopeOffset = sizeof (ACPI_DMAR_ATSR); > break; > > - case ACPI_DMAR_HARDWARE_AFFINITY: > + case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: > > InfoTable = AcpiDmTableInfoDmar3; > ScopeOffset = sizeof (ACPI_DMAR_RHSA); > break; > > + case ACPI_DMAR_TYPE_NAMESPACE: > + > + InfoTable = AcpiDmTableInfoDmar4; > + ScopeOffset = sizeof (ACPI_DMAR_ANDD); > + break; > + > default: > > AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", SubTable->Type); > @@ -988,7 +994,16 @@ AcpiDmDumpDmar ( > return; > } > > - /* Dump the device scope entries (if any) */ > + /* > + * Dump the optional device scope entries > + */ > + if ((SubTable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) || > + (SubTable->Type == ACPI_DMAR_TYPE_NAMESPACE)) > + { > + /* These types do not support device scopes */ > + > + goto NextSubtable; > + } > > ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, SubTable, ScopeOffset); > while (ScopeOffset < SubTable->Length) > @@ -1028,6 +1043,7 @@ AcpiDmDumpDmar ( > ScopeTable, ScopeTable->Length); > } > > +NextSubtable: > /* Point to next subtable */ > > Offset += SubTable->Length; > @@ -1227,6 +1243,123 @@ NextSubTable: > > /******************************************************************************* > * > + * FUNCTION: AcpiDmDumpGtdt > + * > + * PARAMETERS: Table - A GTDT table > + * > + * RETURN: None > + * > + * DESCRIPTION: Format the contents of a GTDT. This table type consists > + * of an open-ended number of subtables. > + * > + ******************************************************************************/ > + > +void > +AcpiDmDumpGtdt ( > + ACPI_TABLE_HEADER *Table) > +{ > + ACPI_STATUS Status; > + ACPI_GTDT_HEADER *SubTable; > + UINT32 Length = Table->Length; > + UINT32 Offset = sizeof (ACPI_TABLE_GTDT); > + ACPI_DMTABLE_INFO *InfoTable; > + UINT32 SubTableLength; > + UINT32 GtCount; > + ACPI_GTDT_TIMER_ENTRY *GtxTable; > + > + > + /* Main table */ > + > + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Subtables */ > + > + SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset); > + while (Offset < Table->Length) > + { > + /* Common subtable header */ > + > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, SubTable, > + SubTable->Length, AcpiDmTableInfoGtdtHdr); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + GtCount = 0; > + switch (SubTable->Type) > + { > + case ACPI_GTDT_TYPE_TIMER_BLOCK: > + > + SubTableLength = sizeof (ACPI_GTDT_TIMER_BLOCK); > + GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, > + SubTable))->TimerCount; > + > + InfoTable = AcpiDmTableInfoGtdt0; > + break; > + > + case ACPI_GTDT_TYPE_WATCHDOG: > + > + SubTableLength = sizeof (ACPI_GTDT_WATCHDOG); > + > + InfoTable = AcpiDmTableInfoGtdt1; > + break; > + > + default: > + > + /* Cannot continue on unknown type - no length */ > + > + AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n", SubTable->Type); > + return; > + } > + > + Status = AcpiDmDumpTable (Length, Offset, SubTable, > + SubTable->Length, InfoTable); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + > + /* Point to end of current subtable (each subtable above is of fixed length) */ > + > + Offset += SubTableLength; > + > + /* If there are any Gt Timer Blocks from above, dump them now */ > + > + if (GtCount) > + { > + GtxTable = ACPI_ADD_PTR (ACPI_GTDT_TIMER_ENTRY, SubTable, SubTableLength); > + SubTableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY); > + > + while (GtCount) > + { > + AcpiOsPrintf ("\n"); > + Status = AcpiDmDumpTable (Length, Offset, GtxTable, > + sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a); > + if (ACPI_FAILURE (Status)) > + { > + return; > + } > + Offset += sizeof (ACPI_GTDT_TIMER_ENTRY); > + GtxTable++; > + GtCount--; > + } > + } > + > + /* Point to next subtable */ > + > + SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, SubTable, SubTableLength); > + } > +} > + > + > +/******************************************************************************* > + * > * FUNCTION: AcpiDmDumpHest > * > * PARAMETERS: Table - A HEST table > @@ -1734,6 +1867,16 @@ AcpiDmDumpMadt ( > InfoTable = AcpiDmTableInfoMadt12; > break; > > + case ACPI_MADT_TYPE_GENERIC_MSI_FRAME: > + > + InfoTable = AcpiDmTableInfoMadt13; > + break; > + > + case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR: > + > + InfoTable = AcpiDmTableInfoMadt14; > + break; > + > default: > > AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", SubTable->Type); > @@ -2089,6 +2232,7 @@ AcpiDmDumpPcct ( > { > ACPI_STATUS Status; > ACPI_PCCT_SUBSPACE *SubTable; > + ACPI_DMTABLE_INFO *InfoTable; > UINT32 Length = Table->Length; > UINT32 Offset = sizeof (ACPI_TABLE_PCCT); > > @@ -2116,10 +2260,20 @@ AcpiDmDumpPcct ( > return; > } > > - /* ACPI 5.0: Only one type of PCCT subtable is supported */ > - > - if (SubTable->Header.Type != ACPI_PCCT_TYPE_GENERIC_SUBSPACE) > + switch (SubTable->Header.Type) > { > + case ACPI_PCCT_TYPE_GENERIC_SUBSPACE: > + > + InfoTable = AcpiDmTableInfoPcct0; > + break; > + > + case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE: > + > + InfoTable = AcpiDmTableInfoPcct1; > + break; > + > + default: > + > AcpiOsPrintf ( > "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n", > SubTable->Header.Type); > @@ -2128,7 +2282,7 @@ AcpiDmDumpPcct ( > > AcpiOsPrintf ("\n"); > Status = AcpiDmDumpTable (Length, Offset, SubTable, > - SubTable->Header.Length, AcpiDmTableInfoPcct0); > + SubTable->Header.Length, InfoTable); > if (ACPI_FAILURE (Status)) > { > return; > @@ -2282,8 +2436,7 @@ AcpiDmDumpPmtt ( > if (DomainCount) > { > AcpiOsPrintf ( > - "\n**** DomainCount exceeds subtable length\n\n", > - MemSubTable->Type); > + "\n**** DomainCount exceeds subtable length\n\n"); > } > > /* Walk the physical component (DIMM) subtables */ > diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c > index 7a9520d..2a3bed4 100644 > --- a/src/acpica/source/common/dmtbinfo.c > +++ b/src/acpica/source/common/dmtbinfo.c > @@ -209,11 +209,16 @@ > #define ACPI_DMAR1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_RESERVED_MEMORY,f) > #define ACPI_DMAR2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_ATSR,f) > #define ACPI_DMAR3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_RHSA,f) > +#define ACPI_DMAR4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_ANDD,f) > #define ACPI_EINJ0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f) > #define ACPI_ERST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f) > #define ACPI_FPDTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f) > #define ACPI_FPDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_BOOT,f) > #define ACPI_FPDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_S3PT_PTR,f) > +#define ACPI_GTDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_BLOCK,f) > +#define ACPI_GTDT0a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_ENTRY,f) > +#define ACPI_GTDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_WATCHDOG,f) > +#define ACPI_GTDTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_HEADER,f) > #define ACPI_HEST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f) > #define ACPI_HEST1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_CORRECTED,f) > #define ACPI_HEST2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_NMI,f) > @@ -246,6 +251,8 @@ > #define ACPI_MADT10_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f) > #define ACPI_MADT11_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f) > #define ACPI_MADT12_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_DISTRIBUTOR,f) > +#define ACPI_MADT13_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_MSI_FRAME,f) > +#define ACPI_MADT14_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_REDISTRIBUTOR,f) > #define ACPI_MADTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f) > #define ACPI_MCFG0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MCFG_ALLOCATION,f) > #define ACPI_MPST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_NODE,f) > @@ -256,6 +263,7 @@ > #define ACPI_MSCT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MSCT_PROXIMITY,f) > #define ACPI_MTMR0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MTMR_ENTRY,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_PMTT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_SOCKET,f) > #define ACPI_PMTT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_CONTROLLER,f) > #define ACPI_PMTT1A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_DOMAIN,f) > @@ -288,6 +296,8 @@ > #define ACPI_SRAT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_MEM_AFFINITY,f,o) > #define ACPI_SRAT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f,o) > #define ACPI_GTDT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_GTDT,f,o) > +#define ACPI_GTDT0a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_TIMER_ENTRY,f,o) > +#define ACPI_GTDT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_WATCHDOG,f,o) > #define ACPI_LPITH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_LPIT_HEADER,f,o) > #define ACPI_MADT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_MADT,f,o) > #define ACPI_MADT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_APIC,f,o) > @@ -299,9 +309,11 @@ > #define ACPI_MADT9_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC,f,o) > #define ACPI_MADT10_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f,o) > #define ACPI_MADT11_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f,o) > +#define ACPI_MADT13_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_MSI_FRAME,f,o) > #define ACPI_MPST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MPST_POWER_NODE,f,o) > #define ACPI_MPST2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MPST_POWER_DATA,f,o) > #define ACPI_PCCT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_PCCT,f,o) > +#define ACPI_PCCT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_HW_REDUCED,f,o) > #define ACPI_PMTTH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PMTT_HEADER,f,o) > #define ACPI_WDDT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_WDDT,f,o) > #define ACPI_EINJ0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o) > @@ -512,17 +524,22 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFadt2[] = > { > {ACPI_DMT_GAS, ACPI_FADT_OFFSET (ResetRegister), "Reset Register", 0}, > {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (ResetValue), "Value to cause reset", 0}, > - {ACPI_DMT_UINT24, ACPI_FADT_OFFSET (Reserved4[0]), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (ArmBootFlags), "Reserved", 0}, > + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MinorRevision), "Reserved", 0}, > ACPI_DMT_TERMINATOR > }; > > -/* ACPI 2.0+ Extensions (FADT version 3 and 4) */ > +/* ACPI 2.0+ Extensions (FADT version 3, 4, and 5) */ > > ACPI_DMTABLE_INFO AcpiDmTableInfoFadt3[] = > { > {ACPI_DMT_GAS, ACPI_FADT_OFFSET (ResetRegister), "Reset Register", 0}, > {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (ResetValue), "Value to cause reset", 0}, > - {ACPI_DMT_UINT24, ACPI_FADT_OFFSET (Reserved4[0]), "Reserved", 0}, > + {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (ArmBootFlags), "ARM Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0), "PSCI Compliant", 0}, > + {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0), "Must use HVC for PSCI", 0}, > + ACPI_DMT_NEW_LINE, > + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MinorRevision), "FADT Minor Revision", 0}, > {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (XFacs), "FACS Address", 0}, > {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (XDsdt), "DSDT Address", 0}, > {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm1aEventBlock), "PM1A Event Block", 0}, > @@ -879,7 +896,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoDmarHdr[] = > > ACPI_DMTABLE_INFO AcpiDmTableInfoDmarScope[] = > { > - {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (EntryType), "Device Scope Entry Type", 0}, > + {ACPI_DMT_DMAR_SCOPE, ACPI_DMARS_OFFSET (EntryType), "Device Scope Type", 0}, > {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Length), "Entry Length", DT_LENGTH}, > {ACPI_DMT_UINT16, ACPI_DMARS_OFFSET (Reserved), "Reserved", 0}, > {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (EnumerationId), "Enumeration ID", 0}, > @@ -931,6 +948,16 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[] = > ACPI_DMT_TERMINATOR > }; > > +/* 4: ACPI Namespace Device Declaration Structure */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[] = > +{ > + {ACPI_DMT_UINT24, ACPI_DMAR4_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_UINT8, ACPI_DMAR4_OFFSET (DeviceNumber), "Device Number", 0}, > + {ACPI_DMT_STRING, ACPI_DMAR4_OFFSET (DeviceName[0]), "Device Name", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > > /******************************************************************************* > * > @@ -1070,29 +1097,89 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[] = > > ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt[] = > { > - {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (Address), "Timer Address", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (Flags,0), "Memory Present", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterBlockAddresss), "Counter Block Address", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (Reserved), "Reserved", 0}, > ACPI_DMT_NEW_LINE, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecurePl1Interrupt), "Secure PL1 Interrupt", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecurePl1Flags), "SPL1 Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (SecurePl1Flags,0), "Trigger Mode", 0}, > - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (SecurePl1Flags,0), "Polarity", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Interrupt), "Secure EL1 Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Flags), "EL1 Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Always On", 0}, > ACPI_DMT_NEW_LINE, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecurePl1Interrupt), "Non-Secure PL1 Interrupt", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecurePl1Flags), "NSPL1 Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecurePl1Flags,0),"Trigger Mode", 0}, > - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecurePl1Flags,0),"Polarity", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Interrupt), "Non-Secure EL1 Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Flags), "NEL1 Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Always On", 0}, > ACPI_DMT_NEW_LINE, > {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, > {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerFlags), "VT Flags (decoded below)", DT_FLAG}, > {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Trigger Mode", 0}, > {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Always On", 0}, > + ACPI_DMT_NEW_LINE, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Interrupt), "Non-Secure EL2 Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Flags), "NEL2 Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Always On", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterReadBlockAddress), "Counter Read Block Address", 0}, > ACPI_DMT_NEW_LINE, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecurePl2Interrupt), "Non-Secure PL2 Interrupt", 0}, > - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecurePl2Flags), "NSPL2 Flags (decoded below)", DT_FLAG}, > - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecurePl2Flags,0),"Trigger Mode", 0}, > - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecurePl2Flags,0),"Polarity", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerCount), "Platform Timer Count", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerOffset), "Platform Timer Offset", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* GTDT Subtable header (one per Subtable) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtHdr[] = > +{ > + {ACPI_DMT_GTDT, ACPI_GTDTH_OFFSET (Type), "Subtable Type", 0}, > + {ACPI_DMT_UINT16, ACPI_GTDTH_OFFSET (Length), "Length", DT_LENGTH}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* GTDT Subtables */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0[] = > +{ > + {ACPI_DMT_UINT8, ACPI_GTDT0_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT0_OFFSET (BlockAddress), "Block Address", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerCount), "Timer Count", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerOffset), "Timer Offset", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0a[] = > +{ > + {ACPI_DMT_UINT8 , ACPI_GTDT0a_OFFSET (FrameNumber), "Frame Number", 0}, > + {ACPI_DMT_UINT24, ACPI_GTDT0a_OFFSET (Reserved[0]), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (El0BaseAddress), "EL0 Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerFlags), "Timer Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerFlags), "Virtual Timer Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Polarity", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (CommonFlags), "Common Flags (decoded below)", 0}, > + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Secure", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Always On", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt1[] = > +{ > + {ACPI_DMT_UINT8, ACPI_GTDT1_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (RefreshFrameAddress), "Refresh Frame Address", 0}, > + {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (ControlFrameAddress), "Control Frame Address", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, > + {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerFlags), "Timer Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, > + {ACPI_DMT_FLAG1, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, > + {ACPI_DMT_FLAG2, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Security", 0}, > ACPI_DMT_TERMINATOR > }; > > @@ -1599,14 +1686,21 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt10[] = > ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11[] = > { > {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (Reserved), "Reserved", 0}, > - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (GicId), "Local GIC Hardware ID", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (CpuInterfaceNumber), "CPU Interface Number", 0}, > {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Uid), "Processor UID", 0}, > {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > {ACPI_DMT_FLAG0, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Processor Enabled", 0}, > + {ACPI_DMT_FLAG1, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Performance Interrupt Trigger Mode", 0}, > + {ACPI_DMT_FLAG2, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Virtual GIC Interrupt Trigger Mode", 0}, > {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (ParkingVersion), "Parking Protocol Version", 0}, > {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (PerformanceInterrupt), "Performance Interrupt", 0}, > {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ParkedAddress), "Parked Address", 0}, > {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicvBaseAddress), "Virtual GIC Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GichBaseAddress), "Hypervisor GIC Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (VgicInterrupt), "Virtual GIC Interrupt", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicrBaseAddress), "Redistributor Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ArmMpidr), "ARM MPIDR", 0}, > ACPI_DMT_TERMINATOR > }; > > @@ -1622,6 +1716,30 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt12[] = > ACPI_DMT_TERMINATOR > }; > > +/* 13: Generic MSI Frame (ACPI 5.1) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt13[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (MsiFrameId), "MSI Frame ID", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT13_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_MADT13_FLAG_OFFSET (Flags,0), "Select SPI", 0}, > + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiCount), "SPI Count", 0}, > + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiBase), "SPI Base", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > +/* 14: Generic Redistributor (ACPI 5.1) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14[] = > +{ > + {ACPI_DMT_UINT16, ACPI_MADT14_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_MADT14_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT32, ACPI_MADT14_OFFSET (Length), "Length", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > > /******************************************************************************* > * > @@ -1841,6 +1959,26 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[] = > ACPI_DMT_TERMINATOR > }; > > +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ > + > +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[] = > +{ > + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (DoorbellInterrupt), "Doorbell Interrupt", 0}, > + {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, > + {ACPI_DMT_FLAG0, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Polarity", 0}, > + {ACPI_DMT_FLAG1, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Mode", 0}, > + {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Reserved), "Reserved", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (BaseAddress), "Base Address", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (Length), "Address Length", 0}, > + {ACPI_DMT_GAS, ACPI_PCCT1_OFFSET (DoorbellRegister), "Doorbell Register", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (PreserveMask), "Preserve Mask", 0}, > + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (WriteMask), "Write Mask", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (Latency), "Command Latency", 0}, > + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, > + {ACPI_DMT_UINT16, ACPI_PCCT1_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, > + ACPI_DMT_TERMINATOR > +}; > + > > /******************************************************************************* > * > diff --git a/src/acpica/source/compiler/Makefile.am b/src/acpica/source/compiler/Makefile.am > index 55eccb9..a1de14a 100644 > --- a/src/acpica/source/compiler/Makefile.am > +++ b/src/acpica/source/compiler/Makefile.am > @@ -124,6 +124,7 @@ libfwtsiasl_la_SOURCES = \ > ../components/utilities/utdebug.c \ > ../components/utilities/utdelete.c \ > ../components/utilities/utglobal.c \ > + ../components/utilities/uthex.c \ > ../components/utilities/utinit.c \ > ../components/utilities/utlock.c \ > ../components/utilities/utobject.c \ > @@ -140,6 +141,7 @@ libfwtsiasl_la_SOURCES = \ > ../components/utilities/utaddress.c \ > ../components/utilities/utownerid.c \ > ../components/utilities/utexcep.c \ > + ../components/utilities/utuuid.c \ > ../components/namespace/nsaccess.c \ > ../components/namespace/nsalloc.c \ > ../components/namespace/nsdump.c \ > diff --git a/src/acpica/source/compiler/aslanalyze.c b/src/acpica/source/compiler/aslanalyze.c > index 16e28d3..8bfc9ac 100644 > --- a/src/acpica/source/compiler/aslanalyze.c > +++ b/src/acpica/source/compiler/aslanalyze.c > @@ -641,3 +641,51 @@ ApCheckRegMethod ( > > AslError (ASL_WARNING, ASL_MSG_NO_REGION, Op, NULL); > } > + > + > +/******************************************************************************* > + * > + * FUNCTION: ApFindNameInScope > + * > + * PARAMETERS: Name - Name to search for > + * Op - Current parse op > + * > + * RETURN: TRUE if name found in the same scope as Op. > + * > + * DESCRIPTION: Determine if a name appears in the same scope as Op, as either > + * a Method() or a Name(). > + * > + ******************************************************************************/ > + > +BOOLEAN > +ApFindNameInScope ( > + char *Name, > + ACPI_PARSE_OBJECT *Op) > +{ > + ACPI_PARSE_OBJECT *Next; > + ACPI_PARSE_OBJECT *Parent; > + > + > + /* Get the start of the current scope */ > + > + Parent = Op->Asl.Parent; > + Next = Parent->Asl.Child; > + > + /* Search entire scope for a match to the name */ > + > + while (Next) > + { > + if ((Next->Asl.ParseOpcode == PARSEOP_METHOD) || > + (Next->Asl.ParseOpcode == PARSEOP_NAME)) > + { > + if (ACPI_COMPARE_NAME (Name, Next->Asl.NameSeg)) > + { > + return (TRUE); > + } > + } > + > + Next = Next->Asl.Next; > + } > + > + return (FALSE); > +} > diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h > index 6e59b0f..c4afef4 100644 > --- a/src/acpica/source/compiler/aslcompiler.h > +++ b/src/acpica/source/compiler/aslcompiler.h > @@ -347,6 +347,11 @@ void > ApCheckRegMethod ( > ACPI_PARSE_OBJECT *Op); > > +BOOLEAN > +ApFindNameInScope ( > + char *Name, > + ACPI_PARSE_OBJECT *Op); > + > > /* > * aslerror - error handling/reporting > @@ -962,10 +967,6 @@ void > UtDisplaySummary ( > UINT32 FileId); > > -UINT8 > -UtHexCharToValue ( > - int HexChar); > - > void > UtConvertByteToHex ( > UINT8 RawByte, > @@ -1027,11 +1028,6 @@ AuValidateUuid ( > char *InString); > > ACPI_STATUS > -AuConvertStringToUuid ( > - char *InString, > - char *UuIdBuffer); > - > -ACPI_STATUS > AuConvertUuidToString ( > char *UuIdBuffer, > char *OutString); > diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l > index b06aa65..bdcc8ed 100644 > --- a/src/acpica/source/compiler/aslcompiler.l > +++ b/src/acpica/source/compiler/aslcompiler.l > @@ -182,10 +182,10 @@ NamePathTail [.]{NameSeg} > [ \t] { count (0); } > > > -"/*" { if (!AslDoComment ()) yyterminate (); } > -"//" { if (!AslDoCommentType2 ()) yyterminate (); } > +"/*" { if (!AslDoComment ()) {yyterminate ();} } > +"//" { if (!AslDoCommentType2 ()) {yyterminate ();} } > > -"\"" { if (AslDoStringLiteral ()) return (PARSEOP_STRING_LITERAL); else yyterminate (); } > +"\"" { if (AslDoStringLiteral ()) {return (PARSEOP_STRING_LITERAL);} else {yyterminate ();} } > ";" { count (0); return(';'); } > > > @@ -711,9 +711,9 @@ NamePathTail [.]{NameSeg} > AslCompilererror (MsgBuffer);} > > <<EOF>> { if (AslPopInputFileStack ()) > - yyterminate(); > + {yyterminate();} > else > - return (PARSEOP_INCLUDE_END);}; > + {return (PARSEOP_INCLUDE_END);} }; > > %% > > diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h > index 71f52db..b05bd7f 100644 > --- a/src/acpica/source/compiler/asldefine.h > +++ b/src/acpica/source/compiler/asldefine.h > @@ -127,7 +127,7 @@ > #define ASL_INVOCATION_NAME "iasl" > #define ASL_CREATOR_ID "INTL" > > -#define ASL_COMPLIANCE "Supports ACPI Specification Revision 5.0A" > +#define ASL_COMPLIANCE "Supports ACPI Specification Revision 5.1" > > > /* Configuration constants */ > diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h > index 4d56c05..53a500e 100644 > --- a/src/acpica/source/compiler/aslglobal.h > +++ b/src/acpica/source/compiler/aslglobal.h > @@ -135,11 +135,6 @@ > > #ifdef _DECLARE_GLOBALS > UINT32 Gbl_ExceptionCount[ASL_NUM_REPORT_LEVELS] = {0,0,0,0,0,0}; > -char AslHexLookup[] = > -{ > - '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' > -}; > - > > /* Table below must match ASL_FILE_TYPES in asltypes.h */ > > @@ -164,7 +159,6 @@ ASL_FILE_INFO Gbl_Files [ASL_NUM_FILES] = > > #else > extern UINT32 Gbl_ExceptionCount[ASL_NUM_REPORT_LEVELS]; > -extern char AslHexLookup[]; > extern ASL_FILE_INFO Gbl_Files [ASL_NUM_FILES]; > #endif > > diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c > index 5b271d3..11b5d57 100644 > --- a/src/acpica/source/compiler/aslmessages.c > +++ b/src/acpica/source/compiler/aslmessages.c > @@ -305,6 +305,7 @@ const char *AslCompilerMsgs [] = > /* ASL_MSG_WRITE */ "Could not write file", > /* ASL_MSG_RANGE */ "Constant out of range", > /* ASL_MSG_BUFFER_ALLOCATION */ "Could not allocate line buffer", > +/* ASL_MSG_MISSING_DEPENDENCY */ "Missing dependency" > }; > > /* Table compiler */ > diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h > index 150425c..5743075 100644 > --- a/src/acpica/source/compiler/aslmessages.h > +++ b/src/acpica/source/compiler/aslmessages.h > @@ -307,6 +307,7 @@ typedef enum > ASL_MSG_WRITE, > ASL_MSG_RANGE, > ASL_MSG_BUFFER_ALLOCATION, > + ASL_MSG_MISSING_DEPENDENCY, > > /* These messages are used by the Data Table compiler only */ > > diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c > index edf2fa4..58c1cc8 100644 > --- a/src/acpica/source/compiler/aslmethod.c > +++ b/src/acpica/source/compiler/aslmethod.c > @@ -180,6 +180,17 @@ MtMethodAnalysisWalkBegin ( > > WalkInfo->MethodStack = MethodInfo; > > + /* Special handling for _DSD, must have a _HID also */ > + > + if (!ACPI_STRCMP (METHOD_NAME__DSD, Op->Asl.NameSeg)) > + { > + if (!ApFindNameInScope (METHOD_NAME__HID, Op)) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_DSD requires _HID in same scope"); > + } > + } > + > /* Get the name node */ > > Next = Op->Asl.Child; > @@ -485,6 +496,15 @@ MtMethodAnalysisWalkBegin ( > } > } > > + else if (!ACPI_STRCMP (METHOD_NAME__DSD, Op->Asl.NameSeg)) > + { > + if (!ApFindNameInScope (METHOD_NAME__HID, Op)) > + { > + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, > + "_DSD requires _HID in same scope"); > + } > + } > + > break; > > default: > diff --git a/src/acpica/source/compiler/aslopcodes.c b/src/acpica/source/compiler/aslopcodes.c > index 53971e0..bd8ea0e 100644 > --- a/src/acpica/source/compiler/aslopcodes.c > +++ b/src/acpica/source/compiler/aslopcodes.c > @@ -695,10 +695,10 @@ OpcDoEisaId ( > (UINT32) ((UINT8) (InString[1] - 0x40)) << 21 | > (UINT32) ((UINT8) (InString[2] - 0x40)) << 16 | > > - (UtHexCharToValue (InString[3])) << 12 | > - (UtHexCharToValue (InString[4])) << 8 | > - (UtHexCharToValue (InString[5])) << 4 | > - UtHexCharToValue (InString[6]); > + (AcpiUtAsciiCharToHex (InString[3])) << 12 | > + (AcpiUtAsciiCharToHex (InString[4])) << 8 | > + (AcpiUtAsciiCharToHex (InString[5])) << 4 | > + AcpiUtAsciiCharToHex (InString[6]); > > /* Swap to little-endian to get final ID (see function header) */ > > @@ -738,7 +738,7 @@ OpcDoUuId ( > ACPI_PARSE_OBJECT *Op) > { > char *InString; > - char *Buffer; > + UINT8 *Buffer; > ACPI_STATUS Status = AE_OK; > ACPI_PARSE_OBJECT *NewOp; > > @@ -753,7 +753,7 @@ OpcDoUuId ( > } > else > { > - (void) AuConvertStringToUuid (InString, Buffer); > + AcpiUtConvertStringToUuid (InString, Buffer); > } > > /* Change Op to a Buffer */ > diff --git a/src/acpica/source/compiler/aslprepkg.c b/src/acpica/source/compiler/aslprepkg.c > index 2de5559..8184a3d 100644 > --- a/src/acpica/source/compiler/aslprepkg.c > +++ b/src/acpica/source/compiler/aslprepkg.c > @@ -361,6 +361,41 @@ ApCheckPackage ( > Package, 1, Count); > break; > > + case ACPI_PTYPE2_UUID_PAIR: > + > + /* The package contains a variable list of UUID Buffer/Package pairs */ > + > + /* The length of the package must be even */ > + > + if (Count & 1) > + { > + sprintf (MsgBuffer, "%4.4s: Package length, %d, must be even.", > + Predefined->Info.Name, Count); > + > + AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH, > + ParentOp->Asl.Child, MsgBuffer); > + } > + > + /* Validate the alternating types */ > + > + for (i = 0; i < Count; ++i) > + { > + if (i & 1) > + { > + ApCheckObjectType (Predefined->Info.Name, Op, > + Package->RetInfo.ObjectType2, i); > + } > + else > + { > + ApCheckObjectType (Predefined->Info.Name, Op, > + Package->RetInfo.ObjectType1, i); > + } > + > + Op = Op->Asl.Next; > + } > + > + break; > + > case ACPI_PTYPE2: > case ACPI_PTYPE2_FIXED: > case ACPI_PTYPE2_MIN: > diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c > index f33c3bd..5a02470 100644 > --- a/src/acpica/source/compiler/aslutils.c > +++ b/src/acpica/source/compiler/aslutils.c > @@ -315,37 +315,6 @@ UtEndEvent ( > > /******************************************************************************* > * > - * FUNCTION: UtHexCharToValue > - * > - * PARAMETERS: HexChar - Hex character in Ascii > - * > - * RETURN: The binary value of the hex character > - * > - * DESCRIPTION: Perform ascii-to-hex translation > - * > - ******************************************************************************/ > - > -UINT8 > -UtHexCharToValue ( > - int HexChar) > -{ > - > - if (HexChar <= 0x39) > - { > - return ((UINT8) (HexChar - 0x30)); > - } > - > - if (HexChar <= 0x46) > - { > - return ((UINT8) (HexChar - 0x37)); > - } > - > - return ((UINT8) (HexChar - 0x57)); > -} > - > - > -/******************************************************************************* > - * > * FUNCTION: UtConvertByteToHex > * > * PARAMETERS: RawByte - Binary data > @@ -368,8 +337,8 @@ UtConvertByteToHex ( > Buffer[0] = '0'; > Buffer[1] = 'x'; > > - Buffer[2] = (UINT8) AslHexLookup[(RawByte >> 4) & 0xF]; > - Buffer[3] = (UINT8) AslHexLookup[RawByte & 0xF]; > + Buffer[2] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 4); > + Buffer[3] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 0); > } > > > @@ -384,7 +353,7 @@ UtConvertByteToHex ( > * RETURN: Ascii hex byte is stored in Buffer. > * > * DESCRIPTION: Perform hex-to-ascii translation. The return data is prefixed > - * with "0x" > + * with '0', and a trailing 'h' is added. > * > ******************************************************************************/ > > @@ -395,8 +364,8 @@ UtConvertByteToAsmHex ( > { > > Buffer[0] = '0'; > - Buffer[1] = (UINT8) AslHexLookup[(RawByte >> 4) & 0xF]; > - Buffer[2] = (UINT8) AslHexLookup[RawByte & 0xF]; > + Buffer[1] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 4); > + Buffer[2] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 0); > Buffer[3] = 'h'; > } > > diff --git a/src/acpica/source/compiler/asluuid.c b/src/acpica/source/compiler/asluuid.c > index ad76c2d..98a63a3 100644 > --- a/src/acpica/source/compiler/asluuid.c > +++ b/src/acpica/source/compiler/asluuid.c > @@ -113,42 +113,13 @@ > * > *****************************************************************************/ > > - > #include "aslcompiler.h" > > #define _COMPONENT ACPI_COMPILER > ACPI_MODULE_NAME ("asluuid") > > > -/* > - * UUID support functions. > - * > - * This table is used to convert an input UUID ascii string to a 16 byte > - * buffer and the reverse. The table maps a UUID buffer index 0-15 to > - * the index within the 36-byte UUID string where the associated 2-byte > - * hex value can be found. > - * > - * 36-byte UUID strings are of the form: > - * aabbccdd-eeff-gghh-iijj-kkllmmnnoopp > - * Where aa-pp are one byte hex numbers, made up of two hex digits > - * > - * Note: This table is basically the inverse of the string-to-offset table > - * found in the ACPI spec in the description of the ToUUID macro. > - */ > -static UINT8 Gbl_MapToUuidOffset[16] = > -{ > - 6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34 > -}; > - > -#define UUID_BUFFER_LENGTH 16 > -#define UUID_STRING_LENGTH 36 > - > -/* Positions for required hyphens (dashes) in UUID strings */ > - > -#define UUID_HYPHEN1_OFFSET 8 > -#define UUID_HYPHEN2_OFFSET 13 > -#define UUID_HYPHEN3_OFFSET 18 > -#define UUID_HYPHEN4_OFFSET 23 > +extern UINT8 AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH]; > > > /******************************************************************************* > @@ -209,42 +180,6 @@ AuValidateUuid ( > > /******************************************************************************* > * > - * FUNCTION: AuConvertStringToUuid > - * > - * PARAMETERS: InString - 36-byte formatted UUID string > - * UuidBuffer - 16-byte UUID buffer > - * > - * RETURN: Status > - * > - * DESCRIPTION: Convert 36-byte formatted UUID string to 16-byte UUID buffer > - * > - ******************************************************************************/ > - > -ACPI_STATUS > -AuConvertStringToUuid ( > - char *InString, > - char *UuidBuffer) > -{ > - UINT32 i; > - > - > - if (!InString || !UuidBuffer) > - { > - return (AE_BAD_PARAMETER); > - } > - > - for (i = 0; i < UUID_BUFFER_LENGTH; i++) > - { > - UuidBuffer[i] = (char) (UtHexCharToValue (InString[Gbl_MapToUuidOffset[i]]) << 4); > - UuidBuffer[i] |= (char) UtHexCharToValue (InString[Gbl_MapToUuidOffset[i] + 1]); > - } > - > - return (AE_OK); > -} > - > - > -/******************************************************************************* > - * > * FUNCTION: AuConvertUuidToString > * > * PARAMETERS: UuidBuffer - 16-byte UUID buffer > @@ -272,8 +207,11 @@ AuConvertUuidToString ( > > for (i = 0; i < UUID_BUFFER_LENGTH; i++) > { > - OutString[Gbl_MapToUuidOffset[i]] = (UINT8) AslHexLookup[(UuidBuffer[i] >> 4) & 0xF]; > - OutString[Gbl_MapToUuidOffset[i] + 1] = (UINT8) AslHexLookup[UuidBuffer[i] & 0xF]; > + OutString[AcpiGbl_MapToUuidOffset[i]] = > + AcpiUtHexToAsciiChar (UuidBuffer[i], 4); > + > + OutString[AcpiGbl_MapToUuidOffset[i] + 1] = > + AcpiUtHexToAsciiChar (UuidBuffer[i], 0); > } > > /* Insert required hyphens (dashes) */ > diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h > index 313650a..1fb1f12 100644 > --- a/src/acpica/source/compiler/dtcompiler.h > +++ b/src/acpica/source/compiler/dtcompiler.h > @@ -492,6 +492,10 @@ DtCompileFpdt ( > void **PFieldList); > > ACPI_STATUS > +DtCompileGtdt ( > + void **PFieldList); > + > +ACPI_STATUS > DtCompileHest ( > void **PFieldList); > > diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c > index 46d56f8..e03f891 100644 > --- a/src/acpica/source/compiler/dtfield.c > +++ b/src/acpica/source/compiler/dtfield.c > @@ -331,7 +331,7 @@ DtCompileUuid ( > } > else > { > - Status = AuConvertStringToUuid (InString, (char *) Buffer); > + AcpiUtConvertStringToUuid (InString, Buffer); > } > > return (Status); > diff --git a/src/acpica/source/compiler/dttable.c b/src/acpica/source/compiler/dttable.c > index 5e310d6..db95850 100644 > --- a/src/acpica/source/compiler/dttable.c > +++ b/src/acpica/source/compiler/dttable.c > @@ -808,16 +808,21 @@ DtCompileDmar ( > InfoTable = AcpiDmTableInfoDmar1; > break; > > - case ACPI_DMAR_TYPE_ATSR: > + case ACPI_DMAR_TYPE_ROOT_ATS: > > InfoTable = AcpiDmTableInfoDmar2; > break; > > - case ACPI_DMAR_HARDWARE_AFFINITY: > + case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: > > InfoTable = AcpiDmTableInfoDmar3; > break; > > + case ACPI_DMAR_TYPE_NAMESPACE: > + > + InfoTable = AcpiDmTableInfoDmar4; > + break; > + > default: > > DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "DMAR"); > @@ -834,10 +839,20 @@ DtCompileDmar ( > > ParentTable = DtPeekSubtable (); > DtInsertSubtable (ParentTable, Subtable); > - DtPushSubtable (Subtable); > > - /* Optional Device Scope subtables */ > + /* > + * Optional Device Scope subtables > + */ > + if ((DmarHeader->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) || > + (DmarHeader->Type == ACPI_DMAR_TYPE_NAMESPACE)) > + { > + /* These types do not support device scopes */ > > + DtPopSubtable (); > + continue; > + } > + > + DtPushSubtable (Subtable); > DeviceScopeLength = DmarHeader->Length - Subtable->Length - > ParentTable->Length; > while (DeviceScopeLength) > @@ -1010,6 +1025,125 @@ DtCompileFadt ( > return (AE_OK); > } > > +/****************************************************************************** > + * > + * FUNCTION: DtCompileGtdt > + * > + * PARAMETERS: List - Current field list pointer > + * > + * RETURN: Status > + * > + * DESCRIPTION: Compile GTDT. > + * > + *****************************************************************************/ > + > +ACPI_STATUS > +DtCompileGtdt ( > + void **List) > +{ > + ACPI_STATUS Status; > + DT_SUBTABLE *Subtable; > + DT_SUBTABLE *ParentTable; > + DT_FIELD **PFieldList = (DT_FIELD **) List; > + DT_FIELD *SubtableStart; > + ACPI_SUBTABLE_HEADER *GtdtHeader; > + ACPI_DMTABLE_INFO *InfoTable; > + UINT32 GtCount; > + > + > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt, > + &Subtable, TRUE); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + > + while (*PFieldList) > + { > + SubtableStart = *PFieldList; > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdtHdr, > + &Subtable, TRUE); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + DtPushSubtable (Subtable); > + > + GtdtHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer); > + > + switch (GtdtHeader->Type) > + { > + case ACPI_GTDT_TYPE_TIMER_BLOCK: > + > + InfoTable = AcpiDmTableInfoGtdt0; > + break; > + > + case ACPI_GTDT_TYPE_WATCHDOG: > + > + InfoTable = AcpiDmTableInfoGtdt1; > + break; > + > + default: > + > + DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "GTDT"); > + return (AE_ERROR); > + } > + > + Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + ParentTable = DtPeekSubtable (); > + DtInsertSubtable (ParentTable, Subtable); > + > + /* > + * Additional GT block subtable data > + */ > + > + switch (GtdtHeader->Type) > + { > + case ACPI_GTDT_TYPE_TIMER_BLOCK: > + > + DtPushSubtable (Subtable); > + ParentTable = DtPeekSubtable (); > + > + GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, > + Subtable->Buffer - sizeof(ACPI_GTDT_HEADER)))->TimerCount; > + while (GtCount) > + { > + Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt0a, > + &Subtable, TRUE); > + if (ACPI_FAILURE (Status)) > + { > + return (Status); > + } > + > + > + DtInsertSubtable (ParentTable, Subtable); > + GtCount--; > + } > + DtPopSubtable (); > + break; > + > + default: > + > + break; > + } > + > + DtPopSubtable (); > + } > + > + return (AE_OK); > +} > + > > /****************************************************************************** > * > @@ -1573,6 +1707,16 @@ DtCompileMadt ( > InfoTable = AcpiDmTableInfoMadt12; > break; > > + case ACPI_MADT_TYPE_GENERIC_MSI_FRAME: > + > + InfoTable = AcpiDmTableInfoMadt13; > + break; > + > + case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR: > + > + InfoTable = AcpiDmTableInfoMadt14; > + break; > + > default: > > DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "MADT"); > @@ -1864,6 +2008,11 @@ DtCompilePcct ( > InfoTable = AcpiDmTableInfoPcct0; > break; > > + case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE: > + > + InfoTable = AcpiDmTableInfoPcct1; > + break; > + > default: > > DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PCCT"); > diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h > index 681d3e5..eefae69 100644 > --- a/src/acpica/source/compiler/dttemplate.h > +++ b/src/acpica/source/compiler/dttemplate.h > @@ -467,7 +467,7 @@ const unsigned char TemplateFadt[] = > 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ > 0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x01, /* 00000070 "........" */ > 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ > - 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000080 "........" */ > + 0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00, /* 00000080 "........" */ > 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000088 "........" */ > 0x00,0x00,0x00,0x00,0x01,0x20,0x00,0x02, /* 00000090 "..... .." */ > 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000098 "........" */ > @@ -506,16 +506,34 @@ const unsigned char TemplateFpdt[] = > > const unsigned char TemplateGtdt[] = > { > - 0x47,0x54,0x44,0x54,0x50,0x00,0x00,0x00, /* 00000000 "GTDTP..." */ > - 0x01,0xF1,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ > - 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ > - 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ > - 0x23,0x06,0x11,0x20,0x00,0x00,0x00,0x00, /* 00000020 "#.. ...." */ > - 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000028 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000048 "........" */ > + 0x47,0x54,0x44,0x54,0xe0,0x00,0x00,0x00, /* 00000000 "GTDT...." */ > + 0x02,0xb0,0x4c,0x49,0x4e,0x41,0x52,0x4f, /* 00000008 "..LINARO" */ > + 0x52,0x54,0x53,0x4d,0x56,0x45,0x56,0x38, /* 00000010 "RTSMVEV8" */ > + 0x01,0x00,0x00,0x00,0x49,0x4e,0x54,0x4c, /* 00000018 "....INTL" */ > + 0x24,0x04,0x14,0x20,0x00,0x00,0x00,0x00, /* 00000020 "$.. ...." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ > + 0x1d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */ > + 0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000038 "........" */ > + 0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000040 "........" */ > + 0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000048 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ > + 0x02,0x00,0x00,0x00,0x60,0x00,0x00,0x00, /* 00000058 "....`..." */ > + 0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 ".d......" */ > + 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000068 "........" */ > + 0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000070 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000088 "........" */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000090 "........" */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000098 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000a0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000a8 "........" */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000b0 "........" */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000b8 "........" */ > + 0x00,0x00,0x00,0x00,0x01,0x1c,0x00,0x00, /* 000000c0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000c8 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000d0 "........" */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000d8 "........" */ > }; > > const unsigned char TemplateHest[] = > @@ -647,41 +665,48 @@ const unsigned char TemplateLpit[] = > 0x00,0x00,0x00,0x00 /* 000000B0 "...." */ > }; > > -/* MADT with ACPI 5.0 subtables */ > +/* MADT with ACPI 5.1 subtables */ > > const unsigned char TemplateMadt[] = > { > - 0x41,0x50,0x49,0x43,0xF6,0x00,0x00,0x00, /* 00000000 "APIC...." */ > - 0x01,0xB0,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ > - 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ > - 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ > - 0x23,0x06,0x11,0x20,0x00,0x00,0x00,0x00, /* 00000020 "#.. ...." */ > + 0x41,0x50,0x49,0x43,0x2a,0x01,0x00,0x00, /* 00000000 "APIC*..." */ > + 0x04,0x34,0x49,0x4e,0x54,0x45,0x4c,0x20, /* 00000008 ".4INTEL " */ > + 0x54,0x45,0x4d,0x50,0x4c,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ > + 0x01,0x00,0x00,0x00,0x49,0x4e,0x54,0x4c, /* 00000018 "....INTL" */ > + 0x24,0x04,0x14,0x20,0x00,0x00,0x00,0x00, /* 00000020 "$.. ...." */ > 0x01,0x00,0x00,0x00,0x00,0x08,0x00,0x00, /* 00000028 "........" */ > - 0x01,0x00,0x00,0x00,0x01,0x0C,0x01,0x00, /* 00000030 "........" */ > + 0x01,0x00,0x00,0x00,0x01,0x0c,0x01,0x00, /* 00000030 "........" */ > 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ > - 0x02,0x0A,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ > - 0x00,0x00,0x03,0x08,0x0D,0x00,0x01,0x00, /* 00000048 "........" */ > + 0x02,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ > + 0x00,0x00,0x03,0x08,0x0d,0x00,0x01,0x00, /* 00000048 "........" */ > 0x00,0x00,0x04,0x06,0x00,0x05,0x00,0x01, /* 00000050 "........" */ > - 0x05,0x0C,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ > + 0x05,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ > 0x00,0x00,0x00,0x00,0x06,0x10,0x00,0x00, /* 00000060 "........" */ > 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ > 0x00,0x00,0x00,0x00,0x07,0x16,0x00,0x00, /* 00000070 "........" */ > 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000078 "........" */ > - 0x00,0x00,0x00,0x00,0x5C,0x43,0x50,0x55, /* 00000080 "....\CPU" */ > + 0x00,0x00,0x00,0x00,0x5c,0x43,0x50,0x55, /* 00000080 "....\CPU" */ > 0x30,0x00,0x08,0x10,0x05,0x00,0x00,0x00, /* 00000088 "0......." */ > 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, /* 00000090 "........" */ > 0x00,0x00,0x09,0x10,0x00,0x00,0x00,0x00, /* 00000098 "........" */ > - 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */ > - 0x00,0x00,0x0A,0x0C,0x05,0x00,0x00,0x00, /* 000000A8 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x0B,0x28, /* 000000B0 ".......(" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */ > - 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C8 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D0 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18, /* 000000D8 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E0 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E8 "........" */ > - 0x00,0x00,0x00,0x00,0x00,0x00 /* 000000F0 "......" */ > + 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000a0 "........" */ > + 0x00,0x00,0x0a,0x0c,0x05,0x00,0x00,0x00, /* 000000a8 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x4c, /* 000000b0 ".......L" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000b8 "........" */ > + 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000c0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000c8 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000d0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000d8 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000e0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000e8 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000f0 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000f8 "........" */ > + 0x00,0x00,0x0e,0x10,0x00,0x00,0x00,0x00, /* 00000100 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */ > + 0x00,0x00,0x0c,0x18,0x00,0x00,0x00,0x00, /* 00000110 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000118 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "........" */ > + 0x00,0x00 /* 00000128 ".. " */ > }; > > const unsigned char TemplateMcfg[] = > @@ -775,27 +800,27 @@ const unsigned char TemplateMtmr[] = > const unsigned char TemplatePcct[] = > { > 0x50,0x43,0x43,0x54,0xAC,0x00,0x00,0x00, /* 00000000 "PCCT...." */ > - 0x01,0x97,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ > - 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ > + 0x01,0xCF,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ > + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ > 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ > - 0x15,0x11,0x13,0x20,0x01,0x00,0x00,0x00, /* 00000020 "... ...." */ > + 0x27,0x06,0x14,0x20,0x01,0x00,0x00,0x00, /* 00000020 "'.. ...." */ > 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ > 0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 ".>......" */ > - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, /* 00000038 "........" */ > - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, /* 00000040 """""""""" */ > - 0x01,0x32,0x00,0x03,0x33,0x33,0x33,0x33, /* 00000048 ".2..3333" */ > - 0x33,0x33,0x33,0x33,0x44,0x44,0x44,0x44, /* 00000050 "3333DDDD" */ > - 0x44,0x44,0x44,0x44,0x55,0x55,0x55,0x55, /* 00000058 "DDDDUUUU" */ > - 0x55,0x55,0x55,0x55,0x66,0x66,0x66,0x66, /* 00000060 "UUUUffff" */ > - 0x77,0x77,0x77,0x77,0x88,0x88,0x00,0x3E, /* 00000068 "wwww...>" */ > - 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, /* 00000070 "........" */ > - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEE,0xEE, /* 00000078 "........" */ > - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0x01,0x32, /* 00000080 ".......2" */ > - 0x00,0x03,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, /* 00000088 "........" */ > - 0xDD,0xDD,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, /* 00000090 "........" */ > - 0xCC,0xCC,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, /* 00000098 "........" */ > - 0xBB,0xBB,0xAA,0xAA,0xAA,0xAA,0x99,0x99, /* 000000A0 "........" */ > - 0x99,0x99,0x88,0x88 /* 000000A8 "...." */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ > + 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ > + 0x01,0x32,0x00,0x03,0x00,0x00,0x00,0x00, /* 00000048 ".2......" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ > + 0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, /* 00000058 "........" */ > + 0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00, /* 00000060 "........" */ > + 0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x3E, /* 00000068 ".......>" */ > + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000070 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00, /* 00000078 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x32, /* 00000080 ".......2" */ > + 0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ > + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000090 "........" */ > + 0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000098 "........" */ > + 0xFF,0xFF,0x01,0x00,0x00,0x00,0x01,0x00, /* 000000A0 "........" */ > + 0x00,0x00,0x01,0x00 /* 000000A8 "...." */ > }; > > const unsigned char TemplatePmtt[] = > diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c > index d3cedf1..51d50c7 100644 > --- a/src/acpica/source/compiler/dtutils.c > +++ b/src/acpica/source/compiler/dtutils.c > @@ -573,6 +573,7 @@ DtGetFieldLength ( > case ACPI_DMT_SPACEID: > case ACPI_DMT_ACCWIDTH: > case ACPI_DMT_IVRS: > + case ACPI_DMT_GTDT: > case ACPI_DMT_MADT: > case ACPI_DMT_PCCT: > case ACPI_DMT_PMTT: > @@ -584,6 +585,7 @@ DtGetFieldLength ( > case ACPI_DMT_EINJINST: > case ACPI_DMT_ERSTACT: > case ACPI_DMT_ERSTINST: > + case ACPI_DMT_DMAR_SCOPE: > > ByteLength = 1; > break; > diff --git a/src/acpica/source/components/disassembler/dmbuffer.c b/src/acpica/source/components/disassembler/dmbuffer.c > index 70d28e3..a43497c 100644 > --- a/src/acpica/source/components/disassembler/dmbuffer.c > +++ b/src/acpica/source/components/disassembler/dmbuffer.c > @@ -113,9 +113,9 @@ > * > *****************************************************************************/ > > - > #include "acpi.h" > #include "accommon.h" > +#include "acutils.h" > #include "acdisasm.h" > #include "acparser.h" > #include "amlcode.h" > @@ -130,6 +130,10 @@ > /* Local prototypes */ > > static void > +AcpiDmUuid ( > + ACPI_PARSE_OBJECT *Op); > + > +static void > AcpiDmUnicode ( > ACPI_PARSE_OBJECT *Op); > > @@ -143,6 +147,7 @@ AcpiDmPldBuffer ( > UINT8 *ByteData, > UINT32 ByteCount); > > + > #define ACPI_BUFFER_BYTES_PER_LINE 8 > > > @@ -288,6 +293,11 @@ AcpiDmByteList ( > AcpiOsPrintf ("\n"); > break; > > + case ACPI_DASM_UUID: > + > + AcpiDmUuid (Op); > + break; > + > case ACPI_DASM_UNICODE: > > AcpiDmUnicode (Op); > @@ -313,6 +323,137 @@ AcpiDmByteList ( > > /******************************************************************************* > * > + * FUNCTION: AcpiDmIsUuidBuffer > + * > + * PARAMETERS: Op - Buffer Object to be examined > + * > + * RETURN: TRUE if buffer contains a UUID > + * > + * DESCRIPTION: Determine if a buffer Op contains a UUID > + * > + * To help determine whether the buffer is a UUID versus a raw data buffer, > + * there a are a couple bytes we can look at: > + * > + * xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx > + * > + * The variant covered by the UUID specification is indicated by the two most > + * significant bits of N being 1 0 (i.e., the hexadecimal N will always be > + * 8, 9, A, or B). > + * > + * The variant covered by the UUID specification has five versions. For this > + * variant, the four bits of M indicates the UUID version (i.e., the > + * hexadecimal M will be either 1, 2, 3, 4, or 5). > + * > + ******************************************************************************/ > + > +BOOLEAN > +AcpiDmIsUuidBuffer ( > + ACPI_PARSE_OBJECT *Op) > +{ > + UINT8 *ByteData; > + UINT32 ByteCount; > + ACPI_PARSE_OBJECT *SizeOp; > + ACPI_PARSE_OBJECT *NextOp; > + > + > + /* Buffer size is the buffer argument */ > + > + SizeOp = Op->Common.Value.Arg; > + > + /* Next, the initializer byte list to examine */ > + > + NextOp = SizeOp->Common.Next; > + if (!NextOp) > + { > + return (FALSE); > + } > + > + /* Extract the byte list info */ > + > + ByteData = NextOp->Named.Data; > + ByteCount = (UINT32) NextOp->Common.Value.Integer; > + > + /* Byte count must be exactly 16 */ > + > + if (ByteCount != UUID_BUFFER_LENGTH) > + { > + return (FALSE); > + } > + > + /* Check for valid "M" and "N" values (see function header above) */ > + > + if (((ByteData[7] & 0xF0) == 0x00) || /* M={1,2,3,4,5} */ > + ((ByteData[7] & 0xF0) > 0x50) || > + ((ByteData[8] & 0xF0) < 0x80) || /* N={8,9,A,B} */ > + ((ByteData[8] & 0xF0) > 0xB0)) > + { > + return (FALSE); > + } > + > + /* Ignore the Size argument in the disassembly of this buffer op */ > + > + SizeOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; > + return (TRUE); > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiDmUuid > + * > + * PARAMETERS: Op - Byte List op containing a UUID > + * > + * RETURN: None > + * > + * DESCRIPTION: Dump a buffer containing a UUID as a standard ASCII string. > + * > + * Output Format: > + * In its canonical form, the UUID is represented by a string containing 32 > + * lowercase hexadecimal digits, displayed in 5 groups separated by hyphens. > + * The complete form is 8-4-4-4-12 for a total of 36 characters (32 > + * alphanumeric characters representing hex digits and 4 hyphens). In bytes, > + * 4-2-2-2-6. Example: > + * > + * ToUUID ("107ededd-d381-4fd7-8da9-08e9a6c79644") > + * > + ******************************************************************************/ > + > +static void > +AcpiDmUuid ( > + ACPI_PARSE_OBJECT *Op) > +{ > + UINT8 *Data; > + const char *Description; > + > + > + Data = ACPI_CAST_PTR (UINT8, Op->Named.Data); > + > + /* Emit the 36-byte UUID string in the proper format/order */ > + > + AcpiOsPrintf ( > + "\"%2.2x%2.2x%2.2x%2.2x-" > + "%2.2x%2.2x-" > + "%2.2x%2.2x-" > + "%2.2x%2.2x-" > + "%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\")", > + Data[3], Data[2], Data[1], Data[0], > + Data[5], Data[4], > + Data[7], Data[6], > + Data[8], Data[9], > + Data[10], Data[11], Data[12], Data[13], Data[14], Data[15]); > + > + /* Dump the UUID description string if available */ > + > + Description = AcpiAhMatchUuid (Data); > + if (Description) > + { > + AcpiOsPrintf (" /* %s */", Description); > + } > +} > + > + > +/******************************************************************************* > + * > * FUNCTION: AcpiDmIsUnicodeBuffer > * > * PARAMETERS: Op - Buffer Object to be examined > diff --git a/src/acpica/source/components/disassembler/dmopcode.c b/src/acpica/source/components/disassembler/dmopcode.c > index db30c00..d15e215 100644 > --- a/src/acpica/source/components/disassembler/dmopcode.c > +++ b/src/acpica/source/components/disassembler/dmopcode.c > @@ -899,7 +899,12 @@ AcpiDmDisassembleOneOp ( > } > } > > - if (AcpiDmIsUnicodeBuffer (Op)) > + if (AcpiDmIsUuidBuffer (Op)) > + { > + Op->Common.DisasmOpcode = ACPI_DASM_UUID; > + AcpiOsPrintf ("ToUUID ("); > + } > + else if (AcpiDmIsUnicodeBuffer (Op)) > { > Op->Common.DisasmOpcode = ACPI_DASM_UNICODE; > AcpiOsPrintf ("Unicode ("); > diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c > index 8c877ae..1f63e08 100644 > --- a/src/acpica/source/components/disassembler/dmwalk.c > +++ b/src/acpica/source/components/disassembler/dmwalk.c > @@ -357,7 +357,8 @@ AcpiDmBlockType ( > > case AML_BUFFER_OP: > > - if (Op->Common.DisasmOpcode == ACPI_DASM_UNICODE) > + if ((Op->Common.DisasmOpcode == ACPI_DASM_UNICODE) || > + (Op->Common.DisasmOpcode == ACPI_DASM_UUID)) > { > return (BLOCK_NONE); > } > diff --git a/src/acpica/source/components/events/evgpe.c b/src/acpica/source/components/events/evgpe.c > index bb955ac..ea1a3a6 100644 > --- a/src/acpica/source/components/events/evgpe.c > +++ b/src/acpica/source/components/events/evgpe.c > @@ -833,22 +833,6 @@ AcpiEvGpeDispatch ( > } > > /* > - * If edge-triggered, clear the GPE status bit now. Note that > - * level-triggered events are cleared after the GPE is serviced. > - */ > - if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == > - ACPI_GPE_EDGE_TRIGGERED) > - { > - Status = AcpiHwClearGpe (GpeEventInfo); > - if (ACPI_FAILURE (Status)) > - { > - ACPI_EXCEPTION ((AE_INFO, Status, > - "Unable to clear GPE %02X", GpeNumber)); > - return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED); > - } > - } > - > - /* > * Always disable the GPE so that it does not keep firing before > * any asynchronous activity completes (either from the execution > * of a GPE method or an asynchronous GPE handler.) > @@ -866,6 +850,24 @@ AcpiEvGpeDispatch ( > } > > /* > + * If edge-triggered, clear the GPE status bit now. Note that > + * level-triggered events are cleared after the GPE is serviced. > + */ > + if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == > + ACPI_GPE_EDGE_TRIGGERED) > + { > + Status = AcpiHwClearGpe (GpeEventInfo); > + if (ACPI_FAILURE (Status)) > + { > + ACPI_EXCEPTION ((AE_INFO, Status, > + "Unable to clear GPE %02X", GpeNumber)); > + (void) AcpiHwLowSetGpe (GpeEventInfo, > + ACPI_GPE_CONDITIONAL_ENABLE); > + return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED); > + } > + } > + > + /* > * Dispatch the GPE to either an installed handler or the control > * method associated with this GPE (_Lxx or _Exx). If a handler > * exists, we invoke it and do not attempt to run the method. > diff --git a/src/acpica/source/components/events/evxfgpe.c b/src/acpica/source/components/events/evxfgpe.c > index e180bd3..b116322 100644 > --- a/src/acpica/source/components/events/evxfgpe.c > +++ b/src/acpica/source/components/events/evxfgpe.c > @@ -213,12 +213,23 @@ AcpiEnableGpe ( > > Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); > > - /* Ensure that we have a valid GPE number */ > - > + /* > + * Ensure that we have a valid GPE number and that there is some way > + * of handling the GPE (handler or a GPE method). In other words, we > + * won't allow a valid GPE to be enabled if there is no way to handle it. > + */ > GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); > if (GpeEventInfo) > { > - Status = AcpiEvAddGpeReference (GpeEventInfo); > + if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) != > + ACPI_GPE_DISPATCH_NONE) > + { > + Status = AcpiEvAddGpeReference (GpeEventInfo); > + } > + else > + { > + Status = AE_NO_HANDLER; > + } > } > > AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); > @@ -348,6 +359,60 @@ ACPI_EXPORT_SYMBOL (AcpiSetGpe) > > /******************************************************************************* > * > + * FUNCTION: AcpiMarkGpeForWake > + * > + * PARAMETERS: GpeDevice - Parent GPE Device. NULL for GPE0/GPE1 > + * GpeNumber - GPE level within the GPE block > + * > + * RETURN: Status > + * > + * DESCRIPTION: Mark a GPE as having the ability to wake the system. Simply > + * sets the ACPI_GPE_CAN_WAKE flag. > + * > + * Some potential callers of AcpiSetupGpeForWake may know in advance that > + * there won't be any notify handlers installed for device wake notifications > + * from the given GPE (one example is a button GPE in Linux). For these cases, > + * AcpiMarkGpeForWake should be used instead of AcpiSetupGpeForWake. > + * This will set the ACPI_GPE_CAN_WAKE flag for the GPE without trying to > + * setup implicit wake notification for it (since there's no handler method). > + * > + ******************************************************************************/ > + > +ACPI_STATUS > +AcpiMarkGpeForWake ( > + ACPI_HANDLE GpeDevice, > + UINT32 GpeNumber) > +{ > + ACPI_GPE_EVENT_INFO *GpeEventInfo; > + ACPI_STATUS Status = AE_BAD_PARAMETER; > + ACPI_CPU_FLAGS Flags; > + > + > + ACPI_FUNCTION_TRACE (AcpiMarkGpeForWake); > + > + > + Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); > + > + /* Ensure that we have a valid GPE number */ > + > + GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); > + if (GpeEventInfo) > + { > + /* Mark the GPE as a possible wake event */ > + > + GpeEventInfo->Flags |= ACPI_GPE_CAN_WAKE; > + Status = AE_OK; > + } > + > + AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); > + return_ACPI_STATUS (Status); > +} > + > +ACPI_EXPORT_SYMBOL (AcpiMarkGpeForWake) > + > + > +/******************************************************************************* > + * > * FUNCTION: AcpiSetupGpeForWake > * > * PARAMETERS: WakeDevice - Device associated with the GPE (via _PRW) > diff --git a/src/acpica/source/components/executer/exdebug.c b/src/acpica/source/components/executer/exdebug.c > index e374e13..b7d47fd 100644 > --- a/src/acpica/source/components/executer/exdebug.c > +++ b/src/acpica/source/components/executer/exdebug.c > @@ -154,6 +154,7 @@ AcpiExDoDebugObject ( > UINT32 Index) > { > UINT32 i; > + UINT32 Timer; > > > ACPI_FUNCTION_TRACE_PTR (ExDoDebugObject, SourceDesc); > @@ -168,12 +169,20 @@ AcpiExDoDebugObject ( > } > > /* > + * We will emit the current timer value (in microseconds) with each > + * debug output. Only need the lower 26 bits. This allows for 67 > + * million microseconds or 67 seconds before rollover. > + */ > + Timer = (UINT32) (AcpiOsGetTimer () / 10); /* (100 nanoseconds to microseconds) */ > + Timer &= 0x03FFFFFF; > + > + /* > * Print line header as long as we are not in the middle of an > * object display > */ > if (!((Level > 0) && Index == 0)) > { > - AcpiOsPrintf ("[ACPI Debug] %*s", Level, " "); > + AcpiOsPrintf ("[ACPI Debug %.8u] %*s", Timer, Level, " "); > } > > /* Display the index for package output only */ > diff --git a/src/acpica/source/components/executer/exdump.c b/src/acpica/source/components/executer/exdump.c > index 7f66714..68a0054 100644 > --- a/src/acpica/source/components/executer/exdump.c > +++ b/src/acpica/source/components/executer/exdump.c > @@ -580,7 +580,7 @@ AcpiExDumpObject ( > } > } > > - AcpiOsPrintf ("\n", Next); > + AcpiOsPrintf ("\n"); > break; > > case ACPI_EXD_HDLR_LIST: > @@ -614,7 +614,7 @@ AcpiExDumpObject ( > } > } > > - AcpiOsPrintf ("\n", Next); > + AcpiOsPrintf ("\n"); > break; > > case ACPI_EXD_RGN_LIST: > @@ -648,7 +648,7 @@ AcpiExDumpObject ( > } > } > > - AcpiOsPrintf ("\n", Next); > + AcpiOsPrintf ("\n"); > break; > > case ACPI_EXD_NODE: > diff --git a/src/acpica/source/components/executer/exfield.c b/src/acpica/source/components/executer/exfield.c > index e8ddec8..55934de 100644 > --- a/src/acpica/source/components/executer/exfield.c > +++ b/src/acpica/source/components/executer/exfield.c > @@ -275,14 +275,13 @@ AcpiExReadDataFromField ( > Length = AcpiExGetSerialAccessLength (AccessorType, > ObjDesc->Field.AccessLength); > > - /* > - * Add additional 2 bytes for modeled GenericSerialBus data buffer: > - * typedef struct { > - * BYTEStatus; // Byte 0 of the data buffer > - * BYTELength; // Byte 1 of the data buffer > - * BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer, > - * } > - */ > + /* > + * Add additional 2 bytes for the GenericSerialBus data buffer: > + * > + * Status; (Byte 0 of the data buffer) > + * Length; (Byte 1 of the data buffer) > + * Data[x-1]; (Bytes 2-x of the arbitrary length data buffer) > + */ > Length += 2; > Function = ACPI_READ | (AccessorType << 16); > } > @@ -469,14 +468,13 @@ AcpiExWriteDataToField ( > Length = AcpiExGetSerialAccessLength (AccessorType, > ObjDesc->Field.AccessLength); > > - /* > - * Add additional 2 bytes for modeled GenericSerialBus data buffer: > - * typedef struct { > - * BYTEStatus; // Byte 0 of the data buffer > - * BYTELength; // Byte 1 of the data buffer > - * BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer, > - * } > - */ > + /* > + * Add additional 2 bytes for the GenericSerialBus data buffer: > + * > + * Status; (Byte 0 of the data buffer) > + * Length; (Byte 1 of the data buffer) > + * Data[x-1]; (Bytes 2-x of the arbitrary length data buffer) > + */ > Length += 2; > Function = ACPI_WRITE | (AccessorType << 16); > } > diff --git a/src/acpica/source/components/namespace/nsobject.c b/src/acpica/source/components/namespace/nsobject.c > index 060157b..74470f0 100644 > --- a/src/acpica/source/components/namespace/nsobject.c > +++ b/src/acpica/source/components/namespace/nsobject.c > @@ -335,17 +335,16 @@ AcpiNsDetachObject ( > { > Node->Object = Node->Object->Common.NextObject; > } > - } > > - /* > - * Detach the object from any data objects (which are still held by > - * the namespace node) > - */ > - > - if (ObjDesc->Common.NextObject && > - ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA)) > - { > - ObjDesc->Common.NextObject = NULL; > + /* > + * Detach the object from any data objects (which are still held by > + * the namespace node) > + */ > + if (ObjDesc->Common.NextObject && > + ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA)) > + { > + ObjDesc->Common.NextObject = NULL; > + } > } > > /* Reset the node type to untyped */ > diff --git a/src/acpica/source/components/utilities/utdecode.c b/src/acpica/source/components/utilities/utdecode.c > index 8566819..61826fe 100644 > --- a/src/acpica/source/components/utilities/utdecode.c > +++ b/src/acpica/source/components/utilities/utdecode.c > @@ -165,38 +165,6 @@ const UINT8 AcpiGbl_NsProperties[ACPI_NUM_NS_TYPES] = > > /******************************************************************************* > * > - * FUNCTION: AcpiUtHexToAsciiChar > - * > - * PARAMETERS: Integer - Contains the hex digit > - * Position - bit position of the digit within the > - * integer (multiple of 4) > - * > - * RETURN: The converted Ascii character > - * > - * DESCRIPTION: Convert a hex digit to an Ascii character > - * > - ******************************************************************************/ > - > -/* Hex to ASCII conversion table */ > - > -static const char AcpiGbl_HexToAscii[] = > -{ > - '0','1','2','3','4','5','6','7', > - '8','9','A','B','C','D','E','F' > -}; > - > -char > -AcpiUtHexToAsciiChar ( > - UINT64 Integer, > - UINT32 Position) > -{ > - > - return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]); > -} > - > - > -/******************************************************************************* > - * > * FUNCTION: AcpiUtGetRegionName > * > * PARAMETERS: Space ID - ID for the region > @@ -613,7 +581,8 @@ static const char *AcpiGbl_GenericNotify[ACPI_NOTIFY_MAX + 1] = > /* 09 */ "Device PLD Check", > /* 0A */ "Reserved", > /* 0B */ "System Locality Update", > - /* 0C */ "Shutdown Request" > + /* 0C */ "Shutdown Request", > + /* 0D */ "System Resource Affinity Update" > }; > > static const char *AcpiGbl_DeviceNotify[4] = > @@ -647,7 +616,7 @@ AcpiUtGetNotifyName ( > ACPI_OBJECT_TYPE Type) > { > > - /* 00 - 0C are common to all object types */ > + /* 00 - 0D are common to all object types */ > > if (NotifyValue <= ACPI_NOTIFY_MAX) > { > diff --git a/src/acpica/source/components/utilities/utfileio.c b/src/acpica/source/components/utilities/utfileio.c > index 78807f2..9501e22 100644 > --- a/src/acpica/source/components/utilities/utfileio.c > +++ b/src/acpica/source/components/utilities/utfileio.c > @@ -304,8 +304,7 @@ AcpiUtReadTable ( > Status = FlCheckForAscii (fp, NULL, FALSE); > if (ACPI_SUCCESS (Status)) > { > - AcpiOsPrintf ("File appears to be ASCII only, must be binary\n", > - TableHeader.Length, FileSize); > + AcpiOsPrintf ("File appears to be ASCII only, must be binary\n"); > } > #endif > return (AE_BAD_HEADER); > diff --git a/src/acpica/source/components/utilities/uthex.c b/src/acpica/source/components/utilities/uthex.c > new file mode 100644 > index 0000000..ba2b259 > --- /dev/null > +++ b/src/acpica/source/components/utilities/uthex.c > @@ -0,0 +1,185 @@ > +/****************************************************************************** > + * > + * Module Name: uthex -- Hex/ASCII support functions > + * > + *****************************************************************************/ > + > +/****************************************************************************** > + * > + * 1. Copyright Notice > + * > + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp. > + * All rights reserved. > + * > + * 2. License > + * > + * 2.1. This is your license from Intel Corp. under its intellectual property > + * rights. You may have additional license terms from the party that provided > + * you this software, covering your right to use that party's intellectual > + * property rights. > + * > + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a > + * copy of the source code appearing in this file ("Covered Code") an > + * irrevocable, perpetual, worldwide license under Intel's copyrights in the > + * base code distributed originally by Intel ("Original Intel Code") to copy, > + * make derivatives, distribute, use and display any portion of the Covered > + * Code in any form, with the right to sublicense such rights; and > + * > + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent > + * license (with the right to sublicense), under only those claims of Intel > + * patents that are infringed by the Original Intel Code, to make, use, sell, > + * offer to sell, and import the Covered Code and derivative works thereof > + * solely to the minimum extent necessary to exercise the above copyright > + * license, and in no event shall the patent license extend to any additions > + * to or modifications of the Original Intel Code. No other license or right > + * is granted directly or by implication, estoppel or otherwise; > + * > + * The above copyright and patent license is granted only if the following > + * conditions are met: > + * > + * 3. Conditions > + * > + * 3.1. Redistribution of Source with Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification with rights to further distribute source must include > + * the above Copyright Notice, the above License, this list of Conditions, > + * and the following Disclaimer and Export Compliance provision. In addition, > + * Licensee must cause all Covered Code to which Licensee contributes to > + * contain a file documenting the changes Licensee made to create that Covered > + * Code and the date of any change. Licensee must include in that file the > + * documentation of any changes made by any predecessor Licensee. Licensee > + * must include a prominent statement that the modification is derived, > + * directly or indirectly, from Original Intel Code. > + * > + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification without rights to further distribute source must > + * include the following Disclaimer and Export Compliance provision in the > + * documentation and/or other materials provided with distribution. In > + * addition, Licensee may not authorize further sublicense of source of any > + * portion of the Covered Code, and must include terms to the effect that the > + * license from Licensee to its licensee is limited to the intellectual > + * property embodied in the software Licensee provides to its licensee, and > + * not to intellectual property embodied in modifications its licensee may > + * make. > + * > + * 3.3. Redistribution of Executable. Redistribution in executable form of any > + * substantial portion of the Covered Code or modification must reproduce the > + * above Copyright Notice, and the following Disclaimer and Export Compliance > + * provision in the documentation and/or other materials provided with the > + * distribution. > + * > + * 3.4. Intel retains all right, title, and interest in and to the Original > + * Intel Code. > + * > + * 3.5. Neither the name Intel nor any other trademark owned or controlled by > + * Intel shall be used in advertising or otherwise to promote the sale, use or > + * other dealings in products derived from or relating to the Covered Code > + * without prior written authorization from Intel. > + * > + * 4. Disclaimer and Export Compliance > + * > + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED > + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE > + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, > + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY > + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY > + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A > + * PARTICULAR PURPOSE. > + * > + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES > + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR > + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, > + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY > + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL > + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS > + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY > + * LIMITED REMEDY. > + * > + * 4.3. Licensee shall not export, either directly or indirectly, any of this > + * software or system incorporating such software without first obtaining any > + * required license or other approval from the U. S. Department of Commerce or > + * any other agency or department of the United States Government. In the > + * event Licensee exports any such software from the United States or > + * re-exports any such software from a foreign destination, Licensee shall > + * ensure that the distribution and export/re-export of the software is in > + * compliance with all laws, regulations, orders, or other restrictions of the > + * U.S. Export Administration Regulations. Licensee agrees that neither it nor > + * any of its subsidiaries will export/re-export any technical data, process, > + * software, or service, directly or indirectly, to any country for which the > + * United States government or any agency thereof requires an export license, > + * other governmental approval, or letter of assurance, without first obtaining > + * such license, approval or letter. > + * > + *****************************************************************************/ > + > +#define __UTHEX_C__ > + > +#include "acpi.h" > +#include "accommon.h" > + > +#define _COMPONENT ACPI_COMPILER > + ACPI_MODULE_NAME ("uthex") > + > + > +/* Hex to ASCII conversion table */ > + > +static char AcpiGbl_HexToAscii[] = > +{ > + '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' > +}; > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiUtHexToAsciiChar > + * > + * PARAMETERS: Integer - Contains the hex digit > + * Position - bit position of the digit within the > + * integer (multiple of 4) > + * > + * RETURN: The converted Ascii character > + * > + * DESCRIPTION: Convert a hex digit to an Ascii character > + * > + ******************************************************************************/ > + > +char > +AcpiUtHexToAsciiChar ( > + UINT64 Integer, > + UINT32 Position) > +{ > + > + return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]); > +} > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiUtHexCharToValue > + * > + * PARAMETERS: AsciiChar - Hex character in Ascii > + * > + * RETURN: The binary value of the ascii/hex character > + * > + * DESCRIPTION: Perform ascii-to-hex translation > + * > + ******************************************************************************/ > + > +UINT8 > +AcpiUtAsciiCharToHex ( > + int HexChar) > +{ > + > + if (HexChar <= 0x39) > + { > + return ((UINT8) (HexChar - 0x30)); > + } > + > + if (HexChar <= 0x46) > + { > + return ((UINT8) (HexChar - 0x37)); > + } > + > + return ((UINT8) (HexChar - 0x57)); > +} > diff --git a/src/acpica/source/components/utilities/utprint.c b/src/acpica/source/components/utilities/utprint.c > index d1bcccf..543bad8 100644 > --- a/src/acpica/source/components/utilities/utprint.c > +++ b/src/acpica/source/components/utilities/utprint.c > @@ -160,6 +160,12 @@ AcpiUtPutNumber ( > BOOLEAN Upper); > > > +/* Module globals */ > + > +static const char AcpiGbl_LowerHexDigits[] = "0123456789abcdef"; > +static const char AcpiGbl_UpperHexDigits[] = "0123456789ABCDEF"; > + > + > /******************************************************************************* > * > * FUNCTION: AcpiUtBoundStringLength > @@ -167,7 +173,7 @@ AcpiUtPutNumber ( > * PARAMETERS: String - String with boundary > * Count - Boundary of the string > * > - * RETURN: Length of the string. > + * RETURN: Length of the string. Less than or equal to Count. > * > * DESCRIPTION: Calculate the length of a string with boundary. > * > @@ -217,8 +223,8 @@ AcpiUtBoundStringOutput ( > { > *String = c; > } > - ++String; > > + ++String; > return (String); > } > > @@ -246,15 +252,13 @@ AcpiUtPutNumber ( > UINT8 Base, > BOOLEAN Upper) > { > - const char LowerDigits[] = "0123456789abcdef"; > - const char UpperDigits[] = "0123456789ABCDEF"; > const char *Digits; > UINT64 DigitIndex; > char *Pos; > > > Pos = String; > - Digits = Upper ? UpperDigits : LowerDigits; > + Digits = Upper ? AcpiGbl_UpperHexDigits : AcpiGbl_LowerHexDigits; > > if (Number == 0) > { > @@ -268,8 +272,8 @@ AcpiUtPutNumber ( > *(Pos++) = Digits[DigitIndex]; > } > } > - /* *(Pos++) = '0'; */ > > + /* *(Pos++) = '0'; */ > return (Pos); > } > > @@ -300,8 +304,8 @@ AcpiUtScanNumber ( > Number *= 10; > Number += *(String++) - '0'; > } > - *NumberPtr = Number; > > + *NumberPtr = Number; > return (String); > } > > @@ -336,8 +340,8 @@ AcpiUtPrintNumber ( > { > *(Pos2++) = *(--Pos1); > } > - *Pos2 = 0; > > + *Pos2 = 0; > return (String); > } > > @@ -370,6 +374,7 @@ AcpiUtFormatNumber ( > INT32 Precision, > UINT8 Type) > { > + char *Pos; > char Sign; > char Zero; > BOOLEAN NeedPrefix; > @@ -378,12 +383,13 @@ AcpiUtFormatNumber ( > char ReversedString[66]; > > > - /* Perform sanity checks */ > + /* Parameter validation */ > > if (Base < 2 || Base > 16) > { > - return NULL; > + return (NULL); > } > + > if (Type & ACPI_FORMAT_LEFT) > { > Type &= ~ACPI_FORMAT_ZERO; > @@ -426,9 +432,8 @@ AcpiUtFormatNumber ( > > /* Generate full string in reverse order */ > > - i = ACPI_PTR_DIFF ( > - AcpiUtPutNumber (ReversedString, Number, Base, Upper), > - ReversedString); > + Pos = AcpiUtPutNumber (ReversedString, Number, Base, Upper); > + i = ACPI_PTR_DIFF (Pos, ReversedString); > > /* Printing 100 using %2d gives "100", not "00" */ > > @@ -436,6 +441,7 @@ AcpiUtFormatNumber ( > { > Precision = i; > } > + > Width -= Precision; > > /* Output the string */ > @@ -458,7 +464,7 @@ AcpiUtFormatNumber ( > { > String = AcpiUtBoundStringOutput (String, End, > Upper ? 'X' : 'x'); > - } > + } > } > if (!(Type & ACPI_FORMAT_LEFT)) > { > @@ -467,6 +473,7 @@ AcpiUtFormatNumber ( > String = AcpiUtBoundStringOutput (String, End, Zero); > } > } > + > while (i <= --Precision) > { > String = AcpiUtBoundStringOutput (String, End, '0'); > @@ -494,7 +501,7 @@ AcpiUtFormatNumber ( > * Format - Standard printf format > * Args - Argument list > * > - * RETURN: Size of successfully output bytes > + * RETURN: Number of bytes actually written. > * > * DESCRIPTION: Formatted output to a string using argument list pointer. > * > @@ -525,7 +532,7 @@ AcpiUtVsnprintf ( > Pos = String; > End = String + Size; > > - for (; *Format ; ++Format) > + for (; *Format; ++Format) > { > if (*Format != '%') > { > @@ -566,6 +573,7 @@ AcpiUtVsnprintf ( > > /* Process width */ > > + Width = -1; > if (ACPI_IS_DIGIT (*Format)) > { > Format = AcpiUtScanNumber (Format, &Number); > @@ -574,7 +582,7 @@ AcpiUtVsnprintf ( > else if (*Format == '*') > { > ++Format; > - Width = va_arg(Args, int); > + Width = va_arg (Args, int); > if (Width < 0) > { > Width = -Width; > @@ -584,6 +592,7 @@ AcpiUtVsnprintf ( > > /* Process precision */ > > + Precision = -1; > if (*Format == '.') > { > ++Format; > @@ -595,7 +604,7 @@ AcpiUtVsnprintf ( > else if (*Format == '*') > { > ++Format; > - Precision = va_arg(Args, int); > + Precision = va_arg (Args, int); > } > if (Precision < 0) > { > @@ -605,10 +614,12 @@ AcpiUtVsnprintf ( > > /* Process qualifier */ > > + Qualifier = -1; > if (*Format == 'h' || *Format == 'l' || *Format == 'L') > { > Qualifier = *Format; > ++Format; > + > if (Qualifier == 'l' && *Format == 'l') > { > Qualifier = 'L'; > @@ -632,8 +643,10 @@ AcpiUtVsnprintf ( > Pos = AcpiUtBoundStringOutput (Pos, End, ' '); > } > } > + > c = (char) va_arg (Args, int); > Pos = AcpiUtBoundStringOutput (Pos, End, c); > + > while (--Width > 0) > { > Pos = AcpiUtBoundStringOutput (Pos, End, ' '); > @@ -696,10 +709,10 @@ AcpiUtVsnprintf ( > Width = 2 * sizeof (void *); > Type |= ACPI_FORMAT_ZERO; > } > + > p = va_arg (Args, void *); > Pos = AcpiUtFormatNumber (Pos, End, > - ACPI_TO_INTEGER (p), > - 16, Width, Precision, Type); > + ACPI_TO_INTEGER (p), 16, Width, Precision, Type); > continue; > > default: > @@ -748,7 +761,8 @@ AcpiUtVsnprintf ( > Number = (signed int) Number; > } > } > - Pos = AcpiUtFormatNumber(Pos, End, Number, Base, > + > + Pos = AcpiUtFormatNumber (Pos, End, Number, Base, > Width, Precision, Type); > } > > @@ -776,7 +790,7 @@ AcpiUtVsnprintf ( > * Size - Boundary of the string > * Format, ... - Standard printf format > * > - * RETURN: Size of successfully output bytes > + * RETURN: Number of bytes actually written. > * > * DESCRIPTION: Formatted output to a string. > * > @@ -810,7 +824,7 @@ AcpiUtSnprintf ( > * Format - Standard printf format > * Args - Argument list > * > - * RETURN: Size of successfully output bytes > + * RETURN: Number of bytes actually written. > * > * DESCRIPTION: Formatted output to a file using argument list pointer. > * > @@ -827,8 +841,9 @@ AcpiUtFileVprintf ( > > > Flags = AcpiOsAcquireLock (AcpiGbl_PrintLock); > - Length = AcpiUtVsnprintf(AcpiGbl_PrintBuffer, > + Length = AcpiUtVsnprintf (AcpiGbl_PrintBuffer, > sizeof (AcpiGbl_PrintBuffer), Format, Args); > + > (void) AcpiOsWriteFile (File, AcpiGbl_PrintBuffer, Length, 1); > AcpiOsReleaseLock (AcpiGbl_PrintLock, Flags); > > @@ -843,7 +858,7 @@ AcpiUtFileVprintf ( > * PARAMETERS: File - File descriptor > * Format, ... - Standard printf format > * > - * RETURN: Size of successfully output bytes > + * RETURN: Number of bytes actually written. > * > * DESCRIPTION: Formatted output to a file. > * > diff --git a/src/acpica/source/components/utilities/utuuid.c b/src/acpica/source/components/utilities/utuuid.c > new file mode 100644 > index 0000000..f5c2e40 > --- /dev/null > +++ b/src/acpica/source/components/utilities/utuuid.c > @@ -0,0 +1,175 @@ > +/****************************************************************************** > + * > + * Module Name: utuuid -- UUID support functions > + * > + *****************************************************************************/ > + > +/****************************************************************************** > + * > + * 1. Copyright Notice > + * > + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp. > + * All rights reserved. > + * > + * 2. License > + * > + * 2.1. This is your license from Intel Corp. under its intellectual property > + * rights. You may have additional license terms from the party that provided > + * you this software, covering your right to use that party's intellectual > + * property rights. > + * > + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a > + * copy of the source code appearing in this file ("Covered Code") an > + * irrevocable, perpetual, worldwide license under Intel's copyrights in the > + * base code distributed originally by Intel ("Original Intel Code") to copy, > + * make derivatives, distribute, use and display any portion of the Covered > + * Code in any form, with the right to sublicense such rights; and > + * > + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent > + * license (with the right to sublicense), under only those claims of Intel > + * patents that are infringed by the Original Intel Code, to make, use, sell, > + * offer to sell, and import the Covered Code and derivative works thereof > + * solely to the minimum extent necessary to exercise the above copyright > + * license, and in no event shall the patent license extend to any additions > + * to or modifications of the Original Intel Code. No other license or right > + * is granted directly or by implication, estoppel or otherwise; > + * > + * The above copyright and patent license is granted only if the following > + * conditions are met: > + * > + * 3. Conditions > + * > + * 3.1. Redistribution of Source with Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification with rights to further distribute source must include > + * the above Copyright Notice, the above License, this list of Conditions, > + * and the following Disclaimer and Export Compliance provision. In addition, > + * Licensee must cause all Covered Code to which Licensee contributes to > + * contain a file documenting the changes Licensee made to create that Covered > + * Code and the date of any change. Licensee must include in that file the > + * documentation of any changes made by any predecessor Licensee. Licensee > + * must include a prominent statement that the modification is derived, > + * directly or indirectly, from Original Intel Code. > + * > + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. > + * Redistribution of source code of any substantial portion of the Covered > + * Code or modification without rights to further distribute source must > + * include the following Disclaimer and Export Compliance provision in the > + * documentation and/or other materials provided with distribution. In > + * addition, Licensee may not authorize further sublicense of source of any > + * portion of the Covered Code, and must include terms to the effect that the > + * license from Licensee to its licensee is limited to the intellectual > + * property embodied in the software Licensee provides to its licensee, and > + * not to intellectual property embodied in modifications its licensee may > + * make. > + * > + * 3.3. Redistribution of Executable. Redistribution in executable form of any > + * substantial portion of the Covered Code or modification must reproduce the > + * above Copyright Notice, and the following Disclaimer and Export Compliance > + * provision in the documentation and/or other materials provided with the > + * distribution. > + * > + * 3.4. Intel retains all right, title, and interest in and to the Original > + * Intel Code. > + * > + * 3.5. Neither the name Intel nor any other trademark owned or controlled by > + * Intel shall be used in advertising or otherwise to promote the sale, use or > + * other dealings in products derived from or relating to the Covered Code > + * without prior written authorization from Intel. > + * > + * 4. Disclaimer and Export Compliance > + * > + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED > + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE > + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, > + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY > + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY > + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A > + * PARTICULAR PURPOSE. > + * > + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES > + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR > + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, > + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY > + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL > + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS > + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY > + * LIMITED REMEDY. > + * > + * 4.3. Licensee shall not export, either directly or indirectly, any of this > + * software or system incorporating such software without first obtaining any > + * required license or other approval from the U. S. Department of Commerce or > + * any other agency or department of the United States Government. In the > + * event Licensee exports any such software from the United States or > + * re-exports any such software from a foreign destination, Licensee shall > + * ensure that the distribution and export/re-export of the software is in > + * compliance with all laws, regulations, orders, or other restrictions of the > + * U.S. Export Administration Regulations. Licensee agrees that neither it nor > + * any of its subsidiaries will export/re-export any technical data, process, > + * software, or service, directly or indirectly, to any country for which the > + * United States government or any agency thereof requires an export license, > + * other governmental approval, or letter of assurance, without first obtaining > + * such license, approval or letter. > + * > + *****************************************************************************/ > + > +#define __UTUUID_C__ > + > +#include "acpi.h" > +#include "accommon.h" > + > +#define _COMPONENT ACPI_COMPILER > + ACPI_MODULE_NAME ("utuuid") > + > + > +/* > + * UUID support functions. > + * > + * This table is used to convert an input UUID ascii string to a 16 byte > + * buffer and the reverse. The table maps a UUID buffer index 0-15 to > + * the index within the 36-byte UUID string where the associated 2-byte > + * hex value can be found. > + * > + * 36-byte UUID strings are of the form: > + * aabbccdd-eeff-gghh-iijj-kkllmmnnoopp > + * Where aa-pp are one byte hex numbers, made up of two hex digits > + * > + * Note: This table is basically the inverse of the string-to-offset table > + * found in the ACPI spec in the description of the ToUUID macro. > + */ > +const UINT8 AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH] = > +{ > + 6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34 > +}; > + > + > +/******************************************************************************* > + * > + * FUNCTION: AcpiUtConvertStringToUuid > + * > + * PARAMETERS: InString - 36-byte formatted UUID string > + * UuidBuffer - Where the 16-byte UUID buffer is returned > + * > + * RETURN: None. Output data is returned in the UuidBuffer > + * > + * DESCRIPTION: Convert a 36-byte formatted UUID string to 16-byte UUID buffer > + * > + ******************************************************************************/ > + > +void > +AcpiUtConvertStringToUuid ( > + char *InString, > + UINT8 *UuidBuffer) > +{ > + UINT32 i; > + > + > + for (i = 0; i < UUID_BUFFER_LENGTH; i++) > + { > + UuidBuffer[i] = > + (AcpiUtAsciiCharToHex (InString[AcpiGbl_MapToUuidOffset[i]]) << 4); > + > + UuidBuffer[i] |= > + AcpiUtAsciiCharToHex (InString[AcpiGbl_MapToUuidOffset[i] + 1]); > + } > +} > diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h > index 6b34484..3c7a3bd 100644 > --- a/src/acpica/source/include/acconfig.h > +++ b/src/acpica/source/include/acconfig.h > @@ -295,6 +295,25 @@ > > /****************************************************************************** > * > + * Miscellaneous constants > + * > + *****************************************************************************/ > + > +/* UUID constants */ > + > +#define UUID_BUFFER_LENGTH 16 /* Length of UUID in memory */ > +#define UUID_STRING_LENGTH 36 /* Total length of a UUID string */ > + > +/* Positions for required hyphens (dashes) in UUID strings */ > + > +#define UUID_HYPHEN1_OFFSET 8 > +#define UUID_HYPHEN2_OFFSET 13 > +#define UUID_HYPHEN3_OFFSET 18 > +#define UUID_HYPHEN4_OFFSET 23 > + > + > +/****************************************************************************** > + * > * ACPI AML Debugger > * > *****************************************************************************/ > diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h > index 049a95c..21e26e6 100644 > --- a/src/acpica/source/include/acdisasm.h > +++ b/src/acpica/source/include/acdisasm.h > @@ -209,11 +209,13 @@ typedef enum > > ACPI_DMT_ASF, > ACPI_DMT_DMAR, > + ACPI_DMT_DMAR_SCOPE, > ACPI_DMT_EINJACT, > ACPI_DMT_EINJINST, > ACPI_DMT_ERSTACT, > ACPI_DMT_ERSTINST, > ACPI_DMT_FADTPM, > + ACPI_DMT_GTDT, > ACPI_DMT_HEST, > ACPI_DMT_HESTNTFY, > ACPI_DMT_HESTNTYP, > @@ -327,6 +329,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar0[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar1[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar2[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoEcdt[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoEinj[]; > @@ -344,6 +347,10 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt0[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoGas[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtHdr[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0a[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt1[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoHeader[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest0[]; > @@ -381,6 +388,8 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt9[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt10[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt12[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt13[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadtHdr[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg0[]; > @@ -404,6 +413,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoPmttHdr[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcctHdr[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[]; > +extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp1[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp2[]; > extern ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt[]; > @@ -517,6 +527,10 @@ AcpiDmDumpFpdt ( > ACPI_TABLE_HEADER *Table); > > void > +AcpiDmDumpGtdt ( > + ACPI_TABLE_HEADER *Table); > + > +void > AcpiDmDumpHest ( > ACPI_TABLE_HEADER *Table); > > @@ -727,6 +741,10 @@ AcpiDmDecompressEisaId ( > UINT32 EncodedId); > > BOOLEAN > +AcpiDmIsUuidBuffer ( > + ACPI_PARSE_OBJECT *Op); > + > +BOOLEAN > AcpiDmIsUnicodeBuffer ( > ACPI_PARSE_OBJECT *Op); > > diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h > index 12925a8..1ea772e 100644 > --- a/src/acpica/source/include/aclocal.h > +++ b/src/acpica/source/include/aclocal.h > @@ -950,12 +950,13 @@ typedef union acpi_parse_value > #define ACPI_DASM_STRING 0x02 /* Buffer is a ASCII string */ > #define ACPI_DASM_UNICODE 0x03 /* Buffer is a Unicode string */ > #define ACPI_DASM_PLD_METHOD 0x04 /* Buffer is a _PLD method bit-packed buffer */ > -#define ACPI_DASM_EISAID 0x05 /* Integer is an EISAID */ > -#define ACPI_DASM_MATCHOP 0x06 /* Parent opcode is a Match() operator */ > -#define ACPI_DASM_LNOT_PREFIX 0x07 /* Start of a LNotEqual (etc.) pair of opcodes */ > -#define ACPI_DASM_LNOT_SUFFIX 0x08 /* End of a LNotEqual (etc.) pair of opcodes */ > -#define ACPI_DASM_HID_STRING 0x09 /* String is a _HID or _CID */ > -#define ACPI_DASM_IGNORE 0x0A /* Not used at this time */ > +#define ACPI_DASM_UUID 0x05 /* Buffer is a UUID/GUID */ > +#define ACPI_DASM_EISAID 0x06 /* Integer is an EISAID */ > +#define ACPI_DASM_MATCHOP 0x07 /* Parent opcode is a Match() operator */ > +#define ACPI_DASM_LNOT_PREFIX 0x08 /* Start of a LNotEqual (etc.) pair of opcodes */ > +#define ACPI_DASM_LNOT_SUFFIX 0x09 /* End of a LNotEqual (etc.) pair of opcodes */ > +#define ACPI_DASM_HID_STRING 0x0A /* String is a _HID or _CID */ > +#define ACPI_DASM_IGNORE 0x0B /* Not used at this time */ > > /* > * Generic operation (for example: If, While, Store) > @@ -1430,4 +1431,11 @@ typedef struct ah_device_id > > } AH_DEVICE_ID; > > +typedef struct ah_uuid > +{ > + char *Description; > + char *String; > + > +} AH_UUID; > + > #endif /* __ACLOCAL_H__ */ > diff --git a/src/acpica/source/include/acnames.h b/src/acpica/source/include/acnames.h > index bde34f5..6ccf47f 100644 > --- a/src/acpica/source/include/acnames.h > +++ b/src/acpica/source/include/acnames.h > @@ -127,6 +127,7 @@ > #define METHOD_NAME__HID "_HID" > #define METHOD_NAME__INI "_INI" > #define METHOD_NAME__PLD "_PLD" > +#define METHOD_NAME__DSD "_DSD" > #define METHOD_NAME__PRS "_PRS" > #define METHOD_NAME__PRT "_PRT" > #define METHOD_NAME__PRW "_PRW" > diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h > index ef85424..cafc37b 100644 > --- a/src/acpica/source/include/acpixf.h > +++ b/src/acpica/source/include/acpixf.h > @@ -118,7 +118,7 @@ > > /* Current ACPICA subsystem version in YYYYMMDD format */ > > -#define ACPI_CA_VERSION 0x20140627 > +#define ACPI_CA_VERSION 0x20140724 > > #include "acconfig.h" > #include "actypes.h" > @@ -923,6 +923,12 @@ AcpiFinishGpe ( > > ACPI_HW_DEPENDENT_RETURN_STATUS ( > ACPI_STATUS > +AcpiMarkGpeForWake ( > + ACPI_HANDLE GpeDevice, > + UINT32 GpeNumber)) > + > +ACPI_HW_DEPENDENT_RETURN_STATUS ( > +ACPI_STATUS > AcpiSetupGpeForWake ( > ACPI_HANDLE ParentDevice, > ACPI_HANDLE GpeDevice, > diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h > index 1d42f1d..1c1776a 100644 > --- a/src/acpica/source/include/acpredef.h > +++ b/src/acpica/source/include/acpredef.h > @@ -178,6 +178,11 @@ > * count = 0 (optional) > * (Used for _DLM) > * > + * ACPI_PTYPE2_UUID_PAIR: Each subpackage is preceded by a UUID Buffer. The UUID > + * defines the format of the package. Zero-length parent package is > + * allowed. > + * (Used for _DSD) > + * > *****************************************************************************/ > > enum AcpiReturnPackageTypes > @@ -191,7 +196,8 @@ enum AcpiReturnPackageTypes > ACPI_PTYPE2_FIXED = 7, > ACPI_PTYPE2_MIN = 8, > ACPI_PTYPE2_REV_FIXED = 9, > - ACPI_PTYPE2_FIX_VAR = 10 > + ACPI_PTYPE2_FIX_VAR = 10, > + ACPI_PTYPE2_UUID_PAIR = 11 > }; > > > @@ -438,6 +444,9 @@ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] = > {{"_CBA", METHOD_0ARGS, > METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* See PCI firmware spec 3.0 */ > > + {{"_CCA", METHOD_0ARGS, > + METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* ACPI 5.1 */ > + > {{"_CDM", METHOD_0ARGS, > METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, > > @@ -506,6 +515,10 @@ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] = > {{"_DOS", METHOD_1ARGS (ACPI_TYPE_INTEGER), > METHOD_NO_RETURN_VALUE}}, > > + {{"_DSD", METHOD_0ARGS, > + METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each: 1 Buf, 1 Pkg */ > + PACKAGE_INFO (ACPI_PTYPE2_UUID_PAIR, ACPI_RTYPE_BUFFER, 1, ACPI_RTYPE_PACKAGE, 1,0), > + > {{"_DSM", METHOD_4ARGS (ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_PACKAGE), > METHOD_RETURNS (ACPI_RTYPE_ALL)}}, /* Must return a value, but it can be of any type */ > > diff --git a/src/acpica/source/include/actbl.h b/src/acpica/source/include/actbl.h > index 9a6625c..ea9fc58 100644 > --- a/src/acpica/source/include/actbl.h > +++ b/src/acpica/source/include/actbl.h > @@ -368,7 +368,8 @@ typedef struct acpi_table_fadt > UINT32 Flags; /* Miscellaneous flag bits (see below for individual flags) */ > ACPI_GENERIC_ADDRESS ResetRegister; /* 64-bit address of the Reset register */ > UINT8 ResetValue; /* Value to write to the ResetRegister port to reset the system */ > - UINT8 Reserved4[3]; /* Reserved, must be zero */ > + UINT16 ArmBootFlags; /* ARM-Specific Boot Flags (see below for individual flags) (ACPI 5.1) */ > + UINT8 MinorRevision; /* FADT Minor Revision (ACPI 5.1) */ > UINT64 XFacs; /* 64-bit physical address of FACS */ > UINT64 XDsdt; /* 64-bit physical address of DSDT */ > ACPI_GENERIC_ADDRESS XPm1aEventBlock; /* 64-bit Extended Power Mgt 1a Event Reg Blk address */ > @@ -385,7 +386,7 @@ typedef struct acpi_table_fadt > } ACPI_TABLE_FADT; > > > -/* Masks for FADT Boot Architecture Flags (BootFlags) [Vx]=Introduced in this FADT revision */ > +/* Masks for FADT IA-PC Boot Architecture Flags (boot_flags) [Vx]=Introduced in this FADT revision */ > > #define ACPI_FADT_LEGACY_DEVICES (1) /* 00: [V2] System has LPC or ISA bus devices */ > #define ACPI_FADT_8042 (1<<1) /* 01: [V3] System has an 8042 controller on port 60/64 */ > @@ -394,6 +395,11 @@ typedef struct acpi_table_fadt > #define ACPI_FADT_NO_ASPM (1<<4) /* 04: [V4] PCIe ASPM control must not be enabled */ > #define ACPI_FADT_NO_CMOS_RTC (1<<5) /* 05: [V5] No CMOS real-time clock present */ > > +/* Masks for FADT ARM Boot Architecture Flags (arm_boot_flags) ACPI 5.1 */ > + > +#define ACPI_FADT_PSCI_COMPLIANT (1) /* 00: [V5+] PSCI 0.2+ is implemented */ > +#define ACPI_FADT_PSCI_USE_HVC (1<<1) /* 01: [V5+] HVC must be used instead of SMC as the PSCI conduit */ > + > /* Masks for FADT flags */ > > #define ACPI_FADT_WBINVD (1) /* 00: [V1] The WBINVD instruction works properly */ > @@ -507,7 +513,7 @@ typedef struct acpi_table_desc > * FADT V5 size: 0x10C > */ > #define ACPI_FADT_V1_SIZE (UINT32) (ACPI_FADT_OFFSET (Flags) + 4) > -#define ACPI_FADT_V2_SIZE (UINT32) (ACPI_FADT_OFFSET (Reserved4[0]) + 3) > +#define ACPI_FADT_V2_SIZE (UINT32) (ACPI_FADT_OFFSET (MinorRevision) + 1) > #define ACPI_FADT_V3_SIZE (UINT32) (ACPI_FADT_OFFSET (SleepControl)) > #define ACPI_FADT_V5_SIZE (UINT32) (sizeof (ACPI_TABLE_FADT)) > > diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h > index e0905ee..d28faa3 100644 > --- a/src/acpica/source/include/actbl1.h > +++ b/src/acpica/source/include/actbl1.h > @@ -834,20 +834,22 @@ typedef struct acpi_table_madt > > enum AcpiMadtType > { > - ACPI_MADT_TYPE_LOCAL_APIC = 0, > - ACPI_MADT_TYPE_IO_APIC = 1, > - ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, > - ACPI_MADT_TYPE_NMI_SOURCE = 3, > - ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, > - ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, > - ACPI_MADT_TYPE_IO_SAPIC = 6, > - ACPI_MADT_TYPE_LOCAL_SAPIC = 7, > - ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, > - ACPI_MADT_TYPE_LOCAL_X2APIC = 9, > - ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, > - ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, > - ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, > - ACPI_MADT_TYPE_RESERVED = 13 /* 13 and greater are reserved */ > + ACPI_MADT_TYPE_LOCAL_APIC = 0, > + ACPI_MADT_TYPE_IO_APIC = 1, > + ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, > + ACPI_MADT_TYPE_NMI_SOURCE = 3, > + ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, > + ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, > + ACPI_MADT_TYPE_IO_SAPIC = 6, > + ACPI_MADT_TYPE_LOCAL_SAPIC = 7, > + ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, > + ACPI_MADT_TYPE_LOCAL_X2APIC = 9, > + ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, > + ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, > + ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, > + ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, > + ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, > + ACPI_MADT_TYPE_RESERVED = 15 /* 15 and greater are reserved */ > }; > > > @@ -1008,16 +1010,27 @@ typedef struct acpi_madt_generic_interrupt > { > ACPI_SUBTABLE_HEADER Header; > UINT16 Reserved; /* Reserved - must be zero */ > - UINT32 GicId; > + UINT32 CpuInterfaceNumber; > UINT32 Uid; > UINT32 Flags; > UINT32 ParkingVersion; > UINT32 PerformanceInterrupt; > UINT64 ParkedAddress; > UINT64 BaseAddress; > + UINT64 GicvBaseAddress; > + UINT64 GichBaseAddress; > + UINT32 VgicInterrupt; > + UINT64 GicrBaseAddress; > + UINT64 ArmMpidr; > > } ACPI_MADT_GENERIC_INTERRUPT; > > +/* Masks for Flags field above */ > + > +/* ACPI_MADT_ENABLED (1) Processor is usable if set */ > +#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ > +#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ > + > > /* 12: Generic Distributor (ACPI 5.0) */ > > @@ -1033,11 +1046,42 @@ typedef struct acpi_madt_generic_distributor > } ACPI_MADT_GENERIC_DISTRIBUTOR; > > > +/* 13: Generic MSI Frame (ACPI 5.1) */ > + > +typedef struct acpi_madt_generic_msi_frame > +{ > + ACPI_SUBTABLE_HEADER Header; > + UINT16 Reserved; /* Reserved - must be zero */ > + UINT32 MsiFrameId; > + UINT64 BaseAddress; > + UINT32 Flags; > + UINT16 SpiCount; > + UINT16 SpiBase; > + > +} ACPI_MADT_GENERIC_MSI_FRAME; > + > +/* Masks for Flags field above */ > + > +#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) > + > + > +/* 14: Generic Redistributor (ACPI 5.1) */ > + > +typedef struct acpi_madt_generic_redistributor > +{ > + ACPI_SUBTABLE_HEADER Header; > + UINT16 Reserved; /* reserved - must be zero */ > + UINT64 BaseAddress; > + UINT32 Length; > + > +} ACPI_MADT_GENERIC_REDISTRIBUTOR; > + > + > /* > * Common flags fields for MADT subtables > */ > > -/* MADT Local APIC flags (LapicFlags) and GIC flags */ > +/* MADT Local APIC flags */ > > #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ > > diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h > index 7a64788..7d62862 100644 > --- a/src/acpica/source/include/actbl2.h > +++ b/src/acpica/source/include/actbl2.h > @@ -522,7 +522,7 @@ typedef struct acpi_table_dbgp > * Version 1 > * > * Conforms to "Intel Virtualization Technology for Directed I/O", > - * Version 1.2, Sept. 2008 > + * Version 2.2, Sept. 2013 > * > ******************************************************************************/ > > @@ -555,9 +555,10 @@ enum AcpiDmarType > { > ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, > ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, > - ACPI_DMAR_TYPE_ATSR = 2, > - ACPI_DMAR_HARDWARE_AFFINITY = 3, > - ACPI_DMAR_TYPE_RESERVED = 4 /* 4 and greater are reserved */ > + ACPI_DMAR_TYPE_ROOT_ATS = 2, > + ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, > + ACPI_DMAR_TYPE_NAMESPACE = 4, > + ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ > }; > > > @@ -573,7 +574,7 @@ typedef struct acpi_dmar_device_scope > > } ACPI_DMAR_DEVICE_SCOPE; > > -/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE */ > +/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ > > enum AcpiDmarScopeType > { > @@ -582,7 +583,8 @@ enum AcpiDmarScopeType > ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, > ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, > ACPI_DMAR_SCOPE_TYPE_HPET = 4, > - ACPI_DMAR_SCOPE_TYPE_RESERVED = 5 /* 5 and greater are reserved */ > + ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, > + ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ > }; > > typedef struct acpi_dmar_pci_path > @@ -659,6 +661,18 @@ typedef struct acpi_dmar_rhsa > } ACPI_DMAR_RHSA; > > > +/* 4: ACPI Namespace Device Declaration Structure */ > + > +typedef struct acpi_dmar_andd > +{ > + ACPI_DMAR_HEADER Header; > + UINT8 Reserved[3]; > + UINT8 DeviceNumber; > + char DeviceName[1]; > + > +} ACPI_DMAR_ANDD; > + > + > /******************************************************************************* > * > * HPET - High Precision Event Timer table > diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h > index efec7e8..b30e80f 100644 > --- a/src/acpica/source/include/actbl3.h > +++ b/src/acpica/source/include/actbl3.h > @@ -352,35 +352,111 @@ typedef struct acpi_s3pt_suspend > > /******************************************************************************* > * > - * GTDT - Generic Timer Description Table (ACPI 5.0) > - * Version 1 > + * GTDT - Generic Timer Description Table (ACPI 5.1) > + * Version 2 > * > ******************************************************************************/ > > typedef struct acpi_table_gtdt > { > ACPI_TABLE_HEADER Header; /* Common ACPI table header */ > - UINT64 Address; > - UINT32 Flags; > - UINT32 SecurePl1Interrupt; > - UINT32 SecurePl1Flags; > - UINT32 NonSecurePl1Interrupt; > - UINT32 NonSecurePl1Flags; > + UINT64 CounterBlockAddresss; > + UINT32 Reserved; > + UINT32 SecureEl1Interrupt; > + UINT32 SecureEl1Flags; > + UINT32 NonSecureEl1Interrupt; > + UINT32 NonSecureEl1Flags; > UINT32 VirtualTimerInterrupt; > UINT32 VirtualTimerFlags; > - UINT32 NonSecurePl2Interrupt; > - UINT32 NonSecurePl2Flags; > + UINT32 NonSecureEl2Interrupt; > + UINT32 NonSecureEl2Flags; > + UINT64 CounterReadBlockAddress; > + UINT32 PlatformTimerCount; > + UINT32 PlatformTimerOffset; > > } ACPI_TABLE_GTDT; > > -/* Values for Flags field above */ > +/* Flag Definitions: Timer Block Physical Timers and Virtual timers */ > + > +#define ACPI_GTDT_INTERRUPT_MODE (1) > +#define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) > +#define ACPI_GTDT_ALWAYS_ON (1<<2) > + > + > +/* Common GTDT subtable header */ > + > +typedef struct acpi_gtdt_header > +{ > + UINT8 Type; > + UINT16 Length; > + > +} ACPI_GTDT_HEADER; > + > +/* Values for GTDT subtable type above */ > + > +enum AcpiGtdtType > +{ > + ACPI_GTDT_TYPE_TIMER_BLOCK = 0, > + ACPI_GTDT_TYPE_WATCHDOG = 1, > + ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ > +}; > + > + > +/* GTDT Subtables, correspond to Type in acpi_gtdt_header */ > + > +/* 0: Generic Timer Block */ > + > +typedef struct acpi_gtdt_timer_block > +{ > + ACPI_GTDT_HEADER Header; > + UINT8 Reserved; > + UINT64 BlockAddress; > + UINT32 TimerCount; > + UINT32 TimerOffset; > + > +} ACPI_GTDT_TIMER_BLOCK; > + > +/* Timer Sub-Structure, one per timer */ > + > +typedef struct acpi_gtdt_timer_entry > +{ > + UINT8 FrameNumber; > + UINT8 Reserved[3]; > + UINT64 BaseAddress; > + UINT64 El0BaseAddress; > + UINT32 TimerInterrupt; > + UINT32 TimerFlags; > + UINT32 VirtualTimerInterrupt; > + UINT32 VirtualTimerFlags; > + UINT32 CommonFlags; > + > +} ACPI_GTDT_TIMER_ENTRY; > + > + > +/* Flag Definitions: CommonFlags above */ > + > +#define ACPI_GTDT_GT_IS_SECURE_TIMER (1) > +#define ACPI_GTDT_GT_ALWAYS_ON (1<<1) > + > > -#define ACPI_GTDT_MAPPED_BLOCK_PRESENT 1 > +/* 1: SBSA Generic Watchdog Structure */ > > -/* Values for all "TimerFlags" fields above */ > +typedef struct acpi_gtdt_watchdog > +{ > + ACPI_GTDT_HEADER Header; > + UINT8 Reserved; > + UINT64 RefreshFrameAddress; > + UINT64 ControlFrameAddress; > + UINT32 TimerInterrupt; > + UINT32 TimerFlags; > + > +} ACPI_GTDT_WATCHDOG; > > -#define ACPI_GTDT_INTERRUPT_MODE 1 > -#define ACPI_GTDT_INTERRUPT_POLARITY 2 > +/* Flag Definitions: TimerFlags above */ > + > +#define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) > +#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) > +#define ACPI_GTDT_WATCHDOG_SECURE (1<<2) > > > /******************************************************************************* > @@ -525,7 +601,8 @@ typedef struct acpi_table_pcct > enum AcpiPcctType > { > ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, > - ACPI_PCCT_TYPE_RESERVED = 1 /* 1 and greater are reserved */ > + ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, > + ACPI_PCCT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ > }; > > /* > @@ -550,6 +627,31 @@ typedef struct acpi_pcct_subspace > } ACPI_PCCT_SUBSPACE; > > > +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ > + > +typedef struct acpi_pcct_hw_reduced > +{ > + ACPI_SUBTABLE_HEADER Header; > + UINT32 DoorbellInterrupt; > + UINT8 Flags; > + UINT8 Reserved; > + UINT64 BaseAddress; > + UINT64 Length; > + ACPI_GENERIC_ADDRESS DoorbellRegister; > + UINT64 PreserveMask; > + UINT64 WriteMask; > + UINT32 Latency; > + UINT32 MaxAccessRate; > + UINT16 MinTurnaroundTime; > + > +} ACPI_PCCT_HW_REDUCED; > + > +/* Values for doorbell flags above */ > + > +#define ACPI_PCCT_INTERRUPT_POLARITY (1) > +#define ACPI_PCCT_INTERRUPT_MODE (1<<1) > + > + > /* > * PCC memory structures (not part of the ACPI table) > */ > diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h > index 6ffb2ce..b6371ae 100644 > --- a/src/acpica/source/include/actypes.h > +++ b/src/acpica/source/include/actypes.h > @@ -596,7 +596,7 @@ typedef UINT64 ACPI_INTEGER; > > #define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) NULL,(ACPI_SIZE) i) > #define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) NULL) > -#define ACPI_OFFSET(d, f) (ACPI_SIZE) ACPI_PTR_DIFF (&(((d *)0)->f), (void *) NULL) > +#define ACPI_OFFSET(d, f) ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) NULL) > #define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i) > #define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i) > > @@ -690,8 +690,9 @@ typedef UINT64 ACPI_INTEGER; > #define ACPI_NOTIFY_RESERVED (UINT8) 0x0A > #define ACPI_NOTIFY_LOCALITY_UPDATE (UINT8) 0x0B > #define ACPI_NOTIFY_SHUTDOWN_REQUEST (UINT8) 0x0C > +#define ACPI_NOTIFY_AFFINITY_UPDATE (UINT8) 0x0D > > -#define ACPI_NOTIFY_MAX 0x0C > +#define ACPI_NOTIFY_MAX 0x0D > > /* > * Types associated with ACPI names and objects. The first group of > diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h > index bac5fd8..2aea248 100644 > --- a/src/acpica/source/include/acutils.h > +++ b/src/acpica/source/include/acutils.h > @@ -297,6 +297,10 @@ AcpiUtHexToAsciiChar ( > UINT64 Integer, > UINT32 Position); > > +UINT8 > +AcpiUtAsciiCharToHex ( > + int HexChar); > + > BOOLEAN > AcpiUtValidObjectType ( > ACPI_OBJECT_TYPE Type); > @@ -1207,6 +1211,10 @@ const AH_DEVICE_ID * > AcpiAhMatchHardwareId ( > char *Hid); > > +const char * > +AcpiAhMatchUuid ( > + UINT8 *Data); > + > /* > * utprint - printf/vprintf output functions > */ > @@ -1248,4 +1256,12 @@ AcpiUtFilePrintf ( > ...); > #endif > > +/* > + * utuuid -- UUID support functions > + */ > +void > +AcpiUtConvertStringToUuid ( > + char *InString, > + UINT8 *UuidBuffer); > + > #endif /* _ACUTILS_H */ > diff --git a/src/acpica/source/include/platform/aclinux.h b/src/acpica/source/include/platform/aclinux.h > index 1f1d7c1..d5c1501 100644 > --- a/src/acpica/source/include/platform/aclinux.h > +++ b/src/acpica/source/include/platform/aclinux.h > @@ -201,8 +201,6 @@ > #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject > #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId > #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock > -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory > -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory > > /* > * OSL interfaces used by debugger/disassembler > @@ -236,10 +234,6 @@ > #define __init > #endif > > -#ifndef __iomem > -#define __iomem > -#endif > - > /* Host-dependent types and defines for user-space ACPICA */ > > #define ACPI_FLUSH_CPU_CACHE() > diff --git a/src/acpica/source/include/platform/aclinuxex.h b/src/acpica/source/include/platform/aclinuxex.h > index 67e42ab..e3d5d5b 100644 > --- a/src/acpica/source/include/platform/aclinuxex.h > +++ b/src/acpica/source/include/platform/aclinuxex.h > @@ -186,16 +186,6 @@ AcpiOsGetThreadId ( > Lock ? AE_OK : AE_NO_MEMORY; \ > }) > > -void __iomem * > -AcpiOsMapMemory ( > - ACPI_PHYSICAL_ADDRESS Where, > - ACPI_SIZE Length); > - > -void > -AcpiOsUnmapMemory ( > - void __iomem *LogicalAddress, > - ACPI_SIZE Size); > - > /* > * OSL interfaces added by Linux > */ > diff --git a/src/acpica/source/os_specific/service_layers/oslibcfs.c b/src/acpica/source/os_specific/service_layers/oslibcfs.c > index 3343a0c..e1ca8be 100644 > --- a/src/acpica/source/os_specific/service_layers/oslibcfs.c > +++ b/src/acpica/source/os_specific/service_layers/oslibcfs.c > @@ -1,6 +1,6 @@ > /****************************************************************************** > * > - * Module Name: oslibcfs - C library OSL for file IO > + * Module Name: oslibcfs - C library OSL for file I/O > * > *****************************************************************************/ > > @@ -141,8 +141,9 @@ AcpiOsOpenFile ( > UINT8 Modes) > { > ACPI_FILE File; > - char ModesStr[4]; > UINT32 i = 0; > + char ModesStr[4]; > + > > if (Modes & ACPI_FILE_READING) > { > @@ -156,6 +157,7 @@ AcpiOsOpenFile ( > { > ModesStr[i++] = 'b'; > } > + > ModesStr[i++] = '\0'; > > File = fopen (Path, ModesStr); > @@ -172,11 +174,11 @@ AcpiOsOpenFile ( > * > * FUNCTION: AcpiOsCloseFile > * > - * PARAMETERS: File - File descriptor > + * PARAMETERS: File - An open file descriptor > * > * RETURN: None. > * > - * DESCRIPTION: Close a file. > + * DESCRIPTION: Close a file opened via AcpiOsOpenFile. > * > ******************************************************************************/ > > @@ -192,14 +194,14 @@ AcpiOsCloseFile ( > * > * FUNCTION: AcpiOsReadFile > * > - * PARAMETERS: File - File descriptor > + * PARAMETERS: File - An open file descriptor > * Buffer - Data buffer > * Size - Data block size > * Count - Number of data blocks > * > - * RETURN: Size of successfully read buffer. > + * RETURN: Number of bytes actually read. > * > - * DESCRIPTION: Read a file. > + * DESCRIPTION: Read from a file. > * > ******************************************************************************/ > > @@ -212,6 +214,7 @@ AcpiOsReadFile ( > { > int Length; > > + > Length = fread (Buffer, Size, Count, File); > if (Length < 0) > { > @@ -226,14 +229,14 @@ AcpiOsReadFile ( > * > * FUNCTION: AcpiOsWriteFile > * > - * PARAMETERS: File - File descriptor > + * PARAMETERS: File - An open file descriptor > * Buffer - Data buffer > * Size - Data block size > * Count - Number of data blocks > * > - * RETURN: Size of successfully written buffer. > + * RETURN: Number of bytes actually written. > * > - * DESCRIPTION: Write a file. > + * DESCRIPTION: Write to a file. > * > ******************************************************************************/ > > @@ -246,6 +249,7 @@ AcpiOsWriteFile ( > { > int Length; > > + > Length = fwrite (Buffer, Size, Count, File); > if (Length < 0) > { > @@ -260,9 +264,9 @@ AcpiOsWriteFile ( > * > * FUNCTION: AcpiOsGetFileOffset > * > - * PARAMETERS: File - File descriptor > + * PARAMETERS: File - An open file descriptor > * > - * RETURN: Size of current position. > + * RETURN: Current file pointer position. > * > * DESCRIPTION: Get current file offset. > * > @@ -274,8 +278,8 @@ AcpiOsGetFileOffset ( > { > long Offset; > > - Offset = ftell (File); > > + Offset = ftell (File); > return (Offset); > } > > @@ -284,8 +288,8 @@ AcpiOsGetFileOffset ( > * > * FUNCTION: AcpiOsSetFileOffset > * > - * PARAMETERS: File - File descriptor > - * Offset - File offset > + * PARAMETERS: File - An open file descriptor > + * Offset - New file offset > * From - From begin/end of file > * > * RETURN: Status > diff --git a/src/acpica/source/os_specific/service_layers/osunixxf.c b/src/acpica/source/os_specific/service_layers/osunixxf.c > index c237ac2..6f0bdfe 100644 > --- a/src/acpica/source/os_specific/service_layers/osunixxf.c > +++ b/src/acpica/source/os_specific/service_layers/osunixxf.c > @@ -1231,7 +1231,7 @@ AcpiOsGetTimer ( > * FUNCTION: AcpiOsReadPciConfiguration > * > * PARAMETERS: PciId - Seg/Bus/Dev > - * Register - Device Register > + * PciRegister - Device Register > * Value - Buffer where value is placed > * Width - Number of bits > * > @@ -1244,7 +1244,7 @@ AcpiOsGetTimer ( > ACPI_STATUS > AcpiOsReadPciConfiguration ( > ACPI_PCI_ID *PciId, > - UINT32 Register, > + UINT32 PciRegister, > UINT64 *Value, > UINT32 Width) > { > @@ -1259,7 +1259,7 @@ AcpiOsReadPciConfiguration ( > * FUNCTION: AcpiOsWritePciConfiguration > * > * PARAMETERS: PciId - Seg/Bus/Dev > - * Register - Device Register > + * PciRegister - Device Register > * Value - Value to be written > * Width - Number of bits > * > @@ -1272,7 +1272,7 @@ AcpiOsReadPciConfiguration ( > ACPI_STATUS > AcpiOsWritePciConfiguration ( > ACPI_PCI_ID *PciId, > - UINT32 Register, > + UINT32 PciRegister, > UINT64 Value, > UINT32 Width) > { > diff --git a/src/acpica/source/tools/acpiexec/aehandlers.c b/src/acpica/source/tools/acpiexec/aehandlers.c > index 06283f4..14b5e90 100644 > --- a/src/acpica/source/tools/acpiexec/aehandlers.c > +++ b/src/acpica/source/tools/acpiexec/aehandlers.c > @@ -1413,8 +1413,7 @@ AeRegionHandler ( > case AML_FIELD_ATTRIB_RAW_BYTES: > case AML_FIELD_ATTRIB_RAW_PROCESS: > > - /* (-2) for status/length */ > - Length = MyContext->AccessLength - 2; > + Length = MyContext->AccessLength; > break; > > default: > @@ -1448,8 +1447,7 @@ AeRegionHandler ( > case AML_FIELD_ATTRIB_RAW_BYTES: > case AML_FIELD_ATTRIB_RAW_PROCESS: > > - /* (-2) for status/length */ > - Length = MyContext->AccessLength - 2; > + Length = MyContext->AccessLength; > break; > > default: > Acked-by: Ivan Hu <ivan.hu@canonical.com>
diff --git a/src/acpica/Makefile.am b/src/acpica/Makefile.am index b2dd752..cbd38c6 100644 --- a/src/acpica/Makefile.am +++ b/src/acpica/Makefile.am @@ -216,6 +216,7 @@ libfwtsacpica_la_SOURCES = \ source/components/utilities/uteval.c \ source/components/utilities/utfileio.c \ source/components/utilities/utglobal.c \ + source/components/utilities/uthex.c \ source/components/utilities/utids.c \ source/components/utilities/utinit.c \ source/components/utilities/utlock.c \ @@ -238,9 +239,11 @@ libfwtsacpica_la_SOURCES = \ source/components/utilities/utxfinit.c \ source/components/utilities/uterror.c \ source/components/utilities/utbuffer.c \ + source/components/utilities/utuuid.c \ source/common/acgetline.c \ source/common/ahids.c \ source/common/cmfsize.c \ + source/common/ahuuids.c \ source/tools/acpiexec/aehandlers.c libfwtsacpica_la_LIBADD = \ diff --git a/src/acpica/source/common/ahids.c b/src/acpica/source/common/ahids.c index 3e12961..af6771b 100755 --- a/src/acpica/source/common/ahids.c +++ b/src/acpica/source/common/ahids.c @@ -246,7 +246,11 @@ const AH_DEVICE_ID AslDeviceIds[] = {"PNP0C60", "Display Sensor Device"}, {"PNP0C70", "Dock Sensor Device"}, {"PNP0C80", "Memory Device"}, - {"PNP0D40", "Standard Compliant SD Host Controller"}, + {"PNP0D10", "XHCI USB Controller with debug"}, + {"PNP0D15", "XHCI USB Controller without debug"}, + {"PNP0D20", "EHCI USB Controller without debug"}, + {"PNP0D25", "EHCI USB Controller with debug"}, + {"PNP0D40", "SDA Standard Compliant SD Host Controller"}, {"PNP0D80", "Windows-compatible System Power Management Controller"}, {"PNP0F03", "Microsoft PS/2-style Mouse"}, {"SMO91D0", "Sensor Hub"}, diff --git a/src/acpica/source/common/ahpredef.c b/src/acpica/source/common/ahpredef.c index 525c7bb..7123b7f 100644 --- a/src/acpica/source/common/ahpredef.c +++ b/src/acpica/source/common/ahpredef.c @@ -169,6 +169,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] = AH_PREDEF ("_BTM", "Battery Time", "Returns the battery runtime"), AH_PREDEF ("_BTP", "Battery Trip Point", "Sets a Control Method Battery trip point"), AH_PREDEF ("_CBA", "Configuration Base Address", "Sets the base address for a PCI Express host bridge"), + AH_PREDEF ("_CCA", "Cache Coherency Attribute", "Returns a device's support level for cache coherency"), AH_PREDEF ("_CDM", "Clock Domain", "Returns a logical processor's clock domain identifier"), AH_PREDEF ("_CID", "Compatible ID", "Returns a device's Plug and Play Compatible ID list"), AH_PREDEF ("_CLS", "Class Code", "Returns PCI class code and subclass"), @@ -193,6 +194,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] = AH_PREDEF ("_DOS", "Disable Output Switching", "Sets the display output switching mode"), AH_PREDEF ("_DPL", "Device Selection Polarity", "Polarity of Device Selection signal, Resource Descriptor field"), AH_PREDEF ("_DRS", "Drive Strength", "Drive Strength setting for GPIO connection, Resource Descriptor field"), + AH_PREDEF ("_DSD", "Device-Specific Data", "Returns a list of device property information"), AH_PREDEF ("_DSM", "Device-Specific Method", "Executes device-specific functions"), AH_PREDEF ("_DSS", "Device Set State", "Sets the display device state"), AH_PREDEF ("_DSW", "Device Sleep Wake", "Sets the sleep and wake transition states for a device"), diff --git a/src/acpica/source/common/ahuuids.c b/src/acpica/source/common/ahuuids.c new file mode 100644 index 0000000..1bf362c --- /dev/null +++ b/src/acpica/source/common/ahuuids.c @@ -0,0 +1,201 @@ +/****************************************************************************** + * + * Module Name: ahuuids - Table of known ACPI-related UUIDs + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + *****************************************************************************/ + +#include "acpi.h" +#include "accommon.h" + +#define _COMPONENT ACPI_UTILITIES + ACPI_MODULE_NAME ("ahuuids") + +/* + * Table of "known" (ACPI-related) UUIDs + */ +const AH_UUID AcpiUuids[] = +{ + {"PCI Host Bridge Device", + "33db4d5b-1ff7-401c-9657-7441c03dd766"}, + + {"Platform-wide Capabilities", + "0811b06e-4a27-44f9-8d60-3cbbc22e7b48"}, + + {"Dynamic Enumeration", + "d8c1a3a6-be9b-4c9b-91bf-c3cb81fc5daf"}, + + {"GPIO Controller", + "4f248f40-d5e2-499f-834c-27758ea1cd3f"}, + + {"Battery Thermal Limit", + "4c2067e3-887d-475c-9720-4af1d3ed602e"}, + + {"Thermal Extensions", + "14d399cd-7a27-4b18-8fb4-7cb7b9f4e500"}, + + {"USB Controller", + "ce2ee385-00e6-48cb-9f05-2edb927c4899"}, + + {"HID I2C Device", + "3cdff6f7-4267-4555-ad05-b30a3d8938de"}, + + {"Power Button Device", + "dfbcf3c5-e7a5-44e6-9c1f-29c76f6e059c"}, + + {"Device Labeling Interface", + "e5c937d0-3553-4d7a-9117-ea4d19c3434d"}, + + {"SATA Controller", + "e4db149b-fcfe-425b-a6d8-92357d78fc7f"}, + + {"Physical Presence Interface", + "3dddfaa6-361b-4eb4-a424-8d10089d1653"}, + + {NULL, NULL} +}; + + +/******************************************************************************* + * + * FUNCTION: AcpiAhMatchUuid + * + * PARAMETERS: Data - Data buffer containing a UUID + * + * RETURN: ASCII description string for the UUID if it is found. + * + * DESCRIPTION: Returns a description string for "known" UUIDs, which are + * are UUIDs that are related to ACPI in some way. + * + ******************************************************************************/ + +const char * +AcpiAhMatchUuid ( + UINT8 *Data) +{ + const AH_UUID *Info; + UINT8 UuidBuffer[UUID_BUFFER_LENGTH]; + + + /* Walk the table of known ACPI-related UUIDs */ + + for (Info = AcpiUuids; Info->Description; Info++) + { + AcpiUtConvertStringToUuid (Info->String, UuidBuffer); + + if (!ACPI_MEMCMP (Data, UuidBuffer, UUID_BUFFER_LENGTH)) + { + return (Info->Description); + } + } + + return (NULL); +} diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c index efd72f6..30196df 100644 --- a/src/acpica/source/common/dmextern.c +++ b/src/acpica/source/common/dmextern.c @@ -478,18 +478,37 @@ AcpiDmGetExternalsFromFile ( while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ExternalRefFile)) { Token = strtok (StringBuffer, METHOD_SEPARATORS); /* "External" */ - if (!Token) continue; - if (strcmp (Token, "External")) continue; + if (!Token) + { + continue; + } + if (strcmp (Token, "External")) + { + continue; + } MethodName = strtok (NULL, METHOD_SEPARATORS); /* Method namepath */ - if (!MethodName) continue; + if (!MethodName) + { + continue; + } Token = strtok (NULL, METHOD_SEPARATORS); /* "MethodObj" */ - if (!Token) continue; - if (strcmp (Token, "MethodObj")) continue; + if (!Token) + { + continue; + } + + if (strcmp (Token, "MethodObj")) + { + continue; + } Token = strtok (NULL, METHOD_SEPARATORS); /* Arg count */ - if (!Token) continue; + if (!Token) + { + continue; + } /* Convert arg count string to an integer */ diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c index e2abd7a..efb50b5 100644 --- a/src/acpica/source/common/dmtable.c +++ b/src/acpica/source/common/dmtable.c @@ -159,9 +159,21 @@ static const char *AcpiDmDmarSubnames[] = "Reserved Memory Region", "Root Port ATS Capability", "Remapping Hardware Static Affinity", + "ACPI Namespace Device Declaration", "Unknown SubTable Type" /* Reserved */ }; +static const char *AcpiDmDmarScope[] = +{ + "Reserved value", + "PCI Endpoint Device", + "PCI Bridge Device", + "IOAPIC Device", + "Message-capable HPET Device", + "Namespace Device", + "Unknown Scope Type" /* Reserved */ +}; + static const char *AcpiDmEinjActions[] = { "Begin Operation", @@ -232,6 +244,13 @@ static const char *AcpiDmErstInstructions[] = "Unknown Instruction" }; +static const char *AcpiDmGtdtSubnames[] = +{ + "Generic Timer Block", + "Generic Watchdog Timer", + "Unknown SubTable Type" /* Reserved */ +}; + static const char *AcpiDmHestSubnames[] = { "IA-32 Machine Check Exception", @@ -261,25 +280,28 @@ static const char *AcpiDmHestNotifySubnames[] = static const char *AcpiDmMadtSubnames[] = { - "Processor Local APIC", /* ACPI_MADT_TYPE_LOCAL_APIC */ - "I/O APIC", /* ACPI_MADT_TYPE_IO_APIC */ - "Interrupt Source Override", /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */ - "NMI Source", /* ACPI_MADT_TYPE_NMI_SOURCE */ - "Local APIC NMI", /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */ - "Local APIC Address Override", /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */ - "I/O SAPIC", /* ACPI_MADT_TYPE_IO_SAPIC */ - "Local SAPIC", /* ACPI_MADT_TYPE_LOCAL_SAPIC */ - "Platform Interrupt Sources", /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */ - "Processor Local x2APIC", /* ACPI_MADT_TYPE_LOCAL_X2APIC */ - "Local x2APIC NMI", /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */ - "Generic Interrupt Controller", /* ACPI_MADT_GENERIC_INTERRUPT */ - "Generic Interrupt Distributor",/* ACPI_MADT_GENERIC_DISTRIBUTOR */ - "Unknown SubTable Type" /* Reserved */ + "Processor Local APIC", /* ACPI_MADT_TYPE_LOCAL_APIC */ + "I/O APIC", /* ACPI_MADT_TYPE_IO_APIC */ + "Interrupt Source Override", /* ACPI_MADT_TYPE_INTERRUPT_OVERRIDE */ + "NMI Source", /* ACPI_MADT_TYPE_NMI_SOURCE */ + "Local APIC NMI", /* ACPI_MADT_TYPE_LOCAL_APIC_NMI */ + "Local APIC Address Override", /* ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE */ + "I/O SAPIC", /* ACPI_MADT_TYPE_IO_SAPIC */ + "Local SAPIC", /* ACPI_MADT_TYPE_LOCAL_SAPIC */ + "Platform Interrupt Sources", /* ACPI_MADT_TYPE_INTERRUPT_SOURCE */ + "Processor Local x2APIC", /* ACPI_MADT_TYPE_LOCAL_X2APIC */ + "Local x2APIC NMI", /* ACPI_MADT_TYPE_LOCAL_X2APIC_NMI */ + "Generic Interrupt Controller", /* ACPI_MADT_GENERIC_INTERRUPT */ + "Generic Interrupt Distributor", /* ACPI_MADT_GENERIC_DISTRIBUTOR */ + "Generic MSI Frame", /* ACPI_MADT_GENERIC_MSI_FRAME */ + "Generic Interrupt Redistributor", /* ACPI_MADT_GENERIC_REDISTRIBUTOR */ + "Unknown SubTable Type" /* Reserved */ }; static const char *AcpiDmPcctSubnames[] = { "Generic Communications Subspace", /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */ + "HW-Reduced Communications Subspace", "Unknown SubTable Type" /* Reserved */ }; @@ -378,7 +400,7 @@ ACPI_DMTABLE_DATA AcpiDmTableData[] = {ACPI_SIG_ERST, NULL, AcpiDmDumpErst, DtCompileErst, TemplateErst, "Error Record Serialization Table"}, {ACPI_SIG_FADT, NULL, AcpiDmDumpFadt, DtCompileFadt, TemplateFadt, "Fixed ACPI Description Table (FADT)"}, {ACPI_SIG_FPDT, NULL, AcpiDmDumpFpdt, DtCompileFpdt, TemplateFpdt, "Firmware Performance Data Table"}, - {ACPI_SIG_GTDT, AcpiDmTableInfoGtdt, NULL, NULL, TemplateGtdt, "Generic Timer Description Table"}, + {ACPI_SIG_GTDT, NULL, AcpiDmDumpGtdt, DtCompileGtdt, TemplateGtdt, "Generic Timer Description Table"}, {ACPI_SIG_HEST, NULL, AcpiDmDumpHest, DtCompileHest, TemplateHest, "Hardware Error Source Table"}, {ACPI_SIG_HPET, AcpiDmTableInfoHpet, NULL, NULL, TemplateHpet, "High Precision Event Timer table"}, {ACPI_SIG_IVRS, NULL, AcpiDmDumpIvrs, DtCompileIvrs, TemplateIvrs, "I/O Virtualization Reporting Structure"}, @@ -777,6 +799,7 @@ AcpiDmDumpTable ( case ACPI_DMT_SPACEID: case ACPI_DMT_ACCWIDTH: case ACPI_DMT_IVRS: + case ACPI_DMT_GTDT: case ACPI_DMT_MADT: case ACPI_DMT_PCCT: case ACPI_DMT_PMTT: @@ -788,6 +811,7 @@ AcpiDmDumpTable ( case ACPI_DMT_EINJINST: case ACPI_DMT_ERSTACT: case ACPI_DMT_ERSTINST: + case ACPI_DMT_DMAR_SCOPE: ByteLength = 1; break; @@ -1119,6 +1143,19 @@ AcpiDmDumpTable ( AcpiOsPrintf (UINT16_FORMAT, ACPI_GET16 (Target), AcpiDmDmarSubnames[Temp16]); break; + case ACPI_DMT_DMAR_SCOPE: + + /* DMAR device scope types */ + + Temp8 = *Target; + if (Temp8 > ACPI_DMAR_SCOPE_TYPE_RESERVED) + { + Temp8 = ACPI_DMAR_SCOPE_TYPE_RESERVED; + } + + AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmDmarScope[Temp8]); + break; + case ACPI_DMT_EINJACT: /* EINJ Action types */ @@ -1171,6 +1208,19 @@ AcpiDmDumpTable ( AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmErstInstructions[Temp8]); break; + case ACPI_DMT_GTDT: + + /* GTDT subtable types */ + + Temp8 = *Target; + if (Temp8 > ACPI_GTDT_TYPE_RESERVED) + { + Temp8 = ACPI_GTDT_TYPE_RESERVED; + } + + AcpiOsPrintf (UINT8_FORMAT, *Target, AcpiDmGtdtSubnames[Temp8]); + break; + case ACPI_DMT_HEST: /* HEST subtable types */ diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c index 70e9d4e..b0ae905 100644 --- a/src/acpica/source/common/dmtbdump.c +++ b/src/acpica/source/common/dmtbdump.c @@ -963,18 +963,24 @@ AcpiDmDumpDmar ( ScopeOffset = sizeof (ACPI_DMAR_RESERVED_MEMORY); break; - case ACPI_DMAR_TYPE_ATSR: + case ACPI_DMAR_TYPE_ROOT_ATS: InfoTable = AcpiDmTableInfoDmar2; ScopeOffset = sizeof (ACPI_DMAR_ATSR); break; - case ACPI_DMAR_HARDWARE_AFFINITY: + case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: InfoTable = AcpiDmTableInfoDmar3; ScopeOffset = sizeof (ACPI_DMAR_RHSA); break; + case ACPI_DMAR_TYPE_NAMESPACE: + + InfoTable = AcpiDmTableInfoDmar4; + ScopeOffset = sizeof (ACPI_DMAR_ANDD); + break; + default: AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", SubTable->Type); @@ -988,7 +994,16 @@ AcpiDmDumpDmar ( return; } - /* Dump the device scope entries (if any) */ + /* + * Dump the optional device scope entries + */ + if ((SubTable->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) || + (SubTable->Type == ACPI_DMAR_TYPE_NAMESPACE)) + { + /* These types do not support device scopes */ + + goto NextSubtable; + } ScopeTable = ACPI_ADD_PTR (ACPI_DMAR_DEVICE_SCOPE, SubTable, ScopeOffset); while (ScopeOffset < SubTable->Length) @@ -1028,6 +1043,7 @@ AcpiDmDumpDmar ( ScopeTable, ScopeTable->Length); } +NextSubtable: /* Point to next subtable */ Offset += SubTable->Length; @@ -1227,6 +1243,123 @@ NextSubTable: /******************************************************************************* * + * FUNCTION: AcpiDmDumpGtdt + * + * PARAMETERS: Table - A GTDT table + * + * RETURN: None + * + * DESCRIPTION: Format the contents of a GTDT. This table type consists + * of an open-ended number of subtables. + * + ******************************************************************************/ + +void +AcpiDmDumpGtdt ( + ACPI_TABLE_HEADER *Table) +{ + ACPI_STATUS Status; + ACPI_GTDT_HEADER *SubTable; + UINT32 Length = Table->Length; + UINT32 Offset = sizeof (ACPI_TABLE_GTDT); + ACPI_DMTABLE_INFO *InfoTable; + UINT32 SubTableLength; + UINT32 GtCount; + ACPI_GTDT_TIMER_ENTRY *GtxTable; + + + /* Main table */ + + Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoGtdt); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Subtables */ + + SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, Table, Offset); + while (Offset < Table->Length) + { + /* Common subtable header */ + + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, SubTable, + SubTable->Length, AcpiDmTableInfoGtdtHdr); + if (ACPI_FAILURE (Status)) + { + return; + } + + GtCount = 0; + switch (SubTable->Type) + { + case ACPI_GTDT_TYPE_TIMER_BLOCK: + + SubTableLength = sizeof (ACPI_GTDT_TIMER_BLOCK); + GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, + SubTable))->TimerCount; + + InfoTable = AcpiDmTableInfoGtdt0; + break; + + case ACPI_GTDT_TYPE_WATCHDOG: + + SubTableLength = sizeof (ACPI_GTDT_WATCHDOG); + + InfoTable = AcpiDmTableInfoGtdt1; + break; + + default: + + /* Cannot continue on unknown type - no length */ + + AcpiOsPrintf ("\n**** Unknown GTDT subtable type 0x%X\n", SubTable->Type); + return; + } + + Status = AcpiDmDumpTable (Length, Offset, SubTable, + SubTable->Length, InfoTable); + if (ACPI_FAILURE (Status)) + { + return; + } + + /* Point to end of current subtable (each subtable above is of fixed length) */ + + Offset += SubTableLength; + + /* If there are any Gt Timer Blocks from above, dump them now */ + + if (GtCount) + { + GtxTable = ACPI_ADD_PTR (ACPI_GTDT_TIMER_ENTRY, SubTable, SubTableLength); + SubTableLength += GtCount * sizeof (ACPI_GTDT_TIMER_ENTRY); + + while (GtCount) + { + AcpiOsPrintf ("\n"); + Status = AcpiDmDumpTable (Length, Offset, GtxTable, + sizeof (ACPI_GTDT_TIMER_ENTRY), AcpiDmTableInfoGtdt0a); + if (ACPI_FAILURE (Status)) + { + return; + } + Offset += sizeof (ACPI_GTDT_TIMER_ENTRY); + GtxTable++; + GtCount--; + } + } + + /* Point to next subtable */ + + SubTable = ACPI_ADD_PTR (ACPI_GTDT_HEADER, SubTable, SubTableLength); + } +} + + +/******************************************************************************* + * * FUNCTION: AcpiDmDumpHest * * PARAMETERS: Table - A HEST table @@ -1734,6 +1867,16 @@ AcpiDmDumpMadt ( InfoTable = AcpiDmTableInfoMadt12; break; + case ACPI_MADT_TYPE_GENERIC_MSI_FRAME: + + InfoTable = AcpiDmTableInfoMadt13; + break; + + case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR: + + InfoTable = AcpiDmTableInfoMadt14; + break; + default: AcpiOsPrintf ("\n**** Unknown MADT subtable type 0x%X\n\n", SubTable->Type); @@ -2089,6 +2232,7 @@ AcpiDmDumpPcct ( { ACPI_STATUS Status; ACPI_PCCT_SUBSPACE *SubTable; + ACPI_DMTABLE_INFO *InfoTable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_PCCT); @@ -2116,10 +2260,20 @@ AcpiDmDumpPcct ( return; } - /* ACPI 5.0: Only one type of PCCT subtable is supported */ - - if (SubTable->Header.Type != ACPI_PCCT_TYPE_GENERIC_SUBSPACE) + switch (SubTable->Header.Type) { + case ACPI_PCCT_TYPE_GENERIC_SUBSPACE: + + InfoTable = AcpiDmTableInfoPcct0; + break; + + case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE: + + InfoTable = AcpiDmTableInfoPcct1; + break; + + default: + AcpiOsPrintf ( "\n**** Unexpected or unknown PCCT subtable type 0x%X\n\n", SubTable->Header.Type); @@ -2128,7 +2282,7 @@ AcpiDmDumpPcct ( AcpiOsPrintf ("\n"); Status = AcpiDmDumpTable (Length, Offset, SubTable, - SubTable->Header.Length, AcpiDmTableInfoPcct0); + SubTable->Header.Length, InfoTable); if (ACPI_FAILURE (Status)) { return; @@ -2282,8 +2436,7 @@ AcpiDmDumpPmtt ( if (DomainCount) { AcpiOsPrintf ( - "\n**** DomainCount exceeds subtable length\n\n", - MemSubTable->Type); + "\n**** DomainCount exceeds subtable length\n\n"); } /* Walk the physical component (DIMM) subtables */ diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c index 7a9520d..2a3bed4 100644 --- a/src/acpica/source/common/dmtbinfo.c +++ b/src/acpica/source/common/dmtbinfo.c @@ -209,11 +209,16 @@ #define ACPI_DMAR1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_RESERVED_MEMORY,f) #define ACPI_DMAR2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_ATSR,f) #define ACPI_DMAR3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_RHSA,f) +#define ACPI_DMAR4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_ANDD,f) #define ACPI_EINJ0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f) #define ACPI_ERST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WHEA_HEADER,f) #define ACPI_FPDTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f) #define ACPI_FPDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_BOOT,f) #define ACPI_FPDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_S3PT_PTR,f) +#define ACPI_GTDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_BLOCK,f) +#define ACPI_GTDT0a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_TIMER_ENTRY,f) +#define ACPI_GTDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_WATCHDOG,f) +#define ACPI_GTDTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_GTDT_HEADER,f) #define ACPI_HEST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f) #define ACPI_HEST1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_CORRECTED,f) #define ACPI_HEST2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_NMI,f) @@ -246,6 +251,8 @@ #define ACPI_MADT10_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f) #define ACPI_MADT11_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f) #define ACPI_MADT12_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_DISTRIBUTOR,f) +#define ACPI_MADT13_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_MSI_FRAME,f) +#define ACPI_MADT14_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_REDISTRIBUTOR,f) #define ACPI_MADTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f) #define ACPI_MCFG0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MCFG_ALLOCATION,f) #define ACPI_MPST0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPST_POWER_NODE,f) @@ -256,6 +263,7 @@ #define ACPI_MSCT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MSCT_PROXIMITY,f) #define ACPI_MTMR0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MTMR_ENTRY,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_PMTT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_SOCKET,f) #define ACPI_PMTT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_CONTROLLER,f) #define ACPI_PMTT1A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_DOMAIN,f) @@ -288,6 +296,8 @@ #define ACPI_SRAT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_MEM_AFFINITY,f,o) #define ACPI_SRAT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f,o) #define ACPI_GTDT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_GTDT,f,o) +#define ACPI_GTDT0a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_TIMER_ENTRY,f,o) +#define ACPI_GTDT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_WATCHDOG,f,o) #define ACPI_LPITH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_LPIT_HEADER,f,o) #define ACPI_MADT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_MADT,f,o) #define ACPI_MADT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_APIC,f,o) @@ -299,9 +309,11 @@ #define ACPI_MADT9_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC,f,o) #define ACPI_MADT10_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_LOCAL_X2APIC_NMI,f,o) #define ACPI_MADT11_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_INTERRUPT,f,o) +#define ACPI_MADT13_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MADT_GENERIC_MSI_FRAME,f,o) #define ACPI_MPST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MPST_POWER_NODE,f,o) #define ACPI_MPST2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_MPST_POWER_DATA,f,o) #define ACPI_PCCT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_PCCT,f,o) +#define ACPI_PCCT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_HW_REDUCED,f,o) #define ACPI_PMTTH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PMTT_HEADER,f,o) #define ACPI_WDDT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_WDDT,f,o) #define ACPI_EINJ0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o) @@ -512,17 +524,22 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFadt2[] = { {ACPI_DMT_GAS, ACPI_FADT_OFFSET (ResetRegister), "Reset Register", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (ResetValue), "Value to cause reset", 0}, - {ACPI_DMT_UINT24, ACPI_FADT_OFFSET (Reserved4[0]), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (ArmBootFlags), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MinorRevision), "Reserved", 0}, ACPI_DMT_TERMINATOR }; -/* ACPI 2.0+ Extensions (FADT version 3 and 4) */ +/* ACPI 2.0+ Extensions (FADT version 3, 4, and 5) */ ACPI_DMTABLE_INFO AcpiDmTableInfoFadt3[] = { {ACPI_DMT_GAS, ACPI_FADT_OFFSET (ResetRegister), "Reset Register", 0}, {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (ResetValue), "Value to cause reset", 0}, - {ACPI_DMT_UINT24, ACPI_FADT_OFFSET (Reserved4[0]), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_FADT_OFFSET (ArmBootFlags), "ARM Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0), "PSCI Compliant", 0}, + {ACPI_DMT_FLAG1, ACPI_FADT_FLAG_OFFSET(ArmBootFlags,0), "Must use HVC for PSCI", 0}, + ACPI_DMT_NEW_LINE, + {ACPI_DMT_UINT8, ACPI_FADT_OFFSET (MinorRevision), "FADT Minor Revision", 0}, {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (XFacs), "FACS Address", 0}, {ACPI_DMT_UINT64, ACPI_FADT_OFFSET (XDsdt), "DSDT Address", 0}, {ACPI_DMT_GAS, ACPI_FADT_OFFSET (XPm1aEventBlock), "PM1A Event Block", 0}, @@ -879,7 +896,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoDmarHdr[] = ACPI_DMTABLE_INFO AcpiDmTableInfoDmarScope[] = { - {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (EntryType), "Device Scope Entry Type", 0}, + {ACPI_DMT_DMAR_SCOPE, ACPI_DMARS_OFFSET (EntryType), "Device Scope Type", 0}, {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (Length), "Entry Length", DT_LENGTH}, {ACPI_DMT_UINT16, ACPI_DMARS_OFFSET (Reserved), "Reserved", 0}, {ACPI_DMT_UINT8, ACPI_DMARS_OFFSET (EnumerationId), "Enumeration ID", 0}, @@ -931,6 +948,16 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[] = ACPI_DMT_TERMINATOR }; +/* 4: ACPI Namespace Device Declaration Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[] = +{ + {ACPI_DMT_UINT24, ACPI_DMAR4_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT8, ACPI_DMAR4_OFFSET (DeviceNumber), "Device Number", 0}, + {ACPI_DMT_STRING, ACPI_DMAR4_OFFSET (DeviceName[0]), "Device Name", 0}, + ACPI_DMT_TERMINATOR +}; + /******************************************************************************* * @@ -1070,29 +1097,89 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[] = ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt[] = { - {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (Address), "Timer Address", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (Flags,0), "Memory Present", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterBlockAddresss), "Counter Block Address", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_NEW_LINE, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecurePl1Interrupt), "Secure PL1 Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecurePl1Flags), "SPL1 Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (SecurePl1Flags,0), "Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (SecurePl1Flags,0), "Polarity", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Interrupt), "Secure EL1 Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (SecureEl1Flags), "EL1 Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (SecureEl1Flags,0), "Always On", 0}, ACPI_DMT_NEW_LINE, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecurePl1Interrupt), "Non-Secure PL1 Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecurePl1Flags), "NSPL1 Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecurePl1Flags,0),"Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecurePl1Flags,0),"Polarity", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Interrupt), "Non-Secure EL1 Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl1Flags), "NEL1 Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl1Flags,0),"Always On", 0}, ACPI_DMT_NEW_LINE, {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (VirtualTimerFlags), "VT Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Trigger Mode", 0}, {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (VirtualTimerFlags,0),"Always On", 0}, + ACPI_DMT_NEW_LINE, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Interrupt), "Non-Secure EL2 Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecureEl2Flags), "NEL2 Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_GTDT_FLAG_OFFSET (NonSecureEl2Flags,0),"Always On", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT_OFFSET (CounterReadBlockAddress), "Counter Read Block Address", 0}, ACPI_DMT_NEW_LINE, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecurePl2Interrupt), "Non-Secure PL2 Interrupt", 0}, - {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (NonSecurePl2Flags), "NSPL2 Flags (decoded below)", DT_FLAG}, - {ACPI_DMT_FLAG0, ACPI_GTDT_FLAG_OFFSET (NonSecurePl2Flags,0),"Trigger Mode", 0}, - {ACPI_DMT_FLAG1, ACPI_GTDT_FLAG_OFFSET (NonSecurePl2Flags,0),"Polarity", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerCount), "Platform Timer Count", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT_OFFSET (PlatformTimerOffset), "Platform Timer Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +/* GTDT Subtable header (one per Subtable) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtHdr[] = +{ + {ACPI_DMT_GTDT, ACPI_GTDTH_OFFSET (Type), "Subtable Type", 0}, + {ACPI_DMT_UINT16, ACPI_GTDTH_OFFSET (Length), "Length", DT_LENGTH}, + ACPI_DMT_TERMINATOR +}; + +/* GTDT Subtables */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0[] = +{ + {ACPI_DMT_UINT8, ACPI_GTDT0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT0_OFFSET (BlockAddress), "Block Address", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerCount), "Timer Count", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0_OFFSET (TimerOffset), "Timer Offset", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0a[] = +{ + {ACPI_DMT_UINT8 , ACPI_GTDT0a_OFFSET (FrameNumber), "Frame Number", 0}, + {ACPI_DMT_UINT24, ACPI_GTDT0a_OFFSET (Reserved[0]), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT0a_OFFSET (El0BaseAddress), "EL0 Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (TimerFlags), "Timer Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerInterrupt), "Virtual Timer Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (VirtualTimerFlags), "Virtual Timer Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (VirtualTimerFlags,0), "Polarity", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT0a_OFFSET (CommonFlags), "Common Flags (decoded below)", 0}, + {ACPI_DMT_FLAG0, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Secure", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT0a_FLAG_OFFSET (CommonFlags,0), "Always On", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt1[] = +{ + {ACPI_DMT_UINT8, ACPI_GTDT1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (RefreshFrameAddress), "Refresh Frame Address", 0}, + {ACPI_DMT_UINT64, ACPI_GTDT1_OFFSET (ControlFrameAddress), "Control Frame Address", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerInterrupt), "Timer Interrupt", 0}, + {ACPI_DMT_UINT32, ACPI_GTDT1_OFFSET (TimerFlags), "Timer Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Trigger Mode", 0}, + {ACPI_DMT_FLAG1, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Polarity", 0}, + {ACPI_DMT_FLAG2, ACPI_GTDT1_FLAG_OFFSET (TimerFlags,0), "Security", 0}, ACPI_DMT_TERMINATOR }; @@ -1599,14 +1686,21 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt10[] = ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11[] = { {ACPI_DMT_UINT16, ACPI_MADT11_OFFSET (Reserved), "Reserved", 0}, - {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (GicId), "Local GIC Hardware ID", 0}, + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (CpuInterfaceNumber), "CPU Interface Number", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Uid), "Processor UID", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Processor Enabled", 0}, + {ACPI_DMT_FLAG1, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Performance Interrupt Trigger Mode", 0}, + {ACPI_DMT_FLAG2, ACPI_MADT11_FLAG_OFFSET (Flags,0), "Virtual GIC Interrupt Trigger Mode", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (ParkingVersion), "Parking Protocol Version", 0}, {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (PerformanceInterrupt), "Performance Interrupt", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ParkedAddress), "Parked Address", 0}, {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicvBaseAddress), "Virtual GIC Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GichBaseAddress), "Hypervisor GIC Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT11_OFFSET (VgicInterrupt), "Virtual GIC Interrupt", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (GicrBaseAddress), "Redistributor Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_MADT11_OFFSET (ArmMpidr), "ARM MPIDR", 0}, ACPI_DMT_TERMINATOR }; @@ -1622,6 +1716,30 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt12[] = ACPI_DMT_TERMINATOR }; +/* 13: Generic MSI Frame (ACPI 5.1) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt13[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (MsiFrameId), "MSI Frame ID", 0}, + {ACPI_DMT_UINT64, ACPI_MADT13_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT13_OFFSET (Flags), "Flags (decoded below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_MADT13_FLAG_OFFSET (Flags,0), "Select SPI", 0}, + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiCount), "SPI Count", 0}, + {ACPI_DMT_UINT16, ACPI_MADT13_OFFSET (SpiBase), "SPI Base", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 14: Generic Redistributor (ACPI 5.1) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14[] = +{ + {ACPI_DMT_UINT16, ACPI_MADT14_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_MADT14_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT32, ACPI_MADT14_OFFSET (Length), "Length", 0}, + ACPI_DMT_TERMINATOR +}; + /******************************************************************************* * @@ -1841,6 +1959,26 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[] = ACPI_DMT_TERMINATOR }; +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[] = +{ + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (DoorbellInterrupt), "Doorbell Interrupt", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG}, + {ACPI_DMT_FLAG0, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Polarity", 0}, + {ACPI_DMT_FLAG1, ACPI_PCCT1_FLAG_OFFSET (Flags,0), "Mode", 0}, + {ACPI_DMT_UINT8, ACPI_PCCT1_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (Length), "Address Length", 0}, + {ACPI_DMT_GAS, ACPI_PCCT1_OFFSET (DoorbellRegister), "Doorbell Register", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (PreserveMask), "Preserve Mask", 0}, + {ACPI_DMT_UINT64, ACPI_PCCT1_OFFSET (WriteMask), "Write Mask", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (Latency), "Command Latency", 0}, + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (MaxAccessRate), "Maximum Access Rate", 0}, + {ACPI_DMT_UINT16, ACPI_PCCT1_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0}, + ACPI_DMT_TERMINATOR +}; + /******************************************************************************* * diff --git a/src/acpica/source/compiler/Makefile.am b/src/acpica/source/compiler/Makefile.am index 55eccb9..a1de14a 100644 --- a/src/acpica/source/compiler/Makefile.am +++ b/src/acpica/source/compiler/Makefile.am @@ -124,6 +124,7 @@ libfwtsiasl_la_SOURCES = \ ../components/utilities/utdebug.c \ ../components/utilities/utdelete.c \ ../components/utilities/utglobal.c \ + ../components/utilities/uthex.c \ ../components/utilities/utinit.c \ ../components/utilities/utlock.c \ ../components/utilities/utobject.c \ @@ -140,6 +141,7 @@ libfwtsiasl_la_SOURCES = \ ../components/utilities/utaddress.c \ ../components/utilities/utownerid.c \ ../components/utilities/utexcep.c \ + ../components/utilities/utuuid.c \ ../components/namespace/nsaccess.c \ ../components/namespace/nsalloc.c \ ../components/namespace/nsdump.c \ diff --git a/src/acpica/source/compiler/aslanalyze.c b/src/acpica/source/compiler/aslanalyze.c index 16e28d3..8bfc9ac 100644 --- a/src/acpica/source/compiler/aslanalyze.c +++ b/src/acpica/source/compiler/aslanalyze.c @@ -641,3 +641,51 @@ ApCheckRegMethod ( AslError (ASL_WARNING, ASL_MSG_NO_REGION, Op, NULL); } + + +/******************************************************************************* + * + * FUNCTION: ApFindNameInScope + * + * PARAMETERS: Name - Name to search for + * Op - Current parse op + * + * RETURN: TRUE if name found in the same scope as Op. + * + * DESCRIPTION: Determine if a name appears in the same scope as Op, as either + * a Method() or a Name(). + * + ******************************************************************************/ + +BOOLEAN +ApFindNameInScope ( + char *Name, + ACPI_PARSE_OBJECT *Op) +{ + ACPI_PARSE_OBJECT *Next; + ACPI_PARSE_OBJECT *Parent; + + + /* Get the start of the current scope */ + + Parent = Op->Asl.Parent; + Next = Parent->Asl.Child; + + /* Search entire scope for a match to the name */ + + while (Next) + { + if ((Next->Asl.ParseOpcode == PARSEOP_METHOD) || + (Next->Asl.ParseOpcode == PARSEOP_NAME)) + { + if (ACPI_COMPARE_NAME (Name, Next->Asl.NameSeg)) + { + return (TRUE); + } + } + + Next = Next->Asl.Next; + } + + return (FALSE); +} diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h index 6e59b0f..c4afef4 100644 --- a/src/acpica/source/compiler/aslcompiler.h +++ b/src/acpica/source/compiler/aslcompiler.h @@ -347,6 +347,11 @@ void ApCheckRegMethod ( ACPI_PARSE_OBJECT *Op); +BOOLEAN +ApFindNameInScope ( + char *Name, + ACPI_PARSE_OBJECT *Op); + /* * aslerror - error handling/reporting @@ -962,10 +967,6 @@ void UtDisplaySummary ( UINT32 FileId); -UINT8 -UtHexCharToValue ( - int HexChar); - void UtConvertByteToHex ( UINT8 RawByte, @@ -1027,11 +1028,6 @@ AuValidateUuid ( char *InString); ACPI_STATUS -AuConvertStringToUuid ( - char *InString, - char *UuIdBuffer); - -ACPI_STATUS AuConvertUuidToString ( char *UuIdBuffer, char *OutString); diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l index b06aa65..bdcc8ed 100644 --- a/src/acpica/source/compiler/aslcompiler.l +++ b/src/acpica/source/compiler/aslcompiler.l @@ -182,10 +182,10 @@ NamePathTail [.]{NameSeg} [ \t] { count (0); } -"/*" { if (!AslDoComment ()) yyterminate (); } -"//" { if (!AslDoCommentType2 ()) yyterminate (); } +"/*" { if (!AslDoComment ()) {yyterminate ();} } +"//" { if (!AslDoCommentType2 ()) {yyterminate ();} } -"\"" { if (AslDoStringLiteral ()) return (PARSEOP_STRING_LITERAL); else yyterminate (); } +"\"" { if (AslDoStringLiteral ()) {return (PARSEOP_STRING_LITERAL);} else {yyterminate ();} } ";" { count (0); return(';'); } @@ -711,9 +711,9 @@ NamePathTail [.]{NameSeg} AslCompilererror (MsgBuffer);} <<EOF>> { if (AslPopInputFileStack ()) - yyterminate(); + {yyterminate();} else - return (PARSEOP_INCLUDE_END);}; + {return (PARSEOP_INCLUDE_END);} }; %% diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h index 71f52db..b05bd7f 100644 --- a/src/acpica/source/compiler/asldefine.h +++ b/src/acpica/source/compiler/asldefine.h @@ -127,7 +127,7 @@ #define ASL_INVOCATION_NAME "iasl" #define ASL_CREATOR_ID "INTL" -#define ASL_COMPLIANCE "Supports ACPI Specification Revision 5.0A" +#define ASL_COMPLIANCE "Supports ACPI Specification Revision 5.1" /* Configuration constants */ diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h index 4d56c05..53a500e 100644 --- a/src/acpica/source/compiler/aslglobal.h +++ b/src/acpica/source/compiler/aslglobal.h @@ -135,11 +135,6 @@ #ifdef _DECLARE_GLOBALS UINT32 Gbl_ExceptionCount[ASL_NUM_REPORT_LEVELS] = {0,0,0,0,0,0}; -char AslHexLookup[] = -{ - '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' -}; - /* Table below must match ASL_FILE_TYPES in asltypes.h */ @@ -164,7 +159,6 @@ ASL_FILE_INFO Gbl_Files [ASL_NUM_FILES] = #else extern UINT32 Gbl_ExceptionCount[ASL_NUM_REPORT_LEVELS]; -extern char AslHexLookup[]; extern ASL_FILE_INFO Gbl_Files [ASL_NUM_FILES]; #endif diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c index 5b271d3..11b5d57 100644 --- a/src/acpica/source/compiler/aslmessages.c +++ b/src/acpica/source/compiler/aslmessages.c @@ -305,6 +305,7 @@ const char *AslCompilerMsgs [] = /* ASL_MSG_WRITE */ "Could not write file", /* ASL_MSG_RANGE */ "Constant out of range", /* ASL_MSG_BUFFER_ALLOCATION */ "Could not allocate line buffer", +/* ASL_MSG_MISSING_DEPENDENCY */ "Missing dependency" }; /* Table compiler */ diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h index 150425c..5743075 100644 --- a/src/acpica/source/compiler/aslmessages.h +++ b/src/acpica/source/compiler/aslmessages.h @@ -307,6 +307,7 @@ typedef enum ASL_MSG_WRITE, ASL_MSG_RANGE, ASL_MSG_BUFFER_ALLOCATION, + ASL_MSG_MISSING_DEPENDENCY, /* These messages are used by the Data Table compiler only */ diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c index edf2fa4..58c1cc8 100644 --- a/src/acpica/source/compiler/aslmethod.c +++ b/src/acpica/source/compiler/aslmethod.c @@ -180,6 +180,17 @@ MtMethodAnalysisWalkBegin ( WalkInfo->MethodStack = MethodInfo; + /* Special handling for _DSD, must have a _HID also */ + + if (!ACPI_STRCMP (METHOD_NAME__DSD, Op->Asl.NameSeg)) + { + if (!ApFindNameInScope (METHOD_NAME__HID, Op)) + { + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, + "_DSD requires _HID in same scope"); + } + } + /* Get the name node */ Next = Op->Asl.Child; @@ -485,6 +496,15 @@ MtMethodAnalysisWalkBegin ( } } + else if (!ACPI_STRCMP (METHOD_NAME__DSD, Op->Asl.NameSeg)) + { + if (!ApFindNameInScope (METHOD_NAME__HID, Op)) + { + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op, + "_DSD requires _HID in same scope"); + } + } + break; default: diff --git a/src/acpica/source/compiler/aslopcodes.c b/src/acpica/source/compiler/aslopcodes.c index 53971e0..bd8ea0e 100644 --- a/src/acpica/source/compiler/aslopcodes.c +++ b/src/acpica/source/compiler/aslopcodes.c @@ -695,10 +695,10 @@ OpcDoEisaId ( (UINT32) ((UINT8) (InString[1] - 0x40)) << 21 | (UINT32) ((UINT8) (InString[2] - 0x40)) << 16 | - (UtHexCharToValue (InString[3])) << 12 | - (UtHexCharToValue (InString[4])) << 8 | - (UtHexCharToValue (InString[5])) << 4 | - UtHexCharToValue (InString[6]); + (AcpiUtAsciiCharToHex (InString[3])) << 12 | + (AcpiUtAsciiCharToHex (InString[4])) << 8 | + (AcpiUtAsciiCharToHex (InString[5])) << 4 | + AcpiUtAsciiCharToHex (InString[6]); /* Swap to little-endian to get final ID (see function header) */ @@ -738,7 +738,7 @@ OpcDoUuId ( ACPI_PARSE_OBJECT *Op) { char *InString; - char *Buffer; + UINT8 *Buffer; ACPI_STATUS Status = AE_OK; ACPI_PARSE_OBJECT *NewOp; @@ -753,7 +753,7 @@ OpcDoUuId ( } else { - (void) AuConvertStringToUuid (InString, Buffer); + AcpiUtConvertStringToUuid (InString, Buffer); } /* Change Op to a Buffer */ diff --git a/src/acpica/source/compiler/aslprepkg.c b/src/acpica/source/compiler/aslprepkg.c index 2de5559..8184a3d 100644 --- a/src/acpica/source/compiler/aslprepkg.c +++ b/src/acpica/source/compiler/aslprepkg.c @@ -361,6 +361,41 @@ ApCheckPackage ( Package, 1, Count); break; + case ACPI_PTYPE2_UUID_PAIR: + + /* The package contains a variable list of UUID Buffer/Package pairs */ + + /* The length of the package must be even */ + + if (Count & 1) + { + sprintf (MsgBuffer, "%4.4s: Package length, %d, must be even.", + Predefined->Info.Name, Count); + + AslError (ASL_ERROR, ASL_MSG_RESERVED_PACKAGE_LENGTH, + ParentOp->Asl.Child, MsgBuffer); + } + + /* Validate the alternating types */ + + for (i = 0; i < Count; ++i) + { + if (i & 1) + { + ApCheckObjectType (Predefined->Info.Name, Op, + Package->RetInfo.ObjectType2, i); + } + else + { + ApCheckObjectType (Predefined->Info.Name, Op, + Package->RetInfo.ObjectType1, i); + } + + Op = Op->Asl.Next; + } + + break; + case ACPI_PTYPE2: case ACPI_PTYPE2_FIXED: case ACPI_PTYPE2_MIN: diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c index f33c3bd..5a02470 100644 --- a/src/acpica/source/compiler/aslutils.c +++ b/src/acpica/source/compiler/aslutils.c @@ -315,37 +315,6 @@ UtEndEvent ( /******************************************************************************* * - * FUNCTION: UtHexCharToValue - * - * PARAMETERS: HexChar - Hex character in Ascii - * - * RETURN: The binary value of the hex character - * - * DESCRIPTION: Perform ascii-to-hex translation - * - ******************************************************************************/ - -UINT8 -UtHexCharToValue ( - int HexChar) -{ - - if (HexChar <= 0x39) - { - return ((UINT8) (HexChar - 0x30)); - } - - if (HexChar <= 0x46) - { - return ((UINT8) (HexChar - 0x37)); - } - - return ((UINT8) (HexChar - 0x57)); -} - - -/******************************************************************************* - * * FUNCTION: UtConvertByteToHex * * PARAMETERS: RawByte - Binary data @@ -368,8 +337,8 @@ UtConvertByteToHex ( Buffer[0] = '0'; Buffer[1] = 'x'; - Buffer[2] = (UINT8) AslHexLookup[(RawByte >> 4) & 0xF]; - Buffer[3] = (UINT8) AslHexLookup[RawByte & 0xF]; + Buffer[2] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 4); + Buffer[3] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 0); } @@ -384,7 +353,7 @@ UtConvertByteToHex ( * RETURN: Ascii hex byte is stored in Buffer. * * DESCRIPTION: Perform hex-to-ascii translation. The return data is prefixed - * with "0x" + * with '0', and a trailing 'h' is added. * ******************************************************************************/ @@ -395,8 +364,8 @@ UtConvertByteToAsmHex ( { Buffer[0] = '0'; - Buffer[1] = (UINT8) AslHexLookup[(RawByte >> 4) & 0xF]; - Buffer[2] = (UINT8) AslHexLookup[RawByte & 0xF]; + Buffer[1] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 4); + Buffer[2] = (UINT8) AcpiUtHexToAsciiChar (RawByte, 0); Buffer[3] = 'h'; } diff --git a/src/acpica/source/compiler/asluuid.c b/src/acpica/source/compiler/asluuid.c index ad76c2d..98a63a3 100644 --- a/src/acpica/source/compiler/asluuid.c +++ b/src/acpica/source/compiler/asluuid.c @@ -113,42 +113,13 @@ * *****************************************************************************/ - #include "aslcompiler.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("asluuid") -/* - * UUID support functions. - * - * This table is used to convert an input UUID ascii string to a 16 byte - * buffer and the reverse. The table maps a UUID buffer index 0-15 to - * the index within the 36-byte UUID string where the associated 2-byte - * hex value can be found. - * - * 36-byte UUID strings are of the form: - * aabbccdd-eeff-gghh-iijj-kkllmmnnoopp - * Where aa-pp are one byte hex numbers, made up of two hex digits - * - * Note: This table is basically the inverse of the string-to-offset table - * found in the ACPI spec in the description of the ToUUID macro. - */ -static UINT8 Gbl_MapToUuidOffset[16] = -{ - 6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34 -}; - -#define UUID_BUFFER_LENGTH 16 -#define UUID_STRING_LENGTH 36 - -/* Positions for required hyphens (dashes) in UUID strings */ - -#define UUID_HYPHEN1_OFFSET 8 -#define UUID_HYPHEN2_OFFSET 13 -#define UUID_HYPHEN3_OFFSET 18 -#define UUID_HYPHEN4_OFFSET 23 +extern UINT8 AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH]; /******************************************************************************* @@ -209,42 +180,6 @@ AuValidateUuid ( /******************************************************************************* * - * FUNCTION: AuConvertStringToUuid - * - * PARAMETERS: InString - 36-byte formatted UUID string - * UuidBuffer - 16-byte UUID buffer - * - * RETURN: Status - * - * DESCRIPTION: Convert 36-byte formatted UUID string to 16-byte UUID buffer - * - ******************************************************************************/ - -ACPI_STATUS -AuConvertStringToUuid ( - char *InString, - char *UuidBuffer) -{ - UINT32 i; - - - if (!InString || !UuidBuffer) - { - return (AE_BAD_PARAMETER); - } - - for (i = 0; i < UUID_BUFFER_LENGTH; i++) - { - UuidBuffer[i] = (char) (UtHexCharToValue (InString[Gbl_MapToUuidOffset[i]]) << 4); - UuidBuffer[i] |= (char) UtHexCharToValue (InString[Gbl_MapToUuidOffset[i] + 1]); - } - - return (AE_OK); -} - - -/******************************************************************************* - * * FUNCTION: AuConvertUuidToString * * PARAMETERS: UuidBuffer - 16-byte UUID buffer @@ -272,8 +207,11 @@ AuConvertUuidToString ( for (i = 0; i < UUID_BUFFER_LENGTH; i++) { - OutString[Gbl_MapToUuidOffset[i]] = (UINT8) AslHexLookup[(UuidBuffer[i] >> 4) & 0xF]; - OutString[Gbl_MapToUuidOffset[i] + 1] = (UINT8) AslHexLookup[UuidBuffer[i] & 0xF]; + OutString[AcpiGbl_MapToUuidOffset[i]] = + AcpiUtHexToAsciiChar (UuidBuffer[i], 4); + + OutString[AcpiGbl_MapToUuidOffset[i] + 1] = + AcpiUtHexToAsciiChar (UuidBuffer[i], 0); } /* Insert required hyphens (dashes) */ diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h index 313650a..1fb1f12 100644 --- a/src/acpica/source/compiler/dtcompiler.h +++ b/src/acpica/source/compiler/dtcompiler.h @@ -492,6 +492,10 @@ DtCompileFpdt ( void **PFieldList); ACPI_STATUS +DtCompileGtdt ( + void **PFieldList); + +ACPI_STATUS DtCompileHest ( void **PFieldList); diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c index 46d56f8..e03f891 100644 --- a/src/acpica/source/compiler/dtfield.c +++ b/src/acpica/source/compiler/dtfield.c @@ -331,7 +331,7 @@ DtCompileUuid ( } else { - Status = AuConvertStringToUuid (InString, (char *) Buffer); + AcpiUtConvertStringToUuid (InString, Buffer); } return (Status); diff --git a/src/acpica/source/compiler/dttable.c b/src/acpica/source/compiler/dttable.c index 5e310d6..db95850 100644 --- a/src/acpica/source/compiler/dttable.c +++ b/src/acpica/source/compiler/dttable.c @@ -808,16 +808,21 @@ DtCompileDmar ( InfoTable = AcpiDmTableInfoDmar1; break; - case ACPI_DMAR_TYPE_ATSR: + case ACPI_DMAR_TYPE_ROOT_ATS: InfoTable = AcpiDmTableInfoDmar2; break; - case ACPI_DMAR_HARDWARE_AFFINITY: + case ACPI_DMAR_TYPE_HARDWARE_AFFINITY: InfoTable = AcpiDmTableInfoDmar3; break; + case ACPI_DMAR_TYPE_NAMESPACE: + + InfoTable = AcpiDmTableInfoDmar4; + break; + default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "DMAR"); @@ -834,10 +839,20 @@ DtCompileDmar ( ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); - DtPushSubtable (Subtable); - /* Optional Device Scope subtables */ + /* + * Optional Device Scope subtables + */ + if ((DmarHeader->Type == ACPI_DMAR_TYPE_HARDWARE_AFFINITY) || + (DmarHeader->Type == ACPI_DMAR_TYPE_NAMESPACE)) + { + /* These types do not support device scopes */ + DtPopSubtable (); + continue; + } + + DtPushSubtable (Subtable); DeviceScopeLength = DmarHeader->Length - Subtable->Length - ParentTable->Length; while (DeviceScopeLength) @@ -1010,6 +1025,125 @@ DtCompileFadt ( return (AE_OK); } +/****************************************************************************** + * + * FUNCTION: DtCompileGtdt + * + * PARAMETERS: List - Current field list pointer + * + * RETURN: Status + * + * DESCRIPTION: Compile GTDT. + * + *****************************************************************************/ + +ACPI_STATUS +DtCompileGtdt ( + void **List) +{ + ACPI_STATUS Status; + DT_SUBTABLE *Subtable; + DT_SUBTABLE *ParentTable; + DT_FIELD **PFieldList = (DT_FIELD **) List; + DT_FIELD *SubtableStart; + ACPI_SUBTABLE_HEADER *GtdtHeader; + ACPI_DMTABLE_INFO *InfoTable; + UINT32 GtCount; + + + Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt, + &Subtable, TRUE); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + while (*PFieldList) + { + SubtableStart = *PFieldList; + Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdtHdr, + &Subtable, TRUE); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + DtPushSubtable (Subtable); + + GtdtHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer); + + switch (GtdtHeader->Type) + { + case ACPI_GTDT_TYPE_TIMER_BLOCK: + + InfoTable = AcpiDmTableInfoGtdt0; + break; + + case ACPI_GTDT_TYPE_WATCHDOG: + + InfoTable = AcpiDmTableInfoGtdt1; + break; + + default: + + DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "GTDT"); + return (AE_ERROR); + } + + Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + ParentTable = DtPeekSubtable (); + DtInsertSubtable (ParentTable, Subtable); + + /* + * Additional GT block subtable data + */ + + switch (GtdtHeader->Type) + { + case ACPI_GTDT_TYPE_TIMER_BLOCK: + + DtPushSubtable (Subtable); + ParentTable = DtPeekSubtable (); + + GtCount = (ACPI_CAST_PTR (ACPI_GTDT_TIMER_BLOCK, + Subtable->Buffer - sizeof(ACPI_GTDT_HEADER)))->TimerCount; + while (GtCount) + { + Status = DtCompileTable (PFieldList, AcpiDmTableInfoGtdt0a, + &Subtable, TRUE); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + + DtInsertSubtable (ParentTable, Subtable); + GtCount--; + } + DtPopSubtable (); + break; + + default: + + break; + } + + DtPopSubtable (); + } + + return (AE_OK); +} + /****************************************************************************** * @@ -1573,6 +1707,16 @@ DtCompileMadt ( InfoTable = AcpiDmTableInfoMadt12; break; + case ACPI_MADT_TYPE_GENERIC_MSI_FRAME: + + InfoTable = AcpiDmTableInfoMadt13; + break; + + case ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR: + + InfoTable = AcpiDmTableInfoMadt14; + break; + default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "MADT"); @@ -1864,6 +2008,11 @@ DtCompilePcct ( InfoTable = AcpiDmTableInfoPcct0; break; + case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE: + + InfoTable = AcpiDmTableInfoPcct1; + break; + default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PCCT"); diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h index 681d3e5..eefae69 100644 --- a/src/acpica/source/compiler/dttemplate.h +++ b/src/acpica/source/compiler/dttemplate.h @@ -467,7 +467,7 @@ const unsigned char TemplateFadt[] = 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ 0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x01, /* 00000070 "........" */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ - 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000080 "........" */ + 0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00, /* 00000080 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000088 "........" */ 0x00,0x00,0x00,0x00,0x01,0x20,0x00,0x02, /* 00000090 "..... .." */ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000098 "........" */ @@ -506,16 +506,34 @@ const unsigned char TemplateFpdt[] = const unsigned char TemplateGtdt[] = { - 0x47,0x54,0x44,0x54,0x50,0x00,0x00,0x00, /* 00000000 "GTDTP..." */ - 0x01,0xF1,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ - 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ - 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ - 0x23,0x06,0x11,0x20,0x00,0x00,0x00,0x00, /* 00000020 "#.. ...." */ - 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000028 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000048 "........" */ + 0x47,0x54,0x44,0x54,0xe0,0x00,0x00,0x00, /* 00000000 "GTDT...." */ + 0x02,0xb0,0x4c,0x49,0x4e,0x41,0x52,0x4f, /* 00000008 "..LINARO" */ + 0x52,0x54,0x53,0x4d,0x56,0x45,0x56,0x38, /* 00000010 "RTSMVEV8" */ + 0x01,0x00,0x00,0x00,0x49,0x4e,0x54,0x4c, /* 00000018 "....INTL" */ + 0x24,0x04,0x14,0x20,0x00,0x00,0x00,0x00, /* 00000020 "$.. ...." */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ + 0x1d,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */ + 0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000038 "........" */ + 0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000040 "........" */ + 0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000048 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ + 0x02,0x00,0x00,0x00,0x60,0x00,0x00,0x00, /* 00000058 "....`..." */ + 0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 ".d......" */ + 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 00000068 "........" */ + 0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000070 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000088 "........" */ + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000090 "........" */ + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000098 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000a0 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000a8 "........" */ + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000b0 "........" */ + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000b8 "........" */ + 0x00,0x00,0x00,0x00,0x01,0x1c,0x00,0x00, /* 000000c0 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000c8 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000d0 "........" */ + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000d8 "........" */ }; const unsigned char TemplateHest[] = @@ -647,41 +665,48 @@ const unsigned char TemplateLpit[] = 0x00,0x00,0x00,0x00 /* 000000B0 "...." */ }; -/* MADT with ACPI 5.0 subtables */ +/* MADT with ACPI 5.1 subtables */ const unsigned char TemplateMadt[] = { - 0x41,0x50,0x49,0x43,0xF6,0x00,0x00,0x00, /* 00000000 "APIC...." */ - 0x01,0xB0,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ - 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ - 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ - 0x23,0x06,0x11,0x20,0x00,0x00,0x00,0x00, /* 00000020 "#.. ...." */ + 0x41,0x50,0x49,0x43,0x2a,0x01,0x00,0x00, /* 00000000 "APIC*..." */ + 0x04,0x34,0x49,0x4e,0x54,0x45,0x4c,0x20, /* 00000008 ".4INTEL " */ + 0x54,0x45,0x4d,0x50,0x4c,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ + 0x01,0x00,0x00,0x00,0x49,0x4e,0x54,0x4c, /* 00000018 "....INTL" */ + 0x24,0x04,0x14,0x20,0x00,0x00,0x00,0x00, /* 00000020 "$.. ...." */ 0x01,0x00,0x00,0x00,0x00,0x08,0x00,0x00, /* 00000028 "........" */ - 0x01,0x00,0x00,0x00,0x01,0x0C,0x01,0x00, /* 00000030 "........" */ + 0x01,0x00,0x00,0x00,0x01,0x0c,0x01,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ - 0x02,0x0A,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ - 0x00,0x00,0x03,0x08,0x0D,0x00,0x01,0x00, /* 00000048 "........" */ + 0x02,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ + 0x00,0x00,0x03,0x08,0x0d,0x00,0x01,0x00, /* 00000048 "........" */ 0x00,0x00,0x04,0x06,0x00,0x05,0x00,0x01, /* 00000050 "........" */ - 0x05,0x0C,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ + 0x05,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */ 0x00,0x00,0x00,0x00,0x06,0x10,0x00,0x00, /* 00000060 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */ 0x00,0x00,0x00,0x00,0x07,0x16,0x00,0x00, /* 00000070 "........" */ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000078 "........" */ - 0x00,0x00,0x00,0x00,0x5C,0x43,0x50,0x55, /* 00000080 "....\CPU" */ + 0x00,0x00,0x00,0x00,0x5c,0x43,0x50,0x55, /* 00000080 "....\CPU" */ 0x30,0x00,0x08,0x10,0x05,0x00,0x00,0x00, /* 00000088 "0......." */ 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00, /* 00000090 "........" */ 0x00,0x00,0x09,0x10,0x00,0x00,0x00,0x00, /* 00000098 "........" */ - 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */ - 0x00,0x00,0x0A,0x0C,0x05,0x00,0x00,0x00, /* 000000A8 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x0B,0x28, /* 000000B0 ".......(" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */ - 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C8 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D0 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18, /* 000000D8 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E0 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E8 "........" */ - 0x00,0x00,0x00,0x00,0x00,0x00 /* 000000F0 "......" */ + 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000a0 "........" */ + 0x00,0x00,0x0a,0x0c,0x05,0x00,0x00,0x00, /* 000000a8 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0x4c, /* 000000b0 ".......L" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000b8 "........" */ + 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000c0 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000c8 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000d0 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000d8 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000e0 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000e8 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000f0 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000f8 "........" */ + 0x00,0x00,0x0e,0x10,0x00,0x00,0x00,0x00, /* 00000100 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */ + 0x00,0x00,0x0c,0x18,0x00,0x00,0x00,0x00, /* 00000110 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000118 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "........" */ + 0x00,0x00 /* 00000128 ".. " */ }; const unsigned char TemplateMcfg[] = @@ -775,27 +800,27 @@ const unsigned char TemplateMtmr[] = const unsigned char TemplatePcct[] = { 0x50,0x43,0x43,0x54,0xAC,0x00,0x00,0x00, /* 00000000 "PCCT...." */ - 0x01,0x97,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ - 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ + 0x01,0xCF,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ - 0x15,0x11,0x13,0x20,0x01,0x00,0x00,0x00, /* 00000020 "... ...." */ + 0x27,0x06,0x14,0x20,0x01,0x00,0x00,0x00, /* 00000020 "'.. ...." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 ".>......" */ - 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, /* 00000038 "........" */ - 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, /* 00000040 """""""""" */ - 0x01,0x32,0x00,0x03,0x33,0x33,0x33,0x33, /* 00000048 ".2..3333" */ - 0x33,0x33,0x33,0x33,0x44,0x44,0x44,0x44, /* 00000050 "3333DDDD" */ - 0x44,0x44,0x44,0x44,0x55,0x55,0x55,0x55, /* 00000058 "DDDDUUUU" */ - 0x55,0x55,0x55,0x55,0x66,0x66,0x66,0x66, /* 00000060 "UUUUffff" */ - 0x77,0x77,0x77,0x77,0x88,0x88,0x00,0x3E, /* 00000068 "wwww...>" */ - 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, /* 00000070 "........" */ - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEE,0xEE, /* 00000078 "........" */ - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0x01,0x32, /* 00000080 ".......2" */ - 0x00,0x03,0xDD,0xDD,0xDD,0xDD,0xDD,0xDD, /* 00000088 "........" */ - 0xDD,0xDD,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC, /* 00000090 "........" */ - 0xCC,0xCC,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB, /* 00000098 "........" */ - 0xBB,0xBB,0xAA,0xAA,0xAA,0xAA,0x99,0x99, /* 000000A0 "........" */ - 0x99,0x99,0x88,0x88 /* 000000A8 "...." */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ + 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */ + 0x01,0x32,0x00,0x03,0x00,0x00,0x00,0x00, /* 00000048 ".2......" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */ + 0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, /* 00000058 "........" */ + 0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00, /* 00000060 "........" */ + 0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x3E, /* 00000068 ".......>" */ + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000070 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00, /* 00000078 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x32, /* 00000080 ".......2" */ + 0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000090 "........" */ + 0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000098 "........" */ + 0xFF,0xFF,0x01,0x00,0x00,0x00,0x01,0x00, /* 000000A0 "........" */ + 0x00,0x00,0x01,0x00 /* 000000A8 "...." */ }; const unsigned char TemplatePmtt[] = diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c index d3cedf1..51d50c7 100644 --- a/src/acpica/source/compiler/dtutils.c +++ b/src/acpica/source/compiler/dtutils.c @@ -573,6 +573,7 @@ DtGetFieldLength ( case ACPI_DMT_SPACEID: case ACPI_DMT_ACCWIDTH: case ACPI_DMT_IVRS: + case ACPI_DMT_GTDT: case ACPI_DMT_MADT: case ACPI_DMT_PCCT: case ACPI_DMT_PMTT: @@ -584,6 +585,7 @@ DtGetFieldLength ( case ACPI_DMT_EINJINST: case ACPI_DMT_ERSTACT: case ACPI_DMT_ERSTINST: + case ACPI_DMT_DMAR_SCOPE: ByteLength = 1; break; diff --git a/src/acpica/source/components/disassembler/dmbuffer.c b/src/acpica/source/components/disassembler/dmbuffer.c index 70d28e3..a43497c 100644 --- a/src/acpica/source/components/disassembler/dmbuffer.c +++ b/src/acpica/source/components/disassembler/dmbuffer.c @@ -113,9 +113,9 @@ * *****************************************************************************/ - #include "acpi.h" #include "accommon.h" +#include "acutils.h" #include "acdisasm.h" #include "acparser.h" #include "amlcode.h" @@ -130,6 +130,10 @@ /* Local prototypes */ static void +AcpiDmUuid ( + ACPI_PARSE_OBJECT *Op); + +static void AcpiDmUnicode ( ACPI_PARSE_OBJECT *Op); @@ -143,6 +147,7 @@ AcpiDmPldBuffer ( UINT8 *ByteData, UINT32 ByteCount); + #define ACPI_BUFFER_BYTES_PER_LINE 8 @@ -288,6 +293,11 @@ AcpiDmByteList ( AcpiOsPrintf ("\n"); break; + case ACPI_DASM_UUID: + + AcpiDmUuid (Op); + break; + case ACPI_DASM_UNICODE: AcpiDmUnicode (Op); @@ -313,6 +323,137 @@ AcpiDmByteList ( /******************************************************************************* * + * FUNCTION: AcpiDmIsUuidBuffer + * + * PARAMETERS: Op - Buffer Object to be examined + * + * RETURN: TRUE if buffer contains a UUID + * + * DESCRIPTION: Determine if a buffer Op contains a UUID + * + * To help determine whether the buffer is a UUID versus a raw data buffer, + * there a are a couple bytes we can look at: + * + * xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx + * + * The variant covered by the UUID specification is indicated by the two most + * significant bits of N being 1 0 (i.e., the hexadecimal N will always be + * 8, 9, A, or B). + * + * The variant covered by the UUID specification has five versions. For this + * variant, the four bits of M indicates the UUID version (i.e., the + * hexadecimal M will be either 1, 2, 3, 4, or 5). + * + ******************************************************************************/ + +BOOLEAN +AcpiDmIsUuidBuffer ( + ACPI_PARSE_OBJECT *Op) +{ + UINT8 *ByteData; + UINT32 ByteCount; + ACPI_PARSE_OBJECT *SizeOp; + ACPI_PARSE_OBJECT *NextOp; + + + /* Buffer size is the buffer argument */ + + SizeOp = Op->Common.Value.Arg; + + /* Next, the initializer byte list to examine */ + + NextOp = SizeOp->Common.Next; + if (!NextOp) + { + return (FALSE); + } + + /* Extract the byte list info */ + + ByteData = NextOp->Named.Data; + ByteCount = (UINT32) NextOp->Common.Value.Integer; + + /* Byte count must be exactly 16 */ + + if (ByteCount != UUID_BUFFER_LENGTH) + { + return (FALSE); + } + + /* Check for valid "M" and "N" values (see function header above) */ + + if (((ByteData[7] & 0xF0) == 0x00) || /* M={1,2,3,4,5} */ + ((ByteData[7] & 0xF0) > 0x50) || + ((ByteData[8] & 0xF0) < 0x80) || /* N={8,9,A,B} */ + ((ByteData[8] & 0xF0) > 0xB0)) + { + return (FALSE); + } + + /* Ignore the Size argument in the disassembly of this buffer op */ + + SizeOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; + return (TRUE); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmUuid + * + * PARAMETERS: Op - Byte List op containing a UUID + * + * RETURN: None + * + * DESCRIPTION: Dump a buffer containing a UUID as a standard ASCII string. + * + * Output Format: + * In its canonical form, the UUID is represented by a string containing 32 + * lowercase hexadecimal digits, displayed in 5 groups separated by hyphens. + * The complete form is 8-4-4-4-12 for a total of 36 characters (32 + * alphanumeric characters representing hex digits and 4 hyphens). In bytes, + * 4-2-2-2-6. Example: + * + * ToUUID ("107ededd-d381-4fd7-8da9-08e9a6c79644") + * + ******************************************************************************/ + +static void +AcpiDmUuid ( + ACPI_PARSE_OBJECT *Op) +{ + UINT8 *Data; + const char *Description; + + + Data = ACPI_CAST_PTR (UINT8, Op->Named.Data); + + /* Emit the 36-byte UUID string in the proper format/order */ + + AcpiOsPrintf ( + "\"%2.2x%2.2x%2.2x%2.2x-" + "%2.2x%2.2x-" + "%2.2x%2.2x-" + "%2.2x%2.2x-" + "%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\")", + Data[3], Data[2], Data[1], Data[0], + Data[5], Data[4], + Data[7], Data[6], + Data[8], Data[9], + Data[10], Data[11], Data[12], Data[13], Data[14], Data[15]); + + /* Dump the UUID description string if available */ + + Description = AcpiAhMatchUuid (Data); + if (Description) + { + AcpiOsPrintf (" /* %s */", Description); + } +} + + +/******************************************************************************* + * * FUNCTION: AcpiDmIsUnicodeBuffer * * PARAMETERS: Op - Buffer Object to be examined diff --git a/src/acpica/source/components/disassembler/dmopcode.c b/src/acpica/source/components/disassembler/dmopcode.c index db30c00..d15e215 100644 --- a/src/acpica/source/components/disassembler/dmopcode.c +++ b/src/acpica/source/components/disassembler/dmopcode.c @@ -899,7 +899,12 @@ AcpiDmDisassembleOneOp ( } } - if (AcpiDmIsUnicodeBuffer (Op)) + if (AcpiDmIsUuidBuffer (Op)) + { + Op->Common.DisasmOpcode = ACPI_DASM_UUID; + AcpiOsPrintf ("ToUUID ("); + } + else if (AcpiDmIsUnicodeBuffer (Op)) { Op->Common.DisasmOpcode = ACPI_DASM_UNICODE; AcpiOsPrintf ("Unicode ("); diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c index 8c877ae..1f63e08 100644 --- a/src/acpica/source/components/disassembler/dmwalk.c +++ b/src/acpica/source/components/disassembler/dmwalk.c @@ -357,7 +357,8 @@ AcpiDmBlockType ( case AML_BUFFER_OP: - if (Op->Common.DisasmOpcode == ACPI_DASM_UNICODE) + if ((Op->Common.DisasmOpcode == ACPI_DASM_UNICODE) || + (Op->Common.DisasmOpcode == ACPI_DASM_UUID)) { return (BLOCK_NONE); } diff --git a/src/acpica/source/components/events/evgpe.c b/src/acpica/source/components/events/evgpe.c index bb955ac..ea1a3a6 100644 --- a/src/acpica/source/components/events/evgpe.c +++ b/src/acpica/source/components/events/evgpe.c @@ -833,22 +833,6 @@ AcpiEvGpeDispatch ( } /* - * If edge-triggered, clear the GPE status bit now. Note that - * level-triggered events are cleared after the GPE is serviced. - */ - if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == - ACPI_GPE_EDGE_TRIGGERED) - { - Status = AcpiHwClearGpe (GpeEventInfo); - if (ACPI_FAILURE (Status)) - { - ACPI_EXCEPTION ((AE_INFO, Status, - "Unable to clear GPE %02X", GpeNumber)); - return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED); - } - } - - /* * Always disable the GPE so that it does not keep firing before * any asynchronous activity completes (either from the execution * of a GPE method or an asynchronous GPE handler.) @@ -866,6 +850,24 @@ AcpiEvGpeDispatch ( } /* + * If edge-triggered, clear the GPE status bit now. Note that + * level-triggered events are cleared after the GPE is serviced. + */ + if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) == + ACPI_GPE_EDGE_TRIGGERED) + { + Status = AcpiHwClearGpe (GpeEventInfo); + if (ACPI_FAILURE (Status)) + { + ACPI_EXCEPTION ((AE_INFO, Status, + "Unable to clear GPE %02X", GpeNumber)); + (void) AcpiHwLowSetGpe (GpeEventInfo, + ACPI_GPE_CONDITIONAL_ENABLE); + return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED); + } + } + + /* * Dispatch the GPE to either an installed handler or the control * method associated with this GPE (_Lxx or _Exx). If a handler * exists, we invoke it and do not attempt to run the method. diff --git a/src/acpica/source/components/events/evxfgpe.c b/src/acpica/source/components/events/evxfgpe.c index e180bd3..b116322 100644 --- a/src/acpica/source/components/events/evxfgpe.c +++ b/src/acpica/source/components/events/evxfgpe.c @@ -213,12 +213,23 @@ AcpiEnableGpe ( Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); - /* Ensure that we have a valid GPE number */ - + /* + * Ensure that we have a valid GPE number and that there is some way + * of handling the GPE (handler or a GPE method). In other words, we + * won't allow a valid GPE to be enabled if there is no way to handle it. + */ GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); if (GpeEventInfo) { - Status = AcpiEvAddGpeReference (GpeEventInfo); + if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) != + ACPI_GPE_DISPATCH_NONE) + { + Status = AcpiEvAddGpeReference (GpeEventInfo); + } + else + { + Status = AE_NO_HANDLER; + } } AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); @@ -348,6 +359,60 @@ ACPI_EXPORT_SYMBOL (AcpiSetGpe) /******************************************************************************* * + * FUNCTION: AcpiMarkGpeForWake + * + * PARAMETERS: GpeDevice - Parent GPE Device. NULL for GPE0/GPE1 + * GpeNumber - GPE level within the GPE block + * + * RETURN: Status + * + * DESCRIPTION: Mark a GPE as having the ability to wake the system. Simply + * sets the ACPI_GPE_CAN_WAKE flag. + * + * Some potential callers of AcpiSetupGpeForWake may know in advance that + * there won't be any notify handlers installed for device wake notifications + * from the given GPE (one example is a button GPE in Linux). For these cases, + * AcpiMarkGpeForWake should be used instead of AcpiSetupGpeForWake. + * This will set the ACPI_GPE_CAN_WAKE flag for the GPE without trying to + * setup implicit wake notification for it (since there's no handler method). + * + ******************************************************************************/ + +ACPI_STATUS +AcpiMarkGpeForWake ( + ACPI_HANDLE GpeDevice, + UINT32 GpeNumber) +{ + ACPI_GPE_EVENT_INFO *GpeEventInfo; + ACPI_STATUS Status = AE_BAD_PARAMETER; + ACPI_CPU_FLAGS Flags; + + + ACPI_FUNCTION_TRACE (AcpiMarkGpeForWake); + + + Flags = AcpiOsAcquireLock (AcpiGbl_GpeLock); + + /* Ensure that we have a valid GPE number */ + + GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); + if (GpeEventInfo) + { + /* Mark the GPE as a possible wake event */ + + GpeEventInfo->Flags |= ACPI_GPE_CAN_WAKE; + Status = AE_OK; + } + + AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); + return_ACPI_STATUS (Status); +} + +ACPI_EXPORT_SYMBOL (AcpiMarkGpeForWake) + + +/******************************************************************************* + * * FUNCTION: AcpiSetupGpeForWake * * PARAMETERS: WakeDevice - Device associated with the GPE (via _PRW) diff --git a/src/acpica/source/components/executer/exdebug.c b/src/acpica/source/components/executer/exdebug.c index e374e13..b7d47fd 100644 --- a/src/acpica/source/components/executer/exdebug.c +++ b/src/acpica/source/components/executer/exdebug.c @@ -154,6 +154,7 @@ AcpiExDoDebugObject ( UINT32 Index) { UINT32 i; + UINT32 Timer; ACPI_FUNCTION_TRACE_PTR (ExDoDebugObject, SourceDesc); @@ -168,12 +169,20 @@ AcpiExDoDebugObject ( } /* + * We will emit the current timer value (in microseconds) with each + * debug output. Only need the lower 26 bits. This allows for 67 + * million microseconds or 67 seconds before rollover. + */ + Timer = (UINT32) (AcpiOsGetTimer () / 10); /* (100 nanoseconds to microseconds) */ + Timer &= 0x03FFFFFF; + + /* * Print line header as long as we are not in the middle of an * object display */ if (!((Level > 0) && Index == 0)) { - AcpiOsPrintf ("[ACPI Debug] %*s", Level, " "); + AcpiOsPrintf ("[ACPI Debug %.8u] %*s", Timer, Level, " "); } /* Display the index for package output only */ diff --git a/src/acpica/source/components/executer/exdump.c b/src/acpica/source/components/executer/exdump.c index 7f66714..68a0054 100644 --- a/src/acpica/source/components/executer/exdump.c +++ b/src/acpica/source/components/executer/exdump.c @@ -580,7 +580,7 @@ AcpiExDumpObject ( } } - AcpiOsPrintf ("\n", Next); + AcpiOsPrintf ("\n"); break; case ACPI_EXD_HDLR_LIST: @@ -614,7 +614,7 @@ AcpiExDumpObject ( } } - AcpiOsPrintf ("\n", Next); + AcpiOsPrintf ("\n"); break; case ACPI_EXD_RGN_LIST: @@ -648,7 +648,7 @@ AcpiExDumpObject ( } } - AcpiOsPrintf ("\n", Next); + AcpiOsPrintf ("\n"); break; case ACPI_EXD_NODE: diff --git a/src/acpica/source/components/executer/exfield.c b/src/acpica/source/components/executer/exfield.c index e8ddec8..55934de 100644 --- a/src/acpica/source/components/executer/exfield.c +++ b/src/acpica/source/components/executer/exfield.c @@ -275,14 +275,13 @@ AcpiExReadDataFromField ( Length = AcpiExGetSerialAccessLength (AccessorType, ObjDesc->Field.AccessLength); - /* - * Add additional 2 bytes for modeled GenericSerialBus data buffer: - * typedef struct { - * BYTEStatus; // Byte 0 of the data buffer - * BYTELength; // Byte 1 of the data buffer - * BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer, - * } - */ + /* + * Add additional 2 bytes for the GenericSerialBus data buffer: + * + * Status; (Byte 0 of the data buffer) + * Length; (Byte 1 of the data buffer) + * Data[x-1]; (Bytes 2-x of the arbitrary length data buffer) + */ Length += 2; Function = ACPI_READ | (AccessorType << 16); } @@ -469,14 +468,13 @@ AcpiExWriteDataToField ( Length = AcpiExGetSerialAccessLength (AccessorType, ObjDesc->Field.AccessLength); - /* - * Add additional 2 bytes for modeled GenericSerialBus data buffer: - * typedef struct { - * BYTEStatus; // Byte 0 of the data buffer - * BYTELength; // Byte 1 of the data buffer - * BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer, - * } - */ + /* + * Add additional 2 bytes for the GenericSerialBus data buffer: + * + * Status; (Byte 0 of the data buffer) + * Length; (Byte 1 of the data buffer) + * Data[x-1]; (Bytes 2-x of the arbitrary length data buffer) + */ Length += 2; Function = ACPI_WRITE | (AccessorType << 16); } diff --git a/src/acpica/source/components/namespace/nsobject.c b/src/acpica/source/components/namespace/nsobject.c index 060157b..74470f0 100644 --- a/src/acpica/source/components/namespace/nsobject.c +++ b/src/acpica/source/components/namespace/nsobject.c @@ -335,17 +335,16 @@ AcpiNsDetachObject ( { Node->Object = Node->Object->Common.NextObject; } - } - /* - * Detach the object from any data objects (which are still held by - * the namespace node) - */ - - if (ObjDesc->Common.NextObject && - ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA)) - { - ObjDesc->Common.NextObject = NULL; + /* + * Detach the object from any data objects (which are still held by + * the namespace node) + */ + if (ObjDesc->Common.NextObject && + ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA)) + { + ObjDesc->Common.NextObject = NULL; + } } /* Reset the node type to untyped */ diff --git a/src/acpica/source/components/utilities/utdecode.c b/src/acpica/source/components/utilities/utdecode.c index 8566819..61826fe 100644 --- a/src/acpica/source/components/utilities/utdecode.c +++ b/src/acpica/source/components/utilities/utdecode.c @@ -165,38 +165,6 @@ const UINT8 AcpiGbl_NsProperties[ACPI_NUM_NS_TYPES] = /******************************************************************************* * - * FUNCTION: AcpiUtHexToAsciiChar - * - * PARAMETERS: Integer - Contains the hex digit - * Position - bit position of the digit within the - * integer (multiple of 4) - * - * RETURN: The converted Ascii character - * - * DESCRIPTION: Convert a hex digit to an Ascii character - * - ******************************************************************************/ - -/* Hex to ASCII conversion table */ - -static const char AcpiGbl_HexToAscii[] = -{ - '0','1','2','3','4','5','6','7', - '8','9','A','B','C','D','E','F' -}; - -char -AcpiUtHexToAsciiChar ( - UINT64 Integer, - UINT32 Position) -{ - - return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]); -} - - -/******************************************************************************* - * * FUNCTION: AcpiUtGetRegionName * * PARAMETERS: Space ID - ID for the region @@ -613,7 +581,8 @@ static const char *AcpiGbl_GenericNotify[ACPI_NOTIFY_MAX + 1] = /* 09 */ "Device PLD Check", /* 0A */ "Reserved", /* 0B */ "System Locality Update", - /* 0C */ "Shutdown Request" + /* 0C */ "Shutdown Request", + /* 0D */ "System Resource Affinity Update" }; static const char *AcpiGbl_DeviceNotify[4] = @@ -647,7 +616,7 @@ AcpiUtGetNotifyName ( ACPI_OBJECT_TYPE Type) { - /* 00 - 0C are common to all object types */ + /* 00 - 0D are common to all object types */ if (NotifyValue <= ACPI_NOTIFY_MAX) { diff --git a/src/acpica/source/components/utilities/utfileio.c b/src/acpica/source/components/utilities/utfileio.c index 78807f2..9501e22 100644 --- a/src/acpica/source/components/utilities/utfileio.c +++ b/src/acpica/source/components/utilities/utfileio.c @@ -304,8 +304,7 @@ AcpiUtReadTable ( Status = FlCheckForAscii (fp, NULL, FALSE); if (ACPI_SUCCESS (Status)) { - AcpiOsPrintf ("File appears to be ASCII only, must be binary\n", - TableHeader.Length, FileSize); + AcpiOsPrintf ("File appears to be ASCII only, must be binary\n"); } #endif return (AE_BAD_HEADER); diff --git a/src/acpica/source/components/utilities/uthex.c b/src/acpica/source/components/utilities/uthex.c new file mode 100644 index 0000000..ba2b259 --- /dev/null +++ b/src/acpica/source/components/utilities/uthex.c @@ -0,0 +1,185 @@ +/****************************************************************************** + * + * Module Name: uthex -- Hex/ASCII support functions + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + *****************************************************************************/ + +#define __UTHEX_C__ + +#include "acpi.h" +#include "accommon.h" + +#define _COMPONENT ACPI_COMPILER + ACPI_MODULE_NAME ("uthex") + + +/* Hex to ASCII conversion table */ + +static char AcpiGbl_HexToAscii[] = +{ + '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' +}; + + +/******************************************************************************* + * + * FUNCTION: AcpiUtHexToAsciiChar + * + * PARAMETERS: Integer - Contains the hex digit + * Position - bit position of the digit within the + * integer (multiple of 4) + * + * RETURN: The converted Ascii character + * + * DESCRIPTION: Convert a hex digit to an Ascii character + * + ******************************************************************************/ + +char +AcpiUtHexToAsciiChar ( + UINT64 Integer, + UINT32 Position) +{ + + return (AcpiGbl_HexToAscii[(Integer >> Position) & 0xF]); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiUtHexCharToValue + * + * PARAMETERS: AsciiChar - Hex character in Ascii + * + * RETURN: The binary value of the ascii/hex character + * + * DESCRIPTION: Perform ascii-to-hex translation + * + ******************************************************************************/ + +UINT8 +AcpiUtAsciiCharToHex ( + int HexChar) +{ + + if (HexChar <= 0x39) + { + return ((UINT8) (HexChar - 0x30)); + } + + if (HexChar <= 0x46) + { + return ((UINT8) (HexChar - 0x37)); + } + + return ((UINT8) (HexChar - 0x57)); +} diff --git a/src/acpica/source/components/utilities/utprint.c b/src/acpica/source/components/utilities/utprint.c index d1bcccf..543bad8 100644 --- a/src/acpica/source/components/utilities/utprint.c +++ b/src/acpica/source/components/utilities/utprint.c @@ -160,6 +160,12 @@ AcpiUtPutNumber ( BOOLEAN Upper); +/* Module globals */ + +static const char AcpiGbl_LowerHexDigits[] = "0123456789abcdef"; +static const char AcpiGbl_UpperHexDigits[] = "0123456789ABCDEF"; + + /******************************************************************************* * * FUNCTION: AcpiUtBoundStringLength @@ -167,7 +173,7 @@ AcpiUtPutNumber ( * PARAMETERS: String - String with boundary * Count - Boundary of the string * - * RETURN: Length of the string. + * RETURN: Length of the string. Less than or equal to Count. * * DESCRIPTION: Calculate the length of a string with boundary. * @@ -217,8 +223,8 @@ AcpiUtBoundStringOutput ( { *String = c; } - ++String; + ++String; return (String); } @@ -246,15 +252,13 @@ AcpiUtPutNumber ( UINT8 Base, BOOLEAN Upper) { - const char LowerDigits[] = "0123456789abcdef"; - const char UpperDigits[] = "0123456789ABCDEF"; const char *Digits; UINT64 DigitIndex; char *Pos; Pos = String; - Digits = Upper ? UpperDigits : LowerDigits; + Digits = Upper ? AcpiGbl_UpperHexDigits : AcpiGbl_LowerHexDigits; if (Number == 0) { @@ -268,8 +272,8 @@ AcpiUtPutNumber ( *(Pos++) = Digits[DigitIndex]; } } - /* *(Pos++) = '0'; */ + /* *(Pos++) = '0'; */ return (Pos); } @@ -300,8 +304,8 @@ AcpiUtScanNumber ( Number *= 10; Number += *(String++) - '0'; } - *NumberPtr = Number; + *NumberPtr = Number; return (String); } @@ -336,8 +340,8 @@ AcpiUtPrintNumber ( { *(Pos2++) = *(--Pos1); } - *Pos2 = 0; + *Pos2 = 0; return (String); } @@ -370,6 +374,7 @@ AcpiUtFormatNumber ( INT32 Precision, UINT8 Type) { + char *Pos; char Sign; char Zero; BOOLEAN NeedPrefix; @@ -378,12 +383,13 @@ AcpiUtFormatNumber ( char ReversedString[66]; - /* Perform sanity checks */ + /* Parameter validation */ if (Base < 2 || Base > 16) { - return NULL; + return (NULL); } + if (Type & ACPI_FORMAT_LEFT) { Type &= ~ACPI_FORMAT_ZERO; @@ -426,9 +432,8 @@ AcpiUtFormatNumber ( /* Generate full string in reverse order */ - i = ACPI_PTR_DIFF ( - AcpiUtPutNumber (ReversedString, Number, Base, Upper), - ReversedString); + Pos = AcpiUtPutNumber (ReversedString, Number, Base, Upper); + i = ACPI_PTR_DIFF (Pos, ReversedString); /* Printing 100 using %2d gives "100", not "00" */ @@ -436,6 +441,7 @@ AcpiUtFormatNumber ( { Precision = i; } + Width -= Precision; /* Output the string */ @@ -458,7 +464,7 @@ AcpiUtFormatNumber ( { String = AcpiUtBoundStringOutput (String, End, Upper ? 'X' : 'x'); - } + } } if (!(Type & ACPI_FORMAT_LEFT)) { @@ -467,6 +473,7 @@ AcpiUtFormatNumber ( String = AcpiUtBoundStringOutput (String, End, Zero); } } + while (i <= --Precision) { String = AcpiUtBoundStringOutput (String, End, '0'); @@ -494,7 +501,7 @@ AcpiUtFormatNumber ( * Format - Standard printf format * Args - Argument list * - * RETURN: Size of successfully output bytes + * RETURN: Number of bytes actually written. * * DESCRIPTION: Formatted output to a string using argument list pointer. * @@ -525,7 +532,7 @@ AcpiUtVsnprintf ( Pos = String; End = String + Size; - for (; *Format ; ++Format) + for (; *Format; ++Format) { if (*Format != '%') { @@ -566,6 +573,7 @@ AcpiUtVsnprintf ( /* Process width */ + Width = -1; if (ACPI_IS_DIGIT (*Format)) { Format = AcpiUtScanNumber (Format, &Number); @@ -574,7 +582,7 @@ AcpiUtVsnprintf ( else if (*Format == '*') { ++Format; - Width = va_arg(Args, int); + Width = va_arg (Args, int); if (Width < 0) { Width = -Width; @@ -584,6 +592,7 @@ AcpiUtVsnprintf ( /* Process precision */ + Precision = -1; if (*Format == '.') { ++Format; @@ -595,7 +604,7 @@ AcpiUtVsnprintf ( else if (*Format == '*') { ++Format; - Precision = va_arg(Args, int); + Precision = va_arg (Args, int); } if (Precision < 0) { @@ -605,10 +614,12 @@ AcpiUtVsnprintf ( /* Process qualifier */ + Qualifier = -1; if (*Format == 'h' || *Format == 'l' || *Format == 'L') { Qualifier = *Format; ++Format; + if (Qualifier == 'l' && *Format == 'l') { Qualifier = 'L'; @@ -632,8 +643,10 @@ AcpiUtVsnprintf ( Pos = AcpiUtBoundStringOutput (Pos, End, ' '); } } + c = (char) va_arg (Args, int); Pos = AcpiUtBoundStringOutput (Pos, End, c); + while (--Width > 0) { Pos = AcpiUtBoundStringOutput (Pos, End, ' '); @@ -696,10 +709,10 @@ AcpiUtVsnprintf ( Width = 2 * sizeof (void *); Type |= ACPI_FORMAT_ZERO; } + p = va_arg (Args, void *); Pos = AcpiUtFormatNumber (Pos, End, - ACPI_TO_INTEGER (p), - 16, Width, Precision, Type); + ACPI_TO_INTEGER (p), 16, Width, Precision, Type); continue; default: @@ -748,7 +761,8 @@ AcpiUtVsnprintf ( Number = (signed int) Number; } } - Pos = AcpiUtFormatNumber(Pos, End, Number, Base, + + Pos = AcpiUtFormatNumber (Pos, End, Number, Base, Width, Precision, Type); } @@ -776,7 +790,7 @@ AcpiUtVsnprintf ( * Size - Boundary of the string * Format, ... - Standard printf format * - * RETURN: Size of successfully output bytes + * RETURN: Number of bytes actually written. * * DESCRIPTION: Formatted output to a string. * @@ -810,7 +824,7 @@ AcpiUtSnprintf ( * Format - Standard printf format * Args - Argument list * - * RETURN: Size of successfully output bytes + * RETURN: Number of bytes actually written. * * DESCRIPTION: Formatted output to a file using argument list pointer. * @@ -827,8 +841,9 @@ AcpiUtFileVprintf ( Flags = AcpiOsAcquireLock (AcpiGbl_PrintLock); - Length = AcpiUtVsnprintf(AcpiGbl_PrintBuffer, + Length = AcpiUtVsnprintf (AcpiGbl_PrintBuffer, sizeof (AcpiGbl_PrintBuffer), Format, Args); + (void) AcpiOsWriteFile (File, AcpiGbl_PrintBuffer, Length, 1); AcpiOsReleaseLock (AcpiGbl_PrintLock, Flags); @@ -843,7 +858,7 @@ AcpiUtFileVprintf ( * PARAMETERS: File - File descriptor * Format, ... - Standard printf format * - * RETURN: Size of successfully output bytes + * RETURN: Number of bytes actually written. * * DESCRIPTION: Formatted output to a file. * diff --git a/src/acpica/source/components/utilities/utuuid.c b/src/acpica/source/components/utilities/utuuid.c new file mode 100644 index 0000000..f5c2e40 --- /dev/null +++ b/src/acpica/source/components/utilities/utuuid.c @@ -0,0 +1,175 @@ +/****************************************************************************** + * + * Module Name: utuuid -- UUID support functions + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + *****************************************************************************/ + +#define __UTUUID_C__ + +#include "acpi.h" +#include "accommon.h" + +#define _COMPONENT ACPI_COMPILER + ACPI_MODULE_NAME ("utuuid") + + +/* + * UUID support functions. + * + * This table is used to convert an input UUID ascii string to a 16 byte + * buffer and the reverse. The table maps a UUID buffer index 0-15 to + * the index within the 36-byte UUID string where the associated 2-byte + * hex value can be found. + * + * 36-byte UUID strings are of the form: + * aabbccdd-eeff-gghh-iijj-kkllmmnnoopp + * Where aa-pp are one byte hex numbers, made up of two hex digits + * + * Note: This table is basically the inverse of the string-to-offset table + * found in the ACPI spec in the description of the ToUUID macro. + */ +const UINT8 AcpiGbl_MapToUuidOffset[UUID_BUFFER_LENGTH] = +{ + 6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34 +}; + + +/******************************************************************************* + * + * FUNCTION: AcpiUtConvertStringToUuid + * + * PARAMETERS: InString - 36-byte formatted UUID string + * UuidBuffer - Where the 16-byte UUID buffer is returned + * + * RETURN: None. Output data is returned in the UuidBuffer + * + * DESCRIPTION: Convert a 36-byte formatted UUID string to 16-byte UUID buffer + * + ******************************************************************************/ + +void +AcpiUtConvertStringToUuid ( + char *InString, + UINT8 *UuidBuffer) +{ + UINT32 i; + + + for (i = 0; i < UUID_BUFFER_LENGTH; i++) + { + UuidBuffer[i] = + (AcpiUtAsciiCharToHex (InString[AcpiGbl_MapToUuidOffset[i]]) << 4); + + UuidBuffer[i] |= + AcpiUtAsciiCharToHex (InString[AcpiGbl_MapToUuidOffset[i] + 1]); + } +} diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h index 6b34484..3c7a3bd 100644 --- a/src/acpica/source/include/acconfig.h +++ b/src/acpica/source/include/acconfig.h @@ -295,6 +295,25 @@ /****************************************************************************** * + * Miscellaneous constants + * + *****************************************************************************/ + +/* UUID constants */ + +#define UUID_BUFFER_LENGTH 16 /* Length of UUID in memory */ +#define UUID_STRING_LENGTH 36 /* Total length of a UUID string */ + +/* Positions for required hyphens (dashes) in UUID strings */ + +#define UUID_HYPHEN1_OFFSET 8 +#define UUID_HYPHEN2_OFFSET 13 +#define UUID_HYPHEN3_OFFSET 18 +#define UUID_HYPHEN4_OFFSET 23 + + +/****************************************************************************** + * * ACPI AML Debugger * *****************************************************************************/ diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h index 049a95c..21e26e6 100644 --- a/src/acpica/source/include/acdisasm.h +++ b/src/acpica/source/include/acdisasm.h @@ -209,11 +209,13 @@ typedef enum ACPI_DMT_ASF, ACPI_DMT_DMAR, + ACPI_DMT_DMAR_SCOPE, ACPI_DMT_EINJACT, ACPI_DMT_EINJINST, ACPI_DMT_ERSTACT, ACPI_DMT_ERSTINST, ACPI_DMT_FADTPM, + ACPI_DMT_GTDT, ACPI_DMT_HEST, ACPI_DMT_HESTNTFY, ACPI_DMT_HESTNTYP, @@ -327,6 +329,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoEcdt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoEinj[]; @@ -344,6 +347,10 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoFpdt1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoGas[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdtHdr[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt0a[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoGtdt1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHeader[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest0[]; @@ -381,6 +388,8 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt9[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt10[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt11[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt12[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt13[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadtHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg0[]; @@ -404,6 +413,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoPmttHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcctHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoS3pt[]; @@ -517,6 +527,10 @@ AcpiDmDumpFpdt ( ACPI_TABLE_HEADER *Table); void +AcpiDmDumpGtdt ( + ACPI_TABLE_HEADER *Table); + +void AcpiDmDumpHest ( ACPI_TABLE_HEADER *Table); @@ -727,6 +741,10 @@ AcpiDmDecompressEisaId ( UINT32 EncodedId); BOOLEAN +AcpiDmIsUuidBuffer ( + ACPI_PARSE_OBJECT *Op); + +BOOLEAN AcpiDmIsUnicodeBuffer ( ACPI_PARSE_OBJECT *Op); diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h index 12925a8..1ea772e 100644 --- a/src/acpica/source/include/aclocal.h +++ b/src/acpica/source/include/aclocal.h @@ -950,12 +950,13 @@ typedef union acpi_parse_value #define ACPI_DASM_STRING 0x02 /* Buffer is a ASCII string */ #define ACPI_DASM_UNICODE 0x03 /* Buffer is a Unicode string */ #define ACPI_DASM_PLD_METHOD 0x04 /* Buffer is a _PLD method bit-packed buffer */ -#define ACPI_DASM_EISAID 0x05 /* Integer is an EISAID */ -#define ACPI_DASM_MATCHOP 0x06 /* Parent opcode is a Match() operator */ -#define ACPI_DASM_LNOT_PREFIX 0x07 /* Start of a LNotEqual (etc.) pair of opcodes */ -#define ACPI_DASM_LNOT_SUFFIX 0x08 /* End of a LNotEqual (etc.) pair of opcodes */ -#define ACPI_DASM_HID_STRING 0x09 /* String is a _HID or _CID */ -#define ACPI_DASM_IGNORE 0x0A /* Not used at this time */ +#define ACPI_DASM_UUID 0x05 /* Buffer is a UUID/GUID */ +#define ACPI_DASM_EISAID 0x06 /* Integer is an EISAID */ +#define ACPI_DASM_MATCHOP 0x07 /* Parent opcode is a Match() operator */ +#define ACPI_DASM_LNOT_PREFIX 0x08 /* Start of a LNotEqual (etc.) pair of opcodes */ +#define ACPI_DASM_LNOT_SUFFIX 0x09 /* End of a LNotEqual (etc.) pair of opcodes */ +#define ACPI_DASM_HID_STRING 0x0A /* String is a _HID or _CID */ +#define ACPI_DASM_IGNORE 0x0B /* Not used at this time */ /* * Generic operation (for example: If, While, Store) @@ -1430,4 +1431,11 @@ typedef struct ah_device_id } AH_DEVICE_ID; +typedef struct ah_uuid +{ + char *Description; + char *String; + +} AH_UUID; + #endif /* __ACLOCAL_H__ */ diff --git a/src/acpica/source/include/acnames.h b/src/acpica/source/include/acnames.h index bde34f5..6ccf47f 100644 --- a/src/acpica/source/include/acnames.h +++ b/src/acpica/source/include/acnames.h @@ -127,6 +127,7 @@ #define METHOD_NAME__HID "_HID" #define METHOD_NAME__INI "_INI" #define METHOD_NAME__PLD "_PLD" +#define METHOD_NAME__DSD "_DSD" #define METHOD_NAME__PRS "_PRS" #define METHOD_NAME__PRT "_PRT" #define METHOD_NAME__PRW "_PRW" diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h index ef85424..cafc37b 100644 --- a/src/acpica/source/include/acpixf.h +++ b/src/acpica/source/include/acpixf.h @@ -118,7 +118,7 @@ /* Current ACPICA subsystem version in YYYYMMDD format */ -#define ACPI_CA_VERSION 0x20140627 +#define ACPI_CA_VERSION 0x20140724 #include "acconfig.h" #include "actypes.h" @@ -923,6 +923,12 @@ AcpiFinishGpe ( ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS +AcpiMarkGpeForWake ( + ACPI_HANDLE GpeDevice, + UINT32 GpeNumber)) + +ACPI_HW_DEPENDENT_RETURN_STATUS ( +ACPI_STATUS AcpiSetupGpeForWake ( ACPI_HANDLE ParentDevice, ACPI_HANDLE GpeDevice, diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h index 1d42f1d..1c1776a 100644 --- a/src/acpica/source/include/acpredef.h +++ b/src/acpica/source/include/acpredef.h @@ -178,6 +178,11 @@ * count = 0 (optional) * (Used for _DLM) * + * ACPI_PTYPE2_UUID_PAIR: Each subpackage is preceded by a UUID Buffer. The UUID + * defines the format of the package. Zero-length parent package is + * allowed. + * (Used for _DSD) + * *****************************************************************************/ enum AcpiReturnPackageTypes @@ -191,7 +196,8 @@ enum AcpiReturnPackageTypes ACPI_PTYPE2_FIXED = 7, ACPI_PTYPE2_MIN = 8, ACPI_PTYPE2_REV_FIXED = 9, - ACPI_PTYPE2_FIX_VAR = 10 + ACPI_PTYPE2_FIX_VAR = 10, + ACPI_PTYPE2_UUID_PAIR = 11 }; @@ -438,6 +444,9 @@ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] = {{"_CBA", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* See PCI firmware spec 3.0 */ + {{"_CCA", METHOD_0ARGS, + METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, /* ACPI 5.1 */ + {{"_CDM", METHOD_0ARGS, METHOD_RETURNS (ACPI_RTYPE_INTEGER)}}, @@ -506,6 +515,10 @@ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] = {{"_DOS", METHOD_1ARGS (ACPI_TYPE_INTEGER), METHOD_NO_RETURN_VALUE}}, + {{"_DSD", METHOD_0ARGS, + METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each: 1 Buf, 1 Pkg */ + PACKAGE_INFO (ACPI_PTYPE2_UUID_PAIR, ACPI_RTYPE_BUFFER, 1, ACPI_RTYPE_PACKAGE, 1,0), + {{"_DSM", METHOD_4ARGS (ACPI_TYPE_BUFFER, ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_PACKAGE), METHOD_RETURNS (ACPI_RTYPE_ALL)}}, /* Must return a value, but it can be of any type */ diff --git a/src/acpica/source/include/actbl.h b/src/acpica/source/include/actbl.h index 9a6625c..ea9fc58 100644 --- a/src/acpica/source/include/actbl.h +++ b/src/acpica/source/include/actbl.h @@ -368,7 +368,8 @@ typedef struct acpi_table_fadt UINT32 Flags; /* Miscellaneous flag bits (see below for individual flags) */ ACPI_GENERIC_ADDRESS ResetRegister; /* 64-bit address of the Reset register */ UINT8 ResetValue; /* Value to write to the ResetRegister port to reset the system */ - UINT8 Reserved4[3]; /* Reserved, must be zero */ + UINT16 ArmBootFlags; /* ARM-Specific Boot Flags (see below for individual flags) (ACPI 5.1) */ + UINT8 MinorRevision; /* FADT Minor Revision (ACPI 5.1) */ UINT64 XFacs; /* 64-bit physical address of FACS */ UINT64 XDsdt; /* 64-bit physical address of DSDT */ ACPI_GENERIC_ADDRESS XPm1aEventBlock; /* 64-bit Extended Power Mgt 1a Event Reg Blk address */ @@ -385,7 +386,7 @@ typedef struct acpi_table_fadt } ACPI_TABLE_FADT; -/* Masks for FADT Boot Architecture Flags (BootFlags) [Vx]=Introduced in this FADT revision */ +/* Masks for FADT IA-PC Boot Architecture Flags (boot_flags) [Vx]=Introduced in this FADT revision */ #define ACPI_FADT_LEGACY_DEVICES (1) /* 00: [V2] System has LPC or ISA bus devices */ #define ACPI_FADT_8042 (1<<1) /* 01: [V3] System has an 8042 controller on port 60/64 */ @@ -394,6 +395,11 @@ typedef struct acpi_table_fadt #define ACPI_FADT_NO_ASPM (1<<4) /* 04: [V4] PCIe ASPM control must not be enabled */ #define ACPI_FADT_NO_CMOS_RTC (1<<5) /* 05: [V5] No CMOS real-time clock present */ +/* Masks for FADT ARM Boot Architecture Flags (arm_boot_flags) ACPI 5.1 */ + +#define ACPI_FADT_PSCI_COMPLIANT (1) /* 00: [V5+] PSCI 0.2+ is implemented */ +#define ACPI_FADT_PSCI_USE_HVC (1<<1) /* 01: [V5+] HVC must be used instead of SMC as the PSCI conduit */ + /* Masks for FADT flags */ #define ACPI_FADT_WBINVD (1) /* 00: [V1] The WBINVD instruction works properly */ @@ -507,7 +513,7 @@ typedef struct acpi_table_desc * FADT V5 size: 0x10C */ #define ACPI_FADT_V1_SIZE (UINT32) (ACPI_FADT_OFFSET (Flags) + 4) -#define ACPI_FADT_V2_SIZE (UINT32) (ACPI_FADT_OFFSET (Reserved4[0]) + 3) +#define ACPI_FADT_V2_SIZE (UINT32) (ACPI_FADT_OFFSET (MinorRevision) + 1) #define ACPI_FADT_V3_SIZE (UINT32) (ACPI_FADT_OFFSET (SleepControl)) #define ACPI_FADT_V5_SIZE (UINT32) (sizeof (ACPI_TABLE_FADT)) diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h index e0905ee..d28faa3 100644 --- a/src/acpica/source/include/actbl1.h +++ b/src/acpica/source/include/actbl1.h @@ -834,20 +834,22 @@ typedef struct acpi_table_madt enum AcpiMadtType { - ACPI_MADT_TYPE_LOCAL_APIC = 0, - ACPI_MADT_TYPE_IO_APIC = 1, - ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, - ACPI_MADT_TYPE_NMI_SOURCE = 3, - ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, - ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, - ACPI_MADT_TYPE_IO_SAPIC = 6, - ACPI_MADT_TYPE_LOCAL_SAPIC = 7, - ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, - ACPI_MADT_TYPE_LOCAL_X2APIC = 9, - ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, - ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, - ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, - ACPI_MADT_TYPE_RESERVED = 13 /* 13 and greater are reserved */ + ACPI_MADT_TYPE_LOCAL_APIC = 0, + ACPI_MADT_TYPE_IO_APIC = 1, + ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, + ACPI_MADT_TYPE_NMI_SOURCE = 3, + ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, + ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, + ACPI_MADT_TYPE_IO_SAPIC = 6, + ACPI_MADT_TYPE_LOCAL_SAPIC = 7, + ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, + ACPI_MADT_TYPE_LOCAL_X2APIC = 9, + ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, + ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, + ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, + ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, + ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, + ACPI_MADT_TYPE_RESERVED = 15 /* 15 and greater are reserved */ }; @@ -1008,16 +1010,27 @@ typedef struct acpi_madt_generic_interrupt { ACPI_SUBTABLE_HEADER Header; UINT16 Reserved; /* Reserved - must be zero */ - UINT32 GicId; + UINT32 CpuInterfaceNumber; UINT32 Uid; UINT32 Flags; UINT32 ParkingVersion; UINT32 PerformanceInterrupt; UINT64 ParkedAddress; UINT64 BaseAddress; + UINT64 GicvBaseAddress; + UINT64 GichBaseAddress; + UINT32 VgicInterrupt; + UINT64 GicrBaseAddress; + UINT64 ArmMpidr; } ACPI_MADT_GENERIC_INTERRUPT; +/* Masks for Flags field above */ + +/* ACPI_MADT_ENABLED (1) Processor is usable if set */ +#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ +#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ + /* 12: Generic Distributor (ACPI 5.0) */ @@ -1033,11 +1046,42 @@ typedef struct acpi_madt_generic_distributor } ACPI_MADT_GENERIC_DISTRIBUTOR; +/* 13: Generic MSI Frame (ACPI 5.1) */ + +typedef struct acpi_madt_generic_msi_frame +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved - must be zero */ + UINT32 MsiFrameId; + UINT64 BaseAddress; + UINT32 Flags; + UINT16 SpiCount; + UINT16 SpiBase; + +} ACPI_MADT_GENERIC_MSI_FRAME; + +/* Masks for Flags field above */ + +#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) + + +/* 14: Generic Redistributor (ACPI 5.1) */ + +typedef struct acpi_madt_generic_redistributor +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* reserved - must be zero */ + UINT64 BaseAddress; + UINT32 Length; + +} ACPI_MADT_GENERIC_REDISTRIBUTOR; + + /* * Common flags fields for MADT subtables */ -/* MADT Local APIC flags (LapicFlags) and GIC flags */ +/* MADT Local APIC flags */ #define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h index 7a64788..7d62862 100644 --- a/src/acpica/source/include/actbl2.h +++ b/src/acpica/source/include/actbl2.h @@ -522,7 +522,7 @@ typedef struct acpi_table_dbgp * Version 1 * * Conforms to "Intel Virtualization Technology for Directed I/O", - * Version 1.2, Sept. 2008 + * Version 2.2, Sept. 2013 * ******************************************************************************/ @@ -555,9 +555,10 @@ enum AcpiDmarType { ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, - ACPI_DMAR_TYPE_ATSR = 2, - ACPI_DMAR_HARDWARE_AFFINITY = 3, - ACPI_DMAR_TYPE_RESERVED = 4 /* 4 and greater are reserved */ + ACPI_DMAR_TYPE_ROOT_ATS = 2, + ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, + ACPI_DMAR_TYPE_NAMESPACE = 4, + ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ }; @@ -573,7 +574,7 @@ typedef struct acpi_dmar_device_scope } ACPI_DMAR_DEVICE_SCOPE; -/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE */ +/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE - device types */ enum AcpiDmarScopeType { @@ -582,7 +583,8 @@ enum AcpiDmarScopeType ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, ACPI_DMAR_SCOPE_TYPE_HPET = 4, - ACPI_DMAR_SCOPE_TYPE_RESERVED = 5 /* 5 and greater are reserved */ + ACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5, + ACPI_DMAR_SCOPE_TYPE_RESERVED = 6 /* 6 and greater are reserved */ }; typedef struct acpi_dmar_pci_path @@ -659,6 +661,18 @@ typedef struct acpi_dmar_rhsa } ACPI_DMAR_RHSA; +/* 4: ACPI Namespace Device Declaration Structure */ + +typedef struct acpi_dmar_andd +{ + ACPI_DMAR_HEADER Header; + UINT8 Reserved[3]; + UINT8 DeviceNumber; + char DeviceName[1]; + +} ACPI_DMAR_ANDD; + + /******************************************************************************* * * HPET - High Precision Event Timer table diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h index efec7e8..b30e80f 100644 --- a/src/acpica/source/include/actbl3.h +++ b/src/acpica/source/include/actbl3.h @@ -352,35 +352,111 @@ typedef struct acpi_s3pt_suspend /******************************************************************************* * - * GTDT - Generic Timer Description Table (ACPI 5.0) - * Version 1 + * GTDT - Generic Timer Description Table (ACPI 5.1) + * Version 2 * ******************************************************************************/ typedef struct acpi_table_gtdt { ACPI_TABLE_HEADER Header; /* Common ACPI table header */ - UINT64 Address; - UINT32 Flags; - UINT32 SecurePl1Interrupt; - UINT32 SecurePl1Flags; - UINT32 NonSecurePl1Interrupt; - UINT32 NonSecurePl1Flags; + UINT64 CounterBlockAddresss; + UINT32 Reserved; + UINT32 SecureEl1Interrupt; + UINT32 SecureEl1Flags; + UINT32 NonSecureEl1Interrupt; + UINT32 NonSecureEl1Flags; UINT32 VirtualTimerInterrupt; UINT32 VirtualTimerFlags; - UINT32 NonSecurePl2Interrupt; - UINT32 NonSecurePl2Flags; + UINT32 NonSecureEl2Interrupt; + UINT32 NonSecureEl2Flags; + UINT64 CounterReadBlockAddress; + UINT32 PlatformTimerCount; + UINT32 PlatformTimerOffset; } ACPI_TABLE_GTDT; -/* Values for Flags field above */ +/* Flag Definitions: Timer Block Physical Timers and Virtual timers */ + +#define ACPI_GTDT_INTERRUPT_MODE (1) +#define ACPI_GTDT_INTERRUPT_POLARITY (1<<1) +#define ACPI_GTDT_ALWAYS_ON (1<<2) + + +/* Common GTDT subtable header */ + +typedef struct acpi_gtdt_header +{ + UINT8 Type; + UINT16 Length; + +} ACPI_GTDT_HEADER; + +/* Values for GTDT subtable type above */ + +enum AcpiGtdtType +{ + ACPI_GTDT_TYPE_TIMER_BLOCK = 0, + ACPI_GTDT_TYPE_WATCHDOG = 1, + ACPI_GTDT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ +}; + + +/* GTDT Subtables, correspond to Type in acpi_gtdt_header */ + +/* 0: Generic Timer Block */ + +typedef struct acpi_gtdt_timer_block +{ + ACPI_GTDT_HEADER Header; + UINT8 Reserved; + UINT64 BlockAddress; + UINT32 TimerCount; + UINT32 TimerOffset; + +} ACPI_GTDT_TIMER_BLOCK; + +/* Timer Sub-Structure, one per timer */ + +typedef struct acpi_gtdt_timer_entry +{ + UINT8 FrameNumber; + UINT8 Reserved[3]; + UINT64 BaseAddress; + UINT64 El0BaseAddress; + UINT32 TimerInterrupt; + UINT32 TimerFlags; + UINT32 VirtualTimerInterrupt; + UINT32 VirtualTimerFlags; + UINT32 CommonFlags; + +} ACPI_GTDT_TIMER_ENTRY; + + +/* Flag Definitions: CommonFlags above */ + +#define ACPI_GTDT_GT_IS_SECURE_TIMER (1) +#define ACPI_GTDT_GT_ALWAYS_ON (1<<1) + -#define ACPI_GTDT_MAPPED_BLOCK_PRESENT 1 +/* 1: SBSA Generic Watchdog Structure */ -/* Values for all "TimerFlags" fields above */ +typedef struct acpi_gtdt_watchdog +{ + ACPI_GTDT_HEADER Header; + UINT8 Reserved; + UINT64 RefreshFrameAddress; + UINT64 ControlFrameAddress; + UINT32 TimerInterrupt; + UINT32 TimerFlags; + +} ACPI_GTDT_WATCHDOG; -#define ACPI_GTDT_INTERRUPT_MODE 1 -#define ACPI_GTDT_INTERRUPT_POLARITY 2 +/* Flag Definitions: TimerFlags above */ + +#define ACPI_GTDT_WATCHDOG_IRQ_MODE (1) +#define ACPI_GTDT_WATCHDOG_IRQ_POLARITY (1<<1) +#define ACPI_GTDT_WATCHDOG_SECURE (1<<2) /******************************************************************************* @@ -525,7 +601,8 @@ typedef struct acpi_table_pcct enum AcpiPcctType { ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, - ACPI_PCCT_TYPE_RESERVED = 1 /* 1 and greater are reserved */ + ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, + ACPI_PCCT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ }; /* @@ -550,6 +627,31 @@ typedef struct acpi_pcct_subspace } ACPI_PCCT_SUBSPACE; +/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ + +typedef struct acpi_pcct_hw_reduced +{ + ACPI_SUBTABLE_HEADER Header; + UINT32 DoorbellInterrupt; + UINT8 Flags; + UINT8 Reserved; + UINT64 BaseAddress; + UINT64 Length; + ACPI_GENERIC_ADDRESS DoorbellRegister; + UINT64 PreserveMask; + UINT64 WriteMask; + UINT32 Latency; + UINT32 MaxAccessRate; + UINT16 MinTurnaroundTime; + +} ACPI_PCCT_HW_REDUCED; + +/* Values for doorbell flags above */ + +#define ACPI_PCCT_INTERRUPT_POLARITY (1) +#define ACPI_PCCT_INTERRUPT_MODE (1<<1) + + /* * PCC memory structures (not part of the ACPI table) */ diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h index 6ffb2ce..b6371ae 100644 --- a/src/acpica/source/include/actypes.h +++ b/src/acpica/source/include/actypes.h @@ -596,7 +596,7 @@ typedef UINT64 ACPI_INTEGER; #define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) NULL,(ACPI_SIZE) i) #define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) NULL) -#define ACPI_OFFSET(d, f) (ACPI_SIZE) ACPI_PTR_DIFF (&(((d *)0)->f), (void *) NULL) +#define ACPI_OFFSET(d, f) ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) NULL) #define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i) #define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i) @@ -690,8 +690,9 @@ typedef UINT64 ACPI_INTEGER; #define ACPI_NOTIFY_RESERVED (UINT8) 0x0A #define ACPI_NOTIFY_LOCALITY_UPDATE (UINT8) 0x0B #define ACPI_NOTIFY_SHUTDOWN_REQUEST (UINT8) 0x0C +#define ACPI_NOTIFY_AFFINITY_UPDATE (UINT8) 0x0D -#define ACPI_NOTIFY_MAX 0x0C +#define ACPI_NOTIFY_MAX 0x0D /* * Types associated with ACPI names and objects. The first group of diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h index bac5fd8..2aea248 100644 --- a/src/acpica/source/include/acutils.h +++ b/src/acpica/source/include/acutils.h @@ -297,6 +297,10 @@ AcpiUtHexToAsciiChar ( UINT64 Integer, UINT32 Position); +UINT8 +AcpiUtAsciiCharToHex ( + int HexChar); + BOOLEAN AcpiUtValidObjectType ( ACPI_OBJECT_TYPE Type); @@ -1207,6 +1211,10 @@ const AH_DEVICE_ID * AcpiAhMatchHardwareId ( char *Hid); +const char * +AcpiAhMatchUuid ( + UINT8 *Data); + /* * utprint - printf/vprintf output functions */ @@ -1248,4 +1256,12 @@ AcpiUtFilePrintf ( ...); #endif +/* + * utuuid -- UUID support functions + */ +void +AcpiUtConvertStringToUuid ( + char *InString, + UINT8 *UuidBuffer); + #endif /* _ACUTILS_H */ diff --git a/src/acpica/source/include/platform/aclinux.h b/src/acpica/source/include/platform/aclinux.h index 1f1d7c1..d5c1501 100644 --- a/src/acpica/source/include/platform/aclinux.h +++ b/src/acpica/source/include/platform/aclinux.h @@ -201,8 +201,6 @@ #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId #define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory /* * OSL interfaces used by debugger/disassembler @@ -236,10 +234,6 @@ #define __init #endif -#ifndef __iomem -#define __iomem -#endif - /* Host-dependent types and defines for user-space ACPICA */ #define ACPI_FLUSH_CPU_CACHE() diff --git a/src/acpica/source/include/platform/aclinuxex.h b/src/acpica/source/include/platform/aclinuxex.h index 67e42ab..e3d5d5b 100644 --- a/src/acpica/source/include/platform/aclinuxex.h +++ b/src/acpica/source/include/platform/aclinuxex.h @@ -186,16 +186,6 @@ AcpiOsGetThreadId ( Lock ? AE_OK : AE_NO_MEMORY; \ }) -void __iomem * -AcpiOsMapMemory ( - ACPI_PHYSICAL_ADDRESS Where, - ACPI_SIZE Length); - -void -AcpiOsUnmapMemory ( - void __iomem *LogicalAddress, - ACPI_SIZE Size); - /* * OSL interfaces added by Linux */ diff --git a/src/acpica/source/os_specific/service_layers/oslibcfs.c b/src/acpica/source/os_specific/service_layers/oslibcfs.c index 3343a0c..e1ca8be 100644 --- a/src/acpica/source/os_specific/service_layers/oslibcfs.c +++ b/src/acpica/source/os_specific/service_layers/oslibcfs.c @@ -1,6 +1,6 @@ /****************************************************************************** * - * Module Name: oslibcfs - C library OSL for file IO + * Module Name: oslibcfs - C library OSL for file I/O * *****************************************************************************/ @@ -141,8 +141,9 @@ AcpiOsOpenFile ( UINT8 Modes) { ACPI_FILE File; - char ModesStr[4]; UINT32 i = 0; + char ModesStr[4]; + if (Modes & ACPI_FILE_READING) { @@ -156,6 +157,7 @@ AcpiOsOpenFile ( { ModesStr[i++] = 'b'; } + ModesStr[i++] = '\0'; File = fopen (Path, ModesStr); @@ -172,11 +174,11 @@ AcpiOsOpenFile ( * * FUNCTION: AcpiOsCloseFile * - * PARAMETERS: File - File descriptor + * PARAMETERS: File - An open file descriptor * * RETURN: None. * - * DESCRIPTION: Close a file. + * DESCRIPTION: Close a file opened via AcpiOsOpenFile. * ******************************************************************************/ @@ -192,14 +194,14 @@ AcpiOsCloseFile ( * * FUNCTION: AcpiOsReadFile * - * PARAMETERS: File - File descriptor + * PARAMETERS: File - An open file descriptor * Buffer - Data buffer * Size - Data block size * Count - Number of data blocks * - * RETURN: Size of successfully read buffer. + * RETURN: Number of bytes actually read. * - * DESCRIPTION: Read a file. + * DESCRIPTION: Read from a file. * ******************************************************************************/ @@ -212,6 +214,7 @@ AcpiOsReadFile ( { int Length; + Length = fread (Buffer, Size, Count, File); if (Length < 0) { @@ -226,14 +229,14 @@ AcpiOsReadFile ( * * FUNCTION: AcpiOsWriteFile * - * PARAMETERS: File - File descriptor + * PARAMETERS: File - An open file descriptor * Buffer - Data buffer * Size - Data block size * Count - Number of data blocks * - * RETURN: Size of successfully written buffer. + * RETURN: Number of bytes actually written. * - * DESCRIPTION: Write a file. + * DESCRIPTION: Write to a file. * ******************************************************************************/ @@ -246,6 +249,7 @@ AcpiOsWriteFile ( { int Length; + Length = fwrite (Buffer, Size, Count, File); if (Length < 0) { @@ -260,9 +264,9 @@ AcpiOsWriteFile ( * * FUNCTION: AcpiOsGetFileOffset * - * PARAMETERS: File - File descriptor + * PARAMETERS: File - An open file descriptor * - * RETURN: Size of current position. + * RETURN: Current file pointer position. * * DESCRIPTION: Get current file offset. * @@ -274,8 +278,8 @@ AcpiOsGetFileOffset ( { long Offset; - Offset = ftell (File); + Offset = ftell (File); return (Offset); } @@ -284,8 +288,8 @@ AcpiOsGetFileOffset ( * * FUNCTION: AcpiOsSetFileOffset * - * PARAMETERS: File - File descriptor - * Offset - File offset + * PARAMETERS: File - An open file descriptor + * Offset - New file offset * From - From begin/end of file * * RETURN: Status diff --git a/src/acpica/source/os_specific/service_layers/osunixxf.c b/src/acpica/source/os_specific/service_layers/osunixxf.c index c237ac2..6f0bdfe 100644 --- a/src/acpica/source/os_specific/service_layers/osunixxf.c +++ b/src/acpica/source/os_specific/service_layers/osunixxf.c @@ -1231,7 +1231,7 @@ AcpiOsGetTimer ( * FUNCTION: AcpiOsReadPciConfiguration * * PARAMETERS: PciId - Seg/Bus/Dev - * Register - Device Register + * PciRegister - Device Register * Value - Buffer where value is placed * Width - Number of bits * @@ -1244,7 +1244,7 @@ AcpiOsGetTimer ( ACPI_STATUS AcpiOsReadPciConfiguration ( ACPI_PCI_ID *PciId, - UINT32 Register, + UINT32 PciRegister, UINT64 *Value, UINT32 Width) { @@ -1259,7 +1259,7 @@ AcpiOsReadPciConfiguration ( * FUNCTION: AcpiOsWritePciConfiguration * * PARAMETERS: PciId - Seg/Bus/Dev - * Register - Device Register + * PciRegister - Device Register * Value - Value to be written * Width - Number of bits * @@ -1272,7 +1272,7 @@ AcpiOsReadPciConfiguration ( ACPI_STATUS AcpiOsWritePciConfiguration ( ACPI_PCI_ID *PciId, - UINT32 Register, + UINT32 PciRegister, UINT64 Value, UINT32 Width) { diff --git a/src/acpica/source/tools/acpiexec/aehandlers.c b/src/acpica/source/tools/acpiexec/aehandlers.c index 06283f4..14b5e90 100644 --- a/src/acpica/source/tools/acpiexec/aehandlers.c +++ b/src/acpica/source/tools/acpiexec/aehandlers.c @@ -1413,8 +1413,7 @@ AeRegionHandler ( case AML_FIELD_ATTRIB_RAW_BYTES: case AML_FIELD_ATTRIB_RAW_PROCESS: - /* (-2) for status/length */ - Length = MyContext->AccessLength - 2; + Length = MyContext->AccessLength; break; default: @@ -1448,8 +1447,7 @@ AeRegionHandler ( case AML_FIELD_ATTRIB_RAW_BYTES: case AML_FIELD_ATTRIB_RAW_PROCESS: - /* (-2) for status/length */ - Length = MyContext->AccessLength - 2; + Length = MyContext->AccessLength; break; default: