- Update to version 20170531
CORE-13348 #resolve

svn path=/trunk/; revision=74729
This commit is contained in:
Thomas Faber 2017-06-01 10:54:48 +00:00
parent 3be9010b96
commit 50313aa5c8
53 changed files with 2644 additions and 468 deletions

View file

@ -89,7 +89,7 @@ AcpiDsExecuteArguments (
ACPI_WALK_STATE *WalkState;
ACPI_FUNCTION_TRACE (DsExecuteArguments);
ACPI_FUNCTION_TRACE_PTR (DsExecuteArguments, AmlStart);
/* Allocate a new parser op to be the root of the parsed tree */
@ -366,7 +366,8 @@ AcpiDsGetPackageArguments (
return_ACPI_STATUS (AE_AML_INTERNAL);
}
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Package Arg Init\n"));
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Package Argument Init, AML Ptr: %p\n",
ObjDesc->Package.AmlStart));
/* Execute the AML code for the TermArg arguments */

View file

@ -212,6 +212,7 @@ AcpiDsDumpMethodStack (
Op->Common.Next = NULL;
#ifdef ACPI_DISASSEMBLER
AcpiOsPrintf ("Failed at ");
AcpiDmDisassemble (NextWalkState, Op, ACPI_UINT32_MAX);
#endif
Op->Common.Next = Next;

View file

@ -225,6 +225,7 @@ AcpiDsMethodError (
ACPI_WALK_STATE *WalkState)
{
UINT32 AmlOffset;
ACPI_NAME Name = 0;
ACPI_FUNCTION_ENTRY ();
@ -253,9 +254,16 @@ AcpiDsMethodError (
AmlOffset = (UINT32) ACPI_PTR_DIFF (WalkState->Aml,
WalkState->ParserState.AmlStart);
Status = AcpiGbl_ExceptionHandler (Status,
WalkState->MethodNode ?
WalkState->MethodNode->Name.Integer : 0,
if (WalkState->MethodNode)
{
Name = WalkState->MethodNode->Name.Integer;
}
else if (WalkState->DeferredNode)
{
Name = WalkState->DeferredNode->Name.Integer;
}
Status = AcpiGbl_ExceptionHandler (Status, Name,
WalkState->Opcode, AmlOffset, NULL);
AcpiExEnterInterpreter ();
}

View file

@ -245,10 +245,9 @@ AcpiDsInitBufferField (
(8 * (UINT32) BufferDesc->Buffer.Length))
{
ACPI_ERROR ((AE_INFO,
"Field [%4.4s] at %u exceeds Buffer [%4.4s] size %u (bits)",
AcpiUtGetNodeName (ResultDesc),
BitOffset + BitCount,
AcpiUtGetNodeName (BufferDesc->Buffer.Node),
"Field [%4.4s] at bit offset/length %u/%u "
"exceeds size of target Buffer (%u bits)",
AcpiUtGetNodeName (ResultDesc), BitOffset, BitCount,
8 * (UINT32) BufferDesc->Buffer.Length));
Status = AE_AML_BUFFER_LIMIT;
goto Cleanup;

View file

@ -0,0 +1,530 @@
/******************************************************************************
*
* Module Name: dspkginit - Completion of deferred package initialization
*
*****************************************************************************/
/*
* Copyright (C) 2000 - 2017, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#include "acpi.h"
#include "accommon.h"
#include "acnamesp.h"
#include "amlcode.h"
#include "acdispat.h"
#include "acinterp.h"
#define _COMPONENT ACPI_NAMESPACE
ACPI_MODULE_NAME ("dspkginit")
/* Local prototypes */
static void
AcpiDsResolvePackageElement (
ACPI_OPERAND_OBJECT **Element);
/*******************************************************************************
*
* FUNCTION: AcpiDsBuildInternalPackageObj
*
* PARAMETERS: WalkState - Current walk state
* Op - Parser object to be translated
* ElementCount - Number of elements in the package - this is
* the NumElements argument to Package()
* ObjDescPtr - Where the ACPI internal object is returned
*
* RETURN: Status
*
* DESCRIPTION: Translate a parser Op package object to the equivalent
* namespace object
*
* NOTE: The number of elements in the package will be always be the NumElements
* count, regardless of the number of elements in the package list. If
* NumElements is smaller, only that many package list elements are used.
* if NumElements is larger, the Package object is padded out with
* objects of type Uninitialized (as per ACPI spec.)
*
* Even though the ASL compilers do not allow NumElements to be smaller
* than the Package list length (for the fixed length package opcode), some
* BIOS code modifies the AML on the fly to adjust the NumElements, and
* this code compensates for that. This also provides compatibility with
* other AML interpreters.
*
******************************************************************************/
ACPI_STATUS
AcpiDsBuildInternalPackageObj (
ACPI_WALK_STATE *WalkState,
ACPI_PARSE_OBJECT *Op,
UINT32 ElementCount,
ACPI_OPERAND_OBJECT **ObjDescPtr)
{
ACPI_PARSE_OBJECT *Arg;
ACPI_PARSE_OBJECT *Parent;
ACPI_OPERAND_OBJECT *ObjDesc = NULL;
ACPI_STATUS Status = AE_OK;
UINT16 Index;
UINT16 ReferenceCount;
UINT32 i;
ACPI_FUNCTION_TRACE (DsBuildInternalPackageObj);
/* Find the parent of a possibly nested package */
Parent = Op->Common.Parent;
while ((Parent->Common.AmlOpcode == AML_PACKAGE_OP) ||
(Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP))
{
Parent = Parent->Common.Parent;
}
/*
* If we are evaluating a Named package object of the form:
* Name (xxxx, Package)
* the package object already exists, otherwise it must be created.
*/
ObjDesc = *ObjDescPtr;
if (!ObjDesc)
{
ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_PACKAGE);
*ObjDescPtr = ObjDesc;
if (!ObjDesc)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
printf ("****DS: BuildPkg - Create package object %p\n", ObjDesc);
ObjDesc->Package.Node = Parent->Common.Node;
}
//
printf ("****DS: BuildPkg, from DsEvalDataObjectOperands - Valid: %X, Pass %u, %p\n",
ObjDesc->Package.Flags & AOPOBJ_DATA_VALID,
WalkState->PassNumber, ObjDesc);
// just in case
if (ObjDesc->Package.Flags & AOPOBJ_DATA_VALID)
{
return_ACPI_STATUS (AE_OK);
}
/*
* Allocate the element array (array of pointers to the individual
* objects) based on the NumElements parameter. Add an extra pointer slot
* so that the list is always null terminated.
*/
ObjDesc->Package.Elements = ACPI_ALLOCATE_ZEROED (
((ACPI_SIZE) ElementCount + 1) * sizeof (void *));
if (!ObjDesc->Package.Elements)
{
AcpiUtDeleteObjectDesc (ObjDesc);
return_ACPI_STATUS (AE_NO_MEMORY);
}
ObjDesc->Package.Count = ElementCount;
/*
* Initialize the elements of the package, up to the NumElements count.
* Package is automatically padded with uninitialized (NULL) elements
* if NumElements is greater than the package list length. Likewise,
* Package is truncated if NumElements is less than the list length.
*/
Arg = Op->Common.Value.Arg;
Arg = Arg->Common.Next;
if (Arg)
{
printf ("****DS: Mark package evaluated\n");
ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID;
}
for (i = 0; Arg && (i < ElementCount); i++)
{
printf ("****DS: Eval package element\n");
if (Arg->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP)
{
// Maybe this is just temp code:
/*
if (!Arg->Common.Node)
{
printf ("****DS: No attached NS node\n");
return_ACPI_STATUS (AE_AML_INTERNAL);
}
else */ if (Arg->Common.Node->Type == ACPI_TYPE_METHOD)
{
/*
* A method reference "looks" to the parser to be a method
* invocation, so we special case it here
*/
Arg->Common.AmlOpcode = AML_INT_NAMEPATH_OP;
Status = AcpiDsBuildInternalObject (
WalkState, Arg, &ObjDesc->Package.Elements[i]);
}
else
{
/* This package element is already built, just get it */
ObjDesc->Package.Elements[i] =
ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Arg->Common.Node);
}
}
else
{
Status = AcpiDsBuildInternalObject (
WalkState, Arg, &ObjDesc->Package.Elements[i]);
if (Status == AE_NOT_FOUND)
{
// remove or fix
ACPI_ERROR ((AE_INFO, "%-48s", "****DS namepath not found"));
}
/*
* Initialize this package element. This function handles the
* resolution of named references within the package.
*/
AcpiDsInitPackageElement (0, ObjDesc->Package.Elements[i],
NULL, &ObjDesc->Package.Elements[i]);
}
if (*ObjDescPtr)
{
/* Existing package, get existing reference count */
ReferenceCount = (*ObjDescPtr)->Common.ReferenceCount;
if (ReferenceCount > 1)
{
/* Make new element ref count match original ref count */
for (Index = 0; Index < (ReferenceCount - 1); Index++)
{
AcpiUtAddReference ((ObjDesc->Package.Elements[i]));
}
}
}
Arg = Arg->Common.Next;
}
/* Check for match between NumElements and actual length of PackageList */
if (Arg)
{
//ObjDesc->Package.Flags |= AOPOBJ_DATA_VALID;
/*
* NumElements was exhausted, but there are remaining elements in the
* PackageList. Truncate the package to NumElements.
*
* Note: technically, this is an error, from ACPI spec: "It is an error
* for NumElements to be less than the number of elements in the
* PackageList". However, we just print a message and
* no exception is returned. This provides Windows compatibility. Some
* BIOSs will alter the NumElements on the fly, creating this type
* of ill-formed package object.
*/
while (Arg)
{
/*
* We must delete any package elements that were created earlier
* and are not going to be used because of the package truncation.
*/
if (Arg->Common.Node)
{
AcpiUtRemoveReference (
ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Arg->Common.Node));
Arg->Common.Node = NULL;
}
/* Find out how many elements there really are */
i++;
Arg = Arg->Common.Next;
}
ACPI_INFO ((
"Actual Package length (%u) is larger than "
"NumElements field (%u), truncated",
i, ElementCount));
}
else if (i < ElementCount)
{
/*
* Arg list (elements) was exhausted, but we did not reach
* NumElements count.
*
* Note: this is not an error, the package is padded out
* with NULLs.
*/
ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
"Package List length (%u) smaller than NumElements "
"count (%u), padded with null elements\n",
i, ElementCount));
}
Op->Common.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjDesc);
return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
* FUNCTION: AcpiDsInitPackageElement
*
* PARAMETERS: ACPI_PKG_CALLBACK
*
* RETURN: Status
*
* DESCRIPTION: Resolve a named reference element within a package object
*
******************************************************************************/
ACPI_STATUS
AcpiDsInitPackageElement (
UINT8 ObjectType,
ACPI_OPERAND_OBJECT *SourceObject,
ACPI_GENERIC_STATE *State,
void *Context)
{
ACPI_OPERAND_OBJECT **ElementPtr;
if (!SourceObject)
{
return (AE_OK);
}
/*
* The following code is a bit of a hack to workaround a (current)
* limitation of the ACPI_PKG_CALLBACK interface. We need a pointer
* to the location within the element array because a new object
* may be created and stored there.
*/
if (Context)
{
/* A direct call was made to this function */
ElementPtr = (ACPI_OPERAND_OBJECT **) Context;
}
else
{
/* Call came from AcpiUtWalkPackageTree */
ElementPtr = State->Pkg.ThisTargetObj;
}
/* We are only interested in reference objects/elements */
if (SourceObject->Common.Type == ACPI_TYPE_LOCAL_REFERENCE)
{
/* Resolve the (named) reference to a namespace node */
AcpiDsResolvePackageElement (ElementPtr);
}
else if (SourceObject->Common.Type == ACPI_TYPE_PACKAGE)
{
SourceObject->Package.Flags |= AOPOBJ_DATA_VALID;
}
return (AE_OK);
}
/*******************************************************************************
*
* FUNCTION: AcpiDsResolvePackageElement
*
* PARAMETERS: ElementPtr - Pointer to a reference object
*
* RETURN: Status
*
* DESCRIPTION: Resolve a package element that is a reference to a named
* object.
*
******************************************************************************/
static void
AcpiDsResolvePackageElement (
ACPI_OPERAND_OBJECT **ElementPtr)
{
ACPI_STATUS Status;
ACPI_GENERIC_STATE ScopeInfo;
ACPI_OPERAND_OBJECT *Element = *ElementPtr;
ACPI_NAMESPACE_NODE *ResolvedNode;
ACPI_OBJECT_TYPE Type;
ACPI_FUNCTION_TRACE (DsResolvePackageElement);
/* Check if reference element is already resolved */
if (Element->Reference.Resolved)
{
return_VOID;
}
/* Element must be a reference object of correct type */
ScopeInfo.Scope.Node = Element->Reference.Node; /* Prefix node */
Status = AcpiNsLookup (&ScopeInfo,
(char *) Element->Reference.Aml, /* Pointer to AML path */
ACPI_TYPE_ANY, ACPI_IMODE_LOAD_PASS2,
ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE,
NULL, &ResolvedNode);
if (ACPI_FAILURE (Status))
{
ACPI_EXCEPTION ((AE_INFO, Status,
"Could not resolve package element"));
return_VOID;
}
else if (ResolvedNode->Type == ACPI_TYPE_ANY)
{
/* Named reference not resolved, return a NULL package element */
ACPI_ERROR ((AE_INFO,
"Could not resolve package element [%4.4s] in [%4.4s]",
ResolvedNode->Name.Ascii, ScopeInfo.Scope.Node->Name.Ascii));
*ElementPtr = NULL;
return_VOID;
}
else if (ResolvedNode->Flags & ANOBJ_TEMPORARY)
{
/*
* A temporary node found here indicates that the reference is
* to a node that was created within this method. We are not
* going to allow it (especially if the package is returned
* from the method) -- the temporary node will be deleted out
* from under the method. (05/2017).
*/
ACPI_ERROR ((AE_INFO,
"Package element is a temporary name [%4.4s], "
"returning NULL element",
ResolvedNode->Name.Ascii));
*ElementPtr = NULL;
return_VOID;
}
/* Update the reference object */
Element->Reference.Resolved = TRUE;
Element->Reference.Node = ResolvedNode;
Type = Element->Reference.Node->Type;
/*
* Attempt to resolve the node to a value before we insert it into
* the package. If this is a reference to a common data type,
* resolve it immediately. According to the ACPI spec, package
* elements can only be "data objects" or method references.
* Attempt to resolve to an Integer, Buffer, String or Package.
* If cannot, return the named reference (for things like Devices,
* Methods, etc.) Buffer Fields and Fields will resolve to simple
* objects (int/buf/str/pkg).
*
* NOTE: References to things like Devices, Methods, Mutexes, etc.
* will remain as named references. This behavior is not described
* in the ACPI spec, but it appears to be an oversight.
*/
Status = AcpiExResolveNodeToValue (&ResolvedNode, NULL);
if (ACPI_FAILURE (Status))
{
return_VOID;
}
#if 0
/*
* Special handling for Alias objects. We need to setup the type
* and the Op->Common.Node to point to the Alias target. Note,
* Alias has at most one level of indirection internally.
*/
Type = Op->Common.Node->Type;
if (Type == ACPI_TYPE_LOCAL_ALIAS)
{
Type = ObjDesc->Common.Type;
Op->Common.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE,
Op->Common.Node->Object);
}
#endif
switch (Type)
{
/*
* These object types are a result of named references, so we will
* leave them as reference objects. In other words, these types
* have no intrinsic "value".
*/
case ACPI_TYPE_DEVICE:
case ACPI_TYPE_THERMAL:
/* TBD: This may not be necesssary */
AcpiUtAddReference (ResolvedNode->Object);
break;
case ACPI_TYPE_MUTEX:
case ACPI_TYPE_METHOD:
case ACPI_TYPE_POWER:
case ACPI_TYPE_PROCESSOR:
case ACPI_TYPE_EVENT:
case ACPI_TYPE_REGION:
break;
default:
/*
* For all other types - the node was resolved to an actual
* operand object with a value, return the object
*/
*ElementPtr = (ACPI_OPERAND_OBJECT *) ResolvedNode;
break;
}
return_VOID;
}

View file

@ -683,12 +683,6 @@ AcpiDsCreateOperand (
if ((OpInfo->Flags & AML_HAS_RETVAL) ||
(Arg->Common.Flags & ACPI_PARSEOP_IN_STACK))
{
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
"Argument previously created, already stacked\n"));
AcpiDbDisplayArgumentObject (
WalkState->Operands [WalkState->NumOperands - 1], WalkState);
/*
* Use value that was already previously returned
* by the evaluation of this argument

View file

@ -615,7 +615,8 @@ AcpiDsExecEndOp (
case AML_TYPE_CREATE_OBJECT:
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
"Executing CreateObject (Buffer/Package) Op=%p\n", Op));
"Executing CreateObject (Buffer/Package) Op=%p AMLPtr=%p\n",
Op, Op->Named.Data));
switch (Op->Common.Parent->Common.AmlOpcode)
{

View file

@ -410,7 +410,7 @@ AcpiDsLoad1BeginOp (
/* Initialize the op */
#if (defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY))
Op->Named.Path = ACPI_CAST_PTR (UINT8, Path);
Op->Named.Path = Path;
#endif
if (Node)
@ -450,6 +450,10 @@ AcpiDsLoad1EndOp (
ACPI_OBJECT_TYPE ObjectType;
ACPI_STATUS Status = AE_OK;
#ifdef ACPI_ASL_COMPILER
UINT8 ParamCount;
#endif
ACPI_FUNCTION_TRACE (DsLoad1EndOp);
@ -534,6 +538,37 @@ AcpiDsLoad1EndOp (
}
}
#ifdef ACPI_ASL_COMPILER
/*
* For external opcode, get the object type from the argument and
* get the parameter count from the argument's next.
*/
if (AcpiGbl_DisasmFlag &&
Op->Common.Node &&
Op->Common.AmlOpcode == AML_EXTERNAL_OP)
{
/*
* Note, if this external is not a method
* Op->Common.Value.Arg->Common.Next->Common.Value.Integer == 0
* Therefore, ParamCount will be 0.
*/
ParamCount = (UINT8) Op->Common.Value.Arg->Common.Next->Common.Value.Integer;
ObjectType = (UINT8) Op->Common.Value.Arg->Common.Value.Integer;
Op->Common.Node->Flags |= ANOBJ_IS_EXTERNAL;
Op->Common.Node->Type = (UINT8) ObjectType;
AcpiDmCreateSubobjectForExternal ((UINT8)ObjectType,
&Op->Common.Node, ParamCount);
/*
* Add the external to the external list because we may be
* emitting code based off of the items within the external list.
*/
AcpiDmAddOpToExternalList (Op, Op->Named.Path, (UINT8)ObjectType, ParamCount,
ACPI_EXT_ORIGIN_FROM_OPCODE | ACPI_EXT_RESOLVED_REFERENCE);
}
#endif
/*
* If we are executing a method, do not create any namespace objects
* during the load phase, only during execution.
@ -581,6 +616,7 @@ AcpiDsLoad1EndOp (
/* Pop the scope stack (only if loading a table) */
if (!WalkState->MethodNode &&
Op->Common.AmlOpcode != AML_EXTERNAL_OP &&
AcpiNsOpensScope (ObjectType))
{
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s): Popping scope for Op %p\n",

View file

@ -320,6 +320,24 @@ AcpiDsLoad2BeginOp (
}
}
#ifdef ACPI_ASL_COMPILER
/*
* Do not open a scope for AML_EXTERNAL_OP
* AcpiNsLookup can open a new scope based on the object type
* of this op. AML_EXTERNAL_OP is a declaration rather than a
* definition. In the case that this external is a method object,
* AcpiNsLookup will open a new scope. However, an AML_EXTERNAL_OP
* associated with the ACPI_TYPE_METHOD is a declaration, rather than
* a definition. Flags is set to avoid opening a scope for any
* AML_EXTERNAL_OP.
*/
if (WalkState->Opcode == AML_EXTERNAL_OP)
{
Flags |= ACPI_NS_DONT_OPEN_SCOPE;
}
#endif
/* Add new entry or lookup existing entry */
Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType,

View file

@ -198,6 +198,13 @@ AcpiEnableEvent (
ACPI_FUNCTION_TRACE (AcpiEnableEvent);
/* If Hardware Reduced flag is set, there are no fixed events */
if (AcpiGbl_ReducedHardware)
{
return_ACPI_STATUS (AE_OK);
}
/* Decode the Fixed Event */
if (Event > ACPI_EVENT_MAX)
@ -264,6 +271,13 @@ AcpiDisableEvent (
ACPI_FUNCTION_TRACE (AcpiDisableEvent);
/* If Hardware Reduced flag is set, there are no fixed events */
if (AcpiGbl_ReducedHardware)
{
return_ACPI_STATUS (AE_OK);
}
/* Decode the Fixed Event */
if (Event > ACPI_EVENT_MAX)
@ -325,6 +339,13 @@ AcpiClearEvent (
ACPI_FUNCTION_TRACE (AcpiClearEvent);
/* If Hardware Reduced flag is set, there are no fixed events */
if (AcpiGbl_ReducedHardware)
{
return_ACPI_STATUS (AE_OK);
}
/* Decode the Fixed Event */
if (Event > ACPI_EVENT_MAX)

View file

@ -129,11 +129,11 @@ AcpiExDoDebugObject (
Timer = ((UINT32) AcpiOsGetTimer () / 10);
Timer &= 0x03FFFFFF;
AcpiOsPrintf ("[ACPI Debug T=0x%8.8X] %*s", Timer, Level, " ");
AcpiOsPrintf ("ACPI Debug: T=0x%8.8X %*s", Timer, Level, " ");
}
else
{
AcpiOsPrintf ("[ACPI Debug] %*s", Level, " ");
AcpiOsPrintf ("ACPI Debug: %*s", Level, " ");
}
}

View file

@ -667,12 +667,13 @@ AcpiExDumpOperand (
if (Depth > 0)
{
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p ",
Depth, " ", Depth, ObjDesc));
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p Refs=%u ",
Depth, " ", Depth, ObjDesc, ObjDesc->Common.ReferenceCount));
}
else
{
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", ObjDesc));
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Refs=%u ",
ObjDesc, ObjDesc->Common.ReferenceCount));
}
/* Decode object type */
@ -710,8 +711,10 @@ AcpiExDumpOperand (
case ACPI_REFCLASS_NAME:
AcpiOsPrintf ("- [%4.4s]\n",
ObjDesc->Reference.Node->Name.Ascii);
AcpiUtRepairName (ObjDesc->Reference.Node->Name.Ascii);
AcpiOsPrintf ("- [%4.4s] (Node %p)\n",
ObjDesc->Reference.Node->Name.Ascii,
ObjDesc->Reference.Node);
break;
case ACPI_REFCLASS_ARG:
@ -1050,12 +1053,15 @@ AcpiExDumpReferenceObj (
&RetBuf, TRUE);
if (ACPI_FAILURE (Status))
{
AcpiOsPrintf (" Could not convert name to pathname\n");
AcpiOsPrintf (" Could not convert name to pathname: %s\n",
AcpiFormatException (Status));
}
else
{
AcpiOsPrintf ("%s\n", (char *) RetBuf.Pointer);
ACPI_FREE (RetBuf.Pointer);
AcpiOsPrintf ("%s: %s\n",
AcpiUtGetTypeName (ObjDesc->Reference.Node->Type),
(char *) RetBuf.Pointer);
ACPI_FREE (RetBuf.Pointer);
}
}
else if (ObjDesc->Reference.Object)
@ -1173,9 +1179,8 @@ AcpiExDumpPackageObj (
case ACPI_TYPE_LOCAL_REFERENCE:
AcpiOsPrintf ("[Object Reference] Type [%s] %2.2X",
AcpiUtGetReferenceName (ObjDesc),
ObjDesc->Reference.Class);
AcpiOsPrintf ("[Object Reference] Class [%s]",
AcpiUtGetReferenceName (ObjDesc));
AcpiExDumpReferenceObj (ObjDesc);
break;

View file

@ -851,7 +851,7 @@ AcpiExOpcode_1A_0T_1R (
if (ACPI_GET_DESCRIPTOR_TYPE (Operand[0]) == ACPI_DESC_TYPE_NAMED)
{
TempDesc = AcpiNsGetAttachedObject (
(ACPI_NAMESPACE_NODE *) Operand[0]);
(ACPI_NAMESPACE_NODE *) Operand[0]);
if (TempDesc &&
((TempDesc->Common.Type == ACPI_TYPE_STRING) ||
(TempDesc->Common.Type == ACPI_TYPE_LOCAL_REFERENCE)))
@ -964,11 +964,27 @@ AcpiExOpcode_1A_0T_1R (
* This is a DerefOf (ObjectReference)
* Get the actual object from the Node (This is the dereference).
* This case may only happen when a LocalX or ArgX is
* dereferenced above.
* dereferenced above, or for references to device and
* thermal objects.
*/
ReturnDesc = AcpiNsGetAttachedObject (
(ACPI_NAMESPACE_NODE *) Operand[0]);
AcpiUtAddReference (ReturnDesc);
switch (((ACPI_NAMESPACE_NODE *) Operand[0])->Type)
{
case ACPI_TYPE_DEVICE:
case ACPI_TYPE_THERMAL:
/* These types have no node subobject, return the NS node */
ReturnDesc = Operand[0];
break;
default:
/* For most types, get the object attached to the node */
ReturnDesc = AcpiNsGetAttachedObject (
(ACPI_NAMESPACE_NODE *) Operand[0]);
AcpiUtAddReference (ReturnDesc);
break;
}
}
else
{

View file

@ -385,12 +385,26 @@ AcpiExResolveMultiple (
(ACPI_NAMESPACE_NODE *) ObjDesc);
}
if (!ObjDesc)
switch (Type)
{
ACPI_ERROR ((AE_INFO,
"[%4.4s] Node is unresolved or uninitialized",
AcpiUtGetNodeName (Node)));
return_ACPI_STATUS (AE_AML_UNINITIALIZED_NODE);
case ACPI_TYPE_DEVICE:
case ACPI_TYPE_THERMAL:
/* These types have no attached subobject */
break;
default:
/* All other types require a subobject */
if (!ObjDesc)
{
ACPI_ERROR ((AE_INFO,
"[%4.4s] Node is unresolved or uninitialized",
AcpiUtGetNodeName (Node)));
return_ACPI_STATUS (AE_AML_UNINITIALIZED_NODE);
}
break;
}
break;

View file

@ -186,7 +186,7 @@ AcpiDmFinishNamespaceLoad (
ACPI_OWNER_ID OwnerId);
void
AcpiDmConvertResourceIndexes (
AcpiDmConvertParseObjects (
ACPI_PARSE_OBJECT *ParseTreeRoot,
ACPI_NAMESPACE_NODE *NamespaceRoot);

View file

@ -99,6 +99,11 @@ typedef enum
ACPI_DMT_FLAGS1,
ACPI_DMT_FLAGS2,
ACPI_DMT_FLAGS4,
ACPI_DMT_FLAGS4_0,
ACPI_DMT_FLAGS4_4,
ACPI_DMT_FLAGS4_8,
ACPI_DMT_FLAGS4_12,
ACPI_DMT_FLAGS16_16,
ACPI_DMT_UINT8,
ACPI_DMT_UINT16,
ACPI_DMT_UINT24,
@ -149,6 +154,7 @@ typedef enum
ACPI_DMT_HEST,
ACPI_DMT_HESTNTFY,
ACPI_DMT_HESTNTYP,
ACPI_DMT_HMAT,
ACPI_DMT_IORTMEM,
ACPI_DMT_IVRS,
ACPI_DMT_LPIT,
@ -156,6 +162,7 @@ typedef enum
ACPI_DMT_NFIT,
ACPI_DMT_PCCT,
ACPI_DMT_PMTT,
ACPI_DMT_PPTT,
ACPI_DMT_SLIC,
ACPI_DMT_SRAT,
@ -304,12 +311,22 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest7[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest8[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest9[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest10[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHest11[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHestNotify[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHestBank[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHpet[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoLpitHdr[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoLpit0[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoLpit1[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat0[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1a[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1b[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat1c[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmat2a[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoHmatHdr[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort0[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort0a[];
@ -387,6 +404,13 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcctHdr[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct0[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct1[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct2[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct3[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPcct4[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt0a[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt1[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPptt2[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoPpttHdr[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoRasf[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp1[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoRsdp2[];
@ -405,6 +429,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat0[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat1[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat4[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoStao[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoStaoStr[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaHdr[];
@ -421,6 +446,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoWddt[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoWdrt[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoWsmt[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoXenv[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoGeneric[][2];
@ -532,6 +558,10 @@ void
AcpiDmDumpHest (
ACPI_TABLE_HEADER *Table);
void
AcpiDmDumpHmat (
ACPI_TABLE_HEADER *Table);
void
AcpiDmDumpIort (
ACPI_TABLE_HEADER *Table);
@ -576,6 +606,10 @@ void
AcpiDmDumpPmtt (
ACPI_TABLE_HEADER *Table);
void
AcpiDmDumpPptt (
ACPI_TABLE_HEADER *Table);
UINT32
AcpiDmDumpRsdp (
ACPI_TABLE_HEADER *Table);
@ -651,10 +685,6 @@ AcpiDmDisassembleOneOp (
ACPI_OP_WALK_INFO *Info,
ACPI_PARSE_OBJECT *Op);
BOOLEAN
AcpiDmIsTempName (
ACPI_PARSE_OBJECT *Op);
UINT32
AcpiDmListType (
ACPI_PARSE_OBJECT *Op);
@ -779,6 +809,12 @@ AcpiDmAddOpToExternalList (
UINT32 Value,
UINT16 Flags);
void
AcpiDmCreateSubobjectForExternal (
UINT8 Type,
ACPI_NAMESPACE_NODE **Node,
UINT32 Value);
void
AcpiDmAddNodeToExternalList (
ACPI_NAMESPACE_NODE *Node,
@ -787,11 +823,17 @@ AcpiDmAddNodeToExternalList (
UINT16 Flags);
void
AcpiDmAddExternalsToNamespace (
AcpiDmAddExternalListToNamespace (
void);
void
AcpiDmAddOneExternalToNamespace (
char *Path,
UINT8 Type,
UINT32 Value);
UINT32
AcpiDmGetExternalMethodCount (
AcpiDmGetUnresolvedExternalMethodCount (
void);
void
@ -815,6 +857,11 @@ void
AcpiDmGetExternalsFromFile (
void);
void
AcpiDmMarkExternalConflict (
ACPI_NAMESPACE_NODE *Node);
/*
* dmresrc
*/
@ -939,6 +986,41 @@ AcpiDmGpioDescriptor (
UINT32 Length,
UINT32 Level);
void
AcpiDmPinFunctionDescriptor (
ACPI_OP_WALK_INFO *Info,
AML_RESOURCE *Resource,
UINT32 Length,
UINT32 Level);
void
AcpiDmPinConfigDescriptor (
ACPI_OP_WALK_INFO *Info,
AML_RESOURCE *Resource,
UINT32 Length,
UINT32 Level);
void
AcpiDmPinGroupDescriptor (
ACPI_OP_WALK_INFO *Info,
AML_RESOURCE *Resource,
UINT32 Length,
UINT32 Level);
void
AcpiDmPinGroupFunctionDescriptor (
ACPI_OP_WALK_INFO *Info,
AML_RESOURCE *Resource,
UINT32 Length,
UINT32 Level);
void
AcpiDmPinGroupConfigDescriptor (
ACPI_OP_WALK_INFO *Info,
AML_RESOURCE *Resource,
UINT32 Length,
UINT32 Level);
void
AcpiDmSerialBusDescriptor (
ACPI_OP_WALK_INFO *Info,
@ -1060,6 +1142,17 @@ AcpiDmCloseOperator (
ACPI_PARSE_OBJECT *Op);
/*
* dmtables
*/
ACPI_STATUS
AcpiDmProcessSwitch (
ACPI_PARSE_OBJECT *Op);
void
AcpiDmClearTempList(
void);
/*
* dmtables
*/

View file

@ -319,6 +319,7 @@ ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_ForceAmlDisassembly, FALSE);
ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DmOpt_Verbose, TRUE);
ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DmEmitExternalOpcodes, FALSE);
ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DoDisassemblerOptimizations, TRUE);
ACPI_INIT_GLOBAL (ACPI_PARSE_OBJECT_LIST, *AcpiGbl_TempListHead, NULL);
ACPI_GLOBAL (BOOLEAN, AcpiGbl_DmOpt_Disasm);
ACPI_GLOBAL (BOOLEAN, AcpiGbl_DmOpt_Listing);
@ -372,6 +373,8 @@ ACPI_GLOBAL (const char, *AcpiGbl_PldVerticalPositionList[]);
ACPI_GLOBAL (const char, *AcpiGbl_PldHorizontalPositionList[]);
ACPI_GLOBAL (const char, *AcpiGbl_PldShapeList[]);
ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DisasmFlag, FALSE);
#endif
/*

View file

@ -1028,7 +1028,7 @@ typedef struct acpi_parse_obj_common
typedef struct acpi_parse_obj_named
{
ACPI_PARSE_COMMON
UINT8 *Path;
char *Path;
UINT8 *Data; /* AML body or bytelist data */
UINT32 Length; /* AML length */
UINT32 Name; /* 4-byte name or zero if no name */
@ -1336,8 +1336,13 @@ typedef struct acpi_port_info
#define ACPI_RESOURCE_NAME_ADDRESS64 0x8A
#define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 0x8B
#define ACPI_RESOURCE_NAME_GPIO 0x8C
#define ACPI_RESOURCE_NAME_PIN_FUNCTION 0x8D
#define ACPI_RESOURCE_NAME_SERIAL_BUS 0x8E
#define ACPI_RESOURCE_NAME_LARGE_MAX 0x8E
#define ACPI_RESOURCE_NAME_PIN_CONFIG 0x8F
#define ACPI_RESOURCE_NAME_PIN_GROUP 0x90
#define ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION 0x91
#define ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG 0x92
#define ACPI_RESOURCE_NAME_LARGE_MAX 0x92
/*****************************************************************************
@ -1374,6 +1379,7 @@ typedef struct acpi_external_list
#define ACPI_EXT_INTERNAL_PATH_ALLOCATED 0x04 /* Deallocate internal path on completion */
#define ACPI_EXT_EXTERNAL_EMITTED 0x08 /* External() statement has been emitted */
#define ACPI_EXT_ORIGIN_FROM_OPCODE 0x10 /* External came from a External() opcode */
#define ACPI_EXT_CONFLICTING_DECLARATION 0x20 /* External has a conflicting declaration within AML */
typedef struct acpi_external_file
@ -1384,6 +1390,13 @@ typedef struct acpi_external_file
} ACPI_EXTERNAL_FILE;
typedef struct acpi_parse_object_list
{
ACPI_PARSE_OBJECT *Op;
struct acpi_parse_object_list *Next;
} ACPI_PARSE_OBJECT_LIST;
/*****************************************************************************
*
* Debugger

View file

@ -113,7 +113,7 @@
#define ARGP_DWORD_OP ARGP_LIST1 (ARGP_DWORDDATA)
#define ARGP_ELSE_OP ARGP_LIST2 (ARGP_PKGLENGTH, ARGP_TERMLIST)
#define ARGP_EVENT_OP ARGP_LIST1 (ARGP_NAME)
#define ARGP_EXTERNAL_OP ARGP_LIST3 (ARGP_NAMESTRING, ARGP_BYTEDATA, ARGP_BYTEDATA)
#define ARGP_EXTERNAL_OP ARGP_LIST3 (ARGP_NAME, ARGP_BYTEDATA, ARGP_BYTEDATA)
#define ARGP_FATAL_OP ARGP_LIST3 (ARGP_BYTEDATA, ARGP_DWORDDATA, ARGP_TERMARG)
#define ARGP_FIELD_OP ARGP_LIST4 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_BYTEDATA, ARGP_FIELDLIST)
#define ARGP_FIND_SET_LEFT_BIT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)

View file

@ -46,7 +46,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
#define ACPI_CA_VERSION 0x20170303
#define ACPI_CA_VERSION 0x20170531
#include "acconfig.h"
#include "actypes.h"

View file

@ -574,6 +574,9 @@ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] =
{{"_HID", METHOD_0ARGS,
METHOD_RETURNS (ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING)}},
{{"_HMA", METHOD_0ARGS,
METHOD_RETURNS (ACPI_RTYPE_BUFFER)}},
{{"_HOT", METHOD_0ARGS,
METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
@ -618,6 +621,17 @@ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] =
PACKAGE_INFO (ACPI_PTYPE2_VAR_VAR, ACPI_RTYPE_INTEGER, 3,
ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER | ACPI_RTYPE_STRING, 10,0),
{{"_LSI", METHOD_0ARGS,
METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}},
PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3,0,0,0),
{{"_LSR", METHOD_2ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER),
METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}},
PACKAGE_INFO (ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 1, ACPI_RTYPE_BUFFER, 1,0),
{{"_LSW", METHOD_3ARGS (ACPI_TYPE_INTEGER, ACPI_TYPE_INTEGER, ACPI_TYPE_BUFFER),
METHOD_RETURNS (ACPI_RTYPE_INTEGER)}},
{{"_MAT", METHOD_0ARGS,
METHOD_RETURNS (ACPI_RTYPE_BUFFER)}},

View file

@ -155,7 +155,9 @@ typedef enum
ACPI_RSD_UINT16,
ACPI_RSD_UINT32,
ACPI_RSD_UINT64,
ACPI_RSD_WORDLIST
ACPI_RSD_WORDLIST,
ACPI_RSD_LABEL,
ACPI_RSD_SOURCE_LABEL,
} ACPI_RSDUMP_OPCODES;
@ -387,6 +389,11 @@ extern ACPI_RSCONVERT_INFO AcpiRsConvertFixedDma[];
extern ACPI_RSCONVERT_INFO AcpiRsConvertI2cSerialBus[];
extern ACPI_RSCONVERT_INFO AcpiRsConvertSpiSerialBus[];
extern ACPI_RSCONVERT_INFO AcpiRsConvertUartSerialBus[];
extern ACPI_RSCONVERT_INFO AcpiRsConvertPinFunction[];
extern ACPI_RSCONVERT_INFO AcpiRsConvertPinConfig[];
extern ACPI_RSCONVERT_INFO AcpiRsConvertPinGroup[];
extern ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupFunction[];
extern ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupConfig[];
/* These resources require separate get/set tables */
@ -431,12 +438,17 @@ extern ACPI_RSDUMP_INFO AcpiRsDumpExtAddress64[];
extern ACPI_RSDUMP_INFO AcpiRsDumpExtIrq[];
extern ACPI_RSDUMP_INFO AcpiRsDumpGenericReg[];
extern ACPI_RSDUMP_INFO AcpiRsDumpGpio[];
extern ACPI_RSDUMP_INFO AcpiRsDumpPinFunction[];
extern ACPI_RSDUMP_INFO AcpiRsDumpFixedDma[];
extern ACPI_RSDUMP_INFO AcpiRsDumpCommonSerialBus[];
extern ACPI_RSDUMP_INFO AcpiRsDumpI2cSerialBus[];
extern ACPI_RSDUMP_INFO AcpiRsDumpSpiSerialBus[];
extern ACPI_RSDUMP_INFO AcpiRsDumpUartSerialBus[];
extern ACPI_RSDUMP_INFO AcpiRsDumpGeneralFlags[];
extern ACPI_RSDUMP_INFO AcpiRsDumpPinConfig[];
extern ACPI_RSDUMP_INFO AcpiRsDumpPinGroup[];
extern ACPI_RSDUMP_INFO AcpiRsDumpPinGroupFunction[];
extern ACPI_RSDUMP_INFO AcpiRsDumpPinGroupConfig[];
#endif
#endif /* __ACRESRC_H__ */

View file

@ -327,6 +327,13 @@ typedef union acpi_resource_attribute
} ACPI_RESOURCE_ATTRIBUTE;
typedef struct acpi_resource_label
{
UINT16 StringLength;
char *StringPtr;
} ACPI_RESOURCE_LABEL;
typedef struct acpi_resource_source
{
UINT8 Index;
@ -617,6 +624,90 @@ typedef struct acpi_resource_uart_serialbus
#define ACPI_UART_CLEAR_TO_SEND (1<<6)
#define ACPI_UART_REQUEST_TO_SEND (1<<7)
typedef struct acpi_resource_pin_function
{
UINT8 RevisionId;
UINT8 PinConfig;
UINT8 Sharable; /* For values, see Interrupt Attributes above */
UINT16 FunctionNumber;
UINT16 PinTableLength;
UINT16 VendorLength;
ACPI_RESOURCE_SOURCE ResourceSource;
UINT16 *PinTable;
UINT8 *VendorData;
} ACPI_RESOURCE_PIN_FUNCTION;
typedef struct acpi_resource_pin_config
{
UINT8 RevisionId;
UINT8 ProducerConsumer; /* For values, see Producer/Consumer above */
UINT8 Sharable; /* For values, see Interrupt Attributes above */
UINT8 PinConfigType;
UINT32 PinConfigValue;
UINT16 PinTableLength;
UINT16 VendorLength;
ACPI_RESOURCE_SOURCE ResourceSource;
UINT16 *PinTable;
UINT8 *VendorData;
} ACPI_RESOURCE_PIN_CONFIG;
/* Values for PinConfigType field above */
#define ACPI_PIN_CONFIG_DEFAULT 0
#define ACPI_PIN_CONFIG_BIAS_PULL_UP 1
#define ACPI_PIN_CONFIG_BIAS_PULL_DOWN 2
#define ACPI_PIN_CONFIG_BIAS_DEFAULT 3
#define ACPI_PIN_CONFIG_BIAS_DISABLE 4
#define ACPI_PIN_CONFIG_BIAS_HIGH_IMPEDANCE 5
#define ACPI_PIN_CONFIG_BIAS_BUS_HOLD 6
#define ACPI_PIN_CONFIG_DRIVE_OPEN_DRAIN 7
#define ACPI_PIN_CONFIG_DRIVE_OPEN_SOURCE 8
#define ACPI_PIN_CONFIG_DRIVE_PUSH_PULL 9
#define ACPI_PIN_CONFIG_DRIVE_STRENGTH 10
#define ACPI_PIN_CONFIG_SLEW_RATE 11
#define ACPI_PIN_CONFIG_INPUT_DEBOUNCE 12
#define ACPI_PIN_CONFIG_INPUT_SCHMITT_TRIGGER 13
typedef struct acpi_resource_pin_group
{
UINT8 RevisionId;
UINT8 ProducerConsumer; /* For values, see Producer/Consumer above */
UINT16 PinTableLength;
UINT16 VendorLength;
UINT16 *PinTable;
ACPI_RESOURCE_LABEL ResourceLabel;
UINT8 *VendorData;
} ACPI_RESOURCE_PIN_GROUP;
typedef struct acpi_resource_pin_group_function
{
UINT8 RevisionId;
UINT8 ProducerConsumer; /* For values, see Producer/Consumer above */
UINT8 Sharable; /* For values, see Interrupt Attributes above */
UINT16 FunctionNumber;
UINT16 VendorLength;
ACPI_RESOURCE_SOURCE ResourceSource;
ACPI_RESOURCE_LABEL ResourceSourceLabel;
UINT8 *VendorData;
} ACPI_RESOURCE_PIN_GROUP_FUNCTION;
typedef struct acpi_resource_pin_group_config
{
UINT8 RevisionId;
UINT8 ProducerConsumer; /* For values, see Producer/Consumer above */
UINT8 Sharable; /* For values, see Interrupt Attributes above */
UINT8 PinConfigType; /* For values, see PinConfigType above */
UINT32 PinConfigValue;
UINT16 VendorLength;
ACPI_RESOURCE_SOURCE ResourceSource;
ACPI_RESOURCE_LABEL ResourceSourceLabel;
UINT8 *VendorData;
} ACPI_RESOURCE_PIN_GROUP_CONFIG;
/* ACPI_RESOURCE_TYPEs */
@ -640,7 +731,12 @@ typedef struct acpi_resource_uart_serialbus
#define ACPI_RESOURCE_TYPE_GPIO 17 /* ACPI 5.0 */
#define ACPI_RESOURCE_TYPE_FIXED_DMA 18 /* ACPI 5.0 */
#define ACPI_RESOURCE_TYPE_SERIAL_BUS 19 /* ACPI 5.0 */
#define ACPI_RESOURCE_TYPE_MAX 19
#define ACPI_RESOURCE_TYPE_PIN_FUNCTION 20 /* ACPI 6.2 */
#define ACPI_RESOURCE_TYPE_PIN_CONFIG 21 /* ACPI 6.2 */
#define ACPI_RESOURCE_TYPE_PIN_GROUP 22 /* ACPI 6.2 */
#define ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION 23 /* ACPI 6.2 */
#define ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG 24 /* ACPI 6.2 */
#define ACPI_RESOURCE_TYPE_MAX 24
/* Master union for resource descriptors */
@ -669,6 +765,11 @@ typedef union acpi_resource_data
ACPI_RESOURCE_SPI_SERIALBUS SpiSerialBus;
ACPI_RESOURCE_UART_SERIALBUS UartSerialBus;
ACPI_RESOURCE_COMMON_SERIALBUS CommonSerialBus;
ACPI_RESOURCE_PIN_FUNCTION PinFunction;
ACPI_RESOURCE_PIN_CONFIG PinConfig;
ACPI_RESOURCE_PIN_GROUP PinGroup;
ACPI_RESOURCE_PIN_GROUP_FUNCTION PinGroupFunction;
ACPI_RESOURCE_PIN_GROUP_CONFIG PinGroupConfig;
/* Common fields */

View file

@ -67,9 +67,11 @@
#define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */
#define ACPI_SIG_EINJ "EINJ" /* Error Injection table */
#define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */
#define ACPI_SIG_HMAT "HMAT" /* Heterogeneous Memory Attributes Table */
#define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */
#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */
#define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */
#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */
#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */
#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */
#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */
@ -492,7 +494,8 @@ enum AcpiHestTypes
ACPI_HEST_TYPE_AER_BRIDGE = 8,
ACPI_HEST_TYPE_GENERIC_ERROR = 9,
ACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10,
ACPI_HEST_TYPE_RESERVED = 11 /* 11 and greater are reserved */
ACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11,
ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */
};
@ -544,6 +547,7 @@ typedef struct acpi_hest_aer_common
#define ACPI_HEST_FIRMWARE_FIRST (1)
#define ACPI_HEST_GLOBAL (1<<1)
#define ACPI_HEST_GHES_ASSIST (1<<2)
/*
* Macros to access the bus/segment numbers in Bus field above:
@ -574,18 +578,19 @@ typedef struct acpi_hest_notify
enum AcpiHestNotifyTypes
{
ACPI_HEST_NOTIFY_POLLED = 0,
ACPI_HEST_NOTIFY_EXTERNAL = 1,
ACPI_HEST_NOTIFY_LOCAL = 2,
ACPI_HEST_NOTIFY_SCI = 3,
ACPI_HEST_NOTIFY_NMI = 4,
ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */
ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */
ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */
ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */
ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */
ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */
ACPI_HEST_NOTIFY_RESERVED = 11 /* 11 and greater are reserved */
ACPI_HEST_NOTIFY_POLLED = 0,
ACPI_HEST_NOTIFY_EXTERNAL = 1,
ACPI_HEST_NOTIFY_LOCAL = 2,
ACPI_HEST_NOTIFY_SCI = 3,
ACPI_HEST_NOTIFY_NMI = 4,
ACPI_HEST_NOTIFY_CMCI = 5, /* ACPI 5.0 */
ACPI_HEST_NOTIFY_MCE = 6, /* ACPI 5.0 */
ACPI_HEST_NOTIFY_GPIO = 7, /* ACPI 6.0 */
ACPI_HEST_NOTIFY_SEA = 8, /* ACPI 6.1 */
ACPI_HEST_NOTIFY_SEI = 9, /* ACPI 6.1 */
ACPI_HEST_NOTIFY_GSIV = 10, /* ACPI 6.1 */
ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11, /* ACPI 6.2 */
ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */
};
/* Values for ConfigWriteEnable bitfield above */
@ -608,7 +613,7 @@ typedef struct acpi_hest_ia_machine_check
{
ACPI_HEST_HEADER Header;
UINT16 Reserved1;
UINT8 Flags;
UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
UINT8 Enabled;
UINT32 RecordsToPreallocate;
UINT32 MaxSectionsPerRecord;
@ -626,7 +631,7 @@ typedef struct acpi_hest_ia_corrected
{
ACPI_HEST_HEADER Header;
UINT16 Reserved1;
UINT8 Flags;
UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
UINT8 Enabled;
UINT32 RecordsToPreallocate;
UINT32 MaxSectionsPerRecord;
@ -791,6 +796,155 @@ typedef struct acpi_hest_generic_data_v300
#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2)
/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */
typedef struct acpi_hest_ia_deferred_check
{
ACPI_HEST_HEADER Header;
UINT16 Reserved1;
UINT8 Flags; /* See flags ACPI_HEST_GLOBAL, etc. above */
UINT8 Enabled;
UINT32 RecordsToPreallocate;
UINT32 MaxSectionsPerRecord;
ACPI_HEST_NOTIFY Notify;
UINT8 NumHardwareBanks;
UINT8 Reserved2[3];
} ACPI_HEST_IA_DEFERRED_CHECK;
/*******************************************************************************
*
* HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2)
* Version 1
*
******************************************************************************/
typedef struct acpi_table_hmat
{
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
UINT32 Reserved;
} ACPI_TABLE_HMAT;
/* Values for HMAT structure types */
enum AcpiHmatType
{
ACPI_HMAT_TYPE_ADDRESS_RANGE = 0, /* Memory subystem address range */
ACPI_HMAT_TYPE_LOCALITY = 1, /* System locality latency and bandwidth information */
ACPI_HMAT_TYPE_CACHE = 2, /* Memory side cache information */
ACPI_HMAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */
};
typedef struct acpi_hmat_structure
{
UINT16 Type;
UINT16 Reserved;
UINT32 Length;
} ACPI_HMAT_STRUCTURE;
/*
* HMAT Structures, correspond to Type in ACPI_HMAT_STRUCTURE
*/
/* 0: Memory subystem address range */
typedef struct acpi_hmat_address_range
{
ACPI_HMAT_STRUCTURE Header;
UINT16 Flags;
UINT16 Reserved1;
UINT32 ProcessorPD; /* Processor proximity domain */
UINT32 MemoryPD; /* Memory proximity domain */
UINT32 Reserved2;
UINT64 PhysicalAddressBase; /* Physical address range base */
UINT64 PhysicalAddressLength; /* Physical address range length */
} ACPI_HMAT_ADDRESS_RANGE;
/* Masks for Flags field above */
#define ACPI_HMAT_PROCESSOR_PD_VALID (1) /* 1: ProcessorPD field is valid */
#define ACPI_HMAT_MEMORY_PD_VALID (1<<1) /* 1: MemoryPD field is valid */
#define ACPI_HMAT_RESERVATION_HINT (1<<2) /* 1: Reservation hint */
/* 1: System locality latency and bandwidth information */
typedef struct acpi_hmat_locality
{
ACPI_HMAT_STRUCTURE Header;
UINT8 Flags;
UINT8 DataType;
UINT16 Reserved1;
UINT32 NumberOfInitiatorPDs;
UINT32 NumberOfTargetPDs;
UINT32 Reserved2;
UINT64 EntryBaseUnit;
} ACPI_HMAT_LOCALITY;
/* Masks for Flags field above */
#define ACPI_HMAT_MEMORY_HIERARCHY (0x0F)
/* Values for Memory Hierarchy flag */
#define ACPI_HMAT_MEMORY 0
#define ACPI_HMAT_LAST_LEVEL_CACHE 1
#define ACPI_HMAT_1ST_LEVEL_CACHE 2
#define ACPI_HMAT_2ND_LEVEL_CACHE 3
#define ACPI_HMAT_3RD_LEVEL_CACHE 4
/* Values for DataType field above */
#define ACPI_HMAT_ACCESS_LATENCY 0
#define ACPI_HMAT_READ_LATENCY 1
#define ACPI_HMAT_WRITE_LATENCY 2
#define ACPI_HMAT_ACCESS_BANDWIDTH 3
#define ACPI_HMAT_READ_BANDWIDTH 4
#define ACPI_HMAT_WRITE_BANDWIDTH 5
/* 2: Memory side cache information */
typedef struct acpi_hmat_cache
{
ACPI_HMAT_STRUCTURE Header;
UINT32 MemoryPD;
UINT32 Reserved1;
UINT64 CacheSize;
UINT32 CacheAttributes;
UINT16 Reserved2;
UINT16 NumberOfSMBIOSHandles;
} ACPI_HMAT_CACHE;
/* Masks for CacheAttributes field above */
#define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F)
#define ACPI_HMAT_CACHE_LEVEL (0x000000F0)
#define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00)
#define ACPI_HMAT_WRITE_POLICY (0x0000F000)
#define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000)
/* Values for cache associativity flag */
#define ACPI_HMAT_CA_NONE (0)
#define ACPI_HMAT_CA_DIRECT_MAPPED (1)
#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2)
/* Values for write policy flag */
#define ACPI_HMAT_CP_NONE (0)
#define ACPI_HMAT_CP_WB (1)
#define ACPI_HMAT_CP_WT (2)
/*******************************************************************************
*
* MADT - Multiple APIC Description Table
@ -812,8 +966,8 @@ typedef struct acpi_table_madt
/* Values for PCATCompat flag */
#define ACPI_MADT_DUAL_PIC 0
#define ACPI_MADT_MULTIPLE_APIC 1
#define ACPI_MADT_DUAL_PIC 1
#define ACPI_MADT_MULTIPLE_APIC 0
/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */
@ -1338,6 +1492,95 @@ typedef struct acpi_nfit_flush_address
} ACPI_NFIT_FLUSH_ADDRESS;
/*******************************************************************************
*
* PPTT - Processor Properties Topology Table (ACPI 6.2)
* Version 1
*
******************************************************************************/
typedef struct acpi_table_pptt
{
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
} ACPI_TABLE_PPTT;
/* Values for Type field above */
enum AcpiPpttType
{
ACPI_PPTT_TYPE_PROCESSOR = 0,
ACPI_PPTT_TYPE_CACHE = 1,
ACPI_PPTT_TYPE_ID = 2,
ACPI_PPTT_TYPE_RESERVED = 3
};
/* 0: Processor Hierarchy Node Structure */
typedef struct acpi_pptt_processor {
ACPI_SUBTABLE_HEADER Header;
UINT16 Reserved;
UINT32 Flags;
UINT32 Parent;
UINT32 AcpiProcessorId;
UINT32 NumberOfPrivResources;
} ACPI_PPTT_PROCESSOR;
/* Flags */
#define ACPI_PPTT_PHYSICAL_PACKAGE (1) /* Physical package */
#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (2) /* ACPI Processor ID valid */
/* 1: Cache Type Structure */
typedef struct acpi_pptt_cache {
ACPI_SUBTABLE_HEADER Header;
UINT16 Reserved;
UINT32 Flags;
UINT32 NextLevelOfCache;
UINT32 Size;
UINT32 NumberOfSets;
UINT8 Associativity;
UINT8 Attributes;
UINT16 LineSize;
} ACPI_PPTT_CACHE;
/* Flags */
#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */
#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */
#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */
#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */
#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */
#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */
#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */
/* Masks for Attributes */
#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */
#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */
#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */
/* 2: ID Structure */
typedef struct acpi_pptt_id {
ACPI_SUBTABLE_HEADER Header;
UINT16 Reserved;
UINT32 VendorId;
UINT64 Level1Id;
UINT64 Level2Id;
UINT16 MajorRev;
UINT16 MinorRev;
UINT16 SpinRev;
} ACPI_PPTT_ID;
/*******************************************************************************
*
* SBST - Smart Battery Specification Table
@ -1394,7 +1637,8 @@ enum AcpiSratType
ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
ACPI_SRAT_TYPE_RESERVED = 4 /* 4 and greater are reserved */
ACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4, /* ACPI 6.2 */
ACPI_SRAT_TYPE_RESERVED = 5 /* 5 and greater are reserved */
};
/*
@ -1478,6 +1722,18 @@ typedef struct acpi_srat_gicc_affinity
#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */
/* 4: GCC ITS Affinity (ACPI 6.2) */
typedef struct acpi_srat_gic_its_affinity
{
ACPI_SUBTABLE_HEADER Header;
UINT32 ProximityDomain;
UINT16 Reserved;
UINT32 ItsId;
} ACPI_SRAT_GIC_ITS_AFFINITY;
/* Reset to default packing */
#pragma pack()

View file

@ -89,6 +89,7 @@
#define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */
#define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */
#define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */
#define ACPI_SIG_WSMT "WSMT" /* Windows SMM Security Migrations Table */
#define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */
#ifdef ACPI_UNDEFINED_TABLES
@ -1413,7 +1414,8 @@ enum AcpiSpmiInterfaceTypes
* Version 2
*
* Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
* December 19, 2014
* Version 1.2, Revision 8
* February 27, 2017
*
* NOTE: There are two versions of the table with the same signature --
* the client version and the server version. The common PlatformClass
@ -1484,7 +1486,8 @@ typedef struct acpi_table_tcpa_server
* Version 4
*
* Conforms to "TCG ACPI Specification, Family 1.2 and 2.0",
* December 19, 2014
* Version 1.2, Revision 8
* February 27, 2017
*
******************************************************************************/
@ -1507,6 +1510,42 @@ typedef struct acpi_table_tpm2
#define ACPI_TPM2_MEMORY_MAPPED 6
#define ACPI_TPM2_COMMAND_BUFFER 7
#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8
#define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11 /* V1.2 Rev 8 */
/* Trailer appears after any StartMethod subtables */
typedef struct acpi_tpm2_trailer
{
UINT32 MinimumLogLength; /* Minimum length for the event log area */
UINT64 LogAddress; /* Address of the event log area */
} ACPI_TPM2_TRAILER;
/*
* Subtables (StartMethod-specific)
*/
/* 11: Start Method for ARM SMC (V1.2 Rev 8) */
typedef struct acpi_tpm2_arm_smc
{
UINT32 GlobalInterrupt;
UINT8 InterruptFlags;
UINT8 OperationFlags;
UINT16 Reserved;
UINT32 FunctionId;
} ACPI_TPM2_ARM_SMC;
/* Values for InterruptFlags above */
#define ACPI_TPM2_INTERRUPT_SUPPORT (1)
/* Values for OperationFlags above */
#define ACPI_TPM2_IDLE_SUPPORT (1)
/*******************************************************************************
@ -1726,6 +1765,30 @@ typedef struct acpi_table_wdrt
} ACPI_TABLE_WDRT;
/*******************************************************************************
*
* WSMT - Windows SMM Security Migrations Table
* Version 1
*
* Conforms to "Windows SMM Security Migrations Table",
* Version 1.0, April 18, 2016
*
******************************************************************************/
typedef struct acpi_table_wsmt
{
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
UINT32 ProtectionFlags;
} ACPI_TABLE_WSMT;
/* Flags for ProtectionFlags field above */
#define ACPI_WSMT_FIXED_COMM_BUFFERS (1)
#define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2)
#define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4)
/* Reset to default packing */
#pragma pack()

View file

@ -121,6 +121,11 @@ typedef struct acpi_table_bgrt
} ACPI_TABLE_BGRT;
/* Flags for Status field above */
#define ACPI_BGRT_DISPLAYED (1)
#define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1)
/*******************************************************************************
*
@ -543,7 +548,7 @@ typedef struct acpi_mpst_shared
/*******************************************************************************
*
* PCCT - Platform Communications Channel Table (ACPI 5.0)
* Version 1
* Version 2 (ACPI 6.2)
*
******************************************************************************/
@ -566,7 +571,9 @@ enum AcpiPcctType
ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */
ACPI_PCCT_TYPE_RESERVED = 3 /* 3 and greater are reserved */
ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */
ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */
ACPI_PCCT_TYPE_RESERVED = 5 /* 5 and greater are reserved */
};
/*
@ -596,7 +603,7 @@ typedef struct acpi_pcct_subspace
typedef struct acpi_pcct_hw_reduced
{
ACPI_SUBTABLE_HEADER Header;
UINT32 DoorbellInterrupt;
UINT32 PlatformInterrupt;
UINT8 Flags;
UINT8 Reserved;
UINT64 BaseAddress;
@ -616,7 +623,7 @@ typedef struct acpi_pcct_hw_reduced
typedef struct acpi_pcct_hw_reduced_type2
{
ACPI_SUBTABLE_HEADER Header;
UINT32 DoorbellInterrupt;
UINT32 PlatformInterrupt;
UINT8 Flags;
UINT8 Reserved;
UINT64 BaseAddress;
@ -627,13 +634,75 @@ typedef struct acpi_pcct_hw_reduced_type2
UINT32 Latency;
UINT32 MaxAccessRate;
UINT16 MinTurnaroundTime;
ACPI_GENERIC_ADDRESS DoorbellAckRegister;
ACPI_GENERIC_ADDRESS PlatformAckRegister;
UINT64 AckPreserveMask;
UINT64 AckWriteMask;
} ACPI_PCCT_HW_REDUCED_TYPE2;
/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */
typedef struct acpi_pcct_ext_pcc_master
{
ACPI_SUBTABLE_HEADER Header;
UINT32 PlatformInterrupt;
UINT8 Flags;
UINT8 Reserved1;
UINT64 BaseAddress;
UINT32 Length;
ACPI_GENERIC_ADDRESS DoorbellRegister;
UINT64 PreserveMask;
UINT64 WriteMask;
UINT32 Latency;
UINT32 MaxAccessRate;
UINT32 MinTurnaroundTime;
ACPI_GENERIC_ADDRESS PlatformAckRegister;
UINT64 AckPreserveMask;
UINT64 AckSetMask;
UINT64 Reserved2;
ACPI_GENERIC_ADDRESS CmdCompleteRegister;
UINT64 CmdCompleteMask;
ACPI_GENERIC_ADDRESS CmdUpdateRegister;
UINT64 CmdUpdatePreserveMask;
UINT64 CmdUpdateSetMask;
ACPI_GENERIC_ADDRESS ErrorStatusRegister;
UINT64 ErrorStatusMask;
} ACPI_PCCT_EXT_PCC_MASTER;
/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */
typedef struct acpi_pcct_ext_pcc_slave
{
ACPI_SUBTABLE_HEADER Header;
UINT32 PlatformInterrupt;
UINT8 Flags;
UINT8 Reserved1;
UINT64 BaseAddress;
UINT32 Length;
ACPI_GENERIC_ADDRESS DoorbellRegister;
UINT64 PreserveMask;
UINT64 WriteMask;
UINT32 Latency;
UINT32 MaxAccessRate;
UINT32 MinTurnaroundTime;
ACPI_GENERIC_ADDRESS PlatformAckRegister;
UINT64 AckPreserveMask;
UINT64 AckSetMask;
UINT64 Reserved2;
ACPI_GENERIC_ADDRESS CmdCompleteRegister;
UINT64 CmdCompleteMask;
ACPI_GENERIC_ADDRESS CmdUpdateRegister;
UINT64 CmdUpdatePreserveMask;
UINT64 CmdUpdateSetMask;
ACPI_GENERIC_ADDRESS ErrorStatusRegister;
UINT64 ErrorStatusMask;
} ACPI_PCCT_EXT_PCC_SLAVE;
/* Values for doorbell flags above */
#define ACPI_PCCT_INTERRUPT_POLARITY (1)
@ -655,6 +724,18 @@ typedef struct acpi_pcct_shared_memory
} ACPI_PCCT_SHARED_MEMORY;
/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */
typedef struct acpi_pcct_ext_pcc_shared_memory
{
UINT32 Signature;
UINT32 Flags;
UINT32 Length;
UINT32 Command;
} ACPI_PCCT_EXT_PCC_SHARED_MEMORY;
/*******************************************************************************
*
* PMTT - Platform Memory Topology Table (ACPI 5.0)

View file

@ -47,9 +47,9 @@
/* acpisrc:StructDefs -- for acpisrc conversion */
/*
* ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent header
* and must be either 32 or 64. 16-bit ACPICA is no longer supported, as of
* 12/2006.
* ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent
* header and must be either 32 or 64. 16-bit ACPICA is no longer
* supported, as of 12/2006.
*/
#ifndef ACPI_MACHINE_WIDTH
#error ACPI_MACHINE_WIDTH not defined
@ -88,9 +88,9 @@
* INT64 64-bit (8 byte) signed value
*
* COMPILER_DEPENDENT_UINT64/INT64 - These types are defined in the
* compiler-dependent header(s) and were introduced because there is no common
* 64-bit integer type across the various compilation models, as shown in
* the table below.
* compiler-dependent header(s) and were introduced because there is no
* common 64-bit integer type across the various compilation models, as
* shown in the table below.
*
* Datatype LP64 ILP64 LLP64 ILP32 LP32 16bit
* char 8 8 8 8 8 8
@ -107,10 +107,10 @@
* 2) These types represent the native word size of the target mode of the
* processor, and may be 16-bit, 32-bit, or 64-bit as required. They are
* usually used for memory allocation, efficient loop counters, and array
* indexes. The types are similar to the size_t type in the C library and are
* required because there is no C type that consistently represents the native
* data width. ACPI_SIZE is needed because there is no guarantee that a
* kernel-level C library is present.
* indexes. The types are similar to the size_t type in the C library and
* are required because there is no C type that consistently represents the
* native data width. ACPI_SIZE is needed because there is no guarantee
* that a kernel-level C library is present.
*
* ACPI_SIZE 16/32/64-bit unsigned value
* ACPI_NATIVE_INT 16/32/64-bit signed value
@ -171,9 +171,10 @@ typedef UINT64 ACPI_PHYSICAL_ADDRESS;
/*
* In the case of the Itanium Processor Family (IPF), the hardware does not
* support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED flag
* to indicate that special precautions must be taken to avoid alignment faults.
* (IA64 or ia64 is currently used by existing compilers to indicate IPF.)
* support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED
* flag to indicate that special precautions must be taken to avoid alignment
* faults. (IA64 or ia64 is currently used by existing compilers to indicate
* IPF.)
*
* Note: EM64T and other X86-64 processors support misaligned transfers,
* so there is no need to define this flag.
@ -314,8 +315,8 @@ typedef UINT64 ACPI_PHYSICAL_ADDRESS;
#endif
/*
* Some compilers complain about unused variables. Sometimes we don't want to
* use all the variables (for example, _AcpiModuleName). This allows us
* Some compilers complain about unused variables. Sometimes we don't want
* to use all the variables (for example, _AcpiModuleName). This allows us
* to tell the compiler in a per-variable manner that a variable
* is unused
*/
@ -324,8 +325,9 @@ typedef UINT64 ACPI_PHYSICAL_ADDRESS;
#endif
/*
* All ACPICA external functions that are available to the rest of the kernel
* are tagged with thes macros which can be defined as appropriate for the host.
* All ACPICA external functions that are available to the rest of the
* kernel are tagged with these macros which can be defined as appropriate
* for the host.
*
* Notes:
* ACPI_EXPORT_SYMBOL_INIT is used for initialization and termination
@ -390,7 +392,8 @@ typedef UINT64 ACPI_PHYSICAL_ADDRESS;
/******************************************************************************
*
* ACPI Specification constants (Do not change unless the specification changes)
* ACPI Specification constants (Do not change unless the specification
* changes)
*
*****************************************************************************/
@ -496,10 +499,10 @@ typedef UINT8 ACPI_OWNER_ID;
#define ACPI_DO_NOT_WAIT 0
/*
* Obsolete: Acpi integer width. In ACPI version 1 (1996), integers are 32 bits.
* In ACPI version 2 (2000) and later, integers are 64 bits. Note that this
* pertains to the ACPI integer type only, not to other integers used in the
* implementation of the ACPICA subsystem.
* Obsolete: Acpi integer width. In ACPI version 1 (1996), integers are
* 32 bits. In ACPI version 2 (2000) and later, integers are max 64 bits.
* Note that this pertains to the ACPI integer type only, not to other
* integers used in the implementation of the ACPICA subsystem.
*
* 01/2010: This type is obsolete and has been removed from the entire ACPICA
* code base. It remains here for compatibility with device drivers that use
@ -641,8 +644,9 @@ typedef UINT64 ACPI_INTEGER;
#define ACPI_NOTIFY_LOCALITY_UPDATE (UINT8) 0x0B
#define ACPI_NOTIFY_SHUTDOWN_REQUEST (UINT8) 0x0C
#define ACPI_NOTIFY_AFFINITY_UPDATE (UINT8) 0x0D
#define ACPI_NOTIFY_MEMORY_UPDATE (UINT8) 0x0E
#define ACPI_GENERIC_NOTIFY_MAX 0x0D
#define ACPI_GENERIC_NOTIFY_MAX 0x0E
#define ACPI_SPECIFIC_NOTIFY_MAX 0x84
/*
@ -679,10 +683,11 @@ typedef UINT32 ACPI_OBJECT_TYPE;
/*
* These are object types that do not map directly to the ACPI
* ObjectType() operator. They are used for various internal purposes only.
* If new predefined ACPI_TYPEs are added (via the ACPI specification), these
* internal types must move upwards. (There is code that depends on these
* values being contiguous with the external types above.)
* ObjectType() operator. They are used for various internal purposes
* only. If new predefined ACPI_TYPEs are added (via the ACPI
* specification), these internal types must move upwards. (There
* is code that depends on these values being contiguous with the
* external types above.)
*/
#define ACPI_TYPE_LOCAL_REGION_FIELD 0x11
#define ACPI_TYPE_LOCAL_BANK_FIELD 0x12
@ -783,7 +788,7 @@ typedef UINT32 ACPI_EVENT_STATUS;
* | | | | +-- Type of dispatch:to method, handler, notify, or none
* | | | +----- Interrupt type: edge or level triggered
* | | +------- Is a Wake GPE
* | +--------- Is GPE masked by the software GPE masking machanism
* | +--------- Is GPE masked by the software GPE masking mechanism
* +------------ <Reserved>
*/
#define ACPI_GPE_DISPATCH_NONE (UINT8) 0x00
@ -929,8 +934,8 @@ typedef struct acpi_sleep_functions
*/
/*
* Note: Type == ACPI_TYPE_ANY (0) is used to indicate a NULL package element
* or an unresolved named reference.
* Note: Type == ACPI_TYPE_ANY (0) is used to indicate a NULL package
* element or an unresolved named reference.
*/
typedef union acpi_object
{
@ -1253,7 +1258,7 @@ typedef struct acpi_pnp_device_id_list
/*
* Structure returned from AcpiGetObjectInfo.
* Optimized for both 32- and 64-bit builds
* Optimized for both 32-bit and 64-bit builds.
*/
typedef struct acpi_device_info
{

View file

@ -86,6 +86,7 @@ extern const char *AcpiGbl_BpbDecode[];
extern const char *AcpiGbl_SbDecode[];
extern const char *AcpiGbl_FcDecode[];
extern const char *AcpiGbl_PtDecode[];
extern const char *AcpiGbl_PtypDecode[];
#endif
/*

View file

@ -78,6 +78,11 @@
#define UUID_PERSISTENT_VIRTUAL_DISK "5cea02c9-4d07-69d3-269f-4496fbe096f9"
#define UUID_PERSISTENT_VIRTUAL_CD "08018188-42cd-bb48-100f-5387d53ded3d"
/* Processor Properties (ACPI 6.2) */
#define UUID_CACHE_PROPERTIES "6DC63E77-257E-4E78-A973-A21F2796898D"
#define UUID_PHYSICAL_PROPERTY "DDE4D59A-AA42-4349-B407-EA40F57D9FB7"
/* Miscellaneous */
#define UUID_PLATFORM_CAPABILITIES "0811b06e-4a27-44f9-8d60-3cbbc22e7b48"

View file

@ -319,6 +319,11 @@
* #A is the number of required arguments
* #T is the number of target operands
* #R indicates whether there is a return value
*
* These types are used for the top-level dispatch of the AML
* opcode. They group similar operators that can share common
* front-end code before dispatch to the final code that implements
* the operator.
*/
/*
@ -360,42 +365,42 @@
* The opcode Type is used in a dispatch table, do not change
* or add anything new without updating the table.
*/
#define AML_TYPE_EXEC_0A_0T_1R 0x00
#define AML_TYPE_EXEC_1A_0T_0R 0x01 /* Monadic1 */
#define AML_TYPE_EXEC_1A_0T_1R 0x02 /* Monadic2 */
#define AML_TYPE_EXEC_1A_1T_0R 0x03
#define AML_TYPE_EXEC_1A_1T_1R 0x04 /* Monadic2R */
#define AML_TYPE_EXEC_2A_0T_0R 0x05 /* Dyadic1 */
#define AML_TYPE_EXEC_2A_0T_1R 0x06 /* Dyadic2 */
#define AML_TYPE_EXEC_2A_1T_1R 0x07 /* Dyadic2R */
#define AML_TYPE_EXEC_2A_2T_1R 0x08
#define AML_TYPE_EXEC_3A_0T_0R 0x09
#define AML_TYPE_EXEC_3A_1T_1R 0x0A
#define AML_TYPE_EXEC_6A_0T_1R 0x0B
#define AML_TYPE_EXEC_0A_0T_1R 0x00 /* 0 Args, 0 Target, 1 RetVal */
#define AML_TYPE_EXEC_1A_0T_0R 0x01 /* 1 Args, 0 Target, 0 RetVal */
#define AML_TYPE_EXEC_1A_0T_1R 0x02 /* 1 Args, 0 Target, 1 RetVal */
#define AML_TYPE_EXEC_1A_1T_0R 0x03 /* 1 Args, 1 Target, 0 RetVal */
#define AML_TYPE_EXEC_1A_1T_1R 0x04 /* 1 Args, 1 Target, 1 RetVal */
#define AML_TYPE_EXEC_2A_0T_0R 0x05 /* 2 Args, 0 Target, 0 RetVal */
#define AML_TYPE_EXEC_2A_0T_1R 0x06 /* 2 Args, 0 Target, 1 RetVal */
#define AML_TYPE_EXEC_2A_1T_1R 0x07 /* 2 Args, 1 Target, 1 RetVal */
#define AML_TYPE_EXEC_2A_2T_1R 0x08 /* 2 Args, 2 Target, 1 RetVal */
#define AML_TYPE_EXEC_3A_0T_0R 0x09 /* 3 Args, 0 Target, 0 RetVal */
#define AML_TYPE_EXEC_3A_1T_1R 0x0A /* 3 Args, 1 Target, 1 RetVal */
#define AML_TYPE_EXEC_6A_0T_1R 0x0B /* 6 Args, 0 Target, 1 RetVal */
/* End of types used in dispatch table */
#define AML_TYPE_LITERAL 0x0B
#define AML_TYPE_CONSTANT 0x0C
#define AML_TYPE_METHOD_ARGUMENT 0x0D
#define AML_TYPE_LOCAL_VARIABLE 0x0E
#define AML_TYPE_DATA_TERM 0x0F
#define AML_TYPE_LITERAL 0x0C
#define AML_TYPE_CONSTANT 0x0D
#define AML_TYPE_METHOD_ARGUMENT 0x0E
#define AML_TYPE_LOCAL_VARIABLE 0x0F
#define AML_TYPE_DATA_TERM 0x10
/* Generic for an op that returns a value */
#define AML_TYPE_METHOD_CALL 0x10
#define AML_TYPE_METHOD_CALL 0x11
/* Miscellaneous types */
#define AML_TYPE_CREATE_FIELD 0x11
#define AML_TYPE_CREATE_OBJECT 0x12
#define AML_TYPE_CONTROL 0x13
#define AML_TYPE_NAMED_NO_OBJ 0x14
#define AML_TYPE_NAMED_FIELD 0x15
#define AML_TYPE_NAMED_SIMPLE 0x16
#define AML_TYPE_NAMED_COMPLEX 0x17
#define AML_TYPE_RETURN 0x18
#define AML_TYPE_UNDEFINED 0x19
#define AML_TYPE_BOGUS 0x1A
#define AML_TYPE_CREATE_FIELD 0x12
#define AML_TYPE_CREATE_OBJECT 0x13
#define AML_TYPE_CONTROL 0x14
#define AML_TYPE_NAMED_NO_OBJ 0x15
#define AML_TYPE_NAMED_FIELD 0x16
#define AML_TYPE_NAMED_SIMPLE 0x17
#define AML_TYPE_NAMED_COMPLEX 0x18
#define AML_TYPE_RETURN 0x19
#define AML_TYPE_UNDEFINED 0x1A
#define AML_TYPE_BOGUS 0x1B
/* AML Package Length encodings */

View file

@ -66,6 +66,7 @@
#define ACPI_RESTAG_DRIVESTRENGTH "_DRS"
#define ACPI_RESTAG_ENDIANNESS "_END"
#define ACPI_RESTAG_FLOWCONTROL "_FLC"
#define ACPI_RESTAG_FUNCTION "_FUN"
#define ACPI_RESTAG_GRANULARITY "_GRA"
#define ACPI_RESTAG_INTERRUPT "_INT"
#define ACPI_RESTAG_INTERRUPTLEVEL "_LL_" /* ActiveLo(1), ActiveHi(0) */
@ -85,6 +86,8 @@
#define ACPI_RESTAG_PHASE "_PHA"
#define ACPI_RESTAG_PIN "_PIN"
#define ACPI_RESTAG_PINCONFIG "_PPI"
#define ACPI_RESTAG_PINCONFIG_TYPE "_TYP"
#define ACPI_RESTAG_PINCONFIG_VALUE "_VAL"
#define ACPI_RESTAG_POLARITY "_POL"
#define ACPI_RESTAG_REGISTERBITOFFSET "_RBO"
#define ACPI_RESTAG_REGISTERBITWIDTH "_RBW"
@ -528,6 +531,116 @@ typedef struct aml_resource_uart_serialbus
#define AML_RESOURCE_UART_TYPE_REVISION 1 /* ACPI 5.0 */
#define AML_RESOURCE_UART_MIN_DATA_LEN 10
typedef struct aml_resource_pin_function
{
AML_RESOURCE_LARGE_HEADER_COMMON
UINT8 RevisionId;
UINT16 Flags;
UINT8 PinConfig;
UINT16 FunctionNumber;
UINT16 PinTableOffset;
UINT8 ResSourceIndex;
UINT16 ResSourceOffset;
UINT16 VendorOffset;
UINT16 VendorLength;
/*
* Optional fields follow immediately:
* 1) PIN list (Words)
* 2) Resource Source String
* 3) Vendor Data bytes
*/
} AML_RESOURCE_PIN_FUNCTION;
#define AML_RESOURCE_PIN_FUNCTION_REVISION 1 /* ACPI 6.2 */
typedef struct aml_resource_pin_config
{
AML_RESOURCE_LARGE_HEADER_COMMON
UINT8 RevisionId;
UINT16 Flags;
UINT8 PinConfigType;
UINT32 PinConfigValue;
UINT16 PinTableOffset;
UINT8 ResSourceIndex;
UINT16 ResSourceOffset;
UINT16 VendorOffset;
UINT16 VendorLength;
/*
* Optional fields follow immediately:
* 1) PIN list (Words)
* 2) Resource Source String
* 3) Vendor Data bytes
*/
} AML_RESOURCE_PIN_CONFIG;
#define AML_RESOURCE_PIN_CONFIG_REVISION 1 /* ACPI 6.2 */
typedef struct aml_resource_pin_group
{
AML_RESOURCE_LARGE_HEADER_COMMON
UINT8 RevisionId;
UINT16 Flags;
UINT16 PinTableOffset;
UINT16 LabelOffset;
UINT16 VendorOffset;
UINT16 VendorLength;
/*
* Optional fields follow immediately:
* 1) PIN list (Words)
* 2) Resource Label String
* 3) Vendor Data bytes
*/
} AML_RESOURCE_PIN_GROUP;
#define AML_RESOURCE_PIN_GROUP_REVISION 1 /* ACPI 6.2 */
typedef struct aml_resource_pin_group_function
{
AML_RESOURCE_LARGE_HEADER_COMMON
UINT8 RevisionId;
UINT16 Flags;
UINT16 FunctionNumber;
UINT8 ResSourceIndex;
UINT16 ResSourceOffset;
UINT16 ResSourceLabelOffset;
UINT16 VendorOffset;
UINT16 VendorLength;
/*
* Optional fields follow immediately:
* 1) Resource Source String
* 2) Resource Source Label String
* 3) Vendor Data bytes
*/
} AML_RESOURCE_PIN_GROUP_FUNCTION;
#define AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION 1 /* ACPI 6.2 */
typedef struct aml_resource_pin_group_config
{
AML_RESOURCE_LARGE_HEADER_COMMON
UINT8 RevisionId;
UINT16 Flags;
UINT8 PinConfigType;
UINT32 PinConfigValue;
UINT8 ResSourceIndex;
UINT16 ResSourceOffset;
UINT16 ResSourceLabelOffset;
UINT16 VendorOffset;
UINT16 VendorLength;
/*
* Optional fields follow immediately:
* 1) Resource Source String
* 2) Resource Source Label String
* 3) Vendor Data bytes
*/
} AML_RESOURCE_PIN_GROUP_CONFIG;
#define AML_RESOURCE_PIN_GROUP_CONFIG_REVISION 1 /* ACPI 6.2 */
/* restore default alignment */
@ -572,6 +685,11 @@ typedef union aml_resource
AML_RESOURCE_SPI_SERIALBUS SpiSerialBus;
AML_RESOURCE_UART_SERIALBUS UartSerialBus;
AML_RESOURCE_COMMON_SERIALBUS CommonSerialBus;
AML_RESOURCE_PIN_FUNCTION PinFunction;
AML_RESOURCE_PIN_CONFIG PinConfig;
AML_RESOURCE_PIN_GROUP PinGroup;
AML_RESOURCE_PIN_GROUP_FUNCTION PinGroupFunction;
AML_RESOURCE_PIN_GROUP_CONFIG PinGroupConfig;
/* Utility overlays */

View file

@ -48,7 +48,17 @@
* Use compiler specific <stdarg.h> is a good practice for even when
* -nostdinc is specified (i.e., ACPI_USE_STANDARD_HEADERS undefined.
*/
#ifndef va_arg
#ifdef ACPI_USE_BUILTIN_STDARG
typedef __builtin_va_list va_list;
#define va_start(v, l) __builtin_va_start(v, l)
#define va_end(v) __builtin_va_end(v)
#define va_arg(v, l) __builtin_va_arg(v, l)
#define va_copy(d, s) __builtin_va_copy(d, s)
#else
#include <stdarg.h>
#endif
#endif
#define ACPI_INLINE __inline__

View file

@ -48,7 +48,9 @@
* Use compiler specific <stdarg.h> is a good practice for even when
* -nostdinc is specified (i.e., ACPI_USE_STANDARD_HEADERS undefined.
*/
#ifndef va_arg
#include <stdarg.h>
#endif
/* Configuration specific to Intel 64-bit C compiler */

View file

@ -47,6 +47,9 @@
#include "acnamesp.h"
#include "acdispat.h"
#ifdef ACPI_ASL_COMPILER
#include "acdisasm.h"
#endif
#define _COMPONENT ACPI_NAMESPACE
ACPI_MODULE_NAME ("nsaccess")
@ -602,6 +605,30 @@ AcpiNsLookup (
CurrentNode));
}
#ifdef ACPI_ASL_COMPILER
/*
* If this ACPI name already exists within the namespace as an
* external declaration, then mark the external as a conflicting
* declaration and proceed to process the current node as if it did
* not exist in the namespace. If this node is not processed as
* normal, then it could cause improper namespace resolution
* by failing to open a new scope.
*/
if (AcpiGbl_DisasmFlag &&
(Status == AE_ALREADY_EXISTS) &&
((ThisNode->Flags & ANOBJ_IS_EXTERNAL) ||
(WalkState && WalkState->Opcode == AML_EXTERNAL_OP)))
{
ThisNode->Flags &= ~ANOBJ_IS_EXTERNAL;
ThisNode->Type = (UINT8)ThisSearchType;
if (WalkState->Opcode != AML_EXTERNAL_OP)
{
AcpiDmMarkExternalConflict (ThisNode);
}
break;
}
#endif
*ReturnNode = ThisNode;
return_ACPI_STATUS (Status);
}

View file

@ -216,10 +216,6 @@ AcpiNsHandleToPathname (
(void) AcpiNsBuildNormalizedPath (Node, Buffer->Pointer,
RequiredSize, NoTrailing);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%s [%X]\n",
(char *) Buffer->Pointer, (UINT32) RequiredSize));

View file

@ -98,7 +98,7 @@ AcpiNsPrintNodePathname (
AcpiOsPrintf ("%s ", Message);
}
AcpiOsPrintf ("[%s] (Node %p)", (char *) Buffer.Pointer, Node);
AcpiOsPrintf ("%s", (char *) Buffer.Pointer);
ACPI_FREE (Buffer.Pointer);
}
}

View file

@ -91,6 +91,8 @@ AcpiEvaluateObjectTyped (
{
ACPI_STATUS Status;
BOOLEAN FreeBufferOnError = FALSE;
ACPI_HANDLE TargetHandle;
char *FullPathname;
ACPI_FUNCTION_TRACE (AcpiEvaluateObjectTyped);
@ -108,41 +110,56 @@ AcpiEvaluateObjectTyped (
FreeBufferOnError = TRUE;
}
/* Evaluate the object */
Status = AcpiEvaluateObject (Handle, Pathname,
ExternalParams, ReturnBuffer);
Status = AcpiGetHandle (Handle, Pathname, &TargetHandle);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/* Type ANY means "don't care" */
FullPathname = AcpiNsGetExternalPathname (TargetHandle);
if (!FullPathname)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
/* Evaluate the object */
Status = AcpiEvaluateObject (TargetHandle, NULL, ExternalParams,
ReturnBuffer);
if (ACPI_FAILURE (Status))
{
goto Exit;
}
/* Type ANY means "don't care about return value type" */
if (ReturnType == ACPI_TYPE_ANY)
{
return_ACPI_STATUS (AE_OK);
goto Exit;
}
if (ReturnBuffer->Length == 0)
{
/* Error because caller specifically asked for a return value */
ACPI_ERROR ((AE_INFO, "No return value"));
return_ACPI_STATUS (AE_NULL_OBJECT);
ACPI_ERROR ((AE_INFO, "%s did not return any object",
FullPathname));
Status = AE_NULL_OBJECT;
goto Exit;
}
/* Examine the object type returned from EvaluateObject */
if (((ACPI_OBJECT *) ReturnBuffer->Pointer)->Type == ReturnType)
{
return_ACPI_STATUS (AE_OK);
goto Exit;
}
/* Return object type does not match requested type */
ACPI_ERROR ((AE_INFO,
"Incorrect return type [%s] requested [%s]",
"Incorrect return type from %s - received [%s], requested [%s]",
FullPathname,
AcpiUtGetTypeName (((ACPI_OBJECT *) ReturnBuffer->Pointer)->Type),
AcpiUtGetTypeName (ReturnType)));
@ -160,7 +177,11 @@ AcpiEvaluateObjectTyped (
}
ReturnBuffer->Length = 0;
return_ACPI_STATUS (AE_TYPE);
Status = AE_TYPE;
Exit:
ACPI_FREE (FullPathname);
return_ACPI_STATUS (Status);
}
ACPI_EXPORT_SYMBOL (AcpiEvaluateObjectTyped)

View file

@ -129,12 +129,23 @@ AcpiPsGetAmlOpcode (
WalkState->Opcode,
(UINT32) (AmlOffset + sizeof (ACPI_TABLE_HEADER)));
ACPI_ERROR ((AE_INFO,
"Aborting disassembly, AML byte code is corrupt"));
/* Dump the context surrounding the invalid opcode */
AcpiUtDumpBuffer (((UINT8 *) WalkState->ParserState.Aml - 16),
48, DB_BYTE_DISPLAY,
(AmlOffset + sizeof (ACPI_TABLE_HEADER) - 16));
AcpiOsPrintf (" */\n");
/*
* Just abort the disassembly, cannot continue because the
* parser is essentially lost. The disassembler can then
* randomly fail because an ill-constructed parse tree
* can result.
*/
return_ACPI_STATUS (AE_AML_BAD_OPCODE);
#endif
}
@ -350,6 +361,10 @@ AcpiPsCreateOp (
{
return_ACPI_STATUS (AE_CTRL_PARSE_CONTINUE);
}
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/* Create Op structure and append to parent's argument list */

View file

@ -337,7 +337,7 @@ const ACPI_OPCODE_INFO AcpiGbl_AmlOpInfo[AML_NUM_OPCODES] =
/* ACPI 6.0 opcodes */
/* 81 */ ACPI_OP ("External", ARGP_EXTERNAL_OP, ARGI_EXTERNAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE,/* ? */ AML_TYPE_EXEC_3A_0T_0R, AML_FLAGS_EXEC_3A_0T_0R),
/* 81 */ ACPI_OP ("External", ARGP_EXTERNAL_OP, ARGI_EXTERNAL_OP, ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED),
/* 82 */ ACPI_OP ("Comment", ARGP_COMMENT_OP, ARGI_COMMENT_OP, ACPI_TYPE_STRING, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT)
/*! [End] no source code translation !*/

View file

@ -56,6 +56,7 @@
#include "acdispat.h"
#include "amlcode.h"
#include "acinterp.h"
#include "acnamesp.h"
#define _COMPONENT ACPI_PARSER
ACPI_MODULE_NAME ("psparse")
@ -556,8 +557,17 @@ AcpiPsParseAml (
/* Either the method parse or actual execution failed */
AcpiExExitInterpreter ();
ACPI_ERROR_METHOD ("Method parse/execution failed",
WalkState->MethodNode, NULL, Status);
if (Status == AE_ABORT_METHOD)
{
AcpiNsPrintNodePathname (
WalkState->MethodNode, "Method aborted:");
AcpiOsPrintf ("\n");
}
else
{
ACPI_ERROR_METHOD ("Method parse/execution failed",
WalkState->MethodNode, NULL, Status);
}
AcpiExEnterInterpreter ();
/* Check for possible multi-thread reentrancy problem */

View file

@ -363,6 +363,15 @@ AcpiRsGetAmlLength (
break;
case ACPI_RESOURCE_TYPE_PIN_FUNCTION:
TotalSize = (ACPI_RS_LENGTH) (TotalSize +
(Resource->Data.PinFunction.PinTableLength * 2) +
Resource->Data.PinFunction.ResourceSource.StringLength +
Resource->Data.PinFunction.VendorLength);
break;
case ACPI_RESOURCE_TYPE_SERIAL_BUS:
@ -375,6 +384,42 @@ AcpiRsGetAmlLength (
break;
case ACPI_RESOURCE_TYPE_PIN_CONFIG:
TotalSize = (ACPI_RS_LENGTH) (TotalSize +
(Resource->Data.PinConfig.PinTableLength * 2) +
Resource->Data.PinConfig.ResourceSource.StringLength +
Resource->Data.PinConfig.VendorLength);
break;
case ACPI_RESOURCE_TYPE_PIN_GROUP:
TotalSize = (ACPI_RS_LENGTH) (TotalSize +
(Resource->Data.PinGroup.PinTableLength * 2) +
Resource->Data.PinGroup.ResourceLabel.StringLength +
Resource->Data.PinGroup.VendorLength);
break;
case ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION:
TotalSize = (ACPI_RS_LENGTH) (TotalSize +
Resource->Data.PinGroupFunction.ResourceSource.StringLength +
Resource->Data.PinGroupFunction.ResourceSourceLabel.StringLength +
Resource->Data.PinGroupFunction.VendorLength);
break;
case ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG:
TotalSize = (ACPI_RS_LENGTH) (TotalSize +
Resource->Data.PinGroupConfig.ResourceSource.StringLength +
Resource->Data.PinGroupConfig.ResourceSourceLabel.StringLength +
Resource->Data.PinGroupConfig.VendorLength);
break;
default:
break;
@ -560,6 +605,26 @@ AcpiRsGetListLength (
}
break;
case ACPI_RESOURCE_NAME_PIN_FUNCTION:
/* Vendor data is optional */
if (AmlResource->PinFunction.VendorLength)
{
ExtraStructBytes +=
AmlResource->PinFunction.VendorOffset -
AmlResource->PinFunction.PinTableOffset +
AmlResource->PinFunction.VendorLength;
}
else
{
ExtraStructBytes +=
AmlResource->LargeHeader.ResourceLength +
sizeof (AML_RESOURCE_LARGE_HEADER) -
AmlResource->PinFunction.PinTableOffset;
}
break;
case ACPI_RESOURCE_NAME_SERIAL_BUS:
MinimumAmlResourceLength = AcpiGbl_ResourceAmlSerialBusSizes[
@ -569,6 +634,53 @@ AcpiRsGetListLength (
MinimumAmlResourceLength;
break;
case ACPI_RESOURCE_NAME_PIN_CONFIG:
/* Vendor data is optional */
if (AmlResource->PinConfig.VendorLength)
{
ExtraStructBytes +=
AmlResource->PinConfig.VendorOffset -
AmlResource->PinConfig.PinTableOffset +
AmlResource->PinConfig.VendorLength;
}
else
{
ExtraStructBytes +=
AmlResource->LargeHeader.ResourceLength +
sizeof (AML_RESOURCE_LARGE_HEADER) -
AmlResource->PinConfig.PinTableOffset;
}
break;
case ACPI_RESOURCE_NAME_PIN_GROUP:
ExtraStructBytes +=
AmlResource->PinGroup.VendorOffset -
AmlResource->PinGroup.PinTableOffset +
AmlResource->PinGroup.VendorLength;
break;
case ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION:
ExtraStructBytes +=
AmlResource->PinGroupFunction.VendorOffset -
AmlResource->PinGroupFunction.ResSourceOffset +
AmlResource->PinGroupFunction.VendorLength;
break;
case ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG:
ExtraStructBytes +=
AmlResource->PinGroupConfig.VendorOffset -
AmlResource->PinGroupConfig.ResSourceOffset +
AmlResource->PinGroupConfig.VendorLength;
break;
default:
break;

View file

@ -107,6 +107,11 @@ static void
AcpiRsDumpResourceSource (
ACPI_RESOURCE_SOURCE *ResourceSource);
static void
AcpiRsDumpResourceLabel (
char *Title,
ACPI_RESOURCE_LABEL *ResourceLabel);
static void
AcpiRsDumpAddressCommon (
ACPI_RESOURCE_DATA *Resource);
@ -423,6 +428,22 @@ AcpiRsDumpDescriptor (
ACPI_RESOURCE_SOURCE, Target));
break;
case ACPI_RSD_LABEL:
/*
* ResourceLabel
*/
AcpiRsDumpResourceLabel ("Resource Label", ACPI_CAST_PTR (
ACPI_RESOURCE_LABEL, Target));
break;
case ACPI_RSD_SOURCE_LABEL:
/*
* ResourceSourceLabel
*/
AcpiRsDumpResourceLabel ("Resource Source Label", ACPI_CAST_PTR (
ACPI_RESOURCE_LABEL, Target));
break;
default:
AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n",
@ -470,6 +491,32 @@ AcpiRsDumpResourceSource (
}
/*******************************************************************************
*
* FUNCTION: AcpiRsDumpResourceLabel
*
* PARAMETERS: Title - Title of the dumped resource field
* ResourceLabel - Pointer to a Resource Label struct
*
* RETURN: None
*
* DESCRIPTION: Common routine for dumping the ResourceLabel
*
******************************************************************************/
static void
AcpiRsDumpResourceLabel (
char *Title,
ACPI_RESOURCE_LABEL *ResourceLabel)
{
ACPI_FUNCTION_ENTRY ();
AcpiRsOutString (Title,
ResourceLabel->StringPtr ?
ResourceLabel->StringPtr : "[Not Specified]");
}
/*******************************************************************************
*
* FUNCTION: AcpiRsDumpAddressCommon

View file

@ -252,6 +252,74 @@ ACPI_RSDUMP_INFO AcpiRsDumpGpio[16] =
{ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (Gpio.VendorData), "VendorData", NULL},
};
ACPI_RSDUMP_INFO AcpiRsDumpPinFunction[10] =
{
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPinFunction), "PinFunction", NULL},
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinFunction.RevisionId), "RevisionId", NULL},
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinFunction.PinConfig), "PinConfig", AcpiGbl_PpcDecode},
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinFunction.Sharable), "Sharing", AcpiGbl_ShrDecode},
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinFunction.FunctionNumber), "FunctionNumber", NULL},
{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (PinFunction.ResourceSource), "ResourceSource", NULL},
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinFunction.PinTableLength), "PinTableLength", NULL},
{ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET (PinFunction.PinTable), "PinTable", NULL},
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinFunction.VendorLength), "VendorLength", NULL},
{ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (PinFunction.VendorData), "VendorData", NULL},
};
ACPI_RSDUMP_INFO AcpiRsDumpPinConfig[11] =
{
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPinConfig), "PinConfig", NULL},
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinConfig.RevisionId), "RevisionId", NULL},
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinConfig.ProducerConsumer), "ProducerConsumer", AcpiGbl_ConsumeDecode},
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinConfig.Sharable), "Sharing", AcpiGbl_ShrDecode},
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinConfig.PinConfigType), "PinConfigType", NULL},
{ACPI_RSD_UINT32, ACPI_RSD_OFFSET (PinConfig.PinConfigValue), "PinConfigValue", NULL},
{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (PinConfig.ResourceSource), "ResourceSource", NULL},
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinConfig.PinTableLength), "PinTableLength", NULL},
{ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET (PinConfig.PinTable), "PinTable", NULL},
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinConfig.VendorLength), "VendorLength", NULL},
{ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (PinConfig.VendorData), "VendorData", NULL},
};
ACPI_RSDUMP_INFO AcpiRsDumpPinGroup[8] =
{
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPinGroup), "PinGroup", NULL},
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinGroup.RevisionId), "RevisionId", NULL},
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinGroup.ProducerConsumer), "ProducerConsumer", AcpiGbl_ConsumeDecode},
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinGroup.PinTableLength), "PinTableLength", NULL},
{ACPI_RSD_WORDLIST, ACPI_RSD_OFFSET (PinGroup.PinTable), "PinTable", NULL},
{ACPI_RSD_LABEL, ACPI_RSD_OFFSET (PinGroup.ResourceLabel), "ResourceLabel", NULL},
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinGroup.VendorLength), "VendorLength", NULL},
{ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (PinGroup.VendorData), "VendorData", NULL},
};
ACPI_RSDUMP_INFO AcpiRsDumpPinGroupFunction[9] =
{
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPinGroupFunction), "PinGroupFunction", NULL},
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinGroupFunction.RevisionId), "RevisionId", NULL},
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinGroupFunction.ProducerConsumer), "ProducerConsumer", AcpiGbl_ConsumeDecode},
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinGroupFunction.Sharable), "Sharing", AcpiGbl_ShrDecode},
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinGroupFunction.FunctionNumber), "FunctionNumber", NULL},
{ACPI_RSD_SOURCE_LABEL, ACPI_RSD_OFFSET (PinGroupFunction.ResourceSourceLabel), "ResourceSourceLabel", NULL},
{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (PinGroupFunction.ResourceSource), "ResourceSource", NULL},
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinGroupFunction.VendorLength), "VendorLength", NULL},
{ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (PinGroupFunction.VendorData), "VendorData", NULL},
};
ACPI_RSDUMP_INFO AcpiRsDumpPinGroupConfig[10] =
{
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpPinGroupConfig), "PinGroupConfig", NULL},
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinGroupConfig.RevisionId), "RevisionId", NULL},
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinGroupConfig.ProducerConsumer), "ProducerConsumer", AcpiGbl_ConsumeDecode},
{ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET (PinGroupConfig.Sharable), "Sharing", AcpiGbl_ShrDecode},
{ACPI_RSD_UINT8, ACPI_RSD_OFFSET (PinGroupConfig.PinConfigType), "PinConfigType", NULL},
{ACPI_RSD_UINT32, ACPI_RSD_OFFSET (PinGroupConfig.PinConfigValue), "PinConfigValue", NULL},
{ACPI_RSD_SOURCE_LABEL, ACPI_RSD_OFFSET (PinGroupConfig.ResourceSourceLabel), "ResourceSourceLabel", NULL},
{ACPI_RSD_SOURCE, ACPI_RSD_OFFSET (PinGroupConfig.ResourceSource), "ResourceSource", NULL},
{ACPI_RSD_UINT16, ACPI_RSD_OFFSET (PinGroupConfig.VendorLength), "VendorLength", NULL},
{ACPI_RSD_SHORTLISTX,ACPI_RSD_OFFSET (PinGroupConfig.VendorData), "VendorData", NULL},
};
ACPI_RSDUMP_INFO AcpiRsDumpFixedDma[4] =
{
{ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE (AcpiRsDumpFixedDma), "FixedDma", NULL},

View file

@ -84,6 +84,11 @@ ACPI_RSCONVERT_INFO *AcpiGbl_SetResourceDispatch[] =
AcpiRsConvertGpio, /* 0x11, ACPI_RESOURCE_TYPE_GPIO */
AcpiRsConvertFixedDma, /* 0x12, ACPI_RESOURCE_TYPE_FIXED_DMA */
NULL, /* 0x13, ACPI_RESOURCE_TYPE_SERIAL_BUS - Use subtype table below */
AcpiRsConvertPinFunction, /* 0x14, ACPI_RESOURCE_TYPE_PIN_FUNCTION */
AcpiRsConvertPinConfig, /* 0x15, ACPI_RESOURCE_TYPE_PIN_CONFIG */
AcpiRsConvertPinGroup, /* 0x16, ACPI_RESOURCE_TYPE_PIN_GROUP */
AcpiRsConvertPinGroupFunction, /* 0x17, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */
AcpiRsConvertPinGroupConfig, /* 0x18, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */
};
/* Dispatch tables for AML-to-resource (Get Resource) conversion functions */
@ -124,8 +129,12 @@ ACPI_RSCONVERT_INFO *AcpiGbl_GetResourceDispatch[] =
AcpiRsConvertAddress64, /* 0x0A, ACPI_RESOURCE_NAME_ADDRESS64 */
AcpiRsConvertExtAddress64, /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 */
AcpiRsConvertGpio, /* 0x0C, ACPI_RESOURCE_NAME_GPIO */
NULL, /* 0x0D, Reserved */
AcpiRsConvertPinFunction, /* 0x0D, ACPI_RESOURCE_NAME_PIN_FUNCTION */
NULL, /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use subtype table below */
AcpiRsConvertPinConfig, /* 0x0F, ACPI_RESOURCE_NAME_PIN_CONFIG */
AcpiRsConvertPinGroup, /* 0x10, ACPI_RESOURCE_NAME_PIN_GROUP */
AcpiRsConvertPinGroupFunction, /* 0x11, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION */
AcpiRsConvertPinGroupConfig, /* 0x12, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG */
};
/* Subtype table for SerialBus -- I2C, SPI, and UART */
@ -165,6 +174,11 @@ ACPI_RSDUMP_INFO *AcpiGbl_DumpResourceDispatch[] =
AcpiRsDumpGpio, /* ACPI_RESOURCE_TYPE_GPIO */
AcpiRsDumpFixedDma, /* ACPI_RESOURCE_TYPE_FIXED_DMA */
NULL, /* ACPI_RESOURCE_TYPE_SERIAL_BUS */
AcpiRsDumpPinFunction, /* ACPI_RESOURCE_TYPE_PIN_FUNCTION */
AcpiRsDumpPinConfig, /* ACPI_RESOURCE_TYPE_PIN_CONFIG */
AcpiRsDumpPinGroup, /* ACPI_RESOURCE_TYPE_PIN_GROUP */
AcpiRsDumpPinGroupFunction, /* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */
AcpiRsDumpPinGroupConfig, /* ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */
};
ACPI_RSDUMP_INFO *AcpiGbl_DumpSerialBusDispatch[] =
@ -204,6 +218,11 @@ const UINT8 AcpiGbl_AmlResourceSizes[] =
sizeof (AML_RESOURCE_GPIO), /* ACPI_RESOURCE_TYPE_GPIO */
sizeof (AML_RESOURCE_FIXED_DMA), /* ACPI_RESOURCE_TYPE_FIXED_DMA */
sizeof (AML_RESOURCE_COMMON_SERIALBUS), /* ACPI_RESOURCE_TYPE_SERIAL_BUS */
sizeof (AML_RESOURCE_PIN_FUNCTION), /* ACPI_RESOURCE_TYPE_PIN_FUNCTION */
sizeof (AML_RESOURCE_PIN_CONFIG), /* ACPI_RESOURCE_TYPE_PIN_CONFIG */
sizeof (AML_RESOURCE_PIN_GROUP), /* ACPI_RESOURCE_TYPE_PIN_GROUP */
sizeof (AML_RESOURCE_PIN_GROUP_FUNCTION), /* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */
sizeof (AML_RESOURCE_PIN_GROUP_CONFIG), /* ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */
};
@ -243,7 +262,12 @@ const UINT8 AcpiGbl_ResourceStructSizes[] =
ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS64),
ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_ADDRESS64),
ACPI_RS_SIZE (ACPI_RESOURCE_GPIO),
ACPI_RS_SIZE (ACPI_RESOURCE_COMMON_SERIALBUS)
ACPI_RS_SIZE (ACPI_RESOURCE_PIN_FUNCTION),
ACPI_RS_SIZE (ACPI_RESOURCE_COMMON_SERIALBUS),
ACPI_RS_SIZE (ACPI_RESOURCE_PIN_CONFIG),
ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP),
ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_FUNCTION),
ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_CONFIG),
};
const UINT8 AcpiGbl_AmlResourceSerialBusSizes[] =

View file

@ -597,10 +597,7 @@ AcpiRsConvertResourceToAml (
/* Set vendor offset only if there is vendor data */
if (Resource->Data.Gpio.VendorLength)
{
ACPI_SET16 (Target, AmlLength);
}
ACPI_SET16 (Target, AmlLength);
AcpiRsSetResourceLength (AmlLength, Aml);
break;

View file

@ -146,6 +146,78 @@ ACPI_RSCONVERT_INFO AcpiRsConvertGpio[18] =
0},
};
/*******************************************************************************
*
* AcpiRsConvertPinfunction
*
******************************************************************************/
ACPI_RSCONVERT_INFO AcpiRsConvertPinFunction[13] =
{
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_FUNCTION,
ACPI_RS_SIZE (ACPI_RESOURCE_PIN_FUNCTION),
ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinFunction)},
{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_FUNCTION,
sizeof (AML_RESOURCE_PIN_FUNCTION),
0},
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinFunction.RevisionId),
AML_OFFSET (PinFunction.RevisionId),
1},
{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinFunction.Sharable),
AML_OFFSET (PinFunction.Flags),
0},
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinFunction.PinConfig),
AML_OFFSET (PinFunction.PinConfig),
1},
{ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.PinFunction.FunctionNumber),
AML_OFFSET (PinFunction.FunctionNumber),
2},
/* Pin Table */
/*
* It is OK to use GPIO operations here because none of them refer GPIO
* structures directly but instead use offsets given here.
*/
{ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinFunction.PinTableLength),
AML_OFFSET (PinFunction.PinTableOffset),
AML_OFFSET (PinFunction.ResSourceOffset)},
{ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinFunction.PinTable),
AML_OFFSET (PinFunction.PinTableOffset),
0},
/* Resource Source */
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.Index),
AML_OFFSET (PinFunction.ResSourceIndex),
1},
{ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.StringLength),
AML_OFFSET (PinFunction.ResSourceOffset),
AML_OFFSET (PinFunction.VendorOffset)},
{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinFunction.ResourceSource.StringPtr),
AML_OFFSET (PinFunction.ResSourceOffset),
0},
/* Vendor Data */
{ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinFunction.VendorLength),
AML_OFFSET (PinFunction.VendorLength),
1},
{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinFunction.VendorData),
AML_OFFSET (PinFunction.VendorOffset),
0},
};
/*******************************************************************************
*
@ -437,3 +509,278 @@ ACPI_RSCONVERT_INFO AcpiRsConvertUartSerialBus[23] =
AML_OFFSET (UartSerialBus.DefaultBaudRate),
1},
};
/*******************************************************************************
*
* AcpiRsConvertPinConfig
*
******************************************************************************/
ACPI_RSCONVERT_INFO AcpiRsConvertPinConfig[14] =
{
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_CONFIG,
ACPI_RS_SIZE (ACPI_RESOURCE_PIN_CONFIG),
ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinConfig)},
{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_CONFIG,
sizeof (AML_RESOURCE_PIN_CONFIG),
0},
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinConfig.RevisionId),
AML_OFFSET (PinConfig.RevisionId),
1},
{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinConfig.Sharable),
AML_OFFSET (PinConfig.Flags),
0},
{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinConfig.ProducerConsumer),
AML_OFFSET (PinConfig.Flags),
1},
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinConfig.PinConfigType),
AML_OFFSET (PinConfig.PinConfigType),
1},
{ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.PinConfig.PinConfigValue),
AML_OFFSET (PinConfig.PinConfigValue),
1},
/* Pin Table */
/*
* It is OK to use GPIO operations here because none of them refer GPIO
* structures directly but instead use offsets given here.
*/
{ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinConfig.PinTableLength),
AML_OFFSET (PinConfig.PinTableOffset),
AML_OFFSET (PinConfig.ResSourceOffset)},
{ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinConfig.PinTable),
AML_OFFSET (PinConfig.PinTableOffset),
0},
/* Resource Source */
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.Index),
AML_OFFSET (PinConfig.ResSourceIndex),
1},
{ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.StringLength),
AML_OFFSET (PinConfig.ResSourceOffset),
AML_OFFSET (PinConfig.VendorOffset)},
{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinConfig.ResourceSource.StringPtr),
AML_OFFSET (PinConfig.ResSourceOffset),
0},
/* Vendor Data */
{ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinConfig.VendorLength),
AML_OFFSET (PinConfig.VendorLength),
1},
{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinConfig.VendorData),
AML_OFFSET (PinConfig.VendorOffset),
0},
};
/*******************************************************************************
*
* AcpiRsConvertPinGroup
*
******************************************************************************/
ACPI_RSCONVERT_INFO AcpiRsConvertPinGroup[10] =
{
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP,
ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP),
ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroup)},
{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP,
sizeof (AML_RESOURCE_PIN_GROUP),
0},
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroup.RevisionId),
AML_OFFSET (PinGroup.RevisionId),
1},
{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroup.ProducerConsumer),
AML_OFFSET (PinGroup.Flags),
0},
/* Pin Table */
/*
* It is OK to use GPIO operations here because none of them refer GPIO
* structures directly but instead use offsets given here.
*/
{ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET (Data.PinGroup.PinTableLength),
AML_OFFSET (PinGroup.PinTableOffset),
AML_OFFSET (PinGroup.LabelOffset)},
{ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET (Data.PinGroup.PinTable),
AML_OFFSET (PinGroup.PinTableOffset),
0},
/* Resource Label */
{ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.ResourceLabel.StringLength),
AML_OFFSET (PinGroup.LabelOffset),
AML_OFFSET (PinGroup.VendorOffset)},
{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.ResourceLabel.StringPtr),
AML_OFFSET (PinGroup.LabelOffset),
0},
/* Vendor Data */
{ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinGroup.VendorLength),
AML_OFFSET (PinGroup.VendorLength),
1},
{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroup.VendorData),
AML_OFFSET (PinGroup.VendorOffset),
0},
};
/*******************************************************************************
*
* AcpiRsConvertPinGroupFunction
*
******************************************************************************/
ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupFunction[13] =
{
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION,
ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_FUNCTION),
ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroupFunction)},
{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION,
sizeof (AML_RESOURCE_PIN_GROUP_FUNCTION),
0},
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupFunction.RevisionId),
AML_OFFSET (PinGroupFunction.RevisionId),
1},
{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupFunction.Sharable),
AML_OFFSET (PinGroupFunction.Flags),
0},
{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupFunction.ProducerConsumer),
AML_OFFSET (PinGroupFunction.Flags),
1},
{ACPI_RSC_MOVE16, ACPI_RS_OFFSET (Data.PinGroupFunction.FunctionNumber),
AML_OFFSET (PinGroupFunction.FunctionNumber),
1},
/* Resource Source */
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.Index),
AML_OFFSET (PinGroupFunction.ResSourceIndex),
1},
{ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.StringLength),
AML_OFFSET (PinGroupFunction.ResSourceOffset),
AML_OFFSET (PinGroupFunction.ResSourceLabelOffset)},
{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSource.StringPtr),
AML_OFFSET (PinGroupFunction.ResSourceOffset),
0},
/* Resource Source Label */
{ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSourceLabel.StringLength),
AML_OFFSET (PinGroupFunction.ResSourceLabelOffset),
AML_OFFSET (PinGroupFunction.VendorOffset)},
{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.ResourceSourceLabel.StringPtr),
AML_OFFSET (PinGroupFunction.ResSourceLabelOffset),
0},
/* Vendor Data */
{ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinGroupFunction.VendorLength),
AML_OFFSET (PinGroupFunction.VendorLength),
1},
{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupFunction.VendorData),
AML_OFFSET (PinGroupFunction.VendorOffset),
0},
};
/*******************************************************************************
*
* AcpiRsConvertPinGroupConfig
*
******************************************************************************/
ACPI_RSCONVERT_INFO AcpiRsConvertPinGroupConfig[14] =
{
{ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG,
ACPI_RS_SIZE (ACPI_RESOURCE_PIN_GROUP_CONFIG),
ACPI_RSC_TABLE_SIZE (AcpiRsConvertPinGroupConfig)},
{ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG,
sizeof (AML_RESOURCE_PIN_GROUP_CONFIG),
0},
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupConfig.RevisionId),
AML_OFFSET (PinGroupConfig.RevisionId),
1},
{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupConfig.Sharable),
AML_OFFSET (PinGroupConfig.Flags),
0},
{ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.PinGroupConfig.ProducerConsumer),
AML_OFFSET (PinGroupConfig.Flags),
1},
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupConfig.PinConfigType),
AML_OFFSET (PinGroupConfig.PinConfigType),
1},
{ACPI_RSC_MOVE32, ACPI_RS_OFFSET (Data.PinGroupConfig.PinConfigValue),
AML_OFFSET (PinGroupConfig.PinConfigValue),
1},
/* Resource Source */
{ACPI_RSC_MOVE8, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.Index),
AML_OFFSET (PinGroupConfig.ResSourceIndex),
1},
{ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.StringLength),
AML_OFFSET (PinGroupConfig.ResSourceOffset),
AML_OFFSET (PinGroupConfig.ResSourceLabelOffset)},
{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSource.StringPtr),
AML_OFFSET (PinGroupConfig.ResSourceOffset),
0},
/* Resource Source Label */
{ACPI_RSC_COUNT_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSourceLabel.StringLength),
AML_OFFSET (PinGroupConfig.ResSourceLabelOffset),
AML_OFFSET (PinGroupConfig.VendorOffset)},
{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.ResourceSourceLabel.StringPtr),
AML_OFFSET (PinGroupConfig.ResSourceLabelOffset),
0},
/* Vendor Data */
{ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET (Data.PinGroupConfig.VendorLength),
AML_OFFSET (PinGroupConfig.VendorLength),
1},
{ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET (Data.PinGroupConfig.VendorData),
AML_OFFSET (PinGroupConfig.VendorOffset),
0},
};

View file

@ -489,8 +489,8 @@ AcpiTbCreateLocalFadt (
* The 64-bit X fields are optional extensions to the original 32-bit FADT
* V1.0 fields. Even if they are present in the FADT, they are optional and
* are unused if the BIOS sets them to zero. Therefore, we must copy/expand
* 32-bit V1.0 fields to the 64-bit X fields if the the 64-bit X field is
* originally zero.
* 32-bit V1.0 fields to the 64-bit X fields if the 64-bit X field is originally
* zero.
*
* For ACPI 1.0 FADTs (that contain no 64-bit addresses), all 32-bit address
* fields are expanded to the corresponding 64-bit X fields in the internal

View file

@ -149,9 +149,9 @@ AcpiTbCheckDsdtHeader (
*
* FUNCTION: AcpiTbCopyDsdt
*
* PARAMETERS: TableDesc - Installed table to copy
* PARAMETERS: TableIndex - Index of installed table to copy
*
* RETURN: None
* RETURN: The copied DSDT
*
* DESCRIPTION: Implements a subsystem option to copy the DSDT to local memory.
* Some very bad BIOSs are known to either corrupt the DSDT or
@ -260,7 +260,7 @@ AcpiTbGetRootTableEntry (
*
* FUNCTION: AcpiTbParseRootTable
*
* PARAMETERS: Rsdp - Pointer to the RSDP
* PARAMETERS: RsdpAddress - Pointer to the RSDP
*
* RETURN: Status
*

View file

@ -521,8 +521,9 @@ static const char *AcpiGbl_GenericNotify[ACPI_GENERIC_NOTIFY_MAX + 1]
/* 09 */ "Device PLD Check",
/* 0A */ "Reserved",
/* 0B */ "System Locality Update",
/* 0C */ "Shutdown Request", /* Reserved in ACPI 6.0 */
/* 0D */ "System Resource Affinity Update"
/* 0C */ "Reserved (was previously Shutdown Request)", /* Reserved in ACPI 6.0 */
/* 0D */ "System Resource Affinity Update",
/* 0E */ "Heterogeneous Memory Attributes Update" /* ACPI 6.2 */
};
static const char *AcpiGbl_DeviceNotify[5] =

View file

@ -117,14 +117,20 @@ AcpiUtAllocateOwnerId (
break;
}
if (!(AcpiGbl_OwnerIdMask[j] & (1 << k)))
/*
* Note: the UINT32 cast ensures that 1 is stored as a unsigned
* integer. Omitting the cast may result in 1 being stored as an
* int. Some compilers or runtime error detection may flag this as
* an error.
*/
if (!(AcpiGbl_OwnerIdMask[j] & ((UINT32) 1 << k)))
{
/*
* Found a free ID. The actual ID is the bit index plus one,
* making zero an invalid Owner ID. Save this as the last ID
* allocated and update the global ID mask.
*/
AcpiGbl_OwnerIdMask[j] |= (1 << k);
AcpiGbl_OwnerIdMask[j] |= ((UINT32) 1 << k);
AcpiGbl_LastOwnerIdIndex = (UINT8) j;
AcpiGbl_NextOwnerIdOffset = (UINT8) (k + 1);
@ -220,7 +226,7 @@ AcpiUtReleaseOwnerId (
/* Decode ID to index/offset pair */
Index = ACPI_DIV_32 (OwnerId);
Bit = 1 << ACPI_MOD_32 (OwnerId);
Bit = (UINT32) 1 << ACPI_MOD_32 (OwnerId);
/* Free the owner ID only if it is valid */

View file

@ -0,0 +1,353 @@
/*******************************************************************************
*
* Module Name: utresdecode - Resource descriptor keyword strings
*
******************************************************************************/
/*
* Copyright (C) 2000 - 2017, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#include "acpi.h"
#include "accommon.h"
#include "acresrc.h"
#define _COMPONENT ACPI_UTILITIES
ACPI_MODULE_NAME ("utresdecode")
#if defined (ACPI_DEBUG_OUTPUT) || \
defined (ACPI_DISASSEMBLER) || \
defined (ACPI_DEBUGGER)
/*
* Strings used to decode resource descriptors.
* Used by both the disassembler and the debugger resource dump routines
*/
const char *AcpiGbl_BmDecode[] =
{
"NotBusMaster",
"BusMaster"
};
const char *AcpiGbl_ConfigDecode[] =
{
"0 - Good Configuration",
"1 - Acceptable Configuration",
"2 - Suboptimal Configuration",
"3 - ***Invalid Configuration***",
};
const char *AcpiGbl_ConsumeDecode[] =
{
"ResourceProducer",
"ResourceConsumer"
};
const char *AcpiGbl_DecDecode[] =
{
"PosDecode",
"SubDecode"
};
const char *AcpiGbl_HeDecode[] =
{
"Level",
"Edge"
};
const char *AcpiGbl_IoDecode[] =
{
"Decode10",
"Decode16"
};
const char *AcpiGbl_LlDecode[] =
{
"ActiveHigh",
"ActiveLow",
"ActiveBoth",
"Reserved"
};
const char *AcpiGbl_MaxDecode[] =
{
"MaxNotFixed",
"MaxFixed"
};
const char *AcpiGbl_MemDecode[] =
{
"NonCacheable",
"Cacheable",
"WriteCombining",
"Prefetchable"
};
const char *AcpiGbl_MinDecode[] =
{
"MinNotFixed",
"MinFixed"
};
const char *AcpiGbl_MtpDecode[] =
{
"AddressRangeMemory",
"AddressRangeReserved",
"AddressRangeACPI",
"AddressRangeNVS"
};
const char *AcpiGbl_RngDecode[] =
{
"InvalidRanges",
"NonISAOnlyRanges",
"ISAOnlyRanges",
"EntireRange"
};
const char *AcpiGbl_RwDecode[] =
{
"ReadOnly",
"ReadWrite"
};
const char *AcpiGbl_ShrDecode[] =
{
"Exclusive",
"Shared",
"ExclusiveAndWake", /* ACPI 5.0 */
"SharedAndWake" /* ACPI 5.0 */
};
const char *AcpiGbl_SizDecode[] =
{
"Transfer8",
"Transfer8_16",
"Transfer16",
"InvalidSize"
};
const char *AcpiGbl_TrsDecode[] =
{
"DenseTranslation",
"SparseTranslation"
};
const char *AcpiGbl_TtpDecode[] =
{
"TypeStatic",
"TypeTranslation"
};
const char *AcpiGbl_TypDecode[] =
{
"Compatibility",
"TypeA",
"TypeB",
"TypeF"
};
const char *AcpiGbl_PpcDecode[] =
{
"PullDefault",
"PullUp",
"PullDown",
"PullNone"
};
const char *AcpiGbl_IorDecode[] =
{
"IoRestrictionNone",
"IoRestrictionInputOnly",
"IoRestrictionOutputOnly",
"IoRestrictionNoneAndPreserve"
};
const char *AcpiGbl_DtsDecode[] =
{
"Width8bit",
"Width16bit",
"Width32bit",
"Width64bit",
"Width128bit",
"Width256bit",
};
/* GPIO connection type */
const char *AcpiGbl_CtDecode[] =
{
"Interrupt",
"I/O"
};
/* Serial bus type */
const char *AcpiGbl_SbtDecode[] =
{
"/* UNKNOWN serial bus type */",
"I2C",
"SPI",
"UART"
};
/* I2C serial bus access mode */
const char *AcpiGbl_AmDecode[] =
{
"AddressingMode7Bit",
"AddressingMode10Bit"
};
/* I2C serial bus slave mode */
const char *AcpiGbl_SmDecode[] =
{
"ControllerInitiated",
"DeviceInitiated"
};
/* SPI serial bus wire mode */
const char *AcpiGbl_WmDecode[] =
{
"FourWireMode",
"ThreeWireMode"
};
/* SPI serial clock phase */
const char *AcpiGbl_CphDecode[] =
{
"ClockPhaseFirst",
"ClockPhaseSecond"
};
/* SPI serial bus clock polarity */
const char *AcpiGbl_CpoDecode[] =
{
"ClockPolarityLow",
"ClockPolarityHigh"
};
/* SPI serial bus device polarity */
const char *AcpiGbl_DpDecode[] =
{
"PolarityLow",
"PolarityHigh"
};
/* UART serial bus endian */
const char *AcpiGbl_EdDecode[] =
{
"LittleEndian",
"BigEndian"
};
/* UART serial bus bits per byte */
const char *AcpiGbl_BpbDecode[] =
{
"DataBitsFive",
"DataBitsSix",
"DataBitsSeven",
"DataBitsEight",
"DataBitsNine",
"/* UNKNOWN Bits per byte */",
"/* UNKNOWN Bits per byte */",
"/* UNKNOWN Bits per byte */"
};
/* UART serial bus stop bits */
const char *AcpiGbl_SbDecode[] =
{
"StopBitsZero",
"StopBitsOne",
"StopBitsOnePlusHalf",
"StopBitsTwo"
};
/* UART serial bus flow control */
const char *AcpiGbl_FcDecode[] =
{
"FlowControlNone",
"FlowControlHardware",
"FlowControlXON",
"/* UNKNOWN flow control keyword */"
};
/* UART serial bus parity type */
const char *AcpiGbl_PtDecode[] =
{
"ParityTypeNone",
"ParityTypeEven",
"ParityTypeOdd",
"ParityTypeMark",
"ParityTypeSpace",
"/* UNKNOWN parity keyword */",
"/* UNKNOWN parity keyword */",
"/* UNKNOWN parity keyword */"
};
/* PinConfig type */
const char *AcpiGbl_PtypDecode[] =
{
"Default",
"Bias Pull-up",
"Bias Pull-down",
"Bias Default",
"Bias Disable",
"Bias High Impedance",
"Bias Bus Hold",
"Drive Open Drain",
"Drive Open Source",
"Drive Push Pull",
"Drive Strength",
"Slew Rate",
"Input Debounce",
"Input Schmitt Trigger",
};
#endif

View file

@ -50,287 +50,6 @@
ACPI_MODULE_NAME ("utresrc")
#if defined(ACPI_DEBUG_OUTPUT) || defined (ACPI_DISASSEMBLER) || defined (ACPI_DEBUGGER)
/*
* Strings used to decode resource descriptors.
* Used by both the disassembler and the debugger resource dump routines
*/
const char *AcpiGbl_BmDecode[] =
{
"NotBusMaster",
"BusMaster"
};
const char *AcpiGbl_ConfigDecode[] =
{
"0 - Good Configuration",
"1 - Acceptable Configuration",
"2 - Suboptimal Configuration",
"3 - ***Invalid Configuration***",
};
const char *AcpiGbl_ConsumeDecode[] =
{
"ResourceProducer",
"ResourceConsumer"
};
const char *AcpiGbl_DecDecode[] =
{
"PosDecode",
"SubDecode"
};
const char *AcpiGbl_HeDecode[] =
{
"Level",
"Edge"
};
const char *AcpiGbl_IoDecode[] =
{
"Decode10",
"Decode16"
};
const char *AcpiGbl_LlDecode[] =
{
"ActiveHigh",
"ActiveLow",
"ActiveBoth",
"Reserved"
};
const char *AcpiGbl_MaxDecode[] =
{
"MaxNotFixed",
"MaxFixed"
};
const char *AcpiGbl_MemDecode[] =
{
"NonCacheable",
"Cacheable",
"WriteCombining",
"Prefetchable"
};
const char *AcpiGbl_MinDecode[] =
{
"MinNotFixed",
"MinFixed"
};
const char *AcpiGbl_MtpDecode[] =
{
"AddressRangeMemory",
"AddressRangeReserved",
"AddressRangeACPI",
"AddressRangeNVS"
};
const char *AcpiGbl_RngDecode[] =
{
"InvalidRanges",
"NonISAOnlyRanges",
"ISAOnlyRanges",
"EntireRange"
};
const char *AcpiGbl_RwDecode[] =
{
"ReadOnly",
"ReadWrite"
};
const char *AcpiGbl_ShrDecode[] =
{
"Exclusive",
"Shared",
"ExclusiveAndWake", /* ACPI 5.0 */
"SharedAndWake" /* ACPI 5.0 */
};
const char *AcpiGbl_SizDecode[] =
{
"Transfer8",
"Transfer8_16",
"Transfer16",
"InvalidSize"
};
const char *AcpiGbl_TrsDecode[] =
{
"DenseTranslation",
"SparseTranslation"
};
const char *AcpiGbl_TtpDecode[] =
{
"TypeStatic",
"TypeTranslation"
};
const char *AcpiGbl_TypDecode[] =
{
"Compatibility",
"TypeA",
"TypeB",
"TypeF"
};
const char *AcpiGbl_PpcDecode[] =
{
"PullDefault",
"PullUp",
"PullDown",
"PullNone"
};
const char *AcpiGbl_IorDecode[] =
{
"IoRestrictionNone",
"IoRestrictionInputOnly",
"IoRestrictionOutputOnly",
"IoRestrictionNoneAndPreserve"
};
const char *AcpiGbl_DtsDecode[] =
{
"Width8bit",
"Width16bit",
"Width32bit",
"Width64bit",
"Width128bit",
"Width256bit",
};
/* GPIO connection type */
const char *AcpiGbl_CtDecode[] =
{
"Interrupt",
"I/O"
};
/* Serial bus type */
const char *AcpiGbl_SbtDecode[] =
{
"/* UNKNOWN serial bus type */",
"I2C",
"SPI",
"UART"
};
/* I2C serial bus access mode */
const char *AcpiGbl_AmDecode[] =
{
"AddressingMode7Bit",
"AddressingMode10Bit"
};
/* I2C serial bus slave mode */
const char *AcpiGbl_SmDecode[] =
{
"ControllerInitiated",
"DeviceInitiated"
};
/* SPI serial bus wire mode */
const char *AcpiGbl_WmDecode[] =
{
"FourWireMode",
"ThreeWireMode"
};
/* SPI serial clock phase */
const char *AcpiGbl_CphDecode[] =
{
"ClockPhaseFirst",
"ClockPhaseSecond"
};
/* SPI serial bus clock polarity */
const char *AcpiGbl_CpoDecode[] =
{
"ClockPolarityLow",
"ClockPolarityHigh"
};
/* SPI serial bus device polarity */
const char *AcpiGbl_DpDecode[] =
{
"PolarityLow",
"PolarityHigh"
};
/* UART serial bus endian */
const char *AcpiGbl_EdDecode[] =
{
"LittleEndian",
"BigEndian"
};
/* UART serial bus bits per byte */
const char *AcpiGbl_BpbDecode[] =
{
"DataBitsFive",
"DataBitsSix",
"DataBitsSeven",
"DataBitsEight",
"DataBitsNine",
"/* UNKNOWN Bits per byte */",
"/* UNKNOWN Bits per byte */",
"/* UNKNOWN Bits per byte */"
};
/* UART serial bus stop bits */
const char *AcpiGbl_SbDecode[] =
{
"StopBitsZero",
"StopBitsOne",
"StopBitsOnePlusHalf",
"StopBitsTwo"
};
/* UART serial bus flow control */
const char *AcpiGbl_FcDecode[] =
{
"FlowControlNone",
"FlowControlHardware",
"FlowControlXON",
"/* UNKNOWN flow control keyword */"
};
/* UART serial bus parity type */
const char *AcpiGbl_PtDecode[] =
{
"ParityTypeNone",
"ParityTypeEven",
"ParityTypeOdd",
"ParityTypeMark",
"ParityTypeSpace",
"/* UNKNOWN parity keyword */",
"/* UNKNOWN parity keyword */",
"/* UNKNOWN parity keyword */"
};
#endif
/*
* Base sizes of the raw AML resource descriptors, indexed by resource type.
* Zero indicates a reserved (and therefore invalid) resource type.
@ -371,8 +90,12 @@ const UINT8 AcpiGbl_ResourceAmlSizes[] =
ACPI_AML_SIZE_LARGE (AML_RESOURCE_ADDRESS64),
ACPI_AML_SIZE_LARGE (AML_RESOURCE_EXTENDED_ADDRESS64),
ACPI_AML_SIZE_LARGE (AML_RESOURCE_GPIO),
0,
ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_FUNCTION),
ACPI_AML_SIZE_LARGE (AML_RESOURCE_COMMON_SERIALBUS),
ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_CONFIG),
ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_GROUP),
ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_GROUP_FUNCTION),
ACPI_AML_SIZE_LARGE (AML_RESOURCE_PIN_GROUP_CONFIG),
};
const UINT8 AcpiGbl_ResourceAmlSerialBusSizes[] =
@ -426,8 +149,12 @@ static const UINT8 AcpiGbl_ResourceTypes[] =
ACPI_VARIABLE_LENGTH, /* 0A Qword* address */
ACPI_FIXED_LENGTH, /* 0B Extended* address */
ACPI_VARIABLE_LENGTH, /* 0C Gpio* */
0,
ACPI_VARIABLE_LENGTH /* 0E *SerialBus */
ACPI_VARIABLE_LENGTH, /* 0D PinFunction */
ACPI_VARIABLE_LENGTH, /* 0E *SerialBus */
ACPI_VARIABLE_LENGTH, /* 0F PinConfig */
ACPI_VARIABLE_LENGTH, /* 10 PinGroup */
ACPI_VARIABLE_LENGTH, /* 11 PinGroupFunction */
ACPI_VARIABLE_LENGTH, /* 12 PinGroupConfig */
};
@ -472,7 +199,7 @@ AcpiUtWalkAmlResources (
* The absolute minimum resource template is one EndTag descriptor.
* However, we will treat a lone EndTag as just a simple buffer.
*/
if (AmlLength < sizeof (AML_RESOURCE_END_TAG))
if (AmlLength <= sizeof (AML_RESOURCE_END_TAG))
{
return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG);
}
@ -505,8 +232,8 @@ AcpiUtWalkAmlResources (
if (UserFunction)
{
Status = UserFunction (Aml, Length, Offset,
ResourceIndex, Context);
Status = UserFunction (
Aml, Length, Offset, ResourceIndex, Context);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@ -543,15 +270,10 @@ AcpiUtWalkAmlResources (
*Context = Aml;
}
/* Check if buffer is defined to be longer than the resource length */
if (AmlLength > (Offset + Length))
{
return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG);
}
/* Normal exit */
/*
* Normal exit. Note: We allow the buffer to be larger than
* the resource template, as long as the END_TAG exists.
*/
return_ACPI_STATUS (AE_OK);
}

View file

@ -169,6 +169,8 @@ AcpiAcquireMutex (
return (Status);
}
ACPI_EXPORT_SYMBOL (AcpiAcquireMutex)
/*******************************************************************************
*
@ -209,3 +211,5 @@ AcpiReleaseMutex (
AcpiOsReleaseMutex (MutexObj->Mutex.OsMutex);
return (AE_OK);
}
ACPI_EXPORT_SYMBOL (AcpiReleaseMutex)