ACK: [PATCH 1/3] ACPICA: Update to version 20170531
ivanhu
ivan.hu at canonical.com
Fri Jun 9 09:25:16 UTC 2017
On 06/01/2017 06:37 PM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Changes in this release of ACPICA are detailed at the following
> link on the ACPICA developer mailing list:
>
> https://lists.acpica.org/pipermail/devel/2017-May/001186.html
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> src/acpica/Makefile.am | 2 +
> src/acpica/source/common/acfileio.c | 2 -
> src/acpica/source/common/adfile.c | 10 -
> src/acpica/source/common/adisasm.c | 8 +-
> src/acpica/source/common/adwalk.c | 105 ++-
> src/acpica/source/common/ahids.c | 1 +
> src/acpica/source/common/ahpredef.c | 6 +
> src/acpica/source/common/ahtable.c | 3 +
> src/acpica/source/common/ahuuids.c | 4 +
> src/acpica/source/common/dmextern.c | 520 ++++++++++--
> src/acpica/source/common/dmrestag.c | 36 +-
> src/acpica/source/common/dmswitch.c | 679 +++++++++++++++
> src/acpica/source/common/dmtable.c | 79 ++
> src/acpica/source/common/dmtbdump.c | 350 ++++++++
> src/acpica/source/common/dmtbinfo.c | 325 +++++++-
> src/acpica/source/compiler/Makefile.am | 1 +
> src/acpica/source/compiler/aslascii.c | 5 +-
> src/acpica/source/compiler/aslcompile.c | 2 +-
> src/acpica/source/compiler/aslcompiler.h | 20 +
> src/acpica/source/compiler/aslcompiler.l | 5 +
> src/acpica/source/compiler/asldefine.h | 4 +-
> src/acpica/source/compiler/aslexternal.c | 11 +-
> src/acpica/source/compiler/aslglobal.h | 1 -
> src/acpica/source/compiler/aslhelpers.y | 9 +
> src/acpica/source/compiler/aslload.c | 90 +-
> src/acpica/source/compiler/aslmain.c | 41 +-
> src/acpica/source/compiler/aslmap.c | 5 +
> src/acpica/source/compiler/asloffset.c | 1 -
> src/acpica/source/compiler/aslparser.y | 2 +-
> src/acpica/source/compiler/aslresource.c | 25 +
> src/acpica/source/compiler/aslresources.y | 94 +++
> src/acpica/source/compiler/aslrestype2s.c | 917 ++++++++++++++++++++-
> src/acpica/source/compiler/aslrules.y | 16 +-
> src/acpica/source/compiler/aslstartup.c | 11 +-
> src/acpica/source/compiler/aslsupport.l | 15 +-
> src/acpica/source/compiler/asltokens.y | 5 +
> src/acpica/source/compiler/asltree.c | 19 +-
> src/acpica/source/compiler/asltypes.y | 6 +
> src/acpica/source/compiler/aslutils.c | 6 +-
> src/acpica/source/compiler/aslxref.c | 9 +-
> src/acpica/source/compiler/cvcompiler.c | 53 +-
> src/acpica/source/compiler/cvdisasm.c | 16 +-
> src/acpica/source/compiler/cvparser.c | 7 +-
> src/acpica/source/compiler/dtcompiler.h | 11 +
> src/acpica/source/compiler/dtfield.c | 30 +
> src/acpica/source/compiler/dttable1.c | 228 +++++
> src/acpica/source/compiler/dttable2.c | 134 +++
> src/acpica/source/compiler/dttemplate.h | 175 +++-
> src/acpica/source/compiler/dtutils.c | 12 +
> src/acpica/source/compiler/fwts_iasl_interface.c | 4 +-
> src/acpica/source/components/debugger/dbexec.c | 12 +
> src/acpica/source/components/debugger/dbobject.c | 6 +-
> src/acpica/source/components/debugger/dbxface.c | 2 +-
> .../source/components/disassembler/dmbuffer.c | 4 +-
> .../source/components/disassembler/dmdeferred.c | 6 +-
> .../source/components/disassembler/dmopcode.c | 424 +---------
> .../source/components/disassembler/dmresrc.c | 17 +-
> .../source/components/disassembler/dmresrcl2.c | 466 +++++++++++
> src/acpica/source/components/disassembler/dmwalk.c | 25 +-
> src/acpica/source/components/dispatcher/dsargs.c | 5 +-
> src/acpica/source/components/dispatcher/dsdebug.c | 1 +
> src/acpica/source/components/dispatcher/dsmethod.c | 14 +-
> src/acpica/source/components/dispatcher/dsopcode.c | 7 +-
> src/acpica/source/components/dispatcher/dsutils.c | 6 -
> src/acpica/source/components/dispatcher/dswexec.c | 3 +-
> src/acpica/source/components/dispatcher/dswload.c | 38 +-
> src/acpica/source/components/dispatcher/dswload2.c | 18 +
> src/acpica/source/components/events/evxfevnt.c | 21 +
> src/acpica/source/components/executer/exdebug.c | 4 +-
> src/acpica/source/components/executer/exdump.c | 27 +-
> src/acpica/source/components/executer/exoparg1.c | 26 +-
> src/acpica/source/components/executer/exresolv.c | 24 +-
> src/acpica/source/components/namespace/nsaccess.c | 27 +
> src/acpica/source/components/namespace/nsnames.c | 4 -
> src/acpica/source/components/namespace/nsutils.c | 2 +-
> src/acpica/source/components/namespace/nsxfeval.c | 41 +-
> src/acpica/source/components/parser/psobject.c | 15 +
> src/acpica/source/components/parser/psopcode.c | 2 +-
> src/acpica/source/components/parser/psparse.c | 14 +-
> src/acpica/source/components/resources/rscalc.c | 112 +++
> src/acpica/source/components/resources/rsdump.c | 47 ++
> .../source/components/resources/rsdumpinfo.c | 68 ++
> src/acpica/source/components/resources/rsinfo.c | 28 +-
> src/acpica/source/components/resources/rsmisc.c | 5 +-
> src/acpica/source/components/resources/rsserial.c | 347 ++++++++
> src/acpica/source/components/tables/tbfadt.c | 4 +-
> src/acpica/source/components/tables/tbutils.c | 6 +-
> src/acpica/source/components/utilities/utdecode.c | 5 +-
> src/acpica/source/components/utilities/utownerid.c | 12 +-
> .../source/components/utilities/utresdecode.c | 461 +++++++++++
> src/acpica/source/components/utilities/utresrc.c | 314 +------
> src/acpica/source/include/acapps.h | 2 +-
> src/acpica/source/include/acdisasm.h | 105 ++-
> src/acpica/source/include/acglobal.h | 3 +
> src/acpica/source/include/aclocal.h | 17 +-
> src/acpica/source/include/acopcode.h | 2 +-
> src/acpica/source/include/acpixf.h | 2 +-
> src/acpica/source/include/acpredef.h | 14 +
> src/acpica/source/include/acresrc.h | 14 +-
> src/acpica/source/include/acrestyp.h | 103 ++-
> src/acpica/source/include/actbl1.h | 292 ++++++-
> src/acpica/source/include/actbl2.h | 67 +-
> src/acpica/source/include/actbl3.h | 91 +-
> src/acpica/source/include/actypes.h | 67 +-
> src/acpica/source/include/acutils.h | 1 +
> src/acpica/source/include/acuuid.h | 5 +
> src/acpica/source/include/amlcode.h | 61 +-
> src/acpica/source/include/amlresrc.h | 118 +++
> src/acpica/source/include/platform/acgcc.h | 10 +
> .../source/os_specific/service_layers/osunixxf.c | 12 +-
> src/acpica/source/tools/acpiexec/aecommon.h | 12 +-
> src/acpica/source/tools/acpiexec/aeexception.c | 441 ++++++++++
> src/acpica/source/tools/acpiexec/aehandlers.c | 214 +----
> 113 files changed, 7079 insertions(+), 1364 deletions(-)
> create mode 100644 src/acpica/source/common/dmswitch.c
> create mode 100644 src/acpica/source/components/utilities/utresdecode.c
> create mode 100644 src/acpica/source/tools/acpiexec/aeexception.c
>
> diff --git a/src/acpica/Makefile.am b/src/acpica/Makefile.am
> index 84cb0753..4b7ef1da 100644
> --- a/src/acpica/Makefile.am
> +++ b/src/acpica/Makefile.am
> @@ -248,6 +248,7 @@ libfwtsacpica_la_SOURCES = \
> source/components/utilities/utmutex.c \
> source/components/utilities/utnonansi.c \
> source/components/utilities/utobject.c \
> + source/components/utilities/utresdecode.c \
> source/components/utilities/utresrc.c \
> source/components/utilities/utstate.c \
> source/components/utilities/utstrtoul64.c \
> @@ -272,6 +273,7 @@ libfwtsacpica_la_SOURCES = \
> source/common/ahuuids.c \
> source/tools/acpiexec/aeinitfile.c \
> source/tools/acpiexec/aehandlers.c \
> + source/tools/acpiexec/aeexception.c \
> source/tools/acpiexec/aeregion.c \
> source/os_specific/service_layers/osgendbg.c
>
> diff --git a/src/acpica/source/common/acfileio.c b/src/acpica/source/common/acfileio.c
> index ecd9f604..a334d541 100644
> --- a/src/acpica/source/common/acfileio.c
> +++ b/src/acpica/source/common/acfileio.c
> @@ -531,8 +531,6 @@ AcValidateTableHeader (
>
> if (!AcpiUtValidNameseg (TableHeader.Signature))
> {
> - fprintf (stderr, "Invalid table signature: 0x%8.8X\n",
> - *ACPI_CAST_PTR (UINT32, TableHeader.Signature));
> return (AE_BAD_SIGNATURE);
> }
>
> diff --git a/src/acpica/source/common/adfile.c b/src/acpica/source/common/adfile.c
> index 5fff07d3..ac96156d 100644
> --- a/src/acpica/source/common/adfile.c
> +++ b/src/acpica/source/common/adfile.c
> @@ -316,11 +316,6 @@ FlGenerateFilename (
> */
> NewFilename = UtStringCacheCalloc ((ACPI_SIZE)
> strlen (InputFilename) + strlen (Suffix) + 2);
> - if (!NewFilename)
> - {
> - return (NULL);
> - }
> -
> strcpy (NewFilename, InputFilename);
>
> /* Try to find the last dot in the filename */
> @@ -364,11 +359,6 @@ FlStrdup (
>
>
> NewString = UtStringCacheCalloc ((ACPI_SIZE) strlen (String) + 1);
> - if (!NewString)
> - {
> - return (NULL);
> - }
> -
> strcpy (NewString, String);
> return (NewString);
> }
> diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c
> index 23260c7f..c0d44cdf 100644
> --- a/src/acpica/source/common/adisasm.c
> +++ b/src/acpica/source/common/adisasm.c
> @@ -537,7 +537,7 @@ AdDisassembleOneTable (
> * the entire tree with the new information (namely, the
> * number of arguments per method)
> */
> - if (AcpiDmGetExternalMethodCount ())
> + if (AcpiDmGetUnresolvedExternalMethodCount ())
> {
> Status = AdReparseOneTable (Table, File, OwnerId);
> if (ACPI_FAILURE (Status))
> @@ -553,7 +553,7 @@ AdDisassembleOneTable (
> * 1) Convert fixed-offset references to resource descriptors
> * to symbolic references (Note: modifies namespace)
> */
> - AcpiDmConvertResourceIndexes (AcpiGbl_ParseOpRoot, AcpiGbl_RootNode);
> + AcpiDmConvertParseObjects (AcpiGbl_ParseOpRoot, AcpiGbl_RootNode);
>
> /* Optional displays */
>
> @@ -616,7 +616,7 @@ AdReparseOneTable (
> fprintf (stderr,
> "\nFound %u external control methods, "
> "reparsing with new information\n",
> - AcpiDmGetExternalMethodCount ());
> + AcpiDmGetUnresolvedExternalMethodCount ());
>
> /* Reparse, rebuild namespace */
>
> @@ -642,7 +642,7 @@ AdReparseOneTable (
>
> /* New namespace, add the external definitions first */
>
> - AcpiDmAddExternalsToNamespace ();
> + AcpiDmAddExternalListToNamespace ();
>
> /* For -ca option: clear the list of comment addresses. */
>
> diff --git a/src/acpica/source/common/adwalk.c b/src/acpica/source/common/adwalk.c
> index e1205e3b..887835cb 100644
> --- a/src/acpica/source/common/adwalk.c
> +++ b/src/acpica/source/common/adwalk.c
> @@ -208,11 +208,16 @@ AcpiDmInspectPossibleArgs (
> ACPI_PARSE_OBJECT *Op);
>
> static ACPI_STATUS
> -AcpiDmResourceDescendingOp (
> +AcpiDmCommonDescendingOp (
> ACPI_PARSE_OBJECT *Op,
> UINT32 Level,
> void *Context);
>
> +static ACPI_STATUS
> +AcpiDmProcessResourceDescriptors (
> + ACPI_PARSE_OBJECT *Op,
> + UINT32 Level,
> + void *Context);
>
> /*******************************************************************************
> *
> @@ -395,21 +400,21 @@ AcpiDmCrossReferenceNamespace (
>
> /*******************************************************************************
> *
> - * FUNCTION: AcpiDmConvertResourceIndexes
> + * FUNCTION: AcpiDmConvertParseObjects
> *
> * PARAMETERS: ParseTreeRoot - Root of the parse tree
> * NamespaceRoot - Root of the internal namespace
> *
> * RETURN: None
> *
> - * DESCRIPTION: Convert fixed-offset references to resource descriptors to
> - * symbolic references. Should only be called after namespace has
> - * been cross referenced.
> + * DESCRIPTION: Begin parse tree walk to perform conversions needed for
> + * disassembly. These include resource descriptors and switch/case
> + * operations.
> *
> ******************************************************************************/
>
> void
> -AcpiDmConvertResourceIndexes (
> +AcpiDmConvertParseObjects (
> ACPI_PARSE_OBJECT *ParseTreeRoot,
> ACPI_NAMESPACE_NODE *NamespaceRoot)
> {
> @@ -443,9 +448,14 @@ AcpiDmConvertResourceIndexes (
> Info.Level = 0;
> Info.WalkState = WalkState;
>
> - AcpiDmWalkParseTree (ParseTreeRoot, AcpiDmResourceDescendingOp,
> + AcpiDmWalkParseTree (ParseTreeRoot, AcpiDmCommonDescendingOp,
> AcpiDmCommonAscendingOp, &Info);
> ACPI_FREE (WalkState);
> +
> + if (AcpiGbl_TempListHead) {
> + AcpiDmClearTempList();
> + }
> +
> return;
> }
>
> @@ -737,7 +747,6 @@ AcpiDmLoadDescendingOp (
>
> WalkState = Info->WalkState;
> OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
> - ObjectType = OpInfo->ObjectType;
> ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode);
>
> /* Only interested in operators that create new names */
> @@ -754,7 +763,7 @@ AcpiDmLoadDescendingOp (
> {
> /* For all named operators, get the new name */
>
> - Path = (char *) Op->Named.Path;
> + Path = Op->Named.Path;
>
> if (!Path && Op->Common.AmlOpcode == AML_INT_NAMEDFIELD_OP)
> {
> @@ -875,7 +884,6 @@ AcpiDmXrefDescendingOp (
>
> WalkState = Info->WalkState;
> OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
> - ObjectType = OpInfo->ObjectType;
> ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode);
>
> if ((!(OpInfo->Flags & AML_NAMED)) &&
> @@ -885,25 +893,6 @@ AcpiDmXrefDescendingOp (
> {
> goto Exit;
> }
> - else if (Op->Common.Parent &&
> - Op->Common.Parent->Common.AmlOpcode == AML_EXTERNAL_OP)
> - {
> - /* External() NamePath */
> -
> - Path = Op->Common.Value.String;
> - ObjectType = (ACPI_OBJECT_TYPE) Op->Common.Next->Common.Value.Integer;
> - if (ObjectType == ACPI_TYPE_METHOD)
> - {
> - ParamCount = (UINT32)
> - Op->Common.Next->Common.Next->Common.Value.Integer;
> - }
> -
> - Flags |= ACPI_EXT_RESOLVED_REFERENCE | ACPI_EXT_ORIGIN_FROM_OPCODE;
> - AcpiDmAddOpToExternalList (Op, Path,
> - (UINT8) ObjectType, ParamCount, Flags);
> -
> - goto Exit;
> - }
>
> /* Get the NamePath from the appropriate place */
>
> @@ -924,9 +913,10 @@ AcpiDmXrefDescendingOp (
> Path = NextOp->Common.Value.String;
> }
> }
> - else if (Op->Common.AmlOpcode == AML_SCOPE_OP)
> + else if (Op->Common.AmlOpcode == AML_SCOPE_OP ||
> + Op->Common.AmlOpcode == AML_EXTERNAL_OP)
> {
> - Path = (char *) Op->Named.Path;
> + Path = Op->Named.Path;
> }
> }
> else if (OpInfo->Flags & AML_CREATE)
> @@ -1060,21 +1050,59 @@ Exit:
> return (AE_OK);
> }
>
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmCommonDescendingOp
> + *
> + * PARAMETERS: ASL_WALK_CALLBACK
> + *
> + * RETURN: ACPI_STATUS
> + *
> + * DESCRIPTION: Perform parse tree preprocessing before main disassembly walk.
> + *
> + ******************************************************************************/
> +
> +static ACPI_STATUS
> +AcpiDmCommonDescendingOp (
> + ACPI_PARSE_OBJECT *Op,
> + UINT32 Level,
> + void *Context)
> +{
> + ACPI_STATUS Status;
> +
> + /* Resource descriptor conversion */
> +
> + Status = AcpiDmProcessResourceDescriptors (Op, Level, Context);
> +
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + /* Switch/Case conversion */
> +
> + Status = AcpiDmProcessSwitch (Op);
> +
> + return (AE_OK);
> +}
> +
>
> /*******************************************************************************
> *
> - * FUNCTION: AcpiDmResourceDescendingOp
> + * FUNCTION: AcpiDmProcessResourceDescriptors
> *
> * PARAMETERS: ASL_WALK_CALLBACK
> *
> - * RETURN: None
> + * RETURN: ACPI_STATUS
> *
> - * DESCRIPTION: Process one parse op during symbolic resource index conversion.
> + * DESCRIPTION: Convert fixed-offset references to resource descriptors to
> + * symbolic references. Should only be called after namespace has
> + * been cross referenced.
> *
> ******************************************************************************/
>
> static ACPI_STATUS
> -AcpiDmResourceDescendingOp (
> +AcpiDmProcessResourceDescriptors (
> ACPI_PARSE_OBJECT *Op,
> UINT32 Level,
> void *Context)
> @@ -1085,7 +1113,6 @@ AcpiDmResourceDescendingOp (
> ACPI_OBJECT_TYPE ObjectType;
> ACPI_STATUS Status;
>
> -
> WalkState = Info->WalkState;
> OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
>
> @@ -1111,10 +1138,10 @@ AcpiDmResourceDescendingOp (
> * If so, convert the reference into a symbolic reference.
> */
> AcpiDmCheckResourceReference (Op, WalkState);
> +
> return (AE_OK);
> }
>
> -
> /*******************************************************************************
> *
> * FUNCTION: AcpiDmCommonAscendingOp
> @@ -1135,14 +1162,11 @@ AcpiDmCommonAscendingOp (
> void *Context)
> {
> ACPI_OP_WALK_INFO *Info = Context;
> - const ACPI_OPCODE_INFO *OpInfo;
> ACPI_OBJECT_TYPE ObjectType;
>
>
> /* Close scope if necessary */
>
> - OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
> - ObjectType = OpInfo->ObjectType;
> ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode);
>
> if (AcpiNsOpensScope (ObjectType))
> @@ -1153,7 +1177,6 @@ AcpiDmCommonAscendingOp (
> return (AE_OK);
> }
>
> -
> /*******************************************************************************
> *
> * FUNCTION: AcpiDmInspectPossibleArgs
> diff --git a/src/acpica/source/common/ahids.c b/src/acpica/source/common/ahids.c
> index 3f3bae30..701d9f40 100644
> --- a/src/acpica/source/common/ahids.c
> +++ b/src/acpica/source/common/ahids.c
> @@ -187,6 +187,7 @@ const AH_DEVICE_ID AslDeviceIds[] =
> {"ACPI0011", "Generic Buttons Device"},
> {"ACPI0012", "NVDIMM Root Device"},
> {"ACPI0013", "Generic Event Device"},
> + {"ACPI0014", "Wireless Power Calibration Device"},
> {"ADMA0F28", "Intel Audio DMA"},
> {"AMCR0F28", "Intel Audio Machine Driver"},
> {"ATK4001", "Asus Radio Control Button"},
> diff --git a/src/acpica/source/common/ahpredef.c b/src/acpica/source/common/ahpredef.c
> index 41e19f68..edcfa2f0 100644
> --- a/src/acpica/source/common/ahpredef.c
> +++ b/src/acpica/source/common/ahpredef.c
> @@ -254,6 +254,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
> AH_PREDEF ("_FPS", "Fan Performance States", "Returns a list of supported fan performance states"),
> AH_PREDEF ("_FSL", "Fan Set Level", "Control method that sets the fan device's speed level (performance state)"),
> AH_PREDEF ("_FST", "Fan Status", "Returns current status information for a fan device"),
> + AH_PREDEF ("_FUN", "Function Number", "Resource descriptor field"),
> AH_PREDEF ("_GAI", "Get Averaging Interval", "Returns the power meter averaging interval"),
> AH_PREDEF ("_GCP", "Get Capabilities", "Get device time capabilities"),
> AH_PREDEF ("_GHL", "Get Hardware Limit", "Returns the hardware limit enforced by the power meter"),
> @@ -270,6 +271,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
> AH_PREDEF ("_GWS", "Get Wake Status", "Return status of wake alarms"),
> AH_PREDEF ("_HE_", "High-Edge", "Interrupt triggering, Resource Descriptor field"),
> AH_PREDEF ("_HID", "Hardware ID", "Returns a device's Plug and Play Hardware ID"),
> + AH_PREDEF ("_HMA", "Heterogeneous Memory Attributes", "Returns a list of HMAT structures."),
> AH_PREDEF ("_HOT", "Hot Temperature", "Returns the critical temperature for sleep (entry to S4)"),
> AH_PREDEF ("_HPP", "Hot Plug Parameters", "Returns a list of hot-plug information for a PCI device"),
> AH_PREDEF ("_HPX", "Hot Plug Parameter Extensions", "Returns a list of hot-plug information for a PCI device. Supersedes _HPP"),
> @@ -287,6 +289,9 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
> AH_PREDEF ("_LL_", "Low Level", "Interrupt polarity, Resource Descriptor field"),
> AH_PREDEF ("_LPD", "Low Power Dependencies", "Returns a list of dependencies for low power idle entry"),
> AH_PREDEF ("_LPI", "Low Power Idle States", "Returns a list of supported low power idle states"),
> + AH_PREDEF ("_LSI", "Label Storage Information", "Returns information about the Label Storage Area associated with the NVDIMM object."),
> + AH_PREDEF ("_LSR", "Label Storage Read", "Returns label data from the Label Storage Area of the NVDIMM object."),
> + AH_PREDEF ("_LSW", "Label Storage Write", "Writes label data in to the Label Storage Area of the NVDIMM object."),
> AH_PREDEF ("_MAF", "Maximum Address Fixed", "Resource Descriptor field"),
> AH_PREDEF ("_MAT", "Multiple APIC Table Entry", "Returns a list of MADT APIC structure entries"),
> AH_PREDEF ("_MAX", "Maximum Base Address", "Resource Descriptor field"),
> @@ -439,6 +444,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
> AH_PREDEF ("_UPC", "USB Port Capabilities", "Returns a list of USB port capabilities"),
> AH_PREDEF ("_UPD", "User Presence Detect", "Returns user detection information"),
> AH_PREDEF ("_UPP", "User Presence Polling", "Returns the recommended user presence polling interval"),
> + AH_PREDEF ("_VAL", "Pin Configuration Value", "Resource Descriptor field"),
> AH_PREDEF ("_VEN", "Vendor Data", "Resource Descriptor field"),
> AH_PREDEF ("_VPO", "Video Post Options", "Returns the implemented video post options"),
> AH_PREDEF ("_Wxx", "Wake Event", "Method executed as a result of a wake event"),
> diff --git a/src/acpica/source/common/ahtable.c b/src/acpica/source/common/ahtable.c
> index 42a7944f..38c1ea20 100644
> --- a/src/acpica/source/common/ahtable.c
> +++ b/src/acpica/source/common/ahtable.c
> @@ -218,6 +218,7 @@ const AH_TABLE Gbl_AcpiSupportedTables[] =
> {ACPI_SIG_FPDT, "Firmware Performance Data Table"},
> {ACPI_SIG_GTDT, "Generic Timer Description Table"},
> {ACPI_SIG_HEST, "Hardware Error Source Table"},
> + {ACPI_SIG_HMAT, "Heterogeneous Memory Attributes Table"},
> {ACPI_SIG_HPET, "High Precision Event Timer table"},
> {ACPI_SIG_IORT, "IO Remapping Table"},
> {ACPI_SIG_IVRS, "I/O Virtualization Reporting Structure"},
> @@ -232,6 +233,7 @@ const AH_TABLE Gbl_AcpiSupportedTables[] =
> {ACPI_SIG_NFIT, "NVDIMM Firmware Interface Table"},
> {ACPI_SIG_PCCT, "Platform Communications Channel Table"},
> {ACPI_SIG_PMTT, "Platform Memory Topology Table"},
> + {ACPI_SIG_PPTT, "Processor Properties Topology Table"},
> {ACPI_SIG_RASF, "RAS Features Table"},
> {ACPI_RSDP_NAME,"Root System Description Pointer"},
> {ACPI_SIG_RSDT, "Root System Description Table"},
> @@ -253,6 +255,7 @@ const AH_TABLE Gbl_AcpiSupportedTables[] =
> {ACPI_SIG_WDDT, "Watchdog Description Table"},
> {ACPI_SIG_WDRT, "Watchdog Resource Table"},
> {ACPI_SIG_WPBT, "Windows Platform Binary Table"},
> + {ACPI_SIG_WSMT, "Windows SMM Security Migrations Table"},
> {ACPI_SIG_XENV, "Xen Environment table"},
> {ACPI_SIG_XSDT, "Extended System Description Table"},
> {NULL, NULL}
> diff --git a/src/acpica/source/common/ahuuids.c b/src/acpica/source/common/ahuuids.c
> index f2b62443..6e018a30 100644
> --- a/src/acpica/source/common/ahuuids.c
> +++ b/src/acpica/source/common/ahuuids.c
> @@ -186,6 +186,10 @@ const AH_UUID Gbl_AcpiUuids[] =
> {"Persistent Virtual Disk", UUID_PERSISTENT_VIRTUAL_DISK},
> {"Persistent Virtual CD", UUID_PERSISTENT_VIRTUAL_CD},
>
> + {"[Processor Properties]", NULL},
> + {"Cache Properties", UUID_CACHE_PROPERTIES},
> + {"Physical Package Property", UUID_PHYSICAL_PROPERTY},
> +
> {"[Miscellaneous]", NULL},
> {"Platform-wide Capabilities", UUID_PLATFORM_CAPABILITIES},
> {"Dynamic Enumeration", UUID_DYNAMIC_ENUMERATION},
> diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c
> index 818d2adc..6ae3c379 100644
> --- a/src/acpica/source/common/dmextern.c
> +++ b/src/acpica/source/common/dmextern.c
> @@ -199,6 +199,9 @@ static const char *AcpiGbl_DmTypeNames[] =
>
> #define METHOD_SEPARATORS " \t,()\n"
>
> +static const char *ExternalConflictMessage =
> + " // Conflicts with a later declaration";
> +
>
> /* Local prototypes */
>
> @@ -211,6 +214,16 @@ AcpiDmNormalizeParentPrefix (
> ACPI_PARSE_OBJECT *Op,
> char *Path);
>
> +static ACPI_STATUS
> +AcpiDmGetExternalAndInternalPath (
> + ACPI_NAMESPACE_NODE *Node,
> + char **ExternalPath,
> + char **InternalPath);
> +
> +static ACPI_STATUS
> +AcpiDmRemoveRootPrefix (
> + char **Path);
> +
> static void
> AcpiDmAddPathToExternalList (
> char *Path,
> @@ -226,6 +239,21 @@ AcpiDmCreateNewExternal (
> UINT32 Value,
> UINT16 Flags);
>
> +static void
> +AcpiDmCheckForExternalConflict (
> + char *Path);
> +
> +static ACPI_STATUS
> +AcpiDmResolveExternal (
> + char *Path,
> + UINT8 Type,
> + ACPI_NAMESPACE_NODE **Node);
> +
> +
> +static void
> +AcpiDmConflictingDeclaration (
> + char *Path);
> +
>
> /*******************************************************************************
> *
> @@ -582,7 +610,7 @@ AcpiDmGetExternalsFromFile (
> {
> /* Add the external(s) to the namespace */
>
> - AcpiDmAddExternalsToNamespace ();
> + AcpiDmAddExternalListToNamespace ();
>
> AcpiOsPrintf ("%s: Imported %u external method definitions\n",
> Gbl_ExternalRefFilename, ImportCount);
> @@ -698,6 +726,86 @@ AcpiDmAddOpToExternalList (
>
> /*******************************************************************************
> *
> + * FUNCTION: AcpiDmGetExternalAndInternalPath
> + *
> + * PARAMETERS: Node - Namespace node for object to be added
> + * ExternalPath - Will contain the external path of the node
> + * InternalPath - Will contain the internal path of the node
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Get the External and Internal path from the given node.
> + *
> + ******************************************************************************/
> +
> +static ACPI_STATUS
> +AcpiDmGetExternalAndInternalPath (
> + ACPI_NAMESPACE_NODE *Node,
> + char **ExternalPath,
> + char **InternalPath)
> +{
> + ACPI_STATUS Status;
> +
> +
> + if (!Node)
> + {
> + return (AE_BAD_PARAMETER);
> + }
> +
> + /* Get the full external and internal pathnames to the node */
> +
> + *ExternalPath = AcpiNsGetExternalPathname (Node);
> + if (!*ExternalPath)
> + {
> + return (AE_BAD_PATHNAME);
> + }
> +
> + Status = AcpiNsInternalizeName (*ExternalPath, InternalPath);
> + if (ACPI_FAILURE (Status))
> + {
> + ACPI_FREE (*ExternalPath);
> + return (Status);
> + }
> +
> + return (AE_OK);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmRemoveRootPrefix
> + *
> + * PARAMETERS: Path - Remove Root prefix from this Path
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Remove the root prefix character '\' from Path.
> + *
> + ******************************************************************************/
> +
> +static ACPI_STATUS
> +AcpiDmRemoveRootPrefix (
> + char **Path)
> +{
> + char *InputPath = *Path;
> +
> +
> + if ((*InputPath == AML_ROOT_PREFIX) && (InputPath[1]))
> + {
> + if (!memmove(InputPath, InputPath+1, strlen(InputPath)))
> + {
> + return (AE_ERROR);
> + }
> +
> + *Path = InputPath;
> + }
> +
> + return (AE_OK);
> +}
> +
> +
> +/*******************************************************************************
> + *
> * FUNCTION: AcpiDmAddNodeToExternalList
> *
> * PARAMETERS: Node - Namespace node for object to be added
> @@ -727,46 +835,27 @@ AcpiDmAddNodeToExternalList (
> {
> char *ExternalPath;
> char *InternalPath;
> - char *Temp;
> ACPI_STATUS Status;
>
>
> ACPI_FUNCTION_TRACE (DmAddNodeToExternalList);
>
> -
> - if (!Node)
> - {
> - return_VOID;
> - }
> -
> /* Get the full external and internal pathnames to the node */
>
> - ExternalPath = AcpiNsGetExternalPathname (Node);
> - if (!ExternalPath)
> - {
> - return_VOID;
> - }
> -
> - Status = AcpiNsInternalizeName (ExternalPath, &InternalPath);
> + Status = AcpiDmGetExternalAndInternalPath (Node, &ExternalPath, &InternalPath);
> if (ACPI_FAILURE (Status))
> {
> - ACPI_FREE (ExternalPath);
> return_VOID;
> }
>
> /* Remove the root backslash */
>
> - if ((*ExternalPath == AML_ROOT_PREFIX) && (ExternalPath[1]))
> + Status = AcpiDmRemoveRootPrefix (&ExternalPath);
> + if (ACPI_FAILURE (Status))
> {
> - Temp = ACPI_ALLOCATE_ZEROED (strlen (ExternalPath) + 1);
> - if (!Temp)
> - {
> - return_VOID;
> - }
> -
> - strcpy (Temp, &ExternalPath[1]);
> ACPI_FREE (ExternalPath);
> - ExternalPath = Temp;
> + ACPI_FREE (InternalPath);
> + return_VOID;
> }
>
> /* Create the new External() declaration node */
> @@ -1013,68 +1102,171 @@ AcpiDmCreateNewExternal (
>
> /*******************************************************************************
> *
> - * FUNCTION: AcpiDmAddExternalsToNamespace
> + * FUNCTION: AcpiDmResolveExternal
> *
> - * PARAMETERS: None
> + * PARAMETERS: Path - Path of the external
> + * Type - Type of the external
> + * Node - Input node for AcpiNsLookup
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Resolve the external within the namespace by AcpiNsLookup.
> + * If the returned node is an external and has the same type
> + * we assume that it was either an existing external or a
> + *
> + ******************************************************************************/
> +
> +static ACPI_STATUS
> +AcpiDmResolveExternal (
> + char *Path,
> + UINT8 Type,
> + ACPI_NAMESPACE_NODE **Node)
> +{
> + ACPI_STATUS Status;
> +
> +
> + Status = AcpiNsLookup (NULL, Path, Type,
> + ACPI_IMODE_LOAD_PASS1,
> + ACPI_NS_ERROR_IF_FOUND | ACPI_NS_EXTERNAL | ACPI_NS_DONT_OPEN_SCOPE,
> + NULL, Node);
> +
> + if (!Node)
> + {
> + ACPI_EXCEPTION ((AE_INFO, Status,
> + "while adding external to namespace [%s]", Path));
> + }
> +
> + /* Note the asl code "external(a) external(a)" is acceptable ASL */
> +
> + else if ((*Node)->Type == Type &&
> + (*Node)->Flags & ANOBJ_IS_EXTERNAL)
> + {
> + return (AE_OK);
> + }
> + else
> + {
> + ACPI_EXCEPTION ((AE_INFO, AE_ERROR,
> + "[%s] has conflicting declarations", Path));
> + }
> +
> + return (AE_ERROR);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmCreateSubobjectForExternal
> + *
> + * PARAMETERS: Type - Type of the external
> + * Node - Namespace node from AcpiNsLookup
> + * ParamCount - Value to be used for Method
> *
> * RETURN: None
> *
> - * DESCRIPTION: Add all externals to the namespace. Allows externals to be
> + * DESCRIPTION: Add one external to the namespace. Allows external to be
> * "resolved".
> *
> ******************************************************************************/
>
> void
> -AcpiDmAddExternalsToNamespace (
> - void)
> +AcpiDmCreateSubobjectForExternal (
> + UINT8 Type,
> + ACPI_NAMESPACE_NODE **Node,
> + UINT32 ParamCount)
> {
> - ACPI_STATUS Status;
> - ACPI_NAMESPACE_NODE *Node;
> ACPI_OPERAND_OBJECT *ObjDesc;
> - ACPI_EXTERNAL_LIST *External = AcpiGbl_ExternalList;
>
>
> - while (External)
> + switch (Type)
> {
> - /* Add the external name (object) into the namespace */
> + case ACPI_TYPE_METHOD:
>
> - Status = AcpiNsLookup (NULL, External->InternalPath, External->Type,
> - ACPI_IMODE_LOAD_PASS1,
> - ACPI_NS_ERROR_IF_FOUND | ACPI_NS_EXTERNAL | ACPI_NS_DONT_OPEN_SCOPE,
> - NULL, &Node);
> + /* For methods, we need to save the argument count */
>
> - if (ACPI_FAILURE (Status))
> - {
> - ACPI_EXCEPTION ((AE_INFO, Status,
> - "while adding external to namespace [%s]",
> - External->Path));
> - }
> + ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD);
> + ObjDesc->Method.ParamCount = (UINT8) ParamCount;
> + (*Node)->Object = ObjDesc;
> + break;
>
> - else switch (External->Type)
> - {
> - case ACPI_TYPE_METHOD:
> + case ACPI_TYPE_REGION:
>
> - /* For methods, we need to save the argument count */
> + /* Regions require a region sub-object */
>
> - ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD);
> - ObjDesc->Method.ParamCount = (UINT8) External->Value;
> - Node->Object = ObjDesc;
> - break;
> + ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_REGION);
> + ObjDesc->Region.Node = *Node;
> + (*Node)->Object = ObjDesc;
> + break;
>
> - case ACPI_TYPE_REGION:
> + default:
>
> - /* Regions require a region sub-object */
> + break;
> + }
> +}
>
> - ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_REGION);
> - ObjDesc->Region.Node = Node;
> - Node->Object = ObjDesc;
> - break;
>
> - default:
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmAddOneExternalToNamespace
> + *
> + * PARAMETERS: Path - External parse object
> + * Type - Type of parse object
> + * ParamCount - External method parameter count
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Add one external to the namespace by resolvign the external
> + * (by performing a namespace lookup) and annotating the resulting
> + * namespace node with the approperiate information if the type
> + * is ACPI_TYPE_REGION or ACPI_TYPE_METHOD.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmAddOneExternalToNamespace (
> + char *Path,
> + UINT8 Type,
> + UINT32 ParamCount)
> +{
> + ACPI_STATUS Status;
> + ACPI_NAMESPACE_NODE *Node;
>
> - break;
> - }
>
> + Status = AcpiDmResolveExternal (Path, Type, &Node);
> +
> + if (ACPI_FAILURE (Status))
> + {
> + return;
> + }
> +
> + AcpiDmCreateSubobjectForExternal (Type, &Node, ParamCount);
> +
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmAddExternalListToNamespace
> + *
> + * PARAMETERS: None
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Add all externals within AcpiGbl_ExternalList to the namespace.
> + * Allows externals to be "resolved".
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmAddExternalListToNamespace (
> + void)
> +{
> + ACPI_EXTERNAL_LIST *External = AcpiGbl_ExternalList;
> +
> +
> + while (External)
> + {
> + AcpiDmAddOneExternalToNamespace (External->InternalPath,
> + External->Type, External->Value);
> External = External->Next;
> }
> }
> @@ -1082,23 +1274,28 @@ AcpiDmAddExternalsToNamespace (
>
> /*******************************************************************************
> *
> - * FUNCTION: AcpiDmGetExternalMethodCount
> + * FUNCTION: AcpiDmGetUnresolvedExternalMethodCount
> *
> * PARAMETERS: None
> *
> - * RETURN: The number of control method externals in the external list
> + * RETURN: The number of unresolved control method externals in the
> + * external list
> *
> - * DESCRIPTION: Return the number of method externals that have been generated.
> - * If any control method externals have been found, we must
> - * re-parse the entire definition block with the new information
> - * (number of arguments for the methods.) This is limitation of
> - * AML, we don't know the number of arguments from the control
> - * method invocation itself.
> + * DESCRIPTION: Return the number of unresolved external methods that have been
> + * generated. If any unresolved control method externals have been
> + * found, we must re-parse the entire definition block with the new
> + * information (number of arguments for the methods.)
> + * This is limitation of AML, we don't know the number of arguments
> + * from the control method invocation itself.
> + *
> + * Note: resolved external control methods are external control
> + * methods encoded with the AML_EXTERNAL_OP bytecode within the
> + * AML being disassembled.
> *
> ******************************************************************************/
>
> UINT32
> -AcpiDmGetExternalMethodCount (
> +AcpiDmGetUnresolvedExternalMethodCount (
> void)
> {
> ACPI_EXTERNAL_LIST *External = AcpiGbl_ExternalList;
> @@ -1107,7 +1304,8 @@ AcpiDmGetExternalMethodCount (
>
> while (External)
> {
> - if (External->Type == ACPI_TYPE_METHOD)
> + if (External->Type == ACPI_TYPE_METHOD &&
> + !(External->Flags & ACPI_EXT_ORIGIN_FROM_OPCODE))
> {
> Count++;
> }
> @@ -1251,6 +1449,11 @@ AcpiDmEmitExternals (
> }
> }
>
> + if (AcpiGbl_ExternalList->Flags &= ACPI_EXT_CONFLICTING_DECLARATION)
> + {
> + AcpiOsPrintf ("%s", ExternalConflictMessage);
> + AcpiDmConflictingDeclaration (AcpiGbl_ExternalList->Path);
> + }
> AcpiOsPrintf ("\n");
> }
>
> @@ -1273,6 +1476,106 @@ AcpiDmEmitExternals (
>
> /*******************************************************************************
> *
> + * FUNCTION: AcpiDmMarkExternalConflict
> + *
> + * PARAMETERS: Path - Namepath to search
> + *
> + * RETURN: ExternalList
> + *
> + * DESCRIPTION: Search the AcpiGbl_ExternalList for a matching path
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmMarkExternalConflict (
> + ACPI_NAMESPACE_NODE *Node)
> +{
> + ACPI_EXTERNAL_LIST *ExternalList = AcpiGbl_ExternalList;
> + char *ExternalPath;
> + char *InternalPath;
> + char *Temp;
> + ACPI_STATUS Status;
> +
> +
> + ACPI_FUNCTION_TRACE (DmMarkExternalConflict);
> +
> +
> + if (Node->Flags & ANOBJ_IS_EXTERNAL)
> + {
> + return_VOID;
> + }
> +
> + /* Get the full external and internal pathnames to the node */
> +
> + Status = AcpiDmGetExternalAndInternalPath (Node,
> + &ExternalPath, &InternalPath);
> + if (ACPI_FAILURE (Status))
> + {
> + return_VOID;
> + }
> +
> + /* Remove the root backslash */
> +
> + Status = AcpiDmRemoveRootPrefix (&InternalPath);
> + if (ACPI_FAILURE (Status))
> + {
> + ACPI_FREE (InternalPath);
> + ACPI_FREE (ExternalPath);
> + return_VOID;
> + }
> +
> + while (ExternalList)
> + {
> + Temp = ExternalList->InternalPath;
> + if ((*ExternalList->InternalPath == AML_ROOT_PREFIX) &&
> + (ExternalList->InternalPath[1]))
> + {
> + Temp++;
> + }
> +
> + if (!strcmp (ExternalList->InternalPath, InternalPath))
> + {
> + ExternalList->Flags |= ACPI_EXT_CONFLICTING_DECLARATION;
> + }
> + ExternalList = ExternalList->Next;
> + }
> +
> + ACPI_FREE (InternalPath);
> + ACPI_FREE (ExternalPath);
> +
> + return_VOID;
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmConflictingDeclaration
> + *
> + * PARAMETERS: Path - Path with conflicting declaration
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Emit a warning when printing conflicting ASL external
> + * declarations.
> + *
> + ******************************************************************************/
> +
> +static void
> +AcpiDmConflictingDeclaration (
> + char *Path)
> +{
> + fprintf (stderr,
> + " Warning - Emitting ASL code \"External (%s)\"\n"
> + " This is a conflicting declaration with some "
> + "other declaration within the ASL code.\n"
> + " This external declaration may need to be "
> + "deleted in order to recompile the dsl file.\n\n",
> + Path);
> +}
> +
> +
> +/*******************************************************************************
> + *
> * FUNCTION: AcpiDmEmitExternal
> *
> * PARAMETERS: Op External Parse Object
> @@ -1280,7 +1583,8 @@ AcpiDmEmitExternals (
> * RETURN: None
> *
> * DESCRIPTION: Emit an External() ASL statement for the current External
> - * parse object
> + * parse object. Note: External Ops are named types so the
> + * namepath is contained within NameOp->Name.Path.
> *
> ******************************************************************************/
>
> @@ -1290,14 +1594,76 @@ AcpiDmEmitExternal (
> ACPI_PARSE_OBJECT *TypeOp)
> {
> AcpiOsPrintf ("External (");
> - AcpiDmNamestring (NameOp->Common.Value.Name);
> - AcpiOsPrintf ("%s)\n",
> + AcpiDmNamestring (NameOp->Named.Path);
> + AcpiOsPrintf ("%s)",
> AcpiDmGetObjectTypeName ((ACPI_OBJECT_TYPE) TypeOp->Common.Value.Integer));
> + AcpiDmCheckForExternalConflict (NameOp->Named.Path);
> + AcpiOsPrintf ("\n");
> }
>
>
> /*******************************************************************************
> *
> + * FUNCTION: AcpiDmCheckForExternalConflict
> + *
> + * PARAMETERS: Path - Path to check
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Search the External List to see if the input Path has a
> + * conflicting declaration.
> + *
> + ******************************************************************************/
> +
> +static void
> +AcpiDmCheckForExternalConflict (
> + char *Path)
> +{
> + ACPI_EXTERNAL_LIST *ExternalList = AcpiGbl_ExternalList;
> + char *ListItemPath;
> + char *InputPath;
> +
> +
> + if (!Path)
> + {
> + return;
> + }
> +
> + /* Move past the root prefix '\' */
> +
> + InputPath = Path;
> + if ((*InputPath == AML_ROOT_PREFIX) && InputPath[1])
> + {
> + InputPath++;
> + }
> +
> + while (ExternalList)
> + {
> + ListItemPath = ExternalList->Path;
> + if (ListItemPath)
> + {
> + /* Move past the root prefix '\' */
> +
> + if ((*ListItemPath == AML_ROOT_PREFIX) &&
> + ListItemPath[1])
> + {
> + ListItemPath++;
> + }
> +
> + if (!strcmp (ListItemPath, InputPath) &&
> + (ExternalList->Flags & ACPI_EXT_CONFLICTING_DECLARATION))
> + {
> + AcpiOsPrintf ("%s", ExternalConflictMessage);
> + AcpiDmConflictingDeclaration (Path);
> +
> + return;
> + }
> + }
> + ExternalList = ExternalList->Next;
> + }
> +}
> +/*******************************************************************************
> + *
> * FUNCTION: AcpiDmUnresolvedWarning
> *
> * PARAMETERS: Type - Where to output the warning.
> @@ -1311,7 +1677,7 @@ AcpiDmEmitExternal (
> *
> ******************************************************************************/
>
> -#if 0
> +/*
> Summary of the external control method problem:
>
> When the -e option is used with disassembly, the various SSDTs are simply
> @@ -1380,7 +1746,7 @@ disassembler, otherwise it does not know how to handle the method invocations.
> In other words, if ABCD and EFGH are actually external control methods
> appearing in an SSDT, the disassembler does not know what to do unless
> the owning SSDT has been loaded via the -e option.
> -#endif
> +*/
>
> static char ExternalWarningPart1[600];
> static char ExternalWarningPart2[400];
> diff --git a/src/acpica/source/common/dmrestag.c b/src/acpica/source/common/dmrestag.c
> index 7753388a..5ba0f6b4 100644
> --- a/src/acpica/source/common/dmrestag.c
> +++ b/src/acpica/source/common/dmrestag.c
> @@ -424,6 +424,34 @@ static const ACPI_RESOURCE_TAG AcpiDmUartSerialBusTags[] =
> {0, NULL}
> };
>
> +/* Subtype tables for PinFunction descriptor */
> +
> +static const ACPI_RESOURCE_TAG AcpiDmPinFunctionTags[] =
> +{
> + {( 4 * 8), ACPI_RESTAG_INTERRUPTSHARE},
> + {( 6 * 8), ACPI_RESTAG_PINCONFIG},
> + {( 7 * 8), ACPI_RESTAG_FUNCTION},
> + {0, NULL}
> +};
> +
> +/* Subtype tables for PinConfig descriptor */
> +
> +static const ACPI_RESOURCE_TAG AcpiDmPinConfigTags[] =
> +{
> + {( 4 * 8), ACPI_RESTAG_INTERRUPTSHARE},
> + {( 6 * 8), ACPI_RESTAG_PINCONFIG_TYPE},
> + {( 7 * 8), ACPI_RESTAG_PINCONFIG_VALUE},
> + {0, NULL}
> +};
> +
> +/* Subtype tables for PinGroupFunction descriptor */
> +
> +static const ACPI_RESOURCE_TAG AcpiDmPinGroupFunctionTags[] =
> +{
> + {( 6 * 8), ACPI_RESTAG_FUNCTION},
> + {0, NULL}
> +};
> +
> /* Subtype tables for Address descriptor type-specific flags */
>
> static const ACPI_RESOURCE_TAG AcpiDmMemoryFlagTags[] =
> @@ -488,8 +516,12 @@ static const ACPI_RESOURCE_TAG *AcpiGbl_ResourceTags[] =
> AcpiDmAddress64Tags, /* 0x0A, ACPI_RESOURCE_NAME_QWORD_ADDRESS_SPACE */
> AcpiDmExtendedAddressTags, /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS_SPACE */
> NULL, /* 0x0C, ACPI_RESOURCE_NAME_GPIO - Use Subtype table below */
> - NULL, /* 0x0D, Reserved */
> - NULL /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use Subtype table below */
> + AcpiDmPinFunctionTags, /* 0x0D, ACPI_RESOURCE_NAME_PIN_FUNCTION */
> + NULL, /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use Subtype table below */
> + AcpiDmPinConfigTags, /* 0x0F, ACPI_RESOURCE_NAME_PIN_CONFIG */
> + NULL, /* 0x10, ACPI_RESOURCE_NAME_PIN_GROUP */
> + AcpiDmPinGroupFunctionTags, /* 0x11, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION */
> + AcpiDmPinConfigTags, /* 0x12, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG - Same as PinConfig */
> };
>
> /* GPIO Subtypes */
> diff --git a/src/acpica/source/common/dmswitch.c b/src/acpica/source/common/dmswitch.c
> new file mode 100644
> index 00000000..1641cbf9
> --- /dev/null
> +++ b/src/acpica/source/common/dmswitch.c
> @@ -0,0 +1,679 @@
> +/******************************************************************************
> + *
> + * Module Name: adwalk - Disassembler routines for switch statements
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2017, 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.
> + *
> + *****************************************************************************
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * following license:
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions, and the following disclaimer,
> + * without modification.
> + * 2. Redistributions in binary form must reproduce at minimum a disclaimer
> + * substantially similar to the "NO WARRANTY" disclaimer below
> + * ("Disclaimer") and any redistribution must be conditioned upon
> + * including a substantially similar Disclaimer requirement for further
> + * binary redistribution.
> + * 3. Neither the names of the above-listed copyright holders nor the names
> + * of any contributors may be used to endorse or promote products derived
> + * from this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * GNU General Public License ("GPL") version 2 as published by the Free
> + * Software Foundation.
> + *
> + *****************************************************************************/
> +
> +#include "acpi.h"
> +#include "accommon.h"
> +#include "acparser.h"
> +#include "amlcode.h"
> +#include "acdisasm.h"
> +#include "acdispat.h"
> +#include "acnamesp.h"
> +#include "acapps.h"
> +
> +
> +#define _COMPONENT ACPI_CA_DISASSEMBLER
> + ACPI_MODULE_NAME ("dmswitch")
> +
> +static BOOLEAN
> +AcpiDmIsSwitchBlock (
> + ACPI_PARSE_OBJECT *Op,
> + char **Temp);
> +
> +static BOOLEAN
> +AcpiDmIsCaseBlock (
> + ACPI_PARSE_OBJECT *Op);
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmProcessSwitch
> + *
> + * PARAMETERS: Op - Object to be examined
> + *
> + * RETURN: ACPI_STATUS
> + *
> + * DESCRIPTION: Walk function to create a list of all temporary (_T_) objects.
> + * If a While loop is found that can be converted to a Switch, do
> + * the conversion, remove the temporary name from the list, and
> + * mark the parse op with an IGNORE flag.
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiDmProcessSwitch (
> + ACPI_PARSE_OBJECT *Op)
> +{
> + char *Temp = NULL;
> + ACPI_PARSE_OBJECT_LIST *NewTemp;
> + ACPI_PARSE_OBJECT_LIST *Current;
> + ACPI_PARSE_OBJECT_LIST *Previous;
> + BOOLEAN FoundTemp = FALSE;
> +
> +
> + switch (Op->Common.AmlOpcode)
> + {
> + case AML_NAME_OP:
> +
> + Temp = (char *) (&Op->Named.Name);
> +
> + if (!strncmp(Temp, "_T_", 3))
> + {
> + /* Allocate and init a new Temp List node */
> +
> + NewTemp = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_PARSE_OBJECT_LIST));
> + if (!NewTemp)
> + {
> + return (AE_NO_MEMORY);
> + }
> +
> + if (AcpiGbl_TempListHead)
> + {
> + Current = AcpiGbl_TempListHead;
> + AcpiGbl_TempListHead = NewTemp;
> + AcpiGbl_TempListHead->Op = Op;
> + AcpiGbl_TempListHead->Next = Current;
> + }
> + else
> + {
> + AcpiGbl_TempListHead = NewTemp;
> + AcpiGbl_TempListHead->Op = Op;
> + AcpiGbl_TempListHead->Next = NULL;
> + }
> + }
> + break;
> +
> + case AML_WHILE_OP:
> +
> + if (!AcpiDmIsSwitchBlock (Op, &Temp))
> + {
> + break;
> + }
> +
> + /* Found a Switch */
> +
> + Op->Common.DisasmOpcode = ACPI_DASM_SWITCH;
> +
> + Previous = Current = AcpiGbl_TempListHead;
> + while (Current)
> + {
> + /* Note, if we get here Temp is not NULL */
> +
> + if (!strncmp(Temp, (char *) (&Current->Op->Named.Name), 4))
> + {
> + /* Match found. Ignore disassembly */
> +
> + Current->Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
> +
> + /* Remove from list */
> +
> + if (Current == AcpiGbl_TempListHead)
> + {
> + AcpiGbl_TempListHead = Current->Next;
> + }
> + else
> + {
> + Previous->Next = Current->Next;
> + }
> +
> + Current->Op = NULL;
> + Current->Next = NULL;
> + ACPI_FREE (Current);
> + FoundTemp = TRUE;
> + break;
> + }
> +
> + Previous = Current;
> + Current = Current->Next;
> + }
> +
> + if (!FoundTemp)
> + {
> + fprintf (stderr,
> + "Warning: Declaration for temp name %.4s not found\n", Temp);
> + }
> + break;
> +
> + default:
> + break;
> + }
> +
> + return (AE_OK);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmClearTempList
> + *
> + * PARAMETERS: None
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Removes any remaining temporary objects from global list and
> + * frees
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmClearTempList (
> + void)
> +{
> + ACPI_PARSE_OBJECT_LIST *Current;
> +
> +
> + while (AcpiGbl_TempListHead)
> + {
> + Current = AcpiGbl_TempListHead;
> + AcpiGbl_TempListHead = AcpiGbl_TempListHead->Next;
> + Current->Op = NULL;
> + Current->Next = NULL;
> + ACPI_FREE (Current);
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmIsSwitchBlock
> + *
> + * PARAMETERS: Op - While Object
> + *
> + * RETURN: TRUE if While block can be converted to a Switch/Case block
> + *
> + * DESCRIPTION: Determines if While block is a Switch/Case statement. Modifies
> + * parse tree to allow for Switch/Case disassembly during walk.
> + *
> + * EXAMPLE: Example of parse tree to be converted
> + *
> + * While
> + * One
> + * Store
> + * ByteConst
> + * -NamePath-
> + * If
> + * LEqual
> + * -NamePath-
> + * Zero
> + * Return
> + * One
> + * Else
> + * Return
> + * WordConst
> + * Break
> + *
> + ******************************************************************************/
> +
> +BOOLEAN
> +AcpiDmIsSwitchBlock (
> + ACPI_PARSE_OBJECT *Op,
> + char **Temp)
> +{
> + ACPI_PARSE_OBJECT *OneOp;
> + ACPI_PARSE_OBJECT *StoreOp;
> + ACPI_PARSE_OBJECT *NamePathOp;
> + ACPI_PARSE_OBJECT *PredicateOp;
> + ACPI_PARSE_OBJECT *CurrentOp;
> + ACPI_PARSE_OBJECT *TempOp;
> +
> +
> + /* Check for One Op Predicate */
> +
> + OneOp = AcpiPsGetArg (Op, 0);
> + if (!OneOp || (OneOp->Common.AmlOpcode != AML_ONE_OP))
> + {
> + return (FALSE);
> + }
> +
> + /* Check for Store Op */
> +
> + StoreOp = OneOp->Common.Next;
> + if (!StoreOp || (StoreOp->Common.AmlOpcode != AML_STORE_OP))
> + {
> + return (FALSE);
> + }
> +
> + /* Check for Name Op with _T_ string */
> +
> + NamePathOp = AcpiPsGetArg (StoreOp, 1);
> + if (!NamePathOp ||
> + (NamePathOp->Common.AmlOpcode != AML_INT_NAMEPATH_OP))
> + {
> + return (FALSE);
> + }
> +
> + if (strncmp ((char *) (NamePathOp->Common.Value.Name), "_T_", 3))
> + {
> + return (FALSE);
> + }
> +
> + *Temp = (char *) (NamePathOp->Common.Value.Name);
> +
> + /* This is a Switch/Case control block */
> +
> + /* Ignore the One Op Predicate */
> +
> + OneOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
> +
> + /* Ignore the Store Op, but not the children */
> +
> + StoreOp->Common.DisasmOpcode = ACPI_DASM_IGNORE_SINGLE;
> +
> + /*
> + * First arg of Store Op is the Switch condition.
> + * Mark it as a Switch predicate and as a parameter list for paren
> + * closing and correct indentation.
> + */
> + PredicateOp = AcpiPsGetArg (StoreOp, 0);
> + PredicateOp->Common.DisasmOpcode = ACPI_DASM_SWITCH_PREDICATE;
> + PredicateOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST;
> +
> + /* Ignore the Name Op */
> +
> + NamePathOp->Common.DisasmFlags = ACPI_PARSEOP_IGNORE;
> +
> + /* Remaining opcodes are the Case statements (If/ElseIf's) */
> +
> + CurrentOp = StoreOp->Common.Next;
> + while (AcpiDmIsCaseBlock (CurrentOp))
> + {
> + /* Block is a Case structure */
> +
> + if (CurrentOp->Common.AmlOpcode == AML_ELSE_OP)
> + {
> + /* ElseIf */
> +
> + CurrentOp->Common.DisasmOpcode = ACPI_DASM_CASE;
> + CurrentOp = AcpiPsGetArg (CurrentOp, 0);
> + }
> +
> + /* If */
> +
> + CurrentOp->Common.DisasmOpcode = ACPI_DASM_CASE;
> +
> + /*
> + * Mark the parse tree for Case disassembly. There are two
> + * types of Case statements. The first type of statement begins with
> + * an LEqual. The second starts with an LNot and uses a Match statement
> + * on a Package of constants.
> + */
> + TempOp = AcpiPsGetArg (CurrentOp, 0);
> + switch (TempOp->Common.AmlOpcode)
> + {
> + case (AML_LOGICAL_EQUAL_OP):
> +
> + /* Ignore just the LEqual Op */
> +
> + TempOp->Common.DisasmOpcode = ACPI_DASM_IGNORE_SINGLE;
> +
> + /* Ignore the NamePath Op */
> +
> + TempOp = AcpiPsGetArg (TempOp, 0);
> + TempOp->Common.DisasmFlags = ACPI_PARSEOP_IGNORE;
> +
> + /*
> + * Second arg of LEqual will be the Case predicate.
> + * Mark it as a predicate and also as a parameter list for paren
> + * closing and correct indentation.
> + */
> + PredicateOp = TempOp->Common.Next;
> + PredicateOp->Common.DisasmOpcode = ACPI_DASM_SWITCH_PREDICATE;
> + PredicateOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST;
> + break;
> +
> + case (AML_LOGICAL_NOT_OP):
> +
> + /*
> + * The Package will be the predicate of the Case statement.
> + * It's under:
> + * LNOT
> + * LEQUAL
> + * MATCH
> + * PACKAGE
> + */
> +
> + /* Get the LEqual Op from LNot */
> +
> + TempOp = AcpiPsGetArg (TempOp, 0);
> +
> + /* Get the Match Op from LEqual */
> +
> + TempOp = AcpiPsGetArg (TempOp, 0);
> +
> + /* Get the Package Op from Match */
> +
> + PredicateOp = AcpiPsGetArg (TempOp, 0);
> +
> + /* Mark as parameter list for paren closing */
> +
> + PredicateOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST;
> +
> + /*
> + * The Package list would be too deeply indented if we
> + * chose to simply ignore the all the parent opcodes, so
> + * we rearrange the parse tree instead.
> + */
> +
> + /*
> + * Save the second arg of the If/Else Op which is the
> + * block code of code for this Case statement.
> + */
> + TempOp = AcpiPsGetArg (CurrentOp, 1);
> +
> + /*
> + * Move the Package Op to the child (predicate) of the
> + * Case statement.
> + */
> + CurrentOp->Common.Value.Arg = PredicateOp;
> + PredicateOp->Common.Parent = CurrentOp;
> +
> + /* Add the block code */
> +
> + PredicateOp->Common.Next = TempOp;
> + break;
> +
> + default:
> +
> + /* Should never get here */
> + break;
> + }
> +
> + /* Advance to next Case block */
> +
> + CurrentOp = CurrentOp->Common.Next;
> + }
> +
> + /* If CurrentOp is now an Else, then this is a Default block */
> +
> + if (CurrentOp && CurrentOp->Common.AmlOpcode == AML_ELSE_OP)
> + {
> + CurrentOp->Common.DisasmOpcode = ACPI_DASM_DEFAULT;
> + }
> +
> + /*
> + * From the first If advance to the Break op. It's possible to
> + * have an Else (Default) op here when there is only one Case
> + * statement, so check for it.
> + */
> + CurrentOp = StoreOp->Common.Next->Common.Next;
> + if (CurrentOp->Common.AmlOpcode == AML_ELSE_OP)
> + {
> + CurrentOp = CurrentOp->Common.Next;
> + }
> +
> + /* Ignore the Break Op */
> +
> + CurrentOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
> + return (TRUE);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmIsCaseBlock
> + *
> + * PARAMETERS: Op - Object to test
> + *
> + * RETURN: TRUE if Object is beginning of a Case block.
> + *
> + * DESCRIPTION: Determines if an Object is the beginning of a Case block for a
> + * Switch/Case statement. Parse tree must be one of the following
> + * forms:
> + *
> + * Else (Optional)
> + * If
> + * LEqual
> + * -NamePath- _T_x
> + *
> + * Else (Optional)
> + * If
> + * LNot
> + * LEqual
> + * Match
> + * Package
> + * ByteConst
> + * -NamePath- _T_x
> + *
> + ******************************************************************************/
> +
> +static BOOLEAN
> +AcpiDmIsCaseBlock (
> + ACPI_PARSE_OBJECT *Op)
> +{
> + ACPI_PARSE_OBJECT *CurrentOp;
> +
> +
> + if (!Op)
> + {
> + return (FALSE);
> + }
> +
> + /* Look for an If or ElseIf */
> +
> + CurrentOp = Op;
> + if (CurrentOp->Common.AmlOpcode == AML_ELSE_OP)
> + {
> + CurrentOp = AcpiPsGetArg (CurrentOp, 0);
> + if (!CurrentOp)
> + {
> + return (FALSE);
> + }
> + }
> +
> + if (!CurrentOp || CurrentOp->Common.AmlOpcode != AML_IF_OP)
> + {
> + return (FALSE);
> + }
> +
> + /* Child must be LEqual or LNot */
> +
> + CurrentOp = AcpiPsGetArg (CurrentOp, 0);
> + if (!CurrentOp)
> + {
> + return (FALSE);
> + }
> +
> + switch (CurrentOp->Common.AmlOpcode)
> + {
> + case (AML_LOGICAL_EQUAL_OP):
> +
> + /* Next child must be NamePath with string _T_ */
> +
> + CurrentOp = AcpiPsGetArg (CurrentOp, 0);
> + if (!CurrentOp || !CurrentOp->Common.Value.Name ||
> + strncmp(CurrentOp->Common.Value.Name, "_T_", 3))
> + {
> + return (FALSE);
> + }
> + break;
> +
> + case (AML_LOGICAL_NOT_OP):
> +
> + /* Child of LNot must be LEqual op */
> +
> + CurrentOp = AcpiPsGetArg (CurrentOp, 0);
> + if (!CurrentOp || (CurrentOp->Common.AmlOpcode != AML_LOGICAL_EQUAL_OP))
> + {
> + return (FALSE);
> + }
> +
> + /* Child of LNot must be Match op */
> +
> + CurrentOp = AcpiPsGetArg (CurrentOp, 0);
> + if (!CurrentOp || (CurrentOp->Common.AmlOpcode != AML_MATCH_OP))
> + {
> + return (FALSE);
> + }
> +
> + /* First child of Match must be Package op */
> +
> + CurrentOp = AcpiPsGetArg (CurrentOp, 0);
> + if (!CurrentOp || (CurrentOp->Common.AmlOpcode != AML_PACKAGE_OP))
> + {
> + return (FALSE);
> + }
> +
> + /* Third child of Match must be NamePath with string _T_ */
> +
> + CurrentOp = AcpiPsGetArg (CurrentOp->Common.Parent, 2);
> + if (!CurrentOp || !CurrentOp->Common.Value.Name ||
> + strncmp(CurrentOp->Common.Value.Name, "_T_", 3))
> + {
> + return (FALSE);
> + }
> + break;
> +
> + default:
> +
> + return (FALSE);
> + }
> +
> + return (TRUE);
> +}
> diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
> index 4befd14d..b85bb0c3 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -298,6 +298,7 @@ static const char *AcpiDmHestSubnames[] =
> "PCI Express/PCI-X Bridge AER",
> "Generic Hardware Error Source",
> "Generic Hardware Error Source V2",
> + "IA-32 Deferred Machine Check",
> "Unknown Subtable Type" /* Reserved */
> };
>
> @@ -314,9 +315,18 @@ static const char *AcpiDmHestNotifySubnames[] =
> "SEA", /* ACPI 6.1 */
> "SEI", /* ACPI 6.1 */
> "GSIV", /* ACPI 6.1 */
> + "Software Delegated Exception", /* ACPI 6.2 */
> "Unknown Notify Type" /* Reserved */
> };
>
> +static const char *AcpiDmHmatSubnames[] =
> +{
> + "Memory Subystem Address Range",
> + "System Locality Latency and Bandwidth Information",
> + "Memory Side Cache Information",
> + "Unknown Structure Type" /* Reserved */
> +};
> +
> static const char *AcpiDmMadtSubnames[] =
> {
> "Processor Local APIC", /* ACPI_MADT_TYPE_LOCAL_APIC */
> @@ -355,6 +365,8 @@ static const char *AcpiDmPcctSubnames[] =
> "Generic Communications Subspace", /* ACPI_PCCT_TYPE_GENERIC_SUBSPACE */
> "HW-Reduced Comm Subspace", /* ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE */
> "HW-Reduced Comm Subspace Type2", /* ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 */
> + "Extended PCC Master Subspace", /* ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE */
> + "Extended PCC Slave Subspace", /* ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE */
> "Unknown Subtable Type" /* Reserved */
> };
>
> @@ -366,12 +378,21 @@ static const char *AcpiDmPmttSubnames[] =
> "Unknown Subtable Type" /* Reserved */
> };
>
> +static const char *AcpiDmPpttSubnames[] =
> +{
> + "Processor Hierarchy Node", /* ACPI_PPTT_TYPE_PROCESSOR */
> + "Cache Type", /* ACPI_PPTT_TYPE_CACHE */
> + "ID", /* ACPI_PMTT_TYPE_ID */
> + "Unknown Subtable Type" /* Reserved */
> +};
> +
> static const char *AcpiDmSratSubnames[] =
> {
> "Processor Local APIC/SAPIC Affinity",
> "Memory Affinity",
> "Processor Local x2APIC Affinity",
> "GICC Affinity",
> + "GIC ITS Affinity", /* Acpi 6.2 */
> "Unknown Subtable Type" /* Reserved */
> };
>
> @@ -452,6 +473,7 @@ const ACPI_DMTABLE_DATA AcpiDmTableData[] =
> {ACPI_SIG_FPDT, NULL, AcpiDmDumpFpdt, DtCompileFpdt, TemplateFpdt},
> {ACPI_SIG_GTDT, NULL, AcpiDmDumpGtdt, DtCompileGtdt, TemplateGtdt},
> {ACPI_SIG_HEST, NULL, AcpiDmDumpHest, DtCompileHest, TemplateHest},
> + {ACPI_SIG_HMAT, NULL, AcpiDmDumpHmat, DtCompileHmat, TemplateHmat},
> {ACPI_SIG_HPET, AcpiDmTableInfoHpet, NULL, NULL, TemplateHpet},
> {ACPI_SIG_IORT, NULL, AcpiDmDumpIort, DtCompileIort, TemplateIort},
> {ACPI_SIG_IVRS, NULL, AcpiDmDumpIvrs, DtCompileIvrs, TemplateIvrs},
> @@ -466,6 +488,7 @@ const ACPI_DMTABLE_DATA AcpiDmTableData[] =
> {ACPI_SIG_NFIT, AcpiDmTableInfoNfit, AcpiDmDumpNfit, DtCompileNfit, TemplateNfit},
> {ACPI_SIG_PCCT, AcpiDmTableInfoPcct, AcpiDmDumpPcct, DtCompilePcct, TemplatePcct},
> {ACPI_SIG_PMTT, NULL, AcpiDmDumpPmtt, DtCompilePmtt, TemplatePmtt},
> + {ACPI_SIG_PPTT, NULL, AcpiDmDumpPptt, DtCompilePptt, TemplatePptt},
> {ACPI_SIG_RASF, AcpiDmTableInfoRasf, NULL, NULL, TemplateRasf},
> {ACPI_SIG_RSDT, NULL, AcpiDmDumpRsdt, DtCompileRsdt, TemplateRsdt},
> {ACPI_SIG_S3PT, NULL, NULL, NULL, TemplateS3pt},
> @@ -485,6 +508,7 @@ const ACPI_DMTABLE_DATA AcpiDmTableData[] =
> {ACPI_SIG_WDDT, AcpiDmTableInfoWddt, NULL, NULL, TemplateWddt},
> {ACPI_SIG_WDRT, AcpiDmTableInfoWdrt, NULL, NULL, TemplateWdrt},
> {ACPI_SIG_WPBT, NULL, AcpiDmDumpWpbt, DtCompileWpbt, TemplateWpbt},
> + {ACPI_SIG_WSMT, AcpiDmTableInfoWsmt, NULL, NULL, TemplateWsmt},
> {ACPI_SIG_XENV, AcpiDmTableInfoXenv, NULL, NULL, TemplateXenv},
> {ACPI_SIG_XSDT, NULL, AcpiDmDumpXsdt, DtCompileXsdt, TemplateXsdt},
> {NULL, NULL, NULL, NULL, NULL}
> @@ -891,6 +915,7 @@ AcpiDmDumpTable (
> case ACPI_DMT_MADT:
> case ACPI_DMT_PCCT:
> case ACPI_DMT_PMTT:
> + case ACPI_DMT_PPTT:
> case ACPI_DMT_SRAT:
> case ACPI_DMT_ASF:
> case ACPI_DMT_HESTNTYP:
> @@ -907,6 +932,7 @@ AcpiDmDumpTable (
> case ACPI_DMT_UINT16:
> case ACPI_DMT_DMAR:
> case ACPI_DMT_HEST:
> + case ACPI_DMT_HMAT:
> case ACPI_DMT_NFIT:
>
> ByteLength = 2;
> @@ -1088,6 +1114,31 @@ AcpiDmDumpTable (
> AcpiOsPrintf ("%1.1X\n", (*Target >> 4) & 0x03);
> break;
>
> + case ACPI_DMT_FLAGS4_0:
> +
> + AcpiOsPrintf ("%1.1X\n", (*(UINT32 *)Target) & 0x0F);
> + break;
> +
> + case ACPI_DMT_FLAGS4_4:
> +
> + AcpiOsPrintf ("%1.1X\n", (*(UINT32 *)Target >> 4) & 0x0F);
> + break;
> +
> + case ACPI_DMT_FLAGS4_8:
> +
> + AcpiOsPrintf ("%1.1X\n", (*(UINT32 *)Target >> 8) & 0x0F);
> + break;
> +
> + case ACPI_DMT_FLAGS4_12:
> +
> + AcpiOsPrintf ("%1.1X\n", (*(UINT32 *)Target >> 12) & 0x0F);
> + break;
> +
> + case ACPI_DMT_FLAGS16_16:
> +
> + AcpiOsPrintf ("%4.4X\n", (*(UINT32 *)Target >> 16) & 0xFFFF);
> + break;
> +
> /* Integer Data Types */
>
> case ACPI_DMT_UINT8:
> @@ -1409,6 +1460,20 @@ AcpiDmDumpTable (
> AcpiDmHestNotifySubnames[Temp8]);
> break;
>
> + case ACPI_DMT_HMAT:
> +
> + /* HMAT subtable types */
> +
> + Temp16 = *Target;
> + if (Temp16 > ACPI_HMAT_TYPE_RESERVED)
> + {
> + Temp16 = ACPI_HMAT_TYPE_RESERVED;
> + }
> +
> + AcpiOsPrintf (UINT16_FORMAT, *Target,
> + AcpiDmHmatSubnames[Temp16]);
> + break;
> +
> case ACPI_DMT_IORTMEM:
>
> AcpiOsPrintf (STRING_FORMAT,
> @@ -1480,6 +1545,20 @@ AcpiDmDumpTable (
> AcpiDmPmttSubnames[Temp8]);
> break;
>
> + case ACPI_DMT_PPTT:
> +
> + /* PPTT subtable types */
> +
> + Temp8 = *Target;
> + if (Temp8 > ACPI_PPTT_TYPE_RESERVED)
> + {
> + Temp8 = ACPI_PPTT_TYPE_RESERVED;
> + }
> +
> + AcpiOsPrintf (UINT8_FORMAT, *Target,
> + AcpiDmPpttSubnames[Temp8]);
> + break;
> +
> case ACPI_DMT_UNICODE:
>
> if (ByteLength == 0)
> diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c
> index e9339a8b..9441ca49 100644
> --- a/src/acpica/source/common/dmtbdump.c
> +++ b/src/acpica/source/common/dmtbdump.c
> @@ -1730,6 +1730,14 @@ AcpiDmDumpHest (
> SubTableLength = sizeof (ACPI_HEST_GENERIC_V2);
> break;
>
> + case ACPI_HEST_TYPE_IA32_DEFERRED_CHECK:
> +
> + InfoTable = AcpiDmTableInfoHest11;
> + SubTableLength = sizeof (ACPI_HEST_IA_DEFERRED_CHECK);
> + BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_DEFERRED_CHECK,
> + SubTable))->NumHardwareBanks;
> + break;
> +
> default:
>
> /* Cannot continue on unknown type - no length */
> @@ -1784,6 +1792,203 @@ AcpiDmDumpHest (
>
> /*******************************************************************************
> *
> + * FUNCTION: AcpiDmDumpHmat
> + *
> + * PARAMETERS: Table - A HMAT table
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Format the contents of a HMAT.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpHmat (
> + ACPI_TABLE_HEADER *Table)
> +{
> + ACPI_STATUS Status;
> + ACPI_HMAT_STRUCTURE *HmatStruct;
> + ACPI_HMAT_LOCALITY *HmatLocality;
> + ACPI_HMAT_CACHE *HmatCache;
> + UINT32 Offset;
> + UINT32 SubTableOffset;
> + UINT32 Length;
> + ACPI_DMTABLE_INFO *InfoTable;
> + UINT32 i, j;
> +
> +
> + /* Main table */
> +
> + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoHmat);
> + if (ACPI_FAILURE (Status))
> + {
> + return;
> + }
> + Offset = sizeof (ACPI_TABLE_HMAT);
> +
> + while (Offset < Table->Length)
> + {
> + AcpiOsPrintf ("\n");
> + SubTableOffset = 0;
> +
> + /* Dump HMAT structure header */
> +
> + HmatStruct = ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, Table, Offset);
> + if (HmatStruct->Length < sizeof (ACPI_HMAT_STRUCTURE))
> + {
> + AcpiOsPrintf ("Invalid HMAT structure length\n");
> + return;
> + }
> + Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct,
> + HmatStruct->Length, AcpiDmTableInfoHmatHdr);
> + if (ACPI_FAILURE (Status))
> + {
> + return;
> + }
> +
> + switch (HmatStruct->Type)
> + {
> + case ACPI_HMAT_TYPE_ADDRESS_RANGE:
> +
> + InfoTable = AcpiDmTableInfoHmat0;
> + Length = sizeof (ACPI_HMAT_ADDRESS_RANGE);
> + break;
> +
> + case ACPI_HMAT_TYPE_LOCALITY:
> +
> + InfoTable = AcpiDmTableInfoHmat1;
> + Length = sizeof (ACPI_HMAT_LOCALITY);
> + break;
> +
> + case ACPI_HMAT_TYPE_CACHE:
> +
> + InfoTable = AcpiDmTableInfoHmat2;
> + Length = sizeof (ACPI_HMAT_CACHE);
> + break;
> +
> + default:
> +
> + AcpiOsPrintf ("\n**** Unknown HMAT structure type 0x%X\n",
> + HmatStruct->Type);
> +
> + /* Attempt to continue */
> +
> + goto NextSubTable;
> + }
> +
> + /* Dump HMAT structure body */
> +
> + if (HmatStruct->Length < Length)
> + {
> + AcpiOsPrintf ("Invalid HMAT structure length\n");
> + return;
> + }
> + Status = AcpiDmDumpTable (Table->Length, Offset, HmatStruct,
> + HmatStruct->Length, InfoTable);
> + if (ACPI_FAILURE (Status))
> + {
> + return;
> + }
> +
> + /* Dump HMAT structure additionals */
> +
> + switch (HmatStruct->Type)
> + {
> + case ACPI_HMAT_TYPE_LOCALITY:
> +
> + HmatLocality = ACPI_CAST_PTR (ACPI_HMAT_LOCALITY, HmatStruct);
> + SubTableOffset = sizeof (ACPI_HMAT_LOCALITY);
> +
> + /* Dump initiator proximity domains */
> +
> + if ((UINT32)(HmatStruct->Length - SubTableOffset) <
> + (UINT32)(HmatLocality->NumberOfInitiatorPDs * 4))
> + {
> + AcpiOsPrintf ("Invalid initiator proximity domain number\n");
> + return;
> + }
> + for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++)
> + {
> + Status = AcpiDmDumpTable (Table->Length, Offset + SubTableOffset,
> + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubTableOffset),
> + 4, AcpiDmTableInfoHmat1a);
> + SubTableOffset += 4;
> + }
> +
> + /* Dump target proximity domains */
> +
> + if ((UINT32)(HmatStruct->Length - SubTableOffset) <
> + (UINT32)(HmatLocality->NumberOfTargetPDs * 4))
> + {
> + AcpiOsPrintf ("Invalid target proximity domain number\n");
> + return;
> + }
> + for (i = 0; i < HmatLocality->NumberOfTargetPDs; i++)
> + {
> + Status = AcpiDmDumpTable (Table->Length, Offset + SubTableOffset,
> + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubTableOffset),
> + 4, AcpiDmTableInfoHmat1b);
> + SubTableOffset += 4;
> + }
> +
> + /* Dump latency/bandwidth entris */
> +
> + if ((UINT32)(HmatStruct->Length - SubTableOffset) <
> + (UINT32)(HmatLocality->NumberOfInitiatorPDs *
> + HmatLocality->NumberOfTargetPDs * 2))
> + {
> + AcpiOsPrintf ("Invalid latency/bandwidth entry number\n");
> + return;
> + }
> + for (i = 0; i < HmatLocality->NumberOfInitiatorPDs; i++)
> + {
> + for (j = 0; j < HmatLocality->NumberOfTargetPDs; j++)
> + {
> + Status = AcpiDmDumpTable (Table->Length, Offset + SubTableOffset,
> + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubTableOffset),
> + 2, AcpiDmTableInfoHmat1c);
> + SubTableOffset += 2;
> + }
> + }
> + break;
> +
> + case ACPI_HMAT_TYPE_CACHE:
> +
> + HmatCache = ACPI_CAST_PTR (ACPI_HMAT_CACHE, HmatStruct);
> + SubTableOffset = sizeof (ACPI_HMAT_CACHE);
> +
> + /* Dump SMBIOS handles */
> +
> + if ((UINT32)(HmatStruct->Length - SubTableOffset) <
> + (UINT32)(HmatCache->NumberOfSMBIOSHandles * 2))
> + {
> + AcpiOsPrintf ("Invalid SMBIOS handle number\n");
> + return;
> + }
> + for (i = 0; i < HmatCache->NumberOfSMBIOSHandles; i++)
> + {
> + Status = AcpiDmDumpTable (Table->Length, Offset + SubTableOffset,
> + ACPI_ADD_PTR (ACPI_HMAT_STRUCTURE, HmatStruct, SubTableOffset),
> + 2, AcpiDmTableInfoHmat2a);
> + SubTableOffset += 2;
> + }
> + break;
> +
> + default:
> +
> + break;
> + }
> +
> +NextSubTable:
> + /* Point to next HMAT structure subtable */
> +
> + Offset += (HmatStruct->Length);
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> * FUNCTION: AcpiDmDumpIort
> *
> * PARAMETERS: Table - A IORT table
> @@ -3010,6 +3215,16 @@ AcpiDmDumpPcct (
> InfoTable = AcpiDmTableInfoPcct2;
> break;
>
> + case ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE:
> +
> + InfoTable = AcpiDmTableInfoPcct3;
> + break;
> +
> + case ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE:
> +
> + InfoTable = AcpiDmTableInfoPcct4;
> + break;
> +
> default:
>
> AcpiOsPrintf (
> @@ -3242,6 +3457,136 @@ AcpiDmDumpPmtt (
>
> /*******************************************************************************
> *
> + * FUNCTION: AcpiDmDumpPptt
> + *
> + * PARAMETERS: Table - A PMTT table
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Format the contents of a PPTT. This table type consists
> + * of an open-ended number of subtables.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmDumpPptt (
> + ACPI_TABLE_HEADER *Table)
> +{
> + ACPI_STATUS Status;
> + ACPI_SUBTABLE_HEADER *SubTable;
> + ACPI_PPTT_PROCESSOR *PpttProcessor;
> + UINT8 Length;
> + UINT8 SubTableOffset;
> + UINT32 Offset = sizeof (ACPI_TABLE_FPDT);
> + ACPI_DMTABLE_INFO *InfoTable;
> + UINT32 i;
> +
> +
> + /* There is no main table (other than the standard ACPI header) */
> +
> + /* Subtables */
> +
> + Offset = sizeof (ACPI_TABLE_HEADER);
> + while (Offset < Table->Length)
> + {
> + AcpiOsPrintf ("\n");
> +
> + /* Common subtable header */
> +
> + SubTable = ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, Table, Offset);
> + if (SubTable->Length < sizeof (ACPI_SUBTABLE_HEADER))
> + {
> + AcpiOsPrintf ("Invalid subtable length\n");
> + return;
> + }
> + Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> + SubTable->Length, AcpiDmTableInfoPpttHdr);
> + if (ACPI_FAILURE (Status))
> + {
> + return;
> + }
> +
> + switch (SubTable->Type)
> + {
> + case ACPI_PPTT_TYPE_PROCESSOR:
> +
> + InfoTable = AcpiDmTableInfoPptt0;
> + Length = sizeof (ACPI_PPTT_PROCESSOR);
> + break;
> +
> + case ACPI_PPTT_TYPE_CACHE:
> +
> + InfoTable = AcpiDmTableInfoPptt1;
> + Length = sizeof (ACPI_PPTT_CACHE);
> + break;
> +
> + case ACPI_PPTT_TYPE_ID:
> +
> + InfoTable = AcpiDmTableInfoPptt2;
> + Length = sizeof (ACPI_PPTT_ID);
> + break;
> +
> + default:
> +
> + AcpiOsPrintf ("\n**** Unknown PPTT subtable type 0x%X\n\n",
> + SubTable->Type);
> +
> + /* Attempt to continue */
> +
> + goto NextSubTable;
> + }
> +
> + if (SubTable->Length < Length)
> + {
> + AcpiOsPrintf ("Invalid subtable length\n");
> + return;
> + }
> + Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
> + SubTable->Length, InfoTable);
> + if (ACPI_FAILURE (Status))
> + {
> + return;
> + }
> + SubTableOffset = Length;
> +
> + switch (SubTable->Type)
> + {
> + case ACPI_PPTT_TYPE_PROCESSOR:
> +
> + PpttProcessor = ACPI_CAST_PTR (ACPI_PPTT_PROCESSOR, SubTable);
> +
> + /* Dump SMBIOS handles */
> +
> + if ((UINT8)(SubTable->Length - SubTableOffset) <
> + (UINT8)(PpttProcessor->NumberOfPrivResources * 4))
> + {
> + AcpiOsPrintf ("Invalid private resource number\n");
> + return;
> + }
> + for (i = 0; i < PpttProcessor->NumberOfPrivResources; i++)
> + {
> + Status = AcpiDmDumpTable (Table->Length, Offset + SubTableOffset,
> + ACPI_ADD_PTR (ACPI_SUBTABLE_HEADER, SubTable, SubTableOffset),
> + 4, AcpiDmTableInfoPptt0a);
> + SubTableOffset += 4;
> + }
> + break;
> +
> + default:
> +
> + break;
> + }
> +
> +NextSubTable:
> + /* Point to next subtable */
> +
> + Offset += SubTable->Length;
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> * FUNCTION: AcpiDmDumpS3pt
> *
> * PARAMETERS: Table - A S3PT table
> @@ -3498,6 +3843,11 @@ AcpiDmDumpSrat (
> InfoTable = AcpiDmTableInfoSrat3;
> break;
>
> + case ACPI_SRAT_TYPE_GIC_ITS_AFFINITY:
> +
> + InfoTable = AcpiDmTableInfoSrat4;
> + break;
> +
> default:
> AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n",
> SubTable->Type);
> diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c
> index 4d272678..692763fd 100644
> --- a/src/acpica/source/common/dmtbinfo.c
> +++ b/src/acpica/source/common/dmtbinfo.c
> @@ -204,6 +204,7 @@
> #define ACPI_GTDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_GTDT,f)
> #define ACPI_HEST_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HEST,f)
> #define ACPI_HPET_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HPET,f)
> +#define ACPI_HMAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_HMAT,f)
> #define ACPI_IORT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_IORT,f)
> #define ACPI_IVRS_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_IVRS,f)
> #define ACPI_MADT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_MADT,f)
> @@ -230,6 +231,7 @@
> #define ACPI_WDDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDDT,f)
> #define ACPI_WDRT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDRT,f)
> #define ACPI_WPBT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WPBT,f)
> +#define ACPI_WSMT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WSMT,f)
> #define ACPI_XENV_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_XENV,f)
>
> /* Subtables */
> @@ -273,8 +275,13 @@
> #define ACPI_HEST8_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_AER_BRIDGE,f)
> #define ACPI_HEST9_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_GENERIC,f)
> #define ACPI_HEST10_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_GENERIC_V2,f)
> +#define ACPI_HEST11_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_DEFERRED_CHECK,f)
> #define ACPI_HESTN_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_NOTIFY,f)
> #define ACPI_HESTB_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HEST_IA_ERROR_BANK,f)
> +#define ACPI_HMAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_ADDRESS_RANGE,f)
> +#define ACPI_HMAT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_LOCALITY,f)
> +#define ACPI_HMAT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_CACHE,f)
> +#define ACPI_HMATH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_HMAT_STRUCTURE,f)
> #define ACPI_IORT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ITS_GROUP,f)
> #define ACPI_IORT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT,f)
> #define ACPI_IORT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ROOT_COMPLEX,f)
> @@ -329,11 +336,17 @@
> #define ACPI_PCCT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_SUBSPACE,f)
> #define ACPI_PCCT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED,f)
> #define ACPI_PCCT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f)
> +#define ACPI_PCCT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_EXT_PCC_MASTER,f)
> +#define ACPI_PCCT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PCCT_EXT_PCC_SLAVE,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)
> #define ACPI_PMTT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_PHYSICAL_COMPONENT,f)
> #define ACPI_PMTTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PMTT_HEADER,f)
> +#define ACPI_PPTTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f)
> +#define ACPI_PPTT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PPTT_PROCESSOR,f)
> +#define ACPI_PPTT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PPTT_CACHE,f)
> +#define ACPI_PPTT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_PPTT_ID,f)
> #define ACPI_S3PTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_FPDT_HEADER,f)
> #define ACPI_S3PT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_S3PT_RESUME,f)
> #define ACPI_S3PT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_S3PT_SUSPEND,f)
> @@ -343,6 +356,7 @@
> #define ACPI_SRAT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_MEM_AFFINITY,f)
> #define ACPI_SRAT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f)
> #define ACPI_SRAT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_GICC_AFFINITY,f)
> +#define ACPI_SRAT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_GIC_ITS_AFFINITY,f)
> #define ACPI_TCPA_CLIENT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_CLIENT,f)
> #define ACPI_TCPA_SERVER_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_SERVER,f)
> #define ACPI_VRTC0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_VRTC_ENTRY,f)
> @@ -355,11 +369,14 @@
>
> /* Flags */
>
> +#define ACPI_BGRT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_BGRT,f,o)
> #define ACPI_DRTM_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_DRTM,f,o)
> #define ACPI_DRTM1a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_DRTM_RESOURCE,f,o)
> #define ACPI_FADT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_FADT,f,o)
> #define ACPI_FACS_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_FACS,f,o)
> #define ACPI_HPET_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_HPET,f,o)
> +#define ACPI_PPTT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PPTT_PROCESSOR,f,o)
> +#define ACPI_PPTT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PPTT_CACHE,f,o)
> #define ACPI_SRAT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_CPU_AFFINITY,f,o)
> #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)
> @@ -367,6 +384,9 @@
> #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_HMAT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HMAT_ADDRESS_RANGE,f,o)
> +#define ACPI_HMAT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HMAT_LOCALITY,f,o)
> +#define ACPI_HMAT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HMAT_CACHE,f,o)
> #define ACPI_IORT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU,f,o)
> #define ACPI_IORT3a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU_GSI,f,o)
> #define ACPI_IORT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU_V3,f,o)
> @@ -392,13 +412,17 @@
> #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_PCCT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_HW_REDUCED_TYPE2,f,o)
> +#define ACPI_PCCT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_EXT_PCC_MASTER,f,o)
> +#define ACPI_PCCT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_PCCT_EXT_PCC_SLAVE,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_WSMT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_WSMT,f,o)
> #define ACPI_EINJ0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o)
> #define ACPI_ERST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_WHEA_HEADER,f,o)
> #define ACPI_HEST0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_IA_MACHINE_CHECK,f,o)
> #define ACPI_HEST1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_IA_CORRECTED,f,o)
> #define ACPI_HEST6_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_AER_ROOT,f,o)
> +#define ACPI_HEST11_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_HEST_IA_DEFERRED_CHECK,f,o)
>
> /*
> * Required terminator for all tables below
> @@ -780,7 +804,10 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoBert[] =
> ACPI_DMTABLE_INFO AcpiDmTableInfoBgrt[] =
> {
> {ACPI_DMT_UINT16, ACPI_BGRT_OFFSET (Version), "Version", 0},
> - {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (Status), "Status", 0},
> + {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (Status), "Status (decoded below)", DT_FLAG},
> + {ACPI_DMT_FLAG0, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Displayed", 0},
> + {ACPI_DMT_FLAGS1, ACPI_BGRT_FLAG_OFFSET (Status, 0), "Orientation Offset", 0},
> +
> {ACPI_DMT_UINT8, ACPI_BGRT_OFFSET (ImageType), "Image Type", 0},
> {ACPI_DMT_UINT64, ACPI_BGRT_OFFSET (ImageAddress), "Image Address", 0},
> {ACPI_DMT_UINT32, ACPI_BGRT_OFFSET (ImageOffsetX), "Image OffsetX", 0},
> @@ -1349,6 +1376,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoHest[] =
> {ACPI_DMT_UINT16, ACPI_HEST6_OFFSET (Aer.Reserved1), "Reserved", 0}, \
> {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Flags), "Flags (decoded below)", DT_FLAG}, \
> {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Firmware First", 0}, \
> + {ACPI_DMT_FLAG0, ACPI_HEST6_FLAG_OFFSET (Aer.Flags,0), "Global", 0}, \
> {ACPI_DMT_UINT8, ACPI_HEST6_OFFSET (Aer.Enabled), "Enabled", 0}, \
> {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.RecordsToPreallocate), "Records To Preallocate", 0}, \
> {ACPI_DMT_UINT32, ACPI_HEST6_OFFSET (Aer.MaxSectionsPerRecord), "Max Sections Per Record", 0}, \
> @@ -1373,6 +1401,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoHest0[] =
> {ACPI_DMT_UINT16, ACPI_HEST0_OFFSET (Reserved1), "Reserved1", 0},
> {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Flags), "Flags (decoded below)", DT_FLAG},
> {ACPI_DMT_FLAG0, ACPI_HEST0_FLAG_OFFSET (Flags,0), "Firmware First", 0},
> + {ACPI_DMT_FLAG2, ACPI_HEST0_FLAG_OFFSET (Flags,0), "GHES Assist", 0},
>
> {ACPI_DMT_UINT8, ACPI_HEST0_OFFSET (Enabled), "Enabled", 0},
> {ACPI_DMT_UINT32, ACPI_HEST0_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0},
> @@ -1392,6 +1421,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoHest1[] =
> {ACPI_DMT_UINT16, ACPI_HEST1_OFFSET (Reserved1), "Reserved1", 0},
> {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Flags), "Flags (decoded below)", DT_FLAG},
> {ACPI_DMT_FLAG0, ACPI_HEST1_FLAG_OFFSET (Flags,0), "Firmware First", 0},
> + {ACPI_DMT_FLAG2, ACPI_HEST1_FLAG_OFFSET (Flags,0), "GHES Assist", 0},
>
> {ACPI_DMT_UINT8, ACPI_HEST1_OFFSET (Enabled), "Enabled", 0},
> {ACPI_DMT_UINT32, ACPI_HEST1_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0},
> @@ -1482,6 +1512,27 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoHest10[] =
> ACPI_DMT_TERMINATOR
> };
>
> +/* 11: IA32 Deferred Machine Check */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoHest11[] =
> +{
> + ACPI_DM_HEST_HEADER,
> + {ACPI_DMT_UINT16, ACPI_HEST11_OFFSET (Reserved1), "Reserved1", 0},
> + {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Flags), "Flags (decoded below)", DT_FLAG},
> + {ACPI_DMT_FLAG0, ACPI_HEST11_FLAG_OFFSET (Flags,0), "Firmware First", 0},
> + {ACPI_DMT_FLAG2, ACPI_HEST11_FLAG_OFFSET (Flags,0), "GHES Assist", 0},
> +
> + {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (Enabled), "Enabled", 0},
> + {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (RecordsToPreallocate), "Records To Preallocate", 0},
> + {ACPI_DMT_UINT32, ACPI_HEST11_OFFSET (MaxSectionsPerRecord), "Max Sections Per Record", 0},
> + {ACPI_DMT_HESTNTFY, ACPI_HEST11_OFFSET (Notify), "Notify", 0},
> + {ACPI_DMT_UINT8, ACPI_HEST11_OFFSET (NumHardwareBanks), "Num Hardware Banks", 0},
> + {ACPI_DMT_UINT24, ACPI_HEST11_OFFSET (Reserved2[0]), "Reserved2", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +/* Notification Structure */
> +
> ACPI_DMTABLE_INFO AcpiDmTableInfoHestNotify[] =
> {
> {ACPI_DMT_HESTNTYP, ACPI_HESTN_OFFSET (Type), "Notify Type", 0},
> @@ -1537,6 +1588,105 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoHpet[] =
>
> /*******************************************************************************
> *
> + * HMAT - Heterogeneous Memory Attributes Table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat[] =
> +{
> + {ACPI_DMT_UINT32, ACPI_HMAT_OFFSET (Reserved), "Reserved", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +/* Common HMAT structure header (one per Subtable) */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoHmatHdr[] =
> +{
> + {ACPI_DMT_HMAT, ACPI_HMATH_OFFSET (Type), "Structure Type", 0},
> + {ACPI_DMT_UINT16, ACPI_HMATH_OFFSET (Reserved), "Reserved", 0},
> + {ACPI_DMT_UINT32, ACPI_HMATH_OFFSET (Length), "Length", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +/* HMAT subtables */
> +
> +/* 0x00: Memory Subsystem Address Range */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat0[] =
> +{
> + {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Flags), "Flags (decoded below)", 0},
> + {ACPI_DMT_FLAG0, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Processor Proximity Domain Valid", 0},
> + {ACPI_DMT_FLAG1, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Memory Proximity Domain Valid", 0},
> + {ACPI_DMT_FLAG2, ACPI_HMAT0_FLAG_OFFSET (Flags,0), "Reservation Hint", 0},
> + {ACPI_DMT_UINT16, ACPI_HMAT0_OFFSET (Reserved1), "Reserved1", 0},
> + {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (ProcessorPD), "Processor Proximity Domain", 0},
> + {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (MemoryPD), "Memory Proximity Domain", 0},
> + {ACPI_DMT_UINT32, ACPI_HMAT0_OFFSET (Reserved2), "Reserved2", 0},
> + {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (PhysicalAddressBase), "Physical Address Range Base", 0},
> + {ACPI_DMT_UINT64, ACPI_HMAT0_OFFSET (PhysicalAddressLength), "Physical Address Range Size", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +/* 0x01: System Locality Latency and Bandwidth Information */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1[] =
> +{
> + {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (Flags), "Flags (decoded below)", 0},
> + {ACPI_DMT_FLAGS4_0, ACPI_HMAT1_FLAG_OFFSET (Flags,0), "Memory Hierarchy", 0},
> + {ACPI_DMT_UINT8, ACPI_HMAT1_OFFSET (DataType), "Data Type", 0},
> + {ACPI_DMT_UINT16, ACPI_HMAT1_OFFSET (Reserved1), "Reserved1", 0},
> + {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfInitiatorPDs), "Initiator Proximity Domains #", 0},
> + {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (NumberOfTargetPDs), "Target Proximity Domains #", 0},
> + {ACPI_DMT_UINT32, ACPI_HMAT1_OFFSET (Reserved2), "Reserved2", 0},
> + {ACPI_DMT_UINT64, ACPI_HMAT1_OFFSET (EntryBaseUnit), "Entry Base Unit", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1a[] =
> +{
> + {ACPI_DMT_UINT32, 0, "Initiator Proximity Domain List", DT_OPTIONAL},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1b[] =
> +{
> + {ACPI_DMT_UINT32, 0, "Target Proximity Domain List", DT_OPTIONAL},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1c[] =
> +{
> + {ACPI_DMT_UINT16, 0, "Entry", DT_OPTIONAL},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +/* 0x02: Memory Side Cache Information */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2[] =
> +{
> + {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (MemoryPD), "Memory Proximity Domain", 0},
> + {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (Reserved1), "Reserved1", 0},
> + {ACPI_DMT_UINT64, ACPI_HMAT2_OFFSET (CacheSize), "Memory Side Cache Size", 0},
> + {ACPI_DMT_UINT32, ACPI_HMAT2_OFFSET (CacheAttributes), "Cache Attributes (decoded below)", 0},
> + {ACPI_DMT_FLAGS4_0, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Total Cache Levels", 0},
> + {ACPI_DMT_FLAGS4_4, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Level", 0},
> + {ACPI_DMT_FLAGS4_8, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Associativity", 0},
> + {ACPI_DMT_FLAGS4_12, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Write Policy", 0},
> + {ACPI_DMT_FLAGS16_16, ACPI_HMAT2_FLAG_OFFSET (CacheAttributes,0), "Cache Line Size", 0},
> + {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (Reserved2), "Reserved2", 0},
> + {ACPI_DMT_UINT16, ACPI_HMAT2_OFFSET (NumberOfSMBIOSHandles), "SMBIOS Handle #", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2a[] =
> +{
> + {ACPI_DMT_UINT16, 0, "SMBIOS Handle", DT_OPTIONAL},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
> * IORT - IO Remapping Table
> *
> ******************************************************************************/
> @@ -2406,7 +2556,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNfit6a[] =
> ACPI_DMTABLE_INFO AcpiDmTableInfoPcct[] =
> {
> {ACPI_DMT_UINT32, ACPI_PCCT_OFFSET (Flags), "Flags (decoded below)", DT_FLAG},
> - {ACPI_DMT_FLAG0, ACPI_PCCT_FLAG_OFFSET (Flags,0), "Doorbell", 0},
> + {ACPI_DMT_FLAG0, ACPI_PCCT_FLAG_OFFSET (Flags,0), "Platform", 0},
> {ACPI_DMT_UINT64, ACPI_PCCT_OFFSET (Reserved), "Reserved", 0},
> ACPI_DMT_TERMINATOR
> };
> @@ -2440,7 +2590,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[] =
>
> ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[] =
> {
> - {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (DoorbellInterrupt), "Doorbell Interrupt", 0},
> + {ACPI_DMT_UINT32, ACPI_PCCT1_OFFSET (PlatformInterrupt), "Platform 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},
> @@ -2460,7 +2610,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[] =
>
> ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[] =
> {
> - {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (DoorbellInterrupt), "Doorbell Interrupt", 0},
> + {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (PlatformInterrupt), "Platform Interrupt", 0},
> {ACPI_DMT_UINT8, ACPI_PCCT2_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG},
> {ACPI_DMT_FLAG0, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Polarity", 0},
> {ACPI_DMT_FLAG1, ACPI_PCCT2_FLAG_OFFSET (Flags,0), "Mode", 0},
> @@ -2473,12 +2623,73 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[] =
> {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (Latency), "Command Latency", 0},
> {ACPI_DMT_UINT32, ACPI_PCCT2_OFFSET (MaxAccessRate), "Maximum Access Rate", 0},
> {ACPI_DMT_UINT16, ACPI_PCCT2_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0},
> - {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (DoorbellAckRegister), "Doorbell ACK Register", 0},
> + {ACPI_DMT_GAS, ACPI_PCCT2_OFFSET (PlatformAckRegister), "Platform ACK Register", 0},
> {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0},
> {ACPI_DMT_UINT64, ACPI_PCCT2_OFFSET (AckWriteMask), "ACK Write Mask", 0},
> ACPI_DMT_TERMINATOR
> };
>
> +/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct3[] =
> +{
> + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (PlatformInterrupt), "Platform Interrupt", 0},
> + {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG},
> + {ACPI_DMT_FLAG0, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Polarity", 0},
> + {ACPI_DMT_FLAG1, ACPI_PCCT3_FLAG_OFFSET (Flags,0), "Mode", 0},
> + {ACPI_DMT_UINT8, ACPI_PCCT3_OFFSET (Reserved1), "Reserved", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (BaseAddress), "Base Address", 0},
> + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Length), "Address Length", 0},
> + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (DoorbellRegister), "Doorbell Register", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (PreserveMask), "Preserve Mask", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (WriteMask), "Write Mask", 0},
> + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (Latency), "Command Latency", 0},
> + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MaxAccessRate), "Maximum Access Rate", 0},
> + {ACPI_DMT_UINT32, ACPI_PCCT3_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0},
> + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (PlatformAckRegister), "Platform ACK Register", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (AckSetMask), "ACK Set Mask", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (Reserved2), "Reserved", 0},
> + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdCompleteRegister), "Command Complete Register", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0},
> + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (CmdUpdateRegister), "Command Update Register", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0},
> + {ACPI_DMT_GAS, ACPI_PCCT3_OFFSET (ErrorStatusRegister), "Error Status Register", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT3_OFFSET (ErrorStatusMask), "Error Status Mask", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoPcct4[] =
> +{
> + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (PlatformInterrupt), "Platform Interrupt", 0},
> + {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Flags), "Flags (Decoded Below)", DT_FLAG},
> + {ACPI_DMT_FLAG0, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Polarity", 0},
> + {ACPI_DMT_FLAG1, ACPI_PCCT4_FLAG_OFFSET (Flags,0), "Mode", 0},
> + {ACPI_DMT_UINT8, ACPI_PCCT4_OFFSET (Reserved1), "Reserved", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (BaseAddress), "Base Address", 0},
> + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Length), "Address Length", 0},
> + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (DoorbellRegister), "Doorbell Register", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (PreserveMask), "Preserve Mask", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (WriteMask), "Write Mask", 0},
> + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (Latency), "Command Latency", 0},
> + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MaxAccessRate), "Maximum Access Rate", 0},
> + {ACPI_DMT_UINT32, ACPI_PCCT4_OFFSET (MinTurnaroundTime), "Minimum Turnaround Time", 0},
> + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (PlatformAckRegister), "Platform ACK Register", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckPreserveMask), "ACK Preserve Mask", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (AckSetMask), "ACK Set Mask", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (Reserved2), "Reserved", 0},
> + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdCompleteRegister), "Command Complete Register", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdCompleteMask), "Command Complete Check Mask", 0},
> + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (CmdUpdateRegister), "Command Update Register", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdatePreserveMask), "Command Update Preserve Mask", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (CmdUpdateSetMask), "Command Update Set Mask", 0},
> + {ACPI_DMT_GAS, ACPI_PCCT4_OFFSET (ErrorStatusRegister), "Error Status Register", 0},
> + {ACPI_DMT_UINT64, ACPI_PCCT4_OFFSET (ErrorStatusMask), "Error Status Mask", 0},
> + ACPI_DMT_TERMINATOR
> +};
>
> /*******************************************************************************
> *
> @@ -2555,6 +2766,82 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoPmtt2[] =
>
> /*******************************************************************************
> *
> + * PPTT - Processor Properties Topology Table (ACPI 6.2)
> + *
> + ******************************************************************************/
> +
> +/* Main table consists of only the standard ACPI header - subtables follow */
> +
> +/* Common Subtable header (one per Subtable) */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoPpttHdr[] =
> +{
> + {ACPI_DMT_PPTT, ACPI_PPTTH_OFFSET (Type), "Subtable Type", 0},
> + {ACPI_DMT_UINT8, ACPI_PPTTH_OFFSET (Length), "Length", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +/* 0: Processor hierarchy node */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0[] =
> +{
> + {ACPI_DMT_UINT16, ACPI_PPTT0_OFFSET (Reserved), "Reserved", 0},
> + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Flags), "Flags", 0},
> + {ACPI_DMT_FLAG0, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "Physical package", 0},
> + {ACPI_DMT_FLAG1, ACPI_PPTT0_FLAG_OFFSET (Flags,0), "ACPI Processor ID valid", 0},
> + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (Parent), "Parent", 0},
> + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (AcpiProcessorId), "ACPI Processor ID", 0},
> + {ACPI_DMT_UINT32, ACPI_PPTT0_OFFSET (NumberOfPrivResources), "Private Resource Number", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0a[] =
> +{
> + {ACPI_DMT_UINT32, 0, "Private Resource", DT_OPTIONAL},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +/* 1: Cache type */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1[] =
> +{
> + {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (Reserved), "Reserved", 0},
> + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Flags), "Flags", 0},
> + {ACPI_DMT_FLAG0, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Size valid", 0},
> + {ACPI_DMT_FLAG1, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Number of Sets valid", 0},
> + {ACPI_DMT_FLAG2, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Associativity valid", 0},
> + {ACPI_DMT_FLAG3, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Allocation Type valid", 0},
> + {ACPI_DMT_FLAG4, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Cache Type valid", 0},
> + {ACPI_DMT_FLAG5, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Write Policy valid", 0},
> + {ACPI_DMT_FLAG5, ACPI_PPTT1_FLAG_OFFSET (Flags,0), "Line Size valid", 0},
> + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NextLevelOfCache), "Next Level of Cache", 0},
> + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (Size), "Size", 0},
> + {ACPI_DMT_UINT32, ACPI_PPTT1_OFFSET (NumberOfSets), "Number of Sets", 0},
> + {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Associativity), "Associativity", 0},
> + {ACPI_DMT_UINT8, ACPI_PPTT1_OFFSET (Attributes), "Attributes", 0},
> + {ACPI_DMT_FLAGS0, ACPI_PPTT1_OFFSET (Attributes), "Allocation Type", 0},
> + {ACPI_DMT_FLAGS2, ACPI_PPTT1_OFFSET (Attributes), "Cache Type", 0},
> + {ACPI_DMT_FLAG4, ACPI_PPTT1_OFFSET (Attributes), "Write Policy", 0},
> + {ACPI_DMT_UINT16, ACPI_PPTT1_OFFSET (LineSize), "Line Size", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +/* 2: ID */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoPptt2[] =
> +{
> + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (Reserved), "Reserved", 0},
> + {ACPI_DMT_UINT32, ACPI_PPTT2_OFFSET (VendorId), "VENDOR_ID", 0},
> + {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level1Id), "LEVEL_1_ID", 0},
> + {ACPI_DMT_UINT64, ACPI_PPTT2_OFFSET (Level2Id), "LEVEL_2_ID", 0},
> + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MajorRev), "MAJOR_REV", 0},
> + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (MinorRev), "MINOR_REV", 0},
> + {ACPI_DMT_UINT16, ACPI_PPTT2_OFFSET (SpinRev), "SPIN_REV", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +/*******************************************************************************
> + *
> * RASF - RAS Feature table
> *
> ******************************************************************************/
> @@ -2779,7 +3066,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[] =
> ACPI_DMT_TERMINATOR
> };
>
> -/* : GICC Affinity (ACPI 5.1) */
> +/* 3: GICC Affinity (ACPI 5.1) */
>
> ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[] =
> {
> @@ -2791,6 +3078,16 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[] =
> ACPI_DMT_TERMINATOR
> };
>
> +/* 4: GCC ITS Affinity (ACPI 6.2) */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat4[] =
> +{
> + {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ProximityDomain), "Proximity Domain", 0},
> + {ACPI_DMT_UINT16, ACPI_SRAT4_OFFSET (Reserved), "Reserved", 0},
> + {ACPI_DMT_UINT32, ACPI_SRAT4_OFFSET (ItsId), "ITS ID", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
>
> /*******************************************************************************
> *
> @@ -3058,6 +3355,22 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[] =
>
> /*******************************************************************************
> *
> + * WSMT - Windows SMM Security Migrations Table
> + *
> + ******************************************************************************/
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoWsmt[] =
> +{
> + {ACPI_DMT_UINT32, ACPI_WSMT_OFFSET (ProtectionFlags), "Protection Flags", 0},
> + {ACPI_DMT_FLAG0, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "FIXED_COMM_BUFFERS", 0},
> + {ACPI_DMT_FLAG1, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "COMM_BUFFER_NESTED_PTR_PROTECTION", 0},
> + {ACPI_DMT_FLAG2, ACPI_WSMT_FLAG_OFFSET (ProtectionFlags,0), "SYSTEM_RESOURCE_PROTECTION", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +
> +/*******************************************************************************
> + *
> * XENV - Xen Environment table (ACPI 6.0)
> *
> ******************************************************************************/
> diff --git a/src/acpica/source/compiler/Makefile.am b/src/acpica/source/compiler/Makefile.am
> index ba5fe773..382fc07d 100644
> --- a/src/acpica/source/compiler/Makefile.am
> +++ b/src/acpica/source/compiler/Makefile.am
> @@ -235,6 +235,7 @@ libfwtsiasl_la_SOURCES = \
> ../common/cmfsize.c \
> ../common/dmextern.c \
> ../common/dmrestag.c \
> + ../common/dmswitch.c \
> ../common/dmtable.c \
> ../common/dmtables.c \
> ../common/dmtbinfo.c \
> diff --git a/src/acpica/source/compiler/aslascii.c b/src/acpica/source/compiler/aslascii.c
> index afaee56f..18bcd28f 100644
> --- a/src/acpica/source/compiler/aslascii.c
> +++ b/src/acpica/source/compiler/aslascii.c
> @@ -194,7 +194,7 @@ FlIsFileAsciiSource (
> BOOLEAN DisplayErrors)
> {
> UINT8 Byte;
> - ACPI_SIZE BadBytes = 0;
> + UINT32 BadBytes = 0;
> BOOLEAN OpeningComment = FALSE;
> ASL_FILE_STATUS Status;
> FILE *Handle;
> @@ -285,6 +285,9 @@ FlIsFileAsciiSource (
>
> if (BadBytes)
> {
> + fprintf (stderr,
> + "File appears to be binary: found %u non-ASCII characters, disassembling\n",
> + BadBytes);
> if (DisplayErrors)
> {
> AcpiOsPrintf (
> diff --git a/src/acpica/source/compiler/aslcompile.c b/src/acpica/source/compiler/aslcompile.c
> index 9c2a244a..181fc364 100644
> --- a/src/acpica/source/compiler/aslcompile.c
> +++ b/src/acpica/source/compiler/aslcompile.c
> @@ -568,7 +568,7 @@ AslCompilerSignon (
>
> /* Running compiler or disassembler? */
>
> - if (Gbl_DisasmFlag)
> + if (AcpiGbl_DisasmFlag)
> {
> UtilityName = AML_DISASSEMBLER_NAME;
> }
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index 4c6ba020..07a7d512 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -1398,6 +1398,26 @@ ASL_RESOURCE_NODE *
> RsDoUartSerialBusDescriptor (
> ASL_RESOURCE_INFO *Info);
>
> +ASL_RESOURCE_NODE *
> +RsDoPinFunctionDescriptor (
> + ASL_RESOURCE_INFO *Info);
> +
> +ASL_RESOURCE_NODE *
> +RsDoPinConfigDescriptor (
> + ASL_RESOURCE_INFO *Info);
> +
> +ASL_RESOURCE_NODE *
> +RsDoPinGroupDescriptor (
> + ASL_RESOURCE_INFO *Info);
> +
> +ASL_RESOURCE_NODE *
> +RsDoPinGroupFunctionDescriptor (
> + ASL_RESOURCE_INFO *Info);
> +
> +ASL_RESOURCE_NODE *
> +RsDoPinGroupConfigDescriptor (
> + ASL_RESOURCE_INFO *Info);
> +
> /*
> * aslrestype2d - DWord address descriptors
> */
> diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l
> index a9d595ab..4b36058b 100644
> --- a/src/acpica/source/compiler/aslcompiler.l
> +++ b/src/acpica/source/compiler/aslcompiler.l
> @@ -455,6 +455,11 @@ NamePathTail [.]{NameSeg}
> "Memory24" { count (1); return (PARSEOP_MEMORY24); }
> "Memory32" { count (1); return (PARSEOP_MEMORY32); }
> "Memory32Fixed" { count (1); return (PARSEOP_MEMORY32FIXED); }
> +"PinConfig" { count (1); return (PARSEOP_PINCONFIG); }
> +"PinFunction" { count (1); return (PARSEOP_PINFUNCTION); }
> +"PinGroup" { count (1); return (PARSEOP_PINGROUP); }
> +"PinGroupConfig" { count (1); return (PARSEOP_PINGROUPCONFIG); }
> +"PinGroupFunction" { count (1); return (PARSEOP_PINGROUPFUNCTION); }
> "QWordIO" { count (1); return (PARSEOP_QWORDIO); }
> "QWordMemory" { count (1); return (PARSEOP_QWORDMEMORY); }
> "QWordSpace" { count (1); return (PARSEOP_QWORDSPACE); }
> diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h
> index 3333562b..2b6d73d6 100644
> --- a/src/acpica/source/compiler/asldefine.h
> +++ b/src/acpica/source/compiler/asldefine.h
> @@ -161,8 +161,8 @@
> #define ASL_INVOCATION_NAME "iasl"
> #define ASL_CREATOR_ID "INTL"
> #define ASL_DEFINE "__IASL__"
> -
> -#define ASL_COMPLIANCE "Supports ACPI Specification Revision 6.1"
> +#define ASL_PREFIX "iASL: "
> +#define ASL_COMPLIANCE "Supports ACPI Specification Revision 6.2"
>
>
> /* Configuration constants */
> diff --git a/src/acpica/source/compiler/aslexternal.c b/src/acpica/source/compiler/aslexternal.c
> index 20fcc9ec..67a95e56 100644
> --- a/src/acpica/source/compiler/aslexternal.c
> +++ b/src/acpica/source/compiler/aslexternal.c
> @@ -435,6 +435,7 @@ ExMoveExternals (
> ACPI_PARSE_OBJECT *Next;
> char *ExternalName;
> ACPI_OBJECT_TYPE ObjType;
> + ACPI_STATUS Status;
> UINT32 i;
>
>
> @@ -473,8 +474,16 @@ ExMoveExternals (
> {
> Next->Asl.ParseOpcode = PARSEOP_NAMESTRING;
> }
> +
> Next->Asl.ExternalName = ExternalName;
> - UtInternalizeName (ExternalName, &Next->Asl.Value.String);
> + Status = UtInternalizeName (ExternalName, &Next->Asl.Value.String);
> + if (ACPI_FAILURE (Status))
> + {
> + AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL,
> + Next, "Could not internalize namestring");
> + return;
> + }
> +
> Next->Asl.AmlLength = strlen (Next->Asl.Value.String);
>
> Next = Next->Asl.Next;
> diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h
> index a4955527..16b798c1 100644
> --- a/src/acpica/source/compiler/aslglobal.h
> +++ b/src/acpica/source/compiler/aslglobal.h
> @@ -275,7 +275,6 @@ ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_VerboseErrors, TRUE);
> ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_NoErrors, FALSE);
> ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_WarningsAsErrors, FALSE);
> ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_NoResourceChecking, FALSE);
> -ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_DisasmFlag, FALSE);
> ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_IntegerOptimizationFlag, TRUE);
> ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_ReferenceOptimizationFlag, TRUE);
> ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_DisplayRemarks, TRUE);
> diff --git a/src/acpica/source/compiler/aslhelpers.y b/src/acpica/source/compiler/aslhelpers.y
> index f9965060..f200bf2b 100644
> --- a/src/acpica/source/compiler/aslhelpers.y
> +++ b/src/acpica/source/compiler/aslhelpers.y
> @@ -330,6 +330,15 @@ OptionalResourceType
> | ',' ResourceTypeKeyword {$$ = $2;}
> ;
>
> +/* Same as above except default is producer */
> +OptionalProducerResourceType
> + : {$$ = TrCreateLeafNode (
> + PARSEOP_RESOURCETYPE_PRODUCER);}
> + | ',' {$$ = TrCreateLeafNode (
> + PARSEOP_RESOURCETYPE_PRODUCER);}
> + | ',' ResourceTypeKeyword {$$ = $2;}
> + ;
> +
> OptionalSlaveMode
> : ',' {$$ = NULL;}
> | ',' SlaveModeKeyword {$$ = $2;}
> diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c
> index dfe4ca4d..bd564b33 100644
> --- a/src/acpica/source/compiler/aslload.c
> +++ b/src/acpica/source/compiler/aslload.c
> @@ -315,13 +315,20 @@ LdLoadFieldElements (
> Child->Asl.Value.String);
> return (Status);
> }
> -
> - /*
> - * The name already exists in this scope
> - * But continue processing the elements
> - */
> - AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child,
> - Child->Asl.Value.String);
> + else if (Status == AE_ALREADY_EXISTS &&
> + (Node->Flags & ANOBJ_IS_EXTERNAL))
> + {
> + Node->Type = (UINT8) ACPI_TYPE_LOCAL_REGION_FIELD;
> + }
> + else
> + {
> + /*
> + * The name already exists in this scope
> + * But continue processing the elements
> + */
> + AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child,
> + Child->Asl.Value.String);
> + }
> }
> else
> {
> @@ -458,12 +465,30 @@ LdNamespace1Begin (
> ACPI_PARSE_OBJECT *Arg;
> UINT32 i;
> BOOLEAN ForceNewScope = FALSE;
> + ACPI_OWNER_ID OwnerId = 0;
>
>
> ACPI_FUNCTION_NAME (LdNamespace1Begin);
> ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op %p [%s]\n",
> Op, Op->Asl.ParseOpName));
>
> + if (Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK)
> + {
> + /*
> + * Allocate an OwnerId for this block. This helps identify the owners
> + * of each namespace node. This is used in determining whether if
> + * certain external declarations cause redefinition errors.
> + */
> + Status = AcpiUtAllocateOwnerId (&OwnerId);
> + WalkState->OwnerId = OwnerId;
> + if (ACPI_FAILURE (Status))
> + {
> + AslCoreSubsystemError (Op, Status,
> + "Failure to allocate owner ID to this definition block.", FALSE);
> + return_ACPI_STATUS (Status);
> + }
> + }
> +
> /*
> * We are only interested in opcodes that have an associated name
> * (or multiple names)
> @@ -778,7 +803,9 @@ LdNamespace1Begin (
> {
> /*
> * Allow one create on an object or segment that was
> - * previously declared External
> + * previously declared External only if WalkState->OwnerId and
> + * Node->OwnerId are found in different tables (meaning that
> + * they have differnt OwnerIds).
> */
> Node->Flags &= ~ANOBJ_IS_EXTERNAL;
> Node->Type = (UINT8) ObjectType;
> @@ -795,6 +822,12 @@ LdNamespace1Begin (
> }
>
> Status = AE_OK;
> +
> + if (Node->OwnerId == WalkState->OwnerId)
> + {
> + AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
> + Op->Asl.ExternalName);
> + }
> }
> else if (!(Node->Flags & ANOBJ_IS_EXTERNAL) &&
> (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL))
> @@ -802,15 +835,52 @@ LdNamespace1Begin (
> /*
> * Allow externals in same scope as the definition of the
> * actual object. Similar to C. Allows multiple definition
> - * blocks that refer to each other in the same file.
> + * blocks that refer to each other in the same file. However,
> + * do not allow name declaration and an external declaration
> + * within the same table. This is considered a re-declaration.
> */
> Status = AE_OK;
> +
> + if (Node->OwnerId == WalkState->OwnerId)
> + {
> + AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
> + Op->Asl.ExternalName);
> + }
> }
> else if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
> (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) &&
> (ObjectType == ACPI_TYPE_ANY))
> {
> - /* Allow update of externals of unknown type. */
> + /*
> + * Allow update of externals of unknown type.
> + * In the case that multiple definition blocks are being
> + * parsed, updating the OwnerId allows enables subsequent calls
> + * of this method to understand which table the most recent
> + * external declaration was seen. Without this OwnerId update,
> + * code like the following is allowed to compile:
> + *
> + * DefinitionBlock("externtest.aml", "DSDT", 0x02, "Intel", "Many", 0x00000001)
> + * {
> + * External(ERRS,methodobj)
> + * Method (MAIN)
> + * {
> + * Name(NUM2, 0)
> + * ERRS(1,2,3)
> + * }
> + * }
> + *
> + * DefinitionBlock("externtest.aml", "SSDT", 0x02, "Intel", "Many", 0x00000001)
> + * {
> + * if (0)
> + * {
> + * External(ERRS,methodobj)
> + * }
> + * Method (ERRS,3)
> + * {}
> + *
> + * }
> + */
> + Node->OwnerId = WalkState->OwnerId;
>
> if (AcpiNsOpensScope (ActualObjectType))
> {
> diff --git a/src/acpica/source/compiler/aslmain.c b/src/acpica/source/compiler/aslmain.c
> index a282b0c4..10251fb2 100644
> --- a/src/acpica/source/compiler/aslmain.c
> +++ b/src/acpica/source/compiler/aslmain.c
> @@ -207,6 +207,9 @@ main (
> int ReturnStatus = 0;
>
>
> + signal (SIGINT, AslSignalHandler);
> + signal (SIGSEGV, AslSignalHandler);
> +
> /*
> * Big-endian machines are not currently supported. ACPI tables must
> * be little-endian, and support for big-endian machines needs to
> @@ -224,7 +227,6 @@ main (
>
> /* Initialize preprocessor and compiler before command line processing */
>
> - signal (SIGINT, AslSignalHandler);
> AcpiGbl_ExternalFileList = NULL;
> AcpiDbgLevel = 0;
> PrInitializePreprocessor ();
> @@ -254,6 +256,7 @@ main (
> }
> }
>
> +
> /* Process each pathname/filename in the list, with possible wildcards */
>
> while (argv[Index2])
> @@ -301,8 +304,10 @@ CleanupAndExit:
> *
> * RETURN: None
> *
> - * DESCRIPTION: Control-C handler. Delete any intermediate files and any
> - * output files that may be left in an indeterminate state.
> + * DESCRIPTION: Signal interrupt handler. Delete any intermediate files and
> + * any output files that may be left in an indeterminate state.
> + * Currently handles SIGINT (control-c) and SIGSEGV (segmentation
> + * fault).
> *
> *****************************************************************************/
>
> @@ -314,11 +319,34 @@ AslSignalHandler (
>
>
> signal (Sig, SIG_IGN);
> - printf ("Aborting\n\n");
> + fflush (stdout);
> + fflush (stderr);
> +
> + switch (Sig)
> + {
> + case SIGINT:
> +
> + printf ("\n" ASL_PREFIX "<Control-C>\n");
> + break;
>
> - /* Close all open files */
> + case SIGSEGV:
>
> - Gbl_Files[ASL_FILE_PREPROCESSOR].Handle = NULL; /* the .pre file is same as source file */
> + /* Even on a seg fault, we will try to delete any partial files */
> +
> + printf (ASL_PREFIX "Segmentation Fault\n");
> + break;
> +
> + default:
> +
> + printf (ASL_PREFIX "Unknown interrupt signal (%u), ignoring\n", Sig);
> + return;
> + }
> +
> + /*
> + * Close all open files
> + * Note: the .pre file is the same as the input source file
> + */
> + Gbl_Files[ASL_FILE_PREPROCESSOR].Handle = NULL;
>
> for (i = ASL_FILE_INPUT; i < ASL_MAX_FILE_TYPE; i++)
> {
> @@ -332,6 +360,7 @@ AslSignalHandler (
> FlDeleteFile (i);
> }
>
> + printf (ASL_PREFIX "Terminating\n");
> exit (0);
> }
>
> diff --git a/src/acpica/source/compiler/aslmap.c b/src/acpica/source/compiler/aslmap.c
> index f3c04797..aed87661 100644
> --- a/src/acpica/source/compiler/aslmap.c
> +++ b/src/acpica/source/compiler/aslmap.c
> @@ -451,6 +451,11 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
> /* PARITYTYPE_NONE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
> /* PARITYTYPE_ODD */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0),
> /* PARITYTYPE_SPACE */ OP_TABLE_ENTRY (AML_BYTE_OP, 4, 0, 0),
> +/* PINCONFIG */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
> +/* PINFUNCTION */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
> +/* PINGROUP */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
> +/* PINGROUPCONFIG */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
> +/* PINGROUPFUNCTION */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
> /* PIN_NOPULL */ OP_TABLE_ENTRY (AML_BYTE_OP, 3, 0, 0),
> /* PIN_PULLDEFAULT */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
> /* PIN_PULLDOWN */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0),
> diff --git a/src/acpica/source/compiler/asloffset.c b/src/acpica/source/compiler/asloffset.c
> index e3fdf1c9..0964d4fe 100644
> --- a/src/acpica/source/compiler/asloffset.c
> +++ b/src/acpica/source/compiler/asloffset.c
> @@ -250,7 +250,6 @@ LsAmlOffsetWalk (
> }
>
> Length = Op->Asl.FinalAmlLength;
> - NamepathOffset = Gbl_CurrentAmlOffset + Length;
>
> /* Get to the NameSeg/NamePath Op (and length of the name) */
>
> diff --git a/src/acpica/source/compiler/aslparser.y b/src/acpica/source/compiler/aslparser.y
> index 72043ae0..6426cebe 100644
> --- a/src/acpica/source/compiler/aslparser.y
> +++ b/src/acpica/source/compiler/aslparser.y
> @@ -208,7 +208,7 @@ AslLocalAllocate (
> * These shift/reduce conflicts are expected. There should be zero
> * reduce/reduce conflicts.
> */
> -%expect 102
> +%expect 118
>
> /*! [Begin] no source code translation */
>
> diff --git a/src/acpica/source/compiler/aslresource.c b/src/acpica/source/compiler/aslresource.c
> index f12795a5..42931452 100644
> --- a/src/acpica/source/compiler/aslresource.c
> +++ b/src/acpica/source/compiler/aslresource.c
> @@ -990,6 +990,31 @@ RsDoOneResourceDescriptor (
> Rnode = RsDoUartSerialBusDescriptor (Info);
> break;
>
> + case PARSEOP_PINCONFIG:
> +
> + Rnode = RsDoPinConfigDescriptor (Info);
> + break;
> +
> + case PARSEOP_PINFUNCTION:
> +
> + Rnode = RsDoPinFunctionDescriptor (Info);
> + break;
> +
> + case PARSEOP_PINGROUP:
> +
> + Rnode = RsDoPinGroupDescriptor (Info);
> + break;
> +
> + case PARSEOP_PINGROUPFUNCTION:
> +
> + Rnode = RsDoPinGroupFunctionDescriptor (Info);
> + break;
> +
> + case PARSEOP_PINGROUPCONFIG:
> +
> + Rnode = RsDoPinGroupConfigDescriptor (Info);
> + break;
> +
> case PARSEOP_DEFAULT_ARG:
>
> /* Just ignore any of these, they are used as fillers/placeholders */
> diff --git a/src/acpica/source/compiler/aslresources.y b/src/acpica/source/compiler/aslresources.y
> index d14fdd45..fc70940c 100644
> --- a/src/acpica/source/compiler/aslresources.y
> +++ b/src/acpica/source/compiler/aslresources.y
> @@ -211,6 +211,11 @@ ResourceMacroTerm
> | Memory24Term {}
> | Memory32FixedTerm {}
> | Memory32Term {}
> + | PinConfigTerm {}
> + | PinFunctionTerm {}
> + | PinGroupTerm {}
> + | PinGroupConfigTerm {}
> + | PinGroupFunctionTerm {}
> | QWordIOTerm {}
> | QWordMemoryTerm {}
> | QWordSpaceTerm {}
> @@ -605,6 +610,95 @@ Memory32Term
> error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;}
> ;
>
> +PinConfigTerm
> + : PARSEOP_PINCONFIG
> + PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafNode (PARSEOP_PINCONFIG);}
> + OptionalShareType_First /* 04: SharedType */
> + ',' ByteConstExpr /* 06: PinConfigType */
> + ',' DWordConstExpr /* 08: PinConfigValue */
> + ',' StringData /* 10: ResourceSource */
> + OptionalByteConstExpr /* 11: ResourceSourceIndex */
> + OptionalResourceType /* 12: ResourceType */
> + OptionalNameString /* 13: DescriptorName */
> + OptionalBuffer_Last /* 14: VendorData */
> + PARSEOP_CLOSE_PAREN '{'
> + DWordList '}' {$$ = TrLinkChildren ($<n>3,9,
> + $4,$6,$8,$10,$11,$12,$13,$14,$17);}
> + | PARSEOP_PINCONFIG
> + PARSEOP_OPEN_PAREN
> + error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;}
> + ;
> +
> +PinFunctionTerm
> + : PARSEOP_PINFUNCTION
> + PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafNode (PARSEOP_PINFUNCTION);}
> + OptionalShareType_First /* 04: SharedType */
> + ',' PinConfigByte /* 06: PinConfig */
> + ',' WordConstExpr /* 08: FunctionNumber */
> + ',' StringData /* 10: ResourceSource */
> + OptionalByteConstExpr /* 11: ResourceSourceIndex */
> + OptionalResourceType /* 12: ResourceType */
> + OptionalNameString /* 13: DescriptorName */
> + OptionalBuffer_Last /* 14: VendorData */
> + PARSEOP_CLOSE_PAREN '{'
> + DWordList '}' {$$ = TrLinkChildren ($<n>3,9,
> + $4,$6,$8,$10,$11,$12,$13,$14,$17);}
> + | PARSEOP_PINFUNCTION
> + PARSEOP_OPEN_PAREN
> + error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;}
> + ;
> +
> +PinGroupTerm
> + : PARSEOP_PINGROUP
> + PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafNode (PARSEOP_PINGROUP);}
> + StringData /* 04: ResourceLabel */
> + OptionalProducerResourceType /* 05: ResourceType */
> + OptionalNameString /* 06: DescriptorName */
> + OptionalBuffer_Last /* 07: VendorData */
> + PARSEOP_CLOSE_PAREN '{'
> + DWordList '}' {$$ = TrLinkChildren ($<n>3,5,$4,$5,$6,$7,$10);}
> + | PARSEOP_PINGROUP
> + PARSEOP_OPEN_PAREN
> + error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;}
> + ;
> +
> +PinGroupConfigTerm
> + : PARSEOP_PINGROUPCONFIG
> + PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafNode (PARSEOP_PINGROUPCONFIG);}
> + OptionalShareType_First /* 04: SharedType */
> + ',' ByteConstExpr /* 06: PinConfigType */
> + ',' DWordConstExpr /* 08: PinConfigValue */
> + ',' StringData /* 10: ResourceSource */
> + OptionalByteConstExpr /* 11: ResourceSourceIndex */
> + ',' StringData /* 13: ResourceSourceLabel */
> + OptionalResourceType /* 14: ResourceType */
> + OptionalNameString /* 15: DescriptorName */
> + OptionalBuffer_Last /* 16: VendorData */
> + PARSEOP_CLOSE_PAREN {$$ = TrLinkChildren ($<n>3,9,
> + $4,$6,$8,$10,$11,$13,$14,$15,$16);}
> + | PARSEOP_PINGROUPCONFIG
> + PARSEOP_OPEN_PAREN
> + error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;}
> + ;
> +
> +PinGroupFunctionTerm
> + : PARSEOP_PINGROUPFUNCTION
> + PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafNode (PARSEOP_PINGROUPFUNCTION);}
> + OptionalShareType_First /* 04: SharedType */
> + ',' WordConstExpr /* 06: FunctionNumber */
> + ',' StringData /* 08: ResourceSource */
> + OptionalByteConstExpr /* 09: ResourceSourceIndex */
> + ',' StringData /* 11: ResourceSourceLabel */
> + OptionalResourceType /* 12: ResourceType */
> + OptionalNameString /* 13: DescriptorName */
> + OptionalBuffer_Last /* 14: VendorData */
> + PARSEOP_CLOSE_PAREN {$$ = TrLinkChildren ($<n>3,8,
> + $4,$6,$8,$9,$11,$12,$13,$14);}
> + | PARSEOP_PINGROUPFUNCTION
> + PARSEOP_OPEN_PAREN
> + error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;}
> + ;
> +
> QWordIOTerm
> : PARSEOP_QWORDIO
> PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafNode (PARSEOP_QWORDIO);}
> diff --git a/src/acpica/source/compiler/aslrestype2s.c b/src/acpica/source/compiler/aslrestype2s.c
> index ccaac7c9..243d1a3f 100644
> --- a/src/acpica/source/compiler/aslrestype2s.c
> +++ b/src/acpica/source/compiler/aslrestype2s.c
> @@ -163,7 +163,8 @@ RsGetBufferDataLength (
>
> static UINT16
> RsGetInterruptDataLength (
> - ACPI_PARSE_OBJECT *InitializerOp);
> + ACPI_PARSE_OBJECT *InitializerOp,
> + UINT32 StartIndex);
>
> static BOOLEAN
> RsGetVendorData (
> @@ -171,6 +172,11 @@ RsGetVendorData (
> UINT8 *VendorData,
> ACPI_SIZE DescriptorOffset);
>
> +static UINT16
> +RsGetStringDataLengthAt (
> + ACPI_PARSE_OBJECT *InitializerOp,
> + UINT32 StartIndex);
> +
> /*
> * This module contains descriptors for serial buses and GPIO:
> *
> @@ -179,6 +185,11 @@ RsGetVendorData (
> * I2cSerialBus
> * SpiSerialBus
> * UartSerialBus
> + * PinFunction
> + * PinConfig
> + * PinGroup
> + * PinGroupFunction
> + * PinGroupConfig
> */
>
>
> @@ -238,6 +249,7 @@ RsGetBufferDataLength (
> *
> * PARAMETERS: InitializerOp - Current parse op, start of the resource
> * descriptor
> + * StartIndex - Start index of interrupt/pin list
> *
> * RETURN: Length of the interrupt data list
> *
> @@ -248,7 +260,8 @@ RsGetBufferDataLength (
>
> static UINT16
> RsGetInterruptDataLength (
> - ACPI_PARSE_OBJECT *InitializerOp)
> + ACPI_PARSE_OBJECT *InitializerOp,
> + UINT32 StartIndex)
> {
> UINT16 InterruptLength;
> UINT32 i;
> @@ -261,9 +274,9 @@ RsGetInterruptDataLength (
> {
> InitializerOp = ASL_GET_PEER_NODE (InitializerOp);
>
> - /* Interrupt list starts at offset 10 (Gpio descriptors) */
> + /* Interrupt list starts at offset StartIndex (Gpio descriptors) */
>
> - if (i >= 10)
> + if (i >= StartIndex)
> {
> InterruptLength += 2;
> }
> @@ -373,6 +386,43 @@ RsGetVendorData (
>
> /*******************************************************************************
> *
> + * FUNCTION: RsGetStringDataLengthAt
> + *
> + * PARAMETERS: InitializerOp - Start of a subtree of init nodes
> + * StartIndex - Starting index of the string node
> + *
> + * RETURN: Valid string length if a string node is found at given
> + * StartIndex or 0 otherwise.
> + *
> + * DESCRIPTION: In a list of peer nodes, find the first one at given index
> + * that contains a string and return length.
> + *
> + ******************************************************************************/
> +
> +static UINT16
> +RsGetStringDataLengthAt (
> + ACPI_PARSE_OBJECT *InitializerOp,
> + UINT32 StartIndex)
> +{
> + UINT32 i;
> +
> + for (i = 0; InitializerOp; i++)
> + {
> + if (i == StartIndex &&
> + InitializerOp->Asl.ParseOpcode == PARSEOP_STRING_LITERAL)
> + {
> + return ((UINT16) (strlen (InitializerOp->Asl.Value.String) + 1));
> + }
> +
> + InitializerOp = ASL_GET_PEER_NODE (InitializerOp);
> + }
> +
> + return (0);
> +}
> +
> +
> +/*******************************************************************************
> + *
> * FUNCTION: RsDoGpioIntDescriptor
> *
> * PARAMETERS: Info - Parse Op and resource template offset
> @@ -414,7 +464,7 @@ RsDoGpioIntDescriptor (
> */
> ResSourceLength = RsGetStringDataLength (InitializerOp);
> VendorLength = RsGetBufferDataLength (InitializerOp);
> - InterruptLength = RsGetInterruptDataLength (InitializerOp);
> + InterruptLength = RsGetInterruptDataLength (InitializerOp, 10);
>
> DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_GPIO) +
> ResSourceLength + VendorLength + InterruptLength;
> @@ -623,7 +673,7 @@ RsDoGpioIoDescriptor (
> */
> ResSourceLength = RsGetStringDataLength (InitializerOp);
> VendorLength = RsGetBufferDataLength (InitializerOp);
> - InterruptLength = RsGetInterruptDataLength (InitializerOp);
> + InterruptLength = RsGetInterruptDataLength (InitializerOp, 10);
> PinList = InterruptList;
>
> DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_GPIO) +
> @@ -1336,3 +1386,858 @@ RsDoUartSerialBusDescriptor (
> MpSaveSerialInfo (Info->MappingOp, Descriptor, ResourceSource);
> return (Rnode);
> }
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: RsDoPinFunctionDescriptor
> + *
> + * PARAMETERS: Info - Parse Op and resource template offset
> + *
> + * RETURN: Completed resource node
> + *
> + * DESCRIPTION: Construct a long "PinFunction" descriptor
> + *
> + ******************************************************************************/
> +
> +ASL_RESOURCE_NODE *
> +RsDoPinFunctionDescriptor (
> + ASL_RESOURCE_INFO *Info)
> +{
> + AML_RESOURCE *Descriptor;
> + ACPI_PARSE_OBJECT *InitializerOp;
> + ASL_RESOURCE_NODE *Rnode;
> + char *ResourceSource = NULL;
> + UINT8 *VendorData = NULL;
> + UINT16 *PinList = NULL;
> + UINT16 ResSourceLength;
> + UINT16 VendorLength;
> + UINT16 PinListLength;
> + UINT16 DescriptorSize;
> + UINT32 CurrentByteOffset;
> + UINT32 PinCount = 0;
> + UINT32 i;
> +
> + InitializerOp = Info->DescriptorTypeOp->Asl.Child;
> + CurrentByteOffset = Info->CurrentByteOffset;
> +
> + /*
> + * Calculate lengths for fields that have variable length:
> + * 1) Resource Source string
> + * 2) Vendor Data buffer
> + * 3) PIN (interrupt) list
> + */
> + ResSourceLength = RsGetStringDataLength (InitializerOp);
> + VendorLength = RsGetBufferDataLength (InitializerOp);
> + PinListLength = RsGetInterruptDataLength (InitializerOp, 8);
> +
> + DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_FUNCTION) +
> + ResSourceLength + VendorLength + PinListLength;
> +
> + /* Allocate the local resource node and initialize */
> +
> + Rnode = RsAllocateResourceNode (DescriptorSize +
> + sizeof (AML_RESOURCE_LARGE_HEADER));
> +
> + Descriptor = Rnode->Buffer;
> + Descriptor->PinFunction.ResourceLength = DescriptorSize;
> + Descriptor->PinFunction.DescriptorType = ACPI_RESOURCE_NAME_PIN_FUNCTION;
> + Descriptor->PinFunction.RevisionId = AML_RESOURCE_PIN_FUNCTION_REVISION;
> +
> + /* Build pointers to optional areas */
> +
> + PinList = ACPI_ADD_PTR (UINT16, Descriptor, sizeof (AML_RESOURCE_PIN_FUNCTION));
> + ResourceSource = ACPI_ADD_PTR (char, PinList, PinListLength);
> + VendorData = ACPI_ADD_PTR (UINT8, ResourceSource, ResSourceLength);
> +
> + /* Setup offsets within the descriptor */
> +
> + Descriptor->PinFunction.PinTableOffset = (UINT16)
> + ACPI_PTR_DIFF (PinList, Descriptor);
> +
> + Descriptor->PinFunction.ResSourceOffset = (UINT16)
> + ACPI_PTR_DIFF (ResourceSource, Descriptor);
> +
> + /* Process all child initialization nodes */
> +
> + for (i = 0; InitializerOp; i++)
> + {
> + switch (i)
> + {
> + case 0: /* Share Type [Flags] (_SHR) */
> +
> + RsSetFlagBits16 (&Descriptor->PinFunction.Flags, InitializerOp, 0, 0);
> + RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE,
> + CurrentByteOffset + ASL_RESDESC_OFFSET (PinFunction.Flags), 0);
> + break;
> +
> + case 1: /* Pin Config [BYTE] (_PPI) */
> +
> + Descriptor->PinFunction.PinConfig = (UINT8) InitializerOp->Asl.Value.Integer;
> + RsCreateByteField (InitializerOp, ACPI_RESTAG_PINCONFIG,
> + CurrentByteOffset + ASL_RESDESC_OFFSET (PinFunction.PinConfig));
> + break;
> +
> + case 2: /* Function Number [WORD] (_FUN) */
> +
> + Descriptor->PinFunction.FunctionNumber = (UINT16) InitializerOp->Asl.Value.Integer;
> + RsCreateDwordField (InitializerOp, ACPI_RESTAG_FUNCTION,
> + CurrentByteOffset + ASL_RESDESC_OFFSET (PinFunction.FunctionNumber));
> + break;
> +
> + case 3: /* ResSource [Optional Field - STRING] */
> +
> + if (ResSourceLength)
> + {
> + /* Copy string to the descriptor */
> +
> + strcpy (ResourceSource, InitializerOp->Asl.Value.String);
> + }
> + break;
> +
> + case 4: /* Resource Index */
> +
> + if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
> + {
> + Descriptor->PinFunction.ResSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer;
> + }
> + break;
> +
> + case 5: /* Resource Usage (consumer/producer) */
> +
> + /* Assumed to be consumer */
> +
> + break;
> +
> + case 6: /* Resource Tag (Descriptor Name) */
> +
> + UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
> + break;
> +
> + case 7: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */
> + /*
> + * Always set the VendorOffset even if there is no Vendor Data.
> + * This field is required in order to calculate the length
> + * of the ResourceSource at runtime.
> + */
> + Descriptor->PinFunction.VendorOffset = (UINT16)
> + ACPI_PTR_DIFF (VendorData, Descriptor);
> +
> + if (RsGetVendorData (InitializerOp, VendorData,
> + (CurrentByteOffset + Descriptor->PinFunction.VendorOffset)))
> + {
> + Descriptor->PinFunction.VendorLength = VendorLength;
> + }
> + break;
> +
> + default:
> + /*
> + * PINs come through here, repeatedly. Each PIN must be a WORD.
> + * NOTE: there is no "length" field for this, so from ACPI spec:
> + * The number of pins in the table can be calculated from:
> + * PinCount = (Resource Source Name Offset - Pin Table Offset) / 2
> + * (implies resource source must immediately follow the pin list.)
> + * Name: _PIN
> + */
> + *PinList = (UINT16) InitializerOp->Asl.Value.Integer;
> + PinList++;
> + PinCount++;
> +
> + /* Case 8: First pin number in list */
> +
> + if (i == 8)
> + {
> + if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG)
> + {
> + /* Must be at least one interrupt */
> +
> + AslError (ASL_ERROR, ASL_MSG_EX_INTERRUPT_LIST_MIN,
> + InitializerOp, NULL);
> + }
> +
> + /* Check now for duplicates in list */
> +
> + RsCheckListForDuplicates (InitializerOp);
> +
> + /* Create a named field at the start of the list */
> +
> + RsCreateWordField (InitializerOp, ACPI_RESTAG_PIN,
> + CurrentByteOffset + Descriptor->PinFunction.PinTableOffset);
> + }
> + break;
> + }
> +
> + InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
> + }
> +
> + return (Rnode);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: RsDoPinConfigDescriptor
> + *
> + * PARAMETERS: Info - Parse Op and resource template offset
> + *
> + * RETURN: Completed resource node
> + *
> + * DESCRIPTION: Construct a long "PinConfig" descriptor
> + *
> + ******************************************************************************/
> +
> +ASL_RESOURCE_NODE *
> +RsDoPinConfigDescriptor (
> + ASL_RESOURCE_INFO *Info)
> +{
> + AML_RESOURCE *Descriptor;
> + ACPI_PARSE_OBJECT *InitializerOp;
> + ASL_RESOURCE_NODE *Rnode;
> + char *ResourceSource = NULL;
> + UINT8 *VendorData = NULL;
> + UINT16 *PinList = NULL;
> + UINT16 ResSourceLength;
> + UINT16 VendorLength;
> + UINT16 PinListLength;
> + UINT16 DescriptorSize;
> + UINT32 CurrentByteOffset;
> + UINT32 PinCount = 0;
> + UINT32 i;
> +
> + InitializerOp = Info->DescriptorTypeOp->Asl.Child;
> + CurrentByteOffset = Info->CurrentByteOffset;
> +
> + /*
> + * Calculate lengths for fields that have variable length:
> + * 1) Resource Source string
> + * 2) Vendor Data buffer
> + * 3) PIN (interrupt) list
> + */
> + ResSourceLength = RsGetStringDataLength (InitializerOp);
> + VendorLength = RsGetBufferDataLength (InitializerOp);
> + PinListLength = RsGetInterruptDataLength (InitializerOp, 8);
> +
> + DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_CONFIG) +
> + ResSourceLength + VendorLength + PinListLength;
> +
> + /* Allocate the local resource node and initialize */
> +
> + Rnode = RsAllocateResourceNode (DescriptorSize +
> + sizeof (AML_RESOURCE_LARGE_HEADER));
> +
> + Descriptor = Rnode->Buffer;
> + Descriptor->PinConfig.ResourceLength = DescriptorSize;
> + Descriptor->PinConfig.DescriptorType = ACPI_RESOURCE_NAME_PIN_CONFIG;
> + Descriptor->PinConfig.RevisionId = AML_RESOURCE_PIN_CONFIG_REVISION;
> +
> + /* Build pointers to optional areas */
> +
> + PinList = ACPI_ADD_PTR (UINT16, Descriptor, sizeof (AML_RESOURCE_PIN_CONFIG));
> + ResourceSource = ACPI_ADD_PTR (char, PinList, PinListLength);
> + VendorData = ACPI_ADD_PTR (UINT8, ResourceSource, ResSourceLength);
> +
> + /* Setup offsets within the descriptor */
> +
> + Descriptor->PinConfig.PinTableOffset = (UINT16)
> + ACPI_PTR_DIFF (PinList, Descriptor);
> +
> + Descriptor->PinConfig.ResSourceOffset = (UINT16)
> + ACPI_PTR_DIFF (ResourceSource, Descriptor);
> +
> + /* Process all child initialization nodes */
> +
> + for (i = 0; InitializerOp; i++)
> + {
> + BOOLEAN isValid;
> +
> + switch (i)
> + {
> + case 0: /* Share Type [Flags] (_SHR) */
> +
> + RsSetFlagBits16 (&Descriptor->PinConfig.Flags, InitializerOp, 0, 0);
> + RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE,
> + CurrentByteOffset + ASL_RESDESC_OFFSET (PinConfig.Flags), 0);
> + break;
> +
> + case 1: /* Pin Config Type [BYTE] (_TYP) */
> +
> + isValid = InitializerOp->Asl.Value.Integer <= 0x0d;
> + if (!isValid)
> + {
> + isValid = InitializerOp->Asl.Value.Integer >= 0x80 &&
> + InitializerOp->Asl.Value.Integer <= 0xff;
> + }
> + if (!isValid)
> + {
> + AslError (ASL_ERROR, ASL_MSG_RANGE, InitializerOp, NULL);
> + }
> +
> + Descriptor->PinConfig.PinConfigType = (UINT8) InitializerOp->Asl.Value.Integer;
> + RsCreateByteField (InitializerOp, ACPI_RESTAG_PINCONFIG_TYPE,
> + CurrentByteOffset + ASL_RESDESC_OFFSET (PinConfig.PinConfigType));
> +
> + break;
> +
> + case 2: /* Pin Config Value [DWORD] (_VAL) */
> +
> + Descriptor->PinConfig.PinConfigValue = (UINT32) InitializerOp->Asl.Value.Integer;
> + RsCreateDwordField (InitializerOp, ACPI_RESTAG_PINCONFIG_VALUE,
> + CurrentByteOffset + ASL_RESDESC_OFFSET (PinConfig.PinConfigValue));
> + break;
> +
> + case 3: /* ResSource [Optional Field - STRING] */
> +
> + if (ResSourceLength)
> + {
> + /* Copy string to the descriptor */
> +
> + strcpy (ResourceSource, InitializerOp->Asl.Value.String);
> + }
> + break;
> +
> + case 4: /* Resource Index */
> +
> + if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
> + {
> + Descriptor->PinConfig.ResSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer;
> + }
> + break;
> +
> + case 5: /* Resource Usage (consumer/producer) */
> +
> + RsSetFlagBits16 (&Descriptor->PinConfig.Flags, InitializerOp, 1, 1);
> +
> + break;
> +
> + case 6: /* Resource Tag (Descriptor Name) */
> +
> + UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
> + break;
> +
> + case 7: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */
> + /*
> + * Always set the VendorOffset even if there is no Vendor Data.
> + * This field is required in order to calculate the length
> + * of the ResourceSource at runtime.
> + */
> + Descriptor->PinConfig.VendorOffset = (UINT16)
> + ACPI_PTR_DIFF (VendorData, Descriptor);
> +
> + if (RsGetVendorData (InitializerOp, VendorData,
> + (CurrentByteOffset + Descriptor->PinConfig.VendorOffset)))
> + {
> + Descriptor->PinConfig.VendorLength = VendorLength;
> + }
> + break;
> +
> + default:
> + /*
> + * PINs come through here, repeatedly. Each PIN must be a WORD.
> + * NOTE: there is no "length" field for this, so from ACPI spec:
> + * The number of pins in the table can be calculated from:
> + * PinCount = (Resource Source Name Offset - Pin Table Offset) / 2
> + * (implies resource source must immediately follow the pin list.)
> + * Name: _PIN
> + */
> + *PinList = (UINT16) InitializerOp->Asl.Value.Integer;
> + PinList++;
> + PinCount++;
> +
> + /* Case 8: First pin number in list */
> +
> + if (i == 8)
> + {
> + if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG)
> + {
> + /* Must be at least one interrupt */
> +
> + AslError (ASL_ERROR, ASL_MSG_EX_INTERRUPT_LIST_MIN,
> + InitializerOp, NULL);
> + }
> +
> + /* Check now for duplicates in list */
> +
> + RsCheckListForDuplicates (InitializerOp);
> +
> + /* Create a named field at the start of the list */
> +
> + RsCreateWordField (InitializerOp, ACPI_RESTAG_PIN,
> + CurrentByteOffset + Descriptor->PinConfig.PinTableOffset);
> + }
> + break;
> + }
> +
> + InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
> + }
> +
> + return (Rnode);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: RsDoPinGroupDescriptor
> + *
> + * PARAMETERS: Info - Parse Op and resource template offset
> + *
> + * RETURN: Completed resource node
> + *
> + * DESCRIPTION: Construct a long "PinGroup" descriptor
> + *
> + ******************************************************************************/
> +
> +ASL_RESOURCE_NODE *
> +RsDoPinGroupDescriptor (
> + ASL_RESOURCE_INFO *Info)
> +{
> + AML_RESOURCE *Descriptor;
> + ACPI_PARSE_OBJECT *InitializerOp;
> + ASL_RESOURCE_NODE *Rnode;
> + UINT8 *VendorData = NULL;
> + UINT16 *PinList = NULL;
> + char *Label = NULL;
> + UINT16 LabelLength;
> + UINT16 VendorLength;
> + UINT16 PinListLength;
> + UINT16 DescriptorSize;
> + UINT32 CurrentByteOffset;
> + UINT32 PinCount = 0;
> + UINT32 i;
> +
> + InitializerOp = Info->DescriptorTypeOp->Asl.Child;
> + CurrentByteOffset = Info->CurrentByteOffset;
> +
> + /*
> + * Calculate lengths for fields that have variable length:
> + * 1) Label
> + * 2) Vendor Data buffer
> + * 3) PIN (interrupt) list
> + */
> + LabelLength = RsGetStringDataLength (InitializerOp);
> + VendorLength = RsGetBufferDataLength (InitializerOp);
> + PinListLength = RsGetInterruptDataLength (InitializerOp, 4);
> +
> + DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_GROUP) +
> + LabelLength + VendorLength + PinListLength;
> +
> + /* Allocate the local resource node and initialize */
> +
> + Rnode = RsAllocateResourceNode (DescriptorSize +
> + sizeof (AML_RESOURCE_LARGE_HEADER));
> +
> + Descriptor = Rnode->Buffer;
> + Descriptor->PinGroup.ResourceLength = DescriptorSize;
> + Descriptor->PinGroup.DescriptorType = ACPI_RESOURCE_NAME_PIN_GROUP;
> + Descriptor->PinGroup.RevisionId = AML_RESOURCE_PIN_GROUP_REVISION;
> +
> + /* Build pointers to optional areas */
> +
> + PinList = ACPI_ADD_PTR (UINT16, Descriptor, sizeof (AML_RESOURCE_PIN_GROUP));
> + Label = ACPI_ADD_PTR (char, PinList, PinListLength);
> + VendorData = ACPI_ADD_PTR (UINT8, Label, LabelLength);
> +
> + /* Setup offsets within the descriptor */
> +
> + Descriptor->PinGroup.PinTableOffset = (UINT16) ACPI_PTR_DIFF (PinList, Descriptor);
> + Descriptor->PinGroup.LabelOffset = (UINT16) ACPI_PTR_DIFF (Label, Descriptor);
> +
> + /* Process all child initialization nodes */
> +
> + for (i = 0; InitializerOp; i++)
> + {
> + switch (i)
> + {
> + case 0: /* Resource Label */
> +
> + if (LabelLength < 2)
> + {
> + AslError(ASL_WARNING, ASL_MSG_NULL_STRING, InitializerOp, NULL);
> + }
> + strcpy (Label, InitializerOp->Asl.Value.String);
> +
> + break;
> +
> + case 1: /* Resource Usage (consumer/producer) */
> +
> + RsSetFlagBits16 (&Descriptor->PinGroup.Flags, InitializerOp, 0, 0);
> +
> + break;
> +
> + case 2: /* Resource Tag (Descriptor Name) */
> +
> + UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
> + break;
> +
> + case 3: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */
> + /*
> + * Always set the VendorOffset even if there is no Vendor Data.
> + * This field is required in order to calculate the length
> + * of the ResourceSource at runtime.
> + */
> + Descriptor->PinGroup.VendorOffset = (UINT16)
> + ACPI_PTR_DIFF (VendorData, Descriptor);
> +
> + if (RsGetVendorData (InitializerOp, VendorData,
> + (CurrentByteOffset + Descriptor->PinGroup.VendorOffset)))
> + {
> + Descriptor->PinGroup.VendorLength = VendorLength;
> + }
> + break;
> +
> + default:
> + /*
> + * PINs come through here, repeatedly. Each PIN must be a WORD.
> + * NOTE: there is no "length" field for this, so from ACPI spec:
> + * The number of pins in the table can be calculated from:
> + * PinCount = (Resource Source Name Offset - Pin Table Offset) / 2
> + * (implies resource source must immediately follow the pin list.)
> + * Name: _PIN
> + */
> + *PinList = (UINT16) InitializerOp->Asl.Value.Integer;
> + PinList++;
> + PinCount++;
> +
> + /* Case 3: First pin number in list */
> +
> + if (i == 4)
> + {
> + if (InitializerOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG)
> + {
> + /* Must be at least one interrupt */
> +
> + AslError (ASL_ERROR, ASL_MSG_EX_INTERRUPT_LIST_MIN,
> + InitializerOp, NULL);
> + }
> +
> + /* Check now for duplicates in list */
> +
> + RsCheckListForDuplicates (InitializerOp);
> +
> + /* Create a named field at the start of the list */
> +
> + RsCreateWordField (InitializerOp, ACPI_RESTAG_PIN,
> + CurrentByteOffset + Descriptor->PinGroup.PinTableOffset);
> + }
> + break;
> + }
> +
> + InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
> + }
> +
> + return (Rnode);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: RsDoPinGroupFunctionDescriptor
> + *
> + * PARAMETERS: Info - Parse Op and resource template offset
> + *
> + * RETURN: Completed resource node
> + *
> + * DESCRIPTION: Construct a long "PinGroupFunction" descriptor
> + *
> + ******************************************************************************/
> +
> +ASL_RESOURCE_NODE *
> +RsDoPinGroupFunctionDescriptor (
> + ASL_RESOURCE_INFO *Info)
> +{
> + AML_RESOURCE *Descriptor;
> + ACPI_PARSE_OBJECT *InitializerOp;
> + ASL_RESOURCE_NODE *Rnode;
> + char *ResourceSource = NULL;
> + char *ResourceSourceLabel = NULL;
> + UINT8 *VendorData = NULL;
> + UINT16 ResSourceLength;
> + UINT16 ResSourceLabelLength;
> + UINT16 VendorLength;
> + UINT16 DescriptorSize;
> + UINT32 CurrentByteOffset;
> + UINT32 i;
> +
> + InitializerOp = Info->DescriptorTypeOp->Asl.Child;
> + CurrentByteOffset = Info->CurrentByteOffset;
> +
> + /*
> + * Calculate lengths for fields that have variable length:
> + * 1) Resource Source string
> + * 2) Resource Source Label string
> + * 3) Vendor Data buffer
> + */
> + ResSourceLength = RsGetStringDataLengthAt (InitializerOp, 2);
> + ResSourceLabelLength = RsGetStringDataLengthAt (InitializerOp, 4);
> + VendorLength = RsGetBufferDataLength (InitializerOp);
> +
> + DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_GROUP_FUNCTION) +
> + ResSourceLength + ResSourceLabelLength + VendorLength;
> +
> + /* Allocate the local resource node and initialize */
> +
> + Rnode = RsAllocateResourceNode (DescriptorSize +
> + sizeof (AML_RESOURCE_LARGE_HEADER));
> +
> + Descriptor = Rnode->Buffer;
> + Descriptor->PinGroupFunction.ResourceLength = DescriptorSize;
> + Descriptor->PinGroupFunction.DescriptorType = ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION;
> + Descriptor->PinGroupFunction.RevisionId = AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION;
> +
> + /* Build pointers to optional areas */
> +
> + ResourceSource = ACPI_ADD_PTR (char, Descriptor, sizeof (AML_RESOURCE_PIN_GROUP_FUNCTION));
> + ResourceSourceLabel = ACPI_ADD_PTR (char, ResourceSource, ResSourceLength);
> + VendorData = ACPI_ADD_PTR (UINT8, ResourceSourceLabel, ResSourceLabelLength);
> +
> + /* Setup offsets within the descriptor */
> +
> + Descriptor->PinGroupFunction.ResSourceOffset = (UINT16)
> + ACPI_PTR_DIFF (ResourceSource, Descriptor);
> + Descriptor->PinGroupFunction.ResSourceLabelOffset = (UINT16)
> + ACPI_PTR_DIFF (ResourceSourceLabel, Descriptor);
> +
> + /* Process all child initialization nodes */
> +
> + for (i = 0; InitializerOp; i++)
> + {
> + switch (i)
> + {
> + case 0: /* Share Type [Flags] (_SHR) */
> +
> + RsSetFlagBits16 (&Descriptor->PinGroupFunction.Flags, InitializerOp, 0, 0);
> + RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE,
> + CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupFunction.Flags), 0);
> + break;
> +
> + case 1: /* Function Number [WORD] */
> +
> + Descriptor->PinGroupFunction.FunctionNumber = (UINT16) InitializerOp->Asl.Value.Integer;
> + RsCreateDwordField (InitializerOp, ACPI_RESTAG_FUNCTION,
> + CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupFunction.FunctionNumber));
> + break;
> +
> + case 2: /* ResourceSource [STRING] */
> +
> + strcpy (ResourceSource, InitializerOp->Asl.Value.String);
> + break;
> +
> + case 3: /* Resource Index */
> +
> + Descriptor->PinGroupFunction.ResSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer;
> + break;
> +
> + case 4: /* ResourceSourceLabel [STRING] */
> +
> + if (ResSourceLabelLength < 2)
> + {
> + AslError(ASL_WARNING, ASL_MSG_NULL_STRING, InitializerOp, NULL);
> + }
> +
> + strcpy (ResourceSourceLabel, InitializerOp->Asl.Value.String);
> + break;
> +
> + case 5: /* Resource Usage (consumer/producer) */
> +
> + RsSetFlagBits16 (&Descriptor->PinGroupFunction.Flags, InitializerOp, 1, 1);
> +
> + break;
> +
> + case 6: /* Resource Tag (Descriptor Name) */
> +
> + UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
> + break;
> +
> + case 7: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */
> + /*
> + * Always set the VendorOffset even if there is no Vendor Data.
> + * This field is required in order to calculate the length
> + * of the ResourceSource at runtime.
> + */
> + Descriptor->PinGroupFunction.VendorOffset = (UINT16)
> + ACPI_PTR_DIFF (VendorData, Descriptor);
> +
> + if (RsGetVendorData (InitializerOp, VendorData,
> + (CurrentByteOffset + Descriptor->PinGroupFunction.VendorOffset)))
> + {
> + Descriptor->PinGroupFunction.VendorLength = VendorLength;
> + }
> + break;
> +
> + default:
> + break;
> + }
> +
> + InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
> + }
> +
> + return (Rnode);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: RsDoPinGroupConfigDescriptor
> + *
> + * PARAMETERS: Info - Parse Op and resource template offset
> + *
> + * RETURN: Completed resource node
> + *
> + * DESCRIPTION: Construct a long "PinGroupConfig" descriptor
> + *
> + ******************************************************************************/
> +
> +ASL_RESOURCE_NODE *
> +RsDoPinGroupConfigDescriptor (
> + ASL_RESOURCE_INFO *Info)
> +{
> + AML_RESOURCE *Descriptor;
> + ACPI_PARSE_OBJECT *InitializerOp;
> + ASL_RESOURCE_NODE *Rnode;
> + char *ResourceSource = NULL;
> + char *ResourceSourceLabel = NULL;
> + UINT8 *VendorData = NULL;
> + UINT16 ResSourceLength;
> + UINT16 ResSourceLabelLength;
> + UINT16 VendorLength;
> + UINT16 DescriptorSize;
> + UINT32 CurrentByteOffset;
> + UINT32 i;
> +
> + InitializerOp = Info->DescriptorTypeOp->Asl.Child;
> + CurrentByteOffset = Info->CurrentByteOffset;
> +
> + /*
> + * Calculate lengths for fields that have variable length:
> + * 1) Resource Source string
> + * 2) Resource Source Label string
> + * 3) Vendor Data buffer
> + */
> + ResSourceLength = RsGetStringDataLengthAt (InitializerOp, 3);
> + ResSourceLabelLength = RsGetStringDataLengthAt (InitializerOp, 5);
> + VendorLength = RsGetBufferDataLength (InitializerOp);
> +
> + DescriptorSize = ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_GROUP_CONFIG) +
> + ResSourceLength + ResSourceLabelLength + VendorLength;
> +
> + /* Allocate the local resource node and initialize */
> +
> + Rnode = RsAllocateResourceNode (DescriptorSize +
> + sizeof (AML_RESOURCE_LARGE_HEADER));
> +
> + Descriptor = Rnode->Buffer;
> + Descriptor->PinGroupConfig.ResourceLength = DescriptorSize;
> + Descriptor->PinGroupConfig.DescriptorType = ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG;
> + Descriptor->PinGroupConfig.RevisionId = AML_RESOURCE_PIN_GROUP_CONFIG_REVISION;
> +
> + /* Build pointers to optional areas */
> +
> + ResourceSource = ACPI_ADD_PTR (char, Descriptor, sizeof (AML_RESOURCE_PIN_GROUP_CONFIG));
> + ResourceSourceLabel = ACPI_ADD_PTR (char, ResourceSource, ResSourceLength);
> + VendorData = ACPI_ADD_PTR (UINT8, ResourceSourceLabel, ResSourceLabelLength);
> +
> + /* Setup offsets within the descriptor */
> +
> + Descriptor->PinGroupConfig.ResSourceOffset = (UINT16)
> + ACPI_PTR_DIFF (ResourceSource, Descriptor);
> + Descriptor->PinGroupConfig.ResSourceLabelOffset = (UINT16)
> + ACPI_PTR_DIFF (ResourceSourceLabel, Descriptor);
> +
> + /* Process all child initialization nodes */
> +
> + for (i = 0; InitializerOp; i++)
> + {
> + BOOLEAN isValid;
> +
> + switch (i)
> + {
> + case 0: /* Share Type [Flags] (_SHR) */
> +
> + RsSetFlagBits16 (&Descriptor->PinGroupConfig.Flags, InitializerOp, 0, 0);
> + RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE,
> + CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupConfig.Flags), 0);
> + break;
> +
> + case 1: /* Pin Config Type [BYTE] (_TYP) */
> +
> + isValid = InitializerOp->Asl.Value.Integer <= 0x0d;
> + if (!isValid)
> + {
> + isValid = InitializerOp->Asl.Value.Integer >= 0x80 &&
> + InitializerOp->Asl.Value.Integer <= 0xff;
> + }
> + if (!isValid)
> + {
> + AslError (ASL_ERROR, ASL_MSG_RANGE, InitializerOp, NULL);
> + }
> +
> + Descriptor->PinGroupConfig.PinConfigType = (UINT8) InitializerOp->Asl.Value.Integer;
> + RsCreateByteField (InitializerOp, ACPI_RESTAG_PINCONFIG_TYPE,
> + CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupConfig.PinConfigType));
> +
> + break;
> +
> + case 2: /* Pin Config Value [DWORD] (_VAL) */
> +
> + Descriptor->PinGroupConfig.PinConfigValue = (UINT32) InitializerOp->Asl.Value.Integer;
> + RsCreateDwordField (InitializerOp, ACPI_RESTAG_PINCONFIG_VALUE,
> + CurrentByteOffset + ASL_RESDESC_OFFSET (PinGroupConfig.PinConfigValue));
> + break;
> +
> + case 3: /* ResourceSource [STRING] */
> +
> + /* Copy string to the descriptor */
> +
> + strcpy (ResourceSource, InitializerOp->Asl.Value.String);
> + break;
> +
> + case 4: /* Resource Index */
> +
> + Descriptor->PinGroupConfig.ResSourceIndex = (UINT8) InitializerOp->Asl.Value.Integer;
> + break;
> +
> + case 5: /* ResourceSourceLabel [STRING] */
> +
> + if (ResSourceLabelLength < 2)
> + {
> + AslError(ASL_WARNING, ASL_MSG_NULL_STRING, InitializerOp, NULL);
> + }
> +
> + strcpy (ResourceSourceLabel, InitializerOp->Asl.Value.String);
> + break;
> +
> + case 6: /* Resource Usage (consumer/producer) */
> +
> + RsSetFlagBits16 (&Descriptor->PinGroupConfig.Flags, InitializerOp, 1, 1);
> +
> + break;
> +
> + case 7: /* Resource Tag (Descriptor Name) */
> +
> + UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
> + break;
> +
> + case 8: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */
> + /*
> + * Always set the VendorOffset even if there is no Vendor Data.
> + * This field is required in order to calculate the length
> + * of the ResourceSource at runtime.
> + */
> + Descriptor->PinGroupConfig.VendorOffset = (UINT16)
> + ACPI_PTR_DIFF (VendorData, Descriptor);
> +
> + if (RsGetVendorData (InitializerOp, VendorData,
> + (CurrentByteOffset + Descriptor->PinGroupConfig.VendorOffset)))
> + {
> + Descriptor->PinGroupConfig.VendorLength = VendorLength;
> + }
> + break;
> +
> + default:
> + break;
> + }
> +
> + InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
> + }
> +
> + return (Rnode);
> +}
> diff --git a/src/acpica/source/compiler/aslrules.y b/src/acpica/source/compiler/aslrules.y
> index ae4d3714..d09852c7 100644
> --- a/src/acpica/source/compiler/aslrules.y
> +++ b/src/acpica/source/compiler/aslrules.y
> @@ -269,11 +269,9 @@ TermArg
> : SimpleName {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
> | Type2Opcode {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
> | DataObject {$$ = TrSetNodeFlags ($1, NODE_IS_TERM_ARG);}
> -/*
> | PARSEOP_OPEN_PAREN
> TermArg
> - PARSEOP_CLOSE_PAREN {}
> -*/
> + PARSEOP_CLOSE_PAREN {$$ = TrSetNodeFlags ($2, NODE_IS_TERM_ARG);}
> ;
>
> /*
> @@ -395,7 +393,7 @@ Object
> : CompilerDirective {}
> | NamedObject {}
> | NameSpaceModifier {}
> -// | StructureTerm {}
> +/* | StructureTerm {} */
> ;
>
> PackageList
> @@ -644,7 +642,7 @@ NamedObject
> NameSpaceModifier
> : AliasTerm {}
> | NameTerm {}
> -// | NameTermAslPlus {}
> +/* | NameTermAslPlus {} */
> | ScopeTerm {}
> ;
>
> @@ -751,8 +749,8 @@ Type2IntegerOpcode /* "Type3" opcodes */
> | FromBCDTerm {}
> | IncTerm {}
> | IndexTerm {}
> -// | StructureIndexTerm {}
> -// | StructurePointerTerm {}
> +/* | StructureIndexTerm {} */
> +/* | StructurePointerTerm {} */
> | LAndTerm {}
> | LEqualTerm {}
> | LGreaterTerm {}
> @@ -827,8 +825,8 @@ Type6Opcode
> | DerefOfTerm {}
> | IndexTerm {}
> | IndexExpTerm {}
> -// | StructureIndexTerm {}
> -// | StructurePointerTerm {}
> +/* | StructureIndexTerm {} */
> +/* | StructurePointerTerm {} */
> | MethodInvocationTerm {}
> ;
>
> diff --git a/src/acpica/source/compiler/aslstartup.c b/src/acpica/source/compiler/aslstartup.c
> index bef4c769..2f037bf8 100644
> --- a/src/acpica/source/compiler/aslstartup.c
> +++ b/src/acpica/source/compiler/aslstartup.c
> @@ -316,6 +316,11 @@ AslDetectSourceFileType (
> Type = ASL_INPUT_TYPE_BINARY_ACPI_TABLE;
> goto Cleanup;
> }
> + else
> + {
> + fprintf (stderr,
> + "Binary file does not contain a valid ACPI table\n");
> + }
>
> Type = ASL_INPUT_TYPE_BINARY;
>
> @@ -456,7 +461,7 @@ AslDoOneFile (
> /*
> * AML Disassembly (Optional)
> */
> - if (Gbl_DisasmFlag)
> + if (AcpiGbl_DisasmFlag)
> {
> Status = AslDoDisassembly ();
> if (Status != AE_CTRL_CONTINUE)
> @@ -581,7 +586,7 @@ AslDoOneFile (
> CvDbgPrint ("OUTPUTFILENAME: %s\n", Gbl_OutputFilenamePrefix);
> Gbl_Files[ASL_FILE_INPUT].Filename =
> Gbl_Files[ASL_FILE_AML_OUTPUT].Filename;
> -
> + AcpiGbl_DisasmFlag = TRUE;
> fprintf (stderr, "\n");
> AslDoDisassembly ();
>
> @@ -601,7 +606,7 @@ AslDoOneFile (
>
> FlCloseFile (ASL_FILE_INPUT);
> Gbl_DoCompile = FALSE;
> - Gbl_DisasmFlag = TRUE;
> + AcpiGbl_DisasmFlag = TRUE;
> Status = AslDoDisassembly ();
> return (Status);
>
> diff --git a/src/acpica/source/compiler/aslsupport.l b/src/acpica/source/compiler/aslsupport.l
> index 13054067..42cee752 100644
> --- a/src/acpica/source/compiler/aslsupport.l
> +++ b/src/acpica/source/compiler/aslsupport.l
> @@ -697,15 +697,19 @@ AslDoCommentType2 (
>
>
> AslInsertLineBuffer ('/');
> - AslInsertLineBuffer ('*');
>
> if (Gbl_CaptureComments && CurrentState.CaptureComments)
> {
> + AslInsertLineBuffer ('*');
> *StringBuffer = '/';
> ++StringBuffer;
> *StringBuffer = '*';
> ++StringBuffer;
> }
> + else
> + {
> + AslInsertLineBuffer ('/');
> + }
>
> while (((c = input ()) != '\n') && (c != EOF))
> {
> @@ -1006,15 +1010,6 @@ CompletedString:
> *StringBuffer = 0;
>
> CleanString = UtStringCacheCalloc (strlen (MsgBuffer) + 1);
> - if (!CleanString)
> - {
> - AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION,
> - Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
> - Gbl_CurrentLineOffset, Gbl_CurrentColumn,
> - Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
> - return (FALSE);
> - }
> -
> strcpy (CleanString, MsgBuffer);
> AslCompilerlval.s = CleanString;
> return (TRUE);
> diff --git a/src/acpica/source/compiler/asltokens.y b/src/acpica/source/compiler/asltokens.y
> index ba0803f8..e6e9006d 100644
> --- a/src/acpica/source/compiler/asltokens.y
> +++ b/src/acpica/source/compiler/asltokens.y
> @@ -389,6 +389,11 @@ NoEcho('
> %token <i> PARSEOP_PARITYTYPE_NONE
> %token <i> PARSEOP_PARITYTYPE_ODD
> %token <i> PARSEOP_PARITYTYPE_SPACE
> +%token <i> PARSEOP_PINCONFIG
> +%token <i> PARSEOP_PINFUNCTION
> +%token <i> PARSEOP_PINGROUP
> +%token <i> PARSEOP_PINGROUPCONFIG
> +%token <i> PARSEOP_PINGROUPFUNCTION
> %token <i> PARSEOP_PIN_NOPULL
> %token <i> PARSEOP_PIN_PULLDEFAULT
> %token <i> PARSEOP_PIN_PULLDOWN
> diff --git a/src/acpica/source/compiler/asltree.c b/src/acpica/source/compiler/asltree.c
> index 0f31296e..b80a4226 100644
> --- a/src/acpica/source/compiler/asltree.c
> +++ b/src/acpica/source/compiler/asltree.c
> @@ -295,17 +295,14 @@ TrAllocateNode (
> }
>
> Gbl_CommentState.Latest_Parse_Node = Op;
> - if (Gbl_CommentState.Latest_Parse_Node->Asl.ParseOpName)
> - {
> - CvDbgPrint ("trallocatenode=Set latest parse node to this node.\n");
> - CvDbgPrint (" Op->Asl.ParseOpName = %s\n",
> - Gbl_CommentState.Latest_Parse_Node->Asl.ParseOpName);
> - CvDbgPrint (" Op->Asl.ParseOpcode = 0x%x\n", ParseOpcode);
> + CvDbgPrint ("trallocatenode=Set latest parse node to this node.\n");
> + CvDbgPrint (" Op->Asl.ParseOpName = %s\n",
> + Gbl_CommentState.Latest_Parse_Node->Asl.ParseOpName);
> + CvDbgPrint (" Op->Asl.ParseOpcode = 0x%x\n", ParseOpcode);
>
> - if (Op->Asl.FileChanged)
> - {
> - CvDbgPrint(" file has been changed!\n");
> - }
> + if (Op->Asl.FileChanged)
> + {
> + CvDbgPrint(" file has been changed!\n");
> }
>
> /*
> @@ -1660,7 +1657,7 @@ TrLinkChildNode (
> * turn on capture comments as it signifies that we are done parsing
> * a method call.
> */
> - if (Gbl_CaptureComments)
> + if (Gbl_CaptureComments && Op1)
> {
> if (Op1->Asl.ParseOpcode == PARSEOP_METHODCALL)
> {
> diff --git a/src/acpica/source/compiler/asltypes.y b/src/acpica/source/compiler/asltypes.y
> index 7f0680ef..6886a0dc 100644
> --- a/src/acpica/source/compiler/asltypes.y
> +++ b/src/acpica/source/compiler/asltypes.y
> @@ -432,6 +432,11 @@ NoEcho('
> %type <n> Memory32Term
> %type <n> NameSeg
> %type <n> NameString
> +%type <n> PinConfigTerm
> +%type <n> PinFunctionTerm
> +%type <n> PinGroupTerm
> +%type <n> PinGroupConfigTerm
> +%type <n> PinGroupFunctionTerm
> %type <n> QWordIOTerm
> %type <n> QWordMemoryTerm
> %type <n> QWordSpaceTerm
> @@ -487,6 +492,7 @@ NoEcho('
> %type <n> OptionalReference
> %type <n> OptionalResourceType
> %type <n> OptionalResourceType_First
> +%type <n> OptionalProducerResourceType
> %type <n> OptionalReturnArg
> %type <n> OptionalSerializeRuleKeyword
> %type <n> OptionalShareType
> diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c
> index 202cf38d..fd91baeb 100644
> --- a/src/acpica/source/compiler/aslutils.c
> +++ b/src/acpica/source/compiler/aslutils.c
> @@ -635,7 +635,7 @@ UtCheckIntegerRange (
> *
> * PARAMETERS: Length - Size of buffer requested
> *
> - * RETURN: Pointer to the buffer. Aborts on allocation failure
> + * RETURN: Pointer to the buffer. Aborts compiler on allocation failure
> *
> * DESCRIPTION: Allocate a string buffer. Bypass the local
> * dynamic memory manager for performance reasons (This has a
> @@ -833,10 +833,6 @@ UtInternalizeName (
> /* We need a segment to store the internal name */
>
> Info.InternalName = UtStringCacheCalloc (Info.Length);
> - if (!Info.InternalName)
> - {
> - return (AE_NO_MEMORY);
> - }
>
> /* Build the name */
>
> diff --git a/src/acpica/source/compiler/aslxref.c b/src/acpica/source/compiler/aslxref.c
> index ec1ce21b..62933ec1 100644
> --- a/src/acpica/source/compiler/aslxref.c
> +++ b/src/acpica/source/compiler/aslxref.c
> @@ -621,7 +621,8 @@ XfNamespaceLocateBegin (
> (!(OpInfo->Flags & AML_CREATE)) &&
> (Op->Asl.ParseOpcode != PARSEOP_NAMESTRING) &&
> (Op->Asl.ParseOpcode != PARSEOP_NAMESEG) &&
> - (Op->Asl.ParseOpcode != PARSEOP_METHODCALL))
> + (Op->Asl.ParseOpcode != PARSEOP_METHODCALL) &&
> + (Op->Asl.ParseOpcode != PARSEOP_EXTERNAL))
> {
> return_ACPI_STATUS (AE_OK);
> }
> @@ -644,7 +645,8 @@ XfNamespaceLocateBegin (
> Flags = ACPI_NS_SEARCH_PARENT;
> if ((Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) ||
> (Op->Asl.ParseOpcode == PARSEOP_NAMESEG) ||
> - (Op->Asl.ParseOpcode == PARSEOP_METHODCALL))
> + (Op->Asl.ParseOpcode == PARSEOP_METHODCALL) ||
> + (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL))
> {
> /*
> * These are name references, do not push the scope stack
> @@ -1183,7 +1185,8 @@ XfNamespaceLocateEnd (
>
> if ((Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) ||
> (Op->Asl.ParseOpcode == PARSEOP_NAMESEG) ||
> - (Op->Asl.ParseOpcode == PARSEOP_METHODCALL))
> + (Op->Asl.ParseOpcode == PARSEOP_METHODCALL) ||
> + (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL))
> {
> return_ACPI_STATUS (AE_OK);
> }
> diff --git a/src/acpica/source/compiler/cvcompiler.c b/src/acpica/source/compiler/cvcompiler.c
> index e8366ce5..fab9fb94 100644
> --- a/src/acpica/source/compiler/cvcompiler.c
> +++ b/src/acpica/source/compiler/cvcompiler.c
> @@ -191,6 +191,7 @@ CvProcessComment (
> *StringBuffer = (char) c1;
> ++StringBuffer;
> *StringBuffer = 0;
> +
> CvDbgPrint ("Multi-line comment\n");
> CommentString = UtStringCacheCalloc (strlen (MsgBuffer) + 1);
> strcpy (CommentString, MsgBuffer);
> @@ -198,17 +199,15 @@ CvProcessComment (
> CvDbgPrint ("CommentString: %s\n", CommentString);
>
> /*
> - * Determine whether if this comment spans multiple lines.
> - * If so, break apart the comment by line so that it can be
> - * properly indented.
> + * Determine whether if this comment spans multiple lines. If so,
> + * break apart the comment by storing each line in a different node
> + * within the comment list. This allows the disassembler to
> + * properly indent a multi-line comment.
> */
> - if (strchr (CommentString, '\n') != NULL)
> + LineToken = strtok (CommentString, "\n");
> +
> + if (LineToken)
> {
> - /*
> - * Get the first token. The for loop pads subsequent lines
> - * for comments similar to the style of this comment.
> - */
> - LineToken = strtok (CommentString, "\n");
> FinalLineToken = UtStringCacheCalloc (strlen (LineToken) + 1);
> strcpy (FinalLineToken, LineToken);
>
> @@ -263,7 +262,10 @@ CvProcessComment (
> * if this is not a regular comment, pad with extra spaces that appeared
> * in the original source input to retain the original spacing.
> */
> - FinalCommentString = UtStringCacheCalloc (strlen (CommentString) + CurrentState.SpacesBefore + 1);
> + FinalCommentString =
> + UtStringCacheCalloc (strlen (CommentString) +
> + CurrentState.SpacesBefore + 1);
> +
> for (i=0; (CurrentState.CommentType != ASL_COMMENT_STANDARD) &&
> (i < CurrentState.SpacesBefore); ++i)
> {
> @@ -333,7 +335,9 @@ CvProcessCommentType2 (
> * [ (spaces) (comment) ( * /) ('\0') ]
> *
> */
> - FinalCommentString = UtStringCacheCalloc (CurrentState.SpacesBefore + strlen (CommentString) + 3 + 1);
> + FinalCommentString = UtStringCacheCalloc (CurrentState.SpacesBefore +
> + strlen (CommentString) + 3 + 1);
> +
> for (i=0; (CurrentState.CommentType!=1) && (i<CurrentState.SpacesBefore); ++i)
> {
> FinalCommentString[i] = ' ';
> @@ -556,6 +560,12 @@ CgWriteOneAmlComment(
> UINT8 CommentOption = InputOption;
> UINT8 CommentOpcode = (UINT8)AML_COMMENT_OP;
>
> +
> + if (!CommentToPrint)
> + {
> + return;
> + }
> +
> CgLocalWriteAmlData (Op, &CommentOpcode, 1);
> CgLocalWriteAmlData (Op, &CommentOption, 1);
>
> @@ -603,8 +613,12 @@ CgWriteAmlComment(
>
> NewFilename =
> FlGenerateFilename (Op->Asl.Filename, FILE_SUFFIX_DISASSEMBLY);
> - CvDbgPrint ("Writing file comment, \"%s\" for %s\n",
> - NewFilename, Op->Asl.ParseOpName);
> + if (NewFilename)
> + {
> + CvDbgPrint ("Writing file comment, \"%s\" for %s\n",
> + NewFilename, Op->Asl.ParseOpName);
> + }
> +
> CgWriteOneAmlComment(Op, NewFilename, FILENAME_COMMENT);
>
> if (Op->Asl.ParentFilename &&
> @@ -688,17 +702,16 @@ CgWriteAmlComment(
> *
> ******************************************************************************/
>
> -ACPI_COMMENT_NODE*
> +ACPI_COMMENT_NODE *
> CvCommentNodeCalloc (
> void)
> {
> ACPI_COMMENT_NODE *NewCommentNode;
>
>
> - NewCommentNode =
> - (ACPI_COMMENT_NODE*) UtLocalCalloc (sizeof(ACPI_COMMENT_NODE));
> + NewCommentNode = UtLocalCalloc (sizeof (ACPI_COMMENT_NODE));
> NewCommentNode->Next = NULL;
> - return NewCommentNode;
> + return (NewCommentNode);
> }
>
>
> @@ -907,10 +920,12 @@ CvAppendInlineComment (
> {
> return ToAdd;
> }
> - if (ToAdd)
> + if (!ToAdd)
> {
> - Size = strlen (ToAdd);
> + return InlineComment;
> }
> +
> + Size = strlen (ToAdd);
> Size += strlen (InlineComment);
> Str = UtStringCacheCalloc (Size+1);
> strcpy (Str, InlineComment);
> diff --git a/src/acpica/source/compiler/cvdisasm.c b/src/acpica/source/compiler/cvdisasm.c
> index e75ee0ab..6e9b73f0 100644
> --- a/src/acpica/source/compiler/cvdisasm.c
> +++ b/src/acpica/source/compiler/cvdisasm.c
> @@ -314,6 +314,7 @@ CvPrintOneCommentType (
>
> if (*CommentToPrint)
> {
> + CommentExists = TRUE;
> AcpiOsPrintf ("%s", *CommentToPrint);
> *CommentToPrint = NULL;
> }
> @@ -495,6 +496,7 @@ CvSwitchFiles(
> {
> char *Filename = Op->Common.CvFilename;
> ACPI_FILE_NODE *FNode;
> + ACPI_FILE_NODE *Current;
>
> CvDbgPrint ("Switching from %s to %s\n", AcpiGbl_CurrentFilename, Filename);
> FNode = CvFilenameExists (Filename, AcpiGbl_FileTreeRoot);
> @@ -509,23 +511,23 @@ CvSwitchFiles(
> AslCommonError (ASL_ERROR, ASL_MSG_OPEN, 0, 0, 0, 0, NULL, MsgBuffer);
> AslAbort ();
> }
> + Current = FNode;
>
> /*
> * If the previous file is a descendent of the current file,
> * make sure that Include statements from the current file
> * to the previous have been emitted.
> */
> - while (FNode &&
> - FNode->Parent &&
> - AcpiUtStricmp (FNode->Filename, AcpiGbl_CurrentFilename))
> + while (Current &&
> + Current->Parent &&
> + AcpiUtStricmp (Current->Filename, AcpiGbl_CurrentFilename))
> {
> - CvPrintInclude (FNode, Level);
> - FNode = FNode->Parent;
> + CvPrintInclude (Current, Level);
> + Current = Current->Parent;
> }
>
> - /* Redirect output to the Op->Common.CvFilename */
> + /* Redirect output to Op->Common.CvFilename */
>
> - FNode = CvFilenameExists (Filename, AcpiGbl_FileTreeRoot);
> AcpiOsRedirectOutput (FNode->File);
> AcpiGbl_CurrentFilename = FNode->Filename;
> }
> diff --git a/src/acpica/source/compiler/cvparser.c b/src/acpica/source/compiler/cvparser.c
> index cdb165dc..060e8aed 100644
> --- a/src/acpica/source/compiler/cvparser.c
> +++ b/src/acpica/source/compiler/cvparser.c
> @@ -215,7 +215,7 @@ CvIsFilename (
>
> for(i = 0; i<Length; ++i)
> {
> - if (!isprint (Filename[i]))
> + if (!isprint ((int) Filename[i]))
> {
> return FALSE;
> }
> @@ -440,6 +440,11 @@ CvFilenameExists(
> ACPI_FILE_NODE *Current = Head;
>
>
> + if (!Filename)
> + {
> + return (NULL);
> + }
> +
> while (Current)
> {
> if (!AcpiUtStricmp (Current->Filename, Filename))
> diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
> index 9a6f08ee..61b40b4a 100644
> --- a/src/acpica/source/compiler/dtcompiler.h
> +++ b/src/acpica/source/compiler/dtcompiler.h
> @@ -578,6 +578,10 @@ DtCompileHest (
> void **PFieldList);
>
> ACPI_STATUS
> +DtCompileHmat (
> + void **PFieldList);
> +
> +ACPI_STATUS
> DtCompileIort (
> void **PFieldList);
>
> @@ -618,6 +622,10 @@ DtCompilePmtt (
> void **PFieldList);
>
> ACPI_STATUS
> +DtCompilePptt (
> + void **PFieldList);
> +
> +ACPI_STATUS
> DtCompilePcct (
> void **PFieldList);
>
> @@ -698,6 +706,7 @@ extern const unsigned char TemplateFadt[];
> extern const unsigned char TemplateFpdt[];
> extern const unsigned char TemplateGtdt[];
> extern const unsigned char TemplateHest[];
> +extern const unsigned char TemplateHmat[];
> extern const unsigned char TemplateHpet[];
> extern const unsigned char TemplateIort[];
> extern const unsigned char TemplateIvrs[];
> @@ -712,6 +721,7 @@ extern const unsigned char TemplateMtmr[];
> extern const unsigned char TemplateNfit[];
> extern const unsigned char TemplatePcct[];
> extern const unsigned char TemplatePmtt[];
> +extern const unsigned char TemplatePptt[];
> extern const unsigned char TemplateRasf[];
> extern const unsigned char TemplateRsdt[];
> extern const unsigned char TemplateS3pt[];
> @@ -731,6 +741,7 @@ extern const unsigned char TemplateWdat[];
> extern const unsigned char TemplateWddt[];
> extern const unsigned char TemplateWdrt[];
> extern const unsigned char TemplateWpbt[];
> +extern const unsigned char TemplateWsmt[];
> extern const unsigned char TemplateXenv[];
> extern const unsigned char TemplateXsdt[];
>
> diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c
> index 33afa3bf..13e8b638 100644
> --- a/src/acpica/source/compiler/dtfield.c
> +++ b/src/acpica/source/compiler/dtfield.c
> @@ -679,6 +679,36 @@ DtCompileFlag (
> BitLength = 2;
> break;
>
> + case ACPI_DMT_FLAGS4_0:
> +
> + BitPosition = 0;
> + BitLength = 4;
> + break;
> +
> + case ACPI_DMT_FLAGS4_4:
> +
> + BitPosition = 4;
> + BitLength = 4;
> + break;
> +
> + case ACPI_DMT_FLAGS4_8:
> +
> + BitPosition = 8;
> + BitLength = 4;
> + break;
> +
> + case ACPI_DMT_FLAGS4_12:
> +
> + BitPosition = 12;
> + BitLength = 4;
> + break;
> +
> + case ACPI_DMT_FLAGS16_16:
> +
> + BitPosition = 16;
> + BitLength = 16;
> + break;
> +
> default:
>
> DtFatal (ASL_MSG_COMPILER_INTERNAL, Field, "Invalid flag opcode");
> diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c
> index c25f4b0e..bdf0419c 100644
> --- a/src/acpica/source/compiler/dttable1.c
> +++ b/src/acpica/source/compiler/dttable1.c
> @@ -1249,6 +1249,16 @@ DtCompileHest (
> InfoTable = AcpiDmTableInfoHest9;
> break;
>
> + case ACPI_HEST_TYPE_GENERIC_ERROR_V2:
> +
> + InfoTable = AcpiDmTableInfoHest10;
> + break;
> +
> + case ACPI_HEST_TYPE_IA32_DEFERRED_CHECK:
> +
> + InfoTable = AcpiDmTableInfoHest11;
> + break;
> +
> default:
>
> /* Cannot continue on unknown type */
> @@ -1283,6 +1293,12 @@ DtCompileHest (
> Subtable->Buffer))->NumHardwareBanks;
> break;
>
> + case ACPI_HEST_TYPE_IA32_DEFERRED_CHECK:
> +
> + BankCount = (ACPI_CAST_PTR (ACPI_HEST_IA_DEFERRED_CHECK,
> + Subtable->Buffer))->NumHardwareBanks;
> + break;
> +
> default:
>
> break;
> @@ -1308,6 +1324,218 @@ DtCompileHest (
>
> /******************************************************************************
> *
> + * FUNCTION: DtCompileHmat
> + *
> + * PARAMETERS: List - Current field list pointer
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Compile HMAT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompileHmat (
> + void **List)
> +{
> + ACPI_STATUS Status;
> + DT_SUBTABLE *Subtable;
> + DT_SUBTABLE *ParentTable;
> + DT_FIELD **PFieldList = (DT_FIELD **) List;
> + DT_FIELD *SubtableStart;
> + DT_FIELD *EntryStart;
> + ACPI_HMAT_STRUCTURE *HmatStruct;
> + ACPI_HMAT_LOCALITY *HmatLocality;
> + ACPI_HMAT_CACHE *HmatCache;
> + ACPI_DMTABLE_INFO *InfoTable;
> + UINT32 IntPDNumber;
> + UINT32 TgtPDNumber;
> + UINT64 EntryNumber;
> + UINT16 SMBIOSHandleNumber;
> +
> +
> + ParentTable = DtPeekSubtable ();
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoHmat,
> + &Subtable, TRUE);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> + DtInsertSubtable (ParentTable, Subtable);
> +
> + while (*PFieldList)
> + {
> + /* Compile HMAT structure header */
> +
> + SubtableStart = *PFieldList;
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoHmatHdr,
> + &Subtable, TRUE);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> + DtInsertSubtable (ParentTable, Subtable);
> +
> + HmatStruct = ACPI_CAST_PTR (ACPI_HMAT_STRUCTURE, Subtable->Buffer);
> + HmatStruct->Length = Subtable->Length;
> +
> + /* Compile HMAT structure body */
> +
> + switch (HmatStruct->Type)
> + {
> + case ACPI_HMAT_TYPE_ADDRESS_RANGE:
> +
> + InfoTable = AcpiDmTableInfoHmat0;
> + break;
> +
> + case ACPI_HMAT_TYPE_LOCALITY:
> +
> + InfoTable = AcpiDmTableInfoHmat1;
> + break;
> +
> + case ACPI_HMAT_TYPE_CACHE:
> +
> + InfoTable = AcpiDmTableInfoHmat2;
> + break;
> +
> + default:
> +
> + DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "HMAT");
> + return (AE_ERROR);
> + }
> +
> + Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> + DtInsertSubtable (ParentTable, Subtable);
> + HmatStruct->Length += Subtable->Length;
> +
> + /* Compile HMAT structure additionals */
> +
> + switch (HmatStruct->Type)
> + {
> + case ACPI_HMAT_TYPE_LOCALITY:
> +
> + HmatLocality = ACPI_SUB_PTR (ACPI_HMAT_LOCALITY,
> + Subtable->Buffer, sizeof (ACPI_HMAT_STRUCTURE));
> +
> + /* Compile initiator proximity domain list */
> +
> + IntPDNumber = 0;
> + while (*PFieldList)
> + {
> + Status = DtCompileTable (PFieldList,
> + AcpiDmTableInfoHmat1a, &Subtable, TRUE);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> + if (!Subtable)
> + {
> + break;
> + }
> + DtInsertSubtable (ParentTable, Subtable);
> + HmatStruct->Length += Subtable->Length;
> + IntPDNumber++;
> + }
> + HmatLocality->NumberOfInitiatorPDs = IntPDNumber;
> +
> + /* Compile target proximity domain list */
> +
> + TgtPDNumber = 0;
> + while (*PFieldList)
> + {
> + Status = DtCompileTable (PFieldList,
> + AcpiDmTableInfoHmat1b, &Subtable, TRUE);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> + if (!Subtable)
> + {
> + break;
> + }
> + DtInsertSubtable (ParentTable, Subtable);
> + HmatStruct->Length += Subtable->Length;
> + TgtPDNumber++;
> + }
> + HmatLocality->NumberOfTargetPDs = TgtPDNumber;
> +
> + /* Save start of the entries for reporting errors */
> +
> + EntryStart = *PFieldList;
> +
> + /* Compile latency/bandwidth entries */
> +
> + EntryNumber = 0;
> + while (*PFieldList)
> + {
> + Status = DtCompileTable (PFieldList,
> + AcpiDmTableInfoHmat1c, &Subtable, TRUE);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> + if (!Subtable)
> + {
> + break;
> + }
> + DtInsertSubtable (ParentTable, Subtable);
> + HmatStruct->Length += Subtable->Length;
> + EntryNumber++;
> + }
> +
> + /* Validate number of entries */
> +
> + if (EntryNumber !=
> + ((UINT64)IntPDNumber * (UINT64)TgtPDNumber))
> + {
> + DtFatal (ASL_MSG_INVALID_EXPRESSION, EntryStart, "HMAT");
> + return (AE_ERROR);
> + }
> + break;
> +
> + case ACPI_HMAT_TYPE_CACHE:
> +
> + /* Compile SMBIOS handles */
> +
> + HmatCache = ACPI_SUB_PTR (ACPI_HMAT_CACHE,
> + Subtable->Buffer, sizeof (ACPI_HMAT_STRUCTURE));
> + SMBIOSHandleNumber = 0;
> + while (*PFieldList)
> + {
> + Status = DtCompileTable (PFieldList,
> + AcpiDmTableInfoHmat2a, &Subtable, TRUE);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> + if (!Subtable)
> + {
> + break;
> + }
> + DtInsertSubtable (ParentTable, Subtable);
> + HmatStruct->Length += Subtable->Length;
> + SMBIOSHandleNumber++;
> + }
> + HmatCache->NumberOfSMBIOSHandles = SMBIOSHandleNumber;
> + break;
> +
> + default:
> +
> + break;
> + }
> + }
> +
> + return (AE_OK);
> +}
> +
> +
> +/******************************************************************************
> + *
> * FUNCTION: DtCompileIort
> *
> * PARAMETERS: List - Current field list pointer
> diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c
> index e1d0e8bf..356a7d0d 100644
> --- a/src/acpica/source/compiler/dttable2.c
> +++ b/src/acpica/source/compiler/dttable2.c
> @@ -871,6 +871,16 @@ DtCompilePcct (
> InfoTable = AcpiDmTableInfoPcct2;
> break;
>
> + case ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE:
> +
> + InfoTable = AcpiDmTableInfoPcct3;
> + break;
> +
> + case ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE:
> +
> + InfoTable = AcpiDmTableInfoPcct4;
> + break;
> +
> default:
>
> DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PCCT");
> @@ -1037,6 +1047,125 @@ DtCompilePmtt (
>
> /******************************************************************************
> *
> + * FUNCTION: DtCompilePptt
> + *
> + * PARAMETERS: List - Current field list pointer
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Compile PPTT.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +DtCompilePptt (
> + void **List)
> +{
> + ACPI_STATUS Status;
> + ACPI_SUBTABLE_HEADER *PpttHeader;
> + ACPI_PPTT_PROCESSOR *PpttProcessor = NULL;
> + DT_SUBTABLE *Subtable;
> + DT_SUBTABLE *ParentTable;
> + ACPI_DMTABLE_INFO *InfoTable;
> + DT_FIELD **PFieldList = (DT_FIELD **) List;
> + DT_FIELD *SubtableStart;
> +
> +
> + ParentTable = DtPeekSubtable ();
> + while (*PFieldList)
> + {
> + SubtableStart = *PFieldList;
> +
> + /* Compile PPTT subtable header */
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoPpttHdr,
> + &Subtable, TRUE);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> + DtInsertSubtable (ParentTable, Subtable);
> + PpttHeader = ACPI_CAST_PTR (ACPI_SUBTABLE_HEADER, Subtable->Buffer);
> + PpttHeader->Length = (UINT8)(Subtable->Length);
> +
> + switch (PpttHeader->Type)
> + {
> + case ACPI_PPTT_TYPE_PROCESSOR:
> +
> + InfoTable = AcpiDmTableInfoPptt0;
> + break;
> +
> + case ACPI_PPTT_TYPE_CACHE:
> +
> + InfoTable = AcpiDmTableInfoPptt1;
> + break;
> +
> + case ACPI_PPTT_TYPE_ID:
> +
> + InfoTable = AcpiDmTableInfoPptt2;
> + break;
> +
> + default:
> +
> + DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PPTT");
> + return (AE_ERROR);
> + }
> +
> + /* Compile PPTT subtable body */
> +
> + Status = DtCompileTable (PFieldList, InfoTable, &Subtable, TRUE);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> + DtInsertSubtable (ParentTable, Subtable);
> + PpttHeader->Length += (UINT8)(Subtable->Length);
> +
> + /* Compile PPTT subtable additionals */
> +
> + switch (PpttHeader->Type)
> + {
> + case ACPI_PPTT_TYPE_PROCESSOR:
> +
> + PpttProcessor = ACPI_SUB_PTR (ACPI_PPTT_PROCESSOR,
> + Subtable->Buffer, sizeof (ACPI_SUBTABLE_HEADER));
> + if (PpttProcessor)
> + {
> + /* Compile initiator proximity domain list */
> +
> + PpttProcessor->NumberOfPrivResources = 0;
> + while (*PFieldList)
> + {
> + Status = DtCompileTable (PFieldList,
> + AcpiDmTableInfoPptt0a, &Subtable, TRUE);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> + if (!Subtable)
> + {
> + break;
> + }
> +
> + DtInsertSubtable (ParentTable, Subtable);
> + PpttHeader->Length += (UINT8)(Subtable->Length);
> + PpttProcessor->NumberOfPrivResources++;
> + }
> + }
> + break;
> +
> + default:
> +
> + break;
> + }
> + }
> +
> + return (AE_OK);
> +}
> +
> +
> +/******************************************************************************
> + *
> * FUNCTION: DtCompileRsdt
> *
> * PARAMETERS: List - Current field list pointer
> @@ -1324,6 +1453,11 @@ DtCompileSrat (
> InfoTable = AcpiDmTableInfoSrat3;
> break;
>
> + case ACPI_SRAT_TYPE_GIC_ITS_AFFINITY:
> +
> + InfoTable = AcpiDmTableInfoSrat4;
> + break;
> +
> default:
>
> DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SRAT");
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index 701e70f4..bb4dded4 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -577,11 +577,11 @@ const unsigned char TemplateGtdt[] =
>
> const unsigned char TemplateHest[] =
> {
> - 0x48,0x45,0x53,0x54,0xD4,0x01,0x00,0x00, /* 00000000 "HEST...." */
> - 0x01,0x20,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ". INTEL " */
> - 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */
> + 0x48,0x45,0x53,0x54,0x7C,0x02,0x00,0x00, /* 00000000 "HEST|..." */
> + 0x01,0x97,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" */
> - 0x28,0x05,0x10,0x20,0x04,0x00,0x00,0x00, /* 00000020 "(.. ...." */
> + 0x03,0x03,0x17,0x20,0x04,0x00,0x00,0x00, /* 00000020 "... ...." */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, /* 00000028 "........" */
> 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */
> @@ -596,7 +596,7 @@ const unsigned char TemplateHest[] =
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */
> 0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x01, /* 00000088 "........" */
> 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000090 "........" */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000098 "........" */
> + 0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000098 "........" */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A8 "........" */
> 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00, /* 000000B0 "........" */
> @@ -635,7 +635,52 @@ const unsigned char TemplateHest[] =
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001B8 "........" */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001C0 "........" */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001C8 "........" */
> - 0x00,0x10,0x00,0x00 /* 000001D0 "...." */
> + 0x00,0x10,0x00,0x00,0x0A,0x00,0x03,0x00, /* 000001D0 "........" */
> + 0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00, /* 000001D8 "........" */
> + 0x01,0x00,0x00,0x00,0x00,0x10,0x00,0x00, /* 000001E0 "........" */
> + 0x00,0x40,0x00,0x04,0x00,0x00,0x00,0x00, /* 000001E8 ". at ......" */
> + 0x00,0x00,0x00,0x00,0x04,0x1C,0x00,0x00, /* 000001F0 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001F8 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000200 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000208 "........" */
> + 0x00,0x10,0x00,0x00,0x00,0x40,0x00,0x04, /* 00000210 "..... at .." */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000218 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000220 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000228 "........" */
> + 0x0B,0x00,0x01,0x00,0x00,0x00,0x00,0x01, /* 00000230 "........" */
> + 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000238 "........" */
> + 0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000240 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000248 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000250 "........" */
> + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000258 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000260 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000268 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000270 "........" */
> + 0x00,0x00,0x00,0x00 /* 00000278 "...." */
> +};
> +
> +const unsigned char TemplateHmat[] =
> +{
> + 0x48,0x4D,0x41,0x54,0x9C,0x00,0x00,0x00, /* 00000000 "HMAT...." */
> + 0x00,0x54,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".TINTEL " */
> + 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */
> + 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
> + 0x03,0x03,0x17,0x20,0x00,0x00,0x00,0x00, /* 00000020 "... ...." */
> + 0x00,0x00,0x00,0x00,0x28,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 "........" */
> + 0x01,0x00,0x00,0x00,0x2A,0x00,0x00,0x00, /* 00000050 "....*..." */
> + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000058 "........" */
> + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000070 "........" */
> + 0x00,0x00,0x02,0x00,0x00,0x00,0x22,0x00, /* 00000078 "......"." */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000090 "........" */
> + 0x01,0x00,0x00,0x00 /* 00000098 "...." */
> };
>
> const unsigned char TemplateHpet[] =
> @@ -958,39 +1003,80 @@ const unsigned char TemplateMtmr[] =
>
> const unsigned char TemplatePcct[] =
> {
> - 0x50,0x43,0x43,0x54,0x06,0x01,0x00,0x00, /* 00000000 "PCCT...." */
> - 0x01,0xE3,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" */
> - 0x18,0x03,0x16,0x20,0x01,0x00,0x00,0x00, /* 00000020 "... ...." */
> + 0x50,0x43,0x43,0x54,0x4e,0x02,0x00,0x00, /* 00000000 "PCCTN..." */
> + 0x01,0x47,0x49,0x4e,0x54,0x45,0x4c,0x20, /* 00000008 ".GINTEL " */
> + 0x54,0x65,0x6d,0x70,0x6c,0x61,0x74,0x65, /* 00000010 "Template" */
> + 0x01,0x00,0x00,0x00,0x49,0x4e,0x54,0x4c, /* 00000018 "....INTL" */
> + 0x03,0x03,0x17,0x20,0x01,0x00,0x00,0x00, /* 00000020 "... ...." */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */
> - 0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 ".>......" */
> + 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,0x01,0x3E, /* 00000068 "wwww...>" */
> + 0x77,0x77,0x77,0x77,0x88,0x88,0x01,0x3e, /* 00000068 "wwww...>" */
> 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000070 "........" */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x32, /* 00000080 ".......2" */
> 0x00,0x03,0x44,0x44,0x44,0x44,0x44,0x44, /* 00000088 "..DDDDDD" */
> 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, /* 00000090 "DDDDDDDD" */
> 0x44,0x44,0x55,0x55,0x55,0x55,0x55,0x55, /* 00000098 "DDUUUUUU" */
> - 0x55,0x55,0x66,0x66,0x66,0x66,0x77,0x77, /* 000000A0 "UUffffww" */
> - 0x77,0x77,0x88,0x88,0x02,0x5A,0x01,0x00, /* 000000A8 "ww...Z.." */
> - 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */
> - 0x00,0x00,0x00,0x00,0x01,0x32,0x00,0x03, /* 000000C0 ".....2.." */
> - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, /* 000000C8 "DDDDDDDD" */
> - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, /* 000000D0 "DDDDDDDD" */
> - 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, /* 000000D8 "UUUUUUUU" */
> - 0x66,0x66,0x66,0x66,0x77,0x77,0x77,0x77, /* 000000E0 "ffffwwww" */
> - 0x88,0x88,0x01,0x32,0x00,0x03,0x33,0x33, /* 000000E8 "...2..33" */
> - 0x33,0x33,0x33,0x33,0x33,0x33,0x44,0x44, /* 000000F0 "333333DD" */
> - 0x44,0x44,0x44,0x44,0x44,0x44,0x55,0x55, /* 000000F8 "DDDDDDUU" */
> - 0x55,0x55,0x55,0x55,0x55,0x55 /* 00000100 "UUUUUU" */
> + 0x55,0x55,0x66,0x66,0x66,0x66,0x77,0x77, /* 000000a0 "UUffffww" */
> + 0x77,0x77,0x88,0x88,0x02,0x5a,0x01,0x00, /* 000000a8 "ww...Z.." */
> + 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000b0 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000b8 "........" */
> + 0x00,0x00,0x00,0x00,0x01,0x32,0x00,0x03, /* 000000c0 ".....2.." */
> + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, /* 000000c8 "DDDDDDDD" */
> + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, /* 000000d0 "DDDDDDDD" */
> + 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, /* 000000d8 "UUUUUUUU" */
> + 0x66,0x66,0x66,0x66,0x77,0x77,0x77,0x77, /* 000000e0 "ffffwwww" */
> + 0x88,0x88,0x01,0x32,0x00,0x03,0x33,0x33, /* 000000e8 "...2..33" */
> + 0x33,0x33,0x33,0x33,0x33,0x33,0x44,0x44, /* 000000f0 "333333DD" */
> + 0x44,0x44,0x44,0x44,0x44,0x44,0x55,0x55, /* 000000f8 "DDDDDDUU" */
> + 0x55,0x55,0x55,0x55,0x55,0x55,0x03,0xa4, /* 00000100 "UUUUUU.." */
> + 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000108 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000110 "........" */
> + 0x00,0x00,0x01,0x32,0x00,0x03,0x33,0x33, /* 00000118 "...2..33" */
> + 0x33,0x33,0x33,0x33,0x33,0x33,0x44,0x44, /* 00000120 "333333DD" */
> + 0x44,0x44,0x44,0x44,0x44,0x44,0x55,0x55, /* 00000128 "DDDDDDUU" */
> + 0x55,0x55,0x55,0x55,0x55,0x55,0x66,0x66, /* 00000130 "UUUUUUff" */
> + 0x66,0x66,0x77,0x77,0x77,0x77,0x88,0x88, /* 00000138 "ffwwww.." */
> + 0x88,0x88,0x01,0x32,0x00,0x03,0x33,0x33, /* 00000140 "...2..33" */
> + 0x33,0x33,0x33,0x33,0x33,0x33,0x99,0x99, /* 00000148 "333333.." */
> + 0x99,0x99,0x99,0x99,0x99,0x99,0x00,0x00, /* 00000150 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000158 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x32, /* 00000160 ".......2" */
> + 0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33, /* 00000168 "..333333" */
> + 0x33,0x33,0x22,0x22,0x22,0x22,0x22,0x22, /* 00000170 "33""""""" */
> + 0x22,0x22,0x01,0x32,0x00,0x03,0x33,0x33, /* 00000178 """.2..33" */
> + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, /* 00000180 "33333333" */
> + 0x33,0x33,0x33,0x33,0x33,0x33,0x44,0x44, /* 00000188 "333333DD" */
> + 0x44,0x44,0x44,0x44,0x44,0x44,0x01,0x32, /* 00000190 "DDDDDD.2" */
> + 0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33, /* 00000198 "..333333" */
> + 0x33,0x33,0x55,0x55,0x55,0x55,0x55,0x55, /* 000001a0 "33UUUUUU" */
> + 0x55,0x55,0x04,0xa4,0x01,0x00,0x00,0x00, /* 000001a8 "UU......" */
> + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001b0 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x32, /* 000001b8 ".......2" */
> + 0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33, /* 000001c0 "..333333" */
> + 0x33,0x33,0x44,0x44,0x44,0x44,0x44,0x44, /* 000001c8 "33DDDDDD" */
> + 0x44,0x44,0x55,0x55,0x55,0x55,0x55,0x55, /* 000001d0 "DDUUUUUU" */
> + 0x55,0x55,0x66,0x66,0x66,0x66,0x77,0x77, /* 000001d8 "UUffffww" */
> + 0x77,0x77,0x88,0x88,0x88,0x88,0x01,0x32, /* 000001e0 "ww.....2" */
> + 0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33, /* 000001e8 "..333333" */
> + 0x33,0x33,0x99,0x99,0x99,0x99,0x99,0x99, /* 000001f0 "33......" */
> + 0x99,0x99,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001f8 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000200 "........" */
> + 0x00,0x00,0x01,0x32,0x00,0x03,0x33,0x33, /* 00000208 "...2..33" */
> + 0x33,0x33,0x33,0x33,0x33,0x33,0x22,0x22, /* 00000210 "333333""" */
> + 0x22,0x22,0x22,0x22,0x22,0x22,0x01,0x32, /* 00000218 """"""".2" */
> + 0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33, /* 00000220 "..333333" */
> + 0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, /* 00000228 "33333333" */
> + 0x33,0x33,0x44,0x44,0x44,0x44,0x44,0x44, /* 00000230 "33DDDDDD" */
> + 0x44,0x44,0x01,0x32,0x00,0x03,0x33,0x33, /* 00000238 "DD.2..33" */
> + 0x33,0x33,0x33,0x33,0x33,0x33,0x55,0x55, /* 00000240 "333333UU" */
> + 0x55,0x55,0x55,0x55,0x55,0x55 /* 00000248 "UUUUUU| */
> };
>
> const unsigned char TemplatePmtt[] =
> @@ -1020,6 +1106,25 @@ const unsigned char TemplatePmtt[] =
> 0x00,0x00,0x00,0x00 /* 000000B0 "...." */
> };
>
> +const unsigned char TemplatePptt[] =
> +{
> + 0x50,0x50,0x54,0x54,0x72,0x00,0x00,0x00, /* 00000000 "PPTTr..." */
> + 0x01,0x86,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
> + 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */
> + 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
> + 0x03,0x03,0x17,0x20,0x00,0x18,0x00,0x00, /* 00000020 "... ...." */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */
> + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */
> + 0x00,0x00,0x00,0x00,0x01,0x18,0x00,0x00, /* 00000038 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */
> + 0x00,0x00,0x00,0x00,0x02,0x1E,0x00,0x00, /* 00000050 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */
> + 0x00,0x00 /* 00000070 ".." */
> +};
> +
> const unsigned char TemplateRasf[] =
> {
> 0x52,0x41,0x53,0x46,0x30,0x00,0x00,0x00, /* 00000000 "RASF0..." */
> @@ -1213,11 +1318,11 @@ const unsigned char TemplateSpmi[] =
>
> const unsigned char TemplateSrat[] =
> {
> - 0x53,0x52,0x41,0x54,0x92,0x00,0x00,0x00, /* 00000000 "SRAT...." */
> - 0x03,0x50,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".PINTEL " */
> + 0x53,0x52,0x41,0x54,0x9E,0x00,0x00,0x00, /* 00000000 "SRAT...." */
> + 0x03,0x55,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".UINTEL " */
> 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */
> 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
> - 0x24,0x07,0x14,0x20,0x01,0x00,0x00,0x00, /* 00000020 "$.. ...." */
> + 0x03,0x03,0x17,0x20,0x01,0x00,0x00,0x00, /* 00000020 "... ...." */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */
> 0x00,0x10,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */
> @@ -1231,7 +1336,8 @@ const unsigned char TemplateSrat[] =
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */
> 0x03,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */
> 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */
> - 0x00,0x00 /* 00000090 ".." */
> + 0x00,0x00,0x04,0x0C,0x00,0x00,0x00,0x00, /* 00000090 "........" */
> + 0x00,0x00,0x01,0x00,0x00,0x00 /* 00000098 "......" */
> };
>
> const unsigned char TemplateStao[] =
> @@ -1379,6 +1485,15 @@ const unsigned char TemplateWpbt[] =
> 0x72,0x00,0x74,0x00,0x68,0x00,0x00,0x00 /* 00000090 "r.t.h..." */
> };
>
> +const unsigned char TemplateWsmt[] =
> +{
> + 0x57,0x53,0x4D,0x54,0x28,0x00,0x00,0x00, /* 00000000 "WSMT(..." */
> + 0x00,0x08,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
> + 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */
> + 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
> + 0x19,0x01,0x17,0x20,0x05,0x00,0x00,0x00 /* 00000020 "... ...." */
> +};
> +
> const unsigned char TemplateXenv[] =
> {
> 0x58,0x45,0x4E,0x56,0x39,0x00,0x00,0x00, /* 00000000 "XENV9..." */
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index 7fbc7d56..88072175 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -371,6 +371,11 @@ DtGetFieldType (
> case ACPI_DMT_FLAGS1:
> case ACPI_DMT_FLAGS2:
> case ACPI_DMT_FLAGS4:
> + case ACPI_DMT_FLAGS4_0:
> + case ACPI_DMT_FLAGS4_4:
> + case ACPI_DMT_FLAGS4_8:
> + case ACPI_DMT_FLAGS4_12:
> + case ACPI_DMT_FLAGS16_16:
>
> Type = DT_FIELD_TYPE_FLAG;
> break;
> @@ -512,6 +517,11 @@ DtGetFieldLength (
> case ACPI_DMT_FLAGS1:
> case ACPI_DMT_FLAGS2:
> case ACPI_DMT_FLAGS4:
> + case ACPI_DMT_FLAGS4_0:
> + case ACPI_DMT_FLAGS4_4:
> + case ACPI_DMT_FLAGS4_8:
> + case ACPI_DMT_FLAGS4_12:
> + case ACPI_DMT_FLAGS16_16:
> case ACPI_DMT_LABEL:
> case ACPI_DMT_EXTRA_TEXT:
>
> @@ -527,6 +537,7 @@ DtGetFieldLength (
> case ACPI_DMT_MADT:
> case ACPI_DMT_PCCT:
> case ACPI_DMT_PMTT:
> + case ACPI_DMT_PPTT:
> case ACPI_DMT_SRAT:
> case ACPI_DMT_ASF:
> case ACPI_DMT_HESTNTYP:
> @@ -543,6 +554,7 @@ DtGetFieldLength (
> case ACPI_DMT_UINT16:
> case ACPI_DMT_DMAR:
> case ACPI_DMT_HEST:
> + case ACPI_DMT_HMAT:
> case ACPI_DMT_NFIT:
> case ACPI_DMT_PCI_PATH:
>
> diff --git a/src/acpica/source/compiler/fwts_iasl_interface.c b/src/acpica/source/compiler/fwts_iasl_interface.c
> index 1020512b..5fa7d1d1 100644
> --- a/src/acpica/source/compiler/fwts_iasl_interface.c
> +++ b/src/acpica/source/compiler/fwts_iasl_interface.c
> @@ -95,7 +95,7 @@ int fwts_iasl_disassemble_aml(
> /* Setup ACPICA disassembler globals */
> Gbl_WarningLevel = ASL_WARNING3;
> Gbl_IgnoreErrors = TRUE;
> - Gbl_DisasmFlag = TRUE;
> + AcpiGbl_DisasmFlag = TRUE;
> Gbl_DoCompile = FALSE;
> Gbl_OutputFilenamePrefix = (char*)outputfile;
> Gbl_UseDefaultAmlFilename = FALSE;
> @@ -233,7 +233,7 @@ int fwts_iasl_assemble_aml(const char *source, char **stdout_output, char **stde
> (void)close(stderr_fds[0]);
>
> /* Setup ACPICA compiler globals */
> - Gbl_DisasmFlag = FALSE;
> + AcpiGbl_DisasmFlag = FALSE;
> Gbl_DoCompile = TRUE;
> Gbl_PreprocessFlag = TRUE;
> Gbl_UseDefaultAmlFilename = FALSE;
> diff --git a/src/acpica/source/components/debugger/dbexec.c b/src/acpica/source/components/debugger/dbexec.c
> index 83af8896..0a00be81 100644
> --- a/src/acpica/source/components/debugger/dbexec.c
> +++ b/src/acpica/source/components/debugger/dbexec.c
> @@ -314,6 +314,18 @@ AcpiDbExecuteMethod (
>
> if (ACPI_FAILURE (Status))
> {
> + if ((Status == AE_ABORT_METHOD) || AcpiGbl_AbortMethod)
> + {
> + /* Clear the abort and fall back to the debugger prompt */
> +
> + ACPI_EXCEPTION ((AE_INFO, Status,
> + "Aborting top-level method"));
> +
> + AcpiGbl_AbortMethod = FALSE;
> + Status = AE_OK;
> + goto Cleanup;
> + }
> +
> ACPI_EXCEPTION ((AE_INFO, Status,
> "while executing %s from debugger", Info->Pathname));
>
> diff --git a/src/acpica/source/components/debugger/dbobject.c b/src/acpica/source/components/debugger/dbobject.c
> index 81f6b6e8..66906ef8 100644
> --- a/src/acpica/source/components/debugger/dbobject.c
> +++ b/src/acpica/source/components/debugger/dbobject.c
> @@ -588,7 +588,7 @@ AcpiDbDecodeLocals (
>
> if (DisplayLocals)
> {
> - AcpiOsPrintf ("\nInitialized Local Variables for method [%4.4s]:\n",
> + AcpiOsPrintf ("\nInitialized Local Variables for Method [%4.4s]:\n",
> AcpiUtGetNodeName (Node));
>
> for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++)
> @@ -604,7 +604,7 @@ AcpiDbDecodeLocals (
> else
> {
> AcpiOsPrintf (
> - "No Local Variables are initialized for method [%4.4s]\n",
> + "No Local Variables are initialized for Method [%4.4s]\n",
> AcpiUtGetNodeName (Node));
> }
> }
> @@ -667,7 +667,7 @@ AcpiDbDecodeArguments (
> AcpiOsPrintf (
> "Initialized Arguments for Method [%4.4s]: "
> "(%X arguments defined for method invocation)\n",
> - AcpiUtGetNodeName (Node), ObjDesc->Method.ParamCount);
> + AcpiUtGetNodeName (Node), Node->Object->Method.ParamCount);
>
> for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++)
> {
> diff --git a/src/acpica/source/components/debugger/dbxface.c b/src/acpica/source/components/debugger/dbxface.c
> index 02c4e5db..bfa7d7c7 100644
> --- a/src/acpica/source/components/debugger/dbxface.c
> +++ b/src/acpica/source/components/debugger/dbxface.c
> @@ -379,7 +379,7 @@ AcpiDbSingleStep (
> if ((AcpiGbl_DbOutputToFile) ||
> (AcpiDbgLevel & ACPI_LV_PARSE))
> {
> - AcpiOsPrintf ("\n[AmlDebug] Next AML Opcode to execute:\n");
> + AcpiOsPrintf ("\nAML Debug: Next AML Opcode to execute:\n");
> }
>
> /*
> diff --git a/src/acpica/source/components/disassembler/dmbuffer.c b/src/acpica/source/components/disassembler/dmbuffer.c
> index 75cc0963..27ea16b4 100644
> --- a/src/acpica/source/components/disassembler/dmbuffer.c
> +++ b/src/acpica/source/components/disassembler/dmbuffer.c
> @@ -261,7 +261,7 @@ AcpiDmDisasmByteList (
>
> /* Dump the ASCII equivalents within a comment */
>
> - AcpiOsPrintf (" /* ");
> + AcpiOsPrintf (" // ");
> for (j = 0; j < ACPI_BUFFER_BYTES_PER_LINE; j++)
> {
> CurrentIndex = i + j;
> @@ -283,7 +283,7 @@ AcpiDmDisasmByteList (
>
> /* Finished with this line */
>
> - AcpiOsPrintf (" */\n");
> + AcpiOsPrintf ("\n");
> }
> }
>
> diff --git a/src/acpica/source/components/disassembler/dmdeferred.c b/src/acpica/source/components/disassembler/dmdeferred.c
> index 8123e252..0368b0a6 100644
> --- a/src/acpica/source/components/disassembler/dmdeferred.c
> +++ b/src/acpica/source/components/disassembler/dmdeferred.c
> @@ -190,7 +190,7 @@ AcpiDmParseDeferredOps (
> ACPI_STATUS Status;
>
>
> - ACPI_FUNCTION_ENTRY ();
> + ACPI_FUNCTION_TRACE (DmParseDeferredOps);
>
>
> /* Traverse the entire parse tree */
> @@ -217,7 +217,7 @@ AcpiDmParseDeferredOps (
> Op, Op->Named.Data, Op->Named.Length);
> if (ACPI_FAILURE (Status))
> {
> - return (Status);
> + return_ACPI_STATUS (Status);
> }
> break;
>
> @@ -245,7 +245,7 @@ AcpiDmParseDeferredOps (
> Op = AcpiPsGetDepthNext (Root, Op);
> }
>
> - return (AE_OK);
> + return_ACPI_STATUS (AE_OK);
> }
>
>
> diff --git a/src/acpica/source/components/disassembler/dmopcode.c b/src/acpica/source/components/disassembler/dmopcode.c
> index af1f9644..8d9b532a 100644
> --- a/src/acpica/source/components/disassembler/dmopcode.c
> +++ b/src/acpica/source/components/disassembler/dmopcode.c
> @@ -177,15 +177,6 @@ static void
> AcpiDmPromoteSubtree (
> ACPI_PARSE_OBJECT *StartOp);
>
> -static BOOLEAN
> -AcpiDmIsSwitchBlock (
> - ACPI_PARSE_OBJECT *Op,
> - char *Temp);
> -
> -static BOOLEAN
> -AcpiDmIsCaseBlock (
> - ACPI_PARSE_OBJECT *Op);
> -
> /*******************************************************************************
> *
> * FUNCTION: AcpiDmDisplayTargetPathname
> @@ -1127,9 +1118,7 @@ AcpiDmDisassembleOneOp (
>
> if (AcpiGbl_DmEmitExternalOpcodes)
> {
> - AcpiDmEmitExternal (AcpiPsGetArg(Op, 0),
> - AcpiPsGetArg(Op, 1));
> - break;
> + AcpiDmEmitExternal (Op, AcpiPsGetArg(Op, 0));
> }
>
> break;
> @@ -1367,414 +1356,3 @@ AcpiDmPromoteSubtree (
> Op = Op->Common.Next;
> }
> }
> -
> -/*******************************************************************************
> - *
> - * FUNCTION: AcpiDmIsTempName
> - *
> - * PARAMETERS: Op - Object to be examined
> - *
> - * RETURN: TRUE if object is a temporary (_T_x) name for a matching While
> - * loop that can be converted to a Switch.
> - *
> - * DESCRIPTION: _T_X objects are only used for Switch statements. If a temporary
> - * name exists, search the siblings for a matching While (One) loop
> - * that can be converted to a Switch. Return TRUE if a match was
> - * found, FALSE otherwise.
> - *
> - ******************************************************************************/
> -
> -BOOLEAN
> -AcpiDmIsTempName (
> - ACPI_PARSE_OBJECT *Op)
> -{
> - ACPI_PARSE_OBJECT *CurrentOp;
> - char *Temp;
> -
> - if (Op->Common.AmlOpcode != AML_NAME_OP)
> - {
> - return (FALSE);
> - }
> -
> - Temp = (char *)(Op->Common.Aml);
> - ++Temp;
> -
> - if (strncmp(Temp, "_T_", 3))
> - {
> - return (FALSE);
> - }
> -
> - CurrentOp = Op->Common.Next;
> - while (CurrentOp)
> - {
> - if (CurrentOp->Common.AmlOpcode == AML_WHILE_OP &&
> - AcpiDmIsSwitchBlock(CurrentOp, Temp))
> - {
> - Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
> - CurrentOp->Common.DisasmOpcode = ACPI_DASM_SWITCH;
> -
> - return (TRUE);
> - }
> - CurrentOp = CurrentOp->Common.Next;
> - }
> -
> - return (FALSE);
> -}
> -
> -/*******************************************************************************
> - *
> - * FUNCTION: AcpiDmIsSwitchBlock
> - *
> - * PARAMETERS: Op - While Object
> - *
> - * RETURN: TRUE if While block can be converted to a Switch/Case block
> - *
> - * DESCRIPTION: Determines if While block is a Switch/Case statement. Modifies
> - * parse tree to allow for Switch/Case disassembly during walk.
> - *
> - * EXAMPLE: Example of parse tree to be converted
> - *
> - * While
> - * One
> - * Store
> - * ByteConst
> - * -NamePath-
> - * If
> - * LEqual
> - * -NamePath-
> - * Zero
> - * Return
> - * One
> - * Else
> - * Return
> - * WordConst
> - * Break
> - *
> - ******************************************************************************/
> -
> -static BOOLEAN
> -AcpiDmIsSwitchBlock (
> - ACPI_PARSE_OBJECT *Op,
> - char *Temp)
> -{
> - ACPI_PARSE_OBJECT *OneOp;
> - ACPI_PARSE_OBJECT *StoreOp;
> - ACPI_PARSE_OBJECT *NamePathOp;
> - ACPI_PARSE_OBJECT *PredicateOp;
> - ACPI_PARSE_OBJECT *CurrentOp;
> - ACPI_PARSE_OBJECT *TempOp;
> -
> - /* Check for One Op Predicate */
> -
> - OneOp = AcpiPsGetArg (Op, 0);
> - if (!OneOp || (OneOp->Common.AmlOpcode != AML_ONE_OP))
> - {
> - return (FALSE);
> - }
> -
> - /* Check for Store Op */
> -
> - StoreOp = OneOp->Common.Next;
> - if (!StoreOp || (StoreOp->Common.AmlOpcode != AML_STORE_OP))
> - {
> - return (FALSE);
> - }
> -
> - /* Check for Name Op with _T_ string */
> -
> - NamePathOp = AcpiPsGetArg (StoreOp, 1);
> - if (!NamePathOp || (NamePathOp->Common.AmlOpcode != AML_INT_NAMEPATH_OP))
> - {
> - return (FALSE);
> - }
> -
> - if (strncmp((char *)(NamePathOp->Common.Aml), Temp, 4))
> - {
> - return (FALSE);
> - }
> -
> - /* This is a Switch/Case control block */
> -
> - /* Ignore the One Op Predicate */
> -
> - OneOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
> -
> - /* Ignore the Store Op, but not the children */
> -
> - StoreOp->Common.DisasmOpcode = ACPI_DASM_IGNORE_SINGLE;
> -
> - /*
> - * First arg of Store Op is the Switch condition.
> - * Mark it as a Switch predicate and as a parameter list for paren
> - * closing and correct indentation.
> - */
> - PredicateOp = AcpiPsGetArg (StoreOp, 0);
> - PredicateOp->Common.DisasmOpcode = ACPI_DASM_SWITCH_PREDICATE;
> - PredicateOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST;
> -
> - /* Ignore the Name Op */
> -
> - NamePathOp->Common.DisasmFlags = ACPI_PARSEOP_IGNORE;
> -
> - /* Remaining opcodes are the Case statements (If/ElseIf's) */
> -
> - CurrentOp = StoreOp->Common.Next;
> - while (AcpiDmIsCaseBlock (CurrentOp))
> - {
> - /* Block is a Case structure */
> -
> - if (CurrentOp->Common.AmlOpcode == AML_ELSE_OP)
> - {
> - /* ElseIf */
> -
> - CurrentOp->Common.DisasmOpcode = ACPI_DASM_CASE;
> - CurrentOp = AcpiPsGetArg (CurrentOp, 0);
> - }
> -
> - /* If */
> -
> - CurrentOp->Common.DisasmOpcode = ACPI_DASM_CASE;
> -
> - /*
> - * Mark the parse tree for Case disassembly. There are two
> - * types of Case statements. The first type of statement begins with
> - * an LEqual. The second starts with an LNot and uses a Match statement
> - * on a Package of constants.
> - */
> - TempOp = AcpiPsGetArg (CurrentOp, 0);
> - switch (TempOp->Common.AmlOpcode)
> - {
> - case (AML_LOGICAL_EQUAL_OP):
> -
> - /* Ignore just the LEqual Op */
> -
> - TempOp->Common.DisasmOpcode = ACPI_DASM_IGNORE_SINGLE;
> -
> - /* Ignore the NamePath Op */
> -
> - TempOp = AcpiPsGetArg (TempOp, 0);
> - TempOp->Common.DisasmFlags = ACPI_PARSEOP_IGNORE;
> -
> - /*
> - * Second arg of LEqual will be the Case predicate.
> - * Mark it as a predicate and also as a parameter list for paren
> - * closing and correct indentation.
> - */
> - PredicateOp = TempOp->Common.Next;
> - PredicateOp->Common.DisasmOpcode = ACPI_DASM_SWITCH_PREDICATE;
> - PredicateOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST;
> -
> - break;
> -
> - case (AML_LOGICAL_NOT_OP):
> -
> - /*
> - * The Package will be the predicate of the Case statement.
> - * It's under:
> - * LNOT
> - * LEQUAL
> - * MATCH
> - * PACKAGE
> - */
> -
> - /* Get the LEqual Op from LNot */
> -
> - TempOp = AcpiPsGetArg (TempOp, 0);
> -
> - /* Get the Match Op from LEqual */
> -
> - TempOp = AcpiPsGetArg (TempOp, 0);
> -
> - /* Get the Package Op from Match */
> -
> - PredicateOp = AcpiPsGetArg (TempOp, 0);
> -
> - /* Mark as parameter list for paren closing */
> -
> - PredicateOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST;
> -
> - /*
> - * The Package list would be too deeply indented if we
> - * chose to simply ignore the all the parent opcodes, so
> - * we rearrange the parse tree instead.
> - */
> -
> - /*
> - * Save the second arg of the If/Else Op which is the
> - * block code of code for this Case statement.
> - */
> - TempOp = AcpiPsGetArg (CurrentOp, 1);
> -
> - /*
> - * Move the Package Op to the child (predicate) of the
> - * Case statement.
> - */
> - CurrentOp->Common.Value.Arg = PredicateOp;
> - PredicateOp->Common.Parent = CurrentOp;
> -
> - /* Add the block code */
> -
> - PredicateOp->Common.Next = TempOp;
> -
> - break;
> -
> - default:
> -
> - /* Should never get here */
> -
> - break;
> - }
> -
> - /* Advance to next Case block */
> -
> - CurrentOp = CurrentOp->Common.Next;
> - }
> -
> - /* If CurrentOp is now an Else, then this is a Default block */
> -
> - if (CurrentOp && CurrentOp->Common.AmlOpcode == AML_ELSE_OP)
> - {
> - CurrentOp->Common.DisasmOpcode = ACPI_DASM_DEFAULT;
> - }
> -
> - /*
> - * From the first If advance to the Break op. It's possible to
> - * have an Else (Default) op here when there is only one Case
> - * statement, so check for it.
> - */
> - CurrentOp = StoreOp->Common.Next->Common.Next;
> - if (CurrentOp->Common.AmlOpcode == AML_ELSE_OP)
> - {
> - CurrentOp = CurrentOp->Common.Next;
> - }
> -
> - /* Ignore the Break Op */
> -
> - CurrentOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
> -
> - return (TRUE);
> -}
> -
> -/*******************************************************************************
> - *
> - * FUNCTION: AcpiDmIsCaseBlock
> - *
> - * PARAMETERS: Op - Object to test
> - *
> - * RETURN: TRUE if Object is beginning of a Case block.
> - *
> - * DESCRIPTION: Determines if an Object is the beginning of a Case block for a
> - * Switch/Case statement. Parse tree must be one of the following
> - * forms:
> - *
> - * Else (Optional)
> - * If
> - * LEqual
> - * -NamePath- _T_x
> - *
> - * Else (Optional)
> - * If
> - * LNot
> - * LEqual
> - * Match
> - * Package
> - * ByteConst
> - * -NamePath- _T_x
> - *
> - ******************************************************************************/
> -
> -static BOOLEAN
> -AcpiDmIsCaseBlock (
> - ACPI_PARSE_OBJECT *Op)
> -{
> - ACPI_PARSE_OBJECT *CurrentOp;
> -
> - if (!Op)
> - {
> - return (FALSE);
> - }
> -
> - /* Look for an If or ElseIf */
> -
> - CurrentOp = Op;
> - if (CurrentOp->Common.AmlOpcode == AML_ELSE_OP)
> - {
> - CurrentOp = AcpiPsGetArg (CurrentOp, 0);
> - if (!CurrentOp)
> - {
> - return (FALSE);
> - }
> - }
> -
> - if (!CurrentOp || CurrentOp->Common.AmlOpcode != AML_IF_OP)
> - {
> - return (FALSE);
> - }
> -
> - /* Child must be LEqual or LNot */
> -
> - CurrentOp = AcpiPsGetArg (CurrentOp, 0);
> - if (!CurrentOp)
> - {
> - return (FALSE);
> - }
> -
> - switch (CurrentOp->Common.AmlOpcode)
> - {
> - case (AML_LOGICAL_EQUAL_OP):
> -
> - /* Next child must be NamePath with string _T_ */
> -
> - CurrentOp = AcpiPsGetArg (CurrentOp, 0);
> - if (!CurrentOp || !CurrentOp->Common.Value.Name ||
> - strncmp(CurrentOp->Common.Value.Name, "_T_", 3))
> - {
> - return (FALSE);
> - }
> -
> - break;
> -
> - case (AML_LOGICAL_NOT_OP):
> -
> - /* Child of LNot must be LEqual op */
> -
> - CurrentOp = AcpiPsGetArg (CurrentOp, 0);
> - if (!CurrentOp || (CurrentOp->Common.AmlOpcode != AML_LOGICAL_EQUAL_OP))
> - {
> - return (FALSE);
> - }
> -
> - /* Child of LNot must be Match op */
> -
> - CurrentOp = AcpiPsGetArg (CurrentOp, 0);
> - if (!CurrentOp || (CurrentOp->Common.AmlOpcode != AML_MATCH_OP))
> - {
> - return (FALSE);
> - }
> -
> - /* First child of Match must be Package op */
> -
> - CurrentOp = AcpiPsGetArg (CurrentOp, 0);
> - if (!CurrentOp || (CurrentOp->Common.AmlOpcode != AML_PACKAGE_OP))
> - {
> - return (FALSE);
> - }
> -
> - /* Third child of Match must be NamePath with string _T_ */
> -
> - CurrentOp = AcpiPsGetArg (CurrentOp->Common.Parent, 2);
> - if (!CurrentOp || !CurrentOp->Common.Value.Name ||
> - strncmp(CurrentOp->Common.Value.Name, "_T_", 3))
> - {
> - return (FALSE);
> - }
> -
> - break;
> -
> - default:
> -
> - return (FALSE);
> - }
> -
> - return (TRUE);
> -}
> diff --git a/src/acpica/source/components/disassembler/dmresrc.c b/src/acpica/source/components/disassembler/dmresrc.c
> index bd8aa2dc..3c24855f 100644
> --- a/src/acpica/source/components/disassembler/dmresrc.c
> +++ b/src/acpica/source/components/disassembler/dmresrc.c
> @@ -197,8 +197,12 @@ static ACPI_RESOURCE_HANDLER AcpiGbl_DmResourceDispatch [] =
> AcpiDmQwordDescriptor, /* 0x0A, ACPI_RESOURCE_NAME_QWORD_ADDRESS_SPACE */
> AcpiDmExtendedDescriptor, /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS_SPACE */
> AcpiDmGpioDescriptor, /* 0x0C, ACPI_RESOURCE_NAME_GPIO */
> - NULL, /* 0x0D, Reserved */
> - AcpiDmSerialBusDescriptor /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS */
> + AcpiDmPinFunctionDescriptor, /* 0x0D, ACPI_RESOURCE_NAME_PIN_FUNCTION */
> + AcpiDmSerialBusDescriptor, /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS */
> + AcpiDmPinConfigDescriptor, /* 0x0F, ACPI_RESOURCE_NAME_PIN_CONFIG */
> + AcpiDmPinGroupDescriptor, /* 0x10, ACPI_RESOURCE_NAME_PIN_GROUP */
> + AcpiDmPinGroupFunctionDescriptor, /* 0x11, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION */
> + AcpiDmPinGroupConfigDescriptor, /* 0x12, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG */
> };
>
>
> @@ -540,6 +544,15 @@ AcpiDmIsResourceTemplate (
> * intialization byte list. Because the resource macros will create
> * a buffer of the exact required length (buffer length will be equal
> * to the actual length).
> + *
> + * NOTE (April 2017): Resource templates with this issue have been
> + * seen in the field. We still don't want to attempt to disassemble
> + * a buffer like this to a resource template because this output
> + * would not match the original input buffer (it would be shorter
> + * than the original when the disassembled code is recompiled).
> + * Basically, a buffer like this appears to be hand crafted in the
> + * first place, so just emitting a buffer object instead of a
> + * resource template more closely resembles the original ASL code.
> */
> if (DeclaredBufferLength != BufferLength)
> {
> diff --git a/src/acpica/source/components/disassembler/dmresrcl2.c b/src/acpica/source/components/disassembler/dmresrcl2.c
> index 0c2c3360..68737545 100644
> --- a/src/acpica/source/components/disassembler/dmresrcl2.c
> +++ b/src/acpica/source/components/disassembler/dmresrcl2.c
> @@ -515,6 +515,112 @@ AcpiDmGpioDescriptor (
> }
> }
>
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmPinFunctionDescriptor
> + *
> + * PARAMETERS: Info - Extra resource info
> + * Resource - Pointer to the resource descriptor
> + * Length - Length of the descriptor in bytes
> + * Level - Current source code indentation level
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Decode a PinFunction descriptor
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmPinFunctionDescriptor (
> + ACPI_OP_WALK_INFO *Info,
> + AML_RESOURCE *Resource,
> + UINT32 Length,
> + UINT32 Level)
> +{
> + UINT16 *PinList;
> + UINT8 *VendorData;
> + char *DeviceName = NULL;
> + UINT32 PinCount;
> + UINT32 i;
> +
> + AcpiDmIndent (Level);
> + AcpiOsPrintf ("PinFunction (%s, ",
> + AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinFunction.Flags)]);
> +
> + if (Resource->PinFunction.PinConfig <= 3)
> + {
> + AcpiOsPrintf ("%s, ",
> + AcpiGbl_PpcDecode[Resource->PinFunction.PinConfig]);
> + }
> + else
> + {
> + AcpiOsPrintf ("0x%2.2X, ", Resource->PinFunction.PinConfig);
> + }
> +
> + /* FunctionNumber */
> +
> + AcpiOsPrintf ("0x%4.4X, ", Resource->PinFunction.FunctionNumber);
> +
> + if (Resource->PinFunction.ResSourceOffset)
> + {
> + DeviceName = ACPI_ADD_PTR (char,
> + Resource, Resource->PinFunction.ResSourceOffset),
> + AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
> + }
> +
> + AcpiOsPrintf (", ");
> + AcpiOsPrintf ("0x%2.2X,\n", Resource->PinFunction.ResSourceIndex);
> +
> + AcpiDmIndent (Level + 1);
> +
> + /* Always ResourceConsumer */
> + AcpiOsPrintf ("%s, ", AcpiGbl_ConsumeDecode [ACPI_CONSUMER]);
> +
> + /* Insert a descriptor name */
> +
> + AcpiDmDescriptorName ();
> +
> + AcpiOsPrintf (",");
> +
> + /* Dump the vendor data */
> +
> + if (Resource->PinFunction.VendorLength)
> + {
> + AcpiOsPrintf ("\n");
> + AcpiDmIndent (Level + 1);
> + VendorData = ACPI_ADD_PTR (UINT8, Resource,
> + Resource->PinFunction.VendorOffset);
> +
> + AcpiDmDumpRawDataBuffer (VendorData,
> + Resource->PinFunction.VendorLength, Level);
> + }
> +
> + AcpiOsPrintf (")\n");
> +
> + AcpiDmIndent (Level + 1);
> +
> + /* Dump the interrupt list */
> +
> + AcpiOsPrintf ("{ // Pin list\n");
> +
> + PinCount = ((UINT32) (Resource->PinFunction.ResSourceOffset -
> + Resource->PinFunction.PinTableOffset)) /
> + sizeof (UINT16);
> +
> + PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
> + Resource->PinFunction.PinTableOffset);
> +
> + for (i = 0; i < PinCount; i++)
> + {
> + AcpiDmIndent (Level + 2);
> + AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
> + ((i + 1) < PinCount) ? "," : "");
> + }
> +
> + AcpiDmIndent (Level + 1);
> + AcpiOsPrintf ("}\n");
> +}
> +
>
> /*******************************************************************************
> *
> @@ -848,3 +954,363 @@ AcpiDmSerialBusDescriptor (
> SerialBusResourceDispatch [Resource->CommonSerialBus.Type] (
> Info, Resource, Length, Level);
> }
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmPinConfig
> + *
> + * PARAMETERS: PinConfigType - Pin configuration type
> + * PinConfigValue - Pin configuration value
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Pretty prints PinConfig type and value.
> + *
> + ******************************************************************************/
> +
> +static void
> +AcpiDmPinConfig(
> + UINT8 PinConfigType,
> + UINT32 PinConfigValue)
> +{
> + if (PinConfigType <= 13)
> + {
> + AcpiOsPrintf ("0x%2.2X /* %s */, ", PinConfigType,
> + AcpiGbl_PtypDecode[PinConfigType]);
> + }
> + else
> + {
> + AcpiOsPrintf ("0x%2.2X, /* Vendor Defined */ ", PinConfigType);
> + }
> +
> + /* PinConfigValue */
> +
> + AcpiOsPrintf ("0x%4.4X,\n", PinConfigValue);
> +}
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmPinConfigDescriptor
> + *
> + * PARAMETERS: Info - Extra resource info
> + * Resource - Pointer to the resource descriptor
> + * Length - Length of the descriptor in bytes
> + * Level - Current source code indentation level
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Decode a PinConfig descriptor
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmPinConfigDescriptor (
> + ACPI_OP_WALK_INFO *Info,
> + AML_RESOURCE *Resource,
> + UINT32 Length,
> + UINT32 Level)
> +{
> + UINT16 *PinList;
> + UINT8 *VendorData;
> + char *DeviceName = NULL;
> + UINT32 PinCount;
> + UINT32 i;
> +
> + AcpiDmIndent (Level);
> + AcpiOsPrintf ("PinConfig (%s, ",
> + AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinConfig.Flags)]);
> +
> + AcpiDmPinConfig (Resource->PinConfig.PinConfigType,
> + Resource->PinConfig.PinConfigValue);
> +
> + AcpiDmIndent (Level + 1);
> +
> + if (Resource->PinConfig.ResSourceOffset)
> + {
> + DeviceName = ACPI_ADD_PTR (char,
> + Resource, Resource->PinConfig.ResSourceOffset),
> + AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
> + }
> +
> + AcpiOsPrintf (", ");
> + AcpiOsPrintf ("0x%2.2X, ", Resource->PinConfig.ResSourceIndex);
> +
> + AcpiOsPrintf ("%s, ",
> + AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinConfig.Flags, 1)]);
> +
> + /* Insert a descriptor name */
> +
> + AcpiDmDescriptorName ();
> +
> + AcpiOsPrintf (",");
> +
> + /* Dump the vendor data */
> +
> + if (Resource->PinConfig.VendorLength)
> + {
> + AcpiOsPrintf ("\n");
> + AcpiDmIndent (Level + 1);
> + VendorData = ACPI_ADD_PTR (UINT8, Resource,
> + Resource->PinConfig.VendorOffset);
> +
> + AcpiDmDumpRawDataBuffer (VendorData,
> + Resource->PinConfig.VendorLength, Level);
> + }
> +
> + AcpiOsPrintf (")\n");
> +
> + AcpiDmIndent (Level + 1);
> +
> + /* Dump the interrupt list */
> +
> + AcpiOsPrintf ("{ // Pin list\n");
> +
> + PinCount = ((UINT32) (Resource->PinConfig.ResSourceOffset -
> + Resource->PinConfig.PinTableOffset)) /
> + sizeof (UINT16);
> +
> + PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
> + Resource->PinConfig.PinTableOffset);
> +
> + for (i = 0; i < PinCount; i++)
> + {
> + AcpiDmIndent (Level + 2);
> + AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
> + ((i + 1) < PinCount) ? "," : "");
> + }
> +
> + AcpiDmIndent (Level + 1);
> + AcpiOsPrintf ("}\n");
> +}
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmPinGroupDescriptor
> + *
> + * PARAMETERS: Info - Extra resource info
> + * Resource - Pointer to the resource descriptor
> + * Length - Length of the descriptor in bytes
> + * Level - Current source code indentation level
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Decode a PinGroup descriptor
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmPinGroupDescriptor (
> + ACPI_OP_WALK_INFO *Info,
> + AML_RESOURCE *Resource,
> + UINT32 Length,
> + UINT32 Level)
> +{
> + char *Label;
> + UINT16 *PinList;
> + UINT8 *VendorData;
> + UINT32 PinCount;
> + UINT32 i;
> +
> + AcpiDmIndent (Level);
> + /* Always producer */
> + AcpiOsPrintf ("PinGroup (");
> +
> + Label = ACPI_ADD_PTR (char,
> + Resource, Resource->PinGroup.LabelOffset),
> + AcpiUtPrintString (Label, ACPI_UINT16_MAX);
> +
> + AcpiOsPrintf (", ");
> +
> + AcpiOsPrintf ("%s, ",
> + AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroup.Flags)]);
> +
> + /* Insert a descriptor name */
> +
> + AcpiDmDescriptorName ();
> +
> + AcpiOsPrintf (",");
> +
> + /* Dump the vendor data */
> +
> + if (Resource->PinGroup.VendorLength)
> + {
> + AcpiOsPrintf ("\n");
> + AcpiDmIndent (Level + 1);
> + VendorData = ACPI_ADD_PTR (UINT8, Resource,
> + Resource->PinGroup.VendorOffset);
> +
> + AcpiDmDumpRawDataBuffer (VendorData,
> + Resource->PinGroup.VendorLength, Level);
> + }
> +
> + AcpiOsPrintf (")\n");
> +
> + AcpiDmIndent (Level + 1);
> +
> + /* Dump the interrupt list */
> +
> + AcpiOsPrintf ("{ // Pin list\n");
> +
> + PinCount = (Resource->PinGroup.LabelOffset -
> + Resource->PinGroup.PinTableOffset) / sizeof (UINT16);
> +
> + PinList = (UINT16 *) ACPI_ADD_PTR (char, Resource,
> + Resource->PinGroup.PinTableOffset);
> +
> + for (i = 0; i < PinCount; i++)
> + {
> + AcpiDmIndent (Level + 2);
> + AcpiOsPrintf ("0x%4.4X%s\n", PinList[i],
> + ((i + 1) < PinCount) ? "," : "");
> + }
> +
> + AcpiDmIndent (Level + 1);
> + AcpiOsPrintf ("}\n");
> +}
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmPinGroupFunctionDescriptor
> + *
> + * PARAMETERS: Info - Extra resource info
> + * Resource - Pointer to the resource descriptor
> + * Length - Length of the descriptor in bytes
> + * Level - Current source code indentation level
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Decode a PinGroupFunction descriptor
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmPinGroupFunctionDescriptor (
> + ACPI_OP_WALK_INFO *Info,
> + AML_RESOURCE *Resource,
> + UINT32 Length,
> + UINT32 Level)
> +{
> + UINT8 *VendorData;
> + char *DeviceName = NULL;
> + char *Label = NULL;
> +
> + AcpiDmIndent (Level);
> + AcpiOsPrintf ("PinGroupFunction (%s, ",
> + AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroupFunction.Flags)]);
> +
> + /* FunctionNumber */
> +
> + AcpiOsPrintf ("0x%4.4X, ", Resource->PinGroupFunction.FunctionNumber);
> +
> + DeviceName = ACPI_ADD_PTR (char,
> + Resource, Resource->PinGroupFunction.ResSourceOffset),
> + AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
> +
> + AcpiOsPrintf (", ");
> + AcpiOsPrintf ("0x%2.2X,\n", Resource->PinGroupFunction.ResSourceIndex);
> +
> + AcpiDmIndent (Level + 1);
> +
> + Label = ACPI_ADD_PTR (char, Resource,
> + Resource->PinGroupFunction.ResSourceLabelOffset);
> + AcpiUtPrintString (Label, ACPI_UINT16_MAX);
> +
> + AcpiOsPrintf (", ");
> +
> + AcpiOsPrintf ("%s, ",
> + AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinGroupFunction.Flags, 1)]);
> +
> + /* Insert a descriptor name */
> +
> + AcpiDmDescriptorName ();
> +
> + AcpiOsPrintf (",");
> +
> + /* Dump the vendor data */
> +
> + if (Resource->PinGroupFunction.VendorLength)
> + {
> + AcpiOsPrintf ("\n");
> + AcpiDmIndent (Level + 1);
> + VendorData = ACPI_ADD_PTR (UINT8, Resource,
> + Resource->PinGroupFunction.VendorOffset);
> +
> + AcpiDmDumpRawDataBuffer (VendorData,
> + Resource->PinGroupFunction.VendorLength, Level);
> + }
> +
> + AcpiOsPrintf (")\n");
> +}
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmPinGroupConfigDescriptor
> + *
> + * PARAMETERS: Info - Extra resource info
> + * Resource - Pointer to the resource descriptor
> + * Length - Length of the descriptor in bytes
> + * Level - Current source code indentation level
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Decode a PinGroupConfig descriptor
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmPinGroupConfigDescriptor (
> + ACPI_OP_WALK_INFO *Info,
> + AML_RESOURCE *Resource,
> + UINT32 Length,
> + UINT32 Level)
> +{
> + UINT8 *VendorData;
> + char *DeviceName = NULL;
> + char *Label = NULL;
> +
> + AcpiDmIndent (Level);
> + AcpiOsPrintf ("PinGroupConfig (%s, ",
> + AcpiGbl_ShrDecode [ACPI_GET_1BIT_FLAG (Resource->PinGroupConfig.Flags)]);
> +
> + AcpiDmPinConfig(Resource->PinGroupConfig.PinConfigType,
> + Resource->PinGroupConfig.PinConfigValue);
> +
> + AcpiDmIndent (Level + 1);
> +
> + DeviceName = ACPI_ADD_PTR (char,
> + Resource, Resource->PinGroupConfig.ResSourceOffset),
> + AcpiUtPrintString (DeviceName, ACPI_UINT16_MAX);
> +
> + AcpiOsPrintf (", ");
> + AcpiOsPrintf ("0x%2.2X, ", Resource->PinGroupConfig.ResSourceIndex);
> +
> + Label = ACPI_ADD_PTR (char, Resource,
> + Resource->PinGroupConfig.ResSourceLabelOffset);
> + AcpiUtPrintString (Label, ACPI_UINT16_MAX);
> +
> + AcpiOsPrintf (", ");
> +
> + AcpiOsPrintf ("%s, ",
> + AcpiGbl_ConsumeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->PinGroupConfig.Flags, 1)]);
> +
> + /* Insert a descriptor name */
> +
> + AcpiDmDescriptorName ();
> +
> + AcpiOsPrintf (",");
> +
> + /* Dump the vendor data */
> +
> + if (Resource->PinGroupConfig.VendorLength)
> + {
> + AcpiOsPrintf ("\n");
> + AcpiDmIndent (Level + 1);
> + VendorData = ACPI_ADD_PTR (UINT8, Resource,
> + Resource->PinGroupConfig.VendorOffset);
> +
> + AcpiDmDumpRawDataBuffer (VendorData,
> + Resource->PinGroupConfig.VendorLength, Level);
> + }
> +
> + AcpiOsPrintf (")\n");
> +}
> diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c
> index 77d24a18..750e6398 100644
> --- a/src/acpica/source/components/disassembler/dmwalk.c
> +++ b/src/acpica/source/components/disassembler/dmwalk.c
> @@ -161,8 +161,6 @@
> ACPI_MODULE_NAME ("dmwalk")
>
>
> -#define DB_FULL_OP_INFO "[%4.4s] @%5.5X #%4.4X: "
> -
> /* Stub for non-compiler code */
>
> #ifndef ACPI_ASL_COMPILER
> @@ -584,13 +582,6 @@ AcpiDmDescendingOp (
> return (AE_CTRL_DEPTH);
> }
>
> - if (AcpiDmIsTempName(Op))
> - {
> - /* Ignore compiler generated temporary names */
> -
> - return (AE_CTRL_DEPTH);
> - }
> -
> if (Op->Common.DisasmOpcode == ACPI_DASM_IGNORE_SINGLE)
> {
> /* Ignore this op, but not it's children */
> @@ -642,10 +633,16 @@ AcpiDmDescendingOp (
> Info->WalkState->ParserState.AmlStart);
> if (AcpiGbl_DmOpt_Verbose)
> {
> - AcpiOsPrintf (DB_FULL_OP_INFO,
> - (Info->WalkState->MethodNode ?
> - Info->WalkState->MethodNode->Name.Ascii : " "),
> - AmlOffset, (UINT32) Op->Common.AmlOpcode);
> + if (AcpiGbl_CmSingleStep)
> + {
> + AcpiOsPrintf ("%5.5X/%4.4X: ",
> + AmlOffset, (UINT32) Op->Common.AmlOpcode);
> + }
> + else
> + {
> + AcpiOsPrintf ("AML Offset %5.5X, Opcode %4.4X: ",
> + AmlOffset, (UINT32) Op->Common.AmlOpcode);
> + }
> }
> }
>
> @@ -782,7 +779,7 @@ AcpiDmDescendingOp (
> Name = AcpiPsGetName (Op);
> if (Op->Named.Path)
> {
> - AcpiDmNamestring ((char *) Op->Named.Path);
> + AcpiDmNamestring (Op->Named.Path);
> }
> else
> {
> diff --git a/src/acpica/source/components/dispatcher/dsargs.c b/src/acpica/source/components/dispatcher/dsargs.c
> index 6a79c7cb..504005b3 100644
> --- a/src/acpica/source/components/dispatcher/dsargs.c
> +++ b/src/acpica/source/components/dispatcher/dsargs.c
> @@ -197,7 +197,7 @@ AcpiDsExecuteArguments (
> ACPI_WALK_STATE *WalkState;
>
>
> - ACPI_FUNCTION_TRACE (DsExecuteArguments);
> + ACPI_FUNCTION_TRACE_PTR (DsExecuteArguments, AmlStart);
>
>
> /* Allocate a new parser op to be the root of the parsed tree */
> @@ -474,7 +474,8 @@ AcpiDsGetPackageArguments (
> return_ACPI_STATUS (AE_AML_INTERNAL);
> }
>
> - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Package Arg Init\n"));
> + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Package Argument Init, AML Ptr: %p\n",
> + ObjDesc->Package.AmlStart));
>
> /* Execute the AML code for the TermArg arguments */
>
> diff --git a/src/acpica/source/components/dispatcher/dsdebug.c b/src/acpica/source/components/dispatcher/dsdebug.c
> index ceb6b8a5..4a0696a3 100644
> --- a/src/acpica/source/components/dispatcher/dsdebug.c
> +++ b/src/acpica/source/components/dispatcher/dsdebug.c
> @@ -320,6 +320,7 @@ AcpiDsDumpMethodStack (
> Op->Common.Next = NULL;
>
> #ifdef ACPI_DISASSEMBLER
> + AcpiOsPrintf ("Failed at ");
> AcpiDmDisassemble (NextWalkState, Op, ACPI_UINT32_MAX);
> #endif
> Op->Common.Next = Next;
> diff --git a/src/acpica/source/components/dispatcher/dsmethod.c b/src/acpica/source/components/dispatcher/dsmethod.c
> index d3588f5a..79dff2c7 100644
> --- a/src/acpica/source/components/dispatcher/dsmethod.c
> +++ b/src/acpica/source/components/dispatcher/dsmethod.c
> @@ -333,6 +333,7 @@ AcpiDsMethodError (
> ACPI_WALK_STATE *WalkState)
> {
> UINT32 AmlOffset;
> + ACPI_NAME Name = 0;
>
>
> ACPI_FUNCTION_ENTRY ();
> @@ -361,9 +362,16 @@ AcpiDsMethodError (
> AmlOffset = (UINT32) ACPI_PTR_DIFF (WalkState->Aml,
> WalkState->ParserState.AmlStart);
>
> - Status = AcpiGbl_ExceptionHandler (Status,
> - WalkState->MethodNode ?
> - WalkState->MethodNode->Name.Integer : 0,
> + if (WalkState->MethodNode)
> + {
> + Name = WalkState->MethodNode->Name.Integer;
> + }
> + else if (WalkState->DeferredNode)
> + {
> + Name = WalkState->DeferredNode->Name.Integer;
> + }
> +
> + Status = AcpiGbl_ExceptionHandler (Status, Name,
> WalkState->Opcode, AmlOffset, NULL);
> AcpiExEnterInterpreter ();
> }
> diff --git a/src/acpica/source/components/dispatcher/dsopcode.c b/src/acpica/source/components/dispatcher/dsopcode.c
> index 6a4f5bf2..3ceec94b 100644
> --- a/src/acpica/source/components/dispatcher/dsopcode.c
> +++ b/src/acpica/source/components/dispatcher/dsopcode.c
> @@ -353,10 +353,9 @@ AcpiDsInitBufferField (
> (8 * (UINT32) BufferDesc->Buffer.Length))
> {
> ACPI_ERROR ((AE_INFO,
> - "Field [%4.4s] at %u exceeds Buffer [%4.4s] size %u (bits)",
> - AcpiUtGetNodeName (ResultDesc),
> - BitOffset + BitCount,
> - AcpiUtGetNodeName (BufferDesc->Buffer.Node),
> + "Field [%4.4s] at bit offset/length %u/%u "
> + "exceeds size of target Buffer (%u bits)",
> + AcpiUtGetNodeName (ResultDesc), BitOffset, BitCount,
> 8 * (UINT32) BufferDesc->Buffer.Length));
> Status = AE_AML_BUFFER_LIMIT;
> goto Cleanup;
> diff --git a/src/acpica/source/components/dispatcher/dsutils.c b/src/acpica/source/components/dispatcher/dsutils.c
> index 77dff895..4688e16e 100644
> --- a/src/acpica/source/components/dispatcher/dsutils.c
> +++ b/src/acpica/source/components/dispatcher/dsutils.c
> @@ -791,12 +791,6 @@ AcpiDsCreateOperand (
> if ((OpInfo->Flags & AML_HAS_RETVAL) ||
> (Arg->Common.Flags & ACPI_PARSEOP_IN_STACK))
> {
> - ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
> - "Argument previously created, already stacked\n"));
> -
> - AcpiDbDisplayArgumentObject (
> - WalkState->Operands [WalkState->NumOperands - 1], WalkState);
> -
> /*
> * Use value that was already previously returned
> * by the evaluation of this argument
> diff --git a/src/acpica/source/components/dispatcher/dswexec.c b/src/acpica/source/components/dispatcher/dswexec.c
> index 4df14713..dfdfeaa0 100644
> --- a/src/acpica/source/components/dispatcher/dswexec.c
> +++ b/src/acpica/source/components/dispatcher/dswexec.c
> @@ -723,7 +723,8 @@ AcpiDsExecEndOp (
> case AML_TYPE_CREATE_OBJECT:
>
> ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
> - "Executing CreateObject (Buffer/Package) Op=%p\n", Op));
> + "Executing CreateObject (Buffer/Package) Op=%p AMLPtr=%p\n",
> + Op, Op->Named.Data));
>
> switch (Op->Common.Parent->Common.AmlOpcode)
> {
> diff --git a/src/acpica/source/components/dispatcher/dswload.c b/src/acpica/source/components/dispatcher/dswload.c
> index f3f99ea1..8793c0ed 100644
> --- a/src/acpica/source/components/dispatcher/dswload.c
> +++ b/src/acpica/source/components/dispatcher/dswload.c
> @@ -518,7 +518,7 @@ AcpiDsLoad1BeginOp (
> /* Initialize the op */
>
> #if (defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY))
> - Op->Named.Path = ACPI_CAST_PTR (UINT8, Path);
> + Op->Named.Path = Path;
> #endif
>
> if (Node)
> @@ -558,6 +558,10 @@ AcpiDsLoad1EndOp (
> ACPI_OBJECT_TYPE ObjectType;
> ACPI_STATUS Status = AE_OK;
>
> +#ifdef ACPI_ASL_COMPILER
> + UINT8 ParamCount;
> +#endif
> +
>
> ACPI_FUNCTION_TRACE (DsLoad1EndOp);
>
> @@ -642,6 +646,37 @@ AcpiDsLoad1EndOp (
> }
> }
>
> +#ifdef ACPI_ASL_COMPILER
> + /*
> + * For external opcode, get the object type from the argument and
> + * get the parameter count from the argument's next.
> + */
> + if (AcpiGbl_DisasmFlag &&
> + Op->Common.Node &&
> + Op->Common.AmlOpcode == AML_EXTERNAL_OP)
> + {
> + /*
> + * Note, if this external is not a method
> + * Op->Common.Value.Arg->Common.Next->Common.Value.Integer == 0
> + * Therefore, ParamCount will be 0.
> + */
> + ParamCount = (UINT8) Op->Common.Value.Arg->Common.Next->Common.Value.Integer;
> + ObjectType = (UINT8) Op->Common.Value.Arg->Common.Value.Integer;
> + Op->Common.Node->Flags |= ANOBJ_IS_EXTERNAL;
> + Op->Common.Node->Type = (UINT8) ObjectType;
> +
> + AcpiDmCreateSubobjectForExternal ((UINT8)ObjectType,
> + &Op->Common.Node, ParamCount);
> +
> + /*
> + * Add the external to the external list because we may be
> + * emitting code based off of the items within the external list.
> + */
> + AcpiDmAddOpToExternalList (Op, Op->Named.Path, (UINT8)ObjectType, ParamCount,
> + ACPI_EXT_ORIGIN_FROM_OPCODE | ACPI_EXT_RESOLVED_REFERENCE);
> + }
> +#endif
> +
> /*
> * If we are executing a method, do not create any namespace objects
> * during the load phase, only during execution.
> @@ -689,6 +724,7 @@ AcpiDsLoad1EndOp (
> /* Pop the scope stack (only if loading a table) */
>
> if (!WalkState->MethodNode &&
> + Op->Common.AmlOpcode != AML_EXTERNAL_OP &&
> AcpiNsOpensScope (ObjectType))
> {
> ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s): Popping scope for Op %p\n",
> diff --git a/src/acpica/source/components/dispatcher/dswload2.c b/src/acpica/source/components/dispatcher/dswload2.c
> index 46870830..184f6aa3 100644
> --- a/src/acpica/source/components/dispatcher/dswload2.c
> +++ b/src/acpica/source/components/dispatcher/dswload2.c
> @@ -428,6 +428,24 @@ AcpiDsLoad2BeginOp (
> }
> }
>
> +#ifdef ACPI_ASL_COMPILER
> +
> + /*
> + * Do not open a scope for AML_EXTERNAL_OP
> + * AcpiNsLookup can open a new scope based on the object type
> + * of this op. AML_EXTERNAL_OP is a declaration rather than a
> + * definition. In the case that this external is a method object,
> + * AcpiNsLookup will open a new scope. However, an AML_EXTERNAL_OP
> + * associated with the ACPI_TYPE_METHOD is a declaration, rather than
> + * a definition. Flags is set to avoid opening a scope for any
> + * AML_EXTERNAL_OP.
> + */
> + if (WalkState->Opcode == AML_EXTERNAL_OP)
> + {
> + Flags |= ACPI_NS_DONT_OPEN_SCOPE;
> + }
> +#endif
> +
> /* Add new entry or lookup existing entry */
>
> Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType,
> diff --git a/src/acpica/source/components/events/evxfevnt.c b/src/acpica/source/components/events/evxfevnt.c
> index f781f3e0..04662736 100644
> --- a/src/acpica/source/components/events/evxfevnt.c
> +++ b/src/acpica/source/components/events/evxfevnt.c
> @@ -306,6 +306,13 @@ AcpiEnableEvent (
> ACPI_FUNCTION_TRACE (AcpiEnableEvent);
>
>
> + /* If Hardware Reduced flag is set, there are no fixed events */
> +
> + if (AcpiGbl_ReducedHardware)
> + {
> + return_ACPI_STATUS (AE_OK);
> + }
> +
> /* Decode the Fixed Event */
>
> if (Event > ACPI_EVENT_MAX)
> @@ -372,6 +379,13 @@ AcpiDisableEvent (
> ACPI_FUNCTION_TRACE (AcpiDisableEvent);
>
>
> + /* If Hardware Reduced flag is set, there are no fixed events */
> +
> + if (AcpiGbl_ReducedHardware)
> + {
> + return_ACPI_STATUS (AE_OK);
> + }
> +
> /* Decode the Fixed Event */
>
> if (Event > ACPI_EVENT_MAX)
> @@ -433,6 +447,13 @@ AcpiClearEvent (
> ACPI_FUNCTION_TRACE (AcpiClearEvent);
>
>
> + /* If Hardware Reduced flag is set, there are no fixed events */
> +
> + if (AcpiGbl_ReducedHardware)
> + {
> + return_ACPI_STATUS (AE_OK);
> + }
> +
> /* Decode the Fixed Event */
>
> if (Event > ACPI_EVENT_MAX)
> diff --git a/src/acpica/source/components/executer/exdebug.c b/src/acpica/source/components/executer/exdebug.c
> index cdc67871..155f2c0d 100644
> --- a/src/acpica/source/components/executer/exdebug.c
> +++ b/src/acpica/source/components/executer/exdebug.c
> @@ -237,11 +237,11 @@ AcpiExDoDebugObject (
> Timer = ((UINT32) AcpiOsGetTimer () / 10);
> Timer &= 0x03FFFFFF;
>
> - AcpiOsPrintf ("[ACPI Debug T=0x%8.8X] %*s", Timer, Level, " ");
> + AcpiOsPrintf ("ACPI Debug: T=0x%8.8X %*s", Timer, Level, " ");
> }
> else
> {
> - AcpiOsPrintf ("[ACPI Debug] %*s", Level, " ");
> + AcpiOsPrintf ("ACPI Debug: %*s", Level, " ");
> }
> }
>
> diff --git a/src/acpica/source/components/executer/exdump.c b/src/acpica/source/components/executer/exdump.c
> index 82b34038..2b23881f 100644
> --- a/src/acpica/source/components/executer/exdump.c
> +++ b/src/acpica/source/components/executer/exdump.c
> @@ -775,12 +775,13 @@ AcpiExDumpOperand (
>
> if (Depth > 0)
> {
> - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p ",
> - Depth, " ", Depth, ObjDesc));
> + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p Refs=%u ",
> + Depth, " ", Depth, ObjDesc, ObjDesc->Common.ReferenceCount));
> }
> else
> {
> - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", ObjDesc));
> + ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Refs=%u ",
> + ObjDesc, ObjDesc->Common.ReferenceCount));
> }
>
> /* Decode object type */
> @@ -818,8 +819,10 @@ AcpiExDumpOperand (
>
> case ACPI_REFCLASS_NAME:
>
> - AcpiOsPrintf ("- [%4.4s]\n",
> - ObjDesc->Reference.Node->Name.Ascii);
> + AcpiUtRepairName (ObjDesc->Reference.Node->Name.Ascii);
> + AcpiOsPrintf ("- [%4.4s] (Node %p)\n",
> + ObjDesc->Reference.Node->Name.Ascii,
> + ObjDesc->Reference.Node);
> break;
>
> case ACPI_REFCLASS_ARG:
> @@ -1158,12 +1161,15 @@ AcpiExDumpReferenceObj (
> &RetBuf, TRUE);
> if (ACPI_FAILURE (Status))
> {
> - AcpiOsPrintf (" Could not convert name to pathname\n");
> + AcpiOsPrintf (" Could not convert name to pathname: %s\n",
> + AcpiFormatException (Status));
> }
> else
> {
> - AcpiOsPrintf ("%s\n", (char *) RetBuf.Pointer);
> - ACPI_FREE (RetBuf.Pointer);
> + AcpiOsPrintf ("%s: %s\n",
> + AcpiUtGetTypeName (ObjDesc->Reference.Node->Type),
> + (char *) RetBuf.Pointer);
> + ACPI_FREE (RetBuf.Pointer);
> }
> }
> else if (ObjDesc->Reference.Object)
> @@ -1281,9 +1287,8 @@ AcpiExDumpPackageObj (
>
> case ACPI_TYPE_LOCAL_REFERENCE:
>
> - AcpiOsPrintf ("[Object Reference] Type [%s] %2.2X",
> - AcpiUtGetReferenceName (ObjDesc),
> - ObjDesc->Reference.Class);
> + AcpiOsPrintf ("[Object Reference] Class [%s]",
> + AcpiUtGetReferenceName (ObjDesc));
> AcpiExDumpReferenceObj (ObjDesc);
> break;
>
> diff --git a/src/acpica/source/components/executer/exoparg1.c b/src/acpica/source/components/executer/exoparg1.c
> index a0efb25e..5d59276b 100644
> --- a/src/acpica/source/components/executer/exoparg1.c
> +++ b/src/acpica/source/components/executer/exoparg1.c
> @@ -959,7 +959,7 @@ AcpiExOpcode_1A_0T_1R (
> if (ACPI_GET_DESCRIPTOR_TYPE (Operand[0]) == ACPI_DESC_TYPE_NAMED)
> {
> TempDesc = AcpiNsGetAttachedObject (
> - (ACPI_NAMESPACE_NODE *) Operand[0]);
> + (ACPI_NAMESPACE_NODE *) Operand[0]);
> if (TempDesc &&
> ((TempDesc->Common.Type == ACPI_TYPE_STRING) ||
> (TempDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE)))
> @@ -1072,11 +1072,27 @@ AcpiExOpcode_1A_0T_1R (
> * This is a DerefOf (ObjectReference)
> * Get the actual object from the Node (This is the dereference).
> * This case may only happen when a LocalX or ArgX is
> - * dereferenced above.
> + * dereferenced above, or for references to device and
> + * thermal objects.
> */
> - ReturnDesc = AcpiNsGetAttachedObject (
> - (ACPI_NAMESPACE_NODE *) Operand[0]);
> - AcpiUtAddReference (ReturnDesc);
> + switch (((ACPI_NAMESPACE_NODE *) Operand[0])->Type)
> + {
> + case ACPI_TYPE_DEVICE:
> + case ACPI_TYPE_THERMAL:
> +
> + /* These types have no node subobject, return the NS node */
> +
> + ReturnDesc = Operand[0];
> + break;
> +
> + default:
> + /* For most types, get the object attached to the node */
> +
> + ReturnDesc = AcpiNsGetAttachedObject (
> + (ACPI_NAMESPACE_NODE *) Operand[0]);
> + AcpiUtAddReference (ReturnDesc);
> + break;
> + }
> }
> else
> {
> diff --git a/src/acpica/source/components/executer/exresolv.c b/src/acpica/source/components/executer/exresolv.c
> index d0c8c8a8..64771922 100644
> --- a/src/acpica/source/components/executer/exresolv.c
> +++ b/src/acpica/source/components/executer/exresolv.c
> @@ -493,12 +493,26 @@ AcpiExResolveMultiple (
> (ACPI_NAMESPACE_NODE *) ObjDesc);
> }
>
> - if (!ObjDesc)
> + switch (Type)
> {
> - ACPI_ERROR ((AE_INFO,
> - "[%4.4s] Node is unresolved or uninitialized",
> - AcpiUtGetNodeName (Node)));
> - return_ACPI_STATUS (AE_AML_UNINITIALIZED_NODE);
> + case ACPI_TYPE_DEVICE:
> + case ACPI_TYPE_THERMAL:
> +
> + /* These types have no attached subobject */
> + break;
> +
> + default:
> +
> + /* All other types require a subobject */
> +
> + if (!ObjDesc)
> + {
> + ACPI_ERROR ((AE_INFO,
> + "[%4.4s] Node is unresolved or uninitialized",
> + AcpiUtGetNodeName (Node)));
> + return_ACPI_STATUS (AE_AML_UNINITIALIZED_NODE);
> + }
> + break;
> }
> break;
>
> diff --git a/src/acpica/source/components/namespace/nsaccess.c b/src/acpica/source/components/namespace/nsaccess.c
> index 40101575..1404eabf 100644
> --- a/src/acpica/source/components/namespace/nsaccess.c
> +++ b/src/acpica/source/components/namespace/nsaccess.c
> @@ -155,6 +155,9 @@
> #include "acnamesp.h"
> #include "acdispat.h"
>
> +#ifdef ACPI_ASL_COMPILER
> + #include "acdisasm.h"
> +#endif
>
> #define _COMPONENT ACPI_NAMESPACE
> ACPI_MODULE_NAME ("nsaccess")
> @@ -710,6 +713,30 @@ AcpiNsLookup (
> CurrentNode));
> }
>
> +#ifdef ACPI_ASL_COMPILER
> + /*
> + * If this ACPI name already exists within the namespace as an
> + * external declaration, then mark the external as a conflicting
> + * declaration and proceed to process the current node as if it did
> + * not exist in the namespace. If this node is not processed as
> + * normal, then it could cause improper namespace resolution
> + * by failing to open a new scope.
> + */
> + if (AcpiGbl_DisasmFlag &&
> + (Status == AE_ALREADY_EXISTS) &&
> + ((ThisNode->Flags & ANOBJ_IS_EXTERNAL) ||
> + (WalkState && WalkState->Opcode == AML_EXTERNAL_OP)))
> + {
> + ThisNode->Flags &= ~ANOBJ_IS_EXTERNAL;
> + ThisNode->Type = (UINT8)ThisSearchType;
> + if (WalkState->Opcode != AML_EXTERNAL_OP)
> + {
> + AcpiDmMarkExternalConflict (ThisNode);
> + }
> + break;
> + }
> +#endif
> +
> *ReturnNode = ThisNode;
> return_ACPI_STATUS (Status);
> }
> diff --git a/src/acpica/source/components/namespace/nsnames.c b/src/acpica/source/components/namespace/nsnames.c
> index 1dc53610..f68fbc1e 100644
> --- a/src/acpica/source/components/namespace/nsnames.c
> +++ b/src/acpica/source/components/namespace/nsnames.c
> @@ -324,10 +324,6 @@ AcpiNsHandleToPathname (
>
> (void) AcpiNsBuildNormalizedPath (Node, Buffer->Pointer,
> RequiredSize, NoTrailing);
> - if (ACPI_FAILURE (Status))
> - {
> - return_ACPI_STATUS (Status);
> - }
>
> ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%s [%X]\n",
> (char *) Buffer->Pointer, (UINT32) RequiredSize));
> diff --git a/src/acpica/source/components/namespace/nsutils.c b/src/acpica/source/components/namespace/nsutils.c
> index 3ab7a0eb..2b6f6fb8 100644
> --- a/src/acpica/source/components/namespace/nsutils.c
> +++ b/src/acpica/source/components/namespace/nsutils.c
> @@ -206,7 +206,7 @@ AcpiNsPrintNodePathname (
> AcpiOsPrintf ("%s ", Message);
> }
>
> - AcpiOsPrintf ("[%s] (Node %p)", (char *) Buffer.Pointer, Node);
> + AcpiOsPrintf ("%s", (char *) Buffer.Pointer);
> ACPI_FREE (Buffer.Pointer);
> }
> }
> diff --git a/src/acpica/source/components/namespace/nsxfeval.c b/src/acpica/source/components/namespace/nsxfeval.c
> index 4dd8ff1d..ab3ad598 100644
> --- a/src/acpica/source/components/namespace/nsxfeval.c
> +++ b/src/acpica/source/components/namespace/nsxfeval.c
> @@ -199,6 +199,8 @@ AcpiEvaluateObjectTyped (
> {
> ACPI_STATUS Status;
> BOOLEAN FreeBufferOnError = FALSE;
> + ACPI_HANDLE TargetHandle;
> + char *FullPathname;
>
>
> ACPI_FUNCTION_TRACE (AcpiEvaluateObjectTyped);
> @@ -216,41 +218,56 @@ AcpiEvaluateObjectTyped (
> FreeBufferOnError = TRUE;
> }
>
> + Status = AcpiGetHandle (Handle, Pathname, &TargetHandle);
> + if (ACPI_FAILURE (Status))
> + {
> + return_ACPI_STATUS (Status);
> + }
> +
> + FullPathname = AcpiNsGetExternalPathname (TargetHandle);
> + if (!FullPathname)
> + {
> + return_ACPI_STATUS (AE_NO_MEMORY);
> + }
> +
> /* Evaluate the object */
>
> - Status = AcpiEvaluateObject (Handle, Pathname,
> - ExternalParams, ReturnBuffer);
> + Status = AcpiEvaluateObject (TargetHandle, NULL, ExternalParams,
> + ReturnBuffer);
> if (ACPI_FAILURE (Status))
> {
> - return_ACPI_STATUS (Status);
> + goto Exit;
> }
>
> - /* Type ANY means "don't care" */
> + /* Type ANY means "don't care about return value type" */
>
> if (ReturnType == ACPI_TYPE_ANY)
> {
> - return_ACPI_STATUS (AE_OK);
> + goto Exit;
> }
>
> if (ReturnBuffer->Length == 0)
> {
> /* Error because caller specifically asked for a return value */
>
> - ACPI_ERROR ((AE_INFO, "No return value"));
> - return_ACPI_STATUS (AE_NULL_OBJECT);
> + ACPI_ERROR ((AE_INFO, "%s did not return any object",
> + FullPathname));
> + Status = AE_NULL_OBJECT;
> + goto Exit;
> }
>
> /* Examine the object type returned from EvaluateObject */
>
> if (((ACPI_OBJECT *) ReturnBuffer->Pointer)->Type == ReturnType)
> {
> - return_ACPI_STATUS (AE_OK);
> + goto Exit;
> }
>
> /* Return object type does not match requested type */
>
> ACPI_ERROR ((AE_INFO,
> - "Incorrect return type [%s] requested [%s]",
> + "Incorrect return type from %s - received [%s], requested [%s]",
> + FullPathname,
> AcpiUtGetTypeName (((ACPI_OBJECT *) ReturnBuffer->Pointer)->Type),
> AcpiUtGetTypeName (ReturnType)));
>
> @@ -268,7 +285,11 @@ AcpiEvaluateObjectTyped (
> }
>
> ReturnBuffer->Length = 0;
> - return_ACPI_STATUS (AE_TYPE);
> + Status = AE_TYPE;
> +
> +Exit:
> + ACPI_FREE (FullPathname);
> + return_ACPI_STATUS (Status);
> }
>
> ACPI_EXPORT_SYMBOL (AcpiEvaluateObjectTyped)
> diff --git a/src/acpica/source/components/parser/psobject.c b/src/acpica/source/components/parser/psobject.c
> index 8d2448bd..5d59492a 100644
> --- a/src/acpica/source/components/parser/psobject.c
> +++ b/src/acpica/source/components/parser/psobject.c
> @@ -237,12 +237,23 @@ AcpiPsGetAmlOpcode (
> WalkState->Opcode,
> (UINT32) (AmlOffset + sizeof (ACPI_TABLE_HEADER)));
>
> + ACPI_ERROR ((AE_INFO,
> + "Aborting disassembly, AML byte code is corrupt"));
> +
> /* Dump the context surrounding the invalid opcode */
>
> AcpiUtDumpBuffer (((UINT8 *) WalkState->ParserState.Aml - 16),
> 48, DB_BYTE_DISPLAY,
> (AmlOffset + sizeof (ACPI_TABLE_HEADER) - 16));
> AcpiOsPrintf (" */\n");
> +
> + /*
> + * Just abort the disassembly, cannot continue because the
> + * parser is essentially lost. The disassembler can then
> + * randomly fail because an ill-constructed parse tree
> + * can result.
> + */
> + return_ACPI_STATUS (AE_AML_BAD_OPCODE);
> #endif
> }
>
> @@ -458,6 +469,10 @@ AcpiPsCreateOp (
> {
> return_ACPI_STATUS (AE_CTRL_PARSE_CONTINUE);
> }
> + if (ACPI_FAILURE (Status))
> + {
> + return_ACPI_STATUS (Status);
> + }
>
> /* Create Op structure and append to parent's argument list */
>
> diff --git a/src/acpica/source/components/parser/psopcode.c b/src/acpica/source/components/parser/psopcode.c
> index 2ad29f19..97a32544 100644
> --- a/src/acpica/source/components/parser/psopcode.c
> +++ b/src/acpica/source/components/parser/psopcode.c
> @@ -445,7 +445,7 @@ const ACPI_OPCODE_INFO AcpiGbl_AmlOpInfo[AML_NUM_OPCODES] =
>
> /* ACPI 6.0 opcodes */
>
> -/* 81 */ ACPI_OP ("External", ARGP_EXTERNAL_OP, ARGI_EXTERNAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE,/* ? */ AML_TYPE_EXEC_3A_0T_0R, AML_FLAGS_EXEC_3A_0T_0R),
> +/* 81 */ ACPI_OP ("External", ARGP_EXTERNAL_OP, ARGI_EXTERNAL_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
> /* 82 */ ACPI_OP ("Comment", ARGP_COMMENT_OP, ARGI_COMMENT_OP, ACPI_TYPE_STRING, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT)
>
> /*! [End] no source code translation !*/
> diff --git a/src/acpica/source/components/parser/psparse.c b/src/acpica/source/components/parser/psparse.c
> index 1a3a5345..854f0547 100644
> --- a/src/acpica/source/components/parser/psparse.c
> +++ b/src/acpica/source/components/parser/psparse.c
> @@ -164,6 +164,7 @@
> #include "acdispat.h"
> #include "amlcode.h"
> #include "acinterp.h"
> +#include "acnamesp.h"
>
> #define _COMPONENT ACPI_PARSER
> ACPI_MODULE_NAME ("psparse")
> @@ -664,8 +665,17 @@ AcpiPsParseAml (
> /* Either the method parse or actual execution failed */
>
> AcpiExExitInterpreter ();
> - ACPI_ERROR_METHOD ("Method parse/execution failed",
> - WalkState->MethodNode, NULL, Status);
> + if (Status == AE_ABORT_METHOD)
> + {
> + AcpiNsPrintNodePathname (
> + WalkState->MethodNode, "Method aborted:");
> + AcpiOsPrintf ("\n");
> + }
> + else
> + {
> + ACPI_ERROR_METHOD ("Method parse/execution failed",
> + WalkState->MethodNode, NULL, Status);
> + }
> AcpiExEnterInterpreter ();
>
> /* Check for possible multi-thread reentrancy problem */
> diff --git a/src/acpica/source/components/resources/rscalc.c b/src/acpica/source/components/resources/rscalc.c
> index 2c3d09eb..492dde47 100644
> --- a/src/acpica/source/components/resources/rscalc.c
> +++ b/src/acpica/source/components/resources/rscalc.c
> @@ -471,6 +471,15 @@ AcpiRsGetAmlLength (
>
> break;
>
> + case ACPI_RESOURCE_TYPE_PIN_FUNCTION:
> +
> + TotalSize = (ACPI_RS_LENGTH) (TotalSize +
> + (Resource->Data.PinFunction.PinTableLength * 2) +
> + Resource->Data.PinFunction.ResourceSource.StringLength +
> + Resource->Data.PinFunction.VendorLength);
> +
> + break;
> +
>
> case ACPI_RESOURCE_TYPE_SERIAL_BUS:
>
> @@ -483,6 +492,42 @@ AcpiRsGetAmlLength (
>
> break;
>
> + case ACPI_RESOURCE_TYPE_PIN_CONFIG:
> +
> + TotalSize = (ACPI_RS_LENGTH) (TotalSize +
> + (Resource->Data.PinConfig.PinTableLength * 2) +
> + Resource->Data.PinConfig.ResourceSource.StringLength +
> + Resource->Data.PinConfig.VendorLength);
> +
> + break;
> +
> + case ACPI_RESOURCE_TYPE_PIN_GROUP:
> +
> + TotalSize = (ACPI_RS_LENGTH) (TotalSize +
> + (Resource->Data.PinGroup.PinTableLength * 2) +
> + Resource->Data.PinGroup.ResourceLabel.StringLength +
> + Resource->Data.PinGroup.VendorLength);
> +
> + break;
> +
> + case ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION:
> +
> + TotalSize = (ACPI_RS_LENGTH) (TotalSize +
> + Resource->Data.PinGroupFunction.ResourceSource.StringLength +
> + Resource->Data.PinGroupFunction.ResourceSourceLabel.StringLength +
> + Resource->Data.PinGroupFunction.VendorLength);
> +
> + break;
> +
> + case ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG:
> +
> + TotalSize = (ACPI_RS_LENGTH) (TotalSize +
> + Resource->Data.PinGroupConfig.ResourceSource.StringLength +
> + Resource->Data.PinGroupConfig.ResourceSourceLabel.StringLength +
> + Resource->Data.PinGroupConfig.VendorLength);
> +
> + break;
> +
> default:
>
> break;
> @@ -668,6 +713,26 @@ AcpiRsGetListLength (
> }
> break;
>
> + case ACPI_RESOURCE_NAME_PIN_FUNCTION:
> +
> + /* Vendor data is optional */
> +
> + if (AmlResource->PinFunction.VendorLength)
> + {
> + ExtraStructBytes +=
> + AmlResource->PinFunction.VendorOffset -
> + AmlResource->PinFunction.PinTableOffset +
> + AmlResource->PinFunction.VendorLength;
> + }
> + else
> + {
> + ExtraStructBytes +=
> + AmlResource->LargeHeader.ResourceLength +
> + sizeof (AML_RESOURCE_LARGE_HEADER) -
> + AmlResource->PinFunction.PinTableOffset;
> + }
> + break;
> +
> case ACPI_RESOURCE_NAME_SERIAL_BUS:
>
> MinimumAmlResourceLength = AcpiGbl_ResourceAmlSerialBusSizes[
> @@ -677,6 +742,53 @@ AcpiRsGetListLength (
> MinimumAmlResourceLength;
> break;
>
> + case ACPI_RESOURCE_NAME_PIN_CONFIG:
> +
> + /* Vendor data is optional */
> +
> + if (AmlResource->PinConfig.VendorLength)
> + {
> + ExtraStructBytes +=
> + AmlResource->PinConfig.VendorOffset -
> + AmlResource->PinConfig.PinTableOffset +
> + AmlResource->PinConfig.VendorLength;
> + }
> + else
> + {
> + ExtraStructBytes +=
> + AmlResource->LargeHeader.ResourceLength +
> + sizeof (AML_RESOURCE_LARGE_HEADER) -
> + AmlResource->PinConfig.PinTableOffset;
> + }
> + break;
> +
> + case ACPI_RESOURCE_NAME_PIN_GROUP:
> +
> + ExtraStructBytes +=
> + AmlResource->PinGroup.VendorOffset -
> + AmlResource->PinGroup.PinTableOffset +
> + AmlResource->PinGroup.VendorLength;
> +
> + break;
> +
> + case ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION:
> +
> + ExtraStructBytes +=
> + AmlResource->PinGroupFunction.VendorOffset -
> + AmlResource->PinGroupFunction.ResSourceOffset +
> + AmlResource->PinGroupFunction.VendorLength;
> +
> + break;
> +
> + case ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG:
> +
> + ExtraStructBytes +=
> + AmlResource->PinGroupConfig.VendorOffset -
> + AmlResource->PinGroupConfig.ResSourceOffset +
> + AmlResource->PinGroupConfig.VendorLength;
> +
> + break;
> +
> default:
>
> break;
> diff --git a/src/acpica/source/components/resources/rsdump.c b/src/acpica/source/components/resources/rsdump.c
> index 9a980781..7cafdcf9 100644
> --- a/src/acpica/source/components/resources/rsdump.c
> +++ b/src/acpica/source/components/resources/rsdump.c
> @@ -216,6 +216,11 @@ AcpiRsDumpResourceSource (
> ACPI_RESOURCE_SOURCE *ResourceSource);
>
> static void
> +AcpiRsDumpResourceLabel (
> + char *Title,
> + ACPI_RESOURCE_LABEL *ResourceLabel);
> +
> +static void
> AcpiRsDumpAddressCommon (
> ACPI_RESOURCE_DATA *Resource);
>
> @@ -531,6 +536,22 @@ AcpiRsDumpDescriptor (
> ACPI_RESOURCE_SOURCE, Target));
> break;
>
> + case ACPI_RSD_LABEL:
> + /*
> + * ResourceLabel
> + */
> + AcpiRsDumpResourceLabel ("Resource Label", ACPI_CAST_PTR (
> + ACPI_RESOURCE_LABEL, Target));
> + break;
> +
> + case ACPI_RSD_SOURCE_LABEL:
> + /*
> + * ResourceSourceLabel
> + */
> + AcpiRsDumpResourceLabel ("Resource Source Label", ACPI_CAST_PTR (
> + ACPI_RESOURCE_LABEL, Target));
> + break;
> +
> default:
>
> AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n",
> @@ -580,6 +601,32 @@ AcpiRsDumpResourceSource (
>
> /*******************************************************************************
> *
> + * FUNCTION: AcpiRsDumpResourceLabel
> + *
> + * PARAMETERS: Title - Title of the dumped resource field
> + * ResourceLabel - Pointer to a Resource Label struct
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Common routine for dumping the ResourceLabel
> + *
> + ******************************************************************************/
> +
> +static void
> +AcpiRsDumpResourceLabel (
> + char *Title,
> + ACPI_RESOURCE_LABEL *ResourceLabel)
> +{
> + ACPI_FUNCTION_ENTRY ();
> +
> + AcpiRsOutString (Title,
> + ResourceLabel->StringPtr ?
> + ResourceLabel->StringPtr : "[Not Specified]");
> +}
> +
> +
> +/*******************************************************************************
> + *
> * FUNCTION: AcpiRsDumpAddressCommon
> *
> * PARAMETERS: Resource - Pointer to an internal resource descriptor
> diff --git a/src/acpica/source/components/resources/rsdumpinfo.c b/src/acpica/source/components/resources/rsdumpinfo.c
> index ba0f37dd..cd9ae4d3 100644
> --- a/src/acpica/source/components/resources/rsdumpinfo.c
> +++ b/src/acpica/source/components/resources/rsdumpinfo.c
> @@ -360,6 +360,74 @@ ACPI_RSDUMP_INFO AcpiRsDumpGpio[16] =
> {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (Gpio.VendorData), "VendorData", NULL},
> };
>
> +ACPI_RSDUMP_INFO AcpiRsDumpPinFunction[10] =
> +{
> + {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPinFunction), "PinFunction", NULL},
> + {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinFunction.RevisionId), "RevisionId", NULL},
> + {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinFunction.PinConfig), "PinConfig", AcpiGbl_PpcDecode},
> + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinFunction.Sharable), "Sharing", AcpiGbl_ShrDecode},
> + {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinFunction.FunctionNumber), "FunctionNumber", NULL},
> + {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (PinFunction.ResourceSource), "ResourceSource", NULL},
> + {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinFunction.PinTableLength), "PinTableLength", NULL},
> + {ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET (PinFunction.PinTable), "PinTable", NULL},
> + {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinFunction.VendorLength), "VendorLength", NULL},
> + {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (PinFunction.VendorData), "VendorData", NULL},
> +};
> +
> +ACPI_RSDUMP_INFO AcpiRsDumpPinConfig[11] =
> +{
> + {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPinConfig), "PinConfig", NULL},
> + {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinConfig.RevisionId), "RevisionId", NULL},
> + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinConfig.ProducerConsumer), "ProducerConsumer", AcpiGbl_ConsumeDecode},
> + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinConfig.Sharable), "Sharing", AcpiGbl_ShrDecode},
> + {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinConfig.PinConfigType), "PinConfigType", NULL},
> + {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (PinConfig.PinConfigValue), "PinConfigValue", NULL},
> + {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (PinConfig.ResourceSource), "ResourceSource", NULL},
> + {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinConfig.PinTableLength), "PinTableLength", NULL},
> + {ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET (PinConfig.PinTable), "PinTable", NULL},
> + {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinConfig.VendorLength), "VendorLength", NULL},
> + {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (PinConfig.VendorData), "VendorData", NULL},
> +};
> +
> +ACPI_RSDUMP_INFO AcpiRsDumpPinGroup[8] =
> +{
> + {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPinGroup), "PinGroup", NULL},
> + {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinGroup.RevisionId), "RevisionId", NULL},
> + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinGroup.ProducerConsumer), "ProducerConsumer", AcpiGbl_ConsumeDecode},
> + {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinGroup.PinTableLength), "PinTableLength", NULL},
> + {ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET (PinGroup.PinTable), "PinTable", NULL},
> + {ACPI_RSD_LABEL, ACPI_RSD_OFFSET (PinGroup.ResourceLabel), "ResourceLabel", NULL},
> + {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinGroup.VendorLength), "VendorLength", NULL},
> + {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (PinGroup.VendorData), "VendorData", NULL},
> +};
> +
> +ACPI_RSDUMP_INFO AcpiRsDumpPinGroupFunction[9] =
> +{
> + {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPinGroupFunction), "PinGroupFunction", NULL},
> + {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinGroupFunction.RevisionId), "RevisionId", NULL},
> + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinGroupFunction.ProducerConsumer), "ProducerConsumer", AcpiGbl_ConsumeDecode},
> + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinGroupFunction.Sharable), "Sharing", AcpiGbl_ShrDecode},
> + {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinGroupFunction.FunctionNumber), "FunctionNumber", NULL},
> + {ACPI_RSD_SOURCE_LABEL, ACPI_RSD_OFFSET (PinGroupFunction.ResourceSourceLabel), "ResourceSourceLabel", NULL},
> + {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (PinGroupFunction.ResourceSource), "ResourceSource", NULL},
> + {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinGroupFunction.VendorLength), "VendorLength", NULL},
> + {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (PinGroupFunction.VendorData), "VendorData", NULL},
> +};
> +
> +ACPI_RSDUMP_INFO AcpiRsDumpPinGroupConfig[10] =
> +{
> + {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPinGroupConfig), "PinGroupConfig", NULL},
> + {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinGroupConfig.RevisionId), "RevisionId", NULL},
> + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinGroupConfig.ProducerConsumer), "ProducerConsumer", AcpiGbl_ConsumeDecode},
> + {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinGroupConfig.Sharable), "Sharing", AcpiGbl_ShrDecode},
> + {ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinGroupConfig.PinConfigType), "PinConfigType", NULL},
> + {ACPI_RSD_UINT32, ACPI_RSD_OFFSET (PinGroupConfig.PinConfigValue), "PinConfigValue", NULL},
> + {ACPI_RSD_SOURCE_LABEL, ACPI_RSD_OFFSET (PinGroupConfig.ResourceSourceLabel), "ResourceSourceLabel", NULL},
> + {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (PinGroupConfig.ResourceSource), "ResourceSource", NULL},
> + {ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinGroupConfig.VendorLength), "VendorLength", NULL},
> + {ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (PinGroupConfig.VendorData), "VendorData", NULL},
> +};
> +
> ACPI_RSDUMP_INFO AcpiRsDumpFixedDma[4] =
> {
> {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpFixedDma), "FixedDma", NULL},
> diff --git a/src/acpica/source/components/resources/rsinfo.c b/src/acpica/source/components/resources/rsinfo.c
> index 499aff65..58189129 100644
> --- a/src/acpica/source/components/resources/rsinfo.c
> +++ b/src/acpica/source/components/resources/rsinfo.c
> @@ -192,6 +192,11 @@ ACPI_RSCONVERT_INFO *AcpiGbl_SetResourceDispatch[] =
> AcpiRsConvertGpio, /* 0x11, ACPI_RESOURCE_TYPE_GPIO */
> AcpiRsConvertFixedDma, /* 0x12, ACPI_RESOURCE_TYPE_FIXED_DMA */
> NULL, /* 0x13, ACPI_RESOURCE_TYPE_SERIAL_BUS - Use subtype table below */
> + AcpiRsConvertPinFunction, /* 0x14, ACPI_RESOURCE_TYPE_PIN_FUNCTION */
> + AcpiRsConvertPinConfig, /* 0x15, ACPI_RESOURCE_TYPE_PIN_CONFIG */
> + AcpiRsConvertPinGroup, /* 0x16, ACPI_RESOURCE_TYPE_PIN_GROUP */
> + AcpiRsConvertPinGroupFunction, /* 0x17, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */
> + AcpiRsConvertPinGroupConfig, /* 0x18, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */
> };
>
> /* Dispatch tables for AML-to-resource (Get Resource) conversion functions */
> @@ -232,8 +237,12 @@ ACPI_RSCONVERT_INFO *AcpiGbl_GetResourceDispatch[] =
> AcpiRsConvertAddress64, /* 0x0A, ACPI_RESOURCE_NAME_ADDRESS64 */
> AcpiRsConvertExtAddress64, /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 */
> AcpiRsConvertGpio, /* 0x0C, ACPI_RESOURCE_NAME_GPIO */
> - NULL, /* 0x0D, Reserved */
> + AcpiRsConvertPinFunction, /* 0x0D, ACPI_RESOURCE_NAME_PIN_FUNCTION */
> NULL, /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use subtype table below */
> + AcpiRsConvertPinConfig, /* 0x0F, ACPI_RESOURCE_NAME_PIN_CONFIG */
> + AcpiRsConvertPinGroup, /* 0x10, ACPI_RESOURCE_NAME_PIN_GROUP */
> + AcpiRsConvertPinGroupFunction, /* 0x11, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION */
> + AcpiRsConvertPinGroupConfig, /* 0x12, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG */
> };
>
> /* Subtype table for SerialBus -- I2C, SPI, and UART */
> @@ -273,6 +282,11 @@ ACPI_RSDUMP_INFO *AcpiGbl_DumpResourceDispatch[] =
> AcpiRsDumpGpio, /* ACPI_RESOURCE_TYPE_GPIO */
> AcpiRsDumpFixedDma, /* ACPI_RESOURCE_TYPE_FIXED_DMA */
> NULL, /* ACPI_RESOURCE_TYPE_SERIAL_BUS */
> + AcpiRsDumpPinFunction, /* ACPI_RESOURCE_TYPE_PIN_FUNCTION */
> + AcpiRsDumpPinConfig, /* ACPI_RESOURCE_TYPE_PIN_CONFIG */
> + AcpiRsDumpPinGroup, /* ACPI_RESOURCE_TYPE_PIN_GROUP */
> + AcpiRsDumpPinGroupFunction, /* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */
> + AcpiRsDumpPinGroupConfig, /* ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */
> };
>
> ACPI_RSDUMP_INFO *AcpiGbl_DumpSerialBusDispatch[] =
> @@ -312,6 +326,11 @@ const UINT8 AcpiGbl_AmlResourceSizes[] =
> sizeof (AML_RESOURCE_GPIO), /* ACPI_RESOURCE_TYPE_GPIO */
> sizeof (AML_RESOURCE_FIXED_DMA), /* ACPI_RESOURCE_TYPE_FIXED_DMA */
> sizeof (AML_RESOURCE_COMMON_SERIALBUS), /* ACPI_RESOURCE_TYPE_SERIAL_BUS */
> + sizeof (AML_RESOURCE_PIN_FUNCTION), /* ACPI_RESOURCE_TYPE_PIN_FUNCTION */
> + sizeof (AML_RESOURCE_PIN_CONFIG), /* ACPI_RESOURCE_TYPE_PIN_CONFIG */
> + sizeof (AML_RESOURCE_PIN_GROUP), /* ACPI_RESOURCE_TYPE_PIN_GROUP */
> + sizeof (AML_RESOURCE_PIN_GROUP_FUNCTION), /* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */
> + sizeof (AML_RESOURCE_PIN_GROUP_CONFIG), /* ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */
> };
>
>
> @@ -351,7 +370,12 @@ const UINT8 AcpiGbl_ResourceStructSizes[] =
> ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS64),
> ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_ADDRESS64),
> ACPI_RS_SIZE (ACPI_RESOURCE_GPIO),
> - ACPI_RS_SIZE (ACPI_RESOURCE_COMMON_SERIALBUS)
> + ACPI_RS_SIZE (ACPI_RESOURCE_PIN_FUNCTION),
> + ACPI_RS_SIZE (ACPI_RESOURCE_COMMON_SERIALBUS),
> + ACPI_RS_SIZE (ACPI_RESOURCE_PIN_CONFIG),
> + ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP),
> + ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_FUNCTION),
> + ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_CONFIG),
> };
>
> const UINT8 AcpiGbl_AmlResourceSerialBusSizes[] =
> diff --git a/src/acpica/source/components/resources/rsmisc.c b/src/acpica/source/components/resources/rsmisc.c
> index 6a5dfd78..16db6fae 100644
> --- a/src/acpica/source/components/resources/rsmisc.c
> +++ b/src/acpica/source/components/resources/rsmisc.c
> @@ -705,10 +705,7 @@ AcpiRsConvertResourceToAml (
>
> /* Set vendor offset only if there is vendor data */
>
> - if (Resource->Data.Gpio.VendorLength)
> - {
> - ACPI_SET16 (Target, AmlLength);
> - }
> + ACPI_SET16 (Target, AmlLength);
>
> AcpiRsSetResourceLength (AmlLength, Aml);
> break;
> diff --git a/src/acpica/source/components/resources/rsserial.c b/src/acpica/source/components/resources/rsserial.c
> index 30ddf522..5395382d 100644
> --- a/src/acpica/source/components/resources/rsserial.c
> +++ b/src/acpica/source/components/resources/rsserial.c
> @@ -254,6 +254,78 @@ ACPI_RSCONVERT_INFO AcpiRsConvertGpio[18] =
> 0},
> };
>
> +/*******************************************************************************
> + *
> + * AcpiRsConvertPinfunction
> + *
> + ******************************************************************************/
> +
> +ACPI_RSCONVERT_INFO AcpiRsConvertPinFunction[13] =
> +{
> + {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_FUNCTION,
> + ACPI_RS_SIZE (ACPI_RESOURCE_PIN_FUNCTION),
> + ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinFunction)},
> +
> + {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_FUNCTION,
> + sizeof (AML_RESOURCE_PIN_FUNCTION),
> + 0},
> +
> + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinFunction.RevisionId),
> + AML_OFFSET (PinFunction.RevisionId),
> + 1},
> +
> + {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinFunction.Sharable),
> + AML_OFFSET (PinFunction.Flags),
> + 0},
> +
> + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinFunction.PinConfig),
> + AML_OFFSET (PinFunction.PinConfig),
> + 1},
> +
> + {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.PinFunction.FunctionNumber),
> + AML_OFFSET (PinFunction.FunctionNumber),
> + 2},
> +
> + /* Pin Table */
> +
> + /*
> + * It is OK to use GPIO operations here because none of them refer GPIO
> + * structures directly but instead use offsets given here.
> + */
> +
> + {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinFunction.PinTableLength),
> + AML_OFFSET (PinFunction.PinTableOffset),
> + AML_OFFSET (PinFunction.ResSourceOffset)},
> +
> + {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinFunction.PinTable),
> + AML_OFFSET (PinFunction.PinTableOffset),
> + 0},
> +
> + /* Resource Source */
> +
> + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.Index),
> + AML_OFFSET (PinFunction.ResSourceIndex),
> + 1},
> +
> + {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.StringLength),
> + AML_OFFSET (PinFunction.ResSourceOffset),
> + AML_OFFSET (PinFunction.VendorOffset)},
> +
> + {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.StringPtr),
> + AML_OFFSET (PinFunction.ResSourceOffset),
> + 0},
> +
> + /* Vendor Data */
> +
> + {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinFunction.VendorLength),
> + AML_OFFSET (PinFunction.VendorLength),
> + 1},
> +
> + {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinFunction.VendorData),
> + AML_OFFSET (PinFunction.VendorOffset),
> + 0},
> +};
> +
>
> /*******************************************************************************
> *
> @@ -545,3 +617,278 @@ ACPI_RSCONVERT_INFO AcpiRsConvertUartSerialBus[23] =
> AML_OFFSET (UartSerialBus.DefaultBaudRate),
> 1},
> };
> +
> +
> +/*******************************************************************************
> + *
> + * AcpiRsConvertPinConfig
> + *
> + ******************************************************************************/
> +
> +ACPI_RSCONVERT_INFO AcpiRsConvertPinConfig[14] =
> +{
> + {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_CONFIG,
> + ACPI_RS_SIZE (ACPI_RESOURCE_PIN_CONFIG),
> + ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinConfig)},
> +
> + {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_CONFIG,
> + sizeof (AML_RESOURCE_PIN_CONFIG),
> + 0},
> +
> + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinConfig.RevisionId),
> + AML_OFFSET (PinConfig.RevisionId),
> + 1},
> +
> + {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinConfig.Sharable),
> + AML_OFFSET (PinConfig.Flags),
> + 0},
> +
> + {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinConfig.ProducerConsumer),
> + AML_OFFSET (PinConfig.Flags),
> + 1},
> +
> + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinConfig.PinConfigType),
> + AML_OFFSET (PinConfig.PinConfigType),
> + 1},
> +
> + {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.PinConfig.PinConfigValue),
> + AML_OFFSET (PinConfig.PinConfigValue),
> + 1},
> +
> + /* Pin Table */
> +
> + /*
> + * It is OK to use GPIO operations here because none of them refer GPIO
> + * structures directly but instead use offsets given here.
> + */
> +
> + {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinConfig.PinTableLength),
> + AML_OFFSET (PinConfig.PinTableOffset),
> + AML_OFFSET (PinConfig.ResSourceOffset)},
> +
> + {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinConfig.PinTable),
> + AML_OFFSET (PinConfig.PinTableOffset),
> + 0},
> +
> + /* Resource Source */
> +
> + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.Index),
> + AML_OFFSET (PinConfig.ResSourceIndex),
> + 1},
> +
> + {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.StringLength),
> + AML_OFFSET (PinConfig.ResSourceOffset),
> + AML_OFFSET (PinConfig.VendorOffset)},
> +
> + {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.StringPtr),
> + AML_OFFSET (PinConfig.ResSourceOffset),
> + 0},
> +
> + /* Vendor Data */
> +
> + {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinConfig.VendorLength),
> + AML_OFFSET (PinConfig.VendorLength),
> + 1},
> +
> + {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinConfig.VendorData),
> + AML_OFFSET (PinConfig.VendorOffset),
> + 0},
> +};
> +
> +/*******************************************************************************
> + *
> + * AcpiRsConvertPinGroup
> + *
> + ******************************************************************************/
> +
> +ACPI_RSCONVERT_INFO AcpiRsConvertPinGroup[10] =
> +{
> + {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP,
> + ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP),
> + ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroup)},
> +
> + {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP,
> + sizeof (AML_RESOURCE_PIN_GROUP),
> + 0},
> +
> + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroup.RevisionId),
> + AML_OFFSET (PinGroup.RevisionId),
> + 1},
> +
> + {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroup.ProducerConsumer),
> + AML_OFFSET (PinGroup.Flags),
> + 0},
> +
> + /* Pin Table */
> +
> + /*
> + * It is OK to use GPIO operations here because none of them refer GPIO
> + * structures directly but instead use offsets given here.
> + */
> +
> + {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinGroup.PinTableLength),
> + AML_OFFSET (PinGroup.PinTableOffset),
> + AML_OFFSET (PinGroup.LabelOffset)},
> +
> + {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinGroup.PinTable),
> + AML_OFFSET (PinGroup.PinTableOffset),
> + 0},
> +
> + /* Resource Label */
> +
> + {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.ResourceLabel.StringLength),
> + AML_OFFSET (PinGroup.LabelOffset),
> + AML_OFFSET (PinGroup.VendorOffset)},
> +
> + {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.ResourceLabel.StringPtr),
> + AML_OFFSET (PinGroup.LabelOffset),
> + 0},
> +
> + /* Vendor Data */
> +
> + {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinGroup.VendorLength),
> + AML_OFFSET (PinGroup.VendorLength),
> + 1},
> +
> + {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.VendorData),
> + AML_OFFSET (PinGroup.VendorOffset),
> + 0},
> +};
> +
> +/*******************************************************************************
> + *
> + * AcpiRsConvertPinGroupFunction
> + *
> + ******************************************************************************/
> +
> +ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupFunction[13] =
> +{
> + {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION,
> + ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_FUNCTION),
> + ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroupFunction)},
> +
> + {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION,
> + sizeof (AML_RESOURCE_PIN_GROUP_FUNCTION),
> + 0},
> +
> + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupFunction.RevisionId),
> + AML_OFFSET (PinGroupFunction.RevisionId),
> + 1},
> +
> + {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupFunction.Sharable),
> + AML_OFFSET (PinGroupFunction.Flags),
> + 0},
> +
> + {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupFunction.ProducerConsumer),
> + AML_OFFSET (PinGroupFunction.Flags),
> + 1},
> +
> + {ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.PinGroupFunction.FunctionNumber),
> + AML_OFFSET (PinGroupFunction.FunctionNumber),
> + 1},
> +
> + /* Resource Source */
> +
> + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.Index),
> + AML_OFFSET (PinGroupFunction.ResSourceIndex),
> + 1},
> +
> + {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.StringLength),
> + AML_OFFSET (PinGroupFunction.ResSourceOffset),
> + AML_OFFSET (PinGroupFunction.ResSourceLabelOffset)},
> +
> + {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.StringPtr),
> + AML_OFFSET (PinGroupFunction.ResSourceOffset),
> + 0},
> +
> + /* Resource Source Label */
> +
> + {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSourceLabel.StringLength),
> + AML_OFFSET (PinGroupFunction.ResSourceLabelOffset),
> + AML_OFFSET (PinGroupFunction.VendorOffset)},
> +
> + {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSourceLabel.StringPtr),
> + AML_OFFSET (PinGroupFunction.ResSourceLabelOffset),
> + 0},
> +
> + /* Vendor Data */
> +
> + {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinGroupFunction.VendorLength),
> + AML_OFFSET (PinGroupFunction.VendorLength),
> + 1},
> +
> + {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.VendorData),
> + AML_OFFSET (PinGroupFunction.VendorOffset),
> + 0},
> +};
> +
> +/*******************************************************************************
> + *
> + * AcpiRsConvertPinGroupConfig
> + *
> + ******************************************************************************/
> +
> +ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupConfig[14] =
> +{
> + {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG,
> + ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_CONFIG),
> + ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroupConfig)},
> +
> + {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG,
> + sizeof (AML_RESOURCE_PIN_GROUP_CONFIG),
> + 0},
> +
> + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupConfig.RevisionId),
> + AML_OFFSET (PinGroupConfig.RevisionId),
> + 1},
> +
> + {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupConfig.Sharable),
> + AML_OFFSET (PinGroupConfig.Flags),
> + 0},
> +
> + {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupConfig.ProducerConsumer),
> + AML_OFFSET (PinGroupConfig.Flags),
> + 1},
> +
> + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupConfig.PinConfigType),
> + AML_OFFSET (PinGroupConfig.PinConfigType),
> + 1},
> +
> + {ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.PinGroupConfig.PinConfigValue),
> + AML_OFFSET (PinGroupConfig.PinConfigValue),
> + 1},
> +
> + /* Resource Source */
> +
> + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.Index),
> + AML_OFFSET (PinGroupConfig.ResSourceIndex),
> + 1},
> +
> + {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.StringLength),
> + AML_OFFSET (PinGroupConfig.ResSourceOffset),
> + AML_OFFSET (PinGroupConfig.ResSourceLabelOffset)},
> +
> + {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.StringPtr),
> + AML_OFFSET (PinGroupConfig.ResSourceOffset),
> + 0},
> +
> + /* Resource Source Label */
> +
> + {ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSourceLabel.StringLength),
> + AML_OFFSET (PinGroupConfig.ResSourceLabelOffset),
> + AML_OFFSET (PinGroupConfig.VendorOffset)},
> +
> + {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSourceLabel.StringPtr),
> + AML_OFFSET (PinGroupConfig.ResSourceLabelOffset),
> + 0},
> +
> + /* Vendor Data */
> +
> + {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinGroupConfig.VendorLength),
> + AML_OFFSET (PinGroupConfig.VendorLength),
> + 1},
> +
> + {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.VendorData),
> + AML_OFFSET (PinGroupConfig.VendorOffset),
> + 0},
> +};
> diff --git a/src/acpica/source/components/tables/tbfadt.c b/src/acpica/source/components/tables/tbfadt.c
> index 42d40a4a..3e4e5229 100644
> --- a/src/acpica/source/components/tables/tbfadt.c
> +++ b/src/acpica/source/components/tables/tbfadt.c
> @@ -597,8 +597,8 @@ AcpiTbCreateLocalFadt (
> * The 64-bit X fields are optional extensions to the original 32-bit FADT
> * V1.0 fields. Even if they are present in the FADT, they are optional and
> * are unused if the BIOS sets them to zero. Therefore, we must copy/expand
> - * 32-bit V1.0 fields to the 64-bit X fields if the the 64-bit X field is
> - * originally zero.
> + * 32-bit V1.0 fields to the 64-bit X fields if the 64-bit X field is originally
> + * zero.
> *
> * For ACPI 1.0 FADTs (that contain no 64-bit addresses), all 32-bit address
> * fields are expanded to the corresponding 64-bit X fields in the internal
> diff --git a/src/acpica/source/components/tables/tbutils.c b/src/acpica/source/components/tables/tbutils.c
> index 046add5f..c7e0ee75 100644
> --- a/src/acpica/source/components/tables/tbutils.c
> +++ b/src/acpica/source/components/tables/tbutils.c
> @@ -257,9 +257,9 @@ AcpiTbCheckDsdtHeader (
> *
> * FUNCTION: AcpiTbCopyDsdt
> *
> - * PARAMETERS: TableDesc - Installed table to copy
> + * PARAMETERS: TableIndex - Index of installed table to copy
> *
> - * RETURN: None
> + * RETURN: The copied DSDT
> *
> * DESCRIPTION: Implements a subsystem option to copy the DSDT to local memory.
> * Some very bad BIOSs are known to either corrupt the DSDT or
> @@ -368,7 +368,7 @@ AcpiTbGetRootTableEntry (
> *
> * FUNCTION: AcpiTbParseRootTable
> *
> - * PARAMETERS: Rsdp - Pointer to the RSDP
> + * PARAMETERS: RsdpAddress - Pointer to the RSDP
> *
> * RETURN: Status
> *
> diff --git a/src/acpica/source/components/utilities/utdecode.c b/src/acpica/source/components/utilities/utdecode.c
> index a0abe49c..7cb171bc 100644
> --- a/src/acpica/source/components/utilities/utdecode.c
> +++ b/src/acpica/source/components/utilities/utdecode.c
> @@ -629,8 +629,9 @@ static const char *AcpiGbl_GenericNotify[ACPI_GENERIC_NOTIFY_MAX + 1]
> /* 09 */ "Device PLD Check",
> /* 0A */ "Reserved",
> /* 0B */ "System Locality Update",
> - /* 0C */ "Shutdown Request", /* Reserved in ACPI 6.0 */
> - /* 0D */ "System Resource Affinity Update"
> + /* 0C */ "Reserved (was previously Shutdown Request)", /* Reserved in ACPI 6.0 */
> + /* 0D */ "System Resource Affinity Update",
> + /* 0E */ "Heterogeneous Memory Attributes Update" /* ACPI 6.2 */
> };
>
> static const char *AcpiGbl_DeviceNotify[5] =
> diff --git a/src/acpica/source/components/utilities/utownerid.c b/src/acpica/source/components/utilities/utownerid.c
> index fba1d7ad..a54513f6 100644
> --- a/src/acpica/source/components/utilities/utownerid.c
> +++ b/src/acpica/source/components/utilities/utownerid.c
> @@ -225,14 +225,20 @@ AcpiUtAllocateOwnerId (
> break;
> }
>
> - if (!(AcpiGbl_OwnerIdMask[j] & (1 << k)))
> + /*
> + * Note: the UINT32 cast ensures that 1 is stored as a unsigned
> + * integer. Omitting the cast may result in 1 being stored as an
> + * int. Some compilers or runtime error detection may flag this as
> + * an error.
> + */
> + if (!(AcpiGbl_OwnerIdMask[j] & ((UINT32) 1 << k)))
> {
> /*
> * Found a free ID. The actual ID is the bit index plus one,
> * making zero an invalid Owner ID. Save this as the last ID
> * allocated and update the global ID mask.
> */
> - AcpiGbl_OwnerIdMask[j] |= (1 << k);
> + AcpiGbl_OwnerIdMask[j] |= ((UINT32) 1 << k);
>
> AcpiGbl_LastOwnerIdIndex = (UINT8) j;
> AcpiGbl_NextOwnerIdOffset = (UINT8) (k + 1);
> @@ -328,7 +334,7 @@ AcpiUtReleaseOwnerId (
> /* Decode ID to index/offset pair */
>
> Index = ACPI_DIV_32 (OwnerId);
> - Bit = 1 << ACPI_MOD_32 (OwnerId);
> + Bit = (UINT32) 1 << ACPI_MOD_32 (OwnerId);
>
> /* Free the owner ID only if it is valid */
>
> diff --git a/src/acpica/source/components/utilities/utresdecode.c b/src/acpica/source/components/utilities/utresdecode.c
> new file mode 100644
> index 00000000..10d84874
> --- /dev/null
> +++ b/src/acpica/source/components/utilities/utresdecode.c
> @@ -0,0 +1,461 @@
> +/*******************************************************************************
> + *
> + * Module Name: utresdecode - Resource descriptor keyword strings
> + *
> + ******************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2017, 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.
> + *
> + *****************************************************************************
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * following license:
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions, and the following disclaimer,
> + * without modification.
> + * 2. Redistributions in binary form must reproduce at minimum a disclaimer
> + * substantially similar to the "NO WARRANTY" disclaimer below
> + * ("Disclaimer") and any redistribution must be conditioned upon
> + * including a substantially similar Disclaimer requirement for further
> + * binary redistribution.
> + * 3. Neither the names of the above-listed copyright holders nor the names
> + * of any contributors may be used to endorse or promote products derived
> + * from this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * GNU General Public License ("GPL") version 2 as published by the Free
> + * Software Foundation.
> + *
> + *****************************************************************************/
> +
> +#include "acpi.h"
> +#include "accommon.h"
> +#include "acresrc.h"
> +
> +
> +#define _COMPONENT ACPI_UTILITIES
> + ACPI_MODULE_NAME ("utresdecode")
> +
> +
> +#if defined (ACPI_DEBUG_OUTPUT) || \
> + defined (ACPI_DISASSEMBLER) || \
> + defined (ACPI_DEBUGGER)
> +
> +/*
> + * Strings used to decode resource descriptors.
> + * Used by both the disassembler and the debugger resource dump routines
> + */
> +const char *AcpiGbl_BmDecode[] =
> +{
> + "NotBusMaster",
> + "BusMaster"
> +};
> +
> +const char *AcpiGbl_ConfigDecode[] =
> +{
> + "0 - Good Configuration",
> + "1 - Acceptable Configuration",
> + "2 - Suboptimal Configuration",
> + "3 - ***Invalid Configuration***",
> +};
> +
> +const char *AcpiGbl_ConsumeDecode[] =
> +{
> + "ResourceProducer",
> + "ResourceConsumer"
> +};
> +
> +const char *AcpiGbl_DecDecode[] =
> +{
> + "PosDecode",
> + "SubDecode"
> +};
> +
> +const char *AcpiGbl_HeDecode[] =
> +{
> + "Level",
> + "Edge"
> +};
> +
> +const char *AcpiGbl_IoDecode[] =
> +{
> + "Decode10",
> + "Decode16"
> +};
> +
> +const char *AcpiGbl_LlDecode[] =
> +{
> + "ActiveHigh",
> + "ActiveLow",
> + "ActiveBoth",
> + "Reserved"
> +};
> +
> +const char *AcpiGbl_MaxDecode[] =
> +{
> + "MaxNotFixed",
> + "MaxFixed"
> +};
> +
> +const char *AcpiGbl_MemDecode[] =
> +{
> + "NonCacheable",
> + "Cacheable",
> + "WriteCombining",
> + "Prefetchable"
> +};
> +
> +const char *AcpiGbl_MinDecode[] =
> +{
> + "MinNotFixed",
> + "MinFixed"
> +};
> +
> +const char *AcpiGbl_MtpDecode[] =
> +{
> + "AddressRangeMemory",
> + "AddressRangeReserved",
> + "AddressRangeACPI",
> + "AddressRangeNVS"
> +};
> +
> +const char *AcpiGbl_RngDecode[] =
> +{
> + "InvalidRanges",
> + "NonISAOnlyRanges",
> + "ISAOnlyRanges",
> + "EntireRange"
> +};
> +
> +const char *AcpiGbl_RwDecode[] =
> +{
> + "ReadOnly",
> + "ReadWrite"
> +};
> +
> +const char *AcpiGbl_ShrDecode[] =
> +{
> + "Exclusive",
> + "Shared",
> + "ExclusiveAndWake", /* ACPI 5.0 */
> + "SharedAndWake" /* ACPI 5.0 */
> +};
> +
> +const char *AcpiGbl_SizDecode[] =
> +{
> + "Transfer8",
> + "Transfer8_16",
> + "Transfer16",
> + "InvalidSize"
> +};
> +
> +const char *AcpiGbl_TrsDecode[] =
> +{
> + "DenseTranslation",
> + "SparseTranslation"
> +};
> +
> +const char *AcpiGbl_TtpDecode[] =
> +{
> + "TypeStatic",
> + "TypeTranslation"
> +};
> +
> +const char *AcpiGbl_TypDecode[] =
> +{
> + "Compatibility",
> + "TypeA",
> + "TypeB",
> + "TypeF"
> +};
> +
> +const char *AcpiGbl_PpcDecode[] =
> +{
> + "PullDefault",
> + "PullUp",
> + "PullDown",
> + "PullNone"
> +};
> +
> +const char *AcpiGbl_IorDecode[] =
> +{
> + "IoRestrictionNone",
> + "IoRestrictionInputOnly",
> + "IoRestrictionOutputOnly",
> + "IoRestrictionNoneAndPreserve"
> +};
> +
> +const char *AcpiGbl_DtsDecode[] =
> +{
> + "Width8bit",
> + "Width16bit",
> + "Width32bit",
> + "Width64bit",
> + "Width128bit",
> + "Width256bit",
> +};
> +
> +/* GPIO connection type */
> +
> +const char *AcpiGbl_CtDecode[] =
> +{
> + "Interrupt",
> + "I/O"
> +};
> +
> +/* Serial bus type */
> +
> +const char *AcpiGbl_SbtDecode[] =
> +{
> + "/* UNKNOWN serial bus type */",
> + "I2C",
> + "SPI",
> + "UART"
> +};
> +
> +/* I2C serial bus access mode */
> +
> +const char *AcpiGbl_AmDecode[] =
> +{
> + "AddressingMode7Bit",
> + "AddressingMode10Bit"
> +};
> +
> +/* I2C serial bus slave mode */
> +
> +const char *AcpiGbl_SmDecode[] =
> +{
> + "ControllerInitiated",
> + "DeviceInitiated"
> +};
> +
> +/* SPI serial bus wire mode */
> +
> +const char *AcpiGbl_WmDecode[] =
> +{
> + "FourWireMode",
> + "ThreeWireMode"
> +};
> +
> +/* SPI serial clock phase */
> +
> +const char *AcpiGbl_CphDecode[] =
> +{
> + "ClockPhaseFirst",
> + "ClockPhaseSecond"
> +};
> +
> +/* SPI serial bus clock polarity */
> +
> +const char *AcpiGbl_CpoDecode[] =
> +{
> + "ClockPolarityLow",
> + "ClockPolarityHigh"
> +};
> +
> +/* SPI serial bus device polarity */
> +
> +const char *AcpiGbl_DpDecode[] =
> +{
> + "PolarityLow",
> + "PolarityHigh"
> +};
> +
> +/* UART serial bus endian */
> +
> +const char *AcpiGbl_EdDecode[] =
> +{
> + "LittleEndian",
> + "BigEndian"
> +};
> +
> +/* UART serial bus bits per byte */
> +
> +const char *AcpiGbl_BpbDecode[] =
> +{
> + "DataBitsFive",
> + "DataBitsSix",
> + "DataBitsSeven",
> + "DataBitsEight",
> + "DataBitsNine",
> + "/* UNKNOWN Bits per byte */",
> + "/* UNKNOWN Bits per byte */",
> + "/* UNKNOWN Bits per byte */"
> +};
> +
> +/* UART serial bus stop bits */
> +
> +const char *AcpiGbl_SbDecode[] =
> +{
> + "StopBitsZero",
> + "StopBitsOne",
> + "StopBitsOnePlusHalf",
> + "StopBitsTwo"
> +};
> +
> +/* UART serial bus flow control */
> +
> +const char *AcpiGbl_FcDecode[] =
> +{
> + "FlowControlNone",
> + "FlowControlHardware",
> + "FlowControlXON",
> + "/* UNKNOWN flow control keyword */"
> +};
> +
> +/* UART serial bus parity type */
> +
> +const char *AcpiGbl_PtDecode[] =
> +{
> + "ParityTypeNone",
> + "ParityTypeEven",
> + "ParityTypeOdd",
> + "ParityTypeMark",
> + "ParityTypeSpace",
> + "/* UNKNOWN parity keyword */",
> + "/* UNKNOWN parity keyword */",
> + "/* UNKNOWN parity keyword */"
> +};
> +
> +/* PinConfig type */
> +
> +const char *AcpiGbl_PtypDecode[] =
> +{
> + "Default",
> + "Bias Pull-up",
> + "Bias Pull-down",
> + "Bias Default",
> + "Bias Disable",
> + "Bias High Impedance",
> + "Bias Bus Hold",
> + "Drive Open Drain",
> + "Drive Open Source",
> + "Drive Push Pull",
> + "Drive Strength",
> + "Slew Rate",
> + "Input Debounce",
> + "Input Schmitt Trigger",
> +};
> +
> +#endif
> diff --git a/src/acpica/source/components/utilities/utresrc.c b/src/acpica/source/components/utilities/utresrc.c
> index 978711a5..8131cde2 100644
> --- a/src/acpica/source/components/utilities/utresrc.c
> +++ b/src/acpica/source/components/utilities/utresrc.c
> @@ -158,287 +158,6 @@
> ACPI_MODULE_NAME ("utresrc")
>
>
> -#if defined(ACPI_DEBUG_OUTPUT) || defined (ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER)
> -
> -/*
> - * Strings used to decode resource descriptors.
> - * Used by both the disassembler and the debugger resource dump routines
> - */
> -const char *AcpiGbl_BmDecode[] =
> -{
> - "NotBusMaster",
> - "BusMaster"
> -};
> -
> -const char *AcpiGbl_ConfigDecode[] =
> -{
> - "0 - Good Configuration",
> - "1 - Acceptable Configuration",
> - "2 - Suboptimal Configuration",
> - "3 - ***Invalid Configuration***",
> -};
> -
> -const char *AcpiGbl_ConsumeDecode[] =
> -{
> - "ResourceProducer",
> - "ResourceConsumer"
> -};
> -
> -const char *AcpiGbl_DecDecode[] =
> -{
> - "PosDecode",
> - "SubDecode"
> -};
> -
> -const char *AcpiGbl_HeDecode[] =
> -{
> - "Level",
> - "Edge"
> -};
> -
> -const char *AcpiGbl_IoDecode[] =
> -{
> - "Decode10",
> - "Decode16"
> -};
> -
> -const char *AcpiGbl_LlDecode[] =
> -{
> - "ActiveHigh",
> - "ActiveLow",
> - "ActiveBoth",
> - "Reserved"
> -};
> -
> -const char *AcpiGbl_MaxDecode[] =
> -{
> - "MaxNotFixed",
> - "MaxFixed"
> -};
> -
> -const char *AcpiGbl_MemDecode[] =
> -{
> - "NonCacheable",
> - "Cacheable",
> - "WriteCombining",
> - "Prefetchable"
> -};
> -
> -const char *AcpiGbl_MinDecode[] =
> -{
> - "MinNotFixed",
> - "MinFixed"
> -};
> -
> -const char *AcpiGbl_MtpDecode[] =
> -{
> - "AddressRangeMemory",
> - "AddressRangeReserved",
> - "AddressRangeACPI",
> - "AddressRangeNVS"
> -};
> -
> -const char *AcpiGbl_RngDecode[] =
> -{
> - "InvalidRanges",
> - "NonISAOnlyRanges",
> - "ISAOnlyRanges",
> - "EntireRange"
> -};
> -
> -const char *AcpiGbl_RwDecode[] =
> -{
> - "ReadOnly",
> - "ReadWrite"
> -};
> -
> -const char *AcpiGbl_ShrDecode[] =
> -{
> - "Exclusive",
> - "Shared",
> - "ExclusiveAndWake", /* ACPI 5.0 */
> - "SharedAndWake" /* ACPI 5.0 */
> -};
> -
> -const char *AcpiGbl_SizDecode[] =
> -{
> - "Transfer8",
> - "Transfer8_16",
> - "Transfer16",
> - "InvalidSize"
> -};
> -
> -const char *AcpiGbl_TrsDecode[] =
> -{
> - "DenseTranslation",
> - "SparseTranslation"
> -};
> -
> -const char *AcpiGbl_TtpDecode[] =
> -{
> - "TypeStatic",
> - "TypeTranslation"
> -};
> -
> -const char *AcpiGbl_TypDecode[] =
> -{
> - "Compatibility",
> - "TypeA",
> - "TypeB",
> - "TypeF"
> -};
> -
> -const char *AcpiGbl_PpcDecode[] =
> -{
> - "PullDefault",
> - "PullUp",
> - "PullDown",
> - "PullNone"
> -};
> -
> -const char *AcpiGbl_IorDecode[] =
> -{
> - "IoRestrictionNone",
> - "IoRestrictionInputOnly",
> - "IoRestrictionOutputOnly",
> - "IoRestrictionNoneAndPreserve"
> -};
> -
> -const char *AcpiGbl_DtsDecode[] =
> -{
> - "Width8bit",
> - "Width16bit",
> - "Width32bit",
> - "Width64bit",
> - "Width128bit",
> - "Width256bit",
> -};
> -
> -/* GPIO connection type */
> -
> -const char *AcpiGbl_CtDecode[] =
> -{
> - "Interrupt",
> - "I/O"
> -};
> -
> -/* Serial bus type */
> -
> -const char *AcpiGbl_SbtDecode[] =
> -{
> - "/* UNKNOWN serial bus type */",
> - "I2C",
> - "SPI",
> - "UART"
> -};
> -
> -/* I2C serial bus access mode */
> -
> -const char *AcpiGbl_AmDecode[] =
> -{
> - "AddressingMode7Bit",
> - "AddressingMode10Bit"
> -};
> -
> -/* I2C serial bus slave mode */
> -
> -const char *AcpiGbl_SmDecode[] =
> -{
> - "ControllerInitiated",
> - "DeviceInitiated"
> -};
> -
> -/* SPI serial bus wire mode */
> -
> -const char *AcpiGbl_WmDecode[] =
> -{
> - "FourWireMode",
> - "ThreeWireMode"
> -};
> -
> -/* SPI serial clock phase */
> -
> -const char *AcpiGbl_CphDecode[] =
> -{
> - "ClockPhaseFirst",
> - "ClockPhaseSecond"
> -};
> -
> -/* SPI serial bus clock polarity */
> -
> -const char *AcpiGbl_CpoDecode[] =
> -{
> - "ClockPolarityLow",
> - "ClockPolarityHigh"
> -};
> -
> -/* SPI serial bus device polarity */
> -
> -const char *AcpiGbl_DpDecode[] =
> -{
> - "PolarityLow",
> - "PolarityHigh"
> -};
> -
> -/* UART serial bus endian */
> -
> -const char *AcpiGbl_EdDecode[] =
> -{
> - "LittleEndian",
> - "BigEndian"
> -};
> -
> -/* UART serial bus bits per byte */
> -
> -const char *AcpiGbl_BpbDecode[] =
> -{
> - "DataBitsFive",
> - "DataBitsSix",
> - "DataBitsSeven",
> - "DataBitsEight",
> - "DataBitsNine",
> - "/* UNKNOWN Bits per byte */",
> - "/* UNKNOWN Bits per byte */",
> - "/* UNKNOWN Bits per byte */"
> -};
> -
> -/* UART serial bus stop bits */
> -
> -const char *AcpiGbl_SbDecode[] =
> -{
> - "StopBitsZero",
> - "StopBitsOne",
> - "StopBitsOnePlusHalf",
> - "StopBitsTwo"
> -};
> -
> -/* UART serial bus flow control */
> -
> -const char *AcpiGbl_FcDecode[] =
> -{
> - "FlowControlNone",
> - "FlowControlHardware",
> - "FlowControlXON",
> - "/* UNKNOWN flow control keyword */"
> -};
> -
> -/* UART serial bus parity type */
> -
> -const char *AcpiGbl_PtDecode[] =
> -{
> - "ParityTypeNone",
> - "ParityTypeEven",
> - "ParityTypeOdd",
> - "ParityTypeMark",
> - "ParityTypeSpace",
> - "/* UNKNOWN parity keyword */",
> - "/* UNKNOWN parity keyword */",
> - "/* UNKNOWN parity keyword */"
> -};
> -
> -#endif
> -
> -
> /*
> * Base sizes of the raw AML resource descriptors, indexed by resource type.
> * Zero indicates a reserved (and therefore invalid) resource type.
> @@ -479,8 +198,12 @@ const UINT8 AcpiGbl_ResourceAmlSizes[] =
> ACPI_AML_SIZE_LARGE (AML_RESOURCE_ADDRESS64),
> ACPI_AML_SIZE_LARGE (AML_RESOURCE_EXTENDED_ADDRESS64),
> ACPI_AML_SIZE_LARGE (AML_RESOURCE_GPIO),
> - 0,
> + ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_FUNCTION),
> ACPI_AML_SIZE_LARGE (AML_RESOURCE_COMMON_SERIALBUS),
> + ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_CONFIG),
> + ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_GROUP),
> + ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_GROUP_FUNCTION),
> + ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_GROUP_CONFIG),
> };
>
> const UINT8 AcpiGbl_ResourceAmlSerialBusSizes[] =
> @@ -534,8 +257,12 @@ static const UINT8 AcpiGbl_ResourceTypes[] =
> ACPI_VARIABLE_LENGTH, /* 0A Qword* address */
> ACPI_FIXED_LENGTH, /* 0B Extended* address */
> ACPI_VARIABLE_LENGTH, /* 0C Gpio* */
> - 0,
> - ACPI_VARIABLE_LENGTH /* 0E *SerialBus */
> + ACPI_VARIABLE_LENGTH, /* 0D PinFunction */
> + ACPI_VARIABLE_LENGTH, /* 0E *SerialBus */
> + ACPI_VARIABLE_LENGTH, /* 0F PinConfig */
> + ACPI_VARIABLE_LENGTH, /* 10 PinGroup */
> + ACPI_VARIABLE_LENGTH, /* 11 PinGroupFunction */
> + ACPI_VARIABLE_LENGTH, /* 12 PinGroupConfig */
> };
>
>
> @@ -580,7 +307,7 @@ AcpiUtWalkAmlResources (
> * The absolute minimum resource template is one EndTag descriptor.
> * However, we will treat a lone EndTag as just a simple buffer.
> */
> - if (AmlLength < sizeof (AML_RESOURCE_END_TAG))
> + if (AmlLength <= sizeof (AML_RESOURCE_END_TAG))
> {
> return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG);
> }
> @@ -613,8 +340,8 @@ AcpiUtWalkAmlResources (
>
> if (UserFunction)
> {
> - Status = UserFunction (Aml, Length, Offset,
> - ResourceIndex, Context);
> + Status = UserFunction (
> + Aml, Length, Offset, ResourceIndex, Context);
> if (ACPI_FAILURE (Status))
> {
> return_ACPI_STATUS (Status);
> @@ -651,15 +378,10 @@ AcpiUtWalkAmlResources (
> *Context = Aml;
> }
>
> - /* Check if buffer is defined to be longer than the resource length */
> -
> - if (AmlLength > (Offset + Length))
> - {
> - return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG);
> - }
> -
> - /* Normal exit */
> -
> + /*
> + * Normal exit. Note: We allow the buffer to be larger than
> + * the resource template, as long as the END_TAG exists.
> + */
> return_ACPI_STATUS (AE_OK);
> }
>
> diff --git a/src/acpica/source/include/acapps.h b/src/acpica/source/include/acapps.h
> index 6ceb0f23..6ef98550 100644
> --- a/src/acpica/source/include/acapps.h
> +++ b/src/acpica/source/include/acapps.h
> @@ -294,7 +294,7 @@ AcpiDmFinishNamespaceLoad (
> ACPI_OWNER_ID OwnerId);
>
> void
> -AcpiDmConvertResourceIndexes (
> +AcpiDmConvertParseObjects (
> ACPI_PARSE_OBJECT *ParseTreeRoot,
> ACPI_NAMESPACE_NODE *NamespaceRoot);
>
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 01b0829d..5beec2d4 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -207,6 +207,11 @@ typedef enum
> ACPI_DMT_FLAGS1,
> ACPI_DMT_FLAGS2,
> ACPI_DMT_FLAGS4,
> + ACPI_DMT_FLAGS4_0,
> + ACPI_DMT_FLAGS4_4,
> + ACPI_DMT_FLAGS4_8,
> + ACPI_DMT_FLAGS4_12,
> + ACPI_DMT_FLAGS16_16,
> ACPI_DMT_UINT8,
> ACPI_DMT_UINT16,
> ACPI_DMT_UINT24,
> @@ -257,6 +262,7 @@ typedef enum
> ACPI_DMT_HEST,
> ACPI_DMT_HESTNTFY,
> ACPI_DMT_HESTNTYP,
> + ACPI_DMT_HMAT,
> ACPI_DMT_IORTMEM,
> ACPI_DMT_IVRS,
> ACPI_DMT_LPIT,
> @@ -264,6 +270,7 @@ typedef enum
> ACPI_DMT_NFIT,
> ACPI_DMT_PCCT,
> ACPI_DMT_PMTT,
> + ACPI_DMT_PPTT,
> ACPI_DMT_SLIC,
> ACPI_DMT_SRAT,
>
> @@ -412,12 +419,22 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest7[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest8[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest9[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest10[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest11[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoHestNotify[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoHestBank[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoHpet[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoLpitHdr[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoLpit0[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoLpit1[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat0[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1a[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1b[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1c[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2a[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmatHdr[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort0[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort0a[];
> @@ -495,6 +512,13 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcctHdr[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct3[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct4[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0a[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt2[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoPpttHdr[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoRasf[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp1[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp2[];
> @@ -513,6 +537,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat0[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat1[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat4[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoStao[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoStaoStr[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaHdr[];
> @@ -529,6 +554,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoWddt[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoWdrt[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoWsmt[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoXenv[];
>
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoGeneric[][2];
> @@ -641,6 +667,10 @@ AcpiDmDumpHest (
> ACPI_TABLE_HEADER *Table);
>
> void
> +AcpiDmDumpHmat (
> + ACPI_TABLE_HEADER *Table);
> +
> +void
> AcpiDmDumpIort (
> ACPI_TABLE_HEADER *Table);
>
> @@ -684,6 +714,10 @@ void
> AcpiDmDumpPmtt (
> ACPI_TABLE_HEADER *Table);
>
> +void
> +AcpiDmDumpPptt (
> + ACPI_TABLE_HEADER *Table);
> +
> UINT32
> AcpiDmDumpRsdp (
> ACPI_TABLE_HEADER *Table);
> @@ -759,10 +793,6 @@ AcpiDmDisassembleOneOp (
> ACPI_OP_WALK_INFO *Info,
> ACPI_PARSE_OBJECT *Op);
>
> -BOOLEAN
> -AcpiDmIsTempName (
> - ACPI_PARSE_OBJECT *Op);
> -
> UINT32
> AcpiDmListType (
> ACPI_PARSE_OBJECT *Op);
> @@ -888,6 +918,12 @@ AcpiDmAddOpToExternalList (
> UINT16 Flags);
>
> void
> +AcpiDmCreateSubobjectForExternal (
> + UINT8 Type,
> + ACPI_NAMESPACE_NODE **Node,
> + UINT32 Value);
> +
> +void
> AcpiDmAddNodeToExternalList (
> ACPI_NAMESPACE_NODE *Node,
> UINT8 Type,
> @@ -895,11 +931,17 @@ AcpiDmAddNodeToExternalList (
> UINT16 Flags);
>
> void
> -AcpiDmAddExternalsToNamespace (
> +AcpiDmAddExternalListToNamespace (
> void);
>
> +void
> +AcpiDmAddOneExternalToNamespace (
> + char *Path,
> + UINT8 Type,
> + UINT32 Value);
> +
> UINT32
> -AcpiDmGetExternalMethodCount (
> +AcpiDmGetUnresolvedExternalMethodCount (
> void);
>
> void
> @@ -923,6 +965,11 @@ void
> AcpiDmGetExternalsFromFile (
> void);
>
> +void
> +AcpiDmMarkExternalConflict (
> + ACPI_NAMESPACE_NODE *Node);
> +
> +
> /*
> * dmresrc
> */
> @@ -1048,6 +1095,41 @@ AcpiDmGpioDescriptor (
> UINT32 Level);
>
> void
> +AcpiDmPinFunctionDescriptor (
> + ACPI_OP_WALK_INFO *Info,
> + AML_RESOURCE *Resource,
> + UINT32 Length,
> + UINT32 Level);
> +
> +void
> +AcpiDmPinConfigDescriptor (
> + ACPI_OP_WALK_INFO *Info,
> + AML_RESOURCE *Resource,
> + UINT32 Length,
> + UINT32 Level);
> +
> +void
> +AcpiDmPinGroupDescriptor (
> + ACPI_OP_WALK_INFO *Info,
> + AML_RESOURCE *Resource,
> + UINT32 Length,
> + UINT32 Level);
> +
> +void
> +AcpiDmPinGroupFunctionDescriptor (
> + ACPI_OP_WALK_INFO *Info,
> + AML_RESOURCE *Resource,
> + UINT32 Length,
> + UINT32 Level);
> +
> +void
> +AcpiDmPinGroupConfigDescriptor (
> + ACPI_OP_WALK_INFO *Info,
> + AML_RESOURCE *Resource,
> + UINT32 Length,
> + UINT32 Level);
> +
> +void
> AcpiDmSerialBusDescriptor (
> ACPI_OP_WALK_INFO *Info,
> AML_RESOURCE *Resource,
> @@ -1171,6 +1253,17 @@ AcpiDmCloseOperator (
> /*
> * dmtables
> */
> +ACPI_STATUS
> +AcpiDmProcessSwitch (
> + ACPI_PARSE_OBJECT *Op);
> +
> +void
> +AcpiDmClearTempList(
> + void);
> +
> +/*
> + * dmtables
> + */
> void
> AdDisassemblerHeader (
> char *Filename,
> diff --git a/src/acpica/source/include/acglobal.h b/src/acpica/source/include/acglobal.h
> index edb696a9..686dcd81 100644
> --- a/src/acpica/source/include/acglobal.h
> +++ b/src/acpica/source/include/acglobal.h
> @@ -427,6 +427,7 @@ ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_ForceAmlDisassembly, FALSE);
> ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DmOpt_Verbose, TRUE);
> ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DmEmitExternalOpcodes, FALSE);
> ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DoDisassemblerOptimizations, TRUE);
> +ACPI_INIT_GLOBAL (ACPI_PARSE_OBJECT_LIST, *AcpiGbl_TempListHead, NULL);
>
> ACPI_GLOBAL (BOOLEAN, AcpiGbl_DmOpt_Disasm);
> ACPI_GLOBAL (BOOLEAN, AcpiGbl_DmOpt_Listing);
> @@ -480,6 +481,8 @@ ACPI_GLOBAL (const char, *AcpiGbl_PldVerticalPositionList[]);
> ACPI_GLOBAL (const char, *AcpiGbl_PldHorizontalPositionList[]);
> ACPI_GLOBAL (const char, *AcpiGbl_PldShapeList[]);
>
> +ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DisasmFlag, FALSE);
> +
> #endif
>
> /*
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index 92eb49a6..1d94a591 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -1136,7 +1136,7 @@ typedef struct acpi_parse_obj_common
> typedef struct acpi_parse_obj_named
> {
> ACPI_PARSE_COMMON
> - UINT8 *Path;
> + char *Path;
> UINT8 *Data; /* AML body or bytelist data */
> UINT32 Length; /* AML length */
> UINT32 Name; /* 4-byte name or zero if no name */
> @@ -1444,8 +1444,13 @@ typedef struct acpi_port_info
> #define ACPI_RESOURCE_NAME_ADDRESS64 0x8A
> #define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 0x8B
> #define ACPI_RESOURCE_NAME_GPIO 0x8C
> +#define ACPI_RESOURCE_NAME_PIN_FUNCTION 0x8D
> #define ACPI_RESOURCE_NAME_SERIAL_BUS 0x8E
> -#define ACPI_RESOURCE_NAME_LARGE_MAX 0x8E
> +#define ACPI_RESOURCE_NAME_PIN_CONFIG 0x8F
> +#define ACPI_RESOURCE_NAME_PIN_GROUP 0x90
> +#define ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION 0x91
> +#define ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG 0x92
> +#define ACPI_RESOURCE_NAME_LARGE_MAX 0x92
>
>
> /*****************************************************************************
> @@ -1482,6 +1487,7 @@ typedef struct acpi_external_list
> #define ACPI_EXT_INTERNAL_PATH_ALLOCATED 0x04 /* Deallocate internal path on completion */
> #define ACPI_EXT_EXTERNAL_EMITTED 0x08 /* External() statement has been emitted */
> #define ACPI_EXT_ORIGIN_FROM_OPCODE 0x10 /* External came from a External() opcode */
> +#define ACPI_EXT_CONFLICTING_DECLARATION 0x20 /* External has a conflicting declaration within AML */
>
>
> typedef struct acpi_external_file
> @@ -1492,6 +1498,13 @@ typedef struct acpi_external_file
> } ACPI_EXTERNAL_FILE;
>
>
> +typedef struct acpi_parse_object_list
> +{
> + ACPI_PARSE_OBJECT *Op;
> + struct acpi_parse_object_list *Next;
> +
> +} ACPI_PARSE_OBJECT_LIST;
> +
> /*****************************************************************************
> *
> * Debugger
> diff --git a/src/acpica/source/include/acopcode.h b/src/acpica/source/include/acopcode.h
> index b0cc4b1e..3ce2772b 100644
> --- a/src/acpica/source/include/acopcode.h
> +++ b/src/acpica/source/include/acopcode.h
> @@ -221,7 +221,7 @@
> #define ARGP_DWORD_OP ARGP_LIST1 (ARGP_DWORDDATA)
> #define ARGP_ELSE_OP ARGP_LIST2 (ARGP_PKGLENGTH, ARGP_TERMLIST)
> #define ARGP_EVENT_OP ARGP_LIST1 (ARGP_NAME)
> -#define ARGP_EXTERNAL_OP ARGP_LIST3 (ARGP_NAMESTRING, ARGP_BYTEDATA, ARGP_BYTEDATA)
> +#define ARGP_EXTERNAL_OP ARGP_LIST3 (ARGP_NAME, ARGP_BYTEDATA, ARGP_BYTEDATA)
> #define ARGP_FATAL_OP ARGP_LIST3 (ARGP_BYTEDATA, ARGP_DWORDDATA, ARGP_TERMARG)
> #define ARGP_FIELD_OP ARGP_LIST4 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_BYTEDATA, ARGP_FIELDLIST)
> #define ARGP_FIND_SET_LEFT_BIT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index 55a0bded..934e6683 100644
> --- a/src/acpica/source/include/acpixf.h
> +++ b/src/acpica/source/include/acpixf.h
> @@ -154,7 +154,7 @@
>
> /* Current ACPICA subsystem version in YYYYMMDD format */
>
> -#define ACPI_CA_VERSION 0x20170303
> +#define ACPI_CA_VERSION 0x20170531
>
> #include "acconfig.h"
> #include "actypes.h"
> diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h
> index 5adc110d..95a18a47 100644
> --- a/src/acpica/source/include/acpredef.h
> +++ b/src/acpica/source/include/acpredef.h
> @@ -682,6 +682,9 @@ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] =
> {{"_HID", METHOD_0ARGS,
> METHOD_RETURNS (ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING)}},
>
> + {{"_HMA", METHOD_0ARGS,
> + METHOD_RETURNS (ACPI_RTYPE_BUFFER)}},
> +
> {{"_HOT", METHOD_0ARGS,
> METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
>
> @@ -726,6 +729,17 @@ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] =
> PACKAGE_INFO (ACPI_PTYPE2_VAR_VAR, ACPI_RTYPE_INTEGER, 3,
> ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER | ACPI_RTYPE_STRING, 10,0),
>
> + {{"_LSI", METHOD_0ARGS,
> + METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}},
> + PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3,0,0,0),
> +
> + {{"_LSR", METHOD_2ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER),
> + METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}},
> + PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 1, ACPI_RTYPE_BUFFER, 1,0),
> +
> + {{"_LSW", METHOD_3ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_BUFFER),
> + METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
> +
> {{"_MAT", METHOD_0ARGS,
> METHOD_RETURNS (ACPI_RTYPE_BUFFER)}},
>
> diff --git a/src/acpica/source/include/acresrc.h b/src/acpica/source/include/acresrc.h
> index e6458e54..ca5aad02 100644
> --- a/src/acpica/source/include/acresrc.h
> +++ b/src/acpica/source/include/acresrc.h
> @@ -264,7 +264,9 @@ typedef enum
> ACPI_RSD_UINT16,
> ACPI_RSD_UINT32,
> ACPI_RSD_UINT64,
> - ACPI_RSD_WORDLIST
> + ACPI_RSD_WORDLIST,
> + ACPI_RSD_LABEL,
> + ACPI_RSD_SOURCE_LABEL,
>
> } ACPI_RSDUMP_OPCODES;
>
> @@ -496,6 +498,11 @@ extern ACPI_RSCONVERT_INFO AcpiRsConvertFixedDma[];
> extern ACPI_RSCONVERT_INFO AcpiRsConvertI2cSerialBus[];
> extern ACPI_RSCONVERT_INFO AcpiRsConvertSpiSerialBus[];
> extern ACPI_RSCONVERT_INFO AcpiRsConvertUartSerialBus[];
> +extern ACPI_RSCONVERT_INFO AcpiRsConvertPinFunction[];
> +extern ACPI_RSCONVERT_INFO AcpiRsConvertPinConfig[];
> +extern ACPI_RSCONVERT_INFO AcpiRsConvertPinGroup[];
> +extern ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupFunction[];
> +extern ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupConfig[];
>
> /* These resources require separate get/set tables */
>
> @@ -540,12 +547,17 @@ extern ACPI_RSDUMP_INFO AcpiRsDumpExtAddress64[];
> extern ACPI_RSDUMP_INFO AcpiRsDumpExtIrq[];
> extern ACPI_RSDUMP_INFO AcpiRsDumpGenericReg[];
> extern ACPI_RSDUMP_INFO AcpiRsDumpGpio[];
> +extern ACPI_RSDUMP_INFO AcpiRsDumpPinFunction[];
> extern ACPI_RSDUMP_INFO AcpiRsDumpFixedDma[];
> extern ACPI_RSDUMP_INFO AcpiRsDumpCommonSerialBus[];
> extern ACPI_RSDUMP_INFO AcpiRsDumpI2cSerialBus[];
> extern ACPI_RSDUMP_INFO AcpiRsDumpSpiSerialBus[];
> extern ACPI_RSDUMP_INFO AcpiRsDumpUartSerialBus[];
> extern ACPI_RSDUMP_INFO AcpiRsDumpGeneralFlags[];
> +extern ACPI_RSDUMP_INFO AcpiRsDumpPinConfig[];
> +extern ACPI_RSDUMP_INFO AcpiRsDumpPinGroup[];
> +extern ACPI_RSDUMP_INFO AcpiRsDumpPinGroupFunction[];
> +extern ACPI_RSDUMP_INFO AcpiRsDumpPinGroupConfig[];
> #endif
>
> #endif /* __ACRESRC_H__ */
> diff --git a/src/acpica/source/include/acrestyp.h b/src/acpica/source/include/acrestyp.h
> index 7df5a63f..0057722c 100644
> --- a/src/acpica/source/include/acrestyp.h
> +++ b/src/acpica/source/include/acrestyp.h
> @@ -435,6 +435,13 @@ typedef union acpi_resource_attribute
>
> } ACPI_RESOURCE_ATTRIBUTE;
>
> +typedef struct acpi_resource_label
> +{
> + UINT16 StringLength;
> + char *StringPtr;
> +
> +} ACPI_RESOURCE_LABEL;
> +
> typedef struct acpi_resource_source
> {
> UINT8 Index;
> @@ -725,6 +732,90 @@ typedef struct acpi_resource_uart_serialbus
> #define ACPI_UART_CLEAR_TO_SEND (1<<6)
> #define ACPI_UART_REQUEST_TO_SEND (1<<7)
>
> +typedef struct acpi_resource_pin_function
> +{
> + UINT8 RevisionId;
> + UINT8 PinConfig;
> + UINT8 Sharable; /* For values, see Interrupt Attributes above */
> + UINT16 FunctionNumber;
> + UINT16 PinTableLength;
> + UINT16 VendorLength;
> + ACPI_RESOURCE_SOURCE ResourceSource;
> + UINT16 *PinTable;
> + UINT8 *VendorData;
> +
> +} ACPI_RESOURCE_PIN_FUNCTION;
> +
> +typedef struct acpi_resource_pin_config
> +{
> + UINT8 RevisionId;
> + UINT8 ProducerConsumer; /* For values, see Producer/Consumer above */
> + UINT8 Sharable; /* For values, see Interrupt Attributes above */
> + UINT8 PinConfigType;
> + UINT32 PinConfigValue;
> + UINT16 PinTableLength;
> + UINT16 VendorLength;
> + ACPI_RESOURCE_SOURCE ResourceSource;
> + UINT16 *PinTable;
> + UINT8 *VendorData;
> +
> +} ACPI_RESOURCE_PIN_CONFIG;
> +
> +/* Values for PinConfigType field above */
> +
> +#define ACPI_PIN_CONFIG_DEFAULT 0
> +#define ACPI_PIN_CONFIG_BIAS_PULL_UP 1
> +#define ACPI_PIN_CONFIG_BIAS_PULL_DOWN 2
> +#define ACPI_PIN_CONFIG_BIAS_DEFAULT 3
> +#define ACPI_PIN_CONFIG_BIAS_DISABLE 4
> +#define ACPI_PIN_CONFIG_BIAS_HIGH_IMPEDANCE 5
> +#define ACPI_PIN_CONFIG_BIAS_BUS_HOLD 6
> +#define ACPI_PIN_CONFIG_DRIVE_OPEN_DRAIN 7
> +#define ACPI_PIN_CONFIG_DRIVE_OPEN_SOURCE 8
> +#define ACPI_PIN_CONFIG_DRIVE_PUSH_PULL 9
> +#define ACPI_PIN_CONFIG_DRIVE_STRENGTH 10
> +#define ACPI_PIN_CONFIG_SLEW_RATE 11
> +#define ACPI_PIN_CONFIG_INPUT_DEBOUNCE 12
> +#define ACPI_PIN_CONFIG_INPUT_SCHMITT_TRIGGER 13
> +
> +typedef struct acpi_resource_pin_group
> +{
> + UINT8 RevisionId;
> + UINT8 ProducerConsumer; /* For values, see Producer/Consumer above */
> + UINT16 PinTableLength;
> + UINT16 VendorLength;
> + UINT16 *PinTable;
> + ACPI_RESOURCE_LABEL ResourceLabel;
> + UINT8 *VendorData;
> +
> +} ACPI_RESOURCE_PIN_GROUP;
> +
> +typedef struct acpi_resource_pin_group_function
> +{
> + UINT8 RevisionId;
> + UINT8 ProducerConsumer; /* For values, see Producer/Consumer above */
> + UINT8 Sharable; /* For values, see Interrupt Attributes above */
> + UINT16 FunctionNumber;
> + UINT16 VendorLength;
> + ACPI_RESOURCE_SOURCE ResourceSource;
> + ACPI_RESOURCE_LABEL ResourceSourceLabel;
> + UINT8 *VendorData;
> +
> +} ACPI_RESOURCE_PIN_GROUP_FUNCTION;
> +
> +typedef struct acpi_resource_pin_group_config
> +{
> + UINT8 RevisionId;
> + UINT8 ProducerConsumer; /* For values, see Producer/Consumer above */
> + UINT8 Sharable; /* For values, see Interrupt Attributes above */
> + UINT8 PinConfigType; /* For values, see PinConfigType above */
> + UINT32 PinConfigValue;
> + UINT16 VendorLength;
> + ACPI_RESOURCE_SOURCE ResourceSource;
> + ACPI_RESOURCE_LABEL ResourceSourceLabel;
> + UINT8 *VendorData;
> +
> +} ACPI_RESOURCE_PIN_GROUP_CONFIG;
>
> /* ACPI_RESOURCE_TYPEs */
>
> @@ -748,7 +839,12 @@ typedef struct acpi_resource_uart_serialbus
> #define ACPI_RESOURCE_TYPE_GPIO 17 /* ACPI 5.0 */
> #define ACPI_RESOURCE_TYPE_FIXED_DMA 18 /* ACPI 5.0 */
> #define ACPI_RESOURCE_TYPE_SERIAL_BUS 19 /* ACPI 5.0 */
> -#define ACPI_RESOURCE_TYPE_MAX 19
> +#define ACPI_RESOURCE_TYPE_PIN_FUNCTION 20 /* ACPI 6.2 */
> +#define ACPI_RESOURCE_TYPE_PIN_CONFIG 21 /* ACPI 6.2 */
> +#define ACPI_RESOURCE_TYPE_PIN_GROUP 22 /* ACPI 6.2 */
> +#define ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION 23 /* ACPI 6.2 */
> +#define ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG 24 /* ACPI 6.2 */
> +#define ACPI_RESOURCE_TYPE_MAX 24
>
> /* Master union for resource descriptors */
>
> @@ -777,6 +873,11 @@ typedef union acpi_resource_data
> ACPI_RESOURCE_SPI_SERIALBUS SpiSerialBus;
> ACPI_RESOURCE_UART_SERIALBUS UartSerialBus;
> ACPI_RESOURCE_COMMON_SERIALBUS CommonSerialBus;
> + ACPI_RESOURCE_PIN_FUNCTION PinFunction;
> + ACPI_RESOURCE_PIN_CONFIG PinConfig;
> + ACPI_RESOURCE_PIN_GROUP PinGroup;
> + ACPI_RESOURCE_PIN_GROUP_FUNCTION PinGroupFunction;
> + ACPI_RESOURCE_PIN_GROUP_CONFIG PinGroupConfig;
>
> /* Common fields */
>
> diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
> index b7119fa6..da6b561a 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -175,9 +175,11 @@
> #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */
> #define ACPI_SIG_EINJ "EINJ" /* Error Injection table */
> #define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */
> +#define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */
> #define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */
> #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */
> #define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */
> +#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */
> #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */
> #define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */
> #define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */
> @@ -600,7 +602,8 @@ enum AcpiHestTypes
> ACPI_HEST_TYPE_AER_BRIDGE = 8,
> ACPI_HEST_TYPE_GENERIC_ERROR = 9,
> ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10,
> - ACPI_HEST_TYPE_RESERVED = 11 /* 11 and greater are reserved */
> + ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11,
> + ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */
> };
>
>
> @@ -652,6 +655,7 @@ typedef struct acpi_hest_aer_common
>
> #define ACPI_HEST_FIRMWARE_FIRST (1)
> #define ACPI_HEST_GLOBAL (1<<1)
> +#define ACPI_HEST_GHES_ASSIST (1<<2)
>
> /*
> * Macros to access the bus/segment numbers in Bus field above:
> @@ -682,18 +686,19 @@ typedef struct acpi_hest_notify
>
> enum AcpiHestNotifyTypes
> {
> - ACPI_HEST_NOTIFY_POLLED = 0,
> - ACPI_HEST_NOTIFY_EXTERNAL = 1,
> - ACPI_HEST_NOTIFY_LOCAL = 2,
> - ACPI_HEST_NOTIFY_SCI = 3,
> - ACPI_HEST_NOTIFY_NMI = 4,
> - ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */
> - ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */
> - ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */
> - ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */
> - ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */
> - ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */
> - ACPI_HEST_NOTIFY_RESERVED = 11 /* 11 and greater are reserved */
> + ACPI_HEST_NOTIFY_POLLED = 0,
> + ACPI_HEST_NOTIFY_EXTERNAL = 1,
> + ACPI_HEST_NOTIFY_LOCAL = 2,
> + ACPI_HEST_NOTIFY_SCI = 3,
> + ACPI_HEST_NOTIFY_NMI = 4,
> + ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */
> + ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */
> + ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */
> + ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */
> + ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */
> + ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */
> + ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */
> + ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */
> };
>
> /* Values for ConfigWriteEnable bitfield above */
> @@ -716,7 +721,7 @@ typedef struct acpi_hest_ia_machine_check
> {
> ACPI_HEST_HEADER Header;
> UINT16 Reserved1;
> - UINT8 Flags;
> + UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
> UINT8 Enabled;
> UINT32 RecordsToPreallocate;
> UINT32 MaxSectionsPerRecord;
> @@ -734,7 +739,7 @@ typedef struct acpi_hest_ia_corrected
> {
> ACPI_HEST_HEADER Header;
> UINT16 Reserved1;
> - UINT8 Flags;
> + UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
> UINT8 Enabled;
> UINT32 RecordsToPreallocate;
> UINT32 MaxSectionsPerRecord;
> @@ -899,6 +904,155 @@ typedef struct acpi_hest_generic_data_v300
> #define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2)
>
>
> +/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */
> +
> +typedef struct acpi_hest_ia_deferred_check
> +{
> + ACPI_HEST_HEADER Header;
> + UINT16 Reserved1;
> + UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
> + UINT8 Enabled;
> + UINT32 RecordsToPreallocate;
> + UINT32 MaxSectionsPerRecord;
> + ACPI_HEST_NOTIFY Notify;
> + UINT8 NumHardwareBanks;
> + UINT8 Reserved2[3];
> +
> +} ACPI_HEST_IA_DEFERRED_CHECK;
> +
> +
> +/*******************************************************************************
> + *
> + * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2)
> + * Version 1
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_hmat
> +{
> + ACPI_TABLE_HEADER Header; /* Common ACPI table header */
> + UINT32 Reserved;
> +
> +} ACPI_TABLE_HMAT;
> +
> +
> +/* Values for HMAT structure types */
> +
> +enum AcpiHmatType
> +{
> + ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */
> + ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */
> + ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */
> + ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */
> +};
> +
> +typedef struct acpi_hmat_structure
> +{
> + UINT16 Type;
> + UINT16 Reserved;
> + UINT32 Length;
> +
> +} ACPI_HMAT_STRUCTURE;
> +
> +
> +/*
> + * HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE
> + */
> +
> +/* 0: Memory subystem address range */
> +
> +typedef struct acpi_hmat_address_range
> +{
> + ACPI_HMAT_STRUCTURE Header;
> + UINT16 Flags;
> + UINT16 Reserved1;
> + UINT32 ProcessorPD; /* Processor proximity domain */
> + UINT32 MemoryPD; /* Memory proximity domain */
> + UINT32 Reserved2;
> + UINT64 PhysicalAddressBase; /* Physical address range base */
> + UINT64 PhysicalAddressLength; /* Physical address range length */
> +
> +} ACPI_HMAT_ADDRESS_RANGE;
> +
> +/* Masks for Flags field above */
> +
> +#define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */
> +#define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */
> +#define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */
> +
> +
> +/* 1: System locality latency and bandwidth information */
> +
> +typedef struct acpi_hmat_locality
> +{
> + ACPI_HMAT_STRUCTURE Header;
> + UINT8 Flags;
> + UINT8 DataType;
> + UINT16 Reserved1;
> + UINT32 NumberOfInitiatorPDs;
> + UINT32 NumberOfTargetPDs;
> + UINT32 Reserved2;
> + UINT64 EntryBaseUnit;
> +
> +} ACPI_HMAT_LOCALITY;
> +
> +/* Masks for Flags field above */
> +
> +#define ACPI_HMAT_MEMORY_HIERARCHY (0x0F)
> +
> +/* Values for Memory Hierarchy flag */
> +
> +#define ACPI_HMAT_MEMORY 0
> +#define ACPI_HMAT_LAST_LEVEL_CACHE 1
> +#define ACPI_HMAT_1ST_LEVEL_CACHE 2
> +#define ACPI_HMAT_2ND_LEVEL_CACHE 3
> +#define ACPI_HMAT_3RD_LEVEL_CACHE 4
> +
> +/* Values for DataType field above */
> +
> +#define ACPI_HMAT_ACCESS_LATENCY 0
> +#define ACPI_HMAT_READ_LATENCY 1
> +#define ACPI_HMAT_WRITE_LATENCY 2
> +#define ACPI_HMAT_ACCESS_BANDWIDTH 3
> +#define ACPI_HMAT_READ_BANDWIDTH 4
> +#define ACPI_HMAT_WRITE_BANDWIDTH 5
> +
> +
> +/* 2: Memory side cache information */
> +
> +typedef struct acpi_hmat_cache
> +{
> + ACPI_HMAT_STRUCTURE Header;
> + UINT32 MemoryPD;
> + UINT32 Reserved1;
> + UINT64 CacheSize;
> + UINT32 CacheAttributes;
> + UINT16 Reserved2;
> + UINT16 NumberOfSMBIOSHandles;
> +
> +} ACPI_HMAT_CACHE;
> +
> +/* Masks for CacheAttributes field above */
> +
> +#define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F)
> +#define ACPI_HMAT_CACHE_LEVEL (0x000000F0)
> +#define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00)
> +#define ACPI_HMAT_WRITE_POLICY (0x0000F000)
> +#define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000)
> +
> +/* Values for cache associativity flag */
> +
> +#define ACPI_HMAT_CA_NONE (0)
> +#define ACPI_HMAT_CA_DIRECT_MAPPED (1)
> +#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2)
> +
> +/* Values for write policy flag */
> +
> +#define ACPI_HMAT_CP_NONE (0)
> +#define ACPI_HMAT_CP_WB (1)
> +#define ACPI_HMAT_CP_WT (2)
> +
> +
> /*******************************************************************************
> *
> * MADT - Multiple APIC Description Table
> @@ -920,8 +1074,8 @@ typedef struct acpi_table_madt
>
> /* Values for PCATCompat flag */
>
> -#define ACPI_MADT_DUAL_PIC 0
> -#define ACPI_MADT_MULTIPLE_APIC 1
> +#define ACPI_MADT_DUAL_PIC 1
> +#define ACPI_MADT_MULTIPLE_APIC 0
>
>
> /* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */
> @@ -1448,6 +1602,95 @@ typedef struct acpi_nfit_flush_address
>
> /*******************************************************************************
> *
> + * PPTT - Processor Properties Topology Table (ACPI 6.2)
> + * Version 1
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_pptt
> +{
> + ACPI_TABLE_HEADER Header; /* Common ACPI table header */
> +
> +} ACPI_TABLE_PPTT;
> +
> +/* Values for Type field above */
> +
> +enum AcpiPpttType
> +{
> + ACPI_PPTT_TYPE_PROCESSOR = 0,
> + ACPI_PPTT_TYPE_CACHE = 1,
> + ACPI_PPTT_TYPE_ID = 2,
> + ACPI_PPTT_TYPE_RESERVED = 3
> +};
> +
> +
> +/* 0: Processor Hierarchy Node Structure */
> +
> +typedef struct acpi_pptt_processor {
> + ACPI_SUBTABLE_HEADER Header;
> + UINT16 Reserved;
> + UINT32 Flags;
> + UINT32 Parent;
> + UINT32 AcpiProcessorId;
> + UINT32 NumberOfPrivResources;
> +
> +} ACPI_PPTT_PROCESSOR;
> +
> +/* Flags */
> +
> +#define ACPI_PPTT_PHYSICAL_PACKAGE (1) /* Physical package */
> +#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (2) /* ACPI Processor ID valid */
> +
> +
> +/* 1: Cache Type Structure */
> +
> +typedef struct acpi_pptt_cache {
> + ACPI_SUBTABLE_HEADER Header;
> + UINT16 Reserved;
> + UINT32 Flags;
> + UINT32 NextLevelOfCache;
> + UINT32 Size;
> + UINT32 NumberOfSets;
> + UINT8 Associativity;
> + UINT8 Attributes;
> + UINT16 LineSize;
> +
> +} ACPI_PPTT_CACHE;
> +
> +/* Flags */
> +
> +#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */
> +#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */
> +#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */
> +#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */
> +#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */
> +#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */
> +#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */
> +
> +/* Masks for Attributes */
> +
> +#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */
> +#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */
> +#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */
> +
> +
> +/* 2: ID Structure */
> +
> +typedef struct acpi_pptt_id {
> + ACPI_SUBTABLE_HEADER Header;
> + UINT16 Reserved;
> + UINT32 VendorId;
> + UINT64 Level1Id;
> + UINT64 Level2Id;
> + UINT16 MajorRev;
> + UINT16 MinorRev;
> + UINT16 SpinRev;
> +
> +} ACPI_PPTT_ID;
> +
> +
> +/*******************************************************************************
> + *
> * SBST - Smart Battery Specification Table
> * Version 1
> *
> @@ -1502,7 +1745,8 @@ enum AcpiSratType
> ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
> ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
> ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
> - ACPI_SRAT_TYPE_RESERVED = 4 /* 4 and greater are reserved */
> + ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */
> + ACPI_SRAT_TYPE_RESERVED = 5 /* 5 and greater are reserved */
> };
>
> /*
> @@ -1586,6 +1830,18 @@ typedef struct acpi_srat_gicc_affinity
> #define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */
>
>
> +/* 4: GCC ITS Affinity (ACPI 6.2) */
> +
> +typedef struct acpi_srat_gic_its_affinity
> +{
> + ACPI_SUBTABLE_HEADER Header;
> + UINT32 ProximityDomain;
> + UINT16 Reserved;
> + UINT32 ItsId;
> +
> +} ACPI_SRAT_GIC_ITS_AFFINITY;
> +
> +
> /* Reset to default packing */
>
> #pragma pack()
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index 4655b1b4..80495d8f 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -197,6 +197,7 @@
> #define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */
> #define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */
> #define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */
> +#define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Migrations Table */
> #define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */
>
> #ifdef ACPI_UNDEFINED_TABLES
> @@ -1521,7 +1522,8 @@ enum AcpiSpmiInterfaceTypes
> * Version 2
> *
> * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
> - * December 19, 2014
> + * Version 1.2, Revision 8
> + * February 27, 2017
> *
> * NOTE: There are two versions of the table with the same signature --
> * the client version and the server version. The common PlatformClass
> @@ -1592,7 +1594,8 @@ typedef struct acpi_table_tcpa_server
> * Version 4
> *
> * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
> - * December 19, 2014
> + * Version 1.2, Revision 8
> + * February 27, 2017
> *
> ******************************************************************************/
>
> @@ -1615,6 +1618,42 @@ typedef struct acpi_table_tpm2
> #define ACPI_TPM2_MEMORY_MAPPED 6
> #define ACPI_TPM2_COMMAND_BUFFER 7
> #define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8
> +#define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11 /* V1.2 Rev 8 */
> +
> +
> +/* Trailer appears after any StartMethod subtables */
> +
> +typedef struct acpi_tpm2_trailer
> +{
> + UINT32 MinimumLogLength; /* Minimum length for the event log area */
> + UINT64 LogAddress; /* Address of the event log area */
> +
> +} ACPI_TPM2_TRAILER;
> +
> +
> +/*
> + * Subtables (StartMethod-specific)
> + */
> +
> +/* 11: Start Method for ARM SMC (V1.2 Rev 8) */
> +
> +typedef struct acpi_tpm2_arm_smc
> +{
> + UINT32 GlobalInterrupt;
> + UINT8 InterruptFlags;
> + UINT8 OperationFlags;
> + UINT16 Reserved;
> + UINT32 FunctionId;
> +
> +} ACPI_TPM2_ARM_SMC;
> +
> +/* Values for InterruptFlags above */
> +
> +#define ACPI_TPM2_INTERRUPT_SUPPORT (1)
> +
> +/* Values for OperationFlags above */
> +
> +#define ACPI_TPM2_IDLE_SUPPORT (1)
>
>
> /*******************************************************************************
> @@ -1834,6 +1873,30 @@ typedef struct acpi_table_wdrt
> } ACPI_TABLE_WDRT;
>
>
> +/*******************************************************************************
> + *
> + * WSMT - Windows SMM Security Migrations Table
> + * Version 1
> + *
> + * Conforms to "Windows SMM Security Migrations Table",
> + * Version 1.0, April 18, 2016
> + *
> + ******************************************************************************/
> +
> +typedef struct acpi_table_wsmt
> +{
> + ACPI_TABLE_HEADER Header; /* Common ACPI table header */
> + UINT32 ProtectionFlags;
> +
> +} ACPI_TABLE_WSMT;
> +
> +/* Flags for ProtectionFlags field above */
> +
> +#define ACPI_WSMT_FIXED_COMM_BUFFERS (1)
> +#define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2)
> +#define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4)
> +
> +
> /* Reset to default packing */
>
> #pragma pack()
> diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
> index cb9910d7..80b6ae1c 100644
> --- a/src/acpica/source/include/actbl3.h
> +++ b/src/acpica/source/include/actbl3.h
> @@ -229,6 +229,11 @@ typedef struct acpi_table_bgrt
>
> } ACPI_TABLE_BGRT;
>
> +/* Flags for Status field above */
> +
> +#define ACPI_BGRT_DISPLAYED (1)
> +#define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1)
> +
>
> /*******************************************************************************
> *
> @@ -651,7 +656,7 @@ typedef struct acpi_mpst_shared
> /*******************************************************************************
> *
> * PCCT - Platform Communications Channel Table (ACPI 5.0)
> - * Version 1
> + * Version 2 (ACPI 6.2)
> *
> ******************************************************************************/
>
> @@ -674,7 +679,9 @@ enum AcpiPcctType
> ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
> ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
> ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */
> - ACPI_PCCT_TYPE_RESERVED = 3 /* 3 and greater are reserved */
> + ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */
> + ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */
> + ACPI_PCCT_TYPE_RESERVED = 5 /* 5 and greater are reserved */
> };
>
> /*
> @@ -704,7 +711,7 @@ typedef struct acpi_pcct_subspace
> typedef struct acpi_pcct_hw_reduced
> {
> ACPI_SUBTABLE_HEADER Header;
> - UINT32 DoorbellInterrupt;
> + UINT32 PlatformInterrupt;
> UINT8 Flags;
> UINT8 Reserved;
> UINT64 BaseAddress;
> @@ -724,7 +731,7 @@ typedef struct acpi_pcct_hw_reduced
> typedef struct acpi_pcct_hw_reduced_type2
> {
> ACPI_SUBTABLE_HEADER Header;
> - UINT32 DoorbellInterrupt;
> + UINT32 PlatformInterrupt;
> UINT8 Flags;
> UINT8 Reserved;
> UINT64 BaseAddress;
> @@ -735,13 +742,75 @@ typedef struct acpi_pcct_hw_reduced_type2
> UINT32 Latency;
> UINT32 MaxAccessRate;
> UINT16 MinTurnaroundTime;
> - ACPI_GENERIC_ADDRESS DoorbellAckRegister;
> + ACPI_GENERIC_ADDRESS PlatformAckRegister;
> UINT64 AckPreserveMask;
> UINT64 AckWriteMask;
>
> } ACPI_PCCT_HW_REDUCED_TYPE2;
>
>
> +/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */
> +
> +typedef struct acpi_pcct_ext_pcc_master
> +{
> + ACPI_SUBTABLE_HEADER Header;
> + UINT32 PlatformInterrupt;
> + UINT8 Flags;
> + UINT8 Reserved1;
> + UINT64 BaseAddress;
> + UINT32 Length;
> + ACPI_GENERIC_ADDRESS DoorbellRegister;
> + UINT64 PreserveMask;
> + UINT64 WriteMask;
> + UINT32 Latency;
> + UINT32 MaxAccessRate;
> + UINT32 MinTurnaroundTime;
> + ACPI_GENERIC_ADDRESS PlatformAckRegister;
> + UINT64 AckPreserveMask;
> + UINT64 AckSetMask;
> + UINT64 Reserved2;
> + ACPI_GENERIC_ADDRESS CmdCompleteRegister;
> + UINT64 CmdCompleteMask;
> + ACPI_GENERIC_ADDRESS CmdUpdateRegister;
> + UINT64 CmdUpdatePreserveMask;
> + UINT64 CmdUpdateSetMask;
> + ACPI_GENERIC_ADDRESS ErrorStatusRegister;
> + UINT64 ErrorStatusMask;
> +
> +} ACPI_PCCT_EXT_PCC_MASTER;
> +
> +
> +/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */
> +
> +typedef struct acpi_pcct_ext_pcc_slave
> +{
> + ACPI_SUBTABLE_HEADER Header;
> + UINT32 PlatformInterrupt;
> + UINT8 Flags;
> + UINT8 Reserved1;
> + UINT64 BaseAddress;
> + UINT32 Length;
> + ACPI_GENERIC_ADDRESS DoorbellRegister;
> + UINT64 PreserveMask;
> + UINT64 WriteMask;
> + UINT32 Latency;
> + UINT32 MaxAccessRate;
> + UINT32 MinTurnaroundTime;
> + ACPI_GENERIC_ADDRESS PlatformAckRegister;
> + UINT64 AckPreserveMask;
> + UINT64 AckSetMask;
> + UINT64 Reserved2;
> + ACPI_GENERIC_ADDRESS CmdCompleteRegister;
> + UINT64 CmdCompleteMask;
> + ACPI_GENERIC_ADDRESS CmdUpdateRegister;
> + UINT64 CmdUpdatePreserveMask;
> + UINT64 CmdUpdateSetMask;
> + ACPI_GENERIC_ADDRESS ErrorStatusRegister;
> + UINT64 ErrorStatusMask;
> +
> +} ACPI_PCCT_EXT_PCC_SLAVE;
> +
> +
> /* Values for doorbell flags above */
>
> #define ACPI_PCCT_INTERRUPT_POLARITY (1)
> @@ -763,6 +832,18 @@ typedef struct acpi_pcct_shared_memory
> } ACPI_PCCT_SHARED_MEMORY;
>
>
> +/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */
> +
> +typedef struct acpi_pcct_ext_pcc_shared_memory
> +{
> + UINT32 Signature;
> + UINT32 Flags;
> + UINT32 Length;
> + UINT32 Command;
> +
> +} ACPI_PCCT_EXT_PCC_SHARED_MEMORY;
> +
> +
> /*******************************************************************************
> *
> * PMTT - Platform Memory Topology Table (ACPI 5.0)
> diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
> index 787ceeea..843adec7 100644
> --- a/src/acpica/source/include/actypes.h
> +++ b/src/acpica/source/include/actypes.h
> @@ -155,9 +155,9 @@
> /* acpisrc:StructDefs -- for acpisrc conversion */
>
> /*
> - * ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent header
> - * and must be either 32 or 64. 16-bit ACPICA is no longer supported, as of
> - * 12/2006.
> + * ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent
> + * header and must be either 32 or 64. 16-bit ACPICA is no longer
> + * supported, as of 12/2006.
> */
> #ifndef ACPI_MACHINE_WIDTH
> #error ACPI_MACHINE_WIDTH not defined
> @@ -196,9 +196,9 @@
> * INT64 64-bit (8 byte) signed value
> *
> * COMPILER_DEPENDENT_UINT64/INT64 - These types are defined in the
> - * compiler-dependent header(s) and were introduced because there is no common
> - * 64-bit integer type across the various compilation models, as shown in
> - * the table below.
> + * compiler-dependent header(s) and were introduced because there is no
> + * common 64-bit integer type across the various compilation models, as
> + * shown in the table below.
> *
> * Datatype LP64 ILP64 LLP64 ILP32 LP32 16bit
> * char 8 8 8 8 8 8
> @@ -215,10 +215,10 @@
> * 2) These types represent the native word size of the target mode of the
> * processor, and may be 16-bit, 32-bit, or 64-bit as required. They are
> * usually used for memory allocation, efficient loop counters, and array
> - * indexes. The types are similar to the size_t type in the C library and are
> - * required because there is no C type that consistently represents the native
> - * data width. ACPI_SIZE is needed because there is no guarantee that a
> - * kernel-level C library is present.
> + * indexes. The types are similar to the size_t type in the C library and
> + * are required because there is no C type that consistently represents the
> + * native data width. ACPI_SIZE is needed because there is no guarantee
> + * that a kernel-level C library is present.
> *
> * ACPI_SIZE 16/32/64-bit unsigned value
> * ACPI_NATIVE_INT 16/32/64-bit signed value
> @@ -279,9 +279,10 @@ typedef UINT64 ACPI_PHYSICAL_ADDRESS;
>
> /*
> * In the case of the Itanium Processor Family (IPF), the hardware does not
> - * support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED flag
> - * to indicate that special precautions must be taken to avoid alignment faults.
> - * (IA64 or ia64 is currently used by existing compilers to indicate IPF.)
> + * support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED
> + * flag to indicate that special precautions must be taken to avoid alignment
> + * faults. (IA64 or ia64 is currently used by existing compilers to indicate
> + * IPF.)
> *
> * Note: EM64T and other X86-64 processors support misaligned transfers,
> * so there is no need to define this flag.
> @@ -422,8 +423,8 @@ typedef UINT64 ACPI_PHYSICAL_ADDRESS;
> #endif
>
> /*
> - * Some compilers complain about unused variables. Sometimes we don't want to
> - * use all the variables (for example, _AcpiModuleName). This allows us
> + * Some compilers complain about unused variables. Sometimes we don't want
> + * to use all the variables (for example, _AcpiModuleName). This allows us
> * to tell the compiler in a per-variable manner that a variable
> * is unused
> */
> @@ -432,8 +433,9 @@ typedef UINT64 ACPI_PHYSICAL_ADDRESS;
> #endif
>
> /*
> - * All ACPICA external functions that are available to the rest of the kernel
> - * are tagged with thes macros which can be defined as appropriate for the host.
> + * All ACPICA external functions that are available to the rest of the
> + * kernel are tagged with these macros which can be defined as appropriate
> + * for the host.
> *
> * Notes:
> * ACPI_EXPORT_SYMBOL_INIT is used for initialization and termination
> @@ -498,7 +500,8 @@ typedef UINT64 ACPI_PHYSICAL_ADDRESS;
>
> /******************************************************************************
> *
> - * ACPI Specification constants (Do not change unless the specification changes)
> + * ACPI Specification constants (Do not change unless the specification
> + * changes)
> *
> *****************************************************************************/
>
> @@ -604,10 +607,10 @@ typedef UINT8 ACPI_OWNER_ID;
> #define ACPI_DO_NOT_WAIT 0
>
> /*
> - * Obsolete: Acpi integer width. In ACPI version 1 (1996), integers are 32 bits.
> - * In ACPI version 2 (2000) and later, integers are 64 bits. Note that this
> - * pertains to the ACPI integer type only, not to other integers used in the
> - * implementation of the ACPICA subsystem.
> + * Obsolete: Acpi integer width. In ACPI version 1 (1996), integers are
> + * 32 bits. In ACPI version 2 (2000) and later, integers are max 64 bits.
> + * Note that this pertains to the ACPI integer type only, not to other
> + * integers used in the implementation of the ACPICA subsystem.
> *
> * 01/2010: This type is obsolete and has been removed from the entire ACPICA
> * code base. It remains here for compatibility with device drivers that use
> @@ -749,8 +752,9 @@ typedef UINT64 ACPI_INTEGER;
> #define ACPI_NOTIFY_LOCALITY_UPDATE (UINT8) 0x0B
> #define ACPI_NOTIFY_SHUTDOWN_REQUEST (UINT8) 0x0C
> #define ACPI_NOTIFY_AFFINITY_UPDATE (UINT8) 0x0D
> +#define ACPI_NOTIFY_MEMORY_UPDATE (UINT8) 0x0E
>
> -#define ACPI_GENERIC_NOTIFY_MAX 0x0D
> +#define ACPI_GENERIC_NOTIFY_MAX 0x0E
> #define ACPI_SPECIFIC_NOTIFY_MAX 0x84
>
> /*
> @@ -787,10 +791,11 @@ typedef UINT32 ACPI_OBJECT_TYPE;
>
> /*
> * These are object types that do not map directly to the ACPI
> - * ObjectType() operator. They are used for various internal purposes only.
> - * If new predefined ACPI_TYPEs are added (via the ACPI specification), these
> - * internal types must move upwards. (There is code that depends on these
> - * values being contiguous with the external types above.)
> + * ObjectType() operator. They are used for various internal purposes
> + * only. If new predefined ACPI_TYPEs are added (via the ACPI
> + * specification), these internal types must move upwards. (There
> + * is code that depends on these values being contiguous with the
> + * external types above.)
> */
> #define ACPI_TYPE_LOCAL_REGION_FIELD 0x11
> #define ACPI_TYPE_LOCAL_BANK_FIELD 0x12
> @@ -891,7 +896,7 @@ typedef UINT32 ACPI_EVENT_STATUS;
> * | | | | +-- Type of dispatch:to method, handler, notify, or none
> * | | | +----- Interrupt type: edge or level triggered
> * | | +------- Is a Wake GPE
> - * | +--------- Is GPE masked by the software GPE masking machanism
> + * | +--------- Is GPE masked by the software GPE masking mechanism
> * +------------ <Reserved>
> */
> #define ACPI_GPE_DISPATCH_NONE (UINT8) 0x00
> @@ -1037,8 +1042,8 @@ typedef struct acpi_sleep_functions
> */
>
> /*
> - * Note: Type == ACPI_TYPE_ANY (0) is used to indicate a NULL package element
> - * or an unresolved named reference.
> + * Note: Type == ACPI_TYPE_ANY (0) is used to indicate a NULL package
> + * element or an unresolved named reference.
> */
> typedef union acpi_object
> {
> @@ -1361,7 +1366,7 @@ typedef struct acpi_pnp_device_id_list
>
> /*
> * Structure returned from AcpiGetObjectInfo.
> - * Optimized for both 32- and 64-bit builds
> + * Optimized for both 32-bit and 64-bit builds.
> */
> typedef struct acpi_device_info
> {
> diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
> index 30ce8257..46588a40 100644
> --- a/src/acpica/source/include/acutils.h
> +++ b/src/acpica/source/include/acutils.h
> @@ -194,6 +194,7 @@ extern const char *AcpiGbl_BpbDecode[];
> extern const char *AcpiGbl_SbDecode[];
> extern const char *AcpiGbl_FcDecode[];
> extern const char *AcpiGbl_PtDecode[];
> +extern const char *AcpiGbl_PtypDecode[];
> #endif
>
> /*
> diff --git a/src/acpica/source/include/acuuid.h b/src/acpica/source/include/acuuid.h
> index 407fcb67..ff0f0126 100644
> --- a/src/acpica/source/include/acuuid.h
> +++ b/src/acpica/source/include/acuuid.h
> @@ -186,6 +186,11 @@
> #define UUID_PERSISTENT_VIRTUAL_DISK "5cea02c9-4d07-69d3-269f-4496fbe096f9"
> #define UUID_PERSISTENT_VIRTUAL_CD "08018188-42cd-bb48-100f-5387d53ded3d"
>
> +/* Processor Properties (ACPI 6.2) */
> +
> +#define UUID_CACHE_PROPERTIES "6DC63E77-257E-4E78-A973-A21F2796898D"
> +#define UUID_PHYSICAL_PROPERTY "DDE4D59A-AA42-4349-B407-EA40F57D9FB7"
> +
> /* Miscellaneous */
>
> #define UUID_PLATFORM_CAPABILITIES "0811b06e-4a27-44f9-8d60-3cbbc22e7b48"
> diff --git a/src/acpica/source/include/amlcode.h b/src/acpica/source/include/amlcode.h
> index 4576c7d9..9236eedb 100644
> --- a/src/acpica/source/include/amlcode.h
> +++ b/src/acpica/source/include/amlcode.h
> @@ -427,6 +427,11 @@
> * #A is the number of required arguments
> * #T is the number of target operands
> * #R indicates whether there is a return value
> + *
> + * These types are used for the top-level dispatch of the AML
> + * opcode. They group similar operators that can share common
> + * front-end code before dispatch to the final code that implements
> + * the operator.
> */
>
> /*
> @@ -468,42 +473,42 @@
> * The opcode Type is used in a dispatch table, do not change
> * or add anything new without updating the table.
> */
> -#define AML_TYPE_EXEC_0A_0T_1R 0x00
> -#define AML_TYPE_EXEC_1A_0T_0R 0x01 /* Monadic1 */
> -#define AML_TYPE_EXEC_1A_0T_1R 0x02 /* Monadic2 */
> -#define AML_TYPE_EXEC_1A_1T_0R 0x03
> -#define AML_TYPE_EXEC_1A_1T_1R 0x04 /* Monadic2R */
> -#define AML_TYPE_EXEC_2A_0T_0R 0x05 /* Dyadic1 */
> -#define AML_TYPE_EXEC_2A_0T_1R 0x06 /* Dyadic2 */
> -#define AML_TYPE_EXEC_2A_1T_1R 0x07 /* Dyadic2R */
> -#define AML_TYPE_EXEC_2A_2T_1R 0x08
> -#define AML_TYPE_EXEC_3A_0T_0R 0x09
> -#define AML_TYPE_EXEC_3A_1T_1R 0x0A
> -#define AML_TYPE_EXEC_6A_0T_1R 0x0B
> +#define AML_TYPE_EXEC_0A_0T_1R 0x00 /* 0 Args, 0 Target, 1 RetVal */
> +#define AML_TYPE_EXEC_1A_0T_0R 0x01 /* 1 Args, 0 Target, 0 RetVal */
> +#define AML_TYPE_EXEC_1A_0T_1R 0x02 /* 1 Args, 0 Target, 1 RetVal */
> +#define AML_TYPE_EXEC_1A_1T_0R 0x03 /* 1 Args, 1 Target, 0 RetVal */
> +#define AML_TYPE_EXEC_1A_1T_1R 0x04 /* 1 Args, 1 Target, 1 RetVal */
> +#define AML_TYPE_EXEC_2A_0T_0R 0x05 /* 2 Args, 0 Target, 0 RetVal */
> +#define AML_TYPE_EXEC_2A_0T_1R 0x06 /* 2 Args, 0 Target, 1 RetVal */
> +#define AML_TYPE_EXEC_2A_1T_1R 0x07 /* 2 Args, 1 Target, 1 RetVal */
> +#define AML_TYPE_EXEC_2A_2T_1R 0x08 /* 2 Args, 2 Target, 1 RetVal */
> +#define AML_TYPE_EXEC_3A_0T_0R 0x09 /* 3 Args, 0 Target, 0 RetVal */
> +#define AML_TYPE_EXEC_3A_1T_1R 0x0A /* 3 Args, 1 Target, 1 RetVal */
> +#define AML_TYPE_EXEC_6A_0T_1R 0x0B /* 6 Args, 0 Target, 1 RetVal */
> /* End of types used in dispatch table */
>
> -#define AML_TYPE_LITERAL 0x0B
> -#define AML_TYPE_CONSTANT 0x0C
> -#define AML_TYPE_METHOD_ARGUMENT 0x0D
> -#define AML_TYPE_LOCAL_VARIABLE 0x0E
> -#define AML_TYPE_DATA_TERM 0x0F
> +#define AML_TYPE_LITERAL 0x0C
> +#define AML_TYPE_CONSTANT 0x0D
> +#define AML_TYPE_METHOD_ARGUMENT 0x0E
> +#define AML_TYPE_LOCAL_VARIABLE 0x0F
> +#define AML_TYPE_DATA_TERM 0x10
>
> /* Generic for an op that returns a value */
>
> -#define AML_TYPE_METHOD_CALL 0x10
> +#define AML_TYPE_METHOD_CALL 0x11
>
> /* Miscellaneous types */
>
> -#define AML_TYPE_CREATE_FIELD 0x11
> -#define AML_TYPE_CREATE_OBJECT 0x12
> -#define AML_TYPE_CONTROL 0x13
> -#define AML_TYPE_NAMED_NO_OBJ 0x14
> -#define AML_TYPE_NAMED_FIELD 0x15
> -#define AML_TYPE_NAMED_SIMPLE 0x16
> -#define AML_TYPE_NAMED_COMPLEX 0x17
> -#define AML_TYPE_RETURN 0x18
> -#define AML_TYPE_UNDEFINED 0x19
> -#define AML_TYPE_BOGUS 0x1A
> +#define AML_TYPE_CREATE_FIELD 0x12
> +#define AML_TYPE_CREATE_OBJECT 0x13
> +#define AML_TYPE_CONTROL 0x14
> +#define AML_TYPE_NAMED_NO_OBJ 0x15
> +#define AML_TYPE_NAMED_FIELD 0x16
> +#define AML_TYPE_NAMED_SIMPLE 0x17
> +#define AML_TYPE_NAMED_COMPLEX 0x18
> +#define AML_TYPE_RETURN 0x19
> +#define AML_TYPE_UNDEFINED 0x1A
> +#define AML_TYPE_BOGUS 0x1B
>
> /* AML Package Length encodings */
>
> diff --git a/src/acpica/source/include/amlresrc.h b/src/acpica/source/include/amlresrc.h
> index aee0a052..5f0bcc4b 100644
> --- a/src/acpica/source/include/amlresrc.h
> +++ b/src/acpica/source/include/amlresrc.h
> @@ -174,6 +174,7 @@
> #define ACPI_RESTAG_DRIVESTRENGTH "_DRS"
> #define ACPI_RESTAG_ENDIANNESS "_END"
> #define ACPI_RESTAG_FLOWCONTROL "_FLC"
> +#define ACPI_RESTAG_FUNCTION "_FUN"
> #define ACPI_RESTAG_GRANULARITY "_GRA"
> #define ACPI_RESTAG_INTERRUPT "_INT"
> #define ACPI_RESTAG_INTERRUPTLEVEL "_LL_" /* ActiveLo(1), ActiveHi(0) */
> @@ -193,6 +194,8 @@
> #define ACPI_RESTAG_PHASE "_PHA"
> #define ACPI_RESTAG_PIN "_PIN"
> #define ACPI_RESTAG_PINCONFIG "_PPI"
> +#define ACPI_RESTAG_PINCONFIG_TYPE "_TYP"
> +#define ACPI_RESTAG_PINCONFIG_VALUE "_VAL"
> #define ACPI_RESTAG_POLARITY "_POL"
> #define ACPI_RESTAG_REGISTERBITOFFSET "_RBO"
> #define ACPI_RESTAG_REGISTERBITWIDTH "_RBW"
> @@ -636,6 +639,116 @@ typedef struct aml_resource_uart_serialbus
> #define AML_RESOURCE_UART_TYPE_REVISION 1 /* ACPI 5.0 */
> #define AML_RESOURCE_UART_MIN_DATA_LEN 10
>
> +typedef struct aml_resource_pin_function
> +{
> + AML_RESOURCE_LARGE_HEADER_COMMON
> + UINT8 RevisionId;
> + UINT16 Flags;
> + UINT8 PinConfig;
> + UINT16 FunctionNumber;
> + UINT16 PinTableOffset;
> + UINT8 ResSourceIndex;
> + UINT16 ResSourceOffset;
> + UINT16 VendorOffset;
> + UINT16 VendorLength;
> + /*
> + * Optional fields follow immediately:
> + * 1) PIN list (Words)
> + * 2) Resource Source String
> + * 3) Vendor Data bytes
> + */
> +
> +} AML_RESOURCE_PIN_FUNCTION;
> +
> +#define AML_RESOURCE_PIN_FUNCTION_REVISION 1 /* ACPI 6.2 */
> +
> +typedef struct aml_resource_pin_config
> +{
> + AML_RESOURCE_LARGE_HEADER_COMMON
> + UINT8 RevisionId;
> + UINT16 Flags;
> + UINT8 PinConfigType;
> + UINT32 PinConfigValue;
> + UINT16 PinTableOffset;
> + UINT8 ResSourceIndex;
> + UINT16 ResSourceOffset;
> + UINT16 VendorOffset;
> + UINT16 VendorLength;
> + /*
> + * Optional fields follow immediately:
> + * 1) PIN list (Words)
> + * 2) Resource Source String
> + * 3) Vendor Data bytes
> + */
> +
> +} AML_RESOURCE_PIN_CONFIG;
> +
> +#define AML_RESOURCE_PIN_CONFIG_REVISION 1 /* ACPI 6.2 */
> +
> +typedef struct aml_resource_pin_group
> +{
> + AML_RESOURCE_LARGE_HEADER_COMMON
> + UINT8 RevisionId;
> + UINT16 Flags;
> + UINT16 PinTableOffset;
> + UINT16 LabelOffset;
> + UINT16 VendorOffset;
> + UINT16 VendorLength;
> + /*
> + * Optional fields follow immediately:
> + * 1) PIN list (Words)
> + * 2) Resource Label String
> + * 3) Vendor Data bytes
> + */
> +
> +} AML_RESOURCE_PIN_GROUP;
> +
> +#define AML_RESOURCE_PIN_GROUP_REVISION 1 /* ACPI 6.2 */
> +
> +typedef struct aml_resource_pin_group_function
> +{
> + AML_RESOURCE_LARGE_HEADER_COMMON
> + UINT8 RevisionId;
> + UINT16 Flags;
> + UINT16 FunctionNumber;
> + UINT8 ResSourceIndex;
> + UINT16 ResSourceOffset;
> + UINT16 ResSourceLabelOffset;
> + UINT16 VendorOffset;
> + UINT16 VendorLength;
> + /*
> + * Optional fields follow immediately:
> + * 1) Resource Source String
> + * 2) Resource Source Label String
> + * 3) Vendor Data bytes
> + */
> +
> +} AML_RESOURCE_PIN_GROUP_FUNCTION;
> +
> +#define AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION 1 /* ACPI 6.2 */
> +
> +typedef struct aml_resource_pin_group_config
> +{
> + AML_RESOURCE_LARGE_HEADER_COMMON
> + UINT8 RevisionId;
> + UINT16 Flags;
> + UINT8 PinConfigType;
> + UINT32 PinConfigValue;
> + UINT8 ResSourceIndex;
> + UINT16 ResSourceOffset;
> + UINT16 ResSourceLabelOffset;
> + UINT16 VendorOffset;
> + UINT16 VendorLength;
> + /*
> + * Optional fields follow immediately:
> + * 1) Resource Source String
> + * 2) Resource Source Label String
> + * 3) Vendor Data bytes
> + */
> +
> +} AML_RESOURCE_PIN_GROUP_CONFIG;
> +
> +#define AML_RESOURCE_PIN_GROUP_CONFIG_REVISION 1 /* ACPI 6.2 */
>
> /* restore default alignment */
>
> @@ -680,6 +793,11 @@ typedef union aml_resource
> AML_RESOURCE_SPI_SERIALBUS SpiSerialBus;
> AML_RESOURCE_UART_SERIALBUS UartSerialBus;
> AML_RESOURCE_COMMON_SERIALBUS CommonSerialBus;
> + AML_RESOURCE_PIN_FUNCTION PinFunction;
> + AML_RESOURCE_PIN_CONFIG PinConfig;
> + AML_RESOURCE_PIN_GROUP PinGroup;
> + AML_RESOURCE_PIN_GROUP_FUNCTION PinGroupFunction;
> + AML_RESOURCE_PIN_GROUP_CONFIG PinGroupConfig;
>
> /* Utility overlays */
>
> diff --git a/src/acpica/source/include/platform/acgcc.h b/src/acpica/source/include/platform/acgcc.h
> index d831cbf7..da719a7d 100644
> --- a/src/acpica/source/include/platform/acgcc.h
> +++ b/src/acpica/source/include/platform/acgcc.h
> @@ -156,7 +156,17 @@
> * Use compiler specific <stdarg.h> is a good practice for even when
> * -nostdinc is specified (i.e., ACPI_USE_STANDARD_HEADERS undefined.
> */
> +#ifndef va_arg
> +#ifdef ACPI_USE_BUILTIN_STDARG
> +typedef __builtin_va_list va_list;
> +#define va_start(v, l) __builtin_va_start(v, l)
> +#define va_end(v) __builtin_va_end(v)
> +#define va_arg(v, l) __builtin_va_arg(v, l)
> +#define va_copy(d, s) __builtin_va_copy(d, s)
> +#else
> #include <stdarg.h>
> +#endif
> +#endif
>
> #define ACPI_INLINE __inline__
>
> diff --git a/src/acpica/source/os_specific/service_layers/osunixxf.c b/src/acpica/source/os_specific/service_layers/osunixxf.c
> index 53427ffb..73e45e87 100644
> --- a/src/acpica/source/os_specific/service_layers/osunixxf.c
> +++ b/src/acpica/source/os_specific/service_layers/osunixxf.c
> @@ -984,9 +984,9 @@ AcpiOsWaitSemaphore (
> {
> ACPI_STATUS Status = AE_OK;
> sem_t *Sem = (sem_t *) Handle;
> + int RetVal;
> #ifndef ACPI_USE_ALTERNATE_TIMEOUT
> struct timespec Time;
> - int RetVal;
> #endif
>
>
> @@ -1016,12 +1016,17 @@ AcpiOsWaitSemaphore (
>
> case ACPI_WAIT_FOREVER:
>
> - if (sem_wait (Sem))
> + while (((RetVal = sem_wait (Sem)) == -1) && (errno == EINTR))
> + {
> + continue; /* Restart if interrupted */
> + }
> + if (RetVal != 0)
> {
> Status = (AE_TIME);
> }
> break;
>
> +
> /* Wait with MsecTimeout */
>
> default:
> @@ -1075,7 +1080,8 @@ AcpiOsWaitSemaphore (
>
> while (((RetVal = sem_timedwait (Sem, &Time)) == -1) && (errno == EINTR))
> {
> - continue;
> + continue; /* Restart if interrupted */
> +
> }
>
> if (RetVal != 0)
> diff --git a/src/acpica/source/tools/acpiexec/aecommon.h b/src/acpica/source/tools/acpiexec/aecommon.h
> index c773e96f..b4864610 100644
> --- a/src/acpica/source/tools/acpiexec/aecommon.h
> +++ b/src/acpica/source/tools/acpiexec/aecommon.h
> @@ -204,11 +204,21 @@ extern ACPI_CONNECTION_INFO AeMyContext;
> #define OSD_PRINT(lvl,fp) TEST_OUTPUT_LEVEL(lvl) {\
> AcpiOsPrintf PARAM_LIST(fp);}
>
> +#define AE_PREFIX "ACPI Exec: "
> +
> void ACPI_SYSTEM_XFACE
> -AeCtrlCHandler (
> +AeSignalHandler (
> int Sig);
>
> ACPI_STATUS
> +AeExceptionHandler (
> + ACPI_STATUS AmlStatus,
> + ACPI_NAME Name,
> + UINT16 Opcode,
> + UINT32 AmlOffset,
> + void *Context);
> +
> +ACPI_STATUS
> AeBuildLocalTables (
> ACPI_NEW_TABLE_DESC *TableList);
>
> diff --git a/src/acpica/source/tools/acpiexec/aeexception.c b/src/acpica/source/tools/acpiexec/aeexception.c
> new file mode 100644
> index 00000000..a5a3293a
> --- /dev/null
> +++ b/src/acpica/source/tools/acpiexec/aeexception.c
> @@ -0,0 +1,441 @@
> +/******************************************************************************
> + *
> + * Module Name: aeexception - Exception and signal handlers
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2017, 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.
> + *
> + *****************************************************************************
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * following license:
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions, and the following disclaimer,
> + * without modification.
> + * 2. Redistributions in binary form must reproduce at minimum a disclaimer
> + * substantially similar to the "NO WARRANTY" disclaimer below
> + * ("Disclaimer") and any redistribution must be conditioned upon
> + * including a substantially similar Disclaimer requirement for further
> + * binary redistribution.
> + * 3. Neither the names of the above-listed copyright holders nor the names
> + * of any contributors may be used to endorse or promote products derived
> + * from this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
> + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
> + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
> + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
> + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
> + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
> + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
> + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + *
> + * Alternatively, you may choose to be licensed under the terms of the
> + * GNU General Public License ("GPL") version 2 as published by the Free
> + * Software Foundation.
> + *
> + *****************************************************************************/
> +
> +#include "aecommon.h"
> +
> +#define _COMPONENT ACPI_TOOLS
> + ACPI_MODULE_NAME ("aeexception")
> +
> +
> +/* Local prototypes */
> +
> +static void
> +AeDisplayMethodCallStack (
> + void);
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION: AeExceptionHandler
> + *
> + * PARAMETERS: Standard exception handler parameters
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: System exception handler for AcpiExec utility. Called from
> + * the core ACPICA code after any exception during method
> + * execution.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +AeExceptionHandler (
> + ACPI_STATUS AmlStatus,
> + ACPI_NAME Name,
> + UINT16 Opcode,
> + UINT32 AmlOffset,
> + void *Context)
> +{
> + ACPI_STATUS NewAmlStatus = AmlStatus;
> + ACPI_STATUS Status;
> + ACPI_BUFFER ReturnObj;
> + ACPI_OBJECT_LIST ArgList;
> + ACPI_OBJECT Arg[3];
> + const char *Exception;
> + ACPI_HANDLE ErrHandle;
> +
> +
> + Exception = AcpiFormatException (AmlStatus);
> + AcpiOsPrintf (AE_PREFIX
> + "Exception %s during execution\n", Exception);
> + if (Name)
> + {
> + AcpiOsPrintf (AE_PREFIX
> + "Evaluating Method or Node: [%4.4s]",
> + (char *) &Name);
> + }
> +
> + AcpiOsPrintf ("\n" AE_PREFIX
> + "AML Opcode [%s], Method Offset ~%5.5X\n",
> + AcpiPsGetOpcodeName (Opcode), AmlOffset);
> +
> + /* Invoke the _ERR method if present */
> +
> + Status = AcpiGetHandle (NULL, "\\_ERR", &ErrHandle);
> + if (ACPI_FAILURE (Status))
> + {
> + goto Cleanup;
> + }
> +
> + /* Setup parameter object */
> +
> + ArgList.Count = 3;
> + ArgList.Pointer = Arg;
> +
> + Arg[0].Type = ACPI_TYPE_INTEGER;
> + Arg[0].Integer.Value = AmlStatus;
> +
> + Arg[1].Type = ACPI_TYPE_STRING;
> + Arg[1].String.Pointer = ACPI_CAST_PTR (char, Exception);
> + Arg[1].String.Length = strlen (Exception);
> +
> + Arg[2].Type = ACPI_TYPE_INTEGER;
> + Arg[2].Integer.Value = AcpiOsGetThreadId();
> +
> + /* Setup return buffer */
> +
> + ReturnObj.Pointer = NULL;
> + ReturnObj.Length = ACPI_ALLOCATE_BUFFER;
> +
> + Status = AcpiEvaluateObject (ErrHandle, NULL, &ArgList, &ReturnObj);
> + if (ACPI_SUCCESS (Status))
> + {
> + if (ReturnObj.Pointer)
> + {
> + /* Override original status */
> +
> + NewAmlStatus = (ACPI_STATUS)
> + ((ACPI_OBJECT *) ReturnObj.Pointer)->Integer.Value;
> +
> + /* Free a buffer created via ACPI_ALLOCATE_BUFFER */
> +
> + AcpiOsFree (ReturnObj.Pointer);
> + }
> + }
> + else if (Status != AE_NOT_FOUND)
> + {
> + AcpiOsPrintf (AE_PREFIX
> + "Could not execute _ERR method, %s\n",
> + AcpiFormatException (Status));
> + }
> +
> +Cleanup:
> +
> + /* Global overrides */
> +
> + if (AcpiGbl_IgnoreErrors)
> + {
> + NewAmlStatus = AE_OK;
> + }
> + else if (AmlStatus == AE_AML_INTERNAL)
> + {
> + NewAmlStatus = AE_AML_INTERNAL;
> + AcpiOsPrintf (AE_PREFIX
> + "Cannot override status %s\n\n",
> + AcpiFormatException (NewAmlStatus));
> + }
> + else if (NewAmlStatus != AmlStatus)
> + {
> + AcpiOsPrintf (AE_PREFIX
> + "Exception override, new status %s\n\n",
> + AcpiFormatException (NewAmlStatus));
> + }
> +
> + return (NewAmlStatus);
> +}
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION: AeSignalHandler
> + *
> + * PARAMETERS: Sig
> + *
> + * RETURN: none
> + *
> + * DESCRIPTION: Master signal handler. Currently handles SIGINT (ctrl-c),
> + * and SIGSEGV (Segment violation).
> + *
> + *****************************************************************************/
> +
> +void ACPI_SYSTEM_XFACE
> +AeSignalHandler (
> + int Sig)
> +{
> +
> + fflush(stdout);
> + AcpiOsPrintf ("\n" AE_PREFIX);
> +
> + switch (Sig)
> + {
> + case SIGINT:
> + signal(Sig, SIG_IGN);
> + AcpiOsPrintf ("<Control-C>\n");
> +
> + /* Abort the application if there are no methods executing */
> +
> + if (!AcpiGbl_MethodExecuting)
> + {
> + break;
> + }
> +
> + /*
> + * Abort the method(s). This will also dump the method call
> + * stack so there is no need to do it here. The application
> + * will then drop back into the debugger interface.
> + */
> + AcpiGbl_AbortMethod = TRUE;
> + AcpiOsPrintf (AE_PREFIX "Control Method Call Stack:\n");
> + signal (SIGINT, AeSignalHandler);
> + return;
> +
> + case SIGSEGV:
> + AcpiOsPrintf ("Segmentation Fault\n");
> + AeDisplayMethodCallStack ();
> + break;
> +
> + default:
> + AcpiOsPrintf ("Unknown Signal, %X\n", Sig);
> + break;
> + }
> +
> + /* Terminate application -- cleanup then exit */
> +
> + AcpiOsPrintf (AE_PREFIX "Terminating\n");
> + (void) AcpiOsTerminate ();
> + exit (0);
> +}
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION: AeDisplayMethodCallStack
> + *
> + * PARAMETERS: None
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Display current method call stack, if possible.
> + *
> + * NOTE: Currently only called from a SIGSEGV, so AcpiExec is about
> + * to terminate.
> + *
> + *****************************************************************************/
> +
> +static void
> +AeDisplayMethodCallStack (
> + void)
> +{
> + ACPI_WALK_STATE *WalkState;
> + ACPI_THREAD_STATE *ThreadList = AcpiGbl_CurrentWalkList;
> + char *FullPathname = NULL;
> +
> +
> + if (!AcpiGbl_MethodExecuting)
> + {
> + AcpiOsPrintf (AE_PREFIX "No method is executing\n");
> + return;
> + }
> +
> + /*
> + * Try to find the currently executing control method(s)
> + *
> + * Note: The following code may fault if the data structures are
> + * in an indeterminate state when the interrupt occurs. However,
> + * in practice, this works quite well and can provide very
> + * valuable information.
> + *
> + * 1) Walk the global thread list
> + */
> + while (ThreadList &&
> + (ThreadList->DescriptorType == ACPI_DESC_TYPE_STATE_THREAD))
> + {
> + /* 2) Walk the walk state list for this thread */
> +
> + WalkState = ThreadList->WalkStateList;
> + while (WalkState &&
> + (WalkState->DescriptorType == ACPI_DESC_TYPE_WALK))
> + {
> + /* An executing control method */
> +
> + if (WalkState->MethodNode)
> + {
> + FullPathname = AcpiNsGetExternalPathname (
> + WalkState->MethodNode);
> +
> + AcpiOsPrintf (AE_PREFIX
> + "Executing Method: %s\n", FullPathname);
> + }
> +
> + /* Execution of a deferred opcode/node */
> +
> + if (WalkState->DeferredNode)
> + {
> + FullPathname = AcpiNsGetExternalPathname (
> + WalkState->DeferredNode);
> +
> + AcpiOsPrintf (AE_PREFIX
> + "Evaluating deferred node: %s\n", FullPathname);
> + }
> +
> + /* Get the currently executing AML opcode */
> +
> + if ((WalkState->Opcode != AML_INT_METHODCALL_OP) &&
> + FullPathname)
> + {
> + AcpiOsPrintf (AE_PREFIX
> + "Current AML Opcode in %s: [%s]-0x%4.4X at %p\n",
> + FullPathname, AcpiPsGetOpcodeName (WalkState->Opcode),
> + WalkState->Opcode, WalkState->Aml);
> + }
> +
> + if (FullPathname)
> + {
> + ACPI_FREE (FullPathname);
> + FullPathname = NULL;
> + }
> +
> + WalkState = WalkState->Next;
> + }
> +
> + ThreadList = ThreadList->Next;
> + }
> +}
> diff --git a/src/acpica/source/tools/acpiexec/aehandlers.c b/src/acpica/source/tools/acpiexec/aehandlers.c
> index 5f32b6af..b2854195 100644
> --- a/src/acpica/source/tools/acpiexec/aehandlers.c
> +++ b/src/acpica/source/tools/acpiexec/aehandlers.c
> @@ -182,14 +182,6 @@ AeDeviceNotifyHandler (
> void *Context);
>
> static ACPI_STATUS
> -AeExceptionHandler (
> - ACPI_STATUS AmlStatus,
> - ACPI_NAME Name,
> - UINT16 Opcode,
> - UINT32 AmlOffset,
> - void *Context);
> -
> -static ACPI_STATUS
> AeTableHandler (
> UINT32 Event,
> void *Table,
> @@ -230,50 +222,11 @@ static char *TableEvents[] =
> #endif /* !ACPI_REDUCED_HARDWARE */
>
>
> -static UINT32 SigintCount = 0;
> static AE_DEBUG_REGIONS AeRegions;
>
>
> /******************************************************************************
> *
> - * FUNCTION: AeCtrlCHandler
> - *
> - * PARAMETERS: Sig
> - *
> - * RETURN: none
> - *
> - * DESCRIPTION: Control-C handler. Abort running control method if any.
> - *
> - *****************************************************************************/
> -
> -void ACPI_SYSTEM_XFACE
> -AeCtrlCHandler (
> - int Sig)
> -{
> -
> - signal (SIGINT, SIG_IGN);
> - SigintCount++;
> -
> - AcpiOsPrintf ("Caught a ctrl-c (#%u)\n\n", SigintCount);
> -
> - if (AcpiGbl_MethodExecuting)
> - {
> - AcpiGbl_AbortMethod = TRUE;
> - signal (SIGINT, AeCtrlCHandler);
> -
> - if (SigintCount < 10)
> - {
> - return;
> - }
> - }
> -
> - (void) AcpiOsTerminate ();
> - exit (0);
> -}
> -
> -
> -/******************************************************************************
> - *
> * FUNCTION: AeNotifyHandler(s)
> *
> * PARAMETERS: Standard notify handler parameters
> @@ -325,28 +278,34 @@ AeCommonNotifyHandler (
> #if 0
> case 0:
>
> - printf ("[AcpiExec] Method Error 0x%X: Results not equal\n", Value);
> + printf (AE_PREFIX
> + "Method Error 0x%X: Results not equal\n", Value);
> if (AcpiGbl_DebugFile)
> {
> - AcpiOsPrintf ("[AcpiExec] Method Error: Results not equal\n");
> + AcpiOsPrintf (AE_PREFIX
> + "Method Error: Results not equal\n");
> }
> break;
>
> case 1:
>
> - printf ("[AcpiExec] Method Error: Incorrect numeric result\n");
> + printf (AE_PREFIX
> + "Method Error: Incorrect numeric result\n");
> if (AcpiGbl_DebugFile)
> {
> - AcpiOsPrintf ("[AcpiExec] Method Error: Incorrect numeric result\n");
> + AcpiOsPrintf (AE_PREFIX
> + "Method Error: Incorrect numeric result\n");
> }
> break;
>
> case 2:
>
> - printf ("[AcpiExec] Method Error: An operand was overwritten\n");
> + printf (AE_PREFIX
> + "Method Error: An operand was overwritten\n");
> if (AcpiGbl_DebugFile)
> {
> - AcpiOsPrintf ("[AcpiExec] Method Error: An operand was overwritten\n");
> + AcpiOsPrintf (AE_PREFIX
> + "Method Error: An operand was overwritten\n");
> }
> break;
>
> @@ -354,12 +313,14 @@ AeCommonNotifyHandler (
>
> default:
>
> - printf ("[AcpiExec] Handler %u: Received a %s Notify on [%4.4s] %p Value 0x%2.2X (%s)\n",
> + printf (AE_PREFIX
> + "Handler %u: Received a %s Notify on [%4.4s] %p Value 0x%2.2X (%s)\n",
> HandlerId, Type, AcpiUtGetNodeName (Device), Device, Value,
> AcpiUtGetNotifyName (Value, ACPI_TYPE_ANY));
> if (AcpiGbl_DebugFile)
> {
> - AcpiOsPrintf ("[AcpiExec] Handler %u: Received a %s notify, Value 0x%2.2X\n",
> + AcpiOsPrintf (AE_PREFIX
> + "Handler %u: Received a %s notify, Value 0x%2.2X\n",
> HandlerId, Type, Value);
> }
>
> @@ -390,12 +351,14 @@ AeSystemNotifyHandler (
> void *Context)
> {
>
> - printf ("[AcpiExec] Global: Received a System Notify on [%4.4s] %p Value 0x%2.2X (%s)\n",
> + printf (AE_PREFIX
> + "Global: Received a System Notify on [%4.4s] %p Value 0x%2.2X (%s)\n",
> AcpiUtGetNodeName (Device), Device, Value,
> AcpiUtGetNotifyName (Value, ACPI_TYPE_ANY));
> if (AcpiGbl_DebugFile)
> {
> - AcpiOsPrintf ("[AcpiExec] Global: Received a System Notify, Value 0x%2.2X\n", Value);
> + AcpiOsPrintf (AE_PREFIX
> + "Global: Received a System Notify, Value 0x%2.2X\n", Value);
> }
>
> (void) AcpiEvaluateObject (Device, "_NOT", NULL, NULL);
> @@ -423,12 +386,14 @@ AeDeviceNotifyHandler (
> void *Context)
> {
>
> - printf ("[AcpiExec] Global: Received a Device Notify on [%4.4s] %p Value 0x%2.2X (%s)\n",
> + printf (AE_PREFIX
> + "Global: Received a Device Notify on [%4.4s] %p Value 0x%2.2X (%s)\n",
> AcpiUtGetNodeName (Device), Device, Value,
> AcpiUtGetNotifyName (Value, ACPI_TYPE_ANY));
> if (AcpiGbl_DebugFile)
> {
> - AcpiOsPrintf ("[AcpiExec] Global: Received a Device Notify, Value 0x%2.2X\n", Value);
> + AcpiOsPrintf (AE_PREFIX
> + "Global: Received a Device Notify, Value 0x%2.2X\n", Value);
> }
>
> (void) AcpiEvaluateObject (Device, "_NOT", NULL, NULL);
> @@ -437,108 +402,6 @@ AeDeviceNotifyHandler (
>
> /******************************************************************************
> *
> - * FUNCTION: AeExceptionHandler
> - *
> - * PARAMETERS: Standard exception handler parameters
> - *
> - * RETURN: Status
> - *
> - * DESCRIPTION: System exception handler for AcpiExec utility.
> - *
> - *****************************************************************************/
> -
> -static ACPI_STATUS
> -AeExceptionHandler (
> - ACPI_STATUS AmlStatus,
> - ACPI_NAME Name,
> - UINT16 Opcode,
> - UINT32 AmlOffset,
> - void *Context)
> -{
> - ACPI_STATUS NewAmlStatus = AmlStatus;
> - ACPI_STATUS Status;
> - ACPI_BUFFER ReturnObj;
> - ACPI_OBJECT_LIST ArgList;
> - ACPI_OBJECT Arg[3];
> - const char *Exception;
> -
> -
> - Exception = AcpiFormatException (AmlStatus);
> - AcpiOsPrintf ("[AcpiExec] Exception %s during execution ", Exception);
> - if (Name)
> - {
> - AcpiOsPrintf ("of method [%4.4s]", (char *) &Name);
> - }
> - else
> - {
> - AcpiOsPrintf ("at module level (table load)");
> - }
> -
> - AcpiOsPrintf (" Opcode [%s] @%X\n", AcpiPsGetOpcodeName (Opcode), AmlOffset);
> -
> - /*
> - * Invoke the _ERR method if present
> - *
> - * Setup parameter object
> - */
> - ArgList.Count = 3;
> - ArgList.Pointer = Arg;
> -
> - Arg[0].Type = ACPI_TYPE_INTEGER;
> - Arg[0].Integer.Value = AmlStatus;
> -
> - Arg[1].Type = ACPI_TYPE_STRING;
> - Arg[1].String.Pointer = ACPI_CAST_PTR (char, Exception);
> - Arg[1].String.Length = strlen (Exception);
> -
> - Arg[2].Type = ACPI_TYPE_INTEGER;
> - Arg[2].Integer.Value = AcpiOsGetThreadId();
> -
> - /* Setup return buffer */
> -
> - ReturnObj.Pointer = NULL;
> - ReturnObj.Length = ACPI_ALLOCATE_BUFFER;
> -
> - Status = AcpiEvaluateObject (NULL, "\\_ERR", &ArgList, &ReturnObj);
> - if (ACPI_SUCCESS (Status))
> - {
> - if (ReturnObj.Pointer)
> - {
> - /* Override original status */
> -
> - NewAmlStatus = (ACPI_STATUS)
> - ((ACPI_OBJECT *) ReturnObj.Pointer)->Integer.Value;
> -
> - /* Free a buffer created via ACPI_ALLOCATE_BUFFER */
> -
> - AcpiOsFree (ReturnObj.Pointer);
> - }
> - }
> - else if (Status != AE_NOT_FOUND)
> - {
> - AcpiOsPrintf ("[AcpiExec] Could not execute _ERR method, %s\n",
> - AcpiFormatException (Status));
> - }
> -
> - /* Global override */
> -
> - if (AcpiGbl_IgnoreErrors)
> - {
> - NewAmlStatus = AE_OK;
> - }
> -
> - if (NewAmlStatus != AmlStatus)
> - {
> - AcpiOsPrintf ("[AcpiExec] Exception override, new status %s\n\n",
> - AcpiFormatException (NewAmlStatus));
> - }
> -
> - return (NewAmlStatus);
> -}
> -
> -
> -/******************************************************************************
> - *
> * FUNCTION: AeTableHandler
> *
> * PARAMETERS: Table handler
> @@ -571,8 +434,9 @@ AeTableHandler (
> Status = AcpiUpdateAllGpes ();
> ACPI_CHECK_OK (AcpiUpdateAllGpes, Status);
>
> - printf ("[AcpiExec] Table Event %s, [%4.4s] %p\n",
> - TableEvents[Event], ((ACPI_TABLE_HEADER *) Table)->Signature, Table);
> + printf (AE_PREFIX "Table Event %s, [%4.4s] %p\n",
> + TableEvents[Event],
> + ((ACPI_TABLE_HEADER *) Table)->Signature, Table);
> #endif /* !ACPI_REDUCED_HARDWARE */
>
> return (AE_OK);
> @@ -596,7 +460,8 @@ AeGpeHandler (
> ACPI_NAMESPACE_NODE *DeviceNode = (ACPI_NAMESPACE_NODE *) GpeDevice;
>
>
> - AcpiOsPrintf ("[AcpiExec] GPE Handler received GPE %02X (GPE block %4.4s)\n",
> + AcpiOsPrintf (AE_PREFIX
> + "GPE Handler received GPE %02X (GPE block %4.4s)\n",
> GpeNumber, GpeDevice ? DeviceNode->Name.Ascii : "FADT");
>
> return (ACPI_REENABLE_GPE);
> @@ -639,8 +504,8 @@ AeGlobalEventHandler (
> break;
> }
>
> - AcpiOsPrintf (
> - "[AcpiExec] Global Event Handler received: Type %s Number %.2X Dev %p\n",
> + AcpiOsPrintf (AE_PREFIX
> + "Global Event Handler received: Type %s Number %.2X Dev %p\n",
> TypeName, EventNumber, Device);
> }
>
> @@ -662,7 +527,8 @@ AeAttachedDataHandler (
> ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Data);
>
>
> - AcpiOsPrintf ("Received an attached data deletion (1) on %4.4s\n",
> + AcpiOsPrintf (AE_PREFIX
> + "Received an attached data deletion (1) on %4.4s\n",
> Node->Name.Ascii);
> }
>
> @@ -684,7 +550,8 @@ AeAttachedDataHandler2 (
> ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Data);
>
>
> - AcpiOsPrintf ("Received an attached data deletion (2) on %4.4s\n",
> + AcpiOsPrintf (AE_PREFIX
> + "Received an attached data deletion (2) on %4.4s\n",
> Node->Name.Ascii);
> }
>
> @@ -734,7 +601,8 @@ AeSciHandler (
> void *Context)
> {
>
> - AcpiOsPrintf ("[AcpiExec] Received an SCI at handler\n");
> + AcpiOsPrintf (AE_PREFIX
> + "Received an SCI at handler\n");
> return (0);
> }
>
> @@ -926,16 +794,16 @@ AeInstallEarlyHandlers (
>
> /* Install global notify handlers */
>
> - Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY,
> - AeSystemNotifyHandler, NULL);
> + Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT,
> + ACPI_SYSTEM_NOTIFY, AeSystemNotifyHandler, NULL);
> if (ACPI_FAILURE (Status))
> {
> printf ("Could not install a global system notify handler, %s\n",
> AcpiFormatException (Status));
> }
>
> - Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT, ACPI_DEVICE_NOTIFY,
> - AeDeviceNotifyHandler, NULL);
> + Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT,
> + ACPI_DEVICE_NOTIFY, AeDeviceNotifyHandler, NULL);
> if (ACPI_FAILURE (Status))
> {
> printf ("Could not install a global notify handler, %s\n",
>
Acked-by: Ivan Hu <ivan.hu at canonical.com>
More information about the fwts-devel
mailing list