[PATCH] ACPICA: update to version 20130725 (LP: #1205203)
Keng-Yu Lin
kengyu at canonical.com
Mon Jul 29 09:05:42 UTC 2013
On Fri, Jul 26, 2013 at 2:39 PM, Colin King <colin.king at canonical.com> wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Update ACPICA sources used by fwts to version 20130725. The complete
> set of ACPICA changes are detailed here:
>
> https://lists.acpica.org/pipermail/devel/2013-July/000547.html
>
> I've regression tested the syntaxcheck, --disassemble-aml and method
> tests with these changes against my database of ACPI tables and I observed
> no regressions.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> src/acpica/source/common/dmextern.c | 47 ++++--
> src/acpica/source/compiler/asloffset.c | 172 ++++++++++++++++------
> src/acpica/source/compiler/asloperands.c | 9 +-
> src/acpica/source/compiler/dttemplate.c | 23 ++-
> src/acpica/source/components/executer/exoparg1.c | 50 ++++++-
> src/acpica/source/components/namespace/nspredef.c | 15 +-
> src/acpica/source/components/namespace/nswalk.c | 18 +--
> src/acpica/source/components/namespace/nsxfeval.c | 14 +-
> src/acpica/source/components/tables/tbfadt.c | 4 +-
> src/acpica/source/components/tables/tbxfroot.c | 10 +-
> src/acpica/source/components/utilities/utglobal.c | 1 -
> src/acpica/source/components/utilities/utosi.c | 89 +++++++++--
> src/acpica/source/components/utilities/utxface.c | 34 +++++
> src/acpica/source/include/acglobal.h | 7 +-
> src/acpica/source/include/aclocal.h | 17 +--
> src/acpica/source/include/acnamesp.h | 4 +-
> src/acpica/source/include/acpixf.h | 11 +-
> src/acpica/source/include/actables.h | 4 +
> src/acpica/source/include/actypes.h | 28 ++++
> src/acpica/source/include/acutils.h | 4 +
> 20 files changed, 426 insertions(+), 135 deletions(-)
>
> diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c
> index 0cd094f..87aeddc 100644
> --- a/src/acpica/source/common/dmextern.c
> +++ b/src/acpica/source/common/dmextern.c
> @@ -791,34 +791,54 @@ AcpiDmEmitExternals (
>
> AcpiDmUnresolvedWarning (1);
>
> + /* Emit any unresolved method externals in a single text block */
> +
> + NextExternal = AcpiGbl_ExternalList;
> + while (NextExternal)
> + {
> + if ((NextExternal->Type == ACPI_TYPE_METHOD) &&
> + (!NextExternal->Resolved))
> + {
> + AcpiOsPrintf (" External (%s%s",
> + NextExternal->Path,
> + AcpiDmGetObjectTypeName (NextExternal->Type));
> +
> + AcpiOsPrintf (") // Warning: Unresolved Method, "
> + "guessing %u arguments (may be incorrect, see warning above)\n",
> + NextExternal->Value);
> +
> + NextExternal->Emitted = TRUE;
> + }
> +
> + NextExternal = NextExternal->Next;
> + }
> +
> + AcpiOsPrintf ("\n");
> +
> /*
> * Walk the list of externals (unresolved references)
> * found during the AML parsing
> */
> while (AcpiGbl_ExternalList)
> {
> - AcpiOsPrintf (" External (%s%s",
> - AcpiGbl_ExternalList->Path,
> - AcpiDmGetObjectTypeName (AcpiGbl_ExternalList->Type));
> -
> - if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD)
> + if (!AcpiGbl_ExternalList->Emitted)
> {
> - if (AcpiGbl_ExternalList->Resolved)
> + AcpiOsPrintf (" External (%s%s",
> + AcpiGbl_ExternalList->Path,
> + AcpiDmGetObjectTypeName (AcpiGbl_ExternalList->Type));
> +
> + /* For methods, add a comment with the number of arguments */
> +
> + if (AcpiGbl_ExternalList->Type == ACPI_TYPE_METHOD)
> {
> AcpiOsPrintf (") // %u Arguments\n",
> AcpiGbl_ExternalList->Value);
> }
> else
> {
> - AcpiOsPrintf (") // Warning: unresolved Method, "
> - "assuming %u arguments (may be incorrect, see warning above)\n",
> - AcpiGbl_ExternalList->Value);
> + AcpiOsPrintf (")\n");
> }
> }
> - else
> - {
> - AcpiOsPrintf (")\n");
> - }
>
> /* Free this external info block and move on to next external */
>
> @@ -1003,5 +1023,4 @@ AcpiDmUnresolvedWarning (
> (AcpiGbl_NumExternalMethods - AcpiGbl_ResolvedExternalMethods));
> }
> }
> -
> }
> diff --git a/src/acpica/source/compiler/asloffset.c b/src/acpica/source/compiler/asloffset.c
> index 3c6551e..1c6911f 100644
> --- a/src/acpica/source/compiler/asloffset.c
> +++ b/src/acpica/source/compiler/asloffset.c
> @@ -129,10 +129,12 @@ static void
> LsEmitOffsetTableEntry (
> UINT32 FileId,
> ACPI_NAMESPACE_NODE *Node,
> + UINT32 NamepathOffset,
> UINT32 Offset,
> char *OpName,
> UINT64 Value,
> - UINT8 AmlOpcode);
> + UINT8 AmlOpcode,
> + UINT16 ParentOpcode);
>
>
> /*******************************************************************************
> @@ -166,7 +168,8 @@ LsAmlOffsetWalk (
> UINT32 FileId = (UINT32) ACPI_TO_INTEGER (Context);
> ACPI_NAMESPACE_NODE *Node;
> UINT32 Length;
> - UINT32 OffsetOfOpcode;
> + UINT32 NamepathOffset;
> + UINT32 DataOffset;
> ACPI_PARSE_OBJECT *NextOp;
>
>
> @@ -191,8 +194,9 @@ LsAmlOffsetWalk (
> if ((Node->Type == ACPI_TYPE_LOCAL_RESOURCE) &&
> (Op->Asl.CompileFlags & NODE_IS_RESOURCE_DESC))
> {
> - LsEmitOffsetTableEntry (FileId, Node, Gbl_CurrentAmlOffset,
> - Op->Asl.ParseOpName, 0, Op->Asl.Extra);
> + LsEmitOffsetTableEntry (FileId, Node, 0, Gbl_CurrentAmlOffset,
> + Op->Asl.ParseOpName, 0, Op->Asl.Extra, AML_BUFFER_OP);
> +
> Gbl_CurrentAmlOffset += Op->Asl.FinalAmlLength;
> return (AE_OK);
> }
> @@ -210,22 +214,25 @@ LsAmlOffsetWalk (
> }
>
> Length = Op->Asl.FinalAmlLength;
> + NamepathOffset = Gbl_CurrentAmlOffset + Length;
>
> /* Get to the NameSeg/NamePath Op (and length of the name) */
>
> Op = Op->Asl.Child;
> - OffsetOfOpcode = Length + Op->Asl.FinalAmlLength;
> +
> + /* Get offset of last nameseg and the actual data */
> +
> + NamepathOffset = Gbl_CurrentAmlOffset + Length +
> + (Op->Asl.FinalAmlLength - ACPI_NAME_SIZE);
> +
> + DataOffset = Gbl_CurrentAmlOffset + Length +
> + Op->Asl.FinalAmlLength;
>
> /* Get actual value associated with the name */
>
> Op = Op->Asl.Next;
> switch (Op->Asl.AmlOpcode)
> {
> - /*
> - * We are only interested in integer constants that can be changed
> - * at boot time. Note, the One/Ones/Zero opcodes are considered
> - * non-changeable, so we ignore them here.
> - */
> case AML_BYTE_OP:
> case AML_WORD_OP:
> case AML_DWORD_OP:
> @@ -233,22 +240,32 @@ LsAmlOffsetWalk (
>
> /* The +1 is to handle the integer size prefix (opcode) */
>
> - LsEmitOffsetTableEntry (FileId, Node,
> - (Gbl_CurrentAmlOffset + OffsetOfOpcode + 1),
> + LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, (DataOffset + 1),
> Op->Asl.ParseOpName, Op->Asl.Value.Integer,
> - (UINT8) Op->Asl.AmlOpcode);
> + (UINT8) Op->Asl.AmlOpcode, AML_NAME_OP);
> + break;
> +
> + case AML_ONE_OP:
> + case AML_ONES_OP:
> + case AML_ZERO_OP:
> +
> + /* For these, offset will point to the opcode */
> +
> + LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, DataOffset,
> + Op->Asl.ParseOpName, Op->Asl.Value.Integer,
> + (UINT8) Op->Asl.AmlOpcode, AML_NAME_OP);
> break;
>
> case AML_PACKAGE_OP:
> case AML_VAR_PACKAGE_OP:
>
> + /* Get the package element count */
> +
> NextOp = Op->Asl.Child;
>
> - LsEmitOffsetTableEntry (FileId, Node,
> - (Gbl_CurrentAmlOffset + OffsetOfOpcode),
> - Op->Asl.ParseOpName,
> - NextOp->Asl.Value.Integer,
> - (UINT8) Op->Asl.AmlOpcode);
> + LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, DataOffset,
> + Op->Asl.ParseOpName, NextOp->Asl.Value.Integer,
> + (UINT8) Op->Asl.AmlOpcode, AML_NAME_OP);
> break;
>
> default:
> @@ -267,7 +284,14 @@ LsAmlOffsetWalk (
> /* Get the name/namepath node */
>
> NextOp = Op->Asl.Child;
> - OffsetOfOpcode = Length + NextOp->Asl.FinalAmlLength + 1;
> +
> + /* Get offset of last nameseg and the actual data */
> +
> + NamepathOffset = Gbl_CurrentAmlOffset + Length +
> + (NextOp->Asl.FinalAmlLength - ACPI_NAME_SIZE);
> +
> + DataOffset = Gbl_CurrentAmlOffset + Length +
> + (NextOp->Asl.FinalAmlLength + 1);
>
> /* Get the SpaceId node, then the Offset (address) node */
>
> @@ -286,10 +310,9 @@ LsAmlOffsetWalk (
> case AML_DWORD_OP:
> case AML_QWORD_OP:
>
> - LsEmitOffsetTableEntry (FileId, Node,
> - (Gbl_CurrentAmlOffset + OffsetOfOpcode + 1),
> + LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, (DataOffset + 1),
> Op->Asl.ParseOpName, NextOp->Asl.Value.Integer,
> - (UINT8) NextOp->Asl.AmlOpcode);
> + (UINT8) NextOp->Asl.AmlOpcode, AML_REGION_OP);
>
> Gbl_CurrentAmlOffset += Length;
> return (AE_OK);
> @@ -309,15 +332,62 @@ LsAmlOffsetWalk (
>
> NextOp = Op->Asl.Child;
>
> - /* Point to the *last* nameseg in the namepath */
> + /* Get offset of last nameseg and the actual data (flags byte) */
>
> - OffsetOfOpcode = NextOp->Asl.FinalAmlLength - ACPI_NAME_SIZE;
> + NamepathOffset = Gbl_CurrentAmlOffset + Length +
> + (NextOp->Asl.FinalAmlLength - ACPI_NAME_SIZE);
>
> - LsEmitOffsetTableEntry (FileId, Node,
> - (Gbl_CurrentAmlOffset + OffsetOfOpcode + Length),
> - Op->Asl.ParseOpName,
> - *((UINT32 *) &NextOp->Asl.Value.Buffer[OffsetOfOpcode]),
> - (UINT8) Op->Asl.AmlOpcode);
> + DataOffset = Gbl_CurrentAmlOffset + Length +
> + NextOp->Asl.FinalAmlLength;
> +
> + /* Get the flags byte Op */
> +
> + NextOp = NextOp->Asl.Next;
> +
> + LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, DataOffset,
> + Op->Asl.ParseOpName, NextOp->Asl.Value.Integer,
> + (UINT8) Op->Asl.AmlOpcode, AML_METHOD_OP);
> + break;
> +
> + case AML_PROCESSOR_OP:
> +
> + /* Processor (Namepath, ProcessorId, Address, Length) */
> +
> + Length = Op->Asl.FinalAmlLength;
> + NextOp = Op->Asl.Child; /* Get Namepath */
> +
> + /* Get offset of last nameseg and the actual data (PBlock address) */
> +
> + NamepathOffset = Gbl_CurrentAmlOffset + Length +
> + (NextOp->Asl.FinalAmlLength - ACPI_NAME_SIZE);
> +
> + DataOffset = Gbl_CurrentAmlOffset + Length +
> + (NextOp->Asl.FinalAmlLength + 1);
> +
> + NextOp = NextOp->Asl.Next; /* Get ProcessorID (BYTE) */
> + NextOp = NextOp->Asl.Next; /* Get Address (DWORD) */
> +
> + LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, DataOffset,
> + Op->Asl.ParseOpName, NextOp->Asl.Value.Integer,
> + (UINT8) AML_DWORD_OP, AML_PROCESSOR_OP);
> + break;
> +
> + case AML_DEVICE_OP:
> + case AML_SCOPE_OP:
> + case AML_THERMAL_ZONE_OP:
> +
> + /* Device/Scope/ThermalZone (Namepath) */
> +
> + Length = Op->Asl.FinalAmlLength;
> + NextOp = Op->Asl.Child; /* Get Namepath */
> +
> + /* Get offset of last nameseg */
> +
> + NamepathOffset = Gbl_CurrentAmlOffset + Length +
> + (NextOp->Asl.FinalAmlLength - ACPI_NAME_SIZE);
> +
> + LsEmitOffsetTableEntry (FileId, Node, NamepathOffset, 0,
> + Op->Asl.ParseOpName, 0, (UINT8) 0, Op->Asl.AmlOpcode);
> break;
>
> default:
> @@ -339,6 +409,7 @@ LsAmlOffsetWalk (
> * OpName - Name of the AML opcode
> * Value - Current value of the AML field
> * AmlOpcode - Opcode associated with the field
> + * ObjectType - ACPI object type
> *
> * RETURN: None
> *
> @@ -350,10 +421,12 @@ static void
> LsEmitOffsetTableEntry (
> UINT32 FileId,
> ACPI_NAMESPACE_NODE *Node,
> + UINT32 NamepathOffset,
> UINT32 Offset,
> char *OpName,
> UINT64 Value,
> - UINT8 AmlOpcode)
> + UINT8 AmlOpcode,
> + UINT16 ParentOpcode)
> {
> ACPI_BUFFER TargetPath;
> ACPI_STATUS Status;
> @@ -380,8 +453,9 @@ LsEmitOffsetTableEntry (
> * Max Length for Integers is 8 bytes.
> */
> FlPrintFile (FileId,
> - " {%-29s 0x%8.8X, 0x%2.2X, 0x%8.8X%8.8X}, /* %s */\n",
> - MsgBuffer, Offset, AmlOpcode, ACPI_FORMAT_UINT64 (Value), OpName);
> + " {%-29s 0x%4.4X, 0x%8.8X, 0x%2.2X, 0x%8.8X, 0x%8.8X%8.8X}, /* %s */\n",
> + MsgBuffer, ParentOpcode, NamepathOffset, AmlOpcode,
> + Offset, ACPI_FORMAT_UINT64 (Value), OpName);
> }
>
>
> @@ -407,10 +481,12 @@ LsDoOffsetTableHeader (
> "#define __AML_OFFSET_TABLE_H\n\n");
>
> FlPrintFile (FileId, "typedef struct {\n"
> - " char *Pathname;\n"
> - " unsigned long Offset;\n"
> - " unsigned char Opcode;\n"
> - " unsigned long long Value;\n"
> + " char *Pathname; /* Full pathname (from root) to the object */\n"
> + " unsigned short ParentOpcode; /* AML opcode for the parent object */\n"
> + " unsigned long NamesegOffset; /* Offset of last nameseg in the parent namepath */\n"
> + " unsigned char Opcode; /* AML opcode for the data */\n"
> + " unsigned long Offset; /* Offset for the data */\n"
> + " unsigned long long Value; /* Original value of the data (as applicable) */\n"
> "} AML_OFFSET_TABLE_ENTRY;\n\n");
>
> FlPrintFile (FileId,
> @@ -418,29 +494,37 @@ LsDoOffsetTableHeader (
>
> FlPrintFile (FileId,
> "/*\n"
> - " * Information about supported object types:\n"
> + " * Information specific to the supported object types:\n"
> " *\n"
> " * Integers:\n"
> - " * Offset points to the actual integer data\n"
> " * Opcode is the integer prefix, indicates length of the data\n"
> + " * (One of: BYTE, WORD, DWORD, QWORD, ZERO, ONE, ONES)\n"
> + " * Offset points to the actual integer data\n"
> " * Value is the existing value in the AML\n"
> " *\n"
> " * Packages:\n"
> - " * Offset points to the package opcode\n"
> " * Opcode is the package or var_package opcode\n"
> - " * Value is the package element cound\n"
> + " * Offset points to the package opcode\n"
> + " * Value is the package element count\n"
> " *\n"
> " * Operation Regions:\n"
> - " * Offset points to the region address data\n"
> " * Opcode is the address integer prefix, indicates length of the data\n"
> + " * Offset points to the region address\n"
> " * Value is the existing address value in the AML\n"
> " *\n"
> " * Control Methods:\n"
> - " * Offset points to the first byte of the namepath\n"
> + " * Offset points to the method flags byte\n"
> + " * Value is the existing flags value in the AML\n"
> + " *\n"
> + " * Processors:\n"
> + " * Offset points to the first byte of the PBlock Address\n"
> " *\n"
> " * Resource Descriptors:\n"
> - " * Offset points to the start of the descriptor\n"
> " * Opcode is the descriptor type\n"
> + " * Offset points to the start of the descriptor\n"
> + " *\n"
> + " * Scopes/Devices/ThermalZones:\n"
> + " * Nameseg offset only\n"
> " */\n");
>
> FlPrintFile (FileId,
> @@ -455,6 +539,6 @@ LsDoOffsetTableFooter (
> {
>
> FlPrintFile (FileId,
> - " {0,0,0,0} /* Table terminator */\n};\n\n");
> + " {NULL,0,0,0,0,0} /* Table terminator */\n};\n\n");
> Gbl_CurrentAmlOffset = 0;
> }
> diff --git a/src/acpica/source/compiler/asloperands.c b/src/acpica/source/compiler/asloperands.c
> index a9f08d0..1a85a9f 100644
> --- a/src/acpica/source/compiler/asloperands.c
> +++ b/src/acpica/source/compiler/asloperands.c
> @@ -1043,12 +1043,15 @@ OpnDoDefinitionBlock (
> Gbl_TableId = AcpiOsAllocate (Length + 1);
> ACPI_STRCPY (Gbl_TableId, Child->Asl.Value.String);
>
> + /*
> + * Convert anything non-alphanumeric to an underscore. This
> + * allows us to use the TableID to generate unique C symbols.
> + */
> for (i = 0; i < Length; i++)
> {
> - if (Gbl_TableId[i] == ' ')
> + if (!isalnum ((int) Gbl_TableId[i]))
> {
> - Gbl_TableId[i] = 0;
> - break;
> + Gbl_TableId[i] = '_';
> }
> }
> }
> diff --git a/src/acpica/source/compiler/dttemplate.c b/src/acpica/source/compiler/dttemplate.c
> index 53cc34c..bdcad38 100644
> --- a/src/acpica/source/compiler/dttemplate.c
> +++ b/src/acpica/source/compiler/dttemplate.c
> @@ -189,13 +189,21 @@ DtCreateTemplates (
>
>
> AslInitializeGlobals ();
> - AcpiUtStrupr (Signature);
>
> - /* Create all known templates if requested */
> + /* Default (no signature) is DSDT */
> +
> + if (!Signature)
> + {
> + Signature = "DSDT";
> + goto GetTemplate;
> + }
>
> - if (!ACPI_STRNCMP (Signature, "ALL", 3) ||
> + AcpiUtStrupr (Signature);
> + if (!ACPI_STRCMP (Signature, "ALL") ||
> !ACPI_STRCMP (Signature, "*"))
> {
> + /* Create all available/known templates */
> +
> Status = DtCreateAllTemplates ();
> return (Status);
> }
> @@ -208,7 +216,9 @@ DtCreateTemplates (
> */
> if (strlen (Signature) != ACPI_NAME_SIZE)
> {
> - fprintf (stderr, "%s, Invalid ACPI table signature\n", Signature);
> + fprintf (stderr,
> + "%s: Invalid ACPI table signature (length must be 4 characters)\n",
> + Signature);
> return (AE_ERROR);
> }
>
> @@ -225,19 +235,20 @@ DtCreateTemplates (
> Signature = "FACP";
> }
>
> +GetTemplate:
> TableData = AcpiDmGetTableData (Signature);
> if (TableData)
> {
> if (!TableData->Template)
> {
> - fprintf (stderr, "%4.4s, No template available\n", Signature);
> + fprintf (stderr, "%4.4s: No template available\n", Signature);
> return (AE_ERROR);
> }
> }
> else if (!AcpiUtIsSpecialTable (Signature))
> {
> fprintf (stderr,
> - "%4.4s, Unrecognized ACPI table signature\n", Signature);
> + "%4.4s: Unrecognized ACPI table signature\n", Signature);
> return (AE_ERROR);
> }
>
> diff --git a/src/acpica/source/components/executer/exoparg1.c b/src/acpica/source/components/executer/exoparg1.c
> index ee6ffc1..8bde71a 100644
> --- a/src/acpica/source/components/executer/exoparg1.c
> +++ b/src/acpica/source/components/executer/exoparg1.c
> @@ -1081,10 +1081,17 @@ AcpiExOpcode_1A_0T_1R (
> * add another reference to the referenced object, however.
> */
> ReturnDesc = *(Operand[0]->Reference.Where);
> - if (ReturnDesc)
> + if (!ReturnDesc)
> {
> - AcpiUtAddReference (ReturnDesc);
> + /*
> + * Element is NULL, do not allow the dereference.
> + * This provides compatibility with other ACPI
> + * implementations.
> + */
> + return_ACPI_STATUS (AE_AML_UNINITIALIZED_ELEMENT);
> }
> +
> + AcpiUtAddReference (ReturnDesc);
> break;
>
> default:
> @@ -1102,15 +1109,44 @@ AcpiExOpcode_1A_0T_1R (
> ReturnDesc = Operand[0]->Reference.Object;
>
> if (ACPI_GET_DESCRIPTOR_TYPE (ReturnDesc) ==
> - ACPI_DESC_TYPE_NAMED)
> + ACPI_DESC_TYPE_NAMED)
> {
> ReturnDesc = AcpiNsGetAttachedObject (
> - (ACPI_NAMESPACE_NODE *) ReturnDesc);
> - }
> + (ACPI_NAMESPACE_NODE *) ReturnDesc);
> + if (!ReturnDesc)
> + {
> + break;
> + }
>
> - /* Add another reference to the object! */
> + /*
> + * June 2013:
> + * BufferFields/FieldUnits require additional resolution
> + */
> + switch (ReturnDesc->Common.Type)
> + {
> + case ACPI_TYPE_BUFFER_FIELD:
> + case ACPI_TYPE_LOCAL_REGION_FIELD:
> + case ACPI_TYPE_LOCAL_BANK_FIELD:
> + case ACPI_TYPE_LOCAL_INDEX_FIELD:
>
> - AcpiUtAddReference (ReturnDesc);
> + Status = AcpiExReadDataFromField (WalkState,
> + ReturnDesc, &TempDesc);
> + if (ACPI_FAILURE (Status))
> + {
> + goto Cleanup;
> + }
> +
> + ReturnDesc = TempDesc;
> + break;
> +
> + default:
> +
> + /* Add another reference to the object */
> +
> + AcpiUtAddReference (ReturnDesc);
> + break;
> + }
> + }
> break;
>
> default:
> diff --git a/src/acpica/source/components/namespace/nspredef.c b/src/acpica/source/components/namespace/nspredef.c
> index e7bc55b..15ba35e 100644
> --- a/src/acpica/source/components/namespace/nspredef.c
> +++ b/src/acpica/source/components/namespace/nspredef.c
> @@ -237,11 +237,16 @@ AcpiNsCheckReturnValue (
> goto Exit;
> }
>
> + /*
> + *
> + * 4) If there is no return value and it is optional, just return
> + * AE_OK (_WAK).
> + */
> if (!(*ReturnObjectPtr))
> {
> - Status = AE_AML_NO_RETURN_VALUE;
> goto Exit;
> }
> +
> /*
> * For returned Package objects, check the type of all sub-objects.
> * Note: Package may have been newly created by call above.
> @@ -370,7 +375,13 @@ TypeErrorExit:
>
> AcpiUtGetExpectedReturnTypes (TypeBuffer, ExpectedBtypes);
>
> - if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT)
> + if (!ReturnObject)
> + {
> + ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,
> + "Expected return object of type %s",
> + TypeBuffer));
> + }
> + else if (PackageIndex == ACPI_NOT_PACKAGE_ELEMENT)
> {
> ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,
> "Return type mismatch - found %s, expected %s",
> diff --git a/src/acpica/source/components/namespace/nswalk.c b/src/acpica/source/components/namespace/nswalk.c
> index 1084a02..20b1b32 100644
> --- a/src/acpica/source/components/namespace/nswalk.c
> +++ b/src/acpica/source/components/namespace/nswalk.c
> @@ -237,9 +237,9 @@ AcpiNsGetNextNodeTyped (
> * MaxDepth - Depth to which search is to reach
> * Flags - Whether to unlock the NS before invoking
> * the callback routine
> - * PreOrderVisit - Called during tree pre-order visit
> + * DescendingCallback - Called during tree descent
> * when an object of "Type" is found
> - * PostOrderVisit - Called during tree post-order visit
> + * AscendingCallback - Called during tree ascent
> * when an object of "Type" is found
> * Context - Passed to user function(s) above
> * ReturnValue - from the UserFunction if terminated
> @@ -267,8 +267,8 @@ AcpiNsWalkNamespace (
> ACPI_HANDLE StartNode,
> UINT32 MaxDepth,
> UINT32 Flags,
> - ACPI_WALK_CALLBACK PreOrderVisit,
> - ACPI_WALK_CALLBACK PostOrderVisit,
> + ACPI_WALK_CALLBACK DescendingCallback,
> + ACPI_WALK_CALLBACK AscendingCallback,
> void *Context,
> void **ReturnValue)
> {
> @@ -346,22 +346,22 @@ AcpiNsWalkNamespace (
> }
>
> /*
> - * Invoke the user function, either pre-order or post-order
> + * Invoke the user function, either descending, ascending,
> * or both.
> */
> if (!NodePreviouslyVisited)
> {
> - if (PreOrderVisit)
> + if (DescendingCallback)
> {
> - Status = PreOrderVisit (ChildNode, Level,
> + Status = DescendingCallback (ChildNode, Level,
> Context, ReturnValue);
> }
> }
> else
> {
> - if (PostOrderVisit)
> + if (AscendingCallback)
> {
> - Status = PostOrderVisit (ChildNode, Level,
> + Status = AscendingCallback (ChildNode, Level,
> Context, ReturnValue);
> }
> }
> diff --git a/src/acpica/source/components/namespace/nsxfeval.c b/src/acpica/source/components/namespace/nsxfeval.c
> index 901a931..650b774 100644
> --- a/src/acpica/source/components/namespace/nsxfeval.c
> +++ b/src/acpica/source/components/namespace/nsxfeval.c
> @@ -646,9 +646,9 @@ AcpiNsResolveReferences (
> * PARAMETERS: Type - ACPI_OBJECT_TYPE to search for
> * StartObject - Handle in namespace where search begins
> * MaxDepth - Depth to which search is to reach
> - * PreOrderVisit - Called during tree pre-order visit
> + * DescendingCallback - Called during tree descent
> * when an object of "Type" is found
> - * PostOrderVisit - Called during tree post-order visit
> + * AscendingCallback - Called during tree ascent
> * when an object of "Type" is found
> * Context - Passed to user function(s) above
> * ReturnValue - Location where return value of
> @@ -677,8 +677,8 @@ AcpiWalkNamespace (
> ACPI_OBJECT_TYPE Type,
> ACPI_HANDLE StartObject,
> UINT32 MaxDepth,
> - ACPI_WALK_CALLBACK PreOrderVisit,
> - ACPI_WALK_CALLBACK PostOrderVisit,
> + ACPI_WALK_CALLBACK DescendingCallback,
> + ACPI_WALK_CALLBACK AscendingCallback,
> void *Context,
> void **ReturnValue)
> {
> @@ -692,7 +692,7 @@ AcpiWalkNamespace (
>
> if ((Type > ACPI_TYPE_LOCAL_MAX) ||
> (!MaxDepth) ||
> - (!PreOrderVisit && !PostOrderVisit))
> + (!DescendingCallback && !AscendingCallback))
> {
> return_ACPI_STATUS (AE_BAD_PARAMETER);
> }
> @@ -727,8 +727,8 @@ AcpiWalkNamespace (
> }
>
> Status = AcpiNsWalkNamespace (Type, StartObject, MaxDepth,
> - ACPI_NS_WALK_UNLOCK, PreOrderVisit,
> - PostOrderVisit, Context, ReturnValue);
> + ACPI_NS_WALK_UNLOCK, DescendingCallback,
> + AscendingCallback, Context, ReturnValue);
>
> (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
>
> diff --git a/src/acpica/source/components/tables/tbfadt.c b/src/acpica/source/components/tables/tbfadt.c
> index 7e00831..d90baba 100644
> --- a/src/acpica/source/components/tables/tbfadt.c
> +++ b/src/acpica/source/components/tables/tbfadt.c
> @@ -204,7 +204,7 @@ static ACPI_FADT_INFO FadtInfoTable[] =
> ACPI_FADT_OFFSET (PmTimerBlock),
> ACPI_FADT_OFFSET (PmTimerLength),
> ACPI_PM_TIMER_WIDTH,
> - ACPI_FADT_REQUIRED},
> + ACPI_FADT_SEPARATE_LENGTH}, /* ACPI 5.0A: Timer is optional */
>
> {"Gpe0Block",
> ACPI_FADT_OFFSET (XGpe0Block),
> @@ -678,7 +678,7 @@ AcpiTbValidateFadt (
> if (FadtInfoTable[i].Type & ACPI_FADT_REQUIRED)
> {
> /*
> - * Field is required (PM1aEvent, PM1aControl, PmTimer).
> + * Field is required (PM1aEvent, PM1aControl).
> * Both the address and length must be non-zero.
> */
> if (!Address64->Address || !Length)
> diff --git a/src/acpica/source/components/tables/tbxfroot.c b/src/acpica/source/components/tables/tbxfroot.c
> index 7e6a620..b9db205 100644
> --- a/src/acpica/source/components/tables/tbxfroot.c
> +++ b/src/acpica/source/components/tables/tbxfroot.c
> @@ -123,12 +123,6 @@
> #define _COMPONENT ACPI_TABLES
> ACPI_MODULE_NAME ("tbxfroot")
>
> -/* Local prototypes */
> -
> -static ACPI_STATUS
> -AcpiTbValidateRsdp (
> - ACPI_TABLE_RSDP *Rsdp);
> -
>
> /*******************************************************************************
> *
> @@ -142,7 +136,7 @@ AcpiTbValidateRsdp (
> *
> ******************************************************************************/
>
> -static ACPI_STATUS
> +ACPI_STATUS
> AcpiTbValidateRsdp (
> ACPI_TABLE_RSDP *Rsdp)
> {
> @@ -153,7 +147,7 @@ AcpiTbValidateRsdp (
> * Note: Sometimes there exists more than one RSDP in memory; the valid
> * RSDP has a valid checksum, all others have an invalid checksum.
> */
> - if (ACPI_STRNCMP ((char *) Rsdp, ACPI_SIG_RSDP,
> + if (ACPI_STRNCMP ((char *) Rsdp->Signature, ACPI_SIG_RSDP,
> sizeof (ACPI_SIG_RSDP)-1) != 0)
> {
> /* Nope, BAD Signature */
> diff --git a/src/acpica/source/components/utilities/utglobal.c b/src/acpica/source/components/utilities/utglobal.c
> index 330b86b..1ce7610 100644
> --- a/src/acpica/source/components/utilities/utglobal.c
> +++ b/src/acpica/source/components/utilities/utglobal.c
> @@ -391,7 +391,6 @@ AcpiUtInitGlobals (
> AcpiGbl_TraceDbgLayer = 0;
> AcpiGbl_DebuggerConfiguration = DEBUGGER_THREADING;
> AcpiGbl_DbOutputFlags = ACPI_DB_CONSOLE_OUTPUT;
> - AcpiGbl_OsiData = 0;
> AcpiGbl_OsiMutex = NULL;
> AcpiGbl_RegMethodsExecuted = FALSE;
>
> diff --git a/src/acpica/source/components/utilities/utosi.c b/src/acpica/source/components/utilities/utosi.c
> index cda1bfe..55a1d92 100644
> --- a/src/acpica/source/components/utilities/utosi.c
> +++ b/src/acpica/source/components/utilities/utosi.c
> @@ -153,21 +153,20 @@ static ACPI_INTERFACE_INFO AcpiDefaultSupportedInterfaces[] =
>
> /* Feature Group Strings */
>
> - {"Extended Address Space Descriptor", NULL, 0, 0}
> + {"Extended Address Space Descriptor", NULL, ACPI_OSI_FEATURE, 0},
>
> /*
> * All "optional" feature group strings (features that are implemented
> - * by the host) should be dynamically added by the host via
> - * AcpiInstallInterface and should not be manually added here.
> - *
> - * Examples of optional feature group strings:
> - *
> - * "Module Device"
> - * "Processor Device"
> - * "3.0 Thermal Model"
> - * "3.0 _SCP Extensions"
> - * "Processor Aggregator Device"
> + * by the host) should be dynamically modified to VALID by the host via
> + * AcpiInstallInterface or AcpiUpdateInterfaces. Such optional feature
> + * group strings are set as INVALID by default here.
> */
> +
> + {"Module Device", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0},
> + {"Processor Device", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0},
> + {"3.0 Thermal Model", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0},
> + {"3.0 _SCP Extensions", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0},
> + {"Processor Aggregator Device", NULL, ACPI_OSI_OPTIONAL_FEATURE, 0}
> };
>
>
> @@ -244,13 +243,26 @@ AcpiUtInterfaceTerminate (
> {
> AcpiGbl_SupportedInterfaces = NextInterface->Next;
>
> - /* Only interfaces added at runtime can be freed */
> -
> if (NextInterface->Flags & ACPI_OSI_DYNAMIC)
> {
> + /* Only interfaces added at runtime can be freed */
> +
> ACPI_FREE (NextInterface->Name);
> ACPI_FREE (NextInterface);
> }
> + else
> + {
> + /* Interface is in static list. Reset it to invalid or valid. */
> +
> + if (NextInterface->Flags & ACPI_OSI_DEFAULT_INVALID)
> + {
> + NextInterface->Flags |= ACPI_OSI_INVALID;
> + }
> + else
> + {
> + NextInterface->Flags &= ~ACPI_OSI_INVALID;
> + }
> + }
>
> NextInterface = AcpiGbl_SupportedInterfaces;
> }
> @@ -379,6 +391,57 @@ AcpiUtRemoveInterface (
>
> /*******************************************************************************
> *
> + * FUNCTION: AcpiUtUpdateInterfaces
> + *
> + * PARAMETERS: Action - Actions to be performed during the
> + * update
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Update _OSI interface strings, disabling or enabling OS vendor
> + * strings or/and feature group strings.
> + * Caller MUST hold AcpiGbl_OsiMutex
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiUtUpdateInterfaces (
> + UINT8 Action)
> +{
> + ACPI_INTERFACE_INFO *NextInterface;
> +
> +
> + NextInterface = AcpiGbl_SupportedInterfaces;
> + while (NextInterface)
> + {
> + if (((NextInterface->Flags & ACPI_OSI_FEATURE) &&
> + (Action & ACPI_FEATURE_STRINGS)) ||
> + (!(NextInterface->Flags & ACPI_OSI_FEATURE) &&
> + (Action & ACPI_VENDOR_STRINGS)))
> + {
> + if (Action & ACPI_DISABLE_INTERFACES)
> + {
> + /* Mark the interfaces as invalid */
> +
> + NextInterface->Flags |= ACPI_OSI_INVALID;
> + }
> + else
> + {
> + /* Mark the interfaces as valid */
> +
> + NextInterface->Flags &= ~ACPI_OSI_INVALID;
> + }
> + }
> +
> + NextInterface = NextInterface->Next;
> + }
> +
> + return (AE_OK);
> +}
> +
> +
> +/*******************************************************************************
> + *
> * FUNCTION: AcpiUtGetInterface
> *
> * PARAMETERS: InterfaceName - The interface to find
> diff --git a/src/acpica/source/components/utilities/utxface.c b/src/acpica/source/components/utilities/utxface.c
> index f5e75ff..c1b3c46 100644
> --- a/src/acpica/source/components/utilities/utxface.c
> +++ b/src/acpica/source/components/utilities/utxface.c
> @@ -571,6 +571,40 @@ ACPI_EXPORT_SYMBOL (AcpiInstallInterfaceHandler)
>
> /*****************************************************************************
> *
> + * FUNCTION: AcpiUpdateInterfaces
> + *
> + * PARAMETERS: Action - Actions to be performed during the
> + * update
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Update _OSI interface strings, disabling or enabling OS vendor
> + * string or/and feature group strings.
> + *
> + ****************************************************************************/
> +
> +ACPI_STATUS
> +AcpiUpdateInterfaces (
> + UINT8 Action)
> +{
> + ACPI_STATUS Status;
> +
> +
> + Status = AcpiOsAcquireMutex (AcpiGbl_OsiMutex, ACPI_WAIT_FOREVER);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + Status = AcpiUtUpdateInterfaces (Action);
> +
> + AcpiOsReleaseMutex (AcpiGbl_OsiMutex);
> + return (Status);
> +}
> +
> +
> +/*****************************************************************************
> + *
> * FUNCTION: AcpiCheckAddressRange
> *
> * PARAMETERS: SpaceId - Address space ID
> diff --git a/src/acpica/source/include/acglobal.h b/src/acpica/source/include/acglobal.h
> index 66abf13..9056b6d 100644
> --- a/src/acpica/source/include/acglobal.h
> +++ b/src/acpica/source/include/acglobal.h
> @@ -212,6 +212,12 @@ UINT8 ACPI_INIT_GLOBAL (AcpiGbl_DisableAutoRepair, FALSE);
> */
> UINT8 ACPI_INIT_GLOBAL (AcpiGbl_DisableSsdtTableLoad, FALSE);
>
> +/*
> + * We keep track of the latest version of Windows that has been requested by
> + * the BIOS.
> + */
> +UINT8 ACPI_INIT_GLOBAL (AcpiGbl_OsiData, 0);
> +
>
> /* AcpiGbl_FADT is a local copy of the FADT, converted to a common format. */
>
> @@ -362,7 +368,6 @@ ACPI_EXTERN UINT8 AcpiGbl_DebuggerConfiguration;
> ACPI_EXTERN BOOLEAN AcpiGbl_StepToNextCall;
> ACPI_EXTERN BOOLEAN AcpiGbl_AcpiHardwarePresent;
> ACPI_EXTERN BOOLEAN AcpiGbl_EventsInitialized;
> -ACPI_EXTERN UINT8 AcpiGbl_OsiData;
> ACPI_EXTERN ACPI_INTERFACE_INFO *AcpiGbl_SupportedInterfaces;
> ACPI_EXTERN ACPI_ADDRESS_RANGE *AcpiGbl_AddressRangeList[ACPI_ADDRESS_RANGE_MAX];
>
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index dbf5db6..e45b9f5 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -1172,19 +1172,6 @@ typedef struct acpi_bit_register_info
>
> /* Structs and definitions for _OSI support and I/O port validation */
>
> -#define ACPI_OSI_WIN_2000 0x01
> -#define ACPI_OSI_WIN_XP 0x02
> -#define ACPI_OSI_WIN_XP_SP1 0x03
> -#define ACPI_OSI_WINSRV_2003 0x04
> -#define ACPI_OSI_WIN_XP_SP2 0x05
> -#define ACPI_OSI_WINSRV_2003_SP1 0x06
> -#define ACPI_OSI_WIN_VISTA 0x07
> -#define ACPI_OSI_WINSRV_2008 0x08
> -#define ACPI_OSI_WIN_VISTA_SP1 0x09
> -#define ACPI_OSI_WIN_VISTA_SP2 0x0A
> -#define ACPI_OSI_WIN_7 0x0B
> -#define ACPI_OSI_WIN_8 0x0C
> -
> #define ACPI_ALWAYS_ILLEGAL 0x00
>
> typedef struct acpi_interface_info
> @@ -1198,6 +1185,9 @@ typedef struct acpi_interface_info
>
> #define ACPI_OSI_INVALID 0x01
> #define ACPI_OSI_DYNAMIC 0x02
> +#define ACPI_OSI_FEATURE 0x04
> +#define ACPI_OSI_DEFAULT_INVALID 0x08
> +#define ACPI_OSI_OPTIONAL_FEATURE (ACPI_OSI_FEATURE | ACPI_OSI_DEFAULT_INVALID | ACPI_OSI_INVALID)
>
> typedef struct acpi_port_info
> {
> @@ -1293,6 +1283,7 @@ typedef struct acpi_external_list
> UINT8 Type;
> UINT8 Flags;
> BOOLEAN Resolved;
> + BOOLEAN Emitted;
>
> } ACPI_EXTERNAL_LIST;
>
> diff --git a/src/acpica/source/include/acnamesp.h b/src/acpica/source/include/acnamesp.h
> index 52e123c..74575ba 100644
> --- a/src/acpica/source/include/acnamesp.h
> +++ b/src/acpica/source/include/acnamesp.h
> @@ -189,8 +189,8 @@ AcpiNsWalkNamespace (
> ACPI_HANDLE StartObject,
> UINT32 MaxDepth,
> UINT32 Flags,
> - ACPI_WALK_CALLBACK PreOrderVisit,
> - ACPI_WALK_CALLBACK PostOrderVisit,
> + ACPI_WALK_CALLBACK DescendingCallback,
> + ACPI_WALK_CALLBACK AscendingCallback,
> void *Context,
> void **ReturnValue);
>
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index 7042300..3971f57 100644
> --- a/src/acpica/source/include/acpixf.h
> +++ b/src/acpica/source/include/acpixf.h
> @@ -119,7 +119,7 @@
>
> /* Current ACPICA subsystem version in YYYYMMDD format */
>
> -#define ACPI_CA_VERSION 0x20130626
> +#define ACPI_CA_VERSION 0x20130725
>
> #include "acconfig.h"
> #include "actypes.h"
> @@ -133,6 +133,7 @@ extern UINT32 AcpiCurrentGpeCount;
> extern ACPI_TABLE_FADT AcpiGbl_FADT;
> extern BOOLEAN AcpiGbl_SystemAwakeAndRunning;
> extern BOOLEAN AcpiGbl_ReducedHardware; /* ACPI 5.0 */
> +extern UINT8 AcpiGbl_OsiData;
>
> /* Runtime configuration of debug print levels */
>
> @@ -249,6 +250,10 @@ ACPI_STATUS
> AcpiRemoveInterface (
> ACPI_STRING InterfaceName);
>
> +ACPI_STATUS
> +AcpiUpdateInterfaces (
> + UINT8 Action);
> +
> UINT32
> AcpiCheckAddressRange (
> ACPI_ADR_SPACE_TYPE SpaceId,
> @@ -340,8 +345,8 @@ AcpiWalkNamespace (
> ACPI_OBJECT_TYPE Type,
> ACPI_HANDLE StartObject,
> UINT32 MaxDepth,
> - ACPI_WALK_CALLBACK PreOrderVisit,
> - ACPI_WALK_CALLBACK PostOrderVisit,
> + ACPI_WALK_CALLBACK DescendingCallback,
> + ACPI_WALK_CALLBACK AscendingCallback,
> void *Context,
> void **ReturnValue);
>
> diff --git a/src/acpica/source/include/actables.h b/src/acpica/source/include/actables.h
> index dc1bb21..219f4c0 100644
> --- a/src/acpica/source/include/actables.h
> +++ b/src/acpica/source/include/actables.h
> @@ -124,6 +124,10 @@ AcpiAllocateRootTable (
> /*
> * tbxfroot - Root pointer utilities
> */
> +ACPI_STATUS
> +AcpiTbValidateRsdp (
> + ACPI_TABLE_RSDP *Rsdp);
> +
> UINT8 *
> AcpiTbScanMemoryForRsdp (
> UINT8 *StartAddress,
> diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
> index 50d315b..efe1e91 100644
> --- a/src/acpica/source/include/actypes.h
> +++ b/src/acpica/source/include/actypes.h
> @@ -1316,4 +1316,32 @@ typedef struct acpi_memory_list
> } ACPI_MEMORY_LIST;
>
>
> +/* Definitions of _OSI support */
> +
> +#define ACPI_VENDOR_STRINGS 0x01
> +#define ACPI_FEATURE_STRINGS 0x02
> +#define ACPI_ENABLE_INTERFACES 0x00
> +#define ACPI_DISABLE_INTERFACES 0x04
> +
> +#define ACPI_DISABLE_ALL_VENDOR_STRINGS (ACPI_DISABLE_INTERFACES | ACPI_VENDOR_STRINGS)
> +#define ACPI_DISABLE_ALL_FEATURE_STRINGS (ACPI_DISABLE_INTERFACES | ACPI_FEATURE_STRINGS)
> +#define ACPI_DISABLE_ALL_STRINGS (ACPI_DISABLE_INTERFACES | ACPI_VENDOR_STRINGS | ACPI_FEATURE_STRINGS)
> +#define ACPI_ENABLE_ALL_VENDOR_STRINGS (ACPI_ENABLE_INTERFACES | ACPI_VENDOR_STRINGS)
> +#define ACPI_ENABLE_ALL_FEATURE_STRINGS (ACPI_ENABLE_INTERFACES | ACPI_FEATURE_STRINGS)
> +#define ACPI_ENABLE_ALL_STRINGS (ACPI_ENABLE_INTERFACES | ACPI_VENDOR_STRINGS | ACPI_FEATURE_STRINGS)
> +
> +#define ACPI_OSI_WIN_2000 0x01
> +#define ACPI_OSI_WIN_XP 0x02
> +#define ACPI_OSI_WIN_XP_SP1 0x03
> +#define ACPI_OSI_WINSRV_2003 0x04
> +#define ACPI_OSI_WIN_XP_SP2 0x05
> +#define ACPI_OSI_WINSRV_2003_SP1 0x06
> +#define ACPI_OSI_WIN_VISTA 0x07
> +#define ACPI_OSI_WINSRV_2008 0x08
> +#define ACPI_OSI_WIN_VISTA_SP1 0x09
> +#define ACPI_OSI_WIN_VISTA_SP2 0x0A
> +#define ACPI_OSI_WIN_7 0x0B
> +#define ACPI_OSI_WIN_8 0x0C
> +
> +
> #endif /* __ACTYPES_H__ */
> diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
> index 62442de..e6ae828 100644
> --- a/src/acpica/source/include/acutils.h
> +++ b/src/acpica/source/include/acutils.h
> @@ -742,6 +742,10 @@ ACPI_STATUS
> AcpiUtRemoveInterface (
> ACPI_STRING InterfaceName);
>
> +ACPI_STATUS
> +AcpiUtUpdateInterfaces (
> + UINT8 Action);
> +
> ACPI_INTERFACE_INFO *
> AcpiUtGetInterface (
> ACPI_STRING InterfaceName);
> --
> 1.8.1.2
>
Acked-by: Keng-Yu Lin <kengyu at canonical.com>
More information about the fwts-devel
mailing list