summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/dev/acpica/compiler')
-rw-r--r--sys/contrib/dev/acpica/compiler/aslanalyze.c323
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcodegen.c113
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompile.c331
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompiler.h597
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompiler.l23
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompiler.y134
-rw-r--r--sys/contrib/dev/acpica/compiler/asldefine.h211
-rw-r--r--sys/contrib/dev/acpica/compiler/aslerror.c53
-rw-r--r--sys/contrib/dev/acpica/compiler/aslfiles.c218
-rw-r--r--sys/contrib/dev/acpica/compiler/aslfold.c87
-rw-r--r--sys/contrib/dev/acpica/compiler/aslglobal.h17
-rw-r--r--sys/contrib/dev/acpica/compiler/asllength.c127
-rw-r--r--sys/contrib/dev/acpica/compiler/asllisting.c245
-rw-r--r--sys/contrib/dev/acpica/compiler/aslload.c167
-rw-r--r--sys/contrib/dev/acpica/compiler/asllookup.c329
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmain.c103
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmap.c111
-rw-r--r--sys/contrib/dev/acpica/compiler/aslopcodes.c184
-rw-r--r--sys/contrib/dev/acpica/compiler/asloperands.c227
-rw-r--r--sys/contrib/dev/acpica/compiler/aslopt.c124
-rw-r--r--sys/contrib/dev/acpica/compiler/aslresource.c198
-rw-r--r--sys/contrib/dev/acpica/compiler/aslrestype1.c406
-rw-r--r--sys/contrib/dev/acpica/compiler/aslrestype2.c1944
-rw-r--r--sys/contrib/dev/acpica/compiler/aslstubs.c10
-rw-r--r--sys/contrib/dev/acpica/compiler/asltransform.c285
-rw-r--r--sys/contrib/dev/acpica/compiler/asltree.c60
-rw-r--r--sys/contrib/dev/acpica/compiler/asltypes.h356
-rw-r--r--sys/contrib/dev/acpica/compiler/aslutils.c127
28 files changed, 4942 insertions, 2168 deletions
diff --git a/sys/contrib/dev/acpica/compiler/aslanalyze.c b/sys/contrib/dev/acpica/compiler/aslanalyze.c
index 93bcca1..42f2247 100644
--- a/sys/contrib/dev/acpica/compiler/aslanalyze.c
+++ b/sys/contrib/dev/acpica/compiler/aslanalyze.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: aslanalyze.c - check for semantic errors
- * $Revision: 84 $
+ * $Revision: 1.96 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,16 +116,61 @@
*****************************************************************************/
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
-#include "acparser.h"
-#include "amlcode.h"
+#include <contrib/dev/acpica/acparser.h>
+#include <contrib/dev/acpica/amlcode.h>
#include <ctype.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslanalyze")
+/* Local prototypes */
+
+static UINT32
+AnMapArgTypeToBtype (
+ UINT32 ArgType);
+
+static UINT32
+AnMapEtypeToBtype (
+ UINT32 Etype);
+
+static void
+AnFormatBtype (
+ char *Buffer,
+ UINT32 Btype);
+
+static UINT32
+AnGetBtype (
+ ACPI_PARSE_OBJECT *Op);
+
+static UINT32
+AnCheckForReservedName (
+ ACPI_PARSE_OBJECT *Op,
+ char *Name);
+
+static void
+AnCheckForReservedMethod (
+ ACPI_PARSE_OBJECT *Op,
+ ASL_METHOD_INFO *MethodInfo);
+
+static UINT32
+AnMapObjTypeToBtype (
+ ACPI_PARSE_OBJECT *Op);
+
+static BOOLEAN
+AnLastStatementIsReturn (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+AnCheckMethodReturnValue (
+ ACPI_PARSE_OBJECT *Op,
+ const ACPI_OPCODE_INFO *OpInfo,
+ ACPI_PARSE_OBJECT *ArgOp,
+ UINT32 RequiredBtypes,
+ UINT32 ThisNodeBtype);
+
/*******************************************************************************
*
@@ -142,7 +187,7 @@
*
******************************************************************************/
-UINT32
+static UINT32
AnMapArgTypeToBtype (
UINT32 ArgType)
{
@@ -202,9 +247,12 @@ AnMapArgTypeToBtype (
case ARGI_DATAOBJECT:
- /* Buffer, string, package or reference to a Op - Used only by SizeOf operator*/
-
- return (ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER | ACPI_BTYPE_PACKAGE | ACPI_BTYPE_REFERENCE);
+ /*
+ * Buffer, string, package or reference to a Op -
+ * Used only by SizeOf operator
+ */
+ return (ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER |
+ ACPI_BTYPE_PACKAGE | ACPI_BTYPE_REFERENCE);
case ARGI_COMPLEXOBJ:
@@ -218,6 +266,10 @@ AnMapArgTypeToBtype (
case ARGI_REGION_OR_FIELD:
return (ACPI_BTYPE_REGION | ACPI_BTYPE_FIELD_UNIT);
+ case ARGI_DATAREFOBJ:
+ return (ACPI_BTYPE_INTEGER |ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER |
+ ACPI_BTYPE_PACKAGE | ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE);
+
default:
break;
}
@@ -240,9 +292,9 @@ AnMapArgTypeToBtype (
*
******************************************************************************/
-UINT32
+static UINT32
AnMapEtypeToBtype (
- UINT32 Etype)
+ UINT32 Etype)
{
@@ -323,41 +375,6 @@ AnMapEtypeToBtype (
/*******************************************************************************
*
- * FUNCTION: AnMapBtypeToEtype
- *
- * PARAMETERS: Btype - Bitfield of ACPI types
- *
- * RETURN: The Etype corresponding the the Btype
- *
- * DESCRIPTION: Convert a bitfield type to an encoded type
- *
- ******************************************************************************/
-
-UINT32
-AnMapBtypeToEtype (
- UINT32 Btype)
-{
- UINT32 i;
- UINT32 Etype;
-
-
- if (Btype == 0)
- {
- return 0;
- }
-
- Etype = 1;
- for (i = 1; i < Btype; i *= 2)
- {
- Etype++;
- }
-
- return (Etype);
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: AnFormatBtype
*
* PARAMETERS: Btype - Bitfield of ACPI types
@@ -369,13 +386,13 @@ AnMapBtypeToEtype (
*
******************************************************************************/
-void
+static void
AnFormatBtype (
- char *Buffer,
- UINT32 Btype)
+ char *Buffer,
+ UINT32 Btype)
{
- UINT32 Type;
- BOOLEAN First = TRUE;
+ UINT32 Type;
+ BOOLEAN First = TRUE;
*Buffer = 0;
@@ -386,7 +403,7 @@ AnFormatBtype (
return;
}
- for (Type = 1; Type < ACPI_TYPE_EXTERNAL_MAX; Type++)
+ for (Type = 1; Type <= ACPI_TYPE_EXTERNAL_MAX; Type++)
{
if (Btype & 0x00000001)
{
@@ -437,7 +454,7 @@ AnFormatBtype (
*
******************************************************************************/
-UINT32
+static UINT32
AnGetBtype (
ACPI_PARSE_OBJECT *Op)
{
@@ -461,6 +478,10 @@ AnGetBtype (
}
ThisNodeBtype = AnMapEtypeToBtype (Node->Type);
+ if (!ThisNodeBtype)
+ {
+ AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Op, NULL);
+ }
/*
* Since it was a named reference, enable the
@@ -470,7 +491,7 @@ AnGetBtype (
if (Op->Asl.ParseOpcode == PARSEOP_METHODCALL)
{
- ReferencedNode = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Node->Object);
+ ReferencedNode = Node->Op;
if (!ReferencedNode)
{
printf ("No back ptr to Op: type %X\n", Node->Type);
@@ -509,13 +530,7 @@ AnGetBtype (
*
******************************************************************************/
-#define ACPI_VALID_RESERVED_NAME_MAX 0x80000000
-#define ACPI_NOT_RESERVED_NAME ACPI_UINT32_MAX
-#define ACPI_PREDEFINED_NAME (ACPI_UINT32_MAX - 1)
-#define ACPI_EVENT_RESERVED_NAME (ACPI_UINT32_MAX - 2)
-#define ACPI_COMPILER_RESERVED_NAME (ACPI_UINT32_MAX - 3)
-
-UINT32
+static UINT32
AnCheckForReservedName (
ACPI_PARSE_OBJECT *Op,
char *Name)
@@ -525,7 +540,8 @@ AnCheckForReservedName (
if (Name[0] == 0)
{
- AcpiOsPrintf ("Found a null name, external = %s\n", Op->Asl.ExternalName);
+ AcpiOsPrintf ("Found a null name, external = %s\n",
+ Op->Asl.ExternalName);
}
/* All reserved names are prefixed with a single underscore */
@@ -543,12 +559,14 @@ AnCheckForReservedName (
{
if (ReservedMethods[i].Flags & ASL_RSVD_SCOPE)
{
- AslError (ASL_ERROR, ASL_MSG_RESERVED_WORD, Op, Op->Asl.ExternalName);
+ AslError (ASL_ERROR, ASL_MSG_RESERVED_WORD, Op,
+ Op->Asl.ExternalName);
return (ACPI_PREDEFINED_NAME);
}
else if (ReservedMethods[i].Flags & ASL_RSVD_RESOURCE_NAME)
{
- AslError (ASL_ERROR, ASL_MSG_RESERVED_WORD, Op, Op->Asl.ExternalName);
+ AslError (ASL_ERROR, ASL_MSG_RESERVED_WORD, Op,
+ Op->Asl.ExternalName);
return (ACPI_PREDEFINED_NAME);
}
@@ -599,7 +617,8 @@ AnCheckForReservedName (
* warning, since the entire namespace starting with an underscore is
* reserved by the ACPI spec.
*/
- AslError (ASL_WARNING, ASL_MSG_UNKNOWN_RESERVED_NAME, Op, Op->Asl.ExternalName);
+ AslError (ASL_WARNING, ASL_MSG_UNKNOWN_RESERVED_NAME, Op,
+ Op->Asl.ExternalName);
return (ACPI_NOT_RESERVED_NAME);
}
@@ -619,7 +638,7 @@ AnCheckForReservedName (
*
******************************************************************************/
-void
+static void
AnCheckForReservedMethod (
ACPI_PARSE_OBJECT *Op,
ASL_METHOD_INFO *MethodInfo)
@@ -671,11 +690,13 @@ AnCheckForReservedMethod (
if (MethodInfo->NumArguments > ReservedMethods[Index].NumArguments)
{
- AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_HI, Op, MsgBuffer);
+ AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_HI, Op,
+ MsgBuffer);
}
else
{
- AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_LO, Op, MsgBuffer);
+ AslError (ASL_WARNING, ASL_MSG_RESERVED_ARG_COUNT_LO, Op,
+ MsgBuffer);
}
}
@@ -691,7 +712,19 @@ AnCheckForReservedMethod (
}
-UINT32
+/*******************************************************************************
+ *
+ * FUNCTION: AnMapObjTypeToBtype
+ *
+ * PARAMETERS: Op - A parse node
+ *
+ * RETURN: A Btype
+ *
+ * DESCRIPTION: Map object to the associated "Btype"
+ *
+ ******************************************************************************/
+
+static UINT32
AnMapObjTypeToBtype (
ACPI_PARSE_OBJECT *Op)
{
@@ -780,7 +813,7 @@ AnMethodAnalysisWalkBegin (
ACPI_PARSE_OBJECT *ArgNode;
ACPI_PARSE_OBJECT *NextType;
ACPI_PARSE_OBJECT *NextParamType;
- char ActualArgs = 0;
+ UINT8 ActualArgs = 0;
ACPI_FUNCTION_NAME ("AnMethodAnalysisWalkBegin");
@@ -792,9 +825,8 @@ AnMethodAnalysisWalkBegin (
TotalMethods++;
- /*
- * Create and init method info
- */
+ /* Create and init method info */
+
MethodInfo = UtLocalCalloc (sizeof (ASL_METHOD_INFO));
MethodInfo->Next = WalkInfo->MethodStack;
MethodInfo->Op = Op;
@@ -808,7 +840,8 @@ AnMethodAnalysisWalkBegin (
/* Get the NumArguments node */
Next = Next->Asl.Next;
- MethodInfo->NumArguments = (UINT8) (((UINT8) Next->Asl.Value.Integer) & 0x07);
+ MethodInfo->NumArguments = (UINT8)
+ (((UINT8) Next->Asl.Value.Integer) & 0x07);
/* Get the SerializeRule and SyncLevel nodes, ignored here */
@@ -849,7 +882,8 @@ AnMethodAnalysisWalkBegin (
}
else
{
- MethodInfo->ValidArgTypes[ActualArgs] = AnMapObjTypeToBtype (NextType);
+ MethodInfo->ValidArgTypes[ActualArgs] =
+ AnMapObjTypeToBtype (NextType);
NextType->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
}
@@ -904,8 +938,10 @@ AnMethodAnalysisWalkBegin (
if (!MethodInfo)
{
- /* Probably was an error in the method declaration, no additional error here */
-
+ /*
+ * Probably was an error in the method declaration,
+ * no additional error here
+ */
ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "%p, No parent method\n", Op));
return (AE_ERROR);
}
@@ -946,8 +982,10 @@ AnMethodAnalysisWalkBegin (
if (!MethodInfo)
{
- /* Probably was an error in the method declaration, no additional error here */
-
+ /*
+ * Probably was an error in the method declaration,
+ * no additional error here
+ */
ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "%p, No parent method\n", Op));
return (AE_ERROR);
}
@@ -989,8 +1027,10 @@ AnMethodAnalysisWalkBegin (
if (!MethodInfo)
{
- /* Probably was an error in the method declaration, no additional error here */
-
+ /*
+ * Probably was an error in the method declaration,
+ * no additional error here
+ */
ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "%p, No parent method\n", Op));
return (AE_ERROR);
}
@@ -1031,7 +1071,10 @@ AnMethodAnalysisWalkBegin (
case PARSEOP_STALL:
- if (Op->Asl.Child->Asl.Value.Integer > ACPI_UINT8_MAX)
+ /* We can range check if the argument is an integer */
+
+ if ((Op->Asl.Child->Asl.ParseOpcode == PARSEOP_INTEGER) &&
+ (Op->Asl.Child->Asl.Value.Integer > ACPI_UINT8_MAX))
{
AslError (ASL_ERROR, ASL_MSG_INVALID_TIME, Op, NULL);
}
@@ -1069,12 +1112,12 @@ AnMethodAnalysisWalkBegin (
* This reserved name must be a control method because
* it must have arguments
*/
- AslError (ASL_ERROR, ASL_MSG_RESERVED_METHOD, Op, "with arguments");
+ AslError (ASL_ERROR, ASL_MSG_RESERVED_METHOD, Op,
+ "with arguments");
}
- /*
- * Typechecking for _HID
- */
+ /* Typechecking for _HID */
+
else if (!ACPI_STRCMP (METHOD_NAME__HID, ReservedMethods[i].Name))
{
/* Examine the second operand to typecheck it */
@@ -1086,7 +1129,8 @@ AnMethodAnalysisWalkBegin (
{
/* _HID must be a string or an integer */
- AslError (ASL_ERROR, ASL_MSG_RESERVED_OPERAND_TYPE, Next, "String or Integer");
+ AslError (ASL_ERROR, ASL_MSG_RESERVED_OPERAND_TYPE, Next,
+ "String or Integer");
}
if (Next->Asl.ParseOpcode == PARSEOP_STRING_LITERAL)
@@ -1100,7 +1144,8 @@ AnMethodAnalysisWalkBegin (
{
if (!isalnum (Next->Asl.Value.String[i]))
{
- AslError (ASL_ERROR, ASL_MSG_ALPHANUMERIC_STRING, Next, Next->Asl.Value.String);
+ AslError (ASL_ERROR, ASL_MSG_ALPHANUMERIC_STRING,
+ Next, Next->Asl.Value.String);
break;
}
}
@@ -1133,7 +1178,7 @@ AnMethodAnalysisWalkBegin (
*
******************************************************************************/
-BOOLEAN
+static BOOLEAN
AnLastStatementIsReturn (
ACPI_PARSE_OBJECT *Op)
{
@@ -1189,7 +1234,8 @@ AnMethodAnalysisWalkEnd (
if (!MethodInfo)
{
printf ("No method info for method! [%s]\n", Op->Asl.Namepath);
- AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Op, "No method info for this method");
+ AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Op,
+ "No method info for this method");
CmCleanupAndExit ();
return (AE_AML_INTERNAL);
}
@@ -1228,7 +1274,8 @@ AnMethodAnalysisWalkEnd (
if (MethodInfo->NumReturnNoValue &&
MethodInfo->NumReturnWithValue)
{
- AslError (ASL_WARNING, ASL_MSG_RETURN_TYPES, Op, Op->Asl.ExternalName);
+ AslError (ASL_WARNING, ASL_MSG_RETURN_TYPES, Op,
+ Op->Asl.ExternalName);
}
/*
@@ -1266,12 +1313,15 @@ AnMethodAnalysisWalkEnd (
* method is terminated here with the Return() statement.
*/
Op->Asl.Parent->Asl.CompileFlags |= NODE_HAS_NO_EXIT;
- Op->Asl.ParentMethod = MethodInfo->Op; /* Used in the "typing" pass later */
+
+ /* Used in the "typing" pass later */
+
+ Op->Asl.ParentMethod = MethodInfo->Op;
/*
* If there is a peer node after the return statement, then this
- * node is unreachable code -- i.e., it won't be executed because of the
- * preceeding Return() statement.
+ * node is unreachable code -- i.e., it won't be executed because of
+ * thepreceeding Return() statement.
*/
if (Op->Asl.Next)
{
@@ -1392,12 +1442,12 @@ AnMethodTypingWalkEnd (
(ThisNodeBtype == (ACPI_UINT32_MAX -1)))
{
/*
- * The method is untyped at this time (typically a forward reference).
- * We must recursively type the method here
+ * The method is untyped at this time (typically a forward
+ * reference). We must recursively type the method here
*/
- TrWalkParseTree (ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Op->Asl.Child->Asl.Node->Object),
- ASL_WALK_VISIT_TWICE, AnMethodTypingWalkBegin,
- AnMethodTypingWalkEnd, NULL);
+ TrWalkParseTree (Op->Asl.Child->Asl.Node->Op,
+ ASL_WALK_VISIT_TWICE, AnMethodTypingWalkBegin,
+ AnMethodTypingWalkEnd, NULL);
ThisNodeBtype = AnGetBtype (Op->Asl.Child);
}
@@ -1436,7 +1486,7 @@ AnMethodTypingWalkEnd (
*
******************************************************************************/
-void
+static void
AnCheckMethodReturnValue (
ACPI_PARSE_OBJECT *Op,
const ACPI_OPCODE_INFO *OpInfo,
@@ -1453,26 +1503,23 @@ AnCheckMethodReturnValue (
/* Examine the parent op of this method */
- OwningOp = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Node->Object);
+ OwningOp = Node->Op;
if (OwningOp->Asl.CompileFlags & NODE_METHOD_NO_RETVAL)
{
- /*
- * Method NEVER returns a value
- */
+ /* Method NEVER returns a value */
+
AslError (ASL_ERROR, ASL_MSG_NO_RETVAL, Op, Op->Asl.ExternalName);
}
else if (OwningOp->Asl.CompileFlags & NODE_METHOD_SOME_NO_RETVAL)
{
- /*
- * Method SOMETIMES returns a value, SOMETIMES not
- */
+ /* Method SOMETIMES returns a value, SOMETIMES not */
+
AslError (ASL_WARNING, ASL_MSG_SOME_NO_RETVAL, Op, Op->Asl.ExternalName);
}
else if (!(ThisNodeBtype & RequiredBtypes))
{
- /*
- * Method returns a value, but the type is wrong
- */
+ /* Method returns a value, but the type is wrong */
+
AnFormatBtype (StringBuffer, ThisNodeBtype);
AnFormatBtype (StringBuffer2, RequiredBtypes);
@@ -1485,8 +1532,9 @@ AnCheckMethodReturnValue (
*/
if (ThisNodeBtype != 0)
{
- sprintf (MsgBuffer, "Method returns [%s], %s operator requires [%s]",
- StringBuffer, OpInfo->Name, StringBuffer2);
+ sprintf (MsgBuffer,
+ "Method returns [%s], %s operator requires [%s]",
+ StringBuffer, OpInfo->Name, StringBuffer2);
AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ArgOp, MsgBuffer);
}
@@ -1502,7 +1550,7 @@ AnCheckMethodReturnValue (
*
* RETURN: Status
*
- * DESCRIPTION: Descending callback for the analysis walk. Check methods for :
+ * DESCRIPTION: Descending callback for the analysis walk. Check methods for:
* 1) Initialized local variables
* 2) Valid arguments
* 3) Return types
@@ -1593,6 +1641,11 @@ AnOperandTypecheckWalkEnd (
if (ArgOp->Asl.ParseOpcode == PARSEOP_METHODCALL)
{
+ if (!ACPI_STRCMP (ArgOp->Asl.ExternalName, "\\_OSI"))
+ {
+ return (AE_OK);
+ }
+
/* The lone arg is a method call, check it */
RequiredBtypes = AnMapArgTypeToBtype (ARGI_INTEGER);
@@ -1606,7 +1659,8 @@ AnOperandTypecheckWalkEnd (
{
return (AE_OK);
}
- AnCheckMethodReturnValue (Op, OpInfo, ArgOp, RequiredBtypes, ThisNodeBtype);
+ AnCheckMethodReturnValue (Op, OpInfo, ArgOp,
+ RequiredBtypes, ThisNodeBtype);
}
return (AE_OK);
@@ -1760,7 +1814,8 @@ AnOperandTypecheckWalkEnd (
{
/* Check a method call for a valid return value */
- AnCheckMethodReturnValue (Op, OpInfo, ArgOp, RequiredBtypes, ThisNodeBtype);
+ AnCheckMethodReturnValue (Op, OpInfo, ArgOp,
+ RequiredBtypes, ThisNodeBtype);
}
/*
@@ -1843,3 +1898,41 @@ AnOtherSemanticAnalysisWalkEnd (
return AE_OK;
}
+
+
+#ifdef ACPI_OBSOLETE_FUNCTIONS
+/*******************************************************************************
+ *
+ * FUNCTION: AnMapBtypeToEtype
+ *
+ * PARAMETERS: Btype - Bitfield of ACPI types
+ *
+ * RETURN: The Etype corresponding the the Btype
+ *
+ * DESCRIPTION: Convert a bitfield type to an encoded type
+ *
+ ******************************************************************************/
+
+UINT32
+AnMapBtypeToEtype (
+ UINT32 Btype)
+{
+ UINT32 i;
+ UINT32 Etype;
+
+
+ if (Btype == 0)
+ {
+ return 0;
+ }
+
+ Etype = 1;
+ for (i = 1; i < Btype; i *= 2)
+ {
+ Etype++;
+ }
+
+ return (Etype);
+}
+#endif
+
diff --git a/sys/contrib/dev/acpica/compiler/aslcodegen.c b/sys/contrib/dev/acpica/compiler/aslcodegen.c
index 6087bfb..234b17a 100644
--- a/sys/contrib/dev/acpica/compiler/aslcodegen.c
+++ b/sys/contrib/dev/acpica/compiler/aslcodegen.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: aslcodegen - AML code generation
- * $Revision: 51 $
+ * $Revision: 1.57 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,13 +116,43 @@
*****************************************************************************/
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
-#include "amlcode.h"
+#include <contrib/dev/acpica/amlcode.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslcodegen")
+/* Local prototypes */
+
+static ACPI_STATUS
+CgAmlWriteWalk (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
+
+static void
+CgLocalWriteAmlData (
+ ACPI_PARSE_OBJECT *Op,
+ void *Buffer,
+ UINT32 Length);
+
+static void
+CgWriteAmlOpcode (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+CgWriteTableHeader (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+CgCloseTable (
+ void);
+
+static void
+CgWriteNode (
+ ACPI_PARSE_OBJECT *Op);
+
/*******************************************************************************
*
@@ -138,7 +168,8 @@
******************************************************************************/
void
-CgGenerateAmlOutput (void)
+CgGenerateAmlOutput (
+ void)
{
DbgPrint (ASL_DEBUG_OUTPUT, "\nWriting AML\n\n");
@@ -149,7 +180,8 @@ CgGenerateAmlOutput (void)
Gbl_SourceLine = 0;
Gbl_NextError = Gbl_ErrorLog;
- TrWalkParseTree (RootNode, ASL_WALK_VISIT_DOWNWARD, CgAmlWriteWalk, NULL, NULL);
+ TrWalkParseTree (RootNode, ASL_WALK_VISIT_DOWNWARD,
+ CgAmlWriteWalk, NULL, NULL);
CgCloseTable ();
}
@@ -166,16 +198,15 @@ CgGenerateAmlOutput (void)
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
CgAmlWriteWalk (
ACPI_PARSE_OBJECT *Op,
UINT32 Level,
void *Context)
{
- /*
- * Debug output
- */
+ /* Debug output */
+
DbgPrint (ASL_TREE_OUTPUT,
"%5.5d [%2d]", Op->Asl.LogicalLineNumber, Level);
UtPrintFormattedName (Op->Asl.ParseOpcode, Level);
@@ -210,9 +241,8 @@ CgAmlWriteWalk (
Op->Asl.Column,
Op->Asl.LineNumber);
- /*
- * Generate the AML for this node
- */
+ /* Generate the AML for this node */
+
CgWriteNode (Op);
return (AE_OK);
}
@@ -222,7 +252,8 @@ CgAmlWriteWalk (
*
* FUNCTION: CgLocalWriteAmlData
*
- * PARAMETERS: Buffer - Buffer to write
+ * PARAMETERS: Op - Current parse op
+ * Buffer - Buffer to write
* Length - Size of data in buffer
*
* RETURN: None
@@ -231,14 +262,13 @@ CgAmlWriteWalk (
*
******************************************************************************/
-void
+static void
CgLocalWriteAmlData (
ACPI_PARSE_OBJECT *Op,
void *Buffer,
UINT32 Length)
{
-
/* Write the raw data to the AML file */
FlWriteFile (ASL_FILE_AML_OUTPUT, Buffer, Length);
@@ -264,22 +294,21 @@ CgLocalWriteAmlData (
*
******************************************************************************/
-void
+static void
CgWriteAmlOpcode (
- ACPI_PARSE_OBJECT *Op)
+ ACPI_PARSE_OBJECT *Op)
{
+ UINT8 PkgLenFirstByte;
+ UINT32 i;
union {
- UINT16 Opcode;
- UINT8 OpcodeBytes[2];
+ UINT16 Opcode;
+ UINT8 OpcodeBytes[2];
} Aml;
union {
- UINT32 Len;
- UINT8 LenBytes[4];
+ UINT32 Len;
+ UINT8 LenBytes[4];
} PkgLen;
- UINT8 PkgLenFirstByte;
- UINT32 i;
-
/* We expect some DEFAULT_ARGs, just ignore them */
@@ -360,13 +389,16 @@ CgWriteAmlOpcode (
* Encode the "bytes to follow" in the first byte, top two bits.
* The low-order nybble of the length is in the bottom 4 bits
*/
- PkgLenFirstByte = (UINT8) (((UINT32) (Op->Asl.AmlPkgLenBytes - 1) << 6) |
- (PkgLen.LenBytes[0] & 0x0F));
+ PkgLenFirstByte = (UINT8)
+ (((UINT32) (Op->Asl.AmlPkgLenBytes - 1) << 6) |
+ (PkgLen.LenBytes[0] & 0x0F));
CgLocalWriteAmlData (Op, &PkgLenFirstByte, 1);
- /* Shift the length over by the 4 bits we just stuffed in the first byte */
-
+ /*
+ * Shift the length over by the 4 bits we just stuffed
+ * in the first byte
+ */
PkgLen.Len >>= 4;
/* Now we can write the remaining bytes - either 1, 2, or 3 bytes */
@@ -382,17 +414,17 @@ CgWriteAmlOpcode (
{
case AML_BYTE_OP:
- CgLocalWriteAmlData (Op, (UINT8 *) &Op->Asl.Value.Integer, 1);
+ CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 1);
break;
case AML_WORD_OP:
- CgLocalWriteAmlData (Op, (UINT16 *) &Op->Asl.Value.Integer, 2);
+ CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 2);
break;
case AML_DWORD_OP:
- CgLocalWriteAmlData (Op, (UINT32 *) &Op->Asl.Value.Integer, 4);
+ CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 4);
break;
case AML_QWORD_OP:
@@ -418,17 +450,17 @@ CgWriteAmlOpcode (
*
* PARAMETERS: Op - The DEFINITIONBLOCK node
*
- * RETURN: None.
+ * RETURN: None
*
* DESCRIPTION: Write a table header corresponding to the DEFINITIONBLOCK
*
******************************************************************************/
-void
+static void
CgWriteTableHeader (
- ACPI_PARSE_OBJECT *Op)
+ ACPI_PARSE_OBJECT *Op)
{
- ACPI_PARSE_OBJECT *Child;
+ ACPI_PARSE_OBJECT *Child;
/* AML filename */
@@ -475,7 +507,7 @@ CgWriteTableHeader (
TableHeader.AslCompilerRevision = CompilerCreatorRevision;
- /* Table length. Checksum zero for now, will rewrite later */
+ /* Table length. Checksum zero for now, will rewrite later */
TableHeader.Length = Gbl_TableLength;
TableHeader.Checksum = 0;
@@ -497,8 +529,9 @@ CgWriteTableHeader (
*
******************************************************************************/
-void
-CgCloseTable (void)
+static void
+CgCloseTable (
+ void)
{
signed char Sum;
UINT8 FileByte;
@@ -535,7 +568,7 @@ CgCloseTable (void)
*
******************************************************************************/
-void
+static void
CgWriteNode (
ACPI_PARSE_OBJECT *Op)
{
diff --git a/sys/contrib/dev/acpica/compiler/aslcompile.c b/sys/contrib/dev/acpica/compiler/aslcompile.c
index 73bcfcb..e6c2149 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompile.c
+++ b/sys/contrib/dev/acpica/compiler/aslcompile.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: aslcompile - top level compile module
- * $Revision: 73 $
+ * $Revision: 1.88 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,11 +116,22 @@
*****************************************************************************/
#include <stdio.h>
-#include "aslcompiler.h"
+#include <time.h>
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslcompile")
+/* Local prototypes */
+
+static void
+CmFlushSourceCode (
+ void);
+
+static ACPI_STATUS
+FlCheckForAscii (
+ ASL_FILE_INFO *FileInfo);
+
/*******************************************************************************
*
@@ -141,9 +152,8 @@ AslCompilerSignon (
char *Prefix = "";
- /*
- * Set line prefix depending on the destination file type
- */
+ /* Set line prefix depending on the destination file type */
+
switch (FileId)
{
case ASL_FILE_ASM_SOURCE_OUTPUT:
@@ -176,15 +186,35 @@ AslCompilerSignon (
break;
}
- /* Compiler signon with copyright */
-
+ /*
+ * Compiler signon with copyright
+ */
FlPrintFile (FileId,
- "%s\n%s%s\n%s%s version %X [%s]\n%s%s\n%sSupports ACPI Specification Revision 2.0c\n%s\n",
+ "%s\n%s%s\n%s",
Prefix,
Prefix, IntelAcpiCA,
- Prefix, CompilerId, ACPI_CA_VERSION, __DATE__,
+ Prefix);
+
+ /* Running compiler or disassembler? */
+
+ if (Gbl_DisasmFlag)
+ {
+ FlPrintFile (FileId,
+ "%s", DisassemblerId);
+ }
+ else
+ {
+ FlPrintFile (FileId,
+ "%s", CompilerId);
+ }
+
+ /* Version, build date, copyright, compliance */
+
+ FlPrintFile (FileId,
+ " version %X [%s]\n%s%s\n%s%s\n%s\n",
+ (UINT32) ACPI_CA_VERSION, __DATE__,
Prefix, CompilerCopyright,
- Prefix,
+ Prefix, CompilerCompliance,
Prefix);
}
@@ -210,9 +240,8 @@ AslCompilerFileHeader (
char *Prefix = "";
- /*
- * Set line prefix depending on the destination file type
- */
+ /* Set line prefix depending on the destination file type */
+
switch (FileId)
{
case ASL_FILE_ASM_SOURCE_OUTPUT:
@@ -281,8 +310,9 @@ AslCompilerFileHeader (
*
******************************************************************************/
-void
-CmFlushSourceCode (void)
+static void
+CmFlushSourceCode (
+ void)
{
char Buffer;
@@ -302,13 +332,13 @@ CmFlushSourceCode (void)
*
* PARAMETERS: FileInfo - Points to an open input file
*
- * RETURN: Status (0 = OK)
+ * RETURN: Status
*
* DESCRIPTION: Verify that the input file is entirely ASCII.
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
FlCheckForAscii (
ASL_FILE_INFO *FileInfo)
{
@@ -327,25 +357,32 @@ FlCheckForAscii (
{
if (BadBytes < 10)
{
- AcpiOsPrintf ("Non-ASCII character: 0x%2.2X at offset 0x%X\n", Byte, Offset);
+ AcpiOsPrintf (
+ "Non-ASCII character [0x%2.2X] found at file offset 0x%8.8X\n",
+ Byte, Offset);
}
BadBytes++;
}
Offset++;
}
+ /* Seek back to the beginning of the source file */
+
+ fseek (FileInfo->Handle, 0, SEEK_SET);
+
/* Were there any non-ASCII characters in the file? */
if (BadBytes)
{
- AcpiOsPrintf ("%d non-ASCII characters found in input file, appears to be binary\n", BadBytes);
- AslError (ASL_ERROR, ASL_MSG_NON_ASCII, NULL, FileInfo->Filename);
+ AcpiOsPrintf (
+ "%d non-ASCII characters found in input file, could be a binary file\n",
+ BadBytes);
+ AslError (ASL_WARNING, ASL_MSG_NON_ASCII, NULL, FileInfo->Filename);
return (AE_BAD_CHARACTER);
}
- /* File is OK, seek back to the beginning */
+ /* File is OK */
- fseek (FileInfo->Handle, 0, SEEK_SET);
return (AE_OK);
}
@@ -363,14 +400,16 @@ FlCheckForAscii (
******************************************************************************/
int
-CmDoCompile (void)
+CmDoCompile (
+ void)
{
ACPI_STATUS Status;
- UINT32 i = 0;
+ UINT8 FullCompile;
+ UINT8 Event;
- UtBeginEvent (12, "Total Compile time");
- UtBeginEvent (i, "Initialize");
+ FullCompile = UtBeginEvent ("*** Total Compile time ***");
+ Event = UtBeginEvent ("Open input and output files");
/* Open the required input and output files */
@@ -381,13 +420,19 @@ CmDoCompile (void)
return -1;
}
- /* Ensure that the input file is 100% ASCII text */
+ /* Optional check for 100% ASCII source file */
- Status = FlCheckForAscii (&Gbl_Files[ASL_FILE_INPUT]);
- if (ACPI_FAILURE (Status))
+ if (Gbl_CheckForAscii)
{
- AePrintErrorLog (ASL_FILE_STDERR);
- return -1;
+ /*
+ * NOTE: This code is optional because there can be "special" characters
+ * embedded in comments (such as the "copyright" symbol, 0xA9).
+ * Just emit a warning if there are non-ascii characters present.
+ */
+
+ /* Check if the input file is 100% ASCII text */
+
+ Status = FlCheckForAscii (&Gbl_Files[ASL_FILE_INPUT]);
}
Status = FlOpenMiscOutputFiles (Gbl_OutputFilenamePrefix);
@@ -396,17 +441,17 @@ CmDoCompile (void)
AePrintErrorLog (ASL_FILE_STDERR);
return -1;
}
-
- UtEndEvent (i++);
+ UtEndEvent (Event);
/* Build the parse tree */
- UtBeginEvent (i, "Parse source code and build parse tree");
+ Event = UtBeginEvent ("Parse source code and build parse tree");
AslCompilerparse();
- UtEndEvent (i++);
+ UtEndEvent (Event);
/* Flush out any remaining source after parse tree is complete */
+ Event = UtBeginEvent ("Flush source input");
CmFlushSourceCode ();
/* Did the parse tree get successfully constructed? */
@@ -418,44 +463,63 @@ CmDoCompile (void)
}
OpcGetIntegerWidth (RootNode);
+ UtEndEvent (Event);
/* Pre-process parse tree for any operator transforms */
- UtBeginEvent (i, "Generate AML opcodes");
+ Event = UtBeginEvent ("Parse tree transforms");
DbgPrint (ASL_DEBUG_OUTPUT, "\nParse tree transforms\n\n");
- TrWalkParseTree (RootNode, ASL_WALK_VISIT_DOWNWARD, TrAmlTransformWalk, NULL, NULL);
+ TrWalkParseTree (RootNode, ASL_WALK_VISIT_DOWNWARD,
+ TrAmlTransformWalk, NULL, NULL);
+ UtEndEvent (Event);
/* Generate AML opcodes corresponding to the parse tokens */
+ Event = UtBeginEvent ("Generate AML opcodes");
DbgPrint (ASL_DEBUG_OUTPUT, "\nGenerating AML opcodes\n\n");
- TrWalkParseTree (RootNode, ASL_WALK_VISIT_UPWARD, NULL, OpcAmlOpcodeWalk, NULL);
- UtEndEvent (i++);
+ TrWalkParseTree (RootNode, ASL_WALK_VISIT_UPWARD, NULL,
+ OpcAmlOpcodeWalk, NULL);
+ UtEndEvent (Event);
/*
* Now that the input is parsed, we can open the AML output file.
* Note: by default, the name of this file comes from the table descriptor
* within the input file.
*/
+ Event = UtBeginEvent ("Open AML output file");
Status = FlOpenAmlOutputFile (Gbl_OutputFilenamePrefix);
if (ACPI_FAILURE (Status))
{
AePrintErrorLog (ASL_FILE_STDERR);
return -1;
}
+ UtEndEvent (Event);
/* Interpret and generate all compile-time constants */
- UtBeginEvent (i, "Constant folding via AML interpreter");
- DbgPrint (ASL_DEBUG_OUTPUT, "\nInterpreting compile-time constant expressions\n\n");
- TrWalkParseTree (RootNode, ASL_WALK_VISIT_DOWNWARD, OpcAmlConstantWalk, NULL, NULL);
- UtEndEvent (i++);
+ Event = UtBeginEvent ("Constant folding via AML interpreter");
+ DbgPrint (ASL_DEBUG_OUTPUT,
+ "\nInterpreting compile-time constant expressions\n\n");
+ TrWalkParseTree (RootNode, ASL_WALK_VISIT_DOWNWARD,
+ OpcAmlConstantWalk, NULL, NULL);
+ UtEndEvent (Event);
+
+ /* Update AML opcodes if necessary, after constant folding */
+
+ Event = UtBeginEvent ("Updating AML opcodes after constant folding");
+ DbgPrint (ASL_DEBUG_OUTPUT,
+ "\nUpdating AML opcodes after constant folding\n\n");
+ TrWalkParseTree (RootNode, ASL_WALK_VISIT_UPWARD,
+ NULL, OpcAmlOpcodeUpdateWalk, NULL);
+ UtEndEvent (Event);
/* Calculate all AML package lengths */
- UtBeginEvent (i, "Generate AML package lengths");
+ Event = UtBeginEvent ("Generate AML package lengths");
DbgPrint (ASL_DEBUG_OUTPUT, "\nGenerating Package lengths\n\n");
- TrWalkParseTree (RootNode, ASL_WALK_VISIT_UPWARD, NULL, LnPackageLengthWalk, NULL);
- UtEndEvent (i++);
+ TrWalkParseTree (RootNode, ASL_WALK_VISIT_UPWARD, NULL,
+ LnPackageLengthWalk, NULL);
+ UtEndEvent (Event);
if (Gbl_ParseOnlyFlag)
{
@@ -477,9 +541,9 @@ CmDoCompile (void)
/* Namespace loading */
- UtBeginEvent (i, "Create ACPI Namespace");
+ Event = UtBeginEvent ("Create ACPI Namespace");
Status = LdLoadNamespace (RootNode);
- UtEndEvent (i++);
+ UtEndEvent (Event);
if (ACPI_FAILURE (Status))
{
return -1;
@@ -487,10 +551,9 @@ CmDoCompile (void)
/* Namespace lookup */
- UtBeginEvent (i, "Cross reference parse tree and Namespace");
+ AslGbl_NamespaceEvent = UtBeginEvent ("Cross reference parse tree and Namespace");
Status = LkCrossReferenceNamespace ();
- UtEndEvent (i++);
- UtEndEvent (i++);
+ UtEndEvent (AslGbl_NamespaceEvent);
if (ACPI_FAILURE (Status))
{
return -1;
@@ -502,64 +565,83 @@ CmDoCompile (void)
*
* part one - check control methods
*/
- UtBeginEvent (i, "Analyze control method return types");
+ Event = UtBeginEvent ("Analyze control method return types");
AnalysisWalkInfo.MethodStack = NULL;
DbgPrint (ASL_DEBUG_OUTPUT, "\nSemantic analysis - Method analysis\n\n");
- TrWalkParseTree (RootNode, ASL_WALK_VISIT_TWICE, AnMethodAnalysisWalkBegin,
- AnMethodAnalysisWalkEnd, &AnalysisWalkInfo);
- UtEndEvent (i++);
+ TrWalkParseTree (RootNode, ASL_WALK_VISIT_TWICE,
+ AnMethodAnalysisWalkBegin,
+ AnMethodAnalysisWalkEnd, &AnalysisWalkInfo);
+ UtEndEvent (Event);
/* Semantic error checking part two - typing of method returns */
- UtBeginEvent (i, "Determine object types returned by methods");
- DbgPrint (ASL_DEBUG_OUTPUT, "\nSemantic analysis - Method typing \n\n");
- TrWalkParseTree (RootNode, ASL_WALK_VISIT_TWICE, AnMethodTypingWalkBegin,
- AnMethodTypingWalkEnd, NULL);
- UtEndEvent (i++);
+ Event = UtBeginEvent ("Determine object types returned by methods");
+ DbgPrint (ASL_DEBUG_OUTPUT, "\nSemantic analysis - Method typing\n\n");
+ TrWalkParseTree (RootNode, ASL_WALK_VISIT_TWICE,
+ AnMethodTypingWalkBegin,
+ AnMethodTypingWalkEnd, NULL);
+ UtEndEvent (Event);
/* Semantic error checking part three - operand type checking */
- UtBeginEvent (i, "Analyze AML operand types");
- DbgPrint (ASL_DEBUG_OUTPUT, "\nSemantic analysis - Operand type checking \n\n");
- TrWalkParseTree (RootNode, ASL_WALK_VISIT_TWICE, AnOperandTypecheckWalkBegin,
- AnOperandTypecheckWalkEnd, &AnalysisWalkInfo);
- UtEndEvent (i++);
+ Event = UtBeginEvent ("Analyze AML operand types");
+ DbgPrint (ASL_DEBUG_OUTPUT, "\nSemantic analysis - Operand type checking\n\n");
+ TrWalkParseTree (RootNode, ASL_WALK_VISIT_TWICE,
+ AnOperandTypecheckWalkBegin,
+ AnOperandTypecheckWalkEnd, &AnalysisWalkInfo);
+ UtEndEvent (Event);
/* Semantic error checking part four - other miscellaneous checks */
- UtBeginEvent (i, "Miscellaneous analysis");
- DbgPrint (ASL_DEBUG_OUTPUT, "\nSemantic analysis - miscellaneous \n\n");
- TrWalkParseTree (RootNode, ASL_WALK_VISIT_TWICE, AnOtherSemanticAnalysisWalkBegin,
- AnOtherSemanticAnalysisWalkEnd, &AnalysisWalkInfo);
- UtEndEvent (i++);
+ Event = UtBeginEvent ("Miscellaneous analysis");
+ DbgPrint (ASL_DEBUG_OUTPUT, "\nSemantic analysis - miscellaneous\n\n");
+ TrWalkParseTree (RootNode, ASL_WALK_VISIT_TWICE,
+ AnOtherSemanticAnalysisWalkBegin,
+ AnOtherSemanticAnalysisWalkEnd, &AnalysisWalkInfo);
+ UtEndEvent (Event);
/* Calculate all AML package lengths */
- UtBeginEvent (i, "Finish AML package length generation");
+ Event = UtBeginEvent ("Finish AML package length generation");
DbgPrint (ASL_DEBUG_OUTPUT, "\nGenerating Package lengths\n\n");
- TrWalkParseTree (RootNode, ASL_WALK_VISIT_UPWARD, NULL, LnInitLengthsWalk, NULL);
- TrWalkParseTree (RootNode, ASL_WALK_VISIT_UPWARD, NULL, LnPackageLengthWalk, NULL);
- UtEndEvent (i++);
-
+ TrWalkParseTree (RootNode, ASL_WALK_VISIT_UPWARD, NULL,
+ LnInitLengthsWalk, NULL);
+ TrWalkParseTree (RootNode, ASL_WALK_VISIT_UPWARD, NULL,
+ LnPackageLengthWalk, NULL);
+ UtEndEvent (Event);
/* Code generation - emit the AML */
- UtBeginEvent (i, "Generate AML code and write output files");
+ Event = UtBeginEvent ("Generate AML code and write output files");
CgGenerateAmlOutput ();
- UtEndEvent (i++);
+ UtEndEvent (Event);
- UtBeginEvent (i, "Write optional output files");
+ Event = UtBeginEvent ("Write optional output files");
CmDoOutputFiles ();
- UtEndEvent (i++);
+ UtEndEvent (Event);
- UtEndEvent (13);
+ UtEndEvent (FullCompile);
CmCleanupAndExit ();
return 0;
}
+
+/*******************************************************************************
+ *
+ * FUNCTION: CmDoOutputFiles
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: None.
+ *
+ * DESCRIPTION: Create all "listing" type files
+ *
+ ******************************************************************************/
+
void
-CmDoOutputFiles (void)
+CmDoOutputFiles (
+ void)
{
/* Create listings and hex files */
@@ -569,7 +651,51 @@ CmDoOutputFiles (void)
/* Dump the namespace to the .nsp file if requested */
- LsDisplayNamespace ();
+ (void) LsDisplayNamespace ();
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: CmDumpEvent
+ *
+ * PARAMETERS: Event - A compiler event struct
+ *
+ * RETURN: None.
+ *
+ * DESCRIPTION: Dump a compiler event struct
+ *
+ ******************************************************************************/
+
+static void
+CmDumpEvent (
+ ASL_EVENT_INFO *Event)
+{
+ UINT32 Delta;
+ UINT32 USec;
+ UINT32 MSec;
+
+ if (!Event->Valid)
+ {
+ return;
+ }
+
+ /* Delta will be in 100-nanosecond units */
+
+ Delta = (UINT32) (Event->EndTime - Event->StartTime);
+
+ USec = Delta / 10;
+ MSec = Delta / 10000;
+
+ /* Round milliseconds up */
+
+ if ((USec - (MSec * 1000)) >= 500)
+ {
+ MSec++;
+ }
+
+ DbgPrint (ASL_DEBUG_OUTPUT, "%8u usec %8u msec - %s\n",
+ USec, MSec, Event->EventName);
}
@@ -586,7 +712,8 @@ CmDoOutputFiles (void)
******************************************************************************/
void
-CmCleanupAndExit (void)
+CmCleanupAndExit (
+ void)
{
UINT32 i;
@@ -600,30 +727,19 @@ CmCleanupAndExit (void)
}
DbgPrint (ASL_DEBUG_OUTPUT, "\n\nElapsed time for major events\n\n");
- for (i = 0; i < 13; i++)
+ for (i = 0; i < AslGbl_NextEvent; i++)
{
- if (AslGbl_Events[i].Valid)
- {
- DbgPrint (ASL_DEBUG_OUTPUT, "%8lu ms - %s\n",
- AslGbl_Events[i].EndTime -
- AslGbl_Events[i].StartTime,
- AslGbl_Events[i].EventName);
- }
+ CmDumpEvent (&AslGbl_Events[i]);
}
if (Gbl_CompileTimesFlag)
{
printf ("\nElapsed time for major events\n\n");
- for (i = 0; i < 13; i++)
+ for (i = 0; i < AslGbl_NextEvent; i++)
{
- if (AslGbl_Events[i].Valid)
- {
- printf ("%8lu ms : %s\n",
- AslGbl_Events[i].EndTime -
- AslGbl_Events[i].StartTime,
- AslGbl_Events[i].EventName);
- }
+ CmDumpEvent (&AslGbl_Events[i]);
}
+
printf ("\nMiscellaneous compile statistics\n\n");
printf ("%11u : %s\n", TotalParseNodes, "Parse nodes");
printf ("%11u : %s\n", Gbl_NsLookupCount, "Namespace searches");
@@ -638,10 +754,12 @@ CmCleanupAndExit (void)
if (Gbl_NsLookupCount)
{
DbgPrint (ASL_DEBUG_OUTPUT, "\n\nMiscellaneous compile statistics\n\n");
- DbgPrint (ASL_DEBUG_OUTPUT, "%32s : %d\n", "Total Namespace searches", Gbl_NsLookupCount);
- DbgPrint (ASL_DEBUG_OUTPUT, "%32s : %d\n", "Time per search",
- ((UINT32) (AslGbl_Events[7].EndTime - AslGbl_Events[7].StartTime) * 1000) /
- Gbl_NsLookupCount);
+ DbgPrint (ASL_DEBUG_OUTPUT, "%32s : %d\n", "Total Namespace searches",
+ Gbl_NsLookupCount);
+ DbgPrint (ASL_DEBUG_OUTPUT, "%32s : %d usec\n", "Time per search",
+ ((UINT32) (AslGbl_Events[AslGbl_NamespaceEvent].EndTime -
+ AslGbl_Events[AslGbl_NamespaceEvent].StartTime) /
+ 10) / Gbl_NsLookupCount);
}
/* Close all open files */
@@ -672,6 +790,11 @@ CmCleanupAndExit (void)
}
UtDisplaySummary (ASL_FILE_STDOUT);
+
+ if (Gbl_ExceptionCount[ASL_ERROR] > 0)
+ {
+ exit (1);
+ }
exit (0);
}
diff --git a/sys/contrib/dev/acpica/compiler/aslcompiler.h b/sys/contrib/dev/acpica/compiler/aslcompiler.h
index 3da39af..d3216a6 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompiler.h
+++ b/sys/contrib/dev/acpica/compiler/aslcompiler.h
@@ -1,8 +1,8 @@
/******************************************************************************
*
- * Module Name: aslcompiler.h - common include file
- * $Revision: 130 $
+ * Module Name: aslcompiler.h - common include file for iASL
+ * $Revision: 1.142 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -139,84 +139,15 @@
#include <ctype.h>
-#include "acpi.h"
-#include "amlresrc.h"
-#include "acdebug.h"
-#include "asltypes.h"
-#include "aslglobal.h"
+#include <contrib/dev/acpica/acpi.h>
+#include <contrib/dev/acpica/amlresrc.h>
+#include <contrib/dev/acpica/acdebug.h>
+/* Compiler headers */
-/*
- * Compiler versions and names
- */
-
-#define CompilerCreatorRevision ACPI_CA_VERSION
-
-#define IntelAcpiCA "Intel ACPI Component Architecture"
-#define CompilerId "ASL Optimizing Compiler / AML Disassembler"
-#define CompilerCopyright "Copyright (C) 2000 - 2004 Intel Corporation"
-#define CompilerCompliance "ACPI 2.0c"
-#define CompilerName "iasl"
-#define CompilerCreatorId "INTL"
-
-
-/* Configuration constants */
-
-#define ASL_MAX_ERROR_COUNT 200
-#define ASL_NODE_CACHE_SIZE 1024
-#define ASL_STRING_CACHE_SIZE 32768
-
-#define ASL_FIRST_PARSE_OPCODE PARSEOP_ACCESSAS
-#define ASL_YYTNAME_START 3
-
-/*
- * Macros
- */
-
-#define ASL_RESDESC_OFFSET(m) ACPI_OFFSET (ASL_RESOURCE_DESC, m)
-#define ASL_PTR_DIFF(a,b) ((UINT8 *)(b) - (UINT8 *)(a))
-#define ASL_PTR_ADD(a,b) ((UINT8 *)(a) = ((UINT8 *)(a) + (b)))
-#define ASL_GET_CHILD_NODE(a) (a)->Asl.Child
-#define ASL_GET_PEER_NODE(a) (a)->Asl.Next
-#define OP_TABLE_ENTRY(a,b,c,d) {b,d,a,c}
-
-
-#define ASL_PARSE_OPCODE_BASE PARSEOP_ACCESSAS /* First Lex type */
-
-
-/* Internal AML opcodes */
-
-#define AML_RAW_DATA_BYTE (UINT16) 0xAA01 /* write one raw byte */
-#define AML_RAW_DATA_WORD (UINT16) 0xAA02 /* write 2 raw bytes */
-#define AML_RAW_DATA_DWORD (UINT16) 0xAA04 /* write 4 raw bytes */
-#define AML_RAW_DATA_QWORD (UINT16) 0xAA08 /* write 8 raw bytes */
-#define AML_RAW_DATA_BUFFER (UINT16) 0xAA0B /* raw buffer with length */
-#define AML_RAW_DATA_CHAIN (UINT16) 0xAA0C /* chain of raw buffers */
-#define AML_PACKAGE_LENGTH (UINT16) 0xAA10
-#define AML_UNASSIGNED_OPCODE (UINT16) 0xEEEE
-#define AML_DEFAULT_ARG_OP (UINT16) 0xDDDD
-
-
-/* filename suffixes for output files */
-
-#define FILE_SUFFIX_AML_CODE "aml"
-#define FILE_SUFFIX_LISTING "lst"
-#define FILE_SUFFIX_HEX_DUMP "hex"
-#define FILE_SUFFIX_DEBUG "txt"
-#define FILE_SUFFIX_SOURCE "src"
-#define FILE_SUFFIX_NAMESPACE "nsp"
-#define FILE_SUFFIX_ASM_SOURCE "asm"
-#define FILE_SUFFIX_C_SOURCE "c"
-#define FILE_SUFFIX_DISASSEMBLY "dsl"
-#define FILE_SUFFIX_ASM_INCLUDE "inc"
-#define FILE_SUFFIX_C_INCLUDE "h"
-
-
-/* Misc */
-
-#define ASL_EXTERNAL_METHOD 255
-#define ASL_ABORT TRUE
-#define ASL_NO_ABORT FALSE
+#include <contrib/dev/acpica/compiler/asldefine.h>
+#include <contrib/dev/acpica/compiler/asltypes.h>
+#include <contrib/dev/acpica/compiler/aslglobal.h>
/*******************************************************************************
@@ -225,13 +156,9 @@
*
******************************************************************************/
-
-void
-end_stmt (void);
-
-
-/* parser */
-
+/*
+ * parser - generated from flex/bison, lex/yacc, etc.
+ */
int
AslCompilerparse(
void);
@@ -241,10 +168,6 @@ AslDoError (
void);
int
-AslCompilererror(
- char *s);
-
-int
AslCompilerlex(
void);
@@ -265,8 +188,10 @@ AslPushInputFileStack (
FILE *InputFile,
char *Filename);
-/* aslmain */
+/*
+ * aslcompile - compile mainline
+ */
void
AslCompilerSignon (
UINT32 FileId);
@@ -275,38 +200,74 @@ void
AslCompilerFileHeader (
UINT32 FileId);
+int
+CmDoCompile (
+ void);
+
void
-AslDoSourceOutputFile (
- char *Buffer);
+CmDoOutputFiles (
+ void);
-#define ASL_DEBUG_OUTPUT 0
-#define ASL_PARSE_OUTPUT 1
-#define ASL_TREE_OUTPUT 2
+void
+CmCleanupAndExit (
+ void);
-void
-DbgPrint (
- UINT32 Type,
- char *Format,
- ...);
+/*
+ * aslanalyze - semantic analysis
+ */
+ACPI_STATUS
+AnOtherSemanticAnalysisWalkBegin (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
-void
-ErrorContext (void);
+ACPI_STATUS
+AnOtherSemanticAnalysisWalkEnd (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
-/* aslcompile */
+ACPI_STATUS
+AnOperandTypecheckWalkBegin (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
-int
-CmDoCompile (void);
+ACPI_STATUS
+AnOperandTypecheckWalkEnd (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
-void
-CmDoOutputFiles (void);
+ACPI_STATUS
+AnMethodAnalysisWalkBegin (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
-void
-CmCleanupAndExit (void);
+ACPI_STATUS
+AnMethodAnalysisWalkEnd (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
+ACPI_STATUS
+AnMethodTypingWalkBegin (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
+
+ACPI_STATUS
+AnMethodTypingWalkEnd (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
-/* aslerror */
+/*
+ * aslerror - error handling/reporting
+ */
void
AslError (
UINT8 Level,
@@ -321,6 +282,10 @@ AslCoreSubsystemError (
char *ExtraMessage,
BOOLEAN Abort);
+int
+AslCompilererror(
+ char *s);
+
void
AslCommonError (
UINT8 Level,
@@ -348,18 +313,12 @@ AeLocalGetRootPointer (
ACPI_PHYSICAL_ADDRESS *RsdpPhysicalAddress);
-/* asllisting */
-
-void
-LsWriteListingHexBytes (
- UINT8 *Buffer,
- UINT32 Length,
- UINT32 FileId);
-
+/*
+ * asllisting - generate all "listing" type files
+ */
void
-LsWriteNodeToListing (
- ACPI_PARSE_OBJECT *Op,
- UINT32 FileId);
+LsDoListings (
+ void);
void
LsWriteNodeToAsmListing (
@@ -371,38 +330,23 @@ LsWriteNode (
UINT32 FileId);
void
-LsFinishSourceListing (
- UINT32 FileId);
-
-void
-LsFlushListingBuffer (
- UINT32 FileId);
-
-void
LsDoHexOutput (
void);
-void
-LsDoHexOutputC (
- void);
-void
-LsDoHexOutputAsm (
- void);
-
-void
-LsPushNode (
- char *Filename);
-
-ASL_LISTING_NODE *
-LsPopNode (
- void);
+/*
+ * aslfold - constant folding
+ */
+ACPI_STATUS
+OpcAmlConstantWalk (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
/*
* aslopcodes - generate AML opcodes
*/
-
ACPI_STATUS
OpcAmlOpcodeWalk (
ACPI_PARSE_OBJECT *Op,
@@ -410,7 +354,7 @@ OpcAmlOpcodeWalk (
void *Context);
ACPI_STATUS
-OpcAmlConstantWalk (
+OpcAmlOpcodeUpdateWalk (
ACPI_PARSE_OBJECT *Op,
UINT32 Level,
void *Context);
@@ -427,59 +371,27 @@ void
OpcGetIntegerWidth (
ACPI_PARSE_OBJECT *Op);
+
/*
* asloperands - generate AML operands for the AML opcodes
*/
+ACPI_PARSE_OBJECT *
+UtGetArg (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Argn);
void
OpnGenerateAmlOperands (
ACPI_PARSE_OBJECT *Op);
void
-OpnDoField (
- ACPI_PARSE_OBJECT *Op);
-
-void
-OpnDoBankField (
- ACPI_PARSE_OBJECT *Op);
-
-void
-OpnDoBuffer (
- ACPI_PARSE_OBJECT *Op);
-
-void
-OpnDoDefinitionBlock (
- ACPI_PARSE_OBJECT *Op);
-
-void
-OpnDoFieldCommon (
- ACPI_PARSE_OBJECT *FieldOp,
- ACPI_PARSE_OBJECT *Op);
-
-void
-OpnDoIndexField (
- ACPI_PARSE_OBJECT *Op);
-
-void
-OpnDoLoadTable (
- ACPI_PARSE_OBJECT *Op);
-
-void
-OpnDoMethod (
- ACPI_PARSE_OBJECT *Op);
-
-void
OpnDoPackage (
ACPI_PARSE_OBJECT *Op);
-void
-OpnDoRegion (
- ACPI_PARSE_OBJECT *Op);
/*
* aslopt - optmization
*/
-
void
OptOptimizeNamePath (
ACPI_PARSE_OBJECT *Op,
@@ -490,35 +402,16 @@ OptOptimizeNamePath (
/*
- * aslresource - resource template generation
+ * aslcodegen - code generation
*/
-
-void
-RsDoResourceTemplate (
- ACPI_PARSE_OBJECT *Op);
-
-
-void
-CgGenerateAmlOutput (void);
-
-void
-CgGenerateListing (
- UINT32 FileId);
-
void
-LsDoListings (void);
-
-void
-CgGenerateAmlLengths (
- ACPI_PARSE_OBJECT *Op);
-
-ACPI_STATUS
-CgOpenOutputFile (
- char *InputFilename);
-
+CgGenerateAmlOutput (
+ void);
-/* asllength */
+/*
+ * asllength - calculate/adjust AML package lengths
+ */
ACPI_STATUS
LnPackageLengthWalk (
ACPI_PARSE_OBJECT *Op,
@@ -531,37 +424,26 @@ LnInitLengthsWalk (
UINT32 Level,
void *Context);
-
-ACPI_STATUS
-CgAmlWriteWalk (
- ACPI_PARSE_OBJECT *Op,
- UINT32 Level,
- void *Context);
-
-void
-CgGenerateOutput(
- void);
-
-void
-CgCloseTable (void);
-
-
void
-CgWriteNode (
+CgGenerateAmlLengths (
ACPI_PARSE_OBJECT *Op);
+
/*
- * aslmap
+ * aslmap - opcode mappings and reserved method names
*/
-
ACPI_OBJECT_TYPE
AslMapNamedOpcodeToDataType (
UINT16 Opcode);
+void
+MpDisplayReservedNames (
+ void);
+
+
/*
* asltransform - parse tree transformations
*/
-
ACPI_STATUS
TrAmlTransformWalk (
ACPI_PARSE_OBJECT *Op,
@@ -569,22 +451,9 @@ TrAmlTransformWalk (
void *Context);
-void
-TrTransformSubtree (
- ACPI_PARSE_OBJECT *Op);
-
-void
-TrDoSwitch (
- ACPI_PARSE_OBJECT *Op);
-
-void
-TrDoDefinitionBlock (
- ACPI_PARSE_OBJECT *Op);
-
/*
* asltree - parse tree support
*/
-
ACPI_STATUS
TrWalkParseTree (
ACPI_PARSE_OBJECT *Op,
@@ -593,11 +462,6 @@ TrWalkParseTree (
ASL_WALK_CALLBACK AscendingCallback,
void *Context);
-ACPI_PARSE_OBJECT *
-TrAllocateNode (
- UINT32 ParseOpcode);
-
-
/* Values for "Visitation" parameter above */
#define ASL_WALK_VISIT_DOWNWARD 0x01
@@ -605,9 +469,13 @@ TrAllocateNode (
#define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
-char *
-TrAddNode (
- void *Thing);
+ACPI_PARSE_OBJECT *
+TrAllocateNode (
+ UINT32 ParseOpcode);
+
+void
+TrReleaseNode (
+ ACPI_PARSE_OBJECT *Op);
ACPI_PARSE_OBJECT *
TrUpdateNode (
@@ -640,7 +508,8 @@ TrSetEndLineNumber (
ACPI_PARSE_OBJECT *Op);
void
-TrWalkTree (void);
+TrWalkTree (
+ void);
ACPI_PARSE_OBJECT *
TrLinkPeerNode (
@@ -662,72 +531,13 @@ TrLinkPeerNodes (
UINT32 NumPeers,
...);
-void
-TrReleaseNode (
- ACPI_PARSE_OBJECT *Op);
-
-/* Analyze */
-
-ACPI_STATUS
-AnOtherSemanticAnalysisWalkBegin (
- ACPI_PARSE_OBJECT *Op,
- UINT32 Level,
- void *Context);
-
-ACPI_STATUS
-AnOtherSemanticAnalysisWalkEnd (
- ACPI_PARSE_OBJECT *Op,
- UINT32 Level,
- void *Context);
-
-ACPI_STATUS
-AnOperandTypecheckWalkBegin (
- ACPI_PARSE_OBJECT *Op,
- UINT32 Level,
- void *Context);
-
-ACPI_STATUS
-AnOperandTypecheckWalkEnd (
- ACPI_PARSE_OBJECT *Op,
- UINT32 Level,
- void *Context);
-
-ACPI_STATUS
-AnMethodAnalysisWalkBegin (
- ACPI_PARSE_OBJECT *Op,
- UINT32 Level,
- void *Context);
-
-ACPI_STATUS
-AnMethodAnalysisWalkEnd (
- ACPI_PARSE_OBJECT *Op,
- UINT32 Level,
- void *Context);
-
-ACPI_STATUS
-AnMethodTypingWalkBegin (
- ACPI_PARSE_OBJECT *Op,
- UINT32 Level,
- void *Context);
-
-ACPI_STATUS
-AnMethodTypingWalkEnd (
- ACPI_PARSE_OBJECT *Op,
- UINT32 Level,
- void *Context);
-
/*
* aslfiles - File I/O support
*/
-
void
-AslAbort (void);
-
-FILE *
-FlOpenLocalFile (
- char *LocalName,
- char *Mode);
+AslAbort (
+ void);
void
FlOpenIncludeFile (
@@ -738,12 +548,6 @@ FlFileError (
UINT32 FileId,
UINT8 ErrorId);
-void
-FlOpenFile (
- UINT32 FileId,
- char *Filename,
- char *Mode);
-
ACPI_STATUS
FlReadFile (
UINT32 FileId,
@@ -776,10 +580,6 @@ FlSetLineNumber (
ACPI_PARSE_OBJECT *Op);
ACPI_STATUS
-FlParseInputPathname (
- char *InputFilename);
-
-ACPI_STATUS
FlOpenInputFile (
char *InputFilename);
@@ -791,74 +591,53 @@ ACPI_STATUS
FlOpenMiscOutputFiles (
char *InputFilename);
-void
-MpDisplayReservedNames (
- void);
-
-
-/* Load */
+/*
+ * asload - load namespace in prep for cross reference
+ */
ACPI_STATUS
LdLoadNamespace (
ACPI_PARSE_OBJECT *RootOp);
+/*
+ * asllookup - namespace cross reference
+ */
ACPI_STATUS
-LdNamespace1Begin (
- ACPI_PARSE_OBJECT *Op,
- UINT32 Level,
- void *Context);
-
-ACPI_STATUS
-LdNamespace1End (
- ACPI_PARSE_OBJECT *Op,
- UINT32 Level,
- void *Context);
-
-
-/* Lookup */
-
-ACPI_STATUS
-LkCrossReferenceNamespace (void);
-
-ACPI_STATUS
-LkNamespaceLocateBegin (
- ACPI_PARSE_OBJECT *Op,
- UINT32 Level,
- void *Context);
-
-ACPI_STATUS
-LkNamespaceLocateEnd (
- ACPI_PARSE_OBJECT *Op,
- UINT32 Level,
- void *Context);
+LkCrossReferenceNamespace (
+ void);
ACPI_STATUS
LsDisplayNamespace (
void);
-ACPI_STATUS
-LsCompareOneNamespaceObject (
- ACPI_HANDLE ObjHandle,
- UINT32 Level,
- void *Context,
- void **ReturnValue);
+/*
+ * aslutils - common compiler utilites
+ */
+void
+DbgPrint (
+ UINT32 Type,
+ char *Format,
+ ...);
-/* Utils */
+/* Type values for above */
+
+#define ASL_DEBUG_OUTPUT 0
+#define ASL_PARSE_OUTPUT 1
+#define ASL_TREE_OUTPUT 2
void
UtDisplayConstantOpcodes (
void);
-void
+UINT8
UtBeginEvent (
- UINT32 Event,
char *Name);
void
UtEndEvent (
- UINT32 Event);
+ UINT8 Event);
void *
UtLocalCalloc (
@@ -875,7 +654,7 @@ UtDisplaySummary (
UINT8
UtHexCharToValue (
- int hc);
+ int HexChar);
void
UtConvertByteToHex (
@@ -895,11 +674,6 @@ void
UtSetParseOpName (
ACPI_PARSE_OBJECT *Op);
-ACPI_PARSE_OBJECT *
-UtGetArg (
- ACPI_PARSE_OBJECT *Op,
- UINT32 Argn);
-
char *
UtGetStringBuffer (
UINT32 Length);
@@ -920,39 +694,19 @@ UtCheckIntegerRange (
UINT32 LowValue,
UINT32 HighValue);
-ACPI_STATUS
-UtStrtoul64 (
- char *String,
- UINT32 Base,
- ACPI_INTEGER *RetInteger);
-
ACPI_INTEGER
UtDoConstant (
char *String);
-/* Find */
-
-void
-LnAdjustLengthToRoot (
- ACPI_PARSE_OBJECT *Op,
- UINT32 LengthDelta);
-
-
-#define NEXT_RESOURCE_DESC(a,b) (ASL_RESOURCE_DESC *) (((char *) (a)) + sizeof(b))
-
-#define DEFAULT_RESOURCE_DESC_SIZE (sizeof (ASL_RESOURCE_DESC) + sizeof (ASL_END_TAG_DESC))
-
-
/*
- * Resource utilities
+ * aslresource - Resource template generation utilities
*/
-
ASL_RESOURCE_NODE *
RsAllocateResourceNode (
UINT32 Size);
- void
+void
RsCreateBitField (
ACPI_PARSE_OBJECT *Op,
char *Name,
@@ -976,12 +730,18 @@ ACPI_PARSE_OBJECT *
RsCompleteNodeAndGetNext (
ACPI_PARSE_OBJECT *Op);
+void
+RsCheckListForDuplicates (
+ ACPI_PARSE_OBJECT *Op);
+
ASL_RESOURCE_NODE *
RsDoOneResourceDescriptor (
ACPI_PARSE_OBJECT *DescriptorTypeOp,
UINT32 CurrentByteOffset,
UINT8 *State);
+/* Values for State above */
+
#define ACPI_RSTATE_NORMAL 0
#define ACPI_RSTATE_START_DEPENDENT 1
#define ACPI_RSTATE_DEPENDENT_LIST 2
@@ -991,11 +751,14 @@ RsLinkDescriptorChain (
ASL_RESOURCE_NODE **PreviousRnode,
ASL_RESOURCE_NODE *Rnode);
+void
+RsDoResourceTemplate (
+ ACPI_PARSE_OBJECT *Op);
+
/*
- * Small descriptors
+ * aslrestype1 - generate Small descriptors
*/
-
ASL_RESOURCE_NODE *
RsDoDmaDescriptor (
ACPI_PARSE_OBJECT *Op,
@@ -1012,11 +775,6 @@ RsDoFixedIoDescriptor (
UINT32 CurrentByteOffset);
ASL_RESOURCE_NODE *
-RsDoInterruptDescriptor (
- ACPI_PARSE_OBJECT *Op,
- UINT32 CurrentByteOffset);
-
-ASL_RESOURCE_NODE *
RsDoIoDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset);
@@ -1063,12 +821,12 @@ RsDoVendorSmallDescriptor (
/*
- * Large descriptors
+ * aslrestype2 - generate Large descriptors
*/
-
-UINT32
-RsGetStringDataLength (
- ACPI_PARSE_OBJECT *InitializerOp);
+ASL_RESOURCE_NODE *
+RsDoInterruptDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
ASL_RESOURCE_NODE *
RsDoDwordIoDescriptor (
@@ -1081,6 +839,26 @@ RsDoDwordMemoryDescriptor (
UINT32 CurrentByteOffset);
ASL_RESOURCE_NODE *
+RsDoDwordSpaceDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoExtendedIoDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoExtendedMemoryDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
+RsDoExtendedSpaceDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
RsDoQwordIoDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset);
@@ -1091,11 +869,21 @@ RsDoQwordMemoryDescriptor (
UINT32 CurrentByteOffset);
ASL_RESOURCE_NODE *
+RsDoQwordSpaceDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
RsDoWordIoDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset);
ASL_RESOURCE_NODE *
+RsDoWordSpaceDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset);
+
+ASL_RESOURCE_NODE *
RsDoWordBusNumberDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset);
@@ -1110,6 +898,5 @@ RsDoGeneralRegisterDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset);
-
#endif /* __ASLCOMPILER_H */
diff --git a/sys/contrib/dev/acpica/compiler/aslcompiler.l b/sys/contrib/dev/acpica/compiler/aslcompiler.l
index dbef089..e5eb3c5 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompiler.l
+++ b/sys/contrib/dev/acpica/compiler/aslcompiler.l
@@ -3,7 +3,7 @@
/******************************************************************************
*
* Module Name: aslcompiler.l - Flex input file
- * $Revision: $
+ * $Revision: 1.74 $
*
*****************************************************************************/
@@ -11,7 +11,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -119,7 +119,7 @@
#include <stdlib.h>
#include <string.h>
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
YYSTYPE AslCompilerlval;
@@ -357,6 +357,7 @@ NamePathTail [.]{NameSeg}
"MutexObj" { count (0); return (PARSEOP_OBJECTTYPE_MTX); }
"OpRegionObj" { count (0); return (PARSEOP_OBJECTTYPE_OPR); }
"PowerResObj" { count (0); return (PARSEOP_OBJECTTYPE_POW); }
+"ProcessorObj" { count (0); return (PARSEOP_OBJECTTYPE_PRO); }
"ThermalZoneObj" { count (0); return (PARSEOP_OBJECTTYPE_THZ); }
"BuffFieldObj" { count (0); return (PARSEOP_OBJECTTYPE_BFF); }
"DDBHandleObj" { count (0); return (PARSEOP_OBJECTTYPE_DDB); }
@@ -476,7 +477,7 @@ NamePathTail [.]{NameSeg}
if (strcmp (AslCompilertext, "\\"))
{
strcpy (s, "____");
- ACPI_STRUPR (AslCompilertext);
+ AcpiUtStrupr (AslCompilertext);
}
memcpy (s, AslCompilertext, strlen (AslCompilertext));
AslCompilerlval.s = s;
@@ -486,7 +487,7 @@ NamePathTail [.]{NameSeg}
{NameString} { char *s;
count (0);
s=malloc (strlen (AslCompilertext)+1);
- ACPI_STRUPR (AslCompilertext);
+ AcpiUtStrupr (AslCompilertext);
strcpy (s, AslCompilertext);
s[strlen (AslCompilertext)] = 0;
AslCompilerlval.s = s;
@@ -931,6 +932,7 @@ literal (void)
UINT32 State = ASL_NORMAL_CHAR;
UINT32 i = 0;
UINT8 Digit;
+ UINT8 StringLength = 0;
char ConvertBuffer[4];
@@ -942,6 +944,17 @@ literal (void)
InsertLineBuffer ('\"');
while ((StringChar = (char) input()) != EOF)
{
+ StringLength++;
+ if (StringLength == ACPI_MAX_STRING_CONVERSION)
+ {
+ /* Emit error only once, but keep going */
+
+ AslCommonError (ASL_ERROR, ASL_MSG_STRING_LENGTH,
+ Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
+ Gbl_CurrentLineOffset, Gbl_CurrentColumn,
+ Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
+ }
+
InsertLineBuffer (StringChar);
DoCharacter:
diff --git a/sys/contrib/dev/acpica/compiler/aslcompiler.y b/sys/contrib/dev/acpica/compiler/aslcompiler.y
index dec6d33..d7d9773 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompiler.y
+++ b/sys/contrib/dev/acpica/compiler/aslcompiler.y
@@ -3,7 +3,7 @@
/******************************************************************************
*
* Module Name: aslcompiler.y - Bison input file (ASL grammar and actions)
- * $Revision: $
+ * $Revision: 1.92 $
*
*****************************************************************************/
@@ -11,7 +11,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -124,11 +124,11 @@
*/
#define YYINITDEPTH 600
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include "acpi.h"
+#include <contrib/dev/acpica/acpi.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslparse")
@@ -353,6 +353,7 @@ AslLocalAllocate (unsigned int Size);
%token <i> PARSEOP_OBJECTTYPE_OPR
%token <i> PARSEOP_OBJECTTYPE_PKG
%token <i> PARSEOP_OBJECTTYPE_POW
+%token <i> PARSEOP_OBJECTTYPE_PRO
%token <i> PARSEOP_OBJECTTYPE_STR
%token <i> PARSEOP_OBJECTTYPE_THZ
%token <i> PARSEOP_OBJECTTYPE_UNK
@@ -611,6 +612,7 @@ AslLocalAllocate (unsigned int Size);
%type <n> XOrTerm
%type <n> OptionalTermArg
+%type <n> OptionalReturnArg
%type <n> OptionalListString
@@ -626,7 +628,7 @@ AslLocalAllocate (unsigned int Size);
%type <n> MatchOpKeyword
%type <n> SerializeRuleKeyword
%type <n> DMATypeKeyword
-%type <n> BusMasterKeyword
+%type <n> OptionalBusMasterKeyword
%type <n> XferTypeKeyword
%type <n> ResourceTypeKeyword
%type <n> MinKeyword
@@ -634,7 +636,7 @@ AslLocalAllocate (unsigned int Size);
%type <n> DecodeKeyword
%type <n> RangeTypeKeyword
%type <n> MemTypeKeyword
-%type <n> ReadWriteKeyword
+%type <n> OptionalReadWriteKeyword
%type <n> InterruptTypeKeyword
%type <n> InterruptLevel
%type <n> ShareTypeKeyword
@@ -679,7 +681,6 @@ AslLocalAllocate (unsigned int Size);
%type <n> DWordListTail
%type <n> PackageTerm
-%type <n> PackageLengthTerm
%type <n> PackageList
%type <n> PackageListTail
%type <n> PackageElement
@@ -756,6 +757,7 @@ AslLocalAllocate (unsigned int Size);
%type <n> OptionalParameterTypePackage
%type <n> OptionalParameterTypesPackage
%type <n> OptionalReference
+%type <n> OptionalAccessSize
%type <n> TermArgItem
@@ -793,7 +795,7 @@ DefinitionBlockTerm
String ','
DWordConst
')' {TrSetEndLineNumber ($<n>3);}
- '{' ObjectList '}' {$$ = TrLinkChildren ($<n>3,7,$4,$6,$8,$10,$12,$14,$18);}
+ '{' TermList '}' {$$ = TrLinkChildren ($<n>3,7,$4,$6,$8,$10,$12,$14,$18);}
;
/* ACPI 3.0 -- allow semicolons between terms */
@@ -938,19 +940,23 @@ SimpleTarget
/* Rules for specifying the Return type for control methods */
-ParameterTypePackageList
+ParameterTypePackage
: {$$ = NULL;}
| ObjectTypeKeyword {$$ = $1;}
- | ObjectTypeKeyword ','
- ParameterTypePackageList {$$ = TrLinkPeerNodes (2,$1,$3);}
+ | '{''}' {$$ = NULL;}
+ | '{'
+ ObjectTypeKeyword
+ '}' {$$ = $2;}
+ | '{'
+ ParameterTypePackageList
+ '}' {$$ = $2;}
;
-ParameterTypePackage
+ParameterTypePackageList
: {$$ = NULL;}
| ObjectTypeKeyword {$$ = $1;}
- | '{'
- ParameterTypePackageList
- '}' {$$ = $2;}
+ | ObjectTypeKeyword ','
+ ParameterTypePackageList {$$ = TrLinkPeerNodes (2,$1,$3);}
;
OptionalParameterTypePackage
@@ -961,25 +967,32 @@ OptionalParameterTypePackage
/* Rules for specifying the Argument types for control methods */
-ParameterTypesPackageList
+ParameterTypesPackage
: {$$ = NULL;}
| ObjectTypeKeyword {$$ = $1;}
- | ObjectTypeKeyword ','
- ParameterTypesPackage {$$ = TrLinkPeerNodes (2,$1,$3);}
+ | '{''}' {$$ = NULL;}
+ | '{'
+ ObjectTypeKeyword
+ '}' {$$ = $2;}
+ | '{'
+ ParameterTypesPackageList
+ '}' {$$ = $2;}
;
-ParameterTypesPackage
+ParameterTypesPackageList
: {$$ = NULL;}
| ObjectTypeKeyword {$$ = $1;}
- | '{'
- ParameterTypesPackageList
- '}' {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
+ | ParameterTypesPackage {$$ = $1;}
+ | ParameterTypesPackage ','
+ ParameterTypesPackageList {$$ = TrLinkPeerNodes (2,$1,$3);}
+ | ParameterTypesPackage ','
+ ParameterTypesPackage {$$ = TrLinkPeerNodes (2,$1,$3);}
;
OptionalParameterTypesPackage
: {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
| ',' {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
- | ',' ParameterTypesPackage {$$ = $2;}
+ | ',' ParameterTypesPackage {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
;
@@ -1153,7 +1166,7 @@ BankFieldTerm
')' '{'
FieldUnitList '}' {$$ = TrLinkChildren ($<n>3,7,$4,$5,$6,$8,$10,$12,$15);}
| PARSEOP_BANKFIELD '('
- error ')' {$$ = AslDoError(); yyclearin;}
+ error ')' '{' error '}' {$$ = AslDoError(); yyclearin;}
;
FieldUnitList
@@ -1296,7 +1309,7 @@ FieldTerm
')' '{'
FieldUnitList '}' {$$ = TrLinkChildren ($<n>3,5,$4,$6,$8,$10,$13);}
| PARSEOP_FIELD '('
- error ')' {$$ = AslDoError(); yyclearin;}
+ error ')' '{' error '}' {$$ = AslDoError(); yyclearin;}
;
FunctionTerm
@@ -1306,8 +1319,8 @@ FunctionTerm
OptionalParameterTypesPackage
')' '{'
TermList '}' {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
- TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),
- TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL),
+ TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),
+ TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL),
TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),$5,$6,$9);}
| PARSEOP_FUNCTION '('
error ')' {$$ = AslDoError(); yyclearin;}
@@ -1323,7 +1336,7 @@ IndexFieldTerm
')' '{'
FieldUnitList '}' {$$ = TrLinkChildren ($<n>3,6,$4,$5,$7,$9,$11,$14);}
| PARSEOP_INDEXFIELD '('
- error ')' {$$ = AslDoError(); yyclearin;}
+ error ')' '{' error '}' {$$ = AslDoError(); yyclearin;}
;
MethodTerm
@@ -1526,9 +1539,9 @@ ResetTerm
ReturnTerm
: PARSEOP_RETURN '(' {$$ = TrCreateLeafNode (PARSEOP_RETURN);}
- OptionalTermArg
+ OptionalReturnArg
')' {$$ = TrLinkChildren ($<n>3,1,$4);}
- | PARSEOP_RETURN {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_RETURN),0);}
+ | PARSEOP_RETURN {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_RETURN),1,TrCreateLeafNode (PARSEOP_ZERO));}
| PARSEOP_RETURN '('
error ')' {$$ = AslDoError(); yyclearin;}
;
@@ -2107,6 +2120,7 @@ ObjectTypeKeyword
| PARSEOP_OBJECTTYPE_MTX {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_MTX);}
| PARSEOP_OBJECTTYPE_OPR {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_OPR);}
| PARSEOP_OBJECTTYPE_POW {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_POW);}
+ | PARSEOP_OBJECTTYPE_PRO {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_PRO);}
| PARSEOP_OBJECTTYPE_THZ {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_THZ);}
| PARSEOP_OBJECTTYPE_BFF {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_BFF);}
| PARSEOP_OBJECTTYPE_DDB {$$ = TrCreateLeafNode (PARSEOP_OBJECTTYPE_DDB);}
@@ -2181,11 +2195,6 @@ DMATypeKeyword
| PARSEOP_DMATYPE_F {$$ = TrCreateLeafNode (PARSEOP_DMATYPE_F);}
;
-BusMasterKeyword
- : PARSEOP_BUSMASTERTYPE_MASTER {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
- | PARSEOP_BUSMASTERTYPE_NOTMASTER {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_NOTMASTER);}
- ;
-
XferTypeKeyword
: PARSEOP_XFERTYPE_8 {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8);}
| PARSEOP_XFERTYPE_8_16 {$$ = TrCreateLeafNode (PARSEOP_XFERTYPE_8_16);}
@@ -2225,8 +2234,9 @@ MemTypeKeyword
| PARSEOP_MEMTYPE_NONCACHEABLE {$$ = TrCreateLeafNode (PARSEOP_MEMTYPE_NONCACHEABLE);}
;
-ReadWriteKeyword
- : PARSEOP_READWRITETYPE_BOTH {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
+OptionalReadWriteKeyword
+ : {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
+ | PARSEOP_READWRITETYPE_BOTH {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_BOTH);}
| PARSEOP_READWRITETYPE_READONLY {$$ = TrCreateLeafNode (PARSEOP_READWRITETYPE_READONLY);}
;
@@ -2419,11 +2429,7 @@ DWordListTail
;
PackageTerm
- : PARSEOP_PACKAGE '(' {$$ = TrCreateLeafNode (PARSEOP_PACKAGE);}
- PackageLengthTerm
- ')' '{'
- PackageList '}' {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
- | PARSEOP_PACKAGE '(' {$$ = TrCreateLeafNode (PARSEOP_VAR_PACKAGE);}
+ : PARSEOP_PACKAGE '(' {$$ = TrCreateLeafNode (PARSEOP_VAR_PACKAGE);}
VarPackageLengthTerm
')' '{'
PackageList '}' {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
@@ -2431,13 +2437,9 @@ PackageTerm
error ')' {$$ = AslDoError(); yyclearin;}
;
-PackageLengthTerm
- : {$$ = NULL;}
- | ByteConstExpr {}
- ;
-
VarPackageLengthTerm
- : TermArg {}
+ : {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
+ | TermArg {$$ = $1;}
;
PackageList
@@ -2524,11 +2526,11 @@ ResourceMacroTerm
DMATerm
: PARSEOP_DMA '(' {$$ = TrCreateLeafNode (PARSEOP_DMA);}
DMATypeKeyword
- ',' BusMasterKeyword
+ OptionalBusMasterKeyword
',' XferTypeKeyword
OptionalNameString_Last
')' '{'
- ByteList '}' {$$ = TrLinkChildren ($<n>3,5,$4,$6,$8,$9,$12);}
+ ByteList '}' {$$ = TrLinkChildren ($<n>3,5,$4,$5,$7,$8,$11);}
| PARSEOP_DMA '('
error ')' {$$ = AslDoError(); yyclearin;}
;
@@ -2562,7 +2564,7 @@ DWordMemoryTerm
OptionalMinType
OptionalMaxType
OptionalMemType
- ',' ReadWriteKeyword
+ ',' OptionalReadWriteKeyword
',' DWordConstExpr
',' DWordConstExpr
',' DWordConstExpr
@@ -2635,7 +2637,7 @@ ExtendedMemoryTerm
OptionalMinType
OptionalMaxType
OptionalMemType
- ',' ReadWriteKeyword
+ ',' OptionalReadWriteKeyword
',' QWordConstExpr
',' QWordConstExpr
',' QWordConstExpr
@@ -2731,7 +2733,7 @@ IRQTerm
Memory24Term
: PARSEOP_MEMORY24 '(' {$$ = TrCreateLeafNode (PARSEOP_MEMORY24);}
- ReadWriteKeyword
+ OptionalReadWriteKeyword
',' WordConstExpr
',' WordConstExpr
',' WordConstExpr
@@ -2744,7 +2746,7 @@ Memory24Term
Memory32FixedTerm
: PARSEOP_MEMORY32FIXED '(' {$$ = TrCreateLeafNode (PARSEOP_MEMORY32FIXED);}
- ReadWriteKeyword
+ OptionalReadWriteKeyword
',' DWordConstExpr
',' DWordConstExpr
OptionalNameString_Last
@@ -2755,7 +2757,7 @@ Memory32FixedTerm
Memory32Term
: PARSEOP_MEMORY32 '(' {$$ = TrCreateLeafNode (PARSEOP_MEMORY32);}
- ReadWriteKeyword
+ OptionalReadWriteKeyword
',' DWordConstExpr
',' DWordConstExpr
',' DWordConstExpr
@@ -2795,7 +2797,7 @@ QWordMemoryTerm
OptionalMinType
OptionalMaxType
OptionalMemType
- ',' ReadWriteKeyword
+ ',' OptionalReadWriteKeyword
',' QWordConstExpr
',' QWordConstExpr
',' QWordConstExpr
@@ -2838,7 +2840,8 @@ RegisterTerm
',' ByteConstExpr
',' ByteConstExpr
',' QWordConstExpr
- ')' {$$ = TrLinkChildren ($<n>3,4,$4,$6,$8,$10);}
+ OptionalAccessSize
+ ')' {$$ = TrLinkChildren ($<n>3,5,$4,$6,$8,$10,$11);}
| PARSEOP_REGISTER '('
error ')' {$$ = AslDoError(); yyclearin;}
;
@@ -2962,6 +2965,12 @@ AmlPackageLengthTerm
: Integer {$$ = TrUpdateNode (PARSEOP_PACKAGE_LENGTH,(ACPI_PARSE_OBJECT *) $1);}
;
+OptionalBusMasterKeyword
+ : ',' {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
+ | ',' PARSEOP_BUSMASTERTYPE_MASTER {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_MASTER);}
+ | ',' PARSEOP_BUSMASTERTYPE_NOTMASTER {$$ = TrCreateLeafNode (PARSEOP_BUSMASTERTYPE_NOTMASTER);}
+ ;
+
OptionalAccessAttribTerm
: {$$ = NULL;}
| ',' {$$ = NULL;}
@@ -2969,6 +2978,12 @@ OptionalAccessAttribTerm
| ',' AccessAttribKeyword {$$ = $2;}
;
+OptionalAccessSize
+ : {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
+ | ',' {$$ = TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0);}
+ | ',' ByteConstExpr {$$ = $2;}
+ ;
+
OptionalAddressRange
: {$$ = NULL;}
| ',' {$$ = NULL;}
@@ -3087,6 +3102,11 @@ OptionalTermArg
| TermArg {$$ = $1;}
;
+OptionalReturnArg
+ : {$$ = TrCreateLeafNode (PARSEOP_ZERO);} /* Placeholder is a ZeroOp object */
+ | TermArg {$$ = $1;}
+ ;
+
OptionalType
: {$$ = NULL;}
| ',' {$$ = NULL;}
diff --git a/sys/contrib/dev/acpica/compiler/asldefine.h b/sys/contrib/dev/acpica/compiler/asldefine.h
new file mode 100644
index 0000000..0f3a2f4
--- /dev/null
+++ b/sys/contrib/dev/acpica/compiler/asldefine.h
@@ -0,0 +1,211 @@
+
+/******************************************************************************
+ *
+ * Module Name: asldefine.h - Common defines for the iASL compiler
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights. You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code. No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision. In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution. In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government. In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+
+#ifndef __ASLDEFINE_H
+#define __ASLDEFINE_H
+
+
+/*
+ * Compiler versions and names
+ */
+#define CompilerCreatorRevision ACPI_CA_VERSION
+
+#define IntelAcpiCA "Intel ACPI Component Architecture"
+#define CompilerId "ASL Optimizing Compiler"
+#define DisassemblerId "AML Disassembler"
+#define CompilerCopyright "Copyright (C) 2000 - 2005 Intel Corporation"
+#define CompilerCompliance "Supports ACPI Specification Revision 3.0"
+#define CompilerName "iasl"
+#define CompilerCreatorId "INTL"
+
+
+/* Configuration constants */
+
+#define ASL_MAX_ERROR_COUNT 200
+#define ASL_NODE_CACHE_SIZE 1024
+#define ASL_STRING_CACHE_SIZE 32768
+
+#define ASL_FIRST_PARSE_OPCODE PARSEOP_ACCESSAS
+#define ASL_YYTNAME_START 3
+
+#define ASL_PARSE_OPCODE_BASE PARSEOP_ACCESSAS /* First Lex type */
+
+
+/*
+ * Macros
+ */
+#define ASL_RESDESC_OFFSET(m) ACPI_OFFSET (AML_RESOURCE, m)
+#define ASL_PTR_DIFF(a,b) ((UINT8 *)(b) - (UINT8 *)(a))
+#define ASL_PTR_ADD(a,b) ((UINT8 *)(a) = ((UINT8 *)(a) + (b)))
+#define ASL_GET_CHILD_NODE(a) (a)->Asl.Child
+#define ASL_GET_PEER_NODE(a) (a)->Asl.Next
+#define OP_TABLE_ENTRY(a,b,c,d) {b,d,a,c}
+
+
+/* Internal AML opcodes */
+
+#define AML_RAW_DATA_BYTE (UINT16) 0xAA01 /* write one raw byte */
+#define AML_RAW_DATA_WORD (UINT16) 0xAA02 /* write 2 raw bytes */
+#define AML_RAW_DATA_DWORD (UINT16) 0xAA04 /* write 4 raw bytes */
+#define AML_RAW_DATA_QWORD (UINT16) 0xAA08 /* write 8 raw bytes */
+#define AML_RAW_DATA_BUFFER (UINT16) 0xAA0B /* raw buffer with length */
+#define AML_RAW_DATA_CHAIN (UINT16) 0xAA0C /* chain of raw buffers */
+#define AML_PACKAGE_LENGTH (UINT16) 0xAA10
+#define AML_UNASSIGNED_OPCODE (UINT16) 0xEEEE
+#define AML_DEFAULT_ARG_OP (UINT16) 0xDDDD
+
+
+/* filename suffixes for output files */
+
+#define FILE_SUFFIX_AML_CODE "aml"
+#define FILE_SUFFIX_LISTING "lst"
+#define FILE_SUFFIX_HEX_DUMP "hex"
+#define FILE_SUFFIX_DEBUG "txt"
+#define FILE_SUFFIX_SOURCE "src"
+#define FILE_SUFFIX_NAMESPACE "nsp"
+#define FILE_SUFFIX_ASM_SOURCE "asm"
+#define FILE_SUFFIX_C_SOURCE "c"
+#define FILE_SUFFIX_DISASSEMBLY "dsl"
+#define FILE_SUFFIX_ASM_INCLUDE "inc"
+#define FILE_SUFFIX_C_INCLUDE "h"
+
+
+/* Misc */
+
+#define ASL_EXTERNAL_METHOD 255
+#define ASL_ABORT TRUE
+#define ASL_NO_ABORT FALSE
+
+
+/* Support for reserved method names */
+
+#define ACPI_VALID_RESERVED_NAME_MAX 0x80000000
+#define ACPI_NOT_RESERVED_NAME ACPI_UINT32_MAX
+#define ACPI_PREDEFINED_NAME (ACPI_UINT32_MAX - 1)
+#define ACPI_EVENT_RESERVED_NAME (ACPI_UINT32_MAX - 2)
+#define ACPI_COMPILER_RESERVED_NAME (ACPI_UINT32_MAX - 3)
+
+
+/* String to Integer conversion */
+
+#define NEGATIVE 1
+#define POSITIVE 0
+
+
+#endif /* ASLDEFINE.H */
+
diff --git a/sys/contrib/dev/acpica/compiler/aslerror.c b/sys/contrib/dev/acpica/compiler/aslerror.c
index ebc622f..7031fde 100644
--- a/sys/contrib/dev/acpica/compiler/aslerror.c
+++ b/sys/contrib/dev/acpica/compiler/aslerror.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: aslerror - Error handling and statistics
- * $Revision: 83 $
+ * $Revision: 1.88 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,11 +116,17 @@
*****************************************************************************/
#define ASL_EXCEPTIONS
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslerror")
+/* Local prototypes */
+
+static void
+AeAddToErrorLog (
+ ASL_ERROR_MSG *Enode);
+
/*******************************************************************************
*
@@ -136,7 +142,7 @@
*
******************************************************************************/
-void
+static void
AeAddToErrorLog (
ASL_ERROR_MSG *Enode)
{
@@ -189,7 +195,7 @@ AeAddToErrorLog (
*
* FUNCTION: AePrintException
*
- * PARAMETERS: Where - Where to send the message
+ * PARAMETERS: FileId - ID of output file
* Enode - Error node to print
* Header - Additional text before each message
*
@@ -211,7 +217,8 @@ AePrintException (
char *Header)
{
UINT8 SourceByte;
- UINT32 Actual;
+ int Actual;
+ size_t RActual;
UINT32 MsgLength;
char *MainMessage;
char *ExtraMessage;
@@ -221,8 +228,10 @@ AePrintException (
FILE *SourceFile;
- /* Only listing files have a header, and remarks/optimizations are always output */
-
+ /*
+ * Only listing files have a header, and remarks/optimizations
+ * are always output
+ */
if (!Header)
{
/* Ignore remarks if requested */
@@ -274,23 +283,26 @@ AePrintException (
* Seek to the offset in the combined source file, read the source
* line, and write it to the output.
*/
- Actual = fseek (SourceFile, (long) Enode->LogicalByteOffset, SEEK_SET);
+ Actual = fseek (SourceFile, (long) Enode->LogicalByteOffset,
+ (int) SEEK_SET);
if (Actual)
{
- fprintf (OutputFile, "[*** iASL: Seek error on source code temp file ***]");
+ fprintf (OutputFile,
+ "[*** iASL: Seek error on source code temp file ***]");
}
else
{
- Actual = fread (&SourceByte, 1, 1, SourceFile);
- if (!Actual)
+ RActual = fread (&SourceByte, 1, 1, SourceFile);
+ if (!RActual)
{
- fprintf (OutputFile, "[*** iASL: Read error on source code temp file ***]");
+ fprintf (OutputFile,
+ "[*** iASL: Read error on source code temp file ***]");
}
- else while (Actual && SourceByte && (SourceByte != '\n'))
+ else while (RActual && SourceByte && (SourceByte != '\n'))
{
fwrite (&SourceByte, 1, 1, OutputFile);
- Actual = fread (&SourceByte, 1, 1, SourceFile);
+ RActual = fread (&SourceByte, 1, 1, SourceFile);
}
}
fprintf (OutputFile, "\n");
@@ -373,9 +385,7 @@ AePrintException (
}
else
{
- fprintf (OutputFile, " %s %s\n\n",
- MainMessage,
- ExtraMessage);
+ fprintf (OutputFile, " %s %s\n\n", MainMessage, ExtraMessage);
}
}
}
@@ -423,7 +433,7 @@ AePrintErrorLog (
* Filename - source filename
* ExtraMessage - additional error message
*
- * RETURN: New error node for this error
+ * RETURN: None
*
* DESCRIPTION: Create a new error node and add it to the error log
*
@@ -598,10 +608,11 @@ AslCoreSubsystemError (
*
* PARAMETERS: CompilerMessage - Error message from the parser
*
- * RETURN: Status?
+ * RETURN: Status (0 for now)
*
* DESCRIPTION: Report an error situation discovered in a production
- * NOTE: don't change the name of this function.
+ * NOTE: don't change the name of this function, it is called
+ * from the auto-generated parser.
*
******************************************************************************/
diff --git a/sys/contrib/dev/acpica/compiler/aslfiles.c b/sys/contrib/dev/acpica/compiler/aslfiles.c
index a8a7f05..7fd26f8 100644
--- a/sys/contrib/dev/acpica/compiler/aslfiles.c
+++ b/sys/contrib/dev/acpica/compiler/aslfiles.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: aslfiles - file I/O suppoert
- * $Revision: 47 $
+ * $Revision: 1.52 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -115,12 +115,31 @@
*
*****************************************************************************/
-#include "aslcompiler.h"
-#include "acapps.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
+#include <contrib/dev/acpica/acapps.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslfiles")
+/* Local prototypes */
+
+static void
+FlOpenFile (
+ UINT32 FileId,
+ char *Filename,
+ char *Mode);
+
+static FILE *
+FlOpenLocalFile (
+ char *LocalName,
+ char *Mode);
+
+#ifdef ACPI_OBSOLETE_FUNCTIONS
+ACPI_STATUS
+FlParseInputPathname (
+ char *InputFilename);
+#endif
+
/*******************************************************************************
*
@@ -136,7 +155,8 @@
******************************************************************************/
void
-AslAbort (void)
+AslAbort (
+ void)
{
AePrintErrorLog (ASL_FILE_STDOUT);
@@ -147,7 +167,7 @@ AslAbort (void)
AePrintErrorLog (ASL_FILE_STDERR);
}
- exit (0);
+ exit (1);
}
@@ -165,7 +185,7 @@ AslAbort (void)
*
******************************************************************************/
-FILE *
+static FILE *
FlOpenLocalFile (
char *LocalName,
char *Mode)
@@ -199,7 +219,8 @@ FlFileError (
UINT8 ErrorId)
{
- sprintf (MsgBuffer, "\"%s\" (%s)", Gbl_Files[FileId].Filename, strerror (errno));
+ sprintf (MsgBuffer, "\"%s\" (%s)", Gbl_Files[FileId].Filename,
+ strerror (errno));
AslCommonError (ASL_ERROR, ErrorId, 0, 0, 0, 0, NULL, MsgBuffer);
}
@@ -212,14 +233,14 @@ FlFileError (
* Filename - file pathname to open
* Mode - Open mode for fopen
*
- * RETURN: File descriptor
+ * RETURN: None
*
* DESCRIPTION: Open a file.
* NOTE: Aborts compiler on any error.
*
******************************************************************************/
-void
+static void
FlOpenFile (
UINT32 FileId,
char *Filename,
@@ -293,7 +314,7 @@ FlReadFile (
* Buffer - Data to write
* Length - Amount of data to write
*
- * RETURN: Status
+ * RETURN: None
*
* DESCRIPTION: Write data to an open file.
* NOTE: Aborts compiler on any error.
@@ -363,7 +384,7 @@ FlPrintFile (
* PARAMETERS: FileId - Index into file info array
* Offset - Absolute byte offset in file
*
- * RETURN: Status
+ * RETURN: None
*
* DESCRIPTION: Seek to absolute offset
* NOTE: Aborts compiler on any error.
@@ -393,7 +414,7 @@ FlSeekFile (
*
* PARAMETERS: FileId - Index into file info array
*
- * RETURN: Status
+ * RETURN: None
*
* DESCRIPTION: Close an open file. Aborts compiler on error
*
@@ -487,7 +508,8 @@ FlOpenIncludeFile (
/* Prepend the directory pathname and open the include file */
- DbgPrint (ASL_PARSE_OUTPUT, "\nOpen include file: path %s\n\n", Op->Asl.Value.String);
+ DbgPrint (ASL_PARSE_OUTPUT, "\nOpen include file: path %s\n\n",
+ Op->Asl.Value.String);
IncFile = FlOpenLocalFile (Op->Asl.Value.String, "r");
if (!IncFile)
{
@@ -504,72 +526,6 @@ FlOpenIncludeFile (
/*******************************************************************************
*
- * FUNCTION: FlParseInputPathname
- *
- * PARAMETERS: InputFilename - The user-specified ASL source file to be
- * compiled
- *
- * RETURN: Status
- *
- * DESCRIPTION: Split the input path into a directory and filename part
- * 1) Directory part used to open include files
- * 2) Filename part used to generate output filenames
- *
- ******************************************************************************/
-
-ACPI_STATUS
-FlParseInputPathname (
- char *InputFilename)
-{
- char *Substring;
-
-
- if (!InputFilename)
- {
- return (AE_OK);
- }
-
- /* Get the path to the input filename's directory */
-
- Gbl_DirectoryPath = strdup (InputFilename);
- if (!Gbl_DirectoryPath)
- {
- return (AE_NO_MEMORY);
- }
-
- Substring = strrchr (Gbl_DirectoryPath, '\\');
- if (!Substring)
- {
- Substring = strrchr (Gbl_DirectoryPath, '/');
- if (!Substring)
- {
- Substring = strrchr (Gbl_DirectoryPath, ':');
- }
- }
-
- if (!Substring)
- {
- Gbl_DirectoryPath[0] = 0;
- if (Gbl_UseDefaultAmlFilename)
- {
- Gbl_OutputFilenamePrefix = strdup (InputFilename);
- }
- }
- else
- {
- if (Gbl_UseDefaultAmlFilename)
- {
- Gbl_OutputFilenamePrefix = strdup (Substring + 1);
- }
- *(Substring+1) = 0;
- }
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: FlOpenInputFile
*
* PARAMETERS: InputFilename - The user-specified ASL source file to be
@@ -588,7 +544,6 @@ FlOpenInputFile (
char *InputFilename)
{
-
/* Open the input ASL file, text mode */
FlOpenFile (ASL_FILE_INPUT, InputFilename, "r");
@@ -628,7 +583,8 @@ FlOpenAmlOutputFile (
Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_AML_CODE);
if (!Filename)
{
- AslCommonError (ASL_ERROR, ASL_MSG_OUTPUT_FILENAME, 0, 0, 0, 0, NULL, NULL);
+ AslCommonError (ASL_ERROR, ASL_MSG_OUTPUT_FILENAME,
+ 0, 0, 0, 0, NULL, NULL);
return (AE_ERROR);
}
}
@@ -665,7 +621,8 @@ FlOpenMiscOutputFiles (
Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_SOURCE);
if (!Filename)
{
- AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL);
+ AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
+ 0, 0, 0, 0, NULL, NULL);
return (AE_ERROR);
}
@@ -683,7 +640,8 @@ FlOpenMiscOutputFiles (
Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_LISTING);
if (!Filename)
{
- AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL);
+ AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
+ 0, 0, 0, 0, NULL, NULL);
return (AE_ERROR);
}
@@ -702,7 +660,8 @@ FlOpenMiscOutputFiles (
Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_ASM_SOURCE);
if (!Filename)
{
- AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL);
+ AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
+ 0, 0, 0, 0, NULL, NULL);
return (AE_ERROR);
}
@@ -721,7 +680,8 @@ FlOpenMiscOutputFiles (
Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_SOURCE);
if (!Filename)
{
- AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL);
+ AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
+ 0, 0, 0, 0, NULL, NULL);
return (AE_ERROR);
}
@@ -741,7 +701,8 @@ FlOpenMiscOutputFiles (
Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_ASM_INCLUDE);
if (!Filename)
{
- AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL);
+ AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
+ 0, 0, 0, 0, NULL, NULL);
return (AE_ERROR);
}
@@ -760,7 +721,8 @@ FlOpenMiscOutputFiles (
Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_INCLUDE);
if (!Filename)
{
- AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL);
+ AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
+ 0, 0, 0, 0, NULL, NULL);
return (AE_ERROR);
}
@@ -780,7 +742,8 @@ FlOpenMiscOutputFiles (
Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_HEX_DUMP);
if (!Filename)
{
- AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL);
+ AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
+ 0, 0, 0, 0, NULL, NULL);
return (AE_ERROR);
}
@@ -799,7 +762,8 @@ FlOpenMiscOutputFiles (
Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_NAMESPACE);
if (!Filename)
{
- AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME, 0, 0, 0, 0, NULL, NULL);
+ AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
+ 0, 0, 0, 0, NULL, NULL);
return (AE_ERROR);
}
@@ -818,7 +782,8 @@ FlOpenMiscOutputFiles (
Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_DEBUG);
if (!Filename)
{
- AslCommonError (ASL_ERROR, ASL_MSG_DEBUG_FILENAME, 0, 0, 0, 0, NULL, NULL);
+ AslCommonError (ASL_ERROR, ASL_MSG_DEBUG_FILENAME,
+ 0, 0, 0, 0, NULL, NULL);
return (AE_ERROR);
}
@@ -827,7 +792,8 @@ FlOpenMiscOutputFiles (
/* TBD: hide this behind a FlReopenFile function */
Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Filename = Filename;
- Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle = freopen (Filename, "w+t", stderr);
+ Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle =
+ freopen (Filename, "w+t", stderr);
AslCompilerSignon (ASL_FILE_DEBUG_OUTPUT);
AslCompilerFileHeader (ASL_FILE_DEBUG_OUTPUT);
@@ -837,3 +803,71 @@ FlOpenMiscOutputFiles (
}
+#ifdef ACPI_OBSOLETE_FUNCTIONS
+/*******************************************************************************
+ *
+ * FUNCTION: FlParseInputPathname
+ *
+ * PARAMETERS: InputFilename - The user-specified ASL source file to be
+ * compiled
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Split the input path into a directory and filename part
+ * 1) Directory part used to open include files
+ * 2) Filename part used to generate output filenames
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+FlParseInputPathname (
+ char *InputFilename)
+{
+ char *Substring;
+
+
+ if (!InputFilename)
+ {
+ return (AE_OK);
+ }
+
+ /* Get the path to the input filename's directory */
+
+ Gbl_DirectoryPath = strdup (InputFilename);
+ if (!Gbl_DirectoryPath)
+ {
+ return (AE_NO_MEMORY);
+ }
+
+ Substring = strrchr (Gbl_DirectoryPath, '\\');
+ if (!Substring)
+ {
+ Substring = strrchr (Gbl_DirectoryPath, '/');
+ if (!Substring)
+ {
+ Substring = strrchr (Gbl_DirectoryPath, ':');
+ }
+ }
+
+ if (!Substring)
+ {
+ Gbl_DirectoryPath[0] = 0;
+ if (Gbl_UseDefaultAmlFilename)
+ {
+ Gbl_OutputFilenamePrefix = strdup (InputFilename);
+ }
+ }
+ else
+ {
+ if (Gbl_UseDefaultAmlFilename)
+ {
+ Gbl_OutputFilenamePrefix = strdup (Substring + 1);
+ }
+ *(Substring+1) = 0;
+ }
+
+ return (AE_OK);
+}
+#endif
+
+
diff --git a/sys/contrib/dev/acpica/compiler/aslfold.c b/sys/contrib/dev/acpica/compiler/aslfold.c
index 73d100e..8ee845f 100644
--- a/sys/contrib/dev/acpica/compiler/aslfold.c
+++ b/sys/contrib/dev/acpica/compiler/aslfold.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: aslfold - Constant folding
- * $Revision: 9 $
+ * $Revision: 1.18 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,16 +116,36 @@
*****************************************************************************/
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
-#include "amlcode.h"
+#include <contrib/dev/acpica/amlcode.h>
-#include "acdispat.h"
-#include "acparser.h"
+#include <contrib/dev/acpica/acdispat.h>
+#include <contrib/dev/acpica/acparser.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslfold")
+/* Local prototypes */
+
+static ACPI_STATUS
+OpcAmlEvaluationWalk1 (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
+
+static ACPI_STATUS
+OpcAmlEvaluationWalk2 (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
+
+static ACPI_STATUS
+OpcAmlCheckForConstant (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
+
/*******************************************************************************
*
@@ -139,7 +159,7 @@
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
OpcAmlEvaluationWalk1 (
ACPI_PARSE_OBJECT *Op,
UINT32 Level,
@@ -186,7 +206,7 @@ OpcAmlEvaluationWalk1 (
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
OpcAmlEvaluationWalk2 (
ACPI_PARSE_OBJECT *Op,
UINT32 Level,
@@ -232,7 +252,7 @@ OpcAmlEvaluationWalk2 (
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
OpcAmlCheckForConstant (
ACPI_PARSE_OBJECT *Op,
UINT32 Level,
@@ -254,11 +274,13 @@ OpcAmlCheckForConstant (
if (Op->Asl.CompileFlags & NODE_IS_TARGET)
{
- DbgPrint (ASL_PARSE_OUTPUT, "**** Valid Target, cannot reduce ****\n");
+ DbgPrint (ASL_PARSE_OUTPUT,
+ "**** Valid Target, cannot reduce ****\n");
}
else
{
- DbgPrint (ASL_PARSE_OUTPUT, "**** Not a Type 3/4/5 opcode ****\n");
+ DbgPrint (ASL_PARSE_OUTPUT,
+ "**** Not a Type 3/4/5 opcode ****\n");
}
if (WalkState->WalkType == ACPI_WALK_CONST_OPTIONAL)
@@ -276,11 +298,13 @@ OpcAmlCheckForConstant (
*/
if (Op->Asl.CompileFlags & NODE_IS_TARGET)
{
- AslError (ASL_ERROR, ASL_MSG_INVALID_TARGET, Op, Op->Asl.ParseOpName);
+ AslError (ASL_ERROR, ASL_MSG_INVALID_TARGET, Op,
+ Op->Asl.ParseOpName);
}
else
{
- AslError (ASL_ERROR, ASL_MSG_INVALID_CONSTANT_OP, Op, Op->Asl.ParseOpName);
+ AslError (ASL_ERROR, ASL_MSG_INVALID_CONSTANT_OP, Op,
+ Op->Asl.ParseOpName);
}
return (AE_TYPE);
@@ -340,9 +364,8 @@ OpcAmlConstantWalk (
return (AE_OK);
}
- /*
- * Set the walk type based on the reduction used for this op
- */
+ /* Set the walk type based on the reduction used for this op */
+
if (Op->Asl.CompileFlags & NODE_IS_TERM_ARG)
{
/* Op is a TermArg, constant folding is merely optional */
@@ -374,8 +397,10 @@ OpcAmlConstantWalk (
WalkState->CallerReturnDesc = &ObjDesc;
WalkState->WalkType = WalkType;
- /* Examine the entire subtree -- all nodes must be constants or type 3/4/5 opcodes */
-
+ /*
+ * Examine the entire subtree -- all nodes must be constants
+ * or type 3/4/5 opcodes
+ */
Status = TrWalkParseTree (Op, ASL_WALK_VISIT_DOWNWARD,
OpcAmlCheckForConstant, NULL, WalkState);
@@ -414,10 +439,10 @@ OpcAmlConstantWalk (
OriginalParentOp = Op->Common.Parent;
Op->Common.Parent = RootOp;
- /*
- * Hand off the subtree to the AML interpreter
- */
- Status = TrWalkParseTree (Op, ASL_WALK_VISIT_TWICE, OpcAmlEvaluationWalk1, OpcAmlEvaluationWalk2, WalkState);
+ /* Hand off the subtree to the AML interpreter */
+
+ Status = TrWalkParseTree (Op, ASL_WALK_VISIT_TWICE,
+ OpcAmlEvaluationWalk1, OpcAmlEvaluationWalk2, WalkState);
Op->Common.Parent = OriginalParentOp;
/* TBD: we really *should* release the RootOp node */
@@ -436,7 +461,10 @@ OpcAmlConstantWalk (
{
/* We could not resolve the subtree for some reason */
- AslError (ASL_ERROR, ASL_MSG_CONSTANT_EVALUATION, Op, Op->Asl.ParseOpName);
+ AslCoreSubsystemError (Op, Status,
+ "Failure during constant evaluation", FALSE);
+ AslError (ASL_ERROR, ASL_MSG_CONSTANT_EVALUATION, Op,
+ Op->Asl.ParseOpName);
/* Set the subtree value to ZERO anyway. Eliminates further errors */
@@ -446,7 +474,8 @@ OpcAmlConstantWalk (
}
else
{
- AslError (ASL_OPTIMIZATION, ASL_MSG_CONSTANT_FOLDED, Op, Op->Asl.ParseOpName);
+ AslError (ASL_OPTIMIZATION, ASL_MSG_CONSTANT_FOLDED, Op,
+ Op->Asl.ParseOpName);
/*
* Because we know we executed type 3/4/5 opcodes above, we know that
@@ -460,7 +489,8 @@ OpcAmlConstantWalk (
Op->Common.Value.Integer = ObjDesc->Integer.Value;
OpcSetOptimalIntegerSize (Op);
- DbgPrint (ASL_PARSE_OUTPUT, "Constant expression reduced to (INTEGER) %8.8X%8.8X\n",
+ DbgPrint (ASL_PARSE_OUTPUT,
+ "Constant expression reduced to (INTEGER) %8.8X%8.8X\n",
ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
break;
@@ -472,7 +502,8 @@ OpcAmlConstantWalk (
Op->Asl.AmlLength = ACPI_STRLEN (ObjDesc->String.Pointer) + 1;
Op->Common.Value.String = ObjDesc->String.Pointer;
- DbgPrint (ASL_PARSE_OUTPUT, "Constant expression reduced to (STRING) %s\n",
+ DbgPrint (ASL_PARSE_OUTPUT,
+ "Constant expression reduced to (STRING) %s\n",
Op->Common.Value.String);
break;
@@ -482,6 +513,7 @@ OpcAmlConstantWalk (
Op->Asl.ParseOpcode = PARSEOP_BUFFER;
Op->Common.AmlOpcode = AML_BUFFER_OP;
+ Op->Asl.CompileFlags = NODE_AML_PACKAGE;
UtSetParseOpName (Op);
/* Child node is the buffer length */
@@ -509,7 +541,8 @@ OpcAmlConstantWalk (
Op->Asl.Next = RootOp;
Op = RootOp;
- DbgPrint (ASL_PARSE_OUTPUT, "Constant expression reduced to (BUFFER) length %X\n",
+ DbgPrint (ASL_PARSE_OUTPUT,
+ "Constant expression reduced to (BUFFER) length %X\n",
ObjDesc->Buffer.Length);
break;
diff --git a/sys/contrib/dev/acpica/compiler/aslglobal.h b/sys/contrib/dev/acpica/compiler/aslglobal.h
index 6dfe3cb..3b3306d 100644
--- a/sys/contrib/dev/acpica/compiler/aslglobal.h
+++ b/sys/contrib/dev/acpica/compiler/aslglobal.h
@@ -3,7 +3,7 @@
/******************************************************************************
*
* Module Name: aslglobal.h - Global variable definitions
- * $Revision: 44 $
+ * $Revision: 1.50 $
*
*****************************************************************************/
@@ -11,7 +11,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -125,6 +125,8 @@
* Global variables. Defined in aslmain.c only, externed in all other files
*/
+#undef ASL_EXTERN
+
#ifdef _DECLARE_GLOBALS
#define ASL_EXTERN
#define ASL_INIT_GLOBAL(a,b) (a)=(b)
@@ -169,6 +171,8 @@ extern UINT32 Gbl_ExceptionCount[];
/* Option flags */
+ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_Acpi2, FALSE);
+ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_CheckForAscii, FALSE);
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_UseDefaultAmlFilename, TRUE);
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_NsOutputFlag, FALSE);
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_DebugFlag, FALSE);
@@ -226,6 +230,7 @@ ASL_EXTERN UINT32 ASL_INIT_GLOBAL (TotalFolds, 0);
/* Misc */
ASL_EXTERN UINT8 ASL_INIT_GLOBAL (Gbl_RevisionOverride, 0);
+ASL_EXTERN UINT8 ASL_INIT_GLOBAL (Gbl_TempCount, 0);
ASL_EXTERN ACPI_PARSE_OBJECT ASL_INIT_GLOBAL (*RootNode, NULL);
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (Gbl_TableLength, 0);
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (Gbl_SourceLine, 0);
@@ -234,7 +239,6 @@ ASL_EXTERN ACPI_PARSE_OBJECT ASL_INIT_GLOBAL (*Gbl_NodeCacheNext, NULL);
ASL_EXTERN ACPI_PARSE_OBJECT ASL_INIT_GLOBAL (*Gbl_NodeCacheLast, NULL);
ASL_EXTERN char ASL_INIT_GLOBAL (*Gbl_StringCacheNext, NULL);
ASL_EXTERN char ASL_INIT_GLOBAL (*Gbl_StringCacheLast, NULL);
-ASL_EXTERN UINT32 ASL_INIT_GLOBAL (Gbl_TempCount, 0);
ASL_EXTERN ACPI_PARSE_OBJECT *Gbl_FirstLevelInsertionNode;
@@ -254,8 +258,13 @@ ASL_EXTERN FILE *AcpiGbl_DebugFile; /* Placeholder for oswin
ASL_EXTERN ASL_ANALYSIS_WALK_INFO AnalysisWalkInfo;
ASL_EXTERN ACPI_TABLE_HEADER TableHeader;
extern const ASL_RESERVED_INFO ReservedMethods[];
-ASL_EXTERN ASL_EVENT_INFO AslGbl_Events[21];
+/* Event timing */
+
+#define ASL_NUM_EVENTS 19
+ASL_EXTERN ASL_EVENT_INFO AslGbl_Events[ASL_NUM_EVENTS];
+ASL_EXTERN UINT8 AslGbl_NextEvent;
+ASL_EXTERN UINT8 AslGbl_NamespaceEvent;
/* Scratch buffers */
diff --git a/sys/contrib/dev/acpica/compiler/asllength.c b/sys/contrib/dev/acpica/compiler/asllength.c
index d624b88..7d44ff0 100644
--- a/sys/contrib/dev/acpica/compiler/asllength.c
+++ b/sys/contrib/dev/acpica/compiler/asllength.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: asllength - Tree walk to determine package and opcode lengths
- * $Revision: 31 $
+ * $Revision: 1.35 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,14 +116,33 @@
*****************************************************************************/
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
-#include "amlcode.h"
+#include <contrib/dev/acpica/amlcode.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("asllength")
+/* Local prototypes */
+
+static UINT8
+CgGetPackageLenByteCount (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 PackageLength);
+
+static void
+CgGenerateAmlOpcodeLength (
+ ACPI_PARSE_OBJECT *Op);
+
+
+#ifdef ACPI_OBSOLETE_FUNCTIONS
+void
+LnAdjustLengthToRoot (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 LengthDelta);
+#endif
+
/*******************************************************************************
*
@@ -199,47 +218,9 @@ LnPackageLengthWalk (
/*******************************************************************************
*
- * FUNCTION: LnAdjustLengthToRoot
- *
- * PARAMETERS: Op - Node whose Length was changed
- *
- * RETURN: None.
- *
- * DESCRIPTION: Change the Subtree length of the given node, and bubble the
- * change all the way up to the root node. This allows for
- * last second changes to a package length (for example, if the
- * package length encoding gets shorter or longer.)
- *
- ******************************************************************************/
-
-void
-LnAdjustLengthToRoot (
- ACPI_PARSE_OBJECT *SubtreeOp,
- UINT32 LengthDelta)
-{
- ACPI_PARSE_OBJECT *Op;
-
-
- /* Adjust all subtree lengths up to the root */
-
- Op = SubtreeOp->Asl.Parent;
- while (Op)
- {
- Op->Asl.AmlSubtreeLength -= LengthDelta;
- Op = Op->Asl.Parent;
- }
-
- /* Adjust the global table length */
-
- Gbl_TableLength -= LengthDelta;
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: CgGetPackageLenByteCount
*
- * PARAMETERS: Op - Parse node
+ * PARAMETERS: Op - Parse node
* PackageLength - Length to be encoded
*
* RETURN: Required length of the package length encoding
@@ -249,7 +230,7 @@ LnAdjustLengthToRoot (
*
******************************************************************************/
-UINT8
+static UINT8
CgGetPackageLenByteCount (
ACPI_PARSE_OBJECT *Op,
UINT32 PackageLength)
@@ -291,7 +272,7 @@ CgGetPackageLenByteCount (
*
* FUNCTION: CgGenerateAmlOpcodeLength
*
- * PARAMETERS: Op - Parse node whose AML opcode lengths will be
+ * PARAMETERS: Op - Parse node whose AML opcode lengths will be
* calculated
*
* RETURN: None.
@@ -301,7 +282,7 @@ CgGetPackageLenByteCount (
*
******************************************************************************/
-void
+static void
CgGenerateAmlOpcodeLength (
ACPI_PARSE_OBJECT *Op)
{
@@ -322,7 +303,8 @@ CgGenerateAmlOpcodeLength (
Op->Asl.AmlPkgLenBytes = 0;
if (Op->Asl.CompileFlags & NODE_AML_PACKAGE)
{
- Op->Asl.AmlPkgLenBytes = CgGetPackageLenByteCount (Op, Op->Asl.AmlSubtreeLength);
+ Op->Asl.AmlPkgLenBytes = CgGetPackageLenByteCount (
+ Op, Op->Asl.AmlSubtreeLength);
}
/* Data opcode lengths are easy */
@@ -425,7 +407,8 @@ CgGenerateAmlLengths (
{
case PARSEOP_DEFINITIONBLOCK:
- Gbl_TableLength = sizeof (ACPI_TABLE_HEADER) + Op->Asl.AmlSubtreeLength;
+ Gbl_TableLength = sizeof (ACPI_TABLE_HEADER) +
+ Op->Asl.AmlSubtreeLength;
break;
case PARSEOP_NAMESEG:
@@ -471,13 +454,17 @@ CgGenerateAmlLengths (
case PARSEOP_STRING_LITERAL:
Op->Asl.AmlOpcodeLength = 1;
- Op->Asl.AmlLength = strlen (Op->Asl.Value.String) + 1; /* Get null terminator */
+
+ /* Get null terminator */
+
+ Op->Asl.AmlLength = strlen (Op->Asl.Value.String) + 1;
break;
case PARSEOP_PACKAGE_LENGTH:
Op->Asl.AmlOpcodeLength = 0;
- Op->Asl.AmlPkgLenBytes = CgGetPackageLenByteCount (Op, (UINT32) Op->Asl.Value.Integer);
+ Op->Asl.AmlPkgLenBytes = CgGetPackageLenByteCount (Op,
+ (UINT32) Op->Asl.Value.Integer);
break;
case PARSEOP_RAW_DATA:
@@ -502,3 +489,43 @@ CgGenerateAmlLengths (
}
+#ifdef ACPI_OBSOLETE_FUNCTIONS
+/*******************************************************************************
+ *
+ * FUNCTION: LnAdjustLengthToRoot
+ *
+ * PARAMETERS: Op - Node whose Length was changed
+ *
+ * RETURN: None.
+ *
+ * DESCRIPTION: Change the Subtree length of the given node, and bubble the
+ * change all the way up to the root node. This allows for
+ * last second changes to a package length (for example, if the
+ * package length encoding gets shorter or longer.)
+ *
+ ******************************************************************************/
+
+void
+LnAdjustLengthToRoot (
+ ACPI_PARSE_OBJECT *SubtreeOp,
+ UINT32 LengthDelta)
+{
+ ACPI_PARSE_OBJECT *Op;
+
+
+ /* Adjust all subtree lengths up to the root */
+
+ Op = SubtreeOp->Asl.Parent;
+ while (Op)
+ {
+ Op->Asl.AmlSubtreeLength -= LengthDelta;
+ Op = Op->Asl.Parent;
+ }
+
+ /* Adjust the global table length */
+
+ Gbl_TableLength -= LengthDelta;
+}
+#endif
+
+
diff --git a/sys/contrib/dev/acpica/compiler/asllisting.c b/sys/contrib/dev/acpica/compiler/asllisting.c
index 3410d8d..a83b18c 100644
--- a/sys/contrib/dev/acpica/compiler/asllisting.c
+++ b/sys/contrib/dev/acpica/compiler/asllisting.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: asllisting - Listing file generation
- * $Revision: 51 $
+ * $Revision: 1.58 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,15 +116,89 @@
*****************************************************************************/
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
-#include "amlcode.h"
-#include "acparser.h"
-#include "acnamesp.h"
+#include <contrib/dev/acpica/amlcode.h>
+#include <contrib/dev/acpica/acparser.h>
+#include <contrib/dev/acpica/acnamesp.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslisting")
+/* Local prototypes */
+
+static void
+LsDumpAscii (
+ UINT32 FileId,
+ UINT32 Count,
+ UINT8 *Buffer);
+
+static void
+LsDumpAsciiInComment (
+ UINT32 FileId,
+ UINT32 Count,
+ UINT8 *Buffer);
+
+static ACPI_STATUS
+LsAmlListingWalk (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
+
+static void
+LsGenerateListing (
+ UINT32 FileId);
+
+static void
+LsPushNode (
+ char *Filename);
+
+static ASL_LISTING_NODE *
+LsPopNode (
+ void);
+
+static void
+LsCheckException (
+ UINT32 LineNumber,
+ UINT32 FileId);
+
+static void
+LsFlushListingBuffer (
+ UINT32 FileId);
+
+static void
+LsWriteListingHexBytes (
+ UINT8 *Buffer,
+ UINT32 Length,
+ UINT32 FileId);
+
+static UINT32
+LsWriteOneSourceLine (
+ UINT32 FileId);
+
+static void
+LsFinishSourceListing (
+ UINT32 FileId);
+
+static void
+LsWriteSourceLines (
+ UINT32 ToLineNumber,
+ UINT32 ToLogicalLineNumber,
+ UINT32 FileId);
+
+static void
+LsWriteNodeToListing (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 FileId);
+
+static void
+LsDoHexOutputC (
+ void);
+
+static void
+LsDoHexOutputAsm (
+ void);
+
/*******************************************************************************
*
@@ -140,7 +214,7 @@
*
******************************************************************************/
-void
+static void
LsDumpAscii (
UINT32 FileId,
UINT32 Count,
@@ -183,7 +257,7 @@ LsDumpAscii (
*
******************************************************************************/
-void
+static void
LsDumpAsciiInComment (
UINT32 FileId,
UINT32 Count,
@@ -237,7 +311,7 @@ LsDumpAsciiInComment (
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
LsAmlListingWalk (
ACPI_PARSE_OBJECT *Op,
UINT32 Level,
@@ -279,7 +353,7 @@ LsAmlListingWalk (
*
******************************************************************************/
-void
+static void
LsGenerateListing (
UINT32 FileId)
{
@@ -316,7 +390,8 @@ LsGenerateListing (
******************************************************************************/
void
-LsDoListings (void)
+LsDoListings (
+ void)
{
if (Gbl_C_OutputFlag)
@@ -361,7 +436,7 @@ LsDoListings (void)
*
******************************************************************************/
-void
+static void
LsPushNode (
char *Filename)
{
@@ -397,8 +472,9 @@ LsPushNode (
*
******************************************************************************/
-ASL_LISTING_NODE *
-LsPopNode (void)
+static ASL_LISTING_NODE *
+LsPopNode (
+ void)
{
ASL_LISTING_NODE *Lnode;
@@ -409,7 +485,8 @@ LsPopNode (void)
if ((!Lnode) ||
(!Lnode->Next))
{
- AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, NULL, "Could not pop empty listing stack");
+ AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, NULL,
+ "Could not pop empty listing stack");
return Gbl_ListingNode;
}
@@ -438,7 +515,7 @@ LsPopNode (void)
*
******************************************************************************/
-void
+static void
LsCheckException (
UINT32 LineNumber,
UINT32 FileId)
@@ -481,7 +558,7 @@ LsCheckException (
*
******************************************************************************/
-void
+static void
LsFlushListingBuffer (
UINT32 FileId)
{
@@ -531,7 +608,8 @@ LsFlushListingBuffer (
FlWriteFile (FileId, " ", 1);
}
- FlPrintFile (FileId, " ;%8.8X", Gbl_CurrentAmlOffset - HEX_LISTING_LINE_SIZE);
+ FlPrintFile (FileId, " ;%8.8X",
+ Gbl_CurrentAmlOffset - HEX_LISTING_LINE_SIZE);
/* Write the ASCII character associated with each of the bytes */
@@ -551,7 +629,8 @@ LsFlushListingBuffer (
FlWriteFile (FileId, " ", 1);
}
- FlPrintFile (FileId, " /* %8.8X", Gbl_CurrentAmlOffset - HEX_LISTING_LINE_SIZE);
+ FlPrintFile (FileId, " /* %8.8X",
+ Gbl_CurrentAmlOffset - HEX_LISTING_LINE_SIZE);
/* Write the ASCII character associated with each of the bytes */
@@ -587,7 +666,7 @@ LsFlushListingBuffer (
*
******************************************************************************/
-void
+static void
LsWriteListingHexBytes (
UINT8 *Buffer,
UINT32 Length,
@@ -663,7 +742,7 @@ LsWriteListingHexBytes (
*
******************************************************************************/
-UINT32
+static UINT32
LsWriteOneSourceLine (
UINT32 FileId)
{
@@ -742,7 +821,7 @@ LsWriteOneSourceLine (
*
******************************************************************************/
-void
+static void
LsFinishSourceListing (
UINT32 FileId)
{
@@ -804,7 +883,7 @@ LsFinishSourceListing (
*
******************************************************************************/
-void
+static void
LsWriteSourceLines (
UINT32 ToLineNumber,
UINT32 ToLogicalLineNumber,
@@ -823,9 +902,8 @@ LsWriteSourceLines (
LsFlushListingBuffer (FileId);
- /*
- * Read lines and write them as long as we are not caught up
- */
+ /* Read lines and write them as long as we are not caught up */
+
if (Gbl_SourceLine < Gbl_CurrentLine)
{
/*
@@ -843,9 +921,8 @@ LsWriteSourceLines (
FlPrintFile (FileId, " /*\n");
}
- /*
- * Write one line at a time until we have reached the target line #
- */
+ /* Write one line at a time until we have reached the target line # */
+
while ((Gbl_SourceLine < Gbl_CurrentLine) &&
LsWriteOneSourceLine (FileId))
{ ; }
@@ -875,7 +952,7 @@ LsWriteSourceLines (
*
******************************************************************************/
-void
+static void
LsWriteNodeToListing (
ACPI_PARSE_OBJECT *Op,
UINT32 FileId)
@@ -890,8 +967,9 @@ LsWriteNodeToListing (
OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
OpClass = OpInfo->Class;
- /* TBD: clean this up with a single flag that says: I start a named output block */
-
+ /* TBD: clean this up with a single flag that says:
+ * I start a named output block
+ */
if (FileId == ASL_FILE_C_SOURCE_OUTPUT)
{
switch (Op->Asl.ParseOpcode)
@@ -932,7 +1010,6 @@ LsWriteNodeToListing (
}
}
-
/* These cases do not have a corresponding AML opcode */
switch (Op->Asl.ParseOpcode)
@@ -945,22 +1022,26 @@ LsWriteNodeToListing (
if (FileId == ASL_FILE_ASM_SOURCE_OUTPUT)
{
- FlPrintFile (FileId, "%s_%s_Header \\\n",
+ FlPrintFile (FileId,
+ "%s_%s_Header \\\n",
Gbl_TableSignature, Gbl_TableId);
}
if (FileId == ASL_FILE_C_SOURCE_OUTPUT)
{
- FlPrintFile (FileId, " unsigned char %s_%s_Header [] = \n {\n",
+ FlPrintFile (FileId,
+ " unsigned char %s_%s_Header [] =\n {\n",
Gbl_TableSignature, Gbl_TableId);
}
if (FileId == ASL_FILE_ASM_INCLUDE_OUTPUT)
{
- FlPrintFile (FileId, "extrn %s_%s_Header : byte\n",
+ FlPrintFile (FileId,
+ "extrn %s_%s_Header : byte\n",
Gbl_TableSignature, Gbl_TableId);
}
if (FileId == ASL_FILE_C_INCLUDE_OUTPUT)
{
- FlPrintFile (FileId, "extern unsigned char %s_%s_Header [];\n",
+ FlPrintFile (FileId,
+ "extern unsigned char %s_%s_Header [];\n",
Gbl_TableSignature, Gbl_TableId);
}
return;
@@ -968,35 +1049,34 @@ LsWriteNodeToListing (
case PARSEOP_METHODCALL:
- LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber, FileId);
+ LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
+ FileId);
return;
case PARSEOP_INCLUDE:
- /*
- * Flush everything up to and including the include source line
- */
- LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber, FileId);
+ /* Flush everything up to and including the include source line */
+
+ LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
+ FileId);
+
+ /* Create a new listing node and push it */
- /*
- * Create a new listing node and push it
- */
LsPushNode (Op->Asl.Child->Asl.Value.String);
return;
case PARSEOP_INCLUDE_END:
- /*
- * Flush out the rest of the include file
- */
- LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber, FileId);
+ /* Flush out the rest of the include file */
- /*
- * Pop off this listing node and go back to the parent file
- */
- LsPopNode ();
+ LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
+ FileId);
+
+ /* Pop off this listing node and go back to the parent file */
+
+ (void) LsPopNode ();
return;
@@ -1031,13 +1111,17 @@ LsWriteNodeToListing (
case AML_BANK_FIELD_OP:
case AML_NAME_OP:
- /* For fields, we want to dump all the AML after the entire definition */
-
- LsWriteSourceLines (Op->Asl.EndLine, Op->Asl.EndLogicalLine, FileId);
+ /*
+ * For fields, we want to dump all the AML after the
+ * entire definition
+ */
+ LsWriteSourceLines (Op->Asl.EndLine, Op->Asl.EndLogicalLine,
+ FileId);
break;
default:
- LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber, FileId);
+ LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
+ FileId);
break;
}
@@ -1087,22 +1171,26 @@ LsWriteNodeToListing (
if (FileId == ASL_FILE_ASM_SOURCE_OUTPUT)
{
- FlPrintFile (FileId, "%s_%s_%s \\\n",
+ FlPrintFile (FileId,
+ "%s_%s_%s \\\n",
Gbl_TableSignature, Gbl_TableId, &Pathname[1]);
}
if (FileId == ASL_FILE_C_SOURCE_OUTPUT)
{
- FlPrintFile (FileId, " unsigned char %s_%s_%s [] = \n {\n",
+ FlPrintFile (FileId,
+ " unsigned char %s_%s_%s [] =\n {\n",
Gbl_TableSignature, Gbl_TableId, &Pathname[1]);
}
if (FileId == ASL_FILE_ASM_INCLUDE_OUTPUT)
{
- FlPrintFile (FileId, "extrn %s_%s_%s : byte\n",
+ FlPrintFile (FileId,
+ "extrn %s_%s_%s : byte\n",
Gbl_TableSignature, Gbl_TableId, &Pathname[1]);
}
if (FileId == ASL_FILE_C_INCLUDE_OUTPUT)
{
- FlPrintFile (FileId, "extern unsigned char %s_%s_%s [];\n",
+ FlPrintFile (FileId,
+ "extern unsigned char %s_%s_%s [];\n",
Gbl_TableSignature, Gbl_TableId, &Pathname[1]);
}
}
@@ -1121,7 +1209,8 @@ LsWriteNodeToListing (
case AML_CLASS_CREATE:
default:
- LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber, FileId);
+ LsWriteSourceLines (Op->Asl.LineNumber, Op->Asl.LogicalLineNumber,
+ FileId);
break;
case AML_CLASS_UNKNOWN:
@@ -1143,7 +1232,8 @@ LsWriteNodeToListing (
******************************************************************************/
void
-LsDoHexOutput (void)
+LsDoHexOutput (
+ void)
{
switch (Gbl_HexOutputFlag)
@@ -1179,8 +1269,9 @@ LsDoHexOutput (void)
*
******************************************************************************/
-void
-LsDoHexOutputC (void)
+static void
+LsDoHexOutputC (
+ void)
{
UINT32 j;
UINT8 FileByte[HEX_TABLE_LINE_SIZE];
@@ -1189,7 +1280,7 @@ LsDoHexOutputC (void)
FlPrintFile (ASL_FILE_HEX_OUTPUT, " * C source code output\n *\n */\n");
- FlPrintFile (ASL_FILE_HEX_OUTPUT, "unsigned char AmlCode[] = \n{\n");
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, "unsigned char AmlCode[] =\n{\n");
/* Start at the beginning of the AML file */
@@ -1205,9 +1296,8 @@ LsDoHexOutputC (void)
FlPrintFile (ASL_FILE_HEX_OUTPUT, " ");
}
- /*
- * Convert each AML byte to hex
- */
+ /* Convert each AML byte to hex */
+
UtConvertByteToHex (FileByte[j], Buffer);
FlWriteFile (ASL_FILE_HEX_OUTPUT, Buffer, 4);
FlPrintFile (ASL_FILE_HEX_OUTPUT, ",");
@@ -1221,18 +1311,19 @@ LsDoHexOutputC (void)
{
/* End of line, emit the ascii dump of the entire line */
- FlPrintFile (ASL_FILE_HEX_OUTPUT, " /* %8.8X", Offset - HEX_TABLE_LINE_SIZE);
+ FlPrintFile (ASL_FILE_HEX_OUTPUT,
+ " /* %8.8X", Offset - HEX_TABLE_LINE_SIZE);
/* Write the ASCII character associated with each of the bytes */
- LsDumpAsciiInComment (ASL_FILE_HEX_OUTPUT, HEX_TABLE_LINE_SIZE, FileByte);
+ LsDumpAsciiInComment (ASL_FILE_HEX_OUTPUT,
+ HEX_TABLE_LINE_SIZE, FileByte);
FlPrintFile (ASL_FILE_HEX_OUTPUT, " */\n");
/* Start new line */
j = 0;
}
-
}
FlPrintFile (ASL_FILE_HEX_OUTPUT, "\n};\n");
@@ -1254,7 +1345,7 @@ LsDoHexOutputC (void)
*
******************************************************************************/
-void
+static void
LsDoHexOutputAsm (
void)
{
@@ -1286,9 +1377,8 @@ LsDoHexOutputAsm (
DoComma = FALSE;
}
- /*
- * Convert each AML byte to hex
- */
+ /* Convert each AML byte to hex */
+
UtConvertByteToAsmHex (FileByte[j], Buffer);
FlWriteFile (ASL_FILE_HEX_OUTPUT, Buffer, 4);
@@ -1298,7 +1388,8 @@ LsDoHexOutputAsm (
j++;
if (j >= HEX_TABLE_LINE_SIZE)
{
- FlPrintFile (ASL_FILE_HEX_OUTPUT, " ;%8.8X", Offset - HEX_TABLE_LINE_SIZE);
+ FlPrintFile (ASL_FILE_HEX_OUTPUT,
+ " ;%8.8X", Offset - HEX_TABLE_LINE_SIZE);
/* Write the ASCII character associated with each of the bytes */
diff --git a/sys/contrib/dev/acpica/compiler/aslload.c b/sys/contrib/dev/acpica/compiler/aslload.c
index 45f292d..f3e75be 100644
--- a/sys/contrib/dev/acpica/compiler/aslload.c
+++ b/sys/contrib/dev/acpica/compiler/aslload.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: dswload - Dispatcher namespace load callbacks
- * $Revision: 62 $
+ * $Revision: 1.71 $
*
*****************************************************************************/
@@ -9,7 +9,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,22 +116,46 @@
#define __ASLLOAD_C__
-#include "aslcompiler.h"
-#include "amlcode.h"
-#include "acdispat.h"
-#include "acnamesp.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
+#include <contrib/dev/acpica/amlcode.h>
+#include <contrib/dev/acpica/acdispat.h>
+#include <contrib/dev/acpica/acnamesp.h>
#include "aslcompiler.y.h"
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslload")
+/* Local prototypes */
+
+static ACPI_STATUS
+LdLoadFieldElements (
+ ACPI_PARSE_OBJECT *Op,
+ ACPI_WALK_STATE *WalkState);
+
+static ACPI_STATUS
+LdLoadResourceElements (
+ ACPI_PARSE_OBJECT *Op,
+ ACPI_WALK_STATE *WalkState);
+
+static ACPI_STATUS
+LdNamespace1Begin (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
+
+static ACPI_STATUS
+LdNamespace1End (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
+
/*******************************************************************************
*
* FUNCTION: LdLoadNamespace
*
- * PARAMETERS: None
+ * PARAMETERS: RootOp - Root of the parse tree
*
* RETURN: Status
*
@@ -162,7 +186,7 @@ LdLoadNamespace (
/* Perform the walk of the parse tree */
TrWalkParseTree (RootOp, ASL_WALK_VISIT_TWICE, LdNamespace1Begin,
- LdNamespace1End, WalkState);
+ LdNamespace1End, WalkState);
/* Dump the namespace if debug is enabled */
@@ -175,7 +199,7 @@ LdLoadNamespace (
*
* FUNCTION: LdLoadFieldElements
*
- * PARAMETERS: Op - Parent node (Field)
+ * PARAMETERS: Op - Parent node (Field)
* WalkState - Current walk state
*
* RETURN: Status
@@ -185,7 +209,7 @@ LdLoadNamespace (
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
LdLoadFieldElements (
ACPI_PARSE_OBJECT *Op,
ACPI_WALK_STATE *WalkState)
@@ -232,27 +256,33 @@ LdLoadFieldElements (
default:
- Status = AcpiNsLookup (WalkState->ScopeInfo, Child->Asl.Value.String,
- ACPI_TYPE_LOCAL_REGION_FIELD, ACPI_IMODE_LOAD_PASS1,
- ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE | ACPI_NS_ERROR_IF_FOUND,
- NULL, &Node);
+ Status = AcpiNsLookup (WalkState->ScopeInfo,
+ Child->Asl.Value.String,
+ ACPI_TYPE_LOCAL_REGION_FIELD,
+ ACPI_IMODE_LOAD_PASS1,
+ ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE |
+ ACPI_NS_ERROR_IF_FOUND,
+ NULL, &Node);
if (ACPI_FAILURE (Status))
{
if (Status != AE_ALREADY_EXISTS)
{
- return (Status);
+ AslError (ASL_ERROR, ASL_MSG_CORE_EXCEPTION, Child,
+ Child->Asl.Value.String);
+ return (Status);
}
/*
* The name already exists in this scope
* But continue processing the elements
*/
- AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child, Child->Asl.Value.String);
+ AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child,
+ Child->Asl.Value.String);
}
else
{
Child->Asl.Node = Node;
- Node->Object = (ACPI_OPERAND_OBJECT *) Child;
+ Node->Op = Child;
}
break;
}
@@ -266,7 +296,7 @@ LdLoadFieldElements (
*
* FUNCTION: LdLoadResourceElements
*
- * PARAMETERS: Op - Parent node (Resource Descriptor)
+ * PARAMETERS: Op - Parent node (Resource Descriptor)
* WalkState - Current walk state
*
* RETURN: Status
@@ -280,7 +310,7 @@ LdLoadFieldElements (
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
LdLoadResourceElements (
ACPI_PARSE_OBJECT *Op,
ACPI_WALK_STATE *WalkState)
@@ -291,14 +321,23 @@ LdLoadResourceElements (
/*
- * Enter the resouce name into the namespace
- * This opens a scope
+ * Enter the resource name into the namespace. Name must not already exist.
+ * This opens a scope, so later field names are guaranteed to be new/unique.
*/
Status = AcpiNsLookup (WalkState->ScopeInfo, Op->Asl.Namepath,
- ACPI_TYPE_LOCAL_RESOURCE, ACPI_IMODE_LOAD_PASS1, ACPI_NS_NO_UPSEARCH,
- WalkState, &Node);
+ ACPI_TYPE_LOCAL_RESOURCE, ACPI_IMODE_LOAD_PASS1,
+ ACPI_NS_NO_UPSEARCH | ACPI_NS_ERROR_IF_FOUND,
+ WalkState, &Node);
if (ACPI_FAILURE (Status))
{
+ if (Status == AE_ALREADY_EXISTS)
+ {
+ /* Actual node causing the error was saved in ParentMethod */
+
+ AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS,
+ (ACPI_PARSE_OBJECT *) Op->Asl.ParentMethod, Op->Asl.Namepath);
+ return (AE_OK);
+ }
return (Status);
}
@@ -313,10 +352,11 @@ LdLoadResourceElements (
if (InitializerOp->Asl.ExternalName)
{
Status = AcpiNsLookup (WalkState->ScopeInfo,
- InitializerOp->Asl.ExternalName,
- ACPI_TYPE_LOCAL_RESOURCE_FIELD,
- ACPI_IMODE_LOAD_PASS1, ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE,
- NULL, &Node);
+ InitializerOp->Asl.ExternalName,
+ ACPI_TYPE_LOCAL_RESOURCE_FIELD,
+ ACPI_IMODE_LOAD_PASS1,
+ ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE,
+ NULL, &Node);
if (ACPI_FAILURE (Status))
{
return (Status);
@@ -326,9 +366,9 @@ LdLoadResourceElements (
* Store the field offset in the namespace node so it
* can be used when the field is referenced
*/
- Node->OwnerId = (UINT16) InitializerOp->Asl.Value.Integer;
+ Node->Value = (UINT32) InitializerOp->Asl.Value.Integer;
InitializerOp->Asl.Node = Node;
- Node->Object = (ACPI_OPERAND_OBJECT *) InitializerOp;
+ Node->Op = InitializerOp;
/* Pass thru the field type (Bitfield or Bytefield) */
@@ -357,7 +397,7 @@ LdLoadResourceElements (
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
LdNamespace1Begin (
ACPI_PARSE_OBJECT *Op,
UINT32 Level,
@@ -417,8 +457,8 @@ LdNamespace1Begin (
{
case PARSEOP_NAME:
- Arg = Op->Asl.Child; /* Get the NameSeg/NameString node */
- Arg = Arg->Asl.Next; /* First peer is the object to be associated with the name */
+ Arg = Op->Asl.Child; /* Get the NameSeg/NameString node */
+ Arg = Arg->Asl.Next; /* First peer is the object to be associated with the name */
/* Get the data type associated with the named object, not the name itself */
@@ -467,23 +507,28 @@ LdNamespace1Begin (
* handle this case. Perhaps someday this case can go away.
*/
Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY,
- ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT, WalkState, &(Node));
+ ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
+ WalkState, &(Node));
if (ACPI_FAILURE (Status))
{
if (Status == AE_NOT_FOUND)
{
/* The name was not found, go ahead and create it */
- Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_LOCAL_SCOPE,
- ACPI_IMODE_LOAD_PASS1, Flags, WalkState, &(Node));
+ Status = AcpiNsLookup (WalkState->ScopeInfo, Path,
+ ACPI_TYPE_LOCAL_SCOPE,
+ ACPI_IMODE_LOAD_PASS1, Flags,
+ WalkState, &(Node));
/*
* However, this is an error -- primarily because the MS
* interpreter can't handle a forward reference from the
* Scope() operator.
*/
- AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op, Op->Asl.ExternalName);
- AslError (ASL_ERROR, ASL_MSG_SCOPE_FWD_REF, Op, Op->Asl.ExternalName);
+ AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
+ Op->Asl.ExternalName);
+ AslError (ASL_ERROR, ASL_MSG_SCOPE_FWD_REF, Op,
+ Op->Asl.ExternalName);
goto FinishNode;
}
@@ -509,8 +554,8 @@ LdNamespace1Begin (
case ACPI_TYPE_BUFFER:
/*
- * These types we will allow, but we will change the type. This
- * enables some existing code of the form:
+ * These types we will allow, but we will change the type.
+ * This enables some existing code of the form:
*
* Name (DEB, 0)
* Scope (DEB) { ... }
@@ -522,11 +567,11 @@ LdNamespace1Begin (
Op->Asl.ExternalName, AcpiUtGetTypeName (Node->Type));
AslError (ASL_REMARK, ASL_MSG_SCOPE_TYPE, Op, MsgBuffer);
- /*
- * Switch the type to scope, open the new scope
- */
+ /* Switch the type to scope, open the new scope */
+
Node->Type = ACPI_TYPE_LOCAL_SCOPE;
- Status = AcpiDsScopeStackPush (Node, ACPI_TYPE_LOCAL_SCOPE, WalkState);
+ Status = AcpiDsScopeStackPush (Node, ACPI_TYPE_LOCAL_SCOPE,
+ WalkState);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@@ -535,10 +580,10 @@ LdNamespace1Begin (
default:
- /*
- * All other types are an error
- */
- sprintf (MsgBuffer, "%s [%s]", Op->Asl.ExternalName, AcpiUtGetTypeName (Node->Type));
+ /* All other types are an error */
+
+ sprintf (MsgBuffer, "%s [%s]", Op->Asl.ExternalName,
+ AcpiUtGetTypeName (Node->Type));
AslError (ASL_ERROR, ASL_MSG_SCOPE_TYPE, Op, MsgBuffer);
/*
@@ -547,7 +592,8 @@ LdNamespace1Begin (
* cascade of additional errors. Open the new scope.
*/
Node->Type = ACPI_TYPE_LOCAL_SCOPE;
- Status = AcpiDsScopeStackPush (Node, ACPI_TYPE_LOCAL_SCOPE, WalkState);
+ Status = AcpiDsScopeStackPush (Node, ACPI_TYPE_LOCAL_SCOPE,
+ WalkState);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
@@ -575,8 +621,9 @@ LdNamespace1Begin (
/*
* Enter the named type into the internal namespace. We enter the name
- * as we go downward in the parse tree. Any necessary subobjects that involve
- * arguments to the opcode must be created as we go back up the parse tree later.
+ * as we go downward in the parse tree. Any necessary subobjects that
+ * involve arguments to the opcode must be created as we go back up the
+ * parse tree later.
*/
Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType,
ACPI_IMODE_LOAD_PASS1, Flags, WalkState, &(Node));
@@ -593,14 +640,16 @@ LdNamespace1Begin (
}
else
{
- AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op, Op->Asl.ExternalName);
+ AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
+ Op->Asl.ExternalName);
Status = AE_OK;
goto Exit;
}
}
else
{
- AslCoreSubsystemError (Op, Status, "Failure from lookup %s\n", FALSE);
+ AslCoreSubsystemError (Op, Status,
+ "Failure from lookup %s\n", FALSE);
goto Exit;
}
}
@@ -612,23 +661,23 @@ FinishNode:
* the Node back to the original Parse node
*/
Op->Asl.Node = Node;
- Node->Object = (ACPI_OPERAND_OBJECT *) Op;
+ Node->Op = Op;
/* Set the actual data type if appropriate (EXTERNAL term only) */
if (ActualObjectType != ACPI_TYPE_ANY)
{
Node->Type = (UINT8) ActualObjectType;
- Node->OwnerId = ASL_EXTERNAL_METHOD;
+ Node->Value = ASL_EXTERNAL_METHOD;
}
if (Op->Asl.ParseOpcode == PARSEOP_METHOD)
{
/*
- * Get the method argument count from "Extra" and store
- * it in the OwnerId field of the namespace node
+ * Get the method argument count from "Extra" and save
+ * it in the namespace node
*/
- Node->OwnerId = (UINT16) Op->Asl.Extra;
+ Node->Value = (UINT32) Op->Asl.Extra;
}
Exit:
@@ -649,7 +698,7 @@ Exit:
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
LdNamespace1End (
ACPI_PARSE_OBJECT *Op,
UINT32 Level,
@@ -692,7 +741,7 @@ LdNamespace1End (
"(%s): Popping scope for Op [%s] %p\n",
AcpiUtGetTypeName (ObjectType), Op->Asl.ParseOpName, Op));
- AcpiDsScopeStackPop (WalkState);
+ (void) AcpiDsScopeStackPop (WalkState);
}
return (AE_OK);
diff --git a/sys/contrib/dev/acpica/compiler/asllookup.c b/sys/contrib/dev/acpica/compiler/asllookup.c
index b9a0cfe..750d53b 100644
--- a/sys/contrib/dev/acpica/compiler/asllookup.c
+++ b/sys/contrib/dev/acpica/compiler/asllookup.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: asllookup- Namespace lookup
- * $Revision: 83 $
+ * $Revision: 1.95 $
*
*****************************************************************************/
@@ -9,7 +9,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -115,18 +115,58 @@
*****************************************************************************/
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
-#include "acparser.h"
-#include "amlcode.h"
-#include "acnamesp.h"
-#include "acdispat.h"
+#include <contrib/dev/acpica/acparser.h>
+#include <contrib/dev/acpica/amlcode.h>
+#include <contrib/dev/acpica/acnamesp.h>
+#include <contrib/dev/acpica/acdispat.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("asllookup")
+/* Local prototypes */
+
+static ACPI_STATUS
+LsCompareOneNamespaceObject (
+ ACPI_HANDLE ObjHandle,
+ UINT32 Level,
+ void *Context,
+ void **ReturnValue);
+
+static ACPI_STATUS
+LsDoOneNamespaceObject (
+ ACPI_HANDLE ObjHandle,
+ UINT32 Level,
+ void *Context,
+ void **ReturnValue);
+
+static BOOLEAN
+LkObjectExists (
+ char *Name);
+
+static void
+LkCheckFieldRange (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 RegionBitLength,
+ UINT32 FieldBitOffset,
+ UINT32 FieldBitLength,
+ UINT32 AccessBitWidth);
+
+static ACPI_STATUS
+LkNamespaceLocateBegin (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
+
+static ACPI_STATUS
+LkNamespaceLocateEnd (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
+
/*******************************************************************************
*
@@ -141,7 +181,7 @@
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
LsDoOneNamespaceObject (
ACPI_HANDLE ObjHandle,
UINT32 Level,
@@ -149,6 +189,7 @@ LsDoOneNamespaceObject (
void **ReturnValue)
{
ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle;
+ ACPI_OPERAND_OBJECT *ObjDesc;
ACPI_PARSE_OBJECT *Op;
@@ -159,60 +200,178 @@ LsDoOneNamespaceObject (
&Node->Name,
AcpiUtGetTypeName (Node->Type));
- Op = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Node->Object);
+ Op = Node->Op;
+ ObjDesc = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node->Object);
+
+ if (!Op)
+ {
+ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "\n");
+ return (AE_OK);
+ }
+
- if (Op)
+ if ((ObjDesc) &&
+ (ObjDesc->Common.Descriptor == ACPI_DESC_TYPE_OPERAND))
{
- if (Op->Asl.ParseOpcode == PARSEOP_NAME)
+ switch (Node->Type)
{
- Op = Op->Asl.Child;
+ case ACPI_TYPE_INTEGER:
+
+ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,
+ " [Initial Value 0x%8.8X%8.8X]",
+ ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value));
+ break;
+
+
+ case ACPI_TYPE_STRING:
+
+ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,
+ " [Initial Value \"%s\"]",
+ ObjDesc->String.Pointer);
+ break;
+
+ default:
+ /* Nothing to do for other types */
+ break;
}
+ }
+ else
+ {
switch (Node->Type)
{
case ACPI_TYPE_INTEGER:
+ if (Op->Asl.ParseOpcode == PARSEOP_NAME)
+ {
+ Op = Op->Asl.Child;
+ }
if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) ||
(Op->Asl.ParseOpcode == PARSEOP_NAMESTRING))
{
Op = Op->Asl.Next;
}
+ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,
+ " [Initial Value 0x%8.8X%8.8X]",
+ ACPI_FORMAT_UINT64 (Op->Asl.Value.Integer));
+ break;
+
- if (Op->Asl.Value.Integer > ACPI_UINT32_MAX)
+ case ACPI_TYPE_STRING:
+
+ if (Op->Asl.ParseOpcode == PARSEOP_NAME)
{
- FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Initial Value = 0x%X%X]",
- ACPI_HIDWORD (Op->Asl.Value.Integer64), (UINT32) Op->Asl.Value.Integer);
+ Op = Op->Asl.Child;
}
- else
+ if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) ||
+ (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING))
{
- FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Initial Value = 0x%X]",
- (UINT32) Op->Asl.Value.Integer);
+ Op = Op->Asl.Next;
}
+ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,
+ " [Initial Value \"%s\"]",
+ Op->Asl.Value.String);
break;
- case ACPI_TYPE_STRING:
+ case ACPI_TYPE_LOCAL_REGION_FIELD:
if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) ||
(Op->Asl.ParseOpcode == PARSEOP_NAMESTRING))
{
- Op = Op->Asl.Next;
+ Op = Op->Asl.Child;
}
+ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,
+ " [Offset 0x%04X Length 0x%04X bits]",
+ Op->Asl.Parent->Asl.ExtraValue, (UINT32) Op->Asl.Value.Integer);
+ break;
- FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Initial Value = \"%s\"]",
- Op->Asl.Value.String);
+
+ case ACPI_TYPE_BUFFER_FIELD:
+
+ switch (Op->Asl.ParseOpcode)
+ {
+ case PARSEOP_CREATEBYTEFIELD:
+ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [BYTE ( 8 bit)]");
+ break;
+
+ case PARSEOP_CREATEDWORDFIELD:
+ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [DWORD (32 bit)]");
+ break;
+
+ case PARSEOP_CREATEQWORDFIELD:
+ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [QWORD (64 bit)]");
+ break;
+
+ case PARSEOP_CREATEWORDFIELD:
+ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [WORD (16 bit)]");
+ break;
+
+ case PARSEOP_CREATEBITFIELD:
+ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [BIT ( 1 bit)]");
+ break;
+
+ case PARSEOP_CREATEFIELD:
+ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Arbitrary Bit Field]");
+ break;
+
+ default:
+ break;
+
+ }
break;
- case ACPI_TYPE_LOCAL_REGION_FIELD:
+ case ACPI_TYPE_PACKAGE:
+ if (Op->Asl.ParseOpcode == PARSEOP_NAME)
+ {
+ Op = Op->Asl.Child;
+ }
if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) ||
(Op->Asl.ParseOpcode == PARSEOP_NAMESTRING))
{
+ Op = Op->Asl.Next;
+ }
+ Op = Op->Asl.Child;
+
+ if ((Op->Asl.ParseOpcode == PARSEOP_BYTECONST) ||
+ (Op->Asl.ParseOpcode == PARSEOP_RAW_DATA))
+ {
+ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,
+ " [Initial Length 0x%.2X elements]",
+ Op->Asl.Value.Integer);
+ }
+ break;
+
+
+ case ACPI_TYPE_BUFFER:
+
+ if (Op->Asl.ParseOpcode == PARSEOP_NAME)
+ {
Op = Op->Asl.Child;
}
- FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Offset 0x%02X, Length 0x%02X]",
- Op->Asl.Parent->Asl.ExtraValue, (UINT32) Op->Asl.Value.Integer);
+ if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) ||
+ (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING))
+ {
+ Op = Op->Asl.Next;
+ }
+ Op = Op->Asl.Child;
+
+ if (Op->Asl.ParseOpcode == PARSEOP_INTEGER)
+ {
+ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,
+ " [Initial Length 0x%.2X bytes]",
+ Op->Asl.Value.Integer);
+ }
+ break;
+
+
+ case ACPI_TYPE_METHOD:
+
+ FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT,
+ " [Code Length 0x%.4X bytes]",
+ Op->Asl.AmlSubtreeLength);
break;
@@ -233,7 +392,7 @@ LsDoOneNamespaceObject (
*
* PARAMETERS: None
*
- * RETURN: None
+ * RETURN: Status
*
* DESCRIPTION: Walk the namespace an display information about each node
* in the tree. Information is written to the optional
@@ -261,8 +420,8 @@ LsDisplayNamespace (
/* Walk entire namespace from the root */
Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
- ACPI_UINT32_MAX, FALSE, LsDoOneNamespaceObject,
- NULL, NULL);
+ ACPI_UINT32_MAX, FALSE, LsDoOneNamespaceObject,
+ NULL, NULL);
return (Status);
}
@@ -279,7 +438,7 @@ LsDisplayNamespace (
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
LsCompareOneNamespaceObject (
ACPI_HANDLE ObjHandle,
UINT32 Level,
@@ -314,7 +473,7 @@ LsCompareOneNamespaceObject (
*
******************************************************************************/
-BOOLEAN
+static BOOLEAN
LkObjectExists (
char *Name)
{
@@ -324,8 +483,8 @@ LkObjectExists (
/* Walk entire namespace from the supplied root */
Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
- ACPI_UINT32_MAX, FALSE, LsCompareOneNamespaceObject,
- Name, NULL);
+ ACPI_UINT32_MAX, FALSE, LsCompareOneNamespaceObject,
+ Name, NULL);
if (Status == AE_CTRL_TRUE)
{
/* At least one instance of the name was found */
@@ -402,7 +561,7 @@ LkCrossReferenceNamespace (
*
******************************************************************************/
-void
+static void
LkCheckFieldRange (
ACPI_PARSE_OBJECT *Op,
UINT32 RegionBitLength,
@@ -412,6 +571,7 @@ LkCheckFieldRange (
{
UINT32 FieldEndBitOffset;
+
/*
* Check each field unit against the region size. The entire
* field unit (start offset plus length) must fit within the
@@ -460,7 +620,7 @@ LkCheckFieldRange (
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
LkNamespaceLocateBegin (
ACPI_PARSE_OBJECT *Op,
UINT32 Level,
@@ -557,7 +717,8 @@ LkNamespaceLocateBegin (
}
ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode);
- ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Type=%s\n", AcpiUtGetTypeName (ObjectType)));
+ ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
+ "Type=%s\n", AcpiUtGetTypeName (ObjectType)));
/*
* Lookup the name in the namespace. Name must exist at this point, or it
@@ -569,7 +730,7 @@ LkNamespaceLocateBegin (
Gbl_NsLookupCount++;
Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType,
- ACPI_IMODE_EXECUTE, Flags, WalkState, &(Node));
+ ACPI_IMODE_EXECUTE, Flags, WalkState, &(Node));
if (ACPI_FAILURE (Status))
{
if (Status == AE_NOT_FOUND)
@@ -584,15 +745,27 @@ LkNamespaceLocateBegin (
if (LkObjectExists (Path))
{
- /* There exists such a name, but we couldn't get to it from this scope */
-
- AslError (ASL_ERROR, ASL_MSG_NOT_REACHABLE, Op, Op->Asl.ExternalName);
+ /*
+ * There exists such a name, but we couldn't get to it
+ * from this scope
+ */
+ AslError (ASL_ERROR, ASL_MSG_NOT_REACHABLE, Op,
+ Op->Asl.ExternalName);
}
else
{
/* The name doesn't exist, period */
- AslError (ASL_ERROR, ASL_MSG_NOT_EXIST, Op, Op->Asl.ExternalName);
+ if ((Op->Asl.Parent) &&
+ (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CONDREFOF))
+ {
+ /* Ignore not found if parent is CondRefOf */
+
+ return (AE_OK);
+ }
+
+ AslError (ASL_ERROR, ASL_MSG_NOT_EXIST,
+ Op, Op->Asl.ExternalName);
}
}
else
@@ -603,13 +776,25 @@ LkNamespaceLocateBegin (
{
/* Gave full path, the object does not exist */
- AslError (ASL_ERROR, ASL_MSG_NOT_EXIST, Op, Op->Asl.ExternalName);
+ if ((Op->Asl.Parent) &&
+ (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CONDREFOF))
+ {
+ /* Ignore not found if parent is CondRefOf */
+
+ return (AE_OK);
+ }
+
+ AslError (ASL_ERROR, ASL_MSG_NOT_EXIST, Op,
+ Op->Asl.ExternalName);
}
else
{
- /* We can't tell whether it doesn't exist or just can't be reached. */
-
- AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op, Op->Asl.ExternalName);
+ /*
+ * We can't tell whether it doesn't exist or just
+ * can't be reached.
+ */
+ AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
+ Op->Asl.ExternalName);
}
}
@@ -626,11 +811,12 @@ LkNamespaceLocateBegin (
* Dereference an alias. (A name reference that is an alias.)
* Aliases are not nested; The alias always points to the final object
*/
- if ((Op->Asl.ParseOpcode != PARSEOP_ALIAS) && (Node->Type == ACPI_TYPE_LOCAL_ALIAS))
+ if ((Op->Asl.ParseOpcode != PARSEOP_ALIAS) &&
+ (Node->Type == ACPI_TYPE_LOCAL_ALIAS))
{
/* This node points back to the original PARSEOP_ALIAS */
- NextOp = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Node->Object);
+ NextOp = Node->Op;
/* The first child is the alias target op */
@@ -644,7 +830,8 @@ LkNamespaceLocateBegin (
}
else
{
- AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Op, "Missing alias link");
+ AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Op,
+ "Missing alias link");
}
}
@@ -659,7 +846,7 @@ LkNamespaceLocateBegin (
* the field type) and change the named reference into an integer for
* AML code generation
*/
- Temp = (UINT32) Node->OwnerId;
+ Temp = Node->Value;
if (Node->Flags & ANOBJ_IS_BIT_OFFSET)
{
Op->Asl.CompileFlags |= NODE_IS_BIT_OFFSET;
@@ -715,12 +902,12 @@ LkNamespaceLocateBegin (
/* Now convert this node to an integer whose value is the field offset */
+ Op->Asl.AmlLength = 0;
Op->Asl.ParseOpcode = PARSEOP_INTEGER;
Op->Asl.Value.Integer = (UINT64) Temp;
Op->Asl.CompileFlags |= NODE_IS_RESOURCE_FIELD;
OpcGenerateAmlOpcode (Op);
- Op->Asl.AmlLength = OpcSetOptimalIntegerSize (Op);
}
/* 2) Check for a method invocation */
@@ -734,14 +921,28 @@ LkNamespaceLocateBegin (
{
/*
+ * A reference to a method within one of these opcodes is not an
+ * invocation of the method, it is simply a reference to the method.
+ */
+ if ((Op->Asl.Parent) &&
+ ((Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_REFOF) ||
+ (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_DEREFOF) ||
+ (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_OBJECTTYPE)))
+ {
+ return (AE_OK);
+ }
+ /*
* There are two types of method invocation:
- * 1) Invocation with arguments -- the parser recognizes this as a METHODCALL
- * 2) Invocation with no arguments --the parser cannot determine that this is a method
- * invocation, therefore we have to figure it out here.
+ * 1) Invocation with arguments -- the parser recognizes this
+ * as a METHODCALL.
+ * 2) Invocation with no arguments --the parser cannot determine that
+ * this is a method invocation, therefore we have to figure it out
+ * here.
*/
if (Node->Type != ACPI_TYPE_METHOD)
{
- sprintf (MsgBuffer, "%s is a %s", Op->Asl.ExternalName, AcpiUtGetTypeName (Node->Type));
+ sprintf (MsgBuffer, "%s is a %s",
+ Op->Asl.ExternalName, AcpiUtGetTypeName (Node->Type));
AslError (ASL_ERROR, ASL_MSG_NOT_METHOD, Op, MsgBuffer);
return (AE_OK);
@@ -772,18 +973,18 @@ LkNamespaceLocateBegin (
NextOp = NextOp->Asl.Next;
}
- if (Node->OwnerId != ASL_EXTERNAL_METHOD)
+ if (Node->Value != ASL_EXTERNAL_METHOD)
{
/*
* Check the parsed arguments with the number expected by the
* method declaration itself
*/
- if (PassedArgs != Node->OwnerId)
+ if (PassedArgs != Node->Value)
{
sprintf (MsgBuffer, "%s requires %d", Op->Asl.ExternalName,
- Node->OwnerId);
+ Node->Value);
- if (PassedArgs < Node->OwnerId)
+ if (PassedArgs < Node->Value)
{
AslError (ASL_ERROR, ASL_MSG_ARG_COUNT_LO, Op, MsgBuffer);
}
@@ -795,9 +996,8 @@ LkNamespaceLocateBegin (
}
}
- /*
- * 3) Check for an ASL Field definition
- */
+ /* 3) Check for an ASL Field definition */
+
else if ((Op->Asl.Parent) &&
((Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_FIELD) ||
(Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_BANKFIELD)))
@@ -818,8 +1018,9 @@ LkNamespaceLocateBegin (
* the name of the region. Get the parse node for the
* region -- which contains the length of the region.
*/
- OwningOp = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Node->Object);
- Op->Asl.Parent->Asl.ExtraValue = ACPI_MUL_8 ((UINT32) OwningOp->Asl.Value.Integer);
+ OwningOp = Node->Op;
+ Op->Asl.Parent->Asl.ExtraValue =
+ ACPI_MUL_8 ((UINT32) OwningOp->Asl.Value.Integer);
/* Examine the field access width */
@@ -926,7 +1127,7 @@ LkNamespaceLocateBegin (
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
LkNamespaceLocateEnd (
ACPI_PARSE_OBJECT *Op,
UINT32 Level,
@@ -965,7 +1166,7 @@ LkNamespaceLocateEnd (
"%s: Popping scope for Op %p\n",
AcpiUtGetTypeName (OpInfo->ObjectType), Op));
- AcpiDsScopeStackPop (WalkState);
+ (void) AcpiDsScopeStackPop (WalkState);
}
return (AE_OK);
diff --git a/sys/contrib/dev/acpica/compiler/aslmain.c b/sys/contrib/dev/acpica/compiler/aslmain.c
index 8d82026..3e8d2c6 100644
--- a/sys/contrib/dev/acpica/compiler/aslmain.c
+++ b/sys/contrib/dev/acpica/compiler/aslmain.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: aslmain - compiler main and utilities
- * $Revision: 77 $
+ * $Revision: 1.87 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -118,9 +118,9 @@
#define _DECLARE_GLOBALS
-#include "aslcompiler.h"
-#include "acnamesp.h"
-#include "acapps.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
+#include <contrib/dev/acpica/acnamesp.h>
+#include <contrib/dev/acpica/acapps.h>
#ifdef _DEBUG
#include <crtdbg.h>
@@ -133,9 +133,39 @@ BOOLEAN AslToFile = TRUE;
BOOLEAN DoCompile = TRUE;
BOOLEAN DoSignon = TRUE;
-char hex[] = {'0','1','2','3','4','5','6','7',
- '8','9','A','B','C','D','E','F'};
+char hex[] =
+{
+ '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
+};
+
+/* Local prototypes */
+
+static void
+Options (
+ void);
+
+static void
+HelpMessage (
+ void);
+
+static void
+Usage (
+ void);
+
+static void
+AslInitialize (
+ void);
+static void
+AslCommandLine (
+ int argc,
+ char **argv);
+
+#ifdef _DEBUG
+#if ACPI_MACHINE_WIDTH != 16
+#include <crtdbg.h>
+#endif
+#endif
/*******************************************************************************
*
@@ -149,7 +179,7 @@ char hex[] = {'0','1','2','3','4','5','6','7',
*
******************************************************************************/
-void
+static void
Options (
void)
{
@@ -182,9 +212,13 @@ Options (
printf (" -d [file] Disassemble AML to ASL source code file (*.dsl)\n");
printf (" -dc [file] Disassemble AML and immediately compile it\n");
printf (" (Obtain DSDT from current system if no input file)\n");
+ printf (" -2 Emit ACPI 2.0 compatible ASL code\n");
printf (" -e Generate External() statements for unresolved symbols\n");
printf (" -g Get ACPI tables and write to files (*.dat)\n");
+ printf ("\nMiscellaneous:\n");
+ printf (" -a Verify source file is entirely ASCII text (0x00-0x7F)\n");
+
printf ("\nHelp:\n");
printf (" -h Additional help and compiler debug options\n");
printf (" -hc Display operators allowed in constant expressions\n");
@@ -194,7 +228,7 @@ Options (
/*******************************************************************************
*
- * FUNCTION: Usage
+ * FUNCTION: HelpMessage
*
* PARAMETERS: None
*
@@ -204,7 +238,7 @@ Options (
*
******************************************************************************/
-void
+static void
HelpMessage (
void)
{
@@ -242,7 +276,7 @@ HelpMessage (
*
******************************************************************************/
-void
+static void
Usage (
void)
{
@@ -264,8 +298,9 @@ Usage (
*
******************************************************************************/
-void
-AslInitialize (void)
+static void
+AslInitialize (
+ void)
{
UINT32 i;
@@ -302,13 +337,13 @@ AslInitialize (void)
*
******************************************************************************/
-void
+static void
AslCommandLine (
int argc,
char **argv)
{
BOOLEAN BadCommandLine = FALSE;
- ACPI_NATIVE_UINT j;
+ ACPI_NATIVE_INT j;
/* Minimum command line contains at least one option or an input file */
@@ -322,10 +357,15 @@ AslCommandLine (
/* Get the command line options */
- while ((j = AcpiGetopt (argc, argv, "ab:cd^efgh^i^l^o:p:r:s:t:v:x:")) != EOF) switch (j)
+ while ((j = AcpiGetopt (argc, argv, "2ab:cd^efgh^i^l^o:p:r:s:t:v:x:")) != EOF) switch (j)
{
+ case '2':
+ Gbl_Acpi2 = TRUE;
+ break;
+
+
case 'a':
- AslToFile = FALSE;
+ Gbl_CheckForAscii = TRUE;
break;
@@ -647,7 +687,10 @@ AslCommandLine (
/* Next parameter must be the input filename */
Gbl_Files[ASL_FILE_INPUT].Filename = argv[AcpiGbl_Optind];
- if (!Gbl_Files[ASL_FILE_INPUT].Filename && !Gbl_DisasmFlag && !Gbl_GetAllTables)
+
+ if (!Gbl_Files[ASL_FILE_INPUT].Filename &&
+ !Gbl_DisasmFlag &&
+ !Gbl_GetAllTables)
{
printf ("Missing input filename\n");
BadCommandLine = TRUE;
@@ -697,6 +740,13 @@ main (
char *Prefix;
+#ifdef _DEBUG
+#if ACPI_MACHINE_WIDTH != 16
+ _CrtSetDbgFlag (_CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF |
+ _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG));
+#endif
+#endif
+
/* Init and command line */
AslInitialize ();
@@ -706,17 +756,20 @@ main (
* If -p not specified, we will use the input filename as the
* output filename prefix
*/
- FlSplitInputPathname (Gbl_Files[ASL_FILE_INPUT].Filename,
+ Status = FlSplitInputPathname (Gbl_Files[ASL_FILE_INPUT].Filename,
&Gbl_DirectoryPath, &Prefix);
+ if (ACPI_FAILURE (Status))
+ {
+ return -1;
+ }
if (Gbl_UseDefaultAmlFilename)
{
Gbl_OutputFilenamePrefix = Prefix;
}
- /*
- * AML Disassembly (Optional)
- */
+ /* AML Disassembly (Optional) */
+
if (Gbl_DisasmFlag || Gbl_GetAllTables)
{
/* ACPI CA subsystem initialization */
@@ -768,8 +821,12 @@ main (
* If -p not specified, we will use the input filename as the
* output filename prefix
*/
- FlSplitInputPathname (Gbl_Files[ASL_FILE_INPUT].Filename,
+ Status = FlSplitInputPathname (Gbl_Files[ASL_FILE_INPUT].Filename,
&Gbl_DirectoryPath, &Prefix);
+ if (ACPI_FAILURE (Status))
+ {
+ return -1;
+ }
if (Gbl_UseDefaultAmlFilename)
{
diff --git a/sys/contrib/dev/acpica/compiler/aslmap.c b/sys/contrib/dev/acpica/compiler/aslmap.c
index b0927f6..0969065 100644
--- a/sys/contrib/dev/acpica/compiler/aslmap.c
+++ b/sys/contrib/dev/acpica/compiler/aslmap.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: aslmap - parser to AML opcode mapping table
- * $Revision: 76 $
+ * $Revision: 1.80 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,9 +116,9 @@
*****************************************************************************/
-#include "aslcompiler.h"
-#include "amlcode.h"
-#include "acparser.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
+#include <contrib/dev/acpica/amlcode.h>
+#include <contrib/dev/acpica/acparser.h>
#define _COMPONENT ACPI_COMPILER
@@ -172,6 +172,56 @@ AslMapNamedOpcodeToDataType (
/*******************************************************************************
*
+ * FUNCTION: MpDisplayReservedNames
+ *
+ * PARAMETERS: None
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Print the table above
+ *
+ ******************************************************************************/
+
+void
+MpDisplayReservedNames (
+ void)
+{
+ UINT32 i;
+
+ printf ("Reserved name information\n\n");
+
+ for (i = 0; ReservedMethods[i].Name; i++)
+ {
+ printf ("%s ", ReservedMethods[i].Name);
+
+ if (ReservedMethods[i].Flags & ASL_RSVD_SCOPE)
+ {
+ printf ("Reserved scope name\n");
+ }
+ else if (ReservedMethods[i].Flags & ASL_RSVD_RESOURCE_NAME)
+ {
+ printf ("Resource data type reserved field name\n");
+ }
+ else
+ {
+ printf ("Method with %d arguments, ",
+ ReservedMethods[i].NumArguments);
+
+ if (ReservedMethods[i].Flags & ASL_RSVD_RETURN_VALUE)
+ {
+ printf ("must return a value\n");
+ }
+ else
+ {
+ printf ("no return value\n");
+ }
+ }
+ }
+}
+
+
+/*******************************************************************************
+ *
* DATA STRUCTURE: ReservedMethods
*
* DESCRIPTION: Contains all reserved methods and names as defined in the
@@ -401,54 +451,6 @@ const ASL_RESERVED_INFO ReservedMethods[] = {
/*******************************************************************************
*
- * FUNCTION: MpDisplayReservedNames
- *
- * PARAMETERS: None
- *
- * RETURN: None
- *
- * DESCRIPTION: Print the table above
- *
- ******************************************************************************/
-
-void
-MpDisplayReservedNames (
- void)
-{
- UINT32 i;
-
- printf ("Reserved name information\n\n");
-
- for (i = 0; ReservedMethods[i].Name; i++)
- {
- printf ("%s ", ReservedMethods[i].Name);
-
- if (ReservedMethods[i].Flags & ASL_RSVD_SCOPE)
- {
- printf ("Reserved scope name\n");
- }
- else if (ReservedMethods[i].Flags & ASL_RSVD_RESOURCE_NAME)
- {
- printf ("Resource data type reserved field name\n");
- }
- else
- {
- printf ("Method with %d arguments, ", ReservedMethods[i].NumArguments);
- if (ReservedMethods[i].Flags & ASL_RSVD_RETURN_VALUE)
- {
- printf ("must return a value\n");
- }
- else
- {
- printf ("no return value\n");
- }
- }
- }
-}
-
-
-/*******************************************************************************
- *
* DATA STRUCTURE: AslKeywordMapping
*
* DESCRIPTION: Maps the ParseOpcode to the actual AML opcode. The parse
@@ -647,6 +649,7 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
/* OBJECTTYPE_OPR */ OP_TABLE_ENTRY (AML_BYTE_OP, ACPI_TYPE_REGION, 0, 0),
/* OBJECTTYPE_PKG */ OP_TABLE_ENTRY (AML_BYTE_OP, ACPI_TYPE_PACKAGE, 0, 0),
/* OBJECTTYPE_POW */ OP_TABLE_ENTRY (AML_BYTE_OP, ACPI_TYPE_POWER, 0, 0),
+/* OBJECTTYPE_PRO */ OP_TABLE_ENTRY (AML_BYTE_OP, ACPI_TYPE_PROCESSOR, 0, 0),
/* OBJECTTYPE_STR */ OP_TABLE_ENTRY (AML_BYTE_OP, ACPI_TYPE_STRING, 0, 0),
/* OBJECTTYPE_THZ */ OP_TABLE_ENTRY (AML_BYTE_OP, ACPI_TYPE_THERMAL, 0, 0),
/* OBJECTTYPE_UNK */ OP_TABLE_ENTRY (AML_BYTE_OP, ACPI_TYPE_ANY, 0, 0),
@@ -706,7 +709,7 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
/* THERMALZONE */ OP_TABLE_ENTRY (AML_THERMAL_ZONE_OP, 0, NODE_AML_PACKAGE, 0),
/* TIMER */ OP_TABLE_ENTRY (AML_TIMER_OP, 0, 0, ACPI_BTYPE_INTEGER),
/* TOBCD */ OP_TABLE_ENTRY (AML_TO_BCD_OP, 0, 0, ACPI_BTYPE_INTEGER),
-/* TOBUFFER */ OP_TABLE_ENTRY (AML_TO_BUFFER_OP, 0, 0, ACPI_BTYPE_COMPUTE_DATA),
+/* TOBUFFER */ OP_TABLE_ENTRY (AML_TO_BUFFER_OP, 0, 0, ACPI_BTYPE_BUFFER),
/* TODECIMALSTRING */ OP_TABLE_ENTRY (AML_TO_DECSTRING_OP, 0, 0, ACPI_BTYPE_STRING),
/* TOHEXSTRING */ OP_TABLE_ENTRY (AML_TO_HEXSTRING_OP, 0, 0, ACPI_BTYPE_STRING),
/* TOINTEGER */ OP_TABLE_ENTRY (AML_TO_INTEGER_OP, 0, 0, ACPI_BTYPE_INTEGER),
diff --git a/sys/contrib/dev/acpica/compiler/aslopcodes.c b/sys/contrib/dev/acpica/compiler/aslopcodes.c
index 4f2033b..2191741 100644
--- a/sys/contrib/dev/acpica/compiler/aslopcodes.c
+++ b/sys/contrib/dev/acpica/compiler/aslopcodes.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: aslopcode - AML opcode generation
- * $Revision: 60 $
+ * $Revision: 1.71 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,14 +116,79 @@
*****************************************************************************/
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
-#include "amlcode.h"
+#include <contrib/dev/acpica/amlcode.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslopcodes")
+/* UUID support */
+
+static UINT8 OpcMapToUUID[16] =
+{
+ 6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34
+};
+
+/* Local prototypes */
+
+static void
+OpcDoAccessAs (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+OpcDoUnicode (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+OpcDoEisaId (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+OpcDoUuId (
+ ACPI_PARSE_OBJECT *Op);
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: OpcAmlOpcodeUpdateWalk
+ *
+ * PARAMETERS: ASL_WALK_CALLBACK
+ *
+ * RETURN: Status
+ *
+ * DESCRIPTION: Opcode update walk, ascending callback
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+OpcAmlOpcodeUpdateWalk (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context)
+{
+
+ /*
+ * Handle the Package() case where the actual opcode cannot be determined
+ * until the PackageLength operand has been folded and minimized.
+ * (PackageOp versus VarPackageOp)
+ *
+ * This is (as of ACPI 3.0) the only case where the AML opcode can change
+ * based upon the value of a parameter.
+ *
+ * The parser always inserts a VarPackage opcode, which can possibly be
+ * optimized to a Package opcode.
+ */
+ if (Op->Asl.ParseOpcode == PARSEOP_VAR_PACKAGE)
+ {
+ OpnDoPackage (Op);
+ }
+
+ return (AE_OK);
+}
+
+
/*******************************************************************************
*
* FUNCTION: OpcAmlOpcodeWalk
@@ -171,18 +236,26 @@ OpcGetIntegerWidth (
{
ACPI_PARSE_OBJECT *Child;
+
if (!Op)
{
return;
}
- Child = Op->Asl.Child;
- Child = Child->Asl.Next;
- Child = Child->Asl.Next;
+ if (Gbl_RevisionOverride)
+ {
+ AcpiUtSetIntegerWidth (Gbl_RevisionOverride);
+ }
+ else
+ {
+ Child = Op->Asl.Child;
+ Child = Child->Asl.Next;
+ Child = Child->Asl.Next;
- /* Use the revision to set the integer width */
+ /* Use the revision to set the integer width */
- AcpiUtSetIntegerWidth ((UINT8) Child->Asl.Value.Integer);
+ AcpiUtSetIntegerWidth ((UINT8) Child->Asl.Value.Integer);
+ }
}
@@ -206,17 +279,18 @@ OpcSetOptimalIntegerSize (
ACPI_PARSE_OBJECT *Op)
{
-/*
- TBD: - we don't want to optimize integers in the block header, but the
- code below does not work correctly.
-
+#if 0
+ /*
+ * TBD: - we don't want to optimize integers in the block header, but the
+ * code below does not work correctly.
+ */
if (Op->Asl.Parent &&
Op->Asl.Parent->Asl.Parent &&
- (Op->Asl.Parent->Asl.Parent->Asl.ParseOpcode == PARSEOP_DEFINITIONBLOCK))
+ (Op->Asl.Parent->Asl.Parent->Asl.ParseOpcode == PARSEOP_DEFINITIONBLOCK))
{
return 0;
}
-*/
+#endif
/*
* Check for the special AML integers first - Zero, One, Ones.
@@ -232,13 +306,15 @@ OpcSetOptimalIntegerSize (
case 0:
Op->Asl.AmlOpcode = AML_ZERO_OP;
- AslError (ASL_OPTIMIZATION, ASL_MSG_INTEGER_OPTIMIZATION, Op, "Zero");
+ AslError (ASL_OPTIMIZATION, ASL_MSG_INTEGER_OPTIMIZATION,
+ Op, "Zero");
return 1;
case 1:
Op->Asl.AmlOpcode = AML_ONE_OP;
- AslError (ASL_OPTIMIZATION, ASL_MSG_INTEGER_OPTIMIZATION, Op, "One");
+ AslError (ASL_OPTIMIZATION, ASL_MSG_INTEGER_OPTIMIZATION,
+ Op, "One");
return 1;
case ACPI_UINT32_MAX:
@@ -248,7 +324,8 @@ OpcSetOptimalIntegerSize (
if (AcpiGbl_IntegerByteWidth == 4)
{
Op->Asl.AmlOpcode = AML_ONES_OP;
- AslError (ASL_OPTIMIZATION, ASL_MSG_INTEGER_OPTIMIZATION, Op, "Ones");
+ AslError (ASL_OPTIMIZATION, ASL_MSG_INTEGER_OPTIMIZATION,
+ Op, "Ones");
return 1;
}
break;
@@ -260,7 +337,8 @@ OpcSetOptimalIntegerSize (
if (AcpiGbl_IntegerByteWidth == 8)
{
Op->Asl.AmlOpcode = AML_ONES_OP;
- AslError (ASL_OPTIMIZATION, ASL_MSG_INTEGER_OPTIMIZATION, Op, "Ones");
+ AslError (ASL_OPTIMIZATION, ASL_MSG_INTEGER_OPTIMIZATION,
+ Op, "Ones");
return 1;
}
break;
@@ -289,6 +367,19 @@ OpcSetOptimalIntegerSize (
}
else
{
+ if (AcpiGbl_IntegerByteWidth == 4)
+ {
+ AslError (ASL_WARNING, ASL_MSG_INTEGER_LENGTH,
+ Op, NULL);
+
+ if (!Gbl_IgnoreErrors)
+ {
+ /* Truncate the integer to 32-bit */
+ Op->Asl.AmlOpcode = AML_DWORD_OP;
+ return 4;
+ }
+ }
+
Op->Asl.AmlOpcode = AML_QWORD_OP;
return 8;
}
@@ -307,11 +398,11 @@ OpcSetOptimalIntegerSize (
*
******************************************************************************/
-void
+static void
OpcDoAccessAs (
- ACPI_PARSE_OBJECT *Op)
+ ACPI_PARSE_OBJECT *Op)
{
- ACPI_PARSE_OBJECT *Next;
+ ACPI_PARSE_OBJECT *Next;
Op->Asl.AmlOpcodeLength = 1;
@@ -350,17 +441,17 @@ OpcDoAccessAs (
*
******************************************************************************/
-void
+static void
OpcDoUnicode (
- ACPI_PARSE_OBJECT *Op)
+ ACPI_PARSE_OBJECT *Op)
{
- ACPI_PARSE_OBJECT *InitializerOp;
- UINT32 Length;
- UINT32 Count;
- UINT32 i;
- UINT8 *AsciiString;
- UINT16 *UnicodeString;
- ACPI_PARSE_OBJECT *BufferLengthOp;
+ ACPI_PARSE_OBJECT *InitializerOp;
+ UINT32 Length;
+ UINT32 Count;
+ UINT32 i;
+ UINT8 *AsciiString;
+ UINT16 *UnicodeString;
+ ACPI_PARSE_OBJECT *BufferLengthOp;
/* Change op into a buffer object */
@@ -448,7 +539,7 @@ OpcDoUnicode (
*
******************************************************************************/
-void
+static void
OpcDoEisaId (
ACPI_PARSE_OBJECT *Op)
{
@@ -463,7 +554,7 @@ OpcDoEisaId (
/*
* The EISAID string must be exactly 7 characters and of the form
- * "LLLXXXX" -- 3 letters and 4 hex digits (e.g., "PNP0001")
+ * "UUUXXXX" -- 3 uppercase letters and 4 hex digits (e.g., "PNP0001")
*/
if (ACPI_STRLEN (InString) != 7)
{
@@ -540,13 +631,11 @@ OpcDoEisaId (
*
* RETURN: None
*
- * DESCRIPTION:
+ * DESCRIPTION: Convert UUID string to 16-byte buffer
*
******************************************************************************/
-static UINT8 OpcMapToUUID[16] = {6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34};
-
-void
+static void
OpcDoUuId (
ACPI_PARSE_OBJECT *Op)
{
@@ -594,15 +683,18 @@ OpcDoUuId (
}
else for (i = 0; i < 16; i++)
{
- Buffer[i] = (char) (UtHexCharToValue (InString[OpcMapToUUID[i]]) << 4);
- Buffer[i] = (char) UtHexCharToValue (InString[OpcMapToUUID[i] + 1]);
+ Buffer[i] = (char) (UtHexCharToValue (InString[OpcMapToUUID[i]]) << 4);
+ Buffer[i] |= (char) UtHexCharToValue (InString[OpcMapToUUID[i] + 1]);
}
/* Change Op to a Buffer */
Op->Asl.ParseOpcode = PARSEOP_BUFFER;
Op->Common.AmlOpcode = AML_BUFFER_OP;
- Op->Asl.CompileFlags &= ~NODE_COMPILE_TIME_CONST; /* Disable further optimization */
+
+ /* Disable further optimization */
+
+ Op->Asl.CompileFlags &= ~NODE_COMPILE_TIME_CONST;
UtSetParseOpName (Op);
/* Child node is the buffer length */
@@ -709,18 +801,6 @@ OpcGenerateAmlOpcode (
Op->Asl.Child->Asl.Next->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
break;
- case PARSEOP_PACKAGE:
- /*
- * The variable-length package has a different opcode
- */
- if ((Op->Asl.Child->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
- (Op->Asl.Child->Asl.ParseOpcode != PARSEOP_INTEGER) &&
- (Op->Asl.Child->Asl.ParseOpcode != PARSEOP_BYTECONST))
- {
- Op->Asl.AmlOpcode = AML_VAR_PACKAGE_OP;
- }
- break;
-
default:
/* Nothing to do for other opcodes */
break;
diff --git a/sys/contrib/dev/acpica/compiler/asloperands.c b/sys/contrib/dev/acpica/compiler/asloperands.c
index 71b879c..fb465e9 100644
--- a/sys/contrib/dev/acpica/compiler/asloperands.c
+++ b/sys/contrib/dev/acpica/compiler/asloperands.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: asloperands - AML operand processing
- * $Revision: 46 $
+ * $Revision: 1.57 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,13 +116,90 @@
*****************************************************************************/
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
-#include "amlcode.h"
+#include <contrib/dev/acpica/amlcode.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("asloperands")
+/* Local prototypes */
+
+static void
+OpnDoField (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+OpnDoBankField (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+OpnDoBuffer (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+OpnDoDefinitionBlock (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+OpnDoFieldCommon (
+ ACPI_PARSE_OBJECT *FieldOp,
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+OpnDoIndexField (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+OpnDoLoadTable (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+OpnDoMethod (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+OpnDoMutex (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+OpnDoRegion (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+OpnAttachNameToNode (
+ ACPI_PARSE_OBJECT *Op);
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: OpnDoMutex
+ *
+ * PARAMETERS: Op - The parent parse node
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Construct the operands for the MUTEX ASL keyword.
+ *
+ ******************************************************************************/
+
+static void
+OpnDoMutex (
+ ACPI_PARSE_OBJECT *Op)
+{
+ ACPI_PARSE_OBJECT *Next;
+
+
+ Next = Op->Asl.Child;
+ Next = Next->Asl.Next;
+
+ if (Next->Asl.Value.Integer > 15)
+ {
+ AslError (ASL_ERROR, ASL_MSG_SYNC_LEVEL, Next, NULL);
+ }
+ return;
+}
+
/*******************************************************************************
*
@@ -136,7 +213,7 @@
*
******************************************************************************/
-void
+static void
OpnDoMethod (
ACPI_PARSE_OBJECT *Op)
{
@@ -173,11 +250,15 @@ OpnDoMethod (
Next->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
}
- /* Concurrency value (0-15 valid) */
+ /* Concurrency value (valid values are 0-15) */
Next = Next->Asl.Next;
if (Next->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
{
+ if (Next->Asl.Value.Integer > 15)
+ {
+ AslError (ASL_ERROR, ASL_MSG_SYNC_LEVEL, Next, NULL);
+ }
Concurrency = (UINT8) Next->Asl.Value.Integer;
}
@@ -214,7 +295,7 @@ OpnDoMethod (
*
******************************************************************************/
-void
+static void
OpnDoFieldCommon (
ACPI_PARSE_OBJECT *FieldOp,
ACPI_PARSE_OBJECT *Op)
@@ -305,7 +386,8 @@ OpnDoFieldCommon (
* Not allowed to specify a backwards offset!
* Issue error and ignore this node.
*/
- AslError (ASL_ERROR, ASL_MSG_BACKWARDS_OFFSET, PkgLengthNode, NULL);
+ AslError (ASL_ERROR, ASL_MSG_BACKWARDS_OFFSET, PkgLengthNode,
+ NULL);
Next->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
PkgLengthNode->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
}
@@ -324,7 +406,8 @@ OpnDoFieldCommon (
* Valid new offset - set the value to be inserted into the AML
* and update the offset counter.
*/
- PkgLengthNode->Asl.Value.Integer = NewBitOffset - CurrentBitOffset;
+ PkgLengthNode->Asl.Value.Integer =
+ NewBitOffset - CurrentBitOffset;
CurrentBitOffset = NewBitOffset;
}
break;
@@ -390,7 +473,7 @@ OpnDoFieldCommon (
*
******************************************************************************/
-void
+static void
OpnDoField (
ACPI_PARSE_OBJECT *Op)
{
@@ -420,7 +503,7 @@ OpnDoField (
*
******************************************************************************/
-void
+static void
OpnDoIndexField (
ACPI_PARSE_OBJECT *Op)
{
@@ -454,7 +537,7 @@ OpnDoIndexField (
*
******************************************************************************/
-void
+static void
OpnDoBankField (
ACPI_PARSE_OBJECT *Op)
{
@@ -493,7 +576,7 @@ OpnDoBankField (
*
******************************************************************************/
-void
+static void
OpnDoRegion (
ACPI_PARSE_OBJECT *Op)
{
@@ -541,7 +624,7 @@ OpnDoRegion (
*
******************************************************************************/
-void
+static void
OpnDoBuffer (
ACPI_PARSE_OBJECT *Op)
{
@@ -639,9 +722,9 @@ OpnDoBuffer (
if (!BufferLength)
{
- /* No length AND no items -- issue a warning */
+ /* No length AND no items -- issue notice */
- AslError (ASL_WARNING, ASL_MSG_BUFFER_LENGTH, BufferLengthOp, NULL);
+ AslError (ASL_REMARK, ASL_MSG_BUFFER_LENGTH, BufferLengthOp, NULL);
/* But go ahead and put the buffer length of zero into the AML */
}
@@ -668,7 +751,9 @@ OpnDoBuffer (
*
* RETURN: None
*
- * DESCRIPTION: Construct the AML operands for the PACKAGE ASL keyword.
+ * DESCRIPTION: Construct the AML operands for the PACKAGE ASL keyword. NOTE:
+ * can only be called after constants have been folded, to ensure
+ * that the PackageLength operand has been fully reduced.
*
******************************************************************************/
@@ -678,23 +763,16 @@ OpnDoPackage (
{
ACPI_PARSE_OBJECT *InitializerOp;
ACPI_PARSE_OBJECT *PackageLengthOp;
+ UINT32 PackageLength = 0;
- /* Optional arguments for this opcode with defaults */
-
- UINT32 PackageLength = 0;
-
- /* Opcode and package length first */
- /* Buffer Length is next, followed by the initializer list */
+ /* Opcode and package length first, followed by the initializer list */
PackageLengthOp = Op->Asl.Child;
InitializerOp = PackageLengthOp->Asl.Next;
- /*
- * We always count the number of items in the initializer list, because if
- * it is larger than the buffer length, we will define the buffer size
- * to be the size of the initializer list (Per ACPI Spec)
- */
+ /* Count the number of items in the initializer list */
+
if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
{
/* The peer list contains the byte list (if any...) */
@@ -706,43 +784,78 @@ OpnDoPackage (
}
}
- /* Check if initializer list is longer than the buffer length */
+ /* If package length is a constant, compare to the initializer list */
if ((PackageLengthOp->Asl.ParseOpcode == PARSEOP_INTEGER) ||
- (PackageLengthOp->Asl.ParseOpcode == PARSEOP_BYTECONST))
+ (PackageLengthOp->Asl.ParseOpcode == PARSEOP_QWORDCONST))
{
- if (PackageLengthOp->Asl.Value.Integer > PackageLength)
+ if (PackageLengthOp->Asl.Value.Integer >= PackageLength)
{
+ /* Allow package to be longer than the initializer list */
+
PackageLength = (UINT32) PackageLengthOp->Asl.Value.Integer;
}
+ else
+ {
+ /*
+ * Initializer list is longer than the package length. This
+ * is an error as per the ACPI spec.
+ */
+ AslError (ASL_ERROR, ASL_MSG_LIST_LENGTH,
+ PackageLengthOp->Asl.Next, NULL);
+ }
}
- /*
- * If not a variable-length package, check for a zero
- * package length
- */
+ if (PackageLengthOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG)
+ {
+ /*
+ * This is the case if the PackageLength was left empty - Package()
+ * The package length becomes the length of the initializer list
+ */
+ Op->Asl.Child->Asl.ParseOpcode = PARSEOP_INTEGER;
+ Op->Asl.Child->Asl.Value.Integer = PackageLength;
+
+ /* Set the AML opcode */
+
+ (void) OpcSetOptimalIntegerSize (Op->Asl.Child);
+ }
+
+ /* If not a variable-length package, check for a zero package length */
+
if ((PackageLengthOp->Asl.ParseOpcode == PARSEOP_INTEGER) ||
- (PackageLengthOp->Asl.ParseOpcode == PARSEOP_BYTECONST) ||
+ (PackageLengthOp->Asl.ParseOpcode == PARSEOP_QWORDCONST) ||
(PackageLengthOp->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG))
{
if (!PackageLength)
{
- /* No length AND no items -- issue a warning */
+ /* No length AND no initializer list -- issue a remark */
- AslError (ASL_WARNING, ASL_MSG_PACKAGE_LENGTH, PackageLengthOp, NULL);
+ AslError (ASL_REMARK, ASL_MSG_PACKAGE_LENGTH,
+ PackageLengthOp, NULL);
/* But go ahead and put the buffer length of zero into the AML */
}
}
/*
- * Just set the buffer size node to be the buffer length, regardless
- * of whether it was previously an integer or a default_arg placeholder
+ * If the PackageLength is a constant <= 255, we can change the
+ * AML opcode from VarPackage to a simple (ACPI 1.0) Package opcode.
*/
- PackageLengthOp->Asl.AmlOpcode = AML_RAW_DATA_BYTE;
- PackageLengthOp->Asl.AmlLength = 1;
- PackageLengthOp->Asl.ParseOpcode = PARSEOP_RAW_DATA;
- PackageLengthOp->Asl.Value.Integer = PackageLength;
+ if ((Op->Asl.Child->Asl.ParseOpcode == PARSEOP_INTEGER) &&
+ (Op->Asl.Child->Asl.Value.Integer <= 255))
+ {
+ Op->Asl.AmlOpcode = AML_PACKAGE_OP;
+ Op->Asl.ParseOpcode = PARSEOP_PACKAGE;
+
+ /*
+ * Just set the package size node to be the package length, regardless
+ * of whether it was previously an integer or a default_arg placeholder
+ */
+ PackageLengthOp->Asl.AmlOpcode = AML_RAW_DATA_BYTE;
+ PackageLengthOp->Asl.AmlLength = 1;
+ PackageLengthOp->Asl.ParseOpcode = PARSEOP_RAW_DATA;
+ PackageLengthOp->Asl.Value.Integer = PackageLength;
+ }
/* Remaining nodes are handled via the tree walk */
}
@@ -760,7 +873,7 @@ OpnDoPackage (
*
******************************************************************************/
-void
+static void
OpnDoLoadTable (
ACPI_PARSE_OBJECT *Op)
{
@@ -791,10 +904,12 @@ OpnDoLoadTable (
OpcGenerateAmlOpcode (Next);
}
+#ifdef ASL_FUTURE_IMPLEMENTATION
+
+ /* TBD: NOT IMPLEMENTED */
/* Fifth child is the [optional] ParameterPathString */
/* Sixth child is the [optional] ParameterData */
-/*
Next = Next->Asl.Next;
if (Next->Asl.ParseOpcode == DEFAULT_ARG)
{
@@ -811,7 +926,7 @@ OpnDoLoadTable (
Next->Asl.ParseOpcode = ZERO;
OpcGenerateAmlOpcode (Next);
}
- */
+#endif
}
@@ -827,7 +942,7 @@ OpnDoLoadTable (
*
******************************************************************************/
-void
+static void
OpnDoDefinitionBlock (
ACPI_PARSE_OBJECT *Op)
{
@@ -862,14 +977,16 @@ OpnDoDefinitionBlock (
Gbl_TableSignature = Child->Asl.Value.String;
if (ACPI_STRLEN (Gbl_TableSignature) != 4)
{
- AslError (ASL_ERROR, ASL_MSG_TABLE_SIGNATURE, Child, "Length not exactly 4");
+ AslError (ASL_ERROR, ASL_MSG_TABLE_SIGNATURE, Child,
+ "Length not exactly 4");
}
for (i = 0; i < 4; i++)
{
if (!isalnum (Gbl_TableSignature[i]))
{
- AslError (ASL_ERROR, ASL_MSG_TABLE_SIGNATURE, Child, "Contains non-alphanumeric characters");
+ AslError (ASL_ERROR, ASL_MSG_TABLE_SIGNATURE, Child,
+ "Contains non-alphanumeric characters");
}
}
}
@@ -963,7 +1080,7 @@ UtGetArg (
*
******************************************************************************/
-void
+static void
OpnAttachNameToNode (
ACPI_PARSE_OBJECT *Op)
{
@@ -1062,6 +1179,10 @@ OpnGenerateAmlOperands (
OpnDoMethod (Op);
break;
+ case PARSEOP_MUTEX:
+ OpnDoMutex (Op);
+ break;
+
case PARSEOP_FIELD:
OpnDoField (Op);
break;
@@ -1082,10 +1203,6 @@ OpnGenerateAmlOperands (
OpnDoLoadTable (Op);
break;
- case PARSEOP_PACKAGE:
- OpnDoPackage (Op);
- break;
-
case PARSEOP_OPERATIONREGION:
OpnDoRegion (Op);
break;
diff --git a/sys/contrib/dev/acpica/compiler/aslopt.c b/sys/contrib/dev/acpica/compiler/aslopt.c
index f0416d8..e406abb 100644
--- a/sys/contrib/dev/acpica/compiler/aslopt.c
+++ b/sys/contrib/dev/acpica/compiler/aslopt.c
@@ -1,7 +1,7 @@
/******************************************************************************
*
* Module Name: aslopt- Compiler optimizations
- * $Revision: 16 $
+ * $Revision: 1.21 $
*
*****************************************************************************/
@@ -9,7 +9,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -115,19 +115,51 @@
*****************************************************************************/
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
-#include "acparser.h"
-#include "amlcode.h"
-#include "acnamesp.h"
+#include <contrib/dev/acpica/acparser.h>
+#include <contrib/dev/acpica/amlcode.h>
+#include <contrib/dev/acpica/acnamesp.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslopt")
-UINT32 OptTotal = 0;
+static UINT32 OptTotal = 0;
+
+/* Local prototypes */
+
+static ACPI_STATUS
+OptSearchToRoot (
+ ACPI_PARSE_OBJECT *Op,
+ ACPI_WALK_STATE *WalkState,
+ ACPI_NAMESPACE_NODE *CurrentNode,
+ ACPI_NAMESPACE_NODE *TargetNode,
+ ACPI_BUFFER *TargetPath,
+ char **NewPath);
+
+static ACPI_STATUS
+OptBuildShortestPath (
+ ACPI_PARSE_OBJECT *Op,
+ ACPI_WALK_STATE *WalkState,
+ ACPI_NAMESPACE_NODE *CurrentNode,
+ ACPI_NAMESPACE_NODE *TargetNode,
+ ACPI_BUFFER *CurrentPath,
+ ACPI_BUFFER *TargetPath,
+ ACPI_SIZE AmlNameStringLength,
+ UINT8 IsDeclaration,
+ char **ReturnNewPath);
+
+static ACPI_STATUS
+OptOptimizeNameDeclaration (
+ ACPI_PARSE_OBJECT *Op,
+ ACPI_WALK_STATE *WalkState,
+ ACPI_NAMESPACE_NODE *CurrentNode,
+ ACPI_NAMESPACE_NODE *TargetNode,
+ char *AmlNameString,
+ char **NewPath);
/*******************************************************************************
@@ -149,7 +181,7 @@ UINT32 OptTotal = 0;
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
OptSearchToRoot (
ACPI_PARSE_OBJECT *Op,
ACPI_WALK_STATE *WalkState,
@@ -174,7 +206,8 @@ OptSearchToRoot (
* name in the search path before the one we want, the nodes will
* not match, and we cannot use this optimization.
*/
- Path = &(((char *) TargetPath->Pointer)[TargetPath->Length - ACPI_NAME_SIZE]),
+ Path = &(((char *) TargetPath->Pointer)[TargetPath->Length -
+ ACPI_NAME_SIZE]),
ScopeInfo.Scope.Node = CurrentNode;
/* Lookup the NameSeg using SEARCH_PARENT (search-to-root) */
@@ -241,7 +274,7 @@ OptSearchToRoot (
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
OptBuildShortestPath (
ACPI_PARSE_OBJECT *Op,
ACPI_WALK_STATE *WalkState,
@@ -295,8 +328,10 @@ OptBuildShortestPath (
/* Compare two single NameSegs */
if (ACPI_STRNCMP (
- &((char *) TargetPath->Pointer)[(NumCommonSegments * ACPI_PATH_SEGMENT_LENGTH) + 1],
- &((char *) CurrentPath->Pointer)[(NumCommonSegments * ACPI_PATH_SEGMENT_LENGTH) + 1],
+ &((char *) TargetPath->Pointer)[(NumCommonSegments *
+ ACPI_PATH_SEGMENT_LENGTH) + 1],
+ &((char *) CurrentPath->Pointer)[(NumCommonSegments *
+ ACPI_PATH_SEGMENT_LENGTH) + 1],
ACPI_NAME_SIZE))
{
/* Mismatch */
@@ -305,7 +340,8 @@ OptBuildShortestPath (
}
}
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " COMMON: %d", NumCommonSegments));
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " COMMON: %d",
+ NumCommonSegments));
/* There must be at least 1 common NameSeg in order to optimize */
@@ -330,12 +366,13 @@ OptBuildShortestPath (
/* Determine how many prefix Carats are required */
- NumCarats = (CurrentPath->Length / ACPI_PATH_SEGMENT_LENGTH) - NumCommonSegments;
+ NumCarats = (CurrentPath->Length / ACPI_PATH_SEGMENT_LENGTH) -
+ NumCommonSegments;
/*
* Construct a new target string
*/
- NewPathExternal = ACPI_MEM_CALLOCATE (TargetPath->Length + NumCarats);
+ NewPathExternal = ACPI_MEM_CALLOCATE (TargetPath->Length + NumCarats + 1);
/* Insert the Carats into the Target string */
@@ -344,8 +381,10 @@ OptBuildShortestPath (
NewPathExternal[i] = '^';
}
- /* Copy only the necessary (optimal) segments from the original target string */
-
+ /*
+ * Copy only the necessary (optimal) segments from the original
+ * target string
+ */
Index = (NumCommonSegments * ACPI_PATH_SEGMENT_LENGTH) + 1;
/* Special handling for exact subpath in a name declaration */
@@ -353,8 +392,9 @@ OptBuildShortestPath (
if (IsDeclaration && SubPath && (CurrentPath->Length > TargetPath->Length))
{
/*
- * The current path is longer than the target, and the target is a subpath
- * of the current path. We must include one more NameSeg of the target path
+ * The current path is longer than the target, and the target is a
+ * subpath of the current path. We must include one more NameSeg of
+ * the target path
*/
Index -= ACPI_PATH_SEGMENT_LENGTH;
@@ -368,26 +408,36 @@ OptBuildShortestPath (
}
}
+ /* Make sure we haven't gone off the end of the target path */
+
+ if (Index > TargetPath->Length)
+ {
+ Index = TargetPath->Length;
+ }
+
+
ACPI_STRCPY (&NewPathExternal[i], &((char *) TargetPath->Pointer)[Index]);
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " %-24s", NewPathExternal));
/*
- * Internalize the new target string and check it against the original string
- * to make sure that this is in fact an optimization. If the original string
- * is already optimal, there is no point in continuing.
+ * Internalize the new target string and check it against the original
+ * string to make sure that this is in fact an optimization. If the
+ * original string is already optimal, there is no point in continuing.
*/
Status = AcpiNsInternalizeName (NewPathExternal, &NewPath);
if (ACPI_FAILURE (Status))
{
- AslCoreSubsystemError (Op, Status, "Internalizing new NamePath", ASL_NO_ABORT);
+ AslCoreSubsystemError (Op, Status, "Internalizing new NamePath",
+ ASL_NO_ABORT);
ACPI_MEM_FREE (NewPathExternal);
return (Status);
}
if (ACPI_STRLEN (NewPath) >= AmlNameStringLength)
{
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " NOT SHORTER (New %d old %d)",
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS,
+ " NOT SHORTER (New %d old %d)",
ACPI_STRLEN (NewPath), AmlNameStringLength));
ACPI_MEM_FREE (NewPathExternal);
return (AE_NOT_FOUND);
@@ -454,7 +504,7 @@ OptBuildShortestPath (
*
******************************************************************************/
-ACPI_STATUS
+static ACPI_STATUS
OptOptimizeNameDeclaration (
ACPI_PARSE_OBJECT *Op,
ACPI_WALK_STATE *WalkState,
@@ -488,7 +538,8 @@ OptOptimizeNameDeclaration (
NULL, &NewPathExternal);
if (ACPI_FAILURE (Status))
{
- AslCoreSubsystemError (Op, Status, "Externalizing NamePath", ASL_NO_ABORT);
+ AslCoreSubsystemError (Op, Status, "Externalizing NamePath",
+ ASL_NO_ABORT);
return (Status);
}
@@ -520,7 +571,8 @@ OptOptimizeNameDeclaration (
/* Node is not correct, do not use this optimization */
Status = AE_NOT_FOUND;
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " ***** WRONG NODE"));
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS,
+ " ***** WRONG NODE"));
AslError (ASL_WARNING, ASL_MSG_COMPILER_INTERNAL, Op,
"Not using optimized name - found wrong node");
}
@@ -529,7 +581,8 @@ OptOptimizeNameDeclaration (
{
/* The lookup failed, we obviously cannot use this optimization */
- ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, " ***** NOT FOUND"));
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS,
+ " ***** NOT FOUND"));
AslError (ASL_WARNING, ASL_MSG_COMPILER_INTERNAL, Op,
"Not using optimized name - did not find node");
}
@@ -644,8 +697,10 @@ OptOptimizeNamePath (
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, "NAME"));
- /* The node of interest is the parent of this node (the containing scope) */
-
+ /*
+ * The node of interest is the parent of this node
+ * (the containing scope)
+ */
CurrentNode = Op->Asl.Parent->Asl.Node;
if (!CurrentNode)
{
@@ -668,7 +723,8 @@ OptOptimizeNamePath (
Status = AcpiNsHandleToPathname (TargetNode, &TargetPath);
if (ACPI_FAILURE (Status))
{
- AslCoreSubsystemError (Op, Status, "Getting Target NamePath", ASL_NO_ABORT);
+ AslCoreSubsystemError (Op, Status, "Getting Target NamePath",
+ ASL_NO_ABORT);
return_VOID;
}
TargetPath.Length--; /* Subtract one for null terminator */
@@ -679,7 +735,8 @@ OptOptimizeNamePath (
Status = AcpiNsHandleToPathname (CurrentNode, &CurrentPath);
if (ACPI_FAILURE (Status))
{
- AslCoreSubsystemError (Op, Status, "Getting Current NamePath", ASL_NO_ABORT);
+ AslCoreSubsystemError (Op, Status, "Getting Current NamePath",
+ ASL_NO_ABORT);
return_VOID;
}
CurrentPath.Length--; /* Subtract one for null terminator */
@@ -690,7 +747,8 @@ OptOptimizeNamePath (
NULL, &ExternalNameString);
if (ACPI_FAILURE (Status))
{
- AslCoreSubsystemError (Op, Status, "Externalizing NamePath", ASL_NO_ABORT);
+ AslCoreSubsystemError (Op, Status, "Externalizing NamePath",
+ ASL_NO_ABORT);
return_VOID;
}
diff --git a/sys/contrib/dev/acpica/compiler/aslresource.c b/sys/contrib/dev/acpica/compiler/aslresource.c
index 304d798..6623fbe 100644
--- a/sys/contrib/dev/acpica/compiler/aslresource.c
+++ b/sys/contrib/dev/acpica/compiler/aslresource.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: aslresource - Resource templates and descriptors
- * $Revision: 32 $
+ * $Revision: 1.38 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,9 +116,9 @@
*****************************************************************************/
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
-#include "amlcode.h"
+#include <contrib/dev/acpica/amlcode.h>
#define _COMPONENT ACPI_COMPILER
@@ -162,7 +162,7 @@ RsAllocateResourceNode (
*
* FUNCTION: RsCreateBitField
*
- * PARAMETERS: Op - Resource field node
+ * PARAMETERS: Op - Resource field node
* Name - Name of the field (Used only to reference
* the field in the ASL, not in the AML)
* ByteOffset - Offset from the field start
@@ -185,7 +185,7 @@ RsCreateBitField (
{
Op->Asl.ExternalName = Name;
- Op->Asl.Value.Integer = (ByteOffset * 8) + BitOffset;
+ Op->Asl.Value.Integer = ((ACPI_INTEGER) ByteOffset * 8) + BitOffset;
Op->Asl.CompileFlags |= (NODE_IS_RESOURCE_FIELD | NODE_IS_BIT_OFFSET);
}
@@ -194,7 +194,7 @@ RsCreateBitField (
*
* FUNCTION: RsCreateByteField
*
- * PARAMETERS: Op - Resource field node
+ * PARAMETERS: Op - Resource field node
* Name - Name of the field (Used only to reference
* the field in the ASL, not in the AML)
* ByteOffset - Offset from the field start
@@ -225,7 +225,7 @@ RsCreateByteField (
* FUNCTION: RsSetFlagBits
*
* PARAMETERS: *Flags - Pointer to the flag byte
- * Op - Flag initialization node
+ * Op - Flag initialization node
* Position - Bit position within the flag byte
* Default - Used if the node is DEFAULT.
*
@@ -292,6 +292,69 @@ RsCompleteNodeAndGetNext (
/*******************************************************************************
*
+ * FUNCTION: RsCheckListForDuplicates
+ *
+ * PARAMETERS: Op - First op in the initializer list
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Check an initializer list for duplicate values. Emits an error
+ * if any duplicates are found.
+ *
+ ******************************************************************************/
+
+void
+RsCheckListForDuplicates (
+ ACPI_PARSE_OBJECT *Op)
+{
+ ACPI_PARSE_OBJECT *NextValueOp = Op;
+ ACPI_PARSE_OBJECT *NextOp;
+ UINT32 Value;
+
+
+ if (!Op)
+ {
+ return;
+ }
+
+ /* Search list once for each value in the list */
+
+ while (NextValueOp)
+ {
+ Value = (UINT32) NextValueOp->Asl.Value.Integer;
+
+ /* Compare this value to all remaining values in the list */
+
+ NextOp = ASL_GET_PEER_NODE (NextValueOp);
+ while (NextOp)
+ {
+ if (NextOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
+ {
+ /* Compare values */
+
+ if (Value == (UINT32) NextOp->Asl.Value.Integer)
+ {
+ /* Emit error only once per duplicate node */
+
+ if (!(NextOp->Asl.CompileFlags & NODE_IS_DUPLICATE))
+ {
+ NextOp->Asl.CompileFlags |= NODE_IS_DUPLICATE;
+ AslError (ASL_ERROR, ASL_MSG_DUPLICATE_ITEM,
+ NextOp, NULL);
+ }
+ }
+ }
+
+ NextOp = ASL_GET_PEER_NODE (NextOp);
+ }
+
+ NextValueOp = ASL_GET_PEER_NODE (NextValueOp);
+ }
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: RsDoOneResourceDescriptor
*
* PARAMETERS: DescriptorTypeOp - Parent parse node of the descriptor
@@ -318,26 +381,36 @@ RsDoOneResourceDescriptor (
switch (DescriptorTypeOp->Asl.ParseOpcode)
{
case PARSEOP_DMA:
- Rnode = RsDoDmaDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoDmaDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_DWORDIO:
- Rnode = RsDoDwordIoDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoDwordIoDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_DWORDMEMORY:
- Rnode = RsDoDwordMemoryDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoDwordMemoryDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
+ break;
+
+ case PARSEOP_DWORDSPACE:
+ Rnode = RsDoDwordSpaceDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_ENDDEPENDENTFN:
switch (*State)
{
case ACPI_RSTATE_NORMAL:
- AslError (ASL_ERROR, ASL_MSG_MISSING_STARTDEPENDENT, DescriptorTypeOp, NULL);
+ AslError (ASL_ERROR, ASL_MSG_MISSING_STARTDEPENDENT,
+ DescriptorTypeOp, NULL);
break;
case ACPI_RSTATE_START_DEPENDENT:
- AslError (ASL_ERROR, ASL_MSG_DEPENDENT_NESTING, DescriptorTypeOp, NULL);
+ AslError (ASL_ERROR, ASL_MSG_DEPENDENT_NESTING,
+ DescriptorTypeOp, NULL);
break;
case ACPI_RSTATE_DEPENDENT_LIST:
@@ -346,58 +419,91 @@ RsDoOneResourceDescriptor (
}
*State = ACPI_RSTATE_NORMAL;
- Rnode = RsDoEndDependentDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoEndDependentDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
+ break;
+
+ case PARSEOP_EXTENDEDIO:
+ Rnode = RsDoExtendedIoDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
+ break;
+
+ case PARSEOP_EXTENDEDMEMORY:
+ Rnode = RsDoExtendedMemoryDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
+ break;
+
+ case PARSEOP_EXTENDEDSPACE:
+ Rnode = RsDoExtendedSpaceDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_FIXEDIO:
- Rnode = RsDoFixedIoDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoFixedIoDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_INTERRUPT:
- Rnode = RsDoInterruptDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoInterruptDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_IO:
- Rnode = RsDoIoDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoIoDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_IRQ:
- Rnode = RsDoIrqDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoIrqDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_IRQNOFLAGS:
- Rnode = RsDoIrqNoFlagsDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoIrqNoFlagsDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_MEMORY24:
- Rnode = RsDoMemory24Descriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoMemory24Descriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_MEMORY32:
- Rnode = RsDoMemory32Descriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoMemory32Descriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_MEMORY32FIXED:
- Rnode = RsDoMemory32FixedDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoMemory32FixedDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_QWORDIO:
- Rnode = RsDoQwordIoDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoQwordIoDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_QWORDMEMORY:
- Rnode = RsDoQwordMemoryDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoQwordMemoryDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
+ break;
+
+ case PARSEOP_QWORDSPACE:
+ Rnode = RsDoQwordSpaceDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_REGISTER:
- Rnode = RsDoGeneralRegisterDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoGeneralRegisterDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_STARTDEPENDENTFN:
switch (*State)
{
case ACPI_RSTATE_START_DEPENDENT:
- AslError (ASL_ERROR, ASL_MSG_DEPENDENT_NESTING, DescriptorTypeOp, NULL);
+ AslError (ASL_ERROR, ASL_MSG_DEPENDENT_NESTING,
+ DescriptorTypeOp, NULL);
break;
case ACPI_RSTATE_NORMAL:
@@ -407,7 +513,8 @@ RsDoOneResourceDescriptor (
}
*State = ACPI_RSTATE_START_DEPENDENT;
- Rnode = RsDoStartDependentDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoStartDependentDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
*State = ACPI_RSTATE_DEPENDENT_LIST;
break;
@@ -415,7 +522,8 @@ RsDoOneResourceDescriptor (
switch (*State)
{
case ACPI_RSTATE_START_DEPENDENT:
- AslError (ASL_ERROR, ASL_MSG_DEPENDENT_NESTING, DescriptorTypeOp, NULL);
+ AslError (ASL_ERROR, ASL_MSG_DEPENDENT_NESTING,
+ DescriptorTypeOp, NULL);
break;
case ACPI_RSTATE_NORMAL:
@@ -425,24 +533,34 @@ RsDoOneResourceDescriptor (
}
*State = ACPI_RSTATE_START_DEPENDENT;
- Rnode = RsDoStartDependentNoPriDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoStartDependentNoPriDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
*State = ACPI_RSTATE_DEPENDENT_LIST;
break;
case PARSEOP_VENDORLONG:
- Rnode = RsDoVendorLargeDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoVendorLargeDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_VENDORSHORT:
- Rnode = RsDoVendorSmallDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoVendorSmallDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_WORDBUSNUMBER:
- Rnode = RsDoWordBusNumberDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoWordBusNumberDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_WORDIO:
- Rnode = RsDoWordIoDescriptor (DescriptorTypeOp, CurrentByteOffset);
+ Rnode = RsDoWordIoDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
+ break;
+
+ case PARSEOP_WORDSPACE:
+ Rnode = RsDoWordSpaceDescriptor (DescriptorTypeOp,
+ CurrentByteOffset);
break;
case PARSEOP_DEFAULT_ARG:
@@ -540,7 +658,7 @@ RsDoResourceTemplate (
ACPI_PARSE_OBJECT *BufferOp;
ACPI_PARSE_OBJECT *DescriptorTypeOp;
ACPI_PARSE_OBJECT *LastOp = NULL;
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
UINT32 CurrentByteOffset = 0;
ASL_RESOURCE_NODE HeadRnode;
ASL_RESOURCE_NODE *PreviousRnode;
@@ -567,7 +685,8 @@ RsDoResourceTemplate (
PreviousRnode = &HeadRnode;
while (DescriptorTypeOp)
{
- Rnode = RsDoOneResourceDescriptor (DescriptorTypeOp, CurrentByteOffset, &State);
+ Rnode = RsDoOneResourceDescriptor (DescriptorTypeOp, CurrentByteOffset,
+ &State);
/*
* Update current byte offset to indicate the number of bytes from the
@@ -593,14 +712,15 @@ RsDoResourceTemplate (
}
/*
- * Insert the EndTag descriptor after all other descriptors have been processed
+ * Insert the EndTag descriptor after all other descriptors have
+ * been processed
*/
- Rnode = RsAllocateResourceNode (sizeof (ASL_END_TAG_DESC));
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_END_TAG));
Descriptor = Rnode->Buffer;
- Descriptor->Et.DescriptorType = ACPI_RDESC_TYPE_END_TAG |
+ Descriptor->EndTag.DescriptorType = ACPI_RESOURCE_NAME_END_TAG |
ASL_RDESC_END_TAG_SIZE;
- Descriptor->Et.Checksum = 0;
+ Descriptor->EndTag.Checksum = 0;
CurrentByteOffset += RsLinkDescriptorChain (&PreviousRnode, Rnode);
diff --git a/sys/contrib/dev/acpica/compiler/aslrestype1.c b/sys/contrib/dev/acpica/compiler/aslrestype1.c
index 975a8e5..e81bcdd 100644
--- a/sys/contrib/dev/acpica/compiler/aslrestype1.c
+++ b/sys/contrib/dev/acpica/compiler/aslrestype1.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: aslrestype1 - Short (type1) resource templates and descriptors
- * $Revision: 26 $
+ * $Revision: 1.35 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,7 +116,7 @@
*****************************************************************************/
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
#define _COMPONENT ACPI_COMPILER
@@ -142,23 +142,23 @@ RsDoDmaDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
UINT32 i;
UINT8 DmaChannelMask = 0;
+ UINT8 DmaChannels = 0;
InitializerOp = Op->Asl.Child;
- Rnode = RsAllocateResourceNode (sizeof (ASL_DMA_FORMAT_DESC));
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_DMA));
Descriptor = Rnode->Buffer;
- Descriptor->Dma.DescriptorType = ACPI_RDESC_TYPE_DMA_FORMAT |
+ Descriptor->Dma.DescriptorType = ACPI_RESOURCE_NAME_DMA |
ASL_RDESC_DMA_SIZE;
- /*
- * Process all child initialization nodes
- */
+ /* Process all child initialization nodes */
+
for (i = 0; InitializerOp; i++)
{
switch (i)
@@ -167,21 +167,21 @@ RsDoDmaDescriptor (
RsSetFlagBits (&Descriptor->Dma.Flags, InitializerOp, 5, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_DMATYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Dma.Flags), 5);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Dma.Flags), 5);
break;
case 1: /* Bus Master */
RsSetFlagBits (&Descriptor->Dma.Flags, InitializerOp, 2, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_BUSMASTER,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Dma.Flags), 2);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Dma.Flags), 2);
break;
case 2: /* Xfer Type (transfer width) */
RsSetFlagBits (&Descriptor->Dma.Flags, InitializerOp, 0, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_XFERTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Dma.Flags), 0);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Dma.Flags), 0);
break;
case 3: /* Name */
@@ -191,17 +191,45 @@ RsDoDmaDescriptor (
default:
- /* All DMA channel bytes are handled here, after the flags and name */
+ /* All DMA channel bytes are handled here, after flags and name */
if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
{
- DmaChannelMask |= (1 << ((UINT8) InitializerOp->Asl.Value.Integer));
+ /* Up to 8 channels can be specified in the list */
+
+ DmaChannels++;
+ if (DmaChannels > 8)
+ {
+ AslError (ASL_ERROR, ASL_MSG_DMA_LIST,
+ InitializerOp, NULL);
+ return (Rnode);
+ }
+
+ /* Only DMA channels 0-7 are allowed (mask is 8 bits) */
+
+ if (InitializerOp->Asl.Value.Integer > 7)
+ {
+ AslError (ASL_ERROR, ASL_MSG_DMA_CHANNEL,
+ InitializerOp, NULL);
+ }
+
+ /* Build the mask */
+
+ DmaChannelMask |=
+ (1 << ((UINT8) InitializerOp->Asl.Value.Integer));
}
if (i == 4) /* case 4: First DMA byte */
{
+ /* Check now for duplicates in list */
+
+ RsCheckListForDuplicates (InitializerOp);
+
+ /* Create a named field at the start of the list */
+
RsCreateByteField (InitializerOp, ASL_RESNAME_DMA,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Dma.DmaChannelMask));
+ CurrentByteOffset +
+ ASL_RESDESC_OFFSET (Dma.DmaChannelMask));
}
break;
}
@@ -235,15 +263,15 @@ RsDoEndDependentDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ASL_RESOURCE_NODE *Rnode;
- Rnode = RsAllocateResourceNode (sizeof (ASL_END_DEPENDENT_DESC));
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_END_DEPENDENT));
Descriptor = Rnode->Buffer;
- Descriptor->End.DescriptorType = ACPI_RDESC_TYPE_END_DEPENDENT |
- ASL_RDESC_END_DEPEND_SIZE;
+ Descriptor->EndDpf.DescriptorType = ACPI_RESOURCE_NAME_END_DEPENDENT |
+ ASL_RDESC_END_DEPEND_SIZE;
return (Rnode);
}
@@ -267,38 +295,39 @@ RsDoFixedIoDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
UINT32 i;
InitializerOp = Op->Asl.Child;
- Rnode = RsAllocateResourceNode (sizeof (ASL_FIXED_IO_PORT_DESC));
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_FIXED_IO));
Descriptor = Rnode->Buffer;
- Descriptor->Iop.DescriptorType = ACPI_RDESC_TYPE_FIXED_IO_PORT |
- ASL_RDESC_FIXED_IO_SIZE;
+ Descriptor->Io.DescriptorType = ACPI_RESOURCE_NAME_FIXED_IO |
+ ASL_RDESC_FIXED_IO_SIZE;
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
for (i = 0; InitializerOp; i++)
{
switch (i)
{
case 0: /* Base Address */
- Descriptor->Fio.BaseAddress = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->FixedIo.Address =
+ (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_BASEADDRESS,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Fio.BaseAddress));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (FixedIo.Address));
break;
case 1: /* Length */
- Descriptor->Fio.Length = (UINT8) InitializerOp->Asl.Value.Integer;
+ Descriptor->FixedIo.AddressLength =
+ (UINT8) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Fio.Length));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (FixedIo.AddressLength));
break;
case 2: /* Name */
@@ -338,59 +367,62 @@ RsDoIoDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
UINT32 i;
InitializerOp = Op->Asl.Child;
- Rnode = RsAllocateResourceNode (sizeof (ASL_IO_PORT_DESC));
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_IO));
Descriptor = Rnode->Buffer;
- Descriptor->Iop.DescriptorType = ACPI_RDESC_TYPE_IO_PORT |
- ASL_RDESC_IO_SIZE;
+ Descriptor->Io.DescriptorType = ACPI_RESOURCE_NAME_IO |
+ ASL_RDESC_IO_SIZE;
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
for (i = 0; InitializerOp; i++)
{
switch (i)
{
case 0: /* Decode size */
- RsSetFlagBits (&Descriptor->Iop.Information, InitializerOp, 0, 1);
+ RsSetFlagBits (&Descriptor->Io.Flags, InitializerOp, 0, 1);
RsCreateBitField (InitializerOp, ASL_RESNAME_DECODE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Iop.Information), 0);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Flags), 0);
break;
case 1: /* Min Address */
- Descriptor->Iop.AddressMin = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Io.Minimum =
+ (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MINADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Iop.AddressMin));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Minimum));
break;
case 2: /* Max Address */
- Descriptor->Iop.AddressMax = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Io.Maximum =
+ (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MAXADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Iop.AddressMax));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Maximum));
break;
case 3: /* Alignment */
- Descriptor->Iop.Alignment = (UINT8) InitializerOp->Asl.Value.Integer;
+ Descriptor->Io.Alignment =
+ (UINT8) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_ALIGNMENT,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Iop.Alignment));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Alignment));
break;
case 4: /* Length */
- Descriptor->Iop.Length = (UINT8) InitializerOp->Asl.Value.Integer;
+ Descriptor->Io.AddressLength =
+ (UINT8) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Iop.Length));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Io.AddressLength));
break;
case 5: /* Name */
@@ -430,25 +462,25 @@ RsDoIrqDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
- UINT32 i;
+ UINT32 Interrupts = 0;
UINT16 IrqMask = 0;
+ UINT32 i;
InitializerOp = Op->Asl.Child;
- Rnode = RsAllocateResourceNode (sizeof (ASL_IRQ_FORMAT_DESC));
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_IRQ));
/* Length = 3 (with flag byte) */
Descriptor = Rnode->Buffer;
- Descriptor->Irq.DescriptorType = ACPI_RDESC_TYPE_IRQ_FORMAT |
- (ASL_RDESC_IRQ_SIZE + 0x01);
+ Descriptor->Irq.DescriptorType = ACPI_RESOURCE_NAME_IRQ |
+ (ASL_RDESC_IRQ_SIZE + 0x01);
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
for (i = 0; InitializerOp; i++)
{
switch (i)
@@ -457,21 +489,21 @@ RsDoIrqDescriptor (
RsSetFlagBits (&Descriptor->Irq.Flags, InitializerOp, 0, 1);
RsCreateBitField (InitializerOp, ASL_RESNAME_INTERRUPTTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.Flags), 0);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.Flags), 0);
break;
case 1: /* Interrupt Level (or Polarity - Active high/low) */
RsSetFlagBits (&Descriptor->Irq.Flags, InitializerOp, 3, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_INTERRUPTLEVEL,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.Flags), 3);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.Flags), 3);
break;
case 2: /* Share Type - Default: exclusive (0) */
RsSetFlagBits (&Descriptor->Irq.Flags, InitializerOp, 4, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_INTERRUPTSHARE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.Flags), 4);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.Flags), 4);
break;
case 3: /* Name */
@@ -485,13 +517,41 @@ RsDoIrqDescriptor (
if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
{
- IrqMask |= (1 << (UINT8) InitializerOp->Asl.Value.Integer);
+ /* Up to 16 interrupts can be specified in the list */
+
+ Interrupts++;
+ if (Interrupts > 16)
+ {
+ AslError (ASL_ERROR, ASL_MSG_INTERRUPT_LIST,
+ InitializerOp, NULL);
+ return (Rnode);
+ }
+
+ /* Only interrupts 0-15 are allowed (mask is 16 bits) */
+
+ if (InitializerOp->Asl.Value.Integer > 15)
+ {
+ AslError (ASL_ERROR, ASL_MSG_INTERRUPT_NUMBER,
+ InitializerOp, NULL);
+ }
+ else
+ {
+ IrqMask |= (1 << (UINT8) InitializerOp->Asl.Value.Integer);
+ }
}
- if (i == 4) /* case 4: First IRQ byte */
+ /* Case 4: First IRQ value in list */
+
+ if (i == 4)
{
+ /* Check now for duplicates in list */
+
+ RsCheckListForDuplicates (InitializerOp);
+
+ /* Create a named field at the start of the list */
+
RsCreateByteField (InitializerOp, ASL_RESNAME_INTERRUPT,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.IrqMask));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.IrqMask));
}
break;
}
@@ -525,23 +585,23 @@ RsDoIrqNoFlagsDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
- UINT32 i;
UINT16 IrqMask = 0;
+ UINT32 Interrupts = 0;
+ UINT32 i;
InitializerOp = Op->Asl.Child;
- Rnode = RsAllocateResourceNode (sizeof (ASL_IRQ_NOFLAGS_DESC));
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_IRQ_NOFLAGS));
Descriptor = Rnode->Buffer;
- Descriptor->Irq.DescriptorType = ACPI_RDESC_TYPE_IRQ_FORMAT |
- ASL_RDESC_IRQ_SIZE;
+ Descriptor->Irq.DescriptorType = ACPI_RESOURCE_NAME_IRQ |
+ ASL_RDESC_IRQ_SIZE;
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
for (i = 0; InitializerOp; i++)
{
switch (i)
@@ -557,13 +617,41 @@ RsDoIrqNoFlagsDescriptor (
if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
{
- IrqMask |= (1 << ((UINT8) InitializerOp->Asl.Value.Integer));
+ /* Up to 16 interrupts can be specified in the list */
+
+ Interrupts++;
+ if (Interrupts > 16)
+ {
+ AslError (ASL_ERROR, ASL_MSG_INTERRUPT_LIST,
+ InitializerOp, NULL);
+ return (Rnode);
+ }
+
+ /* Only interrupts 0-15 are allowed (mask is 16 bits) */
+
+ if (InitializerOp->Asl.Value.Integer > 15)
+ {
+ AslError (ASL_ERROR, ASL_MSG_INTERRUPT_NUMBER,
+ InitializerOp, NULL);
+ }
+ else
+ {
+ IrqMask |= (1 << ((UINT8) InitializerOp->Asl.Value.Integer));
+ }
}
- if (i == 1) /* case 1: First IRQ byte */
+ /* Case 1: First IRQ value in list */
+
+ if (i == 1)
{
+ /* Check now for duplicates in list */
+
+ RsCheckListForDuplicates (InitializerOp);
+
+ /* Create a named field at the start of the list */
+
RsCreateByteField (InitializerOp, ASL_RESNAME_INTERRUPT,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.IrqMask));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Irq.IrqMask));
}
break;
}
@@ -597,59 +685,58 @@ RsDoMemory24Descriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
UINT32 i;
InitializerOp = Op->Asl.Child;
- Rnode = RsAllocateResourceNode (sizeof (ASL_MEMORY_24_DESC));
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_MEMORY24));
Descriptor = Rnode->Buffer;
- Descriptor->M24.DescriptorType = ACPI_RDESC_TYPE_MEMORY_24;
- Descriptor->M24.Length = 9;
+ Descriptor->Memory24.DescriptorType = ACPI_RESOURCE_NAME_MEMORY24;
+ Descriptor->Memory24.ResourceLength = 9;
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
for (i = 0; InitializerOp; i++)
{
switch (i)
{
case 0: /* Read/Write type */
- RsSetFlagBits (&Descriptor->M24.Information, InitializerOp, 0, 1);
+ RsSetFlagBits (&Descriptor->Memory24.Flags, InitializerOp, 0, 1);
RsCreateBitField (InitializerOp, ASL_RESNAME_READWRITETYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (M24.Information), 0);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Flags), 0);
break;
case 1: /* Min Address */
- Descriptor->M24.AddressMin = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Memory24.Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MINADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (M24.AddressMin));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Minimum));
break;
case 2: /* Max Address */
- Descriptor->M24.AddressMax = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Memory24.Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MAXADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (M24.AddressMax));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Maximum));
break;
case 3: /* Alignment */
- Descriptor->M24.Alignment = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Memory24.Alignment = (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_ALIGNMENT,
- CurrentByteOffset + ASL_RESDESC_OFFSET (M24.Alignment));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Alignment));
break;
case 4: /* Length */
- Descriptor->M24.RangeLength = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Memory24.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
- CurrentByteOffset + ASL_RESDESC_OFFSET (M24.RangeLength));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.AddressLength));
break;
case 5: /* Name */
@@ -689,59 +776,58 @@ RsDoMemory32Descriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
UINT32 i;
InitializerOp = Op->Asl.Child;
- Rnode = RsAllocateResourceNode (sizeof (ASL_MEMORY_32_DESC));
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_MEMORY32));
Descriptor = Rnode->Buffer;
- Descriptor->M32.DescriptorType = ACPI_RDESC_TYPE_MEMORY_32;
- Descriptor->M32.Length = 17;
+ Descriptor->Memory32.DescriptorType = ACPI_RESOURCE_NAME_MEMORY32;
+ Descriptor->Memory32.ResourceLength = 17;
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
for (i = 0; InitializerOp; i++)
{
switch (i)
{
case 0: /* Read/Write type */
- RsSetFlagBits (&Descriptor->M32.Information, InitializerOp, 0, 1);
+ RsSetFlagBits (&Descriptor->Memory32.Flags, InitializerOp, 0, 1);
RsCreateBitField (InitializerOp, ASL_RESNAME_READWRITETYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (M32.Information), 0);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Flags), 0);
break;
case 1: /* Min Address */
- Descriptor->M32.AddressMin = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->Memory32.Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MINADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (M32.AddressMin));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Minimum));
break;
case 2: /* Max Address */
- Descriptor->M32.AddressMax = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->Memory32.Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MAXADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (M32.AddressMax));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Maximum));
break;
case 3: /* Alignment */
- Descriptor->M32.Alignment = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->Memory32.Alignment = (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_ALIGNMENT,
- CurrentByteOffset + ASL_RESDESC_OFFSET (M32.Alignment));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Alignment));
break;
case 4: /* Length */
- Descriptor->M32.RangeLength = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->Memory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
- CurrentByteOffset + ASL_RESDESC_OFFSET (M32.RangeLength));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.AddressLength));
break;
case 5: /* Name */
@@ -781,45 +867,44 @@ RsDoMemory32FixedDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
UINT32 i;
InitializerOp = Op->Asl.Child;
- Rnode = RsAllocateResourceNode (sizeof (ASL_FIXED_MEMORY_32_DESC));
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_FIXED_MEMORY32));
Descriptor = Rnode->Buffer;
- Descriptor->F32.DescriptorType = ACPI_RDESC_TYPE_FIXED_MEMORY_32;
- Descriptor->F32.Length = 9;
+ Descriptor->FixedMemory32.DescriptorType = ACPI_RESOURCE_NAME_FIXED_MEMORY32;
+ Descriptor->FixedMemory32.ResourceLength = 9;
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
for (i = 0; InitializerOp; i++)
{
switch (i)
{
case 0: /* Read/Write type */
- RsSetFlagBits (&Descriptor->F32.Information, InitializerOp, 0, 1);
+ RsSetFlagBits (&Descriptor->FixedMemory32.Flags, InitializerOp, 0, 1);
RsCreateBitField (InitializerOp, ASL_RESNAME_READWRITETYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (F32.Information), 0);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Flags), 0);
break;
case 1: /* Address */
- Descriptor->F32.BaseAddress = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->FixedMemory32.Address = (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_BASEADDRESS,
- CurrentByteOffset + ASL_RESDESC_OFFSET (F32.BaseAddress));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Address));
break;
case 2: /* Length */
- Descriptor->F32.RangeLength = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->FixedMemory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
- CurrentByteOffset + ASL_RESDESC_OFFSET (F32.RangeLength));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.AddressLength));
break;
case 3: /* Name */
@@ -859,7 +944,7 @@ RsDoStartDependentDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
ASL_RESOURCE_NODE *PreviousRnode;
@@ -869,19 +954,18 @@ RsDoStartDependentDescriptor (
InitializerOp = Op->Asl.Child;
- Rnode = RsAllocateResourceNode (sizeof (ASL_START_DEPENDENT_DESC));
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_START_DEPENDENT));
PreviousRnode = Rnode;
Descriptor = Rnode->Buffer;
/* Descriptor has priority byte */
- Descriptor->Std.DescriptorType = ACPI_RDESC_TYPE_START_DEPENDENT |
- (ASL_RDESC_ST_DEPEND_SIZE + 0x01);
+ Descriptor->StartDpf.DescriptorType = ACPI_RESOURCE_NAME_START_DEPENDENT |
+ (ASL_RDESC_ST_DEPEND_SIZE + 0x01);
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
State = ACPI_RSTATE_START_DEPENDENT;
for (i = 0; InitializerOp; i++)
{
@@ -891,24 +975,27 @@ RsDoStartDependentDescriptor (
if ((UINT8) InitializerOp->Asl.Value.Integer > 2)
{
- AslError (ASL_ERROR, ASL_MSG_INVALID_PRIORITY, InitializerOp, NULL);
+ AslError (ASL_ERROR, ASL_MSG_INVALID_PRIORITY,
+ InitializerOp, NULL);
}
- RsSetFlagBits (&Descriptor->Std.Flags, InitializerOp, 0, 0);
+ RsSetFlagBits (&Descriptor->StartDpf.Flags, InitializerOp, 0, 0);
break;
case 1: /* Performance/Robustness Priority */
if ((UINT8) InitializerOp->Asl.Value.Integer > 2)
{
- AslError (ASL_ERROR, ASL_MSG_INVALID_PERFORMANCE, InitializerOp, NULL);
+ AslError (ASL_ERROR, ASL_MSG_INVALID_PERFORMANCE,
+ InitializerOp, NULL);
}
- RsSetFlagBits (&Descriptor->Std.Flags, InitializerOp, 2, 0);
+ RsSetFlagBits (&Descriptor->StartDpf.Flags, InitializerOp, 2, 0);
break;
default:
- NextRnode = RsDoOneResourceDescriptor (InitializerOp, CurrentByteOffset, &State);
+ NextRnode = RsDoOneResourceDescriptor (InitializerOp,
+ CurrentByteOffset, &State);
/*
* Update current byte offset to indicate the number of bytes from the
@@ -917,7 +1004,8 @@ RsDoStartDependentDescriptor (
* element (field) within each descriptor as well.
*/
- CurrentByteOffset += RsLinkDescriptorChain (&PreviousRnode, NextRnode);
+ CurrentByteOffset += RsLinkDescriptorChain (&PreviousRnode,
+ NextRnode);
break;
}
@@ -947,7 +1035,7 @@ RsDoStartDependentNoPriDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
ASL_RESOURCE_NODE *PreviousRnode;
@@ -956,20 +1044,20 @@ RsDoStartDependentNoPriDescriptor (
InitializerOp = Op->Asl.Child;
- Rnode = RsAllocateResourceNode (sizeof (ASL_START_DEPENDENT_NOPRIO_DESC));
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_START_DEPENDENT_NOPRIO));
Descriptor = Rnode->Buffer;
- Descriptor->Std.DescriptorType = ACPI_RDESC_TYPE_START_DEPENDENT |
- ASL_RDESC_ST_DEPEND_SIZE;
+ Descriptor->StartDpf.DescriptorType = ACPI_RESOURCE_NAME_START_DEPENDENT |
+ ASL_RDESC_ST_DEPEND_SIZE;
PreviousRnode = Rnode;
- /*
- * Process all child initialization nodes
- */
+ /* Process all child initialization nodes */
+
State = ACPI_RSTATE_START_DEPENDENT;
while (InitializerOp)
{
- NextRnode = RsDoOneResourceDescriptor (InitializerOp, CurrentByteOffset, &State);
+ NextRnode = RsDoOneResourceDescriptor (InitializerOp,
+ CurrentByteOffset, &State);
/*
* Update current byte offset to indicate the number of bytes from the
@@ -977,7 +1065,6 @@ RsDoStartDependentNoPriDescriptor (
* must keep track of the offset of not only each descriptor, but each
* element (field) within each descriptor as well.
*/
-
CurrentByteOffset += RsLinkDescriptorChain (&PreviousRnode, NextRnode);
InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
@@ -1006,25 +1093,44 @@ RsDoVendorSmallDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
+ UINT8 *VendorData;
UINT32 i;
InitializerOp = Op->Asl.Child;
- Rnode = RsAllocateResourceNode (sizeof (ASL_SMALL_VENDOR_DESC));
+
+ /* Allocate worst case - 7 vendor bytes */
+
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_VENDOR_SMALL) + 7);
Descriptor = Rnode->Buffer;
- Descriptor->Smv.DescriptorType = ACPI_RDESC_TYPE_SMALL_VENDOR;
+ Descriptor->VendorSmall.DescriptorType = ACPI_RESOURCE_NAME_VENDOR_SMALL;
+ VendorData = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_SMALL_HEADER);
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
- for (i = 0; (InitializerOp && (i < 7)); i++)
+ for (i = 0; InitializerOp; i++)
{
- Descriptor->Smv.VendorDefined[i] = (UINT8) InitializerOp->Asl.Value.Integer;
+ /* Maximum 7 vendor data bytes allowed (0-6) */
+
+ if (i >= 7)
+ {
+ AslError (ASL_ERROR, ASL_MSG_VENDOR_LIST, InitializerOp, NULL);
+
+ /* Eat the excess initializers */
+
+ while (InitializerOp)
+ {
+ InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+ }
+ break;
+ }
+
+ VendorData[i] = (UINT8) InitializerOp->Asl.Value.Integer;
InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
}
@@ -1034,7 +1140,7 @@ RsDoVendorSmallDescriptor (
/* Set the length in the Type Tag */
- Descriptor->Smv.DescriptorType |= (UINT8) i;
+ Descriptor->VendorSmall.DescriptorType |= (UINT8) i;
return (Rnode);
}
diff --git a/sys/contrib/dev/acpica/compiler/aslrestype2.c b/sys/contrib/dev/acpica/compiler/aslrestype2.c
index ef16150..02e0f30 100644
--- a/sys/contrib/dev/acpica/compiler/aslrestype2.c
+++ b/sys/contrib/dev/acpica/compiler/aslrestype2.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: aslrestype2 - Long (type2) resource templates and descriptors
- * $Revision: 26 $
+ * $Revision: 1.42 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,12 +116,18 @@
*****************************************************************************/
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslrestype2")
+/* Local prototypes */
+
+static UINT16
+RsGetStringDataLength (
+ ACPI_PARSE_OBJECT *InitializerOp);
+
/*******************************************************************************
*
@@ -129,14 +135,14 @@
*
* PARAMETERS: InitializerOp - Start of a subtree of init nodes
*
- * RETURN: Valid string length if a string node is found
+ * RETURN: Valid string length if a string node is found (otherwise 0)
*
* DESCRIPTION: In a list of peer nodes, find the first one that contains a
* string and return the length of the string.
*
******************************************************************************/
-UINT32
+static UINT16
RsGetStringDataLength (
ACPI_PARSE_OBJECT *InitializerOp)
{
@@ -145,7 +151,7 @@ RsGetStringDataLength (
{
if (InitializerOp->Asl.ParseOpcode == PARSEOP_STRING_LITERAL)
{
- return (strlen (InitializerOp->Asl.Value.String) + 1);
+ return ((UINT16) (strlen (InitializerOp->Asl.Value.String) + 1));
}
InitializerOp = ASL_GET_PEER_NODE (InitializerOp);
}
@@ -173,113 +179,124 @@ RsDoDwordIoDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
- UINT32 StringLength = 0;
+ UINT16 StringLength = 0;
UINT32 OptionIndex = 0;
+ UINT8 *OptionalFields;
UINT32 i;
+ BOOLEAN ResSourceIndex = FALSE;
InitializerOp = Op->Asl.Child;
StringLength = RsGetStringDataLength (InitializerOp);
- Rnode = RsAllocateResourceNode (sizeof (ASL_DWORD_ADDRESS_DESC) +
- StringLength);
+ Rnode = RsAllocateResourceNode (
+ sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength);
Descriptor = Rnode->Buffer;
- Descriptor->Das.DescriptorType = ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE;
- Descriptor->Das.ResourceType = ACPI_RESOURCE_TYPE_IO_RANGE;
+ Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32;
+ Descriptor->Address32.ResourceType = ACPI_ADDRESS_TYPE_IO_RANGE;
/*
* Initial descriptor length -- may be enlarged if there are
* optional fields present
*/
- Descriptor->Das.Length = (UINT16) (ASL_RESDESC_OFFSET (Das.OptionalFields[0]) -
- ASL_RESDESC_OFFSET (Das.ResourceType));
+ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
+ Descriptor->Address32.ResourceLength = (UINT16)
+ (sizeof (AML_RESOURCE_ADDRESS32) -
+ sizeof (AML_RESOURCE_LARGE_HEADER));
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
for (i = 0; InitializerOp; i++)
{
switch (i)
{
- case 0: /* Resource Type */
+ case 0: /* Resource Usage */
- RsSetFlagBits (&Descriptor->Das.Flags, InitializerOp, 0, 1);
+ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 0, 1);
break;
case 1: /* MinType */
- RsSetFlagBits (&Descriptor->Das.Flags, InitializerOp, 2, 0);
+ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 2, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MINTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.Flags), 2);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 2);
break;
case 2: /* MaxType */
- RsSetFlagBits (&Descriptor->Das.Flags, InitializerOp, 3, 0);
+ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 3, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MAXTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.Flags), 3);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 3);
break;
case 3: /* DecodeType */
- RsSetFlagBits (&Descriptor->Das.Flags, InitializerOp, 1, 0);
+ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 1, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_DECODE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.Flags), 1);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 1);
break;
case 4: /* Range Type */
- RsSetFlagBits (&Descriptor->Das.SpecificFlags, InitializerOp, 0, 3);
+ RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 0, 3);
RsCreateBitField (InitializerOp, ASL_RESNAME_RANGETYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.SpecificFlags), 0);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 0);
break;
case 5: /* Address Granularity */
- Descriptor->Das.Granularity = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address32.Granularity =
+ (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_GRANULARITY,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.Granularity));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
break;
case 6: /* Address Min */
- Descriptor->Das.AddressMin = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address32.Minimum =
+ (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MINADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.AddressMin));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
break;
case 7: /* Address Max */
- Descriptor->Das.AddressMax = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address32.Maximum =
+ (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MAXADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.AddressMax));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
break;
case 8: /* Translation Offset */
- Descriptor->Das.TranslationOffset = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address32.TranslationOffset =
+ (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_TRANSLATION,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.TranslationOffset));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
break;
case 9: /* Address Length */
- Descriptor->Das.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address32.AddressLength =
+ (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.AddressLength));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
break;
case 10: /* ResSourceIndex [Optional Field - BYTE] */
if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
{
- Descriptor->Das.OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+ /* Found a valid ResourceSourceIndex */
+
+ OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
OptionIndex++;
- Descriptor->Das.Length++;
+ Descriptor->Address32.ResourceLength++;
+ ResSourceIndex = TRUE;
}
break;
@@ -290,12 +307,36 @@ RsDoDwordIoDescriptor (
{
if (StringLength)
{
- Descriptor->Das.Length = (UINT16) (Descriptor->Das.Length + StringLength);
+ /* Found a valid ResourceSource */
+
+ Descriptor->Address32.ResourceLength = (UINT16)
+ (Descriptor->Address32.ResourceLength + StringLength);
+
+ strcpy ((char *)
+ &OptionalFields[OptionIndex],
+ InitializerOp->Asl.Value.String);
+
+ /* ResourceSourceIndex must also be valid */
- strcpy ((char *) &Descriptor->Das.OptionalFields[OptionIndex],
- InitializerOp->Asl.Value.String);
+ if (!ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
+ InitializerOp, NULL);
+ }
}
}
+
+#if 0
+ /*
+ * Not a valid ResourceSource, ResourceSourceIndex must also
+ * be invalid
+ */
+ else if (ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
+ InitializerOp, NULL);
+ }
+#endif
break;
case 12: /* ResourceTag */
@@ -305,16 +346,16 @@ RsDoDwordIoDescriptor (
case 13: /* Type */
- RsSetFlagBits (&Descriptor->Das.SpecificFlags, InitializerOp, 4, 0);
+ RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 4, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_TYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.SpecificFlags), 4);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 4);
break;
case 14: /* Translation Type */
- RsSetFlagBits (&Descriptor->Das.SpecificFlags, InitializerOp, 5, 0);
+ RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 5, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_TRANSTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.SpecificFlags), 5);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 5);
break;
default:
@@ -326,9 +367,8 @@ RsDoDwordIoDescriptor (
InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
}
- Rnode->BufferLength = (ASL_RESDESC_OFFSET (Das.OptionalFields[0]) -
- ASL_RESDESC_OFFSET (Das.DescriptorType))
- + OptionIndex + StringLength;
+ Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
+ OptionIndex + StringLength;
return (Rnode);
}
@@ -352,120 +392,130 @@ RsDoDwordMemoryDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
- UINT32 StringLength = 0;
+ UINT8 *OptionalFields;
+ UINT16 StringLength = 0;
UINT32 OptionIndex = 0;
UINT32 i;
+ BOOLEAN ResSourceIndex = FALSE;
InitializerOp = Op->Asl.Child;
StringLength = RsGetStringDataLength (InitializerOp);
- Rnode = RsAllocateResourceNode (sizeof (ASL_DWORD_ADDRESS_DESC) +
- StringLength);
+ Rnode = RsAllocateResourceNode (
+ sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength);
Descriptor = Rnode->Buffer;
- Descriptor->Das.DescriptorType = ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE;
- Descriptor->Das.ResourceType = ACPI_RESOURCE_TYPE_MEMORY_RANGE;
+ Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32;
+ Descriptor->Address32.ResourceType = ACPI_ADDRESS_TYPE_MEMORY_RANGE;
/*
* Initial descriptor length -- may be enlarged if there are
* optional fields present
*/
- Descriptor->Das.Length = (UINT16) (ASL_RESDESC_OFFSET (Das.OptionalFields[0]) -
- ASL_RESDESC_OFFSET (Das.ResourceType));
+ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
+ Descriptor->Address32.ResourceLength = (UINT16)
+ (sizeof (AML_RESOURCE_ADDRESS32) -
+ sizeof (AML_RESOURCE_LARGE_HEADER));
+
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
for (i = 0; InitializerOp; i++)
{
switch (i)
{
- case 0: /* Resource Type */
+ case 0: /* Resource Usage */
- RsSetFlagBits (&Descriptor->Das.Flags, InitializerOp, 0, 1);
+ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 0, 1);
break;
case 1: /* DecodeType */
- RsSetFlagBits (&Descriptor->Das.Flags, InitializerOp, 1, 0);
+ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 1, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_DECODE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.Flags), 1);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 1);
break;
case 2: /* MinType */
- RsSetFlagBits (&Descriptor->Das.Flags, InitializerOp, 2, 0);
+ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 2, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MINTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.Flags), 2);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 2);
break;
case 3: /* MaxType */
- RsSetFlagBits (&Descriptor->Das.Flags, InitializerOp, 3, 0);
+ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 3, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MAXTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.Flags), 3);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 3);
break;
case 4: /* Memory Type */
- RsSetFlagBits (&Descriptor->Das.SpecificFlags, InitializerOp, 1, 0);
+ RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 1, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MEMTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.SpecificFlags), 1);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 1);
break;
case 5: /* Read/Write Type */
- RsSetFlagBits (&Descriptor->Das.SpecificFlags, InitializerOp, 0, 1);
+ RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 0, 1);
RsCreateBitField (InitializerOp, ASL_RESNAME_READWRITETYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.SpecificFlags), 0);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 0);
break;
case 6: /* Address Granularity */
- Descriptor->Das.Granularity = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address32.Granularity =
+ (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_GRANULARITY,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.Granularity));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
break;
case 7: /* Min Address */
- Descriptor->Das.AddressMin = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address32.Minimum =
+ (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MINADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.AddressMin));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
break;
case 8: /* Max Address */
- Descriptor->Das.AddressMax = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address32.Maximum =
+ (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MAXADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.AddressMax));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
break;
case 9: /* Translation Offset */
- Descriptor->Das.TranslationOffset = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address32.TranslationOffset =
+ (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_TRANSLATION,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.TranslationOffset));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
break;
case 10: /* Address Length */
- Descriptor->Das.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address32.AddressLength =
+ (UINT32) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.AddressLength));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
break;
case 11: /* ResSourceIndex [Optional Field - BYTE] */
if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
{
- Descriptor->Das.OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+ OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
OptionIndex++;
- Descriptor->Das.Length++;
+ Descriptor->Address32.ResourceLength++;
+ ResSourceIndex = TRUE;
}
break;
@@ -476,12 +526,34 @@ RsDoDwordMemoryDescriptor (
{
if (StringLength)
{
- Descriptor->Das.Length = (UINT16) (Descriptor->Das.Length + StringLength);
+ Descriptor->Address32.ResourceLength = (UINT16)
+ (Descriptor->Address32.ResourceLength + StringLength);
+
+ strcpy ((char *)
+ &OptionalFields[OptionIndex],
+ InitializerOp->Asl.Value.String);
+
+ /* ResourceSourceIndex must also be valid */
- strcpy ((char *) &Descriptor->Das.OptionalFields[OptionIndex],
- InitializerOp->Asl.Value.String);
+ if (!ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
+ InitializerOp, NULL);
+ }
}
}
+
+#if 0
+ /*
+ * Not a valid ResourceSource, ResourceSourceIndex must also
+ * be invalid
+ */
+ else if (ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
+ InitializerOp, NULL);
+ }
+#endif
break;
case 13: /* ResourceTag */
@@ -492,16 +564,16 @@ RsDoDwordMemoryDescriptor (
case 14: /* Address Range */
- RsSetFlagBits (&Descriptor->Das.SpecificFlags, InitializerOp, 3, 0);
+ RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 3, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MEMATTRIBUTES,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.SpecificFlags), 3);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 3);
break;
case 15: /* Type */
- RsSetFlagBits (&Descriptor->Das.SpecificFlags, InitializerOp, 5, 0);
+ RsSetFlagBits (&Descriptor->Address32.SpecificFlags, InitializerOp, 5, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_TYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Das.SpecificFlags), 5);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.SpecificFlags), 5);
break;
default:
@@ -513,9 +585,672 @@ RsDoDwordMemoryDescriptor (
InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
}
- Rnode->BufferLength = (ASL_RESDESC_OFFSET (Das.OptionalFields[0]) -
- ASL_RESDESC_OFFSET (Das.DescriptorType))
- + OptionIndex + StringLength;
+ Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
+ OptionIndex + StringLength;
+ return (Rnode);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: RsDoDwordSpaceDescriptor
+ *
+ * PARAMETERS: Op - Parent resource descriptor parse node
+ * CurrentByteOffset - Offset into the resource template AML
+ * buffer (to track references to the desc)
+ *
+ * RETURN: Completed resource node
+ *
+ * DESCRIPTION: Construct a long "DwordSpace" descriptor
+ *
+ ******************************************************************************/
+
+ASL_RESOURCE_NODE *
+RsDoDwordSpaceDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset)
+{
+ AML_RESOURCE *Descriptor;
+ ACPI_PARSE_OBJECT *InitializerOp;
+ ASL_RESOURCE_NODE *Rnode;
+ UINT8 *OptionalFields;
+ UINT16 StringLength = 0;
+ UINT32 OptionIndex = 0;
+ UINT32 i;
+ BOOLEAN ResSourceIndex = FALSE;
+
+
+ InitializerOp = Op->Asl.Child;
+ StringLength = RsGetStringDataLength (InitializerOp);
+
+ Rnode = RsAllocateResourceNode (
+ sizeof (AML_RESOURCE_ADDRESS32) + 1 + StringLength);
+
+ Descriptor = Rnode->Buffer;
+ Descriptor->Address32.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32;
+
+ /*
+ * Initial descriptor length -- may be enlarged if there are
+ * optional fields present
+ */
+ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
+ Descriptor->Address32.ResourceLength = (UINT16)
+ (sizeof (AML_RESOURCE_ADDRESS32) -
+ sizeof (AML_RESOURCE_LARGE_HEADER));
+
+ /* Process all child initialization nodes */
+
+ for (i = 0; InitializerOp; i++)
+ {
+ switch (i)
+ {
+ case 0: /* Resource Type */
+
+ Descriptor->Address32.ResourceType =
+ (UINT8) InitializerOp->Asl.Value.Integer;
+ break;
+
+ case 1: /* Resource Usage */
+
+ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 0, 1);
+ break;
+
+ case 2: /* DecodeType */
+
+ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 1, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_DECODE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 1);
+ break;
+
+ case 3: /* MinType */
+
+ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 2, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_MINTYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 2);
+ break;
+
+ case 4: /* MaxType */
+
+ RsSetFlagBits (&Descriptor->Address32.Flags, InitializerOp, 3, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_MAXTYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Flags), 3);
+ break;
+
+ case 5: /* Type-Specific flags */
+
+ Descriptor->Address32.SpecificFlags =
+ (UINT8) InitializerOp->Asl.Value.Integer;
+ break;
+
+ case 6: /* Address Granularity */
+
+ Descriptor->Address32.Granularity =
+ (UINT32) InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_GRANULARITY,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
+ break;
+
+ case 7: /* Min Address */
+
+ Descriptor->Address32.Minimum =
+ (UINT32) InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_MINADDR,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
+ break;
+
+ case 8: /* Max Address */
+
+ Descriptor->Address32.Maximum =
+ (UINT32) InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_MAXADDR,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
+ break;
+
+ case 9: /* Translation Offset */
+
+ Descriptor->Address32.TranslationOffset =
+ (UINT32) InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_TRANSLATION,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
+ break;
+
+ case 10: /* Address Length */
+
+ Descriptor->Address32.AddressLength =
+ (UINT32) InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
+ break;
+
+ case 11: /* ResSourceIndex [Optional Field - BYTE] */
+
+ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
+ {
+ OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+ OptionIndex++;
+ Descriptor->Address32.ResourceLength++;
+ ResSourceIndex = TRUE;
+ }
+ break;
+
+ case 12: /* ResSource [Optional Field - STRING] */
+
+ if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
+ (InitializerOp->Asl.Value.String))
+ {
+ if (StringLength)
+ {
+ Descriptor->Address32.ResourceLength = (UINT16)
+ (Descriptor->Address32.ResourceLength + StringLength);
+
+ strcpy ((char *)
+ &OptionalFields[OptionIndex],
+ InitializerOp->Asl.Value.String);
+
+ /* ResourceSourceIndex must also be valid */
+
+ if (!ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
+ InitializerOp, NULL);
+ }
+ }
+ }
+
+#if 0
+ /*
+ * Not a valid ResourceSource, ResourceSourceIndex must also
+ * be invalid
+ */
+ else if (ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
+ InitializerOp, NULL);
+ }
+#endif
+ break;
+
+ case 13: /* ResourceTag */
+
+ UtAttachNamepathToOwner (Op, InitializerOp);
+ break;
+
+ default:
+
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST,
+ InitializerOp, NULL);
+ break;
+ }
+
+ InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+ }
+
+ Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
+ OptionIndex + StringLength;
+ return (Rnode);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: RsDoExtendedIoDescriptor
+ *
+ * PARAMETERS: Op - Parent resource descriptor parse node
+ * CurrentByteOffset - Offset into the resource template AML
+ * buffer (to track references to the desc)
+ *
+ * RETURN: Completed resource node
+ *
+ * DESCRIPTION: Construct a long "ExtendedIO" descriptor
+ *
+ ******************************************************************************/
+
+ASL_RESOURCE_NODE *
+RsDoExtendedIoDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset)
+{
+ AML_RESOURCE *Descriptor;
+ ACPI_PARSE_OBJECT *InitializerOp;
+ ASL_RESOURCE_NODE *Rnode;
+ UINT16 StringLength = 0;
+// UINT32 OptionIndex = 0;
+ UINT32 i;
+
+
+ InitializerOp = Op->Asl.Child;
+ StringLength = RsGetStringDataLength (InitializerOp);
+
+ Rnode = RsAllocateResourceNode (
+ sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + 1 + StringLength);
+
+ Descriptor = Rnode->Buffer;
+ Descriptor->ExtAddress64.DescriptorType = ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64;
+ Descriptor->ExtAddress64.ResourceType = ACPI_ADDRESS_TYPE_IO_RANGE;
+ Descriptor->ExtAddress64.RevisionID = AML_RESOURCE_EXTENDED_ADDRESS_REVISION;
+
+ Descriptor->ExtAddress64.ResourceLength = (UINT16)
+ (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
+ sizeof (AML_RESOURCE_LARGE_HEADER));
+
+ /* Process all child initialization nodes */
+
+ for (i = 0; InitializerOp; i++)
+ {
+ switch (i)
+ {
+ case 0: /* Resource Usage */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 0, 1);
+ break;
+
+ case 1: /* MinType */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 2, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_MINTYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 2);
+ break;
+
+ case 2: /* MaxType */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 3, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_MAXTYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 3);
+ break;
+
+ case 3: /* DecodeType */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 1, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_DECODE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 1);
+ break;
+
+ case 4: /* Range Type */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 0, 3);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_RANGETYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 0);
+ break;
+
+ case 5: /* Address Granularity */
+
+ Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_GRANULARITY,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
+ break;
+
+ case 6: /* Address Min */
+
+ Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_MINADDR,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
+ break;
+
+ case 7: /* Address Max */
+
+ Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_MAXADDR,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
+ break;
+
+ case 8: /* Translation Offset */
+
+ Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_TRANSLATION,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
+ break;
+
+ case 9: /* Address Length */
+
+ Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
+ break;
+
+ case 10: /* Type-Specific Attributes */
+
+ Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_TYPESPECIFICATTRIBUTES,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
+ break;
+
+ case 11: /* ResourceTag */
+
+ UtAttachNamepathToOwner (Op, InitializerOp);
+ break;
+
+ case 12: /* Type */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 4, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_TYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 4);
+ break;
+
+ case 13: /* Translation Type */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 5, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_TRANSTYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 5);
+ break;
+
+ default:
+
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
+ break;
+ }
+
+ InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+ }
+
+ Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength;
+ return (Rnode);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: RsDoExtendedMemoryDescriptor
+ *
+ * PARAMETERS: Op - Parent resource descriptor parse node
+ * CurrentByteOffset - Offset into the resource template AML
+ * buffer (to track references to the desc)
+ *
+ * RETURN: Completed resource node
+ *
+ * DESCRIPTION: Construct a long "ExtendedMemory" descriptor
+ *
+ ******************************************************************************/
+
+ASL_RESOURCE_NODE *
+RsDoExtendedMemoryDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset)
+{
+ AML_RESOURCE *Descriptor;
+ ACPI_PARSE_OBJECT *InitializerOp;
+ ASL_RESOURCE_NODE *Rnode;
+ UINT16 StringLength = 0;
+ UINT32 i;
+
+
+ InitializerOp = Op->Asl.Child;
+ StringLength = RsGetStringDataLength (InitializerOp);
+
+ Rnode = RsAllocateResourceNode (
+ sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + 1 + StringLength);
+
+ Descriptor = Rnode->Buffer;
+ Descriptor->ExtAddress64.DescriptorType = ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64;
+ Descriptor->ExtAddress64.ResourceType = ACPI_ADDRESS_TYPE_MEMORY_RANGE;
+ Descriptor->ExtAddress64.RevisionID = AML_RESOURCE_EXTENDED_ADDRESS_REVISION;
+
+ Descriptor->ExtAddress64.ResourceLength = (UINT16)
+ (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
+ sizeof (AML_RESOURCE_LARGE_HEADER));
+
+ /* Process all child initialization nodes */
+
+ for (i = 0; InitializerOp; i++)
+ {
+ switch (i)
+ {
+ case 0: /* Resource Usage */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 0, 1);
+ break;
+
+ case 1: /* DecodeType */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 1, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_DECODE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 1);
+ break;
+
+ case 2: /* MinType */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 2, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_MINTYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 2);
+ break;
+
+ case 3: /* MaxType */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 3, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_MAXTYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 3);
+ break;
+
+ case 4: /* Memory Type */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 1, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_MEMTYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 1);
+ break;
+
+ case 5: /* Read/Write Type */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 0, 1);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_READWRITETYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 0);
+ break;
+
+ case 6: /* Address Granularity */
+
+ Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_GRANULARITY,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
+ break;
+
+ case 7: /* Min Address */
+
+ Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_MINADDR,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
+ break;
+
+ case 8: /* Max Address */
+
+ Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_MAXADDR,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
+ break;
+
+ case 9: /* Translation Offset */
+
+ Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_TRANSLATION,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
+ break;
+
+ case 10: /* Address Length */
+
+ Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
+ break;
+
+ case 11: /* Type-Specific Attributes */
+
+ Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_TYPESPECIFICATTRIBUTES,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
+ break;
+
+ case 12: /* ResourceTag */
+
+ UtAttachNamepathToOwner (Op, InitializerOp);
+ break;
+
+
+ case 13: /* Address Range */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 3, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_MEMATTRIBUTES,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 3);
+ break;
+
+ case 14: /* Type */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.SpecificFlags, InitializerOp, 5, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_TYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.SpecificFlags), 5);
+ break;
+
+ default:
+
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
+ break;
+ }
+
+ InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+ }
+
+ Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength;
+ return (Rnode);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: RsDoExtendedSpaceDescriptor
+ *
+ * PARAMETERS: Op - Parent resource descriptor parse node
+ * CurrentByteOffset - Offset into the resource template AML
+ * buffer (to track references to the desc)
+ *
+ * RETURN: Completed resource node
+ *
+ * DESCRIPTION: Construct a long "ExtendedSpace" descriptor
+ *
+ ******************************************************************************/
+
+ASL_RESOURCE_NODE *
+RsDoExtendedSpaceDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset)
+{
+ AML_RESOURCE *Descriptor;
+ ACPI_PARSE_OBJECT *InitializerOp;
+ ASL_RESOURCE_NODE *Rnode;
+ UINT16 StringLength = 0;
+ UINT32 i;
+
+
+ InitializerOp = Op->Asl.Child;
+ StringLength = RsGetStringDataLength (InitializerOp);
+
+ Rnode = RsAllocateResourceNode (
+ sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + 1 + StringLength);
+
+ Descriptor = Rnode->Buffer;
+ Descriptor->ExtAddress64.DescriptorType = ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64;
+ Descriptor->ExtAddress64.RevisionID = AML_RESOURCE_EXTENDED_ADDRESS_REVISION;
+
+ Descriptor->ExtAddress64.ResourceLength = (UINT16)
+ (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
+ sizeof (AML_RESOURCE_LARGE_HEADER));
+
+ /* Process all child initialization nodes */
+
+ for (i = 0; InitializerOp; i++)
+ {
+ switch (i)
+ {
+ case 0: /* Resource Type */
+
+ Descriptor->ExtAddress64.ResourceType =
+ (UINT8) InitializerOp->Asl.Value.Integer;
+ break;
+
+ case 1: /* Resource Usage */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 0, 1);
+ break;
+
+ case 2: /* DecodeType */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 1, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_DECODE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 1);
+ break;
+
+ case 3: /* MinType */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 2, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_MINTYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 2);
+ break;
+
+ case 4: /* MaxType */
+
+ RsSetFlagBits (&Descriptor->ExtAddress64.Flags, InitializerOp, 3, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_MAXTYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Flags), 3);
+ break;
+
+ case 5: /* Type-Specific flags */
+
+ Descriptor->ExtAddress64.SpecificFlags =
+ (UINT8) InitializerOp->Asl.Value.Integer;
+ break;
+
+ case 6: /* Address Granularity */
+
+ Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_GRANULARITY,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
+ break;
+
+ case 7: /* Min Address */
+
+ Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_MINADDR,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
+ break;
+
+ case 8: /* Max Address */
+
+ Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_MAXADDR,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
+ break;
+
+ case 9: /* Translation Offset */
+
+ Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_TRANSLATION,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
+ break;
+
+ case 10: /* Address Length */
+
+ Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
+ break;
+
+ case 11: /* Type-Specific Attributes */
+
+ Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_TYPESPECIFICATTRIBUTES,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
+ break;
+
+ case 12: /* ResourceTag */
+
+ UtAttachNamepathToOwner (Op, InitializerOp);
+ break;
+
+ default:
+
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
+ break;
+ }
+
+ InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+ }
+
+ Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength;
return (Rnode);
}
@@ -539,112 +1274,117 @@ RsDoQwordIoDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
- UINT32 StringLength = 0;
+ UINT8 *OptionalFields;
+ UINT16 StringLength = 0;
UINT32 OptionIndex = 0;
UINT32 i;
+ BOOLEAN ResSourceIndex = FALSE;
InitializerOp = Op->Asl.Child;
StringLength = RsGetStringDataLength (InitializerOp);
- Rnode = RsAllocateResourceNode (sizeof (ASL_QWORD_ADDRESS_DESC) +
- StringLength);
+ Rnode = RsAllocateResourceNode (
+ sizeof (AML_RESOURCE_ADDRESS64) + 1 + StringLength);
Descriptor = Rnode->Buffer;
- Descriptor->Qas.DescriptorType = ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE;
- Descriptor->Qas.ResourceType = ACPI_RESOURCE_TYPE_IO_RANGE;
+ Descriptor->Address64.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS64;
+ Descriptor->Address64.ResourceType = ACPI_ADDRESS_TYPE_IO_RANGE;
/*
* Initial descriptor length -- may be enlarged if there are
* optional fields present
*/
- Descriptor->Qas.Length = (UINT16) (ASL_RESDESC_OFFSET (Qas.OptionalFields[0]) -
- ASL_RESDESC_OFFSET (Qas.ResourceType));
- /*
- * Process all child initialization nodes
- */
+ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);
+ Descriptor->Address64.ResourceLength = (UINT16)
+ (sizeof (AML_RESOURCE_ADDRESS64) -
+ sizeof (AML_RESOURCE_LARGE_HEADER));
+
+ /* Process all child initialization nodes */
+
for (i = 0; InitializerOp; i++)
{
switch (i)
{
- case 0: /* Resource Type */
+ case 0: /* Resource Usage */
- RsSetFlagBits (&Descriptor->Qas.Flags, InitializerOp, 0, 1);
+ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 0, 1);
break;
case 1: /* MinType */
- RsSetFlagBits (&Descriptor->Qas.Flags, InitializerOp, 2, 0);
+ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 2, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MINTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.Flags), 2);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 2);
break;
case 2: /* MaxType */
- RsSetFlagBits (&Descriptor->Qas.Flags, InitializerOp, 3, 0);
+ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 3, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MAXTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.Flags), 3);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 3);
break;
case 3: /* DecodeType */
- RsSetFlagBits (&Descriptor->Qas.Flags, InitializerOp, 1, 0);
+ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 1, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_DECODE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.Flags), 1);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 1);
break;
case 4: /* Range Type */
- RsSetFlagBits (&Descriptor->Qas.SpecificFlags, InitializerOp, 0, 3);
+ RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 0, 3);
RsCreateBitField (InitializerOp, ASL_RESNAME_RANGETYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.SpecificFlags), 0);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 0);
break;
case 5: /* Address Granularity */
- Descriptor->Qas.Granularity = InitializerOp->Asl.Value.Integer;
- RsCreateByteField (InitializerOp, ASL_RESNAME_GRANULARITY,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.Granularity));
+ Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_GRANULARITY,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
break;
case 6: /* Address Min */
- Descriptor->Qas.AddressMin = InitializerOp->Asl.Value.Integer;
+ Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MINADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.AddressMin));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
break;
case 7: /* Address Max */
- Descriptor->Qas.AddressMax = InitializerOp->Asl.Value.Integer;
+ Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MAXADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.AddressMax));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
break;
case 8: /* Translation Offset */
- Descriptor->Qas.TranslationOffset = InitializerOp->Asl.Value.Integer;
+ Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_TRANSLATION,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.TranslationOffset));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
break;
case 9: /* Address Length */
- Descriptor->Qas.AddressLength = InitializerOp->Asl.Value.Integer;
+ Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.AddressLength));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
break;
case 10: /* ResSourceIndex [Optional Field - BYTE] */
if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
{
- Descriptor->Qas.OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+ OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
OptionIndex++;
- Descriptor->Qas.Length++;
+ Descriptor->Address64.ResourceLength++;
+ ResSourceIndex = TRUE;
}
break;
@@ -655,12 +1395,34 @@ RsDoQwordIoDescriptor (
{
if (StringLength)
{
- Descriptor->Qas.Length = (UINT16) (Descriptor->Qas.Length + StringLength);
+ Descriptor->Address64.ResourceLength = (UINT16)
+ (Descriptor->Address64.ResourceLength + StringLength);
+
+ strcpy ((char *)
+ &OptionalFields[OptionIndex],
+ InitializerOp->Asl.Value.String);
+
+ /* ResourceSourceIndex must also be valid */
- strcpy ((char *) &Descriptor->Qas.OptionalFields[OptionIndex],
- InitializerOp->Asl.Value.String);
+ if (!ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
+ InitializerOp, NULL);
+ }
}
}
+
+#if 0
+ /*
+ * Not a valid ResourceSource, ResourceSourceIndex must also
+ * be invalid
+ */
+ else if (ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
+ InitializerOp, NULL);
+ }
+#endif
break;
case 12: /* ResourceTag */
@@ -670,16 +1432,16 @@ RsDoQwordIoDescriptor (
case 13: /* Type */
- RsSetFlagBits (&Descriptor->Qas.SpecificFlags, InitializerOp, 4, 0);
+ RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 4, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_TYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.SpecificFlags), 4);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 4);
break;
case 14: /* Translation Type */
- RsSetFlagBits (&Descriptor->Qas.SpecificFlags, InitializerOp, 5, 0);
+ RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 5, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_TRANSTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.SpecificFlags), 5);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 5);
break;
default:
@@ -691,9 +1453,8 @@ RsDoQwordIoDescriptor (
InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
}
- Rnode->BufferLength = (ASL_RESDESC_OFFSET (Qas.OptionalFields[0]) -
- ASL_RESDESC_OFFSET (Qas.DescriptorType))
- + OptionIndex + StringLength;
+ Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) +
+ OptionIndex + StringLength;
return (Rnode);
}
@@ -717,119 +1478,124 @@ RsDoQwordMemoryDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
- UINT32 StringLength = 0;
+ UINT8 *OptionalFields;
+ UINT16 StringLength = 0;
UINT32 OptionIndex = 0;
UINT32 i;
+ BOOLEAN ResSourceIndex = FALSE;
InitializerOp = Op->Asl.Child;
StringLength = RsGetStringDataLength (InitializerOp);
- Rnode = RsAllocateResourceNode (sizeof (ASL_QWORD_ADDRESS_DESC) +
- StringLength);
+ Rnode = RsAllocateResourceNode (
+ sizeof (AML_RESOURCE_ADDRESS64) + 1 + StringLength);
Descriptor = Rnode->Buffer;
- Descriptor->Qas.DescriptorType = ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE;
- Descriptor->Qas.ResourceType = ACPI_RESOURCE_TYPE_MEMORY_RANGE;
+ Descriptor->Address64.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS64;
+ Descriptor->Address64.ResourceType = ACPI_ADDRESS_TYPE_MEMORY_RANGE;
/*
* Initial descriptor length -- may be enlarged if there are
* optional fields present
*/
- Descriptor->Qas.Length = (UINT16) (ASL_RESDESC_OFFSET (Qas.OptionalFields[0]) -
- ASL_RESDESC_OFFSET (Qas.ResourceType));
- /*
- * Process all child initialization nodes
- */
+ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);
+ Descriptor->Address64.ResourceLength = (UINT16)
+ (sizeof (AML_RESOURCE_ADDRESS64) -
+ sizeof (AML_RESOURCE_LARGE_HEADER));
+
+ /* Process all child initialization nodes */
+
for (i = 0; InitializerOp; i++)
{
switch (i)
{
- case 0: /* Resource Type */
+ case 0: /* Resource Usage */
- RsSetFlagBits (&Descriptor->Qas.Flags, InitializerOp, 0, 1);
+ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 0, 1);
break;
case 1: /* DecodeType */
- RsSetFlagBits (&Descriptor->Qas.Flags, InitializerOp, 1, 0);
+ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 1, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_DECODE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.Flags), 1);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 1);
break;
case 2: /* MinType */
- RsSetFlagBits (&Descriptor->Qas.Flags, InitializerOp, 2, 0);
+ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 2, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MINTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.Flags), 2);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 2);
break;
case 3: /* MaxType */
- RsSetFlagBits (&Descriptor->Qas.Flags, InitializerOp, 3, 0);
+ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 3, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MAXTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.Flags), 3);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 3);
break;
case 4: /* Memory Type */
- RsSetFlagBits (&Descriptor->Qas.SpecificFlags, InitializerOp, 1, 0);
+ RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 1, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MEMTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.SpecificFlags), 1);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 1);
break;
case 5: /* Read/Write Type */
- RsSetFlagBits (&Descriptor->Qas.SpecificFlags, InitializerOp, 0, 1);
+ RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 0, 1);
RsCreateBitField (InitializerOp, ASL_RESNAME_READWRITETYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.SpecificFlags), 0);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 0);
break;
case 6: /* Address Granularity */
- Descriptor->Qas.Granularity = InitializerOp->Asl.Value.Integer;
+ Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_GRANULARITY,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.Granularity));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
break;
case 7: /* Min Address */
- Descriptor->Qas.AddressMin = InitializerOp->Asl.Value.Integer;
+ Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MINADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.AddressMin));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
break;
case 8: /* Max Address */
- Descriptor->Qas.AddressMax = InitializerOp->Asl.Value.Integer;
+ Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MAXADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.AddressMax));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
break;
case 9: /* Translation Offset */
- Descriptor->Qas.TranslationOffset = InitializerOp->Asl.Value.Integer;
+ Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_TRANSLATION,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.TranslationOffset));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
break;
case 10: /* Address Length */
- Descriptor->Qas.AddressLength = InitializerOp->Asl.Value.Integer;
+ Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.AddressLength));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
break;
case 11: /* ResSourceIndex [Optional Field - BYTE] */
if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
{
- Descriptor->Qas.OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+ OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
OptionIndex++;
- Descriptor->Qas.Length++;
+ Descriptor->Address64.ResourceLength++;
+ ResSourceIndex = TRUE;
}
break;
@@ -840,12 +1606,34 @@ RsDoQwordMemoryDescriptor (
{
if (StringLength)
{
- Descriptor->Qas.Length = (UINT16) (Descriptor->Qas.Length + StringLength);
+ Descriptor->Address64.ResourceLength = (UINT16)
+ (Descriptor->Address64.ResourceLength + StringLength);
+
+ strcpy ((char *)
+ &OptionalFields[OptionIndex],
+ InitializerOp->Asl.Value.String);
+
+ /* ResourceSourceIndex must also be valid */
- strcpy ((char *) &Descriptor->Qas.OptionalFields[OptionIndex],
- InitializerOp->Asl.Value.String);
+ if (!ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
+ InitializerOp, NULL);
+ }
}
}
+
+#if 0
+ /*
+ * Not a valid ResourceSource, ResourceSourceIndex must also
+ * be invalid
+ */
+ else if (ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
+ InitializerOp, NULL);
+ }
+#endif
break;
case 13: /* ResourceTag */
@@ -856,16 +1644,16 @@ RsDoQwordMemoryDescriptor (
case 14: /* Address Range */
- RsSetFlagBits (&Descriptor->Qas.SpecificFlags, InitializerOp, 3, 0);
+ RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 3, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MEMATTRIBUTES,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.SpecificFlags), 3);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 3);
break;
case 15: /* Type */
- RsSetFlagBits (&Descriptor->Qas.SpecificFlags, InitializerOp, 5, 0);
+ RsSetFlagBits (&Descriptor->Address64.SpecificFlags, InitializerOp, 5, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_TYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Qas.SpecificFlags), 5);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.SpecificFlags), 5);
break;
default:
@@ -877,9 +1665,202 @@ RsDoQwordMemoryDescriptor (
InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
}
- Rnode->BufferLength = (ASL_RESDESC_OFFSET (Qas.OptionalFields[0]) -
- ASL_RESDESC_OFFSET (Qas.DescriptorType))
- + OptionIndex + StringLength;
+ Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) +
+ OptionIndex + StringLength;
+ return (Rnode);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: RsDoQwordSpaceDescriptor
+ *
+ * PARAMETERS: Op - Parent resource descriptor parse node
+ * CurrentByteOffset - Offset into the resource template AML
+ * buffer (to track references to the desc)
+ *
+ * RETURN: Completed resource node
+ *
+ * DESCRIPTION: Construct a long "QwordSpace" descriptor
+ *
+ ******************************************************************************/
+
+ASL_RESOURCE_NODE *
+RsDoQwordSpaceDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset)
+{
+ AML_RESOURCE *Descriptor;
+ ACPI_PARSE_OBJECT *InitializerOp;
+ ASL_RESOURCE_NODE *Rnode;
+ UINT8 *OptionalFields;
+ UINT16 StringLength = 0;
+ UINT32 OptionIndex = 0;
+ UINT32 i;
+ BOOLEAN ResSourceIndex = FALSE;
+
+
+ InitializerOp = Op->Asl.Child;
+ StringLength = RsGetStringDataLength (InitializerOp);
+
+ Rnode = RsAllocateResourceNode (
+ sizeof (AML_RESOURCE_ADDRESS64) + 1 + StringLength);
+
+ Descriptor = Rnode->Buffer;
+ Descriptor->Address64.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS32;
+
+ /*
+ * Initial descriptor length -- may be enlarged if there are
+ * optional fields present
+ */
+ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);
+ Descriptor->Address64.ResourceLength = (UINT16)
+ (sizeof (AML_RESOURCE_ADDRESS64) -
+ sizeof (AML_RESOURCE_LARGE_HEADER));
+
+ /* Process all child initialization nodes */
+
+ for (i = 0; InitializerOp; i++)
+ {
+ switch (i)
+ {
+ case 0: /* Resource Type */
+
+ Descriptor->Address64.ResourceType =
+ (UINT8) InitializerOp->Asl.Value.Integer;
+ break;
+
+ case 1: /* Resource Usage */
+
+ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 0, 1);
+ break;
+
+ case 2: /* DecodeType */
+
+ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 1, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_DECODE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 1);
+ break;
+
+ case 3: /* MinType */
+
+ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 2, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_MINTYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 2);
+ break;
+
+ case 4: /* MaxType */
+
+ RsSetFlagBits (&Descriptor->Address64.Flags, InitializerOp, 3, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_MAXTYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Flags), 3);
+ break;
+
+ case 5: /* Type-Specific flags */
+
+ Descriptor->Address64.SpecificFlags =
+ (UINT8) InitializerOp->Asl.Value.Integer;
+ break;
+
+ case 6: /* Address Granularity */
+
+ Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_GRANULARITY,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
+ break;
+
+ case 7: /* Min Address */
+
+ Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_MINADDR,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
+ break;
+
+ case 8: /* Max Address */
+
+ Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_MAXADDR,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
+ break;
+
+ case 9: /* Translation Offset */
+
+ Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_TRANSLATION,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
+ break;
+
+ case 10: /* Address Length */
+
+ Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
+ break;
+
+ case 11: /* ResSourceIndex [Optional Field - BYTE] */
+
+ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
+ {
+ OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+ OptionIndex++;
+ Descriptor->Address64.ResourceLength++;
+ ResSourceIndex = TRUE;
+ }
+ break;
+
+ case 12: /* ResSource [Optional Field - STRING] */
+
+ if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
+ (InitializerOp->Asl.Value.String))
+ {
+ if (StringLength)
+ {
+ Descriptor->Address64.ResourceLength = (UINT16)
+ (Descriptor->Address64.ResourceLength + StringLength);
+
+ strcpy ((char *)
+ &OptionalFields[OptionIndex],
+ InitializerOp->Asl.Value.String);
+
+ /* ResourceSourceIndex must also be valid */
+
+ if (!ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
+ InitializerOp, NULL);
+ }
+ }
+ }
+
+#if 0
+ /*
+ * Not a valid ResourceSource, ResourceSourceIndex must also
+ * be invalid
+ */
+ else if (ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
+ InitializerOp, NULL);
+ }
+#endif
+ break;
+
+ case 13: /* ResourceTag */
+
+ UtAttachNamepathToOwner (Op, InitializerOp);
+ break;
+
+ default:
+
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
+ break;
+ }
+
+ InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+ }
+
+ Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) +
+ OptionIndex + StringLength;
return (Rnode);
}
@@ -903,113 +1884,117 @@ RsDoWordIoDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
- UINT32 StringLength = 0;
+ UINT8 *OptionalFields;
+ UINT16 StringLength = 0;
UINT32 OptionIndex = 0;
UINT32 i;
+ BOOLEAN ResSourceIndex = FALSE;
InitializerOp = Op->Asl.Child;
StringLength = RsGetStringDataLength (InitializerOp);
- Rnode = RsAllocateResourceNode (sizeof (ASL_WORD_ADDRESS_DESC) +
- StringLength);
+ Rnode = RsAllocateResourceNode (
+ sizeof (AML_RESOURCE_ADDRESS16) + 1 + StringLength);
Descriptor = Rnode->Buffer;
- Descriptor->Was.DescriptorType = ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE;
- Descriptor->Was.ResourceType = ACPI_RESOURCE_TYPE_IO_RANGE;
+ Descriptor->Address16.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS16;
+ Descriptor->Address16.ResourceType = ACPI_ADDRESS_TYPE_IO_RANGE;
/*
* Initial descriptor length -- may be enlarged if there are
* optional fields present
*/
- Descriptor->Was.Length = (UINT16) (ASL_RESDESC_OFFSET (Was.OptionalFields[0]) -
- ASL_RESDESC_OFFSET (Was.ResourceType));
+ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS16);
+ Descriptor->Address16.ResourceLength = (UINT16)
+ (sizeof (AML_RESOURCE_ADDRESS16) -
+ sizeof (AML_RESOURCE_LARGE_HEADER));
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
for (i = 0; InitializerOp; i++)
{
switch (i)
{
- case 0: /* Resource Type */
+ case 0: /* Resource Usage */
- RsSetFlagBits (&Descriptor->Was.Flags, InitializerOp, 0, 1);
+ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 0, 1);
break;
case 1: /* MinType */
- RsSetFlagBits (&Descriptor->Was.Flags, InitializerOp, 2, 0);
+ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 2, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MINTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.Flags), 2);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 2);
break;
case 2: /* MaxType */
- RsSetFlagBits (&Descriptor->Was.Flags, InitializerOp, 3, 0);
+ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 3, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MAXTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.Flags), 3);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 3);
break;
case 3: /* DecodeType */
- RsSetFlagBits (&Descriptor->Was.Flags, InitializerOp, 1, 0);
+ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 1, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_DECODE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.Flags), 1);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 1);
break;
case 4: /* Range Type */
- RsSetFlagBits (&Descriptor->Was.SpecificFlags, InitializerOp, 0, 3);
+ RsSetFlagBits (&Descriptor->Address16.SpecificFlags, InitializerOp, 0, 3);
RsCreateBitField (InitializerOp, ASL_RESNAME_RANGETYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.SpecificFlags), 0);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.SpecificFlags), 0);
break;
case 5: /* Address Granularity */
- Descriptor->Was.Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address16.Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_GRANULARITY,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.Granularity));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
break;
case 6: /* Address Min */
- Descriptor->Was.AddressMin = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address16.Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MINADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.AddressMin));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
break;
case 7: /* Address Max */
- Descriptor->Was.AddressMax = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address16.Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MAXADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.AddressMax));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
break;
case 8: /* Translation Offset */
- Descriptor->Was.TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address16.TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_TRANSLATION,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.TranslationOffset));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
break;
case 9: /* Address Length */
- Descriptor->Was.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address16.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.AddressLength));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
break;
case 10: /* ResSourceIndex [Optional Field - BYTE] */
if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
{
- Descriptor->Was.OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+ OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
OptionIndex++;
- Descriptor->Was.Length++;
+ Descriptor->Address16.ResourceLength++;
+ ResSourceIndex = TRUE;
}
break;
@@ -1020,12 +2005,34 @@ RsDoWordIoDescriptor (
{
if (StringLength)
{
- Descriptor->Was.Length = (UINT16) (Descriptor->Was.Length +StringLength);
+ Descriptor->Address16.ResourceLength = (UINT16)
+ (Descriptor->Address16.ResourceLength + StringLength);
+
+ strcpy ((char *)
+ &OptionalFields[OptionIndex],
+ InitializerOp->Asl.Value.String);
+
+ /* ResourceSourceIndex must also be valid */
- strcpy ((char *) &Descriptor->Was.OptionalFields[OptionIndex],
- InitializerOp->Asl.Value.String);
+ if (!ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
+ InitializerOp, NULL);
+ }
}
}
+
+#if 0
+ /*
+ * Not a valid ResourceSource, ResourceSourceIndex must also
+ * be invalid
+ */
+ else if (ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
+ InitializerOp, NULL);
+ }
+#endif
break;
case 12: /* ResourceTag */
@@ -1035,16 +2042,16 @@ RsDoWordIoDescriptor (
case 13: /* Type */
- RsSetFlagBits (&Descriptor->Was.SpecificFlags, InitializerOp, 4, 0);
+ RsSetFlagBits (&Descriptor->Address16.SpecificFlags, InitializerOp, 4, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_TYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.SpecificFlags), 4);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.SpecificFlags), 4);
break;
case 14: /* Translation Type */
- RsSetFlagBits (&Descriptor->Was.SpecificFlags, InitializerOp, 5, 0);
+ RsSetFlagBits (&Descriptor->Address16.SpecificFlags, InitializerOp, 5, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_TRANSTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.SpecificFlags), 5);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.SpecificFlags), 5);
break;
default:
@@ -1056,9 +2063,8 @@ RsDoWordIoDescriptor (
InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
}
- Rnode->BufferLength = (ASL_RESDESC_OFFSET (Was.OptionalFields[0]) -
- ASL_RESDESC_OFFSET (Was.DescriptorType))
- + OptionIndex + StringLength;
+ Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
+ OptionIndex + StringLength;
return (Rnode);
}
@@ -1082,106 +2088,115 @@ RsDoWordBusNumberDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
- UINT32 StringLength = 0;
+ UINT8 *OptionalFields;
+ UINT16 StringLength = 0;
UINT32 OptionIndex = 0;
UINT32 i;
+ BOOLEAN ResSourceIndex = FALSE;
InitializerOp = Op->Asl.Child;
StringLength = RsGetStringDataLength (InitializerOp);
- Rnode = RsAllocateResourceNode (sizeof (ASL_WORD_ADDRESS_DESC) +
- StringLength);
+ Rnode = RsAllocateResourceNode (
+ sizeof (AML_RESOURCE_ADDRESS16) + 1 + StringLength);
Descriptor = Rnode->Buffer;
- Descriptor->Was.DescriptorType = ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE;
- Descriptor->Was.ResourceType = ACPI_RESOURCE_TYPE_BUS_NUMBER_RANGE;
+ Descriptor->Address16.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS16;
+ Descriptor->Address16.ResourceType = ACPI_ADDRESS_TYPE_BUS_NUMBER_RANGE;
/*
* Initial descriptor length -- may be enlarged if there are
* optional fields present
*/
- Descriptor->Was.Length = (UINT16) (ASL_RESDESC_OFFSET (Was.OptionalFields[0]) -
- ASL_RESDESC_OFFSET (Was.ResourceType));
+ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS16);
+ Descriptor->Address16.ResourceLength = (UINT16)
+ (sizeof (AML_RESOURCE_ADDRESS16) -
+ sizeof (AML_RESOURCE_LARGE_HEADER));
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
for (i = 0; InitializerOp; i++)
{
switch (i)
{
- case 0: /* Resource Type */
+ case 0: /* Resource Usage */
- RsSetFlagBits (&Descriptor->Was.Flags, InitializerOp, 0, 1);
+ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 0, 1);
break;
case 1: /* MinType */
- RsSetFlagBits (&Descriptor->Was.Flags, InitializerOp, 2, 0);
+ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 2, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MINTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.Flags), 2);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 2);
break;
case 2: /* MaxType */
- RsSetFlagBits (&Descriptor->Was.Flags, InitializerOp, 3, 0);
+ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 3, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_MAXTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.Flags), 3);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 3);
break;
case 3: /* DecodeType */
- RsSetFlagBits (&Descriptor->Was.Flags, InitializerOp, 1, 0);
+ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 1, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_DECODE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.Flags), 1);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 1);
break;
case 4: /* Address Granularity */
- Descriptor->Was.Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address16.Granularity =
+ (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_GRANULARITY,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.Granularity));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
break;
case 5: /* Min Address */
- Descriptor->Was.AddressMin = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address16.Minimum =
+ (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MINADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.AddressMin));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
break;
case 6: /* Max Address */
- Descriptor->Was.AddressMax = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address16.Maximum =
+ (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_MAXADDR,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.AddressMax));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
break;
case 7: /* Translation Offset */
- Descriptor->Was.TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address16.TranslationOffset =
+ (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_TRANSLATION,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.TranslationOffset));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
break;
case 8: /* Address Length */
- Descriptor->Was.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
+ Descriptor->Address16.AddressLength =
+ (UINT16) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Was.AddressLength));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
break;
case 9: /* ResSourceIndex [Optional Field - BYTE] */
if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
{
- Descriptor->Was.OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+ OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
OptionIndex++;
- Descriptor->Was.Length++;
+ Descriptor->Address16.ResourceLength++;
+ ResSourceIndex = TRUE;
}
break;
@@ -1192,12 +2207,34 @@ RsDoWordBusNumberDescriptor (
{
if (StringLength)
{
- Descriptor->Was.Length = (UINT16) (Descriptor->Was.Length + StringLength);
+ Descriptor->Address16.ResourceLength = (UINT16)
+ (Descriptor->Address16.ResourceLength + StringLength);
+
+ strcpy ((char *)
+ &OptionalFields[OptionIndex],
+ InitializerOp->Asl.Value.String);
- strcpy ((char *) &Descriptor->Was.OptionalFields[OptionIndex],
- InitializerOp->Asl.Value.String);
+ /* ResourceSourceIndex must also be valid */
+
+ if (!ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
+ InitializerOp, NULL);
+ }
}
}
+
+#if 0
+ /*
+ * Not a valid ResourceSource, ResourceSourceIndex must also
+ * be invalid
+ */
+ else if (ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
+ InitializerOp, NULL);
+ }
+#endif
break;
case 11: /* ResourceTag */
@@ -1214,9 +2251,207 @@ RsDoWordBusNumberDescriptor (
InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
}
- Rnode->BufferLength = (ASL_RESDESC_OFFSET (Was.OptionalFields[0]) -
- ASL_RESDESC_OFFSET (Was.DescriptorType))
- + OptionIndex + StringLength;
+ Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
+ OptionIndex + StringLength;
+ return (Rnode);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION: RsDoWordSpaceDescriptor
+ *
+ * PARAMETERS: Op - Parent resource descriptor parse node
+ * CurrentByteOffset - Offset into the resource template AML
+ * buffer (to track references to the desc)
+ *
+ * RETURN: Completed resource node
+ *
+ * DESCRIPTION: Construct a long "WordSpace" descriptor
+ *
+ ******************************************************************************/
+
+ASL_RESOURCE_NODE *
+RsDoWordSpaceDescriptor (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 CurrentByteOffset)
+{
+ AML_RESOURCE *Descriptor;
+ ACPI_PARSE_OBJECT *InitializerOp;
+ ASL_RESOURCE_NODE *Rnode;
+ UINT8 *OptionalFields;
+ UINT16 StringLength = 0;
+ UINT32 OptionIndex = 0;
+ UINT32 i;
+ BOOLEAN ResSourceIndex = FALSE;
+
+
+ InitializerOp = Op->Asl.Child;
+ StringLength = RsGetStringDataLength (InitializerOp);
+
+ Rnode = RsAllocateResourceNode (
+ sizeof (AML_RESOURCE_ADDRESS16) + 1 + StringLength);
+
+ Descriptor = Rnode->Buffer;
+ Descriptor->Address16.DescriptorType = ACPI_RESOURCE_NAME_ADDRESS16;
+
+ /*
+ * Initial descriptor length -- may be enlarged if there are
+ * optional fields present
+ */
+ OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS16);
+ Descriptor->Address16.ResourceLength = (UINT16)
+ (sizeof (AML_RESOURCE_ADDRESS16) -
+ sizeof (AML_RESOURCE_LARGE_HEADER));
+
+ /* Process all child initialization nodes */
+
+ for (i = 0; InitializerOp; i++)
+ {
+ switch (i)
+ {
+ case 0: /* Resource Type */
+
+ Descriptor->Address16.ResourceType =
+ (UINT8) InitializerOp->Asl.Value.Integer;
+ break;
+
+ case 1: /* Resource Usage */
+
+ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 0, 1);
+ break;
+
+ case 2: /* DecodeType */
+
+ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 1, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_DECODE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 1);
+ break;
+
+ case 3: /* MinType */
+
+ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 2, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_MINTYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 2);
+ break;
+
+ case 4: /* MaxType */
+
+ RsSetFlagBits (&Descriptor->Address16.Flags, InitializerOp, 3, 0);
+ RsCreateBitField (InitializerOp, ASL_RESNAME_MAXTYPE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Flags), 3);
+ break;
+
+ case 5: /* Type-Specific flags */
+
+ Descriptor->Address16.SpecificFlags =
+ (UINT8) InitializerOp->Asl.Value.Integer;
+ break;
+
+ case 6: /* Address Granularity */
+
+ Descriptor->Address16.Granularity =
+ (UINT16) InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_GRANULARITY,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
+ break;
+
+ case 7: /* Min Address */
+
+ Descriptor->Address16.Minimum =
+ (UINT16) InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_MINADDR,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
+ break;
+
+ case 8: /* Max Address */
+
+ Descriptor->Address16.Maximum =
+ (UINT16) InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_MAXADDR,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
+ break;
+
+ case 9: /* Translation Offset */
+
+ Descriptor->Address16.TranslationOffset =
+ (UINT16) InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_TRANSLATION,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
+ break;
+
+ case 10: /* Address Length */
+
+ Descriptor->Address16.AddressLength =
+ (UINT16) InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_LENGTH,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
+ break;
+
+ case 11: /* ResSourceIndex [Optional Field - BYTE] */
+
+ if (InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
+ {
+ OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+ OptionIndex++;
+ Descriptor->Address16.ResourceLength++;
+ ResSourceIndex = TRUE;
+ }
+ break;
+
+ case 12: /* ResSource [Optional Field - STRING] */
+
+ if ((InitializerOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG) &&
+ (InitializerOp->Asl.Value.String))
+ {
+ if (StringLength)
+ {
+ Descriptor->Address16.ResourceLength = (UINT16)
+ (Descriptor->Address16.ResourceLength + StringLength);
+
+ strcpy ((char *)
+ &OptionalFields[OptionIndex],
+ InitializerOp->Asl.Value.String);
+
+ /* ResourceSourceIndex must also be valid */
+
+ if (!ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
+ InitializerOp, NULL);
+ }
+ }
+ }
+
+#if 0
+ /*
+ * Not a valid ResourceSource, ResourceSourceIndex must also
+ * be invalid
+ */
+ else if (ResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
+ InitializerOp, NULL);
+ }
+#endif
+ break;
+
+ case 13: /* ResourceTag */
+
+ UtAttachNamepathToOwner (Op, InitializerOp);
+ break;
+
+ default:
+
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_LIST, InitializerOp, NULL);
+ break;
+ }
+
+ InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+ }
+
+ Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
+ OptionIndex + StringLength;
return (Rnode);
}
@@ -1240,11 +2475,11 @@ RsDoInterruptDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
- ASL_RESOURCE_DESC *Rover = NULL;
+ AML_RESOURCE *Descriptor;
+ AML_RESOURCE *Rover = NULL;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
- UINT32 StringLength = 0;
+ UINT16 StringLength = 0;
UINT32 OptionIndex = 0;
UINT32 i;
BOOLEAN HasResSourceIndex = FALSE;
@@ -1275,51 +2510,52 @@ RsDoInterruptDescriptor (
}
InitializerOp = Op->Asl.Child;
- Rnode = RsAllocateResourceNode (sizeof (ASL_EXTENDED_XRUPT_DESC) +
- OptionIndex + StringLength);
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_EXTENDED_IRQ) +
+ 1 + OptionIndex + StringLength);
+
Descriptor = Rnode->Buffer;
- Descriptor->Exx.DescriptorType = ACPI_RDESC_TYPE_EXTENDED_XRUPT;
+ Descriptor->ExtendedIrq.DescriptorType = ACPI_RESOURCE_NAME_EXTENDED_IRQ;
/*
* Initial descriptor length -- may be enlarged if there are
* optional fields present
*/
- Descriptor->Exx.Length = 2; /* Flags and table length byte */
- Descriptor->Exx.TableLength = 0;
+ Descriptor->ExtendedIrq.ResourceLength = 2; /* Flags and table length byte */
+ Descriptor->ExtendedIrq.InterruptCount = 0;
- Rover = ACPI_CAST_PTR (ASL_RESOURCE_DESC, (&(Descriptor->Exx.InterruptNumber[0])));
+ Rover = ACPI_CAST_PTR (AML_RESOURCE,
+ (&(Descriptor->ExtendedIrq.Interrupts[0])));
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
for (i = 0; InitializerOp; i++)
{
switch (i)
{
- case 0: /* Resource Type (Default: consumer (1) */
+ case 0: /* Resource Usage (Default: consumer (1) */
- RsSetFlagBits (&Descriptor->Exx.Flags, InitializerOp, 0, 1);
+ RsSetFlagBits (&Descriptor->ExtendedIrq.Flags, InitializerOp, 0, 1);
break;
case 1: /* Interrupt Type (or Mode - edge/level) */
- RsSetFlagBits (&Descriptor->Exx.Flags, InitializerOp, 1, 0);
+ RsSetFlagBits (&Descriptor->ExtendedIrq.Flags, InitializerOp, 1, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_INTERRUPTTYPE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Exx.Flags), 0);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtendedIrq.Flags), 1);
break;
case 2: /* Interrupt Level (or Polarity - Active high/low) */
- RsSetFlagBits (&Descriptor->Exx.Flags, InitializerOp, 2, 0);
+ RsSetFlagBits (&Descriptor->ExtendedIrq.Flags, InitializerOp, 2, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_INTERRUPTLEVEL,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Exx.Flags), 2);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtendedIrq.Flags), 2);
break;
case 3: /* Share Type - Default: exclusive (0) */
- RsSetFlagBits (&Descriptor->Exx.Flags, InitializerOp, 3, 0);
+ RsSetFlagBits (&Descriptor->ExtendedIrq.Flags, InitializerOp, 3, 0);
RsCreateBitField (InitializerOp, ASL_RESNAME_INTERRUPTSHARE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Exx.Flags), 3);
+ CurrentByteOffset + ASL_RESDESC_OFFSET (ExtendedIrq.Flags), 3);
break;
case 4: /* ResSourceIndex [Optional Field - BYTE] */
@@ -1340,7 +2576,27 @@ RsDoInterruptDescriptor (
{
ResSourceString = (UINT8 *) InitializerOp->Asl.Value.String;
}
+
+ /* ResourceSourceIndex must also be valid */
+
+ if (!HasResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_INDEX,
+ InitializerOp, NULL);
+ }
}
+
+#if 0
+ /*
+ * Not a valid ResourceSource, ResourceSourceIndex must also
+ * be invalid
+ */
+ else if (HasResSourceIndex)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESOURCE_SOURCE,
+ InitializerOp, NULL);
+ }
+#endif
break;
case 6: /* ResourceTag */
@@ -1350,48 +2606,77 @@ RsDoInterruptDescriptor (
default:
/*
- * Interrupt Numbers come through here, repeatedly.
- * Store the integer and move pointer to the next one.
+ * Interrupt Numbers come through here, repeatedly
*/
+
+ /* Maximum 255 interrupts allowed for this descriptor */
+
+ if (Descriptor->ExtendedIrq.InterruptCount == 255)
+ {
+ AslError (ASL_ERROR, ASL_MSG_EX_INTERRUPT_LIST,
+ InitializerOp, NULL);
+ return (Rnode);
+ }
+
+ /* Each interrupt number must be a 32-bit value */
+
+ if (InitializerOp->Asl.Value.Integer > ACPI_UINT32_MAX)
+ {
+ AslError (ASL_ERROR, ASL_MSG_EX_INTERRUPT_NUMBER,
+ InitializerOp, NULL);
+ }
+
+ /* Save the integer and move pointer to the next one */
+
Rover->U32Item = (UINT32) InitializerOp->Asl.Value.Integer;
- Rover = ACPI_PTR_ADD (ASL_RESOURCE_DESC, &(Rover->U32Item), 4);
+ Rover = ACPI_PTR_ADD (AML_RESOURCE, &(Rover->U32Item), 4);
+ Descriptor->ExtendedIrq.InterruptCount++;
+ Descriptor->ExtendedIrq.ResourceLength += 4;
- Descriptor->Exx.TableLength++;
- Descriptor->Exx.Length += 4;
+ /* Case 7: First interrupt number in list */
- if (i == 7) /* case 7: First interrupt number */
+ if (i == 7)
{
+ /* Check now for duplicates in list */
+
+ RsCheckListForDuplicates (InitializerOp);
+
+ /* Create a named field at the start of the list */
+
RsCreateByteField (InitializerOp, ASL_RESNAME_INTERRUPT,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Exx.InterruptNumber[0]));
+ CurrentByteOffset +
+ ASL_RESDESC_OFFSET (ExtendedIrq.Interrupts[0]));
}
}
InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
}
- /*
- * Add optional ResSourceIndex if present
- */
+
+ /* Add optional ResSourceIndex if present */
+
if (HasResSourceIndex)
{
Rover->U8Item = ResSourceIndex;
- Rover = ACPI_PTR_ADD (ASL_RESOURCE_DESC, &(Rover->U8Item), 1);
- Descriptor->Exx.Length += 1;
+ Rover = ACPI_PTR_ADD (AML_RESOURCE, &(Rover->U8Item), 1);
+ Descriptor->ExtendedIrq.ResourceLength += 1;
}
- /*
- * Add optional ResSource string if present
- */
+ /* Add optional ResSource string if present */
+
if (StringLength && ResSourceString)
{
strcpy ((char *) Rover, (char *) ResSourceString);
- Rover = ACPI_PTR_ADD (ASL_RESOURCE_DESC, &(Rover->U8Item), StringLength);
- Descriptor->Exx.Length = (UINT16) (Descriptor->Exx.Length + StringLength);
+ Rover = ACPI_PTR_ADD (
+ AML_RESOURCE, &(Rover->U8Item), StringLength);
+
+ Descriptor->ExtendedIrq.ResourceLength = (UINT16)
+ (Descriptor->ExtendedIrq.ResourceLength + StringLength);
}
- Rnode->BufferLength = (ASL_RESDESC_OFFSET (Exx.InterruptNumber[0]) -
- ASL_RESDESC_OFFSET (Exx.DescriptorType))
+ Rnode->BufferLength = (ASL_RESDESC_OFFSET (ExtendedIrq.Interrupts[0]) -
+ ASL_RESDESC_OFFSET (ExtendedIrq.DescriptorType))
+ OptionIndex + StringLength;
return (Rnode);
}
@@ -1416,9 +2701,10 @@ RsDoVendorLargeDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
+ UINT8 *VendorData;
UINT32 i;
@@ -1434,18 +2720,21 @@ RsDoVendorLargeDescriptor (
InitializerOp = Op->Asl.Child;
InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
- Rnode = RsAllocateResourceNode (sizeof (ASL_LARGE_VENDOR_DESC) + (i - 1));
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_VENDOR_LARGE) + i);
Descriptor = Rnode->Buffer;
- Descriptor->Lgv.DescriptorType = ACPI_RDESC_TYPE_LARGE_VENDOR;
- Descriptor->Lgv.Length = (UINT16) i;
+ Descriptor->VendorLarge.DescriptorType = ACPI_RESOURCE_NAME_VENDOR_LARGE;
+ Descriptor->VendorLarge.ResourceLength = (UINT16) i;
+
+ /* Point to end-of-descriptor for vendor data */
+
+ VendorData = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_LARGE_HEADER);
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
for (i = 0; InitializerOp; i++)
{
- Descriptor->Lgv.VendorDefined[i] = (UINT8) InitializerOp->Asl.Value.Integer;
+ VendorData[i] = (UINT8) InitializerOp->Asl.Value.Integer;
InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
}
@@ -1473,54 +2762,59 @@ RsDoGeneralRegisterDescriptor (
ACPI_PARSE_OBJECT *Op,
UINT32 CurrentByteOffset)
{
- ASL_RESOURCE_DESC *Descriptor;
+ AML_RESOURCE *Descriptor;
ACPI_PARSE_OBJECT *InitializerOp;
ASL_RESOURCE_NODE *Rnode;
UINT32 i;
InitializerOp = Op->Asl.Child;
- Rnode = RsAllocateResourceNode (sizeof (ASL_GENERAL_REGISTER_DESC));
+ Rnode = RsAllocateResourceNode (sizeof (AML_RESOURCE_GENERIC_REGISTER));
Descriptor = Rnode->Buffer;
- Descriptor->Grg.DescriptorType = ACPI_RDESC_TYPE_GENERAL_REGISTER;
- Descriptor->Grg.Length = 12;
+ Descriptor->GenericReg.DescriptorType = ACPI_RESOURCE_NAME_GENERIC_REGISTER;
+ Descriptor->GenericReg.ResourceLength = 12;
+
+ /* Process all child initialization nodes */
- /*
- * Process all child initialization nodes
- */
for (i = 0; InitializerOp; i++)
{
switch (i)
{
case 0: /* Address space */
- Descriptor->Grg.AddressSpaceId = (UINT8) InitializerOp->Asl.Value.Integer;
+ Descriptor->GenericReg.AddressSpaceId = (UINT8) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_ADDRESSSPACE,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Grg.AddressSpaceId));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.AddressSpaceId));
break;
case 1: /* Register Bit Width */
- Descriptor->Grg.BitWidth = (UINT8) InitializerOp->Asl.Value.Integer;
+ Descriptor->GenericReg.BitWidth = (UINT8) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_REGISTERBITWIDTH,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Grg.BitWidth));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.BitWidth));
break;
case 2: /* Register Bit Offset */
- Descriptor->Grg.BitOffset = (UINT8) InitializerOp->Asl.Value.Integer;
+ Descriptor->GenericReg.BitOffset = (UINT8) InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_REGISTERBITOFFSET,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Grg.BitOffset));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.BitOffset));
break;
case 3: /* Register Address */
- Descriptor->Grg.Address = InitializerOp->Asl.Value.Integer;
+ Descriptor->GenericReg.Address = InitializerOp->Asl.Value.Integer;
RsCreateByteField (InitializerOp, ASL_RESNAME_ADDRESS,
- CurrentByteOffset + ASL_RESDESC_OFFSET (Grg.Address));
+ CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.Address));
break;
+ case 4: /* Access Size (ACPI 3.0) */
+
+ Descriptor->GenericReg.AccessSize = (UINT8) InitializerOp->Asl.Value.Integer;
+ RsCreateByteField (InitializerOp, ASL_RESNAME_ACCESSSIZE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.AccessSize));
+ break;
default:
diff --git a/sys/contrib/dev/acpica/compiler/aslstubs.c b/sys/contrib/dev/acpica/compiler/aslstubs.c
index c1724ae..fa2b63f 100644
--- a/sys/contrib/dev/acpica/compiler/aslstubs.c
+++ b/sys/contrib/dev/acpica/compiler/aslstubs.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: aslstubs - Stubs used to link to Aml interpreter
- * $Revision: 13 $
+ * $Revision: 1.14 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,9 +116,9 @@
*****************************************************************************/
#include <stdio.h>
-#include "aslcompiler.h"
-#include "acdispat.h"
-#include "actables.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
+#include <contrib/dev/acpica/acdispat.h>
+#include <contrib/dev/acpica/actables.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslstubs")
diff --git a/sys/contrib/dev/acpica/compiler/asltransform.c b/sys/contrib/dev/acpica/compiler/asltransform.c
index f05f2f7..9ff4925 100644
--- a/sys/contrib/dev/acpica/compiler/asltransform.c
+++ b/sys/contrib/dev/acpica/compiler/asltransform.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: asltransform - Parse tree transforms
- * $Revision: 25 $
+ * $Revision: 1.35 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,66 +116,103 @@
*****************************************************************************/
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("asltransform")
+/* Local prototypes */
+
+static void
+TrTransformSubtree (
+ ACPI_PARSE_OBJECT *Op);
+
+static char *
+TrAmlGetNextTempName (
+ ACPI_PARSE_OBJECT *Op,
+ UINT8 *TempCount);
+
+static void
+TrAmlInitLineNumbers (
+ ACPI_PARSE_OBJECT *Op,
+ ACPI_PARSE_OBJECT *Neighbor);
+
+static void
+TrAmlInitNode (
+ ACPI_PARSE_OBJECT *Op,
+ UINT16 ParseOpcode);
+
+static void
+TrAmlSetSubtreeParent (
+ ACPI_PARSE_OBJECT *Op,
+ ACPI_PARSE_OBJECT *Parent);
+
+static void
+TrAmlInsertPeer (
+ ACPI_PARSE_OBJECT *Op,
+ ACPI_PARSE_OBJECT *NewPeer);
+
+static void
+TrDoDefinitionBlock (
+ ACPI_PARSE_OBJECT *Op);
+
+static void
+TrDoSwitch (
+ ACPI_PARSE_OBJECT *StartNode);
+
/*******************************************************************************
*
* FUNCTION: TrAmlGetNextTempName
*
- * PARAMETERS: NamePath - Where a pointer to the temp name is returned
+ * PARAMETERS: Op - Current parse op
+ * TempCount - Current temporary counter. Was originally
+ * per-module; Currently per method, could be
+ * expanded to per-scope.
*
- * RETURN: A pointer to the second character of the name
+ * RETURN: A pointer to name (allocated here).
*
* DESCRIPTION: Generate an ACPI name of the form _T_x. These names are
- * reserved for use by the ASL compiler.
+ * reserved for use by the ASL compiler. (_T_0 through _T_Z)
*
******************************************************************************/
-char *
+static char *
TrAmlGetNextTempName (
- char **NamePath)
+ ACPI_PARSE_OBJECT *Op,
+ UINT8 *TempCount)
{
char *TempName;
- if (Gbl_TempCount > (9+26+26))
+ if (*TempCount >= (10+26)) /* 0-35 valid: 0-9 and A-Z for TempName[3] */
{
/* Too many temps */
- /* TBD: issue eror message */
- *NamePath = "ERROR";
- return ("Error");
+
+ AslError (ASL_ERROR, ASL_MSG_TOO_MANY_TEMPS, Op, NULL);
+ return (NULL);
}
- TempName = UtLocalCalloc (6);
+ TempName = UtLocalCalloc (5);
- if (Gbl_TempCount < 9)
- {
- TempName[4] = (char) (Gbl_TempCount + 0x30);
- }
- else if (Gbl_TempCount < (9 + 26))
+ if (*TempCount < 10) /* 0-9 */
{
- TempName[4] = (char) (Gbl_TempCount + 0x41);
+ TempName[3] = (char) (*TempCount + '0');
}
- else
+ else /* 10-35: A-Z */
{
- TempName[4] = (char) (Gbl_TempCount + 0x61);
+ TempName[3] = (char) (*TempCount + ('A' - 10));
}
- Gbl_TempCount++;
+ (*TempCount)++;
- /* First four characters are always "\_T_" */
+ /* First three characters are always "_T_" */
- TempName[0] = '\\';
- TempName[1] = '_';
- TempName[2] = 'T';
- TempName[3] = '_';
+ TempName[0] = '_';
+ TempName[1] = 'T';
+ TempName[2] = '_';
- *NamePath = TempName;
- return (&TempName[1]);
+ return (TempName);
}
@@ -183,7 +220,7 @@ TrAmlGetNextTempName (
*
* FUNCTION: TrAmlInitLineNumbers
*
- * PARAMETERS: Op - Op to be initialized
+ * PARAMETERS: Op - Op to be initialized
* Neighbor - Op used for initialization values
*
* RETURN: None
@@ -192,7 +229,7 @@ TrAmlGetNextTempName (
*
******************************************************************************/
-void
+static void
TrAmlInitLineNumbers (
ACPI_PARSE_OBJECT *Op,
ACPI_PARSE_OBJECT *Neighbor)
@@ -210,7 +247,7 @@ TrAmlInitLineNumbers (
*
* FUNCTION: TrAmlInitNode
*
- * PARAMETERS: Op - Op to be initialized
+ * PARAMETERS: Op - Op to be initialized
* ParseOpcode - Opcode for this node
*
* RETURN: None
@@ -219,7 +256,7 @@ TrAmlInitLineNumbers (
*
******************************************************************************/
-void
+static void
TrAmlInitNode (
ACPI_PARSE_OBJECT *Op,
UINT16 ParseOpcode)
@@ -234,7 +271,7 @@ TrAmlInitNode (
*
* FUNCTION: TrAmlSetSubtreeParent
*
- * PARAMETERS: Op - First node in a list of peer nodes
+ * PARAMETERS: Op - First node in a list of peer nodes
* Parent - Parent of the subtree
*
* RETURN: None
@@ -243,7 +280,7 @@ TrAmlInitNode (
*
******************************************************************************/
-void
+static void
TrAmlSetSubtreeParent (
ACPI_PARSE_OBJECT *Op,
ACPI_PARSE_OBJECT *Parent)
@@ -264,7 +301,7 @@ TrAmlSetSubtreeParent (
*
* FUNCTION: TrAmlInsertPeer
*
- * PARAMETERS: Op - First node in a list of peer nodes
+ * PARAMETERS: Op - First node in a list of peer nodes
* NewPeer - Peer node to insert
*
* RETURN: None
@@ -273,7 +310,7 @@ TrAmlSetSubtreeParent (
*
******************************************************************************/
-void
+static void
TrAmlInsertPeer (
ACPI_PARSE_OBJECT *Op,
ACPI_PARSE_OBJECT *NewPeer)
@@ -323,7 +360,7 @@ TrAmlTransformWalk (
*
******************************************************************************/
-void
+static void
TrTransformSubtree (
ACPI_PARSE_OBJECT *Op)
{
@@ -343,6 +380,15 @@ TrTransformSubtree (
TrDoSwitch (Op);
break;
+ case PARSEOP_METHOD:
+
+ /*
+ * TBD: Zero the tempname (_T_x) count. Probably shouldn't be a global,
+ * however
+ */
+ Gbl_TempCount = 0;
+ break;
+
default:
/* Nothing to do here for other opcodes */
break;
@@ -364,7 +410,7 @@ TrTransformSubtree (
*
******************************************************************************/
-void
+static void
TrDoDefinitionBlock (
ACPI_PARSE_OBJECT *Op)
{
@@ -376,6 +422,18 @@ TrDoDefinitionBlock (
for (i = 0; i < 5; i++)
{
Next = Next->Asl.Next;
+ if (i == 0)
+ {
+ /*
+ * This is the table signature. Only the DSDT can be assumed
+ * to be at the root of the namespace; Therefore, namepath
+ * optimization can only be performed on the DSDT.
+ */
+ if (ACPI_STRNCMP (Next->Asl.Value.String, "DSDT", 4))
+ {
+ Gbl_ReferenceOptimizationFlag = FALSE;
+ }
+ }
}
Gbl_FirstLevelInsertionNode = Next;
@@ -396,7 +454,7 @@ TrDoDefinitionBlock (
*
******************************************************************************/
-void
+static void
TrDoSwitch (
ACPI_PARSE_OBJECT *StartNode)
{
@@ -411,19 +469,43 @@ TrDoSwitch (
ACPI_PARSE_OBJECT *NewOp;
ACPI_PARSE_OBJECT *NewOp2;
char *PredicateValueName;
- char *PredicateValuePath;
+ UINT16 Index;
+ UINT32 Btype;
+ /* Start node is the Switch() node */
+
CurrentParentNode = StartNode;
- PredicateValueName = TrAmlGetNextTempName (&PredicateValuePath);
- /* First child is the predicate */
+ /* Create a new temp name of the form _T_x */
+
+ PredicateValueName = TrAmlGetNextTempName (StartNode, &Gbl_TempCount);
+ if (!PredicateValueName)
+ {
+ return;
+ }
+
+ /* First child is the Switch() predicate */
Next = StartNode->Asl.Child;
- Peer = Next->Asl.Next;
+
+ /*
+ * Examine the return type of the Switch Value -
+ * must be Integer/Buffer/String
+ */
+ Index = (UINT16) (Next->Asl.ParseOpcode - ASL_PARSE_OPCODE_BASE);
+ Btype = AslKeywordMapping[Index].AcpiBtype;
+ if ((Btype != ACPI_BTYPE_INTEGER) &&
+ (Btype != ACPI_BTYPE_STRING) &&
+ (Btype != ACPI_BTYPE_BUFFER))
+ {
+ AslError (ASL_WARNING, ASL_MSG_SWITCH_TYPE, Next, NULL);
+ Btype = ACPI_BTYPE_INTEGER;
+ }
/* CASE statements start at next child */
+ Peer = Next->Asl.Next;
while (Peer)
{
Next = Peer;
@@ -435,6 +517,10 @@ TrDoSwitch (
{
/* Add an ELSE to complete the previous CASE */
+ if (!Conditional)
+ {
+ return;
+ }
NewOp = TrCreateLeafNode (PARSEOP_ELSE);
NewOp->Asl.Parent = Conditional->Asl.Parent;
TrAmlInitLineNumbers (NewOp, NewOp->Asl.Parent);
@@ -451,14 +537,14 @@ TrDoSwitch (
Conditional->Asl.Child->Asl.Next = NULL;
Predicate = CaseOp->Asl.Child;
- if (Predicate->Asl.ParseOpcode == PARSEOP_PACKAGE)
+ if ((Predicate->Asl.ParseOpcode == PARSEOP_PACKAGE) ||
+ (Predicate->Asl.ParseOpcode == PARSEOP_VAR_PACKAGE))
{
- AcpiOsPrintf ("Package\n");
-
/*
* Convert the package declaration to this form:
*
- * If (LNotEqual (Match (Package(){4}, MEQ, _Txx, MTR, 0, 0), Ones))
+ * If (LNotEqual (Match (Package(<size>){<data>},
+ * MEQ, _T_x, MTR, Zero, Zero), Ones))
*/
NewOp2 = TrCreateLeafNode (PARSEOP_MATCHTYPE_MEQ);
Predicate->Asl.Next = NewOp2;
@@ -466,7 +552,7 @@ TrDoSwitch (
NewOp = NewOp2;
NewOp2 = TrCreateValuedLeafNode (PARSEOP_NAMESTRING,
- (ACPI_INTEGER) ACPI_TO_INTEGER (PredicateValuePath));
+ (ACPI_INTEGER) ACPI_TO_INTEGER (PredicateValueName));
NewOp->Asl.Next = NewOp2;
TrAmlInitLineNumbers (NewOp2, Predicate);
@@ -514,21 +600,26 @@ TrDoSwitch (
else
{
/*
- * Change CaseOp() to: If (PredicateValue == CaseValue) {...}
+ * Integer and Buffer case.
+ *
+ * Change CaseOp() to: If (LEqual (SwitchValue, CaseValue)) {...}
+ * Note: SwitchValue is first to allow the CaseValue to be implicitly
+ * converted to the type of SwitchValue if necessary.
+ *
* CaseOp->Child is the case value
* CaseOp->Child->Peer is the beginning of the case block
*/
NewOp = TrCreateValuedLeafNode (PARSEOP_NAMESTRING,
- (ACPI_INTEGER) ACPI_TO_INTEGER (PredicateValuePath));
- Predicate->Asl.Next = NewOp;
+ (ACPI_INTEGER) ACPI_TO_INTEGER (PredicateValueName));
+ NewOp->Asl.Next = Predicate;
TrAmlInitLineNumbers (NewOp, Predicate);
NewOp2 = TrCreateLeafNode (PARSEOP_LEQUAL);
NewOp2->Asl.Parent = Conditional;
- NewOp2->Asl.Child = Predicate;
+ NewOp2->Asl.Child = NewOp;
TrAmlInitLineNumbers (NewOp2, Conditional);
- TrAmlSetSubtreeParent (Predicate, NewOp2);
+ TrAmlSetSubtreeParent (NewOp, NewOp2);
Predicate = NewOp2;
Predicate->Asl.Next = CaseBlock;
@@ -584,14 +675,13 @@ TrDoSwitch (
{
/* Unknown peer opcode */
- printf ("Unknown parse opcode for switch statement: %s (%d)\n",
+ AcpiOsPrintf ("Unknown parse opcode for switch statement: %s (%d)\n",
Next->Asl.ParseOpName, Next->Asl.ParseOpcode);
}
}
- /*
- * Add the default case at the end of the if/else construct
- */
+ /* Add the default case at the end of the if/else construct */
+
if (DefaultOp)
{
/* If no CASE statements, this is an error - see below */
@@ -600,6 +690,10 @@ TrDoSwitch (
{
/* Convert the DEFAULT node to an ELSE */
+ if (!Conditional)
+ {
+ return;
+ }
TrAmlInitNode (DefaultOp, PARSEOP_ELSE);
DefaultOp->Asl.Parent = Conditional->Asl.Parent;
@@ -615,35 +709,74 @@ TrDoSwitch (
}
/*
- * Add a NAME node for the temp integer
+ * Add a NAME node for the temp integer:
+ * Change the SWITCH node to a Name (_T_x, Type)
*/
- NewOp = TrCreateLeafNode (PARSEOP_NAME);
- NewOp->Asl.Parent = Gbl_FirstLevelInsertionNode->Asl.Parent;
+ Predicate = StartNode->Asl.Child;
+ TrAmlInitNode (StartNode, PARSEOP_NAME);
+
+ NewOp = StartNode;
+
NewOp->Asl.CompileFlags |= NODE_COMPILER_EMITTED;
- NewOp2 = TrCreateValuedLeafNode (PARSEOP_NAMESTRING,
- (ACPI_INTEGER) ACPI_TO_INTEGER (PredicateValueName));
+ NewOp2 = TrCreateValuedLeafNode (PARSEOP_NAMESEG,
+ (ACPI_INTEGER) ACPI_TO_INTEGER (PredicateValueName));
+ NewOp2->Asl.CompileFlags |= NODE_IS_NAME_DECLARATION;
NewOp->Asl.Child = NewOp2;
- NewOp2->Asl.Next = TrCreateValuedLeafNode (PARSEOP_INTEGER, (ACPI_INTEGER) 0);
- TrAmlSetSubtreeParent (NewOp2, NewOp);
+ /* Btype was already validated above */
+
+ switch (Btype)
+ {
+ case ACPI_BTYPE_INTEGER:
+ NewOp2->Asl.Next = TrCreateValuedLeafNode (PARSEOP_ZERO,
+ (ACPI_INTEGER) 0);
+ break;
- /* Insert this node at the global level of the ASL */
+ case ACPI_BTYPE_STRING:
+ NewOp2->Asl.Next = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL,
+ (ACPI_INTEGER) "");
+ break;
- TrAmlInsertPeer (Gbl_FirstLevelInsertionNode, NewOp);
- TrAmlInitLineNumbers (NewOp, Gbl_FirstLevelInsertionNode);
- TrAmlInitLineNumbers (NewOp2, Gbl_FirstLevelInsertionNode);
- TrAmlInitLineNumbers (NewOp2->Asl.Next, Gbl_FirstLevelInsertionNode);
+ case ACPI_BTYPE_BUFFER:
+ (void) TrLinkPeerNode (NewOp2, TrCreateValuedLeafNode (PARSEOP_BUFFER,
+ (ACPI_INTEGER) 0));
+ Next = NewOp2->Asl.Next;
+ (void) TrLinkChildren (Next, 1, TrCreateValuedLeafNode (PARSEOP_ZERO,
+ (ACPI_INTEGER) 1));
+ (void) TrLinkPeerNode (Next->Asl.Child,
+ TrCreateValuedLeafNode (PARSEOP_DEFAULT_ARG, (ACPI_INTEGER) 0));
+
+ TrAmlSetSubtreeParent (Next->Asl.Child, Next);
+ break;
+
+ default:
+ break;
+ }
+
+ TrAmlSetSubtreeParent (NewOp2, NewOp);
/*
- * Change the SWITCH node to a STORE (predicate value, _Txx)
+ * Create and insert a new Store() node which will be used to save the
+ * Switch() value. The store is of the form: Store (Value, _T_x)
+ * where _T_x is the temp variable.
*/
- TrAmlInitNode (StartNode, PARSEOP_STORE);
+ Next = TrCreateLeafNode (PARSEOP_STORE);
+ TrAmlInsertPeer (StartNode, Next);
+ TrAmlSetSubtreeParent (Next, StartNode->Asl.Parent);
+
+ TrAmlInitLineNumbers (Next, StartNode);
+ TrAmlInitLineNumbers (NewOp2, StartNode);
+ TrAmlInitLineNumbers (NewOp2->Asl.Next, StartNode);
+
+ /* Complete the Store subtree */
+
+ Next->Asl.Child = Predicate;
+ Predicate->Asl.Parent = Next;
- Predicate = StartNode->Asl.Child;
- NewOp = TrCreateValuedLeafNode (PARSEOP_NAMESTRING,
- (ACPI_INTEGER) ACPI_TO_INTEGER (PredicateValuePath));
- NewOp->Asl.Parent = StartNode;
+ NewOp = TrCreateValuedLeafNode (PARSEOP_NAMESEG,
+ (ACPI_INTEGER) ACPI_TO_INTEGER (PredicateValueName));
+ NewOp->Asl.Parent = Next;
Predicate->Asl.Next = NewOp;
}
diff --git a/sys/contrib/dev/acpica/compiler/asltree.c b/sys/contrib/dev/acpica/compiler/asltree.c
index 5ae7083..6092607 100644
--- a/sys/contrib/dev/acpica/compiler/asltree.c
+++ b/sys/contrib/dev/acpica/compiler/asltree.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: asltree - parse tree management
- * $Revision: 55 $
+ * $Revision: 1.60 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,12 +116,22 @@
*****************************************************************************/
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("asltree")
+/* Local prototypes */
+
+static ACPI_PARSE_OBJECT *
+TrGetNextNode (
+ void);
+
+static char *
+TrGetNodeFlagName (
+ UINT32 Flags);
+
/*******************************************************************************
*
@@ -137,13 +147,15 @@
*
******************************************************************************/
-ACPI_PARSE_OBJECT *
-TrGetNextNode (void)
+static ACPI_PARSE_OBJECT *
+TrGetNextNode (
+ void)
{
if (Gbl_NodeCacheNext >= Gbl_NodeCacheLast)
{
- Gbl_NodeCacheNext = UtLocalCalloc (sizeof (ACPI_PARSE_OBJECT) * ASL_NODE_CACHE_SIZE);
+ Gbl_NodeCacheNext = UtLocalCalloc (sizeof (ACPI_PARSE_OBJECT) *
+ ASL_NODE_CACHE_SIZE);
Gbl_NodeCacheLast = Gbl_NodeCacheNext + ASL_NODE_CACHE_SIZE;
}
@@ -298,13 +310,13 @@ TrUpdateNode (
*
* PARAMETERS: Flags - Flags word to be decoded
*
- * RETURN: Name string
+ * RETURN: Name string. Always returns a valid string pointer.
*
* DESCRIPTION: Decode a flags word
*
******************************************************************************/
-char *
+static char *
TrGetNodeFlagName (
UINT32 Flags)
{
@@ -372,10 +384,10 @@ TrGetNodeFlagName (
*
* FUNCTION: TrSetNodeFlags
*
- * PARAMETERS: Op - An existing parse node
+ * PARAMETERS: Op - An existing parse node
* Flags - New flags word
*
- * RETURN: The updated node
+ * RETURN: The updated parser op
*
* DESCRIPTION: Set bits in the node flags word. Will not clear bits, only set
*
@@ -388,7 +400,8 @@ TrSetNodeFlags (
{
DbgPrint (ASL_PARSE_OUTPUT,
- "\nSetNodeFlags: Op %p, %8.8X %s\n\n", Op, Flags, TrGetNodeFlagName (Flags));
+ "\nSetNodeFlags: Op %p, %8.8X %s\n\n", Op, Flags,
+ TrGetNodeFlagName (Flags));
if (!Op)
{
@@ -716,7 +729,8 @@ TrLinkChildren (
if ((Child == PrevChild) && (Child != NULL))
{
- AslError (ASL_WARNING, ASL_MSG_COMPILER_INTERNAL, Child, "Child node list invalid");
+ AslError (ASL_WARNING, ASL_MSG_COMPILER_INTERNAL, Child,
+ "Child node list invalid");
return Op;
}
@@ -818,8 +832,10 @@ TrLinkPeerNode (
if (Op1 == Op2)
{
DbgPrint (ASL_DEBUG_OUTPUT,
- "\n\n************* Internal error, linking node to itself %p\n\n\n", Op1);
- AslError (ASL_WARNING, ASL_MSG_COMPILER_INTERNAL, Op1, "Linking node to itself");
+ "\n\n************* Internal error, linking node to itself %p\n\n\n",
+ Op1);
+ AslError (ASL_WARNING, ASL_MSG_COMPILER_INTERNAL, Op1,
+ "Linking node to itself");
return Op1;
}
@@ -995,9 +1011,8 @@ TrWalkParseTree (
{
if (!NodePreviouslyVisited)
{
- /*
- * Let the callback process the node.
- */
+ /* Let the callback process the node. */
+
Status = DescendingCallback (Op, Level, Context);
if (ACPI_SUCCESS (Status))
{
@@ -1056,10 +1071,8 @@ TrWalkParseTree (
if ((!Op->Asl.Child) ||
(NodePreviouslyVisited))
{
- /*
- * Let the callback process the node.
- *
- */
+ /* Let the callback process the node. */
+
Status = AscendingCallback (Op, Level, Context);
if (ACPI_FAILURE (Status))
{
@@ -1118,9 +1131,8 @@ TrWalkParseTree (
}
else
{
- /*
- * Let the callback process the node.
- */
+ /* Let the callback process the node. */
+
Status = DescendingCallback (Op, Level, Context);
if (ACPI_SUCCESS (Status))
{
diff --git a/sys/contrib/dev/acpica/compiler/asltypes.h b/sys/contrib/dev/acpica/compiler/asltypes.h
index ae7876c..e681376 100644
--- a/sys/contrib/dev/acpica/compiler/asltypes.h
+++ b/sys/contrib/dev/acpica/compiler/asltypes.h
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: asltypes.h - compiler data types and struct definitions
- * $Revision: 65 $
+ * $Revision: 1.78 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -120,9 +120,6 @@
#define __ASLTYPES_H
-#include <time.h>
-
-
/*******************************************************************************
*
* Structure definitions
@@ -150,6 +147,7 @@
#define NODE_WAS_ONES_OP 0x00008000
#define NODE_IS_NAME_DECLARATION 0x00010000
#define NODE_COMPILER_EMITTED 0x00020000
+#define NODE_IS_DUPLICATE 0x00040000
/* Keeps information about individual control methods */
@@ -290,8 +288,8 @@ ACPI_STATUS (*ASL_WALK_CALLBACK) (
typedef struct asl_event_info
{
- time_t StartTime;
- time_t EndTime;
+ UINT64 StartTime;
+ UINT64 EndTime;
char *EventName;
BOOLEAN Valid;
@@ -307,188 +305,216 @@ typedef struct asl_event_info
typedef enum
{
- ASL_MSG_NULL = 0,
- ASL_MSG_MEMORY_ALLOCATION,
- ASL_MSG_INPUT_FILE_OPEN,
- ASL_MSG_OUTPUT_FILENAME,
- ASL_MSG_OUTPUT_FILE_OPEN,
- ASL_MSG_LISTING_FILENAME,
- ASL_MSG_LISTING_FILE_OPEN,
- ASL_MSG_DEBUG_FILENAME,
+ ASL_MSG_ALPHANUMERIC_STRING,
+ ASL_MSG_AML_NOT_IMPLEMENTED,
+ ASL_MSG_ARG_COUNT_HI,
+ ASL_MSG_ARG_COUNT_LO,
+ ASL_MSG_ARG_INIT,
+ ASL_MSG_BACKWARDS_OFFSET,
+ ASL_MSG_BITS_TO_BYTES,
+ ASL_MSG_BUFFER_LENGTH,
+ ASL_MSG_BYTES_TO_BITS,
+ ASL_MSG_CLOSE,
+ ASL_MSG_COMPILER_INTERNAL,
+ ASL_MSG_CONSTANT_EVALUATION,
+ ASL_MSG_CONSTANT_FOLDED,
+ ASL_MSG_CORE_EXCEPTION,
ASL_MSG_DEBUG_FILE_OPEN,
- ASL_MSG_INCLUDE_FILE_OPEN,
+ ASL_MSG_DEBUG_FILENAME,
+ ASL_MSG_DEPENDENT_NESTING,
+ ASL_MSG_DMA_CHANNEL,
+ ASL_MSG_DMA_LIST,
+ ASL_MSG_DUPLICATE_CASE,
+ ASL_MSG_DUPLICATE_ITEM,
+ ASL_MSG_EARLY_EOF,
ASL_MSG_ENCODING_LENGTH,
- ASL_MSG_INVALID_PRIORITY,
+ ASL_MSG_EX_INTERRUPT_LIST,
+ ASL_MSG_EX_INTERRUPT_NUMBER,
+ ASL_MSG_FIELD_ACCESS_WIDTH,
+ ASL_MSG_FIELD_UNIT_ACCESS_WIDTH,
+ ASL_MSG_FIELD_UNIT_OFFSET,
+ ASL_MSG_INCLUDE_FILE_OPEN,
+ ASL_MSG_INPUT_FILE_OPEN,
+ ASL_MSG_INTEGER_LENGTH,
+ ASL_MSG_INTEGER_OPTIMIZATION,
+ ASL_MSG_INTERRUPT_LIST,
+ ASL_MSG_INTERRUPT_NUMBER,
+ ASL_MSG_INVALID_CONSTANT_OP,
+ ASL_MSG_INVALID_EISAID,
+ ASL_MSG_INVALID_ESCAPE,
+ ASL_MSG_INVALID_OPERAND,
ASL_MSG_INVALID_PERFORMANCE,
+ ASL_MSG_INVALID_PRIORITY,
+ ASL_MSG_INVALID_STRING,
+ ASL_MSG_INVALID_TARGET,
+ ASL_MSG_INVALID_TIME,
+ ASL_MSG_INVALID_TYPE,
+ ASL_MSG_INVALID_UUID,
+ ASL_MSG_LIST_LENGTH,
+ ASL_MSG_LISTING_FILE_OPEN,
+ ASL_MSG_LISTING_FILENAME,
ASL_MSG_LOCAL_INIT,
- ASL_MSG_ARG_INIT,
- ASL_MSG_UNSUPPORTED,
- ASL_MSG_RESERVED_WORD,
- ASL_MSG_BUFFER_LENGTH,
- ASL_MSG_PACKAGE_LENGTH,
- ASL_MSG_RETURN_TYPES,
- ASL_MSG_NOT_FOUND,
- ASL_MSG_NOT_REACHABLE,
- ASL_MSG_NOT_EXIST,
+ ASL_MSG_LONG_LINE,
+ ASL_MSG_MEMORY_ALLOCATION,
+ ASL_MSG_MISSING_ENDDEPENDENT,
+ ASL_MSG_MISSING_STARTDEPENDENT,
+ ASL_MSG_MULTIPLE_TYPES,
+ ASL_MSG_NAME_EXISTS,
+ ASL_MSG_NAME_OPTIMIZATION,
ASL_MSG_NESTED_COMMENT,
- ASL_MSG_RESERVED_ARG_COUNT_HI,
- ASL_MSG_RESERVED_ARG_COUNT_LO,
- ASL_MSG_RESERVED_RETURN_VALUE,
- ASL_MSG_ARG_COUNT_HI,
- ASL_MSG_ARG_COUNT_LO,
+ ASL_MSG_NO_CASES,
ASL_MSG_NO_RETVAL,
- ASL_MSG_SOME_NO_RETVAL,
- ASL_MSG_COMPILER_INTERNAL,
- ASL_MSG_BACKWARDS_OFFSET,
- ASL_MSG_UNKNOWN_RESERVED_NAME,
- ASL_MSG_NAME_EXISTS,
- ASL_MSG_INVALID_TYPE,
- ASL_MSG_MULTIPLE_TYPES,
- ASL_MSG_SYNTAX,
+ ASL_MSG_NO_WHILE,
+ ASL_MSG_NON_ASCII,
+ ASL_MSG_NOT_EXIST,
+ ASL_MSG_NOT_FOUND,
ASL_MSG_NOT_METHOD,
- ASL_MSG_LONG_LINE,
- ASL_MSG_RECURSION,
ASL_MSG_NOT_PARAMETER,
+ ASL_MSG_NOT_REACHABLE,
ASL_MSG_OPEN,
+ ASL_MSG_OUTPUT_FILE_OPEN,
+ ASL_MSG_OUTPUT_FILENAME,
+ ASL_MSG_PACKAGE_LENGTH,
ASL_MSG_READ,
- ASL_MSG_WRITE,
- ASL_MSG_SEEK,
- ASL_MSG_CLOSE,
- ASL_MSG_FIELD_ACCESS_WIDTH,
- ASL_MSG_REGION_BYTE_ACCESS,
+ ASL_MSG_RECURSION,
ASL_MSG_REGION_BUFFER_ACCESS,
- ASL_MSG_FIELD_UNIT_OFFSET,
- ASL_MSG_FIELD_UNIT_ACCESS_WIDTH,
- ASL_MSG_RESOURCE_FIELD,
- ASL_MSG_BYTES_TO_BITS,
- ASL_MSG_BITS_TO_BYTES,
- ASL_MSG_AML_NOT_IMPLEMENTED,
- ASL_MSG_NO_WHILE,
- ASL_MSG_INVALID_ESCAPE,
- ASL_MSG_INVALID_STRING,
- ASL_MSG_TABLE_SIGNATURE,
- ASL_MSG_RESOURCE_LIST,
- ASL_MSG_INVALID_TARGET,
- ASL_MSG_INVALID_CONSTANT_OP,
- ASL_MSG_CONSTANT_EVALUATION,
- ASL_MSG_CONSTANT_FOLDED,
- ASL_MSG_INVALID_EISAID,
- ASL_MSG_RESERVED_OPERAND_TYPE,
+ ASL_MSG_REGION_BYTE_ACCESS,
+ ASL_MSG_RESERVED_ARG_COUNT_HI,
+ ASL_MSG_RESERVED_ARG_COUNT_LO,
ASL_MSG_RESERVED_METHOD,
- ASL_MSG_ALPHANUMERIC_STRING,
+ ASL_MSG_RESERVED_OPERAND_TYPE,
+ ASL_MSG_RESERVED_RETURN_VALUE,
ASL_MSG_RESERVED_USE,
- ASL_MSG_INVALID_OPERAND,
- ASL_MSG_MISSING_ENDDEPENDENT,
- ASL_MSG_MISSING_STARTDEPENDENT,
- ASL_MSG_DEPENDENT_NESTING,
- ASL_MSG_NAME_OPTIMIZATION,
- ASL_MSG_SINGLE_NAME_OPTIMIZATION,
- ASL_MSG_INTEGER_OPTIMIZATION,
+ ASL_MSG_RESERVED_WORD,
+ ASL_MSG_RESOURCE_FIELD,
+ ASL_MSG_RESOURCE_INDEX,
+ ASL_MSG_RESOURCE_LIST,
+ ASL_MSG_RESOURCE_SOURCE,
+ ASL_MSG_RETURN_TYPES,
+ ASL_MSG_SCOPE_FWD_REF,
ASL_MSG_SCOPE_TYPE,
- ASL_MSG_CORE_EXCEPTION,
+ ASL_MSG_SEEK,
+ ASL_MSG_SINGLE_NAME_OPTIMIZATION,
+ ASL_MSG_SOME_NO_RETVAL,
+ ASL_MSG_STRING_LENGTH,
+ ASL_MSG_SWITCH_TYPE,
+ ASL_MSG_SYNC_LEVEL,
+ ASL_MSG_SYNTAX,
+ ASL_MSG_TABLE_SIGNATURE,
+ ASL_MSG_TOO_MANY_TEMPS,
+ ASL_MSG_UNKNOWN_RESERVED_NAME,
ASL_MSG_UNREACHABLE_CODE,
- ASL_MSG_EARLY_EOF,
- ASL_MSG_SCOPE_FWD_REF,
- ASL_MSG_NON_ASCII,
- ASL_MSG_INVALID_TIME,
- ASL_MSG_DUPLICATE_CASE,
- ASL_MSG_NO_CASES,
- ASL_MSG_INVALID_UUID
+ ASL_MSG_UNSUPPORTED,
+ ASL_MSG_VENDOR_LIST,
+ ASL_MSG_WRITE
} ASL_MESSAGE_IDS;
#ifdef ASL_EXCEPTIONS
char *AslMessages [] = {
-/* ASL_MSG_NULL */ NULL,
-/* ASL_MSG_MEMORY_ALLOCATION, */ "Memory allocation failure",
-/* ASL_MSG_INPUT_FILE_OPEN, */ "Could not open input file",
-/* ASL_MSG_OUTPUT_FILENAME, */ "Could not create output filename",
-/* ASL_MSG_OUTPUT_FILE_OPEN, */ "Could not open output AML file",
-/* ASL_MSG_LISTING_FILENAME, */ "Could not create listing filename",
-/* ASL_MSG_LISTING_FILE_OPEN, */ "Could not open listing file",
-/* ASL_MSG_DEBUG_FILENAME, */ "Could not create debug filename",
-/* ASL_MSG_DEBUG_FILE_OPEN, */ "Could not open debug file",
-/* ASL_MSG_INCLUDE_FILE_OPEN, */ "Could not open include file",
-/* ASL_MSG_ENCODING_LENGTH, */ "Package length too long to encode",
-/* ASL_MSG_INVALID_PRIORITY, */ "Invalid priority value",
-/* ASL_MSG_INVALID_PERFORMANCE, */ "Invalid performance/robustness value",
-/* ASL_MSG_LOCAL_INIT, */ "Method local variable is not initialized",
-/* ASL_MSG_ARG_INIT, */ "Method argument is not initialized",
-/* ASL_MSG_UNSUPPORTED, */ "Unsupported feature",
-/* ASL_MSG_RESERVED_WORD, */ "Use of reserved word",
-/* ASL_MSG_BUFFER_LENGTH, */ "Effective AML buffer length is zero",
-/* ASL_MSG_PACKAGE_LENGTH, */ "Effective AML package length is zero",
-/* ASL_MSG_RETURN_TYPES, */ "Not all control paths return a value",
-/* ASL_MSG_NOT_FOUND, */ "Object not found or not accessible from scope",
-/* ASL_MSG_NOT_REACHABLE, */ "Object not accessible from this scope",
-/* ASL_MSG_NOT_EXIST, */ "Object does not exist",
-/* ASL_MSG_NESTED_COMMENT, */ "Nested comment found",
-/* ASL_MSG_RESERVED_ARG_COUNT_HI, */ "Reserved method has too many arguments",
-/* ASL_MSG_RESERVED_ARG_COUNT_LO, */ "Reserved method has too few arguments",
-/* ASL_MSG_RESERVED_RETURN_VALUE, */ "Reserved method must return a value",
-/* ASL_MSG_ARG_COUNT_HI, */ "Too many arguments",
-/* ASL_MSG_ARG_COUNT_LO, */ "Too few arguments",
-/* ASL_MSG_NO_RETVAL, */ "Called method returns no value",
-/* ASL_MSG_SOME_NO_RETVAL, */ "Called method may not always return a value",
-/* ASL_MSG_COMPILER_INTERNAL, */ "Internal compiler error",
-/* ASL_MSG_BACKWARDS_OFFSET, */ "Invalid backwards offset",
-/* ASL_MSG_UNKNOWN_RESERVED_NAME, */ "Unknown reserved name",
-/* ASL_MSG_NAME_EXISTS, */ "Name already exists in scope",
-/* ASL_MSG_INVALID_TYPE, */ "Invalid type",
-/* ASL_MSG_MULTIPLE_TYPES, */ "Multiple types",
-/* ASL_MSG_SYNTAX, */ "",
-/* ASL_MSG_NOT_METHOD, */ "Not a control method, cannot invoke",
-/* ASL_MSG_LONG_LINE, */ "Splitting long input line",
-/* ASL_MSG_RECURSION, */ "Recursive method call",
-/* ASL_MSG_NOT_PARAMETER, */ "Not a parameter, used as local only",
-/* ASL_MSG_OPEN, */ "Could not open file",
-/* ASL_MSG_READ, */ "Could not read file",
-/* ASL_MSG_WRITE, */ "Could not write file",
-/* ASL_MSG_SEEK, */ "Could not seek file",
-/* ASL_MSG_CLOSE, */ "Could not close file",
-/* ASL_MSG_FIELD_ACCESS_WIDTH, */ "Access width is greater than region size",
-/* ASL_MSG_REGION_BYTE_ACCESS, */ "Host Operation Region requires ByteAcc access",
-/* ASL_MSG_REGION_BUFFER_ACCESS, */ "Host Operation Region requires BufferAcc access",
-/* ASL_MSG_FIELD_UNIT_OFFSET, */ "Field Unit extends beyond region limit",
-/* ASL_MSG_FIELD_UNIT_ACCESS_WIDTH, */ "Access width of Field Unit extends beyond region limit",
-/* ASL_MSG_RESOURCE_FIELD, */ "Resource field name cannot be used as a target",
-/* ASL_MSG_BYTES_TO_BITS, */ "Field offset is in bytes, but a bit offset is required",
-/* ASL_MSG_BITS_TO_BYTES, */ "Field offset is in bits, but a byte offset is required",
-/* ASL_MSG_AML_NOT_IMPLEMENTED, */ "Opcode is not implemented in compiler AML code generator",
-/* ASL_MSG_NO_WHILE, */ "No enclosing While statement",
-/* ASL_MSG_INVALID_ESCAPE, */ "Invalid or unknown escape sequence",
-/* ASL_MSG_INVALID_STRING, */ "Invalid Hex/Octal Escape - Non-ASCII or NULL",
-/* ASL_MSG_TABLE_SIGNATURE, */ "Invalid Table Signature",
-/* ASL_MSG_RESOURCE_LIST, */ "Too many resource items (internal error)",
-/* ASL_MSG_INVALID_TARGET, */ "Target operand not allowed in constant expression",
-/* ASL_MSG_INVALID_CONSTANT_OP, */ "Invalid operator in constant expression (not type 3/4/5)",
-/* ASL_MSG_CONSTANT_EVALUATION, */ "Could not evaluate constant expression",
-/* ASL_MSG_CONSTANT_FOLDED, */ "Constant expression evaluated and reduced",
-/* ASL_MSG_INVALID_EISAID, */ "EISAID string must be of the form \"UUUXXXX\" (3 uppercase, 4 hex digits)",
-/* ASL_MSG_RESERVED_OPERAND_TYPE, */ "Invalid operand type for reserved name, must be",
-/* ASL_MSG_RESERVED_METHOD, */ "Reserved name must be a control method",
-/* ASL_MSG_ALPHANUMERIC_STRING, */ "String must be entirely alphanumeric",
-/* ASL_MSG_RESERVED_USE, */ "Invalid use of reserved name",
-/* ASL_MSG_INVALID_OPERAND, */ "Invalid operand",
-/* ASL_MSG_MISSING_ENDDEPENDENT, */ "Missing EndDependentFn() macro in dependent resource list",
-/* ASL_MSG_MISSING_STARTDEPENDENT, */ "Missing StartDependentFn() macro in dependent resource list",
-/* ASL_MSG_DEPENDENT_NESTING, */ "Dependent function macros cannot be nested",\
-/* ASL_MSG_NAME_OPTIMIZATION, */ "NamePath optimized",
-/* ASL_MSG_SINGLE_NAME_OPTIMIZATION, */ "NamePath optimized to NameSeg (uses run-time search path)",
-/* ASL_MSG_INTEGER_OPTIMIZATION, */ "Integer optimized to single-byte AML opcode",
-/* ASL_MSG_SCOPE_TYPE, */ "Existing object has invalid type for Scope operator",
-/* ASL_MSG_CORE_EXCEPTION, */ "From ACPI CA Subsystem",
-/* ASL_MSG_UNREACHABLE_CODE, */ "Statement is unreachable",
+/* ASL_MSG_ALPHANUMERIC_STRING */ "String must be entirely alphanumeric",
+/* ASL_MSG_AML_NOT_IMPLEMENTED */ "Opcode is not implemented in compiler AML code generator",
+/* ASL_MSG_ARG_COUNT_HI */ "Too many arguments",
+/* ASL_MSG_ARG_COUNT_LO */ "Too few arguments",
+/* ASL_MSG_ARG_INIT */ "Method argument is not initialized",
+/* ASL_MSG_BACKWARDS_OFFSET */ "Invalid backwards offset",
+/* ASL_MSG_BITS_TO_BYTES */ "Field offset is in bits, but a byte offset is required",
+/* ASL_MSG_BUFFER_LENGTH */ "Effective AML buffer length is zero",
+/* ASL_MSG_BYTES_TO_BITS */ "Field offset is in bytes, but a bit offset is required",
+/* ASL_MSG_CLOSE */ "Could not close file",
+/* ASL_MSG_COMPILER_INTERNAL */ "Internal compiler error",
+/* ASL_MSG_CONSTANT_EVALUATION */ "Could not evaluate constant expression",
+/* ASL_MSG_CONSTANT_FOLDED */ "Constant expression evaluated and reduced",
+/* ASL_MSG_CORE_EXCEPTION */ "From ACPI CA Subsystem",
+/* ASL_MSG_DEBUG_FILE_OPEN */ "Could not open debug file",
+/* ASL_MSG_DEBUG_FILENAME */ "Could not create debug filename",
+/* ASL_MSG_DEPENDENT_NESTING */ "Dependent function macros cannot be nested",\
+/* ASL_MSG_DMA_CHANNEL */ "Invalid DMA channel (must be 0-7)",
+/* ASL_MSG_DMA_LIST */ "Too many DMA channels (8 max)",
+/* ASL_MSG_DUPLICATE_CASE */ "Case value already specified",
+/* ASL_MSG_DUPLICATE_ITEM */ "Duplicate value in list",
/* ASL_MSG_EARLY_EOF */ "Premature end-of-file reached",
-/* ASL_MSG_SCOPE_FWD_REF */ "Forward references from Scope() not allowed",
-/* ASL_MSG_NON_ASCII */ "Invalid characters found in file",
+/* ASL_MSG_ENCODING_LENGTH */ "Package length too long to encode",
+/* ASL_MSG_EX_INTERRUPT_LIST */ "Too many interrupts (255 max)",
+/* ASL_MSG_EX_INTERRUPT_NUMBER */ "Invalid interrupt number (must be 32 bits)",
+/* ASL_MSG_FIELD_ACCESS_WIDTH */ "Access width is greater than region size",
+/* ASL_MSG_FIELD_UNIT_ACCESS_WIDTH */ "Access width of Field Unit extends beyond region limit",
+/* ASL_MSG_FIELD_UNIT_OFFSET */ "Field Unit extends beyond region limit",
+/* ASL_MSG_INCLUDE_FILE_OPEN */ "Could not open include file",
+/* ASL_MSG_INPUT_FILE_OPEN */ "Could not open input file",
+/* ASL_MSG_INTEGER_LENGTH */ "64-bit integer in 32-bit table, truncating",
+/* ASL_MSG_INTEGER_OPTIMIZATION */ "Integer optimized to single-byte AML opcode",
+/* ASL_MSG_INTERRUPT_LIST */ "Too many interrupts (16 max)",
+/* ASL_MSG_INTERRUPT_NUMBER */ "Invalid interrupt number (must be 0-15)",
+/* ASL_MSG_INVALID_CONSTANT_OP */ "Invalid operator in constant expression (not type 3/4/5)",
+/* ASL_MSG_INVALID_EISAID */ "EISAID string must be of the form \"UUUXXXX\" (3 uppercase, 4 hex digits)",
+/* ASL_MSG_INVALID_ESCAPE */ "Invalid or unknown escape sequence",
+/* ASL_MSG_INVALID_OPERAND */ "Invalid operand",
+/* ASL_MSG_INVALID_PERFORMANCE */ "Invalid performance/robustness value",
+/* ASL_MSG_INVALID_PRIORITY */ "Invalid priority value",
+/* ASL_MSG_INVALID_STRING */ "Invalid Hex/Octal Escape - Non-ASCII or NULL",
+/* ASL_MSG_INVALID_TARGET */ "Target operand not allowed in constant expression",
/* ASL_MSG_INVALID_TIME */ "Time parameter too long (255 max)",
-/* ASL_MSG_DUPLICATE_CASE */ "Case value already specified",
+/* ASL_MSG_INVALID_TYPE */ "Invalid type",
+/* ASL_MSG_INVALID_UUID */ "UUID string must be of the form \"aabbccdd-eeff-gghh-iijj-kkllmmnnoopp\"",
+/* ASL_MSG_LIST_LENGTH */ "Initializer list too long",
+/* ASL_MSG_LISTING_FILE_OPEN */ "Could not open listing file",
+/* ASL_MSG_LISTING_FILENAME */ "Could not create listing filename",
+/* ASL_MSG_LOCAL_INIT */ "Method local variable is not initialized",
+/* ASL_MSG_LONG_LINE */ "Splitting long input line",
+/* ASL_MSG_MEMORY_ALLOCATION */ "Memory allocation failure",
+/* ASL_MSG_MISSING_ENDDEPENDENT */ "Missing EndDependentFn() macro in dependent resource list",
+/* ASL_MSG_MISSING_STARTDEPENDENT */ "Missing StartDependentFn() macro in dependent resource list",
+/* ASL_MSG_MULTIPLE_TYPES */ "Multiple types",
+/* ASL_MSG_NAME_EXISTS */ "Name already exists in scope",
+/* ASL_MSG_NAME_OPTIMIZATION */ "NamePath optimized",
+/* ASL_MSG_NESTED_COMMENT */ "Nested comment found",
/* ASL_MSG_NO_CASES */ "No Case() statements under Switch()",
-/* ASL_MSG_INVALID_UUID */ "UUID string must be of the form \"aabbccdd-eeff-gghh-iijj-kkllmmnnoopp\""
-
-
+/* ASL_MSG_NO_RETVAL */ "Called method returns no value",
+/* ASL_MSG_NO_WHILE */ "No enclosing While statement",
+/* ASL_MSG_NON_ASCII */ "Invalid characters found in file",
+/* ASL_MSG_NOT_EXIST */ "Object does not exist",
+/* ASL_MSG_NOT_FOUND */ "Object not found or not accessible from scope",
+/* ASL_MSG_NOT_METHOD */ "Not a control method, cannot invoke",
+/* ASL_MSG_NOT_PARAMETER */ "Not a parameter, used as local only",
+/* ASL_MSG_NOT_REACHABLE */ "Object not accessible from this scope",
+/* ASL_MSG_OPEN */ "Could not open file",
+/* ASL_MSG_OUTPUT_FILE_OPEN */ "Could not open output AML file",
+/* ASL_MSG_OUTPUT_FILENAME */ "Could not create output filename",
+/* ASL_MSG_PACKAGE_LENGTH */ "Effective AML package length is zero",
+/* ASL_MSG_READ */ "Could not read file",
+/* ASL_MSG_RECURSION */ "Recursive method call",
+/* ASL_MSG_REGION_BUFFER_ACCESS */ "Host Operation Region requires BufferAcc access",
+/* ASL_MSG_REGION_BYTE_ACCESS */ "Host Operation Region requires ByteAcc access",
+/* ASL_MSG_RESERVED_ARG_COUNT_HI */ "Reserved method has too many arguments",
+/* ASL_MSG_RESERVED_ARG_COUNT_LO */ "Reserved method has too few arguments",
+/* ASL_MSG_RESERVED_METHOD */ "Reserved name must be a control method",
+/* ASL_MSG_RESERVED_OPERAND_TYPE */ "Invalid operand type for reserved name, must be",
+/* ASL_MSG_RESERVED_RETURN_VALUE */ "Reserved method must return a value",
+/* ASL_MSG_RESERVED_USE */ "Invalid use of reserved name",
+/* ASL_MSG_RESERVED_WORD */ "Use of reserved word",
+/* ASL_MSG_RESOURCE_FIELD */ "Resource field name cannot be used as a target",
+/* ASL_MSG_RESOURCE_INDEX */ "Missing ResourceSourceIndex (required)",
+/* ASL_MSG_RESOURCE_LIST */ "Too many resource items (internal error)",
+/* ASL_MSG_RESOURCE_SOURCE */ "Missing ResourceSource string (required)",
+/* ASL_MSG_RETURN_TYPES */ "Not all control paths return a value",
+/* ASL_MSG_SCOPE_FWD_REF */ "Forward references from Scope() not allowed",
+/* ASL_MSG_SCOPE_TYPE */ "Existing object has invalid type for Scope operator",
+/* ASL_MSG_SEEK */ "Could not seek file",
+/* ASL_MSG_SINGLE_NAME_OPTIMIZATION */ "NamePath optimized to NameSeg (uses run-time search path)",
+/* ASL_MSG_SOME_NO_RETVAL */ "Called method may not always return a value",
+/* ASL_MSG_STRING_LENGTH */ "String constant too long (200 max)",
+/* ASL_MSG_SWITCH_TYPE */ "Switch expression is not a static Integer/Buffer/String data type, defaulting to Integer",
+/* ASL_MSG_SYNC_LEVEL */ "SyncLevel must be in the range 0-15",
+/* ASL_MSG_SYNTAX */ "",
+/* ASL_MSG_TABLE_SIGNATURE */ "Invalid Table Signature",
+/* ASL_MSG_TOO_MANY_TEMPS */ "Method requires too many temporary variables (_T_x)",
+/* ASL_MSG_UNKNOWN_RESERVED_NAME */ "Unknown reserved name",
+/* ASL_MSG_UNREACHABLE_CODE */ "Statement is unreachable",
+/* ASL_MSG_UNSUPPORTED */ "Unsupported feature",
+/* ASL_MSG_VENDOR_LIST */ "Too many vendor data bytes (7 max)",
+/* ASL_MSG_WRITE */ "Could not write file"
};
diff --git a/sys/contrib/dev/acpica/compiler/aslutils.c b/sys/contrib/dev/acpica/compiler/aslutils.c
index b5e5051..1c9f48b 100644
--- a/sys/contrib/dev/acpica/compiler/aslutils.c
+++ b/sys/contrib/dev/acpica/compiler/aslutils.c
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: aslutils -- compiler utilities
- * $Revision: 58 $
+ * $Revision: 1.66 $
*
*****************************************************************************/
@@ -10,7 +10,7 @@
*
* 1. Copyright Notice
*
- * Some or all of this work - Copyright (c) 1999 - 2004, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
* All rights reserved.
*
* 2. License
@@ -116,10 +116,10 @@
*****************************************************************************/
-#include "aslcompiler.h"
+#include <contrib/dev/acpica/compiler/aslcompiler.h>
#include "aslcompiler.y.h"
-#include "acnamesp.h"
-#include "amlcode.h"
+#include <contrib/dev/acpica/acnamesp.h>
+#include <contrib/dev/acpica/amlcode.h>
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslutils")
@@ -131,13 +131,23 @@ static const char * const *yytname = &AslCompilername[254];
extern const char * const yytname[];
#endif
+/* Local prototypes */
-void
-AslOptimizeNamepath (
- char *Buffer)
-{
- printf ("NamePath: %s\n", Buffer);
-}
+static ACPI_STATUS
+UtStrtoul64 (
+ char *String,
+ UINT32 Base,
+ ACPI_INTEGER *RetInteger);
+
+static void
+UtPadNameWithUnderscores (
+ char *NameSeg,
+ char *PaddedNameSeg);
+
+static void
+UtAttachNameseg (
+ ACPI_PARSE_OBJECT *Op,
+ char *Name);
/*******************************************************************************
@@ -158,6 +168,7 @@ UtDisplayConstantOpcodes (
{
UINT32 i;
+
printf ("Constant expression opcode information\n\n");
for (i = 0; i < sizeof (AcpiGbl_AmlOpInfo) / sizeof (ACPI_OPCODE_INFO); i++)
@@ -211,24 +222,32 @@ UtLocalCalloc (
*
* FUNCTION: UtBeginEvent
*
- * PARAMETERS: Event - Event number (integer index)
- * Name - Ascii name of this event
+ * PARAMETERS: Name - Ascii name of this event
*
- * RETURN: None
+ * RETURN: Event - Event number (integer index)
*
* DESCRIPTION: Saves the current time with this event
*
******************************************************************************/
-void
+UINT8
UtBeginEvent (
- UINT32 Event,
char *Name)
{
- AslGbl_Events[Event].StartTime = (time_t) AcpiOsGetTimer();
- AslGbl_Events[Event].EventName = Name;
- AslGbl_Events[Event].Valid = TRUE;
+ if (AslGbl_NextEvent >= ASL_NUM_EVENTS)
+ {
+ AcpiOsPrintf ("Ran out of compiler event structs!\n");
+ return (AslGbl_NextEvent);
+ }
+
+ /* Init event with current (start) time */
+
+ AslGbl_Events[AslGbl_NextEvent].StartTime = AcpiOsGetTimer ();
+ AslGbl_Events[AslGbl_NextEvent].EventName = Name;
+ AslGbl_Events[AslGbl_NextEvent].Valid = TRUE;
+
+ return (AslGbl_NextEvent++);
}
@@ -246,10 +265,17 @@ UtBeginEvent (
void
UtEndEvent (
- UINT32 Event)
+ UINT8 Event)
{
- AslGbl_Events[Event].EndTime = (time_t) AcpiOsGetTimer();
+ if (Event >= ASL_NUM_EVENTS)
+ {
+ return;
+ }
+
+ /* Insert end time for event */
+
+ AslGbl_Events[Event].EndTime = AcpiOsGetTimer ();
}
@@ -257,7 +283,7 @@ UtEndEvent (
*
* FUNCTION: UtHexCharToValue
*
- * PARAMETERS: hc - Hex character in Ascii
+ * PARAMETERS: HexChar - Hex character in Ascii
*
* RETURN: The binary value of the hex character
*
@@ -267,20 +293,20 @@ UtEndEvent (
UINT8
UtHexCharToValue (
- int hc)
+ int HexChar)
{
- if (hc <= 0x39)
+ if (HexChar <= 0x39)
{
- return ((UINT8) (hc - 0x30));
+ return ((UINT8) (HexChar - 0x30));
}
- if (hc <= 0x46)
+ if (HexChar <= 0x46)
{
- return ((UINT8) (hc - 0x37));
+ return ((UINT8) (HexChar - 0x37));
}
- return ((UINT8) (hc - 0x57));
+ return ((UINT8) (HexChar - 0x57));
}
@@ -289,7 +315,7 @@ UtHexCharToValue (
* FUNCTION: UtConvertByteToHex
*
* PARAMETERS: RawByte - Binary data
- * *Buffer - Pointer to where the hex bytes will be stored
+ * Buffer - Pointer to where the hex bytes will be stored
*
* RETURN: Ascii hex byte is stored in Buffer.
*
@@ -317,7 +343,7 @@ UtConvertByteToHex (
* FUNCTION: UtConvertByteToAsmHex
*
* PARAMETERS: RawByte - Binary data
- * *Buffer - Pointer to where the hex bytes will be stored
+ * Buffer - Pointer to where the hex bytes will be stored
*
* RETURN: Ascii hex byte is stored in Buffer.
*
@@ -344,7 +370,8 @@ UtConvertByteToAsmHex (
*
* FUNCTION: DbgPrint
*
- * PARAMETERS: Fmt - Printf format string
+ * PARAMETERS: Type - Type of output
+ * Fmt - Printf format string
* ... - variable printf list
*
* RETURN: None
@@ -431,6 +458,7 @@ void
UtSetParseOpName (
ACPI_PARSE_OBJECT *Op)
{
+
strncpy (Op->Asl.ParseOpName, UtGetOpName (Op->Asl.ParseOpcode), 12);
}
@@ -464,7 +492,7 @@ UtGetOpName (
*
* FUNCTION: UtDisplaySummary
*
- * PARAMETERS: None
+ * PARAMETERS: FileID - ID of outpout file
*
* RETURN: None
*
@@ -590,7 +618,8 @@ UtGetStringBuffer (
if ((Gbl_StringCacheNext + Length) >= Gbl_StringCacheLast)
{
Gbl_StringCacheNext = UtLocalCalloc (ASL_STRING_CACHE_SIZE + Length);
- Gbl_StringCacheLast = Gbl_StringCacheNext + ASL_STRING_CACHE_SIZE + Length;
+ Gbl_StringCacheLast = Gbl_StringCacheNext + ASL_STRING_CACHE_SIZE +
+ Length;
}
Buffer = Gbl_StringCacheNext;
@@ -667,7 +696,7 @@ UtInternalizeName (
*
******************************************************************************/
-void
+static void
UtPadNameWithUnderscores (
char *NameSeg,
char *PaddedNameSeg)
@@ -698,14 +727,14 @@ UtPadNameWithUnderscores (
* PARAMETERS: Op - Parent parse node
* Name - Full ExternalName
*
- * RETURN: Sets the NameSeg field in parent node
+ * RETURN: None; Sets the NameSeg field in parent node
*
* DESCRIPTION: Extract the last nameseg of the ExternalName and store it
* in the NameSeg field of the Op.
*
******************************************************************************/
-void
+static void
UtAttachNameseg (
ACPI_PARSE_OBJECT *Op,
char *Name)
@@ -775,6 +804,10 @@ UtAttachNamepathToOwner (
Op->Asl.ExternalName = NameOp->Asl.Value.String;
+ /* Save the NameOp for possible error reporting later */
+
+ Op->Asl.ParentMethod = (void *) NameOp;
+
/* Last nameseg of the path */
UtAttachNameseg (Op, Op->Asl.ExternalName);
@@ -813,7 +846,8 @@ UtDoConstant (
Status = UtStrtoul64 (String, 0, &Converted);
if (ACPI_FAILURE (Status))
{
- sprintf (ErrBuf, "%s %s\n", "Conversion error:", AcpiFormatException (Status));
+ sprintf (ErrBuf, "%s %s\n", "Conversion error:",
+ AcpiFormatException (Status));
AslCompilererror (ErrBuf);
}
@@ -821,12 +855,15 @@ UtDoConstant (
}
+/* TBD: use version in ACPI CA main code base? */
+
/*******************************************************************************
*
* FUNCTION: UtStrtoul64
*
* PARAMETERS: String - Null terminated string
- * Terminater - Where a pointer to the terminating byte is returned
+ * Terminater - Where a pointer to the terminating byte is
+ * returned
* Base - Radix of the string
*
* RETURN: Converted value
@@ -834,10 +871,8 @@ UtDoConstant (
* DESCRIPTION: Convert a string into an unsigned value.
*
******************************************************************************/
-#define NEGATIVE 1
-#define POSITIVE 0
-ACPI_STATUS
+static ACPI_STATUS
UtStrtoul64 (
char *String,
UINT32 Base,
@@ -867,9 +902,8 @@ UtStrtoul64 (
return (AE_BAD_PARAMETER);
}
- /*
- * skip over any white space in the buffer:
- */
+ /* Skip over any white space in the buffer: */
+
while (isspace (*String) || *String == '\t')
{
++String;
@@ -977,9 +1011,8 @@ UtStrtoul64 (
}
- /*
- * If a minus sign was present, then "the conversion is negated":
- */
+ /* If a minus sign was present, then "the conversion is negated": */
+
if (Sign == NEGATIVE)
{
ReturnValue = (ACPI_UINT32_MAX - ReturnValue) + 1;
OpenPOWER on IntegriCloud