[PATCH] ACPICA: update to version 20140828 (LP: #1362786)
Keng-Yu Lin
keng-yu.lin at canonical.com
Fri Aug 29 06:12:04 UTC 2014
On Fri, Aug 29, 2014 at 3:48 AM, Colin King <colin.king at canonical.com> wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Update to ACPICA version 20140828. Refer to
> https://lists.acpica.org/pipermail/devel/2014-August/000665.html
> for details of fixes and features landed in this release.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> src/acpica/source/common/adfile.c | 8 +-
> src/acpica/source/common/adisasm.c | 26 +-
> src/acpica/source/common/adwalk.c | 1 -
> src/acpica/source/common/ahids.c | 0
> src/acpica/source/common/ahuuids.c | 3 +
> src/acpica/source/common/cmfsize.c | 0
> src/acpica/source/common/dmrestag.c | 1 -
> src/acpica/source/common/dmtable.c | 1 +
> src/acpica/source/common/dmtbdump.c | 5 +
> src/acpica/source/common/dmtbinfo.c | 16 +-
> src/acpica/source/compiler/Makefile.am | 1 +
> src/acpica/source/compiler/aslanalyze.c | 1 -
> src/acpica/source/compiler/aslascii.c | 421 ++++++++++++
> src/acpica/source/compiler/aslbtypes.c | 1 -
> src/acpica/source/compiler/aslcodegen.c | 1 -
> src/acpica/source/compiler/aslcompile.c | 743 ++++++++-------------
> src/acpica/source/compiler/aslcompiler.h | 20 +-
> src/acpica/source/compiler/aslcompiler.l | 8 +-
> src/acpica/source/compiler/asldefine.h | 5 +-
> src/acpica/source/compiler/aslerror.c | 8 +-
> src/acpica/source/compiler/aslfileio.c | 2 +
> src/acpica/source/compiler/aslfiles.c | 9 +-
> src/acpica/source/compiler/aslfold.c | 1 -
> src/acpica/source/compiler/aslglobal.h | 29 +-
> src/acpica/source/compiler/aslhex.c | 1 -
> src/acpica/source/compiler/asllength.c | 1 -
> src/acpica/source/compiler/aslload.c | 1 +
> src/acpica/source/compiler/asllookup.c | 1 -
> src/acpica/source/compiler/aslmain.c | 13 +-
> src/acpica/source/compiler/aslmessages.c | 4 +-
> src/acpica/source/compiler/aslmessages.h | 2 +
> src/acpica/source/compiler/aslmethod.c | 53 +-
> src/acpica/source/compiler/aslnamesp.c | 1 -
> src/acpica/source/compiler/aslopcodes.c | 1 -
> src/acpica/source/compiler/asloperands.c | 7 +-
> src/acpica/source/compiler/aslopt.c | 3 +-
> src/acpica/source/compiler/aslresource.c | 34 +-
> src/acpica/source/compiler/aslrestype1.c | 1 -
> src/acpica/source/compiler/aslrestype1i.c | 1 -
> src/acpica/source/compiler/aslrestype2.c | 1 -
> src/acpica/source/compiler/aslrestype2d.c | 1 -
> src/acpica/source/compiler/aslrestype2e.c | 1 -
> src/acpica/source/compiler/aslrestype2q.c | 1 -
> src/acpica/source/compiler/aslrestype2s.c | 1 -
> src/acpica/source/compiler/aslrestype2w.c | 1 -
> src/acpica/source/compiler/aslstartup.c | 16 +-
> src/acpica/source/compiler/aslsupport.l | 18 +-
> src/acpica/source/compiler/asltransform.c | 2 -
> src/acpica/source/compiler/asltree.c | 25 +-
> src/acpica/source/compiler/asltypes.h | 11 +-
> src/acpica/source/compiler/aslutils.c | 64 +-
> src/acpica/source/compiler/aslwalks.c | 1 -
> src/acpica/source/compiler/aslxref.c | 193 +++++-
> src/acpica/source/compiler/dtcompile.c | 12 +-
> src/acpica/source/compiler/dtcompiler.h | 26 +-
> src/acpica/source/compiler/dtio.c | 14 +-
> src/acpica/source/compiler/dtsubtable.c | 4 +-
> src/acpica/source/compiler/dttable.c | 5 +
> src/acpica/source/compiler/dttemplate.c | 7 +-
> src/acpica/source/compiler/dttemplate.h | 13 +-
> src/acpica/source/compiler/dtutils.c | 146 +++-
> src/acpica/source/compiler/prutils.c | 9 +-
> src/acpica/source/components/debugger/dbcmds.c | 1 -
> src/acpica/source/components/debugger/dbconvert.c | 1 -
> src/acpica/source/components/debugger/dbdisply.c | 1 -
> src/acpica/source/components/debugger/dbexec.c | 1 -
> src/acpica/source/components/debugger/dbfileio.c | 1 -
> src/acpica/source/components/debugger/dbhistry.c | 1 -
> src/acpica/source/components/debugger/dbinput.c | 1 -
> src/acpica/source/components/debugger/dbmethod.c | 1 -
> src/acpica/source/components/debugger/dbnames.c | 1 -
> src/acpica/source/components/debugger/dbstats.c | 1 -
> src/acpica/source/components/debugger/dbtest.c | 0
> src/acpica/source/components/debugger/dbutils.c | 1 -
> src/acpica/source/components/debugger/dbxface.c | 1 -
> .../source/components/disassembler/dmdeferred.c | 1 -
> .../source/components/disassembler/dmnames.c | 1 -
> .../source/components/disassembler/dmobject.c | 1 -
> .../source/components/disassembler/dmresrc.c | 1 -
> .../source/components/disassembler/dmresrcl.c | 1 -
> .../source/components/disassembler/dmresrcl2.c | 3 +-
> .../source/components/disassembler/dmresrcs.c | 1 -
> .../source/components/disassembler/dmutils.c | 1 -
> src/acpica/source/components/disassembler/dmwalk.c | 1 -
> src/acpica/source/components/dispatcher/dswstate.c | 1 -
> src/acpica/source/components/events/evgpeinit.c | 1 -
> src/acpica/source/components/events/evhandler.c | 1 -
> src/acpica/source/components/events/evregion.c | 1 -
> src/acpica/source/components/events/evrgnini.c | 1 -
> src/acpica/source/components/events/evxface.c | 1 -
> src/acpica/source/components/events/evxfevnt.c | 1 -
> src/acpica/source/components/events/evxfgpe.c | 1 -
> src/acpica/source/components/executer/exconvrt.c | 1 -
> src/acpica/source/components/executer/exdebug.c | 2 +-
> src/acpica/source/components/executer/exfield.c | 1 -
> src/acpica/source/components/executer/exfldio.c | 1 -
> src/acpica/source/components/executer/exoparg2.c | 1 -
> src/acpica/source/components/executer/exregion.c | 1 -
> src/acpica/source/components/namespace/nsalloc.c | 1 -
> src/acpica/source/components/namespace/nsinit.c | 1 -
> src/acpica/source/components/namespace/nsobject.c | 1 -
> src/acpica/source/components/namespace/nsprepkg.c | 40 ++
> src/acpica/source/components/namespace/nswalk.c | 1 -
> src/acpica/source/components/namespace/nsxfeval.c | 1 -
> src/acpica/source/components/namespace/nsxfobj.c | 1 -
> src/acpica/source/components/parser/psloop.c | 1 -
> src/acpica/source/components/parser/psobject.c | 1 -
> src/acpica/source/components/parser/psopcode.c | 1 -
> src/acpica/source/components/parser/psopinfo.c | 1 -
> src/acpica/source/components/parser/psparse.c | 1 -
> src/acpica/source/components/parser/psscope.c | 1 -
> src/acpica/source/components/parser/pstree.c | 1 -
> src/acpica/source/components/parser/psutils.c | 1 -
> src/acpica/source/components/parser/pswalk.c | 1 -
> src/acpica/source/components/resources/rsdump.c | 1 -
> .../source/components/resources/rsdumpinfo.c | 1 -
> src/acpica/source/components/resources/rsutils.c | 1 -
> src/acpica/source/components/resources/rsxface.c | 1 -
> src/acpica/source/components/tables/tbdata.c | 0
> src/acpica/source/components/utilities/utexcep.c | 1 -
> src/acpica/source/components/utilities/utfileio.c | 1 -
> src/acpica/source/components/utilities/utinit.c | 1 -
> src/acpica/source/components/utilities/utmath.c | 1 -
> src/acpica/source/components/utilities/utmisc.c | 1 -
> src/acpica/source/components/utilities/utmutex.c | 1 -
> src/acpica/source/components/utilities/utownerid.c | 1 -
> src/acpica/source/components/utilities/utresrc.c | 5 +-
> src/acpica/source/components/utilities/utstate.c | 1 -
> src/acpica/source/components/utilities/utstring.c | 1 -
> src/acpica/source/components/utilities/utxface.c | 1 -
> src/acpica/source/components/utilities/utxfinit.c | 1 -
> src/acpica/source/include/acdisasm.h | 1 +
> src/acpica/source/include/acdispat.h | 1 -
> src/acpica/source/include/acnames.h | 4 +
> src/acpica/source/include/acparser.h | 1 -
> src/acpica/source/include/acpixf.h | 2 +-
> src/acpica/source/include/actbl1.h | 21 +-
> src/acpica/source/include/actbl3.h | 8 +-
> src/acpica/source/include/platform/aclinux.h | 12 +
> src/acpica/source/include/platform/aclinuxex.h | 22 +
> .../source/os_specific/service_layers/osunixxf.c | 1 -
> 141 files changed, 1451 insertions(+), 742 deletions(-)
> mode change 100755 => 100644 src/acpica/source/common/ahids.c
> mode change 100755 => 100644 src/acpica/source/common/cmfsize.c
> create mode 100644 src/acpica/source/compiler/aslascii.c
> mode change 100755 => 100644 src/acpica/source/components/debugger/dbtest.c
> mode change 100755 => 100644 src/acpica/source/components/tables/tbdata.c
>
> diff --git a/src/acpica/source/common/adfile.c b/src/acpica/source/common/adfile.c
> index 3426107..6a2625a 100644
> --- a/src/acpica/source/common/adfile.c
> +++ b/src/acpica/source/common/adfile.c
> @@ -113,7 +113,7 @@
> *
> *****************************************************************************/
>
> -
> +#include "aslcompiler.h"
> #include "acpi.h"
> #include "accommon.h"
> #include "acapps.h"
> @@ -278,7 +278,7 @@ FlGenerateFilename (
> * Copy the original filename to a new buffer. Leave room for the worst
> * case where we append the suffix, an added dot and the null terminator.
> */
> - NewFilename = ACPI_ALLOCATE_ZEROED ((ACPI_SIZE)
> + NewFilename = UtStringCacheCalloc ((ACPI_SIZE)
> strlen (InputFilename) + strlen (Suffix) + 2);
> if (!NewFilename)
> {
> @@ -327,7 +327,7 @@ FlStrdup (
> char *NewString;
>
>
> - NewString = ACPI_ALLOCATE ((ACPI_SIZE) strlen (String) + 1);
> + NewString = UtStringCacheCalloc ((ACPI_SIZE) strlen (String) + 1);
> if (!NewString)
> {
> return (NULL);
> @@ -409,7 +409,6 @@ FlSplitInputPathname (
>
> if (!Filename)
> {
> - ACPI_FREE (DirectoryPath);
> return (AE_NO_MEMORY);
> }
>
> @@ -421,6 +420,5 @@ FlSplitInputPathname (
> return (AE_OK);
> }
>
> - ACPI_FREE (Filename);
> return (AE_OK);
> }
> diff --git a/src/acpica/source/common/adisasm.c b/src/acpica/source/common/adisasm.c
> index df70001..a34dff5 100644
> --- a/src/acpica/source/common/adisasm.c
> +++ b/src/acpica/source/common/adisasm.c
> @@ -113,12 +113,9 @@
> *
> *****************************************************************************/
>
> -
> -#include "acpi.h"
> -#include "accommon.h"
> +#include "aslcompiler.h"
> #include "acparser.h"
> #include "amlcode.h"
> -#include "acdebug.h"
> #include "acdisasm.h"
> #include "acdispat.h"
> #include "acnamesp.h"
> @@ -132,23 +129,6 @@
> #define _COMPONENT ACPI_TOOLS
> ACPI_MODULE_NAME ("adisasm")
>
> -/*
> - * Older versions of Bison won't emit this external in the generated header.
> - * Newer versions do emit the external, so we don't need to do it.
> - */
> -#ifndef ASLCOMPILER_ASLCOMPILERPARSE_H
> -extern int AslCompilerdebug;
> -#endif
> -
> -ACPI_STATUS
> -NsDisplayNamespace (
> - void);
> -
> -void
> -NsSetupNamespaceListing (
> - void *Handle);
> -
> -
> /* Local prototypes */
>
> static void
> @@ -726,7 +706,7 @@ AdCreateTableHeader (
> }
> else
> {
> - NewFilename = ACPI_ALLOCATE_ZEROED (9);
> + NewFilename = UtStringCacheCalloc (9);
> if (NewFilename)
> {
> strncat (NewFilename, Table->Signature, 4);
> @@ -746,8 +726,6 @@ AdCreateTableHeader (
> "DefinitionBlock (\"%s\", \"%4.4s\", %hu, \"%.6s\", \"%.8s\", 0x%8.8X)\n",
> NewFilename, Table->Signature, Table->Revision,
> Table->OemId, Table->OemTableId, Table->OemRevision);
> -
> - ACPI_FREE (NewFilename);
> }
>
>
> diff --git a/src/acpica/source/common/adwalk.c b/src/acpica/source/common/adwalk.c
> index 808e4e2..aa50195 100644
> --- a/src/acpica/source/common/adwalk.c
> +++ b/src/acpica/source/common/adwalk.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acparser.h"
> diff --git a/src/acpica/source/common/ahids.c b/src/acpica/source/common/ahids.c
> old mode 100755
> new mode 100644
> diff --git a/src/acpica/source/common/ahuuids.c b/src/acpica/source/common/ahuuids.c
> index 1bf362c..e2da9c1 100644
> --- a/src/acpica/source/common/ahuuids.c
> +++ b/src/acpica/source/common/ahuuids.c
> @@ -160,6 +160,9 @@ const AH_UUID AcpiUuids[] =
> {"Physical Presence Interface",
> "3dddfaa6-361b-4eb4-a424-8d10089d1653"},
>
> + {"Device Properties for _DSD",
> + "daffd814-6eba-4d8c-8a91-bc9bbf4aa301"},
> +
> {NULL, NULL}
> };
>
> diff --git a/src/acpica/source/common/cmfsize.c b/src/acpica/source/common/cmfsize.c
> old mode 100755
> new mode 100644
> diff --git a/src/acpica/source/common/dmrestag.c b/src/acpica/source/common/dmrestag.c
> index 7eca155..d21b111 100644
> --- a/src/acpica/source/common/dmrestag.c
> +++ b/src/acpica/source/common/dmrestag.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acparser.h"
> diff --git a/src/acpica/source/common/dmtable.c b/src/acpica/source/common/dmtable.c
> index efb50b5..8ed2236 100644
> --- a/src/acpica/source/common/dmtable.c
> +++ b/src/acpica/source/common/dmtable.c
> @@ -325,6 +325,7 @@ static const char *AcpiDmSratSubnames[] =
> "Processor Local APIC/SAPIC Affinity",
> "Memory Affinity",
> "Processor Local x2APIC Affinity",
> + "GICC Affinity",
> "Unknown SubTable Type" /* Reserved */
> };
>
> diff --git a/src/acpica/source/common/dmtbdump.c b/src/acpica/source/common/dmtbdump.c
> index b0ae905..235c650 100644
> --- a/src/acpica/source/common/dmtbdump.c
> +++ b/src/acpica/source/common/dmtbdump.c
> @@ -2811,6 +2811,11 @@ AcpiDmDumpSrat (
> InfoTable = AcpiDmTableInfoSrat2;
> break;
>
> + case ACPI_SRAT_TYPE_GICC_AFFINITY:
> +
> + InfoTable = AcpiDmTableInfoSrat3;
> + break;
> +
> default:
> AcpiOsPrintf ("\n**** Unknown SRAT subtable type 0x%X\n", SubTable->Type);
>
> diff --git a/src/acpica/source/common/dmtbinfo.c b/src/acpica/source/common/dmtbinfo.c
> index 2a3bed4..777928d 100644
> --- a/src/acpica/source/common/dmtbinfo.c
> +++ b/src/acpica/source/common/dmtbinfo.c
> @@ -279,6 +279,7 @@
> #define ACPI_SRAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SRAT_CPU_AFFINITY,f)
> #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_VRTC0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_VRTC_ENTRY,f)
> #define ACPI_WDAT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_WDAT_ENTRY,f)
>
> @@ -295,6 +296,7 @@
> #define ACPI_SRAT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_CPU_AFFINITY,f,o)
> #define ACPI_SRAT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_MEM_AFFINITY,f,o)
> #define ACPI_SRAT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_X2APIC_CPU_AFFINITY,f,o)
> +#define ACPI_SRAT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_SRAT_GICC_AFFINITY,f,o)
> #define ACPI_GTDT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_TABLE_GTDT,f,o)
> #define ACPI_GTDT0a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_TIMER_ENTRY,f,o)
> #define ACPI_GTDT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_GTDT_WATCHDOG,f,o)
> @@ -2258,7 +2260,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat0[] =
> {ACPI_DMT_FLAG0, ACPI_SRAT0_FLAG_OFFSET (Flags,0), "Enabled", 0},
> {ACPI_DMT_UINT8, ACPI_SRAT0_OFFSET (LocalSapicEid), "Local Sapic EID", 0},
> {ACPI_DMT_UINT24, ACPI_SRAT0_OFFSET (ProximityDomainHi[0]), "Proximity Domain High(24)", 0},
> - {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (Reserved), "Reserved", 0},
> + {ACPI_DMT_UINT32, ACPI_SRAT0_OFFSET (ClockDomain), "Clock Domain", 0},
> ACPI_DMT_TERMINATOR
> };
>
> @@ -2293,6 +2295,18 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[] =
> ACPI_DMT_TERMINATOR
> };
>
> +/* : GICC Affinity (ACPI 5.1) */
> +
> +ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[] =
> +{
> + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ProximityDomain), "Proximity Domain", 0},
> + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (AcpiProcessorUid), "Acpi Processor UID", 0},
> + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (Flags), "Flags (decoded below)", DT_FLAG},
> + {ACPI_DMT_FLAG0, ACPI_SRAT3_FLAG_OFFSET (Flags,0), "Enabled", 0},
> + {ACPI_DMT_UINT32, ACPI_SRAT3_OFFSET (ClockDomain), "Clock Domain", 0},
> + ACPI_DMT_TERMINATOR
> +};
> +
>
> /*******************************************************************************
> *
> diff --git a/src/acpica/source/compiler/Makefile.am b/src/acpica/source/compiler/Makefile.am
> index a1de14a..34caaee 100644
> --- a/src/acpica/source/compiler/Makefile.am
> +++ b/src/acpica/source/compiler/Makefile.am
> @@ -59,6 +59,7 @@ CLEANFILES = y.output y.tab.c y.tab.h aslcompiler.y.h \
> libfwtsiasl_la_CPPFLAGS = $(AM_CPPFLAGS)
> libfwtsiasl_la_SOURCES = \
> fwts_iasl_interface.c \
> + aslascii.c \
> aslcompile.c \
> aslcompilerlex.c \
> aslcompilerparse.c \
> diff --git a/src/acpica/source/compiler/aslanalyze.c b/src/acpica/source/compiler/aslanalyze.c
> index 8bfc9ac..8562ecd 100644
> --- a/src/acpica/source/compiler/aslanalyze.c
> +++ b/src/acpica/source/compiler/aslanalyze.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include <string.h>
> diff --git a/src/acpica/source/compiler/aslascii.c b/src/acpica/source/compiler/aslascii.c
> new file mode 100644
> index 0000000..09ab9e9
> --- /dev/null
> +++ b/src/acpica/source/compiler/aslascii.c
> @@ -0,0 +1,421 @@
> +/******************************************************************************
> + *
> + * Module Name: aslascii - ASCII detection and support routines
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 1. Copyright Notice
> + *
> + * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp.
> + * All rights reserved.
> + *
> + * 2. License
> + *
> + * 2.1. This is your license from Intel Corp. under its intellectual property
> + * rights. You may have additional license terms from the party that provided
> + * you this software, covering your right to use that party's intellectual
> + * property rights.
> + *
> + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
> + * copy of the source code appearing in this file ("Covered Code") an
> + * irrevocable, perpetual, worldwide license under Intel's copyrights in the
> + * base code distributed originally by Intel ("Original Intel Code") to copy,
> + * make derivatives, distribute, use and display any portion of the Covered
> + * Code in any form, with the right to sublicense such rights; and
> + *
> + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
> + * license (with the right to sublicense), under only those claims of Intel
> + * patents that are infringed by the Original Intel Code, to make, use, sell,
> + * offer to sell, and import the Covered Code and derivative works thereof
> + * solely to the minimum extent necessary to exercise the above copyright
> + * license, and in no event shall the patent license extend to any additions
> + * to or modifications of the Original Intel Code. No other license or right
> + * is granted directly or by implication, estoppel or otherwise;
> + *
> + * The above copyright and patent license is granted only if the following
> + * conditions are met:
> + *
> + * 3. Conditions
> + *
> + * 3.1. Redistribution of Source with Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification with rights to further distribute source must include
> + * the above Copyright Notice, the above License, this list of Conditions,
> + * and the following Disclaimer and Export Compliance provision. In addition,
> + * Licensee must cause all Covered Code to which Licensee contributes to
> + * contain a file documenting the changes Licensee made to create that Covered
> + * Code and the date of any change. Licensee must include in that file the
> + * documentation of any changes made by any predecessor Licensee. Licensee
> + * must include a prominent statement that the modification is derived,
> + * directly or indirectly, from Original Intel Code.
> + *
> + * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
> + * Redistribution of source code of any substantial portion of the Covered
> + * Code or modification without rights to further distribute source must
> + * include the following Disclaimer and Export Compliance provision in the
> + * documentation and/or other materials provided with distribution. In
> + * addition, Licensee may not authorize further sublicense of source of any
> + * portion of the Covered Code, and must include terms to the effect that the
> + * license from Licensee to its licensee is limited to the intellectual
> + * property embodied in the software Licensee provides to its licensee, and
> + * not to intellectual property embodied in modifications its licensee may
> + * make.
> + *
> + * 3.3. Redistribution of Executable. Redistribution in executable form of any
> + * substantial portion of the Covered Code or modification must reproduce the
> + * above Copyright Notice, and the following Disclaimer and Export Compliance
> + * provision in the documentation and/or other materials provided with the
> + * distribution.
> + *
> + * 3.4. Intel retains all right, title, and interest in and to the Original
> + * Intel Code.
> + *
> + * 3.5. Neither the name Intel nor any other trademark owned or controlled by
> + * Intel shall be used in advertising or otherwise to promote the sale, use or
> + * other dealings in products derived from or relating to the Covered Code
> + * without prior written authorization from Intel.
> + *
> + * 4. Disclaimer and Export Compliance
> + *
> + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
> + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
> + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
> + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
> + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
> + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
> + * PARTICULAR PURPOSE.
> + *
> + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
> + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
> + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
> + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
> + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
> + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
> + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
> + * LIMITED REMEDY.
> + *
> + * 4.3. Licensee shall not export, either directly or indirectly, any of this
> + * software or system incorporating such software without first obtaining any
> + * required license or other approval from the U. S. Department of Commerce or
> + * any other agency or department of the United States Government. In the
> + * event Licensee exports any such software from the United States or
> + * re-exports any such software from a foreign destination, Licensee shall
> + * ensure that the distribution and export/re-export of the software is in
> + * compliance with all laws, regulations, orders, or other restrictions of the
> + * U.S. Export Administration Regulations. Licensee agrees that neither it nor
> + * any of its subsidiaries will export/re-export any technical data, process,
> + * software, or service, directly or indirectly, to any country for which the
> + * United States government or any agency thereof requires an export license,
> + * other governmental approval, or letter of assurance, without first obtaining
> + * such license, approval or letter.
> + *
> + *****************************************************************************/
> +
> +#include "aslcompiler.h"
> +#include <acapps.h>
> +
> +#define _COMPONENT ACPI_COMPILER
> + ACPI_MODULE_NAME ("aslascii")
> +
> +
> +/* Local prototypes */
> +
> +static void
> +FlConsumeAnsiComment (
> + FILE *Handle,
> + ASL_FILE_STATUS *Status);
> +
> +static void
> +FlConsumeNewComment (
> + FILE *Handle,
> + ASL_FILE_STATUS *Status);
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: FlCheckForAcpiTable
> + *
> + * PARAMETERS: Handle - Open input file
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Determine if a file seems to be a binary ACPI table, via the
> + * following checks on what would be the table header:
> + * 0) File must be at least as long as an ACPI_TABLE_HEADER
> + * 1) The header length field must match the file size
> + * 2) Signature, OemId, OemTableId, AslCompilerId must be ASCII
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +FlCheckForAcpiTable (
> + FILE *Handle)
> +{
> + ACPI_TABLE_HEADER Table;
> + UINT32 FileSize;
> + size_t Actual;
> + UINT32 i;
> +
> +
> + /* Read a potential table header */
> +
> + Actual = fread (&Table, 1, sizeof (ACPI_TABLE_HEADER), Handle);
> + fseek (Handle, 0, SEEK_SET);
> +
> + if (Actual < sizeof (ACPI_TABLE_HEADER))
> + {
> + return (AE_ERROR);
> + }
> +
> + /* Header length field must match the file size */
> +
> + FileSize = CmGetFileSize (Handle);
> + if (Table.Length != FileSize)
> + {
> + return (AE_ERROR);
> + }
> +
> + /*
> + * These fields must be ASCII:
> + * Signature, OemId, OemTableId, AslCompilerId.
> + * We allow a NULL terminator in OemId and OemTableId.
> + */
> + for (i = 0; i < ACPI_NAME_SIZE; i++)
> + {
> + if (!ACPI_IS_ASCII ((UINT8) Table.Signature[i]))
> + {
> + return (AE_ERROR);
> + }
> +
> + if (!ACPI_IS_ASCII ((UINT8) Table.AslCompilerId[i]))
> + {
> + return (AE_ERROR);
> + }
> + }
> +
> + for (i = 0; (i < ACPI_OEM_ID_SIZE) && (Table.OemId[i]); i++)
> + {
> + if (!ACPI_IS_ASCII ((UINT8) Table.OemId[i]))
> + {
> + return (AE_ERROR);
> + }
> + }
> +
> + for (i = 0; (i < ACPI_OEM_TABLE_ID_SIZE) && (Table.OemTableId[i]); i++)
> + {
> + if (!ACPI_IS_ASCII ((UINT8) Table.OemTableId[i]))
> + {
> + return (AE_ERROR);
> + }
> + }
> +
> + printf ("Binary file appears to be a valid ACPI table, disassembling\n");
> + return (AE_OK);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: FlCheckForAscii
> + *
> + * PARAMETERS: Handle - Open input file
> + * Filename - Input filename
> + * DisplayErrors - TRUE if error messages desired
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Verify that the input file is entirely ASCII. Ignores characters
> + * within comments. Note: does not handle nested comments and does
> + * not handle comment delimiters within string literals. However,
> + * on the rare chance this happens and an invalid character is
> + * missed, the parser will catch the error by failing in some
> + * spectactular manner.
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +FlCheckForAscii (
> + FILE *Handle,
> + char *Filename,
> + BOOLEAN DisplayErrors)
> +{
> + UINT8 Byte;
> + ACPI_SIZE BadBytes = 0;
> + BOOLEAN OpeningComment = FALSE;
> + ASL_FILE_STATUS Status;
> +
> +
> + Status.Line = 1;
> + Status.Offset = 0;
> +
> + /* Read the entire file */
> +
> + while (fread (&Byte, 1, 1, Handle) == 1)
> + {
> + /* Ignore comment fields (allow non-ascii within) */
> +
> + if (OpeningComment)
> + {
> + /* Check for second comment open delimiter */
> +
> + if (Byte == '*')
> + {
> + FlConsumeAnsiComment (Handle, &Status);
> + }
> +
> + if (Byte == '/')
> + {
> + FlConsumeNewComment (Handle, &Status);
> + }
> +
> + /* Reset */
> +
> + OpeningComment = FALSE;
> + }
> + else if (Byte == '/')
> + {
> + OpeningComment = TRUE;
> + }
> +
> + /* Check for an ASCII character */
> +
> + if (!ACPI_IS_ASCII (Byte))
> + {
> + if ((BadBytes < 10) && (DisplayErrors))
> + {
> + AcpiOsPrintf (
> + "Non-ASCII character [0x%2.2X] found in line %u, file offset 0x%.2X\n",
> + Byte, Status.Line, Status.Offset);
> + }
> +
> + BadBytes++;
> + }
> +
> + /* Update line counter */
> +
> + else if (Byte == 0x0A)
> + {
> + Status.Line++;
> + }
> +
> + Status.Offset++;
> + }
> +
> + /* Seek back to the beginning of the source file */
> +
> + fseek (Handle, 0, SEEK_SET);
> +
> + /* Were there any non-ASCII characters in the file? */
> +
> + if (BadBytes)
> + {
> + if (DisplayErrors)
> + {
> + AcpiOsPrintf (
> + "%u non-ASCII characters found in input source text, could be a binary file\n",
> + BadBytes);
> + AslError (ASL_ERROR, ASL_MSG_NON_ASCII, NULL, Filename);
> + }
> +
> + return (AE_BAD_CHARACTER);
> + }
> +
> + /* File is OK (100% ASCII) */
> +
> + return (AE_OK);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: FlConsumeAnsiComment
> + *
> + * PARAMETERS: Handle - Open input file
> + * Status - File current status struct
> + *
> + * RETURN: Number of lines consumed
> + *
> + * DESCRIPTION: Step over a normal slash-star type comment
> + *
> + ******************************************************************************/
> +
> +static void
> +FlConsumeAnsiComment (
> + FILE *Handle,
> + ASL_FILE_STATUS *Status)
> +{
> + UINT8 Byte;
> + BOOLEAN ClosingComment = FALSE;
> +
> +
> + while (fread (&Byte, 1, 1, Handle) == 1)
> + {
> + /* Scan until comment close is found */
> +
> + if (ClosingComment)
> + {
> + if (Byte == '/')
> + {
> + return;
> + }
> +
> + if (Byte != '*')
> + {
> + /* Reset */
> +
> + ClosingComment = FALSE;
> + }
> + }
> + else if (Byte == '*')
> + {
> + ClosingComment = TRUE;
> + }
> +
> + /* Maintain line count */
> +
> + if (Byte == 0x0A)
> + {
> + Status->Line++;
> + }
> +
> + Status->Offset++;
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: FlConsumeNewComment
> + *
> + * PARAMETERS: Handle - Open input file
> + * Status - File current status struct
> + *
> + * RETURN: Number of lines consumed
> + *
> + * DESCRIPTION: Step over a slash-slash type of comment
> + *
> + ******************************************************************************/
> +
> +static void
> +FlConsumeNewComment (
> + FILE *Handle,
> + ASL_FILE_STATUS *Status)
> +{
> + UINT8 Byte;
> +
> +
> + while (fread (&Byte, 1, 1, Handle) == 1)
> + {
> + Status->Offset++;
> +
> + /* Comment ends at newline */
> +
> + if (Byte == 0x0A)
> + {
> + Status->Line++;
> + return;
> + }
> + }
> +}
> diff --git a/src/acpica/source/compiler/aslbtypes.c b/src/acpica/source/compiler/aslbtypes.c
> index 58cb792..bb80368 100644
> --- a/src/acpica/source/compiler/aslbtypes.c
> +++ b/src/acpica/source/compiler/aslbtypes.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "amlcode.h"
> diff --git a/src/acpica/source/compiler/aslcodegen.c b/src/acpica/source/compiler/aslcodegen.c
> index 2de4a58..77fc315 100644
> --- a/src/acpica/source/compiler/aslcodegen.c
> +++ b/src/acpica/source/compiler/aslcodegen.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "amlcode.h"
> diff --git a/src/acpica/source/compiler/aslcompile.c b/src/acpica/source/compiler/aslcompile.c
> index 8f14ef5..a051e0f 100644
> --- a/src/acpica/source/compiler/aslcompile.c
> +++ b/src/acpica/source/compiler/aslcompile.c
> @@ -115,6 +115,7 @@
>
> #include "aslcompiler.h"
> #include "dtcompiler.h"
> +#include "acnamesp.h"
>
> #include <stdio.h>
> #include <time.h>
> @@ -139,484 +140,8 @@ CmFlushSourceCode (
> void);
>
> static void
> -FlConsumeAnsiComment (
> - FILE *Handle,
> - ASL_FILE_STATUS *Status);
> -
> -static void
> -FlConsumeNewComment (
> - FILE *Handle,
> - ASL_FILE_STATUS *Status);
> -
> -static void
> -CmDumpAllEvents (
> - void);
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION: AslCompilerSignon
> - *
> - * PARAMETERS: FileId - ID of the output file
> - *
> - * RETURN: None
> - *
> - * DESCRIPTION: Display compiler signon
> - *
> - ******************************************************************************/
> -
> -void
> -AslCompilerSignon (
> - UINT32 FileId)
> -{
> - char *Prefix = "";
> - char *UtilityName;
> -
> -
> - /* Set line prefix depending on the destination file type */
> -
> - switch (FileId)
> - {
> - case ASL_FILE_ASM_SOURCE_OUTPUT:
> - case ASL_FILE_ASM_INCLUDE_OUTPUT:
> -
> - Prefix = "; ";
> - break;
> -
> - case ASL_FILE_HEX_OUTPUT:
> -
> - if (Gbl_HexOutputFlag == HEX_OUTPUT_ASM)
> - {
> - Prefix = "; ";
> - }
> - else if ((Gbl_HexOutputFlag == HEX_OUTPUT_C) ||
> - (Gbl_HexOutputFlag == HEX_OUTPUT_ASL))
> - {
> - FlPrintFile (ASL_FILE_HEX_OUTPUT, "/*\n");
> - Prefix = " * ";
> - }
> - break;
> -
> - case ASL_FILE_C_SOURCE_OUTPUT:
> - case ASL_FILE_C_OFFSET_OUTPUT:
> - case ASL_FILE_C_INCLUDE_OUTPUT:
> -
> - Prefix = " * ";
> - break;
> -
> - default:
> -
> - /* No other output types supported */
> -
> - break;
> - }
> -
> - /* Running compiler or disassembler? */
> -
> - if (Gbl_DisasmFlag)
> - {
> - UtilityName = AML_DISASSEMBLER_NAME;
> - }
> - else
> - {
> - UtilityName = ASL_COMPILER_NAME;
> - }
> -
> - /* Compiler signon with copyright */
> -
> - FlPrintFile (FileId, "%s\n", Prefix);
> - FlPrintFile (FileId, ACPI_COMMON_HEADER (UtilityName, Prefix));
> -}
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION: AslCompilerFileHeader
> - *
> - * PARAMETERS: FileId - ID of the output file
> - *
> - * RETURN: None
> - *
> - * DESCRIPTION: Header used at the beginning of output files
> - *
> - ******************************************************************************/
> -
> -void
> -AslCompilerFileHeader (
> - UINT32 FileId)
> -{
> - struct tm *NewTime;
> - time_t Aclock;
> - char *Prefix = "";
> -
> -
> - /* Set line prefix depending on the destination file type */
> -
> - switch (FileId)
> - {
> - case ASL_FILE_ASM_SOURCE_OUTPUT:
> - case ASL_FILE_ASM_INCLUDE_OUTPUT:
> -
> - Prefix = "; ";
> - break;
> -
> - case ASL_FILE_HEX_OUTPUT:
> -
> - if (Gbl_HexOutputFlag == HEX_OUTPUT_ASM)
> - {
> - Prefix = "; ";
> - }
> - else if ((Gbl_HexOutputFlag == HEX_OUTPUT_C) ||
> - (Gbl_HexOutputFlag == HEX_OUTPUT_ASL))
> - {
> - Prefix = " * ";
> - }
> - break;
> -
> - case ASL_FILE_C_SOURCE_OUTPUT:
> - case ASL_FILE_C_OFFSET_OUTPUT:
> - case ASL_FILE_C_INCLUDE_OUTPUT:
> -
> - Prefix = " * ";
> - break;
> -
> - default:
> -
> - /* No other output types supported */
> -
> - break;
> - }
> -
> - /* Compilation header with timestamp */
> -
> - (void) time (&Aclock);
> - NewTime = localtime (&Aclock);
> -
> - FlPrintFile (FileId,
> - "%sCompilation of \"%s\" - %s%s\n",
> - Prefix, Gbl_Files[ASL_FILE_INPUT].Filename, asctime (NewTime),
> - Prefix);
> -
> - switch (FileId)
> - {
> - case ASL_FILE_C_SOURCE_OUTPUT:
> - case ASL_FILE_C_OFFSET_OUTPUT:
> - case ASL_FILE_C_INCLUDE_OUTPUT:
> -
> - FlPrintFile (FileId, " */\n");
> - break;
> -
> - default:
> -
> - /* Nothing to do for other output types */
> -
> - break;
> - }
> -}
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION: CmFlushSourceCode
> - *
> - * PARAMETERS: None
> - *
> - * RETURN: None
> - *
> - * DESCRIPTION: Read in any remaining source code after the parse tree
> - * has been constructed.
> - *
> - ******************************************************************************/
> -
> -static void
> -CmFlushSourceCode (
> - void)
> -{
> - char Buffer;
> -
> -
> - while (FlReadFile (ASL_FILE_INPUT, &Buffer, 1) != AE_ERROR)
> - {
> - AslInsertLineBuffer ((int) Buffer);
> - }
> -
> - AslResetCurrentLineBuffer ();
> -}
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION: FlConsume*
> - *
> - * PARAMETERS: Handle - Open input file
> - * Status - File current status struct
> - *
> - * RETURN: Number of lines consumed
> - *
> - * DESCRIPTION: Step over both types of comment during check for ascii chars
> - *
> - ******************************************************************************/
> -
> -static void
> -FlConsumeAnsiComment (
> - FILE *Handle,
> - ASL_FILE_STATUS *Status)
> -{
> - UINT8 Byte;
> - BOOLEAN ClosingComment = FALSE;
> -
> -
> - while (fread (&Byte, 1, 1, Handle) == 1)
> - {
> - /* Scan until comment close is found */
> -
> - if (ClosingComment)
> - {
> - if (Byte == '/')
> - {
> - return;
> - }
> -
> - if (Byte != '*')
> - {
> - /* Reset */
> -
> - ClosingComment = FALSE;
> - }
> - }
> - else if (Byte == '*')
> - {
> - ClosingComment = TRUE;
> - }
> -
> - /* Maintain line count */
> -
> - if (Byte == 0x0A)
> - {
> - Status->Line++;
> - }
> -
> - Status->Offset++;
> - }
> -}
> -
> -
> -static void
> -FlConsumeNewComment (
> - FILE *Handle,
> - ASL_FILE_STATUS *Status)
> -{
> - UINT8 Byte;
> -
> -
> - while (fread (&Byte, 1, 1, Handle) == 1)
> - {
> - Status->Offset++;
> -
> - /* Comment ends at newline */
> -
> - if (Byte == 0x0A)
> - {
> - Status->Line++;
> - return;
> - }
> - }
> -}
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION: FlCheckForAcpiTable
> - *
> - * PARAMETERS: Handle - Open input file
> - *
> - * RETURN: Status
> - *
> - * DESCRIPTION: Determine if a file seems to be a binary ACPI table, via the
> - * following checks on what would be the table header:
> - * 0) File must be at least as long as an ACPI_TABLE_HEADER
> - * 1) The header length field must match the file size
> - * 2) Signature, OemId, OemTableId, AslCompilerId must be ASCII
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -FlCheckForAcpiTable (
> - FILE *Handle)
> -{
> - ACPI_TABLE_HEADER Table;
> - UINT32 FileSize;
> - size_t Actual;
> - UINT32 i;
> -
> -
> - /* Read a potential table header */
> -
> - Actual = fread (&Table, 1, sizeof (ACPI_TABLE_HEADER), Handle);
> - fseek (Handle, 0, SEEK_SET);
> -
> - if (Actual < sizeof (ACPI_TABLE_HEADER))
> - {
> - return (AE_ERROR);
> - }
> -
> - /* Header length field must match the file size */
> -
> - FileSize = CmGetFileSize (Handle);
> - if (Table.Length != FileSize)
> - {
> - return (AE_ERROR);
> - }
> -
> - /*
> - * These fields must be ASCII:
> - * Signature, OemId, OemTableId, AslCompilerId.
> - * We allow a NULL terminator in OemId and OemTableId.
> - */
> - for (i = 0; i < ACPI_NAME_SIZE; i++)
> - {
> - if (!ACPI_IS_ASCII ((UINT8) Table.Signature[i]))
> - {
> - return (AE_ERROR);
> - }
> -
> - if (!ACPI_IS_ASCII ((UINT8) Table.AslCompilerId[i]))
> - {
> - return (AE_ERROR);
> - }
> - }
> -
> - for (i = 0; (i < ACPI_OEM_ID_SIZE) && (Table.OemId[i]); i++)
> - {
> - if (!ACPI_IS_ASCII ((UINT8) Table.OemId[i]))
> - {
> - return (AE_ERROR);
> - }
> - }
> -
> - for (i = 0; (i < ACPI_OEM_TABLE_ID_SIZE) && (Table.OemTableId[i]); i++)
> - {
> - if (!ACPI_IS_ASCII ((UINT8) Table.OemTableId[i]))
> - {
> - return (AE_ERROR);
> - }
> - }
> -
> - printf ("Binary file appears to be a valid ACPI table, disassembling\n");
> - return (AE_OK);
> -}
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION: FlCheckForAscii
> - *
> - * PARAMETERS: Handle - Open input file
> - * Filename - Input filename
> - * DisplayErrors - TRUE if error messages desired
> - *
> - * RETURN: Status
> - *
> - * DESCRIPTION: Verify that the input file is entirely ASCII. Ignores characters
> - * within comments. Note: does not handle nested comments and does
> - * not handle comment delimiters within string literals. However,
> - * on the rare chance this happens and an invalid character is
> - * missed, the parser will catch the error by failing in some
> - * spectactular manner.
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -FlCheckForAscii (
> - FILE *Handle,
> - char *Filename,
> - BOOLEAN DisplayErrors)
> -{
> - UINT8 Byte;
> - ACPI_SIZE BadBytes = 0;
> - BOOLEAN OpeningComment = FALSE;
> - ASL_FILE_STATUS Status;
> -
> -
> - Status.Line = 1;
> - Status.Offset = 0;
> -
> - /* Read the entire file */
> -
> - while (fread (&Byte, 1, 1, Handle) == 1)
> - {
> - /* Ignore comment fields (allow non-ascii within) */
> -
> - if (OpeningComment)
> - {
> - /* Check for second comment open delimiter */
> -
> - if (Byte == '*')
> - {
> - FlConsumeAnsiComment (Handle, &Status);
> - }
> -
> - if (Byte == '/')
> - {
> - FlConsumeNewComment (Handle, &Status);
> - }
> -
> - /* Reset */
> -
> - OpeningComment = FALSE;
> - }
> - else if (Byte == '/')
> - {
> - OpeningComment = TRUE;
> - }
> -
> - /* Check for an ASCII character */
> -
> - if (!ACPI_IS_ASCII (Byte))
> - {
> - if ((BadBytes < 10) && (DisplayErrors))
> - {
> - AcpiOsPrintf (
> - "Non-ASCII character [0x%2.2X] found in line %u, file offset 0x%.2X\n",
> - Byte, Status.Line, Status.Offset);
> - }
> -
> - BadBytes++;
> - }
> -
> - /* Update line counter */
> -
> - else if (Byte == 0x0A)
> - {
> - Status.Line++;
> - }
> -
> - Status.Offset++;
> - }
> -
> - /* Seek back to the beginning of the source file */
> -
> - fseek (Handle, 0, SEEK_SET);
> -
> - /* Were there any non-ASCII characters in the file? */
> -
> - if (BadBytes)
> - {
> - if (DisplayErrors)
> - {
> - AcpiOsPrintf (
> - "%u non-ASCII characters found in input source text, could be a binary file\n",
> - BadBytes);
> - AslError (ASL_ERROR, ASL_MSG_NON_ASCII, NULL, Filename);
> - }
> -
> - return (AE_BAD_CHARACTER);
> - }
> -
> - /* File is OK (100% ASCII) */
> -
> - return (AE_OK);
> -}
> +CmDumpAllEvents (
> + void);
>
>
> /*******************************************************************************
> @@ -689,7 +214,6 @@ CmDoCompile (
> goto ErrorExit;
> }
>
> -
> /* Flush out any remaining source after parse tree is complete */
>
> Event = UtBeginEvent ("Flush source input");
> @@ -874,6 +398,197 @@ ErrorExit:
>
> /*******************************************************************************
> *
> + * FUNCTION: AslCompilerSignon
> + *
> + * PARAMETERS: FileId - ID of the output file
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Display compiler signon
> + *
> + ******************************************************************************/
> +
> +void
> +AslCompilerSignon (
> + UINT32 FileId)
> +{
> + char *Prefix = "";
> + char *UtilityName;
> +
> +
> + /* Set line prefix depending on the destination file type */
> +
> + switch (FileId)
> + {
> + case ASL_FILE_ASM_SOURCE_OUTPUT:
> + case ASL_FILE_ASM_INCLUDE_OUTPUT:
> +
> + Prefix = "; ";
> + break;
> +
> + case ASL_FILE_HEX_OUTPUT:
> +
> + if (Gbl_HexOutputFlag == HEX_OUTPUT_ASM)
> + {
> + Prefix = "; ";
> + }
> + else if ((Gbl_HexOutputFlag == HEX_OUTPUT_C) ||
> + (Gbl_HexOutputFlag == HEX_OUTPUT_ASL))
> + {
> + FlPrintFile (ASL_FILE_HEX_OUTPUT, "/*\n");
> + Prefix = " * ";
> + }
> + break;
> +
> + case ASL_FILE_C_SOURCE_OUTPUT:
> + case ASL_FILE_C_OFFSET_OUTPUT:
> + case ASL_FILE_C_INCLUDE_OUTPUT:
> +
> + Prefix = " * ";
> + break;
> +
> + default:
> +
> + /* No other output types supported */
> +
> + break;
> + }
> +
> + /* Running compiler or disassembler? */
> +
> + if (Gbl_DisasmFlag)
> + {
> + UtilityName = AML_DISASSEMBLER_NAME;
> + }
> + else
> + {
> + UtilityName = ASL_COMPILER_NAME;
> + }
> +
> + /* Compiler signon with copyright */
> +
> + FlPrintFile (FileId, "%s\n", Prefix);
> + FlPrintFile (FileId, ACPI_COMMON_HEADER (UtilityName, Prefix));
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AslCompilerFileHeader
> + *
> + * PARAMETERS: FileId - ID of the output file
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Header used at the beginning of output files
> + *
> + ******************************************************************************/
> +
> +void
> +AslCompilerFileHeader (
> + UINT32 FileId)
> +{
> + struct tm *NewTime;
> + time_t Aclock;
> + char *Prefix = "";
> +
> +
> + /* Set line prefix depending on the destination file type */
> +
> + switch (FileId)
> + {
> + case ASL_FILE_ASM_SOURCE_OUTPUT:
> + case ASL_FILE_ASM_INCLUDE_OUTPUT:
> +
> + Prefix = "; ";
> + break;
> +
> + case ASL_FILE_HEX_OUTPUT:
> +
> + if (Gbl_HexOutputFlag == HEX_OUTPUT_ASM)
> + {
> + Prefix = "; ";
> + }
> + else if ((Gbl_HexOutputFlag == HEX_OUTPUT_C) ||
> + (Gbl_HexOutputFlag == HEX_OUTPUT_ASL))
> + {
> + Prefix = " * ";
> + }
> + break;
> +
> + case ASL_FILE_C_SOURCE_OUTPUT:
> + case ASL_FILE_C_OFFSET_OUTPUT:
> + case ASL_FILE_C_INCLUDE_OUTPUT:
> +
> + Prefix = " * ";
> + break;
> +
> + default:
> +
> + /* No other output types supported */
> +
> + break;
> + }
> +
> + /* Compilation header with timestamp */
> +
> + (void) time (&Aclock);
> + NewTime = localtime (&Aclock);
> +
> + FlPrintFile (FileId,
> + "%sCompilation of \"%s\" - %s%s\n",
> + Prefix, Gbl_Files[ASL_FILE_INPUT].Filename, asctime (NewTime),
> + Prefix);
> +
> + switch (FileId)
> + {
> + case ASL_FILE_C_SOURCE_OUTPUT:
> + case ASL_FILE_C_OFFSET_OUTPUT:
> + case ASL_FILE_C_INCLUDE_OUTPUT:
> +
> + FlPrintFile (FileId, " */\n");
> + break;
> +
> + default:
> +
> + /* Nothing to do for other output types */
> +
> + break;
> + }
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CmFlushSourceCode
> + *
> + * PARAMETERS: None
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Read in any remaining source code after the parse tree
> + * has been constructed.
> + *
> + ******************************************************************************/
> +
> +static void
> +CmFlushSourceCode (
> + void)
> +{
> + char Buffer;
> +
> +
> + while (FlReadFile (ASL_FILE_INPUT, &Buffer, 1) != AE_ERROR)
> + {
> + AslInsertLineBuffer ((int) Buffer);
> + }
> +
> + AslResetCurrentLineBuffer ();
> +}
> +
> +
> +/*******************************************************************************
> + *
> * FUNCTION: CmDoOutputFiles
> *
> * PARAMETERS: None
> @@ -1037,7 +752,8 @@ CmCleanupAndExit (
> * We will delete the AML file if there are errors and the
> * force AML output option has not been used.
> */
> - if ((Gbl_ExceptionCount[ASL_ERROR] > 0) && (!Gbl_IgnoreErrors) &&
> + if ((Gbl_ExceptionCount[ASL_ERROR] > 0) &&
> + (!Gbl_IgnoreErrors) &&
> Gbl_Files[ASL_FILE_AML_OUTPUT].Handle)
> {
> DeleteAmlFile = TRUE;
> @@ -1097,4 +813,71 @@ CmCleanupAndExit (
> {
> FlDeleteFile (ASL_FILE_SOURCE_OUTPUT);
> }
> +
> + /* Final cleanup after compiling one file */
> +
> + CmDeleteCaches ();
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: CmDeleteCaches
> + *
> + * PARAMETERS: None
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Delete all local cache buffer blocks
> + *
> + ******************************************************************************/
> +
> +void
> +CmDeleteCaches (
> + void)
> +{
> + UINT32 BufferCount;
> + ASL_CACHE_INFO *Next;
> +
> +
> + /* Parse Op cache */
> +
> + BufferCount = 0;
> + while (Gbl_ParseOpCacheList)
> + {
> + Next = Gbl_ParseOpCacheList->Next;
> + ACPI_FREE (Gbl_ParseOpCacheList);
> + Gbl_ParseOpCacheList = Next;
> + BufferCount++;
> + }
> +
> + DbgPrint (ASL_DEBUG_OUTPUT,
> + "%u ParseOps, Buffer size: %u ops (%u bytes), %u Buffers\n",
> + Gbl_ParseOpCount, ASL_PARSEOP_CACHE_SIZE,
> + (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE), BufferCount);
> +
> + Gbl_ParseOpCount = 0;
> + Gbl_ParseOpCacheNext = NULL;
> + Gbl_ParseOpCacheLast = NULL;
> + RootNode = NULL;
> +
> + /* Generic string cache */
> +
> + BufferCount = 0;
> + while (Gbl_StringCacheList)
> + {
> + Next = Gbl_StringCacheList->Next;
> + ACPI_FREE (Gbl_StringCacheList);
> + Gbl_StringCacheList = Next;
> + BufferCount++;
> + }
> +
> + DbgPrint (ASL_DEBUG_OUTPUT,
> + "%u Strings (%u bytes), Buffer size: %u bytes, %u Buffers\n",
> + Gbl_StringCount, Gbl_StringSize, ASL_STRING_CACHE_SIZE, BufferCount);
> +
> + Gbl_StringSize = 0;
> + Gbl_StringCount = 0;
> + Gbl_StringCacheNext = NULL;
> + Gbl_StringCacheLast = NULL;
> }
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index c4afef4..74b6a45 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #ifndef __ASLCOMPILER_H
> #define __ASLCOMPILER_H
>
> @@ -183,6 +182,11 @@ AslPushInputFileStack (
> FILE *InputFile,
> char *Filename);
>
> +void
> +AslParserCleanup (
> + void);
> +
> +
> /*
> * aslstartup - entered from main()
> */
> @@ -226,6 +230,14 @@ void
> CmCleanupAndExit (
> void);
>
> +void
> +CmDeleteCaches (
> + void);
> +
> +
> +/*
> + * aslascii - ascii support
> + */
> ACPI_STATUS
> FlCheckForAcpiTable (
> FILE *Handle);
> @@ -986,13 +998,17 @@ UtSetParseOpName (
> ACPI_PARSE_OBJECT *Op);
>
> char *
> -UtGetStringBuffer (
> +UtStringCacheCalloc (
> UINT32 Length);
>
> void
> UtExpandLineBuffers (
> void);
>
> +void
> +UtFreeLineBuffers (
> + void);
> +
> ACPI_STATUS
> UtInternalizeName (
> char *ExternalName,
> diff --git a/src/acpica/source/compiler/aslcompiler.l b/src/acpica/source/compiler/aslcompiler.l
> index bdcc8ed..8171f13 100644
> --- a/src/acpica/source/compiler/aslcompiler.l
> +++ b/src/acpica/source/compiler/aslcompiler.l
> @@ -185,7 +185,8 @@ NamePathTail [.]{NameSeg}
> "/*" { if (!AslDoComment ()) {yyterminate ();} }
> "//" { if (!AslDoCommentType2 ()) {yyterminate ();} }
>
> -"\"" { if (AslDoStringLiteral ()) {return (PARSEOP_STRING_LITERAL);} else {yyterminate ();} }
> +"\"" { if (AslDoStringLiteral ()) {return (PARSEOP_STRING_LITERAL);}
> + else {yyterminate ();} }
> ";" { count (0); return(';'); }
>
>
> @@ -679,7 +680,7 @@ NamePathTail [.]{NameSeg}
>
> {NameSeg} { char *s;
> count (0);
> - s=malloc (ACPI_NAME_SIZE + 1);
> + s=UtStringCacheCalloc (ACPI_NAME_SIZE + 1);
> if (strcmp (AslCompilertext, "\\"))
> {
> strcpy (s, "____");
> @@ -692,10 +693,9 @@ NamePathTail [.]{NameSeg}
>
> {NameString} { char *s;
> count (0);
> - s=malloc (strlen (AslCompilertext)+1);
> + s=UtStringCacheCalloc (strlen (AslCompilertext)+1);
> AcpiUtStrupr (AslCompilertext);
> strcpy (s, AslCompilertext);
> - s[strlen (AslCompilertext)] = 0;
> AslCompilerlval.s = s;
> DbgPrint (ASL_PARSE_OUTPUT, "NameString: %s\n", s);
> return (PARSEOP_NAMESTRING); }
> diff --git a/src/acpica/source/compiler/asldefine.h b/src/acpica/source/compiler/asldefine.h
> index b05bd7f..0332a83 100644
> --- a/src/acpica/source/compiler/asldefine.h
> +++ b/src/acpica/source/compiler/asldefine.h
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #ifndef __ASLDEFINE_H
> #define __ASLDEFINE_H
>
> @@ -133,8 +132,8 @@
> /* Configuration constants */
>
> #define ASL_MAX_ERROR_COUNT 200
> -#define ASL_NODE_CACHE_SIZE 1024
> -#define ASL_STRING_CACHE_SIZE 32768
> +#define ASL_PARSEOP_CACHE_SIZE (1024 * 16)
> +#define ASL_STRING_CACHE_SIZE (1024 * 64)
>
> #define ASL_FIRST_PARSE_OPCODE PARSEOP_ACCESSAS
> #define ASL_PARSE_OPCODE_BASE PARSEOP_ACCESSAS /* First Lex type */
> diff --git a/src/acpica/source/compiler/aslerror.c b/src/acpica/source/compiler/aslerror.c
> index c2de70a..dc8578c 100644
> --- a/src/acpica/source/compiler/aslerror.c
> +++ b/src/acpica/source/compiler/aslerror.c
> @@ -629,7 +629,7 @@ AslCommonError2 (
> {
> /* Allocate a buffer for the message and a new error node */
>
> - MessageBuffer = UtLocalCalloc (strlen (ExtraMessage) + 1);
> + MessageBuffer = UtStringCacheCalloc (strlen (ExtraMessage) + 1);
>
> /* Keep a copy of the extra message */
>
> @@ -643,7 +643,7 @@ AslCommonError2 (
>
> if (Filename)
> {
> - Enode->Filename = Filename;
> + Enode->Filename = Filename;
> Enode->FilenameLength = strlen (Filename);
> if (Enode->FilenameLength < 6)
> {
> @@ -715,7 +715,7 @@ AslCommonError (
> {
> /* Allocate a buffer for the message and a new error node */
>
> - MessageBuffer = UtLocalCalloc (strlen (ExtraMessage) + 1);
> + MessageBuffer = UtStringCacheCalloc (strlen (ExtraMessage) + 1);
>
> /* Keep a copy of the extra message */
>
> @@ -726,7 +726,7 @@ AslCommonError (
>
> if (Filename)
> {
> - Enode->Filename = Filename;
> + Enode->Filename = Filename;
> Enode->FilenameLength = strlen (Filename);
> if (Enode->FilenameLength < 6)
> {
> diff --git a/src/acpica/source/compiler/aslfileio.c b/src/acpica/source/compiler/aslfileio.c
> index ee84a12..a8c24cc 100644
> --- a/src/acpica/source/compiler/aslfileio.c
> +++ b/src/acpica/source/compiler/aslfileio.c
> @@ -391,6 +391,8 @@ FlCloseFile (
> AslAbort ();
> }
>
> + /* Do not clear/free the filename string */
> +
> Gbl_Files[FileId].Handle = NULL;
> return;
> }
> diff --git a/src/acpica/source/compiler/aslfiles.c b/src/acpica/source/compiler/aslfiles.c
> index 8a62567..4557861 100644
> --- a/src/acpica/source/compiler/aslfiles.c
> +++ b/src/acpica/source/compiler/aslfiles.c
> @@ -179,6 +179,8 @@ FlSetFilename (
> DbgPrint (ASL_PARSE_OUTPUT, "\n#line: New filename %s (old %s)\n",
> Filename, Gbl_Files[ASL_FILE_INPUT].Filename);
>
> + /* No need to free any existing filename */
> +
> Gbl_Files[ASL_FILE_INPUT].Filename = Filename;
> }
>
> @@ -288,14 +290,14 @@ FlMergePathnames (
> (*FilePathname == '/') ||
> (FilePathname[1] == ':'))
> {
> - Pathname = ACPI_ALLOCATE (strlen (FilePathname) + 1);
> + Pathname = UtStringCacheCalloc (strlen (FilePathname) + 1);
> strcpy (Pathname, FilePathname);
> goto ConvertBackslashes;
> }
>
> /* Need a local copy of the prefix directory path */
>
> - CommonPath = ACPI_ALLOCATE (strlen (PrefixDir) + 1);
> + CommonPath = UtStringCacheCalloc (strlen (PrefixDir) + 1);
> strcpy (CommonPath, PrefixDir);
>
> /*
> @@ -331,14 +333,13 @@ FlMergePathnames (
> /* Build the final merged pathname */
>
> ConcatenatePaths:
> - Pathname = ACPI_ALLOCATE_ZEROED (strlen (CommonPath) + strlen (FilePathname) + 2);
> + Pathname = UtStringCacheCalloc (strlen (CommonPath) + strlen (FilePathname) + 2);
> if (LastElement && *CommonPath)
> {
> strcpy (Pathname, CommonPath);
> strcat (Pathname, "/");
> }
> strcat (Pathname, FilePathname);
> - ACPI_FREE (CommonPath);
>
> /* Convert all backslashes to normal slashes */
>
> diff --git a/src/acpica/source/compiler/aslfold.c b/src/acpica/source/compiler/aslfold.c
> index c4cf421..51c355a 100644
> --- a/src/acpica/source/compiler/aslfold.c
> +++ b/src/acpica/source/compiler/aslfold.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "amlcode.h"
> diff --git a/src/acpica/source/compiler/aslglobal.h b/src/acpica/source/compiler/aslglobal.h
> index 53a500e..7ca898f 100644
> --- a/src/acpica/source/compiler/aslglobal.h
> +++ b/src/acpica/source/compiler/aslglobal.h
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #ifndef __ASLGLOBAL_H
> #define __ASLGLOBAL_H
>
> @@ -168,12 +167,20 @@ extern ASL_FILE_INFO Gbl_Files [ASL_NUM_FILES];
> */
> extern int yydebug;
> extern FILE *AslCompilerin;
> -extern int AslCompilerdebug;
> extern int DtParserdebug;
> extern int PrParserdebug;
> extern const ASL_MAPPING_ENTRY AslKeywordMapping[];
> extern char *AslCompilertext;
>
> +/*
> + * Older versions of Bison won't emit this external in the generated header.
> + * Newer versions do emit the external, so we don't need to do it.
> + */
> +#ifndef ASLCOMPILER_ASLCOMPILERPARSE_H
> +extern int AslCompilerdebug;
> +#endif
> +
> +
> #define ASL_DEFAULT_LINE_BUFFER_SIZE (1024 * 32) /* 32K */
> #define ASL_MSG_BUFFER_SIZE 4096
> #define ASL_MAX_DISABLED_MESSAGES 32
> @@ -273,6 +280,20 @@ ASL_EXTERN UINT32 ASL_INIT_GLOBAL (TotalAllocated, 0);
> ASL_EXTERN UINT32 ASL_INIT_GLOBAL (TotalFolds, 0);
>
>
> +/* Local caches */
> +
> +ASL_EXTERN UINT32 ASL_INIT_GLOBAL (Gbl_ParseOpCount, 0);
> +ASL_EXTERN ASL_CACHE_INFO ASL_INIT_GLOBAL (*Gbl_ParseOpCacheList, NULL);
> +ASL_EXTERN ACPI_PARSE_OBJECT ASL_INIT_GLOBAL (*Gbl_ParseOpCacheNext, NULL);
> +ASL_EXTERN ACPI_PARSE_OBJECT ASL_INIT_GLOBAL (*Gbl_ParseOpCacheLast, NULL);
> +
> +ASL_EXTERN UINT32 ASL_INIT_GLOBAL (Gbl_StringCount, 0);
> +ASL_EXTERN UINT32 ASL_INIT_GLOBAL (Gbl_StringSize, 0);
> +ASL_EXTERN ASL_CACHE_INFO ASL_INIT_GLOBAL (*Gbl_StringCacheList, NULL);
> +ASL_EXTERN char ASL_INIT_GLOBAL (*Gbl_StringCacheNext, NULL);
> +ASL_EXTERN char ASL_INIT_GLOBAL (*Gbl_StringCacheLast, NULL);
> +
> +
> /* Misc */
>
> ASL_EXTERN UINT8 ASL_INIT_GLOBAL (Gbl_RevisionOverride, 0);
> @@ -281,10 +302,6 @@ ASL_EXTERN ACPI_PARSE_OBJECT ASL_INIT_GLOBAL (*RootNode, NULL);
> ASL_EXTERN UINT32 ASL_INIT_GLOBAL (Gbl_TableLength, 0);
> ASL_EXTERN UINT32 ASL_INIT_GLOBAL (Gbl_SourceLine, 0);
> ASL_EXTERN ASL_LISTING_NODE ASL_INIT_GLOBAL (*Gbl_ListingNode, NULL);
> -ASL_EXTERN ACPI_PARSE_OBJECT ASL_INIT_GLOBAL (*Gbl_NodeCacheNext, NULL);
> -ASL_EXTERN ACPI_PARSE_OBJECT ASL_INIT_GLOBAL (*Gbl_NodeCacheLast, NULL);
> -ASL_EXTERN char ASL_INIT_GLOBAL (*Gbl_StringCacheNext, NULL);
> -ASL_EXTERN char ASL_INIT_GLOBAL (*Gbl_StringCacheLast, NULL);
> ASL_EXTERN ACPI_PARSE_OBJECT *Gbl_FirstLevelInsertionNode;
> ASL_EXTERN UINT8 ASL_INIT_GLOBAL (Gbl_FileType, 0);
> ASL_EXTERN char ASL_INIT_GLOBAL (*Gbl_Signature, NULL);
> diff --git a/src/acpica/source/compiler/aslhex.c b/src/acpica/source/compiler/aslhex.c
> index 6110f1f..1d8056b 100644
> --- a/src/acpica/source/compiler/aslhex.c
> +++ b/src/acpica/source/compiler/aslhex.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
>
> #define _COMPONENT ACPI_COMPILER
> diff --git a/src/acpica/source/compiler/asllength.c b/src/acpica/source/compiler/asllength.c
> index b49467d..0c19896 100644
> --- a/src/acpica/source/compiler/asllength.c
> +++ b/src/acpica/source/compiler/asllength.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "amlcode.h"
> diff --git a/src/acpica/source/compiler/aslload.c b/src/acpica/source/compiler/aslload.c
> index 3baea4e..7b042ec 100644
> --- a/src/acpica/source/compiler/aslload.c
> +++ b/src/acpica/source/compiler/aslload.c
> @@ -201,6 +201,7 @@ LdLoadNamespace (
> /* Dump the namespace if debug is enabled */
>
> AcpiNsDumpTables (ACPI_NS_ALL, ACPI_UINT32_MAX);
> + ACPI_FREE (WalkState);
> return (AE_OK);
> }
>
> diff --git a/src/acpica/source/compiler/asllookup.c b/src/acpica/source/compiler/asllookup.c
> index 507158e..435dec9 100644
> --- a/src/acpica/source/compiler/asllookup.c
> +++ b/src/acpica/source/compiler/asllookup.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "acparser.h"
> diff --git a/src/acpica/source/compiler/aslmain.c b/src/acpica/source/compiler/aslmain.c
> index 10f64bd..15e2f36 100644
> --- a/src/acpica/source/compiler/aslmain.c
> +++ b/src/acpica/source/compiler/aslmain.c
> @@ -399,6 +399,7 @@ main (
> ACPI_STATUS Status;
> int Index1;
> int Index2;
> + int ReturnStatus = 0;
>
>
> /*
> @@ -464,16 +465,24 @@ main (
> Status = AslDoOneFile (argv[Index2]);
> if (ACPI_FAILURE (Status))
> {
> - return (-1);
> + ReturnStatus = -1;
> + goto CleanupAndExit;
> }
>
> Index2++;
> }
>
> +
> +CleanupAndExit:
> +
> + UtFreeLineBuffers ();
> +
> + AslParserCleanup ();
> +
> if (AcpiGbl_ExternalFileList)
> {
> AcpiDmClearExternalFileList();
> }
>
> - return (0);
> + return (ReturnStatus);
> }
> diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
> index 11b5d57..879e3ab 100644
> --- a/src/acpica/source/compiler/aslmessages.c
> +++ b/src/acpica/source/compiler/aslmessages.c
> @@ -305,7 +305,9 @@ const char *AslCompilerMsgs [] =
> /* ASL_MSG_WRITE */ "Could not write file",
> /* ASL_MSG_RANGE */ "Constant out of range",
> /* ASL_MSG_BUFFER_ALLOCATION */ "Could not allocate line buffer",
> -/* ASL_MSG_MISSING_DEPENDENCY */ "Missing dependency"
> +/* 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"
> };
>
> /* Table compiler */
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 5743075..bf99a72 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -308,6 +308,8 @@ typedef enum
> ASL_MSG_RANGE,
> ASL_MSG_BUFFER_ALLOCATION,
> ASL_MSG_MISSING_DEPENDENCY,
> + ASL_MSG_ILLEGAL_FORWARD_REF,
> + ASL_MSG_ILLEGAL_METHOD_REF,
>
> /* These messages are used by the Data Table compiler only */
>
> diff --git a/src/acpica/source/compiler/aslmethod.c b/src/acpica/source/compiler/aslmethod.c
> index 58c1cc8..5dc30d7 100644
> --- a/src/acpica/source/compiler/aslmethod.c
> +++ b/src/acpica/source/compiler/aslmethod.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "acparser.h"
> @@ -180,14 +179,38 @@ MtMethodAnalysisWalkBegin (
>
> WalkInfo->MethodStack = MethodInfo;
>
> - /* Special handling for _DSD, must have a _HID also */
> + /*
> + * Special handling for _PSx methods. Dependency rules (same scope):
> + *
> + * 1) _PS0 - One of these must exist: _PS1, _PS2, _PS3
> + * 2) _PS1/_PS2/_PS3: A _PS0 must exist
> + */
> + if (ACPI_COMPARE_NAME (METHOD_NAME__PS0, Op->Asl.NameSeg))
> + {
> + /* For _PS0, one of _PS1/_PS2/_PS3 must exist */
>
> - if (!ACPI_STRCMP (METHOD_NAME__DSD, Op->Asl.NameSeg))
> + if ((!ApFindNameInScope (METHOD_NAME__PS1, Op)) &&
> + (!ApFindNameInScope (METHOD_NAME__PS2, Op)) &&
> + (!ApFindNameInScope (METHOD_NAME__PS3, Op)))
> + {
> + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> + "_PS0 requires one of _PS1/_PS2/_PS3 in same scope");
> + }
> + }
> + else if (
> + ACPI_COMPARE_NAME (METHOD_NAME__PS1, Op->Asl.NameSeg) ||
> + ACPI_COMPARE_NAME (METHOD_NAME__PS2, Op->Asl.NameSeg) ||
> + ACPI_COMPARE_NAME (METHOD_NAME__PS3, Op->Asl.NameSeg))
> {
> - if (!ApFindNameInScope (METHOD_NAME__HID, Op))
> + /* For _PS1/_PS2/_PS3, a _PS0 must exist */
> +
> + if (!ApFindNameInScope (METHOD_NAME__PS0, Op))
> {
> + sprintf (MsgBuffer,
> + "%4.4s requires _PS0 in same scope", Op->Asl.NameSeg);
> +
> AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> - "_DSD requires _HID in same scope");
> + MsgBuffer);
> }
> }
>
> @@ -442,6 +465,17 @@ MtMethodAnalysisWalkBegin (
> break;
>
> case PARSEOP_DEVICE:
> +
> + Next = Op->Asl.Child;
> +
> + if (!ApFindNameInScope (METHOD_NAME__HID, Next) &&
> + !ApFindNameInScope (METHOD_NAME__ADR, Next))
> + {
> + AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> + "Device object requires a _HID or _ADR in same scope");
> + }
> + break;
> +
> case PARSEOP_EVENT:
> case PARSEOP_MUTEX:
> case PARSEOP_OPERATIONREGION:
> @@ -496,15 +530,6 @@ MtMethodAnalysisWalkBegin (
> }
> }
>
> - else if (!ACPI_STRCMP (METHOD_NAME__DSD, Op->Asl.NameSeg))
> - {
> - if (!ApFindNameInScope (METHOD_NAME__HID, Op))
> - {
> - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> - "_DSD requires _HID in same scope");
> - }
> - }
> -
> break;
>
> default:
> diff --git a/src/acpica/source/compiler/aslnamesp.c b/src/acpica/source/compiler/aslnamesp.c
> index 9c96c00..0321dc1 100644
> --- a/src/acpica/source/compiler/aslnamesp.c
> +++ b/src/acpica/source/compiler/aslnamesp.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "acnamesp.h"
> diff --git a/src/acpica/source/compiler/aslopcodes.c b/src/acpica/source/compiler/aslopcodes.c
> index bd8ea0e..0f8d41e 100644
> --- a/src/acpica/source/compiler/aslopcodes.c
> +++ b/src/acpica/source/compiler/aslopcodes.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "amlcode.h"
> diff --git a/src/acpica/source/compiler/asloperands.c b/src/acpica/source/compiler/asloperands.c
> index a142eea..5533971 100644
> --- a/src/acpica/source/compiler/asloperands.c
> +++ b/src/acpica/source/compiler/asloperands.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "amlcode.h"
> @@ -985,8 +984,8 @@ OpnDoDefinitionBlock (
> * We will use the AML filename that is embedded in the source file
> * for the output filename.
> */
> - Filename = ACPI_ALLOCATE (strlen (Gbl_DirectoryPath) +
> - strlen ((char *) Child->Asl.Value.Buffer) + 1);
> + Filename = UtStringCacheCalloc (strlen (Gbl_DirectoryPath) +
> + strlen ((char *) Child->Asl.Value.Buffer) + 1);
>
> /* Prepend the current directory path */
>
> @@ -1041,7 +1040,7 @@ OpnDoDefinitionBlock (
> if (Child->Asl.Value.String)
> {
> Length = ACPI_STRLEN (Child->Asl.Value.String);
> - Gbl_TableId = AcpiOsAllocate (Length + 1);
> + Gbl_TableId = UtStringCacheCalloc (Length + 1);
> ACPI_STRCPY (Gbl_TableId, Child->Asl.Value.String);
>
> /*
> diff --git a/src/acpica/source/compiler/aslopt.c b/src/acpica/source/compiler/aslopt.c
> index fa2badb..3cdaeb0 100644
> --- a/src/acpica/source/compiler/aslopt.c
> +++ b/src/acpica/source/compiler/aslopt.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
>
> @@ -240,7 +239,7 @@ OptSearchToRoot (
>
> /* We must allocate a new string for the name (TargetPath gets deleted) */
>
> - *NewPath = ACPI_ALLOCATE_ZEROED (ACPI_NAME_SIZE + 1);
> + *NewPath = UtStringCacheCalloc (ACPI_NAME_SIZE + 1);
> ACPI_STRCPY (*NewPath, Path);
>
> if (ACPI_STRNCMP (*NewPath, "_T_", 3))
> diff --git a/src/acpica/source/compiler/aslresource.c b/src/acpica/source/compiler/aslresource.c
> index 427a871..37d76a1 100644
> --- a/src/acpica/source/compiler/aslresource.c
> +++ b/src/acpica/source/compiler/aslresource.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "amlcode.h"
> @@ -195,22 +194,10 @@ RsSmallAddressCheck (
> return;
> }
>
> - /* Special case for Memory24, values are compressed */
> -
> - if (Type == ACPI_RESOURCE_NAME_MEMORY24)
> - {
> - if (!Alignment) /* Alignment==0 means 64K - no invalid alignment */
> - {
> - Alignment = ACPI_UINT16_MAX + 1;
> - }
> -
> - Minimum <<= 8;
> - Maximum <<= 8;
> - Length *= 256;
> - }
> -
> - /* IO descriptor has different definition of min/max, don't check */
> -
> + /*
> + * Range checks for Memory24 and Memory32.
> + * IO descriptor has different definition of min/max, don't check.
> + */
> if (Type != ACPI_RESOURCE_NAME_IO)
> {
> /* Basic checks on Min/Max/Length */
> @@ -223,6 +210,19 @@ RsSmallAddressCheck (
> {
> AslError (ASL_ERROR, ASL_MSG_INVALID_LENGTH, LengthOp, NULL);
> }
> +
> + /* Special case for Memory24, min/max values are compressed */
> +
> + if (Type == ACPI_RESOURCE_NAME_MEMORY24)
> + {
> + if (!Alignment) /* Alignment==0 means 64K alignment */
> + {
> + Alignment = ACPI_UINT16_MAX + 1;
> + }
> +
> + Minimum <<= 8;
> + Maximum <<= 8;
> + }
> }
>
> /* Alignment of zero is not in ACPI spec, but is used to mean byte acc */
> diff --git a/src/acpica/source/compiler/aslrestype1.c b/src/acpica/source/compiler/aslrestype1.c
> index 47bc1af..8b79447 100644
> --- a/src/acpica/source/compiler/aslrestype1.c
> +++ b/src/acpica/source/compiler/aslrestype1.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
>
> diff --git a/src/acpica/source/compiler/aslrestype1i.c b/src/acpica/source/compiler/aslrestype1i.c
> index cda8aee..f778f5d 100644
> --- a/src/acpica/source/compiler/aslrestype1i.c
> +++ b/src/acpica/source/compiler/aslrestype1i.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
>
> diff --git a/src/acpica/source/compiler/aslrestype2.c b/src/acpica/source/compiler/aslrestype2.c
> index a739753..f6dced2 100644
> --- a/src/acpica/source/compiler/aslrestype2.c
> +++ b/src/acpica/source/compiler/aslrestype2.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "amlcode.h"
> diff --git a/src/acpica/source/compiler/aslrestype2d.c b/src/acpica/source/compiler/aslrestype2d.c
> index c618505..32e9826 100644
> --- a/src/acpica/source/compiler/aslrestype2d.c
> +++ b/src/acpica/source/compiler/aslrestype2d.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
>
> diff --git a/src/acpica/source/compiler/aslrestype2e.c b/src/acpica/source/compiler/aslrestype2e.c
> index 9e24f70..a47085d 100644
> --- a/src/acpica/source/compiler/aslrestype2e.c
> +++ b/src/acpica/source/compiler/aslrestype2e.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
>
> #define _COMPONENT ACPI_COMPILER
> diff --git a/src/acpica/source/compiler/aslrestype2q.c b/src/acpica/source/compiler/aslrestype2q.c
> index ea07d52..99af42d 100644
> --- a/src/acpica/source/compiler/aslrestype2q.c
> +++ b/src/acpica/source/compiler/aslrestype2q.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
>
> diff --git a/src/acpica/source/compiler/aslrestype2s.c b/src/acpica/source/compiler/aslrestype2s.c
> index ccfb5f5..cc08c47 100644
> --- a/src/acpica/source/compiler/aslrestype2s.c
> +++ b/src/acpica/source/compiler/aslrestype2s.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "amlcode.h"
> diff --git a/src/acpica/source/compiler/aslrestype2w.c b/src/acpica/source/compiler/aslrestype2w.c
> index ea040c6..08a0d0f 100644
> --- a/src/acpica/source/compiler/aslrestype2w.c
> +++ b/src/acpica/source/compiler/aslrestype2w.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
>
> diff --git a/src/acpica/source/compiler/aslstartup.c b/src/acpica/source/compiler/aslstartup.c
> index fb38e7c..46839ff 100644
> --- a/src/acpica/source/compiler/aslstartup.c
> +++ b/src/acpica/source/compiler/aslstartup.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "actables.h"
> #include "acdisasm.h"
> @@ -356,8 +355,11 @@ AslDoDisassembly (
> return (AE_CTRL_CONTINUE);
> }
>
> - ACPI_FREE (Gbl_Files[ASL_FILE_INPUT].Filename);
> + /* No need to free the filename string */
> +
> Gbl_Files[ASL_FILE_INPUT].Filename = NULL;
> +
> + CmDeleteCaches ();
> return (AE_OK);
> }
>
> @@ -397,8 +399,13 @@ AslDoOneFile (
> return (Status);
> }
>
> - Gbl_Files[ASL_FILE_INPUT].Filename = Filename;
> - UtConvertBackslashes (Filename);
> + /* Take a copy of the input filename, convert any backslashes */
> +
> + Gbl_Files[ASL_FILE_INPUT].Filename =
> + UtStringCacheCalloc (strlen (Filename) + 1);
> +
> + strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename);
> + UtConvertBackslashes (Gbl_Files[ASL_FILE_INPUT].Filename);
>
> /*
> * AML Disassembly (Optional)
> @@ -468,7 +475,6 @@ AslDoOneFile (
>
> if (Gbl_Signature)
> {
> - ACPI_FREE (Gbl_Signature);
> Gbl_Signature = NULL;
> }
>
> diff --git a/src/acpica/source/compiler/aslsupport.l b/src/acpica/source/compiler/aslsupport.l
> index 550dace..2fc591c 100644
> --- a/src/acpica/source/compiler/aslsupport.l
> +++ b/src/acpica/source/compiler/aslsupport.l
> @@ -114,7 +114,6 @@
> *
> *****************************************************************************/
>
> -
> /* Configuration */
>
> #define ASL_SPACES_PER_TAB 4
> @@ -142,6 +141,15 @@ typedef struct asl_file_node
> ASL_FILE_NODE *Gbl_IncludeFileStack = NULL;
>
>
> +void
> +AslParserCleanup (
> + void)
> +{
> +
> + yy_delete_buffer (YY_CURRENT_BUFFER);
> +}
> +
> +
> /*******************************************************************************
> *
> * FUNCTION: AslDoLineDirective
> @@ -331,7 +339,11 @@ AslPushInputFileStack (
>
> /* Reset the global line count and filename */
>
> - Gbl_Files[ASL_FILE_INPUT].Filename = Filename;
> + Gbl_Files[ASL_FILE_INPUT].Filename =
> + UtStringCacheCalloc (strlen (Filename) + 1);
> +
> + strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename);
> +
> Gbl_CurrentLineNumber = 1;
> yyin = InputFile;
> }
> @@ -869,7 +881,7 @@ CompletedString:
> */
> *StringBuffer = 0;
>
> - CleanString = UtGetStringBuffer (strlen (MsgBuffer) + 1);
> + CleanString = UtStringCacheCalloc (strlen (MsgBuffer) + 1);
> if (!CleanString)
> {
> AslCommonError (ASL_ERROR, ASL_MSG_MEMORY_ALLOCATION,
> diff --git a/src/acpica/source/compiler/asltransform.c b/src/acpica/source/compiler/asltransform.c
> index de34e6e..5ce8624 100644
> --- a/src/acpica/source/compiler/asltransform.c
> +++ b/src/acpica/source/compiler/asltransform.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
>
> @@ -449,7 +448,6 @@ TrDoDefinitionBlock (
> *
> * RETURN: None
> *
> - *
> * DESCRIPTION: Translate ASL SWITCH statement to if/else pairs. There is
> * no actual AML opcode for SWITCH -- it must be simulated.
> *
> diff --git a/src/acpica/source/compiler/asltree.c b/src/acpica/source/compiler/asltree.c
> index dabe198..6b3d444 100644
> --- a/src/acpica/source/compiler/asltree.c
> +++ b/src/acpica/source/compiler/asltree.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "acapps.h"
> @@ -151,15 +150,29 @@ static ACPI_PARSE_OBJECT *
> TrGetNextNode (
> void)
> {
> + ASL_CACHE_INFO *Cache;
> +
>
> - if (Gbl_NodeCacheNext >= Gbl_NodeCacheLast)
> + if (Gbl_ParseOpCacheNext >= Gbl_ParseOpCacheLast)
> {
> - Gbl_NodeCacheNext = UtLocalCalloc (sizeof (ACPI_PARSE_OBJECT) *
> - ASL_NODE_CACHE_SIZE);
> - Gbl_NodeCacheLast = Gbl_NodeCacheNext + ASL_NODE_CACHE_SIZE;
> + /* Allocate a new buffer */
> +
> + Cache = UtLocalCalloc (sizeof (Cache->Next) +
> + (sizeof (ACPI_PARSE_OBJECT) * ASL_PARSEOP_CACHE_SIZE));
> +
> + /* Link new cache buffer to head of list */
> +
> + Cache->Next = Gbl_ParseOpCacheList;
> + Gbl_ParseOpCacheList = Cache;
> +
> + /* Setup cache management pointers */
> +
> + Gbl_ParseOpCacheNext = ACPI_CAST_PTR (ACPI_PARSE_OBJECT, Cache->Buffer);
> + Gbl_ParseOpCacheLast = Gbl_ParseOpCacheNext + ASL_PARSEOP_CACHE_SIZE;
> }
>
> - return (Gbl_NodeCacheNext++);
> + Gbl_ParseOpCount++;
> + return (Gbl_ParseOpCacheNext++);
> }
>
>
> diff --git a/src/acpica/source/compiler/asltypes.h b/src/acpica/source/compiler/asltypes.h
> index 7e06d0b..130c648 100644
> --- a/src/acpica/source/compiler/asltypes.h
> +++ b/src/acpica/source/compiler/asltypes.h
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #ifndef __ASLTYPES_H
> #define __ASLTYPES_H
>
> @@ -247,6 +246,16 @@ typedef enum
> #define ASL_NUM_FILES (ASL_MAX_FILE_TYPE + 1)
>
>
> +/* Cache block structure for ParseOps and Strings */
> +
> +typedef struct asl_cache_info
> +{
> + void *Next;
> + char Buffer[1];
> +
> +} ASL_CACHE_INFO;
> +
> +
> typedef struct asl_include_dir
> {
> char *Dir;
> diff --git a/src/acpica/source/compiler/aslutils.c b/src/acpica/source/compiler/aslutils.c
> index 5a02470..a2ddd05 100644
> --- a/src/acpica/source/compiler/aslutils.c
> +++ b/src/acpica/source/compiler/aslutils.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "acdisasm.h"
> @@ -626,7 +625,7 @@ UtCheckIntegerRange (
>
> /*******************************************************************************
> *
> - * FUNCTION: UtGetStringBuffer
> + * FUNCTION: UtStringCacheCalloc
> *
> * PARAMETERS: Length - Size of buffer requested
> *
> @@ -639,22 +638,42 @@ UtCheckIntegerRange (
> ******************************************************************************/
>
> char *
> -UtGetStringBuffer (
> +UtStringCacheCalloc (
> UINT32 Length)
> {
> char *Buffer;
> + ASL_CACHE_INFO *Cache;
> +
>
> + if (Length > ASL_STRING_CACHE_SIZE)
> + {
> + Buffer = UtLocalCalloc (Length);
> + return (Buffer);
> + }
>
> if ((Gbl_StringCacheNext + Length) >= Gbl_StringCacheLast)
> {
> - Gbl_StringCacheNext = UtLocalCalloc (ASL_STRING_CACHE_SIZE + Length);
> - Gbl_StringCacheLast = Gbl_StringCacheNext + ASL_STRING_CACHE_SIZE +
> - Length;
> + /* Allocate a new buffer */
> +
> + Cache = UtLocalCalloc (sizeof (Cache->Next) +
> + ASL_STRING_CACHE_SIZE);
> +
> + /* Link new cache buffer to head of list */
> +
> + Cache->Next = Gbl_StringCacheList;
> + Gbl_StringCacheList = Cache;
> +
> + /* Setup cache management pointers */
> +
> + Gbl_StringCacheNext = Cache->Buffer;
> + Gbl_StringCacheLast = Gbl_StringCacheNext + ASL_STRING_CACHE_SIZE;
> }
>
> + Gbl_StringCount++;
> + Gbl_StringSize += Length;
> +
> Buffer = Gbl_StringCacheNext;
> Gbl_StringCacheNext += Length;
> -
> return (Buffer);
> }
>
> @@ -687,7 +706,8 @@ UtExpandLineBuffers (
> NewSize = Gbl_LineBufferSize * 2;
> if (Gbl_CurrentLineBuffer)
> {
> - DbgPrint (ASL_DEBUG_OUTPUT,"Increasing line buffer size from %u to %u\n",
> + DbgPrint (ASL_DEBUG_OUTPUT,
> + "Increasing line buffer size from %u to %u\n",
> Gbl_LineBufferSize, NewSize);
> }
>
> @@ -732,6 +752,30 @@ ErrorExit:
> }
>
>
> +/******************************************************************************
> + *
> + * FUNCTION: UtFreeLineBuffers
> + *
> + * PARAMETERS: None
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Free all line buffers
> + *
> + *****************************************************************************/
> +
> +void
> +UtFreeLineBuffers (
> + void)
> +{
> +
> + free (Gbl_CurrentLineBuffer);
> + free (Gbl_MainTokenBuffer);
> + free (Gbl_MacroTokenBuffer);
> + free (Gbl_ExpressionTokenBuffer);
> +}
> +
> +
> /*******************************************************************************
> *
> * FUNCTION: UtInternalizeName
> @@ -764,9 +808,9 @@ UtInternalizeName (
> Info.ExternalName = ExternalName;
> AcpiNsGetInternalNameLength (&Info);
>
> - /* We need a segment to store the internal name */
> + /* We need a segment to store the internal name */
>
> - Info.InternalName = UtGetStringBuffer (Info.Length);
> + Info.InternalName = UtStringCacheCalloc (Info.Length);
> if (!Info.InternalName)
> {
> return (AE_NO_MEMORY);
> diff --git a/src/acpica/source/compiler/aslwalks.c b/src/acpica/source/compiler/aslwalks.c
> index 545d809..835769b 100644
> --- a/src/acpica/source/compiler/aslwalks.c
> +++ b/src/acpica/source/compiler/aslwalks.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "acparser.h"
> diff --git a/src/acpica/source/compiler/aslxref.c b/src/acpica/source/compiler/aslxref.c
> index 39978bb..bb0b394 100644
> --- a/src/acpica/source/compiler/aslxref.c
> +++ b/src/acpica/source/compiler/aslxref.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "aslcompiler.h"
> #include "aslcompiler.y.h"
> #include "acparser.h"
> @@ -158,6 +157,20 @@ XfCheckFieldRange (
> UINT32 FieldBitLength,
> UINT32 AccessBitWidth);
>
> +static BOOLEAN
> +XfIsObjectParental (
> + ACPI_PARSE_OBJECT *MethodOp1,
> + ACPI_PARSE_OBJECT *MethodOp2);
> +
> +static ACPI_PARSE_OBJECT *
> +XfGetParentMethod (
> + ACPI_PARSE_OBJECT *Op);
> +
> +static void
> +XfCheckIllegalReference (
> + ACPI_PARSE_OBJECT *Op,
> + ACPI_NAMESPACE_NODE *Node);
> +
>
> /*******************************************************************************
> *
> @@ -202,6 +215,8 @@ XfCrossReferenceNamespace (
>
> TrWalkParseTree (RootNode, ASL_WALK_VISIT_TWICE, XfNamespaceLocateBegin,
> XfNamespaceLocateEnd, WalkState);
> +
> + ACPI_FREE (WalkState);
> return (AE_OK);
> }
>
> @@ -334,6 +349,178 @@ XfCheckFieldRange (
> }
> }
>
> +
> +/*******************************************************************************
> + *
> + * 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);
> + }
> +}
> +
> +
> /*******************************************************************************
> *
> * FUNCTION: XfNamespaceLocateBegin
> @@ -543,6 +730,10 @@ XfNamespaceLocateBegin (
> /* This node has been referenced, mark it for reference check */
>
> Node->Flags |= ANOBJ_IS_REFERENCED;
> +
> + /* Check for an illegal reference */
> +
> + XfCheckIllegalReference (Op, Node);
> }
>
> /* Attempt to optimize the NamePath */
> diff --git a/src/acpica/source/compiler/dtcompile.c b/src/acpica/source/compiler/dtcompile.c
> index 1c7580f..c33564a 100644
> --- a/src/acpica/source/compiler/dtcompile.c
> +++ b/src/acpica/source/compiler/dtcompile.c
> @@ -213,8 +213,6 @@ DtDoCompile (
> Status = DtCompileDataTable (&FieldList);
> UtEndEvent (Event);
>
> - DtFreeFieldList ();
> -
> if (ACPI_FAILURE (Status))
> {
> /* TBD: temporary error message. Msgs should come from function above */
> @@ -242,6 +240,8 @@ DtDoCompile (
>
> CleanupAndExit:
>
> + AcpiUtDeleteCaches ();
> + DtDeleteCaches ();
> CmCleanupAndExit ();
> return (Status);
> }
> @@ -370,7 +370,7 @@ DtCompileDataTable (
> return (AE_ERROR);
> }
>
> - Gbl_Signature = UtLocalCalloc (ACPI_STRLEN (Signature) + 1);
> + Gbl_Signature = UtStringCacheCalloc (ACPI_STRLEN (Signature) + 1);
> strcpy (Gbl_Signature, Signature);
>
> /*
> @@ -533,11 +533,11 @@ DtCompileTable (
> return (AE_ERROR);
> }
>
> - Subtable = UtLocalCalloc (sizeof (DT_SUBTABLE));
> + Subtable = UtSubtableCacheCalloc ();
>
> if (Length > 0)
> {
> - Subtable->Buffer = UtLocalCalloc (Length);
> + Subtable->Buffer = ACPI_CAST_PTR (UINT8, UtStringCacheCalloc (Length));
> }
> Subtable->Length = Length;
> Subtable->TotalLength = Length;
> @@ -639,8 +639,6 @@ DtCompileTable (
> DtSetSubtableLength (InlineSubtable);
>
> ACPI_MEMCPY (Buffer, InlineSubtable->Buffer, FieldLength);
> - ACPI_FREE (InlineSubtable->Buffer);
> - ACPI_FREE (InlineSubtable);
> LocalField = *Field;
> break;
>
> diff --git a/src/acpica/source/compiler/dtcompiler.h b/src/acpica/source/compiler/dtcompiler.h
> index 1fb1f12..2eda236 100644
> --- a/src/acpica/source/compiler/dtcompiler.h
> +++ b/src/acpica/source/compiler/dtcompiler.h
> @@ -122,6 +122,10 @@
> #include "acdisasm.h"
>
>
> +#define ASL_FIELD_CACHE_SIZE 512
> +#define ASL_SUBTABLE_CACHE_SIZE 128
> +
> +
> #undef DT_EXTERN
>
> #ifdef _DECLARE_DT_GLOBALS
> @@ -215,6 +219,18 @@ DT_EXTERN DT_FIELD DT_INIT_GLOBAL (*Gbl_LabelList, NULL);
>
> DT_EXTERN UINT32 DT_INIT_GLOBAL (Gbl_CurrentTableOffset, 0);
>
> +/* Local caches */
> +
> +DT_EXTERN UINT32 DT_INIT_GLOBAL (Gbl_SubtableCount, 0);
> +DT_EXTERN ASL_CACHE_INFO DT_INIT_GLOBAL (*Gbl_SubtableCacheList, NULL);
> +DT_EXTERN DT_SUBTABLE DT_INIT_GLOBAL (*Gbl_SubtableCacheNext, NULL);
> +DT_EXTERN DT_SUBTABLE DT_INIT_GLOBAL (*Gbl_SubtableCacheLast, NULL);
> +
> +DT_EXTERN UINT32 DT_INIT_GLOBAL (Gbl_FieldCount, 0);
> +DT_EXTERN ASL_CACHE_INFO DT_INIT_GLOBAL (*Gbl_FieldCacheList, NULL);
> +DT_EXTERN DT_FIELD DT_INIT_GLOBAL (*Gbl_FieldCacheNext, NULL);
> +DT_EXTERN DT_FIELD DT_INIT_GLOBAL (*Gbl_FieldCacheLast, NULL);
> +
>
> /* dtcompiler - main module */
>
> @@ -440,8 +456,16 @@ void
> DtSetTableLength(
> void);
>
> +DT_SUBTABLE *
> +UtSubtableCacheCalloc (
> + void);
> +
> +DT_FIELD *
> +UtFieldCacheCalloc (
> + void);
> +
> void
> -DtFreeFieldList (
> +DtDeleteCaches (
> void);
>
>
> diff --git a/src/acpica/source/compiler/dtio.c b/src/acpica/source/compiler/dtio.c
> index 1465cc0..7c93afe 100644
> --- a/src/acpica/source/compiler/dtio.c
> +++ b/src/acpica/source/compiler/dtio.c
> @@ -205,7 +205,7 @@ DtTrim (
>
> if (!ACPI_STRCMP (String, " "))
> {
> - ReturnString = UtLocalCalloc (1);
> + ReturnString = UtStringCacheCalloc (1);
> return (ReturnString);
> }
>
> @@ -253,7 +253,7 @@ DtTrim (
> /* Create the trimmed return string */
>
> Length = ACPI_PTR_DIFF (End, Start) + 1;
> - ReturnString = UtLocalCalloc (Length + 1);
> + ReturnString = UtStringCacheCalloc (Length + 1);
> if (ACPI_STRLEN (Start))
> {
> ACPI_STRNCPY (ReturnString, Start, Length);
> @@ -442,7 +442,7 @@ DtParseLine (
>
> if ((Value && *Value) || IsNullString)
> {
> - Field = UtLocalCalloc (sizeof (DT_FIELD));
> + Field = UtFieldCacheCalloc ();
> Field->Name = Name;
> Field->Value = Value;
> Field->Line = Line;
> @@ -452,11 +452,7 @@ DtParseLine (
>
> DtLinkField (Field);
> }
> - else /* Ignore this field, it has no valid data */
> - {
> - ACPI_FREE (Name);
> - ACPI_FREE (Value);
> - }
> + /* Else -- Ignore this field, it has no valid data */
>
> return (AE_OK);
> }
> @@ -1107,6 +1103,8 @@ DtDumpSubtableList (
> DbgPrint (ASL_DEBUG_OUTPUT,
> "\nSubtable Tree: (Depth, Subtable, Length, TotalLength)\n\n");
> DtWalkTableTree (Gbl_RootTable, DtDumpSubtableTree, NULL, NULL);
> +
> + DbgPrint (ASL_DEBUG_OUTPUT, "\n");
> }
>
>
> diff --git a/src/acpica/source/compiler/dtsubtable.c b/src/acpica/source/compiler/dtsubtable.c
> index 3892fdc..e9f530b 100644
> --- a/src/acpica/source/compiler/dtsubtable.c
> +++ b/src/acpica/source/compiler/dtsubtable.c
> @@ -147,11 +147,11 @@ DtCreateSubtable (
> DT_SUBTABLE *Subtable;
>
>
> - Subtable = UtLocalCalloc (sizeof (DT_SUBTABLE));
> + Subtable = UtSubtableCacheCalloc ();
>
> /* Create a new buffer for the subtable data */
>
> - Subtable->Buffer = UtLocalCalloc (Length);
> + Subtable->Buffer = ACPI_CAST_PTR (UINT8, UtStringCacheCalloc (Length));
> ACPI_MEMCPY (Subtable->Buffer, Buffer, Length);
>
> Subtable->Length = Length;
> diff --git a/src/acpica/source/compiler/dttable.c b/src/acpica/source/compiler/dttable.c
> index db95850..2b86c0e 100644
> --- a/src/acpica/source/compiler/dttable.c
> +++ b/src/acpica/source/compiler/dttable.c
> @@ -2492,6 +2492,11 @@ DtCompileSrat (
> InfoTable = AcpiDmTableInfoSrat2;
> break;
>
> + case ACPI_SRAT_TYPE_GICC_AFFINITY:
> +
> + InfoTable = AcpiDmTableInfoSrat3;
> + break;
> +
> default:
>
> DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "SRAT");
> diff --git a/src/acpica/source/compiler/dttemplate.c b/src/acpica/source/compiler/dttemplate.c
> index e3c3c0c..f677f83 100644
> --- a/src/acpica/source/compiler/dttemplate.c
> +++ b/src/acpica/source/compiler/dttemplate.c
> @@ -259,6 +259,12 @@ GetTemplate:
> }
>
> Status = DtCreateOneTemplate (Signature, TableData);
> +
> +
> + /* Shutdown ACPICA subsystem */
> +
> + (void) AcpiTerminate ();
> + CmDeleteCaches ();
> return (Status);
> }
>
> @@ -469,6 +475,5 @@ DtCreateOneTemplate (
> Cleanup:
> fclose (File);
> AcpiOsRedirectOutput (stdout);
> - ACPI_FREE (DisasmFilename);
> return (Status);
> }
> diff --git a/src/acpica/source/compiler/dttemplate.h b/src/acpica/source/compiler/dttemplate.h
> index eefae69..1dfd5cb 100644
> --- a/src/acpica/source/compiler/dttemplate.h
> +++ b/src/acpica/source/compiler/dttemplate.h
> @@ -1033,11 +1033,11 @@ const unsigned char TemplateSpmi[] =
>
> const unsigned char TemplateSrat[] =
> {
> - 0x53,0x52,0x41,0x54,0x80,0x00,0x00,0x00, /* 00000000 "SRAT...." */
> - 0x03,0x5A,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".ZINTEL " */
> - 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */
> + 0x53,0x52,0x41,0x54,0x92,0x00,0x00,0x00, /* 00000000 "SRAT...." */
> + 0x03,0x50,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".PINTEL " */
> + 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */
> 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
> - 0x28,0x05,0x10,0x20,0x01,0x00,0x00,0x00, /* 00000020 "(.. ...." */
> + 0x24,0x07,0x14,0x20,0x01,0x00,0x00,0x00, /* 00000020 "$.. ...." */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */
> 0x00,0x10,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */
> @@ -1048,7 +1048,10 @@ const unsigned char TemplateSrat[] =
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */
> 0x02,0x18,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000068 "........" */
> 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000070 "........" */
> - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /* 00000078 "........" */
> + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */
> + 0x03,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */
> + 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */
> + 0x00,0x00 /* 00000090 ".." */
> };
>
> const unsigned char TemplateTcpa[] =
> diff --git a/src/acpica/source/compiler/dtutils.c b/src/acpica/source/compiler/dtutils.c
> index 51d50c7..2eac7fa 100644
> --- a/src/acpica/source/compiler/dtutils.c
> +++ b/src/acpica/source/compiler/dtutils.c
> @@ -917,39 +917,151 @@ DtWalkTableTree (
> }
>
>
> -/******************************************************************************
> +/*******************************************************************************
> + *
> + * FUNCTION: UtSubtableCacheCalloc
> + *
> + * PARAMETERS: None
> + *
> + * RETURN: Pointer to the buffer. Aborts on allocation failure
> + *
> + * DESCRIPTION: Allocate a subtable object buffer. Bypass the local
> + * dynamic memory manager for performance reasons (This has a
> + * major impact on the speed of the compiler.)
> + *
> + ******************************************************************************/
> +
> +DT_SUBTABLE *
> +UtSubtableCacheCalloc (
> + void)
> +{
> + ASL_CACHE_INFO *Cache;
> +
> +
> + if (Gbl_SubtableCacheNext >= Gbl_SubtableCacheLast)
> + {
> + /* Allocate a new buffer */
> +
> + Cache = UtLocalCalloc (sizeof (Cache->Next) +
> + (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE));
> +
> + /* Link new cache buffer to head of list */
> +
> + Cache->Next = Gbl_SubtableCacheList;
> + Gbl_SubtableCacheList = Cache;
> +
> + /* Setup cache management pointers */
> +
> + Gbl_SubtableCacheNext = ACPI_CAST_PTR (DT_SUBTABLE, Cache->Buffer);
> + Gbl_SubtableCacheLast = Gbl_SubtableCacheNext + ASL_SUBTABLE_CACHE_SIZE;
> + }
> +
> + Gbl_SubtableCount++;
> + return (Gbl_SubtableCacheNext++);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: UtFieldCacheCalloc
> + *
> + * PARAMETERS: None
> + *
> + * RETURN: Pointer to the buffer. Aborts on allocation failure
> *
> - * FUNCTION: DtFreeFieldList
> + * DESCRIPTION: Allocate a field object buffer. Bypass the local
> + * dynamic memory manager for performance reasons (This has a
> + * major impact on the speed of the compiler.)
> + *
> + ******************************************************************************/
> +
> +DT_FIELD *
> +UtFieldCacheCalloc (
> + void)
> +{
> + ASL_CACHE_INFO *Cache;
> +
> +
> + if (Gbl_FieldCacheNext >= Gbl_FieldCacheLast)
> + {
> + /* Allocate a new buffer */
> +
> + Cache = UtLocalCalloc (sizeof (Cache->Next) +
> + (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE));
> +
> + /* Link new cache buffer to head of list */
> +
> + Cache->Next = Gbl_FieldCacheList;
> + Gbl_FieldCacheList = Cache;
> +
> + /* Setup cache management pointers */
> +
> + Gbl_FieldCacheNext = ACPI_CAST_PTR (DT_FIELD, Cache->Buffer);
> + Gbl_FieldCacheLast = Gbl_FieldCacheNext + ASL_FIELD_CACHE_SIZE;
> + }
> +
> + Gbl_FieldCount++;
> + return (Gbl_FieldCacheNext++);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: DtDeleteCaches
> *
> * PARAMETERS: None
> *
> * RETURN: None
> *
> - * DESCRIPTION: Free the field list
> + * DESCRIPTION: Delete all local cache buffer blocks
> *
> - *****************************************************************************/
> + ******************************************************************************/
>
> void
> -DtFreeFieldList (
> +DtDeleteCaches (
> void)
> {
> - DT_FIELD *Field = Gbl_FieldList;
> - DT_FIELD *NextField;
> + UINT32 BufferCount;
> + ASL_CACHE_INFO *Next;
>
>
> - /* Walk and free entire field list */
> + /* Field cache */
>
> - while (Field)
> + BufferCount = 0;
> + while (Gbl_FieldCacheList)
> {
> - NextField = Field->Next; /* Save link */
> + Next = Gbl_FieldCacheList->Next;
> + ACPI_FREE (Gbl_FieldCacheList);
> + Gbl_FieldCacheList = Next;
> + BufferCount++;
> + }
>
> - if (!(Field->Flags & DT_FIELD_NOT_ALLOCATED))
> - {
> - ACPI_FREE (Field->Name);
> - ACPI_FREE (Field->Value);
> - }
> + DbgPrint (ASL_DEBUG_OUTPUT,
> + "%u Fields, Buffer size: %u fields (%u bytes), %u Buffers\n",
> + Gbl_FieldCount, ASL_FIELD_CACHE_SIZE,
> + (sizeof (DT_FIELD) * ASL_FIELD_CACHE_SIZE), BufferCount);
> +
> + Gbl_FieldCount = 0;
> + Gbl_FieldCacheNext = NULL;
> + Gbl_FieldCacheLast = NULL;
> +
> + /* Subtable cache */
>
> - ACPI_FREE (Field);
> - Field = NextField;
> + BufferCount = 0;
> + while (Gbl_SubtableCacheList)
> + {
> + Next = Gbl_SubtableCacheList->Next;
> + ACPI_FREE (Gbl_SubtableCacheList);
> + Gbl_SubtableCacheList = Next;
> + BufferCount++;
> }
> +
> + DbgPrint (ASL_DEBUG_OUTPUT,
> + "%u Subtables, Buffer size: %u subtables (%u bytes), %u Buffers\n",
> + Gbl_SubtableCount, ASL_SUBTABLE_CACHE_SIZE,
> + (sizeof (DT_SUBTABLE) * ASL_SUBTABLE_CACHE_SIZE), BufferCount);
> +
> + Gbl_SubtableCount = 0;
> + Gbl_SubtableCacheNext = NULL;
> + Gbl_SubtableCacheLast = NULL;
> }
> diff --git a/src/acpica/source/compiler/prutils.c b/src/acpica/source/compiler/prutils.c
> index 198bbfc..a2b5906 100644
> --- a/src/acpica/source/compiler/prutils.c
> +++ b/src/acpica/source/compiler/prutils.c
> @@ -412,7 +412,6 @@ PrOpenIncludeWithPrefix (
> if (!IncludeFile)
> {
> fprintf (stderr, "Could not open include file %s\n", Pathname);
> - ACPI_FREE (Pathname);
> return (NULL);
> }
>
> @@ -465,15 +464,17 @@ PrPushInputFileStack (
>
> /* Reset the global line count and filename */
>
> - Gbl_Files[ASL_FILE_INPUT].Filename = Filename;
> + Gbl_Files[ASL_FILE_INPUT].Filename =
> + UtStringCacheCalloc (strlen (Filename) + 1);
> + strcpy (Gbl_Files[ASL_FILE_INPUT].Filename, Filename);
> +
> Gbl_Files[ASL_FILE_INPUT].Handle = InputFile;
> Gbl_PreviousLineNumber = 0;
> Gbl_CurrentLineNumber = 0;
>
> /* Emit a new #line directive for the include file */
>
> - FlPrintFile (ASL_FILE_PREPROCESSOR, "#line %u \"%s\"\n",
> - 1, Filename);
> + FlPrintFile (ASL_FILE_PREPROCESSOR, "#line %u \"%s\"\n", 1, Filename);
> }
>
>
> diff --git a/src/acpica/source/components/debugger/dbcmds.c b/src/acpica/source/components/debugger/dbcmds.c
> index 6d70e03..0d39139 100644
> --- a/src/acpica/source/components/debugger/dbcmds.c
> +++ b/src/acpica/source/components/debugger/dbcmds.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acevents.h"
> diff --git a/src/acpica/source/components/debugger/dbconvert.c b/src/acpica/source/components/debugger/dbconvert.c
> index 172f36a..cb882a3 100644
> --- a/src/acpica/source/components/debugger/dbconvert.c
> +++ b/src/acpica/source/components/debugger/dbconvert.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acdebug.h"
> diff --git a/src/acpica/source/components/debugger/dbdisply.c b/src/acpica/source/components/debugger/dbdisply.c
> index 77c5409..7991f0a 100644
> --- a/src/acpica/source/components/debugger/dbdisply.c
> +++ b/src/acpica/source/components/debugger/dbdisply.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "amlcode.h"
> diff --git a/src/acpica/source/components/debugger/dbexec.c b/src/acpica/source/components/debugger/dbexec.c
> index a7a791d..253b25a 100644
> --- a/src/acpica/source/components/debugger/dbexec.c
> +++ b/src/acpica/source/components/debugger/dbexec.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acdebug.h"
> diff --git a/src/acpica/source/components/debugger/dbfileio.c b/src/acpica/source/components/debugger/dbfileio.c
> index 3581d83..4521ee6 100644
> --- a/src/acpica/source/components/debugger/dbfileio.c
> +++ b/src/acpica/source/components/debugger/dbfileio.c
> @@ -114,7 +114,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acdebug.h"
> diff --git a/src/acpica/source/components/debugger/dbhistry.c b/src/acpica/source/components/debugger/dbhistry.c
> index c74519b..18de938 100644
> --- a/src/acpica/source/components/debugger/dbhistry.c
> +++ b/src/acpica/source/components/debugger/dbhistry.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acdebug.h"
> diff --git a/src/acpica/source/components/debugger/dbinput.c b/src/acpica/source/components/debugger/dbinput.c
> index c84bf8a..a85f5ff 100644
> --- a/src/acpica/source/components/debugger/dbinput.c
> +++ b/src/acpica/source/components/debugger/dbinput.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acdebug.h"
> diff --git a/src/acpica/source/components/debugger/dbmethod.c b/src/acpica/source/components/debugger/dbmethod.c
> index 39a9fa7..67aa9c8 100644
> --- a/src/acpica/source/components/debugger/dbmethod.c
> +++ b/src/acpica/source/components/debugger/dbmethod.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acdispat.h"
> diff --git a/src/acpica/source/components/debugger/dbnames.c b/src/acpica/source/components/debugger/dbnames.c
> index 621ae61..6cbe840 100644
> --- a/src/acpica/source/components/debugger/dbnames.c
> +++ b/src/acpica/source/components/debugger/dbnames.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acnamesp.h"
> diff --git a/src/acpica/source/components/debugger/dbstats.c b/src/acpica/source/components/debugger/dbstats.c
> index 9594b3d..70224fa 100644
> --- a/src/acpica/source/components/debugger/dbstats.c
> +++ b/src/acpica/source/components/debugger/dbstats.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acdebug.h"
> diff --git a/src/acpica/source/components/debugger/dbtest.c b/src/acpica/source/components/debugger/dbtest.c
> old mode 100755
> new mode 100644
> diff --git a/src/acpica/source/components/debugger/dbutils.c b/src/acpica/source/components/debugger/dbutils.c
> index 9bcc675..fa47bd8 100644
> --- a/src/acpica/source/components/debugger/dbutils.c
> +++ b/src/acpica/source/components/debugger/dbutils.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acnamesp.h"
> diff --git a/src/acpica/source/components/debugger/dbxface.c b/src/acpica/source/components/debugger/dbxface.c
> index ed821c4..d4cc9e0 100644
> --- a/src/acpica/source/components/debugger/dbxface.c
> +++ b/src/acpica/source/components/debugger/dbxface.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "amlcode.h"
> diff --git a/src/acpica/source/components/disassembler/dmdeferred.c b/src/acpica/source/components/disassembler/dmdeferred.c
> index 148de63..c3fb456 100644
> --- a/src/acpica/source/components/disassembler/dmdeferred.c
> +++ b/src/acpica/source/components/disassembler/dmdeferred.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acdispat.h"
> diff --git a/src/acpica/source/components/disassembler/dmnames.c b/src/acpica/source/components/disassembler/dmnames.c
> index f88e35e..cb4c63b 100644
> --- a/src/acpica/source/components/disassembler/dmnames.c
> +++ b/src/acpica/source/components/disassembler/dmnames.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "amlcode.h"
> diff --git a/src/acpica/source/components/disassembler/dmobject.c b/src/acpica/source/components/disassembler/dmobject.c
> index 4194939..0a01264 100644
> --- a/src/acpica/source/components/disassembler/dmobject.c
> +++ b/src/acpica/source/components/disassembler/dmobject.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acnamesp.h"
> diff --git a/src/acpica/source/components/disassembler/dmresrc.c b/src/acpica/source/components/disassembler/dmresrc.c
> index 610ead7..8c0198a 100644
> --- a/src/acpica/source/components/disassembler/dmresrc.c
> +++ b/src/acpica/source/components/disassembler/dmresrc.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "amlcode.h"
> diff --git a/src/acpica/source/components/disassembler/dmresrcl.c b/src/acpica/source/components/disassembler/dmresrcl.c
> index 64c10bf..8db712e 100644
> --- a/src/acpica/source/components/disassembler/dmresrcl.c
> +++ b/src/acpica/source/components/disassembler/dmresrcl.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acdisasm.h"
> diff --git a/src/acpica/source/components/disassembler/dmresrcl2.c b/src/acpica/source/components/disassembler/dmresrcl2.c
> index 50e60fd..d4f7fe7 100644
> --- a/src/acpica/source/components/disassembler/dmresrcl2.c
> +++ b/src/acpica/source/components/disassembler/dmresrcl2.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acdisasm.h"
> @@ -346,7 +345,7 @@ AcpiDmGpioIntDescriptor (
> AcpiDmIndent (Level);
> AcpiOsPrintf ("GpioInt (%s, %s, %s, ",
> AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Gpio.IntFlags)],
> - AcpiGbl_LlDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Gpio.IntFlags, 1)],
> + AcpiGbl_LlDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 1)],
> AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Gpio.IntFlags, 3)]);
>
> /* PinConfig, DebounceTimeout */
> diff --git a/src/acpica/source/components/disassembler/dmresrcs.c b/src/acpica/source/components/disassembler/dmresrcs.c
> index e29b9ee..6ec784f 100644
> --- a/src/acpica/source/components/disassembler/dmresrcs.c
> +++ b/src/acpica/source/components/disassembler/dmresrcs.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acdisasm.h"
> diff --git a/src/acpica/source/components/disassembler/dmutils.c b/src/acpica/source/components/disassembler/dmutils.c
> index 26141ea..8464665 100644
> --- a/src/acpica/source/components/disassembler/dmutils.c
> +++ b/src/acpica/source/components/disassembler/dmutils.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "amlcode.h"
> diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c
> index 1f63e08..8ebdde8 100644
> --- a/src/acpica/source/components/disassembler/dmwalk.c
> +++ b/src/acpica/source/components/disassembler/dmwalk.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acparser.h"
> diff --git a/src/acpica/source/components/dispatcher/dswstate.c b/src/acpica/source/components/dispatcher/dswstate.c
> index e76d4ce..9c2f2ec 100644
> --- a/src/acpica/source/components/dispatcher/dswstate.c
> +++ b/src/acpica/source/components/dispatcher/dswstate.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __DSWSTATE_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/events/evgpeinit.c b/src/acpica/source/components/events/evgpeinit.c
> index 2e2e6b3..f512a38 100644
> --- a/src/acpica/source/components/events/evgpeinit.c
> +++ b/src/acpica/source/components/events/evgpeinit.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acevents.h"
> diff --git a/src/acpica/source/components/events/evhandler.c b/src/acpica/source/components/events/evhandler.c
> index d17411e..7df392b 100644
> --- a/src/acpica/source/components/events/evhandler.c
> +++ b/src/acpica/source/components/events/evhandler.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __EVHANDLER_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/events/evregion.c b/src/acpica/source/components/events/evregion.c
> index 8f1b24b..886f7ae 100644
> --- a/src/acpica/source/components/events/evregion.c
> +++ b/src/acpica/source/components/events/evregion.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __EVREGION_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/events/evrgnini.c b/src/acpica/source/components/events/evrgnini.c
> index ac321c7..b35ddbc 100644
> --- a/src/acpica/source/components/events/evrgnini.c
> +++ b/src/acpica/source/components/events/evrgnini.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __EVRGNINI_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/events/evxface.c b/src/acpica/source/components/events/evxface.c
> index 85355a5..6fdc72e 100644
> --- a/src/acpica/source/components/events/evxface.c
> +++ b/src/acpica/source/components/events/evxface.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __EVXFACE_C__
> #define EXPORT_ACPI_INTERFACES
>
> diff --git a/src/acpica/source/components/events/evxfevnt.c b/src/acpica/source/components/events/evxfevnt.c
> index c099bdb..bf6bed8 100644
> --- a/src/acpica/source/components/events/evxfevnt.c
> +++ b/src/acpica/source/components/events/evxfevnt.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __EVXFEVNT_C__
> #define EXPORT_ACPI_INTERFACES
>
> diff --git a/src/acpica/source/components/events/evxfgpe.c b/src/acpica/source/components/events/evxfgpe.c
> index b116322..98a797d 100644
> --- a/src/acpica/source/components/events/evxfgpe.c
> +++ b/src/acpica/source/components/events/evxfgpe.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __EVXFGPE_C__
> #define EXPORT_ACPI_INTERFACES
>
> diff --git a/src/acpica/source/components/executer/exconvrt.c b/src/acpica/source/components/executer/exconvrt.c
> index 2b2fffd..f674893 100644
> --- a/src/acpica/source/components/executer/exconvrt.c
> +++ b/src/acpica/source/components/executer/exconvrt.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __EXCONVRT_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/executer/exdebug.c b/src/acpica/source/components/executer/exdebug.c
> index b7d47fd..45fca31 100644
> --- a/src/acpica/source/components/executer/exdebug.c
> +++ b/src/acpica/source/components/executer/exdebug.c
> @@ -173,7 +173,7 @@ AcpiExDoDebugObject (
> * debug output. Only need the lower 26 bits. This allows for 67
> * million microseconds or 67 seconds before rollover.
> */
> - Timer = (UINT32) (AcpiOsGetTimer () / 10); /* (100 nanoseconds to microseconds) */
> + Timer = ((UINT32) AcpiOsGetTimer () / 10); /* (100 nanoseconds to microseconds) */
> Timer &= 0x03FFFFFF;
>
> /*
> diff --git a/src/acpica/source/components/executer/exfield.c b/src/acpica/source/components/executer/exfield.c
> index 55934de..1263ed7 100644
> --- a/src/acpica/source/components/executer/exfield.c
> +++ b/src/acpica/source/components/executer/exfield.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __EXFIELD_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/executer/exfldio.c b/src/acpica/source/components/executer/exfldio.c
> index 51a1e6d..6db8f05 100644
> --- a/src/acpica/source/components/executer/exfldio.c
> +++ b/src/acpica/source/components/executer/exfldio.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __EXFLDIO_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/executer/exoparg2.c b/src/acpica/source/components/executer/exoparg2.c
> index 3a65485..84c44f4 100644
> --- a/src/acpica/source/components/executer/exoparg2.c
> +++ b/src/acpica/source/components/executer/exoparg2.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __EXOPARG2_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/executer/exregion.c b/src/acpica/source/components/executer/exregion.c
> index ea10a01..4056f08 100644
> --- a/src/acpica/source/components/executer/exregion.c
> +++ b/src/acpica/source/components/executer/exregion.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __EXREGION_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/namespace/nsalloc.c b/src/acpica/source/components/namespace/nsalloc.c
> index d1701b8..ae855e9 100644
> --- a/src/acpica/source/components/namespace/nsalloc.c
> +++ b/src/acpica/source/components/namespace/nsalloc.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __NSALLOC_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/namespace/nsinit.c b/src/acpica/source/components/namespace/nsinit.c
> index 2e35355..b5be1f4 100644
> --- a/src/acpica/source/components/namespace/nsinit.c
> +++ b/src/acpica/source/components/namespace/nsinit.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __NSXFINIT_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/namespace/nsobject.c b/src/acpica/source/components/namespace/nsobject.c
> index 74470f0..c9b7b32 100644
> --- a/src/acpica/source/components/namespace/nsobject.c
> +++ b/src/acpica/source/components/namespace/nsobject.c
> @@ -114,7 +114,6 @@
> *
> *****************************************************************************/
>
> -
> #define __NSOBJECT_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/namespace/nsprepkg.c b/src/acpica/source/components/namespace/nsprepkg.c
> index 41dc5a7..b44d12b 100644
> --- a/src/acpica/source/components/namespace/nsprepkg.c
> +++ b/src/acpica/source/components/namespace/nsprepkg.c
> @@ -393,6 +393,46 @@ AcpiNsCheckPackage (
> Status = AcpiNsCheckPackageList (Info, Package, Elements, Count);
> break;
>
> + case ACPI_PTYPE2_UUID_PAIR:
> +
> + /* The package must contain pairs of (UUID + type) */
> +
> + if (Count & 1)
> + {
> + ExpectedCount = Count + 1;
> + goto PackageTooSmall;
> + }
> +
> + while (Count > 0)
> + {
> + Status = AcpiNsCheckObjectType(Info, Elements,
> + Package->RetInfo.ObjectType1, 0);
> + if (ACPI_FAILURE(Status))
> + {
> + return (Status);
> + }
> +
> + /* Validate length of the UUID buffer */
> +
> + if ((*Elements)->Buffer.Length != 16)
> + {
> + ACPI_WARN_PREDEFINED ((AE_INFO, Info->FullPathname,
> + Info->NodeFlags, "Invalid length for UUID Buffer"));
> + return (AE_AML_OPERAND_VALUE);
> + }
> +
> + Status = AcpiNsCheckObjectType(Info, Elements + 1,
> + Package->RetInfo.ObjectType2, 0);
> + if (ACPI_FAILURE(Status))
> + {
> + return (Status);
> + }
> +
> + Elements += 2;
> + Count -= 2;
> + }
> + break;
> +
> default:
>
> /* Should not get here if predefined info table is correct */
> diff --git a/src/acpica/source/components/namespace/nswalk.c b/src/acpica/source/components/namespace/nswalk.c
> index c6c5663..23e5fd1 100644
> --- a/src/acpica/source/components/namespace/nswalk.c
> +++ b/src/acpica/source/components/namespace/nswalk.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __NSWALK_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/namespace/nsxfeval.c b/src/acpica/source/components/namespace/nsxfeval.c
> index 4864e61..259a187 100644
> --- a/src/acpica/source/components/namespace/nsxfeval.c
> +++ b/src/acpica/source/components/namespace/nsxfeval.c
> @@ -114,7 +114,6 @@
> *
> *****************************************************************************/
>
> -
> #define __NSXFEVAL_C__
> #define EXPORT_ACPI_INTERFACES
>
> diff --git a/src/acpica/source/components/namespace/nsxfobj.c b/src/acpica/source/components/namespace/nsxfobj.c
> index 0f61a71..409f233 100644
> --- a/src/acpica/source/components/namespace/nsxfobj.c
> +++ b/src/acpica/source/components/namespace/nsxfobj.c
> @@ -114,7 +114,6 @@
> *
> *****************************************************************************/
>
> -
> #define __NSXFOBJ_C__
> #define EXPORT_ACPI_INTERFACES
>
> diff --git a/src/acpica/source/components/parser/psloop.c b/src/acpica/source/components/parser/psloop.c
> index ec7db25..cf52d5f 100644
> --- a/src/acpica/source/components/parser/psloop.c
> +++ b/src/acpica/source/components/parser/psloop.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> /*
> * Parse the AML and build an operation tree as most interpreters, (such as
> * Perl) do. Parsing is done by hand rather than with a YACC generated parser
> diff --git a/src/acpica/source/components/parser/psobject.c b/src/acpica/source/components/parser/psobject.c
> index f4ecc33..705aa6c 100644
> --- a/src/acpica/source/components/parser/psobject.c
> +++ b/src/acpica/source/components/parser/psobject.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acparser.h"
> diff --git a/src/acpica/source/components/parser/psopcode.c b/src/acpica/source/components/parser/psopcode.c
> index 0af5e9a..40243a5 100644
> --- a/src/acpica/source/components/parser/psopcode.c
> +++ b/src/acpica/source/components/parser/psopcode.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acopcode.h"
> diff --git a/src/acpica/source/components/parser/psopinfo.c b/src/acpica/source/components/parser/psopinfo.c
> index 5118ccd..198d9a3 100644
> --- a/src/acpica/source/components/parser/psopinfo.c
> +++ b/src/acpica/source/components/parser/psopinfo.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acparser.h"
> diff --git a/src/acpica/source/components/parser/psparse.c b/src/acpica/source/components/parser/psparse.c
> index b9038f1..afbcc62 100644
> --- a/src/acpica/source/components/parser/psparse.c
> +++ b/src/acpica/source/components/parser/psparse.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> /*
> * Parse the AML and build an operation tree as most interpreters,
> * like Perl, do. Parsing is done by hand rather than with a YACC
> diff --git a/src/acpica/source/components/parser/psscope.c b/src/acpica/source/components/parser/psscope.c
> index 45a5768..3c0fb90 100644
> --- a/src/acpica/source/components/parser/psscope.c
> +++ b/src/acpica/source/components/parser/psscope.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acparser.h"
> diff --git a/src/acpica/source/components/parser/pstree.c b/src/acpica/source/components/parser/pstree.c
> index 4a6403d..45c6fc2 100644
> --- a/src/acpica/source/components/parser/pstree.c
> +++ b/src/acpica/source/components/parser/pstree.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __PSTREE_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/parser/psutils.c b/src/acpica/source/components/parser/psutils.c
> index 12d74a9..bce4010 100644
> --- a/src/acpica/source/components/parser/psutils.c
> +++ b/src/acpica/source/components/parser/psutils.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acparser.h"
> diff --git a/src/acpica/source/components/parser/pswalk.c b/src/acpica/source/components/parser/pswalk.c
> index 7226e48..1605428 100644
> --- a/src/acpica/source/components/parser/pswalk.c
> +++ b/src/acpica/source/components/parser/pswalk.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "acparser.h"
> diff --git a/src/acpica/source/components/resources/rsdump.c b/src/acpica/source/components/resources/rsdump.c
> index ae295fa..4fc7d4a 100644
> --- a/src/acpica/source/components/resources/rsdump.c
> +++ b/src/acpica/source/components/resources/rsdump.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __RSDUMP_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/resources/rsdumpinfo.c b/src/acpica/source/components/resources/rsdumpinfo.c
> index 2aef0e5..929043c 100644
> --- a/src/acpica/source/components/resources/rsdumpinfo.c
> +++ b/src/acpica/source/components/resources/rsdumpinfo.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __RSDUMPINFO_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/resources/rsutils.c b/src/acpica/source/components/resources/rsutils.c
> index e9952f0..b05338c 100644
> --- a/src/acpica/source/components/resources/rsutils.c
> +++ b/src/acpica/source/components/resources/rsutils.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __RSUTILS_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/resources/rsxface.c b/src/acpica/source/components/resources/rsxface.c
> index 2ae63b3..8dbb301 100644
> --- a/src/acpica/source/components/resources/rsxface.c
> +++ b/src/acpica/source/components/resources/rsxface.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __RSXFACE_C__
> #define EXPORT_ACPI_INTERFACES
>
> diff --git a/src/acpica/source/components/tables/tbdata.c b/src/acpica/source/components/tables/tbdata.c
> old mode 100755
> new mode 100644
> diff --git a/src/acpica/source/components/utilities/utexcep.c b/src/acpica/source/components/utilities/utexcep.c
> index d9f0471..5455f87 100644
> --- a/src/acpica/source/components/utilities/utexcep.c
> +++ b/src/acpica/source/components/utilities/utexcep.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __UTEXCEP_C__
> #define EXPORT_ACPI_INTERFACES
>
> diff --git a/src/acpica/source/components/utilities/utfileio.c b/src/acpica/source/components/utilities/utfileio.c
> index 9501e22..956f300 100644
> --- a/src/acpica/source/components/utilities/utfileio.c
> +++ b/src/acpica/source/components/utilities/utfileio.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #include "acpi.h"
> #include "accommon.h"
> #include "actables.h"
> diff --git a/src/acpica/source/components/utilities/utinit.c b/src/acpica/source/components/utilities/utinit.c
> index 8df0277..af29d7a 100644
> --- a/src/acpica/source/components/utilities/utinit.c
> +++ b/src/acpica/source/components/utilities/utinit.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __UTINIT_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/utilities/utmath.c b/src/acpica/source/components/utilities/utmath.c
> index c781c7e..22f5a21 100644
> --- a/src/acpica/source/components/utilities/utmath.c
> +++ b/src/acpica/source/components/utilities/utmath.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __UTMATH_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/utilities/utmisc.c b/src/acpica/source/components/utilities/utmisc.c
> index 69d8350..68f85f4 100644
> --- a/src/acpica/source/components/utilities/utmisc.c
> +++ b/src/acpica/source/components/utilities/utmisc.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __UTMISC_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/utilities/utmutex.c b/src/acpica/source/components/utilities/utmutex.c
> index 168afa3..fcca4a4 100644
> --- a/src/acpica/source/components/utilities/utmutex.c
> +++ b/src/acpica/source/components/utilities/utmutex.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __UTMUTEX_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/utilities/utownerid.c b/src/acpica/source/components/utilities/utownerid.c
> index ae42970..ba191fa 100644
> --- a/src/acpica/source/components/utilities/utownerid.c
> +++ b/src/acpica/source/components/utilities/utownerid.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __UTOWNERID_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/utilities/utresrc.c b/src/acpica/source/components/utilities/utresrc.c
> index f5af86f..2c31f2a 100644
> --- a/src/acpica/source/components/utilities/utresrc.c
> +++ b/src/acpica/source/components/utilities/utresrc.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __UTRESRC_C__
>
> #include "acpi.h"
> @@ -172,7 +171,9 @@ const char *AcpiGbl_IoDecode[] =
> const char *AcpiGbl_LlDecode[] =
> {
> "ActiveHigh",
> - "ActiveLow"
> + "ActiveLow",
> + "ActiveBoth",
> + "Reserved"
> };
>
> const char *AcpiGbl_MaxDecode[] =
> diff --git a/src/acpica/source/components/utilities/utstate.c b/src/acpica/source/components/utilities/utstate.c
> index fc99c56..0d1f2bf 100644
> --- a/src/acpica/source/components/utilities/utstate.c
> +++ b/src/acpica/source/components/utilities/utstate.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __UTSTATE_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/utilities/utstring.c b/src/acpica/source/components/utilities/utstring.c
> index c4ead02..d4e5f45 100644
> --- a/src/acpica/source/components/utilities/utstring.c
> +++ b/src/acpica/source/components/utilities/utstring.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __UTSTRING_C__
>
> #include "acpi.h"
> diff --git a/src/acpica/source/components/utilities/utxface.c b/src/acpica/source/components/utilities/utxface.c
> index e915b84..068609b 100644
> --- a/src/acpica/source/components/utilities/utxface.c
> +++ b/src/acpica/source/components/utilities/utxface.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __UTXFACE_C__
> #define EXPORT_ACPI_INTERFACES
>
> diff --git a/src/acpica/source/components/utilities/utxfinit.c b/src/acpica/source/components/utilities/utxfinit.c
> index b9b1326..d29028c 100644
> --- a/src/acpica/source/components/utilities/utxfinit.c
> +++ b/src/acpica/source/components/utilities/utxfinit.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #define __UTXFINIT_C__
> #define EXPORT_ACPI_INTERFACES
>
> diff --git a/src/acpica/source/include/acdisasm.h b/src/acpica/source/include/acdisasm.h
> index 21e26e6..f936128 100644
> --- a/src/acpica/source/include/acdisasm.h
> +++ b/src/acpica/source/include/acdisasm.h
> @@ -432,6 +432,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoSratHdr[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat0[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat1[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat2[];
> +extern ACPI_DMTABLE_INFO AcpiDmTableInfoSrat3[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoTcpa[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoTpm2[];
> extern ACPI_DMTABLE_INFO AcpiDmTableInfoUefi[];
> diff --git a/src/acpica/source/include/acdispat.h b/src/acpica/source/include/acdispat.h
> index bfccbf1..2a47c52 100644
> --- a/src/acpica/source/include/acdispat.h
> +++ b/src/acpica/source/include/acdispat.h
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #ifndef _ACDISPAT_H_
> #define _ACDISPAT_H_
>
> diff --git a/src/acpica/source/include/acnames.h b/src/acpica/source/include/acnames.h
> index 6ccf47f..55cbe44 100644
> --- a/src/acpica/source/include/acnames.h
> +++ b/src/acpica/source/include/acnames.h
> @@ -131,6 +131,10 @@
> #define METHOD_NAME__PRS "_PRS"
> #define METHOD_NAME__PRT "_PRT"
> #define METHOD_NAME__PRW "_PRW"
> +#define METHOD_NAME__PS0 "_PS0"
> +#define METHOD_NAME__PS1 "_PS1"
> +#define METHOD_NAME__PS2 "_PS2"
> +#define METHOD_NAME__PS3 "_PS3"
> #define METHOD_NAME__REG "_REG"
> #define METHOD_NAME__SB_ "_SB_"
> #define METHOD_NAME__SEG "_SEG"
> diff --git a/src/acpica/source/include/acparser.h b/src/acpica/source/include/acparser.h
> index 5827a8c..0899969 100644
> --- a/src/acpica/source/include/acparser.h
> +++ b/src/acpica/source/include/acparser.h
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> #ifndef __ACPARSER_H__
> #define __ACPARSER_H__
>
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index cafc37b..b3182c3 100644
> --- a/src/acpica/source/include/acpixf.h
> +++ b/src/acpica/source/include/acpixf.h
> @@ -118,7 +118,7 @@
>
> /* Current ACPICA subsystem version in YYYYMMDD format */
>
> -#define ACPI_CA_VERSION 0x20140724
> +#define ACPI_CA_VERSION 0x20140828
>
> #include "acconfig.h"
> #include "actypes.h"
> diff --git a/src/acpica/source/include/actbl1.h b/src/acpica/source/include/actbl1.h
> index d28faa3..4c5ffee 100644
> --- a/src/acpica/source/include/actbl1.h
> +++ b/src/acpica/source/include/actbl1.h
> @@ -1190,7 +1190,8 @@ enum AcpiSratType
> ACPI_SRAT_TYPE_CPU_AFFINITY = 0,
> ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,
> ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,
> - ACPI_SRAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */
> + ACPI_SRAT_TYPE_GICC_AFFINITY = 3,
> + ACPI_SRAT_TYPE_RESERVED = 4 /* 4 and greater are reserved */
> };
>
> /*
> @@ -1207,7 +1208,7 @@ typedef struct acpi_srat_cpu_affinity
> UINT32 Flags;
> UINT8 LocalSapicEid;
> UINT8 ProximityDomainHi[3];
> - UINT32 Reserved; /* Reserved, must be zero */
> + UINT32 ClockDomain;
>
> } ACPI_SRAT_CPU_AFFINITY;
>
> @@ -1257,6 +1258,22 @@ typedef struct acpi_srat_x2apic_cpu_affinity
> #define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */
>
>
> +/* 3: GICC Affinity (ACPI 5.1) */
> +
> +typedef struct acpi_srat_gicc_affinity
> +{
> + ACPI_SUBTABLE_HEADER Header;
> + UINT32 ProximityDomain;
> + UINT32 AcpiProcessorUid;
> + UINT32 Flags;
> + UINT32 ClockDomain;
> +
> +} ACPI_SRAT_GICC_AFFINITY;
> +
> +/* Flags for ACPI_SRAT_GICC_AFFINITY */
> +
> +#define ACPI_SRAT_GICC_ENABLED (1) /* 00: Use affinity structure */
> +
> /* Reset to default packing */
>
> #pragma pack()
> diff --git a/src/acpica/source/include/actbl3.h b/src/acpica/source/include/actbl3.h
> index b30e80f..4e3b77a 100644
> --- a/src/acpica/source/include/actbl3.h
> +++ b/src/acpica/source/include/actbl3.h
> @@ -432,11 +432,15 @@ typedef struct acpi_gtdt_timer_entry
>
> } ACPI_GTDT_TIMER_ENTRY;
>
> +/* Flag Definitions: TimerFlags and VirtualTimerFlags above */
> +
> +#define ACPI_GTDT_GT_IRQ_MODE (1)
> +#define ACPI_GTDT_GT_IRQ_POLARITY (1<<1)
>
> /* Flag Definitions: CommonFlags above */
>
> -#define ACPI_GTDT_GT_IS_SECURE_TIMER (1)
> -#define ACPI_GTDT_GT_ALWAYS_ON (1<<1)
> +#define ACPI_GTDT_GT_IS_SECURE_TIMER (1)
> +#define ACPI_GTDT_GT_ALWAYS_ON (1<<1)
>
>
> /* 1: SBSA Generic Watchdog Structure */
> diff --git a/src/acpica/source/include/platform/aclinux.h b/src/acpica/source/include/platform/aclinux.h
> index d5c1501..e7df0b7 100644
> --- a/src/acpica/source/include/platform/aclinux.h
> +++ b/src/acpica/source/include/platform/aclinux.h
> @@ -116,6 +116,16 @@
> #ifndef __ACLINUX_H__
> #define __ACLINUX_H__
>
> +#ifdef __KERNEL__
> +
> +/* ACPICA external files should not include ACPICA headers directly. */
> +
> +#if !defined(BUILDING_ACPICA) && !defined(_LINUX_ACPI_H)
> +#error "Please don't include <acpi/acpi.h> directly, include <linux/acpi.h> instead."
> +#endif
> +
> +#endif
> +
> /* Common (in-kernel/user-space) ACPICA configuration */
>
> #define ACPI_USE_SYSTEM_CLIBRARY
> @@ -143,7 +153,9 @@
> #ifdef EXPORT_ACPI_INTERFACES
> #include <linux/export.h>
> #endif
> +#ifdef CONFIG_ACPI
> #include <asm/acenv.h>
> +#endif
>
> #ifndef CONFIG_ACPI
>
> diff --git a/src/acpica/source/include/platform/aclinuxex.h b/src/acpica/source/include/platform/aclinuxex.h
> index e3d5d5b..d4111a1 100644
> --- a/src/acpica/source/include/platform/aclinuxex.h
> +++ b/src/acpica/source/include/platform/aclinuxex.h
> @@ -118,6 +118,28 @@
>
> #ifdef __KERNEL__
>
> +#ifndef ACPI_USE_NATIVE_DIVIDE
> +
> +#ifndef ACPI_DIV_64_BY_32
> +#define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \
> + do { \
> + UINT64 (__n) = ((UINT64) n_hi) << 32 | (n_lo); \
> + (r32) = do_div ((__n), (d32)); \
> + (q32) = (UINT32) (__n); \
> + } while (0)
> +#endif
> +
> +#ifndef ACPI_SHIFT_RIGHT_64
> +#define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \
> + do { \
> + (n_lo) >>= 1; \
> + (n_lo) |= (((n_hi) & 1) << 31); \
> + (n_hi) >>= 1; \
> + } while (0)
> +#endif
> +
> +#endif
> +
> /*
> * Overrides for in-kernel ACPICA
> */
> diff --git a/src/acpica/source/os_specific/service_layers/osunixxf.c b/src/acpica/source/os_specific/service_layers/osunixxf.c
> index 6f0bdfe..7f5193d 100644
> --- a/src/acpica/source/os_specific/service_layers/osunixxf.c
> +++ b/src/acpica/source/os_specific/service_layers/osunixxf.c
> @@ -113,7 +113,6 @@
> *
> *****************************************************************************/
>
> -
> /*
> * These interfaces are required in order to compile the ASL compiler and the
> * various ACPICA tools under Linux or other Unix-like system.
> --
> 2.1.0
>
Acked-by: Keng-Yu Lin <kengyu at canonical.com>
More information about the fwts-devel
mailing list