ACK: [PATCH 1/3] acpica: update to version 20140627 (LP: #1335280)
IvanHu
ivan.hu at canonical.com
Mon Jul 14 07:52:55 UTC 2014
On 06/28/2014 03:17 AM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> For the specific ACPICA changes please refer to:
>
> https://lists.acpica.org/pipermail/devel/2014-June/000656.html
>
> This update also addresses 7 issues found by Coverity Scan.
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> src/acpica/Makefile.am | 3 +
> src/acpica/fwts_acpica.c | 4 +-
> src/acpica/source/common/ahpredef.c | 1 -
> src/acpica/source/common/cmfsize.c | 20 +-
> src/acpica/source/compiler/aslanalyze.c | 48 --
> src/acpica/source/compiler/aslcompiler.h | 9 -
> src/acpica/source/compiler/aslmain.c | 1 +
> src/acpica/source/compiler/aslmessages.c | 1 -
> src/acpica/source/compiler/aslmessages.h | 1 -
> src/acpica/source/compiler/aslmethod.c | 20 -
> src/acpica/source/compiler/aslstubs.c | 25 -
> src/acpica/source/components/debugger/dbfileio.c | 316 +-------
> src/acpica/source/components/debugger/dbtest.c | 1 +
> .../source/components/disassembler/dmbuffer.c | 72 +-
> src/acpica/source/components/disassembler/dmwalk.c | 28 +-
> src/acpica/source/components/executer/exfield.c | 103 ++-
> src/acpica/source/components/hardware/hwregs.c | 8 +-
> src/acpica/source/components/namespace/nsobject.c | 11 +
> src/acpica/source/components/tables/tbdata.c | 65 +-
> src/acpica/source/components/tables/tbinstal.c | 8 +-
> src/acpica/source/components/tables/tbutils.c | 4 -
> src/acpica/source/components/utilities/utbuffer.c | 135 ++++
> src/acpica/source/components/utilities/utcopy.c | 7 +
> src/acpica/source/components/utilities/utdebug.c | 30 +
> src/acpica/source/components/utilities/utfileio.c | 435 +++++++++++
> src/acpica/source/components/utilities/utglobal.c | 157 ----
> src/acpica/source/components/utilities/utinit.c | 156 ++++
> src/acpica/source/components/utilities/utprint.c | 868 +++++++++++++++++++++
> src/acpica/source/include/acapps.h | 9 +-
> src/acpica/source/include/acdebug.h | 5 -
> src/acpica/source/include/acglobal.h | 8 +-
> src/acpica/source/include/acnames.h | 1 -
> src/acpica/source/include/acpi.h | 4 +-
> src/acpica/source/include/acpiosxf.h | 49 ++
> src/acpica/source/include/acpixf.h | 36 +-
> src/acpica/source/include/acpredef.h | 6 -
> src/acpica/source/include/actables.h | 14 +-
> src/acpica/source/include/actypes.h | 16 +
> src/acpica/source/include/acutils.h | 70 +-
> src/acpica/source/include/platform/acenv.h | 53 +-
> src/acpica/source/include/platform/acenvex.h | 135 ++++
> src/acpica/source/include/platform/aclinux.h | 194 +----
> src/acpica/source/include/platform/aclinuxex.h | 209 +++++
> .../source/os_specific/service_layers/oslibcfs.c | 323 ++++++++
> .../source/os_specific/service_layers/osunixxf.c | 66 +-
> src/acpica/source/tools/acpiexec/aehandlers.c | 16 +-
> 46 files changed, 2908 insertions(+), 843 deletions(-)
> create mode 100644 src/acpica/source/components/utilities/utfileio.c
> create mode 100644 src/acpica/source/components/utilities/utprint.c
> create mode 100644 src/acpica/source/include/platform/acenvex.h
> create mode 100644 src/acpica/source/include/platform/aclinuxex.h
> create mode 100644 src/acpica/source/os_specific/service_layers/oslibcfs.c
>
> diff --git a/src/acpica/Makefile.am b/src/acpica/Makefile.am
> index 2204669..b2dd752 100644
> --- a/src/acpica/Makefile.am
> +++ b/src/acpica/Makefile.am
> @@ -65,6 +65,7 @@ libfwtsacpica_la_SOURCES = \
> fwts_acpica.c \
> osunixxf_munged.c \
> dscontrol_munged.c \
> + source/os_specific/service_layers/oslibcfs.c \
> source/components/debugger/dbcmds.c \
> source/components/debugger/dbdisply.c \
> source/components/debugger/dbexec.c \
> @@ -213,6 +214,7 @@ libfwtsacpica_la_SOURCES = \
> source/components/utilities/utdebug.c \
> source/components/utilities/utdelete.c \
> source/components/utilities/uteval.c \
> + source/components/utilities/utfileio.c \
> source/components/utilities/utglobal.c \
> source/components/utilities/utids.c \
> source/components/utilities/utinit.c \
> @@ -230,6 +232,7 @@ libfwtsacpica_la_SOURCES = \
> source/components/utilities/utdecode.c \
> source/components/utilities/utexcep.c \
> source/components/utilities/utpredef.c \
> + source/components/utilities/utprint.c \
> source/components/utilities/utstring.c \
> source/components/utilities/utownerid.c \
> source/components/utilities/utxfinit.c \
> diff --git a/src/acpica/fwts_acpica.c b/src/acpica/fwts_acpica.c
> index cc691c3..ce6600f 100644
> --- a/src/acpica/fwts_acpica.c
> +++ b/src/acpica/fwts_acpica.c
> @@ -385,10 +385,10 @@ static ACPI_STATUS fwts_region_handler(
> }
>
> /*
> - * AeLocalGetRootPointer()
> + * AcpiOsGetRootPointer()
> * override ACPICA AeLocalGetRootPointer to return a local copy of the RSDP
> */
> -ACPI_PHYSICAL_ADDRESS AeLocalGetRootPointer(void)
> +ACPI_PHYSICAL_ADDRESS AcpiOsGetRootPointer(void)
> {
> return (ACPI_PHYSICAL_ADDRESS)fwts_acpica_RSDP;
> }
> diff --git a/src/acpica/source/common/ahpredef.c b/src/acpica/source/common/ahpredef.c
> index 21038ab..525c7bb 100644
> --- a/src/acpica/source/common/ahpredef.c
> +++ b/src/acpica/source/common/ahpredef.c
> @@ -289,7 +289,6 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
> AH_PREDEF ("_PR3", "Power Resources for D3hot", "Returns a list of dependent power resources to enter state D3hot"),
> AH_PREDEF ("_PRE", "Power Resources for Enumeration", "Returns a list of dependent power resources to enumerate devices on a bus"),
> AH_PREDEF ("_PRL", "Power Source Redundancy List", "Returns a list of power source devices in the same redundancy grouping"),
> - AH_PREDEF ("_PRP", "Device Properties", "Returns a list of device property information"),
> AH_PREDEF ("_PRS", "Possible Resource Settings", "Returns a list of a device's possible resource settings"),
> AH_PREDEF ("_PRT", "PCI Routing Table", "Returns a list of PCI interrupt mappings"),
> AH_PREDEF ("_PRW", "Power Resources for Wake", "Returns a list of dependent power resources for waking"),
> diff --git a/src/acpica/source/common/cmfsize.c b/src/acpica/source/common/cmfsize.c
> index 1bb3fba..1511683 100755
> --- a/src/acpica/source/common/cmfsize.c
> +++ b/src/acpica/source/common/cmfsize.c
> @@ -131,33 +131,34 @@
> * RETURN: File Size. On error, -1 (ACPI_UINT32_MAX)
> *
> * DESCRIPTION: Get the size of a file. Uses seek-to-EOF. File must be open.
> - * Does not disturb the current file pointer. Uses perror for
> - * error messages.
> + * Does not disturb the current file pointer.
> *
> ******************************************************************************/
>
> UINT32
> CmGetFileSize (
> - FILE *File)
> + ACPI_FILE File)
> {
> long FileSize;
> long CurrentOffset;
> + ACPI_STATUS Status;
>
>
> /* Save the current file pointer, seek to EOF to obtain file size */
>
> - CurrentOffset = ftell (File);
> + CurrentOffset = AcpiOsGetFileOffset (File);
> if (CurrentOffset < 0)
> {
> goto OffsetError;
> }
>
> - if (fseek (File, 0, SEEK_END))
> + Status = AcpiOsSetFileOffset (File, 0, ACPI_FILE_END);
> + if (ACPI_FAILURE (Status))
> {
> goto SeekError;
> }
>
> - FileSize = ftell (File);
> + FileSize = AcpiOsGetFileOffset (File);
> if (FileSize < 0)
> {
> goto OffsetError;
> @@ -165,7 +166,8 @@ CmGetFileSize (
>
> /* Restore original file pointer */
>
> - if (fseek (File, CurrentOffset, SEEK_SET))
> + Status = AcpiOsSetFileOffset (File, CurrentOffset, ACPI_FILE_BEGIN);
> + if (ACPI_FAILURE (Status))
> {
> goto SeekError;
> }
> @@ -174,10 +176,10 @@ CmGetFileSize (
>
>
> OffsetError:
> - perror ("Could not get file offset");
> + AcpiLogError ("Could not get file offset");
> return (ACPI_UINT32_MAX);
>
> SeekError:
> - perror ("Could not seek file");
> + AcpiLogError ("Could not set file offset");
> return (ACPI_UINT32_MAX);
> }
> diff --git a/src/acpica/source/compiler/aslanalyze.c b/src/acpica/source/compiler/aslanalyze.c
> index 8bfc9ac..16e28d3 100644
> --- a/src/acpica/source/compiler/aslanalyze.c
> +++ b/src/acpica/source/compiler/aslanalyze.c
> @@ -641,51 +641,3 @@ ApCheckRegMethod (
>
> AslError (ASL_WARNING, ASL_MSG_NO_REGION, Op, NULL);
> }
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION: ApFindNameInScope
> - *
> - * PARAMETERS: Name - Name to search for
> - * Op - Current parse op
> - *
> - * RETURN: TRUE if name found in the same scope as Op.
> - *
> - * DESCRIPTION: Determine if a name appears in the same scope as Op, as either
> - * a Method() or a Name().
> - *
> - ******************************************************************************/
> -
> -BOOLEAN
> -ApFindNameInScope (
> - char *Name,
> - ACPI_PARSE_OBJECT *Op)
> -{
> - ACPI_PARSE_OBJECT *Next;
> - ACPI_PARSE_OBJECT *Parent;
> -
> -
> - /* Get the start of the current scope */
> -
> - Parent = Op->Asl.Parent;
> - Next = Parent->Asl.Child;
> -
> - /* Search entire scope for a match to the name */
> -
> - while (Next)
> - {
> - if ((Next->Asl.ParseOpcode == PARSEOP_METHOD) ||
> - (Next->Asl.ParseOpcode == PARSEOP_NAME))
> - {
> - if (ACPI_COMPARE_NAME (Name, Next->Asl.NameSeg))
> - {
> - return (TRUE);
> - }
> - }
> -
> - Next = Next->Asl.Next;
> - }
> -
> - return (FALSE);
> -}
> diff --git a/src/acpica/source/compiler/aslcompiler.h b/src/acpica/source/compiler/aslcompiler.h
> index c7692ca..6e59b0f 100644
> --- a/src/acpica/source/compiler/aslcompiler.h
> +++ b/src/acpica/source/compiler/aslcompiler.h
> @@ -347,11 +347,6 @@ void
> ApCheckRegMethod (
> ACPI_PARSE_OBJECT *Op);
>
> -BOOLEAN
> -ApFindNameInScope (
> - char *Name,
> - ACPI_PARSE_OBJECT *Op);
> -
>
> /*
> * aslerror - error handling/reporting
> @@ -422,10 +417,6 @@ void
> AeClearErrorLog (
> void);
>
> -ACPI_PHYSICAL_ADDRESS
> -AeLocalGetRootPointer (
> - void);
> -
>
> /*
> * asllisting - generate all "listing" type files
> diff --git a/src/acpica/source/compiler/aslmain.c b/src/acpica/source/compiler/aslmain.c
> index 1dfbc0a..10f64bd 100644
> --- a/src/acpica/source/compiler/aslmain.c
> +++ b/src/acpica/source/compiler/aslmain.c
> @@ -413,6 +413,7 @@ main (
> return (-1);
> }
>
> + AcpiOsInitialize ();
> ACPI_DEBUG_INITIALIZE (); /* For debug version only */
>
> /* Initialize preprocessor and compiler before command line processing */
> diff --git a/src/acpica/source/compiler/aslmessages.c b/src/acpica/source/compiler/aslmessages.c
> index 11b5d57..5b271d3 100644
> --- a/src/acpica/source/compiler/aslmessages.c
> +++ b/src/acpica/source/compiler/aslmessages.c
> @@ -305,7 +305,6 @@ 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"
> };
>
> /* Table compiler */
> diff --git a/src/acpica/source/compiler/aslmessages.h b/src/acpica/source/compiler/aslmessages.h
> index 5743075..150425c 100644
> --- a/src/acpica/source/compiler/aslmessages.h
> +++ b/src/acpica/source/compiler/aslmessages.h
> @@ -307,7 +307,6 @@ typedef enum
> ASL_MSG_WRITE,
> ASL_MSG_RANGE,
> ASL_MSG_BUFFER_ALLOCATION,
> - ASL_MSG_MISSING_DEPENDENCY,
>
> /* 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 7aca8f6..edf2fa4 100644
> --- a/src/acpica/source/compiler/aslmethod.c
> +++ b/src/acpica/source/compiler/aslmethod.c
> @@ -180,17 +180,6 @@ MtMethodAnalysisWalkBegin (
>
> WalkInfo->MethodStack = MethodInfo;
>
> - /* Special handling for _PRP, must have a _HID also */
> -
> - if (!ACPI_STRCMP (METHOD_NAME__PRP, Op->Asl.NameSeg))
> - {
> - if (!ApFindNameInScope (METHOD_NAME__HID, Op))
> - {
> - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> - "_PRP requires _HID in same scope");
> - }
> - }
> -
> /* Get the name node */
>
> Next = Op->Asl.Child;
> @@ -496,15 +485,6 @@ MtMethodAnalysisWalkBegin (
> }
> }
>
> - else if (!ACPI_STRCMP (METHOD_NAME__PRP, Op->Asl.NameSeg))
> - {
> - if (!ApFindNameInScope (METHOD_NAME__HID, Op))
> - {
> - AslError (ASL_WARNING, ASL_MSG_MISSING_DEPENDENCY, Op,
> - "_PRP requires _HID in same scope");
> - }
> - }
> -
> break;
>
> default:
> diff --git a/src/acpica/source/compiler/aslstubs.c b/src/acpica/source/compiler/aslstubs.c
> index 9e43a0d..a57c4f4 100644
> --- a/src/acpica/source/compiler/aslstubs.c
> +++ b/src/acpica/source/compiler/aslstubs.c
> @@ -129,13 +129,6 @@
> * Things like Events, Global Lock, etc. are not used
> * by the compiler, so they are stubbed out here.
> */
> -ACPI_PHYSICAL_ADDRESS
> -AeLocalGetRootPointer (
> - void)
> -{
> - return (0);
> -}
> -
> void
> AcpiNsExecModuleCodeList (
> void)
> @@ -304,21 +297,3 @@ AcpiTbFindTable (
> {
> return (AE_SUPPORT);
> }
> -
> -/* OSL interfaces */
> -
> -ACPI_THREAD_ID
> -AcpiOsGetThreadId (
> - void)
> -{
> - return (1);
> -}
> -
> -ACPI_STATUS
> -AcpiOsExecute (
> - ACPI_EXECUTE_TYPE Type,
> - ACPI_OSD_EXEC_CALLBACK Function,
> - void *Context)
> -{
> - return (AE_SUPPORT);
> -}
> diff --git a/src/acpica/source/components/debugger/dbfileio.c b/src/acpica/source/components/debugger/dbfileio.c
> index 3d456e5..3581d83 100644
> --- a/src/acpica/source/components/debugger/dbfileio.c
> +++ b/src/acpica/source/components/debugger/dbfileio.c
> @@ -118,14 +118,7 @@
> #include "acpi.h"
> #include "accommon.h"
> #include "acdebug.h"
> -
> -#ifdef ACPI_APPLICATION
> #include "actables.h"
> -#endif
> -
> -#ifdef ACPI_ASL_COMPILER
> -#include "aslcompiler.h"
> -#endif
>
> #if (defined ACPI_DEBUGGER || defined ACPI_DISASSEMBLER)
>
> @@ -134,18 +127,6 @@
>
> #ifdef ACPI_DEBUGGER
>
> -/* Local prototypes */
> -
> -#ifdef ACPI_APPLICATION
> -
> -static ACPI_STATUS
> -AcpiDbCheckTextModeCorruption (
> - UINT8 *Table,
> - UINT32 TableLength,
> - UINT32 FileLength);
> -
> -#endif
> -
> /*******************************************************************************
> *
> * FUNCTION: AcpiDbCloseDebugFile
> @@ -218,245 +199,6 @@ AcpiDbOpenDebugFile (
>
> /*******************************************************************************
> *
> - * FUNCTION: AcpiDbCheckTextModeCorruption
> - *
> - * PARAMETERS: Table - Table buffer
> - * TableLength - Length of table from the table header
> - * FileLength - Length of the file that contains the table
> - *
> - * RETURN: Status
> - *
> - * DESCRIPTION: Check table for text mode file corruption where all linefeed
> - * characters (LF) have been replaced by carriage return linefeed
> - * pairs (CR/LF).
> - *
> - ******************************************************************************/
> -
> -static ACPI_STATUS
> -AcpiDbCheckTextModeCorruption (
> - UINT8 *Table,
> - UINT32 TableLength,
> - UINT32 FileLength)
> -{
> - UINT32 i;
> - UINT32 Pairs = 0;
> -
> -
> - if (TableLength != FileLength)
> - {
> - ACPI_WARNING ((AE_INFO,
> - "File length (0x%X) is not the same as the table length (0x%X)",
> - FileLength, TableLength));
> - }
> -
> - /* Scan entire table to determine if each LF has been prefixed with a CR */
> -
> - for (i = 1; i < FileLength; i++)
> - {
> - if (Table[i] == 0x0A)
> - {
> - if (Table[i - 1] != 0x0D)
> - {
> - /* The LF does not have a preceding CR, table not corrupted */
> -
> - return (AE_OK);
> - }
> - else
> - {
> - /* Found a CR/LF pair */
> -
> - Pairs++;
> - }
> - i++;
> - }
> - }
> -
> - if (!Pairs)
> - {
> - return (AE_OK);
> - }
> -
> - /*
> - * Entire table scanned, each CR is part of a CR/LF pair --
> - * meaning that the table was treated as a text file somewhere.
> - *
> - * NOTE: We can't "fix" the table, because any existing CR/LF pairs in the
> - * original table are left untouched by the text conversion process --
> - * meaning that we cannot simply replace CR/LF pairs with LFs.
> - */
> - AcpiOsPrintf ("Table has been corrupted by text mode conversion\n");
> - AcpiOsPrintf ("All LFs (%u) were changed to CR/LF pairs\n", Pairs);
> - AcpiOsPrintf ("Table cannot be repaired!\n");
> - return (AE_BAD_VALUE);
> -}
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION: AcpiDbReadTable
> - *
> - * PARAMETERS: fp - File that contains table
> - * Table - Return value, buffer with table
> - * TableLength - Return value, length of table
> - *
> - * RETURN: Status
> - *
> - * DESCRIPTION: Load the DSDT from the file pointer
> - *
> - ******************************************************************************/
> -
> -static ACPI_STATUS
> -AcpiDbReadTable (
> - FILE *fp,
> - ACPI_TABLE_HEADER **Table,
> - UINT32 *TableLength)
> -{
> - ACPI_TABLE_HEADER TableHeader;
> - UINT32 Actual;
> - ACPI_STATUS Status;
> - UINT32 FileSize;
> - BOOLEAN StandardHeader = TRUE;
> -
> -
> - /* Get the file size */
> -
> - FileSize = CmGetFileSize (fp);
> - if (FileSize == ACPI_UINT32_MAX)
> - {
> - return (AE_ERROR);
> - }
> -
> - if (FileSize < 4)
> - {
> - return (AE_BAD_HEADER);
> - }
> -
> - /* Read the signature */
> -
> - if (fread (&TableHeader, 1, 4, fp) != 4)
> - {
> - AcpiOsPrintf ("Could not read the table signature\n");
> - return (AE_BAD_HEADER);
> - }
> -
> - fseek (fp, 0, SEEK_SET);
> -
> - /* The RSDP table does not have standard ACPI header */
> -
> - if (ACPI_COMPARE_NAME (TableHeader.Signature, "RSD "))
> - {
> - *TableLength = FileSize;
> - StandardHeader = FALSE;
> - }
> - else
> - {
> - /* Read the table header */
> -
> - if (fread (&TableHeader, 1, sizeof (ACPI_TABLE_HEADER), fp) !=
> - sizeof (ACPI_TABLE_HEADER))
> - {
> - AcpiOsPrintf ("Could not read the table header\n");
> - return (AE_BAD_HEADER);
> - }
> -
> -#if 0
> - /* Validate the table header/length */
> -
> - Status = AcpiTbValidateTableHeader (&TableHeader);
> - if (ACPI_FAILURE (Status))
> - {
> - AcpiOsPrintf ("Table header is invalid!\n");
> - return (Status);
> - }
> -#endif
> -
> - /* File size must be at least as long as the Header-specified length */
> -
> - if (TableHeader.Length > FileSize)
> - {
> - AcpiOsPrintf (
> - "TableHeader length [0x%X] greater than the input file size [0x%X]\n",
> - TableHeader.Length, FileSize);
> -
> -#ifdef ACPI_ASL_COMPILER
> - Status = FlCheckForAscii (fp, NULL, FALSE);
> - if (ACPI_SUCCESS (Status))
> - {
> - AcpiOsPrintf ("File appears to be ASCII only, must be binary\n",
> - TableHeader.Length, FileSize);
> - }
> -#endif
> - return (AE_BAD_HEADER);
> - }
> -
> -#ifdef ACPI_OBSOLETE_CODE
> - /* We only support a limited number of table types */
> -
> - if (!ACPI_COMPARE_NAME ((char *) TableHeader.Signature, ACPI_SIG_DSDT) &&
> - !ACPI_COMPARE_NAME ((char *) TableHeader.Signature, ACPI_SIG_PSDT) &&
> - !ACPI_COMPARE_NAME ((char *) TableHeader.Signature, ACPI_SIG_SSDT))
> - {
> - AcpiOsPrintf ("Table signature [%4.4s] is invalid or not supported\n",
> - (char *) TableHeader.Signature);
> - ACPI_DUMP_BUFFER (&TableHeader, sizeof (ACPI_TABLE_HEADER));
> - return (AE_ERROR);
> - }
> -#endif
> -
> - *TableLength = TableHeader.Length;
> - }
> -
> - /* Allocate a buffer for the table */
> -
> - *Table = AcpiOsAllocate ((size_t) FileSize);
> - if (!*Table)
> - {
> - AcpiOsPrintf (
> - "Could not allocate memory for ACPI table %4.4s (size=0x%X)\n",
> - TableHeader.Signature, *TableLength);
> - return (AE_NO_MEMORY);
> - }
> -
> - /* Get the rest of the table */
> -
> - fseek (fp, 0, SEEK_SET);
> - Actual = fread (*Table, 1, (size_t) FileSize, fp);
> - if (Actual == FileSize)
> - {
> - if (StandardHeader)
> - {
> - /* Now validate the checksum */
> -
> - Status = AcpiTbVerifyChecksum ((void *) *Table,
> - ACPI_CAST_PTR (ACPI_TABLE_HEADER, *Table)->Length);
> -
> - if (Status == AE_BAD_CHECKSUM)
> - {
> - Status = AcpiDbCheckTextModeCorruption ((UINT8 *) *Table,
> - FileSize, (*Table)->Length);
> - return (Status);
> - }
> - }
> - return (AE_OK);
> - }
> -
> - if (Actual > 0)
> - {
> - AcpiOsPrintf ("Warning - reading table, asked for %X got %X\n",
> - FileSize, Actual);
> - return (AE_OK);
> - }
> -
> - AcpiOsPrintf ("Error - could not read the table file\n");
> - AcpiOsFree (*Table);
> - *Table = NULL;
> - *TableLength = 0;
> - return (AE_ERROR);
> -}
> -
> -
> -/*******************************************************************************
> - *
> * FUNCTION: AeLocalLoadTable
> *
> * PARAMETERS: Table - pointer to a buffer containing the entire
> @@ -528,62 +270,6 @@ AeLocalLoadTable (
>
> return_ACPI_STATUS (Status);
> }
> -
> -
> -/*******************************************************************************
> - *
> - * FUNCTION: AcpiDbReadTableFromFile
> - *
> - * PARAMETERS: Filename - File where table is located
> - * Table - Where a pointer to the table is returned
> - *
> - * RETURN: Status
> - *
> - * DESCRIPTION: Get an ACPI table from a file
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -AcpiDbReadTableFromFile (
> - char *Filename,
> - ACPI_TABLE_HEADER **Table)
> -{
> - FILE *File;
> - UINT32 FileSize;
> - UINT32 TableLength;
> - ACPI_STATUS Status = AE_ERROR;
> -
> -
> - /* Open the file, get current size */
> -
> - File = fopen (Filename, "rb");
> - if (!File)
> - {
> - perror ("Could not open input file");
> - return (Status);
> - }
> -
> - FileSize = CmGetFileSize (File);
> - if (FileSize == ACPI_UINT32_MAX)
> - {
> - goto Exit;
> - }
> -
> - /* Get the entire file */
> -
> - fprintf (stderr, "Loading Acpi table from file %10s - Length %.8u (%06X)\n",
> - Filename, FileSize, FileSize);
> -
> - Status = AcpiDbReadTable (File, Table, &TableLength);
> - if (ACPI_FAILURE (Status))
> - {
> - AcpiOsPrintf ("Could not get table from the file\n");
> - }
> -
> -Exit:
> - fclose(File);
> - return (Status);
> - }
> #endif
>
>
> @@ -611,7 +297,7 @@ AcpiDbGetTableFromFile (
> BOOLEAN IsAmlTable = TRUE;
>
>
> - Status = AcpiDbReadTableFromFile (Filename, &Table);
> + Status = AcpiUtReadTableFromFile (Filename, &Table);
> if (ACPI_FAILURE (Status))
> {
> return (Status);
> diff --git a/src/acpica/source/components/debugger/dbtest.c b/src/acpica/source/components/debugger/dbtest.c
> index 34ccdac..fd7201a 100755
> --- a/src/acpica/source/components/debugger/dbtest.c
> +++ b/src/acpica/source/components/debugger/dbtest.c
> @@ -1114,6 +1114,7 @@ AcpiDbEvaluateOnePredefinedName (
> Status = AcpiGetObjectInfo (ObjHandle, &ObjInfo);
> if (ACPI_FAILURE (Status))
> {
> + ACPI_FREE (Pathname);
> return (Status);
> }
>
> diff --git a/src/acpica/source/components/disassembler/dmbuffer.c b/src/acpica/source/components/disassembler/dmbuffer.c
> index cfdf33b..70d28e3 100644
> --- a/src/acpica/source/components/disassembler/dmbuffer.c
> +++ b/src/acpica/source/components/disassembler/dmbuffer.c
> @@ -143,6 +143,8 @@ AcpiDmPldBuffer (
> UINT8 *ByteData,
> UINT32 ByteCount);
>
> +#define ACPI_BUFFER_BYTES_PER_LINE 8
> +
>
> /*******************************************************************************
> *
> @@ -166,6 +168,9 @@ AcpiDmDisasmByteList (
> UINT32 ByteCount)
> {
> UINT32 i;
> + UINT32 j;
> + UINT32 CurrentIndex;
> + UINT8 BufChar;
>
>
> if (!ByteCount)
> @@ -173,39 +178,68 @@ AcpiDmDisasmByteList (
> return;
> }
>
> - /* Dump the byte list */
> -
> - for (i = 0; i < ByteCount; i++)
> + for (i = 0; i < ByteCount; i += ACPI_BUFFER_BYTES_PER_LINE)
> {
> - /* New line every 8 bytes */
> + /* Line indent and offset prefix for each new line */
> +
> + AcpiDmIndent (Level);
> + if (ByteCount > ACPI_BUFFER_BYTES_PER_LINE)
> + {
> + AcpiOsPrintf ("/* %04X */ ", i);
> + }
> +
> + /* Dump the actual hex values */
>
> - if (((i % 8) == 0) && (i < ByteCount))
> + for (j = 0; j < ACPI_BUFFER_BYTES_PER_LINE; j++)
> {
> - if (i > 0)
> + CurrentIndex = i + j;
> + if (CurrentIndex >= ByteCount)
> {
> - AcpiOsPrintf ("\n");
> + /* Dump fill spaces */
> +
> + AcpiOsPrintf (" ");
> + continue;
> }
>
> - AcpiDmIndent (Level);
> - if (ByteCount > 8)
> + AcpiOsPrintf (" 0x%2.2X", ByteData[CurrentIndex]);
> +
> + /* Add comma if there are more bytes to display */
> +
> + if (CurrentIndex < (ByteCount - 1))
> {
> - AcpiOsPrintf ("/* %04X */ ", i);
> + AcpiOsPrintf (",");
> + }
> + else
> + {
> + AcpiOsPrintf (" ");
> }
> }
>
> - AcpiOsPrintf (" 0x%2.2X", (UINT32) ByteData[i]);
> -
> - /* Add comma if there are more bytes to display */
> + /* Dump the ASCII equivalents within a comment */
>
> - if (i < (ByteCount -1))
> + AcpiOsPrintf (" /* ");
> + for (j = 0; j < ACPI_BUFFER_BYTES_PER_LINE; j++)
> {
> - AcpiOsPrintf (",");
> + CurrentIndex = i + j;
> + if (CurrentIndex >= ByteCount)
> + {
> + break;
> + }
> +
> + BufChar = ByteData[CurrentIndex];
> + if (ACPI_IS_PRINT (BufChar))
> + {
> + AcpiOsPrintf ("%c", BufChar);
> + }
> + else
> + {
> + AcpiOsPrintf (".");
> + }
> }
> - }
>
> - if (Level)
> - {
> - AcpiOsPrintf ("\n");
> + /* Finished with this line */
> +
> + AcpiOsPrintf (" */\n");
> }
> }
>
> diff --git a/src/acpica/source/components/disassembler/dmwalk.c b/src/acpica/source/components/disassembler/dmwalk.c
> index ff72620..8c877ae 100644
> --- a/src/acpica/source/components/disassembler/dmwalk.c
> +++ b/src/acpica/source/components/disassembler/dmwalk.c
> @@ -1030,6 +1030,13 @@ AcpiDmAscendingOp (
> }
>
> /*
> + * The parent Op is guaranteed to be valid because of the flag
> + * ACPI_PARSEOP_PARAMLIST -- which means that this op is part of
> + * a parameter list and thus has a valid parent.
> + */
> + ParentOp = Op->Common.Parent;
> +
> + /*
> * Just completed a parameter node for something like "Buffer (param)".
> * Close the paren and open up the term list block with a brace
> */
> @@ -1037,25 +1044,24 @@ AcpiDmAscendingOp (
> {
> AcpiOsPrintf (")");
>
> - /* Emit description comment for Name() with a predefined ACPI name */
> -
> - ParentOp = Op->Common.Parent;
> - if (ParentOp)
> + /*
> + * Emit a description comment for a Name() operator that is a
> + * predefined ACPI name. Must check the grandparent.
> + */
> + ParentOp = ParentOp->Common.Parent;
> + if (ParentOp &&
> + (ParentOp->Asl.AmlOpcode == AML_NAME_OP))
> {
> - ParentOp = ParentOp->Common.Parent;
> - if (ParentOp && ParentOp->Asl.AmlOpcode == AML_NAME_OP)
> - {
> - AcpiDmPredefinedDescription (ParentOp);
> - }
> + AcpiDmPredefinedDescription (ParentOp);
> }
> +
> AcpiOsPrintf ("\n");
> AcpiDmIndent (Level - 1);
> AcpiOsPrintf ("{\n");
> }
> else
> {
> - Op->Common.Parent->Common.DisasmFlags |=
> - ACPI_PARSEOP_EMPTY_TERMLIST;
> + ParentOp->Common.DisasmFlags |= ACPI_PARSEOP_EMPTY_TERMLIST;
> AcpiOsPrintf (") {");
> }
> }
> diff --git a/src/acpica/source/components/executer/exfield.c b/src/acpica/source/components/executer/exfield.c
> index 3cb1b12..e8ddec8 100644
> --- a/src/acpica/source/components/executer/exfield.c
> +++ b/src/acpica/source/components/executer/exfield.c
> @@ -120,11 +120,80 @@
> #include "accommon.h"
> #include "acdispat.h"
> #include "acinterp.h"
> +#include "amlcode.h"
>
>
> #define _COMPONENT ACPI_EXECUTER
> ACPI_MODULE_NAME ("exfield")
>
> +/* Local prototypes */
> +
> +static UINT32
> +AcpiExGetSerialAccessLength (
> + UINT32 AccessorType,
> + UINT32 AccessLength);
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiExGetSerialAccessLength
> + *
> + * PARAMETERS: AccessorType - The type of the protocol indicated by region
> + * field access attributes
> + * AccessLength - The access length of the region field
> + *
> + * RETURN: Decoded access length
> + *
> + * DESCRIPTION: This routine returns the length of the GenericSerialBus
> + * protocol bytes
> + *
> + ******************************************************************************/
> +
> +static UINT32
> +AcpiExGetSerialAccessLength (
> + UINT32 AccessorType,
> + UINT32 AccessLength)
> +{
> + UINT32 Length;
> +
> +
> + switch (AccessorType)
> + {
> + case AML_FIELD_ATTRIB_QUICK:
> +
> + Length = 0;
> + break;
> +
> + case AML_FIELD_ATTRIB_SEND_RCV:
> + case AML_FIELD_ATTRIB_BYTE:
> +
> + Length = 1;
> + break;
> +
> + case AML_FIELD_ATTRIB_WORD:
> + case AML_FIELD_ATTRIB_WORD_CALL:
> +
> + Length = 2;
> + break;
> +
> + case AML_FIELD_ATTRIB_MULTIBYTE:
> + case AML_FIELD_ATTRIB_RAW_BYTES:
> + case AML_FIELD_ATTRIB_RAW_PROCESS:
> +
> + Length = AccessLength;
> + break;
> +
> + case AML_FIELD_ATTRIB_BLOCK:
> + case AML_FIELD_ATTRIB_BLOCK_CALL:
> + default:
> +
> + Length = ACPI_GSBUS_BUFFER_SIZE - 2;
> + break;
> + }
> +
> + return (Length);
> +}
> +
>
> /*******************************************************************************
> *
> @@ -152,6 +221,7 @@ AcpiExReadDataFromField (
> ACPI_SIZE Length;
> void *Buffer;
> UINT32 Function;
> + UINT16 AccessorType;
>
>
> ACPI_FUNCTION_TRACE_PTR (ExReadDataFromField, ObjDesc);
> @@ -201,8 +271,20 @@ AcpiExReadDataFromField (
> }
> else if (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS)
> {
> - Length = ACPI_GSBUS_BUFFER_SIZE;
> - Function = ACPI_READ | (ObjDesc->Field.Attribute << 16);
> + AccessorType = ObjDesc->Field.Attribute;
> + Length = AcpiExGetSerialAccessLength (AccessorType,
> + ObjDesc->Field.AccessLength);
> +
> + /*
> + * Add additional 2 bytes for modeled GenericSerialBus data buffer:
> + * typedef struct {
> + * BYTEStatus; // Byte 0 of the data buffer
> + * BYTELength; // Byte 1 of the data buffer
> + * BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer,
> + * }
> + */
> + Length += 2;
> + Function = ACPI_READ | (AccessorType << 16);
> }
> else /* IPMI */
> {
> @@ -323,6 +405,7 @@ AcpiExWriteDataToField (
> void *Buffer;
> ACPI_OPERAND_OBJECT *BufferDesc;
> UINT32 Function;
> + UINT16 AccessorType;
>
>
> ACPI_FUNCTION_TRACE_PTR (ExWriteDataToField, ObjDesc);
> @@ -382,8 +465,20 @@ AcpiExWriteDataToField (
> }
> else if (ObjDesc->Field.RegionObj->Region.SpaceId == ACPI_ADR_SPACE_GSBUS)
> {
> - Length = ACPI_GSBUS_BUFFER_SIZE;
> - Function = ACPI_WRITE | (ObjDesc->Field.Attribute << 16);
> + AccessorType = ObjDesc->Field.Attribute;
> + Length = AcpiExGetSerialAccessLength (AccessorType,
> + ObjDesc->Field.AccessLength);
> +
> + /*
> + * Add additional 2 bytes for modeled GenericSerialBus data buffer:
> + * typedef struct {
> + * BYTEStatus; // Byte 0 of the data buffer
> + * BYTELength; // Byte 1 of the data buffer
> + * BYTE[x-1]Data; // Bytes 2-x of the arbitrary length data buffer,
> + * }
> + */
> + Length += 2;
> + Function = ACPI_WRITE | (AccessorType << 16);
> }
> else /* IPMI */
> {
> diff --git a/src/acpica/source/components/hardware/hwregs.c b/src/acpica/source/components/hardware/hwregs.c
> index 9950579..24b4cf4 100644
> --- a/src/acpica/source/components/hardware/hwregs.c
> +++ b/src/acpica/source/components/hardware/hwregs.c
> @@ -382,17 +382,19 @@ AcpiHwClearAcpiStatus (
>
> Status = AcpiHwRegisterWrite (ACPI_REGISTER_PM1_STATUS,
> ACPI_BITMASK_ALL_FIXED_STATUS);
> +
> + AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags);
> +
> if (ACPI_FAILURE (Status))
> {
> - goto UnlockAndExit;
> + goto Exit;
> }
>
> /* Clear the GPE Bits in all GPE registers in all GPE blocks */
>
> Status = AcpiEvWalkGpeList (AcpiHwClearGpeBlock, NULL);
>
> -UnlockAndExit:
> - AcpiOsReleaseLock (AcpiGbl_HardwareLock, LockFlags);
> +Exit:
> return_ACPI_STATUS (Status);
> }
>
> diff --git a/src/acpica/source/components/namespace/nsobject.c b/src/acpica/source/components/namespace/nsobject.c
> index 7981e62..060157b 100644
> --- a/src/acpica/source/components/namespace/nsobject.c
> +++ b/src/acpica/source/components/namespace/nsobject.c
> @@ -337,6 +337,17 @@ AcpiNsDetachObject (
> }
> }
>
> + /*
> + * Detach the object from any data objects (which are still held by
> + * the namespace node)
> + */
> +
> + if (ObjDesc->Common.NextObject &&
> + ((ObjDesc->Common.NextObject)->Common.Type == ACPI_TYPE_LOCAL_DATA))
> + {
> + ObjDesc->Common.NextObject = NULL;
> + }
> +
> /* Reset the node type to untyped */
>
> Node->Type = ACPI_TYPE_ANY;
> diff --git a/src/acpica/source/components/tables/tbdata.c b/src/acpica/source/components/tables/tbdata.c
> index 818637e..1e4cbcd 100755
> --- a/src/acpica/source/components/tables/tbdata.c
> +++ b/src/acpica/source/components/tables/tbdata.c
> @@ -424,7 +424,43 @@ AcpiTbInvalidateTable (
>
> /******************************************************************************
> *
> - * FUNCTION: AcpiTbVerifyTable
> + * FUNCTION: AcpiTbValidateTempTable
> + *
> + * PARAMETERS: TableDesc - Table descriptor
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: This function is called to validate the table, the returned
> + * table descriptor is in "VALIDATED" state.
> + *
> + *****************************************************************************/
> +
> +ACPI_STATUS
> +AcpiTbValidateTempTable (
> + ACPI_TABLE_DESC *TableDesc)
> +{
> +
> + if (!TableDesc->Pointer && !AcpiGbl_VerifyTableChecksum)
> + {
> + /*
> + * Only validates the header of the table.
> + * Note that Length contains the size of the mapping after invoking
> + * this work around, this value is required by
> + * AcpiTbReleaseTempTable().
> + * We can do this because in AcpiInitTableDescriptor(), the Length
> + * field of the installed descriptor is filled with the actual
> + * table length obtaining from the table header.
> + */
> + TableDesc->Length = sizeof (ACPI_TABLE_HEADER);
> + }
> +
> + return (AcpiTbValidateTable (TableDesc));
> +}
> +
> +
> +/******************************************************************************
> + *
> + * FUNCTION: AcpiTbVerifyTempTable
> *
> * PARAMETERS: TableDesc - Table descriptor
> * Signature - Table signature to verify
> @@ -437,19 +473,19 @@ AcpiTbInvalidateTable (
> *****************************************************************************/
>
> ACPI_STATUS
> -AcpiTbVerifyTable (
> +AcpiTbVerifyTempTable (
> ACPI_TABLE_DESC *TableDesc,
> char *Signature)
> {
> ACPI_STATUS Status = AE_OK;
>
>
> - ACPI_FUNCTION_TRACE (TbVerifyTable);
> + ACPI_FUNCTION_TRACE (TbVerifyTempTable);
>
>
> /* Validate the table */
>
> - Status = AcpiTbValidateTable (TableDesc);
> + Status = AcpiTbValidateTempTable (TableDesc);
> if (ACPI_FAILURE (Status))
> {
> return_ACPI_STATUS (AE_NO_MEMORY);
> @@ -469,16 +505,19 @@ AcpiTbVerifyTable (
>
> /* Verify the checksum */
>
> - Status = AcpiTbVerifyChecksum (TableDesc->Pointer, TableDesc->Length);
> - if (ACPI_FAILURE (Status))
> + if (AcpiGbl_VerifyTableChecksum)
> {
> - ACPI_EXCEPTION ((AE_INFO, AE_NO_MEMORY,
> - "%4.4s " ACPI_PRINTF_UINT
> - " Attempted table install failed",
> - AcpiUtValidAcpiName (TableDesc->Signature.Ascii) ?
> - TableDesc->Signature.Ascii : "????",
> - ACPI_FORMAT_TO_UINT (TableDesc->Address)));
> - goto InvalidateAndExit;
> + Status = AcpiTbVerifyChecksum (TableDesc->Pointer, TableDesc->Length);
> + if (ACPI_FAILURE (Status))
> + {
> + ACPI_EXCEPTION ((AE_INFO, AE_NO_MEMORY,
> + "%4.4s " ACPI_PRINTF_UINT
> + " Attempted table install failed",
> + AcpiUtValidAcpiName (TableDesc->Signature.Ascii) ?
> + TableDesc->Signature.Ascii : "????",
> + ACPI_FORMAT_TO_UINT (TableDesc->Address)));
> + goto InvalidateAndExit;
> + }
> }
>
> return_ACPI_STATUS (AE_OK);
> diff --git a/src/acpica/source/components/tables/tbinstal.c b/src/acpica/source/components/tables/tbinstal.c
> index 4560d0f..ab0e879 100644
> --- a/src/acpica/source/components/tables/tbinstal.c
> +++ b/src/acpica/source/components/tables/tbinstal.c
> @@ -282,7 +282,7 @@ AcpiTbInstallFixedTable (
>
> /* Validate and verify a table before installation */
>
> - Status = AcpiTbVerifyTable (&NewTableDesc, Signature);
> + Status = AcpiTbVerifyTempTable (&NewTableDesc, Signature);
> if (ACPI_FAILURE (Status))
> {
> goto ReleaseAndExit;
> @@ -362,7 +362,7 @@ AcpiTbInstallStandardTable (
>
> /* Validate and verify a table before installation */
>
> - Status = AcpiTbVerifyTable (&NewTableDesc, NULL);
> + Status = AcpiTbVerifyTempTable (&NewTableDesc, NULL);
> if (ACPI_FAILURE (Status))
> {
> goto ReleaseAndExit;
> @@ -527,7 +527,7 @@ FinishOverride:
>
> /* Validate and verify a table before overriding */
>
> - Status = AcpiTbVerifyTable (&NewTableDesc, NULL);
> + Status = AcpiTbVerifyTempTable (&NewTableDesc, NULL);
> if (ACPI_FAILURE (Status))
> {
> return;
> @@ -549,7 +549,7 @@ FinishOverride:
> */
> AcpiTbInitTableDescriptor (OldTableDesc, NewTableDesc.Address,
> NewTableDesc.Flags, NewTableDesc.Pointer);
> - AcpiTbValidateTable (OldTableDesc);
> + AcpiTbValidateTempTable (OldTableDesc);
>
> /* Release the temporary table descriptor */
>
> diff --git a/src/acpica/source/components/tables/tbutils.c b/src/acpica/source/components/tables/tbutils.c
> index 7cac46a..438f92f 100644
> --- a/src/acpica/source/components/tables/tbutils.c
> +++ b/src/acpica/source/components/tables/tbutils.c
> @@ -499,10 +499,6 @@ NextTable:
> TableEntry += TableEntrySize;
> }
>
> - /*
> - * It is not possible to map more than one entry in some environments,
> - * so unmap the root table here before mapping other tables
> - */
> AcpiOsUnmapMemory (Table, Length);
>
> return_ACPI_STATUS (AE_OK);
> diff --git a/src/acpica/source/components/utilities/utbuffer.c b/src/acpica/source/components/utilities/utbuffer.c
> index c241f7d..608e8d4 100644
> --- a/src/acpica/source/components/utilities/utbuffer.c
> +++ b/src/acpica/source/components/utilities/utbuffer.c
> @@ -290,3 +290,138 @@ AcpiUtDebugDumpBuffer (
>
> AcpiUtDumpBuffer (Buffer, Count, Display, 0);
> }
> +
> +
> +#ifdef ACPI_APPLICATION
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiUtDumpBufferToFile
> + *
> + * PARAMETERS: File - File descriptor
> + * Buffer - Buffer to dump
> + * Count - Amount to dump, in bytes
> + * Display - BYTE, WORD, DWORD, or QWORD display:
> + * DB_BYTE_DISPLAY
> + * DB_WORD_DISPLAY
> + * DB_DWORD_DISPLAY
> + * DB_QWORD_DISPLAY
> + * BaseOffset - Beginning buffer offset (display only)
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Generic dump buffer in both hex and ascii to a file.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiUtDumpBufferToFile (
> + ACPI_FILE File,
> + UINT8 *Buffer,
> + UINT32 Count,
> + UINT32 Display,
> + UINT32 BaseOffset)
> +{
> + UINT32 i = 0;
> + UINT32 j;
> + UINT32 Temp32;
> + UINT8 BufChar;
> +
> +
> + if (!Buffer)
> + {
> + AcpiUtFilePrintf (File, "Null Buffer Pointer in DumpBuffer!\n");
> + return;
> + }
> +
> + if ((Count < 4) || (Count & 0x01))
> + {
> + Display = DB_BYTE_DISPLAY;
> + }
> +
> + /* Nasty little dump buffer routine! */
> +
> + while (i < Count)
> + {
> + /* Print current offset */
> +
> + AcpiUtFilePrintf (File, "%6.4X: ", (BaseOffset + i));
> +
> + /* Print 16 hex chars */
> +
> + for (j = 0; j < 16;)
> + {
> + if (i + j >= Count)
> + {
> + /* Dump fill spaces */
> +
> + AcpiUtFilePrintf (File, "%*s", ((Display * 2) + 1), " ");
> + j += Display;
> + continue;
> + }
> +
> + switch (Display)
> + {
> + case DB_BYTE_DISPLAY:
> + default: /* Default is BYTE display */
> +
> + AcpiUtFilePrintf (File, "%02X ", Buffer[(ACPI_SIZE) i + j]);
> + break;
> +
> + case DB_WORD_DISPLAY:
> +
> + ACPI_MOVE_16_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]);
> + AcpiUtFilePrintf (File, "%04X ", Temp32);
> + break;
> +
> + case DB_DWORD_DISPLAY:
> +
> + ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]);
> + AcpiUtFilePrintf (File, "%08X ", Temp32);
> + break;
> +
> + case DB_QWORD_DISPLAY:
> +
> + ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j]);
> + AcpiUtFilePrintf (File, "%08X", Temp32);
> +
> + ACPI_MOVE_32_TO_32 (&Temp32, &Buffer[(ACPI_SIZE) i + j + 4]);
> + AcpiUtFilePrintf (File, "%08X ", Temp32);
> + break;
> + }
> +
> + j += Display;
> + }
> +
> + /*
> + * Print the ASCII equivalent characters but watch out for the bad
> + * unprintable ones (printable chars are 0x20 through 0x7E)
> + */
> + AcpiUtFilePrintf (File, " ");
> + for (j = 0; j < 16; j++)
> + {
> + if (i + j >= Count)
> + {
> + AcpiUtFilePrintf (File, "\n");
> + return;
> + }
> +
> + BufChar = Buffer[(ACPI_SIZE) i + j];
> + if (ACPI_IS_PRINT (BufChar))
> + {
> + AcpiUtFilePrintf (File, "%c", BufChar);
> + }
> + else
> + {
> + AcpiUtFilePrintf (File, ".");
> + }
> + }
> +
> + /* Done with that line. */
> +
> + AcpiUtFilePrintf (File, "\n");
> + i += 16;
> + }
> +
> + return;
> +}
> +#endif
> diff --git a/src/acpica/source/components/utilities/utcopy.c b/src/acpica/source/components/utilities/utcopy.c
> index 4ca33bc..e6a71a7 100644
> --- a/src/acpica/source/components/utilities/utcopy.c
> +++ b/src/acpica/source/components/utilities/utcopy.c
> @@ -1135,5 +1135,12 @@ AcpiUtCopyIobjectToIobject (
> Status = AcpiUtCopySimpleObject (SourceDesc, *DestDesc);
> }
>
> + /* Delete the allocated object if copy failed */
> +
> + if (ACPI_FAILURE (Status))
> + {
> + AcpiUtRemoveReference(*DestDesc);
> + }
> +
> return_ACPI_STATUS (Status);
> }
> diff --git a/src/acpica/source/components/utilities/utdebug.c b/src/acpica/source/components/utilities/utdebug.c
> index 5a1f981..ddc0c38 100644
> --- a/src/acpica/source/components/utilities/utdebug.c
> +++ b/src/acpica/source/components/utilities/utdebug.c
> @@ -708,3 +708,33 @@ AcpiUtPtrExit (
> }
>
> #endif
> +
> +
> +#ifdef ACPI_APPLICATION
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiLogError
> + *
> + * PARAMETERS: Format - Printf format field
> + * ... - Optional printf arguments
> + *
> + * RETURN: None
> + *
> + * DESCRIPTION: Print error message to the console, used by applications.
> + *
> + ******************************************************************************/
> +
> +void ACPI_INTERNAL_VAR_XFACE
> +AcpiLogError (
> + const char *Format,
> + ...)
> +{
> + va_list Args;
> +
> + va_start (Args, Format);
> + (void) AcpiUtFileVprintf (ACPI_FILE_ERR, Format, Args);
> + va_end (Args);
> +}
> +
> +ACPI_EXPORT_SYMBOL (AcpiLogError)
> +#endif
> diff --git a/src/acpica/source/components/utilities/utfileio.c b/src/acpica/source/components/utilities/utfileio.c
> new file mode 100644
> index 0000000..78807f2
> --- /dev/null
> +++ b/src/acpica/source/components/utilities/utfileio.c
> @@ -0,0 +1,435 @@
> +/*******************************************************************************
> + *
> + * Module Name: utfileio - simple file I/O 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 "acpi.h"
> +#include "accommon.h"
> +#include "actables.h"
> +#include "acapps.h"
> +
> +#ifdef ACPI_ASL_COMPILER
> +#include "aslcompiler.h"
> +#endif
> +
> +
> +#define _COMPONENT ACPI_CA_DEBUGGER
> + ACPI_MODULE_NAME ("utfileio")
> +
> +
> +#ifdef ACPI_APPLICATION
> +
> +/* Local prototypes */
> +
> +static ACPI_STATUS
> +AcpiUtCheckTextModeCorruption (
> + UINT8 *Table,
> + UINT32 TableLength,
> + UINT32 FileLength);
> +
> +static ACPI_STATUS
> +AcpiUtReadTable (
> + FILE *fp,
> + ACPI_TABLE_HEADER **Table,
> + UINT32 *TableLength);
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiUtCheckTextModeCorruption
> + *
> + * PARAMETERS: Table - Table buffer
> + * TableLength - Length of table from the table header
> + * FileLength - Length of the file that contains the table
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Check table for text mode file corruption where all linefeed
> + * characters (LF) have been replaced by carriage return linefeed
> + * pairs (CR/LF).
> + *
> + ******************************************************************************/
> +
> +static ACPI_STATUS
> +AcpiUtCheckTextModeCorruption (
> + UINT8 *Table,
> + UINT32 TableLength,
> + UINT32 FileLength)
> +{
> + UINT32 i;
> + UINT32 Pairs = 0;
> +
> +
> + if (TableLength != FileLength)
> + {
> + ACPI_WARNING ((AE_INFO,
> + "File length (0x%X) is not the same as the table length (0x%X)",
> + FileLength, TableLength));
> + }
> +
> + /* Scan entire table to determine if each LF has been prefixed with a CR */
> +
> + for (i = 1; i < FileLength; i++)
> + {
> + if (Table[i] == 0x0A)
> + {
> + if (Table[i - 1] != 0x0D)
> + {
> + /* The LF does not have a preceding CR, table not corrupted */
> +
> + return (AE_OK);
> + }
> + else
> + {
> + /* Found a CR/LF pair */
> +
> + Pairs++;
> + }
> + i++;
> + }
> + }
> +
> + if (!Pairs)
> + {
> + return (AE_OK);
> + }
> +
> + /*
> + * Entire table scanned, each CR is part of a CR/LF pair --
> + * meaning that the table was treated as a text file somewhere.
> + *
> + * NOTE: We can't "fix" the table, because any existing CR/LF pairs in the
> + * original table are left untouched by the text conversion process --
> + * meaning that we cannot simply replace CR/LF pairs with LFs.
> + */
> + AcpiOsPrintf ("Table has been corrupted by text mode conversion\n");
> + AcpiOsPrintf ("All LFs (%u) were changed to CR/LF pairs\n", Pairs);
> + AcpiOsPrintf ("Table cannot be repaired!\n");
> + return (AE_BAD_VALUE);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiUtReadTable
> + *
> + * PARAMETERS: fp - File that contains table
> + * Table - Return value, buffer with table
> + * TableLength - Return value, length of table
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Load the DSDT from the file pointer
> + *
> + ******************************************************************************/
> +
> +static ACPI_STATUS
> +AcpiUtReadTable (
> + FILE *fp,
> + ACPI_TABLE_HEADER **Table,
> + UINT32 *TableLength)
> +{
> + ACPI_TABLE_HEADER TableHeader;
> + UINT32 Actual;
> + ACPI_STATUS Status;
> + UINT32 FileSize;
> + BOOLEAN StandardHeader = TRUE;
> + INT32 Count;
> +
> + /* Get the file size */
> +
> + FileSize = CmGetFileSize (fp);
> + if (FileSize == ACPI_UINT32_MAX)
> + {
> + return (AE_ERROR);
> + }
> +
> + if (FileSize < 4)
> + {
> + return (AE_BAD_HEADER);
> + }
> +
> + /* Read the signature */
> +
> + fseek (fp, 0, SEEK_SET);
> +
> + Count = fread (&TableHeader, 1, sizeof (ACPI_TABLE_HEADER), fp);
> + if (Count != sizeof (ACPI_TABLE_HEADER))
> + {
> + AcpiOsPrintf ("Could not read the table header\n");
> + return (AE_BAD_HEADER);
> + }
> +
> + /* The RSDP table does not have standard ACPI header */
> +
> + if (ACPI_VALIDATE_RSDP_SIG (TableHeader.Signature))
> + {
> + *TableLength = FileSize;
> + StandardHeader = FALSE;
> + }
> + else
> + {
> +
> +#if 0
> + /* Validate the table header/length */
> +
> + Status = AcpiTbValidateTableHeader (&TableHeader);
> + if (ACPI_FAILURE (Status))
> + {
> + AcpiOsPrintf ("Table header is invalid!\n");
> + return (Status);
> + }
> +#endif
> +
> + /* File size must be at least as long as the Header-specified length */
> +
> + if (TableHeader.Length > FileSize)
> + {
> + AcpiOsPrintf (
> + "TableHeader length [0x%X] greater than the input file size [0x%X]\n",
> + TableHeader.Length, FileSize);
> +
> +#ifdef ACPI_ASL_COMPILER
> + Status = FlCheckForAscii (fp, NULL, FALSE);
> + if (ACPI_SUCCESS (Status))
> + {
> + AcpiOsPrintf ("File appears to be ASCII only, must be binary\n",
> + TableHeader.Length, FileSize);
> + }
> +#endif
> + return (AE_BAD_HEADER);
> + }
> +
> +#ifdef ACPI_OBSOLETE_CODE
> + /* We only support a limited number of table types */
> +
> + if (!ACPI_COMPARE_NAME ((char *) TableHeader.Signature, ACPI_SIG_DSDT) &&
> + !ACPI_COMPARE_NAME ((char *) TableHeader.Signature, ACPI_SIG_PSDT) &&
> + !ACPI_COMPARE_NAME ((char *) TableHeader.Signature, ACPI_SIG_SSDT))
> + {
> + AcpiOsPrintf ("Table signature [%4.4s] is invalid or not supported\n",
> + (char *) TableHeader.Signature);
> + ACPI_DUMP_BUFFER (&TableHeader, sizeof (ACPI_TABLE_HEADER));
> + return (AE_ERROR);
> + }
> +#endif
> +
> + *TableLength = TableHeader.Length;
> + }
> +
> + /* Allocate a buffer for the table */
> +
> + *Table = AcpiOsAllocate ((size_t) FileSize);
> + if (!*Table)
> + {
> + AcpiOsPrintf (
> + "Could not allocate memory for ACPI table %4.4s (size=0x%X)\n",
> + TableHeader.Signature, *TableLength);
> + return (AE_NO_MEMORY);
> + }
> +
> + /* Get the rest of the table */
> +
> + fseek (fp, 0, SEEK_SET);
> + Actual = fread (*Table, 1, (size_t) FileSize, fp);
> + if (Actual == FileSize)
> + {
> + if (StandardHeader)
> + {
> + /* Now validate the checksum */
> +
> + Status = AcpiTbVerifyChecksum ((void *) *Table,
> + ACPI_CAST_PTR (ACPI_TABLE_HEADER, *Table)->Length);
> +
> + if (Status == AE_BAD_CHECKSUM)
> + {
> + Status = AcpiUtCheckTextModeCorruption ((UINT8 *) *Table,
> + FileSize, (*Table)->Length);
> + return (Status);
> + }
> + }
> + return (AE_OK);
> + }
> +
> + if (Actual > 0)
> + {
> + AcpiOsPrintf ("Warning - reading table, asked for %X got %X\n",
> + FileSize, Actual);
> + return (AE_OK);
> + }
> +
> + AcpiOsPrintf ("Error - could not read the table file\n");
> + AcpiOsFree (*Table);
> + *Table = NULL;
> + *TableLength = 0;
> + return (AE_ERROR);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiUtReadTableFromFile
> + *
> + * PARAMETERS: Filename - File where table is located
> + * Table - Where a pointer to the table is returned
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Get an ACPI table from a file
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiUtReadTableFromFile (
> + char *Filename,
> + ACPI_TABLE_HEADER **Table)
> +{
> + FILE *File;
> + UINT32 FileSize;
> + UINT32 TableLength;
> + ACPI_STATUS Status = AE_ERROR;
> +
> +
> + /* Open the file, get current size */
> +
> + File = fopen (Filename, "rb");
> + if (!File)
> + {
> + perror ("Could not open input file");
> + return (Status);
> + }
> +
> + FileSize = CmGetFileSize (File);
> + if (FileSize == ACPI_UINT32_MAX)
> + {
> + goto Exit;
> + }
> +
> + /* Get the entire file */
> +
> + fprintf (stderr, "Loading Acpi table from file %10s - Length %.8u (%06X)\n",
> + Filename, FileSize, FileSize);
> +
> + Status = AcpiUtReadTable (File, Table, &TableLength);
> + if (ACPI_FAILURE (Status))
> + {
> + AcpiOsPrintf ("Could not get table from the file\n");
> + }
> +
> +Exit:
> + fclose(File);
> + return (Status);
> +}
> +
> +#endif
> diff --git a/src/acpica/source/components/utilities/utglobal.c b/src/acpica/source/components/utilities/utglobal.c
> index a24abfc..be14ea2 100644
> --- a/src/acpica/source/components/utilities/utglobal.c
> +++ b/src/acpica/source/components/utilities/utglobal.c
> @@ -245,163 +245,6 @@ ACPI_FIXED_EVENT_INFO AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS] =
> };
> #endif /* !ACPI_REDUCED_HARDWARE */
>
> -
> -/*******************************************************************************
> - *
> - * FUNCTION: AcpiUtInitGlobals
> - *
> - * PARAMETERS: None
> - *
> - * RETURN: Status
> - *
> - * DESCRIPTION: Initialize ACPICA globals. All globals that require specific
> - * initialization should be initialized here. This allows for
> - * a warm restart.
> - *
> - ******************************************************************************/
> -
> -ACPI_STATUS
> -AcpiUtInitGlobals (
> - void)
> -{
> - ACPI_STATUS Status;
> - UINT32 i;
> -
> -
> - ACPI_FUNCTION_TRACE (UtInitGlobals);
> -
> -
> - /* Create all memory caches */
> -
> - Status = AcpiUtCreateCaches ();
> - if (ACPI_FAILURE (Status))
> - {
> - return_ACPI_STATUS (Status);
> - }
> -
> - /* Address Range lists */
> -
> - for (i = 0; i < ACPI_ADDRESS_RANGE_MAX; i++)
> - {
> - AcpiGbl_AddressRangeList[i] = NULL;
> - }
> -
> - /* Mutex locked flags */
> -
> - for (i = 0; i < ACPI_NUM_MUTEX; i++)
> - {
> - AcpiGbl_MutexInfo[i].Mutex = NULL;
> - AcpiGbl_MutexInfo[i].ThreadId = ACPI_MUTEX_NOT_ACQUIRED;
> - AcpiGbl_MutexInfo[i].UseCount = 0;
> - }
> -
> - for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++)
> - {
> - AcpiGbl_OwnerIdMask[i] = 0;
> - }
> -
> - /* Last OwnerID is never valid */
> -
> - AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000;
> -
> - /* Event counters */
> -
> - AcpiMethodCount = 0;
> - AcpiSciCount = 0;
> - AcpiGpeCount = 0;
> -
> - for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++)
> - {
> - AcpiFixedEventCount[i] = 0;
> - }
> -
> -#if (!ACPI_REDUCED_HARDWARE)
> -
> - /* GPE/SCI support */
> -
> - AcpiGbl_AllGpesInitialized = FALSE;
> - AcpiGbl_GpeXruptListHead = NULL;
> - AcpiGbl_GpeFadtBlocks[0] = NULL;
> - AcpiGbl_GpeFadtBlocks[1] = NULL;
> - AcpiCurrentGpeCount = 0;
> -
> - AcpiGbl_GlobalEventHandler = NULL;
> - AcpiGbl_SciHandlerList = NULL;
> -
> -#endif /* !ACPI_REDUCED_HARDWARE */
> -
> - /* Global handlers */
> -
> - AcpiGbl_GlobalNotify[0].Handler = NULL;
> - AcpiGbl_GlobalNotify[1].Handler = NULL;
> - AcpiGbl_ExceptionHandler = NULL;
> - AcpiGbl_InitHandler = NULL;
> - AcpiGbl_TableHandler = NULL;
> - AcpiGbl_InterfaceHandler = NULL;
> -
> - /* Global Lock support */
> -
> - AcpiGbl_GlobalLockSemaphore = NULL;
> - AcpiGbl_GlobalLockMutex = NULL;
> - AcpiGbl_GlobalLockAcquired = FALSE;
> - AcpiGbl_GlobalLockHandle = 0;
> - AcpiGbl_GlobalLockPresent = FALSE;
> -
> - /* Miscellaneous variables */
> -
> - AcpiGbl_DSDT = NULL;
> - AcpiGbl_CmSingleStep = FALSE;
> - AcpiGbl_Shutdown = FALSE;
> - AcpiGbl_NsLookupCount = 0;
> - AcpiGbl_PsFindCount = 0;
> - AcpiGbl_AcpiHardwarePresent = TRUE;
> - AcpiGbl_LastOwnerIdIndex = 0;
> - AcpiGbl_NextOwnerIdOffset = 0;
> - AcpiGbl_TraceDbgLevel = 0;
> - AcpiGbl_TraceDbgLayer = 0;
> - AcpiGbl_DebuggerConfiguration = DEBUGGER_THREADING;
> - AcpiGbl_DbOutputFlags = ACPI_DB_CONSOLE_OUTPUT;
> - AcpiGbl_OsiMutex = NULL;
> - AcpiGbl_RegMethodsExecuted = FALSE;
> -
> - /* Hardware oriented */
> -
> - AcpiGbl_EventsInitialized = FALSE;
> - AcpiGbl_SystemAwakeAndRunning = TRUE;
> -
> - /* Namespace */
> -
> - AcpiGbl_ModuleCodeList = NULL;
> - AcpiGbl_RootNode = NULL;
> - AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME;
> - AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED;
> - AcpiGbl_RootNodeStruct.Type = ACPI_TYPE_DEVICE;
> - AcpiGbl_RootNodeStruct.Parent = NULL;
> - AcpiGbl_RootNodeStruct.Child = NULL;
> - AcpiGbl_RootNodeStruct.Peer = NULL;
> - AcpiGbl_RootNodeStruct.Object = NULL;
> -
> -
> -#ifdef ACPI_DISASSEMBLER
> - AcpiGbl_ExternalList = NULL;
> - AcpiGbl_NumExternalMethods = 0;
> - AcpiGbl_ResolvedExternalMethods = 0;
> -#endif
> -
> -#ifdef ACPI_DEBUG_OUTPUT
> - AcpiGbl_LowestStackPointer = ACPI_CAST_PTR (ACPI_SIZE, ACPI_SIZE_MAX);
> -#endif
> -
> -#ifdef ACPI_DBG_TRACK_ALLOCATIONS
> - AcpiGbl_DisplayFinalMemStats = FALSE;
> - AcpiGbl_DisableMemTracking = FALSE;
> -#endif
> -
> - ACPI_DEBUGGER_EXEC (AcpiGbl_DbTerminateThreads = FALSE);
> -
> - return_ACPI_STATUS (AE_OK);
> -}
> -
> /* Public globals */
>
> ACPI_EXPORT_SYMBOL (AcpiGbl_FADT)
> diff --git a/src/acpica/source/components/utilities/utinit.c b/src/acpica/source/components/utilities/utinit.c
> index 46df0ab..8df0277 100644
> --- a/src/acpica/source/components/utilities/utinit.c
> +++ b/src/acpica/source/components/utilities/utinit.c
> @@ -188,6 +188,162 @@ AcpiUtFreeGpeLists (
> #endif /* !ACPI_REDUCED_HARDWARE */
>
>
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiUtInitGlobals
> + *
> + * PARAMETERS: None
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Initialize ACPICA globals. All globals that require specific
> + * initialization should be initialized here. This allows for
> + * a warm restart.
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiUtInitGlobals (
> + void)
> +{
> + ACPI_STATUS Status;
> + UINT32 i;
> +
> +
> + ACPI_FUNCTION_TRACE (UtInitGlobals);
> +
> +
> + /* Create all memory caches */
> +
> + Status = AcpiUtCreateCaches ();
> + if (ACPI_FAILURE (Status))
> + {
> + return_ACPI_STATUS (Status);
> + }
> +
> + /* Address Range lists */
> +
> + for (i = 0; i < ACPI_ADDRESS_RANGE_MAX; i++)
> + {
> + AcpiGbl_AddressRangeList[i] = NULL;
> + }
> +
> + /* Mutex locked flags */
> +
> + for (i = 0; i < ACPI_NUM_MUTEX; i++)
> + {
> + AcpiGbl_MutexInfo[i].Mutex = NULL;
> + AcpiGbl_MutexInfo[i].ThreadId = ACPI_MUTEX_NOT_ACQUIRED;
> + AcpiGbl_MutexInfo[i].UseCount = 0;
> + }
> +
> + for (i = 0; i < ACPI_NUM_OWNERID_MASKS; i++)
> + {
> + AcpiGbl_OwnerIdMask[i] = 0;
> + }
> +
> + /* Last OwnerID is never valid */
> +
> + AcpiGbl_OwnerIdMask[ACPI_NUM_OWNERID_MASKS - 1] = 0x80000000;
> +
> + /* Event counters */
> +
> + AcpiMethodCount = 0;
> + AcpiSciCount = 0;
> + AcpiGpeCount = 0;
> +
> + for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++)
> + {
> + AcpiFixedEventCount[i] = 0;
> + }
> +
> +#if (!ACPI_REDUCED_HARDWARE)
> +
> + /* GPE/SCI support */
> +
> + AcpiGbl_AllGpesInitialized = FALSE;
> + AcpiGbl_GpeXruptListHead = NULL;
> + AcpiGbl_GpeFadtBlocks[0] = NULL;
> + AcpiGbl_GpeFadtBlocks[1] = NULL;
> + AcpiCurrentGpeCount = 0;
> +
> + AcpiGbl_GlobalEventHandler = NULL;
> + AcpiGbl_SciHandlerList = NULL;
> +
> +#endif /* !ACPI_REDUCED_HARDWARE */
> +
> + /* Global handlers */
> +
> + AcpiGbl_GlobalNotify[0].Handler = NULL;
> + AcpiGbl_GlobalNotify[1].Handler = NULL;
> + AcpiGbl_ExceptionHandler = NULL;
> + AcpiGbl_InitHandler = NULL;
> + AcpiGbl_TableHandler = NULL;
> + AcpiGbl_InterfaceHandler = NULL;
> +
> + /* Global Lock support */
> +
> + AcpiGbl_GlobalLockSemaphore = NULL;
> + AcpiGbl_GlobalLockMutex = NULL;
> + AcpiGbl_GlobalLockAcquired = FALSE;
> + AcpiGbl_GlobalLockHandle = 0;
> + AcpiGbl_GlobalLockPresent = FALSE;
> +
> + /* Miscellaneous variables */
> +
> + AcpiGbl_DSDT = NULL;
> + AcpiGbl_CmSingleStep = FALSE;
> + AcpiGbl_Shutdown = FALSE;
> + AcpiGbl_NsLookupCount = 0;
> + AcpiGbl_PsFindCount = 0;
> + AcpiGbl_AcpiHardwarePresent = TRUE;
> + AcpiGbl_LastOwnerIdIndex = 0;
> + AcpiGbl_NextOwnerIdOffset = 0;
> + AcpiGbl_TraceDbgLevel = 0;
> + AcpiGbl_TraceDbgLayer = 0;
> + AcpiGbl_DebuggerConfiguration = DEBUGGER_THREADING;
> + AcpiGbl_OsiMutex = NULL;
> + AcpiGbl_RegMethodsExecuted = FALSE;
> +
> + /* Hardware oriented */
> +
> + AcpiGbl_EventsInitialized = FALSE;
> + AcpiGbl_SystemAwakeAndRunning = TRUE;
> +
> + /* Namespace */
> +
> + AcpiGbl_ModuleCodeList = NULL;
> + AcpiGbl_RootNode = NULL;
> + AcpiGbl_RootNodeStruct.Name.Integer = ACPI_ROOT_NAME;
> + AcpiGbl_RootNodeStruct.DescriptorType = ACPI_DESC_TYPE_NAMED;
> + AcpiGbl_RootNodeStruct.Type = ACPI_TYPE_DEVICE;
> + AcpiGbl_RootNodeStruct.Parent = NULL;
> + AcpiGbl_RootNodeStruct.Child = NULL;
> + AcpiGbl_RootNodeStruct.Peer = NULL;
> + AcpiGbl_RootNodeStruct.Object = NULL;
> +
> +
> +#ifdef ACPI_DISASSEMBLER
> + AcpiGbl_ExternalList = NULL;
> + AcpiGbl_NumExternalMethods = 0;
> + AcpiGbl_ResolvedExternalMethods = 0;
> +#endif
> +
> +#ifdef ACPI_DEBUG_OUTPUT
> + AcpiGbl_LowestStackPointer = ACPI_CAST_PTR (ACPI_SIZE, ACPI_SIZE_MAX);
> +#endif
> +
> +#ifdef ACPI_DBG_TRACK_ALLOCATIONS
> + AcpiGbl_DisplayFinalMemStats = FALSE;
> + AcpiGbl_DisableMemTracking = FALSE;
> +#endif
> +
> + ACPI_DEBUGGER_EXEC (AcpiGbl_DbTerminateThreads = FALSE);
> +
> + return_ACPI_STATUS (AE_OK);
> +}
> +
> +
> /******************************************************************************
> *
> * FUNCTION: AcpiUtTerminate
> diff --git a/src/acpica/source/components/utilities/utprint.c b/src/acpica/source/components/utilities/utprint.c
> new file mode 100644
> index 0000000..d1bcccf
> --- /dev/null
> +++ b/src/acpica/source/components/utilities/utprint.c
> @@ -0,0 +1,868 @@
> +/******************************************************************************
> + *
> + * Module Name: utprint - Formatted printing 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 "acpi.h"
> +#include "accommon.h"
> +
> +#define _COMPONENT ACPI_UTILITIES
> + ACPI_MODULE_NAME ("utprint")
> +
> +
> +#define ACPI_FORMAT_SIGN 0x01
> +#define ACPI_FORMAT_SIGN_PLUS 0x02
> +#define ACPI_FORMAT_SIGN_PLUS_SPACE 0x04
> +#define ACPI_FORMAT_ZERO 0x08
> +#define ACPI_FORMAT_LEFT 0x10
> +#define ACPI_FORMAT_UPPER 0x20
> +#define ACPI_FORMAT_PREFIX 0x40
> +
> +
> +/* Local prototypes */
> +
> +static ACPI_SIZE
> +AcpiUtBoundStringLength (
> + const char *String,
> + ACPI_SIZE Count);
> +
> +static char *
> +AcpiUtBoundStringOutput (
> + char *String,
> + const char *End,
> + char c);
> +
> +static char *
> +AcpiUtFormatNumber (
> + char *String,
> + char *End,
> + UINT64 Number,
> + UINT8 Base,
> + INT32 Width,
> + INT32 Precision,
> + UINT8 Type);
> +
> +static char *
> +AcpiUtPutNumber (
> + char *String,
> + UINT64 Number,
> + UINT8 Base,
> + BOOLEAN Upper);
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiUtBoundStringLength
> + *
> + * PARAMETERS: String - String with boundary
> + * Count - Boundary of the string
> + *
> + * RETURN: Length of the string.
> + *
> + * DESCRIPTION: Calculate the length of a string with boundary.
> + *
> + ******************************************************************************/
> +
> +static ACPI_SIZE
> +AcpiUtBoundStringLength (
> + const char *String,
> + ACPI_SIZE Count)
> +{
> + UINT32 Length = 0;
> +
> +
> + while (*String && Count)
> + {
> + Length++;
> + String++;
> + Count--;
> + }
> +
> + return (Length);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiUtBoundStringOutput
> + *
> + * PARAMETERS: String - String with boundary
> + * End - Boundary of the string
> + * c - Character to be output to the string
> + *
> + * RETURN: Updated position for next valid character
> + *
> + * DESCRIPTION: Output a character into a string with boundary check.
> + *
> + ******************************************************************************/
> +
> +static char *
> +AcpiUtBoundStringOutput (
> + char *String,
> + const char *End,
> + char c)
> +{
> +
> + if (String < End)
> + {
> + *String = c;
> + }
> + ++String;
> +
> + return (String);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiUtPutNumber
> + *
> + * PARAMETERS: String - Buffer to hold reverse-ordered string
> + * Number - Integer to be converted
> + * Base - Base of the integer
> + * Upper - Whether or not using upper cased digits
> + *
> + * RETURN: Updated position for next valid character
> + *
> + * DESCRIPTION: Convert an integer into a string, note that, the string holds a
> + * reversed ordered number without the trailing zero.
> + *
> + ******************************************************************************/
> +
> +static char *
> +AcpiUtPutNumber (
> + char *String,
> + UINT64 Number,
> + UINT8 Base,
> + BOOLEAN Upper)
> +{
> + const char LowerDigits[] = "0123456789abcdef";
> + const char UpperDigits[] = "0123456789ABCDEF";
> + const char *Digits;
> + UINT64 DigitIndex;
> + char *Pos;
> +
> +
> + Pos = String;
> + Digits = Upper ? UpperDigits : LowerDigits;
> +
> + if (Number == 0)
> + {
> + *(Pos++) = '0';
> + }
> + else
> + {
> + while (Number)
> + {
> + (void) AcpiUtDivide (Number, Base, &Number, &DigitIndex);
> + *(Pos++) = Digits[DigitIndex];
> + }
> + }
> + /* *(Pos++) = '0'; */
> +
> + return (Pos);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiUtScanNumber
> + *
> + * PARAMETERS: String - String buffer
> + * NumberPtr - Where the number is returned
> + *
> + * RETURN: Updated position for next valid character
> + *
> + * DESCRIPTION: Scan a string for a decimal integer.
> + *
> + ******************************************************************************/
> +
> +const char *
> +AcpiUtScanNumber (
> + const char *String,
> + UINT64 *NumberPtr)
> +{
> + UINT64 Number = 0;
> +
> +
> + while (ACPI_IS_DIGIT (*String))
> + {
> + Number *= 10;
> + Number += *(String++) - '0';
> + }
> + *NumberPtr = Number;
> +
> + return (String);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiUtPrintNumber
> + *
> + * PARAMETERS: String - String buffer
> + * Number - The number to be converted
> + *
> + * RETURN: Updated position for next valid character
> + *
> + * DESCRIPTION: Print a decimal integer into a string.
> + *
> + ******************************************************************************/
> +
> +const char *
> +AcpiUtPrintNumber (
> + char *String,
> + UINT64 Number)
> +{
> + char AsciiString[20];
> + const char *Pos1;
> + char *Pos2;
> +
> +
> + Pos1 = AcpiUtPutNumber (AsciiString, Number, 10, FALSE);
> + Pos2 = String;
> +
> + while (Pos1 != AsciiString)
> + {
> + *(Pos2++) = *(--Pos1);
> + }
> + *Pos2 = 0;
> +
> + return (String);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiUtFormatNumber
> + *
> + * PARAMETERS: String - String buffer with boundary
> + * End - Boundary of the string
> + * Number - The number to be converted
> + * Base - Base of the integer
> + * Width - Field width
> + * Precision - Precision of the integer
> + * Type - Special printing flags
> + *
> + * RETURN: Updated position for next valid character
> + *
> + * DESCRIPTION: Print an integer into a string with any base and any precision.
> + *
> + ******************************************************************************/
> +
> +static char *
> +AcpiUtFormatNumber (
> + char *String,
> + char *End,
> + UINT64 Number,
> + UINT8 Base,
> + INT32 Width,
> + INT32 Precision,
> + UINT8 Type)
> +{
> + char Sign;
> + char Zero;
> + BOOLEAN NeedPrefix;
> + BOOLEAN Upper;
> + INT32 i;
> + char ReversedString[66];
> +
> +
> + /* Perform sanity checks */
> +
> + if (Base < 2 || Base > 16)
> + {
> + return NULL;
> + }
> + if (Type & ACPI_FORMAT_LEFT)
> + {
> + Type &= ~ACPI_FORMAT_ZERO;
> + }
> +
> + NeedPrefix = ((Type & ACPI_FORMAT_PREFIX) && Base != 10) ? TRUE : FALSE;
> + Upper = (Type & ACPI_FORMAT_UPPER) ? TRUE : FALSE;
> + Zero = (Type & ACPI_FORMAT_ZERO) ? '0' : ' ';
> +
> + /* Calculate size according to sign and prefix */
> +
> + Sign = '\0';
> + if (Type & ACPI_FORMAT_SIGN)
> + {
> + if ((INT64) Number < 0)
> + {
> + Sign = '-';
> + Number = - (INT64) Number;
> + Width--;
> + }
> + else if (Type & ACPI_FORMAT_SIGN_PLUS)
> + {
> + Sign = '+';
> + Width--;
> + }
> + else if (Type & ACPI_FORMAT_SIGN_PLUS_SPACE)
> + {
> + Sign = ' ';
> + Width--;
> + }
> + }
> + if (NeedPrefix)
> + {
> + Width--;
> + if (Base == 16)
> + {
> + Width--;
> + }
> + }
> +
> + /* Generate full string in reverse order */
> +
> + i = ACPI_PTR_DIFF (
> + AcpiUtPutNumber (ReversedString, Number, Base, Upper),
> + ReversedString);
> +
> + /* Printing 100 using %2d gives "100", not "00" */
> +
> + if (i > Precision)
> + {
> + Precision = i;
> + }
> + Width -= Precision;
> +
> + /* Output the string */
> +
> + if (!(Type & (ACPI_FORMAT_ZERO | ACPI_FORMAT_LEFT)))
> + {
> + while (--Width >= 0)
> + {
> + String = AcpiUtBoundStringOutput (String, End, ' ');
> + }
> + }
> + if (Sign)
> + {
> + String = AcpiUtBoundStringOutput (String, End, Sign);
> + }
> + if (NeedPrefix)
> + {
> + String = AcpiUtBoundStringOutput (String, End, '0');
> + if (Base == 16)
> + {
> + String = AcpiUtBoundStringOutput (String, End,
> + Upper ? 'X' : 'x');
> + }
> + }
> + if (!(Type & ACPI_FORMAT_LEFT))
> + {
> + while (--Width >= 0)
> + {
> + String = AcpiUtBoundStringOutput (String, End, Zero);
> + }
> + }
> + while (i <= --Precision)
> + {
> + String = AcpiUtBoundStringOutput (String, End, '0');
> + }
> + while (--i >= 0)
> + {
> + String = AcpiUtBoundStringOutput (String, End,
> + ReversedString[i]);
> + }
> + while (--Width >= 0)
> + {
> + String = AcpiUtBoundStringOutput (String, End, ' ');
> + }
> +
> + return (String);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiUtVsnprintf
> + *
> + * PARAMETERS: String - String with boundary
> + * Size - Boundary of the string
> + * Format - Standard printf format
> + * Args - Argument list
> + *
> + * RETURN: Size of successfully output bytes
> + *
> + * DESCRIPTION: Formatted output to a string using argument list pointer.
> + *
> + ******************************************************************************/
> +
> +int
> +AcpiUtVsnprintf (
> + char *String,
> + ACPI_SIZE Size,
> + const char *Format,
> + va_list Args)
> +{
> + UINT8 Base = 10;
> + UINT8 Type = 0;
> + INT32 Width = -1;
> + INT32 Precision = -1;
> + char Qualifier = 0;
> + UINT64 Number;
> + char *Pos;
> + char *End;
> + char c;
> + const char *s;
> + const void *p;
> + INT32 Length;
> + int i;
> +
> +
> + Pos = String;
> + End = String + Size;
> +
> + for (; *Format ; ++Format)
> + {
> + if (*Format != '%')
> + {
> + Pos = AcpiUtBoundStringOutput (Pos, End, *Format);
> + continue;
> + }
> +
> + /* Process sign */
> +
> + do
> + {
> + ++Format;
> + if (*Format == '#')
> + {
> + Type |= ACPI_FORMAT_PREFIX;
> + }
> + else if (*Format == '0')
> + {
> + Type |= ACPI_FORMAT_ZERO;
> + }
> + else if (*Format == '+')
> + {
> + Type |= ACPI_FORMAT_SIGN_PLUS;
> + }
> + else if (*Format == ' ')
> + {
> + Type |= ACPI_FORMAT_SIGN_PLUS_SPACE;
> + }
> + else if (*Format == '-')
> + {
> + Type |= ACPI_FORMAT_LEFT;
> + }
> + else
> + {
> + break;
> + }
> + } while (1);
> +
> + /* Process width */
> +
> + if (ACPI_IS_DIGIT (*Format))
> + {
> + Format = AcpiUtScanNumber (Format, &Number);
> + Width = (INT32) Number;
> + }
> + else if (*Format == '*')
> + {
> + ++Format;
> + Width = va_arg(Args, int);
> + if (Width < 0)
> + {
> + Width = -Width;
> + Type |= ACPI_FORMAT_LEFT;
> + }
> + }
> +
> + /* Process precision */
> +
> + if (*Format == '.')
> + {
> + ++Format;
> + if (ACPI_IS_DIGIT(*Format))
> + {
> + Format = AcpiUtScanNumber (Format, &Number);
> + Precision = (INT32) Number;
> + }
> + else if (*Format == '*')
> + {
> + ++Format;
> + Precision = va_arg(Args, int);
> + }
> + if (Precision < 0)
> + {
> + Precision = 0;
> + }
> + }
> +
> + /* Process qualifier */
> +
> + if (*Format == 'h' || *Format == 'l' || *Format == 'L')
> + {
> + Qualifier = *Format;
> + ++Format;
> + if (Qualifier == 'l' && *Format == 'l')
> + {
> + Qualifier = 'L';
> + ++Format;
> + }
> + }
> +
> + switch (*Format)
> + {
> + case '%':
> +
> + Pos = AcpiUtBoundStringOutput (Pos, End, '%');
> + continue;
> +
> + case 'c':
> +
> + if (!(Type & ACPI_FORMAT_LEFT))
> + {
> + while (--Width > 0)
> + {
> + Pos = AcpiUtBoundStringOutput (Pos, End, ' ');
> + }
> + }
> + c = (char) va_arg (Args, int);
> + Pos = AcpiUtBoundStringOutput (Pos, End, c);
> + while (--Width > 0)
> + {
> + Pos = AcpiUtBoundStringOutput (Pos, End, ' ');
> + }
> + continue;
> +
> + case 's':
> +
> + s = va_arg (Args, char *);
> + if (!s)
> + {
> + s = "<NULL>";
> + }
> + Length = AcpiUtBoundStringLength (s, Precision);
> + if (!(Type & ACPI_FORMAT_LEFT))
> + {
> + while (Length < Width--)
> + {
> + Pos = AcpiUtBoundStringOutput (Pos, End, ' ');
> + }
> + }
> + for (i = 0; i < Length; ++i)
> + {
> + Pos = AcpiUtBoundStringOutput (Pos, End, *s);
> + ++s;
> + }
> + while (Length < Width--)
> + {
> + Pos = AcpiUtBoundStringOutput (Pos, End, ' ');
> + }
> + continue;
> +
> + case 'o':
> +
> + Base = 8;
> + break;
> +
> + case 'X':
> +
> + Type |= ACPI_FORMAT_UPPER;
> +
> + case 'x':
> +
> + Base = 16;
> + break;
> +
> + case 'd':
> + case 'i':
> +
> + Type |= ACPI_FORMAT_SIGN;
> +
> + case 'u':
> +
> + break;
> +
> + case 'p':
> +
> + if (Width == -1)
> + {
> + Width = 2 * sizeof (void *);
> + Type |= ACPI_FORMAT_ZERO;
> + }
> + p = va_arg (Args, void *);
> + Pos = AcpiUtFormatNumber (Pos, End,
> + ACPI_TO_INTEGER (p),
> + 16, Width, Precision, Type);
> + continue;
> +
> + default:
> +
> + Pos = AcpiUtBoundStringOutput (Pos, End, '%');
> + if (*Format)
> + {
> + Pos = AcpiUtBoundStringOutput (Pos, End, *Format);
> + }
> + else
> + {
> + --Format;
> + }
> + continue;
> + }
> +
> + if (Qualifier == 'L')
> + {
> + Number = va_arg (Args, UINT64);
> + if (Type & ACPI_FORMAT_SIGN)
> + {
> + Number = (INT64) Number;
> + }
> + }
> + else if (Qualifier == 'l')
> + {
> + Number = va_arg (Args, unsigned long);
> + if (Type & ACPI_FORMAT_SIGN)
> + {
> + Number = (INT32) Number;
> + }
> + }
> + else if (Qualifier == 'h')
> + {
> + Number = (UINT16) va_arg (Args, int);
> + if (Type & ACPI_FORMAT_SIGN)
> + {
> + Number = (INT16) Number;
> + }
> + }
> + else
> + {
> + Number = va_arg (Args, unsigned int);
> + if (Type & ACPI_FORMAT_SIGN)
> + {
> + Number = (signed int) Number;
> + }
> + }
> + Pos = AcpiUtFormatNumber(Pos, End, Number, Base,
> + Width, Precision, Type);
> + }
> +
> + if (Size > 0)
> + {
> + if (Pos < End)
> + {
> + *Pos = '\0';
> + }
> + else
> + {
> + End[-1] = '\0';
> + }
> + }
> +
> + return (ACPI_PTR_DIFF (Pos, String));
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiUtSnprintf
> + *
> + * PARAMETERS: String - String with boundary
> + * Size - Boundary of the string
> + * Format, ... - Standard printf format
> + *
> + * RETURN: Size of successfully output bytes
> + *
> + * DESCRIPTION: Formatted output to a string.
> + *
> + ******************************************************************************/
> +
> +int
> +AcpiUtSnprintf (
> + char *String,
> + ACPI_SIZE Size,
> + const char *Format,
> + ...)
> +{
> + va_list Args;
> + int Length;
> +
> +
> + va_start (Args, Format);
> + Length = AcpiUtVsnprintf (String, Size, Format, Args);
> + va_end (Args);
> +
> + return (Length);
> +}
> +
> +
> +#ifdef ACPI_APPLICATION
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiUtFileVprintf
> + *
> + * PARAMETERS: File - File descriptor
> + * Format - Standard printf format
> + * Args - Argument list
> + *
> + * RETURN: Size of successfully output bytes
> + *
> + * DESCRIPTION: Formatted output to a file using argument list pointer.
> + *
> + ******************************************************************************/
> +
> +int
> +AcpiUtFileVprintf (
> + ACPI_FILE File,
> + const char *Format,
> + va_list Args)
> +{
> + ACPI_CPU_FLAGS Flags;
> + int Length;
> +
> +
> + Flags = AcpiOsAcquireLock (AcpiGbl_PrintLock);
> + Length = AcpiUtVsnprintf(AcpiGbl_PrintBuffer,
> + sizeof (AcpiGbl_PrintBuffer), Format, Args);
> + (void) AcpiOsWriteFile (File, AcpiGbl_PrintBuffer, Length, 1);
> + AcpiOsReleaseLock (AcpiGbl_PrintLock, Flags);
> +
> + return (Length);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiUtFilePrintf
> + *
> + * PARAMETERS: File - File descriptor
> + * Format, ... - Standard printf format
> + *
> + * RETURN: Size of successfully output bytes
> + *
> + * DESCRIPTION: Formatted output to a file.
> + *
> + ******************************************************************************/
> +
> +int
> +AcpiUtFilePrintf (
> + ACPI_FILE File,
> + const char *Format,
> + ...)
> +{
> + va_list Args;
> + int Length;
> +
> +
> + va_start (Args, Format);
> + Length = AcpiUtFileVprintf (File, Format, Args);
> + va_end (Args);
> +
> + return (Length);
> +}
> +#endif
> diff --git a/src/acpica/source/include/acapps.h b/src/acpica/source/include/acapps.h
> index 63f879e..6536048 100644
> --- a/src/acpica/source/include/acapps.h
> +++ b/src/acpica/source/include/acapps.h
> @@ -156,10 +156,13 @@
> /* Macros for usage messages */
>
> #define ACPI_USAGE_HEADER(Usage) \
> - printf ("Usage: %s\nOptions:\n", Usage);
> + AcpiOsPrintf ("Usage: %s\nOptions:\n", Usage);
> +
> +#define ACPI_USAGE_TEXT(Description) \
> + AcpiOsPrintf (Description);
>
> #define ACPI_OPTION(Name, Description) \
> - printf (" %-18s%s\n", Name, Description);
> + AcpiOsPrintf (" %-18s%s\n", Name, Description);
>
>
> #define FILE_SUFFIX_DISASSEMBLY "dsl"
> @@ -191,7 +194,7 @@ extern char *AcpiGbl_Optarg;
> */
> UINT32
> CmGetFileSize (
> - FILE *File);
> + ACPI_FILE File);
>
>
> #ifndef ACPI_DUMP_APP
> diff --git a/src/acpica/source/include/acdebug.h b/src/acpica/source/include/acdebug.h
> index 1807c31..b6105c2 100644
> --- a/src/acpica/source/include/acdebug.h
> +++ b/src/acpica/source/include/acdebug.h
> @@ -449,11 +449,6 @@ AcpiDbGetTableFromFile (
> char *Filename,
> ACPI_TABLE_HEADER **Table);
>
> -ACPI_STATUS
> -AcpiDbReadTableFromFile (
> - char *Filename,
> - ACPI_TABLE_HEADER **Table);
> -
>
> /*
> * dbhistry - debugger HISTORY command
> diff --git a/src/acpica/source/include/acglobal.h b/src/acpica/source/include/acglobal.h
> index d16a23d..a3783a4 100644
> --- a/src/acpica/source/include/acglobal.h
> +++ b/src/acpica/source/include/acglobal.h
> @@ -373,7 +373,7 @@ ACPI_GLOBAL (UINT32, AcpiGbl_TraceDbgLayer);
> *
> ****************************************************************************/
>
> -ACPI_GLOBAL (UINT8, AcpiGbl_DbOutputFlags);
> +ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DbOutputFlags, ACPI_DB_CONSOLE_OUTPUT);
>
> #ifdef ACPI_DISASSEMBLER
>
> @@ -439,6 +439,12 @@ ACPI_GLOBAL (UINT32, AcpiGbl_NumObjects);
> #ifdef ACPI_APPLICATION
>
> ACPI_INIT_GLOBAL (ACPI_FILE, AcpiGbl_DebugFile, NULL);
> +ACPI_INIT_GLOBAL (ACPI_FILE, AcpiGbl_OutputFile, NULL);
> +
> +/* Print buffer */
> +
> +ACPI_GLOBAL (ACPI_SPINLOCK, AcpiGbl_PrintLock); /* For print buffer */
> +ACPI_GLOBAL (char, AcpiGbl_PrintBuffer[1024]);
>
> #endif /* ACPI_APPLICATION */
>
> diff --git a/src/acpica/source/include/acnames.h b/src/acpica/source/include/acnames.h
> index 107c6c1..bde34f5 100644
> --- a/src/acpica/source/include/acnames.h
> +++ b/src/acpica/source/include/acnames.h
> @@ -127,7 +127,6 @@
> #define METHOD_NAME__HID "_HID"
> #define METHOD_NAME__INI "_INI"
> #define METHOD_NAME__PLD "_PLD"
> -#define METHOD_NAME__PRP "_PRP"
> #define METHOD_NAME__PRS "_PRS"
> #define METHOD_NAME__PRT "_PRT"
> #define METHOD_NAME__PRW "_PRW"
> diff --git a/src/acpica/source/include/acpi.h b/src/acpica/source/include/acpi.h
> index 9c8bc8d..3f39932 100644
> --- a/src/acpica/source/include/acpi.h
> +++ b/src/acpica/source/include/acpi.h
> @@ -134,8 +134,6 @@
> #include "acrestyp.h" /* Resource Descriptor structs */
> #include "acpiosxf.h" /* OSL interfaces (ACPICA-to-OS) */
> #include "acpixf.h" /* ACPI core subsystem external interfaces */
> -#ifdef ACPI_NATIVE_INTERFACE_HEADER
> -#include ACPI_NATIVE_INTERFACE_HEADER
> -#endif
> +#include "platform/acenvex.h" /* Extra environment-specific items */
>
> #endif /* __ACPI_H__ */
> diff --git a/src/acpica/source/include/acpiosxf.h b/src/acpica/source/include/acpiosxf.h
> index 00922c7..21e6ed9 100644
> --- a/src/acpica/source/include/acpiosxf.h
> +++ b/src/acpica/source/include/acpiosxf.h
> @@ -623,4 +623,53 @@ AcpiOsCloseDirectory (
> #endif
>
>
> +/*
> + * File I/O and related support
> + */
> +#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenFile
> +ACPI_FILE
> +AcpiOsOpenFile (
> + const char *Path,
> + UINT8 Modes);
> +#endif
> +
> +#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseFile
> +void
> +AcpiOsCloseFile (
> + ACPI_FILE File);
> +#endif
> +
> +#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadFile
> +int
> +AcpiOsReadFile (
> + ACPI_FILE File,
> + void *Buffer,
> + ACPI_SIZE Size,
> + ACPI_SIZE Count);
> +#endif
> +
> +#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWriteFile
> +int
> +AcpiOsWriteFile (
> + ACPI_FILE File,
> + void *Buffer,
> + ACPI_SIZE Size,
> + ACPI_SIZE Count);
> +#endif
> +
> +#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetFileOffset
> +long
> +AcpiOsGetFileOffset (
> + ACPI_FILE File);
> +#endif
> +
> +#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsSetFileOffset
> +ACPI_STATUS
> +AcpiOsSetFileOffset (
> + ACPI_FILE File,
> + long Offset,
> + UINT8 From);
> +#endif
> +
> +
> #endif /* __ACPIOSXF_H__ */
> diff --git a/src/acpica/source/include/acpixf.h b/src/acpica/source/include/acpixf.h
> index ecb0442..ef85424 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 0x20140424
> +#define ACPI_CA_VERSION 0x20140627
>
> #include "acconfig.h"
> #include "actypes.h"
> @@ -234,6 +234,15 @@ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_CreateOsiMethod, TRUE);
> ACPI_INIT_GLOBAL (UINT8, AcpiGbl_UseDefaultRegisterWidths, TRUE);
>
> /*
> + * Whether or not to verify the table checksum before installation. Set
> + * this to TRUE to verify the table checksum before install it to the table
> + * manager. Note that enabling this option causes errors to happen in some
> + * OSPMs during early initialization stages. Default behavior is to do such
> + * verification.
> + */
> +ACPI_INIT_GLOBAL (UINT8, AcpiGbl_VerifyTableChecksum, TRUE);
> +
> +/*
> * Optionally enable output from the AML Debug Object.
> */
> ACPI_INIT_GLOBAL (UINT8, AcpiGbl_EnableAmlDebugObject, FALSE);
> @@ -406,6 +415,24 @@ ACPI_GLOBAL (BOOLEAN, AcpiGbl_SystemAwakeAndRunning);
> #endif /* ACPI_DEBUG_OUTPUT */
>
>
> +/*
> + * Application prototypes
> + *
> + * All interfaces used by application will be configured
> + * out of the ACPICA build unless the ACPI_APPLICATION
> + * flag is defined.
> + */
> +#ifdef ACPI_APPLICATION
> +#define ACPI_APP_DEPENDENT_RETURN_VOID(Prototype) \
> + Prototype;
> +
> +#else
> +#define ACPI_APP_DEPENDENT_RETURN_VOID(Prototype) \
> + static ACPI_INLINE Prototype {return;}
> +
> +#endif /* ACPI_APPLICATION */
> +
> +
> /*****************************************************************************
> *
> * ACPICA public interface prototypes
> @@ -1208,4 +1235,11 @@ AcpiDebugPrintRaw (
> const char *Format,
> ...))
>
> +ACPI_APP_DEPENDENT_RETURN_VOID (
> +ACPI_PRINTF_LIKE(1)
> +void ACPI_INTERNAL_VAR_XFACE
> +AcpiLogError (
> + const char *Format,
> + ...))
> +
> #endif /* __ACXFACE_H__ */
> diff --git a/src/acpica/source/include/acpredef.h b/src/acpica/source/include/acpredef.h
> index 81ade10..1d42f1d 100644
> --- a/src/acpica/source/include/acpredef.h
> +++ b/src/acpica/source/include/acpredef.h
> @@ -760,12 +760,6 @@ const ACPI_PREDEFINED_INFO AcpiGbl_PredefinedMethods[] =
> METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Refs) */
> PACKAGE_INFO (ACPI_PTYPE1_VAR, ACPI_RTYPE_REFERENCE, 0,0,0,0),
>
> - {{"_PRP", METHOD_0ARGS,
> - METHOD_RETURNS (ACPI_RTYPE_PACKAGE)}}, /* Variable-length (Pkgs) each: 1 Str, 1 Int/Str/Pkg */
> - PACKAGE_INFO (ACPI_PTYPE2, ACPI_RTYPE_STRING, 1,
> - ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING |
> - ACPI_RTYPE_PACKAGE | ACPI_RTYPE_REFERENCE, 1,0),
> -
> {{"_PRS", METHOD_0ARGS,
> METHOD_RETURNS (ACPI_RTYPE_BUFFER)}},
>
> diff --git a/src/acpica/source/include/actables.h b/src/acpica/source/include/actables.h
> index 3bcfd94..b95dd28 100644
> --- a/src/acpica/source/include/actables.h
> +++ b/src/acpica/source/include/actables.h
> @@ -158,6 +158,15 @@ void
> AcpiTbReleaseTempTable (
> ACPI_TABLE_DESC *TableDesc);
>
> +ACPI_STATUS
> +AcpiTbValidateTempTable (
> + ACPI_TABLE_DESC *TableDesc);
> +
> +ACPI_STATUS
> +AcpiTbVerifyTempTable (
> + ACPI_TABLE_DESC *TableDesc,
> + char *Signature);
> +
> BOOLEAN
> AcpiTbIsTableLoaded (
> UINT32 TableIndex);
> @@ -207,11 +216,6 @@ void
> AcpiTbInvalidateTable (
> ACPI_TABLE_DESC *TableDesc);
>
> -ACPI_STATUS
> -AcpiTbVerifyTable (
> - ACPI_TABLE_DESC *TableDesc,
> - char *Signature);
> -
> void
> AcpiTbOverrideTable (
> ACPI_TABLE_DESC *OldTableDesc);
> diff --git a/src/acpica/source/include/actypes.h b/src/acpica/source/include/actypes.h
> index 60613de..6ffb2ce 100644
> --- a/src/acpica/source/include/actypes.h
> +++ b/src/acpica/source/include/actypes.h
> @@ -199,6 +199,7 @@
> typedef unsigned char BOOLEAN;
> typedef unsigned char UINT8;
> typedef unsigned short UINT16;
> +typedef short INT16;
> typedef COMPILER_DEPENDENT_UINT64 UINT64;
> typedef COMPILER_DEPENDENT_INT64 INT64;
>
> @@ -1408,4 +1409,19 @@ typedef struct acpi_memory_list
> #define ACPI_OSI_WIN_8 0x0C
>
>
> +/* Definitions of file IO */
> +
> +#define ACPI_FILE_READING 0x01
> +#define ACPI_FILE_WRITING 0x02
> +#define ACPI_FILE_BINARY 0x04
> +
> +#define ACPI_FILE_BEGIN 0x01
> +#define ACPI_FILE_END 0x02
> +
> +
> +/* Definitions of getopt */
> +
> +#define ACPI_OPT_END -1
> +
> +
> #endif /* __ACTYPES_H__ */
> diff --git a/src/acpica/source/include/acutils.h b/src/acpica/source/include/acutils.h
> index b1c512b..bac5fd8 100644
> --- a/src/acpica/source/include/acutils.h
> +++ b/src/acpica/source/include/acutils.h
> @@ -168,7 +168,6 @@ extern const char *AcpiGbl_PtDecode[];
> #ifdef ACPI_ASL_COMPILER
>
> #include <stdio.h>
> -extern FILE *AcpiGbl_OutputFile;
>
> #define ACPI_MSG_REDIRECT_BEGIN \
> FILE *OutputFile = AcpiGbl_OutputFile; \
> @@ -325,6 +324,11 @@ AcpiUtStrlen (
> const char *String);
>
> char *
> +AcpiUtStrchr (
> + const char *String,
> + int ch);
> +
> +char *
> AcpiUtStrcpy (
> char *DstString,
> const char *SrcString);
> @@ -412,7 +416,7 @@ extern const UINT8 _acpi_ctype[];
> #define ACPI_IS_XDIGIT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_XD))
> #define ACPI_IS_UPPER(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_UP))
> #define ACPI_IS_LOWER(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO))
> -#define ACPI_IS_PRINT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP | _ACPI_DI | _ACPI_SP | _ACPI_PU))
> +#define ACPI_IS_PRINT(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP | _ACPI_DI | _ACPI_XS | _ACPI_PU))
> #define ACPI_IS_ALPHA(c) (_acpi_ctype[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP))
>
> #endif /* !ACPI_USE_SYSTEM_CLIBRARY */
> @@ -554,6 +558,16 @@ AcpiUtDumpBuffer (
> UINT32 Display,
> UINT32 Offset);
>
> +#ifdef ACPI_APPLICATION
> +void
> +AcpiUtDumpBufferToFile (
> + ACPI_FILE File,
> + UINT8 *Buffer,
> + UINT32 Count,
> + UINT32 Display,
> + UINT32 BaseOffset);
> +#endif
> +
> void
> AcpiUtReportError (
> char *ModuleName,
> @@ -623,6 +637,17 @@ AcpiUtExecutePowerMethods (
>
>
> /*
> + * utfileio - file operations
> + */
> +#ifdef ACPI_APPLICATION
> +ACPI_STATUS
> +AcpiUtReadTableFromFile (
> + char *Filename,
> + ACPI_TABLE_HEADER **Table);
> +#endif
> +
> +
> +/*
> * utids - device ID support
> */
> ACPI_STATUS
> @@ -1182,4 +1207,45 @@ const AH_DEVICE_ID *
> AcpiAhMatchHardwareId (
> char *Hid);
>
> +/*
> + * utprint - printf/vprintf output functions
> + */
> +const char *
> +AcpiUtScanNumber (
> + const char *String,
> + UINT64 *NumberPtr);
> +
> +const char *
> +AcpiUtPrintNumber (
> + char *String,
> + UINT64 Number);
> +
> +int
> +AcpiUtVsnprintf (
> + char *String,
> + ACPI_SIZE Size,
> + const char *Format,
> + va_list Args);
> +
> +int
> +AcpiUtSnprintf (
> + char *String,
> + ACPI_SIZE Size,
> + const char *Format,
> + ...);
> +
> +#ifdef ACPI_APPLICATION
> +int
> +AcpiUtFileVprintf (
> + ACPI_FILE File,
> + const char *Format,
> + va_list Args);
> +
> +int
> +AcpiUtFilePrintf (
> + ACPI_FILE File,
> + const char *Format,
> + ...);
> +#endif
> +
> #endif /* _ACUTILS_H */
> diff --git a/src/acpica/source/include/platform/acenv.h b/src/acpica/source/include/platform/acenv.h
> index 1696079..80038c8 100644
> --- a/src/acpica/source/include/platform/acenv.h
> +++ b/src/acpica/source/include/platform/acenv.h
> @@ -160,20 +160,14 @@
> #define ACPI_DBG_TRACK_ALLOCATIONS
> #endif
>
> -/* AcpiNames configuration. Single threaded with debugger output enabled. */
> -
> -#ifdef ACPI_NAMES_APP
> -#define ACPI_DEBUGGER
> -#define ACPI_APPLICATION
> -#define ACPI_SINGLE_THREADED
> -#endif
> -
> /*
> - * AcpiBin/AcpiDump/AcpiSrc/AcpiXtract/Example configuration. All single
> - * threaded, with no debug output.
> + * AcpiBin/AcpiDump/AcpiHelp/AcpiNames/AcpiSrc/AcpiXtract/Example configuration.
> + * All single threaded.
> */
> #if (defined ACPI_BIN_APP) || \
> (defined ACPI_DUMP_APP) || \
> + (defined ACPI_HELP_APP) || \
> + (defined ACPI_NAMES_APP) || \
> (defined ACPI_SRC_APP) || \
> (defined ACPI_XTRACT_APP) || \
> (defined ACPI_EXAMPLE_APP)
> @@ -181,12 +175,40 @@
> #define ACPI_SINGLE_THREADED
> #endif
>
> +/* AcpiHelp configuration. Error messages disabled. */
> +
> #ifdef ACPI_HELP_APP
> -#define ACPI_APPLICATION
> -#define ACPI_SINGLE_THREADED
> #define ACPI_NO_ERROR_MESSAGES
> #endif
>
> +/* AcpiNames configuration. Debug output enabled. */
> +
> +#ifdef ACPI_NAMES_APP
> +#define ACPI_DEBUG_OUTPUT
> +#endif
> +
> +/* AcpiExec/AcpiNames/Example configuration. Native RSDP used. */
> +
> +#if (defined ACPI_EXEC_APP) || \
> + (defined ACPI_EXAMPLE_APP) || \
> + (defined ACPI_NAMES_APP)
> +#define ACPI_USE_NATIVE_RSDP_POINTER
> +#endif
> +
> +/* AcpiDump configuration. Native mapping used if provied by OSPMs */
> +
> +#ifdef ACPI_DUMP_APP
> +#define ACPI_USE_NATIVE_MEMORY_MAPPING
> +#define USE_NATIVE_ALLOCATE_ZEROED
> +#endif
> +
> +/* AcpiNames/Example configuration. Hardware disabled */
> +
> +#if (defined ACPI_EXAMPLE_APP) || \
> + (defined ACPI_NAMES_APP)
> +#define ACPI_REDUCED_HARDWARE 1
> +#endif
> +
> /* Linkable ACPICA library */
>
> #ifdef ACPI_LIBRARY
> @@ -257,6 +279,9 @@
> #elif defined(_AED_EFI)
> #include "acefi.h"
>
> +#elif defined(_GNU_EFI)
> +#include "acefi.h"
> +
> #elif defined(__HAIKU__)
> #include "achaiku.h"
>
> @@ -473,8 +498,12 @@ typedef char *va_list;
> #ifdef ACPI_APPLICATION
> #include <stdio.h>
> #define ACPI_FILE FILE *
> +#define ACPI_FILE_OUT stdout
> +#define ACPI_FILE_ERR stderr
> #else
> #define ACPI_FILE void *
> +#define ACPI_FILE_OUT NULL
> +#define ACPI_FILE_ERR NULL
> #endif /* ACPI_APPLICATION */
> #endif /* ACPI_FILE */
>
> diff --git a/src/acpica/source/include/platform/acenvex.h b/src/acpica/source/include/platform/acenvex.h
> new file mode 100644
> index 0000000..2c50162
> --- /dev/null
> +++ b/src/acpica/source/include/platform/acenvex.h
> @@ -0,0 +1,135 @@
> +/******************************************************************************
> + *
> + * Name: acenvex.h - Extra host and compiler configuration
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 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.
> + *
> + *****************************************************************************/
> +
> +#ifndef __ACENVEX_H__
> +#define __ACENVEX_H__
> +
> +/*! [Begin] no source code translation */
> +
> +/******************************************************************************
> + *
> + * Extra host configuration files. All ACPICA headers are included before
> + * including these files.
> + *
> + *****************************************************************************/
> +
> +#if defined(_LINUX) || defined(__linux__)
> +#include "aclinuxex.h"
> +
> +#endif
> +
> +/*! [End] no source code translation !*/
> +
> +#endif /* __ACENVEX_H__ */
> diff --git a/src/acpica/source/include/platform/aclinux.h b/src/acpica/source/include/platform/aclinux.h
> index 229aa84..1f1d7c1 100644
> --- a/src/acpica/source/include/platform/aclinux.h
> +++ b/src/acpica/source/include/platform/aclinux.h
> @@ -120,13 +120,18 @@
>
> #define ACPI_USE_SYSTEM_CLIBRARY
> #define ACPI_USE_DO_WHILE_0
> -#define ACPI_MUTEX_TYPE ACPI_BINARY_SEMAPHORE
>
>
> #ifdef __KERNEL__
>
> #define ACPI_USE_SYSTEM_INTTYPES
>
> +/* Compile for reduced hardware mode only with this kernel config */
> +
> +#ifdef CONFIG_ACPI_REDUCED_HARDWARE_ONLY
> +#define ACPI_REDUCED_HARDWARE 1
> +#endif
> +
> #include <linux/string.h>
> #include <linux/kernel.h>
> #include <linux/ctype.h>
> @@ -138,7 +143,7 @@
> #ifdef EXPORT_ACPI_INTERFACES
> #include <linux/export.h>
> #endif
> -#include <asm/acpi.h>
> +#include <asm/acenv.h>
>
> #ifndef CONFIG_ACPI
>
> @@ -181,6 +186,42 @@
> #define ACPI_SPINLOCK spinlock_t *
> #define ACPI_CPU_FLAGS unsigned long
>
> +/* Use native linux version of AcpiOsAllocateZeroed */
> +
> +#define USE_NATIVE_ALLOCATE_ZEROED
> +
> +/*
> + * Overrides for in-kernel ACPICA
> + */
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitialize
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocate
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory
> +
> +/*
> + * OSL interfaces used by debugger/disassembler
> + */
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadable
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable
> +
> +/*
> + * OSL interfaces used by utilities
> + */
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByName
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByIndex
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByAddress
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenDirectory
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetNextFilename
> +#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory
> +
> #else /* !__KERNEL__ */
>
> #include <stdarg.h>
> @@ -226,153 +267,4 @@
>
> #include "acgcc.h"
>
> -
> -#ifdef __KERNEL__
> -
> -/*
> - * FIXME: Inclusion of actypes.h
> - * Linux kernel need this before defining inline OSL interfaces as
> - * actypes.h need to be included to find ACPICA type definitions.
> - * Since from ACPICA's perspective, the actypes.h should be included after
> - * acenv.h (aclinux.h), this leads to a inclusion mis-ordering issue.
> - */
> -#include <acpi/actypes.h>
> -
> -/*
> - * Overrides for in-kernel ACPICA
> - */
> -ACPI_STATUS __init AcpiOsInitialize (
> - void);
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsInitialize
> -
> -ACPI_STATUS AcpiOsTerminate (
> - void);
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsTerminate
> -
> -/*
> - * Memory allocation/deallocation
> - */
> -
> -/*
> - * The irqs_disabled() check is for resume from RAM.
> - * Interrupts are off during resume, just like they are for boot.
> - * However, boot has (system_state != SYSTEM_RUNNING)
> - * to quiet __might_sleep() in kmalloc() and resume does not.
> - */
> -static inline void *
> -AcpiOsAllocate (
> - ACPI_SIZE Size)
> -{
> - return kmalloc (Size, irqs_disabled () ? GFP_ATOMIC : GFP_KERNEL);
> -}
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocate
> -
> -/* Use native linux version of AcpiOsAllocateZeroed */
> -
> -static inline void *
> -AcpiOsAllocateZeroed (
> - ACPI_SIZE Size)
> -{
> - return kzalloc (Size, irqs_disabled () ? GFP_ATOMIC : GFP_KERNEL);
> -}
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAllocateZeroed
> -#define USE_NATIVE_ALLOCATE_ZEROED
> -
> -static inline void
> -AcpiOsFree (
> - void *Memory)
> -{
> - kfree (Memory);
> -}
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsFree
> -
> -static inline void *
> -AcpiOsAcquireObject (
> - ACPI_CACHE_T *Cache)
> -{
> - return kmem_cache_zalloc (Cache,
> - irqs_disabled () ? GFP_ATOMIC : GFP_KERNEL);
> -}
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsAcquireObject
> -
> -static inline ACPI_THREAD_ID
> -AcpiOsGetThreadId (
> - void)
> -{
> - return (ACPI_THREAD_ID) (unsigned long) current;
> -}
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetThreadId
> -
> -#ifndef CONFIG_PREEMPT
> -
> -/*
> - * Used within ACPICA to show where it is safe to preempt execution
> - * when CONFIG_PREEMPT=n
> - */
> -#define ACPI_PREEMPTION_POINT() \
> - do { \
> - if (!irqs_disabled()) \
> - cond_resched(); \
> - } while (0)
> -
> -#endif
> -
> -/*
> - * When lockdep is enabled, the spin_lock_init() macro stringifies it's
> - * argument and uses that as a name for the lock in debugging.
> - * By executing spin_lock_init() in a macro the key changes from "lock" for
> - * all locks to the name of the argument of acpi_os_create_lock(), which
> - * prevents lockdep from reporting false positives for ACPICA locks.
> - */
> -#define AcpiOsCreateLock(__Handle) \
> - ({ \
> - spinlock_t *Lock = ACPI_ALLOCATE(sizeof(*Lock)); \
> - if (Lock) { \
> - *(__Handle) = Lock; \
> - spin_lock_init(*(__Handle)); \
> - } \
> - Lock ? AE_OK : AE_NO_MEMORY; \
> - })
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCreateLock
> -
> -void __iomem *
> -AcpiOsMapMemory (
> - ACPI_PHYSICAL_ADDRESS Where,
> - ACPI_SIZE Length);
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsMapMemory
> -
> -void
> -AcpiOsUnmapMemory (
> - void __iomem *LogicalAddress,
> - ACPI_SIZE Size);
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsUnmapMemory
> -
> -/*
> - * OSL interfaces used by debugger/disassembler
> - */
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsReadable
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsWritable
> -
> -/*
> - * OSL interfaces used by utilities
> - */
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsRedirectOutput
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetLine
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByName
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByIndex
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetTableByAddress
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsOpenDirectory
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsGetNextFilename
> -#define ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsCloseDirectory
> -
> -/*
> - * OSL interfaces added by Linux
> - */
> -void
> -EarlyAcpiOsUnmapMemory (
> - void __iomem *Virt,
> - ACPI_SIZE Size);
> -
> -#endif /* __KERNEL__ */
> -
> #endif /* __ACLINUX_H__ */
> diff --git a/src/acpica/source/include/platform/aclinuxex.h b/src/acpica/source/include/platform/aclinuxex.h
> new file mode 100644
> index 0000000..67e42ab
> --- /dev/null
> +++ b/src/acpica/source/include/platform/aclinuxex.h
> @@ -0,0 +1,209 @@
> +/******************************************************************************
> + *
> + * Name: aclinuxex.h - Extra OS specific defines, etc. for Linux
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 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.
> + *
> + *****************************************************************************/
> +
> +#ifndef __ACLINUXEX_H__
> +#define __ACLINUXEX_H__
> +
> +#ifdef __KERNEL__
> +
> +/*
> + * Overrides for in-kernel ACPICA
> + */
> +ACPI_STATUS __init AcpiOsInitialize (
> + void);
> +
> +ACPI_STATUS AcpiOsTerminate (
> + void);
> +
> +/*
> + * The irqs_disabled() check is for resume from RAM.
> + * Interrupts are off during resume, just like they are for boot.
> + * However, boot has (system_state != SYSTEM_RUNNING)
> + * to quiet __might_sleep() in kmalloc() and resume does not.
> + */
> +static inline void *
> +AcpiOsAllocate (
> + ACPI_SIZE Size)
> +{
> + return kmalloc (Size, irqs_disabled () ? GFP_ATOMIC : GFP_KERNEL);
> +}
> +
> +static inline void *
> +AcpiOsAllocateZeroed (
> + ACPI_SIZE Size)
> +{
> + return kzalloc (Size, irqs_disabled () ? GFP_ATOMIC : GFP_KERNEL);
> +}
> +
> +static inline void
> +AcpiOsFree (
> + void *Memory)
> +{
> + kfree (Memory);
> +}
> +
> +static inline void *
> +AcpiOsAcquireObject (
> + ACPI_CACHE_T *Cache)
> +{
> + return kmem_cache_zalloc (Cache,
> + irqs_disabled () ? GFP_ATOMIC : GFP_KERNEL);
> +}
> +
> +static inline ACPI_THREAD_ID
> +AcpiOsGetThreadId (
> + void)
> +{
> + return (ACPI_THREAD_ID) (unsigned long) current;
> +}
> +
> +/*
> + * When lockdep is enabled, the spin_lock_init() macro stringifies it's
> + * argument and uses that as a name for the lock in debugging.
> + * By executing spin_lock_init() in a macro the key changes from "lock" for
> + * all locks to the name of the argument of acpi_os_create_lock(), which
> + * prevents lockdep from reporting false positives for ACPICA locks.
> + */
> +#define AcpiOsCreateLock(__Handle) \
> + ({ \
> + spinlock_t *Lock = ACPI_ALLOCATE(sizeof(*Lock)); \
> + if (Lock) { \
> + *(__Handle) = Lock; \
> + spin_lock_init(*(__Handle)); \
> + } \
> + Lock ? AE_OK : AE_NO_MEMORY; \
> + })
> +
> +void __iomem *
> +AcpiOsMapMemory (
> + ACPI_PHYSICAL_ADDRESS Where,
> + ACPI_SIZE Length);
> +
> +void
> +AcpiOsUnmapMemory (
> + void __iomem *LogicalAddress,
> + ACPI_SIZE Size);
> +
> +/*
> + * OSL interfaces added by Linux
> + */
> +void
> +EarlyAcpiOsUnmapMemory (
> + void __iomem *Virt,
> + ACPI_SIZE Size);
> +
> +#endif /* __KERNEL__ */
> +
> +#endif /* __ACLINUXEX_H__ */
> diff --git a/src/acpica/source/os_specific/service_layers/oslibcfs.c b/src/acpica/source/os_specific/service_layers/oslibcfs.c
> new file mode 100644
> index 0000000..3343a0c
> --- /dev/null
> +++ b/src/acpica/source/os_specific/service_layers/oslibcfs.c
> @@ -0,0 +1,323 @@
> +/******************************************************************************
> + *
> + * Module Name: oslibcfs - C library OSL for file IO
> + *
> + *****************************************************************************/
> +
> +/******************************************************************************
> + *
> + * 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 "acpi.h"
> +#include <stdio.h>
> +#include <stdarg.h>
> +
> +#define _COMPONENT ACPI_OS_SERVICES
> + ACPI_MODULE_NAME ("oslibcfs")
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiOsOpenFile
> + *
> + * PARAMETERS: Path - File path
> + * Modes - File operation type
> + *
> + * RETURN: File descriptor.
> + *
> + * DESCRIPTION: Open a file for reading (ACPI_FILE_READING) or/and writing
> + * (ACPI_FILE_WRITING).
> + *
> + ******************************************************************************/
> +
> +ACPI_FILE
> +AcpiOsOpenFile (
> + const char *Path,
> + UINT8 Modes)
> +{
> + ACPI_FILE File;
> + char ModesStr[4];
> + UINT32 i = 0;
> +
> + if (Modes & ACPI_FILE_READING)
> + {
> + ModesStr[i++] = 'r';
> + }
> + if (Modes & ACPI_FILE_WRITING)
> + {
> + ModesStr[i++] = 'w';
> + }
> + if (Modes & ACPI_FILE_BINARY)
> + {
> + ModesStr[i++] = 'b';
> + }
> + ModesStr[i++] = '\0';
> +
> + File = fopen (Path, ModesStr);
> + if (!File)
> + {
> + perror ("Could not open file");
> + }
> +
> + return (File);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiOsCloseFile
> + *
> + * PARAMETERS: File - File descriptor
> + *
> + * RETURN: None.
> + *
> + * DESCRIPTION: Close a file.
> + *
> + ******************************************************************************/
> +
> +void
> +AcpiOsCloseFile (
> + ACPI_FILE File)
> +{
> + fclose (File);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiOsReadFile
> + *
> + * PARAMETERS: File - File descriptor
> + * Buffer - Data buffer
> + * Size - Data block size
> + * Count - Number of data blocks
> + *
> + * RETURN: Size of successfully read buffer.
> + *
> + * DESCRIPTION: Read a file.
> + *
> + ******************************************************************************/
> +
> +int
> +AcpiOsReadFile (
> + ACPI_FILE File,
> + void *Buffer,
> + ACPI_SIZE Size,
> + ACPI_SIZE Count)
> +{
> + int Length;
> +
> + Length = fread (Buffer, Size, Count, File);
> + if (Length < 0)
> + {
> + perror ("Error reading file");
> + }
> +
> + return (Length);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiOsWriteFile
> + *
> + * PARAMETERS: File - File descriptor
> + * Buffer - Data buffer
> + * Size - Data block size
> + * Count - Number of data blocks
> + *
> + * RETURN: Size of successfully written buffer.
> + *
> + * DESCRIPTION: Write a file.
> + *
> + ******************************************************************************/
> +
> +int
> +AcpiOsWriteFile (
> + ACPI_FILE File,
> + void *Buffer,
> + ACPI_SIZE Size,
> + ACPI_SIZE Count)
> +{
> + int Length;
> +
> + Length = fwrite (Buffer, Size, Count, File);
> + if (Length < 0)
> + {
> + perror ("Error writing file");
> + }
> +
> + return (Length);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiOsGetFileOffset
> + *
> + * PARAMETERS: File - File descriptor
> + *
> + * RETURN: Size of current position.
> + *
> + * DESCRIPTION: Get current file offset.
> + *
> + ******************************************************************************/
> +
> +long
> +AcpiOsGetFileOffset (
> + ACPI_FILE File)
> +{
> + long Offset;
> +
> + Offset = ftell (File);
> +
> + return (Offset);
> +}
> +
> +
> +/*******************************************************************************
> + *
> + * FUNCTION: AcpiOsSetFileOffset
> + *
> + * PARAMETERS: File - File descriptor
> + * Offset - File offset
> + * From - From begin/end of file
> + *
> + * RETURN: Status
> + *
> + * DESCRIPTION: Set current file offset.
> + *
> + ******************************************************************************/
> +
> +ACPI_STATUS
> +AcpiOsSetFileOffset (
> + ACPI_FILE File,
> + long Offset,
> + UINT8 From)
> +{
> + int Ret = 0;
> +
> +
> + if (From == ACPI_FILE_BEGIN)
> + {
> + Ret = fseek (File, Offset, SEEK_SET);
> + }
> + if (From == ACPI_FILE_END)
> + {
> + Ret = fseek (File, Offset, SEEK_END);
> + }
> +
> + if (Ret < 0)
> + {
> + return (AE_ERROR);
> + }
> + else
> + {
> + return (AE_OK);
> + }
> +}
> diff --git a/src/acpica/source/os_specific/service_layers/osunixxf.c b/src/acpica/source/os_specific/service_layers/osunixxf.c
> index 4d4fea2..c237ac2 100644
> --- a/src/acpica/source/os_specific/service_layers/osunixxf.c
> +++ b/src/acpica/source/os_specific/service_layers/osunixxf.c
> @@ -137,16 +137,11 @@
> ACPI_MODULE_NAME ("osunixxf")
>
>
> -FILE *AcpiGbl_OutputFile;
> BOOLEAN AcpiGbl_DebugTimeout = FALSE;
>
>
> /* Upcalls to AcpiExec */
>
> -ACPI_PHYSICAL_ADDRESS
> -AeLocalGetRootPointer (
> - void);
> -
> void
> AeTableOverride (
> ACPI_TABLE_HEADER *ExistingTable,
> @@ -286,10 +281,19 @@ ACPI_STATUS
> AcpiOsInitialize (
> void)
> {
> + ACPI_STATUS Status;
> +
>
> AcpiGbl_OutputFile = stdout;
>
> OsEnterLineEditMode ();
> +
> + Status = AcpiOsCreateLock (&AcpiGbl_PrintLock);
> + if (ACPI_FAILURE (Status))
> + {
> + return (Status);
> + }
> +
> return (AE_OK);
> }
>
> @@ -303,6 +307,7 @@ AcpiOsTerminate (
> }
>
>
> +#ifndef ACPI_USE_NATIVE_RSDP_POINTER
> /******************************************************************************
> *
> * FUNCTION: AcpiOsGetRootPointer
> @@ -320,8 +325,9 @@ AcpiOsGetRootPointer (
> void)
> {
>
> - return (AeLocalGetRootPointer ());
> + return (0);
> }
> +#endif
>
>
> /******************************************************************************
> @@ -620,6 +626,7 @@ AcpiOsGetLine (
> #endif
>
>
> +#ifndef ACPI_USE_NATIVE_MEMORY_MAPPING
> /******************************************************************************
> *
> * FUNCTION: AcpiOsMapMemory
> @@ -665,6 +672,7 @@ AcpiOsUnmapMemory (
>
> return;
> }
> +#endif
>
>
> /******************************************************************************
> @@ -691,6 +699,32 @@ AcpiOsAllocate (
> }
>
>
> +#ifdef USE_NATIVE_ALLOCATE_ZEROED
> +/******************************************************************************
> + *
> + * FUNCTION: AcpiOsAllocateZeroed
> + *
> + * PARAMETERS: Size - Amount to allocate, in bytes
> + *
> + * RETURN: Pointer to the new allocation. Null on error.
> + *
> + * DESCRIPTION: Allocate and zero memory. Algorithm is dependent on the OS.
> + *
> + *****************************************************************************/
> +
> +void *
> +AcpiOsAllocateZeroed (
> + ACPI_SIZE size)
> +{
> + void *Mem;
> +
> +
> + Mem = (void *) calloc (1, (size_t) size);
> + return (Mem);
> +}
> +#endif
> +
> +
> /******************************************************************************
> *
> * FUNCTION: AcpiOsFree
> @@ -1526,6 +1560,26 @@ AcpiOsExecute (
> return (0);
> }
>
> +#else /* ACPI_SINGLE_THREADED */
> +ACPI_THREAD_ID
> +AcpiOsGetThreadId (
> + void)
> +{
> + return (1);
> +}
> +
> +ACPI_STATUS
> +AcpiOsExecute (
> + ACPI_EXECUTE_TYPE Type,
> + ACPI_OSD_EXEC_CALLBACK Function,
> + void *Context)
> +{
> +
> + Function (Context);
> +
> + return (AE_OK);
> +}
> +
> #endif /* ACPI_SINGLE_THREADED */
>
>
> diff --git a/src/acpica/source/tools/acpiexec/aehandlers.c b/src/acpica/source/tools/acpiexec/aehandlers.c
> index 7fd63e2..06283f4 100644
> --- a/src/acpica/source/tools/acpiexec/aehandlers.c
> +++ b/src/acpica/source/tools/acpiexec/aehandlers.c
> @@ -1127,11 +1127,21 @@ AeInstallEarlyHandlers (
> Status = AcpiDetachData (Handle, AeAttachedDataHandler);
> AE_CHECK_OK (AcpiDetachData, Status);
>
> - Status = AcpiAttachData (Handle, AeAttachedDataHandler, Handle);
> + /* Test attach data at the root object */
> +
> + Status = AcpiAttachData (ACPI_ROOT_OBJECT, AeAttachedDataHandler,
> + AcpiGbl_RootNode);
> + AE_CHECK_OK (AcpiAttachData, Status);
> +
> + Status = AcpiAttachData (ACPI_ROOT_OBJECT, AeAttachedDataHandler2,
> + AcpiGbl_RootNode);
> AE_CHECK_OK (AcpiAttachData, Status);
>
> /* Test support for multiple attaches */
>
> + Status = AcpiAttachData (Handle, AeAttachedDataHandler, Handle);
> + AE_CHECK_OK (AcpiAttachData, Status);
> +
> Status = AcpiAttachData (Handle, AeAttachedDataHandler2, Handle);
> AE_CHECK_OK (AcpiAttachData, Status);
> }
> @@ -1377,6 +1387,10 @@ AeRegionHandler (
> switch (Function >> 16)
> {
> case AML_FIELD_ATTRIB_QUICK:
> +
> + Length = 0;
> + break;
> +
> case AML_FIELD_ATTRIB_SEND_RCV:
> case AML_FIELD_ATTRIB_BYTE:
>
>
Acked-by: Ivan Hu <ivan.hu at canonical.com>
More information about the fwts-devel
mailing list