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.c153
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcodegen.c9
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompiler.h7
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompiler.l20
-rw-r--r--sys/contrib/dev/acpica/compiler/aslcompiler.y281
-rw-r--r--sys/contrib/dev/acpica/compiler/aslglobal.h3
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmain.c16
-rw-r--r--sys/contrib/dev/acpica/compiler/aslmap.c58
-rw-r--r--sys/contrib/dev/acpica/compiler/aslopcodes.c120
-rw-r--r--sys/contrib/dev/acpica/compiler/aslopt.c20
-rw-r--r--sys/contrib/dev/acpica/compiler/asltransform.c211
-rw-r--r--sys/contrib/dev/acpica/compiler/asltypes.h17
12 files changed, 772 insertions, 143 deletions
diff --git a/sys/contrib/dev/acpica/compiler/aslanalyze.c b/sys/contrib/dev/acpica/compiler/aslanalyze.c
index 9f5dd55..93bcca1 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: 80 $
+ * $Revision: 84 $
*
*****************************************************************************/
@@ -454,8 +454,9 @@ AnGetBtype (
if (!Node)
{
DbgPrint (ASL_DEBUG_OUTPUT,
- "Null attached Nsnode: [%s] at line %d\n",
- Op->Asl.ParseOpName, Op->Asl.LineNumber);
+ "No attached Nsnode: [%s] at line %d name [%s], ignoring typecheck\n",
+ Op->Asl.ParseOpName, Op->Asl.LineNumber,
+ Op->Asl.ExternalName);
return ACPI_UINT32_MAX;
}
@@ -582,6 +583,13 @@ AnCheckForReservedName (
else if ((Op->Asl.ExternalName[1] == 'T') &&
(Op->Asl.ExternalName[2] == '_'))
{
+ /* Ignore if actually emitted by the compiler */
+
+ if (Op->Asl.CompileFlags & NODE_COMPILER_EMITTED)
+ {
+ return (ACPI_NOT_RESERVED_NAME);
+ }
+
AslError (ASL_ERROR, ASL_MSG_RESERVED_WORD, Op, Op->Asl.ExternalName);
return (ACPI_COMPILER_RESERVED_NAME);
}
@@ -683,6 +691,64 @@ AnCheckForReservedMethod (
}
+UINT32
+AnMapObjTypeToBtype (
+ ACPI_PARSE_OBJECT *Op)
+{
+
+ switch (Op->Asl.ParseOpcode)
+ {
+ case PARSEOP_OBJECTTYPE_BFF: /* "BuffFieldObj" */
+ return (ACPI_BTYPE_BUFFER_FIELD);
+
+ case PARSEOP_OBJECTTYPE_BUF: /* "BuffObj" */
+ return (ACPI_BTYPE_BUFFER);
+
+ case PARSEOP_OBJECTTYPE_DDB: /* "DDBHandleObj" */
+ return (ACPI_BTYPE_DDB_HANDLE);
+
+ case PARSEOP_OBJECTTYPE_DEV: /* "DeviceObj" */
+ return (ACPI_BTYPE_DEVICE);
+
+ case PARSEOP_OBJECTTYPE_EVT: /* "EventObj" */
+ return (ACPI_BTYPE_EVENT);
+
+ case PARSEOP_OBJECTTYPE_FLD: /* "FieldUnitObj" */
+ return (ACPI_BTYPE_FIELD_UNIT);
+
+ case PARSEOP_OBJECTTYPE_INT: /* "IntObj" */
+ return (ACPI_BTYPE_INTEGER);
+
+ case PARSEOP_OBJECTTYPE_MTH: /* "MethodObj" */
+ return (ACPI_BTYPE_METHOD);
+
+ case PARSEOP_OBJECTTYPE_MTX: /* "MutexObj" */
+ return (ACPI_BTYPE_MUTEX);
+
+ case PARSEOP_OBJECTTYPE_OPR: /* "OpRegionObj" */
+ return (ACPI_BTYPE_REGION);
+
+ case PARSEOP_OBJECTTYPE_PKG: /* "PkgObj" */
+ return (ACPI_BTYPE_PACKAGE);
+
+ case PARSEOP_OBJECTTYPE_POW: /* "PowerResObj" */
+ return (ACPI_BTYPE_POWER);
+
+ case PARSEOP_OBJECTTYPE_STR: /* "StrObj" */
+ return (ACPI_BTYPE_STRING);
+
+ case PARSEOP_OBJECTTYPE_THZ: /* "ThermalZoneObj" */
+ return (ACPI_BTYPE_THERMAL);
+
+ case PARSEOP_OBJECTTYPE_UNK: /* "UnknownObj" */
+ return (ACPI_BTYPE_OBJECTS_AND_REFS);
+
+ default:
+ return (0);
+ }
+}
+
+
/*******************************************************************************
*
* FUNCTION: AnMethodAnalysisWalkBegin
@@ -711,6 +777,10 @@ AnMethodAnalysisWalkBegin (
UINT32 i;
char LocalName[] = "Local0";
char ArgName[] = "Arg0";
+ ACPI_PARSE_OBJECT *ArgNode;
+ ACPI_PARSE_OBJECT *NextType;
+ ACPI_PARSE_OBJECT *NextParamType;
+ char ActualArgs = 0;
ACPI_FUNCTION_NAME ("AnMethodAnalysisWalkBegin");
@@ -731,12 +801,76 @@ AnMethodAnalysisWalkBegin (
WalkInfo->MethodStack = MethodInfo;
- /* Get the NumArguments node */
+ /* Get the name node, ignored here */
Next = Op->Asl.Child;
+
+ /* Get the NumArguments node */
+
Next = Next->Asl.Next;
MethodInfo->NumArguments = (UINT8) (((UINT8) Next->Asl.Value.Integer) & 0x07);
+ /* Get the SerializeRule and SyncLevel nodes, ignored here */
+
+ Next = Next->Asl.Next;
+ Next = Next->Asl.Next;
+ ArgNode = Next;
+
+ /* Get the ReturnType node */
+
+ Next = Next->Asl.Next;
+
+ NextType = Next->Asl.Child;
+ while (NextType)
+ {
+ /* Get and map each of the ReturnTypes */
+
+ MethodInfo->ValidReturnTypes |= AnMapObjTypeToBtype (NextType);
+ NextType->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
+ NextType = NextType->Asl.Next;
+ }
+
+ /* Get the ParameterType node */
+
+ Next = Next->Asl.Next;
+
+ NextType = Next->Asl.Child;
+ while (NextType)
+ {
+ if (NextType->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG)
+ {
+ NextParamType = NextType->Asl.Child;
+ while (NextParamType)
+ {
+ MethodInfo->ValidArgTypes[ActualArgs] |= AnMapObjTypeToBtype (NextParamType);
+ NextParamType->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
+ NextParamType = NextParamType->Asl.Next;
+ }
+ }
+ else
+ {
+ MethodInfo->ValidArgTypes[ActualArgs] = AnMapObjTypeToBtype (NextType);
+ NextType->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
+ }
+
+ ActualArgs++;
+ NextType = NextType->Asl.Next;
+ }
+
+ if ((MethodInfo->NumArguments) &&
+ (MethodInfo->NumArguments != ActualArgs))
+ {
+ /* error: Param list did not match number of args */
+ }
+
+ /* Allow numarguments == 0 for Function() */
+
+ if ((!MethodInfo->NumArguments) && (ActualArgs))
+ {
+ MethodInfo->NumArguments = ActualArgs;
+ ArgNode->Asl.Value.Integer |= ActualArgs;
+ }
+
/*
* Actual arguments are initialized at method entry.
* All other ArgX "registers" can be used as locals, so we
@@ -746,7 +880,6 @@ AnMethodAnalysisWalkBegin (
{
MethodInfo->ArgInitialized[i] = TRUE;
}
-
break;
@@ -791,8 +924,11 @@ AnMethodAnalysisWalkBegin (
/*
* Otherwise, this is a reference, check if the local
* has been previously initialized.
+ *
+ * The only operator that accepts an uninitialized value is ObjectType()
*/
- else if (!MethodInfo->LocalInitialized[RegisterNumber])
+ else if ((!MethodInfo->LocalInitialized[RegisterNumber]) &&
+ (Op->Asl.Parent->Asl.ParseOpcode != PARSEOP_OBJECTTYPE))
{
LocalName[strlen (LocalName) -1] = (char) (RegisterNumber + 0x30);
AslError (ASL_ERROR, ASL_MSG_LOCAL_INIT, Op, LocalName);
@@ -831,8 +967,11 @@ AnMethodAnalysisWalkBegin (
/*
* Otherwise, this is a reference, check if the Arg
* has been previously initialized.
+ *
+ * The only operator that accepts an uninitialized value is ObjectType()
*/
- else if (!MethodInfo->ArgInitialized[RegisterNumber])
+ else if ((!MethodInfo->ArgInitialized[RegisterNumber]) &&
+ (Op->Asl.Parent->Asl.ParseOpcode != PARSEOP_OBJECTTYPE))
{
AslError (ASL_ERROR, ASL_MSG_ARG_INIT, Op, ArgName);
}
diff --git a/sys/contrib/dev/acpica/compiler/aslcodegen.c b/sys/contrib/dev/acpica/compiler/aslcodegen.c
index fc5ddbd..6087bfb 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: 50 $
+ * $Revision: 51 $
*
*****************************************************************************/
@@ -445,6 +445,13 @@ CgWriteTableHeader (
Child = Child->Asl.Next;
TableHeader.Revision = (UINT8) Child->Asl.Value.Integer;
+ /* Command-line Revision override */
+
+ if (Gbl_RevisionOverride)
+ {
+ TableHeader.Revision = Gbl_RevisionOverride;
+ }
+
/* OEMID */
Child = Child->Asl.Next;
diff --git a/sys/contrib/dev/acpica/compiler/aslcompiler.h b/sys/contrib/dev/acpica/compiler/aslcompiler.h
index 0172e47..3da39af 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompiler.h
+++ b/sys/contrib/dev/acpica/compiler/aslcompiler.h
@@ -2,7 +2,7 @@
/******************************************************************************
*
* Module Name: aslcompiler.h - common include file
- * $Revision: 129 $
+ * $Revision: 130 $
*
*****************************************************************************/
@@ -581,11 +581,6 @@ void
TrDoDefinitionBlock (
ACPI_PARSE_OBJECT *Op);
-void
-TrDoElseif (
- ACPI_PARSE_OBJECT *Op);
-
-
/*
* asltree - parse tree support
*/
diff --git a/sys/contrib/dev/acpica/compiler/aslcompiler.l b/sys/contrib/dev/acpica/compiler/aslcompiler.l
index c2b2581..dbef089 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompiler.l
+++ b/sys/contrib/dev/acpica/compiler/aslcompiler.l
@@ -207,6 +207,7 @@ NamePathTail [.]{NameSeg}
"Device" { count (2); return (PARSEOP_DEVICE); }
"Event" { count (2); return (PARSEOP_EVENT); }
"Field" { count (2); return (PARSEOP_FIELD); }
+"Function" { count (2); return (PARSEOP_FUNCTION); }
"IndexField" { count (2); return (PARSEOP_INDEXFIELD); }
"Method" { count (2); return (PARSEOP_METHOD); }
"Mutex" { count (2); return (PARSEOP_MUTEX); }
@@ -279,6 +280,7 @@ NamePathTail [.]{NameSeg}
"SizeOf" { count (3); return (PARSEOP_SIZEOF); }
"Store" { count (3); return (PARSEOP_STORE); }
"Subtract" { count (3); return (PARSEOP_SUBTRACT); }
+"Timer" { count (3); return (PARSEOP_TIMER); }
"ToBCD" { count (3); return (PARSEOP_TOBCD); }
"ToBuffer" { count (3); return (PARSEOP_TOBUFFER); }
"ToDecimalString" { count (3); return (PARSEOP_TODECIMALSTRING); }
@@ -313,11 +315,16 @@ NamePathTail [.]{NameSeg}
"EISAID" { count (1); return (PARSEOP_EISAID); }
"ResourceTemplate" { count (1); return (PARSEOP_RESOURCETEMPLATE); }
+"ToUUID" { count (1); return (PARSEOP_TOUUID); }
"Unicode" { count (1); return (PARSEOP_UNICODE); }
"DMA" { count (1); return (PARSEOP_DMA); }
"DWordIO" { count (1); return (PARSEOP_DWORDIO); }
"DWordMemory" { count (1); return (PARSEOP_DWORDMEMORY); }
+"DWordSpace" { count (1); return (PARSEOP_DWORDSPACE); }
"EndDependentFn" { count (1); return (PARSEOP_ENDDEPENDENTFN); }
+"ExtendedIO" { count (1); return (PARSEOP_EXTENDEDIO); }
+"ExtendedMemory" { count (1); return (PARSEOP_EXTENDEDMEMORY); }
+"ExtendedSpace" { count (1); return (PARSEOP_EXTENDEDSPACE); }
"FixedIO" { count (1); return (PARSEOP_FIXEDIO); }
"Interrupt" { count (1); return (PARSEOP_INTERRUPT); }
"IO" { count (1); return (PARSEOP_IO); }
@@ -328,6 +335,7 @@ NamePathTail [.]{NameSeg}
"Memory32" { count (1); return (PARSEOP_MEMORY32); }
"QWordIO" { count (1); return (PARSEOP_QWORDIO); }
"QWordMemory" { count (1); return (PARSEOP_QWORDMEMORY); }
+"QWordSpace" { count (1); return (PARSEOP_QWORDSPACE); }
"Register" { count (1); return (PARSEOP_REGISTER); }
"StartDependentFn" { count (1); return (PARSEOP_STARTDEPENDENTFN); }
"StartDependentFnNoPri" { count (1); return (PARSEOP_STARTDEPENDENTFN_NOPRI); }
@@ -335,6 +343,7 @@ NamePathTail [.]{NameSeg}
"VendorShort" { count (1); return (PARSEOP_VENDORSHORT); }
"WordBusNumber" { count (1); return (PARSEOP_WORDBUSNUMBER); }
"WordIO" { count (1); return (PARSEOP_WORDIO); }
+"WordSpace" { count (1); return (PARSEOP_WORDSPACE); }
"UnknownObj" { count (0); return (PARSEOP_OBJECTTYPE_UNK); }
"IntObj" { count (0); return (PARSEOP_OBJECTTYPE_INT); }
@@ -886,14 +895,9 @@ comment2 (void)
if (c == EOF)
{
- /*
- * Premature End-Of-File
- */
- AslCommonError (ASL_ERROR, ASL_MSG_EARLY_EOF,
- Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
- Gbl_CurrentLineOffset, Gbl_CurrentColumn,
- Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
- return (FALSE);
+ /* End of file is OK, change to newline. Let parser detect EOF later */
+
+ c = '\n';
}
InsertLineBuffer (c);
diff --git a/sys/contrib/dev/acpica/compiler/aslcompiler.y b/sys/contrib/dev/acpica/compiler/aslcompiler.y
index a3cbf5a..dec6d33 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompiler.y
+++ b/sys/contrib/dev/acpica/compiler/aslcompiler.y
@@ -250,12 +250,16 @@ AslLocalAllocate (unsigned int Size);
%token <i> PARSEOP_DWORDCONST
%token <i> PARSEOP_DWORDIO
%token <i> PARSEOP_DWORDMEMORY
+%token <i> PARSEOP_DWORDSPACE
%token <i> PARSEOP_EISAID
%token <i> PARSEOP_ELSE
%token <i> PARSEOP_ELSEIF
%token <i> PARSEOP_ENDDEPENDENTFN
%token <i> PARSEOP_ERRORNODE
%token <i> PARSEOP_EVENT
+%token <i> PARSEOP_EXTENDEDIO
+%token <i> PARSEOP_EXTENDEDMEMORY
+%token <i> PARSEOP_EXTENDEDSPACE
%token <i> PARSEOP_EXTERNAL
%token <i> PARSEOP_FATAL
%token <i> PARSEOP_FIELD
@@ -263,6 +267,7 @@ AslLocalAllocate (unsigned int Size);
%token <i> PARSEOP_FINDSETRIGHTBIT
%token <i> PARSEOP_FIXEDIO
%token <i> PARSEOP_FROMBCD
+%token <i> PARSEOP_FUNCTION
%token <i> PARSEOP_IF
%token <i> PARSEOP_INCLUDE
%token <i> PARSEOP_INCLUDE_CSTYLE
@@ -363,6 +368,7 @@ AslLocalAllocate (unsigned int Size);
%token <i> PARSEOP_QWORDCONST
%token <i> PARSEOP_QWORDIO
%token <i> PARSEOP_QWORDMEMORY
+%token <i> PARSEOP_QWORDSPACE
%token <i> PARSEOP_RANGETYPE_ENTIRE
%token <i> PARSEOP_RANGETYPE_ISAONLY
%token <i> PARSEOP_RANGETYPE_NONISAONLY
@@ -404,12 +410,14 @@ AslLocalAllocate (unsigned int Size);
%token <i> PARSEOP_SUBTRACT
%token <i> PARSEOP_SWITCH
%token <i> PARSEOP_THERMALZONE
+%token <i> PARSEOP_TIMER
%token <i> PARSEOP_TOBCD
%token <i> PARSEOP_TOBUFFER
%token <i> PARSEOP_TODECIMALSTRING
%token <i> PARSEOP_TOHEXSTRING
%token <i> PARSEOP_TOINTEGER
%token <i> PARSEOP_TOSTRING
+%token <i> PARSEOP_TOUUID
%token <i> PARSEOP_TRANSLATIONTYPE_DENSE
%token <i> PARSEOP_TRANSLATIONTYPE_SPARSE
%token <i> PARSEOP_TYPE_STATIC
@@ -427,6 +435,7 @@ AslLocalAllocate (unsigned int Size);
%token <i> PARSEOP_WORDBUSNUMBER
%token <i> PARSEOP_WORDCONST
%token <i> PARSEOP_WORDIO
+%token <i> PARSEOP_WORDSPACE
%token <i> PARSEOP_XFERTYPE_8
%token <i> PARSEOP_XFERTYPE_8_16
%token <i> PARSEOP_XFERTYPE_16
@@ -460,6 +469,10 @@ AslLocalAllocate (unsigned int Size);
%type <n> RequiredTarget
%type <n> SimpleTarget
%type <n> BufferTermData
+%type <n> ParameterTypePackage
+%type <n> ParameterTypePackageList
+%type <n> ParameterTypesPackage
+%type <n> ParameterTypesPackageList
%type <n> Type1Opcode
%type <n> Type2Opcode
@@ -502,6 +515,7 @@ AslLocalAllocate (unsigned int Size);
%type <n> DeviceTerm
%type <n> EventTerm
%type <n> FieldTerm
+%type <n> FunctionTerm
%type <n> IndexFieldTerm
%type <n> MethodTerm
%type <n> MutexTerm
@@ -586,6 +600,7 @@ AslLocalAllocate (unsigned int Size);
%type <n> SizeOfTerm
%type <n> StoreTerm
%type <n> SubtractTerm
+%type <n> TimerTerm
%type <n> ToBCDTerm
%type <n> ToBufferTerm
%type <n> ToDecimalStringTerm
@@ -671,9 +686,11 @@ AslLocalAllocate (unsigned int Size);
%type <n> VarPackageLengthTerm
+/* Macros */
%type <n> EISAIDTerm
%type <n> ResourceTemplateTerm
+%type <n> ToUUIDTerm
%type <n> UnicodeTerm
%type <n> ResourceMacroList
%type <n> ResourceMacroTerm
@@ -681,7 +698,11 @@ AslLocalAllocate (unsigned int Size);
%type <n> DMATerm
%type <n> DWordIOTerm
%type <n> DWordMemoryTerm
+%type <n> DWordSpaceTerm
%type <n> EndDependentFnTerm
+%type <n> ExtendedIOTerm
+%type <n> ExtendedMemoryTerm
+%type <n> ExtendedSpaceTerm
%type <n> FixedIOTerm
%type <n> InterruptTerm
%type <n> IOTerm
@@ -692,6 +713,7 @@ AslLocalAllocate (unsigned int Size);
%type <n> Memory32Term
%type <n> QWordIOTerm
%type <n> QWordMemoryTerm
+%type <n> QWordSpaceTerm
%type <n> RegisterTerm
%type <n> StartDependentFnTerm
%type <n> StartDependentFnNoPriTerm
@@ -699,6 +721,7 @@ AslLocalAllocate (unsigned int Size);
%type <n> VendorShortTerm
%type <n> WordBusNumberTerm
%type <n> WordIOTerm
+%type <n> WordSpaceTerm
%type <n> NameString
%type <n> NameSeg
@@ -710,8 +733,10 @@ AslLocalAllocate (unsigned int Size);
%type <n> AmlPackageLengthTerm
%type <n> OptionalByteConstExpr
%type <n> OptionalDWordConstExpr
+%type <n> OptionalQWordConstExpr
%type <n> OptionalSerializeRuleKeyword
%type <n> OptionalResourceType_First
+%type <n> OptionalResourceType
%type <n> OptionalMinType
%type <n> OptionalMaxType
%type <n> OptionalMemType
@@ -728,6 +753,8 @@ AslLocalAllocate (unsigned int Size);
%type <n> OptionalNameString_Last
%type <n> OptionalAddressRange
%type <n> OptionalObjectTypeKeyword
+%type <n> OptionalParameterTypePackage
+%type <n> OptionalParameterTypesPackage
%type <n> OptionalReference
@@ -769,9 +796,12 @@ DefinitionBlockTerm
'{' ObjectList '}' {$$ = TrLinkChildren ($<n>3,7,$4,$6,$8,$10,$12,$14,$18);}
;
+/* ACPI 3.0 -- allow semicolons between terms */
+
TermList
: {$$ = NULL;}
| Term TermList {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$2);}
+ | Term ';' TermList {$$ = TrLinkPeerNode (TrSetNodeFlags ($1, NODE_RESULT_NOT_USED),$3);}
;
Term
@@ -846,6 +876,7 @@ NamedObject
| DeviceTerm {}
| EventTerm {}
| FieldTerm {}
+ | FunctionTerm {}
| IndexFieldTerm {}
| MethodTerm {}
| MutexTerm {}
@@ -905,6 +936,52 @@ SimpleTarget
| ArgTerm {}
;
+/* Rules for specifying the Return type for control methods */
+
+ParameterTypePackageList
+ : {$$ = NULL;}
+ | ObjectTypeKeyword {$$ = $1;}
+ | ObjectTypeKeyword ','
+ ParameterTypePackageList {$$ = TrLinkPeerNodes (2,$1,$3);}
+ ;
+
+ParameterTypePackage
+ : {$$ = NULL;}
+ | ObjectTypeKeyword {$$ = $1;}
+ | '{'
+ ParameterTypePackageList
+ '}' {$$ = $2;}
+ ;
+
+OptionalParameterTypePackage
+ : {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
+ | ',' {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
+ | ',' ParameterTypePackage {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
+ ;
+
+/* Rules for specifying the Argument types for control methods */
+
+ParameterTypesPackageList
+ : {$$ = NULL;}
+ | ObjectTypeKeyword {$$ = $1;}
+ | ObjectTypeKeyword ','
+ ParameterTypesPackage {$$ = TrLinkPeerNodes (2,$1,$3);}
+ ;
+
+ParameterTypesPackage
+ : {$$ = NULL;}
+ | ObjectTypeKeyword {$$ = $1;}
+ | '{'
+ ParameterTypesPackageList
+ '}' {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_DEFAULT_ARG),1,$2);}
+ ;
+
+OptionalParameterTypesPackage
+ : {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
+ | ',' {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
+ | ',' ParameterTypesPackage {$$ = $2;}
+ ;
+
/* Opcode types */
@@ -937,12 +1014,13 @@ Type2Opcode
| RefOfTerm {}
| SizeOfTerm {}
| StoreTerm {}
+ | TimerTerm {}
| WaitTerm {}
| UserTerm {}
;
/*
- * A type 2 opcode evaluates to an Integer and cannot have a destination operand
+ * Type 3/4/5 opcodes
*/
Type2IntegerOpcode /* "Type3" opcodes */
@@ -980,7 +1058,6 @@ Type2IntegerOpcode /* "Type3" opcodes */
| XOrTerm {}
;
-
Type2StringOpcode /* "Type4" Opcodes */
: ToDecimalStringTerm {}
| ToHexStringTerm {}
@@ -1019,6 +1096,7 @@ Type4Opcode
Type5Opcode
: ResourceTemplateTerm {}
| UnicodeTerm {}
+ | ToUUIDTerm {}
;
Type6Opcode
@@ -1053,7 +1131,9 @@ ExternalTerm
: PARSEOP_EXTERNAL '('
NameString
OptionalObjectTypeKeyword
- ')' {$$ = TrCreateNode (PARSEOP_EXTERNAL,2,$3,$4);}
+ OptionalParameterTypePackage
+ OptionalParameterTypesPackage
+ ')' {$$ = TrCreateNode (PARSEOP_EXTERNAL,4,$3,$4,$5,$6);}
| PARSEOP_EXTERNAL '('
error ')' {$$ = AslDoError(); yyclearin;}
;
@@ -1219,6 +1299,20 @@ FieldTerm
error ')' {$$ = AslDoError(); yyclearin;}
;
+FunctionTerm
+ : PARSEOP_FUNCTION '(' {$$ = TrCreateLeafNode (PARSEOP_METHOD);}
+ NameString
+ OptionalParameterTypePackage
+ OptionalParameterTypesPackage
+ ')' '{'
+ TermList '}' {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
+ TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),
+ TrCreateLeafNode (PARSEOP_SERIALIZERULE_NOTSERIAL),
+ TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),$5,$6,$9);}
+ | PARSEOP_FUNCTION '('
+ error ')' {$$ = AslDoError(); yyclearin;}
+ ;
+
IndexFieldTerm
: PARSEOP_INDEXFIELD '(' {$$ = TrCreateLeafNode (PARSEOP_INDEXFIELD);}
NameString
@@ -1238,8 +1332,10 @@ MethodTerm
OptionalByteConstExpr {$$ = UtCheckIntegerRange ($5, 0, 7);}
OptionalSerializeRuleKeyword
OptionalByteConstExpr
+ OptionalParameterTypePackage
+ OptionalParameterTypesPackage
')' '{'
- TermList '}' {$$ = TrLinkChildren ($<n>3,5,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$7,$8,$11);}
+ TermList '}' {$$ = TrLinkChildren ($<n>3,7,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$5,$7,$8,$9,$10,$13);}
| PARSEOP_METHOD '('
error ')' {$$ = AslDoError(); yyclearin;}
;
@@ -1377,13 +1473,15 @@ ElseTerm
| PARSEOP_ELSE '{' {$$ = TrCreateLeafNode (PARSEOP_ELSE);}
TermList '}'
{$$ = TrLinkChildren ($<n>3,1,$4);}
+ | PARSEOP_ELSE '{'
+ error '}' {$$ = AslDoError(); yyclearin;}
- | PARSEOP_ELSEIF '(' {$$ = TrCreateLeafNode (PARSEOP_ELSEIF);}
- TermArg
+ | PARSEOP_ELSEIF '(' {$$ = TrCreateLeafNode (PARSEOP_ELSE);}
+ TermArg {$$ = TrCreateLeafNode (PARSEOP_IF);}
')' '{'
- TermList '}'
- ElseTerm {$$ = TrLinkChildren ($<n>3,3,$4,$7,$9);}
-
+ TermList '}' {$$ = TrLinkChildren ($<n>5,2,$4,$8);}
+ ElseTerm {$$ = TrLinkPeerNode ($<n>5,$11);}
+ {$$ = TrLinkChildren ($<n>3,1,$<n>5);}
| PARSEOP_ELSEIF '('
error ')' {$$ = AslDoError(); yyclearin;}
;
@@ -1430,6 +1528,7 @@ ReturnTerm
: PARSEOP_RETURN '(' {$$ = TrCreateLeafNode (PARSEOP_RETURN);}
OptionalTermArg
')' {$$ = TrLinkChildren ($<n>3,1,$4);}
+ | PARSEOP_RETURN {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_RETURN),0);}
| PARSEOP_RETURN '('
error ')' {$$ = AslDoError(); yyclearin;}
;
@@ -1496,8 +1595,8 @@ CaseTerm
DefaultTerm
: PARSEOP_DEFAULT '{' {$$ = TrCreateLeafNode (PARSEOP_DEFAULT);}
TermList '}' {$$ = TrLinkChildren ($<n>3,1,$4);}
- | PARSEOP_DEFAULT '('
- error ')' {$$ = AslDoError(); yyclearin;}
+ | PARSEOP_DEFAULT '{'
+ error '}' {$$ = AslDoError(); yyclearin;}
;
UnloadTerm
@@ -1902,6 +2001,14 @@ SubtractTerm
error ')' {$$ = AslDoError(); yyclearin;}
;
+TimerTerm
+ : PARSEOP_TIMER '(' {$$ = TrCreateLeafNode (PARSEOP_TIMER);}
+ ')' {$$ = TrLinkChildren ($<n>3,0);}
+ | PARSEOP_TIMER {$$ = TrLinkChildren (TrCreateLeafNode (PARSEOP_TIMER),0);}
+ | PARSEOP_TIMER '('
+ error ')' {$$ = AslDoError(); yyclearin;}
+ ;
+
ToBCDTerm
: PARSEOP_TOBCD '(' {$$ = TrCreateLeafNode (PARSEOP_TOBCD);}
TermArg
@@ -1957,6 +2064,13 @@ ToStringTerm
error ')' {$$ = AslDoError(); yyclearin;}
;
+ToUUIDTerm
+ : PARSEOP_TOUUID '('
+ StringData ')' {$$ = TrUpdateNode (PARSEOP_TOUUID, $3);}
+ | PARSEOP_TOUUID '('
+ error ')' {$$ = AslDoError(); yyclearin;}
+ ;
+
WaitTerm
: PARSEOP_WAIT '(' {$$ = TrCreateLeafNode (PARSEOP_WAIT);}
SuperName
@@ -2381,7 +2495,11 @@ ResourceMacroTerm
: DMATerm {}
| DWordIOTerm {}
| DWordMemoryTerm {}
+ | DWordSpaceTerm {}
| EndDependentFnTerm {}
+ | ExtendedIOTerm {}
+ | ExtendedMemoryTerm {}
+ | ExtendedSpaceTerm {}
| FixedIOTerm {}
| InterruptTerm {}
| IOTerm {}
@@ -2392,6 +2510,7 @@ ResourceMacroTerm
| Memory32Term {}
| QWordIOTerm {}
| QWordMemoryTerm {}
+ | QWordSpaceTerm {}
| RegisterTerm {}
| StartDependentFnTerm {}
| StartDependentFnNoPriTerm {}
@@ -2399,6 +2518,7 @@ ResourceMacroTerm
| VendorShortTerm {}
| WordBusNumberTerm {}
| WordIOTerm {}
+ | WordSpaceTerm {}
;
DMATerm
@@ -2458,6 +2578,28 @@ DWordMemoryTerm
error ')' {$$ = AslDoError(); yyclearin;}
;
+DWordSpaceTerm
+ : PARSEOP_DWORDSPACE '(' {$$ = TrCreateLeafNode (PARSEOP_DWORDSPACE);}
+ ByteConstExpr {$$ = UtCheckIntegerRange ($4, 0xC0, 0xFF);}
+ OptionalResourceType
+ OptionalDecodeType
+ OptionalMinType
+ OptionalMaxType
+ ',' ByteConstExpr
+ ',' DWordConstExpr
+ ',' DWordConstExpr
+ ',' DWordConstExpr
+ ',' DWordConstExpr
+ ',' DWordConstExpr
+ OptionalByteConstExpr
+ OptionalStringData
+ OptionalNameString_Last
+ ')' {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
+ | PARSEOP_DWORDSPACE '('
+ error ')' {$$ = AslDoError(); yyclearin;}
+ ;
+
+
EndDependentFnTerm
: PARSEOP_ENDDEPENDENTFN '('
')' {$$ = TrCreateLeafNode (PARSEOP_ENDDEPENDENTFN);}
@@ -2465,6 +2607,69 @@ EndDependentFnTerm
error ')' {$$ = AslDoError(); yyclearin;}
;
+ExtendedIOTerm
+ : PARSEOP_EXTENDEDIO '(' {$$ = TrCreateLeafNode (PARSEOP_EXTENDEDIO);}
+ OptionalResourceType_First
+ OptionalMinType
+ OptionalMaxType
+ OptionalDecodeType
+ OptionalRangeType
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ OptionalQWordConstExpr
+ OptionalNameString
+ OptionalType
+ OptionalTranslationType_Last
+ ')' {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$19,$20,$21,$22);}
+ | PARSEOP_EXTENDEDIO '('
+ error ')' {$$ = AslDoError(); yyclearin;}
+ ;
+
+ExtendedMemoryTerm
+ : PARSEOP_EXTENDEDMEMORY '(' {$$ = TrCreateLeafNode (PARSEOP_EXTENDEDMEMORY);}
+ OptionalResourceType_First
+ OptionalDecodeType
+ OptionalMinType
+ OptionalMaxType
+ OptionalMemType
+ ',' ReadWriteKeyword
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ OptionalQWordConstExpr
+ OptionalNameString
+ OptionalAddressRange
+ OptionalType_Last
+ ')' {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$7,$8,$10,$12,$14,$16,$18,$20,$21,$22,$23,$24);}
+ | PARSEOP_EXTENDEDMEMORY '('
+ error ')' {$$ = AslDoError(); yyclearin;}
+ ;
+
+ExtendedSpaceTerm
+ : PARSEOP_EXTENDEDSPACE '(' {$$ = TrCreateLeafNode (PARSEOP_EXTENDEDSPACE);}
+ ByteConstExpr {$$ = UtCheckIntegerRange ($4, 0xC0, 0xFF);}
+ OptionalResourceType
+ OptionalDecodeType
+ OptionalMinType
+ OptionalMaxType
+ ',' ByteConstExpr
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ OptionalQWordConstExpr
+ OptionalNameString_Last
+ ')' {$$ = TrLinkChildren ($<n>3,13,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23);}
+ | PARSEOP_EXTENDEDSPACE '('
+ error ')' {$$ = AslDoError(); yyclearin;}
+ ;
+
FixedIOTerm
: PARSEOP_FIXEDIO '(' {$$ = TrCreateLeafNode (PARSEOP_FIXEDIO);}
WordConstExpr
@@ -2606,6 +2811,27 @@ QWordMemoryTerm
error ')' {$$ = AslDoError(); yyclearin;}
;
+QWordSpaceTerm
+ : PARSEOP_QWORDSPACE '(' {$$ = TrCreateLeafNode (PARSEOP_QWORDSPACE);}
+ ByteConstExpr {$$ = UtCheckIntegerRange ($4, 0xC0, 0xFF);}
+ OptionalResourceType
+ OptionalDecodeType
+ OptionalMinType
+ OptionalMaxType
+ ',' ByteConstExpr
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ ',' QWordConstExpr
+ OptionalByteConstExpr
+ OptionalStringData
+ OptionalNameString_Last
+ ')' {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
+ | PARSEOP_QWORDSPACE '('
+ error ')' {$$ = AslDoError(); yyclearin;}
+ ;
+
RegisterTerm
: PARSEOP_REGISTER '(' {$$ = TrCreateLeafNode (PARSEOP_REGISTER);}
AddressSpaceKeyword
@@ -2694,6 +2920,27 @@ WordIOTerm
error ')' {$$ = AslDoError(); yyclearin;}
;
+WordSpaceTerm
+ : PARSEOP_WORDSPACE '(' {$$ = TrCreateLeafNode (PARSEOP_WORDSPACE);}
+ ByteConstExpr {$$ = UtCheckIntegerRange ($4, 0xC0, 0xFF);}
+ OptionalResourceType
+ OptionalDecodeType
+ OptionalMinType
+ OptionalMaxType
+ ',' ByteConstExpr
+ ',' WordConstExpr
+ ',' WordConstExpr
+ ',' WordConstExpr
+ ',' WordConstExpr
+ ',' WordConstExpr
+ OptionalByteConstExpr
+ OptionalStringData
+ OptionalNameString_Last
+ ')' {$$ = TrLinkChildren ($<n>3,14,$4,$6,$7,$8,$9,$11,$13,$15,$17,$19,$21,$22,$23,$24);}
+ | PARSEOP_WORDSPACE '('
+ error ')' {$$ = AslDoError(); yyclearin;}
+ ;
+
/******* Object References ***********************************************/
@@ -2788,6 +3035,12 @@ OptionalObjectTypeKeyword
| ',' ObjectTypeKeyword {$$ = $2;}
;
+OptionalQWordConstExpr
+ : {$$ = NULL;}
+ | ',' {$$ = NULL;}
+ | ',' QWordConstExpr {$$ = $2;}
+ ;
+
OptionalRangeType
: ',' {$$ = NULL;}
| ',' RangeTypeKeyword {$$ = $2;}
@@ -2805,6 +3058,12 @@ OptionalResourceType_First
| ResourceTypeKeyword {$$ = $1;}
;
+OptionalResourceType
+ : {$$ = NULL;}
+ | ',' {$$ = NULL;}
+ | ',' ResourceTypeKeyword {$$ = $2;}
+ ;
+
OptionalSerializeRuleKeyword
: {$$ = NULL;}
| ',' {$$ = NULL;}
diff --git a/sys/contrib/dev/acpica/compiler/aslglobal.h b/sys/contrib/dev/acpica/compiler/aslglobal.h
index 199178f..6dfe3cb 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: 43 $
+ * $Revision: 44 $
*
*****************************************************************************/
@@ -225,6 +225,7 @@ ASL_EXTERN UINT32 ASL_INIT_GLOBAL (TotalFolds, 0);
/* Misc */
+ASL_EXTERN UINT8 ASL_INIT_GLOBAL (Gbl_RevisionOverride, 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);
diff --git a/sys/contrib/dev/acpica/compiler/aslmain.c b/sys/contrib/dev/acpica/compiler/aslmain.c
index 203a6e7..8d82026 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: 76 $
+ * $Revision: 77 $
*
*****************************************************************************/
@@ -161,16 +161,17 @@ Options (
printf (" -vr Disable remarks\n");
printf (" -vs Disable signon\n");
- printf ("\nAML Output:\n");
+ printf ("\nAML Output Files:\n");
printf (" -s<a|c> Create AML in assembler or C source file (*.asm or *.c)\n");
printf (" -i<a|c> Create assembler or C include file (*.inc or *.h)\n");
printf (" -t<a|c> Create AML in assembler or C hex table (*.hex)\n");
- printf ("\nAML Optimization:\n");
+ printf ("\nAML Code Generation:\n");
printf (" -oa Disable all optimizations (compatibility mode)\n");
printf (" -of Disable constant folding\n");
printf (" -oi Disable integer optimization to Zero/One/Ones\n");
printf (" -on Disable named reference string optimization\n");
+ printf (" -r<Revision> Override table header Revision (1-255)\n");
printf ("\nListings:\n");
printf (" -l Create mixed listing file (ASL source and AML) (*.lst)\n");
@@ -321,8 +322,13 @@ AslCommandLine (
/* Get the command line options */
- while ((j = AcpiGetopt (argc, argv, "b:cd^efgh^i^l^o:p:rs:t:v:x:")) != EOF) switch (j)
+ while ((j = AcpiGetopt (argc, argv, "ab:cd^efgh^i^l^o:p:r:s:t:v:x:")) != EOF) switch (j)
{
+ case 'a':
+ AslToFile = FALSE;
+ break;
+
+
case 'b':
switch (AcpiGbl_Optarg[0])
@@ -544,7 +550,7 @@ AslCommandLine (
case 'r':
- AslToFile = FALSE;
+ Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0);
break;
diff --git a/sys/contrib/dev/acpica/compiler/aslmap.c b/sys/contrib/dev/acpica/compiler/aslmap.c
index d631dd4..b0927f6 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: 71 $
+ * $Revision: 76 $
*
*****************************************************************************/
@@ -209,7 +209,12 @@ const ASL_RESERVED_INFO ReservedMethods[] = {
{"_AL7", 0, ASL_RSVD_RETURN_VALUE},
{"_AL8", 0, ASL_RSVD_RETURN_VALUE},
{"_AL9", 0, ASL_RSVD_RETURN_VALUE},
+ {"_ALC", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
+ {"_ALI", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_ALN", 0, ASL_RSVD_RESOURCE_NAME},
+ {"_ALP", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
+ {"_ALR", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
+ {"_ALT", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_ASI", 0, ASL_RSVD_RESOURCE_NAME},
{"_BAS", 0, ASL_RSVD_RESOURCE_NAME},
{"_BBN", 0, ASL_RSVD_RETURN_VALUE},
@@ -218,12 +223,19 @@ const ASL_RESERVED_INFO ReservedMethods[] = {
{"_BDN", 0, ASL_RSVD_RETURN_VALUE},
{"_BFS", 1, 0},
{"_BIF", 0, ASL_RSVD_RETURN_VALUE},
+ {"_BLT", 3, 0}, /* Acpi 3.0 */
{"_BM_", 0, ASL_RSVD_RESOURCE_NAME},
+ {"_BMC", 1, 0}, /* Acpi 3.0 */
+ {"_BMD", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
+ {"_BQC", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_BST", 0, ASL_RSVD_RETURN_VALUE},
+ {"_BTM", 1, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_BTP", 1, 0},
+ {"_CBA", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_CID", 0, ASL_RSVD_RETURN_VALUE},
{"_CRS", 0, ASL_RSVD_RETURN_VALUE},
{"_CRT", 0, ASL_RSVD_RETURN_VALUE},
+ {"_CSD", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_CST", 0, ASL_RSVD_RETURN_VALUE},
{"_DCK", 1, ASL_RSVD_RETURN_VALUE},
{"_DCS", 0, ASL_RSVD_RETURN_VALUE},
@@ -235,7 +247,9 @@ const ASL_RESERVED_INFO ReservedMethods[] = {
{"_DMA", 0, ASL_RSVD_RETURN_VALUE},
{"_DOD", 0, ASL_RSVD_RETURN_VALUE},
{"_DOS", 1, 0},
+ {"_DSM", 4, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_DSS", 1, 0},
+ {"_DSW", 3, 0}, /* Acpi 3.0 */
{"_EC_", 0, ASL_RSVD_RETURN_VALUE},
{"_EDL", 0, ASL_RSVD_RETURN_VALUE},
{"_EJ0", 1, 0},
@@ -244,6 +258,7 @@ const ASL_RESERVED_INFO ReservedMethods[] = {
{"_EJ3", 1, 0},
{"_EJ4", 1, 0},
{"_EJD", 0, ASL_RSVD_RETURN_VALUE},
+ {"_ERR", 2, ASL_RSVD_RETURN_VALUE},
{"_FDE", 0, ASL_RSVD_RETURN_VALUE},
{"_FDI", 0, ASL_RSVD_RETURN_VALUE},
{"_FDM", 1, 0},
@@ -253,6 +268,7 @@ const ASL_RESERVED_INFO ReservedMethods[] = {
{"_GPD", 0, ASL_RSVD_RETURN_VALUE},
{"_GPE", 0, ASL_RSVD_RETURN_VALUE},
{"_GRA", 0, ASL_RSVD_RESOURCE_NAME},
+ {"_GSB", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_GTF", 0, ASL_RSVD_RETURN_VALUE},
{"_GTM", 0, ASL_RSVD_RETURN_VALUE},
{"_GTS", 1, 0},
@@ -260,6 +276,8 @@ const ASL_RESERVED_INFO ReservedMethods[] = {
{"_HID", 0, ASL_RSVD_RETURN_VALUE},
{"_HOT", 0, ASL_RSVD_RETURN_VALUE},
{"_HPP", 0, ASL_RSVD_RETURN_VALUE},
+ {"_HPX", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
+ {"_IFT", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_INI", 0, 0},
{"_INT", 0, ASL_RSVD_RESOURCE_NAME},
{"_IRC", 0, 0},
@@ -273,16 +291,21 @@ const ASL_RESERVED_INFO ReservedMethods[] = {
{"_MEM", 0, ASL_RSVD_RESOURCE_NAME},
{"_MIF", 0, ASL_RSVD_RESOURCE_NAME},
{"_MIN", 0, ASL_RSVD_RESOURCE_NAME},
+ {"_MLS", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_MSG", 1, 0},
{"_OFF", 0, 0},
{"_ON_", 0, 0},
{"_OS_", 0, ASL_RSVD_RETURN_VALUE},
+ {"_OSC", 4, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_OSI", 1, ASL_RSVD_RETURN_VALUE},
+ {"_OST", 3, 0}, /* Acpi 3.0 */
{"_PCL", 0, ASL_RSVD_RETURN_VALUE},
{"_PCT", 0, ASL_RSVD_RETURN_VALUE},
{"_PDC", 1, 0},
{"_PIC", 1, 0},
+ {"_PLD", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_PPC", 0, ASL_RSVD_RETURN_VALUE},
+ {"_PPE", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_PR0", 0, ASL_RSVD_RETURN_VALUE},
{"_PR1", 0, ASL_RSVD_RETURN_VALUE},
{"_PR2", 0, ASL_RSVD_RETURN_VALUE},
@@ -294,6 +317,7 @@ const ASL_RESERVED_INFO ReservedMethods[] = {
{"_PS2", 0, 0},
{"_PS3", 0, 0},
{"_PSC", 0, ASL_RSVD_RETURN_VALUE},
+ {"_PSD", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_PSL", 0, ASL_RSVD_RETURN_VALUE},
{"_PSR", 0, ASL_RSVD_RETURN_VALUE},
{"_PSS", 0, ASL_RSVD_RETURN_VALUE},
@@ -309,6 +333,8 @@ const ASL_RESERVED_INFO ReservedMethods[] = {
{"_RMV", 0, ASL_RSVD_RETURN_VALUE},
{"_RNG", 0, ASL_RSVD_RESOURCE_NAME},
{"_ROM", 2, ASL_RSVD_RETURN_VALUE},
+ {"_RT_", 0, ASL_RSVD_RESOURCE_NAME}, /* Acpi 3.0 */
+ {"_RTV", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_RW_", 0, ASL_RSVD_RESOURCE_NAME},
{"_S0_", 0, ASL_RSVD_RETURN_VALUE},
{"_S1_", 0, ASL_RSVD_RETURN_VALUE},
@@ -320,32 +346,53 @@ const ASL_RESERVED_INFO ReservedMethods[] = {
{"_S2D", 0, ASL_RSVD_RETURN_VALUE},
{"_S3D", 0, ASL_RSVD_RETURN_VALUE},
{"_S4D", 0, ASL_RSVD_RETURN_VALUE},
+ {"_S0W", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
+ {"_S1W", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
+ {"_S2W", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
+ {"_S3W", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
+ {"_S4W", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_SB_", 0, ASL_RSVD_SCOPE},
{"_SBS", 0, ASL_RSVD_RETURN_VALUE},
{"_SCP", 1, 0},
+ {"_SDD", 1, 0}, /* Acpi 3.0 */
{"_SEG", 0, ASL_RSVD_RETURN_VALUE},
{"_SHR", 0, ASL_RSVD_RESOURCE_NAME},
{"_SI_", 0, ASL_RSVD_SCOPE},
{"_SIZ", 0, ASL_RSVD_RESOURCE_NAME},
+ {"_SLI", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_SPD", 1, ASL_RSVD_RETURN_VALUE},
{"_SRS", 1, 0},
+ {"_SRV", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_SST", 1, 0},
{"_STA", 0, ASL_RSVD_RETURN_VALUE},
{"_STM", 3, 0},
{"_STR", 0, ASL_RSVD_RETURN_VALUE},
{"_SUN", 0, ASL_RSVD_RETURN_VALUE},
+ {"_SWS", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_TC1", 0, ASL_RSVD_RETURN_VALUE},
{"_TC2", 0, ASL_RSVD_RETURN_VALUE},
{"_TMP", 0, ASL_RSVD_RETURN_VALUE},
+ {"_TPC", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
+ {"_TPT", 1, 0}, /* Acpi 3.0 */
{"_TRA", 0, ASL_RSVD_RESOURCE_NAME},
{"_TRS", 0, ASL_RSVD_RESOURCE_NAME},
+ {"_TRT", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
+ {"_TSD", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
+ {"_TSF", 0, ASL_RSVD_RESOURCE_NAME}, /* Acpi 3.0 */
{"_TSP", 0, ASL_RSVD_RETURN_VALUE},
+ {"_TSS", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
+ {"_TST", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_TTP", 0, ASL_RSVD_RESOURCE_NAME},
+ {"_TTS", 1, 0}, /* Acpi 3.0 */
{"_TYP", 0, ASL_RSVD_RESOURCE_NAME},
{"_TZ_", 0, ASL_RSVD_SCOPE},
{"_TZD", 0, ASL_RSVD_RETURN_VALUE},
+ {"_TZM", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_TZP", 0, ASL_RSVD_RETURN_VALUE},
{"_UID", 0, ASL_RSVD_RETURN_VALUE},
+ {"_UPC", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
+ {"_UPD", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
+ {"_UPP", 0, ASL_RSVD_RETURN_VALUE}, /* Acpi 3.0 */
{"_VPO", 0, ASL_RSVD_RETURN_VALUE},
{"_WAK", 1, ASL_RSVD_RETURN_VALUE},
{NULL, 0, 0},
@@ -497,12 +544,16 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
/* DWORDCONST */ OP_TABLE_ENTRY (AML_RAW_DATA_DWORD, 0, 0, ACPI_BTYPE_INTEGER),
/* DWORDIO */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
/* DWORDMEMORY */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
+/* DWORDSPACE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
/* EISAID */ OP_TABLE_ENTRY (AML_DWORD_OP, 0, 0, ACPI_BTYPE_INTEGER),
/* ELSE */ OP_TABLE_ENTRY (AML_ELSE_OP, 0, NODE_AML_PACKAGE, 0),
/* ELSEIF */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, NODE_AML_PACKAGE, 0),
/* ENDDEPENDENTFN */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
/* ERRORNODE */ OP_TABLE_ENTRY (AML_NOOP_OP, 0, 0, 0),
/* EVENT */ OP_TABLE_ENTRY (AML_EVENT_OP, 0, 0, 0),
+/* EXTENDEDIO */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
+/* EXTENDEDMEMORY */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
+/* EXTENDEDSPACE */ OP_TABLE_ENTRY (AML_RAW_DATA_QWORD, 0, 0, ACPI_BTYPE_INTEGER),
/* EXTERNAL */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
/* FATAL */ OP_TABLE_ENTRY (AML_FATAL_OP, 0, 0, 0),
/* FIELD */ OP_TABLE_ENTRY (AML_FIELD_OP, 0, NODE_AML_PACKAGE, 0),
@@ -510,6 +561,7 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
/* FINDSETRIGHTBIT */ OP_TABLE_ENTRY (AML_FIND_SET_RIGHT_BIT_OP, 0, 0, ACPI_BTYPE_INTEGER),
/* FIXEDIO */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
/* FROMBCD */ OP_TABLE_ENTRY (AML_FROM_BCD_OP, 0, 0, ACPI_BTYPE_INTEGER),
+/* FUNCTION */ OP_TABLE_ENTRY (AML_METHOD_OP, 0, NODE_AML_PACKAGE, 0),
/* IF */ OP_TABLE_ENTRY (AML_IF_OP, 0, NODE_AML_PACKAGE, 0),
/* INCLUDE */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
/* INCLUDE_CSTYLE */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
@@ -610,6 +662,7 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
/* QWORDCONST */ OP_TABLE_ENTRY (AML_RAW_DATA_QWORD, 0, 0, ACPI_BTYPE_INTEGER),
/* QWORDIO */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
/* QWORDMEMORY */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
+/* QWORDSPACE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
/* RANGE_TYPE_ENTIRE */ OP_TABLE_ENTRY (AML_BYTE_OP, 3, 0, 0),
/* RANGE_TYPE_ISAONLY */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0),
/* RANGE_TYPE_NONISAONLY */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0),
@@ -651,12 +704,14 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
/* SUBTRACT */ OP_TABLE_ENTRY (AML_SUBTRACT_OP, 0, 0, ACPI_BTYPE_INTEGER),
/* SWITCH */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
/* 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),
/* 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),
/* TOSTRING */ OP_TABLE_ENTRY (AML_TO_STRING_OP, 0, 0, ACPI_BTYPE_STRING),
+/* TOUUID */ OP_TABLE_ENTRY (AML_DWORD_OP, 0, NODE_AML_PACKAGE, ACPI_BTYPE_INTEGER),
/* TRANSLATIONTYPE_DENSE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
/* TRANSLATIONTYPE_SPARSE */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0),
/* TYPE_STATIC */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
@@ -674,6 +729,7 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
/* WORDBUSNUMBER */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
/* WORDCONST */ OP_TABLE_ENTRY (AML_RAW_DATA_WORD, 0, 0, ACPI_BTYPE_INTEGER),
/* WORDIO */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
+/* WORDSPACE */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
/* XFERTYPE_8 */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
/* XFERTYPE_8_16 */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0),
/* XFERTYPE_16 */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0),
diff --git a/sys/contrib/dev/acpica/compiler/aslopcodes.c b/sys/contrib/dev/acpica/compiler/aslopcodes.c
index e838d7b..4f2033b 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: 55 $
+ * $Revision: 60 $
*
*****************************************************************************/
@@ -206,6 +206,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 (Op->Asl.Parent &&
+ Op->Asl.Parent->Asl.Parent &&
+ (Op->Asl.Parent->Asl.Parent->Asl.ParseOpcode == PARSEOP_DEFINITIONBLOCK))
+ {
+ return 0;
+ }
+*/
+
/*
* Check for the special AML integers first - Zero, One, Ones.
* These are single-byte opcodes that are the smallest possible
@@ -407,7 +419,6 @@ OpcDoUnicode (
*
* RETURN: None
*
- *
* DESCRIPTION: Convert a string EISA ID to numeric representation. See the
* Pnp BIOS Specification for details. Here is an excerpt:
*
@@ -464,11 +475,11 @@ OpcDoEisaId (
for (i = 0; i < 7; i++)
{
- /* First 3 characters must be letters */
+ /* First 3 characters must be uppercase letters */
if (i < 3)
{
- if (!isalpha (InString[i]))
+ if (!isupper (InString[i]))
{
Status = AE_BAD_PARAMETER;
}
@@ -523,6 +534,102 @@ OpcDoEisaId (
/*******************************************************************************
*
+ * FUNCTION: OpcDoUiId
+ *
+ * PARAMETERS: Op - Parse node
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION:
+ *
+ ******************************************************************************/
+
+static UINT8 OpcMapToUUID[16] = {6,4,2,0,11,9,16,14,19,21,24,26,28,30,32,34};
+
+void
+OpcDoUuId (
+ ACPI_PARSE_OBJECT *Op)
+{
+ char *InString;
+ char *Buffer;
+ ACPI_STATUS Status = AE_OK;
+ ACPI_NATIVE_UINT i;
+ ACPI_PARSE_OBJECT *NewOp;
+
+
+ InString = (char *) Op->Asl.Value.String;
+
+ if (ACPI_STRLEN (InString) != 36)
+ {
+ Status = AE_BAD_PARAMETER;
+ }
+ else
+ {
+ /* Check all 36 characters for correct format */
+
+ for (i = 0; i < 36; i++)
+ {
+ if ((i == 8) || (i == 13) || (i == 18) || (i == 23))
+ {
+ if (InString[i] != '-')
+ {
+ Status = AE_BAD_PARAMETER;
+ }
+ }
+ else
+ {
+ if (!isxdigit (InString[i]))
+ {
+ Status = AE_BAD_PARAMETER;
+ }
+ }
+ }
+ }
+
+ Buffer = UtLocalCalloc (16);
+
+ if (ACPI_FAILURE (Status))
+ {
+ AslError (ASL_ERROR, ASL_MSG_INVALID_UUID, Op, Op->Asl.Value.String);
+ }
+ else for (i = 0; i < 16; i++)
+ {
+ 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 */
+ UtSetParseOpName (Op);
+
+ /* Child node is the buffer length */
+
+ NewOp = TrAllocateNode (PARSEOP_INTEGER);
+
+ NewOp->Asl.AmlOpcode = AML_BYTE_OP;
+ NewOp->Asl.Value.Integer = 16;
+ NewOp->Asl.Parent = Op;
+
+ Op->Asl.Child = NewOp;
+ Op = NewOp;
+
+ /* Peer to the child is the raw buffer data */
+
+ NewOp = TrAllocateNode (PARSEOP_RAW_DATA);
+ NewOp->Asl.AmlOpcode = AML_RAW_DATA_BUFFER;
+ NewOp->Asl.AmlLength = 16;
+ NewOp->Asl.Value.String = (char *) Buffer;
+ NewOp->Asl.Parent = Op->Asl.Parent;
+
+ Op->Asl.Next = NewOp;
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: OpcGenerateAmlOpcode
*
* PARAMETERS: Op - Parse node
@@ -580,6 +687,11 @@ OpcGenerateAmlOpcode (
OpcDoEisaId (Op);
break;
+ case PARSEOP_TOUUID:
+
+ OpcDoUuId (Op);
+ break;
+
case PARSEOP_UNICODE:
OpcDoUnicode (Op);
diff --git a/sys/contrib/dev/acpica/compiler/aslopt.c b/sys/contrib/dev/acpica/compiler/aslopt.c
index 5aeea27..f0416d8 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: 13 $
+ * $Revision: 16 $
*
*****************************************************************************/
@@ -211,8 +211,11 @@ OptSearchToRoot (
*NewPath = ACPI_MEM_CALLOCATE (ACPI_NAME_SIZE + 1);
ACPI_STRCPY (*NewPath, Path);
- AslError (ASL_OPTIMIZATION, ASL_MSG_SINGLE_NAME_OPTIMIZATION, Op,
- *NewPath);
+ if (ACPI_STRNCMP (*NewPath, "_T_", 3))
+ {
+ AslError (ASL_OPTIMIZATION, ASL_MSG_SINGLE_NAME_OPTIMIZATION, Op,
+ *NewPath);
+ }
return (AE_OK);
}
@@ -354,6 +357,15 @@ OptBuildShortestPath (
* of the current path. We must include one more NameSeg of the target path
*/
Index -= ACPI_PATH_SEGMENT_LENGTH;
+
+ /* Special handling for Scope() operator */
+
+ if (Op->Asl.AmlOpcode == AML_SCOPE_OP)
+ {
+ NewPathExternal[i] = '^';
+ i++;
+ ACPI_DEBUG_PRINT_RAW ((ACPI_DB_OPTIMIZATIONS, "(EXTRA ^)"));
+ }
}
ACPI_STRCPY (&NewPathExternal[i], &((char *) TargetPath->Pointer)[Index]);
@@ -581,7 +593,7 @@ OptOptimizeNamePath (
/* Various required items */
- if (!TargetNode || !WalkState || !Op->Common.Parent)
+ if (!TargetNode || !WalkState || !AmlNameString || !Op->Common.Parent)
{
return_VOID;
}
diff --git a/sys/contrib/dev/acpica/compiler/asltransform.c b/sys/contrib/dev/acpica/compiler/asltransform.c
index fc771d5..f05f2f7 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: 20 $
+ * $Revision: 25 $
*
*****************************************************************************/
@@ -131,7 +131,7 @@
*
* RETURN: A pointer to the second character of the name
*
- * DESCRIPTION: Generate an ACPI name of the form _Txx. These names are
+ * DESCRIPTION: Generate an ACPI name of the form _T_x. These names are
* reserved for use by the ASL compiler.
*
******************************************************************************/
@@ -143,7 +143,7 @@ TrAmlGetNextTempName (
char *TempName;
- if (Gbl_TempCount > 255)
+ if (Gbl_TempCount > (9+26+26))
{
/* Too many temps */
/* TBD: issue eror message */
@@ -152,14 +152,27 @@ TrAmlGetNextTempName (
}
TempName = UtLocalCalloc (6);
- UtConvertByteToHex ((UINT8) Gbl_TempCount, (UINT8 *) &TempName [1]);
+
+ if (Gbl_TempCount < 9)
+ {
+ TempName[4] = (char) (Gbl_TempCount + 0x30);
+ }
+ else if (Gbl_TempCount < (9 + 26))
+ {
+ TempName[4] = (char) (Gbl_TempCount + 0x41);
+ }
+ else
+ {
+ TempName[4] = (char) (Gbl_TempCount + 0x61);
+ }
Gbl_TempCount++;
- /* First three characters are always "\_T" */
+ /* First four characters are always "\_T_" */
TempName[0] = '\\';
TempName[1] = '_';
TempName[2] = 'T';
+ TempName[3] = '_';
*NamePath = TempName;
return (&TempName[1]);
@@ -326,10 +339,6 @@ TrTransformSubtree (
TrDoDefinitionBlock (Op);
break;
- case PARSEOP_ELSEIF:
- TrDoElseif (Op);
- break;
-
case PARSEOP_SWITCH:
TrDoSwitch (Op);
break;
@@ -375,59 +384,6 @@ TrDoDefinitionBlock (
/*******************************************************************************
*
- * FUNCTION: TrDoElseif
- *
- * PARAMETERS: Op - Parse node for ELSEIF
- *
- * RETURN: None
- *
- * DESCRIPTION: Transform an Elseif into an Else and If AML opcode pair.
- * There is no AML opcode for ELSEIF -- it must be simulated
- * with an if/else pair.
- *
- ******************************************************************************/
-
-void
-TrDoElseif (
- ACPI_PARSE_OBJECT *ElseNode)
-{
- ACPI_PARSE_OBJECT *IfNode = NULL;
- ACPI_PARSE_OBJECT *NextNode;
-
-
- /* Change the ELSEIF into an ELSE */
-
- TrAmlInitNode (ElseNode, PARSEOP_ELSE);
-
- /* Create a new IF node */
-
- IfNode = TrCreateLeafNode (PARSEOP_IF);
- IfNode->Asl.Parent = ElseNode;
- TrAmlInitLineNumbers (IfNode, ElseNode);
-
- /* Insert the the IF node first in the ELSE child list */
-
- IfNode->Asl.Child = ElseNode->Asl.Child;
- ElseNode->Asl.Child = IfNode;
-
- /* Go to the end of the IF <Predicate><TermList> block */
-
- NextNode = IfNode->Asl.Child; /* Next = Predicate */
- NextNode = NextNode->Asl.Next; /* Nest = TermList */
-
- /* Make the next node after the IF the rest of the original tree */
-
- IfNode->Asl.Next = NextNode->Asl.Next;
-
- /* Terminate the IF subtree and set IF node as the parent for all nodes */
-
- NextNode->Asl.Next = NULL;
- TrAmlSetSubtreeParent (IfNode->Asl.Child, IfNode);
-}
-
-
-/*******************************************************************************
- *
* FUNCTION: TrDoSwitch
*
* PARAMETERS: StartNode - Parse node for SWITCH
@@ -493,34 +449,96 @@ TrDoSwitch (
Conditional = CaseOp;
CaseBlock = CaseOp->Asl.Child->Asl.Next;
Conditional->Asl.Child->Asl.Next = NULL;
+ Predicate = CaseOp->Asl.Child;
- /*
- * change CaseOp() to: If (PredicateValue == CaseValue) {...}
- * 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));
+ if (Predicate->Asl.ParseOpcode == PARSEOP_PACKAGE)
+ {
+ AcpiOsPrintf ("Package\n");
- Predicate = CaseOp->Asl.Child;
- Predicate->Asl.Next = NewOp;
- TrAmlInitLineNumbers (NewOp, Predicate);
+ /*
+ * Convert the package declaration to this form:
+ *
+ * If (LNotEqual (Match (Package(){4}, MEQ, _Txx, MTR, 0, 0), Ones))
+ */
+ NewOp2 = TrCreateLeafNode (PARSEOP_MATCHTYPE_MEQ);
+ Predicate->Asl.Next = NewOp2;
+ TrAmlInitLineNumbers (NewOp2, Conditional);
+
+ NewOp = NewOp2;
+ NewOp2 = TrCreateValuedLeafNode (PARSEOP_NAMESTRING,
+ (ACPI_INTEGER) ACPI_TO_INTEGER (PredicateValuePath));
+ NewOp->Asl.Next = NewOp2;
+ TrAmlInitLineNumbers (NewOp2, Predicate);
+
+ NewOp = NewOp2;
+ NewOp2 = TrCreateLeafNode (PARSEOP_MATCHTYPE_MTR);
+ NewOp->Asl.Next = NewOp2;
+ TrAmlInitLineNumbers (NewOp2, Predicate);
+
+ NewOp = NewOp2;
+ NewOp2 = TrCreateLeafNode (PARSEOP_ZERO);
+ NewOp->Asl.Next = NewOp2;
+ TrAmlInitLineNumbers (NewOp2, Predicate);
+
+ NewOp = NewOp2;
+ NewOp2 = TrCreateLeafNode (PARSEOP_ZERO);
+ NewOp->Asl.Next = NewOp2;
+ TrAmlInitLineNumbers (NewOp2, Predicate);
+
+ NewOp2 = TrCreateLeafNode (PARSEOP_MATCH);
+ NewOp2->Asl.Child = Predicate; /* PARSEOP_PACKAGE */
+ TrAmlInitLineNumbers (NewOp2, Conditional);
+ TrAmlSetSubtreeParent (Predicate, NewOp2);
+
+ NewOp = NewOp2;
+ NewOp2 = TrCreateLeafNode (PARSEOP_ONES);
+ NewOp->Asl.Next = NewOp2;
+ TrAmlInitLineNumbers (NewOp2, Conditional);
+
+ NewOp2 = TrCreateLeafNode (PARSEOP_LEQUAL);
+ NewOp2->Asl.Child = NewOp;
+ NewOp->Asl.Parent = NewOp2;
+ TrAmlInitLineNumbers (NewOp2, Conditional);
+ TrAmlSetSubtreeParent (NewOp, NewOp2);
+
+ NewOp = NewOp2;
+ NewOp2 = TrCreateLeafNode (PARSEOP_LNOT);
+ NewOp2->Asl.Child = NewOp;
+ NewOp2->Asl.Parent = Conditional;
+ NewOp->Asl.Parent = NewOp2;
+ TrAmlInitLineNumbers (NewOp2, Conditional);
+
+ Conditional->Asl.Child = NewOp2;
+ NewOp2->Asl.Next = CaseBlock;
+ }
+ else
+ {
+ /*
+ * Change CaseOp() to: If (PredicateValue == CaseValue) {...}
+ * 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;
+ TrAmlInitLineNumbers (NewOp, Predicate);
- NewOp2 = TrCreateLeafNode (PARSEOP_LEQUAL);
- NewOp2->Asl.Parent = Conditional;
- NewOp2->Asl.Child = Predicate;
- TrAmlInitLineNumbers (NewOp2, Conditional);
+ NewOp2 = TrCreateLeafNode (PARSEOP_LEQUAL);
+ NewOp2->Asl.Parent = Conditional;
+ NewOp2->Asl.Child = Predicate;
+ TrAmlInitLineNumbers (NewOp2, Conditional);
- TrAmlSetSubtreeParent (Predicate, NewOp2);
+ TrAmlSetSubtreeParent (Predicate, NewOp2);
- Predicate = NewOp2;
- Predicate->Asl.Next = CaseBlock;
+ Predicate = NewOp2;
+ Predicate->Asl.Next = CaseBlock;
- TrAmlSetSubtreeParent (Predicate, Conditional);
+ TrAmlSetSubtreeParent (Predicate, Conditional);
+ Conditional->Asl.Child = Predicate;
+ }
/* Reinitialize the CASE node to an IF node */
- Conditional->Asl.Child = Predicate;
TrAmlInitNode (Conditional, PARSEOP_IF);
/*
@@ -550,7 +568,12 @@ TrDoSwitch (
{
if (DefaultOp)
{
- /* More than one Default */
+ /*
+ * More than one Default
+ * (Parser should catch this, should not get here)
+ */
+ AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Next,
+ "Found more than one Default()");
}
/* Save the DEFAULT node for later, after CASEs */
@@ -559,7 +582,7 @@ TrDoSwitch (
}
else
{
- /* Unkown peer opcode */
+ /* Unknown peer opcode */
printf ("Unknown parse opcode for switch statement: %s (%d)\n",
Next->Asl.ParseOpName, Next->Asl.ParseOpcode);
@@ -567,30 +590,36 @@ TrDoSwitch (
}
/*
- * Add the default 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 */
+
if (CaseOp)
{
- /* Add an ELSE first */
+ /* Convert the DEFAULT node to an ELSE */
TrAmlInitNode (DefaultOp, PARSEOP_ELSE);
DefaultOp->Asl.Parent = Conditional->Asl.Parent;
- }
- else
- {
- /* There were no CASE statements, no ELSE needed */
- TrAmlInsertPeer (CurrentParentNode, DefaultOp->Asl.Child);
+ /* Link ELSE node as a peer to the previous IF */
+
+ TrAmlInsertPeer (Conditional, DefaultOp);
}
}
+ if (!CaseOp)
+ {
+ AslError (ASL_ERROR, ASL_MSG_NO_CASES, StartNode, NULL);
+ }
+
/*
* Add a NAME node for the temp integer
*/
NewOp = TrCreateLeafNode (PARSEOP_NAME);
NewOp->Asl.Parent = Gbl_FirstLevelInsertionNode->Asl.Parent;
+ NewOp->Asl.CompileFlags |= NODE_COMPILER_EMITTED;
NewOp2 = TrCreateValuedLeafNode (PARSEOP_NAMESTRING,
(ACPI_INTEGER) ACPI_TO_INTEGER (PredicateValueName));
@@ -612,8 +641,6 @@ TrDoSwitch (
TrAmlInitNode (StartNode, PARSEOP_STORE);
Predicate = StartNode->Asl.Child;
- Predicate->Asl.Child = NULL;
-
NewOp = TrCreateValuedLeafNode (PARSEOP_NAMESTRING,
(ACPI_INTEGER) ACPI_TO_INTEGER (PredicateValuePath));
NewOp->Asl.Parent = StartNode;
diff --git a/sys/contrib/dev/acpica/compiler/asltypes.h b/sys/contrib/dev/acpica/compiler/asltypes.h
index 5f1bcb3..ae7876c 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: 62 $
+ * $Revision: 65 $
*
*****************************************************************************/
@@ -149,6 +149,7 @@
#define NODE_IS_TERM_ARG 0x00004000
#define NODE_WAS_ONES_OP 0x00008000
#define NODE_IS_NAME_DECLARATION 0x00010000
+#define NODE_COMPILER_EMITTED 0x00020000
/* Keeps information about individual control methods */
@@ -157,6 +158,8 @@ typedef struct asl_method_info
UINT8 NumArguments;
UINT8 LocalInitialized[ACPI_METHOD_NUM_LOCALS];
UINT8 ArgInitialized[ACPI_METHOD_NUM_ARGS];
+ UINT32 ValidArgTypes[ACPI_METHOD_NUM_ARGS];
+ UINT32 ValidReturnTypes;
UINT32 NumReturnNoValue;
UINT32 NumReturnWithValue;
ACPI_PARSE_OBJECT *Op;
@@ -387,7 +390,10 @@ typedef enum
ASL_MSG_EARLY_EOF,
ASL_MSG_SCOPE_FWD_REF,
ASL_MSG_NON_ASCII,
- ASL_MSG_INVALID_TIME
+ ASL_MSG_INVALID_TIME,
+ ASL_MSG_DUPLICATE_CASE,
+ ASL_MSG_NO_CASES,
+ ASL_MSG_INVALID_UUID
} ASL_MESSAGE_IDS;
@@ -477,7 +483,12 @@ char *AslMessages [] = {
/* 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_INVALID_TIME */ "Time parameter too long (255 max)"
+/* ASL_MSG_INVALID_TIME */ "Time parameter too long (255 max)",
+/* ASL_MSG_DUPLICATE_CASE */ "Case value already specified",
+/* 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\""
+
+
};
OpenPOWER on IntegriCloud