Module Name: src Committed By: christos Date: Tue Oct 15 16:13:40 UTC 2019
Modified Files: src/sys/external/bsd/acpica/dist/compiler: aslcompile.c aslcompiler.h aslerror.c aslfiles.c aslload.c asloptions.c aslsupport.l aslutils.c aslwalks.c aslxref.c dtcompile.c dtcompilerparser.y dtfield.c src/sys/external/bsd/acpica/dist/debugger: dbinput.c dbmethod.c src/sys/external/bsd/acpica/dist/events: evxface.c src/sys/external/bsd/acpica/dist/executer: exconfig.c exdump.c src/sys/external/bsd/acpica/dist/include: acglobal.h aclocal.h acnamesp.h acpiosxf.h acpixf.h actypes.h acutils.h src/sys/external/bsd/acpica/dist/namespace: nsaccess.c nsdump.c nseval.c nsinit.c nsrepair2.c src/sys/external/bsd/acpica/dist/tables: tbdata.c tbxfload.c src/sys/external/bsd/acpica/dist/tools/acpidump: apfiles.c src/sys/external/bsd/acpica/dist/utilities: utdebug.c utosi.c Log Message: merge conflicts To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 \ src/sys/external/bsd/acpica/dist/compiler/aslcompile.c cvs rdiff -u -r1.14 -r1.15 \ src/sys/external/bsd/acpica/dist/compiler/aslcompiler.h \ src/sys/external/bsd/acpica/dist/compiler/aslload.c \ src/sys/external/bsd/acpica/dist/compiler/aslxref.c cvs rdiff -u -r1.12 -r1.13 \ src/sys/external/bsd/acpica/dist/compiler/aslerror.c \ src/sys/external/bsd/acpica/dist/compiler/aslwalks.c cvs rdiff -u -r1.13 -r1.14 \ src/sys/external/bsd/acpica/dist/compiler/aslfiles.c \ src/sys/external/bsd/acpica/dist/compiler/aslsupport.l \ src/sys/external/bsd/acpica/dist/compiler/dtcompile.c \ src/sys/external/bsd/acpica/dist/compiler/dtfield.c cvs rdiff -u -r1.10 -r1.11 \ src/sys/external/bsd/acpica/dist/compiler/asloptions.c cvs rdiff -u -r1.23 -r1.24 \ src/sys/external/bsd/acpica/dist/compiler/aslutils.c cvs rdiff -u -r1.1.1.1 -r1.2 \ src/sys/external/bsd/acpica/dist/compiler/dtcompilerparser.y cvs rdiff -u -r1.18 -r1.19 \ src/sys/external/bsd/acpica/dist/debugger/dbinput.c cvs rdiff -u -r1.12 -r1.13 \ src/sys/external/bsd/acpica/dist/debugger/dbmethod.c cvs rdiff -u -r1.11 -r1.12 src/sys/external/bsd/acpica/dist/events/evxface.c cvs rdiff -u -r1.14 -r1.15 \ src/sys/external/bsd/acpica/dist/executer/exconfig.c cvs rdiff -u -r1.13 -r1.14 src/sys/external/bsd/acpica/dist/executer/exdump.c cvs rdiff -u -r1.19 -r1.20 \ src/sys/external/bsd/acpica/dist/include/acglobal.h \ src/sys/external/bsd/acpica/dist/include/aclocal.h \ src/sys/external/bsd/acpica/dist/include/actypes.h \ src/sys/external/bsd/acpica/dist/include/acutils.h cvs rdiff -u -r1.16 -r1.17 \ src/sys/external/bsd/acpica/dist/include/acnamesp.h cvs rdiff -u -r1.13 -r1.14 \ src/sys/external/bsd/acpica/dist/include/acpiosxf.h cvs rdiff -u -r1.22 -r1.23 src/sys/external/bsd/acpica/dist/include/acpixf.h cvs rdiff -u -r1.17 -r1.18 \ src/sys/external/bsd/acpica/dist/namespace/nsaccess.c cvs rdiff -u -r1.14 -r1.15 \ src/sys/external/bsd/acpica/dist/namespace/nsdump.c \ src/sys/external/bsd/acpica/dist/namespace/nseval.c cvs rdiff -u -r1.16 -r1.17 \ src/sys/external/bsd/acpica/dist/namespace/nsinit.c cvs rdiff -u -r1.13 -r1.14 \ src/sys/external/bsd/acpica/dist/namespace/nsrepair2.c cvs rdiff -u -r1.12 -r1.13 src/sys/external/bsd/acpica/dist/tables/tbdata.c cvs rdiff -u -r1.10 -r1.11 src/sys/external/bsd/acpica/dist/tables/tbxfload.c cvs rdiff -u -r1.11 -r1.12 \ src/sys/external/bsd/acpica/dist/tools/acpidump/apfiles.c cvs rdiff -u -r1.16 -r1.17 \ src/sys/external/bsd/acpica/dist/utilities/utdebug.c cvs rdiff -u -r1.12 -r1.13 src/sys/external/bsd/acpica/dist/utilities/utosi.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/external/bsd/acpica/dist/compiler/aslcompile.c diff -u src/sys/external/bsd/acpica/dist/compiler/aslcompile.c:1.16 src/sys/external/bsd/acpica/dist/compiler/aslcompile.c:1.17 --- src/sys/external/bsd/acpica/dist/compiler/aslcompile.c:1.16 Sun Apr 28 21:18:06 2019 +++ src/sys/external/bsd/acpica/dist/compiler/aslcompile.c Tue Oct 15 12:13:39 2019 @@ -116,7 +116,6 @@ CmDoCompile ( if (AslGbl_PreprocessOnly) { UtEndEvent (Event); - CmCleanupAndExit (); return (AE_OK); } } @@ -746,10 +745,11 @@ CmDumpAllEvents ( * ******************************************************************************/ -void +int CmCleanupAndExit ( void) { + int Status = 0; BOOLEAN DeleteAmlFile = FALSE; ASL_GLOBAL_FILE_NODE *CurrentFileNode = AslGbl_FilesList; @@ -808,20 +808,38 @@ CmCleanupAndExit ( UtDisplaySummary (ASL_FILE_STDOUT); /* - * We will delete the AML file if there are errors and the - * force AML output option has not been used. + * Delete the AML file if there are errors and the force AML output option + * (-f) has not been used. + * + * Return -1 as a status of the compiler if no AML files are generated. If + * the AML file is generated in the presence of errors, return 0. In the + * latter case, the errors were ignored by the user so the compilation is + * considered successful. */ - if (AslGbl_ParserErrorDetected || ((AslGbl_ExceptionCount[ASL_ERROR] > 0) && + if (AslGbl_ParserErrorDetected || AslGbl_PreprocessOnly || + ((AslGbl_ExceptionCount[ASL_ERROR] > 0) && (!AslGbl_IgnoreErrors) && AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle)) { DeleteAmlFile = TRUE; + Status = -1; } /* Close all open files */ while (CurrentFileNode) { + /* + * Set the program return status based on file errors. If there are any + * errors and during compilation, the command is not considered + * successful. + */ + if (Status != -1 && !AslGbl_IgnoreErrors && + CurrentFileNode->ParserErrorDetected) + { + Status = -1; + } + switch (FlSwitchFileSet (CurrentFileNode->Files[ASL_FILE_INPUT].Filename)) { case SWITCH_TO_SAME_FILE: @@ -845,6 +863,8 @@ CmCleanupAndExit ( { UtDeleteLocalCaches (); } + + return (Status); } Index: src/sys/external/bsd/acpica/dist/compiler/aslcompiler.h diff -u src/sys/external/bsd/acpica/dist/compiler/aslcompiler.h:1.14 src/sys/external/bsd/acpica/dist/compiler/aslcompiler.h:1.15 --- src/sys/external/bsd/acpica/dist/compiler/aslcompiler.h:1.14 Sun Apr 28 21:18:06 2019 +++ src/sys/external/bsd/acpica/dist/compiler/aslcompiler.h Tue Oct 15 12:13:39 2019 @@ -158,7 +158,7 @@ void CmDoOutputFiles ( void); -void +int CmCleanupAndExit ( void); @@ -944,6 +944,7 @@ void FlCloseFile ( UINT32 FileId); +ACPI_PRINTF_LIKE (2) void FlPrintFile ( UINT32 FileId, @@ -997,10 +998,6 @@ ASL_GLOBAL_FILE_NODE * FlGetCurrentFileNode ( void); -BOOLEAN -FlInputFileExists ( - char *InputFilename); - /* * aslhwmap - hardware map summary @@ -1091,6 +1088,7 @@ OtXrefWalkPart1 ( /* * aslutils - common compiler utilities */ +ACPI_PRINTF_LIKE(2) void DbgPrint ( UINT32 Type, @@ -1185,6 +1183,10 @@ UtInternalizeName ( char *ExternalName, char **ConvertedName); +BOOLEAN +UtNameContainsAllPrefix ( + ACPI_PARSE_OBJECT *Op); + void UtAttachNamepathToOwner ( ACPI_PARSE_OBJECT *Op, @@ -1200,6 +1202,15 @@ UINT64 UtDoConstant ( char *String); +char * +AcpiUtStrdup ( + char *String); + +char * +AcpiUtStrcat ( + char *String1, + char *String2); + /* * asluuid - UUID support @@ -1501,6 +1512,7 @@ DtCreateTemplates ( /* * ASL/ASL+ converter debug */ +ACPI_PRINTF_LIKE (1) void CvDbgPrint ( char *Fmt, Index: src/sys/external/bsd/acpica/dist/compiler/aslload.c diff -u src/sys/external/bsd/acpica/dist/compiler/aslload.c:1.14 src/sys/external/bsd/acpica/dist/compiler/aslload.c:1.15 --- src/sys/external/bsd/acpica/dist/compiler/aslload.c:1.14 Sun Apr 28 21:18:06 2019 +++ src/sys/external/bsd/acpica/dist/compiler/aslload.c Tue Oct 15 12:13:39 2019 @@ -56,6 +56,7 @@ static ACPI_STATUS LdLoadFieldElements ( + UINT32 AmlType, ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState); @@ -82,6 +83,10 @@ LdCommonNamespaceEnd ( UINT32 Level, void *Context); +static void +LdCheckSpecialNames ( + ACPI_NAMESPACE_NODE *Node, + ACPI_PARSE_OBJECT *Op); /******************************************************************************* * @@ -139,7 +144,8 @@ LdLoadNamespace ( * * FUNCTION: LdLoadFieldElements * - * PARAMETERS: Op - Parent node (Field) + * PARAMETERS: AmlType - Type to search + * Op - Parent node (Field) * WalkState - Current walk state * * RETURN: Status @@ -151,14 +157,33 @@ LdLoadNamespace ( static ACPI_STATUS LdLoadFieldElements ( + UINT32 AmlType, ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState) { ACPI_PARSE_OBJECT *Child = NULL; + ACPI_PARSE_OBJECT *SourceRegion; ACPI_NAMESPACE_NODE *Node; ACPI_STATUS Status; + SourceRegion = UtGetArg (Op, 0); + if (SourceRegion) + { + Status = AcpiNsLookup (WalkState->ScopeInfo, + SourceRegion->Asl.Value.String, + AmlType, ACPI_IMODE_EXECUTE, + ACPI_NS_DONT_OPEN_SCOPE, NULL, &Node); + if (Status == AE_NOT_FOUND) + { + /* + * If the named object is not found, it means that it is either a + * forward reference or the named object does not exist. + */ + SourceRegion->Asl.CompileFlags |= OP_NOT_FOUND_DURING_LOAD; + } + } + /* Get the first named field element */ switch (Op->Asl.AmlOpcode) @@ -380,12 +405,16 @@ LdNamespace1Begin ( */ switch (Op->Asl.AmlOpcode) { - case AML_BANK_FIELD_OP: case AML_INDEX_FIELD_OP: + + Status = LdLoadFieldElements (ACPI_TYPE_LOCAL_REGION_FIELD, Op, WalkState); + return (Status); + + case AML_BANK_FIELD_OP: case AML_FIELD_OP: - Status = LdLoadFieldElements (Op, WalkState); - break; + Status = LdLoadFieldElements (ACPI_TYPE_REGION, Op, WalkState); + return (Status); case AML_INT_CONNECTION_OP: @@ -449,8 +478,7 @@ LdNamespace1Begin ( * We only want references to named objects: * Store (2, WXYZ) -> Attempt to resolve the name */ - if ((OpInfo->Class == AML_CLASS_NAMED_OBJECT) && - (OpInfo->Type != AML_TYPE_NAMED_FIELD)) + if (OpInfo->Class == AML_CLASS_NAMED_OBJECT) { return (AE_OK); } @@ -840,6 +868,10 @@ LdNamespace1Begin ( } } + /* Check special names like _WAK and _PTS */ + + LdCheckSpecialNames (Node, Op); + if (ForceNewScope) { Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState); @@ -880,6 +912,50 @@ FinishNode: /******************************************************************************* * + * FUNCTION: LdCheckSpecialNames + * + * PARAMETERS: Node - Node that represents the named object + * Op - Named object declaring this named object + * + * RETURN: None + * + * DESCRIPTION: Check if certain named objects are declared in the incorrect + * scope. Special named objects are listed in + * AslGbl_SpecialNamedObjects and can only be declared at the root + * scope. _UID inside of a processor declaration must not be a + * string. + * + ******************************************************************************/ + +static void +LdCheckSpecialNames ( + ACPI_NAMESPACE_NODE *Node, + ACPI_PARSE_OBJECT *Op) +{ + UINT32 i; + + + for (i = 0; i < MAX_SPECIAL_NAMES; i++) + { + if (ACPI_COMPARE_NAMESEG(Node->Name.Ascii, AslGbl_SpecialNamedObjects[i]) && + Node->Parent != AcpiGbl_RootNode) + { + AslError (ASL_ERROR, ASL_MSG_INVALID_SPECIAL_NAME, Op, Op->Asl.ExternalName); + return; + } + } + + if (ACPI_COMPARE_NAMESEG (Node->Name.Ascii, "_UID") && + Node->Parent->Type == ACPI_TYPE_PROCESSOR && + Node->Type == ACPI_TYPE_STRING) + { + AslError (ASL_ERROR, ASL_MSG_INVALID_PROCESSOR_UID , Op, "found a string"); + } +} + + +/******************************************************************************* + * * FUNCTION: LdNamespace2Begin * * PARAMETERS: ASL_WALK_CALLBACK Index: src/sys/external/bsd/acpica/dist/compiler/aslxref.c diff -u src/sys/external/bsd/acpica/dist/compiler/aslxref.c:1.14 src/sys/external/bsd/acpica/dist/compiler/aslxref.c:1.15 --- src/sys/external/bsd/acpica/dist/compiler/aslxref.c:1.14 Sun Apr 28 21:18:06 2019 +++ src/sys/external/bsd/acpica/dist/compiler/aslxref.c Tue Oct 15 12:13:39 2019 @@ -352,6 +352,8 @@ XfNamespaceLocateBegin ( ASL_METHOD_LOCAL *MethodArgs = NULL; int RegisterNumber; UINT32 i; + ACPI_NAMESPACE_NODE *DeclarationParentMethod; + ACPI_PARSE_OBJECT *ReferenceParentMethod; ACPI_FUNCTION_TRACE_PTR (XfNamespaceLocateBegin, Op); @@ -505,8 +507,7 @@ XfNamespaceLocateBegin ( (Op->Asl.ParseOpcode != PARSEOP_NAMESTRING) && (Op->Asl.ParseOpcode != PARSEOP_NAMESEG) && (Op->Asl.ParseOpcode != PARSEOP_METHODCALL) && - (Op->Asl.ParseOpcode != PARSEOP_EXTERNAL) && - (OpInfo->Type != AML_TYPE_NAMED_FIELD)) + (Op->Asl.ParseOpcode != PARSEOP_EXTERNAL)) { return_ACPI_STATUS (AE_OK); } @@ -530,8 +531,7 @@ XfNamespaceLocateBegin ( if ((Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) || (Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || (Op->Asl.ParseOpcode == PARSEOP_METHODCALL) || - (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) || - (OpInfo->Type == AML_TYPE_NAMED_FIELD)) + (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL)) { /* * These are name references, do not push the scope stack @@ -568,10 +568,6 @@ XfNamespaceLocateBegin ( Path = NextOp->Asl.Value.String; } - else if (OpInfo->Type == AML_TYPE_NAMED_FIELD) - { - Path = Op->Asl.Child->Asl.Value.String; - } else { Path = Op->Asl.Value.String; @@ -690,24 +686,45 @@ XfNamespaceLocateBegin ( return_ACPI_STATUS (Status); } - /* Object was found above, check for an illegal forward reference */ + /* Object was found above, check for an illegal forward reference */ if (Op->Asl.CompileFlags & OP_NOT_FOUND_DURING_LOAD) { /* * During the load phase, this Op was flagged as a possible - * illegal forward reference + * illegal forward reference. In other words, Op is a name path or + * name segment that refers to a named object declared after the + * reference. In this scinario, Node refers to the actual declaration + * and Op is a parse node that references the named object. * - * Note: Allow "forward references" from within a method to an - * object that is not within any method (module-level code) + * Note: + * + * Object references inside of control methods are allowed to + * refer to objects declared outside of control methods. + * + * If the declaration and reference are both contained inside of the + * same method or outside of any method, this is a forward reference + * and should be reported as a compiler error. */ - if (!WalkState->ScopeInfo || (UtGetParentMethod (Node) && - !UtNodeIsDescendantOf (WalkState->ScopeInfo->Scope.Node, - UtGetParentMethod (Node)))) + DeclarationParentMethod = UtGetParentMethod (Node); + ReferenceParentMethod = XfGetParentMethod (Op); + + /* case 1: declaration and refrence are both outside of method */ + + if (!ReferenceParentMethod && !DeclarationParentMethod) { AslError (ASL_ERROR, ASL_MSG_ILLEGAL_FORWARD_REF, Op, Op->Asl.ExternalName); } + + /* case 2: declaration and reference are both inside of the same method */ + + else if (ReferenceParentMethod && DeclarationParentMethod && + ReferenceParentMethod == DeclarationParentMethod->Op) + { + AslError (ASL_ERROR, ASL_MSG_ILLEGAL_FORWARD_REF, Op, + Op->Asl.ExternalName); + } } /* Check for a reference vs. name declaration */ Index: src/sys/external/bsd/acpica/dist/compiler/aslerror.c diff -u src/sys/external/bsd/acpica/dist/compiler/aslerror.c:1.12 src/sys/external/bsd/acpica/dist/compiler/aslerror.c:1.13 --- src/sys/external/bsd/acpica/dist/compiler/aslerror.c:1.12 Sun Apr 28 21:18:06 2019 +++ src/sys/external/bsd/acpica/dist/compiler/aslerror.c Tue Oct 15 12:13:39 2019 @@ -761,16 +761,8 @@ static void AslInitEnode ( return; } - if (!FlInputFileExists (Filename)) - { - /* - * This means that this file is an include file. Record the .src - * file as the error message source because this file is not in - * the global file list. - */ - Enode->SourceFilename = - FileNode->Files[ASL_FILE_SOURCE_OUTPUT].Filename; - } + Enode->SourceFilename = + FileNode->Files[ASL_FILE_SOURCE_OUTPUT].Filename; } } Index: src/sys/external/bsd/acpica/dist/compiler/aslwalks.c diff -u src/sys/external/bsd/acpica/dist/compiler/aslwalks.c:1.12 src/sys/external/bsd/acpica/dist/compiler/aslwalks.c:1.13 --- src/sys/external/bsd/acpica/dist/compiler/aslwalks.c:1.12 Sun Apr 28 21:18:06 2019 +++ src/sys/external/bsd/acpica/dist/compiler/aslwalks.c Tue Oct 15 12:13:39 2019 @@ -57,6 +57,14 @@ static void AnAnalyzeStoreOperator ( ACPI_PARSE_OBJECT *Op); +static BOOLEAN +AnIsValidBufferConstant ( + ACPI_PARSE_OBJECT *Op); + +static void +AnValidateCreateBufferField ( + ACPI_PARSE_OBJECT *CreateBufferFieldOp); + /******************************************************************************* * @@ -561,6 +569,14 @@ AnOtherSemanticAnalysisWalkBegin ( OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode); + if (OpInfo->Flags & AML_CREATE) + { + /* This group contains all of the Create Buffer Field operators */ + + AnValidateCreateBufferField (Op); + return (AE_OK); + } + /* * Determine if an execution class operator actually does something by * checking if it has a target and/or the function return value is used. @@ -626,10 +642,10 @@ AnOtherSemanticAnalysisWalkBegin ( } } - /* * Semantic checks for individual ASL operators */ + switch (Op->Asl.ParseOpcode) { case PARSEOP_STORE: @@ -677,22 +693,6 @@ AnOtherSemanticAnalysisWalkBegin ( } break; - case PARSEOP_CREATEFIELD: - /* - * Check for a zero Length (NumBits) operand. NumBits is the 3rd operand - */ - ArgOp = Op->Asl.Child; - ArgOp = ArgOp->Asl.Next; - ArgOp = ArgOp->Asl.Next; - - if ((ArgOp->Asl.ParseOpcode == PARSEOP_ZERO) || - ((ArgOp->Asl.ParseOpcode == PARSEOP_INTEGER) && - (ArgOp->Asl.Value.Integer == 0))) - { - AslError (ASL_ERROR, ASL_MSG_NON_ZERO, ArgOp, NULL); - } - break; - case PARSEOP_CONNECTION: /* * Ensure that the referenced operation region has the correct SPACE_ID. @@ -780,6 +780,194 @@ AnOtherSemanticAnalysisWalkBegin ( /******************************************************************************* * + * FUNCTION: AnValidateCreateBufferField + * + * PARAMETERS: Op - A create buffer field operator + * + * RETURN: None + * + * DESCRIPTION: Check if a buffer index argument to a create buffer field + * operation is beyond the end of the target buffer. + * + * Validates these AML operators: + * + * AML_CREATE_FIELD_OP + * AML_CREATE_BIT_FIELD_OP + * AML_CREATE_BYTE_FIELD_OP + * AML_CREATE_WORD_FIELD_OP + * AML_CREATE_DWORD_FIELD_OP + * AML_CREATE_QWORD_FIELD_OP + * + * There are two conditions that must be satisfied in order to enable + * validation at compile time: + * + * 1) The length of the target buffer must be an integer constant + * 2) The index specified in the create* must be an integer constant + * 3) For CreateField, the bit length argument must be non-zero. + * + ******************************************************************************/ + +static void +AnValidateCreateBufferField ( + ACPI_PARSE_OBJECT *CreateBufferFieldOp) +{ + ACPI_PARSE_OBJECT *TargetBufferOp; + ACPI_PARSE_OBJECT *ArgOp; + UINT32 TargetBufferLength; + UINT32 LastFieldByteIndex; + + + /* + * 1) Get the length of the target buffer + */ + ArgOp = CreateBufferFieldOp->Asl.Child; /* Reference to target buffer */ + + /* + * If no attached Node, the target buffer may be something like an + * ArgX or LocalX and cannot be evaluated at compile time. + */ + if (!ArgOp->Asl.Node) + { + return; + } + + TargetBufferOp = ArgOp->Asl.Node->Op; + TargetBufferOp = TargetBufferOp->Asl.Child; /* Target buffer */ + TargetBufferOp = TargetBufferOp->Asl.Next; /* "Buffer" keyword */ + if (!TargetBufferOp) + { + /* Not a statement of the form NAME(XXXX, Buffer.... */ + + return; + } + + /* Get the buffer length argument. It must be an integer constant */ + + ArgOp = TargetBufferOp->Asl.Child; + if (!AnIsValidBufferConstant (ArgOp)) + { + return; + } + + TargetBufferLength = (UINT32) ArgOp->Asl.Value.Integer; + + /* + * 2) Get the value of the buffer index argument. It must be + * an integer constant. + */ + ArgOp = CreateBufferFieldOp->Asl.Child; /* Reference to target buffer */ + ArgOp = ArgOp->Asl.Next; /* Buffer Index argument*/ + if (!AnIsValidBufferConstant (ArgOp)) + { + return; + } + + LastFieldByteIndex = + (UINT32) ArgOp->Asl.Value.Integer; /* Index can be in either bytes or bits */ + + /* + * 3) Get the length of the new buffer field, in bytes. Also, + * create the final target buffer index for the last byte of the field + */ + switch (CreateBufferFieldOp->Asl.ParseOpcode) + { + case PARSEOP_CREATEBITFIELD: /* A one bit field */ + + LastFieldByteIndex = ACPI_ROUND_BITS_DOWN_TO_BYTES (LastFieldByteIndex); + break; + + case PARSEOP_CREATEBYTEFIELD: + break; + + case PARSEOP_CREATEWORDFIELD: + + LastFieldByteIndex += (sizeof (UINT16) - 1); + break; + + case PARSEOP_CREATEDWORDFIELD: + + LastFieldByteIndex += (sizeof (UINT32) - 1); + break; + + case PARSEOP_CREATEQWORDFIELD: + + LastFieldByteIndex += (sizeof (UINT64) - 1); + break; + + case PARSEOP_CREATEFIELD: /* Multi-bit field */ + + ArgOp = ArgOp->Asl.Next; /* Length argument, in bits */ + if (!AnIsValidBufferConstant (ArgOp)) + { + return; + } + + /* The buffer field length is not allowed to be zero */ + + if (ArgOp->Asl.Value.Integer == 0) + { + AslError (ASL_WARNING, ASL_MSG_BUFFER_FIELD_LENGTH, ArgOp, NULL); + return; + } + + LastFieldByteIndex += + ((UINT32) ArgOp->Asl.Value.Integer - 1); /* Create final bit index */ + + /* Convert bit index to a byte index */ + + LastFieldByteIndex = ACPI_ROUND_BITS_DOWN_TO_BYTES (LastFieldByteIndex); + break; + + default: + return; + } + + /* + * 4) Check for an access (index) beyond the end of the target buffer, + * or a zero length target buffer. + */ + if (!TargetBufferLength || (LastFieldByteIndex >= TargetBufferLength)) + { + AslError (ASL_WARNING, ASL_MSG_BUFFER_FIELD_OVERFLOW, ArgOp, NULL); + } +} + + +/******************************************************************************* + * + * FUNCTION: AnIsValidBufferConstant + * + * PARAMETERS: Op - A buffer-related operand + * + * RETURN: TRUE if operand is valid constant, FALSE otherwise + * + * DESCRIPTION: Check if the input Op is valid constant that can be used + * in compile-time analysis. + * + ******************************************************************************/ + +static BOOLEAN +AnIsValidBufferConstant ( + ACPI_PARSE_OBJECT *Op) +{ + if (!Op) + { + return (FALSE); + } + + if ((Op->Asl.ParseOpcode == PARSEOP_INTEGER) || + (Op->Asl.ParseOpcode == PARSEOP_ZERO) || + (Op->Asl.ParseOpcode == PARSEOP_ONE)) + { + return (TRUE); + } + + return (FALSE); +} + + +/******************************************************************************* + * * FUNCTION: AnAnalyzeStoreOperator * * PARAMETERS: Op - Store() operator Index: src/sys/external/bsd/acpica/dist/compiler/aslfiles.c diff -u src/sys/external/bsd/acpica/dist/compiler/aslfiles.c:1.13 src/sys/external/bsd/acpica/dist/compiler/aslfiles.c:1.14 --- src/sys/external/bsd/acpica/dist/compiler/aslfiles.c:1.13 Sun Apr 28 21:18:06 2019 +++ src/sys/external/bsd/acpica/dist/compiler/aslfiles.c Tue Oct 15 12:13:39 2019 @@ -55,6 +55,10 @@ FlOpenIncludeWithPrefix ( ACPI_PARSE_OBJECT *Op, char *Filename); +static BOOLEAN +FlInputFileExists ( + char *InputFilename); + #ifdef ACPI_OBSOLETE_FUNCTIONS ACPI_STATUS FlParseInputPathname ( @@ -142,7 +146,7 @@ FlInitOneFile ( * ******************************************************************************/ -BOOLEAN +static BOOLEAN FlInputFileExists ( char *Filename) { Index: src/sys/external/bsd/acpica/dist/compiler/aslsupport.l diff -u src/sys/external/bsd/acpica/dist/compiler/aslsupport.l:1.13 src/sys/external/bsd/acpica/dist/compiler/aslsupport.l:1.14 --- src/sys/external/bsd/acpica/dist/compiler/aslsupport.l:1.13 Sun Apr 28 21:18:06 2019 +++ src/sys/external/bsd/acpica/dist/compiler/aslsupport.l Tue Oct 15 12:13:39 2019 @@ -112,7 +112,7 @@ AslDoLineDirective ( while ((c = input()) != '\n' && c != EOF) { - *AslGbl_LineBufPtr = c; + *AslGbl_LineBufPtr = (char) c; AslGbl_LineBufPtr++; } *AslGbl_LineBufPtr = 0; @@ -390,7 +390,7 @@ AslInsertLineBuffer ( if (AcpiGbl_CaptureComments) { - CvProcessCommentState (SourceChar); + CvProcessCommentState ((char) SourceChar); } } } @@ -493,7 +493,7 @@ loop: AslInsertLineBuffer (c); if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { - *StringBuffer = c; + *StringBuffer = (char) c; ++StringBuffer; } c1 = c; @@ -521,7 +521,7 @@ loop: AslInsertLineBuffer (c); if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { - *StringBuffer = c; + *StringBuffer = (char) c; ++StringBuffer; } @@ -612,7 +612,7 @@ AslDoCommentType2 ( AslInsertLineBuffer (c); if (AcpiGbl_CaptureComments && CurrentState.CaptureComments) { - *StringBuffer = c; + *StringBuffer = (char) c; ++StringBuffer; } } @@ -770,7 +770,7 @@ DoCharacter: if (ACPI_IS_OCTAL_DIGIT (StringChar)) { State = ASL_OCTAL_CONSTANT; - ConvertBuffer[0] = StringChar; + ConvertBuffer[0] = (char) StringChar; i = 1; continue; } @@ -826,7 +826,7 @@ DoCharacter: /* Append another digit of the constant */ - ConvertBuffer[i] = StringChar; + ConvertBuffer[i] = (char) StringChar; i++; continue; @@ -870,7 +870,7 @@ DoCharacter: /* Append another digit of the constant */ - ConvertBuffer[i] = StringChar; + ConvertBuffer[i] = (char) StringChar; i++; continue; @@ -881,7 +881,7 @@ DoCharacter: /* Save the finished character */ - *StringBuffer = StringChar; + *StringBuffer = (char) StringChar; StringBuffer++; if (StringBuffer >= EndBuffer) { Index: src/sys/external/bsd/acpica/dist/compiler/dtcompile.c diff -u src/sys/external/bsd/acpica/dist/compiler/dtcompile.c:1.13 src/sys/external/bsd/acpica/dist/compiler/dtcompile.c:1.14 --- src/sys/external/bsd/acpica/dist/compiler/dtcompile.c:1.13 Sun Apr 28 21:18:06 2019 +++ src/sys/external/bsd/acpica/dist/compiler/dtcompile.c Tue Oct 15 12:13:39 2019 @@ -53,7 +53,7 @@ static char VersionStrin /* Local prototypes */ -static ACPI_STATUS +void DtInitialize ( void); @@ -88,16 +88,12 @@ DtDoCompile ( ACPI_STATUS Status; UINT8 Event; DT_FIELD *FieldList; + ASL_GLOBAL_FILE_NODE *FileNode; /* Initialize globals */ - Status = DtInitialize (); - if (ACPI_FAILURE (Status)) - { - printf ("Error during compiler initialization, 0x%X\n", Status); - return (Status); - } + DtInitialize (); /* Preprocessor */ @@ -115,13 +111,29 @@ DtDoCompile ( } } - /* - * Scan the input file (file is already open) and - * build the parse tree - */ - Event = UtBeginEvent ("Scan and parse input file"); - FieldList = DtScanFile (AslGbl_Files[ASL_FILE_INPUT].Handle); - UtEndEvent (Event); + /* Compile the parse tree */ + + if (AslGbl_DtLexBisonPrototype) + { + Event = UtBeginEvent ("Parse data table in prototype mode"); + + DtCompilerInitLexer (AslGbl_Files[ASL_FILE_INPUT].Handle); + DtCompilerParserparse (); + FieldList = AslGbl_FieldList; + DtCompilerTerminateLexer (); + + UtEndEvent (Event); + } + else + { + /* + * Scan the input file (file is already open) and + * build the parse tree + */ + Event = UtBeginEvent ("Scan and parse input file"); + FieldList = DtScanFile (AslGbl_Files[ASL_FILE_INPUT].Handle); + UtEndEvent (Event); + } /* Did the parse tree get successfully constructed? */ @@ -137,14 +149,27 @@ DtDoCompile ( Event = UtBeginEvent ("Compile parse tree"); - /* - * Compile the parse tree - */ Status = DtCompileDataTable (&FieldList); UtEndEvent (Event); + FileNode = FlGetCurrentFileNode (); + if (!FileNode) + { + fprintf (stderr, "Summary for %s could not be generated", + AslGbl_Files[ASL_FILE_INPUT].Filename); + } + else + { + FileNode->TotalLineCount = AslGbl_CurrentLineNumber; + FileNode->OriginalInputFileSize = AslGbl_InputByteCount; + DbgPrint (ASL_PARSE_OUTPUT, "Line count: %u input file size: %u\n", + FileNode->TotalLineCount, FileNode->OriginalInputFileSize); + } + if (ACPI_FAILURE (Status)) { + FileNode->ParserErrorDetected = TRUE; + /* TBD: temporary error message. Msgs should come from function above */ DtError (ASL_ERROR, ASL_MSG_SYNTAX, NULL, @@ -168,6 +193,14 @@ DtDoCompile ( HxDoHexOutput (); DtWriteTableToListing (); + /* Save the compile time statistics to the current file node */ + + if (FileNode) + { + FileNode->TotalFields = AslGbl_InputFieldCount; + FileNode->OutputByteLength = AslGbl_TableLength; + } + return (Status); } @@ -185,25 +218,12 @@ DtDoCompile ( * *****************************************************************************/ -static ACPI_STATUS +void DtInitialize ( void) { - ACPI_STATUS Status; - Status = AcpiOsInitialize (); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - - Status = AcpiUtInitGlobals (); - if (ACPI_FAILURE (Status)) - { - return (Status); - } - AcpiUtSetIntegerWidth (2); /* Set width to 64 bits */ AslGbl_FieldList = NULL; @@ -212,7 +232,7 @@ DtInitialize ( snprintf (VersionString, sizeof(VersionString), "%X", (UINT32) ACPI_CA_VERSION); - return (AE_OK); + return; } Index: src/sys/external/bsd/acpica/dist/compiler/dtfield.c diff -u src/sys/external/bsd/acpica/dist/compiler/dtfield.c:1.13 src/sys/external/bsd/acpica/dist/compiler/dtfield.c:1.14 --- src/sys/external/bsd/acpica/dist/compiler/dtfield.c:1.13 Sun Apr 28 21:18:06 2019 +++ src/sys/external/bsd/acpica/dist/compiler/dtfield.c Tue Oct 15 12:13:39 2019 @@ -172,7 +172,9 @@ DtCompileString ( if (Length > ByteLength) { - snprintf (AslGbl_MsgBuffer, sizeof(AslGbl_MsgBuffer), "Maximum %u characters", ByteLength); + snprintf (AslGbl_MsgBuffer, sizeof(AslGbl_MsgBuffer), + "Maximum %u characters, found %u characters [%s]", + ByteLength, Length, Field->Value); DtError (ASL_ERROR, ASL_MSG_STRING_LENGTH, Field, AslGbl_MsgBuffer); Length = ByteLength; } Index: src/sys/external/bsd/acpica/dist/compiler/asloptions.c diff -u src/sys/external/bsd/acpica/dist/compiler/asloptions.c:1.10 src/sys/external/bsd/acpica/dist/compiler/asloptions.c:1.11 --- src/sys/external/bsd/acpica/dist/compiler/asloptions.c:1.10 Sun Apr 28 21:18:06 2019 +++ src/sys/external/bsd/acpica/dist/compiler/asloptions.c Tue Oct 15 12:13:39 2019 @@ -729,6 +729,11 @@ AslDoOptions ( AslGbl_HexOutputFlag = HEX_OUTPUT_C; break; + case 'p': /* data table flex/bison prototype */ + + AslGbl_DtLexBisonPrototype = TRUE; + break; + case 's': AslGbl_HexOutputFlag = HEX_OUTPUT_ASL; Index: src/sys/external/bsd/acpica/dist/compiler/aslutils.c diff -u src/sys/external/bsd/acpica/dist/compiler/aslutils.c:1.23 src/sys/external/bsd/acpica/dist/compiler/aslutils.c:1.24 --- src/sys/external/bsd/acpica/dist/compiler/aslutils.c:1.23 Sun Apr 28 21:18:06 2019 +++ src/sys/external/bsd/acpica/dist/compiler/aslutils.c Tue Oct 15 12:13:39 2019 @@ -115,6 +115,7 @@ UtQueryForOverwrite ( char *Pathname) { struct stat StatInfo; + int InChar = 0x34; if (!stat (Pathname, &StatInfo)) @@ -122,7 +123,13 @@ UtQueryForOverwrite ( fprintf (stderr, "Target file \"%s\" already exists, overwrite? [y|n] ", Pathname); - if (getchar () != 'y') + InChar = fgetc (stdin); + if (InChar == '\n') + { + InChar = fgetc (stdin); + } + + if ((InChar != 'y') && (InChar != 'Y')) { return (FALSE); } @@ -433,8 +440,14 @@ UtDisplayOneSummary ( { UINT32 i; ASL_GLOBAL_FILE_NODE *FileNode; + BOOLEAN DisplayAMLSummary; + DisplayAMLSummary = + !AslGbl_PreprocessOnly && !AslGbl_ParserErrorDetected && + ((AslGbl_ExceptionCount[ASL_ERROR] == 0) || AslGbl_IgnoreErrors) && + AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle; + if (FileId != ASL_FILE_STDOUT) { /* Compiler name and version number */ @@ -445,60 +458,54 @@ UtDisplayOneSummary ( /* Summary of main input and output files */ - if (AslGbl_FileType == ASL_INPUT_TYPE_ASCII_DATA) + FileNode = FlGetCurrentFileNode (); + if (!FileNode) + { + fprintf (stderr, "Summary could not be generated"); + return; + } + + if (FileNode->ParserErrorDetected) { FlPrintFile (FileId, - "%-14s %s - %u lines, %u bytes, %u fields\n", + "%-14s %s - Compilation aborted due to parser-detected syntax error(s)\n", + "Input file:", AslGbl_Files[ASL_FILE_INPUT].Filename); + } + else if (FileNode->FileType == ASL_INPUT_TYPE_ASCII_DATA) + { + FlPrintFile (FileId, + "%-14s %s - %7u bytes %6u fields %8u source lines\n", "Table Input:", - AslGbl_Files[ASL_FILE_INPUT].Filename, AslGbl_CurrentLineNumber, - AslGbl_InputByteCount, AslGbl_InputFieldCount); + AslGbl_Files[ASL_FILE_INPUT].Filename, + FileNode->OriginalInputFileSize, FileNode->TotalFields, + FileNode->TotalLineCount); - if ((AslGbl_ExceptionCount[ASL_ERROR] == 0) || (AslGbl_IgnoreErrors)) - { - FlPrintFile (FileId, - "%-14s %s - %u bytes\n", - "Binary Output:", - AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, AslGbl_TableLength); - } + FlPrintFile (FileId, + "%-14s %s - %7u bytes\n", + "Binary Output:", + AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, FileNode->OutputByteLength); } - else + else if (FileNode->FileType == ASL_INPUT_TYPE_ASCII_ASL) { - FileNode = FlGetCurrentFileNode (); - if (!FileNode) - { - fprintf (stderr, "Summary could not be generated"); - return; - } - if (FileNode->ParserErrorDetected) - { - FlPrintFile (FileId, - "%-14s %s - Compilation aborted due to parser-detected syntax error(s)\n", - "ASL Input:", AslGbl_Files[ASL_FILE_INPUT].Filename); - } - else + FlPrintFile (FileId, + "%-14s %s - %7u bytes %6u keywords %6u source lines\n", + "ASL Input:", + AslGbl_Files[ASL_FILE_INPUT].Filename, + FileNode->OriginalInputFileSize, + FileNode->TotalKeywords, + FileNode->TotalLineCount); + + /* AML summary */ + + if (DisplayAMLSummary) { FlPrintFile (FileId, - "%-14s %s - %7u bytes %6u keywords %6u source lines\n", - "ASL Input:", - AslGbl_Files[ASL_FILE_INPUT].Filename, - FileNode->OriginalInputFileSize, - FileNode->TotalKeywords, - FileNode->TotalLineCount); - - /* AML summary */ - - if (!AslGbl_ParserErrorDetected && - ((AslGbl_ExceptionCount[ASL_ERROR] == 0) || AslGbl_IgnoreErrors) && - AslGbl_Files[ASL_FILE_AML_OUTPUT].Handle) - { - FlPrintFile (FileId, - "%-14s %s - %7u bytes %6u opcodes %6u named objects\n", - "AML Output:", - AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, - FlGetFileSize (ASL_FILE_AML_OUTPUT), - FileNode->TotalExecutableOpcodes, - FileNode->TotalNamedObjects); - } + "%-14s %s - %7u bytes %6u opcodes %6u named objects\n", + "AML Output:", + AslGbl_Files[ASL_FILE_AML_OUTPUT].Filename, + FlGetFileSize (ASL_FILE_AML_OUTPUT), + FileNode->TotalExecutableOpcodes, + FileNode->TotalNamedObjects); } } @@ -525,7 +532,7 @@ UtDisplayOneSummary ( continue; } - FlPrintFile (FileId, "%14s %s - %u bytes\n", + FlPrintFile (FileId, "%-14s %s - %7u bytes\n", AslGbl_FileDescs[i].ShortDescription, AslGbl_Files[i].Filename, FlGetFileSize (i)); } @@ -882,6 +889,37 @@ UtAttachNamepathToOwner ( /******************************************************************************* * + * FUNCTION: UtNameContainsAllPrefix + * + * PARAMETERS: Op - Op containing NameString + * + * RETURN: NameString consists of all ^ characters + * + * DESCRIPTION: Determine if this Op contains a name segment that consists of + * all '^' characters. + * + ******************************************************************************/ + +BOOLEAN +UtNameContainsAllPrefix ( + ACPI_PARSE_OBJECT *Op) +{ + UINT32 Length = Op->Asl.AmlLength; + UINT32 i; + + for (i = 0; i < Length; i++) + { + if (Op->Asl.Value.String[i] != '^') + { + return (FALSE); + } + } + + return (TRUE); +} + +/******************************************************************************* + * * FUNCTION: UtDoConstant * * PARAMETERS: String - Hex/Decimal/Octal @@ -914,3 +952,56 @@ UtDoConstant ( return (ConvertedInteger); } + + +/****************************************************************************** + * + * FUNCTION: AcpiUtStrdup + * + * PARAMETERS: String1 - string to duplicate + * + * RETURN: int that signifies string relationship. Zero means strings + * are equal. + * + * DESCRIPTION: Duplicate the string using UtCacheAlloc to avoid manual memory + * reclamation. + * + ******************************************************************************/ + +char * +AcpiUtStrdup ( + char *String) +{ + char *NewString = (char *) UtLocalCalloc (strlen (String) + 1); + + + strcpy (NewString, String); + return (NewString); +} + + +/****************************************************************************** + * + * FUNCTION: AcpiUtStrcat + * + * PARAMETERS: String1 + * String2 + * + * RETURN: New string with String1 concatenated with String2 + * + * DESCRIPTION: Concatenate string1 and string2 + * + ******************************************************************************/ + +char * +AcpiUtStrcat ( + char *String1, + char *String2) +{ + UINT32 String1Length = strlen (String1); + char *NewString = (char *) UtLocalCalloc (strlen (String1) + strlen (String2) + 1); + + strcpy (NewString, String1); + strcpy (NewString + String1Length, String2); + return (NewString); +} Index: src/sys/external/bsd/acpica/dist/compiler/dtcompilerparser.y diff -u src/sys/external/bsd/acpica/dist/compiler/dtcompilerparser.y:1.1.1.1 src/sys/external/bsd/acpica/dist/compiler/dtcompilerparser.y:1.2 --- src/sys/external/bsd/acpica/dist/compiler/dtcompilerparser.y:1.1.1.1 Tue Oct 15 12:07:23 2019 +++ src/sys/external/bsd/acpica/dist/compiler/dtcompilerparser.y Tue Oct 15 12:13:39 2019 @@ -57,7 +57,11 @@ void * AslLocalAllo int DtCompilerParserlex (void); int DtCompilerParserparse (void); -void DtCompilerParsererror (char const *msg); +void DtCompilerParsererror ( +#ifdef YYBYACC + YYLTYPE *loc, +#endif + char const *msg); extern char *DtCompilerParsertext; extern DT_FIELD *AslGbl_CurrentField; @@ -166,6 +170,9 @@ Datum void DtCompilerParsererror ( +#ifdef YYBYACC + YYLTYPE *loc, +#endif char const *Message) { DtError (ASL_ERROR, ASL_MSG_SYNTAX, Index: src/sys/external/bsd/acpica/dist/debugger/dbinput.c diff -u src/sys/external/bsd/acpica/dist/debugger/dbinput.c:1.18 src/sys/external/bsd/acpica/dist/debugger/dbinput.c:1.19 --- src/sys/external/bsd/acpica/dist/debugger/dbinput.c:1.18 Sun Apr 28 21:18:06 2019 +++ src/sys/external/bsd/acpica/dist/debugger/dbinput.c Tue Oct 15 12:13:39 2019 @@ -677,7 +677,7 @@ AcpiDbGetLine ( { AcpiOsPrintf ( "Buffer overflow while parsing input line (max %u characters)\n", - sizeof (AcpiGbl_DbParsedBuf)); + (UINT32) sizeof (AcpiGbl_DbParsedBuf)); return (0); } @@ -952,10 +952,10 @@ AcpiDbCommandDispatch ( if (ParamCount == 0) { AcpiOsPrintf ( - "Current debug level for file output is: %8.8lX\n", + "Current debug level for file output is: %8.8X\n", AcpiGbl_DbDebugLevel); AcpiOsPrintf ( - "Current debug level for console output is: %8.8lX\n", + "Current debug level for console output is: %8.8X\n", AcpiGbl_DbConsoleDebugLevel); } else if (ParamCount == 2) @@ -964,7 +964,7 @@ AcpiDbCommandDispatch ( AcpiGbl_DbConsoleDebugLevel = strtoul (AcpiGbl_DbArgs[1], NULL, 16); AcpiOsPrintf ( - "Debug Level for console output was %8.8lX, now %8.8lX\n", + "Debug Level for console output was %8.8X, now %8.8X\n", Temp, AcpiGbl_DbConsoleDebugLevel); } else @@ -972,7 +972,7 @@ AcpiDbCommandDispatch ( Temp = AcpiGbl_DbDebugLevel; AcpiGbl_DbDebugLevel = strtoul (AcpiGbl_DbArgs[1], NULL, 16); AcpiOsPrintf ( - "Debug Level for file output was %8.8lX, now %8.8lX\n", + "Debug Level for file output was %8.8X, now %8.8X\n", Temp, AcpiGbl_DbDebugLevel); } break; Index: src/sys/external/bsd/acpica/dist/debugger/dbmethod.c diff -u src/sys/external/bsd/acpica/dist/debugger/dbmethod.c:1.12 src/sys/external/bsd/acpica/dist/debugger/dbmethod.c:1.13 --- src/sys/external/bsd/acpica/dist/debugger/dbmethod.c:1.12 Sun Apr 28 21:18:06 2019 +++ src/sys/external/bsd/acpica/dist/debugger/dbmethod.c Tue Oct 15 12:13:39 2019 @@ -385,6 +385,11 @@ AcpiDbDisassembleMethod ( } Status = AcpiUtAllocateOwnerId (&ObjDesc->Method.OwnerId); + if (ACPI_FAILURE(Status)) + { + return (Status); + } + WalkState->OwnerId = ObjDesc->Method.OwnerId; /* Push start scope on scope stack and make it current */ Index: src/sys/external/bsd/acpica/dist/events/evxface.c diff -u src/sys/external/bsd/acpica/dist/events/evxface.c:1.11 src/sys/external/bsd/acpica/dist/events/evxface.c:1.12 --- src/sys/external/bsd/acpica/dist/events/evxface.c:1.11 Sun Apr 28 21:18:06 2019 +++ src/sys/external/bsd/acpica/dist/events/evxface.c Tue Oct 15 12:13:39 2019 @@ -1148,7 +1148,7 @@ AcpiRemoveGpeHandler ( ACPI_GPE_DISPATCH_NOTIFY)) && Handler->OriginallyEnabled) { - (void) AcpiEvAddGpeReference (GpeEventInfo); + (void) AcpiEvAddGpeReference (GpeEventInfo, FALSE); if (ACPI_GPE_IS_POLLING_NEEDED (GpeEventInfo)) { /* Poll edge triggered GPEs to handle existing events */ Index: src/sys/external/bsd/acpica/dist/executer/exconfig.c diff -u src/sys/external/bsd/acpica/dist/executer/exconfig.c:1.14 src/sys/external/bsd/acpica/dist/executer/exconfig.c:1.15 --- src/sys/external/bsd/acpica/dist/executer/exconfig.c:1.14 Sun Apr 28 21:18:07 2019 +++ src/sys/external/bsd/acpica/dist/executer/exconfig.c Tue Oct 15 12:13:39 2019 @@ -233,10 +233,11 @@ AcpiExLoadTableOp ( return_ACPI_STATUS (Status); } - /* Complete the initialization/resolution of package objects */ + /* Complete the initialization/resolution of new objects */ - Status = AcpiNsWalkNamespace (ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, 0, AcpiNsInitOnePackage, NULL, NULL, NULL); + AcpiExExitInterpreter(); + AcpiNsInitializeObjects(); + AcpiExEnterInterpreter(); /* Parameter Data (optional) */ @@ -511,10 +512,11 @@ AcpiExLoadOp ( return_ACPI_STATUS (Status); } - /* Complete the initialization/resolution of package objects */ + /* Complete the initialization/resolution of new objects */ - Status = AcpiNsWalkNamespace (ACPI_TYPE_PACKAGE, ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, 0, AcpiNsInitOnePackage, NULL, NULL, NULL); + AcpiExExitInterpreter (); + AcpiNsInitializeObjects (); + AcpiExEnterInterpreter (); /* Store the DdbHandle into the Target operand */ Index: src/sys/external/bsd/acpica/dist/executer/exdump.c diff -u src/sys/external/bsd/acpica/dist/executer/exdump.c:1.13 src/sys/external/bsd/acpica/dist/executer/exdump.c:1.14 --- src/sys/external/bsd/acpica/dist/executer/exdump.c:1.13 Sun Apr 28 21:18:07 2019 +++ src/sys/external/bsd/acpica/dist/executer/exdump.c Tue Oct 15 12:13:39 2019 @@ -147,7 +147,7 @@ static ACPI_EXDUMP_INFO AcpiExDumpMe {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ParamCount), "Parameter Count"}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.SyncLevel), "Sync Level"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.Mutex), "Mutex"}, - {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.OwnerId), "Owner Id"}, + {ACPI_EXD_UINT16, ACPI_EXD_OFFSET (Method.OwnerId), "Owner Id"}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ThreadCount), "Thread Count"}, {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Method.AmlLength), "Aml Length"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.AmlStart), "Aml Start"} @@ -314,8 +314,8 @@ static ACPI_EXDUMP_INFO AcpiExDumpFi static ACPI_EXDUMP_INFO AcpiExDumpNode[7] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpNode), NULL}, - {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET (Flags), "Flags"}, - {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET (OwnerId), "Owner Id"}, + {ACPI_EXD_UINT16, ACPI_EXD_NSOFFSET (Flags), "Flags"}, + {ACPI_EXD_UINT16, ACPI_EXD_NSOFFSET (OwnerId), "Owner Id"}, {ACPI_EXD_LIST, ACPI_EXD_NSOFFSET (Object), "Object List"}, {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Parent), "Parent"}, {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Child), "Child"}, Index: src/sys/external/bsd/acpica/dist/include/acglobal.h diff -u src/sys/external/bsd/acpica/dist/include/acglobal.h:1.19 src/sys/external/bsd/acpica/dist/include/acglobal.h:1.20 --- src/sys/external/bsd/acpica/dist/include/acglobal.h:1.19 Sun Apr 28 21:18:07 2019 +++ src/sys/external/bsd/acpica/dist/include/acglobal.h Tue Oct 15 12:13:39 2019 @@ -215,7 +215,6 @@ ACPI_GLOBAL (BOOLEAN, ACPI_GLOBAL (ACPI_NAMESPACE_NODE, AcpiGbl_RootNodeStruct); ACPI_GLOBAL (ACPI_NAMESPACE_NODE *, AcpiGbl_RootNode); ACPI_GLOBAL (ACPI_NAMESPACE_NODE *, AcpiGbl_FadtGpeDevice); -ACPI_GLOBAL (ACPI_OPERAND_OBJECT *, AcpiGbl_ModuleCodeList); extern const UINT8 AcpiGbl_NsProperties [ACPI_NUM_NS_TYPES]; extern const ACPI_PREDEFINED_NAMES AcpiGbl_PreDefinedNames [NUM_PREDEFINED_NAMES]; Index: src/sys/external/bsd/acpica/dist/include/aclocal.h diff -u src/sys/external/bsd/acpica/dist/include/aclocal.h:1.19 src/sys/external/bsd/acpica/dist/include/aclocal.h:1.20 --- src/sys/external/bsd/acpica/dist/include/aclocal.h:1.19 Sun Apr 28 21:18:07 2019 +++ src/sys/external/bsd/acpica/dist/include/aclocal.h Tue Oct 15 12:13:39 2019 @@ -186,12 +186,12 @@ typedef struct acpi_namespace_node union acpi_operand_object *Object; /* Interpreter object */ UINT8 DescriptorType; /* Differentiate object descriptor types */ UINT8 Type; /* ACPI Type associated with this name */ - UINT8 Flags; /* Miscellaneous flags */ - ACPI_OWNER_ID OwnerId; /* Node creator */ + UINT16 Flags; /* Miscellaneous flags */ ACPI_NAME_UNION Name; /* ACPI Name, always 4 chars per ACPI spec */ struct acpi_namespace_node *Parent; /* Parent node */ struct acpi_namespace_node *Child; /* First child */ struct acpi_namespace_node *Peer; /* First peer */ + ACPI_OWNER_ID OwnerId; /* Node creator */ /* * The following fields are used by the ASL compiler and disassembler only Index: src/sys/external/bsd/acpica/dist/include/actypes.h diff -u src/sys/external/bsd/acpica/dist/include/actypes.h:1.19 src/sys/external/bsd/acpica/dist/include/actypes.h:1.20 --- src/sys/external/bsd/acpica/dist/include/actypes.h:1.19 Fri May 17 16:27:48 2019 +++ src/sys/external/bsd/acpica/dist/include/actypes.h Tue Oct 15 12:13:39 2019 @@ -484,8 +484,8 @@ typedef void * /* Owner IDs are used to track namespace nodes for selective deletion */ -typedef UINT8 ACPI_OWNER_ID; -#define ACPI_OWNER_ID_MAX 0xFF +typedef UINT16 ACPI_OWNER_ID; +#define ACPI_OWNER_ID_MAX 0xFFF /* 4095 possible owner IDs */ #define ACPI_INTEGER_BIT_SIZE 64 @@ -554,8 +554,8 @@ typedef UINT64 /* Pointer/Integer type conversions */ -#define ACPI_TO_POINTER(i) ((void *)((uintptr_t)(ACPI_SIZE) (i))) -#define ACPI_TO_INTEGER(p) ((uintptr_t)(p)) +#define ACPI_TO_POINTER(i) ACPI_CAST_PTR (void, (ACPI_SIZE) (i)) +#define ACPI_TO_INTEGER(p) ACPI_PTR_DIFF (p, (void *) 0) #define ACPI_OFFSET(d, f) ACPI_PTR_DIFF (&(((d *) 0)->f), (void *) 0) #define ACPI_PHYSADDR_TO_PTR(i) ACPI_TO_POINTER(i) #define ACPI_PTR_TO_PHYSADDR(i) ACPI_TO_INTEGER(i) @@ -1410,12 +1410,14 @@ typedef enum #define ACPI_OSI_WIN_VISTA_SP2 0x0A #define ACPI_OSI_WIN_7 0x0B #define ACPI_OSI_WIN_8 0x0C -#define ACPI_OSI_WIN_10 0x0D -#define ACPI_OSI_WIN_10_RS1 0x0E -#define ACPI_OSI_WIN_10_RS2 0x0F -#define ACPI_OSI_WIN_10_RS3 0x10 -#define ACPI_OSI_WIN_10_RS4 0x11 -#define ACPI_OSI_WIN_10_RS5 0x12 +#define ACPI_OSI_WIN_8_1 0x0D +#define ACPI_OSI_WIN_10 0x0E +#define ACPI_OSI_WIN_10_RS1 0x0F +#define ACPI_OSI_WIN_10_RS2 0x10 +#define ACPI_OSI_WIN_10_RS3 0x11 +#define ACPI_OSI_WIN_10_RS4 0x12 +#define ACPI_OSI_WIN_10_RS5 0x13 +#define ACPI_OSI_WIN_10_19H1 0x14 /* Definitions of getopt */ Index: src/sys/external/bsd/acpica/dist/include/acutils.h diff -u src/sys/external/bsd/acpica/dist/include/acutils.h:1.19 src/sys/external/bsd/acpica/dist/include/acutils.h:1.20 --- src/sys/external/bsd/acpica/dist/include/acutils.h:1.19 Sun Apr 28 21:18:07 2019 +++ src/sys/external/bsd/acpica/dist/include/acutils.h Tue Oct 15 12:13:39 2019 @@ -1086,30 +1086,33 @@ AcpiUtDeleteAddressLists ( /* * utxferror - various error/warning output functions */ +ACPI_PRINTF_LIKE(5) void ACPI_INTERNAL_VAR_XFACE AcpiUtPredefinedWarning ( const char *ModuleName, UINT32 LineNumber, char *Pathname, - UINT8 NodeFlags, + UINT16 NodeFlags, const char *Format, ...); +ACPI_PRINTF_LIKE(5) void ACPI_INTERNAL_VAR_XFACE AcpiUtPredefinedInfo ( const char *ModuleName, UINT32 LineNumber, char *Pathname, - UINT8 NodeFlags, + UINT16 NodeFlags, const char *Format, ...); +ACPI_PRINTF_LIKE(5) void ACPI_INTERNAL_VAR_XFACE AcpiUtPredefinedBiosError ( const char *ModuleName, UINT32 LineNumber, char *Pathname, - UINT8 NodeFlags, + UINT16 NodeFlags, const char *Format, ...); Index: src/sys/external/bsd/acpica/dist/include/acnamesp.h diff -u src/sys/external/bsd/acpica/dist/include/acnamesp.h:1.16 src/sys/external/bsd/acpica/dist/include/acnamesp.h:1.17 --- src/sys/external/bsd/acpica/dist/include/acnamesp.h:1.16 Sun Apr 28 21:18:07 2019 +++ src/sys/external/bsd/acpica/dist/include/acnamesp.h Tue Oct 15 12:13:39 2019 @@ -311,10 +311,6 @@ ACPI_STATUS AcpiNsEvaluate ( ACPI_EVALUATE_INFO *Info); -void -AcpiNsExecModuleCodeList ( - void); - /* * nsarguments - Argument count/type checking for predefined/reserved names Index: src/sys/external/bsd/acpica/dist/include/acpiosxf.h diff -u src/sys/external/bsd/acpica/dist/include/acpiosxf.h:1.13 src/sys/external/bsd/acpica/dist/include/acpiosxf.h:1.14 --- src/sys/external/bsd/acpica/dist/include/acpiosxf.h:1.13 Sun Apr 28 21:18:07 2019 +++ src/sys/external/bsd/acpica/dist/include/acpiosxf.h Tue Oct 15 12:13:39 2019 @@ -469,6 +469,7 @@ AcpiOsEnterSleep ( * Debug print routines */ #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPrintf +ACPI_PRINTF_LIKE (1) void ACPI_INTERNAL_VAR_XFACE AcpiOsPrintf ( const char *Format, Index: src/sys/external/bsd/acpica/dist/include/acpixf.h diff -u src/sys/external/bsd/acpica/dist/include/acpixf.h:1.22 src/sys/external/bsd/acpica/dist/include/acpixf.h:1.23 --- src/sys/external/bsd/acpica/dist/include/acpixf.h:1.22 Sun Apr 28 21:18:07 2019 +++ src/sys/external/bsd/acpica/dist/include/acpixf.h Tue Oct 15 12:13:39 2019 @@ -46,7 +46,7 @@ /* Current ACPICA subsystem version in YYYYMMDD format */ -#define ACPI_CA_VERSION 0x20190405 +#define ACPI_CA_VERSION 0x20190816 #include "acconfig.h" #include "actypes.h" @@ -338,6 +338,9 @@ ACPI_GLOBAL (BOOLEAN, Acpi #define ACPI_HW_DEPENDENT_RETURN_OK(Prototype) \ ACPI_EXTERNAL_RETURN_OK(Prototype) +#define ACPI_HW_DEPENDENT_RETURN_UINT32(prototype) \ + ACPI_EXTERNAL_RETURN_UINT32(prototype) + #define ACPI_HW_DEPENDENT_RETURN_VOID(Prototype) \ ACPI_EXTERNAL_RETURN_VOID(Prototype) @@ -348,6 +351,9 @@ ACPI_GLOBAL (BOOLEAN, Acpi #define ACPI_HW_DEPENDENT_RETURN_OK(Prototype) \ static ACPI_INLINE Prototype {return(AE_OK);} +#define ACPI_HW_DEPENDENT_RETURN_UINT32(prototype) \ + static ACPI_INLINE prototype {return(0);} + #define ACPI_HW_DEPENDENT_RETURN_VOID(Prototype) \ static ACPI_INLINE Prototype {return;} @@ -968,6 +974,12 @@ AcpiGetGpeStatus ( UINT32 GpeNumber, ACPI_EVENT_STATUS *EventStatus)) +ACPI_HW_DEPENDENT_RETURN_UINT32 ( +UINT32 +AcpiDispatchGpe ( + ACPI_HANDLE GpeDevice, + UINT32 GpeNumber)) + ACPI_HW_DEPENDENT_RETURN_STATUS ( ACPI_STATUS AcpiDisableAllGpes ( Index: src/sys/external/bsd/acpica/dist/namespace/nsaccess.c diff -u src/sys/external/bsd/acpica/dist/namespace/nsaccess.c:1.17 src/sys/external/bsd/acpica/dist/namespace/nsaccess.c:1.18 --- src/sys/external/bsd/acpica/dist/namespace/nsaccess.c:1.17 Sun Apr 28 21:18:07 2019 +++ src/sys/external/bsd/acpica/dist/namespace/nsaccess.c Tue Oct 15 12:13:39 2019 @@ -76,6 +76,7 @@ AcpiNsRootInitialize ( ACPI_STATUS Status; const ACPI_PREDEFINED_NAMES *InitVal = NULL; ACPI_NAMESPACE_NODE *NewNode; + ACPI_NAMESPACE_NODE *PrevNode = NULL; ACPI_OPERAND_OBJECT *ObjDesc; ACPI_STRING Val = NULL; @@ -105,13 +106,30 @@ AcpiNsRootInitialize ( */ AcpiGbl_RootNode = &AcpiGbl_RootNodeStruct; - /* Enter the pre-defined names in the name table */ + /* Enter the predefined names in the name table */ ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Entering predefined entries into namespace\n")); + /* + * Create the initial (default) namespace. + * This namespace looks like something similar to this: + * + * ACPI Namespace (from Namespace Root): + * 0 _GPE Scope 00203160 00 + * 0 _PR_ Scope 002031D0 00 + * 0 _SB_ Device 00203240 00 Notify Object: 0020ADD8 + * 0 _SI_ Scope 002032B0 00 + * 0 _TZ_ Device 00203320 00 + * 0 _REV Integer 00203390 00 = 0000000000000002 + * 0 _OS_ String 00203488 00 Len 14 "Microsoft Windows NT" + * 0 _GL_ Mutex 00203580 00 Object 002035F0 + * 0 _OSI Method 00203678 00 Args 1 Len 0000 Aml 00000000 + */ for (InitVal = AcpiGbl_PreDefinedNames; InitVal->Name; InitVal++) { + Status = AE_OK; + /* _OSI is optional for now, will be permanent later */ if (!strcmp (InitVal->Name, "_OSI") && !AcpiGbl_CreateOsiMethod) @@ -119,17 +137,35 @@ AcpiNsRootInitialize ( continue; } - Status = AcpiNsLookup (NULL, ACPI_CAST_PTR (char, InitVal->Name), - InitVal->Type, ACPI_IMODE_LOAD_PASS2, ACPI_NS_NO_UPSEARCH, - NULL, &NewNode); - if (ACPI_FAILURE (Status)) + /* + * Create, init, and link the new predefined name + * Note: No need to use AcpiNsLookup here because all the + * predefined names are at the root level. It is much easier to + * just create and link the new node(s) here. + */ + NewNode = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_NAMESPACE_NODE)); + if (!NewNode) { - ACPI_EXCEPTION ((AE_INFO, Status, - "Could not create predefined name %s", - InitVal->Name)); - continue; + Status = AE_NO_MEMORY; + goto UnlockAndExit; } + ACPI_COPY_NAMESEG (NewNode->Name.Ascii, InitVal->Name); + NewNode->DescriptorType = ACPI_DESC_TYPE_NAMED; + NewNode->Type = InitVal->Type; + + if (!PrevNode) + { + AcpiGbl_RootNodeStruct.Child = NewNode; + } + else + { + PrevNode->Peer = NewNode; + } + + NewNode->Parent = &AcpiGbl_RootNodeStruct; + PrevNode = NewNode; + /* * Name entered successfully. If entry in PreDefinedNames[] specifies * an initial value, create the initial value. @@ -178,7 +214,7 @@ AcpiNsRootInitialize ( NewNode->Value = ObjDesc->Method.ParamCount; #else - /* Mark this as a very SPECIAL method */ + /* Mark this as a very SPECIAL method (_OSI) */ ObjDesc->Method.InfoFlags = ACPI_METHOD_INTERNAL_ONLY; ObjDesc->Method.Dispatch.Implementation = AcpiUtOsiImplementation; @@ -251,7 +287,6 @@ AcpiNsRootInitialize ( } } - UnlockAndExit: (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); @@ -624,7 +659,7 @@ AcpiNsLookup ( if (Flags & ACPI_NS_PREFIX_MUST_EXIST) { AcpiOsPrintf (ACPI_MSG_BIOS_ERROR - "Object does not exist: %4.4s\n", &SimpleName); + "Object does not exist: %4.4s\n", (char *) &SimpleName); } #endif /* Name not found in ACPI namespace */ Index: src/sys/external/bsd/acpica/dist/namespace/nsdump.c diff -u src/sys/external/bsd/acpica/dist/namespace/nsdump.c:1.14 src/sys/external/bsd/acpica/dist/namespace/nsdump.c:1.15 --- src/sys/external/bsd/acpica/dist/namespace/nsdump.c:1.14 Sun Apr 28 21:18:07 2019 +++ src/sys/external/bsd/acpica/dist/namespace/nsdump.c Tue Oct 15 12:13:39 2019 @@ -272,7 +272,7 @@ AcpiNsDumpOneObject ( /* Now we can print out the pertinent information */ - AcpiOsPrintf (" %-12s %p %2.2X ", + AcpiOsPrintf (" %-12s %p %3.3X ", AcpiUtGetTypeName (Type), ThisNode, ThisNode->OwnerId); DbgLevel = AcpiDbgLevel; Index: src/sys/external/bsd/acpica/dist/namespace/nseval.c diff -u src/sys/external/bsd/acpica/dist/namespace/nseval.c:1.14 src/sys/external/bsd/acpica/dist/namespace/nseval.c:1.15 --- src/sys/external/bsd/acpica/dist/namespace/nseval.c:1.14 Sun Apr 28 21:18:07 2019 +++ src/sys/external/bsd/acpica/dist/namespace/nseval.c Tue Oct 15 12:13:39 2019 @@ -51,13 +51,6 @@ #define _COMPONENT ACPI_NAMESPACE ACPI_MODULE_NAME ("nseval") -/* Local prototypes */ - -static void -AcpiNsExecModuleCode ( - ACPI_OPERAND_OBJECT *MethodObj, - ACPI_EVALUATE_INFO *Info); - /******************************************************************************* * @@ -356,206 +349,3 @@ Cleanup: Info->FullPathname = NULL; return_ACPI_STATUS (Status); } - - -/******************************************************************************* - * - * FUNCTION: AcpiNsExecModuleCodeList - * - * PARAMETERS: None - * - * RETURN: None. Exceptions during method execution are ignored, since - * we cannot abort a table load. - * - * DESCRIPTION: Execute all elements of the global module-level code list. - * Each element is executed as a single control method. - * - * NOTE: With this option enabled, each block of detected executable AML - * code that is outside of any control method is wrapped with a temporary - * control method object and placed on a global list. The methods on this - * list are executed below. - * - * This function executes the module-level code for all tables only after - * all of the tables have been loaded. It is a legacy option and is - * not compatible with other ACPI implementations. See AcpiNsLoadTable. - * - * This function will be removed when the legacy option is removed. - * - ******************************************************************************/ - -void -AcpiNsExecModuleCodeList ( - void) -{ - ACPI_OPERAND_OBJECT *Prev; - ACPI_OPERAND_OBJECT *Next; - ACPI_EVALUATE_INFO *Info; - UINT32 MethodCount = 0; - - - ACPI_FUNCTION_TRACE (NsExecModuleCodeList); - - - /* Exit now if the list is empty */ - - Next = AcpiGbl_ModuleCodeList; - if (!Next) - { - ACPI_DEBUG_PRINT ((ACPI_DB_INIT_NAMES, - "Legacy MLC block list is empty\n")); - - return_VOID; - } - - /* Allocate the evaluation information block */ - - Info = ACPI_ALLOCATE (sizeof (ACPI_EVALUATE_INFO)); - if (!Info) - { - return_VOID; - } - - /* Walk the list, executing each "method" */ - - while (Next) - { - Prev = Next; - Next = Next->Method.Mutex; - - /* Clear the link field and execute the method */ - - Prev->Method.Mutex = NULL; - AcpiNsExecModuleCode (Prev, Info); - MethodCount++; - - /* Delete the (temporary) method object */ - - AcpiUtRemoveReference (Prev); - } - - ACPI_INFO (( - "Executed %u blocks of module-level executable AML code", - MethodCount)); - - ACPI_FREE (Info); - AcpiGbl_ModuleCodeList = NULL; - return_VOID; -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsExecModuleCode - * - * PARAMETERS: MethodObj - Object container for the module-level code - * Info - Info block for method evaluation - * - * RETURN: None. Exceptions during method execution are ignored, since - * we cannot abort a table load. - * - * DESCRIPTION: Execute a control method containing a block of module-level - * executable AML code. The control method is temporarily - * installed to the root node, then evaluated. - * - ******************************************************************************/ - -static void -AcpiNsExecModuleCode ( - ACPI_OPERAND_OBJECT *MethodObj, - ACPI_EVALUATE_INFO *Info) -{ - ACPI_OPERAND_OBJECT *ParentObj; - ACPI_NAMESPACE_NODE *ParentNode; - ACPI_OBJECT_TYPE Type; - ACPI_STATUS Status; - - - ACPI_FUNCTION_TRACE (NsExecModuleCode); - - - /* - * Get the parent node. We cheat by using the NextObject field - * of the method object descriptor. - */ - ParentNode = ACPI_CAST_PTR ( - ACPI_NAMESPACE_NODE, MethodObj->Method.NextObject); - Type = AcpiNsGetType (ParentNode); - - /* - * Get the region handler and save it in the method object. We may need - * this if an operation region declaration causes a _REG method to be run. - * - * We can't do this in AcpiPsLinkModuleCode because - * AcpiGbl_RootNode->Object is NULL at PASS1. - */ - if ((Type == ACPI_TYPE_DEVICE) && ParentNode->Object) - { - MethodObj->Method.Dispatch.Handler = - ParentNode->Object->Device.Handler; - } - - /* Must clear NextObject (AcpiNsAttachObject needs the field) */ - - MethodObj->Method.NextObject = NULL; - - /* Initialize the evaluation information block */ - - memset (Info, 0, sizeof (ACPI_EVALUATE_INFO)); - Info->PrefixNode = ParentNode; - - /* - * Get the currently attached parent object. Add a reference, - * because the ref count will be decreased when the method object - * is installed to the parent node. - */ - ParentObj = AcpiNsGetAttachedObject (ParentNode); - if (ParentObj) - { - AcpiUtAddReference (ParentObj); - } - - /* Install the method (module-level code) in the parent node */ - - Status = AcpiNsAttachObject (ParentNode, MethodObj, ACPI_TYPE_METHOD); - if (ACPI_FAILURE (Status)) - { - goto Exit; - } - - /* Execute the parent node as a control method */ - - Status = AcpiNsEvaluate (Info); - - ACPI_DEBUG_PRINT ((ACPI_DB_INIT_NAMES, - "Executed module-level code at %p\n", - MethodObj->Method.AmlStart)); - - /* Delete a possible implicit return value (in slack mode) */ - - if (Info->ReturnObject) - { - AcpiUtRemoveReference (Info->ReturnObject); - } - - /* Detach the temporary method object */ - - AcpiNsDetachObject (ParentNode); - - /* Restore the original parent object */ - - if (ParentObj) - { - Status = AcpiNsAttachObject (ParentNode, ParentObj, Type); - } - else - { - ParentNode->Type = (UINT8) Type; - } - -Exit: - if (ParentObj) - { - AcpiUtRemoveReference (ParentObj); - } - return_VOID; -} Index: src/sys/external/bsd/acpica/dist/namespace/nsinit.c diff -u src/sys/external/bsd/acpica/dist/namespace/nsinit.c:1.16 src/sys/external/bsd/acpica/dist/namespace/nsinit.c:1.17 --- src/sys/external/bsd/acpica/dist/namespace/nsinit.c:1.16 Sun Apr 28 21:18:07 2019 +++ src/sys/external/bsd/acpica/dist/namespace/nsinit.c Tue Oct 15 12:13:39 2019 @@ -104,29 +104,30 @@ AcpiNsInitializeObjects ( ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "**** Starting initialization of namespace objects ****\n")); ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, - "Completing Region/Field/Buffer/Package initialization:\n")); + "Final data object initialization: ")); - /* Set all init info to zero */ + /* Clear the info block */ memset (&Info, 0, sizeof (ACPI_INIT_WALK_INFO)); /* Walk entire namespace from the supplied root */ + /* + * TBD: will become ACPI_TYPE_PACKAGE as this type object + * is now the only one that supports deferred initialization + * (forward references). + */ Status = AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, AcpiNsInitOneObject, NULL, - &Info, NULL); + ACPI_UINT32_MAX, AcpiNsInitOneObject, NULL, &Info, NULL); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "During WalkNamespace")); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT, - " Initialized %u/%u Regions %u/%u Fields %u/%u " - "Buffers %u/%u Packages (%u nodes)\n", - Info.OpRegionInit, Info.OpRegionCount, - Info.FieldInit, Info.FieldCount, - Info.BufferInit, Info.BufferCount, - Info.PackageInit, Info.PackageCount, Info.ObjectCount)); + "Namespace contains %u (0x%X) objects\n", + Info.ObjectCount, + Info.ObjectCount)); ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "%u Control Methods found\n%u Op Regions found\n", @@ -453,35 +454,19 @@ AcpiNsInitOneObject ( AcpiExEnterInterpreter (); /* - * Each of these types can contain executable AML code within the - * declaration. + * Only initialization of Package objects can be deferred, in order + * to support forward references. */ switch (Type) { - case ACPI_TYPE_REGION: - - Info->OpRegionInit++; - Status = AcpiDsGetRegionArguments (ObjDesc); - break; - - case ACPI_TYPE_BUFFER_FIELD: - - Info->FieldInit++; - Status = AcpiDsGetBufferFieldArguments (ObjDesc); - break; - case ACPI_TYPE_LOCAL_BANK_FIELD: + /* TBD: BankFields do not require deferred init, remove this code */ + Info->FieldInit++; Status = AcpiDsGetBankFieldArguments (ObjDesc); break; - case ACPI_TYPE_BUFFER: - - Info->BufferInit++; - Status = AcpiDsGetBufferArguments (ObjDesc); - break; - case ACPI_TYPE_PACKAGE: /* Complete the initialization/resolution of the package object */ @@ -492,8 +477,12 @@ AcpiNsInitOneObject ( default: - /* No other types can get here */ + /* No other types should get here */ + Status = AE_TYPE; + ACPI_EXCEPTION ((AE_INFO, Status, + "Opcode is not deferred [%4.4s] (%s)", + AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Type))); break; } Index: src/sys/external/bsd/acpica/dist/namespace/nsrepair2.c diff -u src/sys/external/bsd/acpica/dist/namespace/nsrepair2.c:1.13 src/sys/external/bsd/acpica/dist/namespace/nsrepair2.c:1.14 --- src/sys/external/bsd/acpica/dist/namespace/nsrepair2.c:1.13 Sun Apr 28 21:18:07 2019 +++ src/sys/external/bsd/acpica/dist/namespace/nsrepair2.c Tue Oct 15 12:13:39 2019 @@ -181,7 +181,7 @@ static const ACPI_REPAIR_INFO Acpi #define ACPI_FDE_FIELD_COUNT 5 #define ACPI_FDE_BYTE_BUFFER_SIZE 5 -#define ACPI_FDE_DWORD_BUFFER_SIZE (ACPI_FDE_FIELD_COUNT * sizeof (UINT32)) +#define ACPI_FDE_DWORD_BUFFER_SIZE (ACPI_FDE_FIELD_COUNT * (UINT32) sizeof (UINT32)) /****************************************************************************** Index: src/sys/external/bsd/acpica/dist/tables/tbdata.c diff -u src/sys/external/bsd/acpica/dist/tables/tbdata.c:1.12 src/sys/external/bsd/acpica/dist/tables/tbdata.c:1.13 --- src/sys/external/bsd/acpica/dist/tables/tbdata.c:1.12 Sun Apr 28 21:18:07 2019 +++ src/sys/external/bsd/acpica/dist/tables/tbdata.c Tue Oct 15 12:13:39 2019 @@ -865,6 +865,7 @@ AcpiTbDeleteNamespaceByOwner ( { return_ACPI_STATUS (Status); } + AcpiNsDeleteNamespaceByOwner (OwnerId); AcpiUtReleaseWriteLock (&AcpiGbl_NamespaceRwLock); return_ACPI_STATUS (Status); @@ -1083,19 +1084,6 @@ AcpiTbLoadTable ( Status = AcpiNsLoadTable (TableIndex, ParentNode); /* - * This case handles the legacy option that groups all module-level - * code blocks together and defers execution until all of the tables - * are loaded. Execute all of these blocks at this time. - * Execute any module-level code that was detected during the table - * load phase. - * - * Note: this option is deprecated and will be eliminated in the - * future. Use of this option can cause problems with AML code that - * depends upon in-order immediate execution of module-level code. - */ - AcpiNsExecModuleCodeList (); - - /* * Update GPEs for any new _Lxx/_Exx methods. Ignore errors. The host is * responsible for discovering any new wake GPEs by running _PRW methods * that may have been loaded by this table. Index: src/sys/external/bsd/acpica/dist/tables/tbxfload.c diff -u src/sys/external/bsd/acpica/dist/tables/tbxfload.c:1.10 src/sys/external/bsd/acpica/dist/tables/tbxfload.c:1.11 --- src/sys/external/bsd/acpica/dist/tables/tbxfload.c:1.10 Sun Apr 28 21:18:08 2019 +++ src/sys/external/bsd/acpica/dist/tables/tbxfload.c Tue Oct 15 12:13:39 2019 @@ -382,6 +382,13 @@ AcpiLoadTable ( ACPI_INFO (("Host-directed Dynamic ACPI Table Load:")); Status = AcpiTbInstallAndLoadTable (ACPI_PTR_TO_PHYSADDR (Table), ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL, FALSE, &TableIndex); + if (ACPI_SUCCESS (Status)) + { + /* Complete the initialization/resolution of new objects */ + + AcpiNsInitializeObjects (); + } + return_ACPI_STATUS (Status); } Index: src/sys/external/bsd/acpica/dist/tools/acpidump/apfiles.c diff -u src/sys/external/bsd/acpica/dist/tools/acpidump/apfiles.c:1.11 src/sys/external/bsd/acpica/dist/tools/acpidump/apfiles.c:1.12 --- src/sys/external/bsd/acpica/dist/tools/acpidump/apfiles.c:1.11 Sun Apr 28 21:18:08 2019 +++ src/sys/external/bsd/acpica/dist/tools/acpidump/apfiles.c Tue Oct 15 12:13:40 2019 @@ -69,20 +69,27 @@ ApIsExistingFile ( { #if !defined(_GNU_EFI) && !defined(_EDK2_EFI) struct stat StatInfo; + int InChar; if (!stat (Pathname, &StatInfo)) { fprintf (stderr, "Target path already exists, overwrite? [y|n] "); - if (getchar () != 'y') + InChar = fgetc (stdin); + if (InChar == '\n') + { + InChar = fgetc (stdin); + } + + if (InChar != 'y' && InChar != 'Y') { return (-1); } } #endif - return 0; + return (0); } Index: src/sys/external/bsd/acpica/dist/utilities/utdebug.c diff -u src/sys/external/bsd/acpica/dist/utilities/utdebug.c:1.16 src/sys/external/bsd/acpica/dist/utilities/utdebug.c:1.17 --- src/sys/external/bsd/acpica/dist/utilities/utdebug.c:1.16 Sun Apr 28 21:18:08 2019 +++ src/sys/external/bsd/acpica/dist/utilities/utdebug.c Tue Oct 15 12:13:40 2019 @@ -214,7 +214,7 @@ AcpiDebugPrint ( * Display the module name, current line number, thread ID (if requested), * current procedure nesting level, and the current procedure name */ - AcpiOsPrintf ("%9s-%04ld ", ModuleName, LineNumber); + AcpiOsPrintf ("%9s-%04d ", ModuleName, LineNumber); #ifdef ACPI_APPLICATION /* @@ -235,7 +235,7 @@ AcpiDebugPrint ( FillCount = 0; } - AcpiOsPrintf ("[%02ld] %*s", + AcpiOsPrintf ("[%02d] %*s", AcpiGbl_NestingLevel, AcpiGbl_NestingLevel + 1, " "); AcpiOsPrintf ("%s%*s: ", AcpiUtTrimFunctionName (FunctionName), FillCount, " "); Index: src/sys/external/bsd/acpica/dist/utilities/utosi.c diff -u src/sys/external/bsd/acpica/dist/utilities/utosi.c:1.12 src/sys/external/bsd/acpica/dist/utilities/utosi.c:1.13 --- src/sys/external/bsd/acpica/dist/utilities/utosi.c:1.12 Sun Apr 28 21:18:08 2019 +++ src/sys/external/bsd/acpica/dist/utilities/utosi.c Tue Oct 15 12:13:40 2019 @@ -104,13 +104,14 @@ static ACPI_INTERFACE_INFO AcpiDefaul {"Windows 2006 SP2", NULL, 0, ACPI_OSI_WIN_VISTA_SP2}, /* Windows Vista SP2 - Added 09/2010 */ {"Windows 2009", NULL, 0, ACPI_OSI_WIN_7}, /* Windows 7 and Server 2008 R2 - Added 09/2009 */ {"Windows 2012", NULL, 0, ACPI_OSI_WIN_8}, /* Windows 8 and Server 2012 - Added 08/2012 */ - {"Windows 2013", NULL, 0, ACPI_OSI_WIN_8}, /* Windows 8.1 and Server 2012 R2 - Added 01/2014 */ + {"Windows 2013", NULL, 0, ACPI_OSI_WIN_8_1}, /* Windows 8.1 and Server 2012 R2 - Added 01/2014 */ {"Windows 2015", NULL, 0, ACPI_OSI_WIN_10}, /* Windows 10 - Added 03/2015 */ {"Windows 2016", NULL, 0, ACPI_OSI_WIN_10_RS1}, /* Windows 10 version 1607 - Added 12/2017 */ {"Windows 2017", NULL, 0, ACPI_OSI_WIN_10_RS2}, /* Windows 10 version 1703 - Added 12/2017 */ {"Windows 2017.2", NULL, 0, ACPI_OSI_WIN_10_RS3}, /* Windows 10 version 1709 - Added 02/2018 */ {"Windows 2018", NULL, 0, ACPI_OSI_WIN_10_RS4}, /* Windows 10 version 1803 - Added 11/2018 */ {"Windows 2018.2", NULL, 0, ACPI_OSI_WIN_10_RS5}, /* Windows 10 version 1809 - Added 11/2018 */ + {"Windows 2019", NULL, 0, ACPI_OSI_WIN_10_19H1}, /* Windows 10 version 1903 - Added 08/2019 */ /* Feature Group Strings */