ACK: [PATCH 1/2] ACPICA: Update to version 20170224
ivanhu
ivan.hu at canonical.com
Thu Mar 2 06:47:39 UTC 2017
On 02/27/2017 10:56 PM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Changes in this release of ACPICA are detailed at the following
> link on the ACPICA developer mailing list:
>
> https://lists.acpica.org/pipermail/devel/2017-February/001088.html
>
> This also contains a revert of ACPICA commit
> 20741c9c6e4f86eb90948cfceb55169593b79f0b ("Disassembler: Fix small
> memory leak for resource tags") as this causes iASL to segfault
> as reported on the ACPICA BugZilla #1365, ("incorrect free of non"
> heap object causing iasl to break when disassembling a DSDT"), see
> https://bugs.acpica.org/show_bug.cgi?id=1365
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> src/acpica/source/common/adisasm.c | 25 +
> src/acpica/source/common/adwalk.c | 2 +-
> src/acpica/source/common/dmextern.c | 25 +
> src/acpica/source/common/dmtables.c | 22 +
> src/acpica/source/common/dmtbinfo.c | 10 +-
> src/acpica/source/compiler/Makefile.am | 3 +
> src/acpica/source/compiler/aslcodegen.c | 101 ++-
> src/acpica/source/compiler/aslcompile.c | 31 +-
> src/acpica/source/compiler/aslcompiler.h | 16 +
> src/acpica/source/compiler/aslcompiler.l | 5 +-
> src/acpica/source/compiler/asldebug.c | 34 +
> src/acpica/source/compiler/asldefine.h | 8 +-
> src/acpica/source/compiler/aslfiles.c | 32 +-
> src/acpica/source/compiler/aslglobal.h | 22 +-
> src/acpica/source/compiler/asllength.c | 5 +-
> src/acpica/source/compiler/aslmap.c | 36 +-
> src/acpica/source/compiler/asloffset.c | 2 +-
> src/acpica/source/compiler/asloperands.c | 7 +-
> src/acpica/source/compiler/aslprimaries.y | 23 +-
> src/acpica/source/compiler/aslprintf.c | 2 +-
> src/acpica/source/compiler/aslresources.y | 9 +-
> src/acpica/source/compiler/aslrules.y | 10 +-
> src/acpica/source/compiler/aslstartup.c | 32 +
> src/acpica/source/compiler/aslsupport.l | 114 ++-
> src/acpica/source/compiler/asltree.c | 175 +++-
> src/acpica/source/compiler/asltypes.h | 23 +-
> src/acpica/source/compiler/aslwalks.c | 2 +-
> src/acpica/source/compiler/cvcompiler.c | 962 +++++++++++++++++++++
> src/acpica/source/compiler/cvdisasm.c | 495 +++++++++++
> src/acpica/source/compiler/cvparser.c | 959 ++++++++++++++++++++
> src/acpica/source/compiler/dttable1.c | 4 +
> src/acpica/source/compiler/dttemplate.h | 72 +-
> src/acpica/source/components/debugger/dbmethod.c | 1 +
> src/acpica/source/components/debugger/dbxface.c | 5 +-
> .../source/components/disassembler/dmcstyle.c | 51 +-
> .../source/components/disassembler/dmdeferred.c | 6 +-
> .../source/components/disassembler/dmnames.c | 2 +-
> .../source/components/disassembler/dmopcode.c | 81 +-
> .../source/components/disassembler/dmutils.c | 8 +
> src/acpica/source/components/disassembler/dmwalk.c | 105 ++-
> .../source/components/dispatcher/dscontrol.c | 2 +-
> src/acpica/source/components/dispatcher/dsmthdat.c | 3 +-
> src/acpica/source/components/dispatcher/dsobject.c | 14 +-
> src/acpica/source/components/dispatcher/dsopcode.c | 4 +-
> src/acpica/source/components/dispatcher/dsutils.c | 6 +-
> src/acpica/source/components/dispatcher/dswexec.c | 2 +-
> src/acpica/source/components/dispatcher/dswload2.c | 2 +-
> src/acpica/source/components/executer/exmisc.c | 16 +-
> src/acpica/source/components/executer/exnames.c | 4 +-
> src/acpica/source/components/executer/exoparg1.c | 15 +-
> src/acpica/source/components/executer/exoparg2.c | 4 +-
> src/acpica/source/components/executer/exoparg6.c | 10 +-
> src/acpica/source/components/executer/exresolv.c | 2 +-
> src/acpica/source/components/executer/exstore.c | 4 +-
> src/acpica/source/components/executer/exstoren.c | 2 +-
> src/acpica/source/components/hardware/hwvalid.c | 18 +-
> src/acpica/source/components/namespace/nsaccess.c | 2 +-
> src/acpica/source/components/namespace/nsrepair.c | 16 +-
> src/acpica/source/components/namespace/nsrepair2.c | 6 +-
> src/acpica/source/components/namespace/nsutils.c | 31 +-
> src/acpica/source/components/parser/psargs.c | 30 +-
> src/acpica/source/components/parser/psloop.c | 39 +-
> src/acpica/source/components/parser/psobject.c | 36 +
> src/acpica/source/components/parser/psopcode.c | 13 +-
> src/acpica/source/components/parser/psopinfo.c | 2 +-
> src/acpica/source/components/parser/psparse.c | 6 +-
> src/acpica/source/components/parser/pstree.c | 9 +-
> src/acpica/source/components/parser/psutils.c | 13 +
> src/acpica/source/components/utilities/utalloc.c | 44 +
> src/acpica/source/components/utilities/utcache.c | 2 +-
> src/acpica/source/components/utilities/utdebug.c | 1 +
> src/acpica/source/components/utilities/utresrc.c | 10 +
> src/acpica/source/components/utilities/utxferror.c | 16 +-
> src/acpica/source/include/acconfig.h | 1 +
> src/acpica/source/include/acconvert.h | 276 ++++++
> src/acpica/source/include/acdisasm.h | 14 +
> src/acpica/source/include/acglobal.h | 44 +
> src/acpica/source/include/aclocal.h | 118 ++-
> src/acpica/source/include/acmacros.h | 35 +
> src/acpica/source/include/acopcode.h | 2 +
> src/acpica/source/include/acpixf.h | 2 +-
> src/acpica/source/include/actbl2.h | 11 +
> src/acpica/source/include/amlcode.h | 104 +--
> 83 files changed, 4118 insertions(+), 400 deletions(-)
> create mode 100644 src/acpica/source/compiler/cvcompiler.c
> create mode 100644 src/acpica/source/compiler/cvdisasm.c
> create mode 100644 src/acpica/source/compiler/cvparser.c
> create mode 100644 src/acpica/source/include/acconvert.h
>
> diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c
> index 8ff7657..a9518d0 100644
> --- a/src/acpica/source/common/adisasm.c
> +++ b/src/acpica/source/common/adisasm.c
> @@ -398,6 +398,21 @@ AdDisassembleOneTable (
> ACPI_OWNER_ID OwnerId;
>
>
> +#ifdef ACPI_ASL_COMPILER
> +
> + /*
> + * For ASL-/ASL+ converter: replace the temporary "XXXX"
> + * table signature with the original. This "XXXX" makes
> + * it harder for the AML interpreter to run the badaml
> + * (.xxx) file produced from the converter in case if
> + * it fails to get deleted.
> + */
> + if (Gbl_CaptureComments)
> + {
> + strncpy (Table->Signature, AcpiGbl_TableSig, 4);
> + }
> +#endif
> +
> /* ForceAmlDisassembly means to assume the table contains valid AML */
>
> if (!AcpiGbl_ForceAmlDisassembly && !AcpiUtIsAmlTable (Table))
> @@ -547,6 +562,7 @@ AdReparseOneTable (
> ACPI_OWNER_ID OwnerId)
> {
> ACPI_STATUS Status;
> + ACPI_COMMENT_ADDR_NODE *AddrListHead;
>
>
> fprintf (stderr,
> @@ -580,6 +596,15 @@ AdReparseOneTable (
>
> AcpiDmAddExternalsToNamespace ();
>
> + /* For -ca option: clear the list of comment addresses. */
> +
> + while (AcpiGbl_CommentAddrListHead)
> + {
> + AddrListHead= AcpiGbl_CommentAddrListHead;
> + AcpiGbl_CommentAddrListHead = AcpiGbl_CommentAddrListHead->Next;
> + AcpiOsFree(AddrListHead);
> + }
> +
> /* Parse the table again. No need to reload it, however */
>
> Status = AdParseTable (Table, NULL, FALSE, FALSE);
> diff --git a/src/acpica/source/common/adwalk.c b/src/acpica/source/common/adwalk.c
> index a9dd65e..34f77a9 100644
> --- a/src/acpica/source/common/adwalk.c
> +++ b/src/acpica/source/common/adwalk.c
> @@ -950,7 +950,7 @@ AcpiDmXrefDescendingOp (
> * method.
> */
> if (!(Op->Asl.Parent &&
> - (Op->Asl.Parent->Asl.AmlOpcode == AML_COND_REF_OF_OP)))
> + (Op->Asl.Parent->Asl.AmlOpcode == AML_CONDITIONAL_REF_OF_OP)))
> {
> if (Node)
> {
> diff --git a/src/acpica/source/common/dmextern.c b/src/acpica/source/common/dmextern.c
> index 206916e..5f28ad0 100644
> --- a/src/acpica/source/common/dmextern.c
> +++ b/src/acpica/source/common/dmextern.c
> @@ -1237,6 +1237,31 @@ AcpiDmEmitExternals (
>
> /*******************************************************************************
> *
> + * FUNCTION: AcpiDmEmitExternal
> + *
> + * PARAMETERS: Op External Parse Object
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Emit an External() ASL statement for the current External
> + * parse object
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiDmEmitExternal (
> + ACPI_PARSE_OBJECT *NameOp,
> + ACPI_PARSE_OBJECT *TypeOp)
> +{
> + AcpiOsPrintf ("External (");
> + AcpiDmNamestring (NameOp->Common.Value.Name);
> + AcpiOsPrintf ("%s)\n",
> + AcpiDmGetObjectTypeName ((ACPI_OBJECT_TYPE) TypeOp->Common.Value.Integer));
> +}
> +
> +
> +/*******************************************************************************
> + *
> * FUNCTION: AcpiDmUnresolvedWarning
> *
> * PARAMETERS: Type - Where to output the warning.
> diff --git a/src/acpica/source/common/dmtables.c b/src/acpica/source/common/dmtables.c
> index 554e6df..3082f28 100644
> --- a/src/acpica/source/common/dmtables.c
> +++ b/src/acpica/source/common/dmtables.c
> @@ -119,6 +119,8 @@
> #include "actables.h"
> #include "acparser.h"
> #include "acapps.h"
> +#include "acmacros.h"
> +#include "acconvert.h"
>
>
> #define _COMPONENT ACPI_TOOLS
> @@ -274,6 +276,14 @@ AdCreateTableHeader (
> AcpiOsPrintf (" */\n");
>
> /*
> + * Print comments that come before this definition block.
> + */
> + if (Gbl_CaptureComments)
> + {
> + ASL_CV_PRINT_ONE_COMMENT(AcpiGbl_ParseOpRoot,AML_COMMENT_STANDARD, NULL, 0);
> + }
> +
> + /*
> * Open the ASL definition block.
> *
> * Note: the AMLFilename string is left zero-length in order to just let
> @@ -460,6 +470,7 @@ AdParseTable (
>
> AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
> AmlStart = ((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER));
> + ASL_CV_INIT_FILETREE(Table, AmlStart, AmlLength);
>
> /* Create the root object */
>
> @@ -469,6 +480,17 @@ AdParseTable (
> return (AE_NO_MEMORY);
> }
>
> +#ifdef ACPI_ASL_COMPILER
> + if (Gbl_CaptureComments)
> + {
> + AcpiGbl_ParseOpRoot->Common.CvFilename = AcpiGbl_FileTreeRoot->Filename;
> + }
> + else
> + {
> + AcpiGbl_ParseOpRoot->Common.CvFilename = NULL;
> + }
> +#endif
> +
> /* Create and initialize a new walk state */
>
> WalkState = AcpiDsCreateWalkState (0, AcpiGbl_ParseOpRoot, NULL, NULL);
> diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c
> index 041327f..7d11370 100644
> --- a/src/acpica/source/common/dmtbinfo.c
> +++ b/src/acpica/source/common/dmtbinfo.c
> @@ -243,6 +243,7 @@
> #define ACPI_IORT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_NAMED_COMPONENT,f)
> #define ACPI_IORT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ROOT_COMPLEX,f)
> #define ACPI_IORT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU,f)
> +#define ACPI_IORT3A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU_GSI,f)
> #define ACPI_IORT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU_V3,f)
> #define ACPI_IORTA_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_MEMORY_ACCESS,f)
> #define ACPI_IORTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_NODE,f)
> @@ -331,6 +332,7 @@
> #define ACPI_GTDT0a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_TIMER_ENTRY,f,o)
> #define ACPI_GTDT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_WATCHDOG,f,o)
> #define ACPI_IORT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU,f,o)
> +#define ACPI_IORT3a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU_GSI,f,o)
> #define ACPI_IORT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU_V3,f,o)
> #define ACPI_IORTA_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_MEMORY_ACCESS,f,o)
> #define ACPI_IORTM_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_ID_MAPPING,f,o)
> @@ -1621,8 +1623,12 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoIort3[] =
>
> ACPI_DMTABLE_INFO AcpiDmTableInfoIort3a[] =
> {
> - {ACPI_DMT_UINT64, 0, "SMMU_NSgIrpt Interrupt", 0},
> - {ACPI_DMT_UINT64, 0, "SMMU_NSgCfgIrpt Interrupt", 0},
> + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrpt), "NSgIrpt", 0},
> + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgIrptFlags), "NSgIrpt Flags (decoded below)", 0},
> + {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgIrptFlags, 0), "Edge Triggered", 0},
> + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrpt), "NSgCfgIrpt", 0},
> + {ACPI_DMT_UINT32, ACPI_IORT3A_OFFSET (NSgCfgIrptFlags), "NSgCfgIrpt Flags (decoded below)", 0},
> + {ACPI_DMT_FLAG0, ACPI_IORT3a_FLAG_OFFSET (NSgCfgIrptFlags, 0), "Edge Triggered", 0},
> ACPI_DMT_TERMINATOR
> };
>
> diff --git a/src/acpica/source/compiler/Makefile.am b/src/acpica/source/compiler/Makefile.am
> index a9bcf5c..ba5fe77 100644
> --- a/src/acpica/source/compiler/Makefile.am
> +++ b/src/acpica/source/compiler/Makefile.am
> @@ -128,6 +128,9 @@ libfwtsiasl_la_SOURCES = \
> aslprepkg.c \
> aslprintf.c \
> aslprune.c \
> + cvcompiler.c \
> + cvdisasm.c \
> + cvparser.c \
> dtfield.c \
> dtio.c \
> dtsubtable.c \
> diff --git a/src/acpica/source/compiler/aslcodegen.c b/src/acpica/source/compiler/aslcodegen.c
> index 0764e78..95ed656 100644
> --- a/src/acpica/source/compiler/aslcodegen.c
> +++ b/src/acpica/source/compiler/aslcodegen.c
> @@ -116,6 +116,7 @@
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "amlcode.h"
> +#include "acconvert.h"
>
> #define _COMPONENT ACPI_COMPILER
> ACPI_MODULE_NAME ("aslcodegen")
> @@ -129,12 +130,6 @@ CgAmlWriteWalk (
> void *Context);
>
> static void
> -CgLocalWriteAmlData (
> - ACPI_PARSE_OBJECT *Op,
> - void *Buffer,
> - UINT32 Length);
> -
> -static void
> CgWriteAmlOpcode (
> ACPI_PARSE_OBJECT *Op);
>
> @@ -278,7 +273,7 @@ CgAmlWriteWalk (
> *
> ******************************************************************************/
>
> -static void
> +void
> CgLocalWriteAmlData (
> ACPI_PARSE_OBJECT *Op,
> void *Buffer,
> @@ -333,6 +328,15 @@ CgWriteAmlOpcode (
> return;
> }
>
> + /*
> + * Before printing the bytecode, generate comment byte codes
> + * associated with this node.
> + */
> + if (Gbl_CaptureComments)
> + {
> + CgWriteAmlComment(Op);
> + }
> +
> switch (Op->Asl.AmlOpcode)
> {
> case AML_UNASSIGNED_OPCODE:
> @@ -488,6 +492,8 @@ CgWriteTableHeader (
> ACPI_PARSE_OBJECT *Op)
> {
> ACPI_PARSE_OBJECT *Child;
> + UINT32 CommentLength;
> + ACPI_COMMENT_NODE *Current;
>
>
> /* AML filename */
> @@ -497,6 +503,21 @@ CgWriteTableHeader (
> /* Signature */
>
> Child = Child->Asl.Next;
> +
> + /*
> + * For ASL-/ASL+ converter: replace the table signature with
> + * "XXXX" and save the original table signature. This results in an AML
> + * file with the signature "XXXX". The converter should remove this AML
> + * file. In the event where this AML file does not get deleted, the
> + * "XXXX" table signature prevents this AML file from running on the AML
> + * interpreter.
> + */
> + if (Gbl_CaptureComments)
> + {
> + strncpy(AcpiGbl_TableSig, Child->Asl.Value.String, 4);
> + Child->Asl.Value.String = ACPI_SIG_XXXX;
> + }
> +
> strncpy (TableHeader.Signature, Child->Asl.Value.String, 4);
>
> /* Revision */
> @@ -538,6 +559,50 @@ CgWriteTableHeader (
>
> TableHeader.Length = sizeof (ACPI_TABLE_HEADER) +
> Op->Asl.AmlSubtreeLength;
> +
> + /* Calculate the comment lengths for this definition block parseOp */
> +
> + if (Gbl_CaptureComments)
> + {
> + CvDbgPrint ("Calculating comment lengths for %s in write header\n",
> + Op->Asl.ParseOpName);
> +
> + /*
> + * Take the filename without extensions, add 3 for the new extension
> + * and another 3 for the a908 bytecode and null terminator.
> + */
> + TableHeader.Length += strrchr (Gbl_ParseTreeRoot->Asl.Filename, '.')
> + - Gbl_ParseTreeRoot->Asl.Filename + 1 + 3 + 3;
> + Op->Asl.AmlSubtreeLength +=
> + strlen (Gbl_ParseTreeRoot->Asl.Filename) + 3;
> + CvDbgPrint (" Length: %lu\n",
> + strlen (Gbl_ParseTreeRoot->Asl.Filename) + 3);
> +
> + if (Op->Asl.CommentList)
> + {
> + Current = Op->Asl.CommentList;
> + while (Current)
> + {
> + CommentLength = strlen (Current->Comment)+3;
> + CvDbgPrint ("Length of standard comment): %d\n", CommentLength);
> + CvDbgPrint (" Comment string: %s\n\n", Current->Comment);
> + TableHeader.Length += CommentLength;
> + Op->Asl.AmlSubtreeLength += CommentLength;
> + Current = Current->Next;
> + CvDbgPrint (" Length: %u\n", CommentLength);
> + }
> + }
> + if (Op->Asl.CloseBraceComment)
> + {
> + CommentLength = strlen (Op->Asl.CloseBraceComment)+3;
> + CvDbgPrint ("Length of inline comment +3: %d\n", CommentLength);
> + CvDbgPrint (" Comment string: %s\n\n", Op->Asl.CloseBraceComment);
> + TableHeader.Length += CommentLength;
> + Op->Asl.AmlSubtreeLength += CommentLength;
> + CvDbgPrint (" Length: %u\n", CommentLength);
> + }
> + }
> +
> TableHeader.Checksum = 0;
>
> Op->Asl.FinalAmlOffset = ftell (Gbl_Files[ASL_FILE_AML_OUTPUT].Handle);
> @@ -564,13 +629,13 @@ CgWriteTableHeader (
>
> static void
> CgUpdateHeader (
> - ACPI_PARSE_OBJECT *Op)
> + ACPI_PARSE_OBJECT *Op)
> {
> - signed char Sum;
> - UINT32 i;
> - UINT32 Length;
> - UINT8 FileByte;
> - UINT8 Checksum;
> + signed char Sum;
> + UINT32 i;
> + UINT32 Length;
> + UINT8 FileByte;
> + UINT8 Checksum;
>
>
> /* Calculate the checksum over the entire definition block */
> @@ -652,6 +717,12 @@ CgWriteNode (
> ASL_RESOURCE_NODE *Rnode;
>
>
> + /* Write all comments here. */
> + if (Gbl_CaptureComments)
> + {
> + CgWriteAmlComment(Op);
> + }
> +
> /* Always check for DEFAULT_ARG and other "Noop" nodes */
> /* TBD: this may not be the best place for this check */
>
> @@ -713,6 +784,10 @@ CgWriteNode (
> case PARSEOP_DEFINITION_BLOCK:
>
> CgWriteTableHeader (Op);
> + if (Gbl_CaptureComments)
> + {
> + CgWriteAmlDefBlockComment (Op);
> + }
> break;
>
> case PARSEOP_NAMESEG:
> diff --git a/src/acpica/source/compiler/aslcompile.c b/src/acpica/source/compiler/aslcompile.c
> index e601ede..9a83d59 100644
> --- a/src/acpica/source/compiler/aslcompile.c
> +++ b/src/acpica/source/compiler/aslcompile.c
> @@ -357,8 +357,17 @@ CmDoCompile (
> {
> Event = UtBeginEvent ("Resolve all Externals");
> DbgPrint (ASL_DEBUG_OUTPUT, "\nResolve Externals\n\n");
> - TrWalkParseTree (Gbl_ParseTreeRoot, ASL_WALK_VISIT_TWICE,
> - ExAmlExternalWalkBegin, ExAmlExternalWalkEnd, NULL);
> +
> + if (Gbl_DoExternalsInPlace)
> + {
> + TrWalkParseTree (Gbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD,
> + ExAmlExternalWalkBegin, NULL, NULL);
> + }
> + else
> + {
> + TrWalkParseTree (Gbl_ParseTreeRoot, ASL_WALK_VISIT_TWICE,
> + ExAmlExternalWalkBegin, ExAmlExternalWalkEnd, NULL);
> + }
> UtEndEvent (Event);
> }
>
> @@ -419,6 +428,18 @@ CmDoCompile (
> NULL, &AnalysisWalkInfo);
> UtEndEvent (Event);
>
> + /*
> + * ASL-/ASL+ converter: Gbl_ParseTreeRoot->CommentList contains the
> + * very last comment of a given ASL file because it's the last constructed
> + * node during compilation. We take the very last comment and save it in a
> + * global for it to be used by the disassembler.
> + */
> + if (Gbl_CaptureComments)
> + {
> + AcpiGbl_LastListHead = Gbl_ParseTreeRoot->Asl.CommentList;
> + Gbl_ParseTreeRoot->Asl.CommentList = NULL;
> + }
> +
> /* Calculate all AML package lengths */
>
> Event = UtBeginEvent ("Finish AML package length generation");
> @@ -872,7 +893,11 @@ CmCleanupAndExit (
>
> /* Final cleanup after compiling one file */
>
> - CmDeleteCaches ();
> + if (!Gbl_DoAslConversion)
> + {
> + CmDeleteCaches ();
> + }
> +
> }
>
>
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index dc6f649..841d4f0 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -648,6 +648,12 @@ void
> CgGenerateAmlOutput (
> void);
>
> +void
> +CgLocalWriteAmlData (
> + ACPI_PARSE_OBJECT *Op,
> + void *Buffer,
> + UINT32 Length);
> +
>
> /*
> * aslfile
> @@ -1431,4 +1437,14 @@ ACPI_STATUS
> DtCreateTemplates (
> char **argv);
>
> +
> +/*
> + * ASL/ASL+ converter debug
> + */
> +void
> +CvDbgPrint (
> + char *Fmt,
> + ...);
> +
> +
> #endif /* __ASLCOMPILER_H */
> diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l
> index e4592aa..9d84dba 100644
> --- a/src/acpica/source/compiler/aslcompiler.l
> +++ b/src/acpica/source/compiler/aslcompiler.l
> @@ -116,6 +116,7 @@
>
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> +#include "acconvert.h"
>
> #include <stdlib.h>
> #include <string.h>
> @@ -138,10 +139,10 @@ YYSTYPE AslCompilerlval;
> static void
> AslDoLineDirective (void);
>
> -static char
> +static BOOLEAN
> AslDoComment (void);
>
> -static char
> +static BOOLEAN
> AslDoCommentType2 (void);
>
> static char
> diff --git a/src/acpica/source/compiler/asldebug.c b/src/acpica/source/compiler/asldebug.c
> index 84eefbf..b50ad6b 100644
> --- a/src/acpica/source/compiler/asldebug.c
> +++ b/src/acpica/source/compiler/asldebug.c
> @@ -132,6 +132,40 @@ UtDumpParseOpName (
>
> /*******************************************************************************
> *
> + * FUNCTION: CvDbgPrint
> + *
> + * PARAMETERS: Type - Type of output
> + * Fmt - Printf format string
> + * ... - variable printf list
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Print statement for debug messages within the converter.
> + *
> + ******************************************************************************/
> +
> +void
> +CvDbgPrint (
> + char *Fmt,
> + ...)
> +{
> + va_list Args;
> +
> +
> + if (!Gbl_CaptureComments || !AcpiGbl_DebugAslConversion)
> + {
> + return;
> + }
> +
> + va_start (Args, Fmt);
> + (void) vfprintf (AcpiGbl_ConvDebugFile, Fmt, Args);
> + va_end (Args);
> + return;
> +}
> +
> +
> +/*******************************************************************************
> + *
> * FUNCTION: UtDumpIntegerOp
> *
> * PARAMETERS: Op - Current parse op
> diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h
> index 8c47087..b527eba 100644
> --- a/src/acpica/source/compiler/asldefine.h
> +++ b/src/acpica/source/compiler/asldefine.h
> @@ -231,7 +231,6 @@
> /*
> * Macros for debug output
> */
> -
> #define DEBUG_MAX_LINE_LENGTH 61
> #define DEBUG_SPACES_PER_INDENT 3
> #define DEBUG_FULL_LINE_LENGTH 71
> @@ -257,4 +256,11 @@
> " %08X %04X %04X %01X %04X %04X %05X %05X "\
> "%08X %08X %08X %08X %08X %08X %04X %02d %5d %5d %5d %5d\n"
>
> +/*
> + * Macros for ASL/ASL+ converter
> + */
> +#define COMMENT_CAPTURE_ON Gbl_CommentState.CaptureComments = TRUE;
> +#define COMMENT_CAPTURE_OFF Gbl_CommentState.CaptureComments = FALSE;
> +
> +
> #endif /* ASLDEFINE.H */
> diff --git a/src/acpica/source/compiler/aslfiles.c b/src/acpica/source/compiler/aslfiles.c
> index ea9ba54..e53a212 100644
> --- a/src/acpica/source/compiler/aslfiles.c
> +++ b/src/acpica/source/compiler/aslfiles.c
> @@ -583,8 +583,14 @@ FlOpenAmlOutputFile (
> if (!Filename)
> {
> /* Create the output AML filename */
> -
> - Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_AML_CODE);
> + if (!Gbl_CaptureComments)
> + {
> + Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_AML_CODE);
> + }
> + else
> + {
> + Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_CONVERT_AML);
> + }
> if (!Filename)
> {
> AslCommonError (ASL_ERROR, ASL_MSG_OUTPUT_FILENAME,
> @@ -926,6 +932,28 @@ FlOpenMiscOutputFiles (
> AslCompilerFileHeader (ASL_FILE_NAMESPACE_OUTPUT);
> }
>
> + /* Create a debug file for the converter */
> +
> + if (AcpiGbl_DebugAslConversion)
> + {
> + Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_CONVERT_DEBUG);
> + if (!Filename)
> + {
> + AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
> + 0, 0, 0, 0, NULL, NULL);
> + return (AE_ERROR);
> + }
> +
> + /* Open the converter debug file, text mode */
> +
> + FlOpenFile (ASL_FILE_CONV_DEBUG_OUTPUT, Filename, "w+t");
> +
> + AslCompilerSignon (ASL_FILE_CONV_DEBUG_OUTPUT);
> + AslCompilerFileHeader (ASL_FILE_CONV_DEBUG_OUTPUT);
> +
> + AcpiGbl_ConvDebugFile = Gbl_Files[ASL_FILE_CONV_DEBUG_OUTPUT].Handle;
> + }
> +
> return (AE_OK);
> }
>
> diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h
> index da706bd..9e8fa7f 100644
> --- a/src/acpica/source/compiler/aslglobal.h
> +++ b/src/acpica/source/compiler/aslglobal.h
> @@ -156,7 +156,8 @@ ASL_FILE_INFO Gbl_Files [ASL_NUM_FILES] =
> {NULL, NULL, "C Include: ", "C Header Output"},
> {NULL, NULL, "Offset Table: ", "C Offset Table Output"},
> {NULL, NULL, "Device Map: ", "Device Map Output"},
> - {NULL, NULL, "Cross Ref: ", "Cross-reference Output"}
> + {NULL, NULL, "Cross Ref: ", "Cross-reference Output"},
> + {NULL, NULL, "Converter db :", "Converter debug Output"}
> };
>
> #else
> @@ -185,7 +186,7 @@ extern int AslCompilerdebug;
>
>
> #define ASL_DEFAULT_LINE_BUFFER_SIZE (1024 * 32) /* 32K */
> -#define ASL_MSG_BUFFER_SIZE 4096
> +#define ASL_MSG_BUFFER_SIZE (1024 * 32) /* 32k */
> #define ASL_MAX_DISABLED_MESSAGES 32
> #define HEX_TABLE_LINE_SIZE 8
> #define HEX_LISTING_LINE_SIZE 8
> @@ -254,6 +255,9 @@ ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_PruneParseTree, FALSE);
> ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_DoTypechecking, TRUE);
> ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_EnableReferenceTypechecking, FALSE);
> ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_DoExternals, TRUE);
> +ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_DoExternalsInPlace, FALSE);
> +ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_DoAslConversion, FALSE);
> +ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_OptimizeTrivialParseNodes, TRUE);
>
>
> #define HEX_OUTPUT_NONE 0
> @@ -337,6 +341,20 @@ ASL_EXTERN char ASL_INIT_GLOBAL (*Gbl_TableId, "NO_ID");
> ASL_EXTERN UINT8 ASL_INIT_GLOBAL (Gbl_PruneDepth, 0);
> ASL_EXTERN UINT16 ASL_INIT_GLOBAL (Gbl_PruneType, 0);
>
> +ASL_EXTERN ASL_FILE_NODE ASL_INIT_GLOBAL (*Gbl_IncludeFileStack, NULL);
> +
> +/* Specific to the -q option */
> +
> +ASL_EXTERN ASL_COMMENT_STATE Gbl_CommentState;
> +
> +
> +/*
> + * Determines if an inline comment should be saved in the InlineComment or NodeEndComment
> + * field of ACPI_PARSE_OBJECT.
> + */
> +ASL_EXTERN ACPI_COMMENT_NODE ASL_INIT_GLOBAL (*Gbl_Comment_List_Head, NULL);
> +ASL_EXTERN ACPI_COMMENT_NODE ASL_INIT_GLOBAL (*Gbl_Comment_List_Tail, NULL);
> +ASL_EXTERN char ASL_INIT_GLOBAL (*Gbl_Inline_Comment_Buffer, NULL);
>
> /* Static structures */
>
> diff --git a/src/acpica/source/compiler/asllength.c b/src/acpica/source/compiler/asllength.c
> index fc7ed50..4c15cfa 100644
> --- a/src/acpica/source/compiler/asllength.c
> +++ b/src/acpica/source/compiler/asllength.c
> @@ -116,6 +116,7 @@
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "amlcode.h"
> +#include "acconvert.h"
>
>
> #define _COMPONENT ACPI_COMPILER
> @@ -208,7 +209,9 @@ LnPackageLengthWalk (
> Op->Asl.AmlLength +
> Op->Asl.AmlOpcodeLength +
> Op->Asl.AmlPkgLenBytes +
> - Op->Asl.AmlSubtreeLength);
> + Op->Asl.AmlSubtreeLength +
> + CvCalculateCommentLengths (Op)
> + );
> }
> return (AE_OK);
> }
> diff --git a/src/acpica/source/compiler/aslmap.c b/src/acpica/source/compiler/aslmap.c
> index 7d45fd3..96e54a6 100644
> --- a/src/acpica/source/compiler/aslmap.c
> +++ b/src/acpica/source/compiler/aslmap.c
> @@ -238,7 +238,7 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
> /* BITSPERBYTE_SEVEN */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0),
> /* BITSPERBYTE_SIX */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0),
> /* BREAK */ OP_TABLE_ENTRY (AML_BREAK_OP, 0, 0, 0),
> -/* BREAKPOINT */ OP_TABLE_ENTRY (AML_BREAK_POINT_OP, 0, 0, 0),
> +/* BREAKPOINT */ OP_TABLE_ENTRY (AML_BREAKPOINT_OP, 0, 0, 0),
> /* BUFFER */ OP_TABLE_ENTRY (AML_BUFFER_OP, 0, NODE_AML_PACKAGE, ACPI_BTYPE_BUFFER),
> /* BUSMASTERTYPE_MASTER */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0),
> /* BUSMASTERTYPE_NOTMASTER */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
> @@ -248,12 +248,12 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
> /* CLOCKPHASE_SECOND */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0),
> /* CLOCKPOLARITY_HIGH */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0),
> /* CLOCKPOLARITY_LOW */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
> -/* CONCATENATE */ OP_TABLE_ENTRY (AML_CONCAT_OP, 0, 0, ACPI_BTYPE_COMPUTE_DATA),
> -/* CONCATENATERESTEMPLATE */ OP_TABLE_ENTRY (AML_CONCAT_RES_OP, 0, 0, ACPI_BTYPE_BUFFER),
> -/* CONDREFOF */ OP_TABLE_ENTRY (AML_COND_REF_OF_OP, 0, 0, ACPI_BTYPE_INTEGER),
> +/* CONCATENATE */ OP_TABLE_ENTRY (AML_CONCATENATE_OP, 0, 0, ACPI_BTYPE_COMPUTE_DATA),
> +/* CONCATENATERESTEMPLATE */ OP_TABLE_ENTRY (AML_CONCATENATE_TEMPLATE_OP,0, 0, ACPI_BTYPE_BUFFER),
> +/* CONDREFOF */ OP_TABLE_ENTRY (AML_CONDITIONAL_REF_OF_OP, 0, 0, ACPI_BTYPE_INTEGER),
> /* CONNECTION */ OP_TABLE_ENTRY (AML_INT_CONNECTION_OP, 0, 0, 0),
> /* CONTINUE */ OP_TABLE_ENTRY (AML_CONTINUE_OP, 0, 0, 0),
> -/* COPY */ OP_TABLE_ENTRY (AML_COPY_OP, 0, 0, ACPI_BTYPE_DATA_REFERENCE),
> +/* COPYOBJECT */ OP_TABLE_ENTRY (AML_COPY_OBJECT_OP, 0, 0, ACPI_BTYPE_DATA_REFERENCE),
> /* CREATEBITFIELD */ OP_TABLE_ENTRY (AML_CREATE_BIT_FIELD_OP, 0, 0, 0),
> /* CREATEBYTEFIELD */ OP_TABLE_ENTRY (AML_CREATE_BYTE_FIELD_OP, 0, 0, 0),
> /* CREATEDWORDFIELD */ OP_TABLE_ENTRY (AML_CREATE_DWORD_FIELD_OP, 0, 0, 0),
> @@ -333,14 +333,14 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
> /* IORESTRICT_PRESERVE */ OP_TABLE_ENTRY (AML_BYTE_OP, 3, 0, 0),
> /* IRQ */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
> /* IRQNOFLAGS */ OP_TABLE_ENTRY (AML_DEFAULT_ARG_OP, 0, 0, 0),
> -/* LAND */ OP_TABLE_ENTRY (AML_LAND_OP, 0, 0, ACPI_BTYPE_INTEGER),
> -/* LEQUAL */ OP_TABLE_ENTRY (AML_LEQUAL_OP, 0, 0, ACPI_BTYPE_INTEGER),
> -/* LGREATER */ OP_TABLE_ENTRY (AML_LGREATER_OP, 0, 0, ACPI_BTYPE_INTEGER),
> -/* LGREATEREQUAL */ OP_TABLE_ENTRY (AML_LGREATEREQUAL_OP, 0, 0, ACPI_BTYPE_INTEGER),
> -/* LLESS */ OP_TABLE_ENTRY (AML_LLESS_OP, 0, 0, ACPI_BTYPE_INTEGER),
> -/* LLESSEQUAL */ OP_TABLE_ENTRY (AML_LLESSEQUAL_OP, 0, 0, ACPI_BTYPE_INTEGER),
> -/* LNOT */ OP_TABLE_ENTRY (AML_LNOT_OP, 0, 0, ACPI_BTYPE_INTEGER),
> -/* LNOTEQUAL */ OP_TABLE_ENTRY (AML_LNOTEQUAL_OP, 0, 0, ACPI_BTYPE_INTEGER),
> +/* LAND */ OP_TABLE_ENTRY (AML_LOGICAL_AND_OP, 0, 0, ACPI_BTYPE_INTEGER),
> +/* LEQUAL */ OP_TABLE_ENTRY (AML_LOGICAL_EQUAL_OP, 0, 0, ACPI_BTYPE_INTEGER),
> +/* LGREATER */ OP_TABLE_ENTRY (AML_LOGICAL_GREATER_OP, 0, 0, ACPI_BTYPE_INTEGER),
> +/* LGREATEREQUAL */ OP_TABLE_ENTRY (AML_LOGICAL_GREATER_EQUAL_OP,0, 0, ACPI_BTYPE_INTEGER),
> +/* LLESS */ OP_TABLE_ENTRY (AML_LOGICAL_LESS_OP, 0, 0, ACPI_BTYPE_INTEGER),
> +/* LLESSEQUAL */ OP_TABLE_ENTRY (AML_LOGICAL_LESS_EQUAL_OP, 0, 0, ACPI_BTYPE_INTEGER),
> +/* LNOT */ OP_TABLE_ENTRY (AML_LOGICAL_NOT_OP, 0, 0, ACPI_BTYPE_INTEGER),
> +/* LNOTEQUAL */ OP_TABLE_ENTRY (AML_LOGICAL_NOT_EQUAL_OP, 0, 0, ACPI_BTYPE_INTEGER),
> /* LOAD */ OP_TABLE_ENTRY (AML_LOAD_OP, 0, 0, 0),
> /* LOADTABLE */ OP_TABLE_ENTRY (AML_LOAD_TABLE_OP, 0, 0, ACPI_BTYPE_DDB_HANDLE),
> /* LOCAL0 */ OP_TABLE_ENTRY (AML_LOCAL0, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS),
> @@ -353,7 +353,7 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
> /* LOCAL7 */ OP_TABLE_ENTRY (AML_LOCAL7, 0, 0, ACPI_BTYPE_OBJECTS_AND_REFS),
> /* LOCKRULE_LOCK */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_LOCK_ALWAYS, 0, 0),
> /* LOCKRULE_NOLOCK */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_LOCK_NEVER, 0, 0),
> -/* LOR */ OP_TABLE_ENTRY (AML_LOR_OP, 0, 0, ACPI_BTYPE_INTEGER),
> +/* LOR */ OP_TABLE_ENTRY (AML_LOGICAL_OR_OP, 0, 0, ACPI_BTYPE_INTEGER),
> /* MATCH */ OP_TABLE_ENTRY (AML_MATCH_OP, 0, 0, ACPI_BTYPE_INTEGER),
> /* MATCHTYPE_MEQ */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, MATCH_MEQ, 0, ACPI_BTYPE_INTEGER),
> /* MATCHTYPE_MGE */ OP_TABLE_ENTRY (AML_RAW_DATA_BYTE, MATCH_MGE, 0, ACPI_BTYPE_INTEGER),
> @@ -419,7 +419,7 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
> /* PIN_PULLDEFAULT */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
> /* PIN_PULLDOWN */ OP_TABLE_ENTRY (AML_BYTE_OP, 2, 0, 0),
> /* PIN_PULLUP */ OP_TABLE_ENTRY (AML_BYTE_OP, 1, 0, 0),
> -/* POWERRESOURCE */ OP_TABLE_ENTRY (AML_POWER_RES_OP, 0, NODE_AML_PACKAGE, 0),
> +/* POWERRESOURCE */ OP_TABLE_ENTRY (AML_POWER_RESOURCE_OP, 0, NODE_AML_PACKAGE, 0),
> /* PROCESSOR */ OP_TABLE_ENTRY (AML_PROCESSOR_OP, 0, NODE_AML_PACKAGE, 0),
> /* QWORDCONST */ OP_TABLE_ENTRY (AML_RAW_DATA_QWORD, 0, 0, ACPI_BTYPE_INTEGER),
> /* QWORDIO */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
> @@ -484,8 +484,8 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
> /* 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_BUFFER),
> -/* TODECIMALSTRING */ OP_TABLE_ENTRY (AML_TO_DECSTRING_OP, 0, 0, ACPI_BTYPE_STRING),
> -/* TOHEXSTRING */ OP_TABLE_ENTRY (AML_TO_HEXSTRING_OP, 0, 0, ACPI_BTYPE_STRING),
> +/* TODECIMALSTRING */ OP_TABLE_ENTRY (AML_TO_DECIMAL_STRING_OP, 0, 0, ACPI_BTYPE_STRING),
> +/* TOHEXSTRING */ OP_TABLE_ENTRY (AML_TO_HEX_STRING_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),
> @@ -500,7 +500,7 @@ const ASL_MAPPING_ENTRY AslKeywordMapping [] =
> /* UPDATERULE_ONES */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_UPDATE_WRITE_AS_ONES, 0, 0),
> /* UPDATERULE_PRESERVE */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_UPDATE_PRESERVE, 0, 0),
> /* UPDATERULE_ZEROS */ OP_TABLE_ENTRY (AML_BYTE_OP, AML_FIELD_UPDATE_WRITE_AS_ZEROS,0, 0),
> -/* VAR_PACKAGE */ OP_TABLE_ENTRY (AML_VAR_PACKAGE_OP, 0, NODE_AML_PACKAGE, ACPI_BTYPE_PACKAGE),
> +/* VARIABLE_PACKAGE */ OP_TABLE_ENTRY (AML_VARIABLE_PACKAGE_OP, 0, NODE_AML_PACKAGE, ACPI_BTYPE_PACKAGE),
> /* VENDORLONG */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
> /* VENDORSHORT */ OP_TABLE_ENTRY (AML_BYTE_OP, 0, 0, 0),
> /* WAIT */ OP_TABLE_ENTRY (AML_WAIT_OP, 0, 0, ACPI_BTYPE_INTEGER),
> diff --git a/src/acpica/source/compiler/asloffset.c b/src/acpica/source/compiler/asloffset.c
> index 3dac50d..6105f8c 100644
> --- a/src/acpica/source/compiler/asloffset.c
> +++ b/src/acpica/source/compiler/asloffset.c
> @@ -257,7 +257,7 @@ LsAmlOffsetWalk (
> break;
>
> case AML_PACKAGE_OP:
> - case AML_VAR_PACKAGE_OP:
> + case AML_VARIABLE_PACKAGE_OP:
>
> /* Get the package element count */
>
> diff --git a/src/acpica/source/compiler/asloperands.c b/src/acpica/source/compiler/asloperands.c
> index 9d6a9cd..7806dcc 100644
> --- a/src/acpica/source/compiler/asloperands.c
> +++ b/src/acpica/source/compiler/asloperands.c
> @@ -393,7 +393,7 @@ OpnDoFieldCommon (
> Next->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
> PkgLengthNode->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
> }
> - else if (NewBitOffset == CurrentBitOffset)
> + else if ((NewBitOffset == CurrentBitOffset) && Gbl_OptimizeTrivialParseNodes)
> {
> /*
> * Offset is redundant; we don't need to output an
> @@ -424,7 +424,8 @@ OpnDoFieldCommon (
> CurrentBitOffset += NewBitOffset;
>
> if ((NewBitOffset == 0) &&
> - (Next->Asl.ParseOpcode == PARSEOP_RESERVED_BYTES))
> + (Next->Asl.ParseOpcode == PARSEOP_RESERVED_BYTES) &&
> + Gbl_OptimizeTrivialParseNodes)
> {
> /*
> * Unnamed field with a bit length of zero. We can
> @@ -1144,7 +1145,7 @@ OpnAttachNameToNode (
> case AML_METHOD_OP:
> case AML_MUTEX_OP:
> case AML_REGION_OP:
> - case AML_POWER_RES_OP:
> + case AML_POWER_RESOURCE_OP:
> case AML_PROCESSOR_OP:
> case AML_THERMAL_ZONE_OP:
> case AML_NAME_OP:
> diff --git a/src/acpica/source/compiler/aslprimaries.y b/src/acpica/source/compiler/aslprimaries.y
> index 9e8d711..bc39c51 100644
> --- a/src/acpica/source/compiler/aslprimaries.y
> +++ b/src/acpica/source/compiler/aslprimaries.y
> @@ -2,6 +2,8 @@ NoEcho('
> /******************************************************************************
> *
> * Module Name: aslprimaries.y - Rules for primary ASL operators
> + * - Keep this file synched with the
> + * CvParseOpBlockType function in cvcompiler.c
> *
> *****************************************************************************/
>
> @@ -218,9 +220,9 @@ BreakPointTerm
> ;
>
> BufferTerm
> - : PARSEOP_BUFFER {$<n>$ = TrCreateLeafNode (PARSEOP_BUFFER);}
> + : PARSEOP_BUFFER {$<n>$ = TrCreateLeafNode (PARSEOP_BUFFER); COMMENT_CAPTURE_OFF; }
> OptionalDataCount
> - '{' BufferTermData '}' {$$ = TrLinkChildren ($<n>2,2,$3,$5);}
> + '{' BufferTermData '}' {$$ = TrLinkChildren ($<n>2,2,$3,$5); COMMENT_CAPTURE_ON;}
> ;
>
> BufferTermData
> @@ -475,8 +477,9 @@ ElseIfTerm
>
> ElseTerm
> : {$$ = NULL;}
> - | PARSEOP_ELSE '{' {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
> - TermList '}' {$$ = TrLinkChildren ($<n>3,1,$4);}
> + | PARSEOP_ELSE '{'
> + TermList {$<n>$ = TrCreateLeafNode (PARSEOP_ELSE);}
> + '}' {$$ = TrLinkChildren ($<n>4,1,$3);}
>
> | PARSEOP_ELSE '{'
> error '}' {$$ = AslDoError(); yyclearin;}
> @@ -617,16 +620,16 @@ FromBCDTerm
>
> FunctionTerm
> : PARSEOP_FUNCTION
> - PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
> + PARSEOP_OPEN_PAREN {COMMENT_CAPTURE_OFF; $<n>$ = TrCreateLeafNode (PARSEOP_METHOD); }
> NameString
> OptionalParameterTypePackage
> OptionalParameterTypesPackage
> - PARSEOP_CLOSE_PAREN '{'
> + PARSEOP_CLOSE_PAREN '{' {COMMENT_CAPTURE_ON; }
> 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);}
> + TrCreateValuedLeafNode (PARSEOP_BYTECONST, 0),$5,$6,$10);}
> | PARSEOP_FUNCTION
> PARSEOP_OPEN_PAREN
> error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;}
> @@ -850,17 +853,17 @@ MatchTerm
>
> MethodTerm
> : PARSEOP_METHOD
> - PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD);}
> + PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafNode (PARSEOP_METHOD); COMMENT_CAPTURE_OFF;}
> NameString
> OptionalByteConstExpr {UtCheckIntegerRange ($5, 0, 7);}
> OptionalSerializeRuleKeyword
> OptionalByteConstExpr
> OptionalParameterTypePackage
> OptionalParameterTypesPackage
> - PARSEOP_CLOSE_PAREN '{'
> + PARSEOP_CLOSE_PAREN '{' {COMMENT_CAPTURE_ON;}
> TermList '}' {$$ = TrLinkChildren ($<n>3,7,
> TrSetNodeFlags ($4, NODE_IS_NAME_DECLARATION),
> - $5,$7,$8,$9,$10,$13);}
> + $5,$7,$8,$9,$10,$14);}
> | PARSEOP_METHOD
> PARSEOP_OPEN_PAREN
> error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;}
> diff --git a/src/acpica/source/compiler/aslprintf.c b/src/acpica/source/compiler/aslprintf.c
> index 7c53e0a..87611a0 100644
> --- a/src/acpica/source/compiler/aslprintf.c
> +++ b/src/acpica/source/compiler/aslprintf.c
> @@ -426,7 +426,7 @@ OpcCreateConcatenateNode (
> }
>
> NewConcatOp = TrAllocateNode (PARSEOP_CONCATENATE);
> - NewConcatOp->Asl.AmlOpcode = AML_CONCAT_OP;
> + NewConcatOp->Asl.AmlOpcode = AML_CONCATENATE_OP;
> NewConcatOp->Asl.AcpiBtype = 0x7;
> NewConcatOp->Asl.LogicalLineNumber = Op->Asl.LogicalLineNumber;
>
> diff --git a/src/acpica/source/compiler/aslresources.y b/src/acpica/source/compiler/aslresources.y
> index c88e9c9..2926b07 100644
> --- a/src/acpica/source/compiler/aslresources.y
> +++ b/src/acpica/source/compiler/aslresources.y
> @@ -2,6 +2,8 @@ NoEcho('
> /******************************************************************************
> *
> * Module Name: aslresources.y - Bison/Yacc production rules for resources
> + * - Keep this file synched with the
> + * CvParseOpBlockType function in cvcompiler.c
> *
> *****************************************************************************/
>
> @@ -128,14 +130,15 @@ NoEcho('
> * Also, insert the EndTag at the end of the template.
> */
> ResourceTemplateTerm
> - : PARSEOP_RESOURCETEMPLATE
> + : PARSEOP_RESOURCETEMPLATE {COMMENT_CAPTURE_OFF;}
> OptionalParentheses
> '{'
> ResourceMacroList '}' {$$ = TrCreateNode (PARSEOP_RESOURCETEMPLATE,4,
> TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
> TrCreateLeafNode (PARSEOP_DEFAULT_ARG),
> - $4,
> - TrCreateLeafNode (PARSEOP_ENDTAG));}
> + $5,
> + TrCreateLeafNode (PARSEOP_ENDTAG));
> + COMMENT_CAPTURE_ON;}
> ;
>
> OptionalParentheses
> diff --git a/src/acpica/source/compiler/aslrules.y b/src/acpica/source/compiler/aslrules.y
> index c6a6413..d55b729 100644
> --- a/src/acpica/source/compiler/aslrules.y
> +++ b/src/acpica/source/compiler/aslrules.y
> @@ -2,6 +2,8 @@ NoEcho('
> /******************************************************************************
> *
> * Module Name: aslrules.y - Main Bison/Yacc production rules
> + * - Keep this file synched with the
> + * CvParseOpBlockType function in cvcompiler.c
> *
> *****************************************************************************/
>
> @@ -154,14 +156,14 @@ AslCode
> */
> DefinitionBlockTerm
> : PARSEOP_DEFINITION_BLOCK
> - PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITION_BLOCK);}
> + PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafNode (PARSEOP_DEFINITION_BLOCK); COMMENT_CAPTURE_OFF;}
> String ','
> String ','
> ByteConst ','
> String ','
> String ','
> DWordConst
> - PARSEOP_CLOSE_PAREN {TrSetEndLineNumber ($<n>3);}
> + PARSEOP_CLOSE_PAREN {TrSetEndLineNumber ($<n>3); COMMENT_CAPTURE_ON;}
> '{' TermList '}' {$$ = TrLinkChildren ($<n>3,7,
> $4,$6,$8,$10,$12,$14,$18);}
> ;
> @@ -249,9 +251,9 @@ TermArg
>
> MethodInvocationTerm
> : NameString
> - PARSEOP_OPEN_PAREN {TrUpdateNode (PARSEOP_METHODCALL, $1);}
> + PARSEOP_OPEN_PAREN {TrUpdateNode (PARSEOP_METHODCALL, $1); COMMENT_CAPTURE_OFF;}
> ArgList
> - PARSEOP_CLOSE_PAREN {$$ = TrLinkChildNode ($1,$4);}
> + PARSEOP_CLOSE_PAREN {$$ = TrLinkChildNode ($1,$4); COMMENT_CAPTURE_ON;}
> ;
>
> /* OptionalCount must appear before ByteList or an incorrect reduction will result */
> diff --git a/src/acpica/source/compiler/aslstartup.c b/src/acpica/source/compiler/aslstartup.c
> index 37f7641..e7bf33f 100644
> --- a/src/acpica/source/compiler/aslstartup.c
> +++ b/src/acpica/source/compiler/aslstartup.c
> @@ -117,6 +117,7 @@
> #include "actables.h"
> #include "acdisasm.h"
> #include "acapps.h"
> +#include "acconvert.h"
>
> #define _COMPONENT ACPI_COMPILER
> ACPI_MODULE_NAME ("aslstartup")
> @@ -195,6 +196,15 @@ AslInitializeGlobals (
> Gbl_Files[i].Handle = NULL;
> Gbl_Files[i].Filename = NULL;
> }
> +
> + if (Gbl_CaptureComments)
> + {
> + Gbl_CommentState.SpacesBefore = 0;
> + Gbl_CommentState.CommentType = 1;
> + Gbl_CommentState.Latest_Parse_Node = NULL;
> + Gbl_CommentState.ParsingParenBraceNode = NULL;
> + Gbl_CommentState.CaptureComments = TRUE;
> + }
> }
>
>
> @@ -522,6 +532,28 @@ AslDoOneFile (
>
> AeClearErrorLog ();
> PrTerminatePreprocessor ();
> +
> + /* ASL-to-ASL+ conversion - Perform immediate disassembly */
> +
> + if (Gbl_DoAslConversion)
> + {
> + /*
> + * New input file is the output AML file from above.
> + * New output is from the input ASL file from above.
> + */
> + Gbl_OutputFilenamePrefix = Gbl_Files[ASL_FILE_INPUT].Filename;
> + CvDbgPrint ("OUTPUTFILENAME: %s\n", Gbl_OutputFilenamePrefix);
> + Gbl_Files[ASL_FILE_INPUT].Filename =
> + Gbl_Files[ASL_FILE_AML_OUTPUT].Filename;
> +
> + fprintf (stderr, "\n");
> + AslDoDisassembly ();
> +
> + /* delete the AML file. This AML file should never be utilized by AML interpreters. */
> +
> + FlDeleteFile (ASL_FILE_AML_OUTPUT);
> + }
> +
> return (AE_OK);
>
> /*
> diff --git a/src/acpica/source/compiler/aslsupport.l b/src/acpica/source/compiler/aslsupport.l
> index cc5cf52..e877edf 100644
> --- a/src/acpica/source/compiler/aslsupport.l
> +++ b/src/acpica/source/compiler/aslsupport.l
> @@ -124,21 +124,12 @@
> #define ASL_HEX_CONSTANT 3
>
>
> -/* File node - used for "Include" operator file stack */
> -
> -typedef struct asl_file_node
> +void
> +yyerror (char const *s)
> {
> - FILE *File;
> - UINT32 CurrentLineNumber;
> - YY_BUFFER_STATE State;
> - char *Filename;
> - struct asl_file_node *Next;
>
> -} ASL_FILE_NODE;
> -
> -/* File stack for the "Include" operator (NOT #include operator) */
> -
> -ASL_FILE_NODE *Gbl_IncludeFileStack = NULL;
> + AcpiOsPrintf ("YYERROR: %s\n", s);
> +}
>
>
> /*******************************************************************************
> @@ -361,6 +352,10 @@ AslPushInputFileStack (
>
> Gbl_CurrentLineNumber = 1;
> yyin = InputFile;
> +
> + /* converter: reset the comment state to STANDARD_COMMENT */
> +
> + Gbl_CommentState.CommentType = STANDARD_COMMENT;
> }
>
>
> @@ -464,6 +459,11 @@ AslInsertLineBuffer (
>
> AslResetCurrentLineBuffer ();
> }
> +
> + if (Gbl_CaptureComments)
> + {
> + CvProcessCommentState (SourceChar);
> + }
> }
> }
>
> @@ -531,16 +531,26 @@ count (
> *
> ******************************************************************************/
>
> -static char
> +static BOOLEAN
> AslDoComment (
> void)
> {
> - int c;
> - int c1 = 0;
> + int c;
> + int c1 = 0;
> + char *StringBuffer = MsgBuffer;
> + char *EndBuffer = MsgBuffer + ASL_MSG_BUFFER_SIZE;
> + ASL_COMMENT_STATE CurrentState = Gbl_CommentState; /* to reference later on */
>
>
> AslInsertLineBuffer ('/');
> AslInsertLineBuffer ('*');
> + if (Gbl_CaptureComments && CurrentState.CaptureComments)
> + {
> + *StringBuffer = '/';
> + ++StringBuffer;
> + *StringBuffer = '*';
> + ++StringBuffer;
> + }
>
> loop:
>
> @@ -549,6 +559,11 @@ loop:
> while (((c = input ()) != '*') && (c != EOF))
> {
> AslInsertLineBuffer (c);
> + if (Gbl_CaptureComments && CurrentState.CaptureComments)
> + {
> + *StringBuffer = c;
> + ++StringBuffer;
> + }
> c1 = c;
> }
>
> @@ -572,10 +587,15 @@ loop:
> /* Comment is closed only if the NEXT character is a slash */
>
> AslInsertLineBuffer (c);
> + if (Gbl_CaptureComments && CurrentState.CaptureComments)
> + {
> + *StringBuffer = c;
> + ++StringBuffer;
> + }
>
> if (((c1 = input ()) != '/') && (c1 != EOF))
> {
> - unput(c1);
> + unput (c1);
> goto loop;
> }
>
> @@ -583,8 +603,13 @@ loop:
> {
> goto EarlyEOF;
> }
> + if (StringBuffer > EndBuffer)
> + {
> + goto BufferOverflow;
> + }
>
> AslInsertLineBuffer (c1);
> + CvProcessComment (CurrentState, StringBuffer, c1);
> return (TRUE);
>
>
> @@ -597,6 +622,18 @@ EarlyEOF:
> Gbl_CurrentLineOffset, Gbl_CurrentColumn,
> Gbl_Files[ASL_FILE_INPUT].Filename, NULL);
> return (FALSE);
> +
> +
> +BufferOverflow:
> +
> + /* Comment was too long */
> +
> + AslCommonError (ASL_ERROR, ASL_MSG_STRING_LENGTH,
> + Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
> + Gbl_CurrentLineOffset, Gbl_CurrentColumn,
> + Gbl_Files[ASL_FILE_INPUT].Filename, "Max length 4096");
> + return (FALSE);
> +
> }
>
>
> @@ -608,23 +645,40 @@ EarlyEOF:
> *
> * RETURN: none
> *
> - * DESCRIPTION: Process a new "//" comment.
> + * DESCRIPTION: Process a new "//" comment. Inline comments will be converted
> + * to "/ *" standard comments.
> *
> ******************************************************************************/
>
> -static char
> +static BOOLEAN
> AslDoCommentType2 (
> void)
> {
> - int c;
> + int c;
> + char *StringBuffer = MsgBuffer;
> + char *EndBuffer = MsgBuffer + ASL_MSG_BUFFER_SIZE;
> + ASL_COMMENT_STATE CurrentState = Gbl_CommentState;
>
>
> AslInsertLineBuffer ('/');
> - AslInsertLineBuffer ('/');
> + AslInsertLineBuffer ('*');
> +
> + if (Gbl_CaptureComments && CurrentState.CaptureComments)
> + {
> + *StringBuffer = '/';
> + ++StringBuffer;
> + *StringBuffer = '*';
> + ++StringBuffer;
> + }
>
> while (((c = input ()) != '\n') && (c != EOF))
> {
> AslInsertLineBuffer (c);
> + if (Gbl_CaptureComments && CurrentState.CaptureComments)
> + {
> + *StringBuffer = c;
> + ++StringBuffer;
> + }
> }
>
> if (c == EOF)
> @@ -634,8 +688,26 @@ AslDoCommentType2 (
> c = '\n';
> }
>
> + if (StringBuffer > EndBuffer)
> + {
> + goto BufferOverflow;
> + }
> AslInsertLineBuffer (c);
> +
> + CvProcessCommentType2 (CurrentState, StringBuffer);
> return (TRUE);
> +
> +
> +BufferOverflow:
> +
> + /* Comment was too long */
> +
> + AslCommonError (ASL_ERROR, ASL_MSG_STRING_LENGTH,
> + Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
> + Gbl_CurrentLineOffset, Gbl_CurrentColumn,
> + Gbl_Files[ASL_FILE_INPUT].Filename, "Max length 4096");
> + return (FALSE);
> +
> }
>
>
> diff --git a/src/acpica/source/compiler/asltree.c b/src/acpica/source/compiler/asltree.c
> index c2230c3..d707ef4 100644
> --- a/src/acpica/source/compiler/asltree.c
> +++ b/src/acpica/source/compiler/asltree.c
> @@ -116,6 +116,7 @@
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "acapps.h"
> +#include "acconvert.h"
> #include <time.h>
>
> #define _COMPONENT ACPI_COMPILER
> @@ -212,6 +213,7 @@ TrAllocateNode (
> UINT32 ParseOpcode)
> {
> ACPI_PARSE_OBJECT *Op;
> + ACPI_PARSE_OBJECT *LatestNode;
>
>
> Op = TrGetNextNode ();
> @@ -224,6 +226,82 @@ TrAllocateNode (
> Op->Asl.Column = Gbl_CurrentColumn;
>
> UtSetParseOpName (Op);
> +
> + /* The following is for capturing comments */
> +
> + if(Gbl_CaptureComments)
> + {
> + LatestNode = Gbl_CommentState.Latest_Parse_Node;
> + Op->Asl.InlineComment = NULL;
> + Op->Asl.EndNodeComment = NULL;
> + Op->Asl.CommentList = NULL;
> + Op->Asl.FileChanged = FALSE;
> +
> + /*
> + * Check to see if the file name has changed before resetting the
> + * latest parse node.
> + */
> + if (LatestNode &&
> + (ParseOpcode != PARSEOP_INCLUDE) &&
> + (ParseOpcode != PARSEOP_INCLUDE_END) &&
> + strcmp (LatestNode->Asl.Filename, Op->Asl.Filename))
> + {
> + CvDbgPrint ("latest node: %s\n", LatestNode->Asl.ParseOpName);
> + Op->Asl.FileChanged = TRUE;
> + if (Gbl_IncludeFileStack)
> + {
> + Op->Asl.ParentFilename = Gbl_IncludeFileStack->Filename;
> + }
> + else
> + {
> + Op->Asl.ParentFilename = NULL;
> + }
> + }
> +
> + Gbl_CommentState.Latest_Parse_Node = Op;
> + if (Gbl_CommentState.Latest_Parse_Node->Asl.ParseOpName)
> + {
> + CvDbgPrint ("trallocatenode=Set latest parse node to this node.\n");
> + CvDbgPrint (" Op->Asl.ParseOpName = %s\n",
> + Gbl_CommentState.Latest_Parse_Node->Asl.ParseOpName);
> + CvDbgPrint (" Op->Asl.ParseOpcode = 0x%x\n", ParseOpcode);
> +
> + if (Op->Asl.FileChanged)
> + {
> + CvDbgPrint(" file has been changed!\n");
> + }
> + }
> +
> + /*
> + * if this parse op's syntax uses () and {} (i.e. Package(1){0x00}) then
> + * set a flag in the comment state. This facilitates paring comments for
> + * these types of opcodes.
> + */
> + if ((CvParseOpBlockType(Op) == (BLOCK_PAREN | BLOCK_BRACE)) &&
> + (ParseOpcode != PARSEOP_DEFINITION_BLOCK))
> + {
> + CvDbgPrint ("Parsing paren/Brace node now!\n");
> + Gbl_CommentState.ParsingParenBraceNode = Op;
> + }
> +
> + if (Gbl_Comment_List_Head)
> + {
> + CvDbgPrint ("Transferring...\n");
> + Op->Asl.CommentList = Gbl_Comment_List_Head;
> + Gbl_Comment_List_Head = NULL;
> + Gbl_Comment_List_Tail = NULL;
> + CvDbgPrint (" Transferred current comment list to this node.\n");
> + CvDbgPrint (" %s\n", Op->Asl.CommentList->Comment);
> + }
> + if (Gbl_Inline_Comment_Buffer)
> + {
> + Op->Asl.InlineComment = Gbl_Inline_Comment_Buffer;
> + Gbl_Inline_Comment_Buffer = NULL;
> + CvDbgPrint ("Transferred current inline comment list to this node.\n");
> + }
> +
> + }
> +
> return (Op);
> }
>
> @@ -366,6 +444,13 @@ TrUpdateNode (
> break;
> }
>
> + /* Converter: if this is a method invocation, turn off capture comments. */
> + if (Gbl_CaptureComments &&
> + (ParseOpcode == PARSEOP_METHODCALL))
> + {
> + Gbl_CommentState.CaptureComments = FALSE;
> + }
> +
> return (Op);
> }
>
> @@ -1132,6 +1217,39 @@ TrCreateNode (
> {
> FirstChild = FALSE;
> Op->Asl.Child = Child;
> +
> + /*
> + * For the ASL-/ASL+ converter: if the ParseOp is a connection,
> + * external, offset or accessAs, it means that the comments in the
> + * FirstChild belongs to their parent due to the parsing order in
> + * the .y files. To correct this, take the comments in the
> + * FirstChild place it in the parent. This also means that
> + * legitimate comments for the child gets put to the parent.
> + */
> + if (Gbl_CaptureComments &&
> + ((ParseOpcode == PARSEOP_CONNECTION) ||
> + (ParseOpcode == PARSEOP_EXTERNAL) ||
> + (ParseOpcode == PARSEOP_OFFSET) ||
> + (ParseOpcode == PARSEOP_ACCESSAS)))
> + {
> + Op->Asl.CommentList = Child->Asl.CommentList;
> + Op->Asl.EndBlkComment = Child->Asl.EndBlkComment;
> + Op->Asl.InlineComment = Child->Asl.InlineComment;
> + Op->Asl.FileChanged = Child->Asl.FileChanged;
> +
> + Child->Asl.CommentList = NULL;
> + Child->Asl.EndBlkComment = NULL;
> + Child->Asl.InlineComment = NULL;
> + Child->Asl.FileChanged = FALSE;
> +
> + /*
> + * These do not need to be "passed off". They can be copied
> + * because the code for these opcodes should be printed in the
> + * same file.
> + */
> + Op->Asl.Filename = Child->Asl.Filename;
> + Op->Asl.ParentFilename = Child->Asl.ParentFilename;
> + }
> }
>
> /* Point all children to parent */
> @@ -1145,6 +1263,18 @@ TrCreateNode (
> PrevChild->Asl.Next = Child;
> };
>
> + /* Get the comment from last child in the resource template call */
> +
> + if (Gbl_CaptureComments &&
> + (Op->Asl.ParseOpcode == PARSEOP_RESOURCETEMPLATE))
> + {
> + CvDbgPrint ("Transferred current comment list to this node.\n");
> + Op->Asl.CommentList = Child->Asl.CommentList;
> + Child->Asl.CommentList = NULL;
> + Op->Asl.InlineComment = Child->Asl.InlineComment;
> + Child->Asl.InlineComment = NULL;
> + }
> +
> /*
> * This child might be a list, point all nodes in the list
> * to the same parent
> @@ -1169,9 +1299,9 @@ TrCreateNode (
> * FUNCTION: TrLinkChildren
> *
> * PARAMETERS: Op - An existing parse node
> - * NumChildren - Number of children to follow
> - * ... - A list of child nodes to link to the new
> - * node. NumChildren long.
> + * NumChildren - Number of children to follow
> + * ... - A list of child nodes to link to the new
> + * node. NumChildren long.
> *
> * RETURN: The updated (linked) node
> *
> @@ -1233,6 +1363,25 @@ TrLinkChildren (
> break;
> }
>
> + /* The following is for capturing comments */
> +
> + if(Gbl_CaptureComments)
> + {
> + /*
> + * If there are "regular comments" detected at this point,
> + * then is an endBlk comment. Categorize it as so and distribute
> + * all regular comments to this parse node.
> + */
> + if (Gbl_Comment_List_Head)
> + {
> + Op->Asl.EndBlkComment = Gbl_Comment_List_Head;
> + CvDbgPrint ("EndBlk Comment for %s: %s",
> + Op->Asl.ParseOpName, Gbl_Comment_List_Head->Comment);
> + Gbl_Comment_List_Head = NULL;
> + Gbl_Comment_List_Tail = NULL;
> + }
> + }
> +
> /* Link the new node to it's children */
>
> PrevChild = NULL;
> @@ -1296,6 +1445,13 @@ TrLinkChildren (
>
> va_end(ap);
> DbgPrint (ASL_PARSE_OUTPUT, "\n\n");
> +
> +
> + if(Gbl_CaptureComments)
> + {
> + Gbl_CommentState.Latest_Parse_Node = Op;
> + CvDbgPrint ("trlinkchildren=====Set latest parse node to this node.\n");
> + }
> return (Op);
> }
>
> @@ -1463,6 +1619,19 @@ TrLinkChildNode (
> Op1, Op1 ? UtGetOpName(Op1->Asl.ParseOpcode): NULL,
> Op2, Op2 ? UtGetOpName(Op2->Asl.ParseOpcode): NULL);
>
> + /*
> + * Converter: if TrLinkChildNode is called to link a method call,
> + * turn on capture comments as it signifies that we are done parsing
> + * a method call.
> + */
> + if (Gbl_CaptureComments)
> + {
> + if (Op1->Asl.ParseOpcode == PARSEOP_METHODCALL)
> + {
> + Gbl_CommentState.CaptureComments = TRUE;
> + }
> + Gbl_CommentState.Latest_Parse_Node = Op1;
> + }
> if (!Op1 || !Op2)
> {
> return (Op1);
> diff --git a/src/acpica/source/compiler/asltypes.h b/src/acpica/source/compiler/asltypes.h
> index d04c692..2b4773e 100644
> --- a/src/acpica/source/compiler/asltypes.h
> +++ b/src/acpica/source/compiler/asltypes.h
> @@ -225,6 +225,10 @@ typedef struct asl_file_status
> * Corresponding filename suffixes are in comments
> *
> * NOTE: Don't move the first 4 file types
> + *
> + * .xxx file extension: this is used as a temporary .aml file for
> + * the ASL/ASL+ converter and is deleted after conversion. This file
> + * should never be used in the interpreter.
> */
> typedef enum
> {
> @@ -245,12 +249,14 @@ typedef enum
> ASL_FILE_C_INCLUDE_OUTPUT, /* .h */
> ASL_FILE_C_OFFSET_OUTPUT, /* .offset.h */
> ASL_FILE_MAP_OUTPUT, /* .map */
> - ASL_FILE_XREF_OUTPUT /* .xrf */
> + ASL_FILE_XREF_OUTPUT, /* .xrf */
> + ASL_FILE_CONV_DEBUG_OUTPUT, /* .cdb */
> + ASL_FILE_CONV_OUTPUT /* .xxx */
>
> } ASL_FILE_TYPES;
>
>
> -#define ASL_MAX_FILE_TYPE 17
> +#define ASL_MAX_FILE_TYPE 18
> #define ASL_NUM_FILES (ASL_MAX_FILE_TYPE + 1)
>
> /* Name suffixes used to create filenames for output files */
> @@ -271,6 +277,8 @@ typedef enum
> #define FILE_SUFFIX_C_OFFSET "offset.h"
> #define FILE_SUFFIX_MAP "map"
> #define FILE_SUFFIX_XREF "xrf"
> +#define FILE_SUFFIX_CONVERT_AML "xxx"
> +#define FILE_SUFFIX_CONVERT_DEBUG "cdb"
>
>
> /* Cache block structure for ParseOps and Strings */
> @@ -408,4 +416,15 @@ typedef struct asl_xref_info
> } ASL_XREF_INFO;
>
>
> +typedef struct yy_buffer_state *YY_BUFFER_STATE;
> +typedef struct asl_file_node
> +{
> + FILE *File;
> + UINT32 CurrentLineNumber;
> + YY_BUFFER_STATE State;
> + char *Filename;
> + struct asl_file_node *Next;
> +
> +} ASL_FILE_NODE;
> +
> #endif /* __ASLTYPES_H */
> diff --git a/src/acpica/source/compiler/aslwalks.c b/src/acpica/source/compiler/aslwalks.c
> index 574b8e2..6eaca9f 100644
> --- a/src/acpica/source/compiler/aslwalks.c
> +++ b/src/acpica/source/compiler/aslwalks.c
> @@ -389,7 +389,7 @@ AnOperandTypecheckWalkEnd (
>
> case AML_BUFFER_OP:
> case AML_PACKAGE_OP:
> - case AML_VAR_PACKAGE_OP:
> + case AML_VARIABLE_PACKAGE_OP:
>
> /* If length is a constant, we are done */
>
> diff --git a/src/acpica/source/compiler/cvcompiler.c b/src/acpica/source/compiler/cvcompiler.c
> new file mode 100644
> index 0000000..28af25a
> --- /dev/null
> +++ b/src/acpica/source/compiler/cvcompiler.c
> @@ -0,0 +1,962 @@
> +/******************************************************************************
> + *
> + * Module Name: cvcompiler - ASL-/ASL+ converter functions
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************/
> +
> +#include "aslcompiler.h"
> +#include "aslcompiler.y.h"
> +#include "amlcode.h"
> +#include "acapps.h"
> +#include "acconvert.h"
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvProcessComment
> + *
> + * PARAMETERS: CurrentState Current comment parse state
> + * StringBuffer Buffer containing the comment being processed
> + * c1 Current input
> + *
> + * RETURN: none
> + *
> + * DESCRIPTION: Process a single line comment of a c Style comment. This
> + * function captures a line of a c style comment in a char* and
> + * places the comment in the approperiate global buffer.
> + *
> + ******************************************************************************/
> +
> +void
> +CvProcessComment (
> + ASL_COMMENT_STATE CurrentState,
> + char *StringBuffer,
> + int c1)
> +{
> + UINT64 i;
> + char *LineToken;
> + char *FinalLineToken;
> + BOOLEAN CharStart;
> + char *CommentString;
> + char *FinalCommentString;
> +
> +
> + if (Gbl_CaptureComments && CurrentState.CaptureComments)
> + {
> + *StringBuffer = (char) c1;
> + ++StringBuffer;
> + *StringBuffer = 0;
> + CvDbgPrint ("Multi-line comment\n");
> + CommentString = UtStringCacheCalloc (strlen (MsgBuffer) + 1);
> + strcpy (CommentString, MsgBuffer);
> +
> + CvDbgPrint ("CommentString: %s\n", CommentString);
> +
> + /*
> + * Determine whether if this comment spans multiple lines.
> + * If so, break apart the comment by line so that it can be
> + * properly indented.
> + */
> + if (strchr (CommentString, '\n') != NULL)
> + {
> + /*
> + * Get the first token. The for loop pads subsequent lines
> + * for comments similar to the style of this comment.
> + */
> + LineToken = strtok (CommentString, "\n");
> + FinalLineToken = UtStringCacheCalloc (strlen (LineToken) + 1);
> + strcpy (FinalLineToken, LineToken);
> +
> + /* Get rid of any carriage returns */
> +
> + if (FinalLineToken[strlen (FinalLineToken) - 1] == 0x0D)
> + {
> + FinalLineToken[strlen(FinalLineToken)-1] = 0;
> + }
> + CvAddToCommentList (FinalLineToken);
> + LineToken = strtok (NULL, "\n");
> + while (LineToken != NULL)
> + {
> + /*
> + * It is assumed that each line has some sort of indentation.
> + * This means that we need to find the first character that is not
> + * a white space within each line.
> + */
> + CharStart = FALSE;
> + for (i = 0; (i < (strlen (LineToken) + 1)) && !CharStart; i++)
> + {
> + if (LineToken[i] != ' ' && LineToken[i] != '\t')
> + {
> + CharStart = TRUE;
> + LineToken += i-1;
> + LineToken [0] = ' '; /* Pad for Formatting */
> + }
> + }
> + FinalLineToken = UtStringCacheCalloc (strlen (LineToken) + 1);
> + strcat (FinalLineToken, LineToken);
> +
> + /* Get rid of any carriage returns */
> +
> + if (FinalLineToken[strlen (FinalLineToken) - 1] == 0x0D)
> + {
> + FinalLineToken[strlen(FinalLineToken) - 1] = 0;
> + }
> + CvAddToCommentList (FinalLineToken);
> + LineToken = strtok (NULL,"\n");
> + }
> + }
> +
> + /*
> + * If this only spans a single line, check to see whether if this comment
> + * appears on the same line as a line of code. If does, retain it's
> + * position for stylistic reasons. If it doesn't, add it to the comment
> + * List so that it can be associated with the next node that's created.
> + */
> + else
> + {
> + /*
> + * if this is not a regular comment, pad with extra spaces that appeared
> + * in the original source input to retain the original spacing.
> + */
> + FinalCommentString = UtStringCacheCalloc (strlen (CommentString) + CurrentState.SpacesBefore + 1);
> + for (i=0; (CurrentState.CommentType != ASL_COMMENT_STANDARD) &&
> + (i < CurrentState.SpacesBefore); ++i)
> + {
> + FinalCommentString[i] = ' ';
> + }
> + strcat (FinalCommentString, CommentString);
> + CvPlaceComment (CurrentState.CommentType, FinalCommentString);
> + }
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvProcessCommentType2
> + *
> + * PARAMETERS: CurrentState Current comment parse state
> + * StringBuffer Buffer containing the comment being processed
> + *
> + * RETURN: none
> + *
> + * DESCRIPTION: Process a single line comment. This function captures a comment
> + * in a char* and places the comment in the approperiate global
> + * buffer through CvPlaceComment
> + *
> + ******************************************************************************/
> +
> +void
> +CvProcessCommentType2 (
> + ASL_COMMENT_STATE CurrentState,
> + char *StringBuffer)
> +{
> + UINT32 i;
> + char *CommentString;
> + char *FinalCommentString;
> +
> +
> + if (Gbl_CaptureComments && CurrentState.CaptureComments)
> + {
> + *StringBuffer = 0; /* null terminate */
> + CvDbgPrint ("Single-line comment\n");
> + CommentString = UtStringCacheCalloc (strlen (MsgBuffer) + 1);
> + strcpy (CommentString, MsgBuffer);
> +
> + /* If this comment lies on the same line as the latest parse node,
> + * assign it to that node's CommentAfter field. Saving in this field
> + * will allow us to support comments that come after code on the same
> + * line as the code itself. For example,
> + * Name(A,"") //comment
> + *
> + * will be retained rather than transformed into
> + *
> + * Name(A,"")
> + * //comment
> + *
> + * For this case, we only need to add one comment since
> + *
> + * Name(A,"") //comment1 //comment2 ... more comments here.
> + *
> + * would be lexically analyzed as a single comment.
> + *
> + * Create a new string with the approperiate spaces. Since we need
> + * to account for the proper spacing, the actual comment,
> + * extra 2 spaces so that this comment can be converted to the "/ *"
> + * style and the null terminator, the string would look something like
> + *
> + * [ (spaces) (comment) ( * /) ('\0') ]
> + *
> + */
> + FinalCommentString = UtStringCacheCalloc (CurrentState.SpacesBefore + strlen (CommentString) + 3 + 1);
> + for (i=0; (CurrentState.CommentType!=1) && (i<CurrentState.SpacesBefore); ++i)
> + {
> + FinalCommentString[i] = ' ';
> + }
> + strcat (FinalCommentString, CommentString);
> +
> + /* convert to a "/ *" style comment */
> +
> + strcat (FinalCommentString, " */");
> + FinalCommentString [CurrentState.SpacesBefore + strlen (CommentString) + 3] = 0;
> +
> + /* get rid of the carriage return */
> +
> + if (FinalCommentString[strlen (FinalCommentString) - 1] == 0x0D)
> + {
> + FinalCommentString[strlen(FinalCommentString)-1] = 0;
> + }
> + CvPlaceComment (CurrentState.CommentType, FinalCommentString);
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CgCalculateCommentLengths
> + *
> + * PARAMETERS: Op - Calculate all comments of this Op
> + *
> + * RETURN: TotalCommentLength - Length of all comments within this node.
> + *
> + * DESCRIPTION: calculate the length that the each comment takes up within Op.
> + * Comments look like the follwoing: [0xA9 OptionBtye comment 0x00]
> + * therefore, we add 1 + 1 + strlen (comment) + 1 to get the actual
> + * length of this comment.
> + *
> + ******************************************************************************/
> +
> +UINT32
> +CvCalculateCommentLengths(
> + ACPI_PARSE_OBJECT *Op)
> +{
> + UINT32 CommentLength = 0;
> + UINT32 TotalCommentLength = 0;
> + ACPI_COMMENT_NODE *Current = NULL;
> +
> +
> + if (!Gbl_CaptureComments)
> + {
> + return (0);
> + }
> +
> + CvDbgPrint ("==Calculating comment lengths for %s\n", Op->Asl.ParseOpName);
> + if (Op->Asl.FileChanged)
> + {
> + TotalCommentLength += strlen (Op->Asl.Filename) + 3;
> +
> + if (Op->Asl.ParentFilename &&
> + AcpiUtStricmp (Op->Asl.Filename, Op->Asl.ParentFilename))
> + {
> + TotalCommentLength += strlen (Op->Asl.ParentFilename) + 3;
> + }
> + }
> + if (Op->Asl.CommentList)
> + {
> + Current = Op->Asl.CommentList;
> + while (Current)
> + {
> + CommentLength = strlen (Current->Comment)+3;
> + CvDbgPrint ("Length of standard comment: %d\n", CommentLength);
> + CvDbgPrint (" Comment string: %s\n\n", Current->Comment);
> + TotalCommentLength += CommentLength;
> + Current = Current->Next;
> + }
> + }
> + if (Op->Asl.EndBlkComment)
> + {
> + Current = Op->Asl.EndBlkComment;
> + while (Current)
> + {
> + CommentLength = strlen (Current->Comment)+3;
> + CvDbgPrint ("Length of endblkcomment: %d\n", CommentLength);
> + CvDbgPrint (" Comment string: %s\n\n", Current->Comment);
> + TotalCommentLength += CommentLength;
> + Current = Current->Next;
> + }
> + }
> + if (Op->Asl.InlineComment)
> + {
> + CommentLength = strlen (Op->Asl.InlineComment)+3;
> + CvDbgPrint ("Length of inline comment: %d\n", CommentLength);
> + CvDbgPrint (" Comment string: %s\n\n", Op->Asl.InlineComment);
> + TotalCommentLength += CommentLength;
> + }
> + if (Op->Asl.EndNodeComment)
> + {
> + CommentLength = strlen(Op->Asl.EndNodeComment)+3;
> + CvDbgPrint ("Length of end node comment +3: %d\n", CommentLength);
> + CvDbgPrint (" Comment string: %s\n\n", Op->Asl.EndNodeComment);
> + TotalCommentLength += CommentLength;
> + }
> +
> + if (Op->Asl.CloseBraceComment)
> + {
> + CommentLength = strlen (Op->Asl.CloseBraceComment)+3;
> + CvDbgPrint ("Length of close brace comment: %d\n", CommentLength);
> + CvDbgPrint (" Comment string: %s\n\n", Op->Asl.CloseBraceComment);
> + TotalCommentLength += CommentLength;
> + }
> +
> + CvDbgPrint("\n\n");
> +
> + return TotalCommentLength;
> +
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CgWriteAmlDefBlockComment
> + *
> + * PARAMETERS: Op - Current parse op
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Write all comments for a particular definition block.
> + * For definition blocks, the comments need to come after the
> + * definition block header. The regular comments above the
> + * definition block would be categorized as
> + * STD_DEFBLK_COMMENT and comments after the closing brace
> + * is categorized as END_DEFBLK_COMMENT.
> + *
> + ******************************************************************************/
> +
> +void
> +CgWriteAmlDefBlockComment(
> + ACPI_PARSE_OBJECT *Op)
> +{
> + UINT8 CommentOption;
> + ACPI_COMMENT_NODE *Current;
> + char *NewFilename;
> + char *Position;
> + char *DirectoryPosition;
> +
> +
> + if (!Gbl_CaptureComments ||
> + (Op->Asl.ParseOpcode != PARSEOP_DEFINITION_BLOCK))
> + {
> + return;
> + }
> +
> + CvDbgPrint ("Printing comments for a definition block..\n");
> +
> + /* first, print the file name comment after changing .asl to .dsl */
> +
> + NewFilename = UtStringCacheCalloc (strlen (Op->Asl.Filename));
> + strcpy (NewFilename, Op->Asl.Filename);
> + DirectoryPosition = strrchr (NewFilename, '/');
> + Position = strrchr (NewFilename, '.');
> +
> + if (Position && (Position > DirectoryPosition))
> + {
> + /* Tack on the new suffix */
> +
> + Position++;
> + *Position = 0;
> + strcat (Position, FILE_SUFFIX_DISASSEMBLY);
> + }
> + else
> + {
> + /* No dot, add one and then the suffix */
> +
> + strcat (NewFilename, ".");
> + strcat (NewFilename, FILE_SUFFIX_DISASSEMBLY);
> + }
> +
> + CommentOption = FILENAME_COMMENT;
> + CgWriteOneAmlComment(Op, NewFilename, CommentOption);
> +
> + Current = Op->Asl.CommentList;
> + CommentOption = STD_DEFBLK_COMMENT;
> + while (Current)
> + {
> + CgWriteOneAmlComment(Op, Current->Comment, CommentOption);
> + CvDbgPrint ("Printing comment: %s\n", Current->Comment);
> + Current = Current->Next;
> + }
> + Op->Asl.CommentList = NULL;
> +
> + /* print any Inline comments associated with this node */
> +
> + if (Op->Asl.CloseBraceComment)
> + {
> + CommentOption = END_DEFBLK_COMMENT;
> + CgWriteOneAmlComment(Op, Op->Asl.CloseBraceComment, CommentOption);
> + Op->Asl.CloseBraceComment = NULL;
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CgWriteOneAmlComment
> + *
> + * PARAMETERS: Op - Current parse op
> + * CommentToPrint - Comment that's printed
> + * InputOption - Denotes the comment option.
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: write a single comment.
> + *
> + ******************************************************************************/
> +
> +void
> +CgWriteOneAmlComment(
> + ACPI_PARSE_OBJECT *Op,
> + char* CommentToPrint,
> + UINT8 InputOption)
> +{
> + UINT8 CommentOption = InputOption;
> + UINT8 CommentOpcode = (UINT8)AML_COMMENT_OP;
> +
> + CgLocalWriteAmlData (Op, &CommentOpcode, 1);
> + CgLocalWriteAmlData (Op, &CommentOption, 1);
> +
> + /* The strlen (..) + 1 is to include the null terminator */
> +
> + CgLocalWriteAmlData (Op, CommentToPrint, strlen (CommentToPrint) + 1);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CgWriteAmlComment
> + *
> + * PARAMETERS: Op - Current parse op
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: write all comments pertaining to the
> + * current parse op
> + *
> + ******************************************************************************/
> +
> +void
> +CgWriteAmlComment(
> + ACPI_PARSE_OBJECT *Op)
> +{
> + ACPI_COMMENT_NODE *Current;
> + UINT8 CommentOption;
> + char *NewFilename;
> + char *ParentFilename;
> +
> +
> + if ((Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK) ||
> + !Gbl_CaptureComments)
> + {
> + return;
> + }
> +
> + /* Print out the filename comment if needed */
> +
> + if (Op->Asl.FileChanged)
> + {
> +
> + /* first, print the file name comment after changing .asl to .dsl */
> +
> + NewFilename =
> + FlGenerateFilename (Op->Asl.Filename, FILE_SUFFIX_DISASSEMBLY);
> + CvDbgPrint ("Writing file comment, \"%s\" for %s\n",
> + NewFilename, Op->Asl.ParseOpName);
> + CgWriteOneAmlComment(Op, NewFilename, FILENAME_COMMENT);
> +
> + if (Op->Asl.ParentFilename &&
> + AcpiUtStricmp (Op->Asl.ParentFilename, Op->Asl.Filename))
> + {
> + ParentFilename = FlGenerateFilename (Op->Asl.ParentFilename,
> + FILE_SUFFIX_DISASSEMBLY);
> + CgWriteOneAmlComment(Op, ParentFilename, PARENTFILENAME_COMMENT);
> + }
> +
> + /* prevent multiple writes of the same comment */
> +
> + Op->Asl.FileChanged = FALSE;
> + }
> +
> + /*
> + * Regular comments are stored in a list of comments within an Op.
> + * If there is a such list in this node, print out the comment
> + * as byte code.
> + */
> + Current = Op->Asl.CommentList;
> + if (Op->Asl.ParseOpcode == PARSEOP_INCLUDE)
> + {
> + CommentOption = INCLUDE_COMMENT;
> + }
> + else
> + {
> + CommentOption = STANDARD_COMMENT;
> + }
> +
> + while (Current)
> + {
> + CgWriteOneAmlComment(Op, Current->Comment, CommentOption);
> + Current = Current->Next;
> + }
> + Op->Asl.CommentList = NULL;
> +
> + Current = Op->Asl.EndBlkComment;
> + CommentOption = ENDBLK_COMMENT;
> + while (Current)
> + {
> + CgWriteOneAmlComment(Op, Current->Comment, CommentOption);
> + Current = Current->Next;
> + }
> + Op->Asl.EndBlkComment = NULL;
> +
> + /* print any Inline comments associated with this node */
> +
> + if (Op->Asl.InlineComment)
> + {
> + CommentOption = INLINE_COMMENT;
> + CgWriteOneAmlComment(Op, Op->Asl.InlineComment, CommentOption);
> + Op->Asl.InlineComment = NULL;
> + }
> +
> + if (Op->Asl.EndNodeComment)
> + {
> + CommentOption = ENDNODE_COMMENT;
> + CgWriteOneAmlComment(Op, Op->Asl.EndNodeComment, CommentOption);
> + Op->Asl.EndNodeComment = NULL;
> + }
> +
> + if (Op->Asl.CloseBraceComment)
> + {
> + CommentOption = CLOSE_BRACE_COMMENT;
> + CgWriteOneAmlComment(Op, Op->Asl.CloseBraceComment, CommentOption);
> + Op->Asl.CloseBraceComment = NULL;
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvCommentNodeCalloc
> + *
> + * PARAMETERS: none
> + *
> + * RETURN: Pointer to the comment node. Aborts on allocation failure
> + *
> + * DESCRIPTION: Allocate a string node buffer.
> + *
> + ******************************************************************************/
> +
> +ACPI_COMMENT_NODE*
> +CvCommentNodeCalloc (
> + void)
> +{
> + ACPI_COMMENT_NODE *NewCommentNode;
> +
> +
> + NewCommentNode =
> + (ACPI_COMMENT_NODE*) UtLocalCalloc (sizeof(ACPI_COMMENT_NODE));
> + NewCommentNode->Next = NULL;
> + return NewCommentNode;
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvParseOpBlockType
> + *
> + * PARAMETERS: Op - Object to be examined
> + *
> + * RETURN: BlockType - not a block, parens, braces, or even both.
> + *
> + * DESCRIPTION: Type of block for this ASL parseop (parens or braces)
> + * keep this in sync with aslprimaries.y, aslresources.y and
> + * aslrules.y
> + *
> + ******************************************************************************/
> +
> +UINT32
> +CvParseOpBlockType (
> + ACPI_PARSE_OBJECT *Op)
> +{
> + if (!Op)
> + {
> + return (BLOCK_NONE);
> + }
> +
> + switch (Op->Asl.ParseOpcode)
> + {
> +
> + /* from aslprimaries.y */
> +
> + case PARSEOP_VAR_PACKAGE:
> + case PARSEOP_BANKFIELD:
> + case PARSEOP_BUFFER:
> + case PARSEOP_CASE:
> + case PARSEOP_DEVICE:
> + case PARSEOP_FIELD:
> + case PARSEOP_FOR:
> + case PARSEOP_FUNCTION:
> + case PARSEOP_IF:
> + case PARSEOP_ELSEIF:
> + case PARSEOP_INDEXFIELD:
> + case PARSEOP_METHOD:
> + case PARSEOP_POWERRESOURCE:
> + case PARSEOP_PROCESSOR:
> + case PARSEOP_DATABUFFER:
> + case PARSEOP_SCOPE:
> + case PARSEOP_SWITCH:
> + case PARSEOP_THERMALZONE:
> + case PARSEOP_WHILE:
> +
> + /* from aslresources.y */
> +
> + case PARSEOP_RESOURCETEMPLATE: /* optional parens */
> + case PARSEOP_VENDORLONG:
> + case PARSEOP_VENDORSHORT:
> + case PARSEOP_INTERRUPT:
> + case PARSEOP_IRQNOFLAGS:
> + case PARSEOP_IRQ:
> + case PARSEOP_GPIO_INT:
> + case PARSEOP_GPIO_IO:
> + case PARSEOP_DMA:
> +
> + /*from aslrules.y */
> +
> + case PARSEOP_DEFINITION_BLOCK:
> + return (BLOCK_PAREN | BLOCK_BRACE);
> +
> + default:
> +
> + return (BLOCK_NONE);
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvProcessCommentState
> + *
> + * PARAMETERS: char
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Take the given input. If this character is
> + * defined as a comment table entry, then update the state
> + * accordingly.
> + *
> + ******************************************************************************/
> +
> +void
> +CvProcessCommentState (
> + char input)
> +{
> +
> + if (input != ' ')
> + {
> + Gbl_CommentState.SpacesBefore = 0;
> + }
> +
> + switch (input)
> + {
> + case '\n':
> +
> + Gbl_CommentState.CommentType = ASL_COMMENT_STANDARD;
> + break;
> +
> + case ' ':
> +
> + /* Keep the CommentType the same */
> +
> + Gbl_CommentState.SpacesBefore++;
> + break;
> +
> + case '(':
> +
> + Gbl_CommentState.CommentType = ASL_COMMENT_OPEN_PAREN;
> + break;
> +
> + case ')':
> +
> + Gbl_CommentState.CommentType = ASL_COMMENT_CLOSE_PAREN;
> + break;
> +
> + case '{':
> +
> + Gbl_CommentState.CommentType = ASL_COMMENT_STANDARD;
> + Gbl_CommentState.ParsingParenBraceNode = NULL;
> + CvDbgPrint ("End Parsing paren/Brace node!\n");
> + break;
> +
> + case '}':
> +
> + Gbl_CommentState.CommentType = ASL_COMMENT_CLOSE_BRACE;
> + break;
> +
> + case ',':
> +
> + Gbl_CommentState.CommentType = ASLCOMMENT_INLINE;
> + break;
> +
> + default:
> +
> + Gbl_CommentState.CommentType = ASLCOMMENT_INLINE;
> + break;
> +
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvAddToCommentList
> + *
> + * PARAMETERS: toAdd - Contains the comment to be inserted
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Add the given char* to a list of comments in the global list
> + * of comments.
> + *
> + ******************************************************************************/
> +
> +void
> +CvAddToCommentList (
> + char* ToAdd)
> +{
> + if (Gbl_Comment_List_Head)
> + {
> + Gbl_Comment_List_Tail->Next = CvCommentNodeCalloc ();
> + Gbl_Comment_List_Tail = Gbl_Comment_List_Tail->Next;
> + }
> + else
> + {
> + Gbl_Comment_List_Head = CvCommentNodeCalloc ();
> + Gbl_Comment_List_Tail = Gbl_Comment_List_Head;
> + }
> +
> + Gbl_Comment_List_Tail->Comment = ToAdd;
> +
> + return;
> +}
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvAppendInlineComment
> + *
> + * PARAMETERS: InlineComment - Append to the end of this string.
> + * toAdd - Contains the comment to be inserted
> + *
> + * RETURN: Str - toAdd appended to InlineComment
> + *
> + * DESCRIPTION: Concatenate ToAdd to InlineComment
> + *
> + ******************************************************************************/
> +
> +char*
> +CvAppendInlineComment (
> + char *InlineComment,
> + char *ToAdd)
> +{
> + char* Str;
> + UINT32 Size = 0;
> +
> +
> + if (!InlineComment)
> + {
> + return ToAdd;
> + }
> + if (ToAdd)
> + {
> + Size = strlen (ToAdd);
> + }
> + Size += strlen (InlineComment);
> + Str = UtStringCacheCalloc (Size+1);
> + strcpy (Str, InlineComment);
> + strcat (Str, ToAdd);
> + Str[Size+1] = 0;
> +
> + return Str;
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvPlaceComment
> + *
> + * PARAMETERS: Int - Type
> + * char* - CommentString
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Given type and CommentString, this function places the
> + * CommentString in the approperiate global comment list or char*
> + *
> + ******************************************************************************/
> +
> +void
> +CvPlaceComment(
> + UINT8 Type,
> + char *CommentString)
> +{
> + ACPI_PARSE_OBJECT *LatestParseNode;
> + ACPI_PARSE_OBJECT *ParenBraceNode;
> +
> +
> + LatestParseNode = Gbl_CommentState.Latest_Parse_Node;
> + ParenBraceNode = Gbl_CommentState.ParsingParenBraceNode;
> + CvDbgPrint ("Placing comment %s for type %d\n", CommentString, Type);
> +
> + switch (Type)
> + {
> + case ASL_COMMENT_STANDARD:
> +
> + CvAddToCommentList (CommentString);
> + break;
> +
> + case ASLCOMMENT_INLINE:
> +
> + LatestParseNode->Asl.InlineComment =
> + CvAppendInlineComment (LatestParseNode->Asl.InlineComment,
> + CommentString);
> + break;
> +
> + case ASL_COMMENT_OPEN_PAREN:
> +
> + Gbl_Inline_Comment_Buffer =
> + CvAppendInlineComment(Gbl_Inline_Comment_Buffer,
> + CommentString);
> + break;
> +
> + case ASL_COMMENT_CLOSE_PAREN:
> +
> + if (ParenBraceNode)
> + {
> + ParenBraceNode->Asl.EndNodeComment =
> + CvAppendInlineComment (ParenBraceNode->Asl.EndNodeComment,
> + CommentString);
> + }
> + else
> + {
> + LatestParseNode->Asl.EndNodeComment =
> + CvAppendInlineComment (LatestParseNode->Asl.EndNodeComment,
> + CommentString);
> + }
> + break;
> +
> + case ASL_COMMENT_CLOSE_BRACE:
> +
> + LatestParseNode->Asl.CloseBraceComment = CommentString;
> + break;
> +
> + default:
> +
> + break;
> +
> + }
> +}
> diff --git a/src/acpica/source/compiler/cvdisasm.c b/src/acpica/source/compiler/cvdisasm.c
> new file mode 100644
> index 0000000..e588e1f
> --- /dev/null
> +++ b/src/acpica/source/compiler/cvdisasm.c
> @@ -0,0 +1,495 @@
> +/******************************************************************************
> + *
> + * Module Name: cvcompiler - ASL-/ASL+ converter functions
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************/
> +
> +#include "aslcompiler.h"
> +#include "acparser.h"
> +#include "amlcode.h"
> +#include "acdebug.h"
> +#include "acconvert.h"
> +
> +
> +static void
> +CvPrintInclude(
> + ACPI_FILE_NODE *FNode,
> + UINT32 Level);
> +
> +static BOOLEAN
> +CvListIsSingleton (
> + ACPI_COMMENT_NODE *CommentList);
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvPrintOneCommentList
> + *
> + * PARAMETERS: CommentList
> + * Level
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Prints all comments within the given list.
> + * This is referred as ASL_CV_PRINT_ONE_COMMENT_LIST.
> + *
> + ******************************************************************************/
> +
> +void
> +CvPrintOneCommentList (
> + ACPI_COMMENT_NODE *CommentList,
> + UINT32 Level)
> +{
> + ACPI_COMMENT_NODE *Current = CommentList;
> + ACPI_COMMENT_NODE *Previous;
> +
> +
> + while (Current)
> + {
> + Previous = Current;
> + if (Current->Comment)
> + {
> + AcpiDmIndent(Level);
> + AcpiOsPrintf("%s\n", Current->Comment);
> + Current->Comment = NULL;
> + }
> + Current = Current->Next;
> + AcpiOsReleaseObject(AcpiGbl_RegCommentCache, Previous);
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvListIsSingleton
> + *
> + * PARAMETERS: CommentList -- check to see if this is a single item list.
> + *
> + * RETURN: BOOLEAN
> + *
> + * DESCRIPTION: Returns TRUE if CommentList only contains 1 node.
> + *
> + ******************************************************************************/
> +
> +static BOOLEAN
> +CvListIsSingleton (
> + ACPI_COMMENT_NODE *CommentList)
> +
> +{
> + if (!CommentList)
> + {
> + return FALSE;
> + }
> + else if (CommentList->Next)
> + {
> + return FALSE;
> + }
> +
> + return TRUE;
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvPrintOneCommentType
> + *
> + * PARAMETERS: Op
> + * CommentType
> + * EndStr - String to print after printing the comment
> + * Level - indentation level for comment lists.
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Prints all comments of CommentType within the given Op and
> + * clears the printed comment from the Op.
> + * This is referred as ASL_CV_PRINT_ONE_COMMENT.
> + *
> + ******************************************************************************/
> +
> +void
> +CvPrintOneCommentType (
> + ACPI_PARSE_OBJECT *Op,
> + UINT8 CommentType,
> + char* EndStr,
> + UINT32 Level)
> +{
> + BOOLEAN CommentExists = FALSE;
> + char **CommentToPrint = NULL;
> +
> +
> + switch (CommentType)
> + {
> + case AML_COMMENT_STANDARD:
> +
> + if (CvListIsSingleton (Op->Common.CommentList))
> + {
> + CvPrintOneCommentList (Op->Common.CommentList, Level);
> + AcpiOsPrintf ("\n");
> + }
> + else
> + {
> + CvPrintOneCommentList (Op->Common.CommentList, Level);
> + }
> + Op->Common.CommentList = NULL;
> + return;
> +
> + case AML_COMMENT_ENDBLK:
> +
> + if (Op->Common.EndBlkComment)
> + {
> + CvPrintOneCommentList (Op->Common.EndBlkComment, Level);
> + Op->Common.EndBlkComment = NULL;
> + AcpiDmIndent(Level);
> + }
> + return;
> +
> + case AMLCOMMENT_INLINE:
> +
> + CommentToPrint = &Op->Common.InlineComment;
> + break;
> +
> + case AML_COMMENT_END_NODE:
> +
> + CommentToPrint = &Op->Common.EndNodeComment;
> + break;
> +
> + case AML_NAMECOMMENT:
> +
> + CommentToPrint = &Op->Common.NameComment;
> + break;
> +
> + case AML_COMMENT_CLOSE_BRACE:
> +
> + CommentToPrint = &Op->Common.CloseBraceComment;
> + break;
> +
> + default:
> + return;
> + }
> +
> + if (*CommentToPrint)
> + {
> + AcpiOsPrintf ("%s", *CommentToPrint);
> + *CommentToPrint = NULL;
> + }
> +
> + if (CommentExists && EndStr)
> + {
> + AcpiOsPrintf ("%s", EndStr);
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvCloseBraceWriteComment
> + *
> + * PARAMETERS: Op
> + * Level
> + *
> + * RETURN: none
> + *
> + * DESCRIPTION: Print a close brace } and any open brace comments associated
> + * with this parse object.
> + * This is referred as ASL_CV_CLOSE_BRACE.
> + *
> + ******************************************************************************/
> +
> +void
> +CvCloseBraceWriteComment(
> + ACPI_PARSE_OBJECT *Op,
> + UINT32 Level)
> +{
> + if (!Gbl_CaptureComments)
> + {
> + AcpiOsPrintf ("}");
> + return;
> + }
> +
> + CvPrintOneCommentType (Op, AML_COMMENT_ENDBLK, NULL, Level);
> + AcpiOsPrintf ("}");
> + CvPrintOneCommentType (Op, AML_COMMENT_CLOSE_BRACE, NULL, Level);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvCloseParenWriteComment
> + *
> + * PARAMETERS: Op
> + * Level
> + *
> + * RETURN: none
> + *
> + * DESCRIPTION: Print a closing paren ) and any end node comments associated
> + * with this parse object.
> + * This is referred as ASL_CV_CLOSE_PAREN.
> + *
> + ******************************************************************************/
> +
> +void
> +CvCloseParenWriteComment(
> + ACPI_PARSE_OBJECT *Op,
> + UINT32 Level)
> +{
> + if (!Gbl_CaptureComments)
> + {
> + AcpiOsPrintf (")");
> + return;
> + }
> +
> + /*
> + * If this op has a BLOCK_BRACE, then output the comment when the
> + * disassembler calls CvCloseBraceWriteComment
> + */
> + if (AcpiDmBlockType (Op) == BLOCK_PAREN)
> + {
> + CvPrintOneCommentType (Op, AML_COMMENT_ENDBLK, NULL, Level);
> + }
> +
> + AcpiOsPrintf (")");
> +
> + if (Op->Common.EndNodeComment)
> + {
> + CvPrintOneCommentType (Op, AML_COMMENT_END_NODE, NULL, Level);
> + }
> + else if ((Op->Common.Parent->Common.AmlOpcode == AML_IF_OP) &&
> + Op->Common.Parent->Common.EndNodeComment)
> + {
> + CvPrintOneCommentType (Op->Common.Parent,
> + AML_COMMENT_END_NODE, NULL, Level);
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvFileHasSwitched
> + *
> + * PARAMETERS: Op
> + *
> + * RETURN: BOOLEAN
> + *
> + * DESCRIPTION: Determine whether if a file has switched.
> + * TRUE - file has switched.
> + * FALSE - file has not switched.
> + * This is referred as ASL_CV_FILE_HAS_SWITCHED.
> + *
> + ******************************************************************************/
> +
> +BOOLEAN
> +CvFileHasSwitched(
> + ACPI_PARSE_OBJECT *Op)
> +{
> + if (Op->Common.CvFilename &&
> + AcpiGbl_CurrentFilename &&
> + AcpiUtStricmp(Op->Common.CvFilename, AcpiGbl_CurrentFilename))
> + {
> + return TRUE;
> + }
> + return FALSE;
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvPrintInclude
> + *
> + * PARAMETERS: FNode - Write an Include statement for the file that is pointed
> + * by FNode->File.
> + * Level - indentation level
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Write the ASL Include statement for FNode->File in the file
> + * indicated by FNode->Parent->File. Note this function emits
> + * actual ASL code rather than comments. This switches the output
> + * file to FNode->Parent->File.
> + *
> + ******************************************************************************/
> +
> +static void
> +CvPrintInclude(
> + ACPI_FILE_NODE *FNode,
> + UINT32 Level)
> +{
> + if (!FNode || FNode->IncludeWritten)
> + {
> + return;
> + }
> +
> + CvDbgPrint ("Writing include for %s within %s\n", FNode->Filename, FNode->Parent->Filename);
> + AcpiOsRedirectOutput (FNode->Parent->File);
> + CvPrintOneCommentList (FNode->IncludeComment, Level);
> + AcpiDmIndent (Level);
> + AcpiOsPrintf ("Include (\"%s\")\n", FNode->Filename);
> + CvDbgPrint ("emitted the following: Include (\"%s\")\n", FNode->Filename);
> + FNode->IncludeWritten = TRUE;
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvSwitchFiles
> + *
> + * PARAMETERS: Level - indentation level
> + * Op
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Switch the outputfile and write ASL Include statement. Note,
> + * this function emits actual ASL code rather than comments.
> + * This is referred as ASL_CV_SWITCH_FILES.
> + *
> + ******************************************************************************/
> +
> +void
> +CvSwitchFiles(
> + UINT32 Level,
> + ACPI_PARSE_OBJECT *Op)
> +{
> + char *Filename = Op->Common.CvFilename;
> + ACPI_FILE_NODE *FNode;
> +
> + CvDbgPrint ("Switching from %s to %s\n", AcpiGbl_CurrentFilename, Filename);
> + FNode = CvFilenameExists (Filename, AcpiGbl_FileTreeRoot);
> + if (!FNode)
> + {
> + /*
> + * At this point, each Filename should exist in AcpiGbl_FileTreeRoot
> + * if it does not exist, then abort.
> + */
> + FlDeleteFile (ASL_FILE_AML_OUTPUT);
> + sprintf (MsgBuffer, "\"Cannot find %s\" - %s", Filename, strerror (errno));
> + AslCommonError (ASL_ERROR, ASL_MSG_OPEN, 0, 0, 0, 0, NULL, MsgBuffer);
> + AslAbort ();
> + }
> +
> + /*
> + * If the previous file is a descendent of the current file,
> + * make sure that Include statements from the current file
> + * to the previous have been emitted.
> + */
> + while (FNode &&
> + FNode->Parent &&
> + AcpiUtStricmp (FNode->Filename, AcpiGbl_CurrentFilename))
> + {
> + CvPrintInclude (FNode, Level);
> + FNode = FNode->Parent;
> + }
> +
> + /* Redirect output to the Op->Common.CvFilename */
> +
> + FNode = CvFilenameExists (Filename, AcpiGbl_FileTreeRoot);
> + AcpiOsRedirectOutput (FNode->File);
> + AcpiGbl_CurrentFilename = FNode->Filename;
> +}
> diff --git a/src/acpica/source/compiler/cvparser.c b/src/acpica/source/compiler/cvparser.c
> new file mode 100644
> index 0000000..57486f4
> --- /dev/null
> +++ b/src/acpica/source/compiler/cvparser.c
> @@ -0,0 +1,959 @@
> +/******************************************************************************
> + *
> + * Module Name: cvparser - Converter functions that are called from the AML
> + * parser.
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************/
> +
> +#include "aslcompiler.h"
> +#include "acparser.h"
> +#include "acdispat.h"
> +#include "amlcode.h"
> +#include "acinterp.h"
> +#include "acdisasm.h"
> +#include "acconvert.h"
> +
> +
> +/* local prototypes */
> +
> +static BOOLEAN
> +CvCommentExists (
> + UINT8 *Address);
> +
> +static BOOLEAN
> +CvIsFilename (
> + char *Filename);
> +
> +static ACPI_FILE_NODE*
> +CvFileAddressLookup(
> + char *Address,
> + ACPI_FILE_NODE *Head);
> +
> +static void
> +CvAddToFileTree (
> + char *Filename,
> + char *PreviousFilename);
> +
> +static void
> +CvSetFileParent (
> + char *ChildFile,
> + char *ParentFile);
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvIsFilename
> + *
> + * PARAMETERS: filename - input filename
> + *
> + * RETURN: BOOLEAN - TRUE if all characters are between 0x20 and 0x7f
> + *
> + * DESCRIPTION: Take a given char * and see if it contains all printable
> + * characters. If all characters have hexvalues 20-7f and ends with
> + * .dsl, we will assume that it is a proper filename.
> + *
> + ******************************************************************************/
> +
> +static BOOLEAN
> +CvIsFilename (
> + char *Filename)
> +{
> + UINT64 Length = strlen(Filename);
> + UINT64 i;
> + char *FileExt = Filename + Length - 4;
> +
> +
> + if ((Length > 4) && AcpiUtStricmp (FileExt, ".dsl"))
> + {
> + return FALSE;
> + }
> +
> + for(i = 0; i<Length; ++i)
> + {
> + if (!isprint (Filename[i]))
> + {
> + return FALSE;
> + }
> + }
> + return TRUE;
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvInitFileTree
> + *
> + * PARAMETERS: Table - input table
> + * AmlStart - Address of the starting point of the AML.
> + * AmlLength - Length of the AML file.
> + *
> + * RETURN: none
> + *
> + * DESCRIPTION: Initialize the file dependency tree by scanning the AML.
> + * This is referred as ASL_CV_INIT_FILETREE.
> + *
> + ******************************************************************************/
> +
> +void
> +CvInitFileTree (
> + ACPI_TABLE_HEADER *Table,
> + UINT8 *AmlStart,
> + UINT32 AmlLength)
> +{
> + UINT8 *TreeAml;
> + UINT8 *FileEnd;
> + char *Filename = NULL;
> + char *PreviousFilename = NULL;
> + char *ParentFilename = NULL;
> + char *ChildFilename = NULL;
> +
> +
> + if (!Gbl_CaptureComments)
> + {
> + return;
> + }
> +
> + CvDbgPrint ("AmlLength: %x\n", AmlLength);
> + CvDbgPrint ("AmlStart: %p\n", AmlStart);
> + CvDbgPrint ("AmlEnd?: %p\n", AmlStart+AmlLength);
> +
> + AcpiGbl_FileTreeRoot = AcpiOsAcquireObject (AcpiGbl_FileCache);
> + AcpiGbl_FileTreeRoot->FileStart = (char *)(AmlStart);
> + AcpiGbl_FileTreeRoot->FileEnd = (char *)(AmlStart + Table->Length);
> + AcpiGbl_FileTreeRoot->Next = NULL;
> + AcpiGbl_FileTreeRoot->Parent = NULL;
> + AcpiGbl_FileTreeRoot->Filename = (char *)(AmlStart+2);
> +
> + /* Set the root file to the current open file */
> +
> + AcpiGbl_FileTreeRoot->File = AcpiGbl_OutputFile;
> +
> + /*
> + * Set this to true because we dont need to output
> + * an include statement for the topmost file
> + */
> + AcpiGbl_FileTreeRoot->IncludeWritten = TRUE;
> + Filename = NULL;
> + AcpiGbl_CurrentFilename = (char *)(AmlStart+2);
> + AcpiGbl_RootFilename = (char *)(AmlStart+2);
> +
> + TreeAml = AmlStart;
> + FileEnd = AmlStart + AmlLength;
> +
> + while (TreeAml <= FileEnd)
> + {
> + /*
> + * Make sure that this filename contains all printable characters
> + * and a .dsl extension at the end. If not, then it must be some
> + * raw data that doesn't outline a filename.
> + */
> + if ((*TreeAml == AML_COMMENT_OP) &&
> + (*(TreeAml+1) == FILENAME_COMMENT) &&
> + (CvIsFilename ((char *)(TreeAml+2))))
> + {
> + CvDbgPrint ("A9 and a 08 file\n");
> + PreviousFilename = Filename;
> + Filename = (char *) (TreeAml+2);
> + CvAddToFileTree (Filename, PreviousFilename);
> + ChildFilename = Filename;
> + CvDbgPrint ("%s\n", Filename);
> + }
> + else if ((*TreeAml == AML_COMMENT_OP) &&
> + (*(TreeAml+1) == PARENTFILENAME_COMMENT) &&
> + (CvIsFilename ((char *)(TreeAml+2))))
> + {
> + CvDbgPrint ("A9 and a 09 file\n");
> + ParentFilename = (char *)(TreeAml+2);
> + CvSetFileParent (ChildFilename, ParentFilename);
> + CvDbgPrint ("%s\n", ParentFilename);
> + }
> + ++TreeAml;
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvClearOpComments
> + *
> + * PARAMETERS: Op -- clear all comments within this Op
> + *
> + * RETURN: none
> + *
> + * DESCRIPTION: Clear all converter-related fields of the given Op.
> + * This is referred as ASL_CV_CLEAR_OP_COMMENTS.
> + *
> + ******************************************************************************/
> +
> +void
> +CvClearOpComments (
> + ACPI_PARSE_OBJECT *Op)
> +{
> + Op->Common.InlineComment = NULL;
> + Op->Common.EndNodeComment = NULL;
> + Op->Common.NameComment = NULL;
> + Op->Common.CommentList = NULL;
> + Op->Common.EndBlkComment = NULL;
> + Op->Common.CloseBraceComment = NULL;
> + Op->Common.CvFilename = NULL;
> + Op->Common.CvParentFilename = NULL;
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvCommentExists
> + *
> + * PARAMETERS: address - check if this address appears in the list
> + *
> + * RETURN: BOOLEAN - TRUE if the address exists.
> + *
> + * DESCRIPTION: look at the pointer address and check if this appears in the
> + * list of all addresses. If it exitsts in the list, return TRUE
> + * if it exists. Otherwise add to the list and return FALSE.
> + *
> + ******************************************************************************/
> +
> +static BOOLEAN
> +CvCommentExists (
> + UINT8 *Address)
> +{
> + ACPI_COMMENT_ADDR_NODE *Current = AcpiGbl_CommentAddrListHead;
> + UINT8 Option;
> +
> +
> + if (!Address)
> + {
> + return (FALSE);
> + }
> + Option = *(Address + 1);
> +
> + /*
> + * FILENAME_COMMENT and PARENTFILENAME_COMMENT are not treated as comments.
> + * They serve as markers for where the file starts and ends.
> + */
> + if ((Option == FILENAME_COMMENT) || (Option == PARENTFILENAME_COMMENT))
> + {
> + return (FALSE);
> + }
> +
> + if (!Current)
> + {
> + AcpiGbl_CommentAddrListHead =
> + AcpiOsAcquireObject (AcpiGbl_RegCommentCache);
> + AcpiGbl_CommentAddrListHead->Addr = Address;
> + AcpiGbl_CommentAddrListHead->Next = NULL;
> + return (FALSE);
> + }
> + else
> + {
> + while (Current)
> + {
> + if (Current->Addr != Address)
> + {
> + Current = Current->Next;
> + }
> + else
> + {
> + return (TRUE);
> + }
> + }
> +
> + /*
> + * If the execution gets to this point, it means that this address
> + * does not exists in the list. Add this address to the
> + * beginning of the list.
> + */
> + Current = AcpiGbl_CommentAddrListHead;
> + AcpiGbl_CommentAddrListHead =
> + AcpiOsAcquireObject (AcpiGbl_RegCommentCache);
> + AcpiGbl_CommentAddrListHead->Addr = Address;
> + AcpiGbl_CommentAddrListHead->Next = Current;
> + return (FALSE);
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvFilenameExists
> + *
> + * PARAMETERS: Filename - filename to search
> + *
> + * RETURN: ACPI_FILE_NODE - a pointer to a file node
> + *
> + * DESCRIPTION: Look for the given filename in the file dependency tree.
> + * Returns the file node if it exists, returns NULL if it does not.
> + *
> + ******************************************************************************/
> +
> +ACPI_FILE_NODE*
> +CvFilenameExists(
> + char *Filename,
> + ACPI_FILE_NODE *Head)
> +{
> + ACPI_FILE_NODE *Current = Head;
> +
> +
> + while (Current)
> + {
> + if (!AcpiUtStricmp (Current->Filename, Filename))
> + {
> + return (Current);
> + }
> + Current = Current->Next;
> + }
> + return (NULL);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvFileAddressLookup
> + *
> + * PARAMETERS: Address - address to look up
> + * Head - file dependency tree
> + *
> + * RETURN: ACPI_FLE_NODE - pointer to a file node containing the address
> + *
> + * DESCRIPTION: Look for the given address in the file dependency tree.
> + * Returns the first file node where the given address is within
> + * the file node's starting and ending address.
> + *
> + ******************************************************************************/
> +
> +static ACPI_FILE_NODE*
> +CvFileAddressLookup(
> + char *Address,
> + ACPI_FILE_NODE *Head)
> +{
> + ACPI_FILE_NODE *Current = Head;
> +
> +
> + while (Current)
> + {
> + if ((Address >= Current->FileStart) &&
> + (Address < Current->FileEnd ||
> + !Current->FileEnd))
> + {
> + return (Current);
> + }
> + Current = Current->Next;
> + }
> +
> + return (NULL);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvLabelFileNode
> + *
> + * PARAMETERS: Op
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Takes a given parse op, looks up its Op->Common.Aml field
> + * within the file tree and fills in approperiate file information
> + * from a matching node within the tree.
> + * This is referred as ASL_CV_LABEL_FILENODE.
> + *
> + ******************************************************************************/
> +
> +void
> +CvLabelFileNode(
> + ACPI_PARSE_OBJECT *Op)
> +{
> + ACPI_FILE_NODE *Node;
> +
> +
> + if (!Op)
> + {
> + return;
> + }
> +
> + Node = CvFileAddressLookup ((char *)Op->Common.Aml, AcpiGbl_FileTreeRoot);
> + if (!Node)
> + {
> + return;
> + }
> +
> + Op->Common.CvFilename = Node->Filename;
> + if (Node->Parent)
> + {
> + Op->Common.CvParentFilename = Node->Parent->Filename;
> + }
> + else
> + {
> + Op->Common.CvParentFilename = Node->Filename;
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvAddToFileTree
> + *
> + * PARAMETERS: Filename - Address containing the name of the current
> + * filename
> + * PreviousFilename - Address containing the name of the previous
> + * filename
> + *
> + * RETURN: void
> + *
> + * DESCRIPTION: Add this filename to the AcpiGbl_FileTree if it does not exist.
> + *
> + ******************************************************************************/
> +
> +static void
> +CvAddToFileTree (
> + char *Filename,
> + char *PreviousFilename)
> +{
> + ACPI_FILE_NODE *Node;
> +
> +
> + if (!AcpiUtStricmp(Filename, AcpiGbl_RootFilename) &&
> + PreviousFilename)
> + {
> + Node = CvFilenameExists (PreviousFilename, AcpiGbl_FileTreeRoot);
> + if (Node)
> + {
> + /*
> + * Set the end point of the PreviousFilename to the address
> + * of Filename.
> + */
> + Node->FileEnd = Filename;
> + }
> + }
> + else if (!AcpiUtStricmp(Filename, AcpiGbl_RootFilename) &&
> + !PreviousFilename)
> + {
> + return;
> + }
> +
> + Node = CvFilenameExists (Filename, AcpiGbl_FileTreeRoot);
> + if (Node && PreviousFilename)
> + {
> + /*
> + * Update the end of the previous file and all of their parents' ending
> + * Addresses. This is done to ensure that parent file ranges extend to
> + * the end of their childrens' files.
> + */
> + Node = CvFilenameExists (PreviousFilename, AcpiGbl_FileTreeRoot);
> + if (Node && (Node->FileEnd < Filename))
> + {
> + Node->FileEnd = Filename;
> + Node = Node->Parent;
> + while (Node)
> + {
> + if (Node->FileEnd < Filename)
> + {
> + Node->FileEnd = Filename;
> + }
> + Node = Node->Parent;
> + }
> + }
> + }
> + else
> + {
> + Node = AcpiGbl_FileTreeRoot;
> + AcpiGbl_FileTreeRoot = AcpiOsAcquireObject (AcpiGbl_FileCache);
> + AcpiGbl_FileTreeRoot->Next = Node;
> + AcpiGbl_FileTreeRoot->Parent = NULL;
> + AcpiGbl_FileTreeRoot->Filename = Filename;
> + AcpiGbl_FileTreeRoot->FileStart = Filename;
> + AcpiGbl_FileTreeRoot->IncludeWritten = FALSE;
> + AcpiGbl_FileTreeRoot->File = fopen(Filename, "w+");
> +
> + /*
> + * If we can't open the file, we need to abort here before we
> + * accidentally write to a NULL file.
> + */
> + if (!AcpiGbl_FileTreeRoot->File)
> + {
> + /* delete the .xxx file */
> +
> + FlDeleteFile (ASL_FILE_AML_OUTPUT);
> + sprintf (MsgBuffer, "\"%s\" - %s", Filename, strerror (errno));
> + AslCommonError (ASL_ERROR, ASL_MSG_OPEN, 0, 0, 0, 0, NULL, MsgBuffer);
> + AslAbort ();
> + }
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvSetFileParent
> + *
> + * PARAMETERS: ChildFile - contains the filename of the child file
> + * ParentFile - contains the filename of the parent file.
> + *
> + * RETURN: none
> + *
> + * DESCRIPTION: point the parent pointer of the Child to the node that
> + * corresponds with the parent file node.
> + *
> + ******************************************************************************/
> +
> +static void
> +CvSetFileParent (
> + char *ChildFile,
> + char *ParentFile)
> +{
> + ACPI_FILE_NODE *Child;
> + ACPI_FILE_NODE *Parent;
> +
> +
> + Child = CvFilenameExists (ChildFile, AcpiGbl_FileTreeRoot);
> + Parent = CvFilenameExists (ParentFile, AcpiGbl_FileTreeRoot);
> + if (Child && Parent)
> + {
> + Child->Parent = Parent;
> +
> + while (Child->Parent)
> + {
> + if (Child->Parent->FileEnd < Child->FileStart)
> + {
> + Child->Parent->FileEnd = Child->FileStart;
> + }
> + Child = Child->Parent;
> + }
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvCaptureCommentsOnly
> + *
> + * PARAMETERS: ParserState - A parser state object
> + *
> + * RETURN: none
> + *
> + * DESCRIPTION: look at the aml that the parser state is pointing to,
> + * capture any AML_COMMENT_OP and it's arguments and increment the
> + * aml pointer past the comment. Comments are transferred to parse
> + * nodes through CvTransferComments() as well as
> + * AcpiPsBuildNamedOp().
> + * This is referred as ASL_CV_CAPTURE_COMMENTS_ONLY.
> + *
> + ******************************************************************************/
> +
> +void
> +CvCaptureCommentsOnly (
> + ACPI_PARSE_STATE *ParserState)
> +{
> + UINT8 *Aml = ParserState->Aml;
> + UINT16 Opcode = (UINT16) ACPI_GET8 (Aml);
> + UINT32 Length = 0;
> + UINT8 CommentOption = (UINT16) ACPI_GET8 (Aml+1);
> + BOOLEAN StdDefBlockFlag = FALSE;
> + ACPI_COMMENT_NODE *CommentNode;
> + ACPI_FILE_NODE *FileNode;
> +
> +
> + if (!Gbl_CaptureComments ||
> + Opcode != AML_COMMENT_OP)
> + {
> + return;
> + }
> +
> + while (Opcode == AML_COMMENT_OP)
> + {
> + CvDbgPrint ("comment aml address: %p\n", Aml);
> +
> + if (CvCommentExists(ParserState->Aml))
> + {
> + CvDbgPrint ("Avoiding capturing an existing comment.\n");
> + }
> + else
> + {
> + CommentOption = *(Aml+1);
> +
> + /* Increment past the comment option and point the approperiate char pointers.*/
> +
> + Aml += 2;
> +
> + /* found a comment. Now, set pointers to these comments. */
> +
> + switch (CommentOption)
> + {
> + case STD_DEFBLK_COMMENT:
> +
> + StdDefBlockFlag = TRUE;
> +
> + /* add to a linked list of nodes. This list will be taken by the parse node created next. */
> +
> + CommentNode = AcpiOsAcquireObject (AcpiGbl_RegCommentCache);
> + CommentNode->Comment = ACPI_CAST_PTR (char, Aml);
> + CommentNode->Next = NULL;
> +
> + if (!AcpiGbl_DefBlkCommentListHead)
> + {
> + AcpiGbl_DefBlkCommentListHead = CommentNode;
> + AcpiGbl_DefBlkCommentListTail = CommentNode;
> + }
> + else
> + {
> + AcpiGbl_DefBlkCommentListTail->Next = CommentNode;
> + AcpiGbl_DefBlkCommentListTail = AcpiGbl_DefBlkCommentListTail->Next;
> + }
> + break;
> +
> + case STANDARD_COMMENT:
> +
> + CvDbgPrint ("found regular comment.\n");
> +
> + /* add to a linked list of nodes. This list will be taken by the parse node created next. */
> +
> + CommentNode = AcpiOsAcquireObject (AcpiGbl_RegCommentCache);
> + CommentNode->Comment = ACPI_CAST_PTR (char, Aml);
> + CommentNode->Next = NULL;
> +
> + if (!AcpiGbl_RegCommentListHead)
> + {
> + AcpiGbl_RegCommentListHead = CommentNode;
> + AcpiGbl_RegCommentListTail = CommentNode;
> + }
> + else
> + {
> + AcpiGbl_RegCommentListTail->Next = CommentNode;
> + AcpiGbl_RegCommentListTail = AcpiGbl_RegCommentListTail->Next;
> + }
> + break;
> +
> + case ENDBLK_COMMENT:
> +
> + CvDbgPrint ("found endblk comment.\n");
> +
> + /* add to a linked list of nodes. This will be taken by the next created parse node. */
> +
> + CommentNode = AcpiOsAcquireObject (AcpiGbl_RegCommentCache);
> + CommentNode->Comment = ACPI_CAST_PTR (char, Aml);
> + CommentNode->Next = NULL;
> +
> + if (!AcpiGbl_EndBlkCommentListHead)
> + {
> + AcpiGbl_EndBlkCommentListHead = CommentNode;
> + AcpiGbl_EndBlkCommentListTail = CommentNode;
> + }
> + else
> + {
> + AcpiGbl_EndBlkCommentListTail->Next = CommentNode;
> + AcpiGbl_EndBlkCommentListTail = AcpiGbl_EndBlkCommentListTail->Next;
> + }
> + break;
> +
> + case INLINE_COMMENT:
> +
> + CvDbgPrint ("found inline comment.\n");
> + AcpiGbl_CurrentInlineComment = ACPI_CAST_PTR (char, Aml);
> + break;
> +
> + case ENDNODE_COMMENT:
> +
> + CvDbgPrint ("found EndNode comment.\n");
> + AcpiGbl_CurrentEndNodeComment = ACPI_CAST_PTR (char, Aml);
> + break;
> +
> + case CLOSE_BRACE_COMMENT:
> +
> + CvDbgPrint ("found close brace comment.\n");
> + AcpiGbl_CurrentCloseBraceComment = ACPI_CAST_PTR (char, Aml);
> + break;
> +
> + case END_DEFBLK_COMMENT:
> +
> + CvDbgPrint ("Found comment that belongs after the } for a definition block.\n");
> + AcpiGbl_CurrentScope->Common.CloseBraceComment = ACPI_CAST_PTR (char, Aml);
> + break;
> +
> + case FILENAME_COMMENT:
> +
> + CvDbgPrint ("Found a filename: %s\n", ACPI_CAST_PTR (char, Aml));
> + FileNode = CvFilenameExists (ACPI_CAST_PTR (char, Aml), AcpiGbl_FileTreeRoot);
> +
> + /*
> + * If there is an INCLUDE_COMMENT followed by a
> + * FILENAME_COMMENT, then the INCLUDE_COMMENT is a comment
> + * that is emitted before the #include for the file.
> + * We will save the IncludeComment within the FileNode
> + * associated with this FILENAME_COMMENT.
> + */
> + if (FileNode && AcpiGbl_IncCommentListHead)
> + {
> + FileNode->IncludeComment = AcpiGbl_IncCommentListHead;
> + AcpiGbl_IncCommentListHead = NULL;
> + AcpiGbl_IncCommentListTail = NULL;
> + }
> + break;
> +
> + case PARENTFILENAME_COMMENT:
> + CvDbgPrint (" Found a parent filename.\n");
> + break;
> +
> + case INCLUDE_COMMENT:
> +
> + /*
> + * Add to a linked list. This list will be taken by the
> + * parse node created next. See the FILENAME_COMMENT case
> + * for more details
> + */
> + CommentNode = AcpiOsAcquireObject (AcpiGbl_RegCommentCache);
> + CommentNode->Comment = ACPI_CAST_PTR (char, Aml);
> + CommentNode->Next = NULL;
> +
> + if (!AcpiGbl_IncCommentListHead)
> + {
> + AcpiGbl_IncCommentListHead = CommentNode;
> + AcpiGbl_IncCommentListTail = CommentNode;
> + }
> + else
> + {
> + AcpiGbl_IncCommentListTail->Next = CommentNode;
> + AcpiGbl_IncCommentListTail = AcpiGbl_IncCommentListTail->Next;
> + }
> +
> + CvDbgPrint ("Found a include comment: %s\n", CommentNode->Comment);
> + break;
> +
> + default:
> +
> + /* Not a valid comment option. Revert the AML */
> +
> + Aml -= 2;
> + goto DefBlock;
> + break;
> +
> + } /* end switch statement */
> +
> + } /* end else */
> +
> + /* determine the length and move forward that amount */
> +
> + Length = 0;
> + while (ParserState->Aml[Length])
> + {
> + Length++;
> + }
> +
> + ParserState->Aml += Length + 1;
> +
> +
> + /* Peek at the next Opcode. */
> +
> + Aml = ParserState->Aml;
> + Opcode = (UINT16) ACPI_GET8 (Aml);
> +
> + }
> +
> +DefBlock:
> + if (StdDefBlockFlag)
> + {
> + /*
> + * Give all of its comments to the current scope, which is known as
> + * the definition block, since STD_DEFBLK_COMMENT only appears after
> + * definition block headers.
> + */
> + AcpiGbl_CurrentScope->Common.CommentList
> + = AcpiGbl_DefBlkCommentListHead;
> + AcpiGbl_DefBlkCommentListHead = NULL;
> + AcpiGbl_DefBlkCommentListTail = NULL;
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvCaptureComments
> + *
> + * PARAMETERS: ParserState - A parser state object
> + *
> + * RETURN: none
> + *
> + * DESCRIPTION: Wrapper function for CvCaptureCommentsOnly
> + * This is referred as ASL_CV_CAPTURE_COMMENTS.
> + *
> + ******************************************************************************/
> +
> +void
> +CvCaptureComments (
> + ACPI_WALK_STATE *WalkState)
> +{
> + UINT8 *Aml;
> + UINT16 Opcode;
> + const ACPI_OPCODE_INFO *OpInfo;
> +
> +
> + if (!Gbl_CaptureComments)
> + {
> + return;
> + }
> +
> + /*
> + * Before parsing, check to see that comments that come directly after
> + * deferred opcodes aren't being processed.
> + */
> + Aml = WalkState->ParserState.Aml;
> + Opcode = (UINT16) ACPI_GET8 (Aml);
> + OpInfo = AcpiPsGetOpcodeInfo (Opcode);
> +
> + if (!(OpInfo->Flags & AML_DEFER) ||
> + ((OpInfo->Flags & AML_DEFER) &&
> + (WalkState->PassNumber != ACPI_IMODE_LOAD_PASS1)))
> + {
> + CvCaptureCommentsOnly (&WalkState->ParserState);
> + WalkState->Aml = WalkState->ParserState.Aml;
> + }
> +
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CvTransferComments
> + *
> + * PARAMETERS: Op - Transfer comments to this Op
> + *
> + * RETURN: none
> + *
> + * DESCRIPTION: Transfer all of the commments stored in global containers to the
> + * given Op. This will be invoked shortly after the parser creates
> + * a ParseOp.
> + * This is referred as ASL_CV_TRANSFER_COMMENTS.
> + *
> + ******************************************************************************/
> +
> +void
> +CvTransferComments (
> + ACPI_PARSE_OBJECT *Op)
> +{
> + Op->Common.InlineComment = AcpiGbl_CurrentInlineComment;
> + AcpiGbl_CurrentInlineComment = NULL;
> +
> + Op->Common.EndNodeComment = AcpiGbl_CurrentEndNodeComment;
> + AcpiGbl_CurrentEndNodeComment = NULL;
> +
> + Op->Common.CloseBraceComment = AcpiGbl_CurrentCloseBraceComment;
> + AcpiGbl_CurrentCloseBraceComment = NULL;
> +
> + Op->Common.CommentList = AcpiGbl_RegCommentListHead;
> + AcpiGbl_RegCommentListHead = NULL;
> + AcpiGbl_RegCommentListTail = NULL;
> +
> + Op->Common.EndBlkComment = AcpiGbl_EndBlkCommentListHead;
> + AcpiGbl_EndBlkCommentListHead = NULL;
> + AcpiGbl_EndBlkCommentListTail = NULL;
> +
> +}
> diff --git a/src/acpica/source/compiler/dttable1.c b/src/acpica/source/compiler/dttable1.c
> index 7552d5b..7c5860c 100644
> --- a/src/acpica/source/compiler/dttable1.c
> +++ b/src/acpica/source/compiler/dttable1.c
> @@ -1590,6 +1590,10 @@ DtCompileIort (
> }
>
> IortNode->MappingCount = IdMappingNumber;
> + if (!IdMappingNumber)
> + {
> + IortNode->MappingOffset = 0;
> + }
>
> /*
> * Node length can be determined by DT_LENGTH option
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index 9c85d94..59175d7 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -615,47 +615,53 @@ const unsigned char TemplateHpet[] =
>
> const unsigned char TemplateIort[] =
> {
> - 0x49,0x4F,0x52,0x54,0x48,0x01,0x00,0x00, /* 00000000 "IORTH..." */
> - 0x00,0x02,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
> + 0x49,0x4F,0x52,0x54,0x74,0x01,0x00,0x00, /* 00000000 "IORTt..." */
> + 0x00,0xD2,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
> 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */
> 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
> - 0x12,0x02,0x16,0x20,0x05,0x00,0x00,0x00, /* 00000020 "... ...." */
> + 0x19,0x01,0x17,0x20,0x05,0x00,0x00,0x00, /* 00000020 "... ...." */
> 0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "4......." */
> - 0x00,0x00,0x00,0x00,0x00,0x2C,0x00,0x00, /* 00000030 ".....,.." */
> - 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000038 "........" */
> - 0x18,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000040 "........" */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */
> - 0x01,0x30,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 ".0......" */
> - 0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00, /* 00000068 "....0..." */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000070 "........" */
> - 0x00,0x00,0x00,0x00,0x00,0x5C,0x5F,0x53, /* 00000078 ".....\_S" */
> - 0x42,0x2E,0x50,0x43,0x49,0x30,0x2E,0x44, /* 00000080 "B.PCI0.D" */
> - 0x45,0x56,0x30,0x00,0x00,0x00,0x00,0x00, /* 00000088 "EV0....." */
> - 0x02,0x20,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000090 ". ......" */
> - 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00, /* 00000098 ".... ..." */
> + 0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00, /* 00000030 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */
> + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000040 "........" */
> + 0x00,0x00,0x00,0x00,0x01,0x44,0x00,0x00, /* 00000048 ".....D.." */
> + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000050 "........" */
> + 0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "0......." */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */
> + 0x00,0x5C,0x5F,0x53,0x42,0x2E,0x50,0x43, /* 00000068 ".\_SB.PC" */
> + 0x49,0x30,0x2E,0x44,0x45,0x56,0x30,0x00, /* 00000070 "I0.DEV0." */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */
> + 0x02,0x34,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000090 ".4......" */
> + 0x01,0x00,0x00,0x00,0x20,0x00,0x00,0x00, /* 00000098 ".... ..." */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A8 "........" */
> - 0x03,0x5C,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 ".\......" */
> - 0x00,0x00,0x00,0x00,0x5C,0x00,0x00,0x00, /* 000000B8 "....\..." */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C8 "........" */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D0 "........" */
> - 0x3C,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000D8 "<......." */
> - 0x4C,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000E0 "L......." */
> - 0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E8 "T......." */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F0 "........" */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F8 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */
> + 0x00,0x00,0x00,0x00,0x03,0x60,0x00,0x00, /* 000000C0 ".....`.." */
> + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000C8 "........" */
> + 0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D0 "L......." */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D8 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E0 "........" */
> + 0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00, /* 000000E8 "....<..." */
> + 0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00, /* 000000F0 "....L..." */
> + 0x00,0x00,0x00,0x00,0x4C,0x00,0x00,0x00, /* 000000F8 "....L..." */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000100 "........" */
> - 0x00,0x00,0x00,0x00,0x04,0x3C,0x00,0x00, /* 00000108 ".....<.." */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000108 "........" */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000110 "........" */
> - 0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000118 "<......." */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000120 "........" */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000128 "........" */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000130 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000118 "........" */
> + 0x00,0x00,0x00,0x00,0x04,0x50,0x00,0x00, /* 00000120 ".....P.." */
> + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000128 "........" */
> + 0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000130 "<......." */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000138 "........" */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000140 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000140 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000148 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000150 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000158 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000160 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000168 "........" */
> + 0x00,0x00,0x00,0x00 /* 00000170 "...." */
> };
>
> const unsigned char TemplateIvrs[] =
> diff --git a/src/acpica/source/components/debugger/dbmethod.c b/src/acpica/source/components/debugger/dbmethod.c
> index 60df51a..aba9134 100644
> --- a/src/acpica/source/components/debugger/dbmethod.c
> +++ b/src/acpica/source/components/debugger/dbmethod.c
> @@ -551,6 +551,7 @@ AcpiDbWalkForExecute (
> Status = AcpiGetObjectInfo (ObjHandle, &ObjInfo);
> if (ACPI_FAILURE (Status))
> {
> + ACPI_FREE (Pathname);
> return (Status);
> }
>
> diff --git a/src/acpica/source/components/debugger/dbxface.c b/src/acpica/source/components/debugger/dbxface.c
> index 46eb6da..97261a1 100644
> --- a/src/acpica/source/components/debugger/dbxface.c
> +++ b/src/acpica/source/components/debugger/dbxface.c
> @@ -117,6 +117,7 @@
> #include "accommon.h"
> #include "amlcode.h"
> #include "acdebug.h"
> +#include "acinterp.h"
>
>
> #define _COMPONENT ACPI_CA_DEBUGGER
> @@ -209,7 +210,7 @@ ErrorExit:
> *
> * RETURN: Status
> *
> - * DESCRIPTION: Called for AML_BREAK_POINT_OP
> + * DESCRIPTION: Called for AML_BREAKPOINT_OP
> *
> ******************************************************************************/
>
> @@ -476,7 +477,9 @@ AcpiDbSingleStep (
> }
>
>
> + AcpiExExitInterpreter ();
> Status = AcpiDbStartCommand (WalkState, Op);
> + AcpiExEnterInterpreter ();
>
> /* User commands complete, continue execution of the interrupted method */
>
> diff --git a/src/acpica/source/components/disassembler/dmcstyle.c b/src/acpica/source/components/disassembler/dmcstyle.c
> index 5b2f827..76e0a3a 100644
> --- a/src/acpica/source/components/disassembler/dmcstyle.c
> +++ b/src/acpica/source/components/disassembler/dmcstyle.c
> @@ -118,6 +118,7 @@
> #include "acparser.h"
> #include "amlcode.h"
> #include "acdebug.h"
> +#include "acconvert.h"
>
>
> #define _COMPONENT ACPI_CA_DEBUGGER
> @@ -243,27 +244,27 @@ AcpiDmCheckForSymbolicOpcode (
>
> /* Logical operators, no target */
>
> - case AML_LAND_OP:
> + case AML_LOGICAL_AND_OP:
> OperatorSymbol = " && ";
> break;
>
> - case AML_LEQUAL_OP:
> + case AML_LOGICAL_EQUAL_OP:
> OperatorSymbol = " == ";
> break;
>
> - case AML_LGREATER_OP:
> + case AML_LOGICAL_GREATER_OP:
> OperatorSymbol = " > ";
> break;
>
> - case AML_LLESS_OP:
> + case AML_LOGICAL_LESS_OP:
> OperatorSymbol = " < ";
> break;
>
> - case AML_LOR_OP:
> + case AML_LOGICAL_OR_OP:
> OperatorSymbol = " || ";
> break;
>
> - case AML_LNOT_OP:
> + case AML_LOGICAL_NOT_OP:
> /*
> * Check for the LNOT sub-opcodes. These correspond to
> * LNotEqual, LLessEqual, and LGreaterEqual. There are
> @@ -271,15 +272,15 @@ AcpiDmCheckForSymbolicOpcode (
> */
> switch (Argument1->Common.AmlOpcode)
> {
> - case AML_LEQUAL_OP:
> + case AML_LOGICAL_EQUAL_OP:
> OperatorSymbol = " != ";
> break;
>
> - case AML_LGREATER_OP:
> + case AML_LOGICAL_GREATER_OP:
> OperatorSymbol = " <= ";
> break;
>
> - case AML_LLESS_OP:
> + case AML_LOGICAL_LESS_OP:
> OperatorSymbol = " >= ";
> break;
>
> @@ -315,7 +316,7 @@ AcpiDmCheckForSymbolicOpcode (
> if ((Argument1->Common.AmlOpcode == AML_STRING_OP) ||
> (Argument1->Common.AmlOpcode == AML_BUFFER_OP) ||
> (Argument1->Common.AmlOpcode == AML_PACKAGE_OP) ||
> - (Argument1->Common.AmlOpcode == AML_VAR_PACKAGE_OP))
> + (Argument1->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP))
> {
> Op->Common.DisasmFlags |= ACPI_PARSEOP_CLOSING_PAREN;
> return (FALSE);
> @@ -546,11 +547,11 @@ AcpiDmCheckForSymbolicOpcode (
> case AML_BIT_AND_OP:
> case AML_BIT_OR_OP:
> case AML_BIT_XOR_OP:
> - case AML_LAND_OP:
> - case AML_LEQUAL_OP:
> - case AML_LGREATER_OP:
> - case AML_LLESS_OP:
> - case AML_LOR_OP:
> + case AML_LOGICAL_AND_OP:
> + case AML_LOGICAL_EQUAL_OP:
> + case AML_LOGICAL_GREATER_OP:
> + case AML_LOGICAL_LESS_OP:
> + case AML_LOGICAL_OR_OP:
>
> Op->Common.DisasmFlags |= ACPI_PARSEOP_ASSIGNMENT;
> AcpiOsPrintf ("(");
> @@ -797,12 +798,14 @@ AcpiDmCloseOperator (
> if (!AcpiGbl_CstyleDisassembly)
> {
> AcpiOsPrintf (")");
> + ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0);
> return;
> }
>
> if (Op->Common.DisasmFlags & ACPI_PARSEOP_LEGACY_ASL_ONLY)
> {
> AcpiOsPrintf (")");
> + ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0);
> return;
> }
>
> @@ -820,16 +823,17 @@ AcpiDmCloseOperator (
> case AML_BIT_AND_OP:
> case AML_BIT_OR_OP:
> case AML_BIT_XOR_OP:
> - case AML_LAND_OP:
> - case AML_LEQUAL_OP:
> - case AML_LGREATER_OP:
> - case AML_LLESS_OP:
> - case AML_LOR_OP:
> + case AML_LOGICAL_AND_OP:
> + case AML_LOGICAL_EQUAL_OP:
> + case AML_LOGICAL_GREATER_OP:
> + case AML_LOGICAL_LESS_OP:
> + case AML_LOGICAL_OR_OP:
>
> /* Emit paren only if this is not a compound assignment */
>
> if (Op->Common.DisasmFlags & ACPI_PARSEOP_COMPOUND_ASSIGNMENT)
> {
> + ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0);
> return;
> }
>
> @@ -849,15 +853,17 @@ AcpiDmCloseOperator (
> {
> AcpiOsPrintf (")");
> }
> + ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0);
> return;
>
> /* No need for parens for these */
>
> case AML_DECREMENT_OP:
> case AML_INCREMENT_OP:
> - case AML_LNOT_OP:
> + case AML_LOGICAL_NOT_OP:
> case AML_BIT_NOT_OP:
> case AML_STORE_OP:
> + ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0);
> return;
>
> default:
> @@ -867,6 +873,9 @@ AcpiDmCloseOperator (
> }
>
> AcpiOsPrintf (")");
> + ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0);
> +
> + return;
> }
>
>
> diff --git a/src/acpica/source/components/disassembler/dmdeferred.c b/src/acpica/source/components/disassembler/dmdeferred.c
> index b83a415..1d1d0e8 100644
> --- a/src/acpica/source/components/disassembler/dmdeferred.c
> +++ b/src/acpica/source/components/disassembler/dmdeferred.c
> @@ -175,7 +175,7 @@ AcpiDmParseDeferredOps (
> case AML_METHOD_OP:
> case AML_BUFFER_OP:
> case AML_PACKAGE_OP:
> - case AML_VAR_PACKAGE_OP:
> + case AML_VARIABLE_PACKAGE_OP:
>
> Status = AcpiDmDeferredParse (
> Op, Op->Named.Data, Op->Named.Length);
> @@ -289,7 +289,7 @@ AcpiDmDeferredParse (
> {
> case AML_BUFFER_OP:
> case AML_PACKAGE_OP:
> - case AML_VAR_PACKAGE_OP:
> + case AML_VARIABLE_PACKAGE_OP:
>
> switch (Op->Common.AmlOpcode)
> {
> @@ -300,7 +300,7 @@ AcpiDmDeferredParse (
> ACPI_FREE (ExtraOp);
> break;
>
> - case AML_VAR_PACKAGE_OP:
> + case AML_VARIABLE_PACKAGE_OP:
> case AML_BUFFER_OP:
> default:
>
> diff --git a/src/acpica/source/components/disassembler/dmnames.c b/src/acpica/source/components/disassembler/dmnames.c
> index cd4445b..916d592 100644
> --- a/src/acpica/source/components/disassembler/dmnames.c
> +++ b/src/acpica/source/components/disassembler/dmnames.c
> @@ -316,7 +316,7 @@ AcpiDmNamestring (
> Name++;
> break;
>
> - case AML_MULTI_NAME_PREFIX_OP:
> + case AML_MULTI_NAME_PREFIX:
>
> SegCount = (UINT32) ACPI_GET8 (Name + 1);
> Name += 2;
> diff --git a/src/acpica/source/components/disassembler/dmopcode.c b/src/acpica/source/components/disassembler/dmopcode.c
> index fb924f2..17e726d 100644
> --- a/src/acpica/source/components/disassembler/dmopcode.c
> +++ b/src/acpica/source/components/disassembler/dmopcode.c
> @@ -120,6 +120,7 @@
> #include "acinterp.h"
> #include "acnamesp.h"
> #include "acdebug.h"
> +#include "acconvert.h"
>
>
> #define _COMPONENT ACPI_CA_DEBUGGER
> @@ -142,7 +143,8 @@ AcpiDmPromoteSubtree (
>
> static BOOLEAN
> AcpiDmIsSwitchBlock (
> - ACPI_PARSE_OBJECT *Op);
> + ACPI_PARSE_OBJECT *Op,
> + char *Temp);
>
> static BOOLEAN
> AcpiDmIsCaseBlock (
> @@ -788,15 +790,15 @@ AcpiDmDisassembleOneOp (
> {
> switch (Op->Common.AmlOpcode)
> {
> - case AML_LEQUAL_OP:
> + case AML_LOGICAL_EQUAL_OP:
> AcpiOsPrintf ("LNotEqual");
> break;
>
> - case AML_LGREATER_OP:
> + case AML_LOGICAL_GREATER_OP:
> AcpiOsPrintf ("LLessEqual");
> break;
>
> - case AML_LLESS_OP:
> + case AML_LOGICAL_LESS_OP:
> AcpiOsPrintf ("LGreaterEqual");
> break;
>
> @@ -819,12 +821,12 @@ AcpiDmDisassembleOneOp (
>
> switch (Op->Common.AmlOpcode)
> {
> - case AML_LNOT_OP:
> + case AML_LOGICAL_NOT_OP:
>
> Child = Op->Common.Value.Arg;
> - if ((Child->Common.AmlOpcode == AML_LEQUAL_OP) ||
> - (Child->Common.AmlOpcode == AML_LGREATER_OP) ||
> - (Child->Common.AmlOpcode == AML_LLESS_OP))
> + if ((Child->Common.AmlOpcode == AML_LOGICAL_EQUAL_OP) ||
> + (Child->Common.AmlOpcode == AML_LOGICAL_GREATER_OP) ||
> + (Child->Common.AmlOpcode == AML_LOGICAL_LESS_OP))
> {
> Child->Common.DisasmOpcode = ACPI_DASM_LNOT_SUFFIX;
> Op->Common.DisasmOpcode = ACPI_DASM_LNOT_PREFIX;
> @@ -953,8 +955,12 @@ AcpiDmDisassembleOneOp (
> case AML_INT_NAMEDFIELD_OP:
>
> Length = AcpiDmDumpName (Op->Named.Name);
> - AcpiOsPrintf (",%*.s %u", (unsigned) (5 - Length), " ",
> +
> + AcpiOsPrintf (",");
> + ASL_CV_PRINT_ONE_COMMENT (Op, AML_NAMECOMMENT, NULL, 0);
> + AcpiOsPrintf ("%*.s %u", (unsigned) (5 - Length), " ",
> (UINT32) Op->Common.Value.Integer);
> +
> AcpiDmCommaIfFieldMember (Op);
>
> Info->BitOffset += (UINT32) Op->Common.Value.Integer;
> @@ -995,6 +1001,7 @@ AcpiDmDisassembleOneOp (
>
> AcpiOsPrintf (")");
> AcpiDmCommaIfFieldMember (Op);
> + ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0);
> break;
>
> case AML_INT_CONNECTION_OP:
> @@ -1028,6 +1035,8 @@ AcpiDmDisassembleOneOp (
>
> AcpiOsPrintf (")");
> AcpiDmCommaIfFieldMember (Op);
> + ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0);
> + ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0);
> AcpiOsPrintf ("\n");
>
> Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; /* for now, ignore in AcpiDmAscendingOp */
> @@ -1049,7 +1058,7 @@ AcpiDmDisassembleOneOp (
>
> case AML_WHILE_OP:
>
> - if (AcpiDmIsSwitchBlock(Op))
> + if (Op->Common.DisasmOpcode == ACPI_DASM_SWITCH)
> {
> AcpiOsPrintf ("%s", "Switch");
> break;
> @@ -1078,15 +1087,13 @@ AcpiDmDisassembleOneOp (
>
> if (AcpiGbl_DmEmitExternalOpcodes)
> {
> - AcpiOsPrintf ("/* Opcode 0x15 */ ");
> -
> - /* Fallthrough */
> - }
> - else
> - {
> + AcpiDmEmitExternal (AcpiPsGetArg(Op, 0),
> + AcpiPsGetArg(Op, 1));
> break;
> }
>
> + break;
> +
> default:
>
> /* Just get the opcode name and print it */
> @@ -1327,11 +1334,13 @@ AcpiDmPromoteSubtree (
> *
> * PARAMETERS: Op - Object to be examined
> *
> - * RETURN: TRUE if object is a temporary (_T_x) name
> + * RETURN: TRUE if object is a temporary (_T_x) name for a matching While
> + * loop that can be converted to a Switch.
> *
> - * DESCRIPTION: Determine if an object is a temporary name and ignore it.
> - * Temporary names are only used for Switch statements. This
> - * function depends on this restriced usage.
> + * DESCRIPTION: _T_X objects are only used for Switch statements. If a temporary
> + * name exists, search the siblings for a matching While (One) loop
> + * that can be converted to a Switch. Return TRUE if a match was
> + * found, FALSE otherwise.
> *
> ******************************************************************************/
>
> @@ -1339,6 +1348,7 @@ BOOLEAN
> AcpiDmIsTempName (
> ACPI_PARSE_OBJECT *Op)
> {
> + ACPI_PARSE_OBJECT *CurrentOp;
> char *Temp;
>
> if (Op->Common.AmlOpcode != AML_NAME_OP)
> @@ -1354,11 +1364,21 @@ AcpiDmIsTempName (
> return (FALSE);
> }
>
> - /* Ignore Op */
> + CurrentOp = Op->Common.Next;
> + while (CurrentOp)
> + {
> + if (CurrentOp->Common.AmlOpcode == AML_WHILE_OP &&
> + AcpiDmIsSwitchBlock(CurrentOp, Temp))
> + {
> + Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
> + CurrentOp->Common.DisasmOpcode = ACPI_DASM_SWITCH;
>
> - Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
> + return (TRUE);
> + }
> + CurrentOp = CurrentOp->Common.Next;
> + }
>
> - return (TRUE);
> + return (FALSE);
> }
>
> /*******************************************************************************
> @@ -1394,7 +1414,8 @@ AcpiDmIsTempName (
>
> static BOOLEAN
> AcpiDmIsSwitchBlock (
> - ACPI_PARSE_OBJECT *Op)
> + ACPI_PARSE_OBJECT *Op,
> + char *Temp)
> {
> ACPI_PARSE_OBJECT *OneOp;
> ACPI_PARSE_OBJECT *StoreOp;
> @@ -1427,7 +1448,7 @@ AcpiDmIsSwitchBlock (
> return (FALSE);
> }
>
> - if (strncmp((char *)(NamePathOp->Common.Aml), "_T_", 3))
> + if (strncmp((char *)(NamePathOp->Common.Aml), Temp, 4))
> {
> return (FALSE);
> }
> @@ -1483,7 +1504,7 @@ AcpiDmIsSwitchBlock (
> TempOp = AcpiPsGetArg (CurrentOp, 0);
> switch (TempOp->Common.AmlOpcode)
> {
> - case (AML_LEQUAL_OP):
> + case (AML_LOGICAL_EQUAL_OP):
>
> /* Ignore just the LEqual Op */
>
> @@ -1505,7 +1526,7 @@ AcpiDmIsSwitchBlock (
>
> break;
>
> - case (AML_LNOT_OP):
> + case (AML_LOGICAL_NOT_OP):
>
> /*
> * The Package will be the predicate of the Case statement.
> @@ -1660,7 +1681,7 @@ AcpiDmIsCaseBlock (
>
> switch (CurrentOp->Common.AmlOpcode)
> {
> - case (AML_LEQUAL_OP):
> + case (AML_LOGICAL_EQUAL_OP):
>
> /* Next child must be NamePath with string _T_ */
>
> @@ -1673,12 +1694,12 @@ AcpiDmIsCaseBlock (
>
> break;
>
> - case (AML_LNOT_OP):
> + case (AML_LOGICAL_NOT_OP):
>
> /* Child of LNot must be LEqual op */
>
> CurrentOp = AcpiPsGetArg (CurrentOp, 0);
> - if (!CurrentOp || (CurrentOp->Common.AmlOpcode != AML_LEQUAL_OP))
> + if (!CurrentOp || (CurrentOp->Common.AmlOpcode != AML_LOGICAL_EQUAL_OP))
> {
> return (FALSE);
> }
> diff --git a/src/acpica/source/components/disassembler/dmutils.c b/src/acpica/source/components/disassembler/dmutils.c
> index 2f4a343..33c8b5c 100644
> --- a/src/acpica/source/components/disassembler/dmutils.c
> +++ b/src/acpica/source/components/disassembler/dmutils.c
> @@ -117,6 +117,7 @@
> #include "accommon.h"
> #include "amlcode.h"
> #include "acdisasm.h"
> +#include "acconvert.h"
>
> #ifdef ACPI_ASL_COMPILER
> #include <acnamesp.h>
> @@ -322,6 +323,7 @@ AcpiDmCommaIfListMember (
>
> if (!Op->Common.Next)
> {
> + ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0);
> return (FALSE);
> }
>
> @@ -331,6 +333,7 @@ AcpiDmCommaIfListMember (
>
> if (Op->Common.Next->Common.DisasmFlags & ACPI_PARSEOP_IGNORE)
> {
> + ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0);
> return (FALSE);
> }
>
> @@ -347,6 +350,7 @@ AcpiDmCommaIfListMember (
> */
> if (!Op->Common.Next->Common.Next)
> {
> + ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0);
> return (FALSE);
> }
> }
> @@ -354,6 +358,7 @@ AcpiDmCommaIfListMember (
> if ((Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMETER_LIST) &&
> (!(Op->Common.Next->Common.DisasmFlags & ACPI_PARSEOP_PARAMETER_LIST)))
> {
> + ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0);
> return (FALSE);
> }
>
> @@ -362,6 +367,7 @@ AcpiDmCommaIfListMember (
> if (!Op->Common.OperatorSymbol)
> {
> AcpiOsPrintf (", ");
> + ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0);
> }
>
> return (TRUE);
> @@ -371,6 +377,8 @@ AcpiDmCommaIfListMember (
> (Op->Common.Next->Common.DisasmFlags & ACPI_PARSEOP_PARAMETER_LIST))
> {
> AcpiOsPrintf (", ");
> + ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0);
> +
> return (TRUE);
> }
>
> diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c
> index fa681d7..3c17b8c 100644
> --- a/src/acpica/source/components/disassembler/dmwalk.c
> +++ b/src/acpica/source/components/disassembler/dmwalk.c
> @@ -118,6 +118,7 @@
> #include "acparser.h"
> #include "amlcode.h"
> #include "acdebug.h"
> +#include "acconvert.h"
>
>
> #define _COMPONENT ACPI_CA_DEBUGGER
> @@ -135,6 +136,14 @@ AcpiDmEmitExternals (
> {
> return;
> }
> +
> +void
> +AcpiDmEmitExternal (
> + ACPI_PARSE_OBJECT *NameOp,
> + ACPI_PARSE_OBJECT *TypeOp)
> +{
> + return;
> +}
> #endif
>
> /* Local prototypes */
> @@ -151,10 +160,6 @@ AcpiDmAscendingOp (
> UINT32 Level,
> void *Context);
>
> -static UINT32
> -AcpiDmBlockType (
> - ACPI_PARSE_OBJECT *Op);
> -
>
> /*******************************************************************************
> *
> @@ -320,7 +325,7 @@ AcpiDmWalkParseTree (
> *
> ******************************************************************************/
>
> -static UINT32
> +UINT32
> AcpiDmBlockType (
> ACPI_PARSE_OBJECT *Op)
> {
> @@ -342,7 +347,7 @@ AcpiDmBlockType (
> case AML_DEVICE_OP:
> case AML_SCOPE_OP:
> case AML_PROCESSOR_OP:
> - case AML_POWER_RES_OP:
> + case AML_POWER_RESOURCE_OP:
> case AML_THERMAL_ZONE_OP:
> case AML_IF_OP:
> case AML_WHILE_OP:
> @@ -364,7 +369,7 @@ AcpiDmBlockType (
> /*lint -fallthrough */
>
> case AML_PACKAGE_OP:
> - case AML_VAR_PACKAGE_OP:
> + case AML_VARIABLE_PACKAGE_OP:
>
> return (BLOCK_PAREN | BLOCK_BRACE);
>
> @@ -376,7 +381,7 @@ AcpiDmBlockType (
>
> if (Op->Common.Parent &&
> ((Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) ||
> - (Op->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP)))
> + (Op->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP)))
> {
> /* This is a reference to a method, not an invocation */
>
> @@ -429,7 +434,7 @@ AcpiDmListType (
> case AML_METHOD_OP:
> case AML_DEVICE_OP:
> case AML_SCOPE_OP:
> - case AML_POWER_RES_OP:
> + case AML_POWER_RESOURCE_OP:
> case AML_PROCESSOR_OP:
> case AML_THERMAL_ZONE_OP:
> case AML_IF_OP:
> @@ -442,7 +447,7 @@ AcpiDmListType (
>
> case AML_BUFFER_OP:
> case AML_PACKAGE_OP:
> - case AML_VAR_PACKAGE_OP:
> + case AML_VARIABLE_PACKAGE_OP:
>
> return (BLOCK_COMMA_LIST);
>
> @@ -486,6 +491,22 @@ AcpiDmDescendingOp (
> UINT32 AmlOffset;
>
>
> + /* Determine which file this parse node is contained in. */
> +
> + if (Gbl_CaptureComments)
> + {
> + ASL_CV_LABEL_FILENODE (Op);
> +
> + if (Level != 0 && ASL_CV_FILE_HAS_SWITCHED (Op))
> + {
> + ASL_CV_SWITCH_FILES (Level, Op);
> + }
> +
> + /* If this parse node has regular comments, print them here. */
> +
> + ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_STANDARD, NULL, Level);
> + }
> +
> OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
>
> /* Listing support to dump the AML code after the ASL statement */
> @@ -600,7 +621,11 @@ AcpiDmDescendingOp (
>
> /* Emit all External() declarations here */
>
> - AcpiDmEmitExternals ();
> + if (!AcpiGbl_DmEmitExternalOpcodes)
> + {
> + AcpiDmEmitExternals ();
> + }
> +
> return (AE_OK);
> }
> }
> @@ -679,6 +704,12 @@ AcpiDmDescendingOp (
> Info->Level--;
> }
>
> + if (Op->Common.AmlOpcode == AML_EXTERNAL_OP)
> + {
> + Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
> + return (AE_CTRL_DEPTH);
> + }
> +
> /* Start the opcode argument list if necessary */
>
> if ((OpInfo->Flags & AML_HAS_ARGS) ||
> @@ -689,6 +720,10 @@ AcpiDmDescendingOp (
> if (AcpiDmBlockType (Op) & BLOCK_PAREN)
> {
> AcpiOsPrintf (" (");
> + if (!(AcpiDmBlockType (Op) & BLOCK_BRACE))
> + {
> + ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, " ", 0);
> + }
> }
>
> /* If this is a named opcode, print the associated name value */
> @@ -733,7 +768,7 @@ AcpiDmDescendingOp (
> case AML_METHOD_OP:
>
> AcpiDmMethodFlags (Op);
> - AcpiOsPrintf (")");
> + ASL_CV_CLOSE_PAREN (Op, Level);
>
> /* Emit description comment for Method() with a predefined ACPI name */
>
> @@ -746,6 +781,7 @@ AcpiDmDescendingOp (
>
> AcpiDmCheckForHardwareId (Op);
> AcpiOsPrintf (", ");
> + ASL_CV_PRINT_ONE_COMMENT (Op, AML_NAMECOMMENT, NULL, 0);
> break;
>
> case AML_REGION_OP:
> @@ -753,7 +789,7 @@ AcpiDmDescendingOp (
> AcpiDmRegionFlags (Op);
> break;
>
> - case AML_POWER_RES_OP:
> + case AML_POWER_RESOURCE_OP:
>
> /* Mark the next two Ops as part of the parameter list */
>
> @@ -795,7 +831,7 @@ AcpiDmDescendingOp (
> case AML_DEVICE_OP:
> case AML_THERMAL_ZONE_OP:
>
> - AcpiOsPrintf (")");
> + ASL_CV_CLOSE_PAREN (Op, Level);
> break;
>
> default:
> @@ -889,7 +925,7 @@ AcpiDmDescendingOp (
> */
> NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
> NextOp = NextOp->Common.Next;
> - AcpiOsPrintf (")");
> + ASL_CV_CLOSE_PAREN (Op, Level);
>
> /* Emit description comment for Name() with a predefined ACPI name */
>
> @@ -907,7 +943,7 @@ AcpiDmDescendingOp (
> return (AE_OK);
>
> case AML_IF_OP:
> - case AML_VAR_PACKAGE_OP:
> + case AML_VARIABLE_PACKAGE_OP:
> case AML_WHILE_OP:
>
> /* The next op is the size or predicate parameter */
> @@ -975,6 +1011,20 @@ AcpiDmAscendingOp (
> ACPI_PARSE_OBJECT *ParentOp;
>
>
> + /* Point the Op's filename pointer to the proper file */
> +
> + if (Gbl_CaptureComments)
> + {
> + ASL_CV_LABEL_FILENODE (Op);
> +
> + /* Switch the output of these files if necessary */
> +
> + if (ASL_CV_FILE_HAS_SWITCHED (Op))
> + {
> + ASL_CV_SWITCH_FILES (Level, Op);
> + }
> + }
> +
> if (Op->Common.DisasmFlags & ACPI_PARSEOP_IGNORE ||
> Op->Common.DisasmOpcode == ACPI_DASM_IGNORE_SINGLE)
> {
> @@ -987,7 +1037,17 @@ AcpiDmAscendingOp (
> {
> /* Indicates the end of the current descriptor block (table) */
>
> - AcpiOsPrintf ("}\n\n");
> + ASL_CV_CLOSE_BRACE (Op, Level);
> +
> + /* Print any comments that are at the end of the file here */
> +
> + if (Gbl_CaptureComments && AcpiGbl_LastListHead)
> + {
> + AcpiOsPrintf ("\n");
> + ASL_CV_PRINT_ONE_COMMENT_LIST (AcpiGbl_LastListHead, 0);
> + }
> + AcpiOsPrintf ("\n\n");
> +
> return (AE_OK);
> }
>
> @@ -1048,12 +1108,12 @@ AcpiDmAscendingOp (
>
> if (Op->Common.DisasmFlags & ACPI_PARSEOP_EMPTY_TERMLIST)
> {
> - AcpiOsPrintf ("}");
> + ASL_CV_CLOSE_BRACE (Op, Level);
> }
> else
> {
> AcpiDmIndent (Level);
> - AcpiOsPrintf ("}");
> + ASL_CV_CLOSE_BRACE (Op, Level);
> }
>
> AcpiDmCommaIfListMember (Op);
> @@ -1103,7 +1163,7 @@ AcpiDmAscendingOp (
> switch (Op->Common.Parent->Common.AmlOpcode)
> {
> case AML_PACKAGE_OP:
> - case AML_VAR_PACKAGE_OP:
> + case AML_VARIABLE_PACKAGE_OP:
>
> if (!(Op->Common.DisasmFlags & ACPI_PARSEOP_PARAMETER_LIST))
> {
> @@ -1143,7 +1203,7 @@ AcpiDmAscendingOp (
> */
> if (Op->Common.Next || Op->Common.DisasmOpcode == ACPI_DASM_SWITCH_PREDICATE)
> {
> - AcpiOsPrintf (")");
> + ASL_CV_CLOSE_PAREN (Op, Level);
>
> /*
> * Emit a description comment for a Name() operator that is a
> @@ -1170,7 +1230,8 @@ AcpiDmAscendingOp (
> else
> {
> ParentOp->Common.DisasmFlags |= ACPI_PARSEOP_EMPTY_TERMLIST;
> - AcpiOsPrintf (") {");
> + ASL_CV_CLOSE_PAREN (Op, Level);
> + AcpiOsPrintf ("{");
> }
> }
>
> diff --git a/src/acpica/source/components/dispatcher/dscontrol.c b/src/acpica/source/components/dispatcher/dscontrol.c
> index bfbd4b1..777a270 100644
> --- a/src/acpica/source/components/dispatcher/dscontrol.c
> +++ b/src/acpica/source/components/dispatcher/dscontrol.c
> @@ -430,7 +430,7 @@ AcpiDsExecEndControlOp (
>
> break;
>
> - case AML_BREAK_POINT_OP:
> + case AML_BREAKPOINT_OP:
>
> AcpiDbSignalBreakPoint (WalkState);
>
> diff --git a/src/acpica/source/components/dispatcher/dsmthdat.c b/src/acpica/source/components/dispatcher/dsmthdat.c
> index 18763e5..539438f 100644
> --- a/src/acpica/source/components/dispatcher/dsmthdat.c
> +++ b/src/acpica/source/components/dispatcher/dsmthdat.c
> @@ -800,7 +800,8 @@ AcpiDsStoreObjectToLocal (
> *
> * FUNCTION: AcpiDsMethodDataGetType
> *
> - * PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
> + * PARAMETERS: Opcode - Either AML_FIRST LOCAL_OP or
> + * AML_FIRST_ARG_OP
> * Index - Which Local or Arg whose type to get
> * WalkState - Current walk state object
> *
> diff --git a/src/acpica/source/components/dispatcher/dsobject.c b/src/acpica/source/components/dispatcher/dsobject.c
> index 6cdb335..d0dee77 100644
> --- a/src/acpica/source/components/dispatcher/dsobject.c
> +++ b/src/acpica/source/components/dispatcher/dsobject.c
> @@ -185,7 +185,7 @@ AcpiDsBuildInternalObject (
> if ((Status == AE_NOT_FOUND) && (AcpiGbl_EnableInterpreterSlack) &&
>
> ((Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) ||
> - (Op->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP)))
> + (Op->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP)))
> {
> /*
> * We didn't find the target and we are populating elements
> @@ -214,7 +214,7 @@ AcpiDsBuildInternalObject (
> /* Special object resolution for elements of a package */
>
> if ((Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) ||
> - (Op->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP))
> + (Op->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP))
> {
> /*
> * Attempt to resolve the node to a value before we insert it into
> @@ -483,7 +483,7 @@ AcpiDsBuildInternalPackageObj (
>
> Parent = Op->Common.Parent;
> while ((Parent->Common.AmlOpcode == AML_PACKAGE_OP) ||
> - (Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP))
> + (Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP))
> {
> Parent = Parent->Common.Parent;
> }
> @@ -867,9 +867,9 @@ AcpiDsInitObjectFromOp (
> {
> case AML_TYPE_LOCAL_VARIABLE:
>
> - /* Local ID (0-7) is (AML opcode - base AML_LOCAL_OP) */
> + /* Local ID (0-7) is (AML opcode - base AML_FIRST_LOCAL_OP) */
>
> - ObjDesc->Reference.Value = ((UINT32) Opcode) - AML_LOCAL_OP;
> + ObjDesc->Reference.Value = ((UINT32) Opcode) - AML_FIRST_LOCAL_OP;
> ObjDesc->Reference.Class = ACPI_REFCLASS_LOCAL;
>
> #ifndef ACPI_NO_METHOD_EXECUTION
> @@ -882,9 +882,9 @@ AcpiDsInitObjectFromOp (
>
> case AML_TYPE_METHOD_ARGUMENT:
>
> - /* Arg ID (0-6) is (AML opcode - base AML_ARG_OP) */
> + /* Arg ID (0-6) is (AML opcode - base AML_FIRST_ARG_OP) */
>
> - ObjDesc->Reference.Value = ((UINT32) Opcode) - AML_ARG_OP;
> + ObjDesc->Reference.Value = ((UINT32) Opcode) - AML_FIRST_ARG_OP;
> ObjDesc->Reference.Class = ACPI_REFCLASS_ARG;
>
> #ifndef ACPI_NO_METHOD_EXECUTION
> diff --git a/src/acpica/source/components/dispatcher/dsopcode.c b/src/acpica/source/components/dispatcher/dsopcode.c
> index d2d5d8b..254d43e 100644
> --- a/src/acpica/source/components/dispatcher/dsopcode.c
> +++ b/src/acpica/source/components/dispatcher/dsopcode.c
> @@ -753,7 +753,7 @@ AcpiDsEvalDataObjectOperands (
> break;
>
> case AML_PACKAGE_OP:
> - case AML_VAR_PACKAGE_OP:
> + case AML_VARIABLE_PACKAGE_OP:
>
> Status = AcpiDsBuildInternalPackageObj (
> WalkState, Op, Length, &ObjDesc);
> @@ -773,7 +773,7 @@ AcpiDsEvalDataObjectOperands (
> */
> if ((!Op->Common.Parent) ||
> ((Op->Common.Parent->Common.AmlOpcode != AML_PACKAGE_OP) &&
> - (Op->Common.Parent->Common.AmlOpcode != AML_VAR_PACKAGE_OP) &&
> + (Op->Common.Parent->Common.AmlOpcode != AML_VARIABLE_PACKAGE_OP) &&
> (Op->Common.Parent->Common.AmlOpcode != AML_NAME_OP)))
> {
> WalkState->ResultObj = ObjDesc;
> diff --git a/src/acpica/source/components/dispatcher/dsutils.c b/src/acpica/source/components/dispatcher/dsutils.c
> index 0dd2c57..5de1d89 100644
> --- a/src/acpica/source/components/dispatcher/dsutils.c
> +++ b/src/acpica/source/components/dispatcher/dsutils.c
> @@ -369,8 +369,8 @@ AcpiDsIsResultUsed (
> if ((Op->Common.Parent->Common.AmlOpcode == AML_REGION_OP) ||
> (Op->Common.Parent->Common.AmlOpcode == AML_DATA_REGION_OP) ||
> (Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) ||
> - (Op->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP) ||
> (Op->Common.Parent->Common.AmlOpcode == AML_BUFFER_OP) ||
> + (Op->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP) ||
> (Op->Common.Parent->Common.AmlOpcode == AML_INT_EVAL_SUBTREE_OP) ||
> (Op->Common.Parent->Common.AmlOpcode == AML_BANK_FIELD_OP))
> {
> @@ -661,7 +661,7 @@ AcpiDsCreateOperand (
> */
> if (Status == AE_NOT_FOUND)
> {
> - if (ParentOp->Common.AmlOpcode == AML_COND_REF_OF_OP)
> + if (ParentOp->Common.AmlOpcode == AML_CONDITIONAL_REF_OF_OP)
> {
> /*
> * For the Conditional Reference op, it's OK if
> @@ -942,7 +942,7 @@ AcpiDsEvaluateNamePath (
> }
>
> if ((Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) ||
> - (Op->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP) ||
> + (Op->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP) ||
> (Op->Common.Parent->Common.AmlOpcode == AML_REF_OF_OP))
> {
> /* TBD: Should we specify this feature as a bit of OpInfo->Flags of these opcodes? */
> diff --git a/src/acpica/source/components/dispatcher/dswexec.c b/src/acpica/source/components/dispatcher/dswexec.c
> index 6d8421f..716e1e6 100644
> --- a/src/acpica/source/components/dispatcher/dswexec.c
> +++ b/src/acpica/source/components/dispatcher/dswexec.c
> @@ -608,7 +608,7 @@ AcpiDsExecEndOp (
> */
> if ((Op->Asl.Parent) &&
> ((Op->Asl.Parent->Asl.AmlOpcode == AML_PACKAGE_OP) ||
> - (Op->Asl.Parent->Asl.AmlOpcode == AML_VAR_PACKAGE_OP)))
> + (Op->Asl.Parent->Asl.AmlOpcode == AML_VARIABLE_PACKAGE_OP)))
> {
> ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
> "Method Reference in a Package, Op=%p\n", Op));
> diff --git a/src/acpica/source/components/dispatcher/dswload2.c b/src/acpica/source/components/dispatcher/dswload2.c
> index 6cc32ee..0a4f9fc 100644
> --- a/src/acpica/source/components/dispatcher/dswload2.c
> +++ b/src/acpica/source/components/dispatcher/dswload2.c
> @@ -615,7 +615,7 @@ AcpiDsLoad2EndOp (
> Status = AcpiExCreateProcessor (WalkState);
> break;
>
> - case AML_POWER_RES_OP:
> + case AML_POWER_RESOURCE_OP:
>
> Status = AcpiExCreatePowerResource (WalkState);
> break;
> diff --git a/src/acpica/source/components/executer/exmisc.c b/src/acpica/source/components/executer/exmisc.c
> index e12a9b1..d888e76 100644
> --- a/src/acpica/source/components/executer/exmisc.c
> +++ b/src/acpica/source/components/executer/exmisc.c
> @@ -347,7 +347,7 @@ AcpiExDoLogicalNumericOp (
>
> switch (Opcode)
> {
> - case AML_LAND_OP: /* LAnd (Integer0, Integer1) */
> + case AML_LOGICAL_AND_OP: /* LAnd (Integer0, Integer1) */
>
> if (Integer0 && Integer1)
> {
> @@ -355,7 +355,7 @@ AcpiExDoLogicalNumericOp (
> }
> break;
>
> - case AML_LOR_OP: /* LOr (Integer0, Integer1) */
> + case AML_LOGICAL_OR_OP: /* LOr (Integer0, Integer1) */
>
> if (Integer0 || Integer1)
> {
> @@ -473,7 +473,7 @@ AcpiExDoLogicalOp (
>
> switch (Opcode)
> {
> - case AML_LEQUAL_OP: /* LEqual (Operand0, Operand1) */
> + case AML_LOGICAL_EQUAL_OP: /* LEqual (Operand0, Operand1) */
>
> if (Integer0 == Integer1)
> {
> @@ -481,7 +481,7 @@ AcpiExDoLogicalOp (
> }
> break;
>
> - case AML_LGREATER_OP: /* LGreater (Operand0, Operand1) */
> + case AML_LOGICAL_GREATER_OP: /* LGreater (Operand0, Operand1) */
>
> if (Integer0 > Integer1)
> {
> @@ -489,7 +489,7 @@ AcpiExDoLogicalOp (
> }
> break;
>
> - case AML_LLESS_OP: /* LLess (Operand0, Operand1) */
> + case AML_LOGICAL_LESS_OP: /* LLess (Operand0, Operand1) */
>
> if (Integer0 < Integer1)
> {
> @@ -522,7 +522,7 @@ AcpiExDoLogicalOp (
>
> switch (Opcode)
> {
> - case AML_LEQUAL_OP: /* LEqual (Operand0, Operand1) */
> + case AML_LOGICAL_EQUAL_OP: /* LEqual (Operand0, Operand1) */
>
> /* Length and all bytes must be equal */
>
> @@ -535,7 +535,7 @@ AcpiExDoLogicalOp (
> }
> break;
>
> - case AML_LGREATER_OP: /* LGreater (Operand0, Operand1) */
> + case AML_LOGICAL_GREATER_OP: /* LGreater (Operand0, Operand1) */
>
> if (Compare > 0)
> {
> @@ -555,7 +555,7 @@ AcpiExDoLogicalOp (
> }
> break;
>
> - case AML_LLESS_OP: /* LLess (Operand0, Operand1) */
> + case AML_LOGICAL_LESS_OP: /* LLess (Operand0, Operand1) */
>
> if (Compare > 0)
> {
> diff --git a/src/acpica/source/components/executer/exnames.c b/src/acpica/source/components/executer/exnames.c
> index 705862b..9d33b0b 100644
> --- a/src/acpica/source/components/executer/exnames.c
> +++ b/src/acpica/source/components/executer/exnames.c
> @@ -213,7 +213,7 @@ AcpiExAllocateNameString (
> {
> /* Set up multi prefixes */
>
> - *TempPtr++ = AML_MULTI_NAME_PREFIX_OP;
> + *TempPtr++ = AML_MULTI_NAME_PREFIX;
> *TempPtr++ = (char) NumNameSegs;
> }
> else if (2 == NumNameSegs)
> @@ -457,7 +457,7 @@ AcpiExGetNameString (
> }
> break;
>
> - case AML_MULTI_NAME_PREFIX_OP:
> + case AML_MULTI_NAME_PREFIX:
>
> ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "MultiNamePrefix at %p\n",
> AmlAddress));
> diff --git a/src/acpica/source/components/executer/exoparg1.c b/src/acpica/source/components/executer/exoparg1.c
> index 800be70..cbe2eb4 100644
> --- a/src/acpica/source/components/executer/exoparg1.c
> +++ b/src/acpica/source/components/executer/exoparg1.c
> @@ -376,7 +376,7 @@ AcpiExOpcode_1A_1T_1R (
> case AML_FIND_SET_RIGHT_BIT_OP:
> case AML_FROM_BCD_OP:
> case AML_TO_BCD_OP:
> - case AML_COND_REF_OF_OP:
> + case AML_CONDITIONAL_REF_OF_OP:
>
> /* Create a return object of type Integer for these opcodes */
>
> @@ -507,7 +507,7 @@ AcpiExOpcode_1A_1T_1R (
> }
> break;
>
> - case AML_COND_REF_OF_OP: /* CondRefOf (SourceObject, Result) */
> + case AML_CONDITIONAL_REF_OF_OP: /* CondRefOf (SourceObject, Result) */
> /*
> * This op is a little strange because the internal return value is
> * different than the return value stored in the result descriptor
> @@ -579,13 +579,13 @@ AcpiExOpcode_1A_1T_1R (
> /*
> * ACPI 2.0 Opcodes
> */
> - case AML_COPY_OP: /* Copy (Source, Target) */
> + case AML_COPY_OBJECT_OP: /* CopyObject (Source, Target) */
>
> Status = AcpiUtCopyIobjectToIobject (
> Operand[0], &ReturnDesc, WalkState);
> break;
>
> - case AML_TO_DECSTRING_OP: /* ToDecimalString (Data, Result) */
> + case AML_TO_DECIMAL_STRING_OP: /* ToDecimalString (Data, Result) */
>
> Status = AcpiExConvertToString (
> Operand[0], &ReturnDesc, ACPI_EXPLICIT_CONVERT_DECIMAL);
> @@ -597,7 +597,7 @@ AcpiExOpcode_1A_1T_1R (
> }
> break;
>
> - case AML_TO_HEXSTRING_OP: /* ToHexString (Data, Result) */
> + case AML_TO_HEX_STRING_OP: /* ToHexString (Data, Result) */
>
> Status = AcpiExConvertToString (
> Operand[0], &ReturnDesc, ACPI_EXPLICIT_CONVERT_HEX);
> @@ -712,7 +712,7 @@ AcpiExOpcode_1A_0T_1R (
>
> switch (WalkState->Opcode)
> {
> - case AML_LNOT_OP: /* LNot (Operand) */
> + case AML_LOGICAL_NOT_OP: /* LNot (Operand) */
>
> ReturnDesc = AcpiUtCreateIntegerObject ((UINT64) 0);
> if (!ReturnDesc)
> @@ -763,7 +763,8 @@ AcpiExOpcode_1A_0T_1R (
> * NOTE: We use LNOT_OP here in order to force resolution of the
> * reference operand to an actual integer.
> */
> - Status = AcpiExResolveOperands (AML_LNOT_OP, &TempDesc, WalkState);
> + Status = AcpiExResolveOperands (AML_LOGICAL_NOT_OP,
> + &TempDesc, WalkState);
> if (ACPI_FAILURE (Status))
> {
> ACPI_EXCEPTION ((AE_INFO, Status,
> diff --git a/src/acpica/source/components/executer/exoparg2.c b/src/acpica/source/components/executer/exoparg2.c
> index 2daf8c1..b3806cc 100644
> --- a/src/acpica/source/components/executer/exoparg2.c
> +++ b/src/acpica/source/components/executer/exoparg2.c
> @@ -402,7 +402,7 @@ AcpiExOpcode_2A_1T_1R (
> &ReturnDesc->Integer.Value);
> break;
>
> - case AML_CONCAT_OP: /* Concatenate (Data1, Data2, Result) */
> + case AML_CONCATENATE_OP: /* Concatenate (Data1, Data2, Result) */
>
> Status = AcpiExDoConcatenate (
> Operand[0], Operand[1], &ReturnDesc, WalkState);
> @@ -448,7 +448,7 @@ AcpiExOpcode_2A_1T_1R (
> Operand[0]->Buffer.Pointer, Length);
> break;
>
> - case AML_CONCAT_RES_OP:
> + case AML_CONCATENATE_TEMPLATE_OP:
>
> /* ConcatenateResTemplate (Buffer, Buffer, Result) (ACPI 2.0) */
>
> diff --git a/src/acpica/source/components/executer/exoparg6.c b/src/acpica/source/components/executer/exoparg6.c
> index 4f9f99b..816b197 100644
> --- a/src/acpica/source/components/executer/exoparg6.c
> +++ b/src/acpica/source/components/executer/exoparg6.c
> @@ -206,7 +206,7 @@ AcpiExDoMatch (
> * Change to: (M == P[i])
> */
> Status = AcpiExDoLogicalOp (
> - AML_LEQUAL_OP, MatchObj, PackageObj, &LogicalResult);
> + AML_LOGICAL_EQUAL_OP, MatchObj, PackageObj, &LogicalResult);
> if (ACPI_FAILURE (Status))
> {
> return (FALSE);
> @@ -219,7 +219,7 @@ AcpiExDoMatch (
> * Change to: (M >= P[i]) (M NotLess than P[i])
> */
> Status = AcpiExDoLogicalOp (
> - AML_LLESS_OP, MatchObj, PackageObj, &LogicalResult);
> + AML_LOGICAL_LESS_OP, MatchObj, PackageObj, &LogicalResult);
> if (ACPI_FAILURE (Status))
> {
> return (FALSE);
> @@ -233,7 +233,7 @@ AcpiExDoMatch (
> * Change to: (M > P[i])
> */
> Status = AcpiExDoLogicalOp (
> - AML_LGREATER_OP, MatchObj, PackageObj, &LogicalResult);
> + AML_LOGICAL_GREATER_OP, MatchObj, PackageObj, &LogicalResult);
> if (ACPI_FAILURE (Status))
> {
> return (FALSE);
> @@ -246,7 +246,7 @@ AcpiExDoMatch (
> * Change to: (M <= P[i]) (M NotGreater than P[i])
> */
> Status = AcpiExDoLogicalOp (
> - AML_LGREATER_OP, MatchObj, PackageObj, &LogicalResult);
> + AML_LOGICAL_GREATER_OP, MatchObj, PackageObj, &LogicalResult);
> if (ACPI_FAILURE (Status))
> {
> return (FALSE);
> @@ -260,7 +260,7 @@ AcpiExDoMatch (
> * Change to: (M < P[i])
> */
> Status = AcpiExDoLogicalOp (
> - AML_LLESS_OP, MatchObj, PackageObj, &LogicalResult);
> + AML_LOGICAL_LESS_OP, MatchObj, PackageObj, &LogicalResult);
> if (ACPI_FAILURE (Status))
> {
> return (FALSE);
> diff --git a/src/acpica/source/components/executer/exresolv.c b/src/acpica/source/components/executer/exresolv.c
> index 758c286..f51fc8c 100644
> --- a/src/acpica/source/components/executer/exresolv.c
> +++ b/src/acpica/source/components/executer/exresolv.c
> @@ -282,7 +282,7 @@ AcpiExResolveObjectToValue (
> /* If method call or CopyObject - do not dereference */
>
> if ((WalkState->Opcode == AML_INT_METHODCALL_OP) ||
> - (WalkState->Opcode == AML_COPY_OP))
> + (WalkState->Opcode == AML_COPY_OBJECT_OP))
> {
> break;
> }
> diff --git a/src/acpica/source/components/executer/exstore.c b/src/acpica/source/components/executer/exstore.c
> index 76f6629..884342d 100644
> --- a/src/acpica/source/components/executer/exstore.c
> +++ b/src/acpica/source/components/executer/exstore.c
> @@ -507,7 +507,7 @@ AcpiExStoreObjectToNode (
>
> /* Only limited target types possible for everything except CopyObject */
>
> - if (WalkState->Opcode != AML_COPY_OP)
> + if (WalkState->Opcode != AML_COPY_OBJECT_OP)
> {
> /*
> * Only CopyObject allows all object types to be overwritten. For
> @@ -593,7 +593,7 @@ AcpiExStoreObjectToNode (
> case ACPI_TYPE_STRING:
> case ACPI_TYPE_BUFFER:
>
> - if ((WalkState->Opcode == AML_COPY_OP) ||
> + if ((WalkState->Opcode == AML_COPY_OBJECT_OP) ||
> !ImplicitConversion)
> {
> /*
> diff --git a/src/acpica/source/components/executer/exstoren.c b/src/acpica/source/components/executer/exstoren.c
> index 200ef8c..6b4fd33 100644
> --- a/src/acpica/source/components/executer/exstoren.c
> +++ b/src/acpica/source/components/executer/exstoren.c
> @@ -185,7 +185,7 @@ AcpiExResolveObject (
>
> /* For CopyObject, no further validation necessary */
>
> - if (WalkState->Opcode == AML_COPY_OP)
> + if (WalkState->Opcode == AML_COPY_OBJECT_OP)
> {
> break;
> }
> diff --git a/src/acpica/source/components/hardware/hwvalid.c b/src/acpica/source/components/hardware/hwvalid.c
> index 8405468..c1a1063 100644
> --- a/src/acpica/source/components/hardware/hwvalid.c
> +++ b/src/acpica/source/components/hardware/hwvalid.c
> @@ -179,7 +179,7 @@ static const ACPI_PORT_INFO AcpiProtectedPorts[] =
> {"PCI", 0x0CF8, 0x0CFF, ACPI_OSI_WIN_XP}
> };
>
> -#define ACPI_PORT_INFO_ENTRIES ACPI_ARRAY_LENGTH (AcpiProtectedPorts)
> +#define ACPI_PORT_INFO_ENTRIES ACPI_ARRAY_LENGTH (AcpiProtectedPorts)
>
>
> /******************************************************************************
> @@ -209,7 +209,7 @@ AcpiHwValidateIoRequest (
> const ACPI_PORT_INFO *PortInfo;
>
>
> - ACPI_FUNCTION_TRACE (HwValidateIoRequest);
> + ACPI_FUNCTION_NAME (HwValidateIoRequest);
>
>
> /* Supported widths are 8/16/32 */
> @@ -238,14 +238,14 @@ AcpiHwValidateIoRequest (
> ACPI_ERROR ((AE_INFO,
> "Illegal I/O port address/length above 64K: %8.8X%8.8X/0x%X",
> ACPI_FORMAT_UINT64 (Address), ByteWidth));
> - return_ACPI_STATUS (AE_LIMIT);
> + return (AE_LIMIT);
> }
>
> /* Exit if requested address is not within the protected port table */
>
> if (Address > AcpiProtectedPorts[ACPI_PORT_INFO_ENTRIES - 1].End)
> {
> - return_ACPI_STATUS (AE_OK);
> + return (AE_OK);
> }
>
> /* Check request against the list of protected I/O ports */
> @@ -254,7 +254,7 @@ AcpiHwValidateIoRequest (
> {
> /*
> * Check if the requested address range will write to a reserved
> - * port. Four cases to consider:
> + * port. There are four cases to consider:
> *
> * 1) Address range is contained completely in the port address range
> * 2) Address range overlaps port range at the port range start
> @@ -284,7 +284,7 @@ AcpiHwValidateIoRequest (
> }
> }
>
> - return_ACPI_STATUS (AE_OK);
> + return (AE_OK);
> }
>
>
> @@ -293,7 +293,7 @@ AcpiHwValidateIoRequest (
> * FUNCTION: AcpiHwReadPort
> *
> * PARAMETERS: Address Address of I/O port/register to read
> - * Value Where value is placed
> + * Value Where value (data) is returned
> * Width Number of bits
> *
> * RETURN: Status and value read from port
> @@ -339,7 +339,7 @@ AcpiHwReadPort (
> /*
> * There has been a protection violation within the request. Fall
> * back to byte granularity port I/O and ignore the failing bytes.
> - * This provides Windows compatibility.
> + * This provides compatibility with other ACPI implementations.
> */
> for (i = 0, *Value = 0; i < Width; i += 8)
> {
> @@ -413,7 +413,7 @@ AcpiHwWritePort (
> /*
> * There has been a protection violation within the request. Fall
> * back to byte granularity port I/O and ignore the failing bytes.
> - * This provides Windows compatibility.
> + * This provides compatibility with other ACPI implementations.
> */
> for (i = 0; i < Width; i += 8)
> {
> diff --git a/src/acpica/source/components/namespace/nsaccess.c b/src/acpica/source/components/namespace/nsaccess.c
> index 949e7bd..8463cc3 100644
> --- a/src/acpica/source/components/namespace/nsaccess.c
> +++ b/src/acpica/source/components/namespace/nsaccess.c
> @@ -577,7 +577,7 @@ AcpiNsLookup (
> "Dual Pathname (2 segments, Flags=%X)\n", Flags));
> break;
>
> - case AML_MULTI_NAME_PREFIX_OP:
> + case AML_MULTI_NAME_PREFIX:
>
> /* More than one NameSeg, search rules do not apply */
>
> diff --git a/src/acpica/source/components/namespace/nsrepair.c b/src/acpica/source/components/namespace/nsrepair.c
> index 14f4095..4b0c59b 100644
> --- a/src/acpica/source/components/namespace/nsrepair.c
> +++ b/src/acpica/source/components/namespace/nsrepair.c
> @@ -374,24 +374,12 @@ ObjectRepaired:
>
> if (PackageIndex != ACPI_NOT_PACKAGE_ELEMENT)
> {
> - /*
> - * The original object is a package element. We need to
> - * decrement the reference count of the original object,
> - * for removing it from the package.
> - *
> - * However, if the original object was just wrapped with a
> - * package object as part of the repair, we don't need to
> - * change the reference count.
> - */
> + /* Update reference count of new object */
> +
> if (!(Info->ReturnFlags & ACPI_OBJECT_WRAPPED))
> {
> NewObject->Common.ReferenceCount =
> ReturnObject->Common.ReferenceCount;
> -
> - if (ReturnObject->Common.ReferenceCount > 1)
> - {
> - ReturnObject->Common.ReferenceCount--;
> - }
> }
>
> ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR,
> diff --git a/src/acpica/source/components/namespace/nsrepair2.c b/src/acpica/source/components/namespace/nsrepair2.c
> index 2e36b89..241a4b0 100644
> --- a/src/acpica/source/components/namespace/nsrepair2.c
> +++ b/src/acpica/source/components/namespace/nsrepair2.c
> @@ -520,16 +520,12 @@ AcpiNsRepair_CID (
> return (Status);
> }
>
> - /* Take care with reference counts */
> -
> if (OriginalElement != *ElementPtr)
> {
> - /* Element was replaced */
> + /* Update reference count of new object */
>
> (*ElementPtr)->Common.ReferenceCount =
> OriginalRefCount;
> -
> - AcpiUtRemoveReference (OriginalElement);
> }
>
> ElementPtr++;
> diff --git a/src/acpica/source/components/namespace/nsutils.c b/src/acpica/source/components/namespace/nsutils.c
> index 601bc2e..5bdcc63 100644
> --- a/src/acpica/source/components/namespace/nsutils.c
> +++ b/src/acpica/source/components/namespace/nsutils.c
> @@ -366,7 +366,7 @@ AcpiNsBuildInternalName (
> }
> else
> {
> - InternalName[1] = AML_MULTI_NAME_PREFIX_OP;
> + InternalName[1] = AML_MULTI_NAME_PREFIX;
> InternalName[2] = (char) NumSegments;
> Result = &InternalName[3];
> }
> @@ -397,7 +397,7 @@ AcpiNsBuildInternalName (
> }
> else
> {
> - InternalName[i] = AML_MULTI_NAME_PREFIX_OP;
> + InternalName[i] = AML_MULTI_NAME_PREFIX;
> InternalName[(ACPI_SIZE) i+1] = (char) NumSegments;
> Result = &InternalName[(ACPI_SIZE) i+2];
> }
> @@ -606,7 +606,7 @@ AcpiNsExternalizeName (
> {
> switch (InternalName[PrefixLength])
> {
> - case AML_MULTI_NAME_PREFIX_OP:
> + case AML_MULTI_NAME_PREFIX:
>
> /* <count> 4-byte names */
>
> @@ -766,28 +766,23 @@ AcpiNsTerminate (
> void)
> {
> ACPI_STATUS Status;
> + ACPI_OPERAND_OBJECT *Prev;
> + ACPI_OPERAND_OBJECT *Next;
>
>
> ACPI_FUNCTION_TRACE (NsTerminate);
>
>
> -#ifdef ACPI_EXEC_APP
> - {
> - ACPI_OPERAND_OBJECT *Prev;
> - ACPI_OPERAND_OBJECT *Next;
> -
> - /* Delete any module-level code blocks */
> + /* Delete any module-level code blocks */
>
> - Next = AcpiGbl_ModuleCodeList;
> - while (Next)
> - {
> - Prev = Next;
> - Next = Next->Method.Mutex;
> - Prev->Method.Mutex = NULL; /* Clear the Mutex (cheated) field */
> - AcpiUtRemoveReference (Prev);
> - }
> + Next = AcpiGbl_ModuleCodeList;
> + while (Next)
> + {
> + Prev = Next;
> + Next = Next->Method.Mutex;
> + Prev->Method.Mutex = NULL; /* Clear the Mutex (cheated) field */
> + AcpiUtRemoveReference (Prev);
> }
> -#endif
>
> /*
> * Free the entire namespace -- all nodes and all objects
> diff --git a/src/acpica/source/components/parser/psargs.c b/src/acpica/source/components/parser/psargs.c
> index df7f6d2..7e893f7 100644
> --- a/src/acpica/source/components/parser/psargs.c
> +++ b/src/acpica/source/components/parser/psargs.c
> @@ -119,6 +119,7 @@
> #include "amlcode.h"
> #include "acnamesp.h"
> #include "acdispat.h"
> +#include "acconvert.h"
>
> #define _COMPONENT ACPI_PARSER
> ACPI_MODULE_NAME ("psargs")
> @@ -280,7 +281,7 @@ AcpiPsGetNextNamestring (
> End += 1 + (2 * ACPI_NAME_SIZE);
> break;
>
> - case AML_MULTI_NAME_PREFIX_OP:
> + case AML_MULTI_NAME_PREFIX:
>
> /* Multiple name segments, 4 chars each, count in next byte */
>
> @@ -441,7 +442,7 @@ AcpiPsGetNextNamepath (
>
> /* 2) NotFound during a CondRefOf(x) is ok by definition */
>
> - else if (WalkState->Op->Common.AmlOpcode == AML_COND_REF_OF_OP)
> + else if (WalkState->Op->Common.AmlOpcode == AML_CONDITIONAL_REF_OF_OP)
> {
> Status = AE_OK;
> }
> @@ -453,7 +454,7 @@ AcpiPsGetNextNamepath (
> */
> else if ((Arg->Common.Parent) &&
> ((Arg->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) ||
> - (Arg->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP)))
> + (Arg->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP)))
> {
> Status = AE_OK;
> }
> @@ -615,6 +616,7 @@ AcpiPsGetNextField (
> ACPI_FUNCTION_TRACE (PsGetNextField);
>
>
> + ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState);
> Aml = ParserState->Aml;
>
> /* Determine field type */
> @@ -661,6 +663,7 @@ AcpiPsGetNextField (
>
> /* Decode the field type */
>
> + ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState);
> switch (Opcode)
> {
> case AML_INT_NAMEDFIELD_OP:
> @@ -671,6 +674,23 @@ AcpiPsGetNextField (
> AcpiPsSetName (Field, Name);
> ParserState->Aml += ACPI_NAME_SIZE;
>
> +
> + ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState);
> +
> +#ifdef ACPI_ASL_COMPILER
> + /*
> + * Because the package length isn't represented as a parse tree object,
> + * take comments surrounding this and add to the previously created
> + * parse node.
> + */
> + if (Field->Common.InlineComment)
> + {
> + Field->Common.NameComment = Field->Common.InlineComment;
> + }
> + Field->Common.InlineComment = AcpiGbl_CurrentInlineComment;
> + AcpiGbl_CurrentInlineComment = NULL;
> +#endif
> +
> /* Get the length which is encoded as a package length */
>
> Field->Common.Value.Size = AcpiPsGetNextPackageLength (ParserState);
> @@ -727,10 +747,12 @@ AcpiPsGetNextField (
> {
> ParserState->Aml++;
>
> + ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState);
> PkgEnd = ParserState->Aml;
> PkgLength = AcpiPsGetNextPackageLength (ParserState);
> PkgEnd += PkgLength;
>
> + ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState);
> if (ParserState->Aml < PkgEnd)
> {
> /* Non-empty list */
> @@ -747,6 +769,7 @@ AcpiPsGetNextField (
> Opcode = ACPI_GET8 (ParserState->Aml);
> ParserState->Aml++;
>
> + ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState);
> switch (Opcode)
> {
> case AML_BYTE_OP: /* AML_BYTEDATA_ARG */
> @@ -775,6 +798,7 @@ AcpiPsGetNextField (
>
> /* Fill in bytelist data */
>
> + ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState);
> Arg->Named.Value.Size = BufferLength;
> Arg->Named.Data = ParserState->Aml;
> }
> diff --git a/src/acpica/source/components/parser/psloop.c b/src/acpica/source/components/parser/psloop.c
> index 4f51573..de55004 100644
> --- a/src/acpica/source/components/parser/psloop.c
> +++ b/src/acpica/source/components/parser/psloop.c
> @@ -127,6 +127,7 @@
> #include "acparser.h"
> #include "acdispat.h"
> #include "amlcode.h"
> +#include "acconvert.h"
>
> #define _COMPONENT ACPI_PARSER
> ACPI_MODULE_NAME ("psloop")
> @@ -214,6 +215,22 @@ AcpiPsGetArguments (
> {
> WalkState->Aml = WalkState->ParserState.Aml;
>
> + switch (Op->Common.AmlOpcode)
> + {
> + case AML_METHOD_OP:
> + case AML_BUFFER_OP:
> + case AML_PACKAGE_OP:
> + case AML_VARIABLE_PACKAGE_OP:
> + case AML_WHILE_OP:
> +
> + break;
> +
> + default:
> +
> + ASL_CV_CAPTURE_COMMENTS (WalkState);
> + break;
> + }
> +
> Status = AcpiPsGetNextArg (WalkState, &(WalkState->ParserState),
> GET_CURRENT_ARG_TYPE (WalkState->ArgTypes), &Arg);
> if (ACPI_FAILURE (Status))
> @@ -321,7 +338,7 @@ AcpiPsGetArguments (
>
> case AML_BUFFER_OP:
> case AML_PACKAGE_OP:
> - case AML_VAR_PACKAGE_OP:
> + case AML_VARIABLE_PACKAGE_OP:
>
> if ((Op->Common.Parent) &&
> (Op->Common.Parent->Common.AmlOpcode == AML_NAME_OP) &&
> @@ -559,6 +576,8 @@ AcpiPsParseLoop (
>
> while ((ParserState->Aml < ParserState->AmlEnd) || (Op))
> {
> + ASL_CV_CAPTURE_COMMENTS (WalkState);
> +
> AmlOpStart = ParserState->Aml;
> if (!Op)
> {
> @@ -592,12 +611,26 @@ AcpiPsParseLoop (
> AcpiExStartTraceOpcode (Op, WalkState);
> }
>
> -
> /*
> * Start ArgCount at zero because we don't know if there are
> * any args yet
> */
> - WalkState->ArgCount = 0;
> + WalkState->ArgCount = 0;
> +
> + switch (Op->Common.AmlOpcode)
> + {
> + case AML_BYTE_OP:
> + case AML_WORD_OP:
> + case AML_DWORD_OP:
> + case AML_QWORD_OP:
> +
> + break;
> +
> + default:
> +
> + ASL_CV_CAPTURE_COMMENTS (WalkState);
> + break;
> + }
>
> /* Are there any arguments that must be processed? */
>
> diff --git a/src/acpica/source/components/parser/psobject.c b/src/acpica/source/components/parser/psobject.c
> index 49f11f3..7d54dca 100644
> --- a/src/acpica/source/components/parser/psobject.c
> +++ b/src/acpica/source/components/parser/psobject.c
> @@ -117,6 +117,7 @@
> #include "accommon.h"
> #include "acparser.h"
> #include "amlcode.h"
> +#include "acconvert.h"
>
> #define _COMPONENT ACPI_PARSER
> ACPI_MODULE_NAME ("psobject")
> @@ -273,6 +274,7 @@ AcpiPsBuildNamedOp (
> while (GET_CURRENT_ARG_TYPE (WalkState->ArgTypes) &&
> (GET_CURRENT_ARG_TYPE (WalkState->ArgTypes) != ARGP_NAME))
> {
> + ASL_CV_CAPTURE_COMMENTS (WalkState);
> Status = AcpiPsGetNextArg (WalkState, &(WalkState->ParserState),
> GET_CURRENT_ARG_TYPE (WalkState->ArgTypes), &Arg);
> if (ACPI_FAILURE (Status))
> @@ -284,6 +286,18 @@ AcpiPsBuildNamedOp (
> INCREMENT_ARG_LIST (WalkState->ArgTypes);
> }
>
> + /* are there any inline comments associated with the NameSeg?? If so, save this. */
> +
> + ASL_CV_CAPTURE_COMMENTS (WalkState);
> +
> +#ifdef ACPI_ASL_COMPILER
> + if (AcpiGbl_CurrentInlineComment != NULL)
> + {
> + UnnamedOp->Common.NameComment = AcpiGbl_CurrentInlineComment;
> + AcpiGbl_CurrentInlineComment = NULL;
> + }
> +#endif
> +
> /*
> * Make sure that we found a NAME and didn't run out of arguments
> */
> @@ -329,6 +343,28 @@ AcpiPsBuildNamedOp (
>
> AcpiPsAppendArg (*Op, UnnamedOp->Common.Value.Arg);
>
> +#ifdef ACPI_ASL_COMPILER
> +
> + /* save any comments that might be associated with UnnamedOp. */
> +
> + (*Op)->Common.InlineComment = UnnamedOp->Common.InlineComment;
> + (*Op)->Common.EndNodeComment = UnnamedOp->Common.EndNodeComment;
> + (*Op)->Common.CloseBraceComment = UnnamedOp->Common.CloseBraceComment;
> + (*Op)->Common.NameComment = UnnamedOp->Common.NameComment;
> + (*Op)->Common.CommentList = UnnamedOp->Common.CommentList;
> + (*Op)->Common.EndBlkComment = UnnamedOp->Common.EndBlkComment;
> + (*Op)->Common.CvFilename = UnnamedOp->Common.CvFilename;
> + (*Op)->Common.CvParentFilename = UnnamedOp->Common.CvParentFilename;
> + (*Op)->Named.Aml = UnnamedOp->Common.Aml;
> +
> + UnnamedOp->Common.InlineComment = NULL;
> + UnnamedOp->Common.EndNodeComment = NULL;
> + UnnamedOp->Common.CloseBraceComment = NULL;
> + UnnamedOp->Common.NameComment = NULL;
> + UnnamedOp->Common.CommentList = NULL;
> + UnnamedOp->Common.EndBlkComment = NULL;
> +#endif
> +
> if ((*Op)->Common.AmlOpcode == AML_REGION_OP ||
> (*Op)->Common.AmlOpcode == AML_DATA_REGION_OP)
> {
> diff --git a/src/acpica/source/components/parser/psopcode.c b/src/acpica/source/components/parser/psopcode.c
> index f7176a7..95988fb 100644
> --- a/src/acpica/source/components/parser/psopcode.c
> +++ b/src/acpica/source/components/parser/psopcode.c
> @@ -144,7 +144,7 @@
> AML_DEVICE_OP
> AML_THERMAL_ZONE_OP
> AML_METHOD_OP
> - AML_POWER_RES_OP
> + AML_POWER_RESOURCE_OP
> AML_PROCESSOR_OP
> AML_FIELD_OP
> AML_INDEX_FIELD_OP
> @@ -170,7 +170,7 @@
> AML_DEVICE_OP
> AML_THERMAL_ZONE_OP
> AML_METHOD_OP
> - AML_POWER_RES_OP
> + AML_POWER_RESOURCE_OP
> AML_PROCESSOR_OP
> AML_FIELD_OP
> AML_INDEX_FIELD_OP
> @@ -188,7 +188,7 @@
> AML_DEVICE_OP
> AML_THERMAL_ZONE_OP
> AML_METHOD_OP
> - AML_POWER_RES_OP
> + AML_POWER_RESOURCE_OP
> AML_PROCESSOR_OP
> AML_NAME_OP
> AML_ALIAS_OP
> @@ -211,7 +211,7 @@
> AML_DEVICE_OP
> AML_THERMAL_ZONE_OP
> AML_METHOD_OP
> - AML_POWER_RES_OP
> + AML_POWER_RESOURCE_OP
> AML_PROCESSOR_OP
> AML_NAME_OP
> AML_ALIAS_OP
> @@ -224,7 +224,7 @@
> must be deferred until needed
>
> AML_METHOD_OP
> - AML_VAR_PACKAGE_OP
> + AML_VARIABLE_PACKAGE_OP
> AML_CREATE_FIELD_OP
> AML_CREATE_BIT_FIELD_OP
> AML_CREATE_BYTE_FIELD_OP
> @@ -409,7 +409,8 @@ const ACPI_OPCODE_INFO AcpiGbl_AmlOpInfo[AML_NUM_OPCODES] =
>
> /* ACPI 6.0 opcodes */
>
> -/* 81 */ ACPI_OP ("External", ARGP_EXTERNAL_OP, ARGI_EXTERNAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE,/* ? */ AML_TYPE_EXEC_3A_0T_0R, AML_FLAGS_EXEC_3A_0T_0R)
> +/* 81 */ ACPI_OP ("External", ARGP_EXTERNAL_OP, ARGI_EXTERNAL_OP, ACPI_TYPE_ANY, AML_CLASS_EXECUTE,/* ? */ AML_TYPE_EXEC_3A_0T_0R, AML_FLAGS_EXEC_3A_0T_0R),
> +/* 82 */ ACPI_OP ("Comment", ARGP_COMMENT_OP, ARGI_COMMENT_OP, ACPI_TYPE_STRING, AML_CLASS_ARGUMENT, AML_TYPE_LITERAL, AML_CONSTANT)
>
> /*! [End] no source code translation !*/
> };
> diff --git a/src/acpica/source/components/parser/psopinfo.c b/src/acpica/source/components/parser/psopinfo.c
> index 5245351..e04649b 100644
> --- a/src/acpica/source/components/parser/psopinfo.c
> +++ b/src/acpica/source/components/parser/psopinfo.c
> @@ -314,7 +314,7 @@ const UINT8 AcpiGbl_ShortOpIndex[256] =
> /* 0x90 */ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x73, 0x74,
> /* 0x98 */ 0x75, 0x76, _UNK, _UNK, 0x77, 0x78, 0x79, 0x7A,
> /* 0xA0 */ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x60, 0x61,
> -/* 0xA8 */ 0x62, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
> +/* 0xA8 */ 0x62, 0x82, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
> /* 0xB0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
> /* 0xB8 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
> /* 0xC0 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
> diff --git a/src/acpica/source/components/parser/psparse.c b/src/acpica/source/components/parser/psparse.c
> index ba92d3e..f0385e0 100644
> --- a/src/acpica/source/components/parser/psparse.c
> +++ b/src/acpica/source/components/parser/psparse.c
> @@ -186,7 +186,7 @@ AcpiPsPeekOpcode (
> Aml = ParserState->Aml;
> Opcode = (UINT16) ACPI_GET8 (Aml);
>
> - if (Opcode == AML_EXTENDED_OP_PREFIX)
> + if (Opcode == AML_EXTENDED_PREFIX)
> {
> /* Extended opcode, get the second opcode byte */
>
> @@ -290,7 +290,7 @@ AcpiPsCompleteThisOp (
> (Op->Common.Parent->Common.AmlOpcode == AML_BUFFER_OP) ||
> (Op->Common.Parent->Common.AmlOpcode == AML_PACKAGE_OP) ||
> (Op->Common.Parent->Common.AmlOpcode == AML_BANK_FIELD_OP) ||
> - (Op->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP))
> + (Op->Common.Parent->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP))
> {
> ReplacementOp = AcpiPsAllocOp (
> AML_INT_RETURN_VALUE_OP, Op->Common.Aml);
> @@ -304,7 +304,7 @@ AcpiPsCompleteThisOp (
> {
> if ((Op->Common.AmlOpcode == AML_BUFFER_OP) ||
> (Op->Common.AmlOpcode == AML_PACKAGE_OP) ||
> - (Op->Common.AmlOpcode == AML_VAR_PACKAGE_OP))
> + (Op->Common.AmlOpcode == AML_VARIABLE_PACKAGE_OP))
> {
> ReplacementOp = AcpiPsAllocOp (Op->Common.AmlOpcode,
> Op->Common.Aml);
> diff --git a/src/acpica/source/components/parser/pstree.c b/src/acpica/source/components/parser/pstree.c
> index d987d65..2334a7d 100644
> --- a/src/acpica/source/components/parser/pstree.c
> +++ b/src/acpica/source/components/parser/pstree.c
> @@ -117,6 +117,7 @@
> #include "accommon.h"
> #include "acparser.h"
> #include "amlcode.h"
> +#include "acconvert.h"
>
> #define _COMPONENT ACPI_PARSER
> ACPI_MODULE_NAME ("pstree")
> @@ -314,6 +315,7 @@ AcpiPsGetDepthNext (
> Next = AcpiPsGetArg (Op, 0);
> if (Next)
> {
> + ASL_CV_LABEL_FILENODE (Next);
> return (Next);
> }
>
> @@ -322,6 +324,7 @@ AcpiPsGetDepthNext (
> Next = Op->Common.Next;
> if (Next)
> {
> + ASL_CV_LABEL_FILENODE (Next);
> return (Next);
> }
>
> @@ -334,6 +337,8 @@ AcpiPsGetDepthNext (
> Arg = AcpiPsGetArg (Parent, 0);
> while (Arg && (Arg != Origin) && (Arg != Op))
> {
> +
> + ASL_CV_LABEL_FILENODE (Arg);
> Arg = Arg->Common.Next;
> }
>
> @@ -348,6 +353,7 @@ AcpiPsGetDepthNext (
> {
> /* Found sibling of parent */
>
> + ASL_CV_LABEL_FILENODE (Parent->Common.Next);
> return (Parent->Common.Next);
> }
>
> @@ -355,6 +361,7 @@ AcpiPsGetDepthNext (
> Parent = Parent->Common.Parent;
> }
>
> + ASL_CV_LABEL_FILENODE (Next);
> return (Next);
> }
>
> @@ -403,7 +410,7 @@ AcpiPsGetChild (
> Child = AcpiPsGetArg (Op, 1);
> break;
>
> - case AML_POWER_RES_OP:
> + case AML_POWER_RESOURCE_OP:
> case AML_INDEX_FIELD_OP:
>
> Child = AcpiPsGetArg (Op, 2);
> diff --git a/src/acpica/source/components/parser/psutils.c b/src/acpica/source/components/parser/psutils.c
> index 5eec90b..fc9005a 100644
> --- a/src/acpica/source/components/parser/psutils.c
> +++ b/src/acpica/source/components/parser/psutils.c
> @@ -117,6 +117,7 @@
> #include "accommon.h"
> #include "acparser.h"
> #include "amlcode.h"
> +#include "acconvert.h"
>
> #define _COMPONENT ACPI_PARSER
> ACPI_MODULE_NAME ("psutils")
> @@ -249,6 +250,17 @@ AcpiPsAllocOp (
> AcpiPsInitOp (Op, Opcode);
> Op->Common.Aml = Aml;
> Op->Common.Flags = Flags;
> + ASL_CV_CLEAR_OP_COMMENTS(Op);
> +
> + if (Opcode == AML_SCOPE_OP)
> + {
> + AcpiGbl_CurrentScope = Op;
> + }
> + }
> +
> + if (Gbl_CaptureComments)
> + {
> + ASL_CV_TRANSFER_COMMENTS (Op);
> }
>
> return (Op);
> @@ -275,6 +287,7 @@ AcpiPsFreeOp (
> ACPI_FUNCTION_NAME (PsFreeOp);
>
>
> + ASL_CV_CLEAR_OP_COMMENTS(Op);
> if (Op->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP)
> {
> ACPI_DEBUG_PRINT ((ACPI_DB_ALLOCATIONS,
> diff --git a/src/acpica/source/components/utilities/utalloc.c b/src/acpica/source/components/utilities/utalloc.c
> index ce194d4..4d035eb 100644
> --- a/src/acpica/source/components/utilities/utalloc.c
> +++ b/src/acpica/source/components/utilities/utalloc.c
> @@ -216,6 +216,40 @@ AcpiUtCreateCaches (
> return (Status);
> }
>
> +#ifdef ACPI_ASL_COMPILER
> + /*
> + * For use with the ASL-/ASL+ option. This cache keeps track of regular
> + * 0xA9 0x01 comments.
> + */
> + Status = AcpiOsCreateCache ("Acpi-Comment", sizeof (ACPI_COMMENT_NODE),
> + ACPI_MAX_COMMENT_CACHE_DEPTH, &AcpiGbl_RegCommentCache);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + /*
> + * This cache keeps track of the starting addresses of where the comments
> + * lie. This helps prevent duplication of comments.
> + */
> + Status = AcpiOsCreateCache ("Acpi-Comment-Addr", sizeof (ACPI_COMMENT_ADDR_NODE),
> + ACPI_MAX_COMMENT_CACHE_DEPTH, &AcpiGbl_CommentAddrCache);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> + /*
> + * This cache will be used for nodes that represent files.
> + */
> + Status = AcpiOsCreateCache ("Acpi-File", sizeof (ACPI_FILE_NODE),
> + ACPI_MAX_COMMENT_CACHE_DEPTH, &AcpiGbl_FileCache);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +#endif
> +
>
> #ifdef ACPI_DBG_TRACK_ALLOCATIONS
>
> @@ -282,6 +316,16 @@ AcpiUtDeleteCaches (
> (void) AcpiOsDeleteCache (AcpiGbl_PsNodeExtCache);
> AcpiGbl_PsNodeExtCache = NULL;
>
> +#ifdef ACPI_ASL_COMPILER
> + (void) AcpiOsDeleteCache (AcpiGbl_RegCommentCache);
> + AcpiGbl_RegCommentCache = NULL;
> +
> + (void) AcpiOsDeleteCache (AcpiGbl_CommentAddrCache);
> + AcpiGbl_CommentAddrCache = NULL;
> +
> + (void) AcpiOsDeleteCache (AcpiGbl_FileCache);
> + AcpiGbl_FileCache = NULL;
> +#endif
>
> #ifdef ACPI_DBG_TRACK_ALLOCATIONS
>
> diff --git a/src/acpica/source/components/utilities/utcache.c b/src/acpica/source/components/utilities/utcache.c
> index 93a6c70..e9df612 100644
> --- a/src/acpica/source/components/utilities/utcache.c
> +++ b/src/acpica/source/components/utilities/utcache.c
> @@ -149,7 +149,7 @@ AcpiOsCreateCache (
> ACPI_FUNCTION_ENTRY ();
>
>
> - if (!CacheName || !ReturnCache || (ObjectSize < 16))
> + if (!CacheName || !ReturnCache || !ObjectSize)
> {
> return (AE_BAD_PARAMETER);
> }
> diff --git a/src/acpica/source/components/utilities/utdebug.c b/src/acpica/source/components/utilities/utdebug.c
> index 3faa6b2..c78ae96 100644
> --- a/src/acpica/source/components/utilities/utdebug.c
> +++ b/src/acpica/source/components/utilities/utdebug.c
> @@ -779,4 +779,5 @@ AcpiTracePoint (
>
> ACPI_EXPORT_SYMBOL (AcpiTracePoint)
>
> +
> #endif
> diff --git a/src/acpica/source/components/utilities/utresrc.c b/src/acpica/source/components/utilities/utresrc.c
> index d26b15c..c08e9c7 100644
> --- a/src/acpica/source/components/utilities/utresrc.c
> +++ b/src/acpica/source/components/utilities/utresrc.c
> @@ -598,6 +598,16 @@ AcpiUtWalkAmlResources (
> return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG);
> }
>
> + /*
> + * The EndTag opcode must be followed by a zero byte.
> + * Although this byte is technically defined to be a checksum,
> + * in practice, all ASL compilers set this byte to zero.
> + */
> + if (*(Aml + 1) != 0)
> + {
> + return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG);
> + }
> +
> /* Return the pointer to the EndTag if requested */
>
> if (!UserFunction)
> diff --git a/src/acpica/source/components/utilities/utxferror.c b/src/acpica/source/components/utilities/utxferror.c
> index b660bb0..0ce7195 100644
> --- a/src/acpica/source/components/utilities/utxferror.c
> +++ b/src/acpica/source/components/utilities/utxferror.c
> @@ -173,7 +173,7 @@ ACPI_EXPORT_SYMBOL (AcpiError)
> *
> * PARAMETERS: ModuleName - Caller's module name (for error output)
> * LineNumber - Caller's line number (for error output)
> - * Status - Status to be formatted
> + * Status - Status value to be decoded/formatted
> * Format - Printf format string + additional args
> *
> * RETURN: None
> @@ -224,8 +224,8 @@ ACPI_EXPORT_SYMBOL (AcpiException)
> *
> * FUNCTION: AcpiWarning
> *
> - * PARAMETERS: ModuleName - Caller's module name (for error output)
> - * LineNumber - Caller's line number (for error output)
> + * PARAMETERS: ModuleName - Caller's module name (for warning output)
> + * LineNumber - Caller's line number (for warning output)
> * Format - Printf format string + additional args
> *
> * RETURN: None
> @@ -262,17 +262,13 @@ ACPI_EXPORT_SYMBOL (AcpiWarning)
> *
> * FUNCTION: AcpiInfo
> *
> - * PARAMETERS: ModuleName - Caller's module name (for error output)
> - * LineNumber - Caller's line number (for error output)
> - * Format - Printf format string + additional args
> + * PARAMETERS: Format - Printf format string + additional args
> *
> * RETURN: None
> *
> * DESCRIPTION: Print generic "ACPI:" information message. There is no
> * module/line/version info in order to keep the message simple.
> *
> - * TBD: ModuleName and LineNumber args are not needed, should be removed.
> - *
> ******************************************************************************/
>
> void ACPI_INTERNAL_VAR_XFACE
> @@ -340,8 +336,8 @@ ACPI_EXPORT_SYMBOL (AcpiBiosError)
> *
> * FUNCTION: AcpiBiosWarning
> *
> - * PARAMETERS: ModuleName - Caller's module name (for error output)
> - * LineNumber - Caller's line number (for error output)
> + * PARAMETERS: ModuleName - Caller's module name (for warning output)
> + * LineNumber - Caller's line number (for warning output)
> * Format - Printf format string + additional args
> *
> * RETURN: None
> diff --git a/src/acpica/source/include/acconfig.h b/src/acpica/source/include/acconfig.h
> index cd5533c..7f069f9 100644
> --- a/src/acpica/source/include/acconfig.h
> +++ b/src/acpica/source/include/acconfig.h
> @@ -151,6 +151,7 @@
> #define ACPI_MAX_EXTPARSE_CACHE_DEPTH 96 /* Parse tree objects */
> #define ACPI_MAX_OBJECT_CACHE_DEPTH 96 /* Interpreter operand objects */
> #define ACPI_MAX_NAMESPACE_CACHE_DEPTH 96 /* Namespace objects */
> +#define ACPI_MAX_COMMENT_CACHE_DEPTH 96 /* Comments for the -ca option */
>
> /*
> * Should the subsystem abort the loading of an ACPI table if the
> diff --git a/src/acpica/source/include/acconvert.h b/src/acpica/source/include/acconvert.h
> new file mode 100644
> index 0000000..f7fd873
> --- /dev/null
> +++ b/src/acpica/source/include/acconvert.h
> @@ -0,0 +1,276 @@
> +/******************************************************************************
> + *
> + * Module Name: acapps - common include for ACPI applications/tools
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************/
> +
> +#ifndef _ACCONVERT
> +#define _ACCONVERT
> +
> +/* Definitions for comment state */
> +
> +#define ASL_COMMENT_STANDARD 1
> +#define ASLCOMMENT_INLINE 2
> +#define ASL_COMMENT_OPEN_PAREN 3
> +#define ASL_COMMENT_CLOSE_PAREN 4
> +#define ASL_COMMENT_CLOSE_BRACE 5
> +
> +/* Definitions for comment print function*/
> +
> +#define AML_COMMENT_STANDARD 1
> +#define AMLCOMMENT_INLINE 2
> +#define AML_COMMENT_END_NODE 3
> +#define AML_NAMECOMMENT 4
> +#define AML_COMMENT_CLOSE_BRACE 5
> +#define AML_COMMENT_ENDBLK 6
> +#define AML_COMMENT_INCLUDE 7
> +
> +
> +#ifdef ACPI_ASL_COMPILER
> +/*
> + * cvcompiler
> + */
> +void
> +CvProcessComment (
> + ASL_COMMENT_STATE CurrentState,
> + char *StringBuffer,
> + int c1);
> +
> +void
> +CvProcessCommentType2 (
> + ASL_COMMENT_STATE CurrentState,
> + char *StringBuffer);
> +
> +UINT32
> +CvCalculateCommentLengths(
> + ACPI_PARSE_OBJECT *Op);
> +
> +void
> +CvProcessCommentState (
> + char input);
> +
> +char*
> +CvAppendInlineComment (
> + char *InlineComment,
> + char *ToAdd);
> +
> +void
> +CvAddToCommentList (
> + char* ToAdd);
> +
> +void
> +CvPlaceComment (
> + UINT8 Type,
> + char *CommentString);
> +
> +UINT32
> +CvParseOpBlockType (
> + ACPI_PARSE_OBJECT *Op);
> +
> +ACPI_COMMENT_NODE*
> +CvCommentNodeCalloc (
> + void);
> +
> +void
> +CgWriteAmlDefBlockComment (
> + ACPI_PARSE_OBJECT *Op);
> +
> +void
> +CgWriteOneAmlComment (
> + ACPI_PARSE_OBJECT *Op,
> + char* CommentToPrint,
> + UINT8 InputOption);
> +
> +void
> +CgWriteAmlComment (
> + ACPI_PARSE_OBJECT *Op);
> +
> +
> +/*
> + * cvparser
> + */
> +void
> +CvInitFileTree (
> + ACPI_TABLE_HEADER *Table,
> + UINT8 *AmlStart,
> + UINT32 AmlLength);
> +
> +void
> +CvClearOpComments (
> + ACPI_PARSE_OBJECT *Op);
> +
> +ACPI_FILE_NODE*
> +CvFilenameExists (
> + char *Filename,
> + ACPI_FILE_NODE *Head);
> +
> +void
> +CvLabelFileNode (
> + ACPI_PARSE_OBJECT *Op);
> +
> +void
> +CvCaptureListComments (
> + ACPI_PARSE_STATE *ParserState,
> + ACPI_COMMENT_NODE *ListHead,
> + ACPI_COMMENT_NODE *ListTail);
> +
> +void
> +CvCaptureCommentsOnly (
> + ACPI_PARSE_STATE *ParserState);
> +
> +void
> +CvCaptureComments (
> + ACPI_WALK_STATE *WalkState);
> +
> +void
> +CvTransferComments (
> + ACPI_PARSE_OBJECT *Op);
> +
> +/*
> + * cvdisasm
> + */
> +void
> +CvSwitchFiles (
> + UINT32 level,
> + ACPI_PARSE_OBJECT *op);
> +
> +BOOLEAN
> +CvFileHasSwitched (
> + ACPI_PARSE_OBJECT *Op);
> +
> +
> +void
> +CvCloseParenWriteComment (
> + ACPI_PARSE_OBJECT *Op,
> + UINT32 Level);
> +
> +void
> +CvCloseBraceWriteComment (
> + ACPI_PARSE_OBJECT *Op,
> + UINT32 Level);
> +
> +void
> +CvPrintOneCommentList (
> + ACPI_COMMENT_NODE *CommentList,
> + UINT32 Level);
> +
> +void
> +CvPrintOneCommentType (
> + ACPI_PARSE_OBJECT *Op,
> + UINT8 CommentType,
> + char* EndStr,
> + UINT32 Level);
> +
> +
> +#endif
> +
> +#endif /* _ACCONVERT */
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 05cc91d..27354e7 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -875,6 +875,11 @@ AcpiDmEmitExternals (
> void);
>
> void
> +AcpiDmEmitExternal (
> + ACPI_PARSE_OBJECT *NameOp,
> + ACPI_PARSE_OBJECT *TypeOp);
> +
> +void
> AcpiDmUnresolvedWarning (
> UINT8 Type);
>
> @@ -1169,4 +1174,13 @@ ACPI_STATUS
> AdDisplayStatistics (
> void);
>
> +
> +/*
> + * dmwalk
> + */
> +UINT32
> +AcpiDmBlockType (
> + ACPI_PARSE_OBJECT *Op);
> +
> +
> #endif /* __ACDISASM_H__ */
> diff --git a/src/acpica/source/include/acglobal.h b/src/acpica/source/include/acglobal.h
> index b586cff..47b34f5 100644
> --- a/src/acpica/source/include/acglobal.h
> +++ b/src/acpica/source/include/acglobal.h
> @@ -446,6 +446,50 @@ ACPI_GLOBAL (const char, *AcpiGbl_PldShapeList[]);
>
> #endif
>
> +/*
> + * Meant for the -ca option.
> + */
> +ACPI_INIT_GLOBAL (char*, AcpiGbl_CurrentInlineComment, NULL);
> +ACPI_INIT_GLOBAL (char*, AcpiGbl_CurrentEndNodeComment, NULL);
> +ACPI_INIT_GLOBAL (char*, AcpiGbl_CurrentOpenBraceComment, NULL);
> +ACPI_INIT_GLOBAL (char*, AcpiGbl_CurrentCloseBraceComment, NULL);
> +
> +ACPI_INIT_GLOBAL (char*, AcpiGbl_RootFilename, NULL);
> +ACPI_INIT_GLOBAL (char*, AcpiGbl_CurrentFilename, NULL);
> +ACPI_INIT_GLOBAL (char*, AcpiGbl_CurrentParentFilename, NULL);
> +ACPI_INIT_GLOBAL (char*, AcpiGbl_CurrentIncludeFilename, NULL);
> +
> +ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_LastListHead, NULL);
> +
> +ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_DefBlkCommentListHead, NULL);
> +ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_DefBlkCommentListTail, NULL);
> +
> +ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_RegCommentListHead, NULL);
> +ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_RegCommentListTail, NULL);
> +
> +ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_IncCommentListHead, NULL);
> +ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_IncCommentListTail, NULL);
> +
> +ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_EndBlkCommentListHead, NULL);
> +ACPI_INIT_GLOBAL (ACPI_COMMENT_NODE, *AcpiGbl_EndBlkCommentListTail, NULL);
> +
> +ACPI_INIT_GLOBAL (ACPI_COMMENT_ADDR_NODE, *AcpiGbl_CommentAddrListHead, NULL);
> +
> +ACPI_INIT_GLOBAL (ACPI_PARSE_OBJECT, *AcpiGbl_CurrentScope, NULL);
> +
> +ACPI_INIT_GLOBAL (ACPI_FILE_NODE, *AcpiGbl_FileTreeRoot, NULL);
> +
> +ACPI_GLOBAL (ACPI_CACHE_T *, AcpiGbl_RegCommentCache);
> +ACPI_GLOBAL (ACPI_CACHE_T *, AcpiGbl_CommentAddrCache);
> +ACPI_GLOBAL (ACPI_CACHE_T *, AcpiGbl_FileCache);
> +
> +ACPI_INIT_GLOBAL (BOOLEAN, Gbl_CaptureComments, FALSE);
> +
> +ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DebugAslConversion, FALSE);
> +ACPI_INIT_GLOBAL (ACPI_FILE, AcpiGbl_ConvDebugFile, NULL);
> +
> +ACPI_GLOBAL (char, AcpiGbl_TableSig[4]);
> +
> /*****************************************************************************
> *
> * Application globals
> diff --git a/src/acpica/source/include/aclocal.h b/src/acpica/source/include/aclocal.h
> index ce7322c..ab3277f 100644
> --- a/src/acpica/source/include/aclocal.h
> +++ b/src/acpica/source/include/aclocal.h
> @@ -126,7 +126,7 @@ typedef UINT32 ACPI_MUTEX_HANDLE;
>
> /* Total number of aml opcodes defined */
>
> -#define AML_NUM_OPCODES 0x82
> +#define AML_NUM_OPCODES 0x83
>
>
> /* Forward declarations */
> @@ -978,21 +978,55 @@ typedef union acpi_parse_value
> #define ACPI_DISASM_ONLY_MEMBERS(a)
> #endif
>
> +#if defined(ACPI_ASL_COMPILER)
> +#define ACPI_CONVERTER_ONLY_MEMBERS(a) a;
> +#else
> +#define ACPI_CONVERTER_ONLY_MEMBERS(a)
> +#endif
> +
> #define ACPI_PARSE_COMMON \
> - union acpi_parse_object *Parent; /* Parent op */\
> - UINT8 DescriptorType; /* To differentiate various internal objs */\
> - UINT8 Flags; /* Type of Op */\
> - UINT16 AmlOpcode; /* AML opcode */\
> - UINT8 *Aml; /* Address of declaration in AML */\
> - union acpi_parse_object *Next; /* Next op */\
> - ACPI_NAMESPACE_NODE *Node; /* For use by interpreter */\
> - ACPI_PARSE_VALUE Value; /* Value or args associated with the opcode */\
> - UINT8 ArgListLength; /* Number of elements in the arg list */\
> - ACPI_DISASM_ONLY_MEMBERS (\
> - UINT16 DisasmFlags; /* Used during AML disassembly */\
> - UINT8 DisasmOpcode; /* Subtype used for disassembly */\
> - char *OperatorSymbol;/* Used for C-style operator name strings */\
> - char AmlOpName[16]) /* Op name (debug only) */
> + union acpi_parse_object *Parent; /* Parent op */\
> + UINT8 DescriptorType; /* To differentiate various internal objs */\
> + UINT8 Flags; /* Type of Op */\
> + UINT16 AmlOpcode; /* AML opcode */\
> + UINT8 *Aml; /* Address of declaration in AML */\
> + union acpi_parse_object *Next; /* Next op */\
> + ACPI_NAMESPACE_NODE *Node; /* For use by interpreter */\
> + ACPI_PARSE_VALUE Value; /* Value or args associated with the opcode */\
> + UINT8 ArgListLength; /* Number of elements in the arg list */\
> + ACPI_DISASM_ONLY_MEMBERS (\
> + UINT16 DisasmFlags; /* Used during AML disassembly */\
> + UINT8 DisasmOpcode; /* Subtype used for disassembly */\
> + char *OperatorSymbol; /* Used for C-style operator name strings */\
> + char AmlOpName[16]) /* Op name (debug only) */\
> + ACPI_CONVERTER_ONLY_MEMBERS (\
> + char *InlineComment; /* Inline comment */\
> + char *EndNodeComment; /* End of node comment */\
> + char *NameComment; /* Comment associated with the first parameter of the name node */\
> + char *CloseBraceComment; /* Comments that come after } on the same as } */\
> + ACPI_COMMENT_NODE *CommentList; /* comments that appears before this node */\
> + ACPI_COMMENT_NODE *EndBlkComment; /* comments that at the end of a block but before ) or } */\
> + char *CvFilename; /* Filename associated with this node. Used for ASL/ASL+ converter */\
> + char *CvParentFilename) /* Parent filename associated with this node. Used for ASL/ASL+ converter */
> +
> +
> +/* categories of comments */
> +
> +typedef enum
> +{
> + STANDARD_COMMENT = 1,
> + INLINE_COMMENT,
> + ENDNODE_COMMENT,
> + OPENBRACE_COMMENT,
> + CLOSE_BRACE_COMMENT,
> + STD_DEFBLK_COMMENT,
> + END_DEFBLK_COMMENT,
> + FILENAME_COMMENT,
> + PARENTFILENAME_COMMENT,
> + ENDBLK_COMMENT,
> + INCLUDE_COMMENT
> +
> +} ASL_COMMENT_TYPES;
>
>
> /* Internal opcodes for DisasmOpcode field above */
> @@ -1009,9 +1043,46 @@ typedef union acpi_parse_value
> #define ACPI_DASM_LNOT_SUFFIX 0x09 /* End of a LNotEqual (etc.) pair of opcodes */
> #define ACPI_DASM_HID_STRING 0x0A /* String is a _HID or _CID */
> #define ACPI_DASM_IGNORE_SINGLE 0x0B /* Ignore the opcode but not it's children */
> -#define ACPI_DASM_SWITCH_PREDICATE 0x0C /* Object is a predicate for a Switch or Case block */
> -#define ACPI_DASM_CASE 0x0D /* If/Else is a Case in a Switch/Case block */
> -#define ACPI_DASM_DEFAULT 0x0E /* Else is a Default in a Switch/Case block */
> +#define ACPI_DASM_SWITCH 0x0C /* While is a Switch */
> +#define ACPI_DASM_SWITCH_PREDICATE 0x0D /* Object is a predicate for a Switch or Case block */
> +#define ACPI_DASM_CASE 0x0E /* If/Else is a Case in a Switch/Case block */
> +#define ACPI_DASM_DEFAULT 0x0F /* Else is a Default in a Switch/Case block */
> +
> +
> +/*
> + * List struct used in the -ca option
> + */
> +typedef struct acpi_comment_node
> +{
> + char *Comment;
> + struct acpi_comment_node *Next;
> +
> +} ACPI_COMMENT_NODE;
> +
> +
> +typedef struct acpi_comment_addr_node
> +{
> + UINT8 *Addr;
> + struct acpi_comment_addr_node *Next;
> +} ACPI_COMMENT_ADDR_NODE;
> +
> +/*
> + * File node - used for "Include" operator file stack and
> + * depdendency tree for the -ca option
> + */
> +typedef struct acpi_file_node
> +{
> + FILE *File;
> + char *Filename;
> + char *FileStart; /* Points to AML and indicates when the AML for this particular file starts. */
> + char *FileEnd; /* Points to AML and indicates when the AML for this particular file ends. */
> + struct acpi_file_node *Next;
> + struct acpi_file_node *Parent;
> + BOOLEAN IncludeWritten;
> + ACPI_COMMENT_NODE *IncludeComment;
> +
> +} ACPI_FILE_NODE;
> +
>
> /*
> * Generic operation (for example: If, While, Store)
> @@ -1047,6 +1118,8 @@ typedef struct acpi_parse_obj_asl
> union acpi_parse_object *Child;
> union acpi_parse_object *ParentMethod;
> char *Filename;
> + BOOLEAN FileChanged;
> + char *ParentFilename;
> char *ExternalName;
> char *Namepath;
> char NameSeg[4];
> @@ -1079,6 +1152,15 @@ typedef union acpi_parse_object
>
> } ACPI_PARSE_OBJECT;
>
> +typedef struct asl_comment_state
> +{
> + UINT8 CommentType;
> + UINT32 SpacesBefore;
> + ACPI_PARSE_OBJECT *Latest_Parse_Node;
> + ACPI_PARSE_OBJECT *ParsingParenBraceNode;
> + BOOLEAN CaptureComments;
> +} ASL_COMMENT_STATE;
> +
>
> /*
> * Parse state - one state per parser invocation and each control
> diff --git a/src/acpica/source/include/acmacros.h b/src/acpica/source/include/acmacros.h
> index e8ff04c..d866d14 100644
> --- a/src/acpica/source/include/acmacros.h
> +++ b/src/acpica/source/include/acmacros.h
> @@ -571,4 +571,39 @@
> #define ACPI_IS_OCTAL_DIGIT(d) (((char)(d) >= '0') && ((char)(d) <= '7'))
>
>
> +/*
> + * Macors used for the ASL-/ASL+ converter utility
> + */
> +#ifdef ACPI_ASL_COMPILER
> +
> +#define ASL_CV_LABEL_FILENODE(a) CvLabelFileNode(a);
> +#define ASL_CV_CAPTURE_COMMENTS_ONLY(a) CvCaptureCommentsOnly (a);
> +#define ASL_CV_CAPTURE_COMMENTS(a) CvCaptureComments (a);
> +#define ASL_CV_TRANSFER_COMMENTS(a) CvTransferComments (a);
> +#define ASL_CV_CLOSE_PAREN(a,b) CvCloseParenWriteComment(a,b);
> +#define ASL_CV_CLOSE_BRACE(a,b) CvCloseBraceWriteComment(a,b);
> +#define ASL_CV_SWITCH_FILES(a,b) CvSwitchFiles(a,b);
> +#define ASL_CV_CLEAR_OP_COMMENTS(a) CvClearOpComments(a);
> +#define ASL_CV_PRINT_ONE_COMMENT(a,b,c,d) CvPrintOneCommentType (a,b,c,d);
> +#define ASL_CV_PRINT_ONE_COMMENT_LIST(a,b) CvPrintOneCommentList (a,b);
> +#define ASL_CV_FILE_HAS_SWITCHED(a) CvFileHasSwitched(a)
> +#define ASL_CV_INIT_FILETREE(a,b,c) CvInitFileTree(a,b,c);
> +
> +#else
> +
> +#define ASL_CV_LABEL_FILENODE(a)
> +#define ASL_CV_CAPTURE_COMMENTS_ONLY(a)
> +#define ASL_CV_CAPTURE_COMMENTS(a)
> +#define ASL_CV_TRANSFER_COMMENTS(a)
> +#define ASL_CV_CLOSE_PAREN(a,b) AcpiOsPrintf (")");
> +#define ASL_CV_CLOSE_BRACE(a,b) AcpiOsPrintf ("}");
> +#define ASL_CV_SWITCH_FILES(a,b)
> +#define ASL_CV_CLEAR_OP_COMMENTS(a)
> +#define ASL_CV_PRINT_ONE_COMMENT(a,b,c,d)
> +#define ASL_CV_PRINT_ONE_COMMENT_LIST(a,b)
> +#define ASL_CV_FILE_HAS_SWITCHED(a) 0
> +#define ASL_CV_INIT_FILETREE(a,b,c)
> +
> +#endif
> +
> #endif /* ACMACROS_H */
> diff --git a/src/acpica/source/include/acopcode.h b/src/acpica/source/include/acopcode.h
> index 6e55301..61d581e 100644
> --- a/src/acpica/source/include/acopcode.h
> +++ b/src/acpica/source/include/acopcode.h
> @@ -163,6 +163,7 @@
> #define ARGP_BUFFER_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_TERMARG, ARGP_BYTELIST)
> #define ARGP_BYTE_OP ARGP_LIST1 (ARGP_BYTEDATA)
> #define ARGP_BYTELIST_OP ARGP_LIST1 (ARGP_NAMESTRING)
> +#define ARGP_COMMENT_OP ARGP_LIST2 (ARGP_BYTEDATA, ARGP_COMMENT)
> #define ARGP_CONCAT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
> #define ARGP_CONCAT_RES_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
> #define ARGP_COND_REF_OF_OP ARGP_LIST2 (ARGP_SIMPLENAME, ARGP_TARGET)
> @@ -297,6 +298,7 @@
> #define ARGI_BUFFER_OP ARGI_LIST1 (ARGI_INTEGER)
> #define ARGI_BYTE_OP ARGI_INVALID_OPCODE
> #define ARGI_BYTELIST_OP ARGI_INVALID_OPCODE
> +#define ARGI_COMMENT_OP ARGI_INVALID_OPCODE
> #define ARGI_CONCAT_OP ARGI_LIST3 (ARGI_ANYTYPE, ARGI_ANYTYPE, ARGI_TARGETREF)
> #define ARGI_CONCAT_RES_OP ARGI_LIST3 (ARGI_BUFFER, ARGI_BUFFER, ARGI_TARGETREF)
> #define ARGI_COND_REF_OF_OP ARGI_LIST2 (ARGI_OBJECT_REF, ARGI_TARGETREF)
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index 020e572..0ab6fe4 100644
> --- a/src/acpica/source/include/acpixf.h
> +++ b/src/acpica/source/include/acpixf.h
> @@ -118,7 +118,7 @@
>
> /* Current ACPICA subsystem version in YYYYMMDD format */
>
> -#define ACPI_CA_VERSION 0x20170119
> +#define ACPI_CA_VERSION 0x20170224
>
> #include "acconfig.h"
> #include "actypes.h"
> diff --git a/src/acpica/source/include/actbl2.h b/src/acpica/source/include/actbl2.h
> index 736efd8..d98c0ee 100644
> --- a/src/acpica/source/include/actbl2.h
> +++ b/src/acpica/source/include/actbl2.h
> @@ -161,6 +161,7 @@
> #define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */
> #define ACPI_SIG_WDDT "WDDT" /* Watchdog Timer Description Table */
> #define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */
> +#define ACPI_SIG_XXXX "XXXX" /* Intermediate AML header for ASL/ASL+ converter */
>
> #ifdef ACPI_UNDEFINED_TABLES
> /*
> @@ -981,6 +982,16 @@ typedef struct acpi_iort_smmu
> #define ACPI_IORT_SMMU_DVM_SUPPORTED (1)
> #define ACPI_IORT_SMMU_COHERENT_WALK (1<<1)
>
> +/* Global interrupt format */
> +
> +typedef struct acpi_iort_smmu_gsi
> +{
> + UINT32 NSgIrpt;
> + UINT32 NSgIrptFlags;
> + UINT32 NSgCfgIrpt;
> + UINT32 NSgCfgIrptFlags;
> +} ACPI_IORT_SMMU_GSI;
> +
>
> typedef struct acpi_iort_smmu_v3
> {
> diff --git a/src/acpica/source/include/amlcode.h b/src/acpica/source/include/amlcode.h
> index b9aa3af..d03ac0d 100644
> --- a/src/acpica/source/include/amlcode.h
> +++ b/src/acpica/source/include/amlcode.h
> @@ -120,11 +120,8 @@
>
> /* primary opcodes */
>
> -#define AML_NULL_CHAR (UINT16) 0x00
> -
> #define AML_ZERO_OP (UINT16) 0x00
> #define AML_ONE_OP (UINT16) 0x01
> -#define AML_UNASSIGNED (UINT16) 0x02
> #define AML_ALIAS_OP (UINT16) 0x06
> #define AML_NAME_OP (UINT16) 0x08
> #define AML_BYTE_OP (UINT16) 0x0a
> @@ -135,17 +132,15 @@
> #define AML_SCOPE_OP (UINT16) 0x10
> #define AML_BUFFER_OP (UINT16) 0x11
> #define AML_PACKAGE_OP (UINT16) 0x12
> -#define AML_VAR_PACKAGE_OP (UINT16) 0x13 /* ACPI 2.0 */
> +#define AML_VARIABLE_PACKAGE_OP (UINT16) 0x13 /* ACPI 2.0 */
> #define AML_METHOD_OP (UINT16) 0x14
> #define AML_EXTERNAL_OP (UINT16) 0x15 /* ACPI 6.0 */
> #define AML_DUAL_NAME_PREFIX (UINT16) 0x2e
> -#define AML_MULTI_NAME_PREFIX_OP (UINT16) 0x2f
> -#define AML_NAME_CHAR_SUBSEQ (UINT16) 0x30
> -#define AML_NAME_CHAR_FIRST (UINT16) 0x41
> -#define AML_EXTENDED_OP_PREFIX (UINT16) 0x5b
> +#define AML_MULTI_NAME_PREFIX (UINT16) 0x2f
> +#define AML_EXTENDED_PREFIX (UINT16) 0x5b
> #define AML_ROOT_PREFIX (UINT16) 0x5c
> #define AML_PARENT_PREFIX (UINT16) 0x5e
> -#define AML_LOCAL_OP (UINT16) 0x60
> +#define AML_FIRST_LOCAL_OP (UINT16) 0x60 /* Used for Local op # calculations */
> #define AML_LOCAL0 (UINT16) 0x60
> #define AML_LOCAL1 (UINT16) 0x61
> #define AML_LOCAL2 (UINT16) 0x62
> @@ -154,7 +149,7 @@
> #define AML_LOCAL5 (UINT16) 0x65
> #define AML_LOCAL6 (UINT16) 0x66
> #define AML_LOCAL7 (UINT16) 0x67
> -#define AML_ARG_OP (UINT16) 0x68
> +#define AML_FIRST_ARG_OP (UINT16) 0x68 /* Used for Arg op # calculations */
> #define AML_ARG0 (UINT16) 0x68
> #define AML_ARG1 (UINT16) 0x69
> #define AML_ARG2 (UINT16) 0x6a
> @@ -165,7 +160,7 @@
> #define AML_STORE_OP (UINT16) 0x70
> #define AML_REF_OF_OP (UINT16) 0x71
> #define AML_ADD_OP (UINT16) 0x72
> -#define AML_CONCAT_OP (UINT16) 0x73
> +#define AML_CONCATENATE_OP (UINT16) 0x73
> #define AML_SUBTRACT_OP (UINT16) 0x74
> #define AML_INCREMENT_OP (UINT16) 0x75
> #define AML_DECREMENT_OP (UINT16) 0x76
> @@ -182,7 +177,7 @@
> #define AML_FIND_SET_LEFT_BIT_OP (UINT16) 0x81
> #define AML_FIND_SET_RIGHT_BIT_OP (UINT16) 0x82
> #define AML_DEREF_OF_OP (UINT16) 0x83
> -#define AML_CONCAT_RES_OP (UINT16) 0x84 /* ACPI 2.0 */
> +#define AML_CONCATENATE_TEMPLATE_OP (UINT16) 0x84 /* ACPI 2.0 */
> #define AML_MOD_OP (UINT16) 0x85 /* ACPI 2.0 */
> #define AML_NOTIFY_OP (UINT16) 0x86
> #define AML_SIZE_OF_OP (UINT16) 0x87
> @@ -194,18 +189,18 @@
> #define AML_CREATE_BIT_FIELD_OP (UINT16) 0x8d
> #define AML_OBJECT_TYPE_OP (UINT16) 0x8e
> #define AML_CREATE_QWORD_FIELD_OP (UINT16) 0x8f /* ACPI 2.0 */
> -#define AML_LAND_OP (UINT16) 0x90
> -#define AML_LOR_OP (UINT16) 0x91
> -#define AML_LNOT_OP (UINT16) 0x92
> -#define AML_LEQUAL_OP (UINT16) 0x93
> -#define AML_LGREATER_OP (UINT16) 0x94
> -#define AML_LLESS_OP (UINT16) 0x95
> +#define AML_LOGICAL_AND_OP (UINT16) 0x90
> +#define AML_LOGICAL_OR_OP (UINT16) 0x91
> +#define AML_LOGICAL_NOT_OP (UINT16) 0x92
> +#define AML_LOGICAL_EQUAL_OP (UINT16) 0x93
> +#define AML_LOGICAL_GREATER_OP (UINT16) 0x94
> +#define AML_LOGICAL_LESS_OP (UINT16) 0x95
> #define AML_TO_BUFFER_OP (UINT16) 0x96 /* ACPI 2.0 */
> -#define AML_TO_DECSTRING_OP (UINT16) 0x97 /* ACPI 2.0 */
> -#define AML_TO_HEXSTRING_OP (UINT16) 0x98 /* ACPI 2.0 */
> +#define AML_TO_DECIMAL_STRING_OP (UINT16) 0x97 /* ACPI 2.0 */
> +#define AML_TO_HEX_STRING_OP (UINT16) 0x98 /* ACPI 2.0 */
> #define AML_TO_INTEGER_OP (UINT16) 0x99 /* ACPI 2.0 */
> #define AML_TO_STRING_OP (UINT16) 0x9c /* ACPI 2.0 */
> -#define AML_COPY_OP (UINT16) 0x9d /* ACPI 2.0 */
> +#define AML_COPY_OBJECT_OP (UINT16) 0x9d /* ACPI 2.0 */
> #define AML_MID_OP (UINT16) 0x9e /* ACPI 2.0 */
> #define AML_CONTINUE_OP (UINT16) 0x9f /* ACPI 2.0 */
> #define AML_IF_OP (UINT16) 0xa0
> @@ -214,18 +209,29 @@
> #define AML_NOOP_OP (UINT16) 0xa3
> #define AML_RETURN_OP (UINT16) 0xa4
> #define AML_BREAK_OP (UINT16) 0xa5
> -#define AML_BREAK_POINT_OP (UINT16) 0xcc
> +#define AML_COMMENT_OP (UINT16) 0xa9
> +#define AML_BREAKPOINT_OP (UINT16) 0xcc
> #define AML_ONES_OP (UINT16) 0xff
>
> -/* prefixed opcodes */
>
> -#define AML_EXTENDED_OPCODE (UINT16) 0x5b00 /* prefix for 2-byte opcodes */
> +/*
> + * Combination opcodes (actually two one-byte opcodes)
> + * Used by the disassembler and iASL compiler
> + */
> +#define AML_LOGICAL_GREATER_EQUAL_OP (UINT16) 0x9295 /* LNot (LLess) */
> +#define AML_LOGICAL_LESS_EQUAL_OP (UINT16) 0x9294 /* LNot (LGreater) */
> +#define AML_LOGICAL_NOT_EQUAL_OP (UINT16) 0x9293 /* LNot (LEqual) */
> +
> +
> +/* Prefixed (2-byte) opcodes (with AML_EXTENDED_PREFIX) */
> +
> +#define AML_EXTENDED_OPCODE (UINT16) 0x5b00 /* Prefix for 2-byte opcodes */
>
> #define AML_MUTEX_OP (UINT16) 0x5b01
> #define AML_EVENT_OP (UINT16) 0x5b02
> -#define AML_SHIFT_RIGHT_BIT_OP (UINT16) 0x5b10
> -#define AML_SHIFT_LEFT_BIT_OP (UINT16) 0x5b11
> -#define AML_COND_REF_OF_OP (UINT16) 0x5b12
> +#define AML_SHIFT_RIGHT_BIT_OP (UINT16) 0x5b10 /* Obsolete, not in ACPI spec */
> +#define AML_SHIFT_LEFT_BIT_OP (UINT16) 0x5b11 /* Obsolete, not in ACPI spec */
> +#define AML_CONDITIONAL_REF_OF_OP (UINT16) 0x5b12
> #define AML_CREATE_FIELD_OP (UINT16) 0x5b13
> #define AML_LOAD_TABLE_OP (UINT16) 0x5b1f /* ACPI 2.0 */
> #define AML_LOAD_OP (UINT16) 0x5b20
> @@ -247,7 +253,7 @@
> #define AML_FIELD_OP (UINT16) 0x5b81
> #define AML_DEVICE_OP (UINT16) 0x5b82
> #define AML_PROCESSOR_OP (UINT16) 0x5b83
> -#define AML_POWER_RES_OP (UINT16) 0x5b84
> +#define AML_POWER_RESOURCE_OP (UINT16) 0x5b84
> #define AML_THERMAL_ZONE_OP (UINT16) 0x5b85
> #define AML_INDEX_FIELD_OP (UINT16) 0x5b86
> #define AML_BANK_FIELD_OP (UINT16) 0x5b87
> @@ -255,15 +261,6 @@
>
>
> /*
> - * Combination opcodes (actually two one-byte opcodes)
> - * Used by the disassembler and iASL compiler
> - */
> -#define AML_LGREATEREQUAL_OP (UINT16) 0x9295
> -#define AML_LLESSEQUAL_OP (UINT16) 0x9294
> -#define AML_LNOTEQUAL_OP (UINT16) 0x9293
> -
> -
> -/*
> * Opcodes for "Field" operators
> */
> #define AML_FIELD_OFFSET_OP (UINT8) 0x00
> @@ -316,6 +313,7 @@
> #define ARGP_SIMPLENAME 0x12 /* NameString | LocalTerm | ArgTerm */
> #define ARGP_NAME_OR_REF 0x13 /* For ObjectType only */
> #define ARGP_MAX 0x13
> +#define ARGP_COMMENT 0x14
>
> /*
> * Resolved argument types for the AML Interpreter
> @@ -385,26 +383,19 @@
>
>
> /*
> - * hash offsets
> - */
> -#define AML_EXTOP_HASH_OFFSET 22
> -#define AML_LNOT_HASH_OFFSET 19
> -
> -
> -/*
> - * opcode groups and types
> + * Some of the flags and types below are of the form:
> + *
> + * AML_FLAGS_EXEC_#A_#T,#R, or
> + * AML_TYPE_EXEC_#A_#T,#R where:
> + *
> + * #A is the number of required arguments
> + * #T is the number of target operands
> + * #R indicates whether there is a return value
> */
> -#define OPGRP_NAMED 0x01
> -#define OPGRP_FIELD 0x02
> -#define OPGRP_BYTELIST 0x04
> -
>
> /*
> - * Opcode information
> + * Opcode information flags
> */
> -
> -/* Opcode flags */
> -
> #define AML_LOGICAL 0x0001
> #define AML_LOGICAL_NUMERIC 0x0002
> #define AML_MATH 0x0004
> @@ -421,7 +412,7 @@
> #define AML_CONSTANT 0x2000
> #define AML_NO_OPERAND_RESOLVE 0x4000
>
> -/* Convenient flag groupings */
> +/* Convenient flag groupings of the flags above */
>
> #define AML_FLAGS_EXEC_0A_0T_1R AML_HAS_RETVAL
> #define AML_FLAGS_EXEC_1A_0T_0R AML_HAS_ARGS /* Monadic1 */
> @@ -439,7 +430,7 @@
>
> /*
> * The opcode Type is used in a dispatch table, do not change
> - * without updating the table.
> + * or add anything new without updating the table.
> */
> #define AML_TYPE_EXEC_0A_0T_1R 0x00
> #define AML_TYPE_EXEC_1A_0T_0R 0x01 /* Monadic1 */
> @@ -465,7 +456,7 @@
>
> #define AML_TYPE_METHOD_CALL 0x10
>
> -/* Misc */
> +/* Miscellaneous types */
>
> #define AML_TYPE_CREATE_FIELD 0x11
> #define AML_TYPE_CREATE_OBJECT 0x12
> @@ -475,7 +466,6 @@
> #define AML_TYPE_NAMED_SIMPLE 0x16
> #define AML_TYPE_NAMED_COMPLEX 0x17
> #define AML_TYPE_RETURN 0x18
> -
> #define AML_TYPE_UNDEFINED 0x19
> #define AML_TYPE_BOGUS 0x1A
>
>
Acked-by: Ivan Hu <ivan.hu at canonical.com>
More information about the fwts-devel
mailing list