summaryrefslogtreecommitdiff
path: root/source/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'source/compiler')
-rw-r--r--source/compiler/aslanalyze.c111
-rw-r--r--source/compiler/aslcompile.c4
-rw-r--r--source/compiler/aslcompiler.h9
-rw-r--r--source/compiler/aslcompiler.l8
-rw-r--r--source/compiler/aslfold.c15
-rw-r--r--source/compiler/asllookup.c5
-rw-r--r--source/compiler/aslmap.c3
-rw-r--r--source/compiler/aslmethod.c6
-rw-r--r--source/compiler/aslparser.y4
-rw-r--r--source/compiler/aslpredef.c4
-rw-r--r--source/compiler/aslprepkg.c100
-rw-r--r--source/compiler/aslresource.c3
-rw-r--r--source/compiler/aslresources.y75
-rw-r--r--source/compiler/aslrestype2s.c54
-rw-r--r--source/compiler/aslrules.y45
-rw-r--r--source/compiler/asltokens.y6
-rw-r--r--source/compiler/asltree.c23
-rw-r--r--source/compiler/asltypes.y7
-rw-r--r--source/compiler/dttable2.c5
-rw-r--r--source/compiler/dttemplate.h47
20 files changed, 474 insertions, 60 deletions
diff --git a/source/compiler/aslanalyze.c b/source/compiler/aslanalyze.c
index 668f6605fd5b..bf5b37cdefc5 100644
--- a/source/compiler/aslanalyze.c
+++ b/source/compiler/aslanalyze.c
@@ -50,6 +50,15 @@
ACPI_MODULE_NAME ("aslanalyze")
+/* Local Prototypes */
+
+static ACPI_STATUS
+ApDeviceSubtreeWalk (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context);
+
+
/*******************************************************************************
*
* FUNCTION: AnIsInternalMethod
@@ -579,6 +588,108 @@ ApCheckRegMethod (
/*******************************************************************************
*
+ * FUNCTION: ApFindNameInDeviceTree
+ *
+ * PARAMETERS: Name - Name to search for
+ * Op - Current parse op
+ *
+ * RETURN: TRUE if name found in the same scope as Op.
+ *
+ * DESCRIPTION: Determine if a name appears in the same scope as Op, as either
+ * a Method() or a Name(). "Same scope" can mean under an If or
+ * Else statement.
+ *
+ * NOTE: Detects _HID/_ADR in this type of construct (legal in ACPI 6.1+)
+ *
+ * Scope (\_SB.PCI0)
+ * {
+ * Device (I2C0)
+ * {
+ * If (SMD0 != 4) {
+ * Name (_HID, "INT3442")
+ * } Else {
+ * Name (_ADR, 0x400)
+ * }
+ * }
+ * }
+ ******************************************************************************/
+
+BOOLEAN
+ApFindNameInDeviceTree (
+ char *Name,
+ ACPI_PARSE_OBJECT *Op)
+{
+ ACPI_STATUS Status;
+
+
+ Status = TrWalkParseTree (Op, ASL_WALK_VISIT_DOWNWARD,
+ ApDeviceSubtreeWalk, NULL, Name);
+
+ if (Status == AE_CTRL_TRUE)
+ {
+ return (TRUE); /* Found a match */
+ }
+
+ return (FALSE);
+}
+
+
+/* Callback function for interface above */
+
+static ACPI_STATUS
+ApDeviceSubtreeWalk (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context)
+{
+ char *Name = ACPI_CAST_PTR (char, Context);
+
+
+ switch (Op->Asl.ParseOpcode)
+ {
+ case PARSEOP_DEVICE:
+
+ /* Level 0 is the starting device, ignore it */
+
+ if (Level > 0)
+ {
+ /* Ignore sub-devices */
+
+ return (AE_CTRL_DEPTH);
+ }
+ break;
+
+ case PARSEOP_NAME:
+ case PARSEOP_METHOD:
+
+ /* These are what we are looking for */
+
+ if (ACPI_COMPARE_NAME (Name, Op->Asl.NameSeg))
+ {
+ return (AE_CTRL_TRUE);
+ }
+ return (AE_CTRL_DEPTH);
+
+ case PARSEOP_SCOPE:
+ case PARSEOP_FIELD:
+ case PARSEOP_OPERATIONREGION:
+
+ /*
+ * We want to ignore these, because either they can be large
+ * subtrees or open a scope to somewhere else.
+ */
+ return (AE_CTRL_DEPTH);
+
+ default:
+ break;
+ }
+
+ return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: ApFindNameInScope
*
* PARAMETERS: Name - Name to search for
diff --git a/source/compiler/aslcompile.c b/source/compiler/aslcompile.c
index a2a03e9facfd..ce070ef51121 100644
--- a/source/compiler/aslcompile.c
+++ b/source/compiler/aslcompile.c
@@ -207,8 +207,8 @@ CmDoCompile (
if (Gbl_FoldConstants)
{
- TrWalkParseTree (Gbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD,
- OpcAmlConstantWalk, NULL, NULL);
+ TrWalkParseTree (Gbl_ParseTreeRoot, ASL_WALK_VISIT_UPWARD,
+ NULL, OpcAmlConstantWalk, NULL);
}
else
{
diff --git a/source/compiler/aslcompiler.h b/source/compiler/aslcompiler.h
index 1446dc80970d..b34686325f70 100644
--- a/source/compiler/aslcompiler.h
+++ b/source/compiler/aslcompiler.h
@@ -287,6 +287,10 @@ ApFindNameInScope (
char *Name,
ACPI_PARSE_OBJECT *Op);
+BOOLEAN
+ApFindNameInDeviceTree (
+ char *Name,
+ ACPI_PARSE_OBJECT *Op);
/*
* aslerror - error handling/reporting
@@ -709,6 +713,11 @@ ExDoExternal (
#define ASL_WALK_VISIT_TWICE (ASL_WALK_VISIT_DOWNWARD | ASL_WALK_VISIT_UPWARD)
+void
+TrSetParent (
+ ACPI_PARSE_OBJECT *Op,
+ ACPI_PARSE_OBJECT *ParentOp);
+
ACPI_PARSE_OBJECT *
TrAllocateNode (
UINT32 ParseOpcode);
diff --git a/source/compiler/aslcompiler.l b/source/compiler/aslcompiler.l
index a34387c39067..15c9dae0d113 100644
--- a/source/compiler/aslcompiler.l
+++ b/source/compiler/aslcompiler.l
@@ -332,6 +332,7 @@ NamePathTail [.]{NameSeg}
"GpioInt" { count (1); return (PARSEOP_GPIO_INT); }
"GpioIo" { count (1); return (PARSEOP_GPIO_IO); }
"I2cSerialBus" { count (1); return (PARSEOP_I2C_SERIALBUS); }
+"I2cSerialBusV2" { count (1); return (PARSEOP_I2C_SERIALBUS_V2); }
"Interrupt" { count (1); return (PARSEOP_INTERRUPT); }
"IO" { count (1); return (PARSEOP_IO); }
"IRQ" { count (1); return (PARSEOP_IRQ); }
@@ -344,9 +345,11 @@ NamePathTail [.]{NameSeg}
"QWordSpace" { count (1); return (PARSEOP_QWORDSPACE); }
"Register" { count (1); return (PARSEOP_REGISTER); }
"SpiSerialBus" { count (1); return (PARSEOP_SPI_SERIALBUS); }
+"SpiSerialBusV2" { count (1); return (PARSEOP_SPI_SERIALBUS_V2); }
"StartDependentFn" { count (1); return (PARSEOP_STARTDEPENDENTFN); }
"StartDependentFnNoPri" { count (1); return (PARSEOP_STARTDEPENDENTFN_NOPRI); }
"UartSerialBus" { count (1); return (PARSEOP_UART_SERIALBUS); }
+"UartSerialBusV2" { count (1); return (PARSEOP_UART_SERIALBUS_V2); }
"VendorLong" { count (1); return (PARSEOP_VENDORLONG); }
"VendorShort" { count (1); return (PARSEOP_VENDORSHORT); }
"WordBusNumber" { count (1); return (PARSEOP_WORDBUSNUMBER); }
@@ -672,9 +675,14 @@ NamePathTail [.]{NameSeg}
/* printf debug macros */
+
"printf" { count (0); return (PARSEOP_PRINTF); }
"fprintf" { count (0); return (PARSEOP_FPRINTF); }
+ /* Other macros */
+
+"For" { count (0); return (PARSEOP_FOR); }
+
/* Predefined compiler names */
"__DATE__" { count (0); return (PARSEOP___DATE__); }
diff --git a/source/compiler/aslfold.c b/source/compiler/aslfold.c
index 9f219d9f996c..93b49b0515bf 100644
--- a/source/compiler/aslfold.c
+++ b/source/compiler/aslfold.c
@@ -101,6 +101,7 @@ TrInstallReducedConstant (
* RETURN: Status
*
* DESCRIPTION: Reduce an Op and its subtree to a constant if possible.
+ * Called during ascent of the parse tree.
*
******************************************************************************/
@@ -192,9 +193,7 @@ OpcAmlConstantWalk (
OpcUpdateIntegerNode (Op, 0);
}
- /* Abort the walk of this subtree, we are done with it */
-
- return (AE_CTRL_DEPTH);
+ return (AE_OK);
}
@@ -207,7 +206,7 @@ OpcAmlConstantWalk (
* RETURN: Status
*
* DESCRIPTION: Check one Op for a reducible type 3/4/5 AML opcode.
- * This is performed via a downward walk of the parse subtree.
+ * This is performed via an upward walk of the parse subtree.
*
******************************************************************************/
@@ -373,7 +372,6 @@ OpcAmlCheckForConstant (
goto CleanupAndExit;
}
-
/* Debug output */
DbgPrint (ASL_PARSE_OUTPUT, "TYPE_345");
@@ -519,9 +517,6 @@ TrTransformToStoreOp (
ACPI_STATUS Status;
- DbgPrint (ASL_PARSE_OUTPUT,
- "Reduction/Transform to StoreOp: Store(Constant, Target)\n");
-
/* Extract the operands */
Child1 = Op->Asl.Child;
@@ -543,6 +538,10 @@ TrTransformToStoreOp (
}
}
+ DbgPrint (ASL_PARSE_OUTPUT,
+ "Reduction/Transform to StoreOp: Store(%s, %s)\n",
+ Child1->Asl.ParseOpName, Child2->Asl.ParseOpName);
+
/*
* Create a NULL (zero) target so that we can use the
* interpreter to evaluate the expression.
diff --git a/source/compiler/asllookup.c b/source/compiler/asllookup.c
index c10959fb14ae..fed35fd7870a 100644
--- a/source/compiler/asllookup.c
+++ b/source/compiler/asllookup.c
@@ -207,6 +207,7 @@ LkIsObjectUsed (
case ACPI_TYPE_POWER:
case ACPI_TYPE_THERMAL:
case ACPI_TYPE_LOCAL_RESOURCE:
+ case ACPI_TYPE_LOCAL_RESOURCE_FIELD: /* Names assigned to descriptor elements */
return (AE_OK);
@@ -227,8 +228,8 @@ LkIsObjectUsed (
* Issue a remark even if it is a reserved name (starts
* with an underscore).
*/
- sprintf (MsgBuffer, "Name is within method [%4.4s]",
- Next->Name.Ascii);
+ sprintf (MsgBuffer, "Name [%4.4s] is within a method [%4.4s]",
+ Node->Name.Ascii, Next->Name.Ascii);
AslError (ASL_REMARK, ASL_MSG_NOT_REFERENCED,
LkGetNameOp (Node->Op), MsgBuffer);
return (AE_OK);
diff --git a/source/compiler/aslmap.c b/source/compiler/aslmap.c
index 013f7c9aff88..78756216a636 100644
--- a/source/compiler/aslmap.c
+++ b/source/compiler/aslmap.c
@@ -238,6 +238,7 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
/* GPIOINT */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
/* GPIOIO */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
/* I2CSERIALBUS */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
+/* I2CSERIALBUSV2 */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 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_END */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
@@ -395,6 +396,7 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
/* SLAVEMODE_DEVICEINIT */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0),
/* SLEEP */ OP_TABLE_ENTRY (AML_SLEEP_OP, 0, 0, 0),
/* SPISERIALBUS */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
+/* SPISERIALBUSV2 */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
/* STALL */ OP_TABLE_ENTRY (AML_STALL_OP, 0, 0, 0),
/* STARTDEPENDENTFN */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
/* STARTDEPENDENTFN_NOPRI */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
@@ -420,6 +422,7 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
/* TYPE_STATIC */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
/* TYPE_TRANSLATION */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0),
/* UART_SERIALBUS */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
+/* UART_SERIALBUSV2 */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
/* UNICODE */ OP_TABLE_ENTRY (AML_BUFFER_OP, 0, NODE_AML_PACKAGE, 0),
/* UNLOAD */ OP_TABLE_ENTRY (AML_UNLOAD_OP, 0, 0, 0),
/* UPDATERULE_ONES */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_UPDATE_WRITE_AS_ONES, 0, 0),
diff --git a/source/compiler/aslmethod.c b/source/compiler/aslmethod.c
index 2c74ff0ff6d6..226aa79c4604 100644
--- a/source/compiler/aslmethod.c
+++ b/source/compiler/aslmethod.c
@@ -406,10 +406,8 @@ MtMethodAnalysisWalkBegin (
case PARSEOP_DEVICE:
- Next = Op->Asl.Child;
-
- if (!ApFindNameInScope (METHOD_NAME__HID, Next) &&
- !ApFindNameInScope (METHOD_NAME__ADR, Next))
+ if (!ApFindNameInDeviceTree (METHOD_NAME__HID, Op) &&
+ !ApFindNameInDeviceTree (METHOD_NAME__ADR, Op))
{
AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
"Device object requires a _HID or _ADR in same scope");
diff --git a/source/compiler/aslparser.y b/source/compiler/aslparser.y
index 00718e4bc133..b3d83b8392a0 100644
--- a/source/compiler/aslparser.y
+++ b/source/compiler/aslparser.y
@@ -58,7 +58,7 @@
* each list element and possibly overflow on very large lists (>4000 items).
* This dramatically reduces use of the parse stack overall.
*
- * ArgList, TermList, Objectlist, ByteList, DWordList, PackageList,
+ * ArgList, TermList, ByteList, DWordList, PackageList,
* ResourceMacroList, and FieldUnitList
*/
@@ -99,7 +99,7 @@ AslLocalAllocate (
* These shift/reduce conflicts are expected. There should be zero
* reduce/reduce conflicts.
*/
-%expect 89
+%expect 101
/*! [Begin] no source code translation */
diff --git a/source/compiler/aslpredef.c b/source/compiler/aslpredef.c
index f18befa88934..1aa627b251ba 100644
--- a/source/compiler/aslpredef.c
+++ b/source/compiler/aslpredef.c
@@ -454,8 +454,8 @@ ApCheckForPredefinedName (
if (Name[0] == 0)
{
- AcpiOsPrintf ("Found a null name, external = %s\n",
- Op->Asl.ExternalName);
+ AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Op,
+ "zero length name found");
}
/* All reserved names are prefixed with a single underscore */
diff --git a/source/compiler/aslprepkg.c b/source/compiler/aslprepkg.c
index f82b4e31c56c..824a0c5c77b3 100644
--- a/source/compiler/aslprepkg.c
+++ b/source/compiler/aslprepkg.c
@@ -52,7 +52,7 @@
/* Local prototypes */
-static void
+static ACPI_PARSE_OBJECT *
ApCheckPackageElements (
const char *PredefinedName,
ACPI_PARSE_OBJECT *Op,
@@ -88,6 +88,11 @@ ApPackageTooLarge (
UINT32 Count,
UINT32 ExpectedCount);
+static void
+ApCustomPackage (
+ ACPI_PARSE_OBJECT *ParentOp,
+ const ACPI_PREDEFINED_INFO *Predefined);
+
/*******************************************************************************
*
@@ -168,6 +173,11 @@ ApCheckPackage (
switch (Package->RetInfo.Type)
{
+ case ACPI_PTYPE_CUSTOM:
+
+ ApCustomPackage (ParentOp, Predefined);
+ break;
+
case ACPI_PTYPE1_FIXED:
/*
* The package count is fixed and there are no subpackages
@@ -382,6 +392,86 @@ PackageTooSmall:
/*******************************************************************************
*
+ * FUNCTION: ApCustomPackage
+ *
+ * PARAMETERS: ParentOp - Parse op for the package
+ * Predefined - Pointer to package-specific info for
+ * the method
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Validate packages that don't fit into the standard model and
+ * require custom code.
+ *
+ * NOTE: Currently used for the _BIX method only. When needed for two or more
+ * methods, probably a detect/dispatch mechanism will be required.
+ *
+ ******************************************************************************/
+
+static void
+ApCustomPackage (
+ ACPI_PARSE_OBJECT *ParentOp,
+ const ACPI_PREDEFINED_INFO *Predefined)
+{
+ ACPI_PARSE_OBJECT *Op;
+ UINT32 Count;
+ UINT32 ExpectedCount;
+ UINT32 Version;
+
+
+ /* First child is the package length */
+
+ Op = ParentOp->Asl.Child;
+ Count = (UINT32) Op->Asl.Value.Integer;
+
+ /* Get the version number, must be Integer */
+
+ Op = Op->Asl.Next;
+ Version = (UINT32) Op->Asl.Value.Integer;
+ if (Op->Asl.ParseOpcode != PARSEOP_INTEGER)
+ {
+ AslError (ASL_ERROR, ASL_MSG_RESERVED_OPERAND_TYPE, Op, MsgBuffer);
+ return;
+ }
+
+ /* Validate count (# of elements) */
+
+ ExpectedCount = 21; /* Version 1 */
+ if (Version == 0)
+ {
+ ExpectedCount = 20; /* Version 0 */
+ }
+
+ if (Count < ExpectedCount)
+ {
+ ApPackageTooSmall (Predefined->Info.Name, ParentOp,
+ Count, ExpectedCount);
+ return;
+ }
+ else if (Count > ExpectedCount)
+ {
+ ApPackageTooLarge (Predefined->Info.Name, ParentOp,
+ Count, ExpectedCount);
+ }
+
+ /* Validate all elements of the package */
+
+ Op = ApCheckPackageElements (Predefined->Info.Name, Op,
+ ACPI_RTYPE_INTEGER, 16,
+ ACPI_RTYPE_STRING, 4);
+
+ /* Version 1 has a single trailing integer */
+
+ if (Version > 0)
+ {
+ ApCheckPackageElements (Predefined->Info.Name, Op,
+ ACPI_RTYPE_INTEGER, 1, 0, 0);
+ }
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: ApCheckPackageElements
*
* PARAMETERS: PredefinedName - Name of the predefined object
@@ -391,7 +481,9 @@ PackageTooSmall:
* Type2 - Object type for second group
* Count2 - Count for second group
*
- * RETURN: None
+ * RETURN: Next Op peer in the parse tree, after all specified elements
+ * have been validated. Used for multiple validations (calls
+ * to this function).
*
* DESCRIPTION: Validate all elements of a package. Works with packages that
* are defined to contain up to two groups of different object
@@ -399,7 +491,7 @@ PackageTooSmall:
*
******************************************************************************/
-static void
+static ACPI_PARSE_OBJECT *
ApCheckPackageElements (
const char *PredefinedName,
ACPI_PARSE_OBJECT *Op,
@@ -431,6 +523,8 @@ ApCheckPackageElements (
ApCheckObjectType (PredefinedName, Op, Type2, (i + Count1));
Op = Op->Asl.Next;
}
+
+ return (Op);
}
diff --git a/source/compiler/aslresource.c b/source/compiler/aslresource.c
index 001d1102d723..9c023ffcc6db 100644
--- a/source/compiler/aslresource.c
+++ b/source/compiler/aslresource.c
@@ -865,16 +865,19 @@ RsDoOneResourceDescriptor (
break;
case PARSEOP_I2C_SERIALBUS:
+ case PARSEOP_I2C_SERIALBUS_V2:
Rnode = RsDoI2cSerialBusDescriptor (Info);
break;
case PARSEOP_SPI_SERIALBUS:
+ case PARSEOP_SPI_SERIALBUS_V2:
Rnode = RsDoSpiSerialBusDescriptor (Info);
break;
case PARSEOP_UART_SERIALBUS:
+ case PARSEOP_UART_SERIALBUS_V2:
Rnode = RsDoUartSerialBusDescriptor (Info);
break;
diff --git a/source/compiler/aslresources.y b/source/compiler/aslresources.y
index fcde7e5595b3..074536bb0d77 100644
--- a/source/compiler/aslresources.y
+++ b/source/compiler/aslresources.y
@@ -392,6 +392,7 @@ ResourceMacroTerm
| GpioIntTerm {}
| GpioIoTerm {}
| I2cSerialBusTerm {}
+ | I2cSerialBusTermV2 {}
| InterruptTerm {}
| IOTerm {}
| IRQNoFlagsTerm {}
@@ -404,9 +405,11 @@ ResourceMacroTerm
| QWordSpaceTerm {}
| RegisterTerm {}
| SpiSerialBusTerm {}
+ | SpiSerialBusTermV2 {}
| StartDependentFnNoPriTerm {}
| StartDependentFnTerm {}
| UartSerialBusTerm {}
+ | UartSerialBusTermV2 {}
| VendorLongTerm {}
| VendorShortTerm {}
| WordBusNumberTerm {}
@@ -630,11 +633,30 @@ I2cSerialBusTerm
OptionalResourceType /* 12: ResourceType */
OptionalNameString /* 13: DescriptorName */
OptionalBuffer_Last /* 14: VendorData */
- ')' {$$ = TrLinkChildren ($<n>3,9,$4,$5,$7,$8,$10,$11,$12,$13,$14);}
+ ')' {$$ = TrLinkChildren ($<n>3,10,$4,$5,$7,$8,$10,$11,$12,$13,
+ TrCreateLeafNode (PARSEOP_DEFAULT_ARG),$14);}
| PARSEOP_I2C_SERIALBUS '('
error ')' {$$ = AslDoError(); yyclearin;}
;
+I2cSerialBusTermV2
+ : PARSEOP_I2C_SERIALBUS_V2 '(' {$<n>$ = TrCreateLeafNode (PARSEOP_I2C_SERIALBUS_V2);}
+ WordConstExpr /* 04: SlaveAddress */
+ OptionalSlaveMode /* 05: SlaveMode */
+ ',' DWordConstExpr /* 07: ConnectionSpeed */
+ OptionalAddressingMode /* 08: AddressingMode */
+ ',' StringData /* 10: ResourceSource */
+ OptionalByteConstExpr /* 11: ResourceSourceIndex */
+ OptionalResourceType /* 12: ResourceType */
+ OptionalNameString /* 13: DescriptorName */
+ OptionalShareType /* 14: Share */
+ OptionalBuffer_Last /* 15: VendorData */
+ ')' {$$ = TrLinkChildren ($<n>3,10,$4,$5,$7,$8,$10,$11,$12,$13,
+ $14,$15);}
+ | PARSEOP_I2C_SERIALBUS_V2 '('
+ error ')' {$$ = AslDoError(); yyclearin;}
+ ;
+
InterruptTerm
: PARSEOP_INTERRUPT '(' {$<n>$ = TrCreateLeafNode (PARSEOP_INTERRUPT);}
OptionalResourceType_First
@@ -815,11 +837,34 @@ SpiSerialBusTerm
OptionalResourceType /* 19: ResourceType */
OptionalNameString /* 20: DescriptorName */
OptionalBuffer_Last /* 21: VendorData */
- ')' {$$ = TrLinkChildren ($<n>3,13,$4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,$21);}
+ ')' {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,
+ TrCreateLeafNode (PARSEOP_DEFAULT_ARG),$21);}
| PARSEOP_SPI_SERIALBUS '('
error ')' {$$ = AslDoError(); yyclearin;}
;
+SpiSerialBusTermV2
+ : PARSEOP_SPI_SERIALBUS_V2 '(' {$<n>$ = TrCreateLeafNode (PARSEOP_SPI_SERIALBUS_V2);}
+ WordConstExpr /* 04: DeviceSelection */
+ OptionalDevicePolarity /* 05: DevicePolarity */
+ OptionalWireMode /* 06: WireMode */
+ ',' ByteConstExpr /* 08: DataBitLength */
+ OptionalSlaveMode /* 09: SlaveMode */
+ ',' DWordConstExpr /* 11: ConnectionSpeed */
+ ',' ClockPolarityKeyword /* 13: ClockPolarity */
+ ',' ClockPhaseKeyword /* 15: ClockPhase */
+ ',' StringData /* 17: ResourceSource */
+ OptionalByteConstExpr /* 18: ResourceSourceIndex */
+ OptionalResourceType /* 19: ResourceType */
+ OptionalNameString /* 20: DescriptorName */
+ OptionalShareType /* 21: Share */
+ OptionalBuffer_Last /* 22: VendorData */
+ ')' {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$8,$9,$11,$13,$15,$17,$18,$19,$20,
+ $21,$22);}
+ | PARSEOP_SPI_SERIALBUS_V2 '('
+ error ')' {$$ = AslDoError(); yyclearin;}
+ ;
+
StartDependentFnNoPriTerm
: PARSEOP_STARTDEPENDENTFN_NOPRI '(' {$<n>$ = TrCreateLeafNode (PARSEOP_STARTDEPENDENTFN_NOPRI);}
')' '{'
@@ -854,11 +899,35 @@ UartSerialBusTerm
OptionalResourceType /* 19: ResourceType */
OptionalNameString /* 20: DescriptorName */
OptionalBuffer_Last /* 21: VendorData */
- ')' {$$ = TrLinkChildren ($<n>3,14,$4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,$21);}
+ ')' {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,
+ TrCreateLeafNode (PARSEOP_DEFAULT_ARG),$21);}
| PARSEOP_UART_SERIALBUS '('
error ')' {$$ = AslDoError(); yyclearin;}
;
+UartSerialBusTermV2
+ : PARSEOP_UART_SERIALBUS_V2 '(' {$<n>$ = TrCreateLeafNode (PARSEOP_UART_SERIALBUS_V2);}
+ DWordConstExpr /* 04: ConnectionSpeed */
+ OptionalBitsPerByte /* 05: BitsPerByte */
+ OptionalStopBits /* 06: StopBits */
+ ',' ByteConstExpr /* 08: LinesInUse */
+ OptionalEndian /* 09: Endianess */
+ OptionalParityType /* 10: Parity */
+ OptionalFlowControl /* 11: FlowControl */
+ ',' WordConstExpr /* 13: Rx BufferSize */
+ ',' WordConstExpr /* 15: Tx BufferSize */
+ ',' StringData /* 17: ResourceSource */
+ OptionalByteConstExpr /* 18: ResourceSourceIndex */
+ OptionalResourceType /* 19: ResourceType */
+ OptionalNameString /* 20: DescriptorName */
+ OptionalShareType /* 21: Share */
+ OptionalBuffer_Last /* 22: VendorData */
+ ')' {$$ = TrLinkChildren ($<n>3,15,$4,$5,$6,$8,$9,$10,$11,$13,$15,$17,$18,$19,$20,
+ $21,$22);}
+ | PARSEOP_UART_SERIALBUS_V2 '('
+ error ')' {$$ = AslDoError(); yyclearin;}
+ ;
+
VendorLongTerm
: PARSEOP_VENDORLONG '(' {$<n>$ = TrCreateLeafNode (PARSEOP_VENDORLONG);}
OptionalNameString_First
diff --git a/source/compiler/aslrestype2s.c b/source/compiler/aslrestype2s.c
index ecdab19d37c6..fcd8e2378136 100644
--- a/source/compiler/aslrestype2s.c
+++ b/source/compiler/aslrestype2s.c
@@ -734,6 +734,11 @@ RsDoI2cSerialBusDescriptor (
Descriptor->I2cSerialBus.Type = AML_RESOURCE_I2C_SERIALBUSTYPE;
Descriptor->I2cSerialBus.TypeDataLength = AML_RESOURCE_I2C_MIN_DATA_LEN + VendorLength;
+ if (Info->DescriptorTypeOp->Asl.ParseOpcode == PARSEOP_I2C_SERIALBUS_V2)
+ {
+ Descriptor->I2cSerialBus.RevisionId = 2;
+ }
+
/* Build pointers to optional areas */
VendorData = ACPI_ADD_PTR (UINT8, Descriptor, sizeof (AML_RESOURCE_I2C_SERIALBUS));
@@ -803,7 +808,18 @@ RsDoI2cSerialBusDescriptor (
UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
break;
- case 8: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */
+ case 8:
+ /*
+ * Connection Share - Added for V2 (ACPI 6.0) version of the descriptor
+ * Note: For V1, the share bit will be zero (Op is DEFAULT_ARG from
+ * the ASL parser)
+ */
+ RsSetFlagBits (&Descriptor->I2cSerialBus.Flags, InitializerOp, 2, 0);
+ RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.Flags), 2);
+ break;
+
+ case 9: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */
RsGetVendorData (InitializerOp, VendorData,
CurrentByteOffset + sizeof (AML_RESOURCE_I2C_SERIALBUS));
@@ -877,6 +893,11 @@ RsDoSpiSerialBusDescriptor (
Descriptor->SpiSerialBus.Type = AML_RESOURCE_SPI_SERIALBUSTYPE;
Descriptor->SpiSerialBus.TypeDataLength = AML_RESOURCE_SPI_MIN_DATA_LEN + VendorLength;
+ if (Info->DescriptorTypeOp->Asl.ParseOpcode == PARSEOP_SPI_SERIALBUS_V2)
+ {
+ Descriptor->I2cSerialBus.RevisionId = 2;
+ }
+
/* Build pointers to optional areas */
VendorData = ACPI_ADD_PTR (UINT8, Descriptor,
@@ -975,7 +996,18 @@ RsDoSpiSerialBusDescriptor (
UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
break;
- case 12: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */
+ case 12:
+ /*
+ * Connection Share - Added for V2 (ACPI 6.0) version of the descriptor
+ * Note: For V1, the share bit will be zero (Op is DEFAULT_ARG from
+ * the ASL parser)
+ */
+ RsSetFlagBits (&Descriptor->SpiSerialBus.Flags, InitializerOp, 2, 0);
+ RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.Flags), 2);
+ break;
+
+ case 13: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */
RsGetVendorData (InitializerOp, VendorData,
CurrentByteOffset + sizeof (AML_RESOURCE_SPI_SERIALBUS));
@@ -1049,6 +1081,11 @@ RsDoUartSerialBusDescriptor (
Descriptor->UartSerialBus.Type = AML_RESOURCE_UART_SERIALBUSTYPE;
Descriptor->UartSerialBus.TypeDataLength = AML_RESOURCE_UART_MIN_DATA_LEN + VendorLength;
+ if (Info->DescriptorTypeOp->Asl.ParseOpcode == PARSEOP_UART_SERIALBUS_V2)
+ {
+ Descriptor->I2cSerialBus.RevisionId = 2;
+ }
+
/* Build pointers to optional areas */
VendorData = ACPI_ADD_PTR (UINT8, Descriptor, sizeof (AML_RESOURCE_UART_SERIALBUS));
@@ -1163,7 +1200,18 @@ RsDoUartSerialBusDescriptor (
UtAttachNamepathToOwner (Info->DescriptorTypeOp, InitializerOp);
break;
- case 13: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */
+ case 13:
+ /*
+ * Connection Share - Added for V2 (ACPI 6.0) version of the descriptor
+ * Note: For V1, the share bit will be zero (Op is DEFAULT_ARG from
+ * the ASL parser)
+ */
+ RsSetFlagBits (&Descriptor->UartSerialBus.Flags, InitializerOp, 2, 0);
+ RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE,
+ CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.Flags), 2);
+ break;
+
+ case 14: /* Vendor Data (Optional - Buffer of BYTEs) (_VEN) */
RsGetVendorData (InitializerOp, VendorData,
CurrentByteOffset + sizeof (AML_RESOURCE_UART_SERIALBUS));
diff --git a/source/compiler/aslrules.y b/source/compiler/aslrules.y
index 33aef64bd429..a5d8387d7ee4 100644
--- a/source/compiler/aslrules.y
+++ b/source/compiler/aslrules.y
@@ -74,6 +74,10 @@ AslCode
* {ObjectList} portion of the DefinitionBlockTerm in ACPI 2.0 to the
* original use of {TermList} instead (see below.) This allows the use
* of Type1 and Type2 opcodes at module level.
+ *
+ * 04/2016: The module-level code is now allowed in the following terms:
+ * DeviceTerm, PowerResTerm, ProcessorTerm, ScopeTerm, ThermalZoneTerm.
+ * The ObjectList term is obsolete and has been removed.
*/
DefinitionBlockTerm
: PARSEOP_DEFINITION_BLOCK '(' {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITION_BLOCK);}
@@ -189,12 +193,6 @@ FieldUnitEntry
AmlPackageLengthTerm {$$ = TrLinkChildNode ($1,$3);}
;
-ObjectList
- : {$$ = NULL;}
- | ObjectList Object {$$ = TrLinkPeerNode ($1,$2);}
- | error {$$ = AslDoError(); yyclearin;}
- ;
-
Object
: CompilerDirective {}
| NamedObject {}
@@ -489,6 +487,7 @@ Type1Opcode
| BreakPointTerm {}
| ContinueTerm {}
| FatalTerm {}
+ | ForTerm {}
| ElseIfTerm {}
| LoadTerm {}
| NoOpTerm {}
@@ -697,7 +696,7 @@ BreakPointTerm
BufferTerm
: PARSEOP_BUFFER '(' {$<n>$ = TrCreateLeafNode (PARSEOP_BUFFER);}
- OptionalTermArg
+ OptionalBufferLength
')' '{'
BufferTermData '}' {$$ = TrLinkChildren ($<n>3,2,$4,$7);}
| PARSEOP_BUFFER '('
@@ -878,7 +877,7 @@ DeviceTerm
: PARSEOP_DEVICE '(' {$<n>$ = TrCreateLeafNode (PARSEOP_DEVICE);}
NameString
')' '{'
- ObjectList '}' {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
+ TermList '}' {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
| PARSEOP_DEVICE '('
error ')' {$$ = AslDoError(); yyclearin;}
;
@@ -989,6 +988,23 @@ FindSetRightBitTerm
error ')' {$$ = AslDoError(); yyclearin;}
;
+ /* Convert a For() loop to a While() loop */
+ForTerm
+ : PARSEOP_FOR '(' {$<n>$ = TrCreateLeafNode (PARSEOP_WHILE);}
+ OptionalTermArg ',' {}
+ OptionalPredicate ','
+ OptionalTermArg {$<n>$ = TrLinkPeerNode ($4,$<n>3);
+ TrSetParent ($9,$<n>3);} /* New parent is WHILE */
+ ')' '{' TermList '}' {$<n>$ = TrLinkChildren ($<n>3,2,$7,$13);}
+ {$<n>$ = TrLinkPeerNode ($13,$9);
+ $$ = $<n>10;}
+ ;
+
+OptionalPredicate
+ : {$$ = TrCreateValuedLeafNode (PARSEOP_INTEGER, 1);}
+ | TermArg {$$ = $1;}
+ ;
+
FprintfTerm
: PARSEOP_FPRINTF '(' {$<n>$ = TrCreateLeafNode (PARSEOP_FPRINTF);}
TermArg ','
@@ -1361,7 +1377,7 @@ PowerResTerm
',' ByteConstExpr
',' WordConstExpr
')' '{'
- ObjectList '}' {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$8,$11);}
+ TermList '}' {$$ = TrLinkChildren ($<n>3,4,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$8,$11);}
| PARSEOP_POWERRESOURCE '('
error ')' {$$ = AslDoError(); yyclearin;}
;
@@ -1389,7 +1405,7 @@ ProcessorTerm
OptionalDWordConstExpr
OptionalByteConstExpr
')' '{'
- ObjectList '}' {$$ = TrLinkChildren ($<n>3,5,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8,$11);}
+ TermList '}' {$$ = TrLinkChildren ($<n>3,5,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$6,$7,$8,$11);}
| PARSEOP_PROCESSOR '('
error ')' {$$ = AslDoError(); yyclearin;}
;
@@ -1444,7 +1460,7 @@ ScopeTerm
: PARSEOP_SCOPE '(' {$<n>$ = TrCreateLeafNode (PARSEOP_SCOPE);}
NameString
')' '{'
- ObjectList '}' {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
+ TermList '}' {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
| PARSEOP_SCOPE '('
error ')' {$$ = AslDoError(); yyclearin;}
;
@@ -1533,7 +1549,7 @@ ThermalZoneTerm
: PARSEOP_THERMALZONE '(' {$<n>$ = TrCreateLeafNode (PARSEOP_THERMALZONE);}
NameString
')' '{'
- ObjectList '}' {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
+ TermList '}' {$$ = TrLinkChildren ($<n>3,2,TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),$7);}
| PARSEOP_THERMALZONE '('
error ')' {$$ = AslDoError(); yyclearin;}
;
@@ -1715,6 +1731,11 @@ OptionalSerializeRuleKeyword
;
OptionalTermArg
+ : {$$ = TrCreateLeafNode (PARSEOP_DEFAULT_ARG);}
+ | TermArg {$$ = $1;}
+ ;
+
+OptionalBufferLength
: {$$ = NULL;}
| TermArg {$$ = $1;}
;
diff --git a/source/compiler/asltokens.y b/source/compiler/asltokens.y
index e7b161eebfb1..429fa424cb9a 100644
--- a/source/compiler/asltokens.y
+++ b/source/compiler/asltokens.y
@@ -166,6 +166,7 @@ NoEcho('
%token <i> PARSEOP_GPIO_INT
%token <i> PARSEOP_GPIO_IO
%token <i> PARSEOP_I2C_SERIALBUS
+%token <i> PARSEOP_I2C_SERIALBUS_V2
%token <i> PARSEOP_IF
%token <i> PARSEOP_INCLUDE
%token <i> PARSEOP_INCLUDE_END
@@ -323,6 +324,7 @@ NoEcho('
%token <i> PARSEOP_SLAVEMODE_DEVICEINIT
%token <i> PARSEOP_SLEEP
%token <i> PARSEOP_SPI_SERIALBUS
+%token <i> PARSEOP_SPI_SERIALBUS_V2
%token <i> PARSEOP_STALL
%token <i> PARSEOP_STARTDEPENDENTFN
%token <i> PARSEOP_STARTDEPENDENTFN_NOPRI
@@ -348,6 +350,7 @@ NoEcho('
%token <i> PARSEOP_TYPE_STATIC
%token <i> PARSEOP_TYPE_TRANSLATION
%token <i> PARSEOP_UART_SERIALBUS
+%token <i> PARSEOP_UART_SERIALBUS_V2
%token <i> PARSEOP_UNICODE
%token <i> PARSEOP_UNLOAD
%token <i> PARSEOP_UPDATERULE_ONES
@@ -457,8 +460,11 @@ NoEcho('
%left <i> PARSEOP_EXP_INDEX_LEFT
%right <i> PARSEOP_EXP_INDEX_RIGHT
+/* Macros */
+
%token <i> PARSEOP_PRINTF
%token <i> PARSEOP_FPRINTF
+%token <i> PARSEOP_FOR
/* Specific parentheses tokens are not used at this time */
/* PARSEOP_EXP_PAREN_OPEN */
diff --git a/source/compiler/asltree.c b/source/compiler/asltree.c
index 97a56ec5d6e2..af67467ef057 100644
--- a/source/compiler/asltree.c
+++ b/source/compiler/asltree.c
@@ -58,6 +58,29 @@ TrGetNextNode (
/*******************************************************************************
*
+ * FUNCTION: TrSetParent
+ *
+ * PARAMETERS: Op - To be set to new parent
+ * ParentOp - The parent
+ *
+ * RETURN: None, sets Op parent directly
+ *
+ * DESCRIPTION: Change the parent of a parse op.
+ *
+ ******************************************************************************/
+
+void
+TrSetParent (
+ ACPI_PARSE_OBJECT *Op,
+ ACPI_PARSE_OBJECT *ParentOp)
+{
+
+ Op->Asl.Parent = ParentOp;
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: TrGetNextNode
*
* PARAMETERS: None
diff --git a/source/compiler/asltypes.y b/source/compiler/asltypes.y
index 8d9c4d28b6e4..1faecb4587e9 100644
--- a/source/compiler/asltypes.y
+++ b/source/compiler/asltypes.y
@@ -62,7 +62,6 @@ NoEcho('
%type <n> NamedObject
%type <n> NameSpaceModifier
%type <n> Object
-%type <n> ObjectList
%type <n> PackageData
%type <n> ParameterTypePackage
%type <n> ParameterTypePackageList
@@ -295,6 +294,7 @@ NoEcho('
%type <n> PrintfArgList
%type <n> PrintfTerm
%type <n> FprintfTerm
+%type <n> ForTerm
/* Resource Descriptors */
@@ -312,6 +312,7 @@ NoEcho('
%type <n> GpioIntTerm
%type <n> GpioIoTerm
%type <n> I2cSerialBusTerm
+%type <n> I2cSerialBusTermV2
%type <n> InterruptTerm
%type <n> IOTerm
%type <n> IRQNoFlagsTerm
@@ -326,9 +327,11 @@ NoEcho('
%type <n> QWordSpaceTerm
%type <n> RegisterTerm
%type <n> SpiSerialBusTerm
+%type <n> SpiSerialBusTermV2
%type <n> StartDependentFnNoPriTerm
%type <n> StartDependentFnTerm
%type <n> UartSerialBusTerm
+%type <n> UartSerialBusTermV2
%type <n> VendorLongTerm
%type <n> VendorShortTerm
%type <n> WordBusNumberTerm
@@ -347,6 +350,7 @@ NoEcho('
%type <n> OptionalAddressRange
%type <n> OptionalBitsPerByte
%type <n> OptionalBuffer_Last
+%type <n> OptionalBufferLength
%type <n> OptionalByteConstExpr
%type <n> OptionalCount
%type <n> OptionalDecodeType
@@ -366,6 +370,7 @@ NoEcho('
%type <n> OptionalParameterTypePackage
%type <n> OptionalParameterTypesPackage
%type <n> OptionalParityType
+%type <n> OptionalPredicate
%type <n> OptionalQWordConstExpr
%type <n> OptionalRangeType
%type <n> OptionalReference
diff --git a/source/compiler/dttable2.c b/source/compiler/dttable2.c
index 65be5057dcb4..9eb04117e2b9 100644
--- a/source/compiler/dttable2.c
+++ b/source/compiler/dttable2.c
@@ -758,6 +758,11 @@ DtCompilePcct (
InfoTable = AcpiDmTableInfoPcct1;
break;
+ case ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2:
+
+ InfoTable = AcpiDmTableInfoPcct2;
+ break;
+
default:
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "PCCT");
diff --git a/source/compiler/dttemplate.h b/source/compiler/dttemplate.h
index 93747fcf6119..23ef0517678c 100644
--- a/source/compiler/dttemplate.h
+++ b/source/compiler/dttemplate.h
@@ -844,28 +844,39 @@ const unsigned char TemplateMtmr[] =
const unsigned char TemplatePcct[] =
{
- 0x50,0x43,0x43,0x54,0xAC,0x00,0x00,0x00, /* 00000000 "PCCT...." */
- 0x01,0xCF,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
- 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */
+ 0x50,0x43,0x43,0x54,0x06,0x01,0x00,0x00, /* 00000000 "PCCT...." */
+ 0x01,0xE3,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
+ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */
0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
- 0x27,0x06,0x14,0x20,0x01,0x00,0x00,0x00, /* 00000020 "'.. ...." */
+ 0x18,0x03,0x16,0x20,0x01,0x00,0x00,0x00, /* 00000020 "... ...." */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */
0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000030 ".>......" */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */
- 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000040 "........" */
- 0x01,0x32,0x00,0x03,0x00,0x00,0x00,0x00, /* 00000048 ".2......" */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */
- 0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, /* 00000058 "........" */
- 0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00, /* 00000060 "........" */
- 0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x3E, /* 00000068 ".......>" */
- 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000070 "........" */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00, /* 00000078 "........" */
+ 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, /* 00000038 "........" */
+ 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22, /* 00000040 """""""""" */
+ 0x01,0x32,0x00,0x03,0x33,0x33,0x33,0x33, /* 00000048 ".2..3333" */
+ 0x33,0x33,0x33,0x33,0x44,0x44,0x44,0x44, /* 00000050 "3333DDDD" */
+ 0x44,0x44,0x44,0x44,0x55,0x55,0x55,0x55, /* 00000058 "DDDDUUUU" */
+ 0x55,0x55,0x55,0x55,0x66,0x66,0x66,0x66, /* 00000060 "UUUUffff" */
+ 0x77,0x77,0x77,0x77,0x88,0x88,0x01,0x3E, /* 00000068 "wwww...>" */
+ 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000070 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x32, /* 00000080 ".......2" */
- 0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000090 "........" */
- 0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, /* 00000098 "........" */
- 0xFF,0xFF,0x01,0x00,0x00,0x00,0x01,0x00, /* 000000A0 "........" */
- 0x00,0x00,0x01,0x00 /* 000000A8 "...." */
+ 0x00,0x03,0x44,0x44,0x44,0x44,0x44,0x44, /* 00000088 "..DDDDDD" */
+ 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, /* 00000090 "DDDDDDDD" */
+ 0x44,0x44,0x55,0x55,0x55,0x55,0x55,0x55, /* 00000098 "DDUUUUUU" */
+ 0x55,0x55,0x66,0x66,0x66,0x66,0x77,0x77, /* 000000A0 "UUffffww" */
+ 0x77,0x77,0x88,0x88,0x02,0x5A,0x01,0x00, /* 000000A8 "ww...Z.." */
+ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */
+ 0x00,0x00,0x00,0x00,0x01,0x32,0x00,0x03, /* 000000C0 ".....2.." */
+ 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, /* 000000C8 "DDDDDDDD" */
+ 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, /* 000000D0 "DDDDDDDD" */
+ 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, /* 000000D8 "UUUUUUUU" */
+ 0x66,0x66,0x66,0x66,0x77,0x77,0x77,0x77, /* 000000E0 "ffffwwww" */
+ 0x88,0x88,0x01,0x32,0x00,0x03,0x33,0x33, /* 000000E8 "...2..33" */
+ 0x33,0x33,0x33,0x33,0x33,0x33,0x44,0x44, /* 000000F0 "333333DD" */
+ 0x44,0x44,0x44,0x44,0x44,0x44,0x55,0x55, /* 000000F8 "DDDDDDUU" */
+ 0x55,0x55,0x55,0x55,0x55,0x55 /* 00000100 "UUUUUU" */
};
const unsigned char TemplatePmtt[] =