Import ACPICA 20140627.

This commit is contained in:
Jung-uk Kim 2014-06-27 19:10:35 +00:00
parent 6b8f78e0a6
commit e599b42ef5
82 changed files with 5527 additions and 1512 deletions

View File

@ -10,7 +10,13 @@
# code directories. This prevents collisions between different
# compilations of the same source file with different compile options.
#
BUILD_DIRECTORY_PATH = "generate/unix"
include generate/unix/Makefile.config
include generate/unix/Makefile.common
ifeq ($(OS),efi)
BUILD_DIRECTORY_PATH = "generate/efi"
include generate/efi/Makefile.config
include generate/efi/Makefile.common
else
BUILD_DIRECTORY_PATH = "generate/unix"
include generate/unix/Makefile.config
include generate/unix/Makefile.common
endif

View File

@ -1,3 +1,104 @@
----------------------------------------
27 June 2014. Summary of changes for version 20140627:
1) ACPICA kernel-resident subsystem:
Formatted Output: Implemented local versions of standard formatted output
utilities such as printf, etc. Over time, it has been discovered that
there are in fact many portability issues with printf, and the addition
of this feature will fix/prevent these issues once and for all. Some
known issues are summarized below:
1) Output of 64-bit values is not portable. For example, UINT64 is %ull
for the Linux kernel and is %uI64 for some MSVC versions.
2) Invoking printf consistently in a manner that is portable across both
32-bit and 64-bit platforms is difficult at best in many situations.
3) The output format for pointers varies from system to system (leading
zeros especially), and leads to inconsistent output from ACPICA across
platforms.
4) Certain platform-specific printf formats may conflict with ACPICA use.
5) If there is no local C library available, ACPICA now has local support
for printf.
-- To address these printf issues in a complete manner, ACPICA now
directly implements a small subset of printf format specifiers, only
those that it requires. Adds a new file, utilities/utprint.c. Lv Zheng.
Implemented support for ACPICA generation within the EFI environment.
Initially, the AcpiDump utility is supported in the UEFI shell
environment. Lv Zheng.
Added a new external interface, AcpiLogError, to improve ACPICA
portability. This allows the host to redirect error messages from the
ACPICA utilities. Lv Zheng.
Added and deployed new OSL file I/O interfaces to improve ACPICA
portability:
AcpiOsOpenFile
AcpiOsCloseFile
AcpiOsReadFile
AcpiOsWriteFile
AcpiOsGetFileOffset
AcpiOsSetFileOffset
There are C library implementations of these functions in the new file
service_layers/oslibcfs.c -- however, the functions can be implemented by
the local host in any way necessary. Lv Zheng.
Implemented a mechanism to disable/enable ACPI table checksum validation
at runtime. This can be useful when loading tables very early during OS
initialization when it may not be possible to map the entire table in
order to compute the checksum. Lv Zheng.
Fixed a buffer allocation issue for the Generic Serial Bus support.
Originally, a fixed buffer length was used. This change allows for
variable-length buffers based upon the protocol indicated by the field
access attributes. Reported by Lan Tianyu. Lv Zheng.
Fixed a problem where an object detached from a namespace node was not
properly terminated/cleared and could cause a circular list problem if
reattached. ACPICA BZ 1063. David Box.
Fixed a possible recursive lock acquisition in hwregs.c. Rakib Mullick.
Fixed a possible memory leak in an error return path within the function
AcpiUtCopyIobjectToIobject. ACPICA BZ 1087. Colin Ian King.
Example Code and Data Size: These are the sizes for the OS-independent
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The
debug version of the code includes the debug output trace mechanism and
has a much larger code and data size.
Current Release:
Non-Debug Version: 98.7K Code, 27.2K Data, 125.9K Total
Debug Version: 191.7K Code, 79.6K Data, 271.3K Total
Previous Release:
Non-Debug Version: 96.8K Code, 27.2K Data, 124.0K Total
Debug Version: 189.5K Code, 79.7K Data, 269.2K Total
2) iASL Compiler/Disassembler and Tools:
Disassembler: Add dump of ASCII equivalent text within a comment at the
end of each line of the output for the Buffer() ASL operator.
AcpiDump: Miscellaneous changes:
Fixed repetitive table dump in -n mode.
For older EFI platforms, use the ACPI 1.0 GUID during RSDP search if
the ACPI 2.0 GUID fails.
iASL: Fixed a problem where the compiler could fault if incorrectly given
an acpidump output file as input. ACPICA BZ 1088. David Box.
AcpiExec/AcpiNames: Fixed a problem where these utilities could fault if
they are invoked without any arguments.
Debugger: Fixed a possible memory leak in an error return path. ACPICA BZ
1086. Colin Ian King.
Disassembler: Cleaned up a block of code that extracts a parent Op
object. Added a comment that explains that the parent is guaranteed to be
valid in this case. ACPICA BZ 1069.
----------------------------------------
24 April 2014. Summary of changes for version 20140424:

View File

@ -34,6 +34,7 @@ OBJECTS = \
$(OBJDIR)/utalloc.o\
$(OBJDIR)/utbuffer.o\
$(OBJDIR)/utcache.o\
$(OBJDIR)/utdebug.o\
$(OBJDIR)/utdecode.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utglobal.o\
@ -41,9 +42,11 @@ OBJECTS = \
$(OBJDIR)/utmath.o\
$(OBJDIR)/utmisc.o\
$(OBJDIR)/utmutex.o\
$(OBJDIR)/utprint.o\
$(OBJDIR)/utstate.o\
$(OBJDIR)/utstring.o\
$(OBJDIR)/utxferror.o\
$(OBJDIR)/oslibcfs.o\
$(OBJDIR)/osunixxf.o
#

View File

@ -33,13 +33,18 @@ OBJECTS = \
$(OBJDIR)/apmain.o\
$(OBJDIR)/cmfsize.o\
$(OBJDIR)/getopt.o\
$(OBJDIR)/oslibcfs.o\
$(OBJDIR)/osunixdir.o\
$(OBJDIR)/osunixmap.o\
$(OBJDIR)/osunixxf.o\
$(OBJDIR)/tbprint.o\
$(OBJDIR)/tbxfroot.o\
$(OBJDIR)/utbuffer.o\
$(OBJDIR)/utdebug.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utglobal.o\
$(OBJDIR)/utmath.o\
$(OBJDIR)/utprint.o\
$(OBJDIR)/utstring.o\
$(OBJDIR)/utxferror.o

View File

@ -20,9 +20,10 @@ PROG = $(OBJDIR)/acpiexamples
#
vpath %.c \
$(ACPIEXAMPLES)\
$(ACPICA_DEBUGGER)\
$(ACPICA_DISPATCHER)\
$(ACPICA_EVENTS)\
$(ACPICA_EXECUTER)\
$(ACPICA_HARDWARE)\
$(ACPICA_NAMESPACE)\
$(ACPICA_PARSER)\
$(ACPICA_TABLES)\
@ -51,6 +52,12 @@ OBJECTS = \
$(OBJDIR)/dswload2.o\
$(OBJDIR)/dswscope.o\
$(OBJDIR)/dswstate.o\
$(OBJDIR)/evhandler.o\
$(OBJDIR)/evmisc.o\
$(OBJDIR)/evregion.o\
$(OBJDIR)/evrgnini.o\
$(OBJDIR)/evxface.o\
$(OBJDIR)/evxfregn.o\
$(OBJDIR)/exconfig.o\
$(OBJDIR)/exconvrt.o\
$(OBJDIR)/excreate.o\
@ -75,8 +82,10 @@ OBJECTS = \
$(OBJDIR)/exstorob.o\
$(OBJDIR)/exsystem.o\
$(OBJDIR)/exutils.o\
$(OBJDIR)/hwpci.o\
$(OBJDIR)/nsaccess.o\
$(OBJDIR)/nsalloc.o\
$(OBJDIR)/nsarguments.o\
$(OBJDIR)/nsconvert.o\
$(OBJDIR)/nsdump.o\
$(OBJDIR)/nseval.o\
@ -85,12 +94,17 @@ OBJECTS = \
$(OBJDIR)/nsnames.o\
$(OBJDIR)/nsobject.o\
$(OBJDIR)/nsparse.o\
$(OBJDIR)/nspredef.o\
$(OBJDIR)/nsprepkg.o\
$(OBJDIR)/nsrepair.o\
$(OBJDIR)/nsrepair2.o\
$(OBJDIR)/nssearch.o\
$(OBJDIR)/nsutils.o\
$(OBJDIR)/nswalk.o\
$(OBJDIR)/nsxfeval.o\
$(OBJDIR)/nsxfname.o\
$(OBJDIR)/nsxfobj.o\
$(OBJDIR)/oslibcfs.o\
$(OBJDIR)/osunixxf.o\
$(OBJDIR)/psargs.o\
$(OBJDIR)/psloop.o\
@ -121,8 +135,11 @@ OBJECTS = \
$(OBJDIR)/utdecode.o\
$(OBJDIR)/utdelete.o\
$(OBJDIR)/uterror.o\
$(OBJDIR)/uteval.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utglobal.o\
$(OBJDIR)/utids.o\
$(OBJDIR)/utinit.o\
$(OBJDIR)/utlock.o\
$(OBJDIR)/utmath.o\
$(OBJDIR)/utmisc.o\
@ -130,6 +147,9 @@ OBJECTS = \
$(OBJDIR)/utobject.o\
$(OBJDIR)/utosi.o\
$(OBJDIR)/utownerid.o\
$(OBJDIR)/utpredef.o\
$(OBJDIR)/utprint.o\
$(OBJDIR)/utresrc.o\
$(OBJDIR)/utstate.o\
$(OBJDIR)/utstring.o\
$(OBJDIR)/utxface.o\

View File

@ -155,6 +155,7 @@ OBJECTS = \
$(OBJDIR)/nsxfeval.o\
$(OBJDIR)/nsxfname.o\
$(OBJDIR)/nsxfobj.o\
$(OBJDIR)/oslibcfs.o\
$(OBJDIR)/osunixxf.o\
$(OBJDIR)/psargs.o\
$(OBJDIR)/psloop.o\
@ -201,6 +202,7 @@ OBJECTS = \
$(OBJDIR)/uterror.o\
$(OBJDIR)/uteval.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utfileio.o\
$(OBJDIR)/utglobal.o\
$(OBJDIR)/utids.o\
$(OBJDIR)/utinit.o\
@ -212,6 +214,7 @@ OBJECTS = \
$(OBJDIR)/utosi.o\
$(OBJDIR)/utownerid.o\
$(OBJDIR)/utpredef.o\
$(OBJDIR)/utprint.o\
$(OBJDIR)/utresrc.o\
$(OBJDIR)/utstate.o\
$(OBJDIR)/utstring.o\

View File

@ -21,7 +21,8 @@ PROG = $(OBJDIR)/acpihelp
vpath %.c \
$(ACPIHELP)\
$(ACPICA_COMMON)\
$(ACPICA_UTILITIES)
$(ACPICA_UTILITIES)\
$(ACPICA_OSL)
HEADERS = \
$(wildcard $(ACPIHELP)/*.h)
@ -35,8 +36,14 @@ OBJECTS = \
$(OBJDIR)/ahpredef.o\
$(OBJDIR)/ahmain.o\
$(OBJDIR)/getopt.o\
$(OBJDIR)/oslibcfs.o\
$(OBJDIR)/osunixxf.o\
$(OBJDIR)/utdebug.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utpredef.o
$(OBJDIR)/utglobal.o\
$(OBJDIR)/utmath.o\
$(OBJDIR)/utpredef.o\
$(OBJDIR)/utprint.o
#
# Flags specific to acpihelp

View File

@ -21,7 +21,6 @@ PROG = $(OBJDIR)/acpinames
#
vpath %.c \
$(ACPINAMES)\
$(ACPICA_DEBUGGER)\
$(ACPICA_DISPATCHER)\
$(ACPICA_EXECUTER)\
$(ACPICA_NAMESPACE)\
@ -39,7 +38,6 @@ OBJECTS = \
$(OBJDIR)/anstubs.o\
$(OBJDIR)/antables.o\
$(OBJDIR)/cmfsize.o\
$(OBJDIR)/dbfileio.o\
$(OBJDIR)/dsfield.o\
$(OBJDIR)/dsmthdat.o\
$(OBJDIR)/dsobject.o\
@ -49,9 +47,12 @@ OBJECTS = \
$(OBJDIR)/dswscope.o\
$(OBJDIR)/dswstate.o\
$(OBJDIR)/excreate.o\
$(OBJDIR)/exdump.o\
$(OBJDIR)/exmutex.o\
$(OBJDIR)/exnames.o\
$(OBJDIR)/exresnte.o\
$(OBJDIR)/exresolv.o\
$(OBJDIR)/exsystem.o\
$(OBJDIR)/exutils.o\
$(OBJDIR)/getopt.o\
$(OBJDIR)/nsaccess.o\
@ -68,6 +69,7 @@ OBJECTS = \
$(OBJDIR)/nsxfeval.o\
$(OBJDIR)/nsxfname.o\
$(OBJDIR)/nsxfobj.o\
$(OBJDIR)/oslibcfs.o\
$(OBJDIR)/osunixxf.o\
$(OBJDIR)/psargs.o\
$(OBJDIR)/psloop.o\
@ -91,13 +93,18 @@ OBJECTS = \
$(OBJDIR)/tbxfroot.o\
$(OBJDIR)/utaddress.o\
$(OBJDIR)/utalloc.o\
$(OBJDIR)/utbuffer.o\
$(OBJDIR)/utcache.o\
$(OBJDIR)/utdebug.o\
$(OBJDIR)/utdecode.o\
$(OBJDIR)/utdelete.o\
$(OBJDIR)/uterror.o\
$(OBJDIR)/uteval.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utfileio.o\
$(OBJDIR)/utglobal.o\
$(OBJDIR)/utids.o\
$(OBJDIR)/utinit.o\
$(OBJDIR)/utlock.o\
$(OBJDIR)/utmath.o\
$(OBJDIR)/utmisc.o\
@ -105,6 +112,7 @@ OBJECTS = \
$(OBJDIR)/utobject.o\
$(OBJDIR)/utosi.o\
$(OBJDIR)/utownerid.o\
$(OBJDIR)/utprint.o\
$(OBJDIR)/utstate.o\
$(OBJDIR)/utstring.o\
$(OBJDIR)/utxface.o\

View File

@ -19,6 +19,7 @@ PROG = $(OBJDIR)/acpisrc
#
vpath %.c \
$(ACPISRC)\
$(ACPICA_UTILITIES)\
$(ACPICA_COMMON)\
$(ACPICA_OSL)
@ -33,9 +34,17 @@ OBJECTS = \
$(OBJDIR)/asremove.o\
$(OBJDIR)/astable.o\
$(OBJDIR)/asutils.o\
$(OBJDIR)/cmfsize.o\
$(OBJDIR)/cmfsize.o\
$(OBJDIR)/getopt.o \
$(OBJDIR)/osunixdir.o
$(OBJDIR)/oslibcfs.o\
$(OBJDIR)/osunixdir.o\
$(OBJDIR)/osunixxf.o\
$(OBJDIR)/utdebug.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utglobal.o\
$(OBJDIR)/utmath.o\
$(OBJDIR)/utprint.o\
$(OBJDIR)/utxferror.o
#
# Compile flags specific to acpisrc

View File

@ -19,7 +19,9 @@ PROG = $(OBJDIR)/acpixtract
#
vpath %.c \
$(ACPIXTRACT)\
$(ACPICA_COMMON)
$(ACPICA_UTILITIES)\
$(ACPICA_COMMON)\
$(ACPICA_OSL)
HEADERS = \
$(wildcard $(ACPIXTRACT)/*.h)
@ -27,7 +29,15 @@ HEADERS = \
OBJECTS = \
$(OBJDIR)/acpixtract.o\
$(OBJDIR)/axmain.o\
$(OBJDIR)/getopt.o
$(OBJDIR)/getopt.o\
$(OBJDIR)/oslibcfs.o\
$(OBJDIR)/osunixxf.o\
$(OBJDIR)/utdebug.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utglobal.o\
$(OBJDIR)/utmath.o\
$(OBJDIR)/utprint.o\
$(OBJDIR)/utxferror.o
#
# Flags specific to acpixtract

View File

@ -160,6 +160,7 @@ OBJECTS = \
$(OBJDIR)/nswalk.o\
$(OBJDIR)/nsxfobj.o\
$(OBJDIR)/osunixxf.o\
$(OBJDIR)/oslibcfs.o\
$(OBJDIR)/prexpress.o\
$(OBJDIR)/prmacros.o\
$(OBJDIR)/prscan.o\
@ -190,6 +191,7 @@ OBJECTS = \
$(OBJDIR)/utdelete.o\
$(OBJDIR)/uterror.o\
$(OBJDIR)/utexcep.o\
$(OBJDIR)/utfileio.o\
$(OBJDIR)/utglobal.o\
$(OBJDIR)/utinit.o\
$(OBJDIR)/utlock.o\
@ -199,6 +201,7 @@ OBJECTS = \
$(OBJDIR)/utobject.o\
$(OBJDIR)/utownerid.o\
$(OBJDIR)/utpredef.o\
$(OBJDIR)/utprint.o\
$(OBJDIR)/utresrc.o\
$(OBJDIR)/utstate.o\
$(OBJDIR)/utstring.o\

View File

@ -217,7 +217,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"),

View File

@ -59,33 +59,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;
@ -93,7 +94,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;
}
@ -102,10 +104,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);
}

View File

@ -51,14 +51,12 @@
* "f|" - Option has required single-char sub-options
*/
#include <stdio.h>
#include <string.h>
#include "acpi.h"
#include "accommon.h"
#include "acapps.h"
#define ACPI_OPTION_ERROR(msg, badchar) \
if (AcpiGbl_Opterr) {fprintf (stderr, "%s%c\n", msg, badchar);}
if (AcpiGbl_Opterr) {AcpiLogError ("%s%c\n", msg, badchar);}
int AcpiGbl_Opterr = 1;
@ -123,7 +121,7 @@ AcpiGetoptArgument (
* PARAMETERS: argc, argv - from main
* opts - options info list
*
* RETURN: Option character or EOF
* RETURN: Option character or ACPI_OPT_END
*
* DESCRIPTION: Get the next option
*
@ -145,12 +143,12 @@ AcpiGetopt(
argv[AcpiGbl_Optind][0] != '-' ||
argv[AcpiGbl_Optind][1] == '\0')
{
return (EOF);
return (ACPI_OPT_END);
}
else if (strcmp (argv[AcpiGbl_Optind], "--") == 0)
else if (ACPI_STRCMP (argv[AcpiGbl_Optind], "--") == 0)
{
AcpiGbl_Optind++;
return (EOF);
return (ACPI_OPT_END);
}
}
@ -161,7 +159,7 @@ AcpiGetopt(
/* Make sure that the option is legal */
if (CurrentChar == ':' ||
(OptsPtr = strchr (opts, CurrentChar)) == NULL)
(OptsPtr = ACPI_STRCHR (opts, CurrentChar)) == NULL)
{
ACPI_OPTION_ERROR ("Illegal option: -", CurrentChar);

View File

@ -569,51 +569,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);
}

View File

@ -275,11 +275,6 @@ void
ApCheckRegMethod (
ACPI_PARSE_OBJECT *Op);
BOOLEAN
ApFindNameInScope (
char *Name,
ACPI_PARSE_OBJECT *Op);
/*
* aslerror - error handling/reporting
@ -350,10 +345,6 @@ void
AeClearErrorLog (
void);
ACPI_PHYSICAL_ADDRESS
AeLocalGetRootPointer (
void);
/*
* asllisting - generate all "listing" type files

View File

@ -341,6 +341,7 @@ main (
return (-1);
}
AcpiOsInitialize ();
ACPI_DEBUG_INITIALIZE (); /* For debug version only */
/* Initialize preprocessor and compiler before command line processing */

View File

@ -233,7 +233,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 */

View File

@ -235,7 +235,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 */

View File

@ -108,17 +108,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;
@ -424,15 +413,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:

View File

@ -168,7 +168,7 @@ AslDoOptions (
/* Get the command line options */
while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != EOF) switch (j)
while ((j = AcpiGetopt (argc, argv, ASL_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j)
{
case '@': /* Begin a response file */

View File

@ -57,13 +57,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)
@ -232,21 +225,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);
}

View File

@ -46,14 +46,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)
@ -62,18 +55,6 @@
#ifdef ACPI_DEBUGGER
/* Local prototypes */
#ifdef ACPI_APPLICATION
static ACPI_STATUS
AcpiDbCheckTextModeCorruption (
UINT8 *Table,
UINT32 TableLength,
UINT32 FileLength);
#endif
/*******************************************************************************
*
* FUNCTION: AcpiDbCloseDebugFile
@ -144,245 +125,6 @@ AcpiDbOpenDebugFile (
#ifdef ACPI_APPLICATION
#include "acapps.h"
/*******************************************************************************
*
* 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
@ -456,62 +198,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
@ -539,7 +225,7 @@ AcpiDbGetTableFromFile (
BOOLEAN IsAmlTable = TRUE;
Status = AcpiDbReadTableFromFile (Filename, &Table);
Status = AcpiUtReadTableFromFile (Filename, &Table);
if (ACPI_FAILURE (Status))
{
return (Status);

View File

@ -1042,6 +1042,7 @@ AcpiDbEvaluateOnePredefinedName (
Status = AcpiGetObjectInfo (ObjHandle, &ObjInfo);
if (ACPI_FAILURE (Status))
{
ACPI_FREE (Pathname);
return (Status);
}

View File

@ -71,6 +71,8 @@ AcpiDmPldBuffer (
UINT8 *ByteData,
UINT32 ByteCount);
#define ACPI_BUFFER_BYTES_PER_LINE 8
/*******************************************************************************
*
@ -94,6 +96,9 @@ AcpiDmDisasmByteList (
UINT32 ByteCount)
{
UINT32 i;
UINT32 j;
UINT32 CurrentIndex;
UINT8 BufChar;
if (!ByteCount)
@ -101,39 +106,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 */
if (((i % 8) == 0) && (i < ByteCount))
AcpiDmIndent (Level);
if (ByteCount > ACPI_BUFFER_BYTES_PER_LINE)
{
if (i > 0)
AcpiOsPrintf ("/* %04X */ ", i);
}
/* Dump the actual hex values */
for (j = 0; j < ACPI_BUFFER_BYTES_PER_LINE; j++)
{
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]);
/* Dump the ASCII equivalents within a comment */
/* Add comma if there are more bytes to display */
if (i < (ByteCount -1))
AcpiOsPrintf (" /* ");
for (j = 0; j < ACPI_BUFFER_BYTES_PER_LINE; j++)
{
AcpiOsPrintf (",");
}
}
CurrentIndex = i + j;
if (CurrentIndex >= ByteCount)
{
break;
}
if (Level)
{
AcpiOsPrintf ("\n");
BufChar = ByteData[CurrentIndex];
if (ACPI_IS_PRINT (BufChar))
{
AcpiOsPrintf ("%c", BufChar);
}
else
{
AcpiOsPrintf (".");
}
}
/* Finished with this line */
AcpiOsPrintf (" */\n");
}
}

View File

@ -957,6 +957,13 @@ AcpiDmAscendingOp (
return (AE_OK);
}
/*
* 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
@ -965,25 +972,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 (") {");
}
}

View File

@ -48,11 +48,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);
}
/*******************************************************************************
*
@ -80,6 +149,7 @@ AcpiExReadDataFromField (
ACPI_SIZE Length;
void *Buffer;
UINT32 Function;
UINT16 AccessorType;
ACPI_FUNCTION_TRACE_PTR (ExReadDataFromField, ObjDesc);
@ -129,8 +199,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 */
{
@ -251,6 +333,7 @@ AcpiExWriteDataToField (
void *Buffer;
ACPI_OPERAND_OBJECT *BufferDesc;
UINT32 Function;
UINT16 AccessorType;
ACPI_FUNCTION_TRACE_PTR (ExWriteDataToField, ObjDesc);
@ -310,8 +393,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 */
{

View File

@ -310,17 +310,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);
}

View File

@ -265,6 +265,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;

View File

@ -352,7 +352,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
@ -365,19 +401,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);
@ -397,16 +433,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);

View File

@ -210,7 +210,7 @@ AcpiTbInstallFixedTable (
/* Validate and verify a table before installation */
Status = AcpiTbVerifyTable (&NewTableDesc, Signature);
Status = AcpiTbVerifyTempTable (&NewTableDesc, Signature);
if (ACPI_FAILURE (Status))
{
goto ReleaseAndExit;
@ -290,7 +290,7 @@ AcpiTbInstallStandardTable (
/* Validate and verify a table before installation */
Status = AcpiTbVerifyTable (&NewTableDesc, NULL);
Status = AcpiTbVerifyTempTable (&NewTableDesc, NULL);
if (ACPI_FAILURE (Status))
{
goto ReleaseAndExit;
@ -455,7 +455,7 @@ AcpiTbOverrideTable (
/* Validate and verify a table before overriding */
Status = AcpiTbVerifyTable (&NewTableDesc, NULL);
Status = AcpiTbVerifyTempTable (&NewTableDesc, NULL);
if (ACPI_FAILURE (Status))
{
return;
@ -477,7 +477,7 @@ AcpiTbOverrideTable (
*/
AcpiTbInitTableDescriptor (OldTableDesc, NewTableDesc.Address,
NewTableDesc.Flags, NewTableDesc.Pointer);
AcpiTbValidateTable (OldTableDesc);
AcpiTbValidateTempTable (OldTableDesc);
/* Release the temporary table descriptor */

View File

@ -427,10 +427,6 @@ AcpiTbParseRootTable (
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);

View File

@ -218,3 +218,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

View File

@ -308,8 +308,6 @@ AcpiUtStrcmp (
}
#ifdef ACPI_FUTURE_IMPLEMENTATION
/* Not used at this time */
/*******************************************************************************
*
* FUNCTION: AcpiUtStrchr (strchr)
@ -340,7 +338,7 @@ AcpiUtStrchr (
return (NULL);
}
#endif
/*******************************************************************************
*

View File

@ -1063,5 +1063,12 @@ AcpiUtCopyIobjectToIobject (
Status = AcpiUtCopySimpleObject (SourceDesc, *DestDesc);
}
/* Delete the allocated object if copy failed */
if (ACPI_FAILURE (Status))
{
AcpiUtRemoveReference(*DestDesc);
}
return_ACPI_STATUS (Status);
}

View File

@ -636,3 +636,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

View File

@ -0,0 +1,363 @@
/*******************************************************************************
*
* Module Name: utfileio - simple file I/O routines
*
******************************************************************************/
/*
* Copyright (C) 2000 - 2014, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#include "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

View File

@ -173,163 +173,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)

View File

@ -116,6 +116,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

View File

@ -0,0 +1,796 @@
/******************************************************************************
*
* Module Name: utprint - Formatted printing routines
*
*****************************************************************************/
/*
* Copyright (C) 2000 - 2014, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#include "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

View File

@ -84,10 +84,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"
@ -119,7 +122,7 @@ extern char *AcpiGbl_Optarg;
*/
UINT32
CmGetFileSize (
FILE *File);
ACPI_FILE File);
#ifndef ACPI_DUMP_APP

View File

@ -377,11 +377,6 @@ AcpiDbGetTableFromFile (
char *Filename,
ACPI_TABLE_HEADER **Table);
ACPI_STATUS
AcpiDbReadTableFromFile (
char *Filename,
ACPI_TABLE_HEADER **Table);
/*
* dbhistry - debugger HISTORY command

View File

@ -301,7 +301,7 @@ ACPI_GLOBAL (UINT32, AcpiGbl_TraceDbgLayer);
*
****************************************************************************/
ACPI_GLOBAL (UINT8, AcpiGbl_DbOutputFlags);
ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DbOutputFlags, ACPI_DB_CONSOLE_OUTPUT);
#ifdef ACPI_DISASSEMBLER
@ -367,6 +367,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 */

View File

@ -55,7 +55,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"

View File

@ -62,8 +62,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__ */

View File

@ -551,4 +551,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__ */

View File

@ -46,7 +46,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
#define ACPI_CA_VERSION 0x20140424
#define ACPI_CA_VERSION 0x20140627
#include "acconfig.h"
#include "actypes.h"
@ -161,6 +161,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.
*/
@ -334,6 +343,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
@ -1136,4 +1163,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__ */

View File

@ -688,12 +688,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)}},

View File

@ -86,6 +86,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);
@ -135,11 +144,6 @@ void
AcpiTbInvalidateTable (
ACPI_TABLE_DESC *TableDesc);
ACPI_STATUS
AcpiTbVerifyTable (
ACPI_TABLE_DESC *TableDesc,
char *Signature);
void
AcpiTbOverrideTable (
ACPI_TABLE_DESC *OldTableDesc);

View File

@ -127,6 +127,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;
@ -1336,4 +1337,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__ */

View File

@ -96,7 +96,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; \
@ -252,6 +251,11 @@ ACPI_SIZE
AcpiUtStrlen (
const char *String);
char *
AcpiUtStrchr (
const char *String,
int ch);
char *
AcpiUtStrcpy (
char *DstString,
@ -340,7 +344,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 */
@ -482,6 +486,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,
@ -550,6 +564,17 @@ AcpiUtExecutePowerMethods (
UINT8 *OutValues);
/*
* utfileio - file operations
*/
#ifdef ACPI_APPLICATION
ACPI_STATUS
AcpiUtReadTableFromFile (
char *Filename,
ACPI_TABLE_HEADER **Table);
#endif
/*
* utids - device ID support
*/
@ -1110,4 +1135,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 */

View File

@ -92,11 +92,14 @@
/*
* The vsnprintf function is defined by c99, but cygwin/gcc does not
* enable this prototype when the -ansi flag is set. Also related to
* __STRICT_ANSI__. So, we just declare the prototype here.
* The vsnprintf/snprintf functions are defined by c99, but cygwin/gcc
* does not enable this prototype when the -ansi flag is set. Also related
* to __STRICT_ANSI__. So, we just declare the prototype here.
*/
int
vsnprintf (char *s, size_t n, const char *format, va_list ap);
int
snprintf (char *s, size_t n, const char *format, ...);
#endif /* __ACCYGWIN_H__ */

View File

@ -44,11 +44,20 @@
#ifndef __ACEFI_H__
#define __ACEFI_H__
#include <stdarg.h>
#if defined(_GNU_EFI)
#include <stdint.h>
#include <unistd.h>
#endif
#include <efi.h>
#include <efistdarg.h>
#include <efilib.h>
/* AED EFI definitions */
#if defined(_AED_EFI)
/* _int64 works for both IA32 and IA64 */
#define COMPILER_DEPENDENT_INT64 __int64
@ -71,5 +80,57 @@
#pragma warning(disable:4142)
#endif
/* GNU EFI definitions */
#if defined(_GNU_EFI)
/* Using GCC for GNU EFI */
#include "acgcc.h"
#undef ACPI_USE_SYSTEM_CLIBRARY
#undef ACPI_USE_STANDARD_HEADERS
#undef ACPI_USE_NATIVE_DIVIDE
#define ACPI_USE_SYSTEM_INTTYPES
#define ACPI_FILE SIMPLE_TEXT_OUTPUT_INTERFACE *
#define ACPI_FILE_OUT ST->ConOut
#define ACPI_FILE_ERR ST->ConOut
/*
* Math helpers
*/
#define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \
do { \
UINT64 __n = ((UINT64) n_hi) << 32 | (n_lo); \
(q32) = DivU64x32 ((__n), (d32), &(r32)); \
} while (0)
#define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \
do { \
(n_lo) >>= 1; \
(n_lo) |= (((n_hi) & 1) << 31); \
(n_hi) >>= 1; \
} while (0)
/*
* EFI specific prototypes
*/
EFI_STATUS
efi_main (
EFI_HANDLE Image,
EFI_SYSTEM_TABLE *SystemTab);
int
acpi_main (
int argc,
char *argv[]);
#endif
#endif /* __ACEFI_H__ */

View File

@ -88,20 +88,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)
@ -109,12 +103,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
@ -185,6 +207,9 @@
#elif defined(_AED_EFI)
#include "acefi.h"
#elif defined(_GNU_EFI)
#include "acefi.h"
#elif defined(__HAIKU__)
#include "achaiku.h"
@ -401,8 +426,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 */

View File

@ -0,0 +1,63 @@
/******************************************************************************
*
* Name: acenvex.h - Extra host and compiler configuration
*
*****************************************************************************/
/*
* Copyright (C) 2000 - 2014, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#ifndef __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__ */

View File

@ -48,13 +48,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>
@ -66,7 +71,7 @@
#ifdef EXPORT_ACPI_INTERFACES
#include <linux/export.h>
#endif
#include <asm/acpi.h>
#include <asm/acenv.h>
#ifndef CONFIG_ACPI
@ -109,6 +114,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>
@ -154,153 +195,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__ */

View File

@ -0,0 +1,137 @@
/******************************************************************************
*
* Name: aclinuxex.h - Extra OS specific defines, etc. for Linux
*
*****************************************************************************/
/*
* Copyright (C) 2000 - 2014, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#ifndef __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__ */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,251 @@
/******************************************************************************
*
* Module Name: oslibcfs - C library OSL for file IO
*
*****************************************************************************/
/*
* Copyright (C) 2000 - 2014, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#include "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);
}
}

View File

@ -97,6 +97,11 @@ static void
OslUnmapTable (
ACPI_TABLE_HEADER *Table);
static ACPI_PHYSICAL_ADDRESS
OslFindRsdpViaEfiByKeyword (
FILE *File,
const char *Keyword);
static ACPI_PHYSICAL_ADDRESS
OslFindRsdpViaEfi (
void);
@ -488,6 +493,44 @@ AcpiOsGetTableByIndex (
}
/******************************************************************************
*
* FUNCTION: OslFindRsdpViaEfiByKeyword
*
* PARAMETERS: Keyword - Character string indicating ACPI GUID version
* in the EFI table
*
* RETURN: RSDP address if found
*
* DESCRIPTION: Find RSDP address via EFI using keyword indicating the ACPI
* GUID version.
*
*****************************************************************************/
static ACPI_PHYSICAL_ADDRESS
OslFindRsdpViaEfiByKeyword (
FILE *File,
const char *Keyword)
{
char Buffer[80];
unsigned long long Address = 0;
char Format[32];
snprintf (Format, 32, "%s=%s", Keyword, "%llx");
fseek (File, 0, SEEK_SET);
while (fgets (Buffer, 80, File))
{
if (sscanf (Buffer, Format, &Address) == 1)
{
break;
}
}
return ((ACPI_PHYSICAL_ADDRESS) (Address));
}
/******************************************************************************
*
* FUNCTION: OslFindRsdpViaEfi
@ -505,24 +548,21 @@ OslFindRsdpViaEfi (
void)
{
FILE *File;
char Buffer[80];
unsigned long Address = 0;
ACPI_PHYSICAL_ADDRESS Address = 0;
File = fopen (EFI_SYSTAB, "r");
if (File)
{
while (fgets (Buffer, 80, File))
Address = OslFindRsdpViaEfiByKeyword (File, "ACPI20");
if (!Address)
{
if (sscanf (Buffer, "ACPI20=0x%lx", &Address) == 1)
{
break;
}
Address = OslFindRsdpViaEfiByKeyword (File, "ACPI");
}
fclose (File);
}
return ((ACPI_PHYSICAL_ADDRESS) (Address));
return (Address);
}
@ -907,6 +947,11 @@ OslGetBiosTable (
ACPI_COMPARE_NAME (Signature, ACPI_SIG_DSDT) ||
ACPI_COMPARE_NAME (Signature, ACPI_SIG_FACS))
{
if (Instance > 0)
{
return (AE_LIMIT);
}
/*
* Get the appropriate address, either 32-bit or 64-bit. Be very
* careful about the FADT length and validate table addresses.

View File

@ -65,16 +65,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,
@ -214,10 +209,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);
}
@ -231,6 +235,7 @@ AcpiOsTerminate (
}
#ifndef ACPI_USE_NATIVE_RSDP_POINTER
/******************************************************************************
*
* FUNCTION: AcpiOsGetRootPointer
@ -248,8 +253,9 @@ AcpiOsGetRootPointer (
void)
{
return (AeLocalGetRootPointer ());
return (0);
}
#endif
/******************************************************************************
@ -548,6 +554,7 @@ AcpiOsGetLine (
#endif
#ifndef ACPI_USE_NATIVE_MEMORY_MAPPING
/******************************************************************************
*
* FUNCTION: AcpiOsMapMemory
@ -593,6 +600,7 @@ AcpiOsUnmapMemory (
return;
}
#endif
/******************************************************************************
@ -619,6 +627,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
@ -1454,6 +1488,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 */

View File

@ -64,7 +64,6 @@
ACPI_MODULE_NAME ("oswinxf")
FILE *AcpiGbl_OutputFile;
UINT64 TimerFrequency;
char TableName[ACPI_NAME_SIZE + 1];
@ -73,10 +72,6 @@ char TableName[ACPI_NAME_SIZE + 1];
/* Upcalls to AcpiExec application */
ACPI_PHYSICAL_ADDRESS
AeLocalGetRootPointer (
void);
void
AeTableOverride (
ACPI_TABLE_HEADER *ExistingTable,
@ -143,6 +138,7 @@ ACPI_STATUS
AcpiOsInitialize (
void)
{
ACPI_STATUS Status;
LARGE_INTEGER LocalTimerFrequency;
@ -164,10 +160,17 @@ AcpiOsInitialize (
TimerFrequency = LocalTimerFrequency.QuadPart;
}
Status = AcpiOsCreateLock (&AcpiGbl_PrintLock);
if (ACPI_FAILURE (Status))
{
return (Status);
}
return (AE_OK);
}
#ifndef ACPI_USE_NATIVE_RSDP_POINTER
/******************************************************************************
*
* FUNCTION: AcpiOsGetRootPointer
@ -185,8 +188,9 @@ AcpiOsGetRootPointer (
void)
{
return (AeLocalGetRootPointer ());
return (0);
}
#endif
/******************************************************************************
@ -554,6 +558,7 @@ AcpiOsGetLine (
}
#ifndef ACPI_USE_NATIVE_MEMORY_MAPPING
/******************************************************************************
*
* FUNCTION: AcpiOsMapMemory
@ -599,6 +604,7 @@ AcpiOsUnmapMemory (
return;
}
#endif
/******************************************************************************
@ -626,6 +632,33 @@ 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
@ -1486,6 +1519,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 */

View File

@ -77,10 +77,6 @@ AbPrintHeadersInfo (
ACPI_TABLE_HEADER *Header,
ACPI_TABLE_HEADER *Header2);
ACPI_PHYSICAL_ADDRESS
AeLocalGetRootPointer (
void);
/******************************************************************************
*
@ -628,26 +624,3 @@ AbDumpAmlFile (
* DESCRIPTION: For linkage
*
******************************************************************************/
ACPI_PHYSICAL_ADDRESS
AeLocalGetRootPointer (
void)
{
return (AE_OK);
}
ACPI_THREAD_ID
AcpiOsGetThreadId (
void)
{
return (0xFFFF);
}
ACPI_STATUS
AcpiOsExecute (
ACPI_EXECUTE_TYPE Type,
ACPI_OSD_EXEC_CALLBACK Function,
void *Context)
{
return (AE_SUPPORT);
}

View File

@ -119,7 +119,7 @@ main (
/* Command line options */
while ((j = AcpiGetopt (argc, argv, AB_SUPPORTED_OPTIONS)) != EOF) switch(j)
while ((j = AcpiGetopt (argc, argv, AB_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch(j)
{
case 'c': /* Compare Files */

View File

@ -48,7 +48,6 @@
#ifdef _DECLARE_GLOBALS
#define EXTERN
#define INIT_GLOBAL(a,b) a=b
#define DEFINE_ACPI_GLOBALS 1
#else
#define EXTERN extern
#define INIT_GLOBAL(a,b) a
@ -71,7 +70,7 @@ EXTERN BOOLEAN INIT_GLOBAL (Gbl_VerboseMode, FALSE);
EXTERN BOOLEAN INIT_GLOBAL (Gbl_BinaryMode, FALSE);
EXTERN BOOLEAN INIT_GLOBAL (Gbl_DumpCustomizedTables, FALSE);
EXTERN BOOLEAN INIT_GLOBAL (Gbl_DoNotDumpXsdt, FALSE);
EXTERN FILE INIT_GLOBAL (*Gbl_OutputFile, NULL);
EXTERN ACPI_FILE INIT_GLOBAL (Gbl_OutputFile, NULL);
EXTERN char INIT_GLOBAL (*Gbl_OutputFilename, NULL);
EXTERN UINT64 INIT_GLOBAL (Gbl_RsdpBase, 0);

View File

@ -76,7 +76,7 @@ ApIsValidHeader (
if (!AcpiUtValidAcpiName (Table->Signature))
{
fprintf (stderr, "Table signature (0x%8.8X) is invalid\n",
AcpiLogError ("Table signature (0x%8.8X) is invalid\n",
*(UINT32 *) Table->Signature);
return (FALSE);
}
@ -85,7 +85,7 @@ ApIsValidHeader (
if (Table->Length < sizeof (ACPI_TABLE_HEADER))
{
fprintf (stderr, "Table length (0x%8.8X) is invalid\n",
AcpiLogError ("Table length (0x%8.8X) is invalid\n",
Table->Length);
return (FALSE);
}
@ -131,7 +131,7 @@ ApIsValidChecksum (
if (ACPI_FAILURE (Status))
{
fprintf (stderr, "%4.4s: Warning: wrong checksum in table\n",
AcpiLogError ("%4.4s: Warning: wrong checksum in table\n",
Table->Signature);
}
@ -223,12 +223,13 @@ ApDumpTableBuffer (
* Note: simplest to just always emit a 64-bit address. AcpiXtract
* utility can handle this.
*/
printf ("%4.4s @ 0x%8.8X%8.8X\n", Table->Signature,
ACPI_FORMAT_UINT64 (Address));
AcpiUtFilePrintf (Gbl_OutputFile, "%4.4s @ 0x%8.8X%8.8X\n",
Table->Signature, ACPI_FORMAT_UINT64 (Address));
AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, Table), TableLength,
AcpiUtDumpBufferToFile (Gbl_OutputFile,
ACPI_CAST_PTR (UINT8, Table), TableLength,
DB_BYTE_DISPLAY, 0);
printf ("\n");
AcpiUtFilePrintf (Gbl_OutputFile, "\n");
return (0);
}
@ -273,20 +274,20 @@ ApDumpAllTables (
}
else if (i == 0)
{
fprintf (stderr, "Could not get ACPI tables, %s\n",
AcpiLogError ("Could not get ACPI tables, %s\n",
AcpiFormatException (Status));
return (-1);
}
else
{
fprintf (stderr, "Could not get ACPI table at index %u, %s\n",
AcpiLogError ("Could not get ACPI table at index %u, %s\n",
i, AcpiFormatException (Status));
continue;
}
}
TableStatus = ApDumpTableBuffer (Table, Instance, Address);
free (Table);
ACPI_FREE (Table);
if (TableStatus)
{
@ -328,7 +329,7 @@ ApDumpTableByAddress (
Status = AcpiUtStrtoul64 (AsciiAddress, 0, &LongAddress);
if (ACPI_FAILURE (Status))
{
fprintf (stderr, "%s: Could not convert to a physical address\n",
AcpiLogError ("%s: Could not convert to a physical address\n",
AsciiAddress);
return (-1);
}
@ -337,14 +338,14 @@ ApDumpTableByAddress (
Status = AcpiOsGetTableByAddress (Address, &Table);
if (ACPI_FAILURE (Status))
{
fprintf (stderr, "Could not get table at 0x%8.8X%8.8X, %s\n",
AcpiLogError ("Could not get table at 0x%8.8X%8.8X, %s\n",
ACPI_FORMAT_UINT64 (Address),
AcpiFormatException (Status));
return (-1);
}
TableStatus = ApDumpTableBuffer (Table, 0, Address);
free (Table);
ACPI_FREE (Table);
return (TableStatus);
}
@ -374,9 +375,9 @@ ApDumpTableByName (
int TableStatus;
if (strlen (Signature) != ACPI_NAME_SIZE)
if (ACPI_STRLEN (Signature) != ACPI_NAME_SIZE)
{
fprintf (stderr,
AcpiLogError (
"Invalid table signature [%s]: must be exactly 4 characters\n",
Signature);
return (-1);
@ -384,18 +385,18 @@ ApDumpTableByName (
/* Table signatures are expected to be uppercase */
strcpy (LocalSignature, Signature);
ACPI_STRCPY (LocalSignature, Signature);
AcpiUtStrupr (LocalSignature);
/* To be friendly, handle tables whose signatures do not match the name */
if (ACPI_COMPARE_NAME (LocalSignature, "FADT"))
{
strcpy (LocalSignature, ACPI_SIG_FADT);
ACPI_STRCPY (LocalSignature, ACPI_SIG_FADT);
}
else if (ACPI_COMPARE_NAME (LocalSignature, "MADT"))
{
strcpy (LocalSignature, ACPI_SIG_MADT);
ACPI_STRCPY (LocalSignature, ACPI_SIG_MADT);
}
/* Dump all instances of this signature (to handle multiple SSDTs) */
@ -413,14 +414,14 @@ ApDumpTableByName (
return (0);
}
fprintf (stderr,
AcpiLogError (
"Could not get ACPI table with signature [%s], %s\n",
LocalSignature, AcpiFormatException (Status));
return (-1);
}
TableStatus = ApDumpTableBuffer (Table, Instance, Address);
free (Table);
ACPI_FREE (Table);
if (TableStatus)
{
@ -467,7 +468,7 @@ ApDumpTableFromFile (
if (Table->Length > FileSize)
{
fprintf (stderr,
AcpiLogError (
"Table length (0x%X) is too large for input file (0x%X) %s\n",
Table->Length, FileSize, Pathname);
goto Exit;
@ -475,7 +476,7 @@ ApDumpTableFromFile (
if (Gbl_VerboseMode)
{
fprintf (stderr,
AcpiLogError (
"Input file: %s contains table [%4.4s], 0x%X (%u) bytes\n",
Pathname, Table->Signature, FileSize, FileSize);
}
@ -483,35 +484,6 @@ ApDumpTableFromFile (
TableStatus = ApDumpTableBuffer (Table, 0, 0);
Exit:
free (Table);
ACPI_FREE (Table);
return (TableStatus);
}
/******************************************************************************
*
* FUNCTION: AcpiOs* print functions
*
* DESCRIPTION: Used for linkage with ACPICA modules
*
******************************************************************************/
void ACPI_INTERNAL_VAR_XFACE
AcpiOsPrintf (
const char *Fmt,
...)
{
va_list Args;
va_start (Args, Fmt);
vfprintf (stdout, Fmt, Args);
va_end (Args);
}
void
AcpiOsVprintf (
const char *Fmt,
va_list Args)
{
vfprintf (stdout, Fmt, Args);
}

View File

@ -45,6 +45,36 @@
#include "acapps.h"
/* Local prototypes */
static int
ApIsExistingFile (
char *Pathname);
static int
ApIsExistingFile (
char *Pathname)
{
#ifndef _GNU_EFI
struct stat StatInfo;
if (!stat (Pathname, &StatInfo))
{
AcpiLogError ("Target path already exists, overwrite? [y|n] ");
if (getchar () != 'y')
{
return (-1);
}
}
#endif
return 0;
}
/******************************************************************************
*
* FUNCTION: ApOpenOutputFile
@ -62,28 +92,22 @@ int
ApOpenOutputFile (
char *Pathname)
{
struct stat StatInfo;
FILE *File;
ACPI_FILE File;
/* If file exists, prompt for overwrite */
if (!stat (Pathname, &StatInfo))
if (ApIsExistingFile (Pathname) != 0)
{
fprintf (stderr, "Target path already exists, overwrite? [y|n] ");
if (getchar () != 'y')
{
return (-1);
}
return (-1);
}
/* Point stdout to the file */
File = freopen (Pathname, "w", stdout);
File = AcpiOsOpenFile (Pathname, ACPI_FILE_WRITING);
if (!File)
{
perror ("Could not open output file");
AcpiLogError ("Could not open output file: %s\n", Pathname);
return (-1);
}
@ -116,7 +140,7 @@ ApWriteToBinaryFile (
{
char Filename[ACPI_NAME_SIZE + 16];
char InstanceStr [16];
FILE *File;
ACPI_FILE File;
size_t Actual;
UINT32 TableLength;
@ -145,37 +169,38 @@ ApWriteToBinaryFile (
if (Instance > 0)
{
sprintf (InstanceStr, "%u", Instance);
strcat (Filename, InstanceStr);
AcpiUtSnprintf (InstanceStr, sizeof (InstanceStr), "%u", Instance);
ACPI_STRCAT (Filename, InstanceStr);
}
strcat (Filename, ACPI_TABLE_FILE_SUFFIX);
ACPI_STRCAT (Filename, ACPI_TABLE_FILE_SUFFIX);
if (Gbl_VerboseMode)
{
fprintf (stderr,
AcpiLogError (
"Writing [%4.4s] to binary file: %s 0x%X (%u) bytes\n",
Table->Signature, Filename, Table->Length, Table->Length);
}
/* Open the file and dump the entire table in binary mode */
File = fopen (Filename, "wb");
File = AcpiOsOpenFile (Filename,
ACPI_FILE_WRITING | ACPI_FILE_BINARY);
if (!File)
{
perror ("Could not open output file");
AcpiLogError ("Could not open output file: %s\n", Filename);
return (-1);
}
Actual = fwrite (Table, 1, TableLength, File);
Actual = AcpiOsWriteFile (File, Table, 1, TableLength);
if (Actual != TableLength)
{
perror ("Error writing binary output file");
fclose (File);
AcpiLogError ("Error writing binary output file: %s\n", Filename);
AcpiOsCloseFile (File);
return (-1);
}
fclose (File);
AcpiOsCloseFile (File);
return (0);
}
@ -199,17 +224,17 @@ ApGetTableFromFile (
UINT32 *OutFileSize)
{
ACPI_TABLE_HEADER *Buffer = NULL;
FILE *File;
ACPI_FILE File;
UINT32 FileSize;
size_t Actual;
/* Must use binary mode */
File = fopen (Pathname, "rb");
File = AcpiOsOpenFile (Pathname, ACPI_FILE_READING | ACPI_FILE_BINARY);
if (!File)
{
perror ("Could not open input file");
AcpiLogError ("Could not open input file: %s\n", Pathname);
return (NULL);
}
@ -218,29 +243,29 @@ ApGetTableFromFile (
FileSize = CmGetFileSize (File);
if (FileSize == ACPI_UINT32_MAX)
{
fprintf (stderr,
AcpiLogError (
"Could not get input file size: %s\n", Pathname);
goto Cleanup;
}
/* Allocate a buffer for the entire file */
Buffer = calloc (1, FileSize);
Buffer = ACPI_ALLOCATE_ZEROED (FileSize);
if (!Buffer)
{
fprintf (stderr,
AcpiLogError (
"Could not allocate file buffer of size: %u\n", FileSize);
goto Cleanup;
}
/* Read the entire file */
Actual = fread (Buffer, 1, FileSize, File);
Actual = AcpiOsReadFile (File, Buffer, 1, FileSize);
if (Actual != FileSize)
{
fprintf (stderr,
AcpiLogError (
"Could not read input file: %s\n", Pathname);
free (Buffer);
ACPI_FREE (Buffer);
Buffer = NULL;
goto Cleanup;
}
@ -248,6 +273,6 @@ ApGetTableFromFile (
*OutFileSize = FileSize;
Cleanup:
fclose (File);
AcpiOsCloseFile (File);
return (Buffer);
}

View File

@ -79,7 +79,7 @@ ApDoOptions (
int argc,
char **argv);
static void
static int
ApInsertAction (
char *Argument,
UINT32 ToBeDone);
@ -119,7 +119,7 @@ ApDisplayUsage (
ACPI_OPTION ("-v", "Display version information");
ACPI_OPTION ("-z", "Verbose mode");
printf ("\nTable Options:\n");
ACPI_USAGE_TEXT ("\nTable Options:\n");
ACPI_OPTION ("-a <Address>", "Get table via a physical address");
ACPI_OPTION ("-f <BinaryFile>", "Get table via a binary file");
@ -127,7 +127,7 @@ ApDisplayUsage (
ACPI_OPTION ("-x", "Do not use but dump XSDT");
ACPI_OPTION ("-x -x", "Do not use or dump XSDT");
printf (
ACPI_USAGE_TEXT (
"\n"
"Invocation without parameters dumps all available tables\n"
"Multiple mixed instances of -a, -f, and -n are supported\n\n");
@ -141,13 +141,13 @@ ApDisplayUsage (
* PARAMETERS: Argument - Pointer to the argument for this action
* ToBeDone - What to do to process this action
*
* RETURN: None. Exits program if action table becomes full.
* RETURN: Status
*
* DESCRIPTION: Add an action item to the action table
*
******************************************************************************/
static void
static int
ApInsertAction (
char *Argument,
UINT32 ToBeDone)
@ -161,9 +161,11 @@ ApInsertAction (
CurrentAction++;
if (CurrentAction > AP_MAX_ACTIONS)
{
fprintf (stderr, "Too many table options (max %u)\n", AP_MAX_ACTIONS);
exit (-1);
AcpiLogError ("Too many table options (max %u)\n", AP_MAX_ACTIONS);
return (-1);
}
return (0);
}
@ -191,7 +193,7 @@ ApDoOptions (
/* Command line options */
while ((j = AcpiGetopt (argc, argv, AP_SUPPORTED_OPTIONS)) != EOF) switch (j)
while ((j = AcpiGetopt (argc, argv, AP_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j)
{
/*
* Global options
@ -210,13 +212,13 @@ ApDoOptions (
case '?':
ApDisplayUsage ();
exit (0);
return (1);
case 'o': /* Redirect output to a single file */
if (ApOpenOutputFile (AcpiGbl_Optarg))
{
exit (-1);
return (-1);
}
continue;
@ -225,9 +227,9 @@ ApDoOptions (
Status = AcpiUtStrtoul64 (AcpiGbl_Optarg, 0, &Gbl_RsdpBase);
if (ACPI_FAILURE (Status))
{
fprintf (stderr, "%s: Could not convert to a physical address\n",
AcpiLogError ("%s: Could not convert to a physical address\n",
AcpiGbl_Optarg);
exit (-1);
return (-1);
}
continue;
@ -250,13 +252,13 @@ ApDoOptions (
case 'v': /* Revision/version */
printf (ACPI_COMMON_SIGNON (AP_UTILITY_NAME));
exit (0);
AcpiOsPrintf (ACPI_COMMON_SIGNON (AP_UTILITY_NAME));
return (1);
case 'z': /* Verbose mode */
Gbl_VerboseMode = TRUE;
fprintf (stderr, ACPI_COMMON_SIGNON (AP_UTILITY_NAME));
AcpiLogError (ACPI_COMMON_SIGNON (AP_UTILITY_NAME));
continue;
/*
@ -264,30 +266,42 @@ ApDoOptions (
*/
case 'a': /* Get table by physical address */
ApInsertAction (AcpiGbl_Optarg, AP_DUMP_TABLE_BY_ADDRESS);
if (ApInsertAction (AcpiGbl_Optarg, AP_DUMP_TABLE_BY_ADDRESS))
{
return (-1);
}
break;
case 'f': /* Get table from a file */
ApInsertAction (AcpiGbl_Optarg, AP_DUMP_TABLE_BY_FILE);
if (ApInsertAction (AcpiGbl_Optarg, AP_DUMP_TABLE_BY_FILE))
{
return (-1);
}
break;
case 'n': /* Get table by input name (signature) */
ApInsertAction (AcpiGbl_Optarg, AP_DUMP_TABLE_BY_NAME);
if (ApInsertAction (AcpiGbl_Optarg, AP_DUMP_TABLE_BY_NAME))
{
return (-1);
}
break;
default:
ApDisplayUsage ();
exit (-1);
return (-1);
}
/* If there are no actions, this means "get/dump all tables" */
if (CurrentAction == 0)
{
ApInsertAction (NULL, AP_DUMP_ALL_TABLES);
if (ApInsertAction (NULL, AP_DUMP_ALL_TABLES))
{
return (-1);
}
}
return (0);
@ -306,10 +320,17 @@ ApDoOptions (
*
******************************************************************************/
#ifndef _GNU_EFI
int ACPI_SYSTEM_XFACE
main (
int argc,
char *argv[])
#else
int ACPI_SYSTEM_XFACE
acpi_main (
int argc,
char *argv[])
#endif
{
int Status = 0;
AP_DUMP_ACTION *Action;
@ -318,12 +339,19 @@ main (
ACPI_DEBUG_INITIALIZE (); /* For debug version only */
AcpiOsInitialize ();
Gbl_OutputFile = ACPI_FILE_OUT;
/* Process command line options */
if (ApDoOptions (argc, argv))
Status = ApDoOptions (argc, argv);
if (Status > 0)
{
return (-1);
return (0);
}
if (Status < 0)
{
return (Status);
}
/* Get/dump ACPI table(s) as requested */
@ -355,7 +383,7 @@ main (
default:
fprintf (stderr, "Internal error, invalid action: 0x%X\n",
AcpiLogError ("Internal error, invalid action: 0x%X\n",
Action->ToBeDone);
return (-1);
}
@ -366,18 +394,18 @@ main (
}
}
if (Gbl_OutputFile)
if (Gbl_OutputFilename)
{
if (Gbl_VerboseMode)
{
/* Summary for the output file */
FileSize = CmGetFileSize (Gbl_OutputFile);
fprintf (stderr, "Output file %s contains 0x%X (%u) bytes\n\n",
AcpiLogError ("Output file %s contains 0x%X (%u) bytes\n\n",
Gbl_OutputFilename, FileSize, FileSize);
}
fclose (Gbl_OutputFile);
AcpiOsCloseFile (Gbl_OutputFile);
}
return (Status);

View File

@ -1055,11 +1055,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);
}
@ -1305,6 +1315,10 @@ AeRegionHandler (
switch (Function >> 16)
{
case AML_FIELD_ATTRIB_QUICK:
Length = 0;
break;
case AML_FIELD_ATTRIB_SEND_RCV:
case AML_FIELD_ATTRIB_BYTE:

View File

@ -166,7 +166,7 @@ AeDoOptions (
int j;
while ((j = AcpiGetopt (argc, argv, AE_SUPPORTED_OPTIONS)) != EOF) switch (j)
while ((j = AcpiGetopt (argc, argv, AE_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j)
{
case 'b':
@ -375,22 +375,14 @@ main (
ACPI_DEBUG_INITIALIZE (); /* For debug version only */
printf (ACPI_COMMON_SIGNON (ACPIEXEC_NAME));
if (argc < 2)
{
usage ();
return (0);
}
signal (SIGINT, AeCtrlCHandler);
/* Init globals */
/* Init debug globals */
AcpiDbgLevel = ACPI_NORMAL_DEFAULT;
AcpiDbgLayer = 0xFFFFFFFF;
/* Init ACPI and start debugger thread */
/* Init ACPICA and start debugger thread */
Status = AcpiInitializeSubsystem ();
AE_CHECK_OK (AcpiInitializeSubsystem, Status);
@ -399,6 +391,13 @@ main (
goto ErrorExit;
}
printf (ACPI_COMMON_SIGNON (ACPIEXEC_NAME));
if (argc < 2)
{
usage ();
return (0);
}
/* Get the command line options */
if (AeDoOptions (argc, argv))
@ -422,7 +421,7 @@ main (
{
/* Get one entire table */
Status = AcpiDbReadTableFromFile (argv[AcpiGbl_Optind], &Table);
Status = AcpiUtReadTableFromFile (argv[AcpiGbl_Optind], &Table);
if (ACPI_FAILURE (Status))
{
printf ("**** Could not get table from file %s, %s\n",

View File

@ -60,10 +60,6 @@ AeTableOverride (
ACPI_TABLE_HEADER *ExistingTable,
ACPI_TABLE_HEADER **NewTable);
ACPI_PHYSICAL_ADDRESS
AeLocalGetRootPointer (
void);
/* User table (DSDT) */
static ACPI_TABLE_HEADER *DsdtToInstallOverride;
@ -545,7 +541,7 @@ AeInstallTables (
/******************************************************************************
*
* FUNCTION: AeLocalGetRootPointer
* FUNCTION: AcpiOsGetRootPointer
*
* PARAMETERS: Flags - not used
* Address - Where the root pointer is returned
@ -558,7 +554,7 @@ AeInstallTables (
*****************************************************************************/
ACPI_PHYSICAL_ADDRESS
AeLocalGetRootPointer (
AcpiOsGetRootPointer (
void)
{

View File

@ -71,26 +71,26 @@ AhDisplayUsage (
ACPI_OPTION ("-h", "Display help");
ACPI_OPTION ("-v", "Display version information");
printf ("\nAML (ACPI Machine Language) Names and Encodings:\n");
ACPI_USAGE_TEXT ("\nAML (ACPI Machine Language) Names and Encodings:\n");
ACPI_OPTION ("-a [Name/Prefix]", "Find/Display both ASL operator and AML opcode name(s)");
ACPI_OPTION ("-m [Name/Prefix]", "Find/Display AML opcode name(s)");
printf ("\nASL (ACPI Source Language) Names and Symbols:\n");
ACPI_USAGE_TEXT ("\nASL (ACPI Source Language) Names and Symbols:\n");
ACPI_OPTION ("-k [Name/Prefix]", "Find/Display ASL non-operator keyword(s)");
ACPI_OPTION ("-p [Name/Prefix]", "Find/Display ASL predefined method name(s)");
ACPI_OPTION ("-s [Name/Prefix]", "Find/Display ASL operator name(s)");
printf ("\nOther ACPI Names:\n");
ACPI_USAGE_TEXT ("\nOther ACPI Names:\n");
ACPI_OPTION ("-i [Name/Prefix]", "Find/Display ACPI/PNP Hardware ID(s)");
printf ("\nACPI Values:\n");
ACPI_USAGE_TEXT ("\nACPI Values:\n");
ACPI_OPTION ("-e [HexValue]", "Decode ACPICA exception code");
ACPI_OPTION ("-o [HexValue]", "Decode hex AML opcode");
printf ("\nName/Prefix or HexValue not specified means \"Display All\"\n");
printf ("\nDefault search with valid Name/Prefix and no options:\n");
printf (" Find ASL/AML operator names - if NamePrefix does not start with underscore\n");
printf (" Find ASL predefined method names - if NamePrefix starts with underscore\n");
ACPI_USAGE_TEXT ("\nName/Prefix or HexValue not specified means \"Display All\"\n");
ACPI_USAGE_TEXT ("\nDefault search with valid Name/Prefix and no options:\n");
ACPI_USAGE_TEXT (" Find ASL/AML operator names - if NamePrefix does not start with underscore\n");
ACPI_USAGE_TEXT (" Find ASL predefined method names - if NamePrefix starts with underscore\n");
}
@ -112,6 +112,7 @@ main (
int j;
AcpiOsInitialize ();
ACPI_DEBUG_INITIALIZE (); /* For debug version only */
printf (ACPI_COMMON_SIGNON (AH_UTILITY_NAME));
DecodeType = AH_DECODE_DEFAULT;
@ -124,7 +125,7 @@ main (
/* Command line options */
while ((j = AcpiGetopt (argc, argv, AH_SUPPORTED_OPTIONS)) != EOF) switch (j)
while ((j = AcpiGetopt (argc, argv, AH_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j)
{
case 'a':

View File

@ -105,7 +105,7 @@ NsDumpEntireNamespace (
/* Open the binary AML file and read the entire table */
Status = AcpiDbReadTableFromFile (AmlFilename, &Table);
Status = AcpiUtReadTableFromFile (AmlFilename, &Table);
if (ACPI_FAILURE (Status))
{
printf ("**** Could not get input table %s, %s\n", AmlFilename,
@ -241,25 +241,29 @@ main (
ACPI_DEBUG_INITIALIZE (); /* For debug version only */
printf (ACPI_COMMON_SIGNON (AN_UTILITY_NAME));
/* Init debug globals and ACPICA */
AcpiDbgLevel = ACPI_LV_TABLES;
AcpiDbgLayer = 0xFFFFFFFF;
Status = AcpiInitializeSubsystem ();
AE_CHECK_OK (AcpiInitializeSubsystem, Status);
if (ACPI_FAILURE (Status))
{
return (-1);
}
printf (ACPI_COMMON_SIGNON (AN_UTILITY_NAME));
if (argc < 2)
{
usage ();
return (0);
}
/* Init globals and ACPICA */
AcpiDbgLevel = ACPI_NORMAL_DEFAULT | ACPI_LV_TABLES;
AcpiDbgLayer = 0xFFFFFFFF;
Status = AcpiInitializeSubsystem ();
AE_CHECK_OK (AcpiInitializeSubsystem, Status);
/* Get the command line options */
while ((j = AcpiGetopt (argc, argv, AN_SUPPORTED_OPTIONS)) != EOF) switch(j)
while ((j = AcpiGetopt (argc, argv, AN_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch(j)
{
case 'v': /* -v: (Version): signon already emitted, just exit */

View File

@ -60,71 +60,6 @@
/* Utilities */
void
AcpiUtSubsystemShutdown (
void)
{
}
ACPI_STATUS
AcpiUtExecute_STA (
ACPI_NAMESPACE_NODE *DeviceNode,
UINT32 *StatusFlags)
{
return (AE_NOT_IMPLEMENTED);
}
ACPI_STATUS
AcpiUtExecute_HID (
ACPI_NAMESPACE_NODE *DeviceNode,
ACPI_PNP_DEVICE_ID **ReturnId)
{
return (AE_NOT_IMPLEMENTED);
}
ACPI_STATUS
AcpiUtExecute_CID (
ACPI_NAMESPACE_NODE *DeviceNode,
ACPI_PNP_DEVICE_ID_LIST **ReturnCidList)
{
return (AE_NOT_IMPLEMENTED);
}
ACPI_STATUS
AcpiUtExecute_UID (
ACPI_NAMESPACE_NODE *DeviceNode,
ACPI_PNP_DEVICE_ID **ReturnId)
{
return (AE_NOT_IMPLEMENTED);
}
ACPI_STATUS
AcpiUtExecute_SUB (
ACPI_NAMESPACE_NODE *DeviceNode,
ACPI_PNP_DEVICE_ID **ReturnId)
{
return (AE_NOT_IMPLEMENTED);
}
ACPI_STATUS
AcpiUtExecutePowerMethods (
ACPI_NAMESPACE_NODE *DeviceNode,
const char **MethodNames,
UINT8 MethodCount,
UINT8 *OutValues)
{
return (AE_NOT_IMPLEMENTED);
}
ACPI_STATUS
AcpiUtEvaluateNumericObject (
char *ObjectName,
ACPI_NAMESPACE_NODE *DeviceNode,
UINT64 *Value)
{
return (AE_NOT_IMPLEMENTED);
}
ACPI_STATUS
AcpiUtCopyIobjectToEobject (
ACPI_OPERAND_OBJECT *Obj,
@ -151,32 +86,8 @@ AcpiUtCopyIobjectToIobject (
}
/* Hardware manager */
UINT32
AcpiHwGetMode (
void)
{
return (0);
}
/* Event manager */
ACPI_STATUS
AcpiEvInstallXruptHandlers (
void)
{
return (AE_OK);
}
ACPI_STATUS
AcpiEvInitializeEvents (
void)
{
return (AE_OK);
}
ACPI_STATUS
AcpiEvInstallRegionHandlers (
void)
@ -199,37 +110,9 @@ AcpiEvInitializeRegion (
return (AE_OK);
}
#if (!ACPI_REDUCED_HARDWARE)
ACPI_STATUS
AcpiEvDeleteGpeBlock (
ACPI_GPE_BLOCK_INFO *GpeBlock)
{
return (AE_OK);
}
ACPI_STATUS
AcpiEnable (
void)
{
return (AE_OK);
}
#endif /* !ACPI_REDUCED_HARDWARE */
/* AML Interpreter */
void
AcpiExUnlinkMutex (
ACPI_OPERAND_OBJECT *ObjDesc)
{
}
void
AcpiExReleaseAllMutexes (
ACPI_THREAD_STATE *Thread)
{
}
ACPI_STATUS
AcpiExReadDataFromField (
ACPI_WALK_STATE *WalkState,
@ -255,22 +138,6 @@ AcpiExPrepFieldValue (
return (AE_OK);
}
ACPI_STATUS
AcpiExAcquireMutexObject (
UINT16 Timeout,
ACPI_OPERAND_OBJECT *ObjDesc,
ACPI_THREAD_ID ThreadId)
{
return (AE_OK);
}
ACPI_STATUS
AcpiExReleaseMutexObject (
ACPI_OPERAND_OBJECT *ObjDesc)
{
return (AE_OK);
}
ACPI_STATUS
AcpiExStoreObjectToNode (
ACPI_OPERAND_OBJECT *SourceDesc,
@ -406,44 +273,3 @@ AcpiDsExecEndOp (
{
return (AE_NOT_IMPLEMENTED);
}
/* AML Debugger */
void
AcpiDbDisplayArgumentObject (
ACPI_OPERAND_OBJECT *ObjDesc,
ACPI_WALK_STATE *WalkState)
{
}
ACPI_STATUS
AcpiDbInitialize (
void)
{
return (AE_OK);
}
void
AcpiDbTerminate (
void)
{
}
/* OSL interfaces */
ACPI_THREAD_ID
AcpiOsGetThreadId (
void)
{
return (0xFFFF);
}
ACPI_STATUS
AcpiOsExecute (
ACPI_EXECUTE_TYPE Type,
ACPI_OSD_EXEC_CALLBACK Function,
void *Context)
{
return (AE_SUPPORT);
}

View File

@ -48,10 +48,6 @@
/* Local prototypes */
ACPI_PHYSICAL_ADDRESS
AeLocalGetRootPointer (
void);
/* Non-AML tables that are constructed locally and installed */
static ACPI_TABLE_RSDP LocalRSDP;
@ -284,7 +280,7 @@ AeBuildLocalTables (
/******************************************************************************
*
* FUNCTION: AeLocalGetRootPointer
* FUNCTION: AcpiOsGetRootPointer
*
* PARAMETERS: None
*
@ -296,7 +292,7 @@ AeBuildLocalTables (
*****************************************************************************/
ACPI_PHYSICAL_ADDRESS
AeLocalGetRootPointer (
AcpiOsGetRootPointer (
void)
{

View File

@ -297,7 +297,7 @@ AsDisplayUsage (
ACPI_OPTION ("-l", "Generate Linux version of the source");
ACPI_OPTION ("-u", "Generate Custom source translation");
printf ("\n");
ACPI_USAGE_TEXT ("\n");
ACPI_OPTION ("-d", "Leave debug statements in code");
ACPI_OPTION ("-s", "Generate source statistics only");
ACPI_OPTION ("-v", "Display version information");
@ -327,6 +327,7 @@ main (
ACPI_DEBUG_INITIALIZE (); /* For debug version only */
AcpiOsInitialize ();
printf (ACPI_COMMON_SIGNON (AS_UTILITY_NAME));
if (argc < 2)
@ -337,7 +338,7 @@ main (
/* Command line options */
while ((j = AcpiGetopt (argc, argv, AS_SUPPORTED_OPTIONS)) != EOF) switch(j)
while ((j = AcpiGetopt (argc, argv, AS_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch(j)
{
case 'l':

View File

@ -253,6 +253,9 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = {
{"ACPI_INTERPRETER_MODE", SRC_TYPE_SIMPLE},
{"ACPI_IO_ADDRESS", SRC_TYPE_SIMPLE},
{"ACPI_IO_ATTRIBUTE", SRC_TYPE_STRUCT},
{"ACPI_LPIT_HEADER", SRC_TYPE_STRUCT},
{"ACPI_LPIT_IO", SRC_TYPE_STRUCT},
{"ACPI_LPIT_NATIVE", SRC_TYPE_STRUCT},
{"ACPI_MEM_SPACE_CONTEXT", SRC_TYPE_STRUCT},
{"ACPI_MEMORY_ATTRIBUTE", SRC_TYPE_STRUCT},
{"ACPI_MEMORY_LIST", SRC_TYPE_STRUCT},
@ -400,6 +403,7 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = {
{"ACPI_TABLE_HEADER", SRC_TYPE_STRUCT},
{"ACPI_TABLE_INFO", SRC_TYPE_STRUCT},
{"ACPI_TABLE_LIST", SRC_TYPE_STRUCT},
{"ACPI_TABLE_LPIT", SRC_TYPE_STRUCT},
{"ACPI_TABLE_MTMR", SRC_TYPE_STRUCT},
{"ACPI_TABLE_SUPPORT", SRC_TYPE_STRUCT},
{"ACPI_TABLE_TYPE", SRC_TYPE_SIMPLE},
@ -720,8 +724,10 @@ ACPI_STRING_TABLE LinuxSpecialStrings[] = {
{"\"actbl3.h\"", "<acpi/actbl3.h>", REPLACE_WHOLE_WORD},
{"\"actypes.h\"", "<acpi/actypes.h>", REPLACE_WHOLE_WORD},
{"\"platform/acenv.h\"", "<acpi/platform/acenv.h>", REPLACE_WHOLE_WORD},
{"\"platform/acenvex.h\"", "<acpi/platform/acenvex.h>", REPLACE_WHOLE_WORD},
{"\"acgcc.h\"", "<acpi/platform/acgcc.h>", REPLACE_WHOLE_WORD},
{"\"aclinux.h\"", "<acpi/platform/aclinux.h>", REPLACE_WHOLE_WORD},
{"\"aclinuxex.h\"", "<acpi/platform/aclinuxex.h>", REPLACE_WHOLE_WORD},
{NULL, NULL, 0}
};

View File

@ -98,8 +98,8 @@ DisplayUsage (
ACPI_OPTION ("-s <signature>", "Extract all tables with <signature>");
ACPI_OPTION ("-v", "Display version information");
printf ("\nExtract binary ACPI tables from text acpidump output\n");
printf ("Default invocation extracts the DSDT and all SSDTs\n");
ACPI_USAGE_TEXT ("\nExtract binary ACPI tables from text acpidump output\n");
ACPI_USAGE_TEXT ("Default invocation extracts the DSDT and all SSDTs\n");
}
@ -122,6 +122,7 @@ main (
ACPI_DEBUG_INITIALIZE (); /* For debug version only */
AcpiOsInitialize ();
printf (ACPI_COMMON_SIGNON (AX_UTILITY_NAME));
if (argc < 2)
@ -132,7 +133,7 @@ main (
/* Command line options */
while ((j = AcpiGetopt (argc, argv, AX_SUPPORTED_OPTIONS)) != EOF) switch (j)
while ((j = AcpiGetopt (argc, argv, AX_SUPPORTED_OPTIONS)) != ACPI_OPT_END) switch (j)
{
case 'a':

View File

@ -86,6 +86,22 @@ NotifyHandler (
UINT32 Value,
void *Context);
static ACPI_STATUS
RegionHandler (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT64 *Value,
void *HandlerContext,
void *RegionContext);
static ACPI_STATUS
RegionInit (
ACPI_HANDLE RegionHandle,
UINT32 Function,
void *HandlerContext,
void **RegionContext);
static void
ExecuteMAIN (void);
@ -335,6 +351,43 @@ NotifyHandler (
}
static ACPI_STATUS
RegionInit (
ACPI_HANDLE RegionHandle,
UINT32 Function,
void *HandlerContext,
void **RegionContext)
{
if (Function == ACPI_REGION_DEACTIVATE)
{
*RegionContext = NULL;
}
else
{
*RegionContext = RegionHandle;
}
return (AE_OK);
}
static ACPI_STATUS
RegionHandler (
UINT32 Function,
ACPI_PHYSICAL_ADDRESS Address,
UINT32 BitWidth,
UINT64 *Value,
void *HandlerContext,
void *RegionContext)
{
ACPI_INFO ((AE_INFO, "Received a region access"));
return (AE_OK);
}
static ACPI_STATUS
InstallHandlers (void)
{
@ -351,6 +404,14 @@ InstallHandlers (void)
return (Status);
}
Status = AcpiInstallAddressSpaceHandler (ACPI_ROOT_OBJECT, ACPI_ADR_SPACE_SYSTEM_MEMORY,
RegionHandler, RegionInit, NULL);
if (ACPI_FAILURE (Status))
{
ACPI_EXCEPTION ((AE_INFO, Status, "While installing an OpRegion handler"));
return (Status);
}
return (AE_OK);
}

View File

@ -58,91 +58,8 @@
*****************************************************************************/
/* Utilities */
void
AcpiUtSubsystemShutdown (
void)
{
}
ACPI_STATUS
AcpiUtExecute_STA (
ACPI_NAMESPACE_NODE *DeviceNode,
UINT32 *StatusFlags)
{
return (AE_NOT_IMPLEMENTED);
}
ACPI_STATUS
AcpiUtExecute_HID (
ACPI_NAMESPACE_NODE *DeviceNode,
ACPI_PNP_DEVICE_ID **ReturnId)
{
return (AE_NOT_IMPLEMENTED);
}
ACPI_STATUS
AcpiUtExecute_CID (
ACPI_NAMESPACE_NODE *DeviceNode,
ACPI_PNP_DEVICE_ID_LIST **ReturnCidList)
{
return (AE_NOT_IMPLEMENTED);
}
ACPI_STATUS
AcpiUtExecute_UID (
ACPI_NAMESPACE_NODE *DeviceNode,
ACPI_PNP_DEVICE_ID **ReturnId)
{
return (AE_NOT_IMPLEMENTED);
}
ACPI_STATUS
AcpiUtExecute_SUB (
ACPI_NAMESPACE_NODE *DeviceNode,
ACPI_PNP_DEVICE_ID **ReturnId)
{
return (AE_NOT_IMPLEMENTED);
}
ACPI_STATUS
AcpiUtExecutePowerMethods (
ACPI_NAMESPACE_NODE *DeviceNode,
const char **MethodNames,
UINT8 MethodCount,
UINT8 *OutValues)
{
return (AE_NOT_IMPLEMENTED);
}
ACPI_STATUS
AcpiUtEvaluateNumericObject (
char *ObjectName,
ACPI_NAMESPACE_NODE *DeviceNode,
UINT64 *Value)
{
return (AE_NOT_IMPLEMENTED);
}
ACPI_STATUS
AcpiUtGetResourceEndTag (
ACPI_OPERAND_OBJECT *ObjDesc,
UINT8 **EndTag)
{
return (AE_OK);
}
/* Hardware manager */
UINT32
AcpiHwGetMode (
void)
{
return (0);
}
ACPI_STATUS
AcpiHwReadPort (
ACPI_IO_ADDRESS Address,
@ -164,176 +81,9 @@ AcpiHwWritePort (
/* Event manager */
ACPI_STATUS
AcpiInstallNotifyHandler (
ACPI_HANDLE Device,
UINT32 HandlerType,
ACPI_NOTIFY_HANDLER Handler,
void *Context)
{
return (AE_OK);
}
ACPI_STATUS
AcpiEvInstallXruptHandlers (
void)
{
return (AE_OK);
}
ACPI_STATUS
AcpiEvInitializeEvents (
void)
{
return (AE_OK);
}
ACPI_STATUS
AcpiEvInstallRegionHandlers (
void)
{
return (AE_OK);
}
ACPI_STATUS
AcpiEvInitializeOpRegions (
void)
{
return (AE_OK);
}
ACPI_STATUS
AcpiEvInitializeRegion (
ACPI_OPERAND_OBJECT *RegionObj,
BOOLEAN AcpiNsLocked)
{
return (AE_OK);
}
#if (!ACPI_REDUCED_HARDWARE)
ACPI_STATUS
AcpiEvDeleteGpeBlock (
ACPI_GPE_BLOCK_INFO *GpeBlock)
{
return (AE_OK);
}
ACPI_STATUS
AcpiEnable (
void)
{
return (AE_OK);
}
#endif /* !ACPI_REDUCED_HARDWARE */
void
AcpiEvUpdateGpes (
ACPI_OWNER_ID TableOwnerId)
{
}
ACPI_STATUS
AcpiEvAddressSpaceDispatch (
ACPI_OPERAND_OBJECT *RegionObj,
ACPI_OPERAND_OBJECT *FieldObj,
UINT32 Function,
UINT32 RegionOffset,
UINT32 BitWidth,
UINT64 *Value)
{
return (AE_OK);
}
ACPI_STATUS
AcpiEvAcquireGlobalLock (
UINT16 Timeout)
{
return (AE_OK);
}
ACPI_STATUS
AcpiEvReleaseGlobalLock (
void)
{
return (AE_OK);
}
ACPI_STATUS
AcpiEvQueueNotifyRequest (
ACPI_NAMESPACE_NODE *Node,
UINT32 NotifyValue)
{
return (AE_OK);
}
BOOLEAN
AcpiEvIsNotifyObject (
ACPI_NAMESPACE_NODE *Node)
{
return (TRUE);
}
/* Namespace manager */
ACPI_STATUS
AcpiNsCheckReturnValue (
ACPI_NAMESPACE_NODE *Node,
ACPI_EVALUATE_INFO *Info,
UINT32 UserParamCount,
ACPI_STATUS ReturnStatus,
ACPI_OPERAND_OBJECT **ReturnObjectPtr)
{
return (AE_OK);
}
void
AcpiNsCheckArgumentTypes (
ACPI_EVALUATE_INFO *Info)
{
return;
}
void
AcpiNsCheckArgumentCount (
char *Pathname,
ACPI_NAMESPACE_NODE *Node,
UINT32 UserParamCount,
const ACPI_PREDEFINED_INFO *Predefined)
{
return;
}
void
AcpiNsCheckAcpiCompliance (
char *Pathname,
ACPI_NAMESPACE_NODE *Node,
const ACPI_PREDEFINED_INFO *Predefined)
{
return;
}
const ACPI_PREDEFINED_INFO *
AcpiUtMatchPredefinedMethod (
char *Name)
{
return (NULL);
}
/* 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);
}

View File

@ -49,10 +49,6 @@
#define _COMPONENT ACPI_EXAMPLE
ACPI_MODULE_NAME ("extables")
ACPI_PHYSICAL_ADDRESS
AeLocalGetRootPointer (
void);
/******************************************************************************
*
@ -148,19 +144,24 @@ static unsigned char FacsCode[] =
static unsigned char DsdtCode[] =
{
0x44,0x53,0x44,0x54,0x67,0x00,0x00,0x00, /* 00000000 "DSDTg..." */
0x02,0x97,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 "..Intel." */
0x44,0x53,0x44,0x54,0x8C,0x00,0x00,0x00, /* 00000000 "DSDT...." */
0x02,0x76,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 ".vIntel." */
0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */
0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
0x15,0x11,0x13,0x20,0x14,0x42,0x04,0x4D, /* 00000020 "... .B.M" */
0x41,0x49,0x4E,0x01,0x70,0x73,0x0D,0x4D, /* 00000028 "AIN.ps.M" */
0x61,0x69,0x6E,0x2F,0x41,0x72,0x67,0x30, /* 00000030 "ain/Arg0" */
0x3A,0x20,0x00,0x68,0x00,0x5B,0x31,0xA4, /* 00000038 ": .h.[1." */
0x0D,0x4D,0x61,0x69,0x6E,0x20,0x73,0x75, /* 00000040 ".Main su" */
0x63,0x63,0x65,0x73,0x73,0x66,0x75,0x6C, /* 00000048 "ccessful" */
0x6C,0x79,0x20,0x63,0x6F,0x6D,0x70,0x6C, /* 00000050 "ly compl" */
0x65,0x74,0x65,0x64,0x20,0x65,0x78,0x65, /* 00000058 "eted exe" */
0x63,0x75,0x74,0x69,0x6F,0x6E,0x00 /* 00000060 "cution." */
0x24,0x04,0x14,0x20,0x5B,0x80,0x47,0x4E, /* 00000020 "$.. [.GN" */
0x56,0x53,0x00,0x0C,0x98,0xEE,0xBB,0xDF, /* 00000028 "VS......" */
0x0A,0x13,0x5B,0x81,0x0B,0x47,0x4E,0x56, /* 00000030 "..[..GNV" */
0x53,0x00,0x46,0x4C,0x44,0x31,0x08,0x14, /* 00000038 "S.FLD1.." */
0x4C,0x04,0x4D,0x41,0x49,0x4E,0x01,0x70, /* 00000040 "L.MAIN.p" */
0x73,0x0D,0x4D,0x61,0x69,0x6E,0x2F,0x41, /* 00000048 "s.Main/A" */
0x72,0x67,0x30,0x3A,0x20,0x00,0x68,0x00, /* 00000050 "rg0: .h." */
0x5B,0x31,0x70,0x00,0x46,0x4C,0x44,0x31, /* 00000058 "[1p.FLD1" */
0x86,0x5C,0x00,0x00,0xA4,0x0D,0x4D,0x61, /* 00000060 ".\....Ma" */
0x69,0x6E,0x20,0x73,0x75,0x63,0x63,0x65, /* 00000068 "in succe" */
0x73,0x73,0x66,0x75,0x6C,0x6C,0x79,0x20, /* 00000070 "ssfully " */
0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65, /* 00000078 "complete" */
0x64,0x20,0x65,0x78,0x65,0x63,0x75,0x74, /* 00000080 "d execut" */
0x69,0x6F,0x6E,0x00 /* 00000088 "ion." */
};
@ -232,7 +233,7 @@ ExInitializeAcpiTables (
*****************************************************************************/
ACPI_PHYSICAL_ADDRESS
AeLocalGetRootPointer (
AcpiOsGetRootPointer (
void)
{
@ -475,9 +476,17 @@ AeLocalGetRootPointer (
DefinitionBlock ("dsdt.aml", "DSDT", 2, "Intel", "Template", 0x00000001)
{
OperationRegion (GNVS, SystemMemory, 0xDFBBEE98, 0x00000013)
Field (GNVS, AnyAcc, NoLock, Preserve)
{
FLD1, 8,
}
Method (MAIN, 1, NotSerialized)
{
Store (Concatenate ("Main/Arg0: ", Arg0), Debug)
Store (Zero, FLD1)
Notify (\, Zero)
Return ("Main successfully completed execution")
}
}