ACK: [PATCH] ACPICA: update to version 20130626
Alex Hung
alex.hung at canonical.com
Fri Jun 28 03:34:03 UTC 2013
On 06/27/2013 06:54 PM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> This set of ACPICA fixes includes the following fixes pertinant for fwts:
> (cut and re-formatetd from the ACPICA mailing list release message):
>
> 1) ACPICA kernel-resident subsystem:
>
> Fixed an issue with runtime repair of the _CST object. Null or invalid
> elements were not always removed properly. Lv Zheng.
>
> Removed an arbitrary restriction of 256 GPEs per GPE block (such as the
> FADT-defined GPE0 and GPE1). For GPE0, GPE1, and each GPE Block Device,
> the maximum number of GPEs is 1016. Use of multiple GPE block devices
> makes the system-wide number of GPEs essentially unlimited.
>
> 2) iASL Compiler/Disassembler and Tools:
>
> Disassembler: Added some missing types for the HEST and EINJ tables:
> "Set Error Type With Address", "CMCI", "MCE", and "Flush Cacheline".
>
> iASL/Preprocessor: Implemented full support for nested #if/#else/#elif/#endif
> blocks. Allows arbitrary depth of nested blocks.
>
> Disassembler: Expanded maximum output string length to 64K. Was 256 bytes
> max. The original purpose of this constraint was to limit the amount of
> debug output. However, the string function in question (UtPrintString) is
> now used for the disassembler also, where 256 bytes is insufficient.
> Reported by RehabMan at GitHub.
>
> iASL/DataTables: Fixed some problems and issues with compilation of DMAR
> tables. ACPICA BZ 999. Lv Zheng.
>
> iASL: Fixed a couple of error exit issues that could result in a "Could not
> delete <file>" message during ASL compilation.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> src/acpica/source/common/dmrestag.c | 1 +
> src/acpica/source/common/dmtable.c | 10 +
> src/acpica/source/common/dmtbdump.c | 3 +
> src/acpica/source/common/dmtbinfo.c | 1 +
> src/acpica/source/compiler/aslcompile.c | 14 +-
> src/acpica/source/compiler/aslmessages.h | 3 +-
> src/acpica/source/compiler/asltree.c | 3 +-
> src/acpica/source/compiler/aslutils.c | 3 +-
> src/acpica/source/compiler/dtfield.c | 3 +-
> src/acpica/source/compiler/dtio.c | 25 +-
> src/acpica/source/compiler/dttable.c | 32 +-
> src/acpica/source/compiler/dttemplate.h | 18 +-
> src/acpica/source/compiler/dtutils.c | 6 +
> src/acpica/source/compiler/preprocess.h | 20 +-
> src/acpica/source/compiler/prscan.c | 404 +++++++++++++++------
> src/acpica/source/components/debugger/dbcmds.c | 4 +-
> src/acpica/source/components/debugger/dbdisply.c | 4 +-
> src/acpica/source/components/debugger/dbinput.c | 10 +-
> src/acpica/source/components/debugger/dbnames.c | 4 +-
> .../source/components/disassembler/dmbuffer.c | 6 +-
> .../source/components/disassembler/dmopcode.c | 2 +-
> .../source/components/disassembler/dmresrcl.c | 2 +-
> .../source/components/disassembler/dmresrcl2.c | 8 +-
> src/acpica/source/components/events/evgpeinit.c | 11 -
> src/acpica/source/components/executer/exdump.c | 5 +-
> src/acpica/source/components/namespace/nsdump.c | 2 +-
> src/acpica/source/components/namespace/nsrepair2.c | 28 +-
> src/acpica/source/components/namespace/nsxfname.c | 11 +-
> src/acpica/source/components/resources/rsdump.c | 2 +-
> src/acpica/source/components/resources/rsutils.c | 2 +-
> src/acpica/source/components/tables/tbxfroot.c | 7 +-
> src/acpica/source/components/utilities/uteval.c | 8 +-
> src/acpica/source/components/utilities/utstring.c | 5 +-
> src/acpica/source/include/acdisasm.h | 1 +
> src/acpica/source/include/acpixf.h | 2 +-
> src/acpica/source/include/actables.h | 9 +
> src/acpica/source/include/actypes.h | 7 -
> src/acpica/source/include/acutils.h | 2 +-
> src/acpica/source/tools/acpiexec/aehandlers.c | 2 +-
> 39 files changed, 451 insertions(+), 239 deletions(-)
>
> diff --git a/src/acpica/source/common/dmrestag.c b/src/acpica/source/common/dmrestag.c
> index cc1aece..6f12f74 100644
> --- a/src/acpica/source/common/dmrestag.c
> +++ b/src/acpica/source/common/dmrestag.c
> @@ -738,6 +738,7 @@ AcpiGetTagPathname (
> Status = AcpiNsBuildExternalPath (BufferNode, RequiredSize, Pathname);
> if (ACPI_FAILURE (Status))
> {
> + ACPI_FREE (Pathname);
> return (NULL);
> }
>
> diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
> index 35767c1..b1f2e77 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -172,6 +172,7 @@ static const char *AcpiDmEinjActions[] =
> "Execute Operation",
> "Check Busy Status",
> "Get Command Status",
> + "Set Error Type With Address",
> "Unknown Action"
> };
>
> @@ -182,6 +183,7 @@ static const char *AcpiDmEinjInstructions[] =
> "Write Register",
> "Write Register Value",
> "Noop",
> + "Flush Cacheline",
> "Unknown Instruction"
> };
>
> @@ -252,6 +254,8 @@ static const char *AcpiDmHestNotifySubnames[] =
> "Local Interrupt",
> "SCI",
> "NMI",
> + "CMCI", /* ACPI 5.0 */
> + "MCE", /* ACPI 5.0 */
> "Unknown Notify Type" /* Reserved */
> };
>
> @@ -816,6 +820,11 @@ AcpiDmDumpTable (
> ByteLength = 8;
> break;
>
> + case ACPI_DMT_BUF10:
> +
> + ByteLength = 10;
> + break;
> +
> case ACPI_DMT_BUF16:
> case ACPI_DMT_UUID:
>
> @@ -934,6 +943,7 @@ AcpiDmDumpTable (
> break;
>
> case ACPI_DMT_BUF7:
> + case ACPI_DMT_BUF10:
> case ACPI_DMT_BUF16:
> case ACPI_DMT_BUF128:
> /*
> diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c
> index 3d7ac6d..84c646a 100644
> --- a/src/acpica/source/common/dmtbdump.c
> +++ b/src/acpica/source/common/dmtbdump.c
> @@ -944,6 +944,7 @@ AcpiDmDumpDmar (
> {
> return;
> }
> + AcpiOsPrintf ("\n");
>
> switch (SubTable->Type)
> {
> @@ -996,6 +997,7 @@ AcpiDmDumpDmar (
> {
> return;
> }
> + AcpiOsPrintf ("\n");
>
> /* Dump the PCI Path entries for this device scope */
>
> @@ -1013,6 +1015,7 @@ AcpiDmDumpDmar (
>
> PathOffset += 2;
> PciPath += 2;
> + AcpiOsPrintf ("\n");
> }
>
> /* Point to next device scope entry */
> diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c
> index 743c654..def6de8 100644
> --- a/src/acpica/source/common/dmtbinfo.c
> +++ b/src/acpica/source/common/dmtbinfo.c
> @@ -852,6 +852,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoDmar[] =
> {
> {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Width), "Host Address Width", 0},
> {ACPI_DMT_UINT8, ACPI_DMAR_OFFSET (Flags), "Flags", 0},
> + {ACPI_DMT_BUF10, ACPI_DMAR_OFFSET (Reserved[0]), "Reserved", 0},
> ACPI_DMT_TERMINATOR
> };
>
> diff --git a/src/acpica/source/compiler/aslcompile.c b/src/acpica/source/compiler/aslcompile.c
> index 4932abd..3d5a1a5 100644
> --- a/src/acpica/source/compiler/aslcompile.c
> +++ b/src/acpica/source/compiler/aslcompile.c
> @@ -1038,7 +1038,19 @@ CmCleanupAndExit (
>
> /* Close all open files */
>
> - Gbl_Files[ASL_FILE_PREPROCESSOR].Handle = NULL; /* the .i file is same as source file */
> + /*
> + * Take care with the preprocessor file (.i), it might be the same
> + * as the "input" file, depending on where the compiler has terminated
> + * or aborted. Prevent attempt to close the same file twice in
> + * loop below.
> + */
> + if (Gbl_Files[ASL_FILE_PREPROCESSOR].Handle ==
> + Gbl_Files[ASL_FILE_INPUT].Handle)
> + {
> + Gbl_Files[ASL_FILE_PREPROCESSOR].Handle = NULL;
> + }
> +
> + /* Close the standard I/O files */
>
> for (i = ASL_FILE_INPUT; i < ASL_MAX_FILE_TYPE; i++)
> {
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 586afca..16c1d94 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -320,7 +320,7 @@ typedef enum
> ASL_MSG_TOO_MANY_ARGUMENTS,
> ASL_MSG_UNKNOWN_DIRECTIVE,
> ASL_MSG_UNKNOWN_PRAGMA,
> -
> + ASL_MSG_WARNING_DIRECTIVE,
>
> /* These messages are used by the data table compiler only */
>
> @@ -505,6 +505,7 @@ char *AslMessages [] =
> /* ASL_MSG_TOO_MANY_ARGUMENTS */ "Too many macro arguments",
> /* ASL_MSG_UNKNOWN_DIRECTIVE */ "Unknown directive",
> /* ASL_MSG_UNKNOWN_PRAGMA */ "Unknown pragma",
> +/* ASL_MSG_WARNING_DIRECTIVE */ "#warning",
>
> /* Table compiler */
>
> diff --git a/src/acpica/source/compiler/asltree.c b/src/acpica/source/compiler/asltree.c
> index 2fb249b..59cea2b 100644
> --- a/src/acpica/source/compiler/asltree.c
> +++ b/src/acpica/source/compiler/asltree.c
> @@ -895,6 +895,7 @@ TrLinkChildren (
> {
> AslError (ASL_WARNING, ASL_MSG_COMPILER_INTERNAL, Child,
> "Child node list invalid");
> + va_end(ap);
> return (Op);
> }
>
> @@ -941,8 +942,8 @@ TrLinkChildren (
> }
> PrevChild = Child;
> }
> - va_end(ap);
>
> + va_end(ap);
> DbgPrint (ASL_PARSE_OUTPUT, "\n\n");
> return (Op);
> }
> diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c
> index 53fba5a..2e4db5a 100644
> --- a/src/acpica/source/compiler/aslutils.c
> +++ b/src/acpica/source/compiler/aslutils.c
> @@ -425,8 +425,6 @@ DbgPrint (
> va_list Args;
>
>
> - va_start (Args, Fmt);
> -
> if (!Gbl_DebugFlag)
> {
> return;
> @@ -438,6 +436,7 @@ DbgPrint (
> return;
> }
>
> + va_start (Args, Fmt);
> (void) vfprintf (stderr, Fmt, Args);
> va_end (Args);
> return;
> diff --git a/src/acpica/source/compiler/dtfield.c b/src/acpica/source/compiler/dtfield.c
> index 6d781ca..00debb8 100644
> --- a/src/acpica/source/compiler/dtfield.c
> +++ b/src/acpica/source/compiler/dtfield.c
> @@ -539,12 +539,13 @@ DtCompileBuffer (
> if (ACPI_FAILURE (Status))
> {
> DtError (ASL_ERROR, ASL_MSG_BUFFER_ELEMENT, Field, MsgBuffer);
> - return (ByteLength - Count);
> + goto Exit;
> }
>
> Buffer[i] = (UINT8) Value;
> }
>
> +Exit:
> ACPI_FREE (StringValue);
> return (ByteLength - Count);
> }
> diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c
> index f20792d..3c22381 100644
> --- a/src/acpica/source/compiler/dtio.c
> +++ b/src/acpica/source/compiler/dtio.c
> @@ -359,31 +359,21 @@ DtParseLine (
>
> while (Start < Colon)
> {
> - if (*Start == ' ')
> - {
> - Start++;
> - continue;
> - }
> -
> - /* Found left bracket, go to the right bracket */
> -
> if (*Start == '[')
> {
> + /* Found left bracket, go to the right bracket */
> +
> while (Start < Colon && *Start != ']')
> {
> Start++;
> }
> -
> - if (Start == Colon)
> - {
> - break;
> - }
> -
> - Start++;
> - continue;
> + }
> + else if (*Start != ' ')
> + {
> + break;
> }
>
> - break;
> + Start++;
> }
>
> /*
> @@ -1210,4 +1200,5 @@ DtWriteTableToListing (
> AcpiUtDumpBuffer (Buffer, Gbl_TableLength, DB_BYTE_DISPLAY, 0);
>
> AcpiOsRedirectOutput (stdout);
> + ACPI_FREE (Buffer);
> }
> diff --git a/src/acpica/source/compiler/dttable.c b/src/acpica/source/compiler/dttable.c
> index a7c6e18..e754cc4 100644
> --- a/src/acpica/source/compiler/dttable.c
> +++ b/src/acpica/source/compiler/dttable.c
> @@ -613,8 +613,9 @@ DtCompileDmar (
> DT_FIELD *SubtableStart;
> ACPI_DMTABLE_INFO *InfoTable;
> ACPI_DMAR_HEADER *DmarHeader;
> - UINT8 *ReservedBuffer;
> - UINT32 ReservedSize;
> + ACPI_DMAR_DEVICE_SCOPE *DmarDeviceScope;
> + UINT32 DeviceScopeLength;
> + UINT32 PciPathLength;
>
>
> Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmar, &Subtable, TRUE);
> @@ -625,17 +626,7 @@ DtCompileDmar (
>
> ParentTable = DtPeekSubtable ();
> DtInsertSubtable (ParentTable, Subtable);
> -
> - /* DMAR Reserved area */
> -
> - ReservedSize = (UINT32) sizeof (((ACPI_TABLE_DMAR *) NULL)->Reserved);
> - ReservedBuffer = UtLocalCalloc (ReservedSize);
> -
> - DtCreateSubtable (ReservedBuffer, ReservedSize, &Subtable);
> -
> - ACPI_FREE (ReservedBuffer);
> - ParentTable = DtPeekSubtable ();
> - DtInsertSubtable (ParentTable, Subtable);
> + DtPushSubtable (Subtable);
>
> while (*PFieldList)
> {
> @@ -693,10 +684,13 @@ DtCompileDmar (
>
> ParentTable = DtPeekSubtable ();
> DtInsertSubtable (ParentTable, Subtable);
> + DtPushSubtable (Subtable);
>
> /* Optional Device Scope subtables */
>
> - while (*PFieldList)
> + DeviceScopeLength = DmarHeader->Length - Subtable->Length -
> + ParentTable->Length;
> + while (DeviceScopeLength)
> {
> Status = DtCompileTable (PFieldList, AcpiDmTableInfoDmarScope,
> &Subtable, FALSE);
> @@ -709,9 +703,12 @@ DtCompileDmar (
> DtInsertSubtable (ParentTable, Subtable);
> DtPushSubtable (Subtable);
>
> + DmarDeviceScope = ACPI_CAST_PTR (ACPI_DMAR_DEVICE_SCOPE, Subtable->Buffer);
> +
> /* Optional PCI Paths */
>
> - while (*PFieldList)
> + PciPathLength = DmarDeviceScope->Length - Subtable->Length;
> + while (PciPathLength)
> {
> Status = DtCompileTable (PFieldList, TableInfoDmarPciPath,
> &Subtable, FALSE);
> @@ -723,10 +720,15 @@ DtCompileDmar (
>
> ParentTable = DtPeekSubtable ();
> DtInsertSubtable (ParentTable, Subtable);
> + PciPathLength -= Subtable->Length;
> }
> +
> + DtPopSubtable ();
> + DeviceScopeLength -= DmarDeviceScope->Length;
> }
>
> DtPopSubtable ();
> + DtPopSubtable ();
> }
>
> return (AE_OK);
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index 9543ad6..f131b62 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -260,22 +260,22 @@ const unsigned char TemplateDbgp[] =
> const unsigned char TemplateDmar[] =
> {
> 0x44,0x4D,0x41,0x52,0x8C,0x00,0x00,0x00, /* 00000000 "DMAR...." */
> - 0x01,0x15,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
> + 0x01,0x03,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
> 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */
> 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
> - 0x28,0x05,0x10,0x20,0x2F,0x01,0x00,0x00, /* 00000020 "(.. /..." */
> + 0x17,0x05,0x13,0x20,0x2F,0x01,0x00,0x00, /* 00000020 "... /..." */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */
> 0x00,0x00,0x18,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */
> - 0x00,0x00,0x02,0xFD,0x00,0x00,0x00,0x00, /* 00000038 "........" */
> - 0x03,0x08,0x00,0x00,0x08,0xF0,0x1F,0x07, /* 00000040 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */
> + 0x03,0x08,0x00,0x00,0x08,0x00,0x00,0x01, /* 00000040 "........" */
> 0x01,0x00,0x20,0x00,0x00,0x00,0x00,0x00, /* 00000048 ".. ....." */
> - 0x00,0x10,0xC2,0x78,0x00,0x00,0x00,0x00, /* 00000050 "...x...." */
> - 0xFF,0x3F,0xC2,0x78,0x00,0x00,0x00,0x00, /* 00000058 ".?.x...." */
> - 0x01,0x08,0x00,0x00,0x00,0x00,0x1D,0x00, /* 00000060 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000050 "........" */
> + 0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "........" */
> + 0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x02, /* 00000060 "........" */
> 0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */
> - 0x02,0x08,0x00,0x00,0x00,0x00,0x01,0x00, /* 00000070 "........" */
> + 0x02,0x08,0x00,0x00,0x00,0x00,0x00,0x03, /* 00000070 "........" */
> 0x03,0x00,0x14,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */
> - 0x00,0x00,0x02,0xFD,0x00,0x00,0x00,0x00, /* 00000080 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */
> 0x00,0x00,0x00,0x00 /* 00000088 "...." */
> };
>
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index dacb9c4..0045e07 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -469,6 +469,7 @@ DtGetFieldType (
>
> case ACPI_DMT_BUFFER:
> case ACPI_DMT_BUF7:
> + case ACPI_DMT_BUF10:
> case ACPI_DMT_BUF16:
> case ACPI_DMT_BUF128:
> case ACPI_DMT_PCI_PATH:
> @@ -702,6 +703,11 @@ DtGetFieldLength (
> }
> break;
>
> + case ACPI_DMT_BUF10:
> +
> + ByteLength = 10;
> + break;
> +
> case ACPI_DMT_BUF16:
> case ACPI_DMT_UUID:
>
> diff --git a/src/acpica/source/compiler/preprocess.h b/src/acpica/source/compiler/preprocess.h
> index 3e4eaff..ccf83d0 100644
> --- a/src/acpica/source/compiler/preprocess.h
> +++ b/src/acpica/source/compiler/preprocess.h
> @@ -196,6 +196,17 @@ typedef struct pr_file_node
>
> } PR_FILE_NODE;
>
> +#define MAX_ARGUMENT_LENGTH 24
> +
> +typedef struct directive_info
> +{
> + struct directive_info *Next;
> + char Argument[MAX_ARGUMENT_LENGTH];
> + int Directive;
> + BOOLEAN IgnoringThisCodeBlock;
> +
> +} DIRECTIVE_INFO;
> +
>
> /*
> * Globals
> @@ -208,12 +219,13 @@ PR_EXTERN char PR_INIT_GLOBAL (*Gbl_MainTokenBuffer, NULL); /*
> PR_EXTERN char PR_INIT_GLOBAL (*Gbl_MacroTokenBuffer, NULL); /* [ASL_LINE_BUFFER_SIZE]; */
> PR_EXTERN char PR_INIT_GLOBAL (*Gbl_ExpressionTokenBuffer, NULL); /* [ASL_LINE_BUFFER_SIZE]; */
>
> -PR_EXTERN PR_FILE_NODE *Gbl_InputFileList;
> -PR_EXTERN PR_DEFINE_INFO PR_INIT_GLOBAL (*Gbl_DefineList, NULL);
> PR_EXTERN UINT32 Gbl_PreprocessorLineNumber;
> PR_EXTERN int Gbl_IfDepth;
> +PR_EXTERN PR_FILE_NODE *Gbl_InputFileList;
> +PR_EXTERN PR_DEFINE_INFO PR_INIT_GLOBAL (*Gbl_DefineList, NULL);
> PR_EXTERN BOOLEAN PR_INIT_GLOBAL (Gbl_PreprocessorError, FALSE);
> -
> +PR_EXTERN BOOLEAN PR_INIT_GLOBAL (Gbl_IgnoringThisCodeBlock, FALSE);
> +PR_EXTERN DIRECTIVE_INFO PR_INIT_GLOBAL (*Gbl_DirectiveStack, NULL);
>
> /*
> * prscan - Preprocessor entry
> @@ -230,7 +242,7 @@ void
> PrTerminatePreprocessor (
> void);
>
> -BOOLEAN
> +void
> PrDoPreprocess (
> void);
>
> diff --git a/src/acpica/source/compiler/prscan.c b/src/acpica/source/compiler/prscan.c
> index a32f14c..c36a52c 100644
> --- a/src/acpica/source/compiler/prscan.c
> +++ b/src/acpica/source/compiler/prscan.c
> @@ -137,13 +137,27 @@ PrPreprocessInputFile (
> static void
> PrDoDirective (
> char *DirectiveToken,
> - char **Next,
> - BOOLEAN *IgnoringThisCodeBlock);
> + char **Next);
>
> static int
> PrMatchDirective (
> char *Directive);
>
> +static void
> +PrPushDirective (
> + int Directive,
> + char *Argument);
> +
> +static ACPI_STATUS
> +PrPopDirective (
> + void);
> +
> +static void
> +PrDbgPrint (
> + char *Action,
> + char *DirectiveName);
> +
> +
> /*
> * Supported preprocessor directives
> */
> @@ -228,11 +242,16 @@ PrInitializeGlobals (
> {
> /* Init globals */
>
> - Gbl_IfDepth = 0;
> Gbl_InputFileList = NULL;
> Gbl_CurrentLineNumber = 0;
> Gbl_PreprocessorLineNumber = 1;
> Gbl_PreprocessorError = FALSE;
> +
> + /* These are used to track #if/#else blocks (possibly nested) */
> +
> + Gbl_IfDepth = 0;
> + Gbl_IgnoringThisCodeBlock = FALSE;
> + Gbl_DirectiveStack = NULL;
> }
>
>
> @@ -279,7 +298,7 @@ PrTerminatePreprocessor (
> *
> * PARAMETERS: None
> *
> - * RETURN: Error Status. TRUE if error, FALSE if OK.
> + * RETURN: None
> *
> * DESCRIPTION: Main entry point for the iASL Preprocessor. Input file must
> * be already open. Handles multiple input files via the
> @@ -287,7 +306,7 @@ PrTerminatePreprocessor (
> *
> ******************************************************************************/
>
> -BOOLEAN
> +void
> PrDoPreprocess (
> void)
> {
> @@ -309,20 +328,7 @@ PrDoPreprocess (
>
> } while (MoreInputFiles);
>
> -
> - /*
> - * TBD: is this necessary? (Do we abort on any preprocessing errors?)
> - */
> - if (Gbl_PreprocessorError)
> - {
> - /* TBD: can't use source_output file for preprocessor error reporting */
> -
> - Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Handle = NULL;
> - PrTerminatePreprocessor ();
> - return (TRUE);
> - }
> -
> - /* Point compiler input to the new preprocessor file (.i) */
> + /* Point compiler input to the new preprocessor output file (.i) */
>
> FlCloseFile (ASL_FILE_INPUT);
> Gbl_Files[ASL_FILE_INPUT].Handle = Gbl_Files[ASL_FILE_PREPROCESSOR].Handle;
> @@ -334,7 +340,6 @@ PrDoPreprocess (
> Gbl_CurrentLineNumber = 1;
>
> DbgPrint (ASL_DEBUG_OUTPUT, "Preprocessing phase complete \n\n");
> - return (FALSE);
> }
>
>
> @@ -362,7 +367,6 @@ PrPreprocessInputFile (
> char *ReplaceString;
> PR_DEFINE_INFO *DefineInfo;
> ACPI_SIZE TokenOffset;
> - BOOLEAN IgnoringThisCodeBlock = FALSE;
> char *Next;
> int OffsetAdjust;
>
> @@ -392,7 +396,7 @@ PrPreprocessInputFile (
>
> /* Execute the directive, do not write line to output file */
>
> - PrDoDirective (Token, &Next, &IgnoringThisCodeBlock);
> + PrDoDirective (Token, &Next);
> continue;
> }
>
> @@ -401,7 +405,7 @@ PrPreprocessInputFile (
> * FALSE, ignore the line and do not write it to the output file.
> * This continues until an #else or #endif is encountered.
> */
> - if (IgnoringThisCodeBlock == TRUE)
> + if (Gbl_IgnoringThisCodeBlock)
> {
> continue;
> }
> @@ -488,12 +492,8 @@ PrPreprocessInputFile (
> *
> * PARAMETERS: Directive - Pointer to directive name token
> * Next - "Next" buffer from GetNextToken
> - * IgnoringThisCodeBlock - Where the "ignore code" flag is
> - * returned.
> *
> - * RETURN: IgnoringThisCodeBlock: Set to TRUE if we are skipping the FALSE
> - * part of an #if or #else block. Set to FALSE when the
> - * corresponding #else or #endif is encountered.
> + * RETURN: None.
> *
> * DESCRIPTION: Main processing for all preprocessor directives
> *
> @@ -502,8 +502,7 @@ PrPreprocessInputFile (
> static void
> PrDoDirective (
> char *DirectiveToken,
> - char **Next,
> - BOOLEAN *IgnoringThisCodeBlock)
> + char **Next)
> {
> char *Token = Gbl_MainTokenBuffer;
> char *Token2;
> @@ -531,14 +530,28 @@ PrDoDirective (
> return;
> }
>
> - /* TBD: Need a faster way to do this: */
> -
> - if ((Directive == PR_DIRECTIVE_ELIF) ||
> - (Directive == PR_DIRECTIVE_ELSE) ||
> - (Directive == PR_DIRECTIVE_ENDIF))
> + /*
> + * 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
> + * being ignored.
> + */
> + if (Gbl_IgnoringThisCodeBlock)
> {
> - DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "Begin #%s\n",
> - Gbl_CurrentLineNumber, Gbl_DirectiveInfo[Directive].Name);
> + switch (Directive)
> + {
> + case PR_DIRECTIVE_ELSE:
> + case PR_DIRECTIVE_ELIF:
> +
> + if (Gbl_DirectiveStack && Gbl_DirectiveStack->IgnoringThisCodeBlock)
> + {
> + PrDbgPrint ("Ignoring", Gbl_DirectiveInfo[Directive].Name);
> + return;
> + }
> + break;
> +
> + default:
> + break;
> + }
> }
>
> /*
> @@ -548,57 +561,54 @@ PrDoDirective (
> */
> switch (Directive)
> {
> + case PR_DIRECTIVE_ELSE:
> +
> + Gbl_IgnoringThisCodeBlock = !(Gbl_IgnoringThisCodeBlock);
> + PrDbgPrint ("Executing", "else block");
> + return;
> +
> case PR_DIRECTIVE_ELIF:
>
> - *IgnoringThisCodeBlock = !(*IgnoringThisCodeBlock);
> - if (*IgnoringThisCodeBlock == TRUE)
> + Gbl_IgnoringThisCodeBlock = !(Gbl_IgnoringThisCodeBlock);
> + Directive = PR_DIRECTIVE_IF;
> +
> + if (Gbl_IgnoringThisCodeBlock == TRUE)
> {
> /* Not executing the ELSE part -- all done here */
> + PrDbgPrint ("Ignoring", "elif block");
> return;
> }
>
> - /* Will execute the ELSE..IF part */
> + /*
> + * After this, we will execute the IF part further below.
> + * First, however, pop off the original #if directive.
> + */
> + if (ACPI_FAILURE (PrPopDirective ()))
> + {
> + PrError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL,
> + THIS_TOKEN_OFFSET (DirectiveToken));
> + }
>
> - DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> - "#elif - Executing else block\n",
> - Gbl_CurrentLineNumber);
> - Directive = PR_DIRECTIVE_IF;
> + PrDbgPrint ("Executing", "elif block");
> break;
>
> - case PR_DIRECTIVE_ELSE:
> + case PR_DIRECTIVE_ENDIF:
>
> - *IgnoringThisCodeBlock = !(*IgnoringThisCodeBlock);
> - return;
> + PrDbgPrint ("Executing", "endif");
>
> - case PR_DIRECTIVE_ENDIF:
> + /* Pop the owning #if/#ifdef/#ifndef */
>
> - *IgnoringThisCodeBlock = FALSE;
> - Gbl_IfDepth--;
> - if (Gbl_IfDepth < 0)
> + if (ACPI_FAILURE (PrPopDirective ()))
> {
> PrError (ASL_ERROR, ASL_MSG_ENDIF_MISMATCH,
> THIS_TOKEN_OFFSET (DirectiveToken));
> - Gbl_IfDepth = 0;
> }
> return;
>
> default:
> -
> break;
> }
>
> - /*
> - * At this point, if we are ignoring the current code block,
> - * do not process any more directives (i.e., ignore them also.)
> - */
> - if (*IgnoringThisCodeBlock == TRUE)
> - {
> - return;
> - }
> -
> - DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID "Begin #%s\n",
> - Gbl_CurrentLineNumber, Gbl_DirectiveInfo[Directive].Name);
> -
> /* Most directives have at least one argument */
>
> if (Gbl_DirectiveInfo[Directive].ArgCount == 1)
> @@ -610,8 +620,85 @@ PrDoDirective (
> }
> }
>
> + /*
> + * At this point, if we are ignoring the current code block,
> + * do not process any more directives (i.e., ignore them also.)
> + * For "if" style directives, open/push a new block anyway. We
> + * must do this to keep track of #endif directives
> + */
> + if (Gbl_IgnoringThisCodeBlock)
> + {
> + switch (Directive)
> + {
> + case PR_DIRECTIVE_IF:
> + case PR_DIRECTIVE_IFDEF:
> + case PR_DIRECTIVE_IFNDEF:
> +
> + PrPushDirective (Directive, Token);
> + PrDbgPrint ("Ignoring", Gbl_DirectiveInfo[Directive].Name);
> + break;
> +
> + default:
> + break;
> + }
> +
> + return;
> + }
> +
> + /*
> + * Execute the directive
> + */
> + PrDbgPrint ("Begin execution", Gbl_DirectiveInfo[Directive].Name);
> +
> switch (Directive)
> {
> + case PR_DIRECTIVE_IF:
> +
> + TokenOffset = Token - Gbl_MainTokenBuffer;
> +
> + /* Need to expand #define macros in the expression string first */
> +
> + Status = PrResolveIntegerExpression (
> + &Gbl_CurrentLineBuffer[TokenOffset-1], &Value);
> + if (ACPI_FAILURE (Status))
> + {
> + return;
> + }
> +
> + PrPushDirective (Directive, Token);
> + if (!Value)
> + {
> + Gbl_IgnoringThisCodeBlock = TRUE;
> + }
> +
> + DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> + "Resolved #if: %8.8X%8.8X %s\n",
> + Gbl_CurrentLineNumber, ACPI_FORMAT_UINT64 (Value),
> + Gbl_IgnoringThisCodeBlock ? "<Skipping Block>" : "<Executing Block>");
> + break;
> +
> + case PR_DIRECTIVE_IFDEF:
> +
> + PrPushDirective (Directive, Token);
> + if (!PrMatchDefine (Token))
> + {
> + Gbl_IgnoringThisCodeBlock = TRUE;
> + }
> +
> + PrDbgPrint ("Evaluated", "ifdef");
> + break;
> +
> + case PR_DIRECTIVE_IFNDEF:
> +
> + PrPushDirective (Directive, Token);
> + if (PrMatchDefine (Token))
> + {
> + Gbl_IgnoringThisCodeBlock = TRUE;
> + }
> +
> + PrDbgPrint ("Evaluated", "ifndef");
> + break;
> +
> case PR_DIRECTIVE_DEFINE:
> /*
> * By definition, if first char after the name is a paren,
> @@ -667,64 +754,15 @@ PrDoDirective (
>
> case PR_DIRECTIVE_ERROR:
>
> - /* TBD compiler should abort */
> /* Note: No macro expansion */
>
> PrError (ASL_ERROR, ASL_MSG_ERROR_DIRECTIVE,
> THIS_TOKEN_OFFSET (Token));
> - break;
> -
> - case PR_DIRECTIVE_IF:
>
> - TokenOffset = Token - Gbl_MainTokenBuffer;
> -
> - /* Need to expand #define macros in the expression string first */
> -
> - Status = PrResolveIntegerExpression (
> - &Gbl_CurrentLineBuffer[TokenOffset-1], &Value);
> - if (ACPI_FAILURE (Status))
> - {
> - return;
> - }
> -
> - if (!Value)
> - {
> - *IgnoringThisCodeBlock = TRUE;
> - }
> -
> - DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> - "Resolved #if: %8.8X%8.8X %s\n",
> - Gbl_CurrentLineNumber, ACPI_FORMAT_UINT64 (Value),
> - *IgnoringThisCodeBlock ? "<Skipping Block>" : "<Executing Block>");
> -
> - Gbl_IfDepth++;
> - break;
> -
> - case PR_DIRECTIVE_IFDEF:
> -
> - if (!PrMatchDefine (Token))
> - {
> - *IgnoringThisCodeBlock = TRUE;
> - }
> -
> - Gbl_IfDepth++;
> - DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> - "Start #ifdef %s\n", Gbl_CurrentLineNumber,
> - *IgnoringThisCodeBlock ? "<Skipping Block>" : "<Executing Block>");
> - break;
> -
> - case PR_DIRECTIVE_IFNDEF:
> -
> - if (PrMatchDefine (Token))
> - {
> - *IgnoringThisCodeBlock = TRUE;
> - }
> -
> - Gbl_IfDepth++;
> - DbgPrint (ASL_DEBUG_OUTPUT, PR_PREFIX_ID
> - "Start #ifndef %2.2X\n", Gbl_CurrentLineNumber,
> - *IgnoringThisCodeBlock, Gbl_CurrentLineNumber);
> - break;
> + Gbl_SourceLine = 0;
> + Gbl_NextError = Gbl_ErrorLog;
> + CmCleanupAndExit ();
> + exit(1);
>
> case PR_DIRECTIVE_INCLUDE:
>
> @@ -810,7 +848,7 @@ PrDoDirective (
>
> case PR_DIRECTIVE_WARNING:
>
> - PrError (ASL_WARNING, ASL_MSG_ERROR_DIRECTIVE,
> + PrError (ASL_WARNING, ASL_MSG_WARNING_DIRECTIVE,
> THIS_TOKEN_OFFSET (Token));
> break;
>
> @@ -825,7 +863,6 @@ PrDoDirective (
>
> return;
>
> -
> SyntaxError:
>
> PrError (ASL_ERROR, ASL_MSG_DIRECTIVE_SYNTAX,
> @@ -868,3 +905,130 @@ PrMatchDirective (
>
> return (ASL_DIRECTIVE_NOT_FOUND); /* Command not recognized */
> }
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: PrPushDirective
> + *
> + * PARAMETERS: Directive - Encoded directive ID
> + * Argument - String containing argument to the
> + * directive
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Push an item onto the directive stack. Used for processing
> + * nested #if/#else type conditional compilation directives.
> + * Specifically: Used on detection of #if/#ifdef/#ifndef to open
> + * a block.
> + *
> + ******************************************************************************/
> +
> +static void
> +PrPushDirective (
> + int Directive,
> + char *Argument)
> +{
> + DIRECTIVE_INFO *Info;
> +
> +
> + /* Allocate and populate a stack info item */
> +
> + Info = ACPI_ALLOCATE (sizeof (DIRECTIVE_INFO));
> +
> + Info->Next = Gbl_DirectiveStack;
> + Info->Directive = Directive;
> + Info->IgnoringThisCodeBlock = Gbl_IgnoringThisCodeBlock;
> + strncpy (Info->Argument, Argument, MAX_ARGUMENT_LENGTH);
> +
> + DbgPrint (ASL_DEBUG_OUTPUT,
> + "Pr(%.4u) - [%u %s] %*s Pushed [#%s %s]: IgnoreFlag = %s\n",
> + Gbl_CurrentLineNumber, Gbl_IfDepth,
> + Gbl_IgnoringThisCodeBlock ? "I" : "E",
> + Gbl_IfDepth * 4, " ",
> + Gbl_DirectiveInfo[Directive].Name,
> + Argument, Gbl_IgnoringThisCodeBlock ? "TRUE" : "FALSE");
> +
> + /* Push new item */
> +
> + Gbl_DirectiveStack = Info;
> + Gbl_IfDepth++;
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: PrPopDirective
> + *
> + * PARAMETERS: None
> + *
> + * RETURN: Status. Error if the stack is empty.
> + *
> + * DESCRIPTION: Pop an item off the directive stack. Used for processing
> + * nested #if/#else type conditional compilation directives.
> + * Specifically: Used on detection of #elif and #endif to remove
> + * the original #if/#ifdef/#ifndef from the stack and close
> + * the block.
> + *
> + ******************************************************************************/
> +
> +static ACPI_STATUS
> +PrPopDirective (
> + void)
> +{
> + DIRECTIVE_INFO *Info;
> +
> +
> + /* Check for empty stack */
> +
> + Info = Gbl_DirectiveStack;
> + if (!Info)
> + {
> + return (AE_ERROR);
> + }
> +
> + /* Pop one item, keep globals up-to-date */
> +
> + Gbl_IfDepth--;
> + Gbl_IgnoringThisCodeBlock = Info->IgnoringThisCodeBlock;
> + Gbl_DirectiveStack = Info->Next;
> +
> + DbgPrint (ASL_DEBUG_OUTPUT,
> + "Pr(%.4u) - [%u %s] %*s Popped [#%s %s]: IgnoreFlag now = %s\n",
> + Gbl_CurrentLineNumber, Gbl_IfDepth,
> + Gbl_IgnoringThisCodeBlock ? "I" : "E",
> + Gbl_IfDepth * 4, " ",
> + Gbl_DirectiveInfo[Info->Directive].Name,
> + Info->Argument, Gbl_IgnoringThisCodeBlock ? "TRUE" : "FALSE");
> +
> + ACPI_FREE (Info);
> + return (AE_OK);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: PrDbgPrint
> + *
> + * PARAMETERS: Action - Action being performed
> + * DirectiveName - Directive being processed
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Special debug print for directive processing.
> + *
> + ******************************************************************************/
> +
> +static void
> +PrDbgPrint (
> + char *Action,
> + char *DirectiveName)
> +{
> +
> + DbgPrint (ASL_DEBUG_OUTPUT, "Pr(%.4u) - [%u %s] "
> + "%*s %s #%s, Depth %u\n",
> + Gbl_CurrentLineNumber, Gbl_IfDepth,
> + Gbl_IgnoringThisCodeBlock ? "I" : "E",
> + Gbl_IfDepth * 4, " ",
> + Action, DirectiveName, Gbl_IfDepth);
> +}
> diff --git a/src/acpica/source/components/debugger/dbcmds.c b/src/acpica/source/components/debugger/dbcmds.c
> index 0e1c49b..54ddf1a 100644
> --- a/src/acpica/source/components/debugger/dbcmds.c
> +++ b/src/acpica/source/components/debugger/dbcmds.c
> @@ -177,13 +177,15 @@ AcpiDbConvertToNode (
> char *InString)
> {
> ACPI_NAMESPACE_NODE *Node;
> + ACPI_SIZE Address;
>
>
> if ((*InString >= 0x30) && (*InString <= 0x39))
> {
> /* Numeric argument, convert */
>
> - Node = ACPI_TO_POINTER (ACPI_STRTOUL (InString, NULL, 16));
> + Address = ACPI_STRTOUL (InString, NULL, 16);
> + Node = ACPI_TO_POINTER (Address);
> if (!AcpiOsReadable (Node, sizeof (ACPI_NAMESPACE_NODE)))
> {
> AcpiOsPrintf ("Address %p is invalid in this address space\n",
> diff --git a/src/acpica/source/components/debugger/dbdisply.c b/src/acpica/source/components/debugger/dbdisply.c
> index a42a954..832647d 100644
> --- a/src/acpica/source/components/debugger/dbdisply.c
> +++ b/src/acpica/source/components/debugger/dbdisply.c
> @@ -211,9 +211,11 @@ AcpiDbGetPointer (
> void *Target)
> {
> void *ObjPtr;
> + ACPI_SIZE Address;
>
>
> - ObjPtr = ACPI_TO_POINTER (ACPI_STRTOUL (Target, NULL, 16));
> + Address = ACPI_STRTOUL (Target, NULL, 16);
> + ObjPtr = ACPI_TO_POINTER (Address);
> return (ObjPtr);
> }
>
> diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c
> index 8f30208..2f6127f 100644
> --- a/src/acpica/source/components/debugger/dbinput.c
> +++ b/src/acpica/source/components/debugger/dbinput.c
> @@ -901,7 +901,7 @@ AcpiDbCommandDispatch (
> break;
>
> case CMD_EVENT:
> -
> +
> AcpiOsPrintf ("Event command not implemented\n");
> break;
>
> @@ -960,7 +960,7 @@ AcpiDbCommandDispatch (
> return (Status);
>
> case CMD_HISTORY_LAST: /* !! command */
> -
> +
> CommandLine = AcpiDbGetFromHistory (NULL);
> if (!CommandLine)
> {
> @@ -971,12 +971,12 @@ AcpiDbCommandDispatch (
> return (Status);
>
> case CMD_INFORMATION:
> -
> +
> AcpiDbDisplayMethodInfo (Op);
> break;
>
> case CMD_INTEGRITY:
> -
> +
> AcpiDbCheckIntegrity ();
> break;
>
> @@ -1070,7 +1070,7 @@ AcpiDbCommandDispatch (
> break;
>
> case CMD_OWNER:
> -
> +
> AcpiDbDumpNamespaceByOwner (AcpiGbl_DbArgs[1], AcpiGbl_DbArgs[2]);
> break;
>
> diff --git a/src/acpica/source/components/debugger/dbnames.c b/src/acpica/source/components/debugger/dbnames.c
> index bc37388..9fbe539 100644
> --- a/src/acpica/source/components/debugger/dbnames.c
> +++ b/src/acpica/source/components/debugger/dbnames.c
> @@ -855,11 +855,13 @@ AcpiDbFindReferences (
> char *ObjectArg)
> {
> ACPI_OPERAND_OBJECT *ObjDesc;
> + ACPI_SIZE Address;
>
>
> /* Convert string to object pointer */
>
> - ObjDesc = ACPI_TO_POINTER (ACPI_STRTOUL (ObjectArg, NULL, 16));
> + Address = ACPI_STRTOUL (ObjectArg, NULL, 16);
> + ObjDesc = ACPI_TO_POINTER (Address);
>
> /* Search all nodes in namespace */
>
> diff --git a/src/acpica/source/components/disassembler/dmbuffer.c b/src/acpica/source/components/disassembler/dmbuffer.c
> index 4b33c56..9e9f4c4 100644
> --- a/src/acpica/source/components/disassembler/dmbuffer.c
> +++ b/src/acpica/source/components/disassembler/dmbuffer.c
> @@ -249,7 +249,7 @@ AcpiDmByteList (
> case ACPI_DASM_STRING:
>
> AcpiDmIndent (Info->Level);
> - AcpiUtPrintString ((char *) ByteData, ACPI_UINT8_MAX);
> + AcpiUtPrintString ((char *) ByteData, ACPI_UINT16_MAX);
> AcpiOsPrintf ("\n");
> break;
>
> @@ -595,11 +595,9 @@ AcpiDmUnicode (
> WordData = ACPI_CAST_PTR (UINT16, Op->Named.Data);
> WordCount = ACPI_DIV_2 (((UINT32) Op->Common.Value.Integer));
>
> -
> - AcpiOsPrintf ("\"");
> -
> /* Write every other byte as an ASCII character */
>
> + AcpiOsPrintf ("\"");
> for (i = 0; i < (WordCount - 1); i++)
> {
> AcpiOsPrintf ("%c", (int) WordData[i]);
> diff --git a/src/acpica/source/components/disassembler/dmopcode.c b/src/acpica/source/components/disassembler/dmopcode.c
> index 36cfd8a..767c2bf 100644
> --- a/src/acpica/source/components/disassembler/dmopcode.c
> +++ b/src/acpica/source/components/disassembler/dmopcode.c
> @@ -705,7 +705,7 @@ AcpiDmDisassembleOneOp (
>
> case AML_STRING_OP:
>
> - AcpiUtPrintString (Op->Common.Value.String, ACPI_UINT8_MAX);
> + AcpiUtPrintString (Op->Common.Value.String, ACPI_UINT16_MAX);
> break;
>
> case AML_BUFFER_OP:
> diff --git a/src/acpica/source/components/disassembler/dmresrcl.c b/src/acpica/source/components/disassembler/dmresrcl.c
> index 6d1420d..4096822 100644
> --- a/src/acpica/source/components/disassembler/dmresrcl.c
> +++ b/src/acpica/source/components/disassembler/dmresrcl.c
> @@ -637,7 +637,7 @@ AcpiDmResourceSource (
> if (TotalLength > (MinimumTotalLength + 1))
> {
> AcpiOsPrintf (" ");
> - AcpiUtPrintString ((char *) &AmlResourceSource[1], ACPI_UINT8_MAX);
> + AcpiUtPrintString ((char *) &AmlResourceSource[1], ACPI_UINT16_MAX);
> }
>
> AcpiOsPrintf (", ");
> diff --git a/src/acpica/source/components/disassembler/dmresrcl2.c b/src/acpica/source/components/disassembler/dmresrcl2.c
> index b15db88..a5cc7fb 100644
> --- a/src/acpica/source/components/disassembler/dmresrcl2.c
> +++ b/src/acpica/source/components/disassembler/dmresrcl2.c
> @@ -267,7 +267,7 @@ AcpiDmGpioCommon (
> {
> AcpiUtPrintString (
> ACPI_ADD_PTR (char, Resource, Resource->Gpio.ResSourceOffset),
> - ACPI_UINT8_MAX);
> + ACPI_UINT16_MAX);
> }
>
> AcpiOsPrintf (", ");
> @@ -570,7 +570,7 @@ AcpiDmI2cSerialBusDescriptor (
>
> AcpiUtPrintString (
> ACPI_ADD_PTR (char, Resource, ResourceSourceOffset),
> - ACPI_UINT8_MAX);
> + ACPI_UINT16_MAX);
>
> /* ResourceSourceIndex, ResourceUsage */
>
> @@ -645,7 +645,7 @@ AcpiDmSpiSerialBusDescriptor (
>
> AcpiUtPrintString (
> ACPI_ADD_PTR (char, Resource, ResourceSourceOffset),
> - ACPI_UINT8_MAX);
> + ACPI_UINT16_MAX);
>
> /* ResourceSourceIndex, ResourceUsage */
>
> @@ -723,7 +723,7 @@ AcpiDmUartSerialBusDescriptor (
>
> AcpiUtPrintString (
> ACPI_ADD_PTR (char, Resource, ResourceSourceOffset),
> - ACPI_UINT8_MAX);
> + ACPI_UINT16_MAX);
>
> /* ResourceSourceIndex, ResourceUsage */
>
> diff --git a/src/acpica/source/components/events/evgpeinit.c b/src/acpica/source/components/events/evgpeinit.c
> index 8cf5730..c9ae57b 100644
> --- a/src/acpica/source/components/events/evgpeinit.c
> +++ b/src/acpica/source/components/events/evgpeinit.c
> @@ -206,7 +206,6 @@ AcpiEvGpeInitialize (
> /* GPE block 0 exists (has both length and address > 0) */
>
> RegisterCount0 = (UINT16) (AcpiGbl_FADT.Gpe0BlockLength / 2);
> -
> GpeNumberMax = (RegisterCount0 * ACPI_GPE_REGISTER_WIDTH) - 1;
>
> /* Install GPE Block 0 */
> @@ -281,16 +280,6 @@ AcpiEvGpeInitialize (
> goto Cleanup;
> }
>
> - /* Check for Max GPE number out-of-range */
> -
> - if (GpeNumberMax > ACPI_GPE_MAX)
> - {
> - ACPI_ERROR ((AE_INFO,
> - "Maximum GPE number from FADT is too large: 0x%X",
> - GpeNumberMax));
> - Status = AE_BAD_VALUE;
> - goto Cleanup;
> - }
>
> Cleanup:
> (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
> diff --git a/src/acpica/source/components/executer/exdump.c b/src/acpica/source/components/executer/exdump.c
> index cb93831..af788e2 100644
> --- a/src/acpica/source/components/executer/exdump.c
> +++ b/src/acpica/source/components/executer/exdump.c
> @@ -429,6 +429,7 @@ AcpiExDumpObject (
> {
> UINT8 *Target;
> char *Name;
> + const char *ReferenceName;
> UINT8 Count;
>
>
> @@ -513,8 +514,8 @@ AcpiExDumpObject (
>
> case ACPI_EXD_REFERENCE:
>
> - AcpiExOutString ("Class Name",
> - ACPI_CAST_PTR (char, AcpiUtGetReferenceName (ObjDesc)));
> + ReferenceName = AcpiUtGetReferenceName (ObjDesc);
> + AcpiExOutString ("Class Name", ACPI_CAST_PTR (char, ReferenceName));
> AcpiExDumpReferenceObj (ObjDesc);
> break;
>
> diff --git a/src/acpica/source/components/namespace/nsdump.c b/src/acpica/source/components/namespace/nsdump.c
> index 45f009d..233ded6 100644
> --- a/src/acpica/source/components/namespace/nsdump.c
> +++ b/src/acpica/source/components/namespace/nsdump.c
> @@ -691,7 +691,7 @@ AcpiNsDumpOneObject (
> break;
>
> case ACPI_TYPE_LOCAL_INDEX_FIELD:
> -
> +
> ObjDesc = (void *) ObjDesc->IndexField.IndexObj;
> break;
>
> diff --git a/src/acpica/source/components/namespace/nsrepair2.c b/src/acpica/source/components/namespace/nsrepair2.c
> index e3ec4a6..46f4107 100644
> --- a/src/acpica/source/components/namespace/nsrepair2.c
> +++ b/src/acpica/source/components/namespace/nsrepair2.c
> @@ -573,19 +573,7 @@ AcpiNsRepair_CST (
>
>
> /*
> - * Entries (subpackages) in the _CST Package must be sorted by the
> - * C-state type, in ascending order.
> - */
> - Status = AcpiNsCheckSortedList (Info, ReturnObject, 1, 4, 1,
> - ACPI_SORT_ASCENDING, "C-State Type");
> - if (ACPI_FAILURE (Status))
> - {
> - return (Status);
> - }
> -
> - /*
> - * We now know the list is correctly sorted by C-state type. Check if
> - * the C-state type values are proportional.
> + * Check if the C-state type values are proportional.
> */
> OuterElementCount = ReturnObject->Package.Count - 1;
> i = 0;
> @@ -599,6 +587,7 @@ AcpiNsRepair_CST (
> ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname, Info->NodeFlags,
> "SubPackage[%u] - removing entry due to zero count", i));
> Removing = TRUE;
> + goto RemoveElement;
> }
>
> ObjDesc = (*OuterElements)->Package.Elements[1]; /* Index1 = Type */
> @@ -609,6 +598,7 @@ AcpiNsRepair_CST (
> Removing = TRUE;
> }
>
> +RemoveElement:
> if (Removing)
> {
> AcpiNsRemoveElement (ReturnObject, i + 1);
> @@ -624,6 +614,18 @@ AcpiNsRepair_CST (
>
> ObjDesc = ReturnObject->Package.Elements[0];
> ObjDesc->Integer.Value = OuterElementCount;
> +
> + /*
> + * Entries (subpackages) in the _CST Package must be sorted by the
> + * C-state type, in ascending order.
> + */
> + Status = AcpiNsCheckSortedList (Info, ReturnObject, 1, 4, 1,
> + ACPI_SORT_ASCENDING, "C-State Type");
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> return (AE_OK);
> }
>
> diff --git a/src/acpica/source/components/namespace/nsxfname.c b/src/acpica/source/components/namespace/nsxfname.c
> index 71f1191..530d94a 100644
> --- a/src/acpica/source/components/namespace/nsxfname.c
> +++ b/src/acpica/source/components/namespace/nsxfname.c
> @@ -249,6 +249,7 @@ AcpiGetName (
> {
> ACPI_STATUS Status;
> ACPI_NAMESPACE_NODE *Node;
> + char *NodeName;
>
>
> /* Parameter validation */
> @@ -299,7 +300,8 @@ AcpiGetName (
>
> /* Just copy the ACPI name from the Node and zero terminate it */
>
> - ACPI_MOVE_NAME (Buffer->Pointer, AcpiUtGetNodeName (Node));
> + NodeName = AcpiUtGetNodeName (Node);
> + ACPI_MOVE_NAME (Buffer->Pointer, NodeName);
> ((char *) Buffer->Pointer) [ACPI_NAME_SIZE] = 0;
> Status = AE_OK;
>
> @@ -495,9 +497,14 @@ AcpiGetObjectInfo (
> * Get extra info for ACPI Device/Processor objects only:
> * Run the _STA, _ADR and, SxW, and _SxD methods.
> *
> - * Note: none of these methods are required, so they may or may
> + * Notes: none of these methods are required, so they may or may
> * not be present for this device. The Info->Valid bitfield is used
> * to indicate which methods were found and run successfully.
> + *
> + * For _STA, if the method does not exist, then (as per the ACPI
> + * specification), the returned CurrentStatus flags will indicate
> + * that the device is present/functional/enabled. Otherwise, the
> + * CurrentStatus flags reflect the value returned from _STA.
> */
>
> /* Execute the Device._STA method */
> diff --git a/src/acpica/source/components/resources/rsdump.c b/src/acpica/source/components/resources/rsdump.c
> index 26f8315..fb1af63 100644
> --- a/src/acpica/source/components/resources/rsdump.c
> +++ b/src/acpica/source/components/resources/rsdump.c
> @@ -275,7 +275,7 @@ AcpiRsDumpDescriptor (
> break;
>
> case ACPI_RSD_UINT64:
> -
> +
> AcpiRsOutInteger64 (Name, ACPI_GET64 (Target));
> break;
>
> diff --git a/src/acpica/source/components/resources/rsutils.c b/src/acpica/source/components/resources/rsutils.c
> index c04ebac..bdc5ccf 100644
> --- a/src/acpica/source/components/resources/rsutils.c
> +++ b/src/acpica/source/components/resources/rsutils.c
> @@ -265,7 +265,7 @@ AcpiRsMoveData (
> break;
>
> case ACPI_RSC_MOVE32:
> -
> +
> ACPI_MOVE_32_TO_32 (&ACPI_CAST_PTR (UINT32, Destination)[i],
> &ACPI_CAST_PTR (UINT32, Source)[i]);
> break;
> diff --git a/src/acpica/source/components/tables/tbxfroot.c b/src/acpica/source/components/tables/tbxfroot.c
> index 377e2a7..7e6a620 100644
> --- a/src/acpica/source/components/tables/tbxfroot.c
> +++ b/src/acpica/source/components/tables/tbxfroot.c
> @@ -125,11 +125,6 @@
>
> /* Local prototypes */
>
> -static UINT8 *
> -AcpiTbScanMemoryForRsdp (
> - UINT8 *StartAddress,
> - UINT32 Length);
> -
> static ACPI_STATUS
> AcpiTbValidateRsdp (
> ACPI_TABLE_RSDP *Rsdp);
> @@ -324,7 +319,7 @@ ACPI_EXPORT_SYMBOL (AcpiFindRootPointer)
> *
> ******************************************************************************/
>
> -static UINT8 *
> +UINT8 *
> AcpiTbScanMemoryForRsdp (
> UINT8 *StartAddress,
> UINT32 Length)
> diff --git a/src/acpica/source/components/utilities/uteval.c b/src/acpica/source/components/utilities/uteval.c
> index 90677b9..b8d7b6b 100644
> --- a/src/acpica/source/components/utilities/uteval.c
> +++ b/src/acpica/source/components/utilities/uteval.c
> @@ -332,7 +332,8 @@ AcpiUtEvaluateNumericObject (
> * RETURN: Status
> *
> * DESCRIPTION: Executes _STA for selected device and stores results in
> - * *Flags.
> + * *Flags. If _STA does not exist, then the device is assumed
> + * to be present/functional/enabled (as per the ACPI spec).
> *
> * NOTE: Internal function, no parameter validation
> *
> @@ -356,6 +357,11 @@ AcpiUtExecute_STA (
> {
> if (AE_NOT_FOUND == Status)
> {
> + /*
> + * if _STA does not exist, then (as per the ACPI specification),
> + * the returned flags will indicate that the device is present,
> + * functional, and enabled.
> + */
> ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
> "_STA on %4.4s was not found, assuming device is present\n",
> AcpiUtGetNodeName (DeviceNode)));
> diff --git a/src/acpica/source/components/utilities/utstring.c b/src/acpica/source/components/utilities/utstring.c
> index e38deef..a8c928d 100644
> --- a/src/acpica/source/components/utilities/utstring.c
> +++ b/src/acpica/source/components/utilities/utstring.c
> @@ -467,7 +467,8 @@ ErrorExit:
> * FUNCTION: AcpiUtPrintString
> *
> * PARAMETERS: String - Null terminated ASCII string
> - * MaxLength - Maximum output length
> + * MaxLength - Maximum output length. Used to constrain the
> + * length of strings during debug output only.
> *
> * RETURN: None
> *
> @@ -479,7 +480,7 @@ ErrorExit:
> void
> AcpiUtPrintString (
> char *String,
> - UINT8 MaxLength)
> + UINT16 MaxLength)
> {
> UINT32 i;
>
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 440103e..d328c2b 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -180,6 +180,7 @@ typedef enum
> ACPI_DMT_UINT56,
> ACPI_DMT_UINT64,
> ACPI_DMT_BUF7,
> + ACPI_DMT_BUF10,
> ACPI_DMT_BUF16,
> ACPI_DMT_BUF128,
> ACPI_DMT_SIG,
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index 56383de..7042300 100644
> --- a/src/acpica/source/include/acpixf.h
> +++ b/src/acpica/source/include/acpixf.h
> @@ -119,7 +119,7 @@
>
> /* Current ACPICA subsystem version in YYYYMMDD format */
>
> -#define ACPI_CA_VERSION 0x20130517
> +#define ACPI_CA_VERSION 0x20130626
>
> #include "acconfig.h"
> #include "actypes.h"
> diff --git a/src/acpica/source/include/actables.h b/src/acpica/source/include/actables.h
> index 3e88f73..dc1bb21 100644
> --- a/src/acpica/source/include/actables.h
> +++ b/src/acpica/source/include/actables.h
> @@ -122,6 +122,15 @@ AcpiAllocateRootTable (
> UINT32 InitialTableCount);
>
> /*
> + * tbxfroot - Root pointer utilities
> + */
> +UINT8 *
> +AcpiTbScanMemoryForRsdp (
> + UINT8 *StartAddress,
> + UINT32 Length);
> +
> +
> +/*
> * tbfadt - FADT parse/convert/validate
> */
> void
> diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
> index f8c48a3..50d315b 100644
> --- a/src/acpica/source/include/actypes.h
> +++ b/src/acpica/source/include/actypes.h
> @@ -752,13 +752,6 @@ typedef UINT32 ACPI_EVENT_STATUS;
> #define ACPI_EVENT_FLAG_WAKE_ENABLED (ACPI_EVENT_STATUS) 0x02
> #define ACPI_EVENT_FLAG_SET (ACPI_EVENT_STATUS) 0x04
>
> -/*
> - * General Purpose Events (GPE)
> - */
> -#define ACPI_GPE_INVALID 0xFF
> -#define ACPI_GPE_MAX 0xFF
> -#define ACPI_NUM_GPE 256
> -
> /* Actions for AcpiSetGpe, AcpiGpeWakeup, AcpiHwLowSetGpe */
>
> #define ACPI_GPE_ENABLE 0
> diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
> index fdbc142..62442de 100644
> --- a/src/acpica/source/include/acutils.h
> +++ b/src/acpica/source/include/acutils.h
> @@ -975,7 +975,7 @@ AcpiUtStrtoul64 (
> void
> AcpiUtPrintString (
> char *String,
> - UINT8 MaxLength);
> + UINT16 MaxLength);
>
> void
> UtConvertBackslashes (
> diff --git a/src/acpica/source/tools/acpiexec/aehandlers.c b/src/acpica/source/tools/acpiexec/aehandlers.c
> index ef869f6..c5024b5 100644
> --- a/src/acpica/source/tools/acpiexec/aehandlers.c
> +++ b/src/acpica/source/tools/acpiexec/aehandlers.c
> @@ -1264,7 +1264,7 @@ AeRegionHandler (
> case AML_FIELD_ATTRIB_QUICK:
> case AML_FIELD_ATTRIB_SEND_RCV:
> case AML_FIELD_ATTRIB_BYTE:
> -
> +
> Length = 1;
> break;
>
>
Acked-by: Alex Hung <alex.hung at canonical.com>
More information about the fwts-devel
mailing list