Merge ACPICA 20150717.
This commit is contained in:
commit
4bfe3da642
@ -284,6 +284,7 @@ contrib/dev/acpica/components/debugger/dbhistry.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/debugger/dbinput.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/debugger/dbmethod.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/debugger/dbnames.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/debugger/dbobject.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/debugger/dbstats.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/debugger/dbtest.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/debugger/dbutils.c optional acpi acpi_debug
|
||||
@ -293,7 +294,6 @@ contrib/dev/acpica/components/disassembler/dmcstyle.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/disassembler/dmdeferred.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/disassembler/dmnames.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/disassembler/dmopcode.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/disassembler/dmobject.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/disassembler/dmresrc.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/disassembler/dmresrcl.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/disassembler/dmresrcl2.c optional acpi acpi_debug
|
||||
@ -302,6 +302,7 @@ contrib/dev/acpica/components/disassembler/dmutils.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/disassembler/dmwalk.c optional acpi acpi_debug
|
||||
contrib/dev/acpica/components/dispatcher/dsargs.c optional acpi
|
||||
contrib/dev/acpica/components/dispatcher/dscontrol.c optional acpi
|
||||
contrib/dev/acpica/components/dispatcher/dsdebug.c optional acpi
|
||||
contrib/dev/acpica/components/dispatcher/dsfield.c optional acpi
|
||||
contrib/dev/acpica/components/dispatcher/dsinit.c optional acpi
|
||||
contrib/dev/acpica/components/dispatcher/dsmethod.c optional acpi
|
||||
@ -437,6 +438,7 @@ contrib/dev/acpica/components/utilities/utlock.c optional acpi
|
||||
contrib/dev/acpica/components/utilities/utmath.c optional acpi
|
||||
contrib/dev/acpica/components/utilities/utmisc.c optional acpi
|
||||
contrib/dev/acpica/components/utilities/utmutex.c optional acpi
|
||||
contrib/dev/acpica/components/utilities/utnonansi.c optional acpi
|
||||
contrib/dev/acpica/components/utilities/utobject.c optional acpi
|
||||
contrib/dev/acpica/components/utilities/utosi.c optional acpi
|
||||
contrib/dev/acpica/components/utilities/utownerid.c optional acpi
|
||||
|
@ -20,10 +20,10 @@ fulldirs="common compiler components include os_specific"
|
||||
stripdirs="generate libraries tests tools"
|
||||
stripfiles="Makefile README accygwin.h acdragonfly.h acdragonflyex.h \
|
||||
acefi.h acefiex.h achaiku.h acintel.h aclinux.h aclinuxex.h \
|
||||
acmacosx.h acmsvc.h acnetbsd.h acos2.h acwin.h acwin64.h \
|
||||
new_table.txt osbsdtbl.c osefitbl.c osefixf.c osfreebsdtbl.c \
|
||||
oslinuxtbl.c osunixdir.c osunixmap.c oswindir.c oswintbl.c \
|
||||
oswinxf.c readme.txt utclib.c"
|
||||
acmacosx.h acmsvc.h acmsvcex.h acnetbsd.h acos2.h acwin.h \
|
||||
acwin64.h acwinex.h new_table.txt osbsdtbl.c osefitbl.c \
|
||||
osefixf.c osfreebsdtbl.c oslinuxtbl.c osunixdir.c osunixmap.c \
|
||||
oswindir.c oswintbl.c oswinxf.c readme.txt utclib.c"
|
||||
|
||||
# include files to canonify
|
||||
src_headers="acapps.h acbuffer.h acclib.h accommon.h acconfig.h \
|
||||
|
@ -1,3 +1,86 @@
|
||||
----------------------------------------
|
||||
17 July 2015. Summary of changes for version 20150717:
|
||||
|
||||
1) ACPICA kernel-resident subsystem:
|
||||
|
||||
Improved the partitioning between the Debugger and Disassembler
|
||||
components. This allows the Debugger to be used standalone within kernel
|
||||
code without the Disassembler (which is used for single stepping also).
|
||||
This renames and moves one file, dmobject.c to dbobject.c. Lv Zheng.
|
||||
|
||||
Debugger: Implemented a new command to trace the execution of control
|
||||
methods (Trace). This is especially useful for the in-kernel version of
|
||||
the debugger when file I/O may not be available for method trace output.
|
||||
See the ACPICA reference for more information. Lv Zheng.
|
||||
|
||||
Moved all C library prototypes (used for the local versions of these
|
||||
functions when requested) to a new header, acclib.h
|
||||
Cleaned up the use of non-ANSI C library functions. These functions are
|
||||
implemented locally in ACPICA. Moved all such functions to a common
|
||||
source file, utnonansi.c
|
||||
|
||||
Debugger: Fixed a problem with the "!!" command (get last command
|
||||
executed) where the debugger could enter an infinite loop and eventually
|
||||
crash.
|
||||
|
||||
Removed the use of local macros that were used for some of the standard C
|
||||
library functions to automatically cast input parameters. This mostly
|
||||
affected the is* functions where the input parameter is defined to be an
|
||||
int. This required a few modifications to the main ACPICA source code to
|
||||
provide casting for these functions and eliminate possible compiler
|
||||
warnings for these parameters.
|
||||
|
||||
Across the source code, added additional status/error checking to resolve
|
||||
issues discovered by static source code analysis tools such as Coverity.
|
||||
|
||||
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: 100.9K Code, 24.5K Data, 125.4K Total
|
||||
Debug Version: 197.8K Code, 81.5K Data, 279.3K Total
|
||||
Previous Release:
|
||||
Non-Debug Version: 100.6K Code, 27.6K Data, 128.2K Total
|
||||
Debug Version: 196.2K Code, 81.0K Data, 277.2K Total
|
||||
|
||||
|
||||
2) iASL Compiler/Disassembler and Tools:
|
||||
|
||||
iASL: Fixed a regression where the device map file feature no longer
|
||||
worked properly when used in conjunction with the disassembler. It only
|
||||
worked properly with the compiler itself.
|
||||
|
||||
iASL: Implemented a new warning for method LocalX variables that are set
|
||||
but never used (similar to a C compiler such as gcc). This also applies
|
||||
to ArgX variables that are not defined by the parent method, and are
|
||||
instead (legally) used as local variables.
|
||||
|
||||
iASL/Preprocessor: Finished the pass-through of line numbers from the
|
||||
preprocessor to the compiler. This ensures that compiler errors/warnings
|
||||
have the correct original line numbers and filenames, regardless of any
|
||||
#include files.
|
||||
|
||||
iASL/Preprocessor: Fixed a couple of issues with comment handling and the
|
||||
pass-through of comments to the preprocessor output file (which becomes
|
||||
the compiler input file). Also fixed a problem with // comments that
|
||||
appear after a math expression.
|
||||
|
||||
iASL: Added support for the TCPA server table to the table compiler and
|
||||
template generator. (The client table was already previously supported)
|
||||
|
||||
iASL/Preprocessor: Added a permanent #define of the symbol "__IASL__" to
|
||||
identify the iASL compiler.
|
||||
|
||||
Cleaned up the use of the macros NEGATIVE and POSITIVE which were defined
|
||||
multiple times. The new names are ACPI_SIGN_NEGATIVE and
|
||||
ACPI_SIGN_POSITIVE.
|
||||
|
||||
AcpiHelp: Update to expand help messages for the iASL preprocessor
|
||||
directives.
|
||||
|
||||
|
||||
----------------------------------------
|
||||
19 June 2015. Summary of changes for version 20150619:
|
||||
|
||||
|
@ -187,6 +187,7 @@ AdInitialize (
|
||||
AcpiGbl_RootTableList.CurrentTableCount = 0;
|
||||
AcpiGbl_RootTableList.Tables = LocalTables;
|
||||
|
||||
AcpiGbl_PreviousOp = NULL;
|
||||
return (Status);
|
||||
}
|
||||
|
||||
@ -796,8 +797,8 @@ AdStoreTable (
|
||||
|
||||
AcpiTbInitTableDescriptor (TableDesc, ACPI_PTR_TO_PHYSADDR (Table),
|
||||
ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL, Table);
|
||||
AcpiTbValidateTable (TableDesc);
|
||||
return (AE_OK);
|
||||
Status = AcpiTbValidateTable (TableDesc);
|
||||
return (Status);
|
||||
}
|
||||
|
||||
|
||||
@ -892,7 +893,7 @@ AdParseTable (
|
||||
|
||||
/* Create the root object */
|
||||
|
||||
AcpiGbl_ParseOpRoot = AcpiPsCreateScopeOp ();
|
||||
AcpiGbl_ParseOpRoot = AcpiPsCreateScopeOp (AmlStart);
|
||||
if (!AcpiGbl_ParseOpRoot)
|
||||
{
|
||||
return (AE_NO_MEMORY);
|
||||
|
@ -650,7 +650,7 @@ AcpiGetTagPathname (
|
||||
|
||||
/* Get the full pathname to the parent buffer */
|
||||
|
||||
RequiredSize = AcpiNsGetPathnameLength (BufferNode);
|
||||
RequiredSize = AcpiNsBuildNormalizedPath (BufferNode, NULL, 0, FALSE);
|
||||
if (!RequiredSize)
|
||||
{
|
||||
return (NULL);
|
||||
@ -662,12 +662,8 @@ AcpiGetTagPathname (
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
Status = AcpiNsBuildExternalPath (BufferNode, RequiredSize, Pathname);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
ACPI_FREE (Pathname);
|
||||
return (NULL);
|
||||
}
|
||||
(void) AcpiNsBuildNormalizedPath (BufferNode, Pathname,
|
||||
RequiredSize, FALSE);
|
||||
|
||||
/*
|
||||
* Create the full path to the resource and tag by: remove the buffer name,
|
||||
|
@ -368,7 +368,7 @@ const ACPI_DMTABLE_DATA AcpiDmTableData[] =
|
||||
{ACPI_SIG_SPMI, AcpiDmTableInfoSpmi, NULL, NULL, TemplateSpmi},
|
||||
{ACPI_SIG_SRAT, NULL, AcpiDmDumpSrat, DtCompileSrat, TemplateSrat},
|
||||
{ACPI_SIG_STAO, NULL, AcpiDmDumpStao, DtCompileStao, TemplateStao},
|
||||
{ACPI_SIG_TCPA, AcpiDmTableInfoTcpa, NULL, NULL, TemplateTcpa},
|
||||
{ACPI_SIG_TCPA, NULL, AcpiDmDumpTcpa, DtCompileTcpa, TemplateTcpa},
|
||||
{ACPI_SIG_TPM2, AcpiDmTableInfoTpm2, NULL, NULL, TemplateTpm2},
|
||||
{ACPI_SIG_UEFI, AcpiDmTableInfoUefi, NULL, DtCompileUefi, TemplateUefi},
|
||||
{ACPI_SIG_VRTC, AcpiDmTableInfoVrtc, AcpiDmDumpVrtc, DtCompileVrtc, TemplateVrtc},
|
||||
@ -500,7 +500,11 @@ AcpiDmDumpDataTable (
|
||||
if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_FACS))
|
||||
{
|
||||
Length = Table->Length;
|
||||
AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFacs);
|
||||
Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoFacs);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (ACPI_VALIDATE_RSDP_SIG (Table->Signature))
|
||||
{
|
||||
@ -561,7 +565,11 @@ AcpiDmDumpDataTable (
|
||||
{
|
||||
/* Simple table, just walk the info table */
|
||||
|
||||
AcpiDmDumpTable (Length, 0, Table, 0, TableData->TableInfo);
|
||||
Status = AcpiDmDumpTable (Length, 0, Table, 0, TableData->TableInfo);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -720,6 +728,7 @@ AcpiDmDumpTable (
|
||||
const AH_TABLE *TableData;
|
||||
const char *Name;
|
||||
BOOLEAN LastOutputBlankLine = FALSE;
|
||||
ACPI_STATUS Status;
|
||||
char RepairedName[8];
|
||||
|
||||
|
||||
@ -1114,8 +1123,13 @@ AcpiDmDumpTable (
|
||||
/* Generic Address Structure */
|
||||
|
||||
AcpiOsPrintf (STRING_FORMAT, "Generic Address Structure");
|
||||
AcpiDmDumpTable (TableLength, CurrentOffset, Target,
|
||||
Status = AcpiDmDumpTable (TableLength, CurrentOffset, Target,
|
||||
sizeof (ACPI_GENERIC_ADDRESS), AcpiDmTableInfoGas);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
|
||||
AcpiOsPrintf ("\n");
|
||||
LastOutputBlankLine = TRUE;
|
||||
break;
|
||||
@ -1250,8 +1264,13 @@ AcpiDmDumpTable (
|
||||
AcpiOsPrintf (STRING_FORMAT,
|
||||
"Hardware Error Notification Structure");
|
||||
|
||||
AcpiDmDumpTable (TableLength, CurrentOffset, Target,
|
||||
Status = AcpiDmDumpTable (TableLength, CurrentOffset, Target,
|
||||
sizeof (ACPI_HEST_NOTIFY), AcpiDmTableInfoHestNotify);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
|
||||
AcpiOsPrintf ("\n");
|
||||
LastOutputBlankLine = TRUE;
|
||||
break;
|
||||
@ -1275,8 +1294,13 @@ AcpiDmDumpTable (
|
||||
AcpiOsPrintf (STRING_FORMAT,
|
||||
"IORT Memory Access Properties");
|
||||
|
||||
AcpiDmDumpTable (TableLength, CurrentOffset, Target,
|
||||
Status = AcpiDmDumpTable (TableLength, CurrentOffset, Target,
|
||||
sizeof (ACPI_IORT_MEMORY_ACCESS), AcpiDmTableInfoIortAcc);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
|
||||
LastOutputBlankLine = TRUE;
|
||||
break;
|
||||
|
||||
|
@ -208,11 +208,16 @@ AcpiDmDumpRsdp (
|
||||
ACPI_TABLE_RSDP *Rsdp = ACPI_CAST_PTR (ACPI_TABLE_RSDP, Table);
|
||||
UINT32 Length = sizeof (ACPI_RSDP_COMMON);
|
||||
UINT8 Checksum;
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
/* Dump the common ACPI 1.0 portion */
|
||||
|
||||
AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp1);
|
||||
Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp1);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Length);
|
||||
}
|
||||
|
||||
/* Validate the first checksum */
|
||||
|
||||
@ -229,7 +234,11 @@ AcpiDmDumpRsdp (
|
||||
if (Rsdp->Revision > 0)
|
||||
{
|
||||
Length = Rsdp->Length;
|
||||
AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp2);
|
||||
Status = AcpiDmDumpTable (Length, 0, Table, 0, AcpiDmTableInfoRsdp2);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Length);
|
||||
}
|
||||
|
||||
/* Validate the extended checksum over entire RSDP */
|
||||
|
||||
@ -347,37 +356,59 @@ void
|
||||
AcpiDmDumpFadt (
|
||||
ACPI_TABLE_HEADER *Table)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
/* Always dump the minimum FADT revision 1 fields (ACPI 1.0) */
|
||||
|
||||
AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt1);
|
||||
Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt1);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Check for FADT revision 2 fields (ACPI 1.0B MS extensions) */
|
||||
|
||||
if ((Table->Length > ACPI_FADT_V1_SIZE) &&
|
||||
(Table->Length <= ACPI_FADT_V2_SIZE))
|
||||
{
|
||||
AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt2);
|
||||
Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt2);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for FADT revision 3/4 fields and up (ACPI 2.0+ extended data) */
|
||||
|
||||
else if (Table->Length > ACPI_FADT_V2_SIZE)
|
||||
{
|
||||
AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt3);
|
||||
Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt3);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Check for FADT revision 5 fields and up (ACPI 5.0+) */
|
||||
|
||||
if (Table->Length > ACPI_FADT_V3_SIZE)
|
||||
{
|
||||
AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt5);
|
||||
Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt5);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for FADT revision 6 fields and up (ACPI 6.0+) */
|
||||
|
||||
if (Table->Length > ACPI_FADT_V3_SIZE)
|
||||
{
|
||||
AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt6);
|
||||
Status = AcpiDmDumpTable (Table->Length, 0, Table, 0, AcpiDmTableInfoFadt6);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1136,7 +1167,7 @@ AcpiDmDumpDrtm (
|
||||
AcpiDmTableInfoDrtm1);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
Offset += ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST, Resources);
|
||||
@ -1164,13 +1195,9 @@ AcpiDmDumpDrtm (
|
||||
|
||||
DrtmDps = ACPI_ADD_PTR (ACPI_DRTM_DPS_ID, Table, Offset);
|
||||
AcpiOsPrintf ("\n");
|
||||
Status = AcpiDmDumpTable (Table->Length, Offset,
|
||||
(void) AcpiDmDumpTable (Table->Length, Offset,
|
||||
DrtmDps, sizeof (ACPI_DRTM_DPS_ID),
|
||||
AcpiDmTableInfoDrtm2);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1794,6 +1821,10 @@ AcpiDmDumpIort (
|
||||
Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
|
||||
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
|
||||
Length, AcpiDmTableInfoIort3a);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
NodeOffset = IortSmmu->ContextInterruptOffset;
|
||||
for (i = 0; i < IortSmmu->ContextInterruptCount; i++)
|
||||
@ -1801,6 +1832,10 @@ AcpiDmDumpIort (
|
||||
Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
|
||||
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
|
||||
8, AcpiDmTableInfoIort3b);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
NodeOffset += 8;
|
||||
}
|
||||
|
||||
@ -1810,6 +1845,10 @@ AcpiDmDumpIort (
|
||||
Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
|
||||
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
|
||||
8, AcpiDmTableInfoIort3c);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
NodeOffset += 8;
|
||||
}
|
||||
}
|
||||
@ -1830,6 +1869,10 @@ AcpiDmDumpIort (
|
||||
Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
|
||||
ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
|
||||
Length, AcpiDmTableInfoIortMap);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
NodeOffset += Length;
|
||||
}
|
||||
|
||||
@ -2004,6 +2047,10 @@ AcpiDmDumpIvrs (
|
||||
|
||||
Status = AcpiDmDumpTable (Table->Length, EntryOffset,
|
||||
DeviceEntry, EntryLength, InfoTable);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
EntryOffset += EntryLength;
|
||||
DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, DeviceEntry,
|
||||
@ -2687,6 +2734,11 @@ AcpiDmDumpNfit (
|
||||
Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset,
|
||||
&Interleave->LineOffset[i],
|
||||
sizeof (UINT32), AcpiDmTableInfoNfit2a);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
FieldOffset += sizeof (UINT32);
|
||||
}
|
||||
break;
|
||||
@ -2715,6 +2767,11 @@ AcpiDmDumpNfit (
|
||||
Status = AcpiDmDumpTable (Table->Length, Offset + FieldOffset,
|
||||
&Hint->HintAddress[i],
|
||||
sizeof (UINT64), AcpiDmTableInfoNfit6a);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
FieldOffset += sizeof (UINT64);
|
||||
}
|
||||
break;
|
||||
@ -3126,7 +3183,7 @@ void
|
||||
AcpiDmDumpSlic (
|
||||
ACPI_TABLE_HEADER *Table)
|
||||
{
|
||||
AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table,
|
||||
(void) AcpiDmDumpTable (Table->Length, sizeof (ACPI_TABLE_HEADER), Table,
|
||||
Table->Length - sizeof (*Table), AcpiDmTableInfoSlic);
|
||||
}
|
||||
|
||||
@ -3356,6 +3413,77 @@ AcpiDmDumpStao (
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmDumpTcpa
|
||||
*
|
||||
* PARAMETERS: Table - A TCPA table
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Format the contents of a TCPA.
|
||||
*
|
||||
* NOTE: There are two versions of the table with the same signature:
|
||||
* the client version and the server version. The common
|
||||
* PlatformClass field is used to differentiate the two types of
|
||||
* tables.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiDmDumpTcpa (
|
||||
ACPI_TABLE_HEADER *Table)
|
||||
{
|
||||
UINT32 Offset = sizeof (ACPI_TABLE_TCPA_HDR);
|
||||
ACPI_TABLE_TCPA_HDR *CommonHeader = ACPI_CAST_PTR (
|
||||
ACPI_TABLE_TCPA_HDR, Table);
|
||||
ACPI_TABLE_TCPA_HDR *SubTable = ACPI_ADD_PTR (
|
||||
ACPI_TABLE_TCPA_HDR, Table, Offset);
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
/* Main table */
|
||||
|
||||
Status = AcpiDmDumpTable (Table->Length, 0, Table,
|
||||
0, AcpiDmTableInfoTcpaHdr);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Examine the PlatformClass field to determine the table type.
|
||||
* Either a client or server table. Only one.
|
||||
*/
|
||||
switch (CommonHeader->PlatformClass)
|
||||
{
|
||||
case ACPI_TCPA_CLIENT_TABLE:
|
||||
|
||||
Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
|
||||
Table->Length - Offset, AcpiDmTableInfoTcpaClient);
|
||||
break;
|
||||
|
||||
case ACPI_TCPA_SERVER_TABLE:
|
||||
|
||||
Status = AcpiDmDumpTable (Table->Length, Offset, SubTable,
|
||||
Table->Length - Offset, AcpiDmTableInfoTcpaServer);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
AcpiOsPrintf ("\n**** Unknown TCPA Platform Class 0x%X\n",
|
||||
CommonHeader->PlatformClass);
|
||||
Status = AE_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
AcpiOsPrintf ("\n**** Cannot disassemble TCPA table\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmDumpVrtc
|
||||
@ -3497,10 +3625,6 @@ AcpiDmDumpWpbt (
|
||||
|
||||
/* Dump the arguments buffer */
|
||||
|
||||
AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength,
|
||||
(void) AcpiDmDumpTable (Table->Length, 0, Table, ArgumentsLength,
|
||||
AcpiDmTableInfoWpbt0);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -113,7 +113,7 @@
|
||||
#define ACPI_SPMI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SPMI,f)
|
||||
#define ACPI_SRAT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_SRAT,f)
|
||||
#define ACPI_STAO_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_STAO,f)
|
||||
#define ACPI_TCPA_CLIENT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_CLIENT,f)
|
||||
#define ACPI_TCPA_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_HDR,f)
|
||||
#define ACPI_TPM2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TPM2,f)
|
||||
#define ACPI_UEFI_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_UEFI,f)
|
||||
#define ACPI_WAET_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_WAET,f)
|
||||
@ -230,6 +230,8 @@
|
||||
#define ACPI_SRAT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_MEM_AFFINITY,f)
|
||||
#define ACPI_SRAT2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f)
|
||||
#define ACPI_SRAT3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_GICC_AFFINITY,f)
|
||||
#define ACPI_TCPA_CLIENT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_CLIENT,f)
|
||||
#define ACPI_TCPA_SERVER_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_TABLE_TCPA_SERVER,f)
|
||||
#define ACPI_VRTC0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_VRTC_ENTRY,f)
|
||||
#define ACPI_WDAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WDAT_ENTRY,f)
|
||||
|
||||
@ -2613,16 +2615,53 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoStaoStr[] =
|
||||
*
|
||||
* TCPA - Trusted Computing Platform Alliance table (Client)
|
||||
*
|
||||
* NOTE: There are two versions of the table with the same signature --
|
||||
* the client version and the server version. The common PlatformClass
|
||||
* field is used to differentiate the two types of tables.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoTcpa[] =
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaHdr[] =
|
||||
{
|
||||
{ACPI_DMT_UINT16, ACPI_TCPA_OFFSET (PlatformClass), "Platform Class", 0},
|
||||
ACPI_DMT_TERMINATOR
|
||||
};
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaClient[] =
|
||||
{
|
||||
{ACPI_DMT_UINT16, ACPI_TCPA_CLIENT_OFFSET (PlatformClass), "Platform Class", 0},
|
||||
{ACPI_DMT_UINT32, ACPI_TCPA_CLIENT_OFFSET (MinimumLogLength), "Min Event Log Length", 0},
|
||||
{ACPI_DMT_UINT64, ACPI_TCPA_CLIENT_OFFSET (LogAddress), "Event Log Address", 0},
|
||||
ACPI_DMT_TERMINATOR
|
||||
};
|
||||
|
||||
ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[] =
|
||||
{
|
||||
{ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (Reserved), "Reserved", 0},
|
||||
{ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (MinimumLogLength), "Min Event Log Length", 0},
|
||||
{ACPI_DMT_UINT64, ACPI_TCPA_SERVER_OFFSET (LogAddress), "Event Log Address", 0},
|
||||
{ACPI_DMT_UINT16, ACPI_TCPA_SERVER_OFFSET (SpecRevision), "Specification Revision", 0},
|
||||
{ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Device Flags (decoded below)", DT_FLAG},
|
||||
{ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Pci Device", 0},
|
||||
{ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Bus is Pnp", 0},
|
||||
{ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (DeviceFlags), "Address Valid", 0},
|
||||
{ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Interrupt Flags (decoded below)", DT_FLAG},
|
||||
{ACPI_DMT_FLAG0, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Mode", 0},
|
||||
{ACPI_DMT_FLAG1, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Polarity", 0},
|
||||
{ACPI_DMT_FLAG2, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "GPE SCI Triggered", 0},
|
||||
{ACPI_DMT_FLAG3, ACPI_TCPA_SERVER_OFFSET (InterruptFlags), "Global System Interrupt", 0},
|
||||
{ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (GpeNumber), "Gpe Number", 0},
|
||||
{ACPI_DMT_UINT24, ACPI_TCPA_SERVER_OFFSET (Reserved2[0]), "Reserved", 0},
|
||||
{ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (GlobalInterrupt), "Global Interrupt", 0},
|
||||
{ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (Address), "Address", 0},
|
||||
{ACPI_DMT_UINT32, ACPI_TCPA_SERVER_OFFSET (Reserved3), "Reserved", 0},
|
||||
{ACPI_DMT_GAS, ACPI_TCPA_SERVER_OFFSET (ConfigAddress), "Configuration Address", 0},
|
||||
{ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Group), "Pci Group", 0},
|
||||
{ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Bus), "Pci Bus", 0},
|
||||
{ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Device), "Pci Device", 0},
|
||||
{ACPI_DMT_UINT8, ACPI_TCPA_SERVER_OFFSET (Function), "Pci Function", 0},
|
||||
ACPI_DMT_TERMINATOR
|
||||
};
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
|
@ -177,6 +177,11 @@ FlCheckForAscii (
|
||||
/* Open file in text mode so file offset is always accurate */
|
||||
|
||||
Handle = fopen (Filename, "rb");
|
||||
if (!Handle)
|
||||
{
|
||||
perror ("Could not open input file");
|
||||
return (AE_ERROR);
|
||||
}
|
||||
|
||||
Status.Line = 1;
|
||||
Status.Offset = 0;
|
||||
|
@ -100,6 +100,10 @@ CmDoCompile (
|
||||
Event = UtBeginEvent ("Preprocess input file");
|
||||
if (Gbl_PreprocessFlag)
|
||||
{
|
||||
/* Enter compiler name as a #define */
|
||||
|
||||
PrAddDefine (ASL_DEFINE, "", FALSE);
|
||||
|
||||
/* Preprocessor */
|
||||
|
||||
PrDoPreprocess ();
|
||||
|
@ -52,6 +52,7 @@
|
||||
#define AML_DISASSEMBLER_NAME "AML/ASL+ Disassembler"
|
||||
#define ASL_INVOCATION_NAME "iasl"
|
||||
#define ASL_CREATOR_ID "INTL"
|
||||
#define ASL_DEFINE "__IASL__"
|
||||
|
||||
#define ASL_COMPLIANCE "Supports ACPI Specification Revision 6.0"
|
||||
|
||||
@ -155,12 +156,6 @@
|
||||
#define ACPI_COMPILER_RESERVED_NAME (ACPI_UINT32_MAX - 3)
|
||||
|
||||
|
||||
/* String to Integer conversion */
|
||||
|
||||
#define NEGATIVE 1
|
||||
#define POSITIVE 0
|
||||
|
||||
|
||||
/* Helper macros for resource tag creation */
|
||||
|
||||
#define RsCreateMultiBitField \
|
||||
|
@ -546,6 +546,26 @@ FlOpenMiscOutputFiles (
|
||||
char *Filename;
|
||||
|
||||
|
||||
/* Create/Open a map file if requested */
|
||||
|
||||
if (Gbl_MapfileFlag)
|
||||
{
|
||||
Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_MAP);
|
||||
if (!Filename)
|
||||
{
|
||||
AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
|
||||
0, 0, 0, 0, NULL, NULL);
|
||||
return (AE_ERROR);
|
||||
}
|
||||
|
||||
/* Open the hex file, text mode (closed at compiler exit) */
|
||||
|
||||
FlOpenFile (ASL_FILE_MAP_OUTPUT, Filename, "w+t");
|
||||
|
||||
AslCompilerSignon (ASL_FILE_MAP_OUTPUT);
|
||||
AslCompilerFileHeader (ASL_FILE_MAP_OUTPUT);
|
||||
}
|
||||
|
||||
/* All done for disassembler */
|
||||
|
||||
if (Gbl_FileType == ASL_INPUT_TYPE_ACPI_TABLE)
|
||||
@ -812,26 +832,6 @@ FlOpenMiscOutputFiles (
|
||||
AslCompilerFileHeader (ASL_FILE_NAMESPACE_OUTPUT);
|
||||
}
|
||||
|
||||
/* Create/Open a map file if requested */
|
||||
|
||||
if (Gbl_MapfileFlag)
|
||||
{
|
||||
Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_MAP);
|
||||
if (!Filename)
|
||||
{
|
||||
AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
|
||||
0, 0, 0, 0, NULL, NULL);
|
||||
return (AE_ERROR);
|
||||
}
|
||||
|
||||
/* Open the hex file, text mode (closed at compiler exit) */
|
||||
|
||||
FlOpenFile (ASL_FILE_MAP_OUTPUT, Filename, "w+t");
|
||||
|
||||
AslCompilerSignon (ASL_FILE_MAP_OUTPUT);
|
||||
AslCompilerFileHeader (ASL_FILE_MAP_OUTPUT);
|
||||
}
|
||||
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
|
@ -119,8 +119,73 @@ LkIsObjectUsed (
|
||||
{
|
||||
ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle);
|
||||
ACPI_NAMESPACE_NODE *Next;
|
||||
ASL_METHOD_LOCAL *MethodLocals;
|
||||
ASL_METHOD_LOCAL *MethodArgs;
|
||||
UINT32 i;
|
||||
|
||||
|
||||
if (Node->Type == ACPI_TYPE_METHOD)
|
||||
{
|
||||
if (!Node->Op || !Node->MethodLocals)
|
||||
{
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
MethodLocals = (ASL_METHOD_LOCAL *) Node->MethodLocals;
|
||||
MethodArgs = (ASL_METHOD_LOCAL *) Node->MethodArgs;
|
||||
|
||||
/*
|
||||
* Analysis of LocalX variables
|
||||
*/
|
||||
for (i = 0; i < ACPI_METHOD_NUM_LOCALS; i++)
|
||||
{
|
||||
/* Warn for Locals that are set but never referenced */
|
||||
|
||||
if ((MethodLocals[i].Flags & ASL_LOCAL_INITIALIZED) &&
|
||||
(!(MethodLocals[i].Flags & ASL_LOCAL_REFERENCED)))
|
||||
{
|
||||
sprintf (MsgBuffer, "Local%u", i);
|
||||
AslError (ASL_WARNING, ASL_MSG_LOCAL_NOT_USED,
|
||||
MethodLocals[i].Op, MsgBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Analysis of ArgX variables (standard method arguments,
|
||||
* and remaining unused ArgX can also be used as locals)
|
||||
*/
|
||||
for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++)
|
||||
{
|
||||
if (MethodArgs[i].Flags & ASL_ARG_IS_LOCAL)
|
||||
{
|
||||
/* Warn if ArgX is being used as a local, but not referenced */
|
||||
|
||||
if ((MethodArgs[i].Flags & ASL_ARG_INITIALIZED) &&
|
||||
(!(MethodArgs[i].Flags & ASL_ARG_REFERENCED)))
|
||||
{
|
||||
sprintf (MsgBuffer, "Arg%u", i);
|
||||
AslError (ASL_WARNING, ASL_MSG_ARG_AS_LOCAL_NOT_USED,
|
||||
MethodArgs[i].Op, MsgBuffer);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Remark if a normal method ArgX is not referenced.
|
||||
* We ignore the predefined methods since often, not
|
||||
* all arguments are needed or used.
|
||||
*/
|
||||
if ((Node->Name.Ascii[0] != '_') &&
|
||||
(!(MethodArgs[i].Flags & ASL_ARG_REFERENCED)))
|
||||
{
|
||||
sprintf (MsgBuffer, "Arg%u", i);
|
||||
AslError (ASL_REMARK, ASL_MSG_ARG_NOT_USED,
|
||||
MethodArgs[i].Op, MsgBuffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Referenced flag is set during the namespace xref */
|
||||
|
||||
if (Node->Flags & ANOBJ_IS_REFERENCED)
|
||||
|
@ -235,7 +235,11 @@ const char *AslCompilerMsgs [] =
|
||||
/* ASL_MSG_BUFFER_ALLOCATION */ "Could not allocate line buffer",
|
||||
/* ASL_MSG_MISSING_DEPENDENCY */ "Missing dependency",
|
||||
/* ASL_MSG_ILLEGAL_FORWARD_REF */ "Illegal forward reference within a method",
|
||||
/* ASL_MSG_ILLEGAL_METHOD_REF */ "Illegal reference across two methods"
|
||||
/* ASL_MSG_ILLEGAL_METHOD_REF */ "Illegal reference across two methods",
|
||||
/* ASL_MSG_LOCAL_NOT_USED */ "Method Local is set but never used",
|
||||
/* ASL_MSG_ARG_AS_LOCAL_NOT_USED */ "Method Argument (as a local) is set but never used",
|
||||
/* ASL_MSG_ARG_NOT_USED */ "Method Argument is never used"
|
||||
|
||||
};
|
||||
|
||||
/* Table compiler */
|
||||
|
@ -238,6 +238,9 @@ typedef enum
|
||||
ASL_MSG_MISSING_DEPENDENCY,
|
||||
ASL_MSG_ILLEGAL_FORWARD_REF,
|
||||
ASL_MSG_ILLEGAL_METHOD_REF,
|
||||
ASL_MSG_LOCAL_NOT_USED,
|
||||
ASL_MSG_ARG_AS_LOCAL_NOT_USED,
|
||||
ASL_MSG_ARG_NOT_USED,
|
||||
|
||||
/* These messages are used by the Data Table compiler only */
|
||||
|
||||
|
@ -255,7 +255,7 @@ MtMethodAnalysisWalkBegin (
|
||||
return (AE_ERROR);
|
||||
}
|
||||
|
||||
RegisterNumber = (Op->Asl.AmlOpcode & 0x000F);
|
||||
RegisterNumber = (Op->Asl.AmlOpcode & 0x0007);
|
||||
|
||||
/*
|
||||
* If the local is being used as a target, mark the local
|
||||
|
@ -409,7 +409,7 @@ NsDoOnePathname (
|
||||
|
||||
|
||||
TargetPath.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
|
||||
Status = AcpiNsHandleToPathname (Node, &TargetPath);
|
||||
Status = AcpiNsHandleToPathname (Node, &TargetPath, FALSE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
|
@ -363,7 +363,7 @@ LsEmitOffsetTableEntry (
|
||||
/* Get the full pathname to the namespace node */
|
||||
|
||||
TargetPath.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
|
||||
Status = AcpiNsHandleToPathname (Node, &TargetPath);
|
||||
Status = AcpiNsHandleToPathname (Node, &TargetPath, FALSE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
|
@ -789,43 +789,6 @@ OpcEncodePldBuffer (
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: OpcStrupr (strupr)
|
||||
*
|
||||
* PARAMETERS: SrcString - The source string to convert
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Convert string to uppercase
|
||||
*
|
||||
* NOTE: This is not a POSIX function, so it appears here, not in utclib.c
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void
|
||||
OpcStrupr (
|
||||
char *SrcString)
|
||||
{
|
||||
char *String;
|
||||
|
||||
|
||||
if (!SrcString)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Walk entire string, uppercasing the letters */
|
||||
|
||||
for (String = SrcString; *String; String++)
|
||||
{
|
||||
*String = (char) toupper ((int) *String);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: OpcFindName
|
||||
@ -851,7 +814,7 @@ OpcFindName (
|
||||
UINT32 i;
|
||||
|
||||
|
||||
OpcStrupr (Name);
|
||||
AcpiUtStrupr (Name);
|
||||
|
||||
for (i = 0, Str = List[0]; Str; i++, Str = List[i])
|
||||
{
|
||||
@ -900,13 +863,6 @@ OpcDoPld (
|
||||
return;
|
||||
}
|
||||
|
||||
Buffer = UtLocalCalloc (ACPI_PLD_BUFFER_SIZE);
|
||||
if (!Buffer)
|
||||
{
|
||||
AslError(ASL_ERROR, ASL_MSG_BUFFER_ALLOCATION, Op, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
memset (&PldInfo, 0, sizeof (ACPI_PLD_INFO));
|
||||
|
||||
Node = Op->Asl.Child;
|
||||
|
@ -655,7 +655,7 @@ OptOptimizeNamePath (
|
||||
* format -- something we can easily manipulate
|
||||
*/
|
||||
TargetPath.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
|
||||
Status = AcpiNsHandleToPathname (TargetNode, &TargetPath);
|
||||
Status = AcpiNsHandleToPathname (TargetNode, &TargetPath, FALSE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
AslCoreSubsystemError (Op, Status, "Getting Target NamePath",
|
||||
@ -667,7 +667,7 @@ OptOptimizeNamePath (
|
||||
/* CurrentPath is the path to this scope (where we are in the namespace) */
|
||||
|
||||
CurrentPath.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
|
||||
Status = AcpiNsHandleToPathname (CurrentNode, &CurrentPath);
|
||||
Status = AcpiNsHandleToPathname (CurrentNode, &CurrentPath, FALSE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
AslCoreSubsystemError (Op, Status, "Getting Current NamePath",
|
||||
|
@ -286,6 +286,11 @@ AslDoOptions (
|
||||
AcpiGbl_CstyleDisassembly = FALSE;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
|
||||
AcpiGbl_DbOpt_Verbose = TRUE;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
printf ("Unknown option: -d%s\n", AcpiGbl_Optarg);
|
||||
|
@ -246,6 +246,11 @@ AslDoDisassembly (
|
||||
return (Status);
|
||||
}
|
||||
|
||||
/* Handle additional output files for disassembler */
|
||||
|
||||
Gbl_FileType = ASL_INPUT_TYPE_ACPI_TABLE;
|
||||
Status = FlOpenMiscOutputFiles (Gbl_OutputFilenamePrefix);
|
||||
|
||||
/* This is where the disassembly happens */
|
||||
|
||||
AcpiGbl_DbOpt_Disasm = TRUE;
|
||||
@ -261,13 +266,6 @@ AslDoDisassembly (
|
||||
|
||||
AcpiDmUnresolvedWarning (0);
|
||||
|
||||
#if 0
|
||||
/* TBD: Handle additional output files for disassembler */
|
||||
|
||||
Status = FlOpenMiscOutputFiles (Gbl_OutputFilenamePrefix);
|
||||
NsDisplayNamespace ();
|
||||
#endif
|
||||
|
||||
/* Shutdown compiler and ACPICA subsystem */
|
||||
|
||||
AeClearErrorLog ();
|
||||
|
@ -165,15 +165,6 @@ AcpiEvInitializeRegion (
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
void
|
||||
AcpiExDoDebugObject (
|
||||
ACPI_OPERAND_OBJECT *SourceDesc,
|
||||
UINT32 Level,
|
||||
UINT32 Index)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiExReadDataFromField (
|
||||
ACPI_WALK_STATE *WalkState,
|
||||
@ -216,6 +207,60 @@ AcpiExLoadOp (
|
||||
return (AE_SUPPORT);
|
||||
}
|
||||
|
||||
void
|
||||
AcpiExDoDebugObject (
|
||||
ACPI_OPERAND_OBJECT *SourceDesc,
|
||||
UINT32 Level,
|
||||
UINT32 Index)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
AcpiExStartTraceMethod (
|
||||
ACPI_NAMESPACE_NODE *MethodNode,
|
||||
ACPI_OPERAND_OBJECT *ObjDesc,
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
AcpiExStopTraceMethod (
|
||||
ACPI_NAMESPACE_NODE *MethodNode,
|
||||
ACPI_OPERAND_OBJECT *ObjDesc,
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
AcpiExStartTraceOpcode (
|
||||
ACPI_PARSE_OBJECT *Op,
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
AcpiExStopTraceOpcode (
|
||||
ACPI_PARSE_OBJECT *Op,
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
AcpiExTracePoint (
|
||||
ACPI_TRACE_EVENT_TYPE Type,
|
||||
BOOLEAN Begin,
|
||||
UINT8 *Aml,
|
||||
char *Pathname)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiTbFindTable (
|
||||
char *Signature,
|
||||
|
@ -302,5 +302,19 @@ typedef struct acpi_serial_info
|
||||
|
||||
} ACPI_SERIAL_INFO;
|
||||
|
||||
typedef struct asl_method_local
|
||||
{
|
||||
ACPI_PARSE_OBJECT *Op;
|
||||
UINT8 Flags;
|
||||
|
||||
} ASL_METHOD_LOCAL;
|
||||
|
||||
/* Values for Flags field above */
|
||||
|
||||
#define ASL_LOCAL_INITIALIZED (1)
|
||||
#define ASL_LOCAL_REFERENCED (1<<1)
|
||||
#define ASL_ARG_IS_LOCAL (1<<2)
|
||||
#define ASL_ARG_INITIALIZED (1<<3)
|
||||
#define ASL_ARG_REFERENCED (1<<4)
|
||||
|
||||
#endif /* __ASLTYPES_H */
|
||||
|
@ -1008,17 +1008,17 @@ stroul64 (
|
||||
*/
|
||||
if (*String == '-')
|
||||
{
|
||||
Sign = NEGATIVE;
|
||||
Sign = ACPI_SIGN_NEGATIVE;
|
||||
++String;
|
||||
}
|
||||
else if (*String == '+')
|
||||
{
|
||||
++String;
|
||||
Sign = POSITIVE;
|
||||
Sign = ACPI_SIGN_POSITIVE;
|
||||
}
|
||||
else
|
||||
{
|
||||
Sign = POSITIVE;
|
||||
Sign = ACPI_SIGN_POSITIVE;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1106,7 +1106,7 @@ stroul64 (
|
||||
|
||||
/* If a minus sign was present, then "the conversion is negated": */
|
||||
|
||||
if (Sign == NEGATIVE)
|
||||
if (Sign == ACPI_SIGN_NEGATIVE)
|
||||
{
|
||||
ReturnValue = (ACPI_UINT32_MAX - ReturnValue) + 1;
|
||||
}
|
||||
|
@ -66,6 +66,10 @@ XfNamespaceLocateEnd (
|
||||
UINT32 Level,
|
||||
void *Context);
|
||||
|
||||
static ACPI_PARSE_OBJECT *
|
||||
XfGetParentMethod (
|
||||
ACPI_PARSE_OBJECT *Op);
|
||||
|
||||
static BOOLEAN
|
||||
XfObjectExists (
|
||||
char *Name);
|
||||
@ -280,59 +284,16 @@ XfCheckFieldRange (
|
||||
}
|
||||
|
||||
|
||||
#ifdef __UNDER_DEVELOPMENT
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: XfIsObjectParental
|
||||
*
|
||||
* PARAMETERS: ChildOp - Op to be checked
|
||||
* PossibleParentOp - Determine if this op is in the family
|
||||
*
|
||||
* RETURN: TRUE if ChildOp is a descendent of PossibleParentOp
|
||||
*
|
||||
* DESCRIPTION: Determine if an Op is a descendent of another Op. Used to
|
||||
* detect if a method is declared within another method.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static BOOLEAN
|
||||
XfIsObjectParental (
|
||||
ACPI_PARSE_OBJECT *ChildOp,
|
||||
ACPI_PARSE_OBJECT *PossibleParentOp)
|
||||
{
|
||||
ACPI_PARSE_OBJECT *ParentOp;
|
||||
|
||||
|
||||
/* Search upwards through the tree for possible parent */
|
||||
|
||||
ParentOp = ChildOp;
|
||||
while (ParentOp)
|
||||
{
|
||||
if (ParentOp == PossibleParentOp)
|
||||
{
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
ParentOp = ParentOp->Asl.Parent;
|
||||
}
|
||||
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: XfGetParentMethod
|
||||
*
|
||||
* PARAMETERS: Op - Op to be checked
|
||||
* PARAMETERS: Op - Parse Op to be checked
|
||||
*
|
||||
* RETURN: Op for parent method. NULL if object is not within a method.
|
||||
* RETURN: Control method Op if found. NULL otherwise
|
||||
*
|
||||
* DESCRIPTION: Determine if an object is within a control method. Used to
|
||||
* implement special rules for named references from within a
|
||||
* control method.
|
||||
*
|
||||
* NOTE: It would be better to have the parser set a flag in the Op if possible.
|
||||
* DESCRIPTION: Find the control method parent of a parse op. Returns NULL if
|
||||
* the input Op is not within a control method.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -340,121 +301,23 @@ static ACPI_PARSE_OBJECT *
|
||||
XfGetParentMethod (
|
||||
ACPI_PARSE_OBJECT *Op)
|
||||
{
|
||||
ACPI_PARSE_OBJECT *ParentOp;
|
||||
ACPI_PARSE_OBJECT *NextOp;
|
||||
|
||||
|
||||
if (!Op)
|
||||
NextOp = Op->Asl.Parent;
|
||||
while (NextOp)
|
||||
{
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if (Op->Asl.ParseOpcode == PARSEOP_METHOD)
|
||||
{
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/* Walk upwards through the parse tree, up to the root if necessary */
|
||||
|
||||
ParentOp = Op;
|
||||
while (ParentOp)
|
||||
{
|
||||
if (ParentOp->Asl.ParseOpcode == PARSEOP_METHOD)
|
||||
if (NextOp->Asl.AmlOpcode == AML_METHOD_OP)
|
||||
{
|
||||
return (ParentOp);
|
||||
return (NextOp);
|
||||
}
|
||||
|
||||
ParentOp = ParentOp->Asl.Parent;
|
||||
NextOp = NextOp->Asl.Parent;
|
||||
}
|
||||
|
||||
/* Object is not within a method */
|
||||
|
||||
return (NULL);
|
||||
return (NULL); /* No parent method found */
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: XfCheckIllegalReference
|
||||
*
|
||||
* PARAMETERS: Op - Op referring to the target
|
||||
* TargetNode - Target of the reference
|
||||
*
|
||||
* RETURN: None. Emits error message for an illegal reference
|
||||
*
|
||||
* DESCRIPTION: Determine if a named reference is legal. A "named" reference
|
||||
* is something like: Store(ABCD, ...), where ABCD is an AML
|
||||
* Nameseg or Namepath.
|
||||
*
|
||||
* NOTE: Caller must ensure that the name Op is in fact a reference, and not
|
||||
* an actual name declaration (creation of a named object).
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void
|
||||
XfCheckIllegalReference (
|
||||
ACPI_PARSE_OBJECT *Op,
|
||||
ACPI_NAMESPACE_NODE *TargetNode)
|
||||
{
|
||||
ACPI_PARSE_OBJECT *MethodOp1;
|
||||
ACPI_PARSE_OBJECT *MethodOp2;
|
||||
ACPI_PARSE_OBJECT *TargetOp;
|
||||
|
||||
|
||||
/*
|
||||
* Check for an illegal reference to a named object:
|
||||
*
|
||||
* 1) References from one control method to another, non-parent
|
||||
* method are not allowed, they will fail at runtime.
|
||||
*
|
||||
* 2) Forward references within a control method are not allowed.
|
||||
* AML interpreters use a one-pass parse of control methods
|
||||
* so these forward references will fail at runtime.
|
||||
*/
|
||||
TargetOp = TargetNode->Op;
|
||||
|
||||
MethodOp1 = XfGetParentMethod (Op);
|
||||
MethodOp2 = XfGetParentMethod (TargetOp);
|
||||
|
||||
/* Are both objects within control method(s)? */
|
||||
|
||||
if (!MethodOp1 || !MethodOp2)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Objects not in the same method? */
|
||||
|
||||
if (MethodOp1 != MethodOp2)
|
||||
{
|
||||
/*
|
||||
* 1) Cross-method named reference
|
||||
*
|
||||
* This is OK if and only if the target reference is within in a
|
||||
* method that is a parent of current method
|
||||
*/
|
||||
if (!XfIsObjectParental (MethodOp1, MethodOp2))
|
||||
{
|
||||
AslError (ASL_ERROR, ASL_MSG_ILLEGAL_METHOD_REF, Op,
|
||||
Op->Asl.ExternalName);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 2) Both reference and target are in the same method. Check if this is
|
||||
* an (illegal) forward reference by examining the exact source code
|
||||
* location of each (the referenced object and the object declaration).
|
||||
* This is a bit nasty, yet effective.
|
||||
*/
|
||||
else if (Op->Asl.LogicalByteOffset < TargetOp->Asl.LogicalByteOffset)
|
||||
{
|
||||
AslError (ASL_ERROR, ASL_MSG_ILLEGAL_FORWARD_REF, Op,
|
||||
Op->Asl.ExternalName);
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: XfNamespaceLocateBegin
|
||||
@ -496,10 +359,67 @@ XfNamespaceLocateBegin (
|
||||
UINT8 Message = 0;
|
||||
const ACPI_OPCODE_INFO *OpInfo;
|
||||
UINT32 Flags;
|
||||
ASL_METHOD_LOCAL *MethodLocals = NULL;
|
||||
ASL_METHOD_LOCAL *MethodArgs = NULL;
|
||||
int RegisterNumber;
|
||||
UINT32 i;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE_PTR (XfNamespaceLocateBegin, Op);
|
||||
|
||||
|
||||
if ((Op->Asl.AmlOpcode == AML_METHOD_OP) && Op->Asl.Node)
|
||||
{
|
||||
Node = Op->Asl.Node;
|
||||
|
||||
/* Support for method LocalX/ArgX analysis */
|
||||
|
||||
if (!Node->MethodLocals)
|
||||
{
|
||||
/* Create local/arg info blocks */
|
||||
|
||||
MethodLocals = UtLocalCalloc (
|
||||
sizeof (ASL_METHOD_LOCAL) * ACPI_METHOD_NUM_LOCALS);
|
||||
Node->MethodLocals = MethodLocals;
|
||||
|
||||
MethodArgs = UtLocalCalloc (
|
||||
sizeof (ASL_METHOD_LOCAL) * ACPI_METHOD_NUM_ARGS);
|
||||
Node->MethodArgs = MethodArgs;
|
||||
|
||||
/*
|
||||
* Get the method argument count
|
||||
* First, get the name node
|
||||
*/
|
||||
NextOp = Op->Asl.Child;
|
||||
|
||||
/* Get the NumArguments node */
|
||||
|
||||
NextOp = NextOp->Asl.Next;
|
||||
Node->ArgCount = (UINT8)
|
||||
(((UINT8) NextOp->Asl.Value.Integer) & 0x07);
|
||||
|
||||
/* We will track all posible ArgXs */
|
||||
|
||||
for (i = 0; i < ACPI_METHOD_NUM_ARGS; i++)
|
||||
{
|
||||
if (i < Node->ArgCount)
|
||||
{
|
||||
/* Real Args are always "initialized" */
|
||||
|
||||
MethodArgs[i].Flags = ASL_ARG_INITIALIZED;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Other ArgXs can be used as locals */
|
||||
|
||||
MethodArgs[i].Flags = ASL_ARG_IS_LOCAL;
|
||||
}
|
||||
|
||||
MethodArgs[i].Op = Op;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If this node is the actual declaration of a name
|
||||
* [such as the XXXX name in "Method (XXXX)"],
|
||||
@ -512,10 +432,88 @@ XfNamespaceLocateBegin (
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
/* We are only interested in opcodes that have an associated name */
|
||||
|
||||
OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode);
|
||||
|
||||
/* Check method LocalX variables */
|
||||
|
||||
if (OpInfo->Type == AML_TYPE_LOCAL_VARIABLE)
|
||||
{
|
||||
/* Find parent method Op */
|
||||
|
||||
NextOp = XfGetParentMethod (Op);
|
||||
if (!NextOp)
|
||||
{
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
/* Get method node */
|
||||
|
||||
Node = NextOp->Asl.Node;
|
||||
|
||||
RegisterNumber = Op->Asl.AmlOpcode & 0x0007; /* 0x60 through 0x67 */
|
||||
MethodLocals = Node->MethodLocals;
|
||||
|
||||
if (Op->Asl.CompileFlags & NODE_IS_TARGET)
|
||||
{
|
||||
/* Local is being initialized */
|
||||
|
||||
MethodLocals[RegisterNumber].Flags |= ASL_LOCAL_INITIALIZED;
|
||||
MethodLocals[RegisterNumber].Op = Op;
|
||||
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
/* Mark this Local as referenced */
|
||||
|
||||
MethodLocals[RegisterNumber].Flags |= ASL_LOCAL_REFERENCED;
|
||||
MethodLocals[RegisterNumber].Op = Op;
|
||||
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
/* Check method ArgX variables */
|
||||
|
||||
if (OpInfo->Type == AML_TYPE_METHOD_ARGUMENT)
|
||||
{
|
||||
/* Find parent method Op */
|
||||
|
||||
NextOp = XfGetParentMethod (Op);
|
||||
if (!NextOp)
|
||||
{
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
/* Get method node */
|
||||
|
||||
Node = NextOp->Asl.Node;
|
||||
|
||||
/* Get Arg # */
|
||||
|
||||
RegisterNumber = Op->Asl.AmlOpcode - AML_ARG0; /* 0x68 through 0x6F */
|
||||
MethodArgs = Node->MethodArgs;
|
||||
|
||||
if (Op->Asl.CompileFlags & NODE_IS_TARGET)
|
||||
{
|
||||
/* Arg is being initialized */
|
||||
|
||||
MethodArgs[RegisterNumber].Flags |= ASL_ARG_INITIALIZED;
|
||||
MethodArgs[RegisterNumber].Op = Op;
|
||||
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
/* Mark this Arg as referenced */
|
||||
|
||||
MethodArgs[RegisterNumber].Flags |= ASL_ARG_REFERENCED;
|
||||
MethodArgs[RegisterNumber].Op = Op;
|
||||
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
/*
|
||||
* After method ArgX and LocalX, we are only interested in opcodes
|
||||
* that have an associated name
|
||||
*/
|
||||
if ((!(OpInfo->Flags & AML_NAMED)) &&
|
||||
(!(OpInfo->Flags & AML_CREATE)) &&
|
||||
(Op->Asl.ParseOpcode != PARSEOP_NAMESTRING) &&
|
||||
@ -1094,3 +1092,178 @@ XfNamespaceLocateEnd (
|
||||
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
|
||||
#ifdef __UNDER_DEVELOPMENT
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: XfIsObjectParental
|
||||
*
|
||||
* PARAMETERS: ChildOp - Op to be checked
|
||||
* PossibleParentOp - Determine if this op is in the family
|
||||
*
|
||||
* RETURN: TRUE if ChildOp is a descendent of PossibleParentOp
|
||||
*
|
||||
* DESCRIPTION: Determine if an Op is a descendent of another Op. Used to
|
||||
* detect if a method is declared within another method.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static BOOLEAN
|
||||
XfIsObjectParental (
|
||||
ACPI_PARSE_OBJECT *ChildOp,
|
||||
ACPI_PARSE_OBJECT *PossibleParentOp)
|
||||
{
|
||||
ACPI_PARSE_OBJECT *ParentOp;
|
||||
|
||||
|
||||
/* Search upwards through the tree for possible parent */
|
||||
|
||||
ParentOp = ChildOp;
|
||||
while (ParentOp)
|
||||
{
|
||||
if (ParentOp == PossibleParentOp)
|
||||
{
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
ParentOp = ParentOp->Asl.Parent;
|
||||
}
|
||||
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: XfGetParentMethod
|
||||
*
|
||||
* PARAMETERS: Op - Op to be checked
|
||||
*
|
||||
* RETURN: Op for parent method. NULL if object is not within a method.
|
||||
*
|
||||
* DESCRIPTION: Determine if an object is within a control method. Used to
|
||||
* implement special rules for named references from within a
|
||||
* control method.
|
||||
*
|
||||
* NOTE: It would be better to have the parser set a flag in the Op if possible.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static ACPI_PARSE_OBJECT *
|
||||
XfGetParentMethod (
|
||||
ACPI_PARSE_OBJECT *Op)
|
||||
{
|
||||
ACPI_PARSE_OBJECT *ParentOp;
|
||||
|
||||
|
||||
if (!Op)
|
||||
{
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
if (Op->Asl.ParseOpcode == PARSEOP_METHOD)
|
||||
{
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/* Walk upwards through the parse tree, up to the root if necessary */
|
||||
|
||||
ParentOp = Op;
|
||||
while (ParentOp)
|
||||
{
|
||||
if (ParentOp->Asl.ParseOpcode == PARSEOP_METHOD)
|
||||
{
|
||||
return (ParentOp);
|
||||
}
|
||||
|
||||
ParentOp = ParentOp->Asl.Parent;
|
||||
}
|
||||
|
||||
/* Object is not within a method */
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: XfCheckIllegalReference
|
||||
*
|
||||
* PARAMETERS: Op - Op referring to the target
|
||||
* TargetNode - Target of the reference
|
||||
*
|
||||
* RETURN: None. Emits error message for an illegal reference
|
||||
*
|
||||
* DESCRIPTION: Determine if a named reference is legal. A "named" reference
|
||||
* is something like: Store(ABCD, ...), where ABCD is an AML
|
||||
* Nameseg or Namepath.
|
||||
*
|
||||
* NOTE: Caller must ensure that the name Op is in fact a reference, and not
|
||||
* an actual name declaration (creation of a named object).
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void
|
||||
XfCheckIllegalReference (
|
||||
ACPI_PARSE_OBJECT *Op,
|
||||
ACPI_NAMESPACE_NODE *TargetNode)
|
||||
{
|
||||
ACPI_PARSE_OBJECT *MethodOp1;
|
||||
ACPI_PARSE_OBJECT *MethodOp2;
|
||||
ACPI_PARSE_OBJECT *TargetOp;
|
||||
|
||||
|
||||
/*
|
||||
* Check for an illegal reference to a named object:
|
||||
*
|
||||
* 1) References from one control method to another, non-parent
|
||||
* method are not allowed, they will fail at runtime.
|
||||
*
|
||||
* 2) Forward references within a control method are not allowed.
|
||||
* AML interpreters use a one-pass parse of control methods
|
||||
* so these forward references will fail at runtime.
|
||||
*/
|
||||
TargetOp = TargetNode->Op;
|
||||
|
||||
MethodOp1 = XfGetParentMethod (Op);
|
||||
MethodOp2 = XfGetParentMethod (TargetOp);
|
||||
|
||||
/* Are both objects within control method(s)? */
|
||||
|
||||
if (!MethodOp1 || !MethodOp2)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Objects not in the same method? */
|
||||
|
||||
if (MethodOp1 != MethodOp2)
|
||||
{
|
||||
/*
|
||||
* 1) Cross-method named reference
|
||||
*
|
||||
* This is OK if and only if the target reference is within in a
|
||||
* method that is a parent of current method
|
||||
*/
|
||||
if (!XfIsObjectParental (MethodOp1, MethodOp2))
|
||||
{
|
||||
AslError (ASL_ERROR, ASL_MSG_ILLEGAL_METHOD_REF, Op,
|
||||
Op->Asl.ExternalName);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 2) Both reference and target are in the same method. Check if this is
|
||||
* an (illegal) forward reference by examining the exact source code
|
||||
* location of each (the referenced object and the object declaration).
|
||||
* This is a bit nasty, yet effective.
|
||||
*/
|
||||
else if (Op->Asl.LogicalByteOffset < TargetOp->Asl.LogicalByteOffset)
|
||||
{
|
||||
AslError (ASL_ERROR, ASL_MSG_ILLEGAL_FORWARD_REF, Op,
|
||||
Op->Asl.ExternalName);
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
@ -536,6 +536,10 @@ ACPI_STATUS
|
||||
DtCompileStao (
|
||||
void **PFieldList);
|
||||
|
||||
ACPI_STATUS
|
||||
DtCompileTcpa (
|
||||
void **PFieldList);
|
||||
|
||||
ACPI_STATUS
|
||||
DtCompileUefi (
|
||||
void **PFieldList);
|
||||
|
@ -3120,6 +3120,77 @@ DtCompileStao (
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: DtCompileTcpa
|
||||
*
|
||||
* PARAMETERS: PFieldList - Current field list pointer
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Compile TCPA.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
ACPI_STATUS
|
||||
DtCompileTcpa (
|
||||
void **List)
|
||||
{
|
||||
DT_FIELD **PFieldList = (DT_FIELD **) List;
|
||||
DT_SUBTABLE *Subtable;
|
||||
ACPI_TABLE_TCPA_HDR *TcpaHeader;
|
||||
DT_SUBTABLE *ParentTable;
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
/* Compile the main table */
|
||||
|
||||
Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaHdr,
|
||||
&Subtable, TRUE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
|
||||
ParentTable = DtPeekSubtable ();
|
||||
DtInsertSubtable (ParentTable, Subtable);
|
||||
|
||||
/*
|
||||
* Examine the PlatformClass field to determine the table type.
|
||||
* Either a client or server table. Only one.
|
||||
*/
|
||||
TcpaHeader = ACPI_CAST_PTR (ACPI_TABLE_TCPA_HDR, ParentTable->Buffer);
|
||||
|
||||
switch (TcpaHeader->PlatformClass)
|
||||
{
|
||||
case ACPI_TCPA_CLIENT_TABLE:
|
||||
|
||||
Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaClient,
|
||||
&Subtable, TRUE);
|
||||
break;
|
||||
|
||||
case ACPI_TCPA_SERVER_TABLE:
|
||||
|
||||
Status = DtCompileTable (PFieldList, AcpiDmTableInfoTcpaServer,
|
||||
&Subtable, TRUE);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
AcpiOsPrintf ("\n**** Unknown TCPA Platform Class 0x%X\n",
|
||||
TcpaHeader->PlatformClass);
|
||||
Status = AE_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
ParentTable = DtPeekSubtable ();
|
||||
DtInsertSubtable (ParentTable, Subtable);
|
||||
|
||||
return (Status);
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: DtGetGenericTableInfo
|
||||
|
@ -1144,13 +1144,19 @@ const unsigned char TemplateStao[] =
|
||||
|
||||
const unsigned char TemplateTcpa[] =
|
||||
{
|
||||
0x54,0x43,0x50,0x41,0x32,0x00,0x00,0x00, /* 00000000 "TCPA2..." */
|
||||
0x01,0x67,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".gINTEL " */
|
||||
0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */
|
||||
0x54,0x43,0x50,0x41,0x64,0x00,0x00,0x00, /* 00000000 "TCPAd..." */
|
||||
0x02,0xFF,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
|
||||
0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */
|
||||
0x80,0x31,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 ".1..INTL" */
|
||||
0x28,0x05,0x10,0x20,0x00,0x00,0x00,0x00, /* 00000020 "(.. ...." */
|
||||
0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */
|
||||
0x00,0x00 /* 00000030 ".." */
|
||||
0x19,0x06,0x15,0x20,0x01,0x00,0x00,0x00, /* 00000020 "... ...." */
|
||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */
|
||||
0x11,0x00,0xFF,0xEE,0xDD,0xCC,0xBB,0xAA, /* 00000030 "........" */
|
||||
0x02,0x01,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000038 "........" */
|
||||
0x00,0x00,0x00,0x00,0x01,0x20,0x00,0x03, /* 00000040 "..... .." */
|
||||
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000048 "........" */
|
||||
0x00,0x00,0x00,0x00,0x01,0x20,0x00,0x03, /* 00000050 "..... .." */
|
||||
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */
|
||||
0x01,0x01,0x01,0x01 /* 00000060 "...." */
|
||||
};
|
||||
|
||||
const unsigned char TemplateTpm2[] =
|
||||
|
@ -50,14 +50,22 @@
|
||||
#define STRING_SETUP strcpy (StringBuffer, PrParsertext);\
|
||||
PrParserlval.str = StringBuffer
|
||||
|
||||
#define YY_NO_INPUT /* No file input, we use strings only */
|
||||
|
||||
#define _COMPONENT ACPI_COMPILER
|
||||
ACPI_MODULE_NAME ("prscanner")
|
||||
|
||||
|
||||
/* Local prototypes */
|
||||
|
||||
static char
|
||||
PrDoCommentType1 (
|
||||
void);
|
||||
|
||||
static char
|
||||
PrDoCommentType2 (
|
||||
void);
|
||||
%}
|
||||
|
||||
%option noyywrap
|
||||
%option nounput
|
||||
|
||||
Number [0-9a-fA-F]+
|
||||
HexNumber 0[xX][0-9a-fA-F]+
|
||||
@ -66,6 +74,8 @@ NewLine [\n]
|
||||
Identifier [a-zA-Z][0-9a-zA-Z]*
|
||||
|
||||
%%
|
||||
"/*" { if (!PrDoCommentType1 ()) {yyterminate ();} }
|
||||
"//" { if (!PrDoCommentType2 ()) {yyterminate ();} }
|
||||
|
||||
\( return (EXPOP_PAREN_OPEN);
|
||||
\) return (EXPOP_PAREN_CLOSE);
|
||||
@ -151,3 +161,76 @@ PrTerminateLexer (
|
||||
|
||||
yy_delete_buffer (LexBuffer);
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************************
|
||||
*
|
||||
* FUNCTION: PrDoCommentType1
|
||||
*
|
||||
* PARAMETERS: none
|
||||
*
|
||||
* RETURN: none
|
||||
*
|
||||
* DESCRIPTION: Process a new legacy comment. Just toss it.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static char
|
||||
PrDoCommentType1 (
|
||||
void)
|
||||
{
|
||||
int c;
|
||||
|
||||
|
||||
Loop:
|
||||
while (((c = input ()) != '*') && (c != EOF))
|
||||
{
|
||||
}
|
||||
if (c == EOF)
|
||||
{
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
if (((c = input ()) != '/') && (c != EOF))
|
||||
{
|
||||
unput (c);
|
||||
goto Loop;
|
||||
}
|
||||
if (c == EOF)
|
||||
{
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************************
|
||||
*
|
||||
* FUNCTION: PrDoCommentType2
|
||||
*
|
||||
* PARAMETERS: none
|
||||
*
|
||||
* RETURN: none
|
||||
*
|
||||
* DESCRIPTION: Process a new "//" comment. Just toss it.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static char
|
||||
PrDoCommentType2 (
|
||||
void)
|
||||
{
|
||||
int c;
|
||||
|
||||
|
||||
while (((c = input ()) != '\n') && (c != EOF))
|
||||
{
|
||||
}
|
||||
if (c == EOF)
|
||||
{
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
return (TRUE);
|
||||
}
|
||||
|
@ -213,8 +213,11 @@ void
|
||||
PrParsererror (
|
||||
char const *Message)
|
||||
{
|
||||
|
||||
sprintf (StringBuffer, "Preprocessor Parser : %s (near line %u)",
|
||||
Message, Gbl_CurrentLineNumber);
|
||||
DtError (ASL_ERROR, ASL_MSG_SYNTAX,
|
||||
NULL, (char *) Message);
|
||||
NULL, (char *) StringBuffer);
|
||||
}
|
||||
|
||||
|
||||
|
@ -120,7 +120,6 @@ static const PR_DIRECTIVE_INFO Gbl_DirectiveInfo[] =
|
||||
{"include", 0}, /* Argument is not standard format, so just use 0 here */
|
||||
{"includebuffer", 0}, /* Argument is not standard format, so just use 0 here */
|
||||
{"line", 1},
|
||||
{"loadbuffer", 0},
|
||||
{"pragma", 1},
|
||||
{"undef", 1},
|
||||
{"warning", 1},
|
||||
@ -144,7 +143,7 @@ enum Gbl_DirectiveIndexes
|
||||
PR_DIRECTIVE_LINE,
|
||||
PR_DIRECTIVE_PRAGMA,
|
||||
PR_DIRECTIVE_UNDEF,
|
||||
PR_DIRECTIVE_WARNING,
|
||||
PR_DIRECTIVE_WARNING
|
||||
};
|
||||
|
||||
#define ASL_DIRECTIVE_NOT_FOUND -1
|
||||
@ -328,7 +327,7 @@ PrPreprocessInputFile (
|
||||
|
||||
PrGetNextLineInit ();
|
||||
|
||||
/* Scan line-by-line. Comments and blank lines are skipped by this function */
|
||||
/* Scan source line-by-line and process directives. Then write the .i file */
|
||||
|
||||
while ((Status = PrGetNextLine (Gbl_Files[ASL_FILE_INPUT].Handle)) != ASL_EOF)
|
||||
{
|
||||
@ -478,6 +477,16 @@ PrDoDirective (
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Emit a line directive into the preprocessor file (.pre) after
|
||||
* every matched directive. This is passed through to the compiler
|
||||
* so that error/warning messages are kept in sync with the
|
||||
* original source file.
|
||||
*/
|
||||
FlPrintFile (ASL_FILE_PREPROCESSOR, "#line %u \"%s\" // #%s\n",
|
||||
Gbl_CurrentLineNumber, Gbl_Files[ASL_FILE_INPUT].Filename,
|
||||
Gbl_DirectiveInfo[Directive].Name);
|
||||
|
||||
/*
|
||||
* If we are currently ignoring this block and we encounter a #else or
|
||||
* #elif, we must ignore their blocks also if the parent block is also
|
||||
@ -825,6 +834,9 @@ PrDoDirective (
|
||||
|
||||
PrError (ASL_WARNING, ASL_MSG_WARNING_DIRECTIVE,
|
||||
THIS_TOKEN_OFFSET (Token));
|
||||
|
||||
Gbl_SourceLine = 0;
|
||||
Gbl_NextError = Gbl_ErrorLog;
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -863,7 +875,9 @@ PrDoDirective (
|
||||
******************************************************************************/
|
||||
|
||||
#define PR_NORMAL_TEXT 0
|
||||
#define PR_WITHIN_COMMENT 1
|
||||
#define PR_MULTI_LINE_COMMENT 1
|
||||
#define PR_SINGLE_LINE_COMMENT 2
|
||||
#define PR_QUOTED_STRING 3
|
||||
|
||||
static UINT8 AcpiGbl_LineScanState = PR_NORMAL_TEXT;
|
||||
|
||||
@ -904,22 +918,55 @@ PrGetNextLine (
|
||||
return (ASL_EOF);
|
||||
}
|
||||
|
||||
/* We need to worry about multi-line slash-asterisk comments */
|
||||
/* Update state machine as necessary */
|
||||
|
||||
/* Check for comment open */
|
||||
|
||||
if ((AcpiGbl_LineScanState == PR_NORMAL_TEXT) &&
|
||||
(PreviousChar == '/') && (c == '*'))
|
||||
switch (AcpiGbl_LineScanState)
|
||||
{
|
||||
AcpiGbl_LineScanState = PR_WITHIN_COMMENT;
|
||||
}
|
||||
case PR_NORMAL_TEXT:
|
||||
|
||||
/* Check for comment close */
|
||||
/* Check for multi-line comment start */
|
||||
|
||||
if ((AcpiGbl_LineScanState == PR_WITHIN_COMMENT) &&
|
||||
(PreviousChar == '*') && (c == '/'))
|
||||
{
|
||||
AcpiGbl_LineScanState = PR_NORMAL_TEXT;
|
||||
if ((PreviousChar == '/') && (c == '*'))
|
||||
{
|
||||
AcpiGbl_LineScanState = PR_MULTI_LINE_COMMENT;
|
||||
}
|
||||
|
||||
/* Check for single-line comment start */
|
||||
|
||||
else if ((PreviousChar == '/') && (c == '/'))
|
||||
{
|
||||
AcpiGbl_LineScanState = PR_SINGLE_LINE_COMMENT;
|
||||
}
|
||||
|
||||
/* Check for quoted string start */
|
||||
|
||||
else if (PreviousChar == '"')
|
||||
{
|
||||
AcpiGbl_LineScanState = PR_QUOTED_STRING;
|
||||
}
|
||||
break;
|
||||
|
||||
case PR_QUOTED_STRING:
|
||||
|
||||
if (PreviousChar == '"')
|
||||
{
|
||||
AcpiGbl_LineScanState = PR_NORMAL_TEXT;
|
||||
}
|
||||
break;
|
||||
|
||||
case PR_MULTI_LINE_COMMENT:
|
||||
|
||||
/* Check for multi-line comment end */
|
||||
|
||||
if ((PreviousChar == '*') && (c == '/'))
|
||||
{
|
||||
AcpiGbl_LineScanState = PR_NORMAL_TEXT;
|
||||
}
|
||||
break;
|
||||
|
||||
case PR_SINGLE_LINE_COMMENT: /* Just ignore text until EOL */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* Always copy the character into line buffer */
|
||||
@ -933,10 +980,21 @@ PrGetNextLine (
|
||||
{
|
||||
/* Handle multi-line comments */
|
||||
|
||||
if (AcpiGbl_LineScanState == PR_WITHIN_COMMENT)
|
||||
if (AcpiGbl_LineScanState == PR_MULTI_LINE_COMMENT)
|
||||
{
|
||||
return (ASL_WITHIN_COMMENT);
|
||||
}
|
||||
|
||||
/* End of single-line comment */
|
||||
|
||||
if (AcpiGbl_LineScanState == PR_SINGLE_LINE_COMMENT)
|
||||
{
|
||||
AcpiGbl_LineScanState = PR_NORMAL_TEXT;
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
/* Blank line */
|
||||
|
||||
if (i == 1)
|
||||
{
|
||||
return (ASL_BLANK_LINE);
|
||||
|
@ -86,6 +86,8 @@ AcpiDbDoOneSleepState (
|
||||
UINT8 SleepState);
|
||||
|
||||
|
||||
static char *AcpiDbTraceMethodName = NULL;
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDbConvertToNode
|
||||
@ -1226,4 +1228,88 @@ AcpiDbGenerateSci (
|
||||
|
||||
#endif /* !ACPI_REDUCED_HARDWARE */
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDbTrace
|
||||
*
|
||||
* PARAMETERS: EnableArg - ENABLE/AML to enable tracer
|
||||
* DISABLE to disable tracer
|
||||
* MethodArg - Method to trace
|
||||
* OnceArg - Whether trace once
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Control method tracing facility
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiDbTrace (
|
||||
char *EnableArg,
|
||||
char *MethodArg,
|
||||
char *OnceArg)
|
||||
{
|
||||
UINT32 DebugLevel = 0;
|
||||
UINT32 DebugLayer = 0;
|
||||
UINT32 Flags = 0;
|
||||
|
||||
|
||||
if (EnableArg)
|
||||
{
|
||||
AcpiUtStrupr (EnableArg);
|
||||
}
|
||||
if (OnceArg)
|
||||
{
|
||||
AcpiUtStrupr (OnceArg);
|
||||
}
|
||||
if (MethodArg)
|
||||
{
|
||||
if (AcpiDbTraceMethodName)
|
||||
{
|
||||
ACPI_FREE (AcpiDbTraceMethodName);
|
||||
AcpiDbTraceMethodName = NULL;
|
||||
}
|
||||
AcpiDbTraceMethodName = ACPI_ALLOCATE (strlen (MethodArg) + 1);
|
||||
if (!AcpiDbTraceMethodName)
|
||||
{
|
||||
AcpiOsPrintf ("Failed to allocate method name (%s)\n", MethodArg);
|
||||
return;
|
||||
}
|
||||
strcpy (AcpiDbTraceMethodName, MethodArg);
|
||||
}
|
||||
if (!strcmp (EnableArg, "ENABLE") ||
|
||||
!strcmp (EnableArg, "METHOD") ||
|
||||
!strcmp (EnableArg, "OPCODE"))
|
||||
{
|
||||
if (!strcmp (EnableArg, "ENABLE"))
|
||||
{
|
||||
/* Inherit current console settings */
|
||||
|
||||
DebugLevel = AcpiGbl_DbConsoleDebugLevel;
|
||||
DebugLayer = AcpiDbgLayer;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Restrict console output to trace points only */
|
||||
|
||||
DebugLevel = ACPI_LV_TRACE_POINT;
|
||||
DebugLayer = ACPI_EXECUTER;
|
||||
}
|
||||
|
||||
Flags = ACPI_TRACE_ENABLED;
|
||||
if (!strcmp (EnableArg, "OPCODE"))
|
||||
{
|
||||
Flags |= ACPI_TRACE_OPCODE;
|
||||
}
|
||||
if (OnceArg && !strcmp (OnceArg, "ONCE"))
|
||||
{
|
||||
Flags |= ACPI_TRACE_ONESHOT;
|
||||
}
|
||||
}
|
||||
|
||||
(void) AcpiDebugTrace (AcpiDbTraceMethodName,
|
||||
DebugLevel, DebugLayer, Flags);
|
||||
}
|
||||
|
||||
#endif /* ACPI_DEBUGGER */
|
||||
|
@ -49,7 +49,6 @@
|
||||
#include <contrib/dev/acpica/include/acparser.h>
|
||||
#include <contrib/dev/acpica/include/acinterp.h>
|
||||
#include <contrib/dev/acpica/include/acdebug.h>
|
||||
#include <contrib/dev/acpica/include/acdisasm.h>
|
||||
|
||||
|
||||
#ifdef ACPI_DEBUGGER
|
||||
@ -513,7 +512,7 @@ AcpiDbDisplayLocals (
|
||||
return;
|
||||
}
|
||||
|
||||
AcpiDmDisplayLocals (WalkState);
|
||||
AcpiDbDecodeLocals (WalkState);
|
||||
}
|
||||
|
||||
|
||||
@ -543,7 +542,7 @@ AcpiDbDisplayArguments (
|
||||
return;
|
||||
}
|
||||
|
||||
AcpiDmDisplayArguments (WalkState);
|
||||
AcpiDbDecodeArguments (WalkState);
|
||||
}
|
||||
|
||||
|
||||
@ -599,7 +598,7 @@ AcpiDbDisplayResults (
|
||||
{
|
||||
ObjDesc = Frame->Results.ObjDesc[Index];
|
||||
AcpiOsPrintf ("Result%u: ", i);
|
||||
AcpiDmDisplayInternalObject (ObjDesc, WalkState);
|
||||
AcpiDbDisplayInternalObject (ObjDesc, WalkState);
|
||||
if (Index == 0)
|
||||
{
|
||||
Frame = Frame->Results.Next;
|
||||
@ -763,7 +762,7 @@ AcpiDbDisplayResultObject (
|
||||
}
|
||||
|
||||
AcpiOsPrintf ("ResultObj: ");
|
||||
AcpiDmDisplayInternalObject (ObjDesc, WalkState);
|
||||
AcpiDbDisplayInternalObject (ObjDesc, WalkState);
|
||||
AcpiOsPrintf ("\n");
|
||||
}
|
||||
|
||||
@ -793,7 +792,7 @@ AcpiDbDisplayArgumentObject (
|
||||
}
|
||||
|
||||
AcpiOsPrintf ("ArgObj: ");
|
||||
AcpiDmDisplayInternalObject (ObjDesc, WalkState);
|
||||
AcpiDbDisplayInternalObject (ObjDesc, WalkState);
|
||||
}
|
||||
|
||||
|
||||
|
@ -218,7 +218,7 @@ static const ACPI_DB_COMMAND_INFO AcpiGbl_DbCommands[] =
|
||||
{"TABLES", 0},
|
||||
{"TEMPLATE", 1},
|
||||
{"TERMINATE", 0},
|
||||
{"TEST", 1},
|
||||
{"TEST", 1},
|
||||
{"THREADS", 3},
|
||||
{"TRACE", 1},
|
||||
{"TREE", 0},
|
||||
@ -270,7 +270,7 @@ static const ACPI_DB_COMMAND_HELP AcpiGbl_DbCommandHelp[] =
|
||||
{1, " Owner <OwnerId> [Depth]", "Display loaded namespace by object owner\n"},
|
||||
{1, " Paths", "Display full pathnames of namespace objects\n"},
|
||||
{1, " Predefined", "Check all predefined names\n"},
|
||||
{1, " Prefix [<NamePath>]", "Set or Get current execution prefix\n"},
|
||||
{1, " Prefix [<Namepath>]", "Set or Get current execution prefix\n"},
|
||||
{1, " References <Addr>", "Find all references to object at addr\n"},
|
||||
{1, " Resources [DeviceName]", "Display Device resources (no arg = all devices)\n"},
|
||||
{1, " Set N <NamedObject> <Value>", "Set value for named integer\n"},
|
||||
@ -297,8 +297,12 @@ static const ACPI_DB_COMMAND_HELP AcpiGbl_DbCommandHelp[] =
|
||||
{1, " Results", "Display method result stack\n"},
|
||||
{1, " Set <A|L> <#> <Value>", "Set method data (Arguments/Locals)\n"},
|
||||
{1, " Stop", "Terminate control method\n"},
|
||||
{1, " Thread <Threads><Loops><NamePath>", "Spawn threads to execute method(s)\n"},
|
||||
{1, " Trace <method name>", "Trace method execution\n"},
|
||||
{1, " Thread <Threads><Loops><Namepath>", "Spawn threads to execute method(s)\n"},
|
||||
{5, " Trace <State> [<Namepath>] [Once]", "Trace control method execution\n"},
|
||||
{1, " Enable", "Enable all messages\n"},
|
||||
{1, " Disable", "Disable tracing\n"},
|
||||
{1, " Method", "Enable method execution messages\n"},
|
||||
{1, " Opcode", "Enable opcode execution messages\n"},
|
||||
{1, " Tree", "Display control method calling tree\n"},
|
||||
{1, " <Enter>", "Single step next AML opcode (over calls)\n"},
|
||||
|
||||
@ -749,15 +753,22 @@ AcpiDbCommandDispatch (
|
||||
return (AE_CTRL_TERMINATE);
|
||||
}
|
||||
|
||||
|
||||
/* Add all commands that come here to the history buffer */
|
||||
|
||||
AcpiDbAddToHistory (InputBuffer);
|
||||
/* Find command and add to the history buffer */
|
||||
|
||||
ParamCount = AcpiDbGetLine (InputBuffer);
|
||||
CommandIndex = AcpiDbMatchCommand (AcpiGbl_DbArgs[0]);
|
||||
Temp = 0;
|
||||
|
||||
/*
|
||||
* We don't want to add the !! command to the history buffer. It
|
||||
* would cause an infinite loop because it would always be the
|
||||
* previous command.
|
||||
*/
|
||||
if (CommandIndex != CMD_HISTORY_LAST)
|
||||
{
|
||||
AcpiDbAddToHistory (InputBuffer);
|
||||
}
|
||||
|
||||
/* Verify that we have the minimum number of params */
|
||||
|
||||
if (ParamCount < AcpiGbl_DbCommands[CommandIndex].MinArgs)
|
||||
@ -1110,7 +1121,7 @@ AcpiDbCommandDispatch (
|
||||
|
||||
case CMD_TRACE:
|
||||
|
||||
(void) AcpiDebugTrace (AcpiGbl_DbArgs[1],0,0,1);
|
||||
AcpiDbTrace (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2], AcpiGbl_DbArgs[3]);
|
||||
break;
|
||||
|
||||
case CMD_TREE:
|
||||
|
@ -46,7 +46,9 @@
|
||||
#include <contrib/dev/acpica/include/acdispat.h>
|
||||
#include <contrib/dev/acpica/include/acnamesp.h>
|
||||
#include <contrib/dev/acpica/include/acdebug.h>
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
#include <contrib/dev/acpica/include/acdisasm.h>
|
||||
#endif
|
||||
#include <contrib/dev/acpica/include/acparser.h>
|
||||
#include <contrib/dev/acpica/include/acpredef.h>
|
||||
|
||||
@ -79,6 +81,7 @@ AcpiDbSetMethodBreakpoint (
|
||||
ACPI_PARSE_OBJECT *Op)
|
||||
{
|
||||
UINT32 Address;
|
||||
UINT32 AmlOffset;
|
||||
|
||||
|
||||
if (!Op)
|
||||
@ -90,10 +93,12 @@ AcpiDbSetMethodBreakpoint (
|
||||
/* Get and verify the breakpoint address */
|
||||
|
||||
Address = strtoul (Location, NULL, 16);
|
||||
if (Address <= Op->Common.AmlOffset)
|
||||
AmlOffset = (UINT32) ACPI_PTR_DIFF (Op->Common.Aml,
|
||||
WalkState->ParserState.AmlStart);
|
||||
if (Address <= AmlOffset)
|
||||
{
|
||||
AcpiOsPrintf ("Breakpoint %X is beyond current address %X\n",
|
||||
Address, Op->Common.AmlOffset);
|
||||
Address, AmlOffset);
|
||||
}
|
||||
|
||||
/* Save breakpoint in current walk */
|
||||
@ -238,7 +243,7 @@ AcpiDbSetMethodData (
|
||||
ObjDesc = WalkState->Arguments[Index].Object;
|
||||
|
||||
AcpiOsPrintf ("Arg%u: ", Index);
|
||||
AcpiDmDisplayInternalObject (ObjDesc, WalkState);
|
||||
AcpiDbDisplayInternalObject (ObjDesc, WalkState);
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
@ -261,7 +266,7 @@ AcpiDbSetMethodData (
|
||||
ObjDesc = WalkState->LocalVariables[Index].Object;
|
||||
|
||||
AcpiOsPrintf ("Local%u: ", Index);
|
||||
AcpiDmDisplayInternalObject (ObjDesc, WalkState);
|
||||
AcpiDbDisplayInternalObject (ObjDesc, WalkState);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -352,7 +357,7 @@ AcpiDbDisassembleMethod (
|
||||
|
||||
ObjDesc = Method->Object;
|
||||
|
||||
Op = AcpiPsCreateScopeOp ();
|
||||
Op = AcpiPsCreateScopeOp (ObjDesc->Method.AmlStart);
|
||||
if (!Op)
|
||||
{
|
||||
return (AE_NO_MEMORY);
|
||||
@ -392,15 +397,16 @@ AcpiDbDisassembleMethod (
|
||||
WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE;
|
||||
|
||||
Status = AcpiPsParseAml (WalkState);
|
||||
|
||||
#ifdef ACPI_DISASSEMBER
|
||||
(void) AcpiDmParseDeferredOps (Op);
|
||||
|
||||
/* Now we can disassemble the method */
|
||||
|
||||
AcpiGbl_DbOpt_Verbose = FALSE;
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
AcpiDmDisassemble (NULL, Op, 0);
|
||||
#endif
|
||||
AcpiGbl_DbOpt_Verbose = TRUE;
|
||||
#endif
|
||||
|
||||
AcpiPsDeleteParseTree (Op);
|
||||
|
||||
|
@ -385,7 +385,7 @@ AcpiDbWalkAndMatchName (
|
||||
/* Get the full pathname to this object */
|
||||
|
||||
Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
|
||||
Status = AcpiNsHandleToPathname (ObjHandle, &Buffer);
|
||||
Status = AcpiNsHandleToPathname (ObjHandle, &Buffer, FALSE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle);
|
||||
@ -582,7 +582,7 @@ AcpiDbWalkForSpecificObjects (
|
||||
/* Get and display the full pathname to this object */
|
||||
|
||||
Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
|
||||
Status = AcpiNsHandleToPathname (ObjHandle, &Buffer);
|
||||
Status = AcpiNsHandleToPathname (ObjHandle, &Buffer, FALSE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle);
|
||||
@ -886,7 +886,7 @@ AcpiDbBusWalk (
|
||||
/* Get the full path to this device object */
|
||||
|
||||
Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
|
||||
Status = AcpiNsHandleToPathname (ObjHandle, &Buffer);
|
||||
Status = AcpiNsHandleToPathname (ObjHandle, &Buffer, FALSE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
AcpiOsPrintf ("Could Not get pathname for object %p\n", ObjHandle);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Module Name: dmobject - ACPI object decode and display
|
||||
* Module Name: dbobject - ACPI object decode and display
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -44,28 +44,30 @@
|
||||
#include <contrib/dev/acpica/include/acpi.h>
|
||||
#include <contrib/dev/acpica/include/accommon.h>
|
||||
#include <contrib/dev/acpica/include/acnamesp.h>
|
||||
#include <contrib/dev/acpica/include/acdisasm.h>
|
||||
|
||||
|
||||
#include <contrib/dev/acpica/include/acdebug.h>
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
#include <contrib/dev/acpica/include/acdisasm.h>
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef ACPI_DEBUGGER
|
||||
|
||||
#define _COMPONENT ACPI_CA_DEBUGGER
|
||||
ACPI_MODULE_NAME ("dmnames")
|
||||
ACPI_MODULE_NAME ("dbobject")
|
||||
|
||||
/* Local prototypes */
|
||||
|
||||
static void
|
||||
AcpiDmDecodeNode (
|
||||
AcpiDbDecodeNode (
|
||||
ACPI_NAMESPACE_NODE *Node);
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmDumpMethodInfo
|
||||
* FUNCTION: AcpiDbDumpMethodInfo
|
||||
*
|
||||
* PARAMETERS: Status - Method execution status
|
||||
* WalkState - Current state of the parse tree walk
|
||||
* Op - Executing parse op
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
@ -76,15 +78,11 @@ AcpiDmDecodeNode (
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiDmDumpMethodInfo (
|
||||
AcpiDbDumpMethodInfo (
|
||||
ACPI_STATUS Status,
|
||||
ACPI_WALK_STATE *WalkState,
|
||||
ACPI_PARSE_OBJECT *Op)
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
{
|
||||
ACPI_PARSE_OBJECT *Next;
|
||||
ACPI_THREAD_STATE *Thread;
|
||||
ACPI_WALK_STATE *NextWalkState;
|
||||
ACPI_NAMESPACE_NODE *PreviousMethod = NULL;
|
||||
|
||||
|
||||
/* Ignore control codes, they are not errors */
|
||||
@ -113,68 +111,19 @@ AcpiDmDumpMethodInfo (
|
||||
return;
|
||||
}
|
||||
|
||||
/* Display exception and method name */
|
||||
|
||||
AcpiOsPrintf ("\n**** Exception %s during execution of method ",
|
||||
AcpiFormatException (Status));
|
||||
AcpiNsPrintNodePathname (WalkState->MethodNode, NULL);
|
||||
|
||||
/* Display stack of executing methods */
|
||||
|
||||
AcpiOsPrintf ("\n\nMethod Execution Stack:\n");
|
||||
NextWalkState = Thread->WalkStateList;
|
||||
|
||||
/* Walk list of linked walk states */
|
||||
|
||||
while (NextWalkState)
|
||||
{
|
||||
AcpiOsPrintf (" Method [%4.4s] executing: ",
|
||||
AcpiUtGetNodeName (NextWalkState->MethodNode));
|
||||
|
||||
/* First method is the currently executing method */
|
||||
|
||||
if (NextWalkState == WalkState)
|
||||
{
|
||||
if (Op)
|
||||
{
|
||||
/* Display currently executing ASL statement */
|
||||
|
||||
Next = Op->Common.Next;
|
||||
Op->Common.Next = NULL;
|
||||
|
||||
AcpiDmDisassemble (NextWalkState, Op, ACPI_UINT32_MAX);
|
||||
Op->Common.Next = Next;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* This method has called another method
|
||||
* NOTE: the method call parse subtree is already deleted at this
|
||||
* point, so we cannot disassemble the method invocation.
|
||||
*/
|
||||
AcpiOsPrintf ("Call to method ");
|
||||
AcpiNsPrintNodePathname (PreviousMethod, NULL);
|
||||
}
|
||||
|
||||
PreviousMethod = NextWalkState->MethodNode;
|
||||
NextWalkState = NextWalkState->Next;
|
||||
AcpiOsPrintf ("\n");
|
||||
}
|
||||
|
||||
/* Display the method locals and arguments */
|
||||
|
||||
AcpiOsPrintf ("\n");
|
||||
AcpiDmDisplayLocals (WalkState);
|
||||
AcpiDbDecodeLocals (WalkState);
|
||||
AcpiOsPrintf ("\n");
|
||||
AcpiDmDisplayArguments (WalkState);
|
||||
AcpiDbDecodeArguments (WalkState);
|
||||
AcpiOsPrintf ("\n");
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmDecodeInternalObject
|
||||
* FUNCTION: AcpiDbDecodeInternalObject
|
||||
*
|
||||
* PARAMETERS: ObjDesc - Object to be displayed
|
||||
*
|
||||
@ -185,7 +134,7 @@ AcpiDmDumpMethodInfo (
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiDmDecodeInternalObject (
|
||||
AcpiDbDecodeInternalObject (
|
||||
ACPI_OPERAND_OBJECT *ObjDesc)
|
||||
{
|
||||
UINT32 i;
|
||||
@ -247,7 +196,7 @@ AcpiDmDecodeInternalObject (
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmDecodeNode
|
||||
* FUNCTION: AcpiDbDecodeNode
|
||||
*
|
||||
* PARAMETERS: Node - Object to be displayed
|
||||
*
|
||||
@ -258,7 +207,7 @@ AcpiDmDecodeInternalObject (
|
||||
******************************************************************************/
|
||||
|
||||
static void
|
||||
AcpiDmDecodeNode (
|
||||
AcpiDbDecodeNode (
|
||||
ACPI_NAMESPACE_NODE *Node)
|
||||
{
|
||||
|
||||
@ -290,7 +239,7 @@ AcpiDmDecodeNode (
|
||||
|
||||
default:
|
||||
|
||||
AcpiDmDecodeInternalObject (AcpiNsGetAttachedObject (Node));
|
||||
AcpiDbDecodeInternalObject (AcpiNsGetAttachedObject (Node));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -298,7 +247,7 @@ AcpiDmDecodeNode (
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmDisplayInternalObject
|
||||
* FUNCTION: AcpiDbDisplayInternalObject
|
||||
*
|
||||
* PARAMETERS: ObjDesc - Object to be displayed
|
||||
* WalkState - Current walk state
|
||||
@ -310,7 +259,7 @@ AcpiDmDecodeNode (
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiDmDisplayInternalObject (
|
||||
AcpiDbDisplayInternalObject (
|
||||
ACPI_OPERAND_OBJECT *ObjDesc,
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
{
|
||||
@ -336,7 +285,7 @@ AcpiDmDisplayInternalObject (
|
||||
|
||||
case ACPI_DESC_TYPE_NAMED:
|
||||
|
||||
AcpiDmDecodeNode ((ACPI_NAMESPACE_NODE *) ObjDesc);
|
||||
AcpiDbDecodeNode ((ACPI_NAMESPACE_NODE *) ObjDesc);
|
||||
break;
|
||||
|
||||
case ACPI_DESC_TYPE_OPERAND:
|
||||
@ -368,7 +317,7 @@ AcpiDmDisplayInternalObject (
|
||||
ObjDesc = WalkState->LocalVariables
|
||||
[ObjDesc->Reference.Value].Object;
|
||||
AcpiOsPrintf ("%p", ObjDesc);
|
||||
AcpiDmDecodeInternalObject (ObjDesc);
|
||||
AcpiDbDecodeInternalObject (ObjDesc);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -380,7 +329,7 @@ AcpiDmDisplayInternalObject (
|
||||
ObjDesc = WalkState->Arguments
|
||||
[ObjDesc->Reference.Value].Object;
|
||||
AcpiOsPrintf ("%p", ObjDesc);
|
||||
AcpiDmDecodeInternalObject (ObjDesc);
|
||||
AcpiDbDecodeInternalObject (ObjDesc);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -391,7 +340,7 @@ AcpiDmDisplayInternalObject (
|
||||
case ACPI_TYPE_BUFFER_FIELD:
|
||||
|
||||
AcpiOsPrintf ("%p", ObjDesc->Reference.Object);
|
||||
AcpiDmDecodeInternalObject (ObjDesc->Reference.Object);
|
||||
AcpiDbDecodeInternalObject (ObjDesc->Reference.Object);
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_PACKAGE:
|
||||
@ -403,7 +352,7 @@ AcpiDmDisplayInternalObject (
|
||||
}
|
||||
else
|
||||
{
|
||||
AcpiDmDecodeInternalObject (
|
||||
AcpiDbDecodeInternalObject (
|
||||
*(ObjDesc->Reference.Where));
|
||||
}
|
||||
break;
|
||||
@ -428,11 +377,11 @@ AcpiDmDisplayInternalObject (
|
||||
switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc->Reference.Object))
|
||||
{
|
||||
case ACPI_DESC_TYPE_NAMED:
|
||||
AcpiDmDecodeNode (ObjDesc->Reference.Object);
|
||||
AcpiDbDecodeNode (ObjDesc->Reference.Object);
|
||||
break;
|
||||
|
||||
case ACPI_DESC_TYPE_OPERAND:
|
||||
AcpiDmDecodeInternalObject (ObjDesc->Reference.Object);
|
||||
AcpiDbDecodeInternalObject (ObjDesc->Reference.Object);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -442,7 +391,7 @@ AcpiDmDisplayInternalObject (
|
||||
|
||||
case ACPI_REFCLASS_NAME:
|
||||
|
||||
AcpiDmDecodeNode (ObjDesc->Reference.Node);
|
||||
AcpiDbDecodeNode (ObjDesc->Reference.Node);
|
||||
break;
|
||||
|
||||
case ACPI_REFCLASS_DEBUG:
|
||||
@ -461,7 +410,7 @@ AcpiDmDisplayInternalObject (
|
||||
default:
|
||||
|
||||
AcpiOsPrintf ("<Obj> ");
|
||||
AcpiDmDecodeInternalObject (ObjDesc);
|
||||
AcpiDbDecodeInternalObject (ObjDesc);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@ -479,7 +428,7 @@ AcpiDmDisplayInternalObject (
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmDisplayLocals
|
||||
* FUNCTION: AcpiDbDecodeLocals
|
||||
*
|
||||
* PARAMETERS: WalkState - State for current method
|
||||
*
|
||||
@ -490,7 +439,7 @@ AcpiDmDisplayInternalObject (
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiDmDisplayLocals (
|
||||
AcpiDbDecodeLocals (
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
{
|
||||
UINT32 i;
|
||||
@ -520,14 +469,14 @@ AcpiDmDisplayLocals (
|
||||
{
|
||||
ObjDesc = WalkState->LocalVariables[i].Object;
|
||||
AcpiOsPrintf (" Local%X: ", i);
|
||||
AcpiDmDisplayInternalObject (ObjDesc, WalkState);
|
||||
AcpiDbDisplayInternalObject (ObjDesc, WalkState);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDmDisplayArguments
|
||||
* FUNCTION: AcpiDbDecodeArguments
|
||||
*
|
||||
* PARAMETERS: WalkState - State for current method
|
||||
*
|
||||
@ -538,7 +487,7 @@ AcpiDmDisplayLocals (
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiDmDisplayArguments (
|
||||
AcpiDbDecodeArguments (
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
{
|
||||
UINT32 i;
|
||||
@ -569,7 +518,7 @@ AcpiDmDisplayArguments (
|
||||
{
|
||||
ObjDesc = WalkState->Arguments[i].Object;
|
||||
AcpiOsPrintf (" Arg%u: ", i);
|
||||
AcpiDmDisplayInternalObject (ObjDesc, WalkState);
|
||||
AcpiDbDisplayInternalObject (ObjDesc, WalkState);
|
||||
}
|
||||
}
|
||||
|
@ -45,7 +45,6 @@
|
||||
#include <contrib/dev/acpica/include/accommon.h>
|
||||
#include <contrib/dev/acpica/include/acnamesp.h>
|
||||
#include <contrib/dev/acpica/include/acdebug.h>
|
||||
#include <contrib/dev/acpica/include/acdisasm.h>
|
||||
|
||||
|
||||
#ifdef ACPI_DEBUGGER
|
||||
@ -223,7 +222,7 @@ AcpiDbDumpExternalObject (
|
||||
case ACPI_TYPE_LOCAL_REFERENCE:
|
||||
|
||||
AcpiOsPrintf ("[Object Reference] = ");
|
||||
AcpiDmDisplayInternalObject (ObjDesc->Reference.Handle, NULL);
|
||||
AcpiDbDisplayInternalObject (ObjDesc->Reference.Handle, NULL);
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_PROCESSOR:
|
||||
|
@ -45,7 +45,9 @@
|
||||
#include <contrib/dev/acpica/include/accommon.h>
|
||||
#include <contrib/dev/acpica/include/amlcode.h>
|
||||
#include <contrib/dev/acpica/include/acdebug.h>
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
#include <contrib/dev/acpica/include/acdisasm.h>
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef ACPI_DEBUGGER
|
||||
@ -179,6 +181,7 @@ AcpiDbSingleStep (
|
||||
UINT32 OriginalDebugLevel;
|
||||
ACPI_PARSE_OBJECT *DisplayOp;
|
||||
ACPI_PARSE_OBJECT *ParentOp;
|
||||
UINT32 AmlOffset;
|
||||
|
||||
|
||||
ACPI_FUNCTION_ENTRY ();
|
||||
@ -192,15 +195,18 @@ AcpiDbSingleStep (
|
||||
return (AE_ABORT_METHOD);
|
||||
}
|
||||
|
||||
AmlOffset = (UINT32) ACPI_PTR_DIFF (Op->Common.Aml,
|
||||
WalkState->ParserState.AmlStart);
|
||||
|
||||
/* Check for single-step breakpoint */
|
||||
|
||||
if (WalkState->MethodBreakpoint &&
|
||||
(WalkState->MethodBreakpoint <= Op->Common.AmlOffset))
|
||||
(WalkState->MethodBreakpoint <= AmlOffset))
|
||||
{
|
||||
/* Check if the breakpoint has been reached or passed */
|
||||
/* Hit the breakpoint, resume single step, reset breakpoint */
|
||||
|
||||
AcpiOsPrintf ("***Break*** at AML offset %X\n", Op->Common.AmlOffset);
|
||||
AcpiOsPrintf ("***Break*** at AML offset %X\n", AmlOffset);
|
||||
AcpiGbl_CmSingleStep = TRUE;
|
||||
AcpiGbl_StepToNextCall = FALSE;
|
||||
WalkState->MethodBreakpoint = 0;
|
||||
@ -209,10 +215,10 @@ AcpiDbSingleStep (
|
||||
/* Check for user breakpoint (Must be on exact Aml offset) */
|
||||
|
||||
else if (WalkState->UserBreakpoint &&
|
||||
(WalkState->UserBreakpoint == Op->Common.AmlOffset))
|
||||
(WalkState->UserBreakpoint == AmlOffset))
|
||||
{
|
||||
AcpiOsPrintf ("***UserBreakpoint*** at AML offset %X\n",
|
||||
Op->Common.AmlOffset);
|
||||
AmlOffset);
|
||||
AcpiGbl_CmSingleStep = TRUE;
|
||||
AcpiGbl_StepToNextCall = FALSE;
|
||||
WalkState->MethodBreakpoint = 0;
|
||||
@ -425,7 +431,7 @@ AcpiDbInitialize (
|
||||
AcpiGbl_DbOutputFlags = ACPI_DB_CONSOLE_OUTPUT;
|
||||
|
||||
AcpiGbl_DbOpt_Disasm = FALSE;
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
#ifndef _KERNEL
|
||||
AcpiGbl_DbOpt_Verbose = TRUE;
|
||||
#endif
|
||||
AcpiGbl_DbOpt_NoIniMethods = FALSE;
|
||||
@ -476,7 +482,7 @@ AcpiDbInitialize (
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
#ifndef _KERNEL
|
||||
if (!AcpiGbl_DbOpt_Verbose)
|
||||
{
|
||||
AcpiGbl_DbOpt_Disasm = TRUE;
|
||||
|
@ -165,7 +165,6 @@ AcpiDmDeferredParse (
|
||||
ACPI_STATUS Status;
|
||||
ACPI_PARSE_OBJECT *SearchOp;
|
||||
ACPI_PARSE_OBJECT *StartOp;
|
||||
UINT32 BaseAmlOffset;
|
||||
ACPI_PARSE_OBJECT *NewRootOp;
|
||||
ACPI_PARSE_OBJECT *ExtraOp;
|
||||
|
||||
@ -202,19 +201,10 @@ AcpiDmDeferredParse (
|
||||
WalkState->ParseFlags |= ACPI_PARSE_DISASSEMBLE;
|
||||
Status = AcpiPsParseAml (WalkState);
|
||||
|
||||
/*
|
||||
* We need to update all of the AML offsets, since the parser thought
|
||||
* that the method began at offset zero. In reality, it began somewhere
|
||||
* within the ACPI table, at the BaseAmlOffset. Walk the entire tree that
|
||||
* was just created and update the AmlOffset in each Op.
|
||||
*/
|
||||
BaseAmlOffset = (Op->Common.Value.Arg)->Common.AmlOffset + 1;
|
||||
StartOp = (Op->Common.Value.Arg)->Common.Next;
|
||||
SearchOp = StartOp;
|
||||
|
||||
while (SearchOp)
|
||||
{
|
||||
SearchOp->Common.AmlOffset += BaseAmlOffset;
|
||||
SearchOp = AcpiPsGetDepthNext (StartOp, SearchOp);
|
||||
}
|
||||
|
||||
|
@ -179,7 +179,7 @@ AcpiPsDisplayObjectPathname (
|
||||
/* Convert NamedDesc/handle to a full pathname */
|
||||
|
||||
Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
|
||||
Status = AcpiNsHandleToPathname (Node, &Buffer);
|
||||
Status = AcpiNsHandleToPathname (Node, &Buffer, FALSE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
AcpiOsPrintf ("****Could not get pathname****)");
|
||||
|
@ -48,6 +48,7 @@
|
||||
#include <contrib/dev/acpica/include/acdisasm.h>
|
||||
#include <contrib/dev/acpica/include/acinterp.h>
|
||||
#include <contrib/dev/acpica/include/acnamesp.h>
|
||||
#include <contrib/dev/acpica/include/acdebug.h>
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
|
||||
@ -967,7 +968,7 @@ AcpiDmDisassembleOneOp (
|
||||
(WalkState->Results) &&
|
||||
(WalkState->ResultCount))
|
||||
{
|
||||
AcpiDmDecodeInternalObject (
|
||||
AcpiDbDecodeInternalObject (
|
||||
WalkState->Results->Results.ObjDesc [
|
||||
(WalkState->ResultCount - 1) %
|
||||
ACPI_RESULTS_FRAME_OBJ_NUM]);
|
||||
|
@ -313,6 +313,8 @@ AcpiDmBlockType (
|
||||
return (BLOCK_NONE);
|
||||
}
|
||||
|
||||
/*lint -fallthrough */
|
||||
|
||||
default:
|
||||
|
||||
OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
|
||||
@ -410,8 +412,24 @@ AcpiDmDescendingOp (
|
||||
const ACPI_OPCODE_INFO *OpInfo;
|
||||
UINT32 Name;
|
||||
ACPI_PARSE_OBJECT *NextOp;
|
||||
UINT32 AmlOffset;
|
||||
|
||||
|
||||
if (AcpiGbl_DbOpt_Verbose && AcpiGbl_PreviousOp)
|
||||
{
|
||||
/* Dump the entire statement in AML byte code */
|
||||
|
||||
if (Op->Common.Aml > AcpiGbl_PreviousOp->Common.Aml)
|
||||
{
|
||||
AcpiOsPrintf ("\n");
|
||||
AcpiUtDumpBuffer (AcpiGbl_PreviousOp->Common.Aml,
|
||||
(Op->Common.Aml - AcpiGbl_PreviousOp->Common.Aml),
|
||||
DB_BYTE_DISPLAY, 0);
|
||||
AcpiDmIndent (Level);
|
||||
}
|
||||
}
|
||||
AcpiGbl_PreviousOp = Op;
|
||||
|
||||
if (Op->Common.DisasmFlags & ACPI_PARSEOP_IGNORE)
|
||||
{
|
||||
/* Ignore this op -- it was handled elsewhere */
|
||||
@ -427,10 +445,12 @@ AcpiDmDescendingOp (
|
||||
|
||||
if (Info->WalkState)
|
||||
{
|
||||
AmlOffset = (UINT32) ACPI_PTR_DIFF (Op->Common.Aml,
|
||||
Info->WalkState->ParserState.AmlStart);
|
||||
VERBOSE_PRINT ((DB_FULL_OP_INFO,
|
||||
(Info->WalkState->MethodNode ?
|
||||
Info->WalkState->MethodNode->Name.Ascii : " "),
|
||||
Op->Common.AmlOffset, (UINT32) Op->Common.AmlOpcode));
|
||||
AmlOffset, (UINT32) Op->Common.AmlOpcode));
|
||||
}
|
||||
|
||||
if (Op->Common.AmlOpcode == AML_SCOPE_OP)
|
||||
|
@ -94,7 +94,7 @@ AcpiDsExecuteArguments (
|
||||
|
||||
/* Allocate a new parser op to be the root of the parsed tree */
|
||||
|
||||
Op = AcpiPsAllocOp (AML_INT_EVAL_SUBTREE_OP);
|
||||
Op = AcpiPsAllocOp (AML_INT_EVAL_SUBTREE_OP, AmlStart);
|
||||
if (!Op)
|
||||
{
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
@ -141,7 +141,7 @@ AcpiDsExecuteArguments (
|
||||
|
||||
/* Evaluate the deferred arguments */
|
||||
|
||||
Op = AcpiPsAllocOp (AML_INT_EVAL_SUBTREE_OP);
|
||||
Op = AcpiPsAllocOp (AML_INT_EVAL_SUBTREE_OP, AmlStart);
|
||||
if (!Op)
|
||||
{
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
|
249
sys/contrib/dev/acpica/components/dispatcher/dsdebug.c
Normal file
249
sys/contrib/dev/acpica/components/dispatcher/dsdebug.c
Normal file
@ -0,0 +1,249 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Module Name: dsdebug - Parser/Interpreter interface - debugging
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2000 - 2015, 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 <contrib/dev/acpica/include/acpi.h>
|
||||
#include <contrib/dev/acpica/include/accommon.h>
|
||||
#include <contrib/dev/acpica/include/acdispat.h>
|
||||
#include <contrib/dev/acpica/include/acnamesp.h>
|
||||
#include <contrib/dev/acpica/include/acdisasm.h>
|
||||
#include <contrib/dev/acpica/include/acinterp.h>
|
||||
|
||||
|
||||
#define _COMPONENT ACPI_DISPATCHER
|
||||
ACPI_MODULE_NAME ("dsdebug")
|
||||
|
||||
|
||||
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
|
||||
|
||||
/* Local prototypes */
|
||||
|
||||
static void
|
||||
AcpiDsPrintNodePathname (
|
||||
ACPI_NAMESPACE_NODE *Node,
|
||||
const char *Message);
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDsPrintNodePathname
|
||||
*
|
||||
* PARAMETERS: Node - Object
|
||||
* Message - Prefix message
|
||||
*
|
||||
* DESCRIPTION: Print an object's full namespace pathname
|
||||
* Manages allocation/freeing of a pathname buffer
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void
|
||||
AcpiDsPrintNodePathname (
|
||||
ACPI_NAMESPACE_NODE *Node,
|
||||
const char *Message)
|
||||
{
|
||||
ACPI_BUFFER Buffer;
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE (DsPrintNodePathname);
|
||||
|
||||
if (!Node)
|
||||
{
|
||||
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DISPATCH, "[NULL NAME]"));
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
/* Convert handle to full pathname and print it (with supplied message) */
|
||||
|
||||
Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
|
||||
|
||||
Status = AcpiNsHandleToPathname (Node, &Buffer, FALSE);
|
||||
if (ACPI_SUCCESS (Status))
|
||||
{
|
||||
if (Message)
|
||||
{
|
||||
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DISPATCH, "%s ", Message));
|
||||
}
|
||||
|
||||
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DISPATCH, "[%s] (Node %p)",
|
||||
(char *) Buffer.Pointer, Node));
|
||||
ACPI_FREE (Buffer.Pointer);
|
||||
}
|
||||
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDsDumpMethodStack
|
||||
*
|
||||
* PARAMETERS: Status - Method execution status
|
||||
* WalkState - Current state of the parse tree walk
|
||||
* Op - Executing parse op
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Called when a method has been aborted because of an error.
|
||||
* Dumps the method execution stack.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiDsDumpMethodStack (
|
||||
ACPI_STATUS Status,
|
||||
ACPI_WALK_STATE *WalkState,
|
||||
ACPI_PARSE_OBJECT *Op)
|
||||
{
|
||||
ACPI_PARSE_OBJECT *Next;
|
||||
ACPI_THREAD_STATE *Thread;
|
||||
ACPI_WALK_STATE *NextWalkState;
|
||||
ACPI_NAMESPACE_NODE *PreviousMethod = NULL;
|
||||
ACPI_OPERAND_OBJECT *MethodDesc;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE (DsDumpMethodStack);
|
||||
|
||||
/* Ignore control codes, they are not errors */
|
||||
|
||||
if ((Status & AE_CODE_MASK) == AE_CODE_CONTROL)
|
||||
{
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
/* We may be executing a deferred opcode */
|
||||
|
||||
if (WalkState->DeferredNode)
|
||||
{
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
|
||||
"Executing subtree for Buffer/Package/Region\n"));
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
/*
|
||||
* If there is no Thread, we are not actually executing a method.
|
||||
* This can happen when the iASL compiler calls the interpreter
|
||||
* to perform constant folding.
|
||||
*/
|
||||
Thread = WalkState->Thread;
|
||||
if (!Thread)
|
||||
{
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
/* Display exception and method name */
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
|
||||
"\n**** Exception %s during execution of method ",
|
||||
AcpiFormatException (Status)));
|
||||
AcpiDsPrintNodePathname (WalkState->MethodNode, NULL);
|
||||
|
||||
/* Display stack of executing methods */
|
||||
|
||||
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DISPATCH,
|
||||
"\n\nMethod Execution Stack:\n"));
|
||||
NextWalkState = Thread->WalkStateList;
|
||||
|
||||
/* Walk list of linked walk states */
|
||||
|
||||
while (NextWalkState)
|
||||
{
|
||||
MethodDesc = NextWalkState->MethodDesc;
|
||||
if (MethodDesc)
|
||||
{
|
||||
AcpiExStopTraceMethod (
|
||||
(ACPI_NAMESPACE_NODE *) MethodDesc->Method.Node,
|
||||
MethodDesc, WalkState);
|
||||
}
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
|
||||
" Method [%4.4s] executing: ",
|
||||
AcpiUtGetNodeName (NextWalkState->MethodNode)));
|
||||
|
||||
/* First method is the currently executing method */
|
||||
|
||||
if (NextWalkState == WalkState)
|
||||
{
|
||||
if (Op)
|
||||
{
|
||||
/* Display currently executing ASL statement */
|
||||
|
||||
Next = Op->Common.Next;
|
||||
Op->Common.Next = NULL;
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
AcpiDmDisassemble (NextWalkState, Op, ACPI_UINT32_MAX);
|
||||
#endif
|
||||
Op->Common.Next = Next;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* This method has called another method
|
||||
* NOTE: the method call parse subtree is already deleted at this
|
||||
* point, so we cannot disassemble the method invocation.
|
||||
*/
|
||||
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DISPATCH, "Call to method "));
|
||||
AcpiDsPrintNodePathname (PreviousMethod, NULL);
|
||||
}
|
||||
|
||||
PreviousMethod = NextWalkState->MethodNode;
|
||||
NextWalkState = NextWalkState->Next;
|
||||
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_DISPATCH, "\n"));
|
||||
}
|
||||
|
||||
return_VOID;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void
|
||||
AcpiDsDumpMethodStack (
|
||||
ACPI_STATUS Status,
|
||||
ACPI_WALK_STATE *WalkState,
|
||||
ACPI_PARSE_OBJECT *Op)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
#endif
|
@ -46,9 +46,9 @@
|
||||
#include <contrib/dev/acpica/include/acdispat.h>
|
||||
#include <contrib/dev/acpica/include/acinterp.h>
|
||||
#include <contrib/dev/acpica/include/acnamesp.h>
|
||||
#include <contrib/dev/acpica/include/acdisasm.h>
|
||||
#include <contrib/dev/acpica/include/acparser.h>
|
||||
#include <contrib/dev/acpica/include/amlcode.h>
|
||||
#include <contrib/dev/acpica/include/acdebug.h>
|
||||
|
||||
|
||||
#define _COMPONENT ACPI_DISPATCHER
|
||||
@ -109,7 +109,7 @@ AcpiDsAutoSerializeMethod (
|
||||
|
||||
/* Create/Init a root op for the method parse tree */
|
||||
|
||||
Op = AcpiPsAllocOp (AML_METHOD_OP);
|
||||
Op = AcpiPsAllocOp (AML_METHOD_OP, ObjDesc->Method.AmlStart);
|
||||
if (!Op)
|
||||
{
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
@ -213,7 +213,7 @@ AcpiDsDetectNamedOpcodes (
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Called on method error. Invoke the global exception handler if
|
||||
* present, dump the method data if the disassembler is configured
|
||||
* present, dump the method data if the debugger is configured
|
||||
*
|
||||
* Note: Allows the exception handler to change the status code
|
||||
*
|
||||
@ -224,6 +224,9 @@ AcpiDsMethodError (
|
||||
ACPI_STATUS Status,
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
{
|
||||
UINT32 AmlOffset;
|
||||
|
||||
|
||||
ACPI_FUNCTION_ENTRY ();
|
||||
|
||||
|
||||
@ -247,23 +250,28 @@ AcpiDsMethodError (
|
||||
* Handler can map the exception code to anything it wants, including
|
||||
* AE_OK, in which case the executing method will not be aborted.
|
||||
*/
|
||||
AmlOffset = (UINT32) ACPI_PTR_DIFF (WalkState->Aml,
|
||||
WalkState->ParserState.AmlStart);
|
||||
|
||||
Status = AcpiGbl_ExceptionHandler (Status,
|
||||
WalkState->MethodNode ?
|
||||
WalkState->MethodNode->Name.Integer : 0,
|
||||
WalkState->Opcode, WalkState->AmlOffset, NULL);
|
||||
WalkState->Opcode, AmlOffset, NULL);
|
||||
AcpiExEnterInterpreter ();
|
||||
}
|
||||
|
||||
AcpiDsClearImplicitReturn (WalkState);
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
/* Display method locals/args if disassembler is present */
|
||||
AcpiDsDumpMethodStack (Status, WalkState, WalkState->Op);
|
||||
|
||||
AcpiDmDumpMethodInfo (Status, WalkState, WalkState->Op);
|
||||
}
|
||||
/* Display method locals/args if debugger is present */
|
||||
|
||||
#ifdef ACPI_DEBUGGER
|
||||
AcpiDbDumpMethodInfo (Status, WalkState);
|
||||
#endif
|
||||
}
|
||||
|
||||
return (Status);
|
||||
}
|
||||
@ -349,6 +357,8 @@ AcpiDsBeginMethodExecution (
|
||||
return_ACPI_STATUS (AE_NULL_ENTRY);
|
||||
}
|
||||
|
||||
AcpiExStartTraceMethod (MethodNode, ObjDesc, WalkState);
|
||||
|
||||
/* Prevent wraparound of thread count */
|
||||
|
||||
if (ObjDesc->Method.ThreadCount == ACPI_UINT8_MAX)
|
||||
@ -610,10 +620,7 @@ AcpiDsCallControlMethod (
|
||||
/* On error, we must terminate the method properly */
|
||||
|
||||
AcpiDsTerminateControlMethod (ObjDesc, NextWalkState);
|
||||
if (NextWalkState)
|
||||
{
|
||||
AcpiDsDeleteWalkState (NextWalkState);
|
||||
}
|
||||
AcpiDsDeleteWalkState (NextWalkState);
|
||||
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
@ -870,5 +877,8 @@ AcpiDsTerminateControlMethod (
|
||||
}
|
||||
}
|
||||
|
||||
AcpiExStopTraceMethod ((ACPI_NAMESPACE_NODE *) MethodDesc->Method.Node,
|
||||
MethodDesc, WalkState);
|
||||
|
||||
return_VOID;
|
||||
}
|
||||
|
@ -398,7 +398,7 @@ AcpiDsLoad1BeginOp (
|
||||
{
|
||||
/* Create a new op */
|
||||
|
||||
Op = AcpiPsAllocOp (WalkState->Opcode);
|
||||
Op = AcpiPsAllocOp (WalkState->Opcode, WalkState->Aml);
|
||||
if (!Op)
|
||||
{
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
|
@ -344,7 +344,7 @@ AcpiDsLoad2BeginOp (
|
||||
{
|
||||
/* Create a new op */
|
||||
|
||||
Op = AcpiPsAllocOp (WalkState->Opcode);
|
||||
Op = AcpiPsAllocOp (WalkState->Opcode, WalkState->Aml);
|
||||
if (!Op)
|
||||
{
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
|
@ -526,6 +526,7 @@ AcpiExCreateMethod (
|
||||
|
||||
ObjDesc->Method.AmlStart = AmlStart;
|
||||
ObjDesc->Method.AmlLength = AmlLength;
|
||||
ObjDesc->Method.Node = Operand[0];
|
||||
|
||||
/*
|
||||
* Disassemble the method flags. Split off the ArgCount, Serialized
|
||||
|
@ -43,13 +43,26 @@
|
||||
|
||||
#include <contrib/dev/acpica/include/acpi.h>
|
||||
#include <contrib/dev/acpica/include/accommon.h>
|
||||
#include <contrib/dev/acpica/include/acnamesp.h>
|
||||
#include <contrib/dev/acpica/include/acinterp.h>
|
||||
#include <contrib/dev/acpica/include/acparser.h>
|
||||
|
||||
|
||||
#define _COMPONENT ACPI_EXECUTER
|
||||
ACPI_MODULE_NAME ("exdebug")
|
||||
|
||||
|
||||
static ACPI_OPERAND_OBJECT *AcpiGbl_TraceMethodObject = NULL;
|
||||
|
||||
/* Local prototypes */
|
||||
|
||||
#ifdef ACPI_DEBUG_OUTPUT
|
||||
static const char *
|
||||
AcpiExGetTraceEventName (
|
||||
ACPI_TRACE_EVENT_TYPE Type);
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef ACPI_NO_ERROR_MESSAGES
|
||||
/*******************************************************************************
|
||||
*
|
||||
@ -314,3 +327,362 @@ AcpiExDoDebugObject (
|
||||
return_VOID;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiExInterpreterTraceEnabled
|
||||
*
|
||||
* PARAMETERS: Name - Whether method name should be matched,
|
||||
* this should be checked before starting
|
||||
* the tracer
|
||||
*
|
||||
* RETURN: TRUE if interpreter trace is enabled.
|
||||
*
|
||||
* DESCRIPTION: Check whether interpreter trace is enabled
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static BOOLEAN
|
||||
AcpiExInterpreterTraceEnabled (
|
||||
char *Name)
|
||||
{
|
||||
|
||||
/* Check if tracing is enabled */
|
||||
|
||||
if (!(AcpiGbl_TraceFlags & ACPI_TRACE_ENABLED))
|
||||
{
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if tracing is filtered:
|
||||
*
|
||||
* 1. If the tracer is started, AcpiGbl_TraceMethodObject should have
|
||||
* been filled by the trace starter
|
||||
* 2. If the tracer is not started, AcpiGbl_TraceMethodName should be
|
||||
* matched if it is specified
|
||||
* 3. If the tracer is oneshot style, AcpiGbl_TraceMethodName should
|
||||
* not be cleared by the trace stopper during the first match
|
||||
*/
|
||||
if (AcpiGbl_TraceMethodObject)
|
||||
{
|
||||
return (TRUE);
|
||||
}
|
||||
if (Name &&
|
||||
(AcpiGbl_TraceMethodName &&
|
||||
strcmp (AcpiGbl_TraceMethodName, Name)))
|
||||
{
|
||||
return (FALSE);
|
||||
}
|
||||
if ((AcpiGbl_TraceFlags & ACPI_TRACE_ONESHOT) &&
|
||||
!AcpiGbl_TraceMethodName)
|
||||
{
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiExGetTraceEventName
|
||||
*
|
||||
* PARAMETERS: Type - Trace event type
|
||||
*
|
||||
* RETURN: Trace event name.
|
||||
*
|
||||
* DESCRIPTION: Used to obtain the full trace event name.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef ACPI_DEBUG_OUTPUT
|
||||
|
||||
static const char *
|
||||
AcpiExGetTraceEventName (
|
||||
ACPI_TRACE_EVENT_TYPE Type)
|
||||
{
|
||||
switch (Type)
|
||||
{
|
||||
case ACPI_TRACE_AML_METHOD:
|
||||
|
||||
return "Method";
|
||||
|
||||
case ACPI_TRACE_AML_OPCODE:
|
||||
|
||||
return "Opcode";
|
||||
|
||||
case ACPI_TRACE_AML_REGION:
|
||||
|
||||
return "Region";
|
||||
|
||||
default:
|
||||
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiExTracePoint
|
||||
*
|
||||
* PARAMETERS: Type - Trace event type
|
||||
* Begin - TRUE if before execution
|
||||
* Aml - Executed AML address
|
||||
* Pathname - Object path
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Internal interpreter execution trace.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiExTracePoint (
|
||||
ACPI_TRACE_EVENT_TYPE Type,
|
||||
BOOLEAN Begin,
|
||||
UINT8 *Aml,
|
||||
char *Pathname)
|
||||
{
|
||||
|
||||
ACPI_FUNCTION_NAME (ExTracePoint);
|
||||
|
||||
|
||||
if (Pathname)
|
||||
{
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_TRACE_POINT,
|
||||
"%s %s [0x%p:%s] execution.\n",
|
||||
AcpiExGetTraceEventName (Type), Begin ? "Begin" : "End",
|
||||
Aml, Pathname));
|
||||
}
|
||||
else
|
||||
{
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_TRACE_POINT,
|
||||
"%s %s [0x%p] execution.\n",
|
||||
AcpiExGetTraceEventName (Type), Begin ? "Begin" : "End",
|
||||
Aml));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiExStartTraceMethod
|
||||
*
|
||||
* PARAMETERS: MethodNode - Node of the method
|
||||
* ObjDesc - The method object
|
||||
* WalkState - current state, NULL if not yet executing
|
||||
* a method.
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Start control method execution trace
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiExStartTraceMethod (
|
||||
ACPI_NAMESPACE_NODE *MethodNode,
|
||||
ACPI_OPERAND_OBJECT *ObjDesc,
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
char *Pathname = NULL;
|
||||
BOOLEAN Enabled = FALSE;
|
||||
|
||||
|
||||
ACPI_FUNCTION_NAME (ExStartTraceMethod);
|
||||
|
||||
|
||||
if (MethodNode)
|
||||
{
|
||||
Pathname = AcpiNsGetNormalizedPathname (MethodNode, TRUE);
|
||||
}
|
||||
|
||||
Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
Enabled = AcpiExInterpreterTraceEnabled (Pathname);
|
||||
if (Enabled && !AcpiGbl_TraceMethodObject)
|
||||
{
|
||||
AcpiGbl_TraceMethodObject = ObjDesc;
|
||||
AcpiGbl_OriginalDbgLevel = AcpiDbgLevel;
|
||||
AcpiGbl_OriginalDbgLayer = AcpiDbgLayer;
|
||||
AcpiDbgLevel = ACPI_TRACE_LEVEL_ALL;
|
||||
AcpiDbgLayer = ACPI_TRACE_LAYER_ALL;
|
||||
|
||||
if (AcpiGbl_TraceDbgLevel)
|
||||
{
|
||||
AcpiDbgLevel = AcpiGbl_TraceDbgLevel;
|
||||
}
|
||||
if (AcpiGbl_TraceDbgLayer)
|
||||
{
|
||||
AcpiDbgLayer = AcpiGbl_TraceDbgLayer;
|
||||
}
|
||||
}
|
||||
(void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
|
||||
|
||||
Exit:
|
||||
if (Enabled)
|
||||
{
|
||||
ACPI_TRACE_POINT (ACPI_TRACE_AML_METHOD, TRUE,
|
||||
ObjDesc ? ObjDesc->Method.AmlStart : NULL, Pathname);
|
||||
}
|
||||
if (Pathname)
|
||||
{
|
||||
ACPI_FREE (Pathname);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiExStopTraceMethod
|
||||
*
|
||||
* PARAMETERS: MethodNode - Node of the method
|
||||
* ObjDesc - The method object
|
||||
* WalkState - current state, NULL if not yet executing
|
||||
* a method.
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Stop control method execution trace
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiExStopTraceMethod (
|
||||
ACPI_NAMESPACE_NODE *MethodNode,
|
||||
ACPI_OPERAND_OBJECT *ObjDesc,
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
char *Pathname = NULL;
|
||||
BOOLEAN Enabled;
|
||||
|
||||
|
||||
ACPI_FUNCTION_NAME (ExStopTraceMethod);
|
||||
|
||||
|
||||
if (MethodNode)
|
||||
{
|
||||
Pathname = AcpiNsGetNormalizedPathname (MethodNode, TRUE);
|
||||
}
|
||||
|
||||
Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
goto ExitPath;
|
||||
}
|
||||
|
||||
Enabled = AcpiExInterpreterTraceEnabled (NULL);
|
||||
|
||||
(void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
|
||||
|
||||
if (Enabled)
|
||||
{
|
||||
ACPI_TRACE_POINT (ACPI_TRACE_AML_METHOD, FALSE,
|
||||
ObjDesc ? ObjDesc->Method.AmlStart : NULL, Pathname);
|
||||
}
|
||||
|
||||
Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
goto ExitPath;
|
||||
}
|
||||
|
||||
/* Check whether the tracer should be stopped */
|
||||
|
||||
if (AcpiGbl_TraceMethodObject == ObjDesc)
|
||||
{
|
||||
/* Disable further tracing if type is one-shot */
|
||||
|
||||
if (AcpiGbl_TraceFlags & ACPI_TRACE_ONESHOT)
|
||||
{
|
||||
AcpiGbl_TraceMethodName = NULL;
|
||||
}
|
||||
|
||||
AcpiDbgLevel = AcpiGbl_OriginalDbgLevel;
|
||||
AcpiDbgLayer = AcpiGbl_OriginalDbgLayer;
|
||||
AcpiGbl_TraceMethodObject = NULL;
|
||||
}
|
||||
|
||||
(void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
|
||||
|
||||
ExitPath:
|
||||
if (Pathname)
|
||||
{
|
||||
ACPI_FREE (Pathname);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiExStartTraceOpcode
|
||||
*
|
||||
* PARAMETERS: Op - The parser opcode object
|
||||
* WalkState - current state, NULL if not yet executing
|
||||
* a method.
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Start opcode execution trace
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiExStartTraceOpcode (
|
||||
ACPI_PARSE_OBJECT *Op,
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
{
|
||||
|
||||
ACPI_FUNCTION_NAME (ExStartTraceOpcode);
|
||||
|
||||
|
||||
if (AcpiExInterpreterTraceEnabled (NULL) &&
|
||||
(AcpiGbl_TraceFlags & ACPI_TRACE_OPCODE))
|
||||
{
|
||||
ACPI_TRACE_POINT (ACPI_TRACE_AML_OPCODE, TRUE,
|
||||
Op->Common.Aml, Op->Common.AmlOpName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiExStopTraceOpcode
|
||||
*
|
||||
* PARAMETERS: Op - The parser opcode object
|
||||
* WalkState - current state, NULL if not yet executing
|
||||
* a method.
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Stop opcode execution trace
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiExStopTraceOpcode (
|
||||
ACPI_PARSE_OBJECT *Op,
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
{
|
||||
|
||||
ACPI_FUNCTION_NAME (ExStopTraceOpcode);
|
||||
|
||||
|
||||
if (AcpiExInterpreterTraceEnabled (NULL) &&
|
||||
(AcpiGbl_TraceFlags & ACPI_TRACE_OPCODE))
|
||||
{
|
||||
ACPI_TRACE_POINT (ACPI_TRACE_AML_OPCODE, FALSE,
|
||||
Op->Common.Aml, Op->Common.AmlOpName);
|
||||
}
|
||||
}
|
||||
|
@ -1039,7 +1039,8 @@ AcpiExDumpReferenceObj (
|
||||
{
|
||||
AcpiOsPrintf (" %p ", ObjDesc->Reference.Node);
|
||||
|
||||
Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node, &RetBuf);
|
||||
Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node,
|
||||
&RetBuf, FALSE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
AcpiOsPrintf (" Could not convert name to pathname\n");
|
||||
|
@ -51,82 +51,6 @@
|
||||
ACPI_MODULE_NAME ("nsnames")
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiNsBuildExternalPath
|
||||
*
|
||||
* PARAMETERS: Node - NS node whose pathname is needed
|
||||
* Size - Size of the pathname
|
||||
* *NameBuffer - Where to return the pathname
|
||||
*
|
||||
* RETURN: Status
|
||||
* Places the pathname into the NameBuffer, in external format
|
||||
* (name segments separated by path separators)
|
||||
*
|
||||
* DESCRIPTION: Generate a full pathaname
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiNsBuildExternalPath (
|
||||
ACPI_NAMESPACE_NODE *Node,
|
||||
ACPI_SIZE Size,
|
||||
char *NameBuffer)
|
||||
{
|
||||
ACPI_SIZE Index;
|
||||
ACPI_NAMESPACE_NODE *ParentNode;
|
||||
|
||||
|
||||
ACPI_FUNCTION_ENTRY ();
|
||||
|
||||
|
||||
/* Special case for root */
|
||||
|
||||
Index = Size - 1;
|
||||
if (Index < ACPI_NAME_SIZE)
|
||||
{
|
||||
NameBuffer[0] = AML_ROOT_PREFIX;
|
||||
NameBuffer[1] = 0;
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
/* Store terminator byte, then build name backwards */
|
||||
|
||||
ParentNode = Node;
|
||||
NameBuffer[Index] = 0;
|
||||
|
||||
while ((Index > ACPI_NAME_SIZE) && (ParentNode != AcpiGbl_RootNode))
|
||||
{
|
||||
Index -= ACPI_NAME_SIZE;
|
||||
|
||||
/* Put the name into the buffer */
|
||||
|
||||
ACPI_MOVE_32_TO_32 ((NameBuffer + Index), &ParentNode->Name);
|
||||
ParentNode = ParentNode->Parent;
|
||||
|
||||
/* Prefix name with the path separator */
|
||||
|
||||
Index--;
|
||||
NameBuffer[Index] = ACPI_PATH_SEPARATOR;
|
||||
}
|
||||
|
||||
/* Overwrite final separator with the root prefix character */
|
||||
|
||||
NameBuffer[Index] = AML_ROOT_PREFIX;
|
||||
|
||||
if (Index != 0)
|
||||
{
|
||||
ACPI_ERROR ((AE_INFO,
|
||||
"Could not construct external pathname; index=%u, size=%u, Path=%s",
|
||||
(UINT32) Index, (UINT32) Size, &NameBuffer[Size]));
|
||||
|
||||
return (AE_BAD_PARAMETER);
|
||||
}
|
||||
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiNsGetExternalPathname
|
||||
@ -146,39 +70,13 @@ char *
|
||||
AcpiNsGetExternalPathname (
|
||||
ACPI_NAMESPACE_NODE *Node)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
char *NameBuffer;
|
||||
ACPI_SIZE Size;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE_PTR (NsGetExternalPathname, Node);
|
||||
|
||||
|
||||
/* Calculate required buffer size based on depth below root */
|
||||
|
||||
Size = AcpiNsGetPathnameLength (Node);
|
||||
if (!Size)
|
||||
{
|
||||
return_PTR (NULL);
|
||||
}
|
||||
|
||||
/* Allocate a buffer to be returned to caller */
|
||||
|
||||
NameBuffer = ACPI_ALLOCATE_ZEROED (Size);
|
||||
if (!NameBuffer)
|
||||
{
|
||||
ACPI_ERROR ((AE_INFO, "Could not allocate %u bytes", (UINT32) Size));
|
||||
return_PTR (NULL);
|
||||
}
|
||||
|
||||
/* Build the path in the allocated buffer */
|
||||
|
||||
Status = AcpiNsBuildExternalPath (Node, Size, NameBuffer);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
ACPI_FREE (NameBuffer);
|
||||
return_PTR (NULL);
|
||||
}
|
||||
NameBuffer = AcpiNsGetNormalizedPathname (Node, FALSE);
|
||||
|
||||
return_PTR (NameBuffer);
|
||||
}
|
||||
@ -201,38 +99,14 @@ AcpiNsGetPathnameLength (
|
||||
ACPI_NAMESPACE_NODE *Node)
|
||||
{
|
||||
ACPI_SIZE Size;
|
||||
ACPI_NAMESPACE_NODE *NextNode;
|
||||
|
||||
|
||||
ACPI_FUNCTION_ENTRY ();
|
||||
|
||||
|
||||
/*
|
||||
* Compute length of pathname as 5 * number of name segments.
|
||||
* Go back up the parent tree to the root
|
||||
*/
|
||||
Size = 0;
|
||||
NextNode = Node;
|
||||
Size = AcpiNsBuildNormalizedPath (Node, NULL, 0, FALSE);
|
||||
|
||||
while (NextNode && (NextNode != AcpiGbl_RootNode))
|
||||
{
|
||||
if (ACPI_GET_DESCRIPTOR_TYPE (NextNode) != ACPI_DESC_TYPE_NAMED)
|
||||
{
|
||||
ACPI_ERROR ((AE_INFO,
|
||||
"Invalid Namespace Node (%p) while traversing namespace",
|
||||
NextNode));
|
||||
return (0);
|
||||
}
|
||||
Size += ACPI_PATH_SEGMENT_LENGTH;
|
||||
NextNode = NextNode->Parent;
|
||||
}
|
||||
|
||||
if (!Size)
|
||||
{
|
||||
Size = 1; /* Root node case */
|
||||
}
|
||||
|
||||
return (Size + 1); /* +1 for null string terminator */
|
||||
return (Size);
|
||||
}
|
||||
|
||||
|
||||
@ -243,6 +117,8 @@ AcpiNsGetPathnameLength (
|
||||
* PARAMETERS: TargetHandle - Handle of named object whose name is
|
||||
* to be found
|
||||
* Buffer - Where the pathname is returned
|
||||
* NoTrailing - Remove trailing '_' for each name
|
||||
* segment
|
||||
*
|
||||
* RETURN: Status, Buffer is filled with pathname if status is AE_OK
|
||||
*
|
||||
@ -253,7 +129,8 @@ AcpiNsGetPathnameLength (
|
||||
ACPI_STATUS
|
||||
AcpiNsHandleToPathname (
|
||||
ACPI_HANDLE TargetHandle,
|
||||
ACPI_BUFFER *Buffer)
|
||||
ACPI_BUFFER *Buffer,
|
||||
BOOLEAN NoTrailing)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
ACPI_NAMESPACE_NODE *Node;
|
||||
@ -271,7 +148,7 @@ AcpiNsHandleToPathname (
|
||||
|
||||
/* Determine size required for the caller buffer */
|
||||
|
||||
RequiredSize = AcpiNsGetPathnameLength (Node);
|
||||
RequiredSize = AcpiNsBuildNormalizedPath (Node, NULL, 0, NoTrailing);
|
||||
if (!RequiredSize)
|
||||
{
|
||||
return_ACPI_STATUS (AE_BAD_PARAMETER);
|
||||
@ -287,7 +164,8 @@ AcpiNsHandleToPathname (
|
||||
|
||||
/* Build the path in the caller buffer */
|
||||
|
||||
Status = AcpiNsBuildExternalPath (Node, RequiredSize, Buffer->Pointer);
|
||||
(void) AcpiNsBuildNormalizedPath (Node, Buffer->Pointer,
|
||||
RequiredSize, NoTrailing);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
@ -297,3 +175,169 @@ AcpiNsHandleToPathname (
|
||||
(char *) Buffer->Pointer, (UINT32) RequiredSize));
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiNsBuildNormalizedPath
|
||||
*
|
||||
* PARAMETERS: Node - Namespace node
|
||||
* FullPath - Where the path name is returned
|
||||
* PathSize - Size of returned path name buffer
|
||||
* NoTrailing - Remove trailing '_' from each name segment
|
||||
*
|
||||
* RETURN: Return 1 if the AML path is empty, otherwise returning (length
|
||||
* of pathname + 1) which means the 'FullPath' contains a trailing
|
||||
* null.
|
||||
*
|
||||
* DESCRIPTION: Build and return a full namespace pathname.
|
||||
* Note that if the size of 'FullPath' isn't large enough to
|
||||
* contain the namespace node's path name, the actual required
|
||||
* buffer length is returned, and it should be greater than
|
||||
* 'PathSize'. So callers are able to check the returning value
|
||||
* to determine the buffer size of 'FullPath'.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
UINT32
|
||||
AcpiNsBuildNormalizedPath (
|
||||
ACPI_NAMESPACE_NODE *Node,
|
||||
char *FullPath,
|
||||
UINT32 PathSize,
|
||||
BOOLEAN NoTrailing)
|
||||
{
|
||||
UINT32 Length = 0, i;
|
||||
char Name[ACPI_NAME_SIZE];
|
||||
BOOLEAN DoNoTrailing;
|
||||
char c, *Left, *Right;
|
||||
ACPI_NAMESPACE_NODE *NextNode;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE_PTR (NsBuildNormalizedPath, Node);
|
||||
|
||||
|
||||
#define ACPI_PATH_PUT8(Path, Size, Byte, Length) \
|
||||
do { \
|
||||
if ((Length) < (Size)) \
|
||||
{ \
|
||||
(Path)[(Length)] = (Byte); \
|
||||
} \
|
||||
(Length)++; \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Make sure the PathSize is correct, so that we don't need to
|
||||
* validate both FullPath and PathSize.
|
||||
*/
|
||||
if (!FullPath)
|
||||
{
|
||||
PathSize = 0;
|
||||
}
|
||||
|
||||
if (!Node)
|
||||
{
|
||||
goto BuildTrailingNull;
|
||||
}
|
||||
|
||||
NextNode = Node;
|
||||
while (NextNode && NextNode != AcpiGbl_RootNode)
|
||||
{
|
||||
if (NextNode != Node)
|
||||
{
|
||||
ACPI_PATH_PUT8(FullPath, PathSize, AML_DUAL_NAME_PREFIX, Length);
|
||||
}
|
||||
ACPI_MOVE_32_TO_32 (Name, &NextNode->Name);
|
||||
DoNoTrailing = NoTrailing;
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
c = Name[4-i-1];
|
||||
if (DoNoTrailing && c != '_')
|
||||
{
|
||||
DoNoTrailing = FALSE;
|
||||
}
|
||||
if (!DoNoTrailing)
|
||||
{
|
||||
ACPI_PATH_PUT8(FullPath, PathSize, c, Length);
|
||||
}
|
||||
}
|
||||
NextNode = NextNode->Parent;
|
||||
}
|
||||
ACPI_PATH_PUT8(FullPath, PathSize, AML_ROOT_PREFIX, Length);
|
||||
|
||||
/* Reverse the path string */
|
||||
|
||||
if (Length <= PathSize)
|
||||
{
|
||||
Left = FullPath;
|
||||
Right = FullPath+Length-1;
|
||||
while (Left < Right)
|
||||
{
|
||||
c = *Left;
|
||||
*Left++ = *Right;
|
||||
*Right-- = c;
|
||||
}
|
||||
}
|
||||
|
||||
/* Append the trailing null */
|
||||
|
||||
BuildTrailingNull:
|
||||
ACPI_PATH_PUT8(FullPath, PathSize, '\0', Length);
|
||||
|
||||
#undef ACPI_PATH_PUT8
|
||||
|
||||
return_UINT32 (Length);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiNsGetNormalizedPathname
|
||||
*
|
||||
* PARAMETERS: Node - Namespace node whose pathname is needed
|
||||
* NoTrailing - Remove trailing '_' from each name segment
|
||||
*
|
||||
* RETURN: Pointer to storage containing the fully qualified name of
|
||||
* the node, In external format (name segments separated by path
|
||||
* separators.)
|
||||
*
|
||||
* DESCRIPTION: Used to obtain the full pathname to a namespace node, usually
|
||||
* for error and debug statements. All trailing '_' will be
|
||||
* removed from the full pathname if 'NoTrailing' is specified..
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
char *
|
||||
AcpiNsGetNormalizedPathname (
|
||||
ACPI_NAMESPACE_NODE *Node,
|
||||
BOOLEAN NoTrailing)
|
||||
{
|
||||
char *NameBuffer;
|
||||
ACPI_SIZE Size;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE_PTR (NsGetNormalizedPathname, Node);
|
||||
|
||||
|
||||
/* Calculate required buffer size based on depth below root */
|
||||
|
||||
Size = AcpiNsBuildNormalizedPath (Node, NULL, 0, NoTrailing);
|
||||
if (!Size)
|
||||
{
|
||||
return_PTR (NULL);
|
||||
}
|
||||
|
||||
/* Allocate a buffer to be returned to caller */
|
||||
|
||||
NameBuffer = ACPI_ALLOCATE_ZEROED (Size);
|
||||
if (!NameBuffer)
|
||||
{
|
||||
ACPI_ERROR ((AE_INFO, "Could not allocate %u bytes", (UINT32) Size));
|
||||
return_PTR (NULL);
|
||||
}
|
||||
|
||||
/* Build the path in the allocated buffer */
|
||||
|
||||
(void) AcpiNsBuildNormalizedPath (Node, NameBuffer, Size, NoTrailing);
|
||||
|
||||
return_PTR (NameBuffer);
|
||||
}
|
||||
|
@ -84,6 +84,22 @@ AcpiNsOneCompleteParse (
|
||||
ACPI_FUNCTION_TRACE (NsOneCompleteParse);
|
||||
|
||||
|
||||
Status = AcpiGetTableByIndex (TableIndex, &Table);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
/* Table must consist of at least a complete header */
|
||||
|
||||
if (Table->Length < sizeof (ACPI_TABLE_HEADER))
|
||||
{
|
||||
return_ACPI_STATUS (AE_BAD_HEADER);
|
||||
}
|
||||
|
||||
AmlStart = (UINT8 *) Table + sizeof (ACPI_TABLE_HEADER);
|
||||
AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
|
||||
|
||||
Status = AcpiTbGetOwnerId (TableIndex, &OwnerId);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
@ -92,7 +108,7 @@ AcpiNsOneCompleteParse (
|
||||
|
||||
/* Create and init a Root Node */
|
||||
|
||||
ParseRoot = AcpiPsCreateScopeOp ();
|
||||
ParseRoot = AcpiPsCreateScopeOp (AmlStart);
|
||||
if (!ParseRoot)
|
||||
{
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
@ -107,26 +123,12 @@ AcpiNsOneCompleteParse (
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
Status = AcpiGetTableByIndex (TableIndex, &Table);
|
||||
Status = AcpiDsInitAmlWalk (WalkState, ParseRoot, NULL,
|
||||
AmlStart, AmlLength, NULL, (UINT8) PassNumber);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
AcpiDsDeleteWalkState (WalkState);
|
||||
AcpiPsFreeOp (ParseRoot);
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
/* Table must consist of at least a complete header */
|
||||
|
||||
if (Table->Length < sizeof (ACPI_TABLE_HEADER))
|
||||
{
|
||||
Status = AE_BAD_HEADER;
|
||||
}
|
||||
else
|
||||
{
|
||||
AmlStart = (UINT8 *) Table + sizeof (ACPI_TABLE_HEADER);
|
||||
AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
|
||||
Status = AcpiDsInitAmlWalk (WalkState, ParseRoot, NULL,
|
||||
AmlStart, AmlLength, NULL, (UINT8) PassNumber);
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
/* Found OSDT table, enable the namespace override feature */
|
||||
@ -137,12 +139,6 @@ AcpiNsOneCompleteParse (
|
||||
WalkState->NamespaceOverride = TRUE;
|
||||
}
|
||||
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
AcpiDsDeleteWalkState (WalkState);
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
/* StartNode is the default location to load the table */
|
||||
|
||||
if (StartNode && StartNode != AcpiGbl_RootNode)
|
||||
|
@ -90,7 +90,7 @@ AcpiNsPrintNodePathname (
|
||||
|
||||
Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
|
||||
|
||||
Status = AcpiNsHandleToPathname (Node, &Buffer);
|
||||
Status = AcpiNsHandleToPathname (Node, &Buffer, FALSE);
|
||||
if (ACPI_SUCCESS (Status))
|
||||
{
|
||||
if (Message)
|
||||
|
@ -193,11 +193,13 @@ AcpiGetName (
|
||||
return (Status);
|
||||
}
|
||||
|
||||
if (NameType == ACPI_FULL_PATHNAME)
|
||||
if (NameType == ACPI_FULL_PATHNAME ||
|
||||
NameType == ACPI_FULL_PATHNAME_NO_TRAILING)
|
||||
{
|
||||
/* Get the full pathname (From the namespace root) */
|
||||
|
||||
Status = AcpiNsHandleToPathname (Handle, Buffer);
|
||||
Status = AcpiNsHandleToPathname (Handle, Buffer,
|
||||
NameType == ACPI_FULL_PATHNAME ? FALSE : TRUE);
|
||||
return (Status);
|
||||
}
|
||||
|
||||
|
@ -316,7 +316,7 @@ AcpiPsGetNextNamepath (
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
|
||||
"Control Method - %p Desc %p Path=%p\n", Node, MethodDesc, Path));
|
||||
|
||||
NameOp = AcpiPsAllocOp (AML_INT_NAMEPATH_OP);
|
||||
NameOp = AcpiPsAllocOp (AML_INT_NAMEPATH_OP, Start);
|
||||
if (!NameOp)
|
||||
{
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
@ -524,7 +524,7 @@ static ACPI_PARSE_OBJECT *
|
||||
AcpiPsGetNextField (
|
||||
ACPI_PARSE_STATE *ParserState)
|
||||
{
|
||||
UINT32 AmlOffset;
|
||||
UINT8 *Aml;
|
||||
ACPI_PARSE_OBJECT *Field;
|
||||
ACPI_PARSE_OBJECT *Arg = NULL;
|
||||
UINT16 Opcode;
|
||||
@ -540,8 +540,7 @@ AcpiPsGetNextField (
|
||||
ACPI_FUNCTION_TRACE (PsGetNextField);
|
||||
|
||||
|
||||
AmlOffset = (UINT32) ACPI_PTR_DIFF (
|
||||
ParserState->Aml, ParserState->AmlStart);
|
||||
Aml = ParserState->Aml;
|
||||
|
||||
/* Determine field type */
|
||||
|
||||
@ -579,14 +578,12 @@ AcpiPsGetNextField (
|
||||
|
||||
/* Allocate a new field op */
|
||||
|
||||
Field = AcpiPsAllocOp (Opcode);
|
||||
Field = AcpiPsAllocOp (Opcode, Aml);
|
||||
if (!Field)
|
||||
{
|
||||
return_PTR (NULL);
|
||||
}
|
||||
|
||||
Field->Common.AmlOffset = AmlOffset;
|
||||
|
||||
/* Decode the field type */
|
||||
|
||||
switch (Opcode)
|
||||
@ -650,6 +647,7 @@ AcpiPsGetNextField (
|
||||
* Argument for Connection operator can be either a Buffer
|
||||
* (resource descriptor), or a NameString.
|
||||
*/
|
||||
Aml = ParserState->Aml;
|
||||
if (ACPI_GET8 (ParserState->Aml) == AML_BUFFER_OP)
|
||||
{
|
||||
ParserState->Aml++;
|
||||
@ -662,7 +660,7 @@ AcpiPsGetNextField (
|
||||
{
|
||||
/* Non-empty list */
|
||||
|
||||
Arg = AcpiPsAllocOp (AML_INT_BYTELIST_OP);
|
||||
Arg = AcpiPsAllocOp (AML_INT_BYTELIST_OP, Aml);
|
||||
if (!Arg)
|
||||
{
|
||||
AcpiPsFreeOp (Field);
|
||||
@ -712,7 +710,7 @@ AcpiPsGetNextField (
|
||||
}
|
||||
else
|
||||
{
|
||||
Arg = AcpiPsAllocOp (AML_INT_NAMEPATH_OP);
|
||||
Arg = AcpiPsAllocOp (AML_INT_NAMEPATH_OP, Aml);
|
||||
if (!Arg)
|
||||
{
|
||||
AcpiPsFreeOp (Field);
|
||||
@ -784,7 +782,7 @@ AcpiPsGetNextArg (
|
||||
|
||||
/* Constants, strings, and namestrings are all the same size */
|
||||
|
||||
Arg = AcpiPsAllocOp (AML_BYTE_OP);
|
||||
Arg = AcpiPsAllocOp (AML_BYTE_OP, ParserState->Aml);
|
||||
if (!Arg)
|
||||
{
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
@ -836,7 +834,8 @@ AcpiPsGetNextArg (
|
||||
{
|
||||
/* Non-empty list */
|
||||
|
||||
Arg = AcpiPsAllocOp (AML_INT_BYTELIST_OP);
|
||||
Arg = AcpiPsAllocOp (AML_INT_BYTELIST_OP,
|
||||
ParserState->Aml);
|
||||
if (!Arg)
|
||||
{
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
@ -866,7 +865,7 @@ AcpiPsGetNextArg (
|
||||
{
|
||||
/* NullName or NameString */
|
||||
|
||||
Arg = AcpiPsAllocOp (AML_INT_NAMEPATH_OP);
|
||||
Arg = AcpiPsAllocOp (AML_INT_NAMEPATH_OP, ParserState->Aml);
|
||||
if (!Arg)
|
||||
{
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
|
@ -51,6 +51,7 @@
|
||||
|
||||
#include <contrib/dev/acpica/include/acpi.h>
|
||||
#include <contrib/dev/acpica/include/accommon.h>
|
||||
#include <contrib/dev/acpica/include/acinterp.h>
|
||||
#include <contrib/dev/acpica/include/acparser.h>
|
||||
#include <contrib/dev/acpica/include/acdispat.h>
|
||||
#include <contrib/dev/acpica/include/amlcode.h>
|
||||
@ -134,8 +135,7 @@ AcpiPsGetArguments (
|
||||
*/
|
||||
while (GET_CURRENT_ARG_TYPE (WalkState->ArgTypes) && !WalkState->ArgCount)
|
||||
{
|
||||
WalkState->AmlOffset = (UINT32) ACPI_PTR_DIFF (WalkState->ParserState.Aml,
|
||||
WalkState->ParserState.AmlStart);
|
||||
WalkState->Aml = WalkState->ParserState.Aml;
|
||||
|
||||
Status = AcpiPsGetNextArg (WalkState, &(WalkState->ParserState),
|
||||
GET_CURRENT_ARG_TYPE (WalkState->ArgTypes), &Arg);
|
||||
@ -146,7 +146,6 @@ AcpiPsGetArguments (
|
||||
|
||||
if (Arg)
|
||||
{
|
||||
Arg->Common.AmlOffset = WalkState->AmlOffset;
|
||||
AcpiPsAppendArg (Op, Arg);
|
||||
}
|
||||
|
||||
@ -502,15 +501,7 @@ AcpiPsParseLoop (
|
||||
continue;
|
||||
}
|
||||
|
||||
Op->Common.AmlOffset = WalkState->AmlOffset;
|
||||
|
||||
if (WalkState->OpInfo)
|
||||
{
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
|
||||
"Opcode %4.4X [%s] Op %p Aml %p AmlOffset %5.5X\n",
|
||||
(UINT32) Op->Common.AmlOpcode, WalkState->OpInfo->Name,
|
||||
Op, ParserState->Aml, Op->Common.AmlOffset));
|
||||
}
|
||||
AcpiExStartTraceOpcode (Op, WalkState);
|
||||
}
|
||||
|
||||
|
||||
|
@ -73,12 +73,13 @@ static ACPI_STATUS
|
||||
AcpiPsGetAmlOpcode (
|
||||
ACPI_WALK_STATE *WalkState)
|
||||
{
|
||||
UINT32 AmlOffset;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE_PTR (PsGetAmlOpcode, WalkState);
|
||||
|
||||
|
||||
WalkState->AmlOffset = (UINT32) ACPI_PTR_DIFF (WalkState->ParserState.Aml,
|
||||
WalkState->ParserState.AmlStart);
|
||||
WalkState->Aml = WalkState->ParserState.Aml;
|
||||
WalkState->Opcode = AcpiPsPeekOpcode (&(WalkState->ParserState));
|
||||
|
||||
/*
|
||||
@ -107,10 +108,13 @@ AcpiPsGetAmlOpcode (
|
||||
|
||||
if (WalkState->PassNumber == 2)
|
||||
{
|
||||
AmlOffset = (UINT32) ACPI_PTR_DIFF (WalkState->Aml,
|
||||
WalkState->ParserState.AmlStart);
|
||||
|
||||
ACPI_ERROR ((AE_INFO,
|
||||
"Unknown opcode 0x%.2X at table offset 0x%.4X, ignoring",
|
||||
WalkState->Opcode,
|
||||
(UINT32) (WalkState->AmlOffset + sizeof (ACPI_TABLE_HEADER))));
|
||||
(UINT32) (AmlOffset + sizeof (ACPI_TABLE_HEADER))));
|
||||
|
||||
ACPI_DUMP_BUFFER ((WalkState->ParserState.Aml - 16), 48);
|
||||
|
||||
@ -122,13 +126,13 @@ AcpiPsGetAmlOpcode (
|
||||
AcpiOsPrintf (
|
||||
"/*\nError: Unknown opcode 0x%.2X at table offset 0x%.4X, context:\n",
|
||||
WalkState->Opcode,
|
||||
(UINT32) (WalkState->AmlOffset + sizeof (ACPI_TABLE_HEADER)));
|
||||
(UINT32) (AmlOffset + sizeof (ACPI_TABLE_HEADER)));
|
||||
|
||||
/* Dump the context surrounding the invalid opcode */
|
||||
|
||||
AcpiUtDumpBuffer (((UINT8 *) WalkState->ParserState.Aml - 16),
|
||||
48, DB_BYTE_DISPLAY,
|
||||
(WalkState->AmlOffset + sizeof (ACPI_TABLE_HEADER) - 16));
|
||||
(AmlOffset + sizeof (ACPI_TABLE_HEADER) - 16));
|
||||
AcpiOsPrintf (" */\n");
|
||||
#endif
|
||||
}
|
||||
@ -313,7 +317,7 @@ AcpiPsCreateOp (
|
||||
/* Create Op structure and append to parent's argument list */
|
||||
|
||||
WalkState->OpInfo = AcpiPsGetOpcodeInfo (WalkState->Opcode);
|
||||
Op = AcpiPsAllocOp (WalkState->Opcode);
|
||||
Op = AcpiPsAllocOp (WalkState->Opcode, AmlOpStart);
|
||||
if (!Op)
|
||||
{
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
|
@ -161,6 +161,8 @@ AcpiPsCompleteThisOp (
|
||||
return_ACPI_STATUS (AE_OK); /* OK for now */
|
||||
}
|
||||
|
||||
AcpiExStopTraceOpcode (Op, WalkState);
|
||||
|
||||
/* Delete this op and the subtree below it if asked to */
|
||||
|
||||
if (((WalkState->ParseFlags & ACPI_PARSE_TREE_MASK) != ACPI_PARSE_DELETE_TREE) ||
|
||||
@ -198,7 +200,8 @@ AcpiPsCompleteThisOp (
|
||||
* These opcodes contain TermArg operands. The current
|
||||
* op must be replaced by a placeholder return op
|
||||
*/
|
||||
ReplacementOp = AcpiPsAllocOp (AML_INT_RETURN_VALUE_OP);
|
||||
ReplacementOp = AcpiPsAllocOp (AML_INT_RETURN_VALUE_OP,
|
||||
Op->Common.Aml);
|
||||
if (!ReplacementOp)
|
||||
{
|
||||
Status = AE_NO_MEMORY;
|
||||
@ -217,7 +220,8 @@ AcpiPsCompleteThisOp (
|
||||
(Op->Common.Parent->Common.AmlOpcode == AML_BANK_FIELD_OP) ||
|
||||
(Op->Common.Parent->Common.AmlOpcode == AML_VAR_PACKAGE_OP))
|
||||
{
|
||||
ReplacementOp = AcpiPsAllocOp (AML_INT_RETURN_VALUE_OP);
|
||||
ReplacementOp = AcpiPsAllocOp (AML_INT_RETURN_VALUE_OP,
|
||||
Op->Common.Aml);
|
||||
if (!ReplacementOp)
|
||||
{
|
||||
Status = AE_NO_MEMORY;
|
||||
@ -230,7 +234,8 @@ AcpiPsCompleteThisOp (
|
||||
(Op->Common.AmlOpcode == AML_PACKAGE_OP) ||
|
||||
(Op->Common.AmlOpcode == AML_VAR_PACKAGE_OP))
|
||||
{
|
||||
ReplacementOp = AcpiPsAllocOp (Op->Common.AmlOpcode);
|
||||
ReplacementOp = AcpiPsAllocOp (Op->Common.AmlOpcode,
|
||||
Op->Common.Aml);
|
||||
if (!ReplacementOp)
|
||||
{
|
||||
Status = AE_NO_MEMORY;
|
||||
@ -246,7 +251,8 @@ AcpiPsCompleteThisOp (
|
||||
|
||||
default:
|
||||
|
||||
ReplacementOp = AcpiPsAllocOp (AML_INT_RETURN_VALUE_OP);
|
||||
ReplacementOp = AcpiPsAllocOp (AML_INT_RETURN_VALUE_OP,
|
||||
Op->Common.Aml);
|
||||
if (!ReplacementOp)
|
||||
{
|
||||
Status = AE_NO_MEMORY;
|
||||
|
@ -64,12 +64,12 @@
|
||||
|
||||
ACPI_PARSE_OBJECT *
|
||||
AcpiPsCreateScopeOp (
|
||||
void)
|
||||
UINT8 *Aml)
|
||||
{
|
||||
ACPI_PARSE_OBJECT *ScopeOp;
|
||||
|
||||
|
||||
ScopeOp = AcpiPsAllocOp (AML_SCOPE_OP);
|
||||
ScopeOp = AcpiPsAllocOp (AML_SCOPE_OP, Aml);
|
||||
if (!ScopeOp)
|
||||
{
|
||||
return (NULL);
|
||||
@ -115,6 +115,7 @@ AcpiPsInitOp (
|
||||
* FUNCTION: AcpiPsAllocOp
|
||||
*
|
||||
* PARAMETERS: Opcode - Opcode that will be stored in the new Op
|
||||
* Aml - Address of the opcode
|
||||
*
|
||||
* RETURN: Pointer to the new Op, null on failure
|
||||
*
|
||||
@ -126,7 +127,8 @@ AcpiPsInitOp (
|
||||
|
||||
ACPI_PARSE_OBJECT*
|
||||
AcpiPsAllocOp (
|
||||
UINT16 Opcode)
|
||||
UINT16 Opcode,
|
||||
UINT8 *Aml)
|
||||
{
|
||||
ACPI_PARSE_OBJECT *Op;
|
||||
const ACPI_OPCODE_INFO *OpInfo;
|
||||
@ -173,6 +175,7 @@ AcpiPsAllocOp (
|
||||
if (Op)
|
||||
{
|
||||
AcpiPsInitOp (Op, Opcode);
|
||||
Op->Common.Aml = Aml;
|
||||
Op->Common.Flags = Flags;
|
||||
}
|
||||
|
||||
|
@ -47,6 +47,7 @@
|
||||
#include <contrib/dev/acpica/include/acdispat.h>
|
||||
#include <contrib/dev/acpica/include/acinterp.h>
|
||||
#include <contrib/dev/acpica/include/actables.h>
|
||||
#include <contrib/dev/acpica/include/acnamesp.h>
|
||||
|
||||
|
||||
#define _COMPONENT ACPI_PARSER
|
||||
@ -54,14 +55,6 @@
|
||||
|
||||
/* Local Prototypes */
|
||||
|
||||
static void
|
||||
AcpiPsStartTrace (
|
||||
ACPI_EVALUATE_INFO *Info);
|
||||
|
||||
static void
|
||||
AcpiPsStopTrace (
|
||||
ACPI_EVALUATE_INFO *Info);
|
||||
|
||||
static void
|
||||
AcpiPsUpdateParameterList (
|
||||
ACPI_EVALUATE_INFO *Info,
|
||||
@ -86,7 +79,7 @@ AcpiPsUpdateParameterList (
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiDebugTrace (
|
||||
char *Name,
|
||||
const char *Name,
|
||||
UINT32 DebugLevel,
|
||||
UINT32 DebugLayer,
|
||||
UINT32 Flags)
|
||||
@ -100,128 +93,14 @@ AcpiDebugTrace (
|
||||
return (Status);
|
||||
}
|
||||
|
||||
/* TBDs: Validate name, allow full path or just nameseg */
|
||||
|
||||
AcpiGbl_TraceMethodName = *ACPI_CAST_PTR (UINT32, Name);
|
||||
AcpiGbl_TraceMethodName = Name;
|
||||
AcpiGbl_TraceFlags = Flags;
|
||||
|
||||
if (DebugLevel)
|
||||
{
|
||||
AcpiGbl_TraceDbgLevel = DebugLevel;
|
||||
}
|
||||
if (DebugLayer)
|
||||
{
|
||||
AcpiGbl_TraceDbgLayer = DebugLayer;
|
||||
}
|
||||
AcpiGbl_TraceDbgLevel = DebugLevel;
|
||||
AcpiGbl_TraceDbgLayer = DebugLayer;
|
||||
Status = AE_OK;
|
||||
|
||||
(void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiPsStartTrace
|
||||
*
|
||||
* PARAMETERS: Info - Method info struct
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Start control method execution trace
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void
|
||||
AcpiPsStartTrace (
|
||||
ACPI_EVALUATE_INFO *Info)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
ACPI_FUNCTION_ENTRY ();
|
||||
|
||||
|
||||
Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ((!AcpiGbl_TraceMethodName) ||
|
||||
(AcpiGbl_TraceMethodName != Info->Node->Name.Integer))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
AcpiGbl_OriginalDbgLevel = AcpiDbgLevel;
|
||||
AcpiGbl_OriginalDbgLayer = AcpiDbgLayer;
|
||||
|
||||
AcpiDbgLevel = 0x00FFFFFF;
|
||||
AcpiDbgLayer = ACPI_UINT32_MAX;
|
||||
|
||||
if (AcpiGbl_TraceDbgLevel)
|
||||
{
|
||||
AcpiDbgLevel = AcpiGbl_TraceDbgLevel;
|
||||
}
|
||||
if (AcpiGbl_TraceDbgLayer)
|
||||
{
|
||||
AcpiDbgLayer = AcpiGbl_TraceDbgLayer;
|
||||
}
|
||||
|
||||
|
||||
Exit:
|
||||
(void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiPsStopTrace
|
||||
*
|
||||
* PARAMETERS: Info - Method info struct
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Stop control method execution trace
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void
|
||||
AcpiPsStopTrace (
|
||||
ACPI_EVALUATE_INFO *Info)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
ACPI_FUNCTION_ENTRY ();
|
||||
|
||||
|
||||
Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ((!AcpiGbl_TraceMethodName) ||
|
||||
(AcpiGbl_TraceMethodName != Info->Node->Name.Integer))
|
||||
{
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
/* Disable further tracing if type is one-shot */
|
||||
|
||||
if (AcpiGbl_TraceFlags & 1)
|
||||
{
|
||||
AcpiGbl_TraceMethodName = 0;
|
||||
AcpiGbl_TraceDbgLevel = 0;
|
||||
AcpiGbl_TraceDbgLayer = 0;
|
||||
}
|
||||
|
||||
AcpiDbgLevel = AcpiGbl_OriginalDbgLevel;
|
||||
AcpiDbgLayer = AcpiGbl_OriginalDbgLayer;
|
||||
|
||||
Exit:
|
||||
(void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
|
||||
return (Status);
|
||||
}
|
||||
|
||||
|
||||
@ -284,10 +163,6 @@ AcpiPsExecuteMethod (
|
||||
*/
|
||||
AcpiPsUpdateParameterList (Info, REF_INCREMENT);
|
||||
|
||||
/* Begin tracing if requested */
|
||||
|
||||
AcpiPsStartTrace (Info);
|
||||
|
||||
/*
|
||||
* Execute the method. Performs parse simultaneously
|
||||
*/
|
||||
@ -297,7 +172,7 @@ AcpiPsExecuteMethod (
|
||||
|
||||
/* Create and init a Root Node */
|
||||
|
||||
Op = AcpiPsCreateScopeOp ();
|
||||
Op = AcpiPsCreateScopeOp (Info->ObjDesc->Method.AmlStart);
|
||||
if (!Op)
|
||||
{
|
||||
Status = AE_NO_MEMORY;
|
||||
@ -370,10 +245,6 @@ AcpiPsExecuteMethod (
|
||||
Cleanup:
|
||||
AcpiPsDeleteParseTree (Op);
|
||||
|
||||
/* End optional tracing */
|
||||
|
||||
AcpiPsStopTrace (Info);
|
||||
|
||||
/* Take away the extra reference that we gave the parameters above */
|
||||
|
||||
AcpiPsUpdateParameterList (Info, REF_DECREMENT);
|
||||
|
@ -370,7 +370,8 @@ AcpiRsCreatePciRoutingTable (
|
||||
(UINT8 *) OutputBuffer->Pointer);
|
||||
PathBuffer.Pointer = UserPrt->Source;
|
||||
|
||||
Status = AcpiNsHandleToPathname ((ACPI_HANDLE) Node, &PathBuffer);
|
||||
Status = AcpiNsHandleToPathname ((ACPI_HANDLE) Node,
|
||||
&PathBuffer, FALSE);
|
||||
|
||||
/* +1 to include null terminator */
|
||||
|
||||
|
@ -45,6 +45,7 @@
|
||||
|
||||
#include <contrib/dev/acpica/include/acpi.h>
|
||||
#include <contrib/dev/acpica/include/accommon.h>
|
||||
#include <contrib/dev/acpica/include/acinterp.h>
|
||||
|
||||
#define _COMPONENT ACPI_UTILITIES
|
||||
ACPI_MODULE_NAME ("utdebug")
|
||||
@ -634,6 +635,42 @@ AcpiUtPtrExit (
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiTracePoint
|
||||
*
|
||||
* PARAMETERS: Type - Trace event type
|
||||
* Begin - TRUE if before execution
|
||||
* Aml - Executed AML address
|
||||
* Pathname - Object path
|
||||
* Pointer - Pointer to the related object
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Interpreter execution trace.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiTracePoint (
|
||||
ACPI_TRACE_EVENT_TYPE Type,
|
||||
BOOLEAN Begin,
|
||||
UINT8 *Aml,
|
||||
char *Pathname)
|
||||
{
|
||||
|
||||
ACPI_FUNCTION_ENTRY ();
|
||||
|
||||
AcpiExTracePoint (Type, Begin, Aml, Pathname);
|
||||
|
||||
#ifdef ACPI_USE_SYSTEM_TRACER
|
||||
AcpiOsTracePoint (Type, Begin, Aml, Pathname);
|
||||
#endif
|
||||
}
|
||||
|
||||
ACPI_EXPORT_SYMBOL (AcpiTracePoint)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -220,6 +220,10 @@ AcpiUtDeleteInternalObj (
|
||||
AcpiUtDeleteObjectDesc (Object->Method.Mutex);
|
||||
Object->Method.Mutex = NULL;
|
||||
}
|
||||
if (Object->Method.Node)
|
||||
{
|
||||
Object->Method.Node = NULL;
|
||||
}
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_REGION:
|
||||
|
@ -224,8 +224,6 @@ AcpiUtInitGlobals (
|
||||
AcpiGbl_AcpiHardwarePresent = TRUE;
|
||||
AcpiGbl_LastOwnerIdIndex = 0;
|
||||
AcpiGbl_NextOwnerIdOffset = 0;
|
||||
AcpiGbl_TraceDbgLevel = 0;
|
||||
AcpiGbl_TraceDbgLayer = 0;
|
||||
AcpiGbl_DebuggerConfiguration = DEBUGGER_THREADING;
|
||||
AcpiGbl_OsiMutex = NULL;
|
||||
AcpiGbl_RegMethodsExecuted = FALSE;
|
||||
|
@ -418,7 +418,7 @@ AcpiUtDisplayInitPathname (
|
||||
/* Get the full pathname to the node */
|
||||
|
||||
Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
|
||||
Status = AcpiNsHandleToPathname (ObjHandle, &Buffer);
|
||||
Status = AcpiNsHandleToPathname (ObjHandle, &Buffer, FALSE);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return;
|
||||
|
455
sys/contrib/dev/acpica/components/utilities/utnonansi.c
Normal file
455
sys/contrib/dev/acpica/components/utilities/utnonansi.c
Normal file
@ -0,0 +1,455 @@
|
||||
/*******************************************************************************
|
||||
*
|
||||
* Module Name: utnonansi - Non-ansi C library functions
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2000 - 2015, 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 <contrib/dev/acpica/include/acpi.h>
|
||||
#include <contrib/dev/acpica/include/accommon.h>
|
||||
|
||||
|
||||
#define _COMPONENT ACPI_UTILITIES
|
||||
ACPI_MODULE_NAME ("utnonansi")
|
||||
|
||||
|
||||
/*
|
||||
* Non-ANSI C library functions - strlwr, strupr, stricmp, and a 64-bit
|
||||
* version of strtoul.
|
||||
*/
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiUtStrlwr (strlwr)
|
||||
*
|
||||
* PARAMETERS: SrcString - The source string to convert
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Convert a string to lowercase
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiUtStrlwr (
|
||||
char *SrcString)
|
||||
{
|
||||
char *String;
|
||||
|
||||
|
||||
ACPI_FUNCTION_ENTRY ();
|
||||
|
||||
|
||||
if (!SrcString)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Walk entire string, lowercasing the letters */
|
||||
|
||||
for (String = SrcString; *String; String++)
|
||||
{
|
||||
*String = (char) tolower ((int) *String);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiUtStrupr (strupr)
|
||||
*
|
||||
* PARAMETERS: SrcString - The source string to convert
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Convert a string to uppercase
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiUtStrupr (
|
||||
char *SrcString)
|
||||
{
|
||||
char *String;
|
||||
|
||||
|
||||
ACPI_FUNCTION_ENTRY ();
|
||||
|
||||
|
||||
if (!SrcString)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Walk entire string, uppercasing the letters */
|
||||
|
||||
for (String = SrcString; *String; String++)
|
||||
{
|
||||
*String = (char) toupper ((int) *String);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiUtStricmp (stricmp)
|
||||
*
|
||||
* PARAMETERS: String1 - first string to compare
|
||||
* String2 - second string to compare
|
||||
*
|
||||
* RETURN: int that signifies string relationship. Zero means strings
|
||||
* are equal.
|
||||
*
|
||||
* DESCRIPTION: Case-insensitive string compare. Implementation of the
|
||||
* non-ANSI stricmp function.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int
|
||||
AcpiUtStricmp (
|
||||
char *String1,
|
||||
char *String2)
|
||||
{
|
||||
int c1;
|
||||
int c2;
|
||||
|
||||
|
||||
do
|
||||
{
|
||||
c1 = tolower ((int) *String1);
|
||||
c2 = tolower ((int) *String2);
|
||||
|
||||
String1++;
|
||||
String2++;
|
||||
}
|
||||
while ((c1 == c2) && (c1));
|
||||
|
||||
return (c1 - c2);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiUtStrtoul64
|
||||
*
|
||||
* PARAMETERS: String - Null terminated string
|
||||
* Base - Radix of the string: 16 or ACPI_ANY_BASE;
|
||||
* ACPI_ANY_BASE means 'in behalf of ToInteger'
|
||||
* RetInteger - Where the converted integer is returned
|
||||
*
|
||||
* RETURN: Status and Converted value
|
||||
*
|
||||
* DESCRIPTION: Convert a string into an unsigned value. Performs either a
|
||||
* 32-bit or 64-bit conversion, depending on the current mode
|
||||
* of the interpreter.
|
||||
*
|
||||
* NOTE: Does not support Octal strings, not needed.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiUtStrtoul64 (
|
||||
char *String,
|
||||
UINT32 Base,
|
||||
UINT64 *RetInteger)
|
||||
{
|
||||
UINT32 ThisDigit = 0;
|
||||
UINT64 ReturnValue = 0;
|
||||
UINT64 Quotient;
|
||||
UINT64 Dividend;
|
||||
UINT32 ToIntegerOp = (Base == ACPI_ANY_BASE);
|
||||
UINT32 Mode32 = (AcpiGbl_IntegerByteWidth == 4);
|
||||
UINT8 ValidDigits = 0;
|
||||
UINT8 SignOf0x = 0;
|
||||
UINT8 Term = 0;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE_STR (UtStroul64, String);
|
||||
|
||||
|
||||
switch (Base)
|
||||
{
|
||||
case ACPI_ANY_BASE:
|
||||
case 16:
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
/* Invalid Base */
|
||||
|
||||
return_ACPI_STATUS (AE_BAD_PARAMETER);
|
||||
}
|
||||
|
||||
if (!String)
|
||||
{
|
||||
goto ErrorExit;
|
||||
}
|
||||
|
||||
/* Skip over any white space in the buffer */
|
||||
|
||||
while ((*String) && (isspace ((int) *String) || *String == '\t'))
|
||||
{
|
||||
String++;
|
||||
}
|
||||
|
||||
if (ToIntegerOp)
|
||||
{
|
||||
/*
|
||||
* Base equal to ACPI_ANY_BASE means 'ToInteger operation case'.
|
||||
* We need to determine if it is decimal or hexadecimal.
|
||||
*/
|
||||
if ((*String == '0') && (tolower ((int) *(String + 1)) == 'x'))
|
||||
{
|
||||
SignOf0x = 1;
|
||||
Base = 16;
|
||||
|
||||
/* Skip over the leading '0x' */
|
||||
String += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
Base = 10;
|
||||
}
|
||||
}
|
||||
|
||||
/* Any string left? Check that '0x' is not followed by white space. */
|
||||
|
||||
if (!(*String) || isspace ((int) *String) || *String == '\t')
|
||||
{
|
||||
if (ToIntegerOp)
|
||||
{
|
||||
goto ErrorExit;
|
||||
}
|
||||
else
|
||||
{
|
||||
goto AllDone;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Perform a 32-bit or 64-bit conversion, depending upon the current
|
||||
* execution mode of the interpreter
|
||||
*/
|
||||
Dividend = (Mode32) ? ACPI_UINT32_MAX : ACPI_UINT64_MAX;
|
||||
|
||||
/* Main loop: convert the string to a 32- or 64-bit integer */
|
||||
|
||||
while (*String)
|
||||
{
|
||||
if (isdigit ((int) *String))
|
||||
{
|
||||
/* Convert ASCII 0-9 to Decimal value */
|
||||
|
||||
ThisDigit = ((UINT8) *String) - '0';
|
||||
}
|
||||
else if (Base == 10)
|
||||
{
|
||||
/* Digit is out of range; possible in ToInteger case only */
|
||||
|
||||
Term = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
ThisDigit = (UINT8) toupper ((int) *String);
|
||||
if (isxdigit ((int) ThisDigit))
|
||||
{
|
||||
/* Convert ASCII Hex char to value */
|
||||
|
||||
ThisDigit = ThisDigit - 'A' + 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
Term = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (Term)
|
||||
{
|
||||
if (ToIntegerOp)
|
||||
{
|
||||
goto ErrorExit;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if ((ValidDigits == 0) && (ThisDigit == 0) && !SignOf0x)
|
||||
{
|
||||
/* Skip zeros */
|
||||
String++;
|
||||
continue;
|
||||
}
|
||||
|
||||
ValidDigits++;
|
||||
|
||||
if (SignOf0x && ((ValidDigits > 16) || ((ValidDigits > 8) && Mode32)))
|
||||
{
|
||||
/*
|
||||
* This is ToInteger operation case.
|
||||
* No any restrictions for string-to-integer conversion,
|
||||
* see ACPI spec.
|
||||
*/
|
||||
goto ErrorExit;
|
||||
}
|
||||
|
||||
/* Divide the digit into the correct position */
|
||||
|
||||
(void) AcpiUtShortDivide ((Dividend - (UINT64) ThisDigit),
|
||||
Base, &Quotient, NULL);
|
||||
|
||||
if (ReturnValue > Quotient)
|
||||
{
|
||||
if (ToIntegerOp)
|
||||
{
|
||||
goto ErrorExit;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ReturnValue *= Base;
|
||||
ReturnValue += ThisDigit;
|
||||
String++;
|
||||
}
|
||||
|
||||
/* All done, normal exit */
|
||||
|
||||
AllDone:
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Converted value: %8.8X%8.8X\n",
|
||||
ACPI_FORMAT_UINT64 (ReturnValue)));
|
||||
|
||||
*RetInteger = ReturnValue;
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
|
||||
|
||||
ErrorExit:
|
||||
/* Base was set/validated above */
|
||||
|
||||
if (Base == 10)
|
||||
{
|
||||
return_ACPI_STATUS (AE_BAD_DECIMAL_CONSTANT);
|
||||
}
|
||||
else
|
||||
{
|
||||
return_ACPI_STATUS (AE_BAD_HEX_CONSTANT);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION)
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiUtSafeStrcpy, AcpiUtSafeStrcat, AcpiUtSafeStrncat
|
||||
*
|
||||
* PARAMETERS: Adds a "DestSize" parameter to each of the standard string
|
||||
* functions. This is the size of the Destination buffer.
|
||||
*
|
||||
* RETURN: TRUE if the operation would overflow the destination buffer.
|
||||
*
|
||||
* DESCRIPTION: Safe versions of standard Clib string functions. Ensure that
|
||||
* the result of the operation will not overflow the output string
|
||||
* buffer.
|
||||
*
|
||||
* NOTE: These functions are typically only helpful for processing
|
||||
* user input and command lines. For most ACPICA code, the
|
||||
* required buffer length is precisely calculated before buffer
|
||||
* allocation, so the use of these functions is unnecessary.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
BOOLEAN
|
||||
AcpiUtSafeStrcpy (
|
||||
char *Dest,
|
||||
ACPI_SIZE DestSize,
|
||||
char *Source)
|
||||
{
|
||||
|
||||
if (strlen (Source) >= DestSize)
|
||||
{
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
strcpy (Dest, Source);
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
AcpiUtSafeStrcat (
|
||||
char *Dest,
|
||||
ACPI_SIZE DestSize,
|
||||
char *Source)
|
||||
{
|
||||
|
||||
if ((strlen (Dest) + strlen (Source)) >= DestSize)
|
||||
{
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
strcat (Dest, Source);
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
#ifndef _KERNEL
|
||||
BOOLEAN
|
||||
AcpiUtSafeStrncat (
|
||||
char *Dest,
|
||||
ACPI_SIZE DestSize,
|
||||
char *Source,
|
||||
ACPI_SIZE MaxTransferLength)
|
||||
{
|
||||
ACPI_SIZE ActualTransferLength;
|
||||
|
||||
|
||||
ActualTransferLength = ACPI_MIN (MaxTransferLength, strlen (Source));
|
||||
|
||||
if ((strlen (Dest) + ActualTransferLength) >= DestSize)
|
||||
{
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
strncat (Dest, Source, MaxTransferLength);
|
||||
return (FALSE);
|
||||
}
|
||||
#endif
|
||||
#endif
|
@ -50,343 +50,6 @@
|
||||
ACPI_MODULE_NAME ("utstring")
|
||||
|
||||
|
||||
/*
|
||||
* Non-ANSI C library functions - strlwr, strupr, stricmp, and a 64-bit
|
||||
* version of strtoul.
|
||||
*/
|
||||
|
||||
#ifdef ACPI_ASL_COMPILER
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiUtStrlwr (strlwr)
|
||||
*
|
||||
* PARAMETERS: SrcString - The source string to convert
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Convert string to lowercase
|
||||
*
|
||||
* NOTE: This is not a POSIX function, so it appears here, not in utclib.c
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiUtStrlwr (
|
||||
char *SrcString)
|
||||
{
|
||||
char *String;
|
||||
|
||||
|
||||
ACPI_FUNCTION_ENTRY ();
|
||||
|
||||
|
||||
if (!SrcString)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Walk entire string, lowercasing the letters */
|
||||
|
||||
for (String = SrcString; *String; String++)
|
||||
{
|
||||
*String = (char) tolower ((int) *String);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiUtStricmp (stricmp)
|
||||
*
|
||||
* PARAMETERS: String1 - first string to compare
|
||||
* String2 - second string to compare
|
||||
*
|
||||
* RETURN: int that signifies string relationship. Zero means strings
|
||||
* are equal.
|
||||
*
|
||||
* DESCRIPTION: Implementation of the non-ANSI stricmp function (compare
|
||||
* strings with no case sensitivity)
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int
|
||||
AcpiUtStricmp (
|
||||
char *String1,
|
||||
char *String2)
|
||||
{
|
||||
int c1;
|
||||
int c2;
|
||||
|
||||
|
||||
do
|
||||
{
|
||||
c1 = tolower ((int) *String1);
|
||||
c2 = tolower ((int) *String2);
|
||||
|
||||
String1++;
|
||||
String2++;
|
||||
}
|
||||
while ((c1 == c2) && (c1));
|
||||
|
||||
return (c1 - c2);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiUtStrupr (strupr)
|
||||
*
|
||||
* PARAMETERS: SrcString - The source string to convert
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Convert string to uppercase
|
||||
*
|
||||
* NOTE: This is not a POSIX function, so it appears here, not in utclib.c
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
void
|
||||
AcpiUtStrupr (
|
||||
char *SrcString)
|
||||
{
|
||||
char *String;
|
||||
|
||||
|
||||
ACPI_FUNCTION_ENTRY ();
|
||||
|
||||
|
||||
if (!SrcString)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Walk entire string, uppercasing the letters */
|
||||
|
||||
for (String = SrcString; *String; String++)
|
||||
{
|
||||
*String = (char) toupper ((int) *String);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiUtStrtoul64
|
||||
*
|
||||
* PARAMETERS: String - Null terminated string
|
||||
* Base - Radix of the string: 16 or ACPI_ANY_BASE;
|
||||
* ACPI_ANY_BASE means 'in behalf of ToInteger'
|
||||
* RetInteger - Where the converted integer is returned
|
||||
*
|
||||
* RETURN: Status and Converted value
|
||||
*
|
||||
* DESCRIPTION: Convert a string into an unsigned value. Performs either a
|
||||
* 32-bit or 64-bit conversion, depending on the current mode
|
||||
* of the interpreter.
|
||||
* NOTE: Does not support Octal strings, not needed.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiUtStrtoul64 (
|
||||
char *String,
|
||||
UINT32 Base,
|
||||
UINT64 *RetInteger)
|
||||
{
|
||||
UINT32 ThisDigit = 0;
|
||||
UINT64 ReturnValue = 0;
|
||||
UINT64 Quotient;
|
||||
UINT64 Dividend;
|
||||
UINT32 ToIntegerOp = (Base == ACPI_ANY_BASE);
|
||||
UINT32 Mode32 = (AcpiGbl_IntegerByteWidth == 4);
|
||||
UINT8 ValidDigits = 0;
|
||||
UINT8 SignOf0x = 0;
|
||||
UINT8 Term = 0;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE_STR (UtStroul64, String);
|
||||
|
||||
|
||||
switch (Base)
|
||||
{
|
||||
case ACPI_ANY_BASE:
|
||||
case 16:
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
/* Invalid Base */
|
||||
|
||||
return_ACPI_STATUS (AE_BAD_PARAMETER);
|
||||
}
|
||||
|
||||
if (!String)
|
||||
{
|
||||
goto ErrorExit;
|
||||
}
|
||||
|
||||
/* Skip over any white space in the buffer */
|
||||
|
||||
while ((*String) && (isspace ((int) *String) || *String == '\t'))
|
||||
{
|
||||
String++;
|
||||
}
|
||||
|
||||
if (ToIntegerOp)
|
||||
{
|
||||
/*
|
||||
* Base equal to ACPI_ANY_BASE means 'ToInteger operation case'.
|
||||
* We need to determine if it is decimal or hexadecimal.
|
||||
*/
|
||||
if ((*String == '0') && (tolower ((int) *(String + 1)) == 'x'))
|
||||
{
|
||||
SignOf0x = 1;
|
||||
Base = 16;
|
||||
|
||||
/* Skip over the leading '0x' */
|
||||
String += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
Base = 10;
|
||||
}
|
||||
}
|
||||
|
||||
/* Any string left? Check that '0x' is not followed by white space. */
|
||||
|
||||
if (!(*String) || isspace ((int) *String) || *String == '\t')
|
||||
{
|
||||
if (ToIntegerOp)
|
||||
{
|
||||
goto ErrorExit;
|
||||
}
|
||||
else
|
||||
{
|
||||
goto AllDone;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Perform a 32-bit or 64-bit conversion, depending upon the current
|
||||
* execution mode of the interpreter
|
||||
*/
|
||||
Dividend = (Mode32) ? ACPI_UINT32_MAX : ACPI_UINT64_MAX;
|
||||
|
||||
/* Main loop: convert the string to a 32- or 64-bit integer */
|
||||
|
||||
while (*String)
|
||||
{
|
||||
if (isdigit ((int) *String))
|
||||
{
|
||||
/* Convert ASCII 0-9 to Decimal value */
|
||||
|
||||
ThisDigit = ((UINT8) *String) - '0';
|
||||
}
|
||||
else if (Base == 10)
|
||||
{
|
||||
/* Digit is out of range; possible in ToInteger case only */
|
||||
|
||||
Term = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
ThisDigit = (UINT8) toupper ((int) *String);
|
||||
if (isxdigit ((int) ThisDigit))
|
||||
{
|
||||
/* Convert ASCII Hex char to value */
|
||||
|
||||
ThisDigit = ThisDigit - 'A' + 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
Term = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (Term)
|
||||
{
|
||||
if (ToIntegerOp)
|
||||
{
|
||||
goto ErrorExit;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if ((ValidDigits == 0) && (ThisDigit == 0) && !SignOf0x)
|
||||
{
|
||||
/* Skip zeros */
|
||||
String++;
|
||||
continue;
|
||||
}
|
||||
|
||||
ValidDigits++;
|
||||
|
||||
if (SignOf0x && ((ValidDigits > 16) || ((ValidDigits > 8) && Mode32)))
|
||||
{
|
||||
/*
|
||||
* This is ToInteger operation case.
|
||||
* No any restrictions for string-to-integer conversion,
|
||||
* see ACPI spec.
|
||||
*/
|
||||
goto ErrorExit;
|
||||
}
|
||||
|
||||
/* Divide the digit into the correct position */
|
||||
|
||||
(void) AcpiUtShortDivide ((Dividend - (UINT64) ThisDigit),
|
||||
Base, &Quotient, NULL);
|
||||
|
||||
if (ReturnValue > Quotient)
|
||||
{
|
||||
if (ToIntegerOp)
|
||||
{
|
||||
goto ErrorExit;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ReturnValue *= Base;
|
||||
ReturnValue += ThisDigit;
|
||||
String++;
|
||||
}
|
||||
|
||||
/* All done, normal exit */
|
||||
|
||||
AllDone:
|
||||
|
||||
ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Converted value: %8.8X%8.8X\n",
|
||||
ACPI_FORMAT_UINT64 (ReturnValue)));
|
||||
|
||||
*RetInteger = ReturnValue;
|
||||
return_ACPI_STATUS (AE_OK);
|
||||
|
||||
|
||||
ErrorExit:
|
||||
/* Base was set/validated above */
|
||||
|
||||
if (Base == 10)
|
||||
{
|
||||
return_ACPI_STATUS (AE_BAD_DECIMAL_CONSTANT);
|
||||
}
|
||||
else
|
||||
{
|
||||
return_ACPI_STATUS (AE_BAD_HEX_CONSTANT);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiUtPrintString
|
||||
@ -682,81 +345,3 @@ UtConvertBackslashes (
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION)
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiUtSafeStrcpy, AcpiUtSafeStrcat, AcpiUtSafeStrncat
|
||||
*
|
||||
* PARAMETERS: Adds a "DestSize" parameter to each of the standard string
|
||||
* functions. This is the size of the Destination buffer.
|
||||
*
|
||||
* RETURN: TRUE if the operation would overflow the destination buffer.
|
||||
*
|
||||
* DESCRIPTION: Safe versions of standard Clib string functions. Ensure that
|
||||
* the result of the operation will not overflow the output string
|
||||
* buffer.
|
||||
*
|
||||
* NOTE: These functions are typically only helpful for processing
|
||||
* user input and command lines. For most ACPICA code, the
|
||||
* required buffer length is precisely calculated before buffer
|
||||
* allocation, so the use of these functions is unnecessary.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
BOOLEAN
|
||||
AcpiUtSafeStrcpy (
|
||||
char *Dest,
|
||||
ACPI_SIZE DestSize,
|
||||
char *Source)
|
||||
{
|
||||
|
||||
if (strlen (Source) >= DestSize)
|
||||
{
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
strcpy (Dest, Source);
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
AcpiUtSafeStrcat (
|
||||
char *Dest,
|
||||
ACPI_SIZE DestSize,
|
||||
char *Source)
|
||||
{
|
||||
|
||||
if ((strlen (Dest) + strlen (Source)) >= DestSize)
|
||||
{
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
strcat (Dest, Source);
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
#ifndef _KERNEL
|
||||
BOOLEAN
|
||||
AcpiUtSafeStrncat (
|
||||
char *Dest,
|
||||
ACPI_SIZE DestSize,
|
||||
char *Source,
|
||||
ACPI_SIZE MaxTransferLength)
|
||||
{
|
||||
ACPI_SIZE ActualTransferLength;
|
||||
|
||||
|
||||
ActualTransferLength = ACPI_MIN (MaxTransferLength, strlen (Source));
|
||||
|
||||
if ((strlen (Dest) + ActualTransferLength) >= DestSize)
|
||||
{
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
strncat (Dest, Source, MaxTransferLength);
|
||||
return (FALSE);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -136,6 +136,12 @@ ACPI_STATUS
|
||||
AcpiDbSleep (
|
||||
char *ObjectArg);
|
||||
|
||||
void
|
||||
AcpiDbTrace (
|
||||
char *EnableArg,
|
||||
char *MethodArg,
|
||||
char *OnceArg);
|
||||
|
||||
void
|
||||
AcpiDbDisplayLocks (
|
||||
void);
|
||||
@ -424,6 +430,32 @@ AcpiDbGetNextToken (
|
||||
ACPI_OBJECT_TYPE *ReturnType);
|
||||
|
||||
|
||||
/*
|
||||
* dbobject
|
||||
*/
|
||||
void
|
||||
AcpiDbDecodeInternalObject (
|
||||
ACPI_OPERAND_OBJECT *ObjDesc);
|
||||
|
||||
void
|
||||
AcpiDbDisplayInternalObject (
|
||||
ACPI_OPERAND_OBJECT *ObjDesc,
|
||||
ACPI_WALK_STATE *WalkState);
|
||||
|
||||
void
|
||||
AcpiDbDecodeArguments (
|
||||
ACPI_WALK_STATE *WalkState);
|
||||
|
||||
void
|
||||
AcpiDbDecodeLocals (
|
||||
ACPI_WALK_STATE *WalkState);
|
||||
|
||||
void
|
||||
AcpiDbDumpMethodInfo (
|
||||
ACPI_STATUS Status,
|
||||
ACPI_WALK_STATE *WalkState);
|
||||
|
||||
|
||||
/*
|
||||
* dbstats - Generation and display of ACPI table statistics
|
||||
*/
|
||||
|
@ -399,7 +399,9 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoStao[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoStaoStr[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpa[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaHdr[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaClient[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpaServer[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoUefi[];
|
||||
extern ACPI_DMTABLE_INFO AcpiDmTableInfoVrtc[];
|
||||
@ -594,6 +596,10 @@ void
|
||||
AcpiDmDumpStao (
|
||||
ACPI_TABLE_HEADER *Table);
|
||||
|
||||
void
|
||||
AcpiDmDumpTcpa (
|
||||
ACPI_TABLE_HEADER *Table);
|
||||
|
||||
void
|
||||
AcpiDmDumpVrtc (
|
||||
ACPI_TABLE_HEADER *Table);
|
||||
@ -637,10 +643,6 @@ AcpiDmDisassembleOneOp (
|
||||
ACPI_OP_WALK_INFO *Info,
|
||||
ACPI_PARSE_OBJECT *Op);
|
||||
|
||||
void
|
||||
AcpiDmDecodeInternalObject (
|
||||
ACPI_OPERAND_OBJECT *ObjDesc);
|
||||
|
||||
UINT32
|
||||
AcpiDmListType (
|
||||
ACPI_PARSE_OBJECT *Op);
|
||||
@ -699,29 +701,6 @@ AcpiDmNamestring (
|
||||
char *Name);
|
||||
|
||||
|
||||
/*
|
||||
* dmobject
|
||||
*/
|
||||
void
|
||||
AcpiDmDisplayInternalObject (
|
||||
ACPI_OPERAND_OBJECT *ObjDesc,
|
||||
ACPI_WALK_STATE *WalkState);
|
||||
|
||||
void
|
||||
AcpiDmDisplayArguments (
|
||||
ACPI_WALK_STATE *WalkState);
|
||||
|
||||
void
|
||||
AcpiDmDisplayLocals (
|
||||
ACPI_WALK_STATE *WalkState);
|
||||
|
||||
void
|
||||
AcpiDmDumpMethodInfo (
|
||||
ACPI_STATUS Status,
|
||||
ACPI_WALK_STATE *WalkState,
|
||||
ACPI_PARSE_OBJECT *Op);
|
||||
|
||||
|
||||
/*
|
||||
* dmbuffer
|
||||
*/
|
||||
|
@ -461,4 +461,14 @@ AcpiDsResultPush (
|
||||
ACPI_OPERAND_OBJECT *Object,
|
||||
ACPI_WALK_STATE *WalkState);
|
||||
|
||||
|
||||
/*
|
||||
* dsdebug - parser debugging routines
|
||||
*/
|
||||
void
|
||||
AcpiDsDumpMethodStack (
|
||||
ACPI_STATUS Status,
|
||||
ACPI_WALK_STATE *WalkState,
|
||||
ACPI_PARSE_OBJECT *Op);
|
||||
|
||||
#endif /* _ACDISPAT_H_ */
|
||||
|
@ -293,8 +293,6 @@ ACPI_GLOBAL (UINT32, AcpiFixedEventCount[ACPI_NUM_FIXED_EVENT
|
||||
|
||||
ACPI_GLOBAL (UINT32, AcpiGbl_OriginalDbgLevel);
|
||||
ACPI_GLOBAL (UINT32, AcpiGbl_OriginalDbgLayer);
|
||||
ACPI_GLOBAL (UINT32, AcpiGbl_TraceDbgLevel);
|
||||
ACPI_GLOBAL (UINT32, AcpiGbl_TraceDbgLayer);
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
@ -313,6 +311,7 @@ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_NoResourceDisassembly, FALSE);
|
||||
ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_IgnoreNoopOperator, FALSE);
|
||||
ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_CstyleDisassembly, TRUE);
|
||||
ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_ForceAmlDisassembly, FALSE);
|
||||
ACPI_INIT_GLOBAL (ACPI_PARSE_OBJECT *, AcpiGbl_PreviousOp, NULL);
|
||||
|
||||
ACPI_GLOBAL (BOOLEAN, AcpiGbl_DbOpt_Disasm);
|
||||
ACPI_GLOBAL (BOOLEAN, AcpiGbl_DbOpt_Verbose);
|
||||
|
@ -143,6 +143,35 @@ AcpiExDoDebugObject (
|
||||
UINT32 Level,
|
||||
UINT32 Index);
|
||||
|
||||
void
|
||||
AcpiExStartTraceMethod (
|
||||
ACPI_NAMESPACE_NODE *MethodNode,
|
||||
ACPI_OPERAND_OBJECT *ObjDesc,
|
||||
ACPI_WALK_STATE *WalkState);
|
||||
|
||||
void
|
||||
AcpiExStopTraceMethod (
|
||||
ACPI_NAMESPACE_NODE *MethodNode,
|
||||
ACPI_OPERAND_OBJECT *ObjDesc,
|
||||
ACPI_WALK_STATE *WalkState);
|
||||
|
||||
void
|
||||
AcpiExStartTraceOpcode (
|
||||
ACPI_PARSE_OBJECT *Op,
|
||||
ACPI_WALK_STATE *WalkState);
|
||||
|
||||
void
|
||||
AcpiExStopTraceOpcode (
|
||||
ACPI_PARSE_OBJECT *Op,
|
||||
ACPI_WALK_STATE *WalkState);
|
||||
|
||||
void
|
||||
AcpiExTracePoint (
|
||||
ACPI_TRACE_EVENT_TYPE Type,
|
||||
BOOLEAN Begin,
|
||||
UINT8 *Aml,
|
||||
char *Pathname);
|
||||
|
||||
|
||||
/*
|
||||
* exfield - ACPI AML (p-code) execution - field manipulation
|
||||
|
@ -193,8 +193,12 @@ typedef struct acpi_namespace_node
|
||||
*/
|
||||
#ifdef ACPI_LARGE_NAMESPACE_NODE
|
||||
union acpi_parse_object *Op;
|
||||
void *MethodLocals;
|
||||
void *MethodArgs;
|
||||
UINT32 Value;
|
||||
UINT32 Length;
|
||||
UINT8 ArgCount;
|
||||
|
||||
#endif
|
||||
|
||||
} ACPI_NAMESPACE_NODE;
|
||||
@ -864,7 +868,7 @@ typedef union acpi_parse_value
|
||||
} ACPI_PARSE_VALUE;
|
||||
|
||||
|
||||
#ifdef ACPI_DISASSEMBLER
|
||||
#if defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT)
|
||||
#define ACPI_DISASM_ONLY_MEMBERS(a) a;
|
||||
#else
|
||||
#define ACPI_DISASM_ONLY_MEMBERS(a)
|
||||
@ -875,7 +879,7 @@ typedef union acpi_parse_value
|
||||
UINT8 DescriptorType; /* To differentiate various internal objs */\
|
||||
UINT8 Flags; /* Type of Op */\
|
||||
UINT16 AmlOpcode; /* AML opcode */\
|
||||
UINT32 AmlOffset; /* Offset of declaration in AML */\
|
||||
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 */\
|
||||
@ -1291,7 +1295,9 @@ typedef struct acpi_db_method_info
|
||||
* Index of current thread inside all them created.
|
||||
*/
|
||||
char InitArgs;
|
||||
#ifdef ACPI_DEBUGGER
|
||||
ACPI_OBJECT_TYPE ArgTypes[4];
|
||||
#endif
|
||||
char *Arguments[4];
|
||||
char NumThreadsStr[11];
|
||||
char IdOfThreadStr[11];
|
||||
|
@ -223,6 +223,16 @@
|
||||
#define ACPI_MUL_32(a) _ACPI_MUL(a, 5)
|
||||
#define ACPI_MOD_32(a) _ACPI_MOD(a, 32)
|
||||
|
||||
/* Test for ASCII character */
|
||||
|
||||
#define ACPI_IS_ASCII(c) ((c) < 0x80)
|
||||
|
||||
/* Signed integers */
|
||||
|
||||
#define ACPI_SIGN_POSITIVE 0
|
||||
#define ACPI_SIGN_NEGATIVE 1
|
||||
|
||||
|
||||
/*
|
||||
* Rounding macros (Power of two boundaries only)
|
||||
*/
|
||||
|
@ -350,16 +350,22 @@ UINT32
|
||||
AcpiNsOpensScope (
|
||||
ACPI_OBJECT_TYPE Type);
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiNsBuildExternalPath (
|
||||
ACPI_NAMESPACE_NODE *Node,
|
||||
ACPI_SIZE Size,
|
||||
char *NameBuffer);
|
||||
|
||||
char *
|
||||
AcpiNsGetExternalPathname (
|
||||
ACPI_NAMESPACE_NODE *Node);
|
||||
|
||||
UINT32
|
||||
AcpiNsBuildNormalizedPath (
|
||||
ACPI_NAMESPACE_NODE *Node,
|
||||
char *FullPath,
|
||||
UINT32 PathSize,
|
||||
BOOLEAN NoTrailing);
|
||||
|
||||
char *
|
||||
AcpiNsGetNormalizedPathname (
|
||||
ACPI_NAMESPACE_NODE *Node,
|
||||
BOOLEAN NoTrailing);
|
||||
|
||||
char *
|
||||
AcpiNsNameOfCurrentScope (
|
||||
ACPI_WALK_STATE *WalkState);
|
||||
@ -367,7 +373,8 @@ AcpiNsNameOfCurrentScope (
|
||||
ACPI_STATUS
|
||||
AcpiNsHandleToPathname (
|
||||
ACPI_HANDLE TargetHandle,
|
||||
ACPI_BUFFER *Buffer);
|
||||
ACPI_BUFFER *Buffer,
|
||||
BOOLEAN NoTrailing);
|
||||
|
||||
BOOLEAN
|
||||
AcpiNsPatternMatch (
|
||||
|
@ -213,6 +213,7 @@ typedef struct acpi_object_method
|
||||
UINT8 ParamCount;
|
||||
UINT8 SyncLevel;
|
||||
union acpi_operand_object *Mutex;
|
||||
union acpi_operand_object *Node;
|
||||
UINT8 *AmlStart;
|
||||
union
|
||||
{
|
||||
|
@ -89,7 +89,8 @@
|
||||
#define ACPI_LV_DEBUG_OBJECT 0x00000002
|
||||
#define ACPI_LV_INFO 0x00000004
|
||||
#define ACPI_LV_REPAIR 0x00000008
|
||||
#define ACPI_LV_ALL_EXCEPTIONS 0x0000000F
|
||||
#define ACPI_LV_TRACE_POINT 0x00000010
|
||||
#define ACPI_LV_ALL_EXCEPTIONS 0x0000001F
|
||||
|
||||
/* Trace verbosity level 1 [Standard Trace Level] */
|
||||
|
||||
@ -149,6 +150,7 @@
|
||||
#define ACPI_DB_DEBUG_OBJECT ACPI_DEBUG_LEVEL (ACPI_LV_DEBUG_OBJECT)
|
||||
#define ACPI_DB_INFO ACPI_DEBUG_LEVEL (ACPI_LV_INFO)
|
||||
#define ACPI_DB_REPAIR ACPI_DEBUG_LEVEL (ACPI_LV_REPAIR)
|
||||
#define ACPI_DB_TRACE_POINT ACPI_DEBUG_LEVEL (ACPI_LV_TRACE_POINT)
|
||||
#define ACPI_DB_ALL_EXCEPTIONS ACPI_DEBUG_LEVEL (ACPI_LV_ALL_EXCEPTIONS)
|
||||
|
||||
/* Trace level -- also used in the global "DebugLevel" */
|
||||
@ -185,6 +187,21 @@
|
||||
#define ACPI_DEBUG_ALL (ACPI_LV_AML_DISASSEMBLE | ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL)
|
||||
|
||||
|
||||
/*
|
||||
* Global trace flags
|
||||
*/
|
||||
#define ACPI_TRACE_ENABLED ((UINT32) 4)
|
||||
#define ACPI_TRACE_ONESHOT ((UINT32) 2)
|
||||
#define ACPI_TRACE_OPCODE ((UINT32) 1)
|
||||
|
||||
/* Defaults for trace debugging level/layer */
|
||||
|
||||
#define ACPI_TRACE_LEVEL_ALL ACPI_LV_ALL
|
||||
#define ACPI_TRACE_LAYER_ALL 0x000001FF
|
||||
#define ACPI_TRACE_LEVEL_DEFAULT ACPI_LV_TRACE_POINT
|
||||
#define ACPI_TRACE_LAYER_DEFAULT ACPI_EXECUTER
|
||||
|
||||
|
||||
#if defined (ACPI_DEBUG_OUTPUT) || !defined (ACPI_NO_ERROR_MESSAGES)
|
||||
/*
|
||||
* The module name is used primarily for error and debug messages.
|
||||
@ -439,6 +456,8 @@
|
||||
#define ACPI_DUMP_PATHNAME(a, b, c, d) AcpiNsDumpPathname(a, b, c, d)
|
||||
#define ACPI_DUMP_BUFFER(a, b) AcpiUtDebugDumpBuffer((UINT8 *) a, b, DB_BYTE_DISPLAY, _COMPONENT)
|
||||
|
||||
#define ACPI_TRACE_POINT(a, b, c, d) AcpiTracePoint (a, b, c, d)
|
||||
|
||||
#else /* ACPI_DEBUG_OUTPUT */
|
||||
/*
|
||||
* This is the non-debug case -- make everything go away,
|
||||
@ -460,6 +479,7 @@
|
||||
#define ACPI_DUMP_PATHNAME(a, b, c, d)
|
||||
#define ACPI_DUMP_BUFFER(a, b)
|
||||
#define ACPI_IS_DEBUG_ENABLED(Level, Component) 0
|
||||
#define ACPI_TRACE_POINT(a, b, c, d)
|
||||
|
||||
/* Return macros must have a return statement at the minimum */
|
||||
|
||||
|
@ -306,7 +306,7 @@ AcpiPsDeleteParseTree (
|
||||
*/
|
||||
ACPI_PARSE_OBJECT *
|
||||
AcpiPsCreateScopeOp (
|
||||
void);
|
||||
UINT8 *Aml);
|
||||
|
||||
void
|
||||
AcpiPsInitOp (
|
||||
@ -315,7 +315,8 @@ AcpiPsInitOp (
|
||||
|
||||
ACPI_PARSE_OBJECT *
|
||||
AcpiPsAllocOp (
|
||||
UINT16 opcode);
|
||||
UINT16 Opcode,
|
||||
UINT8 *Aml);
|
||||
|
||||
void
|
||||
AcpiPsFreeOp (
|
||||
|
@ -599,5 +599,14 @@ AcpiOsSetFileOffset (
|
||||
UINT8 From);
|
||||
#endif
|
||||
|
||||
#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTracePoint
|
||||
void
|
||||
AcpiOsTracePoint (
|
||||
ACPI_TRACE_EVENT_TYPE Type,
|
||||
BOOLEAN Begin,
|
||||
UINT8 *Aml,
|
||||
char *Pathname);
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* __ACPIOSXF_H__ */
|
||||
|
@ -46,7 +46,7 @@
|
||||
|
||||
/* Current ACPICA subsystem version in YYYYMMDD format */
|
||||
|
||||
#define ACPI_CA_VERSION 0x20150619
|
||||
#define ACPI_CA_VERSION 0x20150717
|
||||
|
||||
#include <contrib/dev/acpica/include/acconfig.h>
|
||||
#include <contrib/dev/acpica/include/actypes.h>
|
||||
@ -253,7 +253,9 @@ ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_ReducedHardware, FALSE);
|
||||
* traced each time it is executed.
|
||||
*/
|
||||
ACPI_INIT_GLOBAL (UINT32, AcpiGbl_TraceFlags, 0);
|
||||
ACPI_INIT_GLOBAL (ACPI_NAME, AcpiGbl_TraceMethodName, 0);
|
||||
ACPI_INIT_GLOBAL (const char *, AcpiGbl_TraceMethodName, NULL);
|
||||
ACPI_INIT_GLOBAL (UINT32, AcpiGbl_TraceDbgLevel, ACPI_TRACE_LEVEL_DEFAULT);
|
||||
ACPI_INIT_GLOBAL (UINT32, AcpiGbl_TraceDbgLayer, ACPI_TRACE_LAYER_DEFAULT);
|
||||
|
||||
/*
|
||||
* Runtime configuration of debug output control masks. We want the debug
|
||||
@ -610,7 +612,7 @@ AcpiGetData (
|
||||
ACPI_EXTERNAL_RETURN_STATUS (
|
||||
ACPI_STATUS
|
||||
AcpiDebugTrace (
|
||||
char *Name,
|
||||
const char *Name,
|
||||
UINT32 DebugLevel,
|
||||
UINT32 DebugLayer,
|
||||
UINT32 Flags))
|
||||
@ -1191,6 +1193,14 @@ AcpiDebugPrintRaw (
|
||||
const char *Format,
|
||||
...))
|
||||
|
||||
ACPI_DBG_DEPENDENT_RETURN_VOID (
|
||||
void
|
||||
AcpiTracePoint (
|
||||
ACPI_TRACE_EVENT_TYPE Type,
|
||||
BOOLEAN Begin,
|
||||
UINT8 *Aml,
|
||||
char *Pathname))
|
||||
|
||||
ACPI_APP_DEPENDENT_RETURN_VOID (
|
||||
ACPI_PRINTF_LIKE(1)
|
||||
void ACPI_INTERNAL_VAR_XFACE
|
||||
|
@ -88,7 +88,7 @@ typedef struct acpi_walk_state
|
||||
BOOLEAN NamespaceOverride; /* Override existing objects */
|
||||
UINT8 ResultSize; /* Total elements for the result stack */
|
||||
UINT8 ResultCount; /* Current number of occupied elements of result stack */
|
||||
UINT32 AmlOffset;
|
||||
UINT8 *Aml;
|
||||
UINT32 ArgTypes;
|
||||
UINT32 MethodBreakpoint; /* For single stepping */
|
||||
UINT32 UserBreakpoint; /* User AML breakpoint */
|
||||
|
@ -1376,14 +1376,28 @@ enum AcpiSpmiInterfaceTypes
|
||||
* December 19, 2014
|
||||
*
|
||||
* NOTE: There are two versions of the table with the same signature --
|
||||
* the client version and the server version.
|
||||
* the client version and the server version. The common PlatformClass
|
||||
* field is used to differentiate the two types of tables.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
typedef struct acpi_table_tcpa_client
|
||||
typedef struct acpi_table_tcpa_hdr
|
||||
{
|
||||
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
|
||||
UINT16 PlatformClass;
|
||||
|
||||
} ACPI_TABLE_TCPA_HDR;
|
||||
|
||||
/*
|
||||
* Values for PlatformClass above.
|
||||
* This is how the client and server subtables are differentiated
|
||||
*/
|
||||
#define ACPI_TCPA_CLIENT_TABLE 0
|
||||
#define ACPI_TCPA_SERVER_TABLE 1
|
||||
|
||||
|
||||
typedef struct acpi_table_tcpa_client
|
||||
{
|
||||
UINT32 MinimumLogLength; /* Minimum length for the event log area */
|
||||
UINT64 LogAddress; /* Address of the event log area */
|
||||
|
||||
@ -1391,8 +1405,6 @@ typedef struct acpi_table_tcpa_client
|
||||
|
||||
typedef struct acpi_table_tcpa_server
|
||||
{
|
||||
ACPI_TABLE_HEADER Header; /* Common ACPI table header */
|
||||
UINT16 PlatformClass;
|
||||
UINT16 Reserved;
|
||||
UINT64 MinimumLogLength; /* Minimum length for the event log area */
|
||||
UINT64 LogAddress; /* Address of the event log area */
|
||||
|
@ -1022,7 +1022,8 @@ typedef struct acpi_buffer
|
||||
*/
|
||||
#define ACPI_FULL_PATHNAME 0
|
||||
#define ACPI_SINGLE_NAME 1
|
||||
#define ACPI_NAME_TYPE_MAX 1
|
||||
#define ACPI_FULL_PATHNAME_NO_TRAILING 2
|
||||
#define ACPI_NAME_TYPE_MAX 2
|
||||
|
||||
|
||||
/*
|
||||
@ -1345,6 +1346,17 @@ typedef struct acpi_memory_list
|
||||
} ACPI_MEMORY_LIST;
|
||||
|
||||
|
||||
/* Definitions of trace event types */
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ACPI_TRACE_AML_METHOD,
|
||||
ACPI_TRACE_AML_OPCODE,
|
||||
ACPI_TRACE_AML_REGION
|
||||
|
||||
} ACPI_TRACE_EVENT_TYPE;
|
||||
|
||||
|
||||
/* Definitions of _OSI support */
|
||||
|
||||
#define ACPI_VENDOR_STRINGS 0x01
|
||||
|
@ -173,6 +173,30 @@ typedef struct acpi_pkg_info
|
||||
#define DB_DWORD_DISPLAY 4
|
||||
#define DB_QWORD_DISPLAY 8
|
||||
|
||||
|
||||
/*
|
||||
* utnonansi - Non-ANSI C library functions
|
||||
*/
|
||||
void
|
||||
AcpiUtStrupr (
|
||||
char *SrcString);
|
||||
|
||||
void
|
||||
AcpiUtStrlwr (
|
||||
char *SrcString);
|
||||
|
||||
int
|
||||
AcpiUtStricmp (
|
||||
char *String1,
|
||||
char *String2);
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiUtStrtoul64 (
|
||||
char *String,
|
||||
UINT32 Base,
|
||||
UINT64 *RetInteger);
|
||||
|
||||
|
||||
/*
|
||||
* utglobal - Global data structures and procedures
|
||||
*/
|
||||
@ -246,8 +270,6 @@ AcpiUtSubsystemShutdown (
|
||||
void);
|
||||
|
||||
|
||||
#define ACPI_IS_ASCII(c) ((c) < 0x80)
|
||||
|
||||
/*
|
||||
* utcopy - Object construction and conversion interfaces
|
||||
*/
|
||||
@ -407,6 +429,7 @@ AcpiUtReportWarning (
|
||||
char *ModuleName,
|
||||
UINT32 LineNumber);
|
||||
|
||||
|
||||
/*
|
||||
* utdelete - Object deletion and reference counts
|
||||
*/
|
||||
@ -732,11 +755,11 @@ AcpiUtWalkPackageTree (
|
||||
ACPI_PKG_CALLBACK WalkCallback,
|
||||
void *Context);
|
||||
|
||||
|
||||
/* Values for Base above (16=Hex, 10=Decimal) */
|
||||
|
||||
#define ACPI_ANY_BASE 0
|
||||
|
||||
|
||||
UINT32
|
||||
AcpiUtDwordByteSwap (
|
||||
UINT32 Value);
|
||||
@ -809,27 +832,6 @@ AcpiUtGetResourceEndTag (
|
||||
* utstring - String and character utilities
|
||||
*/
|
||||
void
|
||||
AcpiUtStrupr (
|
||||
char *SrcString);
|
||||
|
||||
#ifdef ACPI_ASL_COMPILER
|
||||
void
|
||||
AcpiUtStrlwr (
|
||||
char *SrcString);
|
||||
|
||||
int
|
||||
AcpiUtStricmp (
|
||||
char *String1,
|
||||
char *String2);
|
||||
#endif
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiUtStrtoul64 (
|
||||
char *String,
|
||||
UINT32 Base,
|
||||
UINT64 *RetInteger);
|
||||
|
||||
void
|
||||
AcpiUtPrintString (
|
||||
char *String,
|
||||
UINT16 MaxLength);
|
||||
@ -956,6 +958,7 @@ AcpiUtCreateList (
|
||||
|
||||
#endif /* ACPI_DBG_TRACK_ALLOCATIONS */
|
||||
|
||||
|
||||
/*
|
||||
* utaddress - address range check
|
||||
*/
|
||||
@ -982,6 +985,7 @@ void
|
||||
AcpiUtDeleteAddressLists (
|
||||
void);
|
||||
|
||||
|
||||
/*
|
||||
* utxferror - various error/warning output functions
|
||||
*/
|
||||
@ -1028,6 +1032,7 @@ AcpiUtMethodError (
|
||||
const char *Path,
|
||||
ACPI_STATUS LookupStatus);
|
||||
|
||||
|
||||
/*
|
||||
* Utility functions for ACPI names and IDs
|
||||
*/
|
||||
@ -1043,6 +1048,7 @@ const char *
|
||||
AcpiAhMatchUuid (
|
||||
UINT8 *Data);
|
||||
|
||||
|
||||
/*
|
||||
* utprint - printf/vprintf output functions
|
||||
*/
|
||||
@ -1084,6 +1090,7 @@ AcpiUtFilePrintf (
|
||||
...);
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* utuuid -- UUID support functions
|
||||
*/
|
||||
|
@ -56,6 +56,9 @@
|
||||
#if defined(_LINUX) || defined(__linux__)
|
||||
#include "aclinuxex.h"
|
||||
|
||||
#elif defined(WIN32)
|
||||
#include "acwinex.h"
|
||||
|
||||
#elif defined(_AED_EFI)
|
||||
#include "acefiex.h"
|
||||
|
||||
|
@ -8,18 +8,18 @@ SRCS+= acgetline.c ahids.c ahuuids.c cmfsize.c
|
||||
|
||||
# components/debugger
|
||||
SRCS+= dbcmds.c dbconvert.c dbdisply.c dbexec.c dbfileio.c \
|
||||
dbhistry.c dbinput.c dbmethod.c dbnames.c dbstats.c \
|
||||
dbtest.c dbutils.c dbxface.c
|
||||
dbhistry.c dbinput.c dbmethod.c dbnames.c dbobject.c \
|
||||
dbstats.c dbtest.c dbutils.c dbxface.c
|
||||
|
||||
# components/disassembler
|
||||
SRCS+= dmbuffer.c dmcstyle.c dmdeferred.c dmnames.c dmobject.c \
|
||||
dmopcode.c dmresrc.c dmresrcl.c dmresrcl2.c dmresrcs.c \
|
||||
dmutils.c dmwalk.c
|
||||
SRCS+= dmbuffer.c dmcstyle.c dmdeferred.c dmnames.c dmopcode.c \
|
||||
dmresrc.c dmresrcl.c dmresrcl2.c dmresrcs.c dmutils.c \
|
||||
dmwalk.c
|
||||
|
||||
# components/dispatcher
|
||||
SRCS+= dsargs.c dscontrol.c dsfield.c dsinit.c dsmethod.c \
|
||||
dsmthdat.c dsobject.c dsopcode.c dsutils.c dswexec.c \
|
||||
dswload.c dswload2.c dswscope.c dswstate.c
|
||||
SRCS+= dsargs.c dscontrol.c dsdebug.c dsfield.c dsinit.c \
|
||||
dsmethod.c dsmthdat.c dsobject.c dsopcode.c dsutils.c \
|
||||
dswexec.c dswload.c dswload2.c dswscope.c dswstate.c
|
||||
|
||||
# components/events
|
||||
SRCS+= evevent.c evglock.c evgpe.c evgpeblk.c evgpeinit.c \
|
||||
@ -63,9 +63,9 @@ SRCS+= utaddress.c utalloc.c utbuffer.c utcache.c utcopy.c \
|
||||
utdebug.c utdecode.c utdelete.c uterror.c uteval.c \
|
||||
utexcep.c utfileio.c utglobal.c uthex.c utids.c \
|
||||
utinit.c utlock.c utmath.c utmisc.c utmutex.c \
|
||||
utobject.c utosi.c utownerid.c utpredef.c utprint.c \
|
||||
utresrc.c utstate.c utstring.c uttrack.c utuuid.c \
|
||||
utxface.c utxferror.c utxfinit.c
|
||||
utnonansi.c utobject.c utosi.c utownerid.c utpredef.c \
|
||||
utprint.c utresrc.c utstate.c utstring.c uttrack.c \
|
||||
utuuid.c utxface.c utxferror.c utxfinit.c
|
||||
|
||||
# os_specific/service_layers
|
||||
SRCS+= oslibcfs.c osunixxf.c
|
||||
|
@ -62,9 +62,9 @@ SRCS+= tbdata.c tbfadt.c tbinstal.c tbprint.c tbutils.c \
|
||||
SRCS+= utaddress.c utalloc.c utbuffer.c utcache.c utcopy.c \
|
||||
utdebug.c utdecode.c utdelete.c uterror.c utexcep.c \
|
||||
utfileio.c utglobal.c uthex.c utinit.c utlock.c \
|
||||
utmath.c utmisc.c utmutex.c utobject.c utownerid.c \
|
||||
utpredef.c utprint.c utresrc.c utstate.c utstring.c \
|
||||
utuuid.c utxface.c utxferror.c
|
||||
utmath.c utmisc.c utmutex.c utnonansi.c utobject.c \
|
||||
utownerid.c utpredef.c utprint.c utresrc.c utstate.c \
|
||||
utstring.c utuuid.c utxface.c utxferror.c
|
||||
|
||||
# os_specific/service_layers
|
||||
SRCS+= oslibcfs.c osunixxf.c
|
||||
|
Loading…
Reference in New Issue
Block a user