ACK: [PATCH] ACPICA: Update to version 20200326
ivanhu
ivan.hu at canonical.com
Fri Mar 27 02:17:52 UTC 2020
On 3/27/20 7:02 AM, 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/hyperkitty/list/devel@acpica.org/thread/BDLNZMTZ5R32EY7UQPXFY6CBKH5OKBSJ
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> src/acpica/source/common/ahtable.c | 2 +-
> src/acpica/source/common/dmtable.c | 3 +-
> src/acpica/source/common/dmtbdump2.c | 25 +-
> src/acpica/source/common/dmtbinfo2.c | 16 +-
> src/acpica/source/common/dmtbinfo3.c | 2 +-
> src/acpica/source/compiler/aslcompile.c | 1 +
> src/acpica/source/compiler/aslcompiler.h | 8 +-
> src/acpica/source/compiler/aslcompiler.l | 20 +-
> src/acpica/source/compiler/asldefine.h | 1 +
> src/acpica/source/compiler/aslerror.c | 125 +++++++++-
> src/acpica/source/compiler/aslglobal.h | 1 +
> src/acpica/source/compiler/aslload.c | 88 +++++--
> src/acpica/source/compiler/asloptions.c | 2 +-
> src/acpica/source/compiler/asltypes.h | 31 ++-
> src/acpica/source/compiler/dtcompiler.h | 1 -
> src/acpica/source/compiler/dtcompilerparser.l | 1 -
> src/acpica/source/compiler/dtcompilerparser.y | 1 -
> src/acpica/source/compiler/dtparser.l | 2 +-
> src/acpica/source/compiler/dttable1.c | 10 +-
> src/acpica/source/compiler/dtutils.c | 3 +-
> src/acpica/source/compiler/prparser.l | 2 +-
> .../source/components/debugger/dbinput.c | 19 +-
> .../source/components/debugger/dbxface.c | 1 +
> .../source/components/dispatcher/dswexec.c | 32 ++-
> .../source/components/dispatcher/dswload.c | 2 -
> .../source/components/dispatcher/dswload2.c | 37 +++
> .../source/components/hardware/hwsleep.c | 4 +-
> .../source/components/namespace/nsnames.c | 8 +-
> .../source/components/utilities/utdecode.c | 2 +-
> .../source/components/utilities/utdelete.c | 9 +-
> src/acpica/source/include/acdisasm.h | 1 +
> src/acpica/source/include/acnamesp.h | 4 +
> src/acpica/source/include/acpixf.h | 2 +-
> src/acpica/source/include/actbinfo.h | 3 +-
> src/acpica/source/include/actbl2.h | 24 +-
> src/acpica/source/include/actbl3.h | 6 +-
> src/acpica/source/include/acuuid.h | 2 +-
> src/acpica/source/tools/acpiexec/aecommon.h | 20 +-
> src/acpica/source/tools/acpiexec/aeinitfile.c | 220 +++++++++++-------
> 39 files changed, 568 insertions(+), 173 deletions(-)
>
> diff --git a/src/acpica/source/common/ahtable.c b/src/acpica/source/common/ahtable.c
> index 25fd525e..32d5dedb 100644
> --- a/src/acpica/source/common/ahtable.c
> +++ b/src/acpica/source/common/ahtable.c
> @@ -258,7 +258,7 @@ const AH_TABLE AcpiGbl_SupportedTables[] =
> {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_WSMT, "Windows SMM Security Mitigations Table"},
> {ACPI_SIG_XENV, "Xen Environment table"},
> {ACPI_SIG_XSDT, "Extended System Description Table"},
> {NULL, NULL}
> diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
> index 02220d26..5896b2f2 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -1676,7 +1676,8 @@ AcpiDmDumpTable (
> Temp8 = *Target;
> switch (Temp8)
> {
> - case ACPI_IVRS_TYPE_HARDWARE:
> + case ACPI_IVRS_TYPE_HARDWARE1:
> + case ACPI_IVRS_TYPE_HARDWARE2:
>
> Name = AcpiDmIvrsSubnames[0];
> break;
> diff --git a/src/acpica/source/common/dmtbdump2.c b/src/acpica/source/common/dmtbdump2.c
> index 95eea6d9..688a2cf9 100644
> --- a/src/acpica/source/common/dmtbdump2.c
> +++ b/src/acpica/source/common/dmtbdump2.c
> @@ -475,11 +475,16 @@ AcpiDmDumpIvrs (
>
> switch (Subtable->Type)
> {
> - case ACPI_IVRS_TYPE_HARDWARE:
> + case ACPI_IVRS_TYPE_HARDWARE1:
>
> InfoTable = AcpiDmTableInfoIvrs0;
> break;
>
> + case ACPI_IVRS_TYPE_HARDWARE2:
> +
> + InfoTable = AcpiDmTableInfoIvrs01;
> + break;
> +
> case ACPI_IVRS_TYPE_MEMORY1:
> case ACPI_IVRS_TYPE_MEMORY2:
> case ACPI_IVRS_TYPE_MEMORY3:
> @@ -514,11 +519,21 @@ AcpiDmDumpIvrs (
>
> /* The hardware subtable can contain multiple device entries */
>
> - if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE)
> + if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1 ||
> + Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2)
> {
> - EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE);
> - DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
> - sizeof (ACPI_IVRS_HARDWARE));
> + if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1)
> + {
> + EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE1);
> + DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
> + sizeof (ACPI_IVRS_HARDWARE1));
> + }
> + else if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2)
> + {
> + EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE2);
> + DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable,
> + sizeof (ACPI_IVRS_HARDWARE2));
> + }
>
> while (EntryOffset < (Offset + Subtable->Length))
> {
> diff --git a/src/acpica/source/common/dmtbinfo2.c b/src/acpica/source/common/dmtbinfo2.c
> index 79802830..c000a921 100644
> --- a/src/acpica/source/common/dmtbinfo2.c
> +++ b/src/acpica/source/common/dmtbinfo2.c
> @@ -403,7 +403,21 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs0[] =
> {ACPI_DMT_UINT64, ACPI_IVRS0_OFFSET (BaseAddress), "Base Address", 0},
> {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (PciSegmentGroup), "PCI Segment Group", 0},
> {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (Info), "Virtualization Info", 0},
> - {ACPI_DMT_UINT32, ACPI_IVRS0_OFFSET (Reserved), "Reserved", 0},
> + {ACPI_DMT_UINT32, ACPI_IVRS0_OFFSET (FeatureReporting), "Feature Reporting", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
> +/* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs01[] =
> +{
> + {ACPI_DMT_UINT16, ACPI_IVRS01_OFFSET (CapabilityOffset), "Capability Offset", 0},
> + {ACPI_DMT_UINT64, ACPI_IVRS01_OFFSET (BaseAddress), "Base Address", 0},
> + {ACPI_DMT_UINT16, ACPI_IVRS01_OFFSET (PciSegmentGroup), "PCI Segment Group", 0},
> + {ACPI_DMT_UINT16, ACPI_IVRS01_OFFSET (Info), "Virtualization Info", 0},
> + {ACPI_DMT_UINT32, ACPI_IVRS01_OFFSET (Attributes), "Attributes", 0},
> + {ACPI_DMT_UINT64, ACPI_IVRS01_OFFSET (EfrRegisterImage), "EFR Image", 0},
> + {ACPI_DMT_UINT64, ACPI_IVRS01_OFFSET (Reserved), "Reserved", 0},
> ACPI_DMT_TERMINATOR
> };
>
> diff --git a/src/acpica/source/common/dmtbinfo3.c b/src/acpica/source/common/dmtbinfo3.c
> index 07a26c2b..f4092c24 100644
> --- a/src/acpica/source/common/dmtbinfo3.c
> +++ b/src/acpica/source/common/dmtbinfo3.c
> @@ -691,7 +691,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[] =
>
> /*******************************************************************************
> *
> - * WSMT - Windows SMM Security Migrations Table
> + * WSMT - Windows SMM Security Mitigations Table
> *
> ******************************************************************************/
>
> diff --git a/src/acpica/source/compiler/aslcompile.c b/src/acpica/source/compiler/aslcompile.c
> index 9481b6bb..787a5444 100644
> --- a/src/acpica/source/compiler/aslcompile.c
> +++ b/src/acpica/source/compiler/aslcompile.c
> @@ -283,6 +283,7 @@ CmDoCompile (
>
> LsDumpParseTree ();
>
> + UtEndEvent (Event);
> UtEndEvent (FullCompile);
> return (AE_OK);
>
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index 9bebc380..82d777d8 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -488,7 +488,7 @@ AslCheckExpectedExceptions (
> void);
>
> ACPI_STATUS
> -AslExpectException (
> +AslLogExpectedException (
> char *MessageIdString);
>
> ACPI_STATUS
> @@ -501,9 +501,15 @@ AslDisableException (
>
> BOOLEAN
> AslIsExceptionIgnored (
> + char *Filename,
> + UINT32 LineNumber,
> UINT8 Level,
> UINT16 MessageId);
>
> +void
> +AslLogExpectedExceptionByLine (
> + char *MessageIdString);
> +
> void
> AslCoreSubsystemError (
> ACPI_PARSE_OBJECT *Op,
> diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l
> index 797f9899..4c3fbde3 100644
> --- a/src/acpica/source/compiler/aslcompiler.l
> +++ b/src/acpica/source/compiler/aslcompiler.l
> @@ -156,7 +156,6 @@
>
> #include <stdlib.h>
> #include <string.h>
> -YYSTYPE AslCompilerlval;
>
> /*
> * Generation: Use the following command line:
> @@ -195,6 +194,7 @@ count (int type);
>
> LeadNameChar [A-Za-z_]
> DigitChar [0-9]
> +ErrorCode [(][ ]*[1-9][0-9][0-9][0-9][ ]*[)]
> OctalChar [0-7]
> HexDigitChar [A-Fa-f0-9]
> RootChar [\\]
> @@ -692,7 +692,7 @@ NamePathTail [.]{NameSeg}
> "IPMI" { count (0); return (PARSEOP_REGIONSPACE_IPMI); }
> "GeneralPurposeIo" { count (0); return (PARSEOP_REGIONSPACE_GPIO); } /* ACPI 5.0 */
> "GenericSerialBus" { count (0); return (PARSEOP_REGIONSPACE_GSBUS); } /* ACPI 5.0 */
> -"PlatformCommChannel" { count (0); return (PARSEOP_REGIONSPACE_PCC); } /* ACPI 5.0 */
> +"PCC" { count (0); return (PARSEOP_REGIONSPACE_PCC); } /* ACPI 5.0 */
> "FFixedHW" { count (0); return (PARSEOP_REGIONSPACE_FFIXEDHW); }
>
> /* ResourceTypeKeyword: Resource Usage - Resource Descriptors */
> @@ -810,6 +810,22 @@ NamePathTail [.]{NameSeg}
> "__LINE__" { count (0); return (PARSEOP___LINE__); }
> "__PATH__" { count (0); return (PARSEOP___PATH__); }
> "__METHOD__" { count (0); return (PARSEOP___METHOD__); }
> +"__EXPECT__"{ErrorCode} { char *s;
> + int index = 0;
> + count (0);
> + while (!isdigit (AslCompilertext[index]))
> + {
> + index++;
> + }
> +
> + /*
> + * The eror code is contained inside the
> + * {ErrorCode} pattern. Extract it and log it
> + * as the expected error code.
> + */
> + s = UtLocalCacheCalloc (ASL_ERROR_CODE_LENGTH + 1);
> + memcpy (s, AslCompilertext + index, ASL_ERROR_CODE_LENGTH);
> + AslLogExpectedExceptionByLine (s); }
>
> {NameSeg} { char *s;
> count (0);
> diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h
> index 12a4cdd5..2627a58a 100644
> --- a/src/acpica/source/compiler/asldefine.h
> +++ b/src/acpica/source/compiler/asldefine.h
> @@ -227,6 +227,7 @@
> #define ASL_NO_ABORT FALSE
> #define ASL_EOF ACPI_UINT32_MAX
> #define ASL_IGNORE_LINE (ACPI_UINT32_MAX -1)
> +#define ASL_ERROR_CODE_LENGTH 4
>
>
> /* Listings */
> diff --git a/src/acpica/source/compiler/aslerror.c b/src/acpica/source/compiler/aslerror.c
> index 1931fffc..8fae779d 100644
> --- a/src/acpica/source/compiler/aslerror.c
> +++ b/src/acpica/source/compiler/aslerror.c
> @@ -162,6 +162,8 @@ AeAddToErrorLog (
>
> static BOOLEAN
> AslIsExceptionExpected (
> + char *Filename,
> + UINT32 LineNumber,
> UINT8 Level,
> UINT16 MessageId);
>
> @@ -170,7 +172,8 @@ AslIsExceptionDisabled (
> UINT8 Level,
> UINT16 MessageId);
>
> -static void AslInitEnode (
> +static void
> +AslInitEnode (
> ASL_ERROR_MSG **Enode,
> UINT8 Level,
> UINT16 MessageId,
> @@ -956,7 +959,7 @@ AslCommonError (
> {
> /* Check if user wants to ignore this exception */
>
> - if (AslIsExceptionIgnored (Level, MessageId))
> + if (AslIsExceptionIgnored (Filename, LogicalLineNumber, Level, MessageId))
> {
> return;
> }
> @@ -1087,6 +1090,8 @@ GetModifiedLevel (
>
> BOOLEAN
> AslIsExceptionIgnored (
> + char *Filename,
> + UINT32 LineNumber,
> UINT8 Level,
> UINT16 MessageId)
> {
> @@ -1096,7 +1101,8 @@ AslIsExceptionIgnored (
> /* Note: this allows exception to be disabled and expected */
>
> ExceptionIgnored = AslIsExceptionDisabled (Level, MessageId);
> - ExceptionIgnored |= AslIsExceptionExpected (Level, MessageId);
> + ExceptionIgnored |=
> + AslIsExceptionExpected (Filename, LineNumber, Level, MessageId);
>
> return (AslGbl_AllExceptionsDisabled || ExceptionIgnored);
> }
> @@ -1104,7 +1110,7 @@ AslIsExceptionIgnored (
>
> /*******************************************************************************
> *
> - * FUNCTION: AslCheckExpectException
> + * FUNCTION: AslCheckExpectedException
> *
> * PARAMETERS: none
> *
> @@ -1120,6 +1126,8 @@ AslCheckExpectedExceptions (
> void)
> {
> UINT8 i;
> + ASL_EXPECTED_MSG_NODE *Current = AslGbl_ExpectedErrorCodeList;
> + ASL_LOCATION_NODE *LocationNode;
>
>
> for (i = 0; i < AslGbl_ExpectedMessagesIndex; ++i)
> @@ -1130,12 +1138,32 @@ AslCheckExpectedExceptions (
> AslGbl_ExpectedMessages[i].MessageIdStr);
> }
> }
> +
> + while (Current)
> + {
> + LocationNode = Current->LocationList;
> +
> + while (LocationNode)
> + {
> + if (!LocationNode->MessageReceived)
> + {
> + AslCommonError (ASL_ERROR, ASL_MSG_EXCEPTION_NOT_RECEIVED,
> + LocationNode->LineNumber, LocationNode->LineNumber,
> + LocationNode->LogicalByteOffset, LocationNode->Column,
> + LocationNode->Filename, Current->MessageIdStr);
> + }
> +
> + LocationNode = LocationNode->Next;
> + }
> +
> + Current = Current->Next;
> + }
> }
>
>
> /*******************************************************************************
> *
> - * FUNCTION: AslExpectException
> + * FUNCTION: AslLogExpectedException
> *
> * PARAMETERS: MessageIdString - ID of excepted exception during compile
> *
> @@ -1148,7 +1176,7 @@ AslCheckExpectedExceptions (
> ******************************************************************************/
>
> ACPI_STATUS
> -AslExpectException (
> +AslLogExpectedException (
> char *MessageIdString)
> {
> UINT32 MessageId;
> @@ -1182,6 +1210,61 @@ AslExpectException (
> }
>
>
> +/*******************************************************************************
> + *
> + * FUNCTION: AslLogExpectedExceptionByLine
> + *
> + * PARAMETERS: MessageIdString - ID of excepted exception during compile
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Enter a message ID into the global expected messages table
> + * based on file and line number. If these messages are not raised
> + * during the compilation, throw an error.
> + *
> + ******************************************************************************/
> +
> +void
> +AslLogExpectedExceptionByLine (
> + char *MessageIdString)
> +{
> + ASL_LOCATION_NODE *NewErrorLocationNode;
> + ASL_EXPECTED_MSG_NODE *Current = AslGbl_ExpectedErrorCodeList;
> + UINT32 MessageId;
> +
> +
> + NewErrorLocationNode = UtLocalCalloc (sizeof (ASL_LOCATION_NODE));
> +
> + NewErrorLocationNode->LineNumber = AslGbl_CurrentLineNumber;
> + NewErrorLocationNode->Filename = AslGbl_Files[ASL_FILE_INPUT].Filename;
> + NewErrorLocationNode->LogicalByteOffset = AslGbl_CurrentLineOffset;
> + NewErrorLocationNode->Column = AslGbl_CurrentColumn;
> +
> + MessageId = (UINT32) strtoul (MessageIdString, NULL, 0);
> +
> + /* search the existing list for a matching message ID */
> +
> + while (Current && Current->MessageId != MessageId )
> + {
> + Current = Current->Next;
> + }
> + if (!Current)
> + {
> + /* ID was not found, create a new node for this message ID */
> +
> + Current = UtLocalCalloc (sizeof (ASL_EXPECTED_MSG_NODE));
> +
> + Current->Next = AslGbl_ExpectedErrorCodeList;
> + Current->MessageIdStr = MessageIdString;
> + Current->MessageId = MessageId;
> + AslGbl_ExpectedErrorCodeList = Current;
> + }
> +
> + NewErrorLocationNode->Next = Current->LocationList;
> + Current->LocationList = NewErrorLocationNode;
> +}
> +
> +
> /*******************************************************************************
> *
> * FUNCTION: AslDisableException
> @@ -1272,6 +1355,7 @@ AslElevateException (
> return (AE_OK);
> }
>
> +
> /*******************************************************************************
> *
> * FUNCTION: AslIsExceptionDisabled
> @@ -1288,9 +1372,13 @@ AslElevateException (
>
> static BOOLEAN
> AslIsExceptionExpected (
> + char *Filename,
> + UINT32 LineNumber,
> UINT8 Level,
> UINT16 MessageId)
> {
> + ASL_EXPECTED_MSG_NODE *Current = AslGbl_ExpectedErrorCodeList;
> + ASL_LOCATION_NODE *CurrentErrorLocation;
> UINT32 EncodedMessageId;
> UINT32 i;
>
> @@ -1308,6 +1396,28 @@ AslIsExceptionExpected (
> }
> }
>
> + while (Current && Current->MessageId != EncodedMessageId)
> + {
> + Current = Current->Next;
> + }
> + if (!Current)
> + {
> + return (FALSE);
> + }
> +
> + CurrentErrorLocation = Current->LocationList;
> +
> + while (CurrentErrorLocation)
> + {
> + if (!strcmp (CurrentErrorLocation->Filename, Filename) &&
> + CurrentErrorLocation->LineNumber == LineNumber)
> + {
> + return (CurrentErrorLocation->MessageReceived = TRUE);
> + }
> +
> + CurrentErrorLocation = CurrentErrorLocation->Next;
> + }
> +
> return (FALSE);
> }
>
> @@ -1410,7 +1520,8 @@ AslDualParseOpError (
>
> /* Check if user wants to ignore this exception */
>
> - if (AslIsExceptionIgnored (Level, MainMsgId) || !MainOp)
> + if (!MainOp || AslIsExceptionIgnored (MainOp->Asl.Filename,
> + MainOp->Asl.LogicalLineNumber, Level, MainMsgId))
> {
> return;
> }
> diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h
> index 1a66dea9..231ed876 100644
> --- a/src/acpica/source/compiler/aslglobal.h
> +++ b/src/acpica/source/compiler/aslglobal.h
> @@ -420,6 +420,7 @@ ASL_EXTERN char ASL_INIT_GLOBAL (*AslGbl_TableSignature, "NO
> ASL_EXTERN char ASL_INIT_GLOBAL (*AslGbl_TableId, "NO_ID");
> ASL_EXTERN ASL_FILE_INFO ASL_INIT_GLOBAL (*AslGbl_Files, NULL);
> ASL_EXTERN ASL_GLOBAL_FILE_NODE ASL_INIT_GLOBAL (*AslGbl_FilesList, NULL);
> +ASL_EXTERN ASL_EXPECTED_MSG_NODE ASL_INIT_GLOBAL (*AslGbl_ExpectedErrorCodeList, NULL);
>
> /* Specific to the -q option */
>
> diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c
> index 0d26c641..bd2fc977 100644
> --- a/src/acpica/source/compiler/aslload.c
> +++ b/src/acpica/source/compiler/aslload.c
> @@ -1018,6 +1018,74 @@ FinishNode:
> }
>
>
> +/*******************************************************************************
> + *
> + * FUNCTION: LdAnalyzeExternals
> + *
> + * PARAMETERS: Type1
> + * Type2
> + *
> + * RETURN: BOOLEAN
> + *
> + * DESCRIPTION: Match Type1 and Type2 with the assumption that one might be
> + * using external types and another might be using local types.
> + * This should be used to compare the types found in external
> + * declarations with types found in other external declarations or
> + * named object declaration. This should not be used to match two
> + * object type declarations.
> + *
> + ******************************************************************************/
> +
> +static BOOLEAN
> +LdTypesMatchExternType (
> + ACPI_OBJECT_TYPE Type1,
> + ACPI_OBJECT_TYPE Type2)
> +{
> + BOOLEAN Type1IsLocal = Type1 > ACPI_TYPE_EXTERNAL_MAX;
> + BOOLEAN Type2IsLocal = Type2 > ACPI_TYPE_EXTERNAL_MAX;
> + ACPI_OBJECT_TYPE ExternalType;
> + ACPI_OBJECT_TYPE LocalType;
> +
> +
> + /*
> + * The inputs could represent types that are local to ACPICA or types that
> + * are known externally. Some local types, such as the OperationRegion
> + * field units, are defined with more granularity than ACPICA local types.
> + *
> + * Therefore, map the local types to the external types before matching.
> + */
> + if (Type1IsLocal && !Type2IsLocal)
> + {
> + LocalType = Type1;
> + ExternalType = Type2;
> + }
> + else if (!Type1IsLocal && Type2IsLocal)
> + {
> + LocalType = Type2;
> + ExternalType = Type1;
> + }
> + else
> + {
> + return (Type1 == Type2);
> + }
> +
> + switch (LocalType)
> + {
> + case ACPI_TYPE_LOCAL_REGION_FIELD:
> + case ACPI_TYPE_LOCAL_BANK_FIELD:
> + case ACPI_TYPE_LOCAL_INDEX_FIELD:
> +
> + LocalType = ACPI_TYPE_FIELD_UNIT;
> + break;
> +
> + default:
> + break;
> + }
> +
> + return (LocalType == ExternalType);
> +}
> +
> +
> /*******************************************************************************
> *
> * FUNCTION: LdAnalyzeExternals
> @@ -1072,12 +1140,12 @@ LdAnalyzeExternals (
>
> if ((ActualOpType != ACPI_TYPE_ANY) &&
> (ActualExternalOpType != ACPI_TYPE_ANY) &&
> - (ActualExternalOpType != ActualOpType))
> + !LdTypesMatchExternType (ActualExternalOpType, ActualOpType))
> {
> if (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL &&
> Node->Op->Asl.ParseOpcode == PARSEOP_EXTERNAL)
> {
> - AslDualParseOpError (ASL_ERROR,
> + AslDualParseOpError (ASL_WARNING,
> ASL_MSG_DUPLICATE_EXTERN_MISMATCH, Op, NULL,
> ASL_MSG_DUPLICATE_EXTERN_FOUND_HERE, Node->Op, NULL);
> }
> @@ -1094,7 +1162,7 @@ LdAnalyzeExternals (
> ExternalOp = Node->Op;
> ActualOp = Op;
> }
> - AslDualParseOpError (ASL_ERROR,
> + AslDualParseOpError (ASL_WARNING,
> ASL_MSG_DECLARATION_TYPE_MISMATCH, ExternalOp, NULL,
> ASL_MSG_TYPE_MISMATCH_FOUND_HERE, ActualOp, NULL);
> }
> @@ -1139,18 +1207,8 @@ LdAnalyzeExternals (
> {
> /* Allow update of externals of unknown type. */
>
> - if (AcpiNsOpensScope (ExternalOpType))
> - {
> - Node->Type = (UINT8) ExternalOpType;
> - Status = AE_OK;
> - }
> - else
> - {
> - sprintf (AslGbl_MsgBuffer, "%s [%s]", Op->Asl.ExternalName,
> - AcpiUtGetTypeName (Node->Type));
> - AslError (ASL_ERROR, ASL_MSG_SCOPE_TYPE, Op, AslGbl_MsgBuffer);
> - Status = AE_ERROR;
> - }
> + Node->Type = (UINT8) ExternalOpType;
> + Status = AE_OK;
> }
>
> return (Status);
> diff --git a/src/acpica/source/compiler/asloptions.c b/src/acpica/source/compiler/asloptions.c
> index e3b3f8e7..4bf9465b 100644
> --- a/src/acpica/source/compiler/asloptions.c
> +++ b/src/acpica/source/compiler/asloptions.c
> @@ -948,7 +948,7 @@ AslDoOptions (
> return (-1);
> }
>
> - Status = AslExpectException (AcpiGbl_Optarg);
> + Status = AslLogExpectedException (AcpiGbl_Optarg);
> if (ACPI_FAILURE (Status))
> {
> return (-1);
> diff --git a/src/acpica/source/compiler/asltypes.h b/src/acpica/source/compiler/asltypes.h
> index cd54dbc0..33c547e4 100644
> --- a/src/acpica/source/compiler/asltypes.h
> +++ b/src/acpica/source/compiler/asltypes.h
> @@ -381,12 +381,37 @@ typedef struct asl_error_msg
>
> typedef struct asl_expected_message
> {
> - UINT32 MessageId;
> - char *MessageIdStr;
> - BOOLEAN MessageReceived;
> + UINT32 MessageId;
> + char *MessageIdStr;
> + BOOLEAN MessageReceived;
>
> } ASL_EXPECTED_MESSAGE;
>
> +/*
> + * An entry in the line-based expected messages list
> + *
> + * TBD: might be possible to merge this with ASL_EXPECTED_MESSAGE
> + */
> +typedef struct asl_expected_msg_node
> +{
> + struct asl_expected_msg_node *Next;
> + UINT32 MessageId;
> + char *MessageIdStr;
> + struct asl_location_node *LocationList;
> +
> +} ASL_EXPECTED_MSG_NODE;
> +
> +typedef struct asl_location_node
> +{
> + struct asl_location_node *Next;
> + char *Filename;
> + UINT32 LineNumber;
> + UINT32 Column;
> + UINT32 LogicalByteOffset;
> + BOOLEAN MessageReceived;
> +
> +} ASL_LOCATION_NODE;
> +
>
> /* An entry in the listing file stack (for include files) */
>
> diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
> index 9d9008a8..18de92ff 100644
> --- a/src/acpica/source/compiler/dtcompiler.h
> +++ b/src/acpica/source/compiler/dtcompiler.h
> @@ -461,7 +461,6 @@ DtCreateTableUnit (
>
> /* dtparser - lex/yacc files */
>
> -UINT64 DtCompilerParserResult; /* Expression return value */
> int
> DtCompilerParserparse (
> void);
> diff --git a/src/acpica/source/compiler/dtcompilerparser.l b/src/acpica/source/compiler/dtcompilerparser.l
> index 28dcf6af..ecc07c48 100644
> --- a/src/acpica/source/compiler/dtcompilerparser.l
> +++ b/src/acpica/source/compiler/dtcompilerparser.l
> @@ -153,7 +153,6 @@
> #include "aslcompiler.h"
> #include "dtcompilerparser.y.h"
>
> -YYSTYPE DtCompilerlval;
>
> #define _COMPONENT ACPI_COMPILER
> ACPI_MODULE_NAME ("dtcompilerscanner")
> diff --git a/src/acpica/source/compiler/dtcompilerparser.y b/src/acpica/source/compiler/dtcompilerparser.y
> index 43eba4e9..e97e2a90 100644
> --- a/src/acpica/source/compiler/dtcompilerparser.y
> +++ b/src/acpica/source/compiler/dtcompilerparser.y
> @@ -170,7 +170,6 @@ extern char *DtCompilerParsertext;
> extern DT_FIELD *AslGbl_CurrentField;
>
> extern int DtLabelByteOffset;
> -extern UINT64 DtCompilerParserResult; /* Expression return value */
> extern UINT64 DtCompilerParserlineno; /* Current line number */
>
> extern UINT32 DtTokenFirstLine;
> diff --git a/src/acpica/source/compiler/dtparser.l b/src/acpica/source/compiler/dtparser.l
> index ff7df507..631921df 100644
> --- a/src/acpica/source/compiler/dtparser.l
> +++ b/src/acpica/source/compiler/dtparser.l
> @@ -208,7 +208,7 @@ NewLine [\n]
> /*
> * Local support functions
> */
> -YY_BUFFER_STATE LexBuffer;
> +static YY_BUFFER_STATE LexBuffer;
>
> /******************************************************************************
> *
> diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c
> index c7256b77..33df4dc2 100644
> --- a/src/acpica/source/compiler/dttable1.c
> +++ b/src/acpica/source/compiler/dttable1.c
> @@ -1967,11 +1967,16 @@ DtCompileIvrs (
>
> switch (IvrsHeader->Type)
> {
> - case ACPI_IVRS_TYPE_HARDWARE:
> + case ACPI_IVRS_TYPE_HARDWARE1:
>
> InfoTable = AcpiDmTableInfoIvrs0;
> break;
>
> + case ACPI_IVRS_TYPE_HARDWARE2:
> +
> + InfoTable = AcpiDmTableInfoIvrs01;
> + break;
> +
> case ACPI_IVRS_TYPE_MEMORY1:
> case ACPI_IVRS_TYPE_MEMORY2:
> case ACPI_IVRS_TYPE_MEMORY3:
> @@ -1994,7 +1999,8 @@ DtCompileIvrs (
> ParentTable = DtPeekSubtable ();
> DtInsertSubtable (ParentTable, Subtable);
>
> - if (IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE)
> + if (IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE1 ||
> + IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE2)
> {
> while (*PFieldList &&
> !strcmp ((*PFieldList)->Name, "Entry Type"))
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index 067d0ece..bb07894e 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -189,7 +189,8 @@ DtError (
>
> /* Check if user wants to ignore this exception */
>
> - if (AslIsExceptionIgnored (Level, MessageId))
> + if (AslIsExceptionIgnored (AslGbl_Files[ASL_FILE_INPUT].Filename,
> + FieldObject->Line, Level, MessageId))
> {
> return;
> }
> diff --git a/src/acpica/source/compiler/prparser.l b/src/acpica/source/compiler/prparser.l
> index 65595fa8..8752d3fc 100644
> --- a/src/acpica/source/compiler/prparser.l
> +++ b/src/acpica/source/compiler/prparser.l
> @@ -224,7 +224,7 @@ Identifier [a-zA-Z][0-9a-zA-Z]*
> /*
> * Local support functions
> */
> -YY_BUFFER_STATE LexBuffer;
> +static YY_BUFFER_STATE LexBuffer;
>
>
> /******************************************************************************
> diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c
> index 0bfe9947..378e3db1 100644
> --- a/src/acpica/source/components/debugger/dbinput.c
> +++ b/src/acpica/source/components/debugger/dbinput.c
> @@ -637,19 +637,16 @@ AcpiDbGetNextToken (
> return (NULL);
> }
>
> - /* Remove any spaces at the beginning */
> + /* Remove any spaces at the beginning, ignore blank lines */
>
> - if (*String == ' ')
> + while (*String && isspace (*String))
> {
> - while (*String && (*String == ' '))
> - {
> - String++;
> - }
> + String++;
> + }
>
> - if (!(*String))
> - {
> - return (NULL);
> - }
> + if (!(*String))
> + {
> + return (NULL);
> }
>
> switch (*String)
> @@ -754,7 +751,7 @@ AcpiDbGetNextToken (
>
> /* Find end of token */
>
> - while (*String && (*String != ' '))
> + while (*String && !isspace (*String))
> {
> String++;
> }
> diff --git a/src/acpica/source/components/debugger/dbxface.c b/src/acpica/source/components/debugger/dbxface.c
> index e7d354d8..f84db8c9 100644
> --- a/src/acpica/source/components/debugger/dbxface.c
> +++ b/src/acpica/source/components/debugger/dbxface.c
> @@ -594,6 +594,7 @@ AcpiInitializeDebugger (
> AcpiGbl_DbOutputFlags = ACPI_DB_CONSOLE_OUTPUT;
>
> AcpiGbl_DbOpt_NoIniMethods = FALSE;
> + AcpiGbl_DbOpt_NoRegionSupport = FALSE;
>
> AcpiGbl_DbBuffer = AcpiOsAllocate (ACPI_DEBUG_BUFFER_SIZE);
> if (!AcpiGbl_DbBuffer)
> diff --git a/src/acpica/source/components/dispatcher/dswexec.c b/src/acpica/source/components/dispatcher/dswexec.c
> index f2925ecf..3fa7b95b 100644
> --- a/src/acpica/source/components/dispatcher/dswexec.c
> +++ b/src/acpica/source/components/dispatcher/dswexec.c
> @@ -158,7 +158,9 @@
> #include "acinterp.h"
> #include "acnamesp.h"
> #include "acdebug.h"
> -
> +#ifdef ACPI_EXEC_APP
> +#include "aecommon.h"
> +#endif
>
> #define _COMPONENT ACPI_DISPATCHER
> ACPI_MODULE_NAME ("dswexec")
> @@ -504,7 +506,10 @@ AcpiDsExecEndOp (
> UINT32 OpClass;
> ACPI_PARSE_OBJECT *NextOp;
> ACPI_PARSE_OBJECT *FirstArg;
> -
> +#ifdef ACPI_EXEC_APP
> + char *Namepath;
> + ACPI_OPERAND_OBJECT *ObjDesc;
> +#endif
>
> ACPI_FUNCTION_TRACE_PTR (DsExecEndOp, WalkState);
>
> @@ -717,6 +722,29 @@ AcpiDsExecEndOp (
> }
>
> Status = AcpiDsEvalBufferFieldOperands (WalkState, Op);
> + if (ACPI_FAILURE (Status))
> + {
> + break;
> + }
> +
> +#ifdef ACPI_EXEC_APP
> + /*
> + * AcpiExec support for namespace initialization file (initialize
> + * BufferFields in this code.)
> + */
> + Namepath = AcpiNsGetExternalPathname (Op->Common.Node);
> + Status = AeLookupInitFileEntry (Namepath, &ObjDesc);
> + if (ACPI_SUCCESS (Status))
> + {
> + Status = AcpiExWriteDataToField (ObjDesc, Op->Common.Node->Object, NULL);
> + if ACPI_FAILURE (Status)
> + {
> + ACPI_EXCEPTION ((AE_INFO, Status, "While writing to buffer field"));
> + }
> + }
> + ACPI_FREE (Namepath);
> + Status = AE_OK;
> +#endif
> break;
>
>
> diff --git a/src/acpica/source/components/dispatcher/dswload.c b/src/acpica/source/components/dispatcher/dswload.c
> index d37bd5d4..62a4fdca 100644
> --- a/src/acpica/source/components/dispatcher/dswload.c
> +++ b/src/acpica/source/components/dispatcher/dswload.c
> @@ -156,7 +156,6 @@
> #include "acdispat.h"
> #include "acinterp.h"
> #include "acnamesp.h"
> -
> #ifdef ACPI_ASL_COMPILER
> #include "acdisasm.h"
> #endif
> @@ -555,7 +554,6 @@ AcpiDsLoad1EndOp (
> ACPI_PARSE_OBJECT *Op;
> ACPI_OBJECT_TYPE ObjectType;
> ACPI_STATUS Status = AE_OK;
> -
> #ifdef ACPI_ASL_COMPILER
> UINT8 ParamCount;
> #endif
> diff --git a/src/acpica/source/components/dispatcher/dswload2.c b/src/acpica/source/components/dispatcher/dswload2.c
> index ff2135ce..0ab715cd 100644
> --- a/src/acpica/source/components/dispatcher/dswload2.c
> +++ b/src/acpica/source/components/dispatcher/dswload2.c
> @@ -157,6 +157,9 @@
> #include "acinterp.h"
> #include "acnamesp.h"
> #include "acevents.h"
> +#ifdef ACPI_EXEC_APP
> +#include "aecommon.h"
> +#endif
>
> #define _COMPONENT ACPI_DISPATCHER
> ACPI_MODULE_NAME ("dswload2")
> @@ -531,6 +534,10 @@ AcpiDsLoad2EndOp (
> ACPI_NAMESPACE_NODE *NewNode;
> UINT32 i;
> UINT8 RegionSpace;
> +#ifdef ACPI_EXEC_APP
> + ACPI_OPERAND_OBJECT *ObjDesc;
> + char *Namepath;
> +#endif
>
>
> ACPI_FUNCTION_TRACE (DsLoad2EndOp);
> @@ -627,6 +634,11 @@ AcpiDsLoad2EndOp (
> * be evaluated later during the execution phase
> */
> Status = AcpiDsCreateBufferField (Op, WalkState);
> + if ACPI_FAILURE (Status)
> + {
> + ACPI_EXCEPTION ((AE_INFO, Status, "CreateBufferField failure"));
> + goto Cleanup;
> + }
> break;
>
> case AML_TYPE_NAMED_FIELD:
> @@ -766,6 +778,31 @@ AcpiDsLoad2EndOp (
> case AML_NAME_OP:
>
> Status = AcpiDsCreateNode (WalkState, Node, Op);
> + if (ACPI_FAILURE (Status))
> + {
> + goto Cleanup;
> + }
> +
> +#ifdef ACPI_EXEC_APP
> + /*
> + * AcpiExec support for namespace initialization file (initialize
> + * Name opcodes in this code.)
> + */
> + Namepath = AcpiNsGetExternalPathname (Node);
> + Status = AeLookupInitFileEntry (Namepath, &ObjDesc);
> + if (ACPI_SUCCESS (Status))
> + {
> + /* Detach any existing object, attach new object */
> +
> + if (Node->Object)
> + {
> + AcpiNsDetachObject (Node);
> + }
> + AcpiNsAttachObject (Node, ObjDesc, ObjDesc->Common.Type);
> + }
> + ACPI_FREE (Namepath);
> + Status = AE_OK;
> +#endif
> break;
>
> case AML_METHOD_OP:
> diff --git a/src/acpica/source/components/hardware/hwsleep.c b/src/acpica/source/components/hardware/hwsleep.c
> index 016f62be..d503f1cf 100644
> --- a/src/acpica/source/components/hardware/hwsleep.c
> +++ b/src/acpica/source/components/hardware/hwsleep.c
> @@ -466,11 +466,11 @@ AcpiHwLegacyWake (
>
> /* Enable sleep button */
>
> - (void) AcpiWriteBitRegister (
> + (void) AcpiWriteBitRegister (
> AcpiGbl_FixedEventInfo[ACPI_EVENT_SLEEP_BUTTON].EnableRegisterId,
> ACPI_ENABLE_EVENT);
>
> - (void) AcpiWriteBitRegister (
> + (void) AcpiWriteBitRegister (
> AcpiGbl_FixedEventInfo[ACPI_EVENT_SLEEP_BUTTON].StatusRegisterId,
> ACPI_CLEAR_STATUS);
>
> diff --git a/src/acpica/source/components/namespace/nsnames.c b/src/acpica/source/components/namespace/nsnames.c
> index a9509195..a27a87f0 100644
> --- a/src/acpica/source/components/namespace/nsnames.c
> +++ b/src/acpica/source/components/namespace/nsnames.c
> @@ -158,12 +158,6 @@
> #define _COMPONENT ACPI_NAMESPACE
> ACPI_MODULE_NAME ("nsnames")
>
> -/* Local Prototypes */
> -
> -static void
> -AcpiNsNormalizePathname (
> - char *OriginalPath);
> -
>
> /*******************************************************************************
> *
> @@ -616,7 +610,7 @@ Cleanup:
> *
> ******************************************************************************/
>
> -static void
> +void
> AcpiNsNormalizePathname (
> char *OriginalPath)
> {
> diff --git a/src/acpica/source/components/utilities/utdecode.c b/src/acpica/source/components/utilities/utdecode.c
> index aec32969..01b1823e 100644
> --- a/src/acpica/source/components/utilities/utdecode.c
> +++ b/src/acpica/source/components/utilities/utdecode.c
> @@ -224,7 +224,7 @@ const char *AcpiGbl_RegionTypes[ACPI_NUM_PREDEFINED_REGIONS] =
> "IPMI", /* 0x07 */
> "GeneralPurposeIo", /* 0x08 */
> "GenericSerialBus", /* 0x09 */
> - "PlatformCommChannel"/* 0x0A */
> + "PCC" /* 0x0A */
> };
>
>
> diff --git a/src/acpica/source/components/utilities/utdelete.c b/src/acpica/source/components/utilities/utdelete.c
> index 2f60917b..502ff413 100644
> --- a/src/acpica/source/components/utilities/utdelete.c
> +++ b/src/acpica/source/components/utilities/utdelete.c
> @@ -626,13 +626,13 @@ AcpiUtUpdateRefCount (
> *
> * FUNCTION: AcpiUtUpdateObjectReference
> *
> - * PARAMETERS: Object - Increment ref count for this object
> - * and all sub-objects
> + * PARAMETERS: Object - Increment or decrement the ref count for
> + * this object and all sub-objects
> * Action - Either REF_INCREMENT or REF_DECREMENT
> *
> * RETURN: Status
> *
> - * DESCRIPTION: Increment the object reference count
> + * DESCRIPTION: Increment or decrement the object reference count
> *
> * Object references are incremented when:
> * 1) An object is attached to a Node (namespace object)
> @@ -671,7 +671,7 @@ AcpiUtUpdateObjectReference (
> }
>
> /*
> - * All sub-objects must have their reference count incremented
> + * All sub-objects must have their reference count updated
> * also. Different object types have different subobjects.
> */
> switch (Object->Common.Type)
> @@ -740,6 +740,7 @@ AcpiUtUpdateObjectReference (
> break;
> }
> }
> +
> NextObject = NULL;
> break;
>
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 960af4b0..d0ffe390 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -457,6 +457,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortMap[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortPad[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs0[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs01[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs1[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs4[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs8a[];
> diff --git a/src/acpica/source/include/acnamesp.h b/src/acpica/source/include/acnamesp.h
> index 3dd605a0..48b36593 100644
> --- a/src/acpica/source/include/acnamesp.h
> +++ b/src/acpica/source/include/acnamesp.h
> @@ -487,6 +487,10 @@ AcpiNsBuildNormalizedPath (
> UINT32 PathSize,
> BOOLEAN NoTrailing);
>
> +void
> +AcpiNsNormalizePathname (
> + char *OriginalPath);
> +
> char *
> AcpiNsGetNormalizedPathname (
> ACPI_NAMESPACE_NODE *Node,
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index a39d180e..eeb63cd5 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 0x20200214
> +#define ACPI_CA_VERSION 0x20200326
>
> #include "acconfig.h"
> #include "actypes.h"
> diff --git a/src/acpica/source/include/actbinfo.h b/src/acpica/source/include/actbinfo.h
> index 74da8bac..59c38a29 100644
> --- a/src/acpica/source/include/actbinfo.h
> +++ b/src/acpica/source/include/actbinfo.h
> @@ -264,7 +264,8 @@
> #define ACPI_IORTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_NODE,f)
> #define ACPI_IORTM_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ID_MAPPING,f)
> #define ACPI_IVRSH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_HEADER,f)
> -#define ACPI_IVRS0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE,f)
> +#define ACPI_IVRS0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE1,f)
> +#define ACPI_IVRS01_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_HARDWARE2,f)
> #define ACPI_IVRS1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_MEMORY,f)
> #define ACPI_IVRSD_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_DE_HEADER,f)
> #define ACPI_IVRS8A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IVRS_DEVICE8A,f)
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index fe17576b..2f1dd299 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -187,6 +187,7 @@
> #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */
> #define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */
> #define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */
> +#define ACPI_SIG_NHLT "NHLT" /* Non-HDAudio Link Table */
>
>
> /*
> @@ -457,7 +458,8 @@ typedef struct acpi_ivrs_header
>
> enum AcpiIvrsType
> {
> - ACPI_IVRS_TYPE_HARDWARE = 0x10,
> + ACPI_IVRS_TYPE_HARDWARE1 = 0x10,
> + ACPI_IVRS_TYPE_HARDWARE2 = 0x11,
> ACPI_IVRS_TYPE_MEMORY1 = 0x20,
> ACPI_IVRS_TYPE_MEMORY2 = 0x21,
> ACPI_IVRS_TYPE_MEMORY3 = 0x22
> @@ -485,16 +487,30 @@ enum AcpiIvrsType
>
> /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
>
> -typedef struct acpi_ivrs_hardware
> +typedef struct acpi_ivrs_hardware_10
> {
> ACPI_IVRS_HEADER Header;
> UINT16 CapabilityOffset; /* Offset for IOMMU control fields */
> UINT64 BaseAddress; /* IOMMU control registers */
> UINT16 PciSegmentGroup;
> UINT16 Info; /* MSI number and unit ID */
> - UINT32 Reserved;
> + UINT32 FeatureReporting;
> +
> +} ACPI_IVRS_HARDWARE1;
> +
> +/* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */
>
> -} ACPI_IVRS_HARDWARE;
> +typedef struct acpi_ivrs_hardware_11
> +{
> + ACPI_IVRS_HEADER Header;
> + UINT16 CapabilityOffset; /* Offset for IOMMU control fields */
> + UINT64 BaseAddress; /* IOMMU control registers */
> + UINT16 PciSegmentGroup;
> + UINT16 Info; /* MSI number and unit ID */
> + UINT32 Attributes;
> + UINT64 EfrRegisterImage;
> + UINT64 Reserved;
> +} ACPI_IVRS_HARDWARE2;
>
> /* Masks for Info field above */
>
> diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
> index cfae7c42..74d4648a 100644
> --- a/src/acpica/source/include/actbl3.h
> +++ b/src/acpica/source/include/actbl3.h
> @@ -183,7 +183,7 @@
> #define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */
> #define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */
> #define ACPI_SIG_WPBT "WPBT" /* Windows Platform Binary Table */
> -#define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Migrations Table */
> +#define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Mitigations Table */
> #define ACPI_SIG_XENV "XENV" /* Xen Environment table */
> #define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */
>
> @@ -904,10 +904,10 @@ typedef struct acpi_table_wpbt
>
> /*******************************************************************************
> *
> - * WSMT - Windows SMM Security Migrations Table
> + * WSMT - Windows SMM Security Mitigations Table
> * Version 1
> *
> - * Conforms to "Windows SMM Security Migrations Table",
> + * Conforms to "Windows SMM Security Mitigations Table",
> * Version 1.0, April 18, 2016
> *
> ******************************************************************************/
> diff --git a/src/acpica/source/include/acuuid.h b/src/acpica/source/include/acuuid.h
> index bcbf6b1d..b856219c 100644
> --- a/src/acpica/source/include/acuuid.h
> +++ b/src/acpica/source/include/acuuid.h
> @@ -200,4 +200,4 @@
> #define UUID_DEVICE_PROPERTIES "daffd814-6eba-4d8c-8a91-bc9bbf4aa301"
>
>
> -#endif /* __AUUID_H__ */
> +#endif /* __ACUUID_H__ */
> diff --git a/src/acpica/source/tools/acpiexec/aecommon.h b/src/acpica/source/tools/acpiexec/aecommon.h
> index d9ade0b6..9dbb3fac 100644
> --- a/src/acpica/source/tools/acpiexec/aecommon.h
> +++ b/src/acpica/source/tools/acpiexec/aecommon.h
> @@ -195,7 +195,9 @@ typedef struct ae_debug_regions
> typedef struct init_file_entry
> {
> char *Name;
> + char *Value;
> ACPI_OPERAND_OBJECT *ObjDesc;
> + BOOLEAN IsUsed;
>
> } INIT_FILE_ENTRY;
>
> @@ -346,19 +348,23 @@ int
> AeOpenInitializationFile (
> char *Filename);
>
> -void
> +ACPI_STATUS
> AeProcessInitFile (
> void);
>
> -ACPI_STATUS
> -AeSetupConfiguration (
> - void *RegionAddr);
> -
> ACPI_STATUS
> AeLookupInitFileEntry (
> char *Pathname,
> ACPI_OPERAND_OBJECT **ObjDesc);
>
> +void
> +AeDisplayUnusedInitFileItems (
> + void);
> +
> +void
> +AeDeleteInitFileList (
> + void);
> +
> /* aeexec */
>
> void
> @@ -376,6 +382,10 @@ AeGetDevices (
> void *Context,
> void **ReturnValue);
>
> +ACPI_STATUS
> +AeSetupConfiguration (
> + void *RegionAddr);
> +
> ACPI_STATUS
> ExecuteOSI (
> char *OsiString,
> diff --git a/src/acpica/source/tools/acpiexec/aeinitfile.c b/src/acpica/source/tools/acpiexec/aeinitfile.c
> index 0813c873..ce758ed1 100644
> --- a/src/acpica/source/tools/acpiexec/aeinitfile.c
> +++ b/src/acpica/source/tools/acpiexec/aeinitfile.c
> @@ -151,24 +151,17 @@
>
> #include "aecommon.h"
> #include "acdispat.h"
> +#include "acnamesp.h"
> +
>
> #define _COMPONENT ACPI_TOOLS
> ACPI_MODULE_NAME ("aeinitfile")
>
>
> -/* Local prototypes */
> -
> -static void
> -AeEnterInitFileEntry (
> - INIT_FILE_ENTRY InitEntry,
> - ACPI_WALK_STATE *WalkState);
> -
> -
> #define AE_FILE_BUFFER_SIZE 512
>
> static char LineBuffer[AE_FILE_BUFFER_SIZE];
> static char NameBuffer[AE_FILE_BUFFER_SIZE];
> -static char ValueBuffer[AE_FILE_BUFFER_SIZE];
> static FILE *InitFile;
>
>
> @@ -211,23 +204,23 @@ AeOpenInitializationFile (
> * RETURN: None
> *
> * DESCRIPTION: Read the initialization file and perform all namespace
> - * initializations. AcpiGbl_InitEntries will be used for region
> - * field initialization.
> + * initializations. AcpiGbl_InitEntries will be used for all
> + * object initialization.
> *
> * NOTE: The format of the file is multiple lines, each of format:
> - * <ACPI-pathname> <Integer Value>
> + * <ACPI-pathname> <New Value>
> *
> *****************************************************************************/
>
> -void
> -AeProcessInitFile(
> +ACPI_STATUS
> +AeProcessInitFile (
> void)
> {
> ACPI_WALK_STATE *WalkState;
> UINT64 idx;
> - ACPI_STATUS Status;
> + ACPI_STATUS Status = AE_OK;
> char *Token;
> - char *ObjectBuffer;
> + char *ValueBuffer;
> char *TempNameBuffer;
> ACPI_OBJECT_TYPE Type;
> ACPI_OBJECT TempObject;
> @@ -235,13 +228,14 @@ AeProcessInitFile(
>
> if (!InitFile)
> {
> - return;
> + return (AE_OK);
> }
>
> /* Create needed objects to be reused for each init entry */
>
> WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL);
> NameBuffer[0] = '\\';
> + NameBuffer[1] = 0;
>
> while (fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile) != NULL)
> {
> @@ -249,12 +243,20 @@ AeProcessInitFile(
> }
> rewind (InitFile);
>
> + /*
> + * Allocate and populate the Gbl_InitEntries array
> + */
> AcpiGbl_InitEntries =
> - AcpiOsAllocate (sizeof (INIT_FILE_ENTRY) * AcpiGbl_InitFileLineCount);
> + AcpiOsAllocateZeroed (sizeof (INIT_FILE_ENTRY) * AcpiGbl_InitFileLineCount);
> for (idx = 0; fgets (LineBuffer, AE_FILE_BUFFER_SIZE, InitFile); ++idx)
> {
> -
> TempNameBuffer = AcpiDbGetNextToken (LineBuffer, &Token, &Type);
> + if (!TempNameBuffer)
> + {
> + AcpiGbl_InitEntries[idx].Name = NULL;
> + continue;
> + }
> +
> if (LineBuffer[0] == '\\')
> {
> strcpy (NameBuffer, TempNameBuffer);
> @@ -266,48 +268,67 @@ AeProcessInitFile(
> strcpy (NameBuffer + 1, TempNameBuffer);
> }
>
> + AcpiNsNormalizePathname (NameBuffer);
> AcpiGbl_InitEntries[idx].Name =
> AcpiOsAllocateZeroed (strnlen (NameBuffer, AE_FILE_BUFFER_SIZE) + 1);
> -
> strcpy (AcpiGbl_InitEntries[idx].Name, NameBuffer);
>
> - ObjectBuffer = AcpiDbGetNextToken (Token, &Token, &Type);
> + ValueBuffer = AcpiDbGetNextToken (Token, &Token, &Type);
> + if (!ValueBuffer)
> + {
> + AcpiGbl_InitEntries[idx].Value = NULL;
> + continue;
> + }
> +
> + AcpiGbl_InitEntries[idx].Value =
> + AcpiOsAllocateZeroed (strnlen (ValueBuffer, AE_FILE_BUFFER_SIZE) + 1);
> + strcpy (AcpiGbl_InitEntries[idx].Value, ValueBuffer);
>
> if (Type == ACPI_TYPE_FIELD_UNIT)
> {
> - Status = AcpiDbConvertToObject (ACPI_TYPE_BUFFER, ObjectBuffer,
> + Status = AcpiDbConvertToObject (ACPI_TYPE_BUFFER, ValueBuffer,
> &TempObject);
> }
> else
> {
> - Status = AcpiDbConvertToObject (Type, ObjectBuffer, &TempObject);
> + Status = AcpiDbConvertToObject (Type, ValueBuffer, &TempObject);
> + }
> +
> + if (ACPI_FAILURE (Status))
> + {
> + AcpiOsPrintf ("%s[%s]: %s\n", NameBuffer, AcpiUtGetTypeName (Type),
> + AcpiFormatException (Status));
> + goto CleanupAndExit;
> }
>
> Status = AcpiUtCopyEobjectToIobject (&TempObject,
> &AcpiGbl_InitEntries[idx].ObjDesc);
>
> - if (Type == ACPI_TYPE_BUFFER || Type == ACPI_TYPE_FIELD_UNIT)
> + /* Cleanup the external object created by DbConvertToObject above */
> +
> + if (ACPI_SUCCESS (Status))
> {
> - ACPI_FREE (TempObject.Buffer.Pointer);
> + if (Type == ACPI_TYPE_BUFFER || Type == ACPI_TYPE_FIELD_UNIT)
> + {
> + ACPI_FREE (TempObject.Buffer.Pointer);
> + }
> + else if (Type == ACPI_TYPE_PACKAGE)
> + {
> + AcpiDbDeleteObjects (1, &TempObject);
> + }
> }
> -
> - if (ACPI_FAILURE (Status))
> + else
> {
> - AcpiOsPrintf ("%s %s\n", ValueBuffer,
> + AcpiOsPrintf ("%s[%s]: %s\n", NameBuffer, AcpiUtGetTypeName (Type),
> AcpiFormatException (Status));
> goto CleanupAndExit;
> }
>
> /*
> - * Special case for field units. Field units are dependent on the
> - * parent region. This parent region has yet to be created so defer the
> - * initialization until the dispatcher. For all other types, initialize
> - * the namespace node with the value found in the init file.
> + * Initialize the namespace node with the value found in the init file.
> */
> - if (Type != ACPI_TYPE_FIELD_UNIT)
> - {
> - AeEnterInitFileEntry (AcpiGbl_InitEntries[idx], WalkState);
> - }
> + AcpiOsPrintf ("Namespace object init from file: %16s, Value \"%s\", Type %s\n",
> + AcpiGbl_InitEntries[idx].Name, AcpiGbl_InitEntries[idx].Value, AcpiUtGetTypeName (Type));
> }
>
> /* Cleanup */
> @@ -315,97 +336,130 @@ AeProcessInitFile(
> CleanupAndExit:
> fclose (InitFile);
> AcpiDsDeleteWalkState (WalkState);
> + return (Status);
> }
>
>
> /******************************************************************************
> *
> - * FUNCTION: AeInitFileEntry
> - *
> - * PARAMETERS: InitEntry - Entry of the init file
> - * WalkState - Used for the Store operation
> + * FUNCTION: AeLookupInitFileEntry
> *
> - * RETURN: None
> + * PARAMETERS: Pathname - AML namepath in external format
> + * ObjDesc - Where the object is returned if it exists
> *
> - * DESCRIPTION: Perform initialization of a single namespace object
> + * RETURN: Status. AE_OK if a match was found
> *
> - * Note: namespace of objects are limited to integers and region
> - * fields units of 8 bytes at this time.
> + * DESCRIPTION: Search the init file for a particular name and its value.
> *
> *****************************************************************************/
>
> -static void
> -AeEnterInitFileEntry (
> - INIT_FILE_ENTRY InitEntry,
> - ACPI_WALK_STATE *WalkState)
> +ACPI_STATUS
> +AeLookupInitFileEntry (
> + char *Pathname,
> + ACPI_OPERAND_OBJECT **ObjDesc)
> {
> - char *Pathname = InitEntry.Name;
> - ACPI_OPERAND_OBJECT *ObjDesc = InitEntry.ObjDesc;
> - ACPI_NAMESPACE_NODE *NewNode;
> - ACPI_STATUS Status;
> + UINT32 i;
>
> + ACPI_FUNCTION_TRACE (AeLookupInitFileEntry);
>
> - Status = AcpiNsLookup (NULL, Pathname, ObjDesc->Common.Type,
> - ACPI_IMODE_LOAD_PASS2, ACPI_NS_ERROR_IF_FOUND | ACPI_NS_NO_UPSEARCH |
> - ACPI_NS_EARLY_INIT, NULL, &NewNode);
> - if (ACPI_FAILURE (Status))
> + ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Lookup: %s\n", Pathname));
> +
> + if (!AcpiGbl_InitEntries)
> {
> - ACPI_EXCEPTION ((AE_INFO, Status,
> - "While creating name from namespace initialization file: %s",
> - Pathname));
> - return;
> + return (AE_NOT_FOUND);
> }
>
> - /* Store pointer to value descriptor in the Node */
> + AcpiNsNormalizePathname (Pathname);
>
> - Status = AcpiNsAttachObject (NewNode, ObjDesc,
> - ObjDesc->Common.Type);
> - if (ACPI_FAILURE (Status))
> + for (i = 0; i < AcpiGbl_InitFileLineCount; ++i)
> {
> - ACPI_EXCEPTION ((AE_INFO, Status,
> - "While attaching object to node from namespace initialization file: %s",
> - Pathname));
> - return;
> + if (AcpiGbl_InitEntries[i].Name &&
> + !strcmp (AcpiGbl_InitEntries[i].Name, Pathname))
> + {
> + *ObjDesc = AcpiGbl_InitEntries[i].ObjDesc;
> + AcpiGbl_InitEntries[i].IsUsed = TRUE;
> + ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "Found match: %s, %p\n", Pathname, *ObjDesc));
> + return_ACPI_STATUS (AE_OK);
> + }
> }
>
> - /* Remove local reference to the object */
> + ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "No match found: %s\n", Pathname));
> + return_ACPI_STATUS (AE_NOT_FOUND);
> +}
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION: AeDisplayUnusedInitFileItems
> + *
> + * PARAMETERS: None
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Display all init file items that have not been referenced
> + * (i.e., items that have not been found in the namespace).
> + *
> + *****************************************************************************/
> +
> +void
> +AeDisplayUnusedInitFileItems (
> + void)
> +{
> + UINT32 i;
> +
> +
> + if (!AcpiGbl_InitEntries)
> + {
> + return;
> + }
>
> - AcpiUtRemoveReference (ObjDesc);
> + for (i = 0; i < AcpiGbl_InitFileLineCount; ++i)
> + {
> + if (AcpiGbl_InitEntries[i].Name &&
> + !AcpiGbl_InitEntries[i].IsUsed)
> + {
> + AcpiOsPrintf ("Init file entry not found in namespace "
> + "(or is a non-data type): %s\n",
> + AcpiGbl_InitEntries[i].Name);
> + }
> + }
> }
>
>
> /******************************************************************************
> *
> - * FUNCTION: AeLookupInitFileEntry
> + * FUNCTION: AeDeleteInitFileList
> *
> - * PARAMETERS: Pathname - AML namepath in external format
> - * ValueString - value of the namepath if it exitst
> + * PARAMETERS: None
> *
> * RETURN: None
> *
> - * DESCRIPTION: Search the init file for a particular name and its value.
> + * DESCRIPTION: Delete the global namespace initialization file data
> *
> *****************************************************************************/
>
> -ACPI_STATUS
> -AeLookupInitFileEntry (
> - char *Pathname,
> - ACPI_OPERAND_OBJECT **ObjDesc)
> +void
> +AeDeleteInitFileList (
> + void)
> {
> UINT32 i;
>
> +
> if (!AcpiGbl_InitEntries)
> {
> - return AE_NOT_FOUND;
> + return;
> }
>
> for (i = 0; i < AcpiGbl_InitFileLineCount; ++i)
> {
> - if (!strcmp(AcpiGbl_InitEntries[i].Name, Pathname))
> +
> + if ((AcpiGbl_InitEntries[i].ObjDesc) && (AcpiGbl_InitEntries[i].Value))
> {
> - *ObjDesc = AcpiGbl_InitEntries[i].ObjDesc;
> - return AE_OK;
> + /* Remove one reference on the object (and all subobjects) */
> +
> + AcpiUtRemoveReference (AcpiGbl_InitEntries[i].ObjDesc);
> }
> }
> - return AE_NOT_FOUND;
> +
> + AcpiOsFree (AcpiGbl_InitEntries);
> }
>
Acked-by: Ivan Hu <ivan.hu at canonical.com>
More information about the fwts-devel
mailing list