ACK: [PATCH] ACPICA: Update to version 20181031
ivanhu
ivan.hu at canonical.com
Tue Nov 6 02:39:34 UTC 2018
On 11/1/18 5:26 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/2018-October/001832.html
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> src/acpica/fwts_acpica.c | 1 -
> src/acpica/source/common/adisasm.c | 1 -
> src/acpica/source/common/dmtbdump3.c | 52 ++++++++
> src/acpica/source/common/dmtbinfo3.c | 20 +++
> src/acpica/source/compiler/aslcompile.c | 2 +-
> src/acpica/source/compiler/aslerror.c | 4 +-
> src/acpica/source/compiler/aslload.c | 97 +++++++++-----
> src/acpica/source/compiler/aslmain.c | 2 +-
> src/acpica/source/compiler/aslmessages.c | 6 +-
> src/acpica/source/compiler/aslmessages.h | 2 +
> src/acpica/source/compiler/aslpredef.c | 2 +-
> src/acpica/source/compiler/aslxref.c | 46 ++++++-
> src/acpica/source/compiler/dtio.c | 28 +++-
> src/acpica/source/compiler/dttable2.c | 66 ++++++++++
> src/acpica/source/compiler/prscan.c | 1 -
> .../source/components/debugger/dbxface.c | 122 +++++++++++-------
> .../source/components/dispatcher/dsopcode.c | 3 +
> .../source/components/dispatcher/dswload2.c | 9 ++
> .../source/components/namespace/nsaccess.c | 21 ++-
> src/acpica/source/components/parser/psloop.c | 22 +++-
> .../source/components/parser/psobject.c | 2 +-
> .../source/components/tables/tbxfload.c | 2 +-
> src/acpica/source/include/acdisasm.h | 2 +
> src/acpica/source/include/acnamesp.h | 1 +
> src/acpica/source/include/acpixf.h | 9 +-
> src/acpica/source/include/actbinfo.h | 2 +
> src/acpica/source/include/actbl3.h | 28 ++++
> 27 files changed, 443 insertions(+), 110 deletions(-)
>
> diff --git a/src/acpica/fwts_acpica.c b/src/acpica/fwts_acpica.c
> index d0c6ed7c..75f8fe3d 100644
> --- a/src/acpica/fwts_acpica.c
> +++ b/src/acpica/fwts_acpica.c
> @@ -1061,7 +1061,6 @@ int fwts_acpica_init(fwts_framework *fw)
> FWTS_ACPICA_MODE(fw, FWTS_ACPICA_MODE_IGNORE_ERRORS);
> AcpiGbl_DisableAutoRepair =
> FWTS_ACPICA_MODE(fw, FWTS_ACPICA_MODE_DISABLE_AUTO_REPAIR);
> - AcpiGbl_GroupModuleLevelCode = FALSE;
> AcpiGbl_CstyleDisassembly = FALSE;
>
> pthread_mutex_init(&mutex_lock_sem_table, NULL);
> diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c
> index ed35f31a..70f7932b 100644
> --- a/src/acpica/source/common/adisasm.c
> +++ b/src/acpica/source/common/adisasm.c
> @@ -775,7 +775,6 @@ AdDoExternalFileList (
> AcpiDmFinishNamespaceLoad (AcpiGbl_ParseOpRoot,
> AcpiGbl_RootNode, OwnerId);
> AcpiPsDeleteParseTree (AcpiGbl_ParseOpRoot);
> - AcpiGbl_ParseOpRoot = NULL; /* for fwts */
>
> ExternalListHead = ExternalListHead->Next;
> }
> diff --git a/src/acpica/source/common/dmtbdump3.c b/src/acpica/source/common/dmtbdump3.c
> index 3c1dea6c..1bc3fa6c 100644
> --- a/src/acpica/source/common/dmtbdump3.c
> +++ b/src/acpica/source/common/dmtbdump3.c
> @@ -486,6 +486,51 @@ AcpiDmDumpTcpa (
> }
>
>
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDmDumpTpm2
> + *
> + * PARAMETERS: Table - A TPM2 table
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Format the contents of a TPM2.
> + *
> + ******************************************************************************/
> +static void
> +AcpiDmDumpTpm2Rev3 (
> + ACPI_TABLE_HEADER *Table)
> +{
> + UINT32 Offset = sizeof (ACPI_TABLE_TPM23);
> + ACPI_TABLE_TPM23 *CommonHeader = ACPI_CAST_PTR (ACPI_TABLE_TPM23, Table);
> + ACPI_TPM23_TRAILER *Subtable = ACPI_ADD_PTR (ACPI_TPM23_TRAILER, Table, Offset);
> + ACPI_STATUS Status;
> +
> +
> + /* Main table */
> +
> + Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm23);
> + if (ACPI_FAILURE (Status))
> + {
> + return;
> + }
> +
> + /* Optional subtable if start method is ACPI start method */
> +
> + switch (CommonHeader->StartMethod)
> + {
> + case ACPI_TPM23_ACPI_START_METHOD:
> +
> + Status = AcpiDmDumpTable (Table->Length, Offset, Subtable,
> + Table->Length - Offset, AcpiDmTableInfoTpm23a);
> + break;
> +
> + default:
> + break;
> + }
> +}
> +
> +
> /*******************************************************************************
> *
> * FUNCTION: AcpiDmDumpTpm2
> @@ -509,9 +554,16 @@ AcpiDmDumpTpm2 (
> ACPI_STATUS Status;
>
>
> + if (Table->Revision == 3)
> + {
> + AcpiDmDumpTpm2Rev3(Table);
> + return;
> + }
> +
> /* Main table */
>
> Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoTpm2);
> +
> if (ACPI_FAILURE (Status))
> {
> return;
> diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c
> index c82e3db5..33d99287 100644
> --- a/src/acpica/source/common/dmtbinfo3.c
> +++ b/src/acpica/source/common/dmtbinfo3.c
> @@ -446,6 +446,26 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[] =
> *
> ******************************************************************************/
>
> +/* TPM2 revision 3 */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoTpm23[] =
> +{
> + {ACPI_DMT_UINT32, ACPI_TPM23_OFFSET (Reserved), "Reserved", 0},
> + {ACPI_DMT_UINT64, ACPI_TPM23_OFFSET (ControlAddress), "Control Address", 0},
> + {ACPI_DMT_UINT32, ACPI_TPM23_OFFSET (StartMethod), "Start Method", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +/* Trailer in the case that StartMethod == 2 */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoTpm23a[] =
> +{
> + {ACPI_DMT_UINT32, ACPI_TPM23A_OFFSET (Reserved), "Reserved", DT_OPTIONAL},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +/* TPM2 revision 4 */
> +
> ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[] =
> {
> {ACPI_DMT_UINT16, ACPI_TPM2_OFFSET (PlatformClass), "Platform Class", 0},
> diff --git a/src/acpica/source/compiler/aslcompile.c b/src/acpica/source/compiler/aslcompile.c
> index e08442e0..4ae19076 100644
> --- a/src/acpica/source/compiler/aslcompile.c
> +++ b/src/acpica/source/compiler/aslcompile.c
> @@ -858,7 +858,7 @@ CmCleanupAndExit (
>
> if (AslGbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT)
> {
> - printf ("\nMaximum error count (%u) exceeded\n",
> + printf ("\nMaximum error count (%d) exceeded\n",
> ASL_MAX_ERROR_COUNT);
> }
>
> diff --git a/src/acpica/source/compiler/aslerror.c b/src/acpica/source/compiler/aslerror.c
> index 6d45cd40..10ea3ec1 100644
> --- a/src/acpica/source/compiler/aslerror.c
> +++ b/src/acpica/source/compiler/aslerror.c
> @@ -1097,7 +1097,7 @@ AslExpectException (
>
> if (AslGbl_ExpectedMessagesIndex >= ASL_MAX_EXPECTED_MESSAGES)
> {
> - printf ("Too many messages have been registered as expected (max %u)\n",
> + printf ("Too many messages have been registered as expected (max %d)\n",
> ASL_MAX_DISABLED_MESSAGES);
> return (AE_LIMIT);
> }
> @@ -1144,7 +1144,7 @@ AslDisableException (
>
> if (AslGbl_DisabledMessagesIndex >= ASL_MAX_DISABLED_MESSAGES)
> {
> - printf ("Too many messages have been disabled (max %u)\n",
> + printf ("Too many messages have been disabled (max %d)\n",
> ASL_MAX_DISABLED_MESSAGES);
> return (AE_LIMIT);
> }
> diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c
> index 5bb0a851..7f29b90c 100644
> --- a/src/acpica/source/compiler/aslload.c
> +++ b/src/acpica/source/compiler/aslload.c
> @@ -417,10 +417,8 @@ LdLoadResourceElements (
> {
> Status = AcpiNsLookup (WalkState->ScopeInfo,
> InitializerOp->Asl.ExternalName,
> - ACPI_TYPE_LOCAL_RESOURCE_FIELD,
> - ACPI_IMODE_LOAD_PASS1,
> - ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE,
> - NULL, &Node);
> + ACPI_TYPE_LOCAL_RESOURCE_FIELD, ACPI_IMODE_LOAD_PASS1,
> + ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node);
> if (ACPI_FAILURE (Status))
> {
> return (Status);
> @@ -687,8 +685,7 @@ LdNamespace1Begin (
> * handle this case. Perhaps someday this case can go away.
> */
> Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY,
> - ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
> - WalkState, &(Node));
> + ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &Node);
> if (ACPI_FAILURE (Status))
> {
> if (Status == AE_NOT_FOUND)
> @@ -696,23 +693,26 @@ LdNamespace1Begin (
> /* The name was not found, go ahead and create it */
>
> Status = AcpiNsLookup (WalkState->ScopeInfo, Path,
> - ACPI_TYPE_LOCAL_SCOPE,
> - ACPI_IMODE_LOAD_PASS1, Flags,
> - WalkState, &(Node));
> + ACPI_TYPE_LOCAL_SCOPE, ACPI_IMODE_LOAD_PASS1,
> + Flags, WalkState, &Node);
> if (ACPI_FAILURE (Status))
> {
> return_ACPI_STATUS (Status);
> }
>
> - /*
> - * However, this is an error -- primarily because the MS
> - * interpreter can't handle a forward reference from the
> - * Scope() operator.
> - */
> - AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> - Op->Asl.ExternalName);
> - AslError (ASL_ERROR, ASL_MSG_SCOPE_FWD_REF, Op,
> - Op->Asl.ExternalName);
> + /* However, this is an error -- operand to Scope must exist */
> +
> + if (strlen (Op->Asl.ExternalName) == ACPI_NAME_SIZE)
> + {
> + AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> + Op->Asl.ExternalName);
> + }
> + else
> + {
> + AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op,
> + Op->Asl.ExternalName);
> + }
> +
> goto FinishNode;
> }
>
> @@ -824,7 +824,6 @@ LdNamespace1Begin (
> break;
> }
>
> -
> ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Loading name: %s, (%s)\n",
> Op->Asl.ExternalName, AcpiUtGetTypeName (ObjectType)));
>
> @@ -832,6 +831,18 @@ LdNamespace1Begin (
>
> Flags |= ACPI_NS_ERROR_IF_FOUND;
>
> + /*
> + * For opcodes that enter new names into the namespace,
> + * all prefix NameSegs must exist.
> + */
> + WalkState->OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
> + if (((WalkState->OpInfo->Flags & AML_NAMED) ||
> + (WalkState->OpInfo->Flags & AML_CREATE)) &&
> + (Op->Asl.AmlOpcode != AML_EXTERNAL_OP))
> + {
> + Flags |= ACPI_NS_PREFIX_MUST_EXIST;
> + }
> +
> /*
> * Enter the named type into the internal namespace. We enter the name
> * as we go downward in the parse tree. Any necessary subobjects that
> @@ -915,8 +926,20 @@ LdNamespace1Begin (
> return_ACPI_STATUS (AE_OK);
> }
> }
> + else if (AE_NOT_FOUND)
> + {
> + /*
> + * One or more prefix NameSegs of the NamePath do not exist
> + * (all of them must exist). Attempt to continue compilation
> + * by setting the current scope to the root.
> + */
> + Node = AcpiGbl_RootNode;
> + Status = AE_OK;
> + }
> else
> {
> + /* Flag all other errors as coming from the ACPICA core */
> +
> AslCoreSubsystemError (Op, Status,
> "Failure from namespace lookup", FALSE);
> return_ACPI_STATUS (Status);
> @@ -1043,10 +1066,10 @@ LdNamespace2Begin (
>
> if (Op->Asl.ParseOpcode == PARSEOP_ALIAS)
> {
> - /* Complete the alias node by getting and saving the target node */
> -
> - /* First child is the alias target */
> -
> + /*
> + * Complete the alias node by getting and saving the target node.
> + * First child is the alias target
> + */
> Arg = Op->Asl.Child;
>
> /* Get the target pathname */
> @@ -1070,18 +1093,34 @@ LdNamespace2Begin (
> {
> if (Status == AE_NOT_FOUND)
> {
> - AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> - Op->Asl.ExternalName);
> + /* Standalone NameSeg vs. NamePath */
> +
> + if (strlen (Arg->Asl.ExternalName) == ACPI_NAME_SIZE)
> + {
> + AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> + Arg->Asl.ExternalName);
> + }
> + else
> + {
> + AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op,
> + Arg->Asl.ExternalName);
> + }
>
> +#if 0
> +/*
> + * NOTE: Removed 10/2018 to enhance compiler error reporting. No
> + * regressions seen.
> + */
> /*
> * The name was not found, go ahead and create it.
> * This prevents more errors later.
> */
> Status = AcpiNsLookup (WalkState->ScopeInfo, Path,
> - ACPI_TYPE_ANY,
> - ACPI_IMODE_LOAD_PASS1, ACPI_NS_NO_UPSEARCH,
> - WalkState, &(Node));
> - return (AE_OK);
> + ACPI_TYPE_ANY, ACPI_IMODE_LOAD_PASS1,
> + ACPI_NS_NO_UPSEARCH, WalkState, &Node);
> +#endif
> + return (Status);
> +/* Removed: return (AE_OK)*/
> }
>
> AslCoreSubsystemError (Op, Status,
> diff --git a/src/acpica/source/compiler/aslmain.c b/src/acpica/source/compiler/aslmain.c
> index 4f24bb3e..70386f8a 100644
> --- a/src/acpica/source/compiler/aslmain.c
> +++ b/src/acpica/source/compiler/aslmain.c
> @@ -329,7 +329,7 @@ AslSignalHandler (
>
> default:
>
> - printf (ASL_PREFIX "Unknown interrupt signal (%u)\n", Sig);
> + printf (ASL_PREFIX "Unknown interrupt signal (%d)\n", Sig);
> break;
> }
>
> diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
> index 14e140b2..23297183 100644
> --- a/src/acpica/source/compiler/aslmessages.c
> +++ b/src/acpica/source/compiler/aslmessages.c
> @@ -285,7 +285,7 @@ const char *AslCompilerMsgs [] =
> /* ASL_MSG_NON_ASCII */ "Invalid characters found in file",
> /* ASL_MSG_NON_ZERO */ "Operand evaluates to zero",
> /* ASL_MSG_NOT_EXIST */ "Object does not exist",
> -/* ASL_MSG_NOT_FOUND */ "Object not found or not accessible from scope",
> +/* ASL_MSG_NOT_FOUND */ "Object not found or not accessible from current scope",
> /* ASL_MSG_NOT_METHOD */ "Not a control method, cannot invoke",
> /* ASL_MSG_NOT_PARAMETER */ "Not a parameter, used as local only",
> /* ASL_MSG_NOT_REACHABLE */ "Object is not accessible from this scope",
> @@ -359,7 +359,9 @@ const char *AslCompilerMsgs [] =
> /* ASL_MSG_OEM_ID */ "Invalid OEM ID",
> /* ASL_MSG_UNLOAD */ "Unload is not supported by all operating systems",
> /* ASL_MSG_OFFSET */ "Unnecessary/redundant use of Offset operator",
> -/* ASL_MSG_LONG_SLEEP */ "Very long Sleep, greater than 1 second"
> +/* ASL_MSG_LONG_SLEEP */ "Very long Sleep, greater than 1 second",
> +/* ASL_MSG_PREFIX_NOT_EXIST */ "One or more prefix Scopes do not exist",
> +/* ASL_MSG_NAMEPATH_NOT_EXIST */ "One or more objects within the Pathname do not exist"
> };
>
> /* Table compiler */
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 907744a2..c932aded 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -362,6 +362,8 @@ typedef enum
> ASL_MSG_UNLOAD,
> ASL_MSG_OFFSET,
> ASL_MSG_LONG_SLEEP,
> + ASL_MSG_PREFIX_NOT_EXIST,
> + ASL_MSG_NAMEPATH_NOT_EXIST,
>
> /* These messages are used by the Data Table compiler only */
>
> diff --git a/src/acpica/source/compiler/aslpredef.c b/src/acpica/source/compiler/aslpredef.c
> index bc30fe91..ae806412 100644
> --- a/src/acpica/source/compiler/aslpredef.c
> +++ b/src/acpica/source/compiler/aslpredef.c
> @@ -222,7 +222,7 @@ ApCheckForPredefinedMethod (
>
> if (MethodInfo->NumArguments != 0)
> {
> - sprintf (AslGbl_MsgBuffer, "%s requires %u", Op->Asl.ExternalName, 0);
> + sprintf (AslGbl_MsgBuffer, "%s requires %d", Op->Asl.ExternalName, 0);
>
> AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_HI, Op,
> AslGbl_MsgBuffer);
> diff --git a/src/acpica/source/compiler/aslxref.c b/src/acpica/source/compiler/aslxref.c
> index 5273ea82..8b213577 100644
> --- a/src/acpica/source/compiler/aslxref.c
> +++ b/src/acpica/source/compiler/aslxref.c
> @@ -718,11 +718,34 @@ XfNamespaceLocateBegin (
> }
> else
> {
> - /* Check for a fully qualified path */
> + /* The NamePath contains multiple NameSegs */
>
> - if (Path[0] == AML_ROOT_PREFIX)
> + if ((OpInfo->Flags & AML_CREATE) ||
> + (OpInfo->ObjectType == ACPI_TYPE_LOCAL_ALIAS))
> {
> - /* Gave full path, the object does not exist */
> + /*
> + * The new name is the last parameter. For the
> + * CreateXXXXField and Alias operators
> + */
> + NextOp = Op->Asl.Child;
> + while (!(NextOp->Asl.CompileFlags & OP_IS_NAME_DECLARATION))
> + {
> + NextOp = NextOp->Asl.Next;
> + }
> +
> + AslError (ASL_ERROR, ASL_MSG_PREFIX_NOT_EXIST, NextOp,
> + NextOp->Asl.ExternalName);
> + }
> + else if (OpInfo->Flags & AML_NAMED)
> + {
> + /* The new name is the first parameter */
> +
> + AslError (ASL_ERROR, ASL_MSG_PREFIX_NOT_EXIST, Op,
> + Op->Asl.ExternalName);
> + }
> + else if (Path[0] == AML_ROOT_PREFIX)
> + {
> + /* Full namepath from root, the object does not exist */
>
> AslError (ASL_ERROR, ASL_MSG_NOT_EXIST, Op,
> Op->Asl.ExternalName);
> @@ -730,11 +753,20 @@ XfNamespaceLocateBegin (
> else
> {
> /*
> - * We can't tell whether it doesn't exist or just
> - * can't be reached.
> + * Generic "not found" error. Cannot determine whether it
> + * doesn't exist or just can't be reached. However, we
> + * can differentiate between a NameSeg vs. NamePath.
> */
> - AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> - Op->Asl.ExternalName);
> + if (strlen (Op->Asl.ExternalName) == ACPI_NAME_SIZE)
> + {
> + AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
> + Op->Asl.ExternalName);
> + }
> + else
> + {
> + AslError (ASL_ERROR, ASL_MSG_NAMEPATH_NOT_EXIST, Op,
> + Op->Asl.ExternalName);
> + }
> }
> }
>
> diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c
> index b15d3b97..bd189053 100644
> --- a/src/acpica/source/compiler/dtio.c
> +++ b/src/acpica/source/compiler/dtio.c
> @@ -236,7 +236,7 @@ DtTrim (
>
> /* Skip lines that start with a space */
>
> - if (!strcmp (String, " "))
> + if (*String == 0 || !strcmp (String, " "))
> {
> ReturnString = UtLocalCacheCalloc (1);
> return (ReturnString);
> @@ -258,7 +258,7 @@ DtTrim (
>
> while (End >= Start)
> {
> - if (*End == '\r' || *End == '\n')
> + if (*End == '\n')
> {
> End--;
> continue;
> @@ -522,6 +522,7 @@ DtGetNextLine (
> UINT32 CurrentLineOffset;
> UINT32 i;
> int c;
> + int c1;
>
>
> memset (AslGbl_CurrentLineBuffer, 0, AslGbl_LineBufferSize);
> @@ -569,6 +570,29 @@ DtGetNextLine (
> c = '\n';
> State = DT_NORMAL_TEXT;
> }
> + else if (c == '\r')
> + {
> + c1 = getc (Handle);
> + if (c1 == '\n')
> + {
> + /*
> + * Skip the carriage return as if it didn't exist. This is
> + * onlt meant for input files in DOS format in unix. fopen in
> + * unix may not support "text mode" and leaves CRLF intact.
> + */
> + c = '\n';
> + }
> + else
> + {
> + /* This was not a CRLF. Only a CR */
> +
> + ungetc(c1, Handle);
> +
> + DtFatal (ASL_MSG_COMPILER_INTERNAL, NULL,
> + "Carriage return without linefeed detected");
> + return (ASL_EOF);
> + }
> + }
>
> switch (State)
> {
> diff --git a/src/acpica/source/compiler/dttable2.c b/src/acpica/source/compiler/dttable2.c
> index 3f970377..0b196a2f 100644
> --- a/src/acpica/source/compiler/dttable2.c
> +++ b/src/acpica/source/compiler/dttable2.c
> @@ -1876,6 +1876,62 @@ DtCompileTcpa (
> }
>
>
> +/******************************************************************************
> + *
> + * FUNCTION: DtCompileTpm2Rev3
> + *
> + * PARAMETERS: PFieldList - Current field list pointer
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Compile TPM2 revision 3
> + *
> + *****************************************************************************/
> +static ACPI_STATUS
> +DtCompileTpm2Rev3 (
> + void **List)
> +{
> + DT_FIELD **PFieldList = (DT_FIELD **) List;
> + DT_SUBTABLE *Subtable;
> + ACPI_TABLE_TPM23 *Tpm23Header;
> + DT_SUBTABLE *ParentTable;
> + ACPI_STATUS Status = AE_OK;
> +
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm23,
> + &Subtable);
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> + Tpm23Header = ACPI_CAST_PTR (ACPI_TABLE_TPM23, ParentTable->Buffer);
> +
> + /* Subtable type depends on the StartMethod */
> +
> + switch (Tpm23Header->StartMethod)
> + {
> + case ACPI_TPM23_ACPI_START_METHOD:
> +
> + /* Subtable specific to to ARM_SMC */
> +
> + Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm23a,
> + &Subtable);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + ParentTable = DtPeekSubtable ();
> + DtInsertSubtable (ParentTable, Subtable);
> + break;
> +
> + default:
> + break;
> + }
> +
> + return (Status);
> +}
> +
> +
> /******************************************************************************
> *
> * FUNCTION: DtCompileTpm2
> @@ -1897,8 +1953,18 @@ DtCompileTpm2 (
> ACPI_TABLE_TPM2 *Tpm2Header;
> DT_SUBTABLE *ParentTable;
> ACPI_STATUS Status = AE_OK;
> + ACPI_TABLE_HEADER *Header;
>
>
> + ParentTable = DtPeekSubtable ();
> +
> + Header = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer);
> +
> + if (Header->Revision == 3)
> + {
> + return (DtCompileTpm2Rev3 (List));
> + }
> +
> /* Compile the main table */
>
> Status = DtCompileTable (PFieldList, AcpiDmTableInfoTpm2,
> diff --git a/src/acpica/source/compiler/prscan.c b/src/acpica/source/compiler/prscan.c
> index 580b47f0..325569ed 100644
> --- a/src/acpica/source/compiler/prscan.c
> +++ b/src/acpica/source/compiler/prscan.c
> @@ -1259,7 +1259,6 @@ PrPopDirective (
> AslGbl_DirectiveInfo[Info->Directive].Name,
> Info->Argument, AslGbl_IgnoringThisCodeBlock ? "TRUE" : "FALSE");
>
> - ACPI_FREE (Info);
> return (AE_OK);
> }
>
> diff --git a/src/acpica/source/components/debugger/dbxface.c b/src/acpica/source/components/debugger/dbxface.c
> index c661b248..a0f3ed6b 100644
> --- a/src/acpica/source/components/debugger/dbxface.c
> +++ b/src/acpica/source/components/debugger/dbxface.c
> @@ -174,6 +174,12 @@ AcpiDbMethodEnd (
> ACPI_WALK_STATE *WalkState);
> #endif
>
> +#ifdef ACPI_DISASSEMBLER
> +static ACPI_PARSE_OBJECT *
> +AcpiDbGetDisplayOp (
> + ACPI_WALK_STATE *WalkState,
> + ACPI_PARSE_OBJECT *Op);
> +#endif
>
> /*******************************************************************************
> *
> @@ -273,6 +279,74 @@ AcpiDbSignalBreakPoint (
> }
>
>
> +#ifdef ACPI_DISASSEMBLER
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiDbGetDisplayOp
> + *
> + * PARAMETERS: WalkState - Current walk
> + * Op - Current executing op (from aml interpreter)
> + *
> + * RETURN: Opcode to display
> + *
> + * DESCRIPTION: Find the opcode to display during single stepping
> + *
> + ******************************************************************************/
> +
> +static ACPI_PARSE_OBJECT *
> +AcpiDbGetDisplayOp (
> + ACPI_WALK_STATE *WalkState,
> + ACPI_PARSE_OBJECT *Op)
> +{
> + ACPI_PARSE_OBJECT *DisplayOp;
> + ACPI_PARSE_OBJECT *ParentOp;
> +
> + DisplayOp = Op;
> + ParentOp = Op->Common.Parent;
> + if (ParentOp)
> + {
> + if ((WalkState->ControlState) &&
> + (WalkState->ControlState->Common.State ==
> + ACPI_CONTROL_PREDICATE_EXECUTING))
> + {
> + /*
> + * We are executing the predicate of an IF or WHILE statement
> + * Search upwards for the containing IF or WHILE so that the
> + * entire predicate can be displayed.
> + */
> + while (ParentOp)
> + {
> + if ((ParentOp->Common.AmlOpcode == AML_IF_OP) ||
> + (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
> + {
> + DisplayOp = ParentOp;
> + break;
> + }
> + ParentOp = ParentOp->Common.Parent;
> + }
> + }
> + else
> + {
> + while (ParentOp)
> + {
> + if ((ParentOp->Common.AmlOpcode == AML_IF_OP) ||
> + (ParentOp->Common.AmlOpcode == AML_ELSE_OP) ||
> + (ParentOp->Common.AmlOpcode == AML_SCOPE_OP) ||
> + (ParentOp->Common.AmlOpcode == AML_METHOD_OP) ||
> + (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
> + {
> + break;
> + }
> + DisplayOp = ParentOp;
> + ParentOp = ParentOp->Common.Parent;
> + }
> + }
> + }
> + return DisplayOp;
> +}
> +#endif
> +
> +
> /*******************************************************************************
> *
> * FUNCTION: AcpiDbSingleStep
> @@ -296,8 +370,6 @@ AcpiDbSingleStep (
> ACPI_PARSE_OBJECT *Next;
> ACPI_STATUS Status = AE_OK;
> UINT32 OriginalDebugLevel;
> - ACPI_PARSE_OBJECT *DisplayOp;
> - ACPI_PARSE_OBJECT *ParentOp;
> UINT32 AmlOffset;
>
>
> @@ -393,53 +465,11 @@ AcpiDbSingleStep (
> Next = Op->Common.Next;
> Op->Common.Next = NULL;
>
> -
> - DisplayOp = Op;
> - ParentOp = Op->Common.Parent;
> - if (ParentOp)
> - {
> - if ((WalkState->ControlState) &&
> - (WalkState->ControlState->Common.State ==
> - ACPI_CONTROL_PREDICATE_EXECUTING))
> - {
> - /*
> - * We are executing the predicate of an IF or WHILE statement
> - * Search upwards for the containing IF or WHILE so that the
> - * entire predicate can be displayed.
> - */
> - while (ParentOp)
> - {
> - if ((ParentOp->Common.AmlOpcode == AML_IF_OP) ||
> - (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
> - {
> - DisplayOp = ParentOp;
> - break;
> - }
> - ParentOp = ParentOp->Common.Parent;
> - }
> - }
> - else
> - {
> - while (ParentOp)
> - {
> - if ((ParentOp->Common.AmlOpcode == AML_IF_OP) ||
> - (ParentOp->Common.AmlOpcode == AML_ELSE_OP) ||
> - (ParentOp->Common.AmlOpcode == AML_SCOPE_OP) ||
> - (ParentOp->Common.AmlOpcode == AML_METHOD_OP) ||
> - (ParentOp->Common.AmlOpcode == AML_WHILE_OP))
> - {
> - break;
> - }
> - DisplayOp = ParentOp;
> - ParentOp = ParentOp->Common.Parent;
> - }
> - }
> - }
> -
> /* Now we can disassemble and display it */
>
> #ifdef ACPI_DISASSEMBLER
> - AcpiDmDisassemble (WalkState, DisplayOp, ACPI_UINT32_MAX);
> + AcpiDmDisassemble (WalkState, AcpiDbGetDisplayOp (WalkState, Op),
> + ACPI_UINT32_MAX);
> #else
> /*
> * The AML Disassembler is not configured - at least we can
> diff --git a/src/acpica/source/components/dispatcher/dsopcode.c b/src/acpica/source/components/dispatcher/dsopcode.c
> index 038993c7..ca2cd470 100644
> --- a/src/acpica/source/components/dispatcher/dsopcode.c
> +++ b/src/acpica/source/components/dispatcher/dsopcode.c
> @@ -586,6 +586,9 @@ AcpiDsEvalRegionOperands (
> ObjDesc, ACPI_FORMAT_UINT64 (ObjDesc->Region.Address),
> ObjDesc->Region.Length));
>
> + Status = AcpiUtAddAddressRange (ObjDesc->Region.SpaceId,
> + ObjDesc->Region.Address, ObjDesc->Region.Length, Node);
> +
> /* Now the address and length are valid for this opregion */
>
> ObjDesc->Region.Flags |= AOPOBJ_DATA_VALID;
> diff --git a/src/acpica/source/components/dispatcher/dswload2.c b/src/acpica/source/components/dispatcher/dswload2.c
> index 9bc6ecfa..4b6e41d8 100644
> --- a/src/acpica/source/components/dispatcher/dswload2.c
> +++ b/src/acpica/source/components/dispatcher/dswload2.c
> @@ -448,6 +448,15 @@ AcpiDsLoad2BeginOp (
> }
> #endif
>
> + /*
> + * For name creation opcodes, the full namepath prefix must
> + * exist, except for the final (new) nameseg.
> + */
> + if (WalkState->OpInfo->Flags & AML_NAMED)
> + {
> + Flags |= ACPI_NS_PREFIX_MUST_EXIST;
> + }
> +
> /* Add new entry or lookup existing entry */
>
> Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType,
> diff --git a/src/acpica/source/components/namespace/nsaccess.c b/src/acpica/source/components/namespace/nsaccess.c
> index af97c51f..11c652e0 100644
> --- a/src/acpica/source/components/namespace/nsaccess.c
> +++ b/src/acpica/source/components/namespace/nsaccess.c
> @@ -421,6 +421,7 @@ AcpiNsLookup (
> ACPI_OBJECT_TYPE ThisSearchType;
> UINT32 SearchParentFlag = ACPI_NS_SEARCH_PARENT;
> UINT32 LocalFlags;
> + ACPI_INTERPRETER_MODE LocalInterpreterMode;
>
>
> ACPI_FUNCTION_TRACE (NsLookup);
> @@ -670,6 +671,7 @@ AcpiNsLookup (
> */
> ThisSearchType = ACPI_TYPE_ANY;
> CurrentNode = ThisNode;
> +
> while (NumSegments && CurrentNode)
> {
> NumSegments--;
> @@ -704,6 +706,16 @@ AcpiNsLookup (
> }
> }
>
> + /* Handle opcodes that create a new NameSeg via a full NamePath */
> +
> + LocalInterpreterMode = InterpreterMode;
> + if ((Flags & ACPI_NS_PREFIX_MUST_EXIST) && (NumSegments > 0))
> + {
> + /* Every element of the path must exist (except for the final NameSeg) */
> +
> + LocalInterpreterMode = ACPI_IMODE_EXECUTE;
> + }
> +
> /* Extract one ACPI name from the front of the pathname */
>
> ACPI_MOVE_32_TO_32 (&SimpleName, Path);
> @@ -711,11 +723,18 @@ AcpiNsLookup (
> /* Try to find the single (4 character) ACPI name */
>
> Status = AcpiNsSearchAndEnter (SimpleName, WalkState, CurrentNode,
> - InterpreterMode, ThisSearchType, LocalFlags, &ThisNode);
> + LocalInterpreterMode, ThisSearchType, LocalFlags, &ThisNode);
> if (ACPI_FAILURE (Status))
> {
> if (Status == AE_NOT_FOUND)
> {
> +#if !defined ACPI_ASL_COMPILER /* Note: iASL reports this error by itself, not needed here */
> + if (Flags & ACPI_NS_PREFIX_MUST_EXIST)
> + {
> + AcpiOsPrintf (ACPI_MSG_BIOS_ERROR
> + "Object does not exist: %4.4s\n", &SimpleName);
> + }
> +#endif
> /* Name not found in ACPI namespace */
>
> ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,
> diff --git a/src/acpica/source/components/parser/psloop.c b/src/acpica/source/components/parser/psloop.c
> index ef517b54..9625834c 100644
> --- a/src/acpica/source/components/parser/psloop.c
> +++ b/src/acpica/source/components/parser/psloop.c
> @@ -298,7 +298,7 @@ AcpiPsGetArguments (
> * future. Use of this option can cause problems with AML code that
> * depends upon in-order immediate execution of module-level code.
> */
> - if (AcpiGbl_GroupModuleLevelCode &&
> + if (!AcpiGbl_ExecuteTablesAsMethods &&
> (WalkState->PassNumber <= ACPI_IMODE_LOAD_PASS2) &&
> ((WalkState->ParseFlags & ACPI_PARSE_DISASSEMBLE) == 0))
> {
> @@ -566,6 +566,7 @@ AcpiPsParseLoop (
> ACPI_PARSE_OBJECT *Op = NULL; /* current op */
> ACPI_PARSE_STATE *ParserState;
> UINT8 *AmlOpStart = NULL;
> + UINT8 OpcodeLength;
>
>
> ACPI_FUNCTION_TRACE_PTR (PsParseLoop, WalkState);
> @@ -654,7 +655,7 @@ AcpiPsParseLoop (
> * status to AE_OK to proceed with the table load.
> */
> if ((WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL) &&
> - Status == AE_ALREADY_EXISTS)
> + ((Status == AE_ALREADY_EXISTS) || (Status == AE_NOT_FOUND)))
> {
> Status = AE_OK;
> }
> @@ -686,9 +687,20 @@ AcpiPsParseLoop (
> * the scope op because the parse failure indicates that
> * the device may not exist.
> */
> - ACPI_ERROR ((AE_INFO, "Skip parsing opcode %s",
> - AcpiPsGetOpcodeName (WalkState->Opcode)));
> - WalkState->ParserState.Aml = WalkState->Aml + 1;
> + ACPI_INFO (("Skipping parse of AML opcode: %s (0x%4.4X)",
> + AcpiPsGetOpcodeName (WalkState->Opcode), WalkState->Opcode));
> +
> + /*
> + * Determine the opcode length before skipping the opcode.
> + * An opcode can be 1 byte or 2 bytes in length.
> + */
> + OpcodeLength = 1;
> + if ((WalkState->Opcode & 0xFF00) == AML_EXTENDED_OPCODE)
> + {
> + OpcodeLength = 2;
> + }
> + WalkState->ParserState.Aml = WalkState->Aml + OpcodeLength;
> +
> WalkState->ParserState.Aml =
> AcpiPsGetNextPackageEnd(&WalkState->ParserState);
> WalkState->Aml = WalkState->ParserState.Aml;
> diff --git a/src/acpica/source/components/parser/psobject.c b/src/acpica/source/components/parser/psobject.c
> index 8d6f81bd..ca7ab0ae 100644
> --- a/src/acpica/source/components/parser/psobject.c
> +++ b/src/acpica/source/components/parser/psobject.c
> @@ -773,7 +773,7 @@ AcpiPsCompleteOp (
> * because there could be correct AML beyond the parts that caused
> * the runtime error.
> */
> - ACPI_ERROR ((AE_INFO, "Ignore error and continue table load"));
> + ACPI_INFO (("Ignoring error and continuing table load"));
> return_ACPI_STATUS (AE_OK);
> }
> return_ACPI_STATUS (Status);
> diff --git a/src/acpica/source/components/tables/tbxfload.c b/src/acpica/source/components/tables/tbxfload.c
> index 0119b684..a956806e 100644
> --- a/src/acpica/source/components/tables/tbxfload.c
> +++ b/src/acpica/source/components/tables/tbxfload.c
> @@ -219,7 +219,7 @@ AcpiLoadTables (
> "While loading namespace from ACPI tables"));
> }
>
> - if (AcpiGbl_ExecuteTablesAsMethods || !AcpiGbl_GroupModuleLevelCode)
> + if (AcpiGbl_ExecuteTablesAsMethods)
> {
> /*
> * If the module-level code support is enabled, initialize the objects
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index b774b20f..edd108d2 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -561,6 +561,8 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2a[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm211[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm23[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm23a[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoUefi[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc0[];
> diff --git a/src/acpica/source/include/acnamesp.h b/src/acpica/source/include/acnamesp.h
> index 1e3db8d1..7c2083d3 100644
> --- a/src/acpica/source/include/acnamesp.h
> +++ b/src/acpica/source/include/acnamesp.h
> @@ -177,6 +177,7 @@
> #define ACPI_NS_TEMPORARY 0x0040
> #define ACPI_NS_OVERRIDE_IF_FOUND 0x0080
> #define ACPI_NS_EARLY_INIT 0x0100
> +#define ACPI_NS_PREFIX_MUST_EXIST 0x0200
>
> /* Flags for AcpiNsWalkNamespace */
>
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index aaf284cb..27e9aa7f 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 0x20181003
> +#define ACPI_CA_VERSION 0x20181031
>
> #include "acconfig.h"
> #include "actypes.h"
> @@ -300,13 +300,6 @@ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_CopyDsdtLocally, FALSE);
> */
> ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DoNotUseXsdt, FALSE);
>
> -/*
> - * Optionally support group module level code.
> - * NOTE, this is essentially obsolete and will be removed soon
> - * (01/2018).
> - */
> -ACPI_INIT_GLOBAL (UINT8, AcpiGbl_GroupModuleLevelCode, FALSE);
> -
> /*
> * Optionally support module level code by parsing an entire table as
> * a method as it is loaded. Default is TRUE.
> diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h
> index 347a3940..19eeeccb 100644
> --- a/src/acpica/source/include/actbinfo.h
> +++ b/src/acpica/source/include/actbinfo.h
> @@ -194,6 +194,7 @@
> #define ACPI_STAO_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_STAO,f)
> #define ACPI_TCPA_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_HDR,f)
> #define ACPI_TPM2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM2,f)
> +#define ACPI_TPM23_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM23,f)
> #define ACPI_UEFI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_UEFI,f)
> #define ACPI_WAET_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WAET,f)
> #define ACPI_WDAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WDAT,f)
> @@ -337,6 +338,7 @@
> #define ACPI_TCPA_SERVER_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_SERVER,f)
> #define ACPI_TPM2A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TPM2_TRAILER,f)
> #define ACPI_TPM211_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TPM2_ARM_SMC,f)
> +#define ACPI_TPM23A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TPM23_TRAILER,f)
> #define ACPI_VRTC0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_VRTC_ENTRY,f)
> #define ACPI_WDAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WDAT_ENTRY,f)
>
> diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
> index d4c15838..99b466c1 100644
> --- a/src/acpica/source/include/actbl3.h
> +++ b/src/acpica/source/include/actbl3.h
> @@ -552,6 +552,34 @@ typedef struct acpi_table_tcpa_server
> *
> ******************************************************************************/
>
> +/* Revision 3 */
> +
> +typedef struct acpi_table_tpm23
> +{
> + ACPI_TABLE_HEADER Header; /* Common ACPI table header */
> + UINT32 Reserved;
> + UINT64 ControlAddress;
> + UINT32 StartMethod;
> +
> +} ACPI_TABLE_TPM23;
> +
> +/* Value for StartMethod above */
> +
> +#define ACPI_TPM23_ACPI_START_METHOD 2
> +
> +/*
> + * Optional trailer for revision 3. If start method is 2, there is a 4 byte
> + * reserved area of all zeros.
> + */
> +typedef struct acpi_tmp23_trailer
> +{
> + UINT32 Reserved;
> +
> +} ACPI_TPM23_TRAILER;
> +
> +
> +/* Revision 4 */
> +
> typedef struct acpi_table_tpm2
> {
> ACPI_TABLE_HEADER Header; /* Common ACPI table header */
Acked-by: Ivan Hu <ivan.hu at canonical.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/fwts-devel/attachments/20181106/8d30ea01/attachment-0001.sig>
More information about the fwts-devel
mailing list