diff options
author | Jung-uk Kim <jkim@FreeBSD.org> | 2018-12-13 19:04:25 +0000 |
---|---|---|
committer | Jung-uk Kim <jkim@FreeBSD.org> | 2018-12-13 19:04:25 +0000 |
commit | d28459aaaf532373b12c80aa5b869f8b591954e7 (patch) | |
tree | 22941844047df08d63d286d7dfbf38f3a8f79e0f /source/components | |
parent | 4d4b15a0e8524e15826ac932bd05252dbd246422 (diff) |
Notes
Diffstat (limited to 'source/components')
21 files changed, 127 insertions, 68 deletions
diff --git a/source/components/dispatcher/dsmethod.c b/source/components/dispatcher/dsmethod.c index 3db8010f7311..009151f91061 100644 --- a/source/components/dispatcher/dsmethod.c +++ b/source/components/dispatcher/dsmethod.c @@ -720,6 +720,8 @@ AcpiDsCallControlMethod ( goto Cleanup; } + NextWalkState->MethodNestingDepth = ThisWalkState->MethodNestingDepth + 1; + /* * Delete the operands on the previous walkstate operand stack * (they were copied to new objects) @@ -738,6 +740,16 @@ AcpiDsCallControlMethod ( "**** Begin nested execution of [%4.4s] **** WalkState=%p\n", MethodNode->Name.Ascii, NextWalkState)); + ThisWalkState->MethodPathname = AcpiNsGetNormalizedPathname (MethodNode, TRUE); + ThisWalkState->MethodIsNested = TRUE; + + /* Optional object evaluation log */ + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION, + "%-26s: %*s%s\n", " Nested method call", + NextWalkState->MethodNestingDepth * 3, " ", + &ThisWalkState->MethodPathname[1])); + /* Invoke an internal method if necessary */ if (ObjDesc->Method.InfoFlags & ACPI_METHOD_INTERNAL_ONLY) diff --git a/source/components/dispatcher/dsobject.c b/source/components/dispatcher/dsobject.c index e9b7413a2feb..4ec23d466c48 100644 --- a/source/components/dispatcher/dsobject.c +++ b/source/components/dispatcher/dsobject.c @@ -161,7 +161,6 @@ ACPI_MODULE_NAME ("dsobject") -#ifndef ACPI_NO_METHOD_EXECUTION /******************************************************************************* * * FUNCTION: AcpiDsBuildInternalObject @@ -460,7 +459,6 @@ AcpiDsCreateNode ( return_ACPI_STATUS (Status); } -#endif /* ACPI_NO_METHOD_EXECUTION */ /******************************************************************************* @@ -571,9 +569,7 @@ AcpiDsInitObjectFromOp ( /* Truncate value if we are executing from a 32-bit ACPI table */ -#ifndef ACPI_NO_METHOD_EXECUTION (void) AcpiExTruncateFor32bitTable (ObjDesc); -#endif break; case AML_REVISION_OP: @@ -594,7 +590,6 @@ AcpiDsInitObjectFromOp ( ObjDesc->Integer.Value = Op->Common.Value.Integer; -#ifndef ACPI_NO_METHOD_EXECUTION if (AcpiExTruncateFor32bitTable (ObjDesc)) { /* Warn if we found a 64-bit constant in a 32-bit table */ @@ -604,7 +599,6 @@ AcpiDsInitObjectFromOp ( ACPI_FORMAT_UINT64 (Op->Common.Value.Integer), (UINT32) ObjDesc->Integer.Value)); } -#endif break; default: @@ -642,12 +636,10 @@ AcpiDsInitObjectFromOp ( ObjDesc->Reference.Value = ((UINT32) Opcode) - AML_FIRST_LOCAL_OP; ObjDesc->Reference.Class = ACPI_REFCLASS_LOCAL; -#ifndef ACPI_NO_METHOD_EXECUTION Status = AcpiDsMethodDataGetNode (ACPI_REFCLASS_LOCAL, ObjDesc->Reference.Value, WalkState, ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE, &ObjDesc->Reference.Object)); -#endif break; case AML_TYPE_METHOD_ARGUMENT: @@ -657,12 +649,10 @@ AcpiDsInitObjectFromOp ( ObjDesc->Reference.Value = ((UINT32) Opcode) - AML_FIRST_ARG_OP; ObjDesc->Reference.Class = ACPI_REFCLASS_ARG; -#ifndef ACPI_NO_METHOD_EXECUTION Status = AcpiDsMethodDataGetNode (ACPI_REFCLASS_ARG, ObjDesc->Reference.Value, WalkState, ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE, &ObjDesc->Reference.Object)); -#endif break; default: /* Object name or Debug object */ diff --git a/source/components/dispatcher/dspkginit.c b/source/components/dispatcher/dspkginit.c index 9e1cd6115fd4..1e7e7383a088 100644 --- a/source/components/dispatcher/dspkginit.c +++ b/source/components/dispatcher/dspkginit.c @@ -308,6 +308,32 @@ AcpiDsBuildInternalPackageObj ( { if (Arg->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP) { + if (!Arg->Common.Node) + { + /* + * This is the case where an expression has returned a value. + * The use of expressions (TermArgs) within individual + * package elements is not supported by the AML interpreter, + * even though the ASL grammar supports it. Example: + * + * Name (INT1, 0x1234) + * + * Name (PKG3, Package () { + * Add (INT1, 0xAAAA0000) + * }) + * + * 1) No known AML interpreter supports this type of construct + * 2) This fixes a fault if the construct is encountered + */ + ACPI_EXCEPTION ((AE_INFO, AE_SUPPORT, + "Expressions within package elements are not supported")); + + /* Cleanup the return object, it is not needed */ + + AcpiUtRemoveReference (WalkState->Results->Results.ObjDesc[0]); + return_ACPI_STATUS (AE_SUPPORT); + } + if (Arg->Common.Node->Type == ACPI_TYPE_METHOD) { /* diff --git a/source/components/dispatcher/dsutils.c b/source/components/dispatcher/dsutils.c index c03f9268f886..20a9e25602d4 100644 --- a/source/components/dispatcher/dsutils.c +++ b/source/components/dispatcher/dsutils.c @@ -209,7 +209,6 @@ AcpiDsClearImplicitReturn ( } -#ifndef ACPI_NO_METHOD_EXECUTION /******************************************************************************* * * FUNCTION: AcpiDsDoImplicitReturn @@ -583,7 +582,6 @@ AcpiDsClearOperands ( WalkState->NumOperands = 0; return_VOID; } -#endif /******************************************************************************* diff --git a/source/components/dispatcher/dswload.c b/source/components/dispatcher/dswload.c index 91f5b3050042..db0f0e8596dd 100644 --- a/source/components/dispatcher/dswload.c +++ b/source/components/dispatcher/dswload.c @@ -221,12 +221,10 @@ AcpiDsInitCallbacks ( /* Execution pass */ -#ifndef ACPI_NO_METHOD_EXECUTION WalkState->ParseFlags |= ACPI_PARSE_EXECUTE | ACPI_PARSE_DELETE_TREE; WalkState->DescendingCallback = AcpiDsExecBeginOp; WalkState->AscendingCallback = AcpiDsExecEndOp; -#endif break; default: @@ -517,7 +515,7 @@ AcpiDsLoad1BeginOp ( /* Initialize the op */ -#if (defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)) +#ifdef ACPI_CONSTANT_EVAL_ONLY Op->Named.Path = Path; #endif @@ -580,7 +578,6 @@ AcpiDsLoad1EndOp ( ObjectType = WalkState->OpInfo->ObjectType; -#ifndef ACPI_NO_METHOD_EXECUTION if (WalkState->OpInfo->Flags & AML_FIELD) { /* @@ -626,7 +623,6 @@ AcpiDsLoad1EndOp ( } } } -#endif if (Op->Common.AmlOpcode == AML_NAME_OP) { diff --git a/source/components/dispatcher/dswload2.c b/source/components/dispatcher/dswload2.c index 4b6e41d8dd30..7387690e2a09 100644 --- a/source/components/dispatcher/dswload2.c +++ b/source/components/dispatcher/dswload2.c @@ -529,10 +529,8 @@ AcpiDsLoad2EndOp ( ACPI_NAMESPACE_NODE *Node; ACPI_PARSE_OBJECT *Arg; ACPI_NAMESPACE_NODE *NewNode; -#ifndef ACPI_NO_METHOD_EXECUTION UINT32 i; UINT8 RegionSpace; -#endif ACPI_FUNCTION_TRACE (DsLoad2EndOp); @@ -622,7 +620,6 @@ AcpiDsLoad2EndOp ( switch (WalkState->OpInfo->Type) { -#ifndef ACPI_NO_METHOD_EXECUTION case AML_TYPE_CREATE_FIELD: /* @@ -718,13 +715,11 @@ AcpiDsLoad2EndOp ( } break; -#endif /* ACPI_NO_METHOD_EXECUTION */ case AML_TYPE_NAMED_COMPLEX: switch (Op->Common.AmlOpcode) { -#ifndef ACPI_NO_METHOD_EXECUTION case AML_REGION_OP: case AML_DATA_REGION_OP: @@ -809,7 +804,6 @@ AcpiDsLoad2EndOp ( } break; -#endif /* ACPI_NO_METHOD_EXECUTION */ default: diff --git a/source/components/dispatcher/dswstate.c b/source/components/dispatcher/dswstate.c index 7994cb12dd1c..409d7f71fa64 100644 --- a/source/components/dispatcher/dswstate.c +++ b/source/components/dispatcher/dswstate.c @@ -733,7 +733,7 @@ AcpiDsCreateWalkState ( /* Init the method args/local */ -#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY)) +#ifndef ACPI_CONSTANT_EVAL_ONLY AcpiDsMethodDataInit (WalkState); #endif diff --git a/source/components/executer/exconvrt.c b/source/components/executer/exconvrt.c index 5c58746e3a4d..a147ba214107 100644 --- a/source/components/executer/exconvrt.c +++ b/source/components/executer/exconvrt.c @@ -496,7 +496,7 @@ AcpiExConvertToAscii ( /* HexLength: 2 ascii hex chars per data byte */ - HexLength = ACPI_MUL_2 (DataWidth); + HexLength = (DataWidth * 2); for (i = 0, j = (HexLength-1); i < HexLength; i++, j--) { /* Get one hex digit, most significant digits first */ @@ -539,7 +539,8 @@ AcpiExConvertToAscii ( * * RETURN: Status * - * DESCRIPTION: Convert an ACPI Object to a string + * DESCRIPTION: Convert an ACPI Object to a string. Supports both implicit + * and explicit conversions and related rules. * ******************************************************************************/ @@ -574,9 +575,11 @@ AcpiExConvertToString ( switch (Type) { case ACPI_EXPLICIT_CONVERT_DECIMAL: - - /* Make room for maximum decimal number */ - + /* + * From ToDecimalString, integer source. + * + * Make room for the maximum decimal number size + */ StringLength = ACPI_MAX_DECIMAL_DIGITS; Base = 10; break; @@ -620,8 +623,10 @@ AcpiExConvertToString ( { case ACPI_EXPLICIT_CONVERT_DECIMAL: /* Used by ToDecimalString */ /* - * From ACPI: "If Data is a buffer, it is converted to a string of - * decimal values separated by commas." + * Explicit conversion from the ToDecimalString ASL operator. + * + * From ACPI: "If the input is a buffer, it is converted to a + * a string of decimal values separated by commas." */ Base = 10; @@ -648,20 +653,29 @@ AcpiExConvertToString ( case ACPI_IMPLICIT_CONVERT_HEX: /* + * Implicit buffer-to-string conversion + * * From the ACPI spec: - *"The entire contents of the buffer are converted to a string of + * "The entire contents of the buffer are converted to a string of * two-character hexadecimal numbers, each separated by a space." + * + * Each hex number is prefixed with 0x (11/2018) */ Separator = ' '; - StringLength = (ObjDesc->Buffer.Length * 3); + StringLength = (ObjDesc->Buffer.Length * 5); break; - case ACPI_EXPLICIT_CONVERT_HEX: /* Used by ToHexString */ + case ACPI_EXPLICIT_CONVERT_HEX: /* + * Explicit conversion from the ToHexString ASL operator. + * * From ACPI: "If Data is a buffer, it is converted to a string of * hexadecimal values separated by commas." + * + * Each hex number is prefixed with 0x (11/2018) */ - StringLength = (ObjDesc->Buffer.Length * 3); + Separator = ','; + StringLength = (ObjDesc->Buffer.Length * 5); break; default: @@ -692,9 +706,20 @@ AcpiExConvertToString ( */ for (i = 0; i < ObjDesc->Buffer.Length; i++) { + if (Base == 16) + { + /* Emit 0x prefix for explict/implicit hex conversion */ + + *NewBuf++ = '0'; + *NewBuf++ = 'x'; + } + NewBuf += AcpiExConvertToAscii ( (UINT64) ObjDesc->Buffer.Pointer[i], Base, NewBuf, 1); - *NewBuf++ = Separator; /* each separated by a comma or space */ + + /* Each digit is separated by either a comma or space */ + + *NewBuf++ = Separator; } /* diff --git a/source/components/executer/excreate.c b/source/components/executer/excreate.c index 524960c2f5cc..f4dd8298f4c4 100644 --- a/source/components/executer/excreate.c +++ b/source/components/executer/excreate.c @@ -161,7 +161,6 @@ ACPI_MODULE_NAME ("excreate") -#ifndef ACPI_NO_METHOD_EXECUTION /******************************************************************************* * * FUNCTION: AcpiExCreateAlias @@ -573,7 +572,6 @@ AcpiExCreatePowerResource ( AcpiUtRemoveReference (ObjDesc); return_ACPI_STATUS (Status); } -#endif /******************************************************************************* diff --git a/source/components/executer/exoparg2.c b/source/components/executer/exoparg2.c index 73d0bd26cc39..0693dcbe2441 100644 --- a/source/components/executer/exoparg2.c +++ b/source/components/executer/exoparg2.c @@ -460,9 +460,9 @@ AcpiExOpcode_2A_1T_1R ( * NOTE: A length of zero is ok, and will create a zero-length, null * terminated string. */ - while ((Length < Operand[0]->Buffer.Length) && - (Length < Operand[1]->Integer.Value) && - (Operand[0]->Buffer.Pointer[Length])) + while ((Length < Operand[0]->Buffer.Length) && /* Length of input buffer */ + (Length < Operand[1]->Integer.Value) && /* Length operand */ + (Operand[0]->Buffer.Pointer[Length])) /* Null terminator */ { Length++; } diff --git a/source/components/executer/exserial.c b/source/components/executer/exserial.c index 73f2aa4a3e12..553aedfb6312 100644 --- a/source/components/executer/exserial.c +++ b/source/components/executer/exserial.c @@ -445,14 +445,12 @@ AcpiExWriteSerialBus ( case ACPI_ADR_SPACE_SMBUS: BufferLength = ACPI_SMBUS_BUFFER_SIZE; - DataLength = ACPI_SMBUS_DATA_SIZE; Function = ACPI_WRITE | (ObjDesc->Field.Attribute << 16); break; case ACPI_ADR_SPACE_IPMI: BufferLength = ACPI_IPMI_BUFFER_SIZE; - DataLength = ACPI_IPMI_DATA_SIZE; Function = ACPI_WRITE; break; @@ -471,7 +469,6 @@ AcpiExWriteSerialBus ( /* Add header length to get the full size of the buffer */ BufferLength += ACPI_SERIAL_HEADER_SIZE; - DataLength = SourceDesc->Buffer.Pointer[1]; Function = ACPI_WRITE | (AccessorType << 16); break; @@ -479,21 +476,6 @@ AcpiExWriteSerialBus ( return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID); } -#if 0 -OBSOLETE? - /* Check for possible buffer overflow */ - - if (DataLength > SourceDesc->Buffer.Length) - { - ACPI_ERROR ((AE_INFO, - "Length in buffer header (%u)(%u) is greater than " - "the physical buffer length (%u) and will overflow", - DataLength, BufferLength, SourceDesc->Buffer.Length)); - - return_ACPI_STATUS (AE_AML_BUFFER_LIMIT); - } -#endif - /* Create the transfer/bidirectional/return buffer */ BufferDesc = AcpiUtCreateBufferObject (BufferLength); @@ -505,6 +487,8 @@ OBSOLETE? /* Copy the input buffer data to the transfer buffer */ Buffer = BufferDesc->Buffer.Pointer; + DataLength = (BufferLength < SourceDesc->Buffer.Length ? + BufferLength : SourceDesc->Buffer.Length); memcpy (Buffer, SourceDesc->Buffer.Pointer, DataLength); /* Lock entire transaction if requested */ diff --git a/source/components/executer/exutils.c b/source/components/executer/exutils.c index a38ce940c481..06ad2b5f32b3 100644 --- a/source/components/executer/exutils.c +++ b/source/components/executer/exutils.c @@ -181,7 +181,6 @@ AcpiExDigitsNeeded ( UINT32 Base); -#ifndef ACPI_NO_METHOD_EXECUTION /******************************************************************************* * * FUNCTION: AcpiExEnterInterpreter @@ -615,4 +614,3 @@ AcpiIsValidSpaceId ( return (TRUE); } -#endif diff --git a/source/components/namespace/nseval.c b/source/components/namespace/nseval.c index 8262d992fec5..0dbac5bf0f9c 100644 --- a/source/components/namespace/nseval.c +++ b/source/components/namespace/nseval.c @@ -259,6 +259,12 @@ AcpiNsEvaluate ( return_ACPI_STATUS (AE_NO_MEMORY); } + /* Optional object evaluation log */ + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION, + "%-26s: %s (%s)\n", " Enter evaluation", + &Info->FullPathname[1], AcpiUtGetTypeName (Info->Node->Type))); + /* Count the number of arguments being passed in */ Info->ParamCount = 0; @@ -445,6 +451,12 @@ AcpiNsEvaluate ( Info->RelativePathname)); Cleanup: + /* Optional object evaluation log */ + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION, + "%-26s: %s\n", " Exit evaluation", + &Info->FullPathname[1])); + /* * Namespace was unlocked by the handling AcpiNs* function, so we * just free the pathname and return diff --git a/source/components/namespace/nsload.c b/source/components/namespace/nsload.c index 698d3a572326..68946074e18d 100644 --- a/source/components/namespace/nsload.c +++ b/source/components/namespace/nsload.c @@ -173,7 +173,6 @@ AcpiNsDeleteSubtree ( #endif -#ifndef ACPI_NO_METHOD_EXECUTION /******************************************************************************* * * FUNCTION: AcpiNsLoadTable @@ -477,4 +476,3 @@ AcpiNsUnloadNamespace ( return_ACPI_STATUS (Status); } #endif -#endif diff --git a/source/components/namespace/nsparse.c b/source/components/namespace/nsparse.c index 8e86ee4c5de9..e781a4ded6b0 100644 --- a/source/components/namespace/nsparse.c +++ b/source/components/namespace/nsparse.c @@ -261,8 +261,18 @@ AcpiNsExecuteTable ( goto Cleanup; } + /* Optional object evaluation log */ + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION, + "%-26s: (Definition Block level)\n", "Module-level evaluation")); + Status = AcpiPsExecuteTable (Info); + /* Optional object evaluation log */ + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION, + "%-26s: (Definition Block level)\n", "Module-level complete")); + Cleanup: if (Info) { diff --git a/source/components/parser/psloop.c b/source/components/parser/psloop.c index 9625834c56f6..1fa2c880ca43 100644 --- a/source/components/parser/psloop.c +++ b/source/components/parser/psloop.c @@ -580,7 +580,7 @@ AcpiPsParseLoop ( ParserState = &WalkState->ParserState; WalkState->ArgTypes = 0; -#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY)) +#ifndef ACPI_CONSTANT_EVAL_ONLY if (WalkState->WalkType & ACPI_WALK_METHOD_RESTART) { diff --git a/source/components/parser/psparse.c b/source/components/parser/psparse.c index 0ad62b771bef..378bfab5b212 100644 --- a/source/components/parser/psparse.c +++ b/source/components/parser/psparse.c @@ -637,6 +637,18 @@ AcpiPsParseAml ( "Completed one call to walk loop, %s State=%p\n", AcpiFormatException (Status), WalkState)); + if (WalkState->MethodPathname && WalkState->MethodIsNested) + { + /* Optional object evaluation log */ + + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION, "%-26s: %*s%s\n", + " Exit nested method", + (WalkState->MethodNestingDepth + 1) * 3, " ", + &WalkState->MethodPathname[1])); + + ACPI_FREE (WalkState->MethodPathname); + WalkState->MethodIsNested = FALSE; + } if (Status == AE_CTRL_TRANSFER) { /* diff --git a/source/components/parser/psxface.c b/source/components/parser/psxface.c index 8516fe3a35df..54f54eab15cd 100644 --- a/source/components/parser/psxface.c +++ b/source/components/parser/psxface.c @@ -307,6 +307,9 @@ AcpiPsExecuteMethod ( goto Cleanup; } + WalkState->MethodPathname = Info->FullPathname; + WalkState->MethodIsNested = FALSE; + if (Info->ObjDesc->Method.InfoFlags & ACPI_METHOD_MODULE_LEVEL) { WalkState->ParseFlags |= ACPI_PARSE_MODULE_LEVEL; @@ -437,6 +440,9 @@ AcpiPsExecuteTable ( goto Cleanup; } + WalkState->MethodPathname = Info->FullPathname; + WalkState->MethodIsNested = FALSE; + if (Info->ObjDesc->Method.InfoFlags & ACPI_METHOD_MODULE_LEVEL) { WalkState->ParseFlags |= ACPI_PARSE_MODULE_LEVEL; diff --git a/source/components/utilities/utglobal.c b/source/components/utilities/utglobal.c index a41c17da727b..d4cde4dbea99 100644 --- a/source/components/utilities/utglobal.c +++ b/source/components/utilities/utglobal.c @@ -235,10 +235,7 @@ const ACPI_PREDEFINED_NAMES AcpiGbl_PreDefinedNames[] = {"_REV", ACPI_TYPE_INTEGER, ACPI_CAST_PTR (char, 2)}, {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME}, {"_GL_", ACPI_TYPE_MUTEX, ACPI_CAST_PTR (char, 1)}, - -#if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY) {"_OSI", ACPI_TYPE_METHOD, ACPI_CAST_PTR (char, 1)}, -#endif /* Table terminator */ diff --git a/source/components/utilities/utmisc.c b/source/components/utilities/utmisc.c index 0e04aff06972..c6dbf915c513 100644 --- a/source/components/utilities/utmisc.c +++ b/source/components/utilities/utmisc.c @@ -217,7 +217,8 @@ AcpiUtIsAmlTable ( if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_DSDT) || ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_PSDT) || ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_SSDT) || - ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_OSDT)) + ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_OSDT) || + ACPI_IS_OEM_SIG (Table->Signature)) { return (TRUE); } diff --git a/source/components/utilities/utosi.c b/source/components/utilities/utosi.c index e63690786417..3713d033b7e7 100644 --- a/source/components/utilities/utosi.c +++ b/source/components/utilities/utosi.c @@ -217,6 +217,8 @@ static ACPI_INTERFACE_INFO AcpiDefaultSupportedInterfaces[] = {"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 */ /* Feature Group Strings */ |