Import ACPICA 20170224.

This commit is contained in:
Jung-uk Kim
2017-02-28 20:06:31 +00:00
parent a0b3a9cf1f
commit 691d1929c1
87 changed files with 3958 additions and 409 deletions
+62 -1
View File
@@ -1,7 +1,68 @@
----------------------------------------
24 February 2017. Summary of changes for version 20170224:
1) ACPICA kernel-resident subsystem:
Interpreter: Fixed two issues with the control method return value auto-
repair feature, where an attempt to double-delete an internal object
could result in an ACPICA warning (for _CID repair and others). No fault
occurs, however, because the attempted deletion (actually a release to an
internal cache) is detected and ignored via object poisoning.
Debugger: Fixed an AML interpreter mutex issue during the single stepping
of control methods. If certain debugger commands are executed during
stepping, a mutex aquire/release error could occur. Lv Zheng.
Fixed some issues generating ACPICA with the Intel C compiler by
restoring the original behavior and compiler-specific include file in
acenv.h. Lv Zheng.
Example Code and Data Size: These are the sizes for the OS-independent
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The
debug version of the code includes the debug output trace mechanism and
has a much larger code and data size.
Current Release:
Non-Debug Version: 141.7K Code, 58.5K Data, 200.2K Total
Debug Version: 207.5K Code, 82.7K Data, 290.2K Total
Previous Release:
Non-Debug Version: 137.4K Code, 52.6K Data, 190.0K Total
Debug Version: 201.5K Code, 82.2K Data, 283.7K Total
2) iASL Compiler/Disassembler and Tools:
iASL/Disassembler: A preliminary version of a new ASL-to-ASL+ conversion
tool has been designed, implemented, and included in this release. The
key feature of this utility is that the original comments within the
input ASL file are preserved during the conversion process, and included
within the converted ASL+ file -- thus creating a transparent conversion
of existing ASL files to ASL+ (ASL 2.0). Erik Schmauss.
Usage: iasl -ca <ASL-filename> // Output is a .dsl file with
converted code
iASL/Disassembler: Improved the detection and correct disassembly of
Switch/Case operators. This feature detects sequences of if/elseif/else
operators that originated from ASL Switch/Case/Default operators and
emits the original operators. David Box.
iASL: Improved the IORT ACPI table support in the following areas. Lv
Zheng:
Clear MappingOffset if the MappingCount is zero.
Fix the disassembly of the SMMU GSU interrupt offset.
Update the template file for the IORT table.
Disassembler: Enhanced the detection and disassembly of resource
template/descriptor within a Buffer object. An EndTag descriptor is now
required to have a zero second byte, since all known ASL compilers emit
this. This helps eliminate incorrect decisions when a buffer is
disassembled (false positives on resource templates).
----------------------------------------
19 January 2017. Summary of changes for version 20170119:
This release is available at https://acpica.org/downloads
1) General ACPICA software:
+3
View File
@@ -105,6 +105,9 @@ OBJECTS = \
$(OBJDIR)/aslwalks.o\
$(OBJDIR)/aslxref.o\
$(OBJDIR)/aslxrefout.o\
$(OBJDIR)/cvcompiler.o\
$(OBJDIR)/cvdisasm.o\
$(OBJDIR)/cvparser.o\
$(OBJDIR)/cmfsize.o\
$(OBJDIR)/dbfileio.o\
$(OBJDIR)/dmbuffer.o\
+25
View File
@@ -326,6 +326,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))
@@ -475,6 +490,7 @@ AdReparseOneTable (
ACPI_OWNER_ID OwnerId)
{
ACPI_STATUS Status;
ACPI_COMMENT_ADDR_NODE *AddrListHead;
fprintf (stderr,
@@ -508,6 +524,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);
+1 -1
View File
@@ -878,7 +878,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)
{
+25
View File
@@ -1163,6 +1163,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
+22
View File
@@ -47,6 +47,8 @@
#include "actables.h"
#include "acparser.h"
#include "acapps.h"
#include "acmacros.h"
#include "acconvert.h"
#define _COMPONENT ACPI_TOOLS
@@ -201,6 +203,14 @@ AdCreateTableHeader (
AcpiOsPrintf (" * Compiler Version 0x%8.8X (%u)\n", Table->AslCompilerRevision, Table->AslCompilerRevision);
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.
*
@@ -388,6 +398,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 */
@@ -397,6 +408,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);
+8 -2
View File
@@ -171,6 +171,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)
@@ -259,6 +260,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)
@@ -1549,8 +1551,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
};
+88 -13
View File
@@ -44,6 +44,7 @@
#include "aslcompiler.h"
#include "aslcompiler.y.h"
#include "amlcode.h"
#include "acconvert.h"
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslcodegen")
@@ -56,12 +57,6 @@ CgAmlWriteWalk (
UINT32 Level,
void *Context);
static void
CgLocalWriteAmlData (
ACPI_PARSE_OBJECT *Op,
void *Buffer,
UINT32 Length);
static void
CgWriteAmlOpcode (
ACPI_PARSE_OBJECT *Op);
@@ -206,7 +201,7 @@ CgAmlWriteWalk (
*
******************************************************************************/
static void
void
CgLocalWriteAmlData (
ACPI_PARSE_OBJECT *Op,
void *Buffer,
@@ -261,6 +256,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:
@@ -416,6 +420,8 @@ CgWriteTableHeader (
ACPI_PARSE_OBJECT *Op)
{
ACPI_PARSE_OBJECT *Child;
UINT32 CommentLength;
ACPI_COMMENT_NODE *Current;
/* AML filename */
@@ -425,6 +431,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 */
@@ -466,6 +487,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);
@@ -492,13 +557,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 */
@@ -580,6 +645,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 */
@@ -641,6 +712,10 @@ CgWriteNode (
case PARSEOP_DEFINITION_BLOCK:
CgWriteTableHeader (Op);
if (Gbl_CaptureComments)
{
CgWriteAmlDefBlockComment (Op);
}
break;
case PARSEOP_NAMESEG:
+28 -3
View File
@@ -285,8 +285,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);
}
@@ -347,6 +356,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");
@@ -800,7 +821,11 @@ CmCleanupAndExit (
/* Final cleanup after compiling one file */
CmDeleteCaches ();
if (!Gbl_DoAslConversion)
{
CmDeleteCaches ();
}
}
+16
View File
@@ -576,6 +576,12 @@ void
CgGenerateAmlOutput (
void);
void
CgLocalWriteAmlData (
ACPI_PARSE_OBJECT *Op,
void *Buffer,
UINT32 Length);
/*
* aslfile
@@ -1359,4 +1365,14 @@ ACPI_STATUS
DtCreateTemplates (
char **argv);
/*
* ASL/ASL+ converter debug
*/
void
CvDbgPrint (
char *Fmt,
...);
#endif /* __ASLCOMPILER_H */
+3 -2
View File
@@ -44,6 +44,7 @@
#include "aslcompiler.h"
#include "aslcompiler.y.h"
#include "acconvert.h"
#include <stdlib.h>
#include <string.h>
@@ -66,10 +67,10 @@ YYSTYPE AslCompilerlval;
static void
AslDoLineDirective (void);
static char
static BOOLEAN
AslDoComment (void);
static char
static BOOLEAN
AslDoCommentType2 (void);
static char
+34
View File
@@ -58,6 +58,40 @@ UtDumpParseOpName (
UINT32 DataLength);
/*******************************************************************************
*
* 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
+7 -1
View File
@@ -159,7 +159,6 @@
/*
* Macros for debug output
*/
#define DEBUG_MAX_LINE_LENGTH 61
#define DEBUG_SPACES_PER_INDENT 3
#define DEBUG_FULL_LINE_LENGTH 71
@@ -185,4 +184,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 */
+30 -2
View File
@@ -511,8 +511,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,
@@ -854,6 +860,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);
}
+20 -2
View File
@@ -84,7 +84,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
@@ -113,7 +114,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
@@ -182,6 +183,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
@@ -265,6 +269,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 */
+5 -3
View File
@@ -69,9 +69,10 @@ Usage (
ACPI_USAGE_HEADER ("iasl [Options] [Files]");
printf ("\nGeneral:\n");
ACPI_OPTION ("-@ <file>", "Specify command file");
ACPI_OPTION ("-I <dir>", "Specify additional include directory");
ACPI_OPTION ("-p <prefix>", "Specify path/filename prefix for all output files");
ACPI_OPTION ("-@ <file>", "Specify command file");
ACPI_OPTION ("-I <dir>", "Specify additional include directory");
ACPI_OPTION ("-p <prefix>", "Specify path/filename prefix for all output files");
ACPI_OPTION ("-ca <file>", "convert a given ASL file to ASL+ (retains comments)");
ACPI_OPTION ("-v", "Display compiler version");
ACPI_OPTION ("-vd", "Display compiler build date and time");
ACPI_OPTION ("-vo", "Enable optimization comments");
@@ -153,6 +154,7 @@ Usage (
ACPI_OPTION ("-vt", "Dump binary table data in hex format within output file");
printf ("\nDebug Options:\n");
ACPI_OPTION ("-bc", "Create converter debug file (*.cdb)");
ACPI_OPTION ("-bf", "Create debug file (full output) (*.txt)");
ACPI_OPTION ("-bs", "Create debug file (parse tree only) (*.txt)");
ACPI_OPTION ("-bp <depth>", "Prune ASL parse tree");
+4 -1
View File
@@ -44,6 +44,7 @@
#include "aslcompiler.h"
#include "aslcompiler.y.h"
#include "amlcode.h"
#include "acconvert.h"
#define _COMPONENT ACPI_COMPILER
@@ -136,7 +137,9 @@ LnPackageLengthWalk (
Op->Asl.AmlLength +
Op->Asl.AmlOpcodeLength +
Op->Asl.AmlPkgLenBytes +
Op->Asl.AmlSubtreeLength);
Op->Asl.AmlSubtreeLength +
CvCalculateCommentLengths (Op)
);
}
return (AE_OK);
}
+18 -18
View File
@@ -166,7 +166,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),
@@ -176,12 +176,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),
@@ -261,14 +261,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),
@@ -281,7 +281,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),
@@ -347,7 +347,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),
@@ -412,8 +412,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),
@@ -428,7 +428,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),
+1 -1
View File
@@ -185,7 +185,7 @@ LsAmlOffsetWalk (
break;
case AML_PACKAGE_OP:
case AML_VAR_PACKAGE_OP:
case AML_VARIABLE_PACKAGE_OP:
/* Get the package element count */
+4 -3
View File
@@ -321,7 +321,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
@@ -352,7 +352,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
@@ -1072,7 +1073,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:
+58 -5
View File
@@ -68,7 +68,7 @@ AslDoResponseFile (
#define ASL_TOKEN_SEPARATORS " \t\n"
#define ASL_SUPPORTED_OPTIONS "@:a:b|c|d^D:e:f^gh^i|I:l^m:no|p:P^r:s|t|T+G^v^w|x:z"
#define ASL_SUPPORTED_OPTIONS "@:a:b|c|d^D:e:f^gh^i|I:l^m:no|p:P^q^r:s|t|T+G^v^w|x:z"
static char ASL_BUILD_DATE[] = __DATE__;
static char ASL_BUILD_TIME[] = __TIME__;
@@ -209,6 +209,24 @@ AslDoOptions (
switch (AcpiGbl_Optarg[0])
{
case 'c':
printf ("Debug ASL to ASL+ conversion\n");
Gbl_DoAslConversion = TRUE;
Gbl_FoldConstants = FALSE;
Gbl_IntegerOptimizationFlag = FALSE;
Gbl_ReferenceOptimizationFlag = FALSE;
Gbl_OptimizeTrivialParseNodes = FALSE;
Gbl_CaptureComments = TRUE;
AcpiGbl_DoDisassemblerOptimizations = FALSE;
AcpiGbl_DebugAslConversion = TRUE;
AcpiGbl_DmEmitExternalOpcodes = TRUE;
Gbl_DoExternalsInPlace = TRUE;
return (0);
case 'f':
AslCompilerdebug = 1; /* same as yydebug */
@@ -260,6 +278,22 @@ AslDoOptions (
switch (AcpiGbl_Optarg[0])
{
case 'a':
printf ("Convert ASL to ASL+ with comments\n");
Gbl_DoAslConversion = TRUE;
Gbl_FoldConstants = FALSE;
Gbl_IntegerOptimizationFlag = FALSE;
Gbl_ReferenceOptimizationFlag = FALSE;
Gbl_OptimizeTrivialParseNodes = FALSE;
Gbl_CaptureComments = TRUE;
AcpiGbl_DoDisassemblerOptimizations = FALSE;
AcpiGbl_DmEmitExternalOpcodes = TRUE;
Gbl_DoExternalsInPlace = TRUE;
return (0);
case 'r':
Gbl_NoResourceChecking = TRUE;
@@ -552,6 +586,8 @@ AslDoOptions (
Gbl_FoldConstants = FALSE;
Gbl_IntegerOptimizationFlag = FALSE;
Gbl_ReferenceOptimizationFlag = FALSE;
Gbl_OptimizeTrivialParseNodes = FALSE;
break;
case 'c':
@@ -570,15 +606,21 @@ AslDoOptions (
case 'e':
/* iASL: Disable External opcode generation */
Gbl_DoExternals = FALSE;
/* Disassembler: Emit embedded external operators */
AcpiGbl_DmEmitExternalOpcodes = TRUE;
break;
case 'E':
/*
* iASL: keep External opcodes in place.
* No affect if Gbl_DoExternals is false.
*/
Gbl_DoExternalsInPlace = TRUE;
break;
case 'f':
/* Disable folding on "normal" expressions */
@@ -643,6 +685,17 @@ AslDoOptions (
Gbl_UseDefaultAmlFilename = FALSE;
break;
case 'q': /* ASL/ASl+ converter: compile only and leave badaml. */
printf ("Convert ASL to ASL+ with comments\n");
Gbl_FoldConstants = FALSE;
Gbl_IntegerOptimizationFlag = FALSE;
Gbl_ReferenceOptimizationFlag = FALSE;
Gbl_OptimizeTrivialParseNodes = FALSE;
Gbl_CaptureComments = TRUE;
Gbl_DoExternalsInPlace = TRUE;
return (0);
case 'r': /* Override revision found in table header */
Gbl_RevisionOverride = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0);
+13 -10
View File
@@ -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
*
*****************************************************************************/
@@ -146,9 +148,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
@@ -403,8 +405,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;}
@@ -545,16 +548,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;}
@@ -778,17 +781,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;}
+1 -1
View File
@@ -354,7 +354,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;
+6 -3
View File
@@ -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
*
*****************************************************************************/
@@ -56,14 +58,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
+6 -4
View File
@@ -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
*
*****************************************************************************/
@@ -82,14 +84,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);}
;
@@ -177,9 +179,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 */
+32
View File
@@ -45,6 +45,7 @@
#include "actables.h"
#include "acdisasm.h"
#include "acapps.h"
#include "acconvert.h"
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslstartup")
@@ -123,6 +124,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;
}
}
@@ -450,6 +460,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);
/*
+93 -21
View File
@@ -52,21 +52,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);
}
/*******************************************************************************
@@ -289,6 +280,10 @@ AslPushInputFileStack (
Gbl_CurrentLineNumber = 1;
yyin = InputFile;
/* converter: reset the comment state to STANDARD_COMMENT */
Gbl_CommentState.CommentType = STANDARD_COMMENT;
}
@@ -392,6 +387,11 @@ AslInsertLineBuffer (
AslResetCurrentLineBuffer ();
}
if (Gbl_CaptureComments)
{
CvProcessCommentState (SourceChar);
}
}
}
@@ -459,16 +459,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:
@@ -477,6 +487,11 @@ loop:
while (((c = input ()) != '*') && (c != EOF))
{
AslInsertLineBuffer (c);
if (Gbl_CaptureComments && CurrentState.CaptureComments)
{
*StringBuffer = c;
++StringBuffer;
}
c1 = c;
}
@@ -500,10 +515,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;
}
@@ -511,8 +531,13 @@ loop:
{
goto EarlyEOF;
}
if (StringBuffer > EndBuffer)
{
goto BufferOverflow;
}
AslInsertLineBuffer (c1);
CvProcessComment (CurrentState, StringBuffer, c1);
return (TRUE);
@@ -525,6 +550,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);
}
@@ -536,23 +573,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)
@@ -562,8 +616,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);
}
+172 -3
View File
@@ -44,6 +44,7 @@
#include "aslcompiler.h"
#include "aslcompiler.y.h"
#include "acapps.h"
#include "acconvert.h"
#include <time.h>
#define _COMPONENT ACPI_COMPILER
@@ -140,6 +141,7 @@ TrAllocateNode (
UINT32 ParseOpcode)
{
ACPI_PARSE_OBJECT *Op;
ACPI_PARSE_OBJECT *LatestNode;
Op = TrGetNextNode ();
@@ -152,6 +154,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);
}
@@ -294,6 +372,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);
}
@@ -1060,6 +1145,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 */
@@ -1073,6 +1191,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
@@ -1097,9 +1227,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
*
@@ -1161,6 +1291,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;
@@ -1224,6 +1373,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);
}
@@ -1391,6 +1547,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);
+21 -2
View File
@@ -153,6 +153,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
{
@@ -173,12 +177,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 */
@@ -199,6 +205,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 */
@@ -336,4 +344,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 */
+1 -1
View File
@@ -317,7 +317,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 */
+890
View File
@@ -0,0 +1,890 @@
/******************************************************************************
*
* Module Name: cvcompiler - ASL-/ASL+ converter functions
*
*****************************************************************************/
/*
* Copyright (C) 2000 - 2017, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#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;
}
}
+423
View File
@@ -0,0 +1,423 @@
/******************************************************************************
*
* Module Name: cvcompiler - ASL-/ASL+ converter functions
*
*****************************************************************************/
/*
* Copyright (C) 2000 - 2017, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#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;
}
+887
View File
@@ -0,0 +1,887 @@
/******************************************************************************
*
* Module Name: cvparser - Converter functions that are called from the AML
* parser.
*
*****************************************************************************/
/*
* Copyright (C) 2000 - 2017, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#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;
}
+4
View File
@@ -1518,6 +1518,10 @@ DtCompileIort (
}
IortNode->MappingCount = IdMappingNumber;
if (!IdMappingNumber)
{
IortNode->MappingOffset = 0;
}
/*
* Node length can be determined by DT_LENGTH option
+39 -33
View File
@@ -543,47 +543,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[] =
+1
View File
@@ -479,6 +479,7 @@ AcpiDbWalkForExecute (
Status = AcpiGetObjectInfo (ObjHandle, &ObjInfo);
if (ACPI_FAILURE (Status))
{
ACPI_FREE (Pathname);
return (Status);
}
+4 -1
View File
@@ -45,6 +45,7 @@
#include "accommon.h"
#include "amlcode.h"
#include "acdebug.h"
#include "acinterp.h"
#define _COMPONENT ACPI_CA_DEBUGGER
@@ -137,7 +138,7 @@ AcpiDbStartCommand (
*
* RETURN: Status
*
* DESCRIPTION: Called for AML_BREAK_POINT_OP
* DESCRIPTION: Called for AML_BREAKPOINT_OP
*
******************************************************************************/
@@ -404,7 +405,9 @@ AcpiDbSingleStep (
}
AcpiExExitInterpreter ();
Status = AcpiDbStartCommand (WalkState, Op);
AcpiExEnterInterpreter ();
/* User commands complete, continue execution of the interrupted method */
+30 -21
View File
@@ -46,6 +46,7 @@
#include "acparser.h"
#include "amlcode.h"
#include "acdebug.h"
#include "acconvert.h"
#define _COMPONENT ACPI_CA_DEBUGGER
@@ -171,27 +172,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
@@ -199,15 +200,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;
@@ -243,7 +244,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);
@@ -474,11 +475,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 ("(");
@@ -725,12 +726,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;
}
@@ -748,16 +751,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;
}
@@ -777,15 +781,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:
@@ -795,6 +801,9 @@ AcpiDmCloseOperator (
}
AcpiOsPrintf (")");
ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0);
return;
}
+3 -3
View File
@@ -103,7 +103,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);
@@ -217,7 +217,7 @@ AcpiDmDeferredParse (
{
case AML_BUFFER_OP:
case AML_PACKAGE_OP:
case AML_VAR_PACKAGE_OP:
case AML_VARIABLE_PACKAGE_OP:
switch (Op->Common.AmlOpcode)
{
@@ -228,7 +228,7 @@ AcpiDmDeferredParse (
ACPI_FREE (ExtraOp);
break;
case AML_VAR_PACKAGE_OP:
case AML_VARIABLE_PACKAGE_OP:
case AML_BUFFER_OP:
default:
+1 -1
View File
@@ -244,7 +244,7 @@ AcpiDmNamestring (
Name++;
break;
case AML_MULTI_NAME_PREFIX_OP:
case AML_MULTI_NAME_PREFIX:
SegCount = (UINT32) ACPI_GET8 (Name + 1);
Name += 2;
+52 -30
View File
@@ -48,6 +48,7 @@
#include "acinterp.h"
#include "acnamesp.h"
#include "acdebug.h"
#include "acconvert.h"
#define _COMPONENT ACPI_CA_DEBUGGER
@@ -70,7 +71,8 @@ AcpiDmPromoteSubtree (
static BOOLEAN
AcpiDmIsSwitchBlock (
ACPI_PARSE_OBJECT *Op);
ACPI_PARSE_OBJECT *Op,
char *Temp);
static BOOLEAN
AcpiDmIsCaseBlock (
@@ -441,6 +443,7 @@ AcpiDmFieldPredefinedDescription (
ACPI_CAST_PTR (char, Info->Description));
}
ACPI_FREE (Tag); /* Tag was allocated in AcpiGetTagPathname */
#endif
return;
}
@@ -716,15 +719,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;
@@ -747,12 +750,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;
@@ -881,8 +884,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;
@@ -923,6 +930,7 @@ AcpiDmDisassembleOneOp (
AcpiOsPrintf (")");
AcpiDmCommaIfFieldMember (Op);
ASL_CV_PRINT_ONE_COMMENT (Op, AML_COMMENT_END_NODE, NULL, 0);
break;
case AML_INT_CONNECTION_OP:
@@ -956,6 +964,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 */
@@ -977,7 +987,7 @@ AcpiDmDisassembleOneOp (
case AML_WHILE_OP:
if (AcpiDmIsSwitchBlock(Op))
if (Op->Common.DisasmOpcode == ACPI_DASM_SWITCH)
{
AcpiOsPrintf ("%s", "Switch");
break;
@@ -1006,15 +1016,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 */
@@ -1255,11 +1263,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.
*
******************************************************************************/
@@ -1267,6 +1277,7 @@ BOOLEAN
AcpiDmIsTempName (
ACPI_PARSE_OBJECT *Op)
{
ACPI_PARSE_OBJECT *CurrentOp;
char *Temp;
if (Op->Common.AmlOpcode != AML_NAME_OP)
@@ -1282,11 +1293,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);
}
/*******************************************************************************
@@ -1322,7 +1343,8 @@ AcpiDmIsTempName (
static BOOLEAN
AcpiDmIsSwitchBlock (
ACPI_PARSE_OBJECT *Op)
ACPI_PARSE_OBJECT *Op,
char *Temp)
{
ACPI_PARSE_OBJECT *OneOp;
ACPI_PARSE_OBJECT *StoreOp;
@@ -1355,7 +1377,7 @@ AcpiDmIsSwitchBlock (
return (FALSE);
}
if (strncmp((char *)(NamePathOp->Common.Aml), "_T_", 3))
if (strncmp((char *)(NamePathOp->Common.Aml), Temp, 4))
{
return (FALSE);
}
@@ -1411,7 +1433,7 @@ AcpiDmIsSwitchBlock (
TempOp = AcpiPsGetArg (CurrentOp, 0);
switch (TempOp->Common.AmlOpcode)
{
case (AML_LEQUAL_OP):
case (AML_LOGICAL_EQUAL_OP):
/* Ignore just the LEqual Op */
@@ -1433,7 +1455,7 @@ AcpiDmIsSwitchBlock (
break;
case (AML_LNOT_OP):
case (AML_LOGICAL_NOT_OP):
/*
* The Package will be the predicate of the Case statement.
@@ -1588,7 +1610,7 @@ AcpiDmIsCaseBlock (
switch (CurrentOp->Common.AmlOpcode)
{
case (AML_LEQUAL_OP):
case (AML_LOGICAL_EQUAL_OP):
/* Next child must be NamePath with string _T_ */
@@ -1601,12 +1623,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);
}
+8
View File
@@ -45,6 +45,7 @@
#include "accommon.h"
#include "amlcode.h"
#include "acdisasm.h"
#include "acconvert.h"
#ifdef ACPI_ASL_COMPILER
#include <acnamesp.h>
@@ -250,6 +251,7 @@ AcpiDmCommaIfListMember (
if (!Op->Common.Next)
{
ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0);
return (FALSE);
}
@@ -259,6 +261,7 @@ AcpiDmCommaIfListMember (
if (Op->Common.Next->Common.DisasmFlags & ACPI_PARSEOP_IGNORE)
{
ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0);
return (FALSE);
}
@@ -275,6 +278,7 @@ AcpiDmCommaIfListMember (
*/
if (!Op->Common.Next->Common.Next)
{
ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0);
return (FALSE);
}
}
@@ -282,6 +286,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);
}
@@ -290,6 +295,7 @@ AcpiDmCommaIfListMember (
if (!Op->Common.OperatorSymbol)
{
AcpiOsPrintf (", ");
ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0);
}
return (TRUE);
@@ -299,6 +305,8 @@ AcpiDmCommaIfListMember (
(Op->Common.Next->Common.DisasmFlags & ACPI_PARSEOP_PARAMETER_LIST))
{
AcpiOsPrintf (", ");
ASL_CV_PRINT_ONE_COMMENT (Op, AMLCOMMENT_INLINE, NULL, 0);
return (TRUE);
}
+83 -22
View File
@@ -46,6 +46,7 @@
#include "acparser.h"
#include "amlcode.h"
#include "acdebug.h"
#include "acconvert.h"
#define _COMPONENT ACPI_CA_DEBUGGER
@@ -63,6 +64,14 @@ AcpiDmEmitExternals (
{
return;
}
void
AcpiDmEmitExternal (
ACPI_PARSE_OBJECT *NameOp,
ACPI_PARSE_OBJECT *TypeOp)
{
return;
}
#endif
/* Local prototypes */
@@ -79,10 +88,6 @@ AcpiDmAscendingOp (
UINT32 Level,
void *Context);
static UINT32
AcpiDmBlockType (
ACPI_PARSE_OBJECT *Op);
/*******************************************************************************
*
@@ -248,7 +253,7 @@ AcpiDmWalkParseTree (
*
******************************************************************************/
static UINT32
UINT32
AcpiDmBlockType (
ACPI_PARSE_OBJECT *Op)
{
@@ -270,7 +275,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:
@@ -292,7 +297,7 @@ AcpiDmBlockType (
/*lint -fallthrough */
case AML_PACKAGE_OP:
case AML_VAR_PACKAGE_OP:
case AML_VARIABLE_PACKAGE_OP:
return (BLOCK_PAREN | BLOCK_BRACE);
@@ -304,7 +309,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 */
@@ -357,7 +362,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:
@@ -370,7 +375,7 @@ AcpiDmListType (
case AML_BUFFER_OP:
case AML_PACKAGE_OP:
case AML_VAR_PACKAGE_OP:
case AML_VARIABLE_PACKAGE_OP:
return (BLOCK_COMMA_LIST);
@@ -414,6 +419,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 */
@@ -528,7 +549,11 @@ AcpiDmDescendingOp (
/* Emit all External() declarations here */
AcpiDmEmitExternals ();
if (!AcpiGbl_DmEmitExternalOpcodes)
{
AcpiDmEmitExternals ();
}
return (AE_OK);
}
}
@@ -607,6 +632,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) ||
@@ -617,6 +648,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 */
@@ -661,7 +696,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 */
@@ -674,6 +709,7 @@ AcpiDmDescendingOp (
AcpiDmCheckForHardwareId (Op);
AcpiOsPrintf (", ");
ASL_CV_PRINT_ONE_COMMENT (Op, AML_NAMECOMMENT, NULL, 0);
break;
case AML_REGION_OP:
@@ -681,7 +717,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 */
@@ -723,7 +759,7 @@ AcpiDmDescendingOp (
case AML_DEVICE_OP:
case AML_THERMAL_ZONE_OP:
AcpiOsPrintf (")");
ASL_CV_CLOSE_PAREN (Op, Level);
break;
default:
@@ -817,7 +853,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 */
@@ -835,7 +871,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 */
@@ -903,6 +939,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)
{
@@ -915,7 +965,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);
}
@@ -976,12 +1036,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);
@@ -1031,7 +1091,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))
{
@@ -1071,7 +1131,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
@@ -1098,7 +1158,8 @@ AcpiDmAscendingOp (
else
{
ParentOp->Common.DisasmFlags |= ACPI_PARSEOP_EMPTY_TERMLIST;
AcpiOsPrintf (") {");
ASL_CV_CLOSE_PAREN (Op, Level);
AcpiOsPrintf ("{");
}
}
+1 -1
View File
@@ -358,7 +358,7 @@ AcpiDsExecEndControlOp (
break;
case AML_BREAK_POINT_OP:
case AML_BREAKPOINT_OP:
AcpiDbSignalBreakPoint (WalkState);
+2 -1
View File
@@ -728,7 +728,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
*
+7 -7
View File
@@ -113,7 +113,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
@@ -142,7 +142,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
@@ -411,7 +411,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;
}
@@ -795,9 +795,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
@@ -810,9 +810,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
+2 -2
View File
@@ -681,7 +681,7 @@ AcpiDsEvalDataObjectOperands (
break;
case AML_PACKAGE_OP:
case AML_VAR_PACKAGE_OP:
case AML_VARIABLE_PACKAGE_OP:
Status = AcpiDsBuildInternalPackageObj (
WalkState, Op, Length, &ObjDesc);
@@ -701,7 +701,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;
+3 -3
View File
@@ -297,8 +297,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))
{
@@ -589,7 +589,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
@@ -870,7 +870,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? */
+1 -1
View File
@@ -536,7 +536,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));
+1 -1
View File
@@ -543,7 +543,7 @@ AcpiDsLoad2EndOp (
Status = AcpiExCreateProcessor (WalkState);
break;
case AML_POWER_RES_OP:
case AML_POWER_RESOURCE_OP:
Status = AcpiExCreatePowerResource (WalkState);
break;
+8 -8
View File
@@ -274,7 +274,7 @@ AcpiExDoLogicalNumericOp (
switch (Opcode)
{
case AML_LAND_OP: /* LAnd (Integer0, Integer1) */
case AML_LOGICAL_AND_OP: /* LAnd (Integer0, Integer1) */
if (Integer0 && Integer1)
{
@@ -282,7 +282,7 @@ AcpiExDoLogicalNumericOp (
}
break;
case AML_LOR_OP: /* LOr (Integer0, Integer1) */
case AML_LOGICAL_OR_OP: /* LOr (Integer0, Integer1) */
if (Integer0 || Integer1)
{
@@ -400,7 +400,7 @@ AcpiExDoLogicalOp (
switch (Opcode)
{
case AML_LEQUAL_OP: /* LEqual (Operand0, Operand1) */
case AML_LOGICAL_EQUAL_OP: /* LEqual (Operand0, Operand1) */
if (Integer0 == Integer1)
{
@@ -408,7 +408,7 @@ AcpiExDoLogicalOp (
}
break;
case AML_LGREATER_OP: /* LGreater (Operand0, Operand1) */
case AML_LOGICAL_GREATER_OP: /* LGreater (Operand0, Operand1) */
if (Integer0 > Integer1)
{
@@ -416,7 +416,7 @@ AcpiExDoLogicalOp (
}
break;
case AML_LLESS_OP: /* LLess (Operand0, Operand1) */
case AML_LOGICAL_LESS_OP: /* LLess (Operand0, Operand1) */
if (Integer0 < Integer1)
{
@@ -449,7 +449,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 */
@@ -462,7 +462,7 @@ AcpiExDoLogicalOp (
}
break;
case AML_LGREATER_OP: /* LGreater (Operand0, Operand1) */
case AML_LOGICAL_GREATER_OP: /* LGreater (Operand0, Operand1) */
if (Compare > 0)
{
@@ -482,7 +482,7 @@ AcpiExDoLogicalOp (
}
break;
case AML_LLESS_OP: /* LLess (Operand0, Operand1) */
case AML_LOGICAL_LESS_OP: /* LLess (Operand0, Operand1) */
if (Compare > 0)
{
+2 -2
View File
@@ -141,7 +141,7 @@ AcpiExAllocateNameString (
{
/* Set up multi prefixes */
*TempPtr++ = AML_MULTI_NAME_PREFIX_OP;
*TempPtr++ = AML_MULTI_NAME_PREFIX;
*TempPtr++ = (char) NumNameSegs;
}
else if (2 == NumNameSegs)
@@ -385,7 +385,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));
+8 -7
View File
@@ -304,7 +304,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 */
@@ -435,7 +435,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
@@ -507,13 +507,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);
@@ -525,7 +525,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);
@@ -640,7 +640,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)
@@ -691,7 +691,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,
+2 -2
View File
@@ -330,7 +330,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);
@@ -376,7 +376,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) */
+5 -5
View File
@@ -133,7 +133,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);
@@ -146,7 +146,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);
@@ -160,7 +160,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);
@@ -173,7 +173,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);
@@ -187,7 +187,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);
+1 -1
View File
@@ -210,7 +210,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;
}
+2 -2
View File
@@ -435,7 +435,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
@@ -521,7 +521,7 @@ AcpiExStoreObjectToNode (
case ACPI_TYPE_STRING:
case ACPI_TYPE_BUFFER:
if ((WalkState->Opcode == AML_COPY_OP) ||
if ((WalkState->Opcode == AML_COPY_OBJECT_OP) ||
!ImplicitConversion)
{
/*
+1 -1
View File
@@ -113,7 +113,7 @@ AcpiExResolveObject (
/* For CopyObject, no further validation necessary */
if (WalkState->Opcode == AML_COPY_OP)
if (WalkState->Opcode == AML_COPY_OBJECT_OP)
{
break;
}
+9 -9
View File
@@ -107,7 +107,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)
/******************************************************************************
@@ -137,7 +137,7 @@ AcpiHwValidateIoRequest (
const ACPI_PORT_INFO *PortInfo;
ACPI_FUNCTION_TRACE (HwValidateIoRequest);
ACPI_FUNCTION_NAME (HwValidateIoRequest);
/* Supported widths are 8/16/32 */
@@ -166,14 +166,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 */
@@ -182,7 +182,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
@@ -212,7 +212,7 @@ AcpiHwValidateIoRequest (
}
}
return_ACPI_STATUS (AE_OK);
return (AE_OK);
}
@@ -221,7 +221,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
@@ -267,7 +267,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)
{
@@ -341,7 +341,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)
{
+1 -1
View File
@@ -505,7 +505,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 */
+2 -14
View File
@@ -302,24 +302,12 @@ AcpiNsSimpleRepair (
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,
+1 -5
View File
@@ -448,16 +448,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++;
+13 -18
View File
@@ -294,7 +294,7 @@ AcpiNsBuildInternalName (
}
else
{
InternalName[1] = AML_MULTI_NAME_PREFIX_OP;
InternalName[1] = AML_MULTI_NAME_PREFIX;
InternalName[2] = (char) NumSegments;
Result = &InternalName[3];
}
@@ -325,7 +325,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];
}
@@ -534,7 +534,7 @@ AcpiNsExternalizeName (
{
switch (InternalName[PrefixLength])
{
case AML_MULTI_NAME_PREFIX_OP:
case AML_MULTI_NAME_PREFIX:
/* <count> 4-byte names */
@@ -694,28 +694,23 @@ AcpiNsTerminate (
void)
{
ACPI_STATUS Status;
ACPI_OPERAND_OBJECT *Prev;
ACPI_OPERAND_OBJECT *Next;
ACPI_FUNCTION_TRACE (NsTerminate);
#ifdef ACPI_EXEC_APP
/* Delete any module-level code blocks */
Next = AcpiGbl_ModuleCodeList;
while (Next)
{
ACPI_OPERAND_OBJECT *Prev;
ACPI_OPERAND_OBJECT *Next;
/* 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);
}
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
+27 -3
View File
@@ -47,6 +47,7 @@
#include "amlcode.h"
#include "acnamesp.h"
#include "acdispat.h"
#include "acconvert.h"
#define _COMPONENT ACPI_PARSER
ACPI_MODULE_NAME ("psargs")
@@ -208,7 +209,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 */
@@ -369,7 +370,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;
}
@@ -381,7 +382,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;
}
@@ -543,6 +544,7 @@ AcpiPsGetNextField (
ACPI_FUNCTION_TRACE (PsGetNextField);
ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState);
Aml = ParserState->Aml;
/* Determine field type */
@@ -589,6 +591,7 @@ AcpiPsGetNextField (
/* Decode the field type */
ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState);
switch (Opcode)
{
case AML_INT_NAMEDFIELD_OP:
@@ -599,6 +602,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);
@@ -655,10 +675,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 */
@@ -675,6 +697,7 @@ AcpiPsGetNextField (
Opcode = ACPI_GET8 (ParserState->Aml);
ParserState->Aml++;
ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState);
switch (Opcode)
{
case AML_BYTE_OP: /* AML_BYTEDATA_ARG */
@@ -703,6 +726,7 @@ AcpiPsGetNextField (
/* Fill in bytelist data */
ASL_CV_CAPTURE_COMMENTS_ONLY (ParserState);
Arg->Named.Value.Size = BufferLength;
Arg->Named.Data = ParserState->Aml;
}
+36 -3
View File
@@ -55,6 +55,7 @@
#include "acparser.h"
#include "acdispat.h"
#include "amlcode.h"
#include "acconvert.h"
#define _COMPONENT ACPI_PARSER
ACPI_MODULE_NAME ("psloop")
@@ -142,6 +143,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))
@@ -249,7 +266,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) &&
@@ -487,6 +504,8 @@ AcpiPsParseLoop (
while ((ParserState->Aml < ParserState->AmlEnd) || (Op))
{
ASL_CV_CAPTURE_COMMENTS (WalkState);
AmlOpStart = ParserState->Aml;
if (!Op)
{
@@ -520,12 +539,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? */
+36
View File
@@ -45,6 +45,7 @@
#include "accommon.h"
#include "acparser.h"
#include "amlcode.h"
#include "acconvert.h"
#define _COMPONENT ACPI_PARSER
ACPI_MODULE_NAME ("psobject")
@@ -201,6 +202,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))
@@ -212,6 +214,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
*/
@@ -257,6 +271,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)
{
+7 -6
View File
@@ -72,7 +72,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
@@ -98,7 +98,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
@@ -116,7 +116,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
@@ -139,7 +139,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
@@ -152,7 +152,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
@@ -337,7 +337,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 !*/
};
+1 -1
View File
@@ -242,7 +242,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,
+3 -3
View File
@@ -114,7 +114,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 */
@@ -218,7 +218,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);
@@ -232,7 +232,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);
+8 -1
View File
@@ -45,6 +45,7 @@
#include "accommon.h"
#include "acparser.h"
#include "amlcode.h"
#include "acconvert.h"
#define _COMPONENT ACPI_PARSER
ACPI_MODULE_NAME ("pstree")
@@ -242,6 +243,7 @@ AcpiPsGetDepthNext (
Next = AcpiPsGetArg (Op, 0);
if (Next)
{
ASL_CV_LABEL_FILENODE (Next);
return (Next);
}
@@ -250,6 +252,7 @@ AcpiPsGetDepthNext (
Next = Op->Common.Next;
if (Next)
{
ASL_CV_LABEL_FILENODE (Next);
return (Next);
}
@@ -262,6 +265,8 @@ AcpiPsGetDepthNext (
Arg = AcpiPsGetArg (Parent, 0);
while (Arg && (Arg != Origin) && (Arg != Op))
{
ASL_CV_LABEL_FILENODE (Arg);
Arg = Arg->Common.Next;
}
@@ -276,6 +281,7 @@ AcpiPsGetDepthNext (
{
/* Found sibling of parent */
ASL_CV_LABEL_FILENODE (Parent->Common.Next);
return (Parent->Common.Next);
}
@@ -283,6 +289,7 @@ AcpiPsGetDepthNext (
Parent = Parent->Common.Parent;
}
ASL_CV_LABEL_FILENODE (Next);
return (Next);
}
@@ -331,7 +338,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);
+13
View File
@@ -45,6 +45,7 @@
#include "accommon.h"
#include "acparser.h"
#include "amlcode.h"
#include "acconvert.h"
#define _COMPONENT ACPI_PARSER
ACPI_MODULE_NAME ("psutils")
@@ -177,6 +178,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);
@@ -203,6 +215,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,
+44
View File
@@ -144,6 +144,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
@@ -210,6 +244,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
+1 -1
View File
@@ -77,7 +77,7 @@ AcpiOsCreateCache (
ACPI_FUNCTION_ENTRY ();
if (!CacheName || !ReturnCache || (ObjectSize < 16))
if (!CacheName || !ReturnCache || !ObjectSize)
{
return (AE_BAD_PARAMETER);
}
+1
View File
@@ -707,4 +707,5 @@ AcpiTracePoint (
ACPI_EXPORT_SYMBOL (AcpiTracePoint)
#endif
+10
View File
@@ -526,6 +526,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)
+6 -10
View File
@@ -101,7 +101,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
@@ -152,8 +152,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
@@ -190,17 +190,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
@@ -268,8 +264,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
+1
View File
@@ -79,6 +79,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
+204
View File
@@ -0,0 +1,204 @@
/******************************************************************************
*
* Module Name: acapps - common include for ACPI applications/tools
*
*****************************************************************************/
/*
* Copyright (C) 2000 - 2017, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#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 */
+14
View File
@@ -802,6 +802,11 @@ void
AcpiDmEmitExternals (
void);
void
AcpiDmEmitExternal (
ACPI_PARSE_OBJECT *NameOp,
ACPI_PARSE_OBJECT *TypeOp);
void
AcpiDmUnresolvedWarning (
UINT8 Type);
@@ -1097,4 +1102,13 @@ ACPI_STATUS
AdDisplayStatistics (
void);
/*
* dmwalk
*/
UINT32
AcpiDmBlockType (
ACPI_PARSE_OBJECT *Op);
#endif /* __ACDISASM_H__ */
+44
View File
@@ -374,6 +374,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
+100 -18
View File
@@ -54,7 +54,7 @@ typedef UINT32 ACPI_MUTEX_HANDLE;
/* Total number of aml opcodes defined */
#define AML_NUM_OPCODES 0x82
#define AML_NUM_OPCODES 0x83
/* Forward declarations */
@@ -906,21 +906,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 */
@@ -937,9 +971,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)
@@ -975,6 +1046,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];
@@ -1007,6 +1080,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
+35
View File
@@ -499,4 +499,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 */
+2
View File
@@ -91,6 +91,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)
@@ -225,6 +226,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)
+1 -1
View File
@@ -46,7 +46,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
#define ACPI_CA_VERSION 0x20170119
#define ACPI_CA_VERSION 0x20170224
#include "acconfig.h"
#include "actypes.h"
+11
View File
@@ -89,6 +89,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
/*
@@ -909,6 +910,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
{
+47 -57
View File
@@ -48,11 +48,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
@@ -63,17 +60,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
@@ -82,7 +77,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
@@ -93,7 +88,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
@@ -110,7 +105,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
@@ -122,18 +117,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
@@ -142,18 +137,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
@@ -175,22 +181,13 @@
#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
#define AML_DATA_REGION_OP (UINT16) 0x5b88 /* ACPI 2.0 */
/*
* 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
*/
@@ -244,6 +241,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
@@ -313,26 +311,19 @@
/*
* hash offsets
* 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 AML_EXTOP_HASH_OFFSET 22
#define AML_LNOT_HASH_OFFSET 19
/*
* opcode groups and types
* Opcode information flags
*/
#define OPGRP_NAMED 0x01
#define OPGRP_FIELD 0x02
#define OPGRP_BYTELIST 0x04
/*
* Opcode information
*/
/* Opcode flags */
#define AML_LOGICAL 0x0001
#define AML_LOGICAL_NUMERIC 0x0002
#define AML_MATH 0x0004
@@ -349,7 +340,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 */
@@ -367,7 +358,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 */
@@ -393,7 +384,7 @@
#define AML_TYPE_METHOD_CALL 0x10
/* Misc */
/* Miscellaneous types */
#define AML_TYPE_CREATE_FIELD 0x11
#define AML_TYPE_CREATE_OBJECT 0x12
@@ -403,7 +394,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
+2
View File
@@ -623,6 +623,7 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = {
{"ACPI_IORT_NODE", SRC_TYPE_STRUCT},
{"ACPI_IORT_ROOT_COMPLEX", SRC_TYPE_STRUCT},
{"ACPI_IORT_SMMU", SRC_TYPE_STRUCT},
{"ACPI_IORT_SMMU_GSI", SRC_TYPE_STRUCT},
{"ACPI_IORT_SMMU_V3", SRC_TYPE_STRUCT},
{"ACPI_IVRS_HEADER", SRC_TYPE_STRUCT},
{"ACPI_IVRS_HARDWARE", SRC_TYPE_STRUCT},
@@ -776,6 +777,7 @@ ACPI_STRING_TABLE LinuxSpecialStrings[] = {
{"\"platform/acenv.h\"", "<acpi/platform/acenv.h>", REPLACE_WHOLE_WORD},
{"\"platform/acenvex.h\"", "<acpi/platform/acenvex.h>", REPLACE_WHOLE_WORD},
{"\"acgcc.h\"", "<acpi/platform/acgcc.h>", REPLACE_WHOLE_WORD},
{"\"acintel.h\"", "<acpi/platform/acintel.h>", REPLACE_WHOLE_WORD},
{"\"aclinux.h\"", "<acpi/platform/aclinux.h>", REPLACE_WHOLE_WORD},
{"\"aclinuxex.h\"", "<acpi/platform/aclinuxex.h>", REPLACE_WHOLE_WORD},