summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica/compiler/asltransform.c
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2016-09-30 22:40:58 +0000
committerjkim <jkim@FreeBSD.org>2016-09-30 22:40:58 +0000
commitdba8c0a565199df70a86f6a036d00c92f0c7675f (patch)
treecf4924274c6e92898c01efb3c8ba31b34f0630f2 /sys/contrib/dev/acpica/compiler/asltransform.c
parent0f41551ef9dde560d9d191d7190af02904dbf611 (diff)
downloadFreeBSD-src-dba8c0a565199df70a86f6a036d00c92f0c7675f.zip
FreeBSD-src-dba8c0a565199df70a86f6a036d00c92f0c7675f.tar.gz
MFC: r284583, r285797, r285799, r287168, r298714, r298720, r298838,
r300879 Merge ACPICA up to 20160527. Requested by: mav
Diffstat (limited to 'sys/contrib/dev/acpica/compiler/asltransform.c')
-rw-r--r--sys/contrib/dev/acpica/compiler/asltransform.c87
1 files changed, 67 insertions, 20 deletions
diff --git a/sys/contrib/dev/acpica/compiler/asltransform.c b/sys/contrib/dev/acpica/compiler/asltransform.c
index c46801b..cc87390 100644
--- a/sys/contrib/dev/acpica/compiler/asltransform.c
+++ b/sys/contrib/dev/acpica/compiler/asltransform.c
@@ -5,7 +5,7 @@
*****************************************************************************/
/*
- * Copyright (C) 2000 - 2015, Intel Corp.
+ * Copyright (C) 2000 - 2016, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -111,7 +111,7 @@ TrAmlGetNextTempName (
char *TempName;
- if (*TempCount >= (10+26)) /* 0-35 valid: 0-9 and A-Z for TempName[3] */
+ if (*TempCount >= (10 + 26)) /* 0-35 valid: 0-9 and A-Z for TempName[3] */
{
/* Too many temps */
@@ -129,6 +129,7 @@ TrAmlGetNextTempName (
{
TempName[3] = (char) (*TempCount + ('A' - 10));
}
+
(*TempCount)++;
/* First three characters are always "_T_" */
@@ -217,7 +218,7 @@ TrAmlSetSubtreeParent (
while (Next)
{
Next->Asl.Parent = Parent;
- Next = Next->Asl.Next;
+ Next = Next->Asl.Next;
}
}
@@ -242,13 +243,13 @@ TrAmlInsertPeer (
{
NewPeer->Asl.Next = Op->Asl.Next;
- Op->Asl.Next = NewPeer;
+ Op->Asl.Next = NewPeer;
}
/*******************************************************************************
*
- * FUNCTION: TrAmlTransformWalk
+ * FUNCTION: TrAmlTransformWalkBegin
*
* PARAMETERS: ASL_WALK_CALLBACK
*
@@ -260,7 +261,7 @@ TrAmlInsertPeer (
******************************************************************************/
ACPI_STATUS
-TrAmlTransformWalk (
+TrAmlTransformWalkBegin (
ACPI_PARSE_OBJECT *Op,
UINT32 Level,
void *Context)
@@ -273,6 +274,38 @@ TrAmlTransformWalk (
/*******************************************************************************
*
+ * FUNCTION: TrAmlTransformWalkEnd
+ *
+ * PARAMETERS: ASL_WALK_CALLBACK
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Parse tree walk to generate both the AML opcodes and the AML
+ * operands.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+TrAmlTransformWalkEnd (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context)
+{
+
+ /* Save possible Externals list in the DefintionBlock Op */
+
+ if (Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK)
+ {
+ Op->Asl.Value.Arg = Gbl_ExternalsListHead;
+ Gbl_ExternalsListHead = NULL;
+ }
+
+ return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: TrTransformSubtree
*
* PARAMETERS: Op - The parent parse node
@@ -297,7 +330,7 @@ TrTransformSubtree (
switch (Op->Asl.ParseOpcode)
{
- case PARSEOP_DEFINITIONBLOCK:
+ case PARSEOP_DEFINITION_BLOCK:
TrDoDefinitionBlock (Op);
break;
@@ -315,6 +348,15 @@ TrTransformSubtree (
Gbl_TempCount = 0;
break;
+ case PARSEOP_EXTERNAL:
+
+ if (Gbl_DoExternals == TRUE)
+ {
+ ExDoExternal (Op);
+ }
+
+ break;
+
default:
/* Nothing to do here for other opcodes */
@@ -346,6 +388,10 @@ TrDoDefinitionBlock (
UINT32 i;
+ /* Reset external list when starting a definition block */
+
+ Gbl_ExternalsListHead = NULL;
+
Next = Op->Asl.Child;
for (i = 0; i < 5; i++)
{
@@ -448,7 +494,7 @@ TrDoSwitch (
{
/* Add an ELSE to complete the previous CASE */
- NewOp = TrCreateLeafNode (PARSEOP_ELSE);
+ NewOp = TrCreateLeafNode (PARSEOP_ELSE);
NewOp->Asl.Parent = Conditional->Asl.Parent;
TrAmlInitLineNumbers (NewOp, NewOp->Asl.Parent);
@@ -458,9 +504,9 @@ TrDoSwitch (
CurrentParentNode = NewOp;
}
- CaseOp = Next;
+ CaseOp = Next;
Conditional = CaseOp;
- CaseBlock = CaseOp->Asl.Child->Asl.Next;
+ CaseBlock = CaseOp->Asl.Child->Asl.Next;
Conditional->Asl.Child->Asl.Next = NULL;
Predicate = CaseOp->Asl.Child;
@@ -537,7 +583,7 @@ TrDoSwitch (
* CaseOp->Child->Peer is the beginning of the case block
*/
NewOp = TrCreateValuedLeafNode (PARSEOP_NAMESTRING,
- (UINT64) ACPI_TO_INTEGER (PredicateValueName));
+ (UINT64) ACPI_TO_INTEGER (PredicateValueName));
NewOp->Asl.Next = Predicate;
TrAmlInitLineNumbers (NewOp, Predicate);
@@ -600,7 +646,7 @@ TrDoSwitch (
/* Unknown peer opcode */
AcpiOsPrintf ("Unknown parse opcode for switch statement: %s (%u)\n",
- Next->Asl.ParseOpName, Next->Asl.ParseOpcode);
+ Next->Asl.ParseOpName, Next->Asl.ParseOpcode);
}
}
@@ -645,7 +691,7 @@ TrDoSwitch (
Next = StartNode;
while ((Next->Asl.ParseOpcode != PARSEOP_METHOD) &&
- (Next->Asl.ParseOpcode != PARSEOP_DEFINITIONBLOCK))
+ (Next->Asl.ParseOpcode != PARSEOP_DEFINITION_BLOCK))
{
Next = Next->Asl.Parent;
}
@@ -668,7 +714,8 @@ TrDoSwitch (
*/
if (Next->Asl.ParseOpcode != PARSEOP_SERIALIZERULE_SERIAL)
{
- AslError (ASL_REMARK, ASL_MSG_SERIALIZED, MethodOp, "Due to use of Switch operator");
+ AslError (ASL_REMARK, ASL_MSG_SERIALIZED, MethodOp,
+ "Due to use of Switch operator");
Next->Asl.ParseOpcode = PARSEOP_SERIALIZERULE_SERIAL;
}
@@ -682,7 +729,7 @@ TrDoSwitch (
/* Create the NameSeg child for the Name node */
NewOp2 = TrCreateValuedLeafNode (PARSEOP_NAMESEG,
- (UINT64) ACPI_TO_INTEGER (PredicateValueName));
+ (UINT64) ACPI_TO_INTEGER (PredicateValueName));
TrAmlInitLineNumbers (NewOp2, NewOp);
NewOp2->Asl.CompileFlags |= NODE_IS_NAME_DECLARATION;
NewOp->Asl.Child = NewOp2;
@@ -694,25 +741,25 @@ TrDoSwitch (
case ACPI_BTYPE_INTEGER:
NewOp2->Asl.Next = TrCreateValuedLeafNode (PARSEOP_ZERO,
- (UINT64) 0);
+ (UINT64) 0);
TrAmlInitLineNumbers (NewOp2->Asl.Next, NewOp);
break;
case ACPI_BTYPE_STRING:
NewOp2->Asl.Next = TrCreateValuedLeafNode (PARSEOP_STRING_LITERAL,
- (UINT64) ACPI_TO_INTEGER (""));
+ (UINT64) ACPI_TO_INTEGER (""));
TrAmlInitLineNumbers (NewOp2->Asl.Next, NewOp);
break;
case ACPI_BTYPE_BUFFER:
(void) TrLinkPeerNode (NewOp2, TrCreateValuedLeafNode (PARSEOP_BUFFER,
- (UINT64) 0));
+ (UINT64) 0));
Next = NewOp2->Asl.Next;
TrAmlInitLineNumbers (Next, NewOp2);
(void) TrLinkChildren (Next, 1, TrCreateValuedLeafNode (PARSEOP_ZERO,
- (UINT64) 1));
+ (UINT64) 1));
TrAmlInitLineNumbers (Next->Asl.Child, Next);
BufferOp = TrCreateValuedLeafNode (PARSEOP_DEFAULT_ARG, (UINT64) 0);
@@ -755,7 +802,7 @@ TrDoSwitch (
Predicate->Asl.Parent = StoreOp;
NewOp = TrCreateValuedLeafNode (PARSEOP_NAMESEG,
- (UINT64) ACPI_TO_INTEGER (PredicateValueName));
+ (UINT64) ACPI_TO_INTEGER (PredicateValueName));
TrAmlInitLineNumbers (NewOp, StoreOp);
NewOp->Asl.Parent = StoreOp;
Predicate->Asl.Next = NewOp;
OpenPOWER on IntegriCloud