Import ACPICA 20140627.
This commit is contained in:
parent
6b8f78e0a6
commit
e599b42ef5
12
Makefile
12
Makefile
@ -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
|
||||
|
101
changes.txt
101
changes.txt
@ -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:
|
||||
|
||||
|
@ -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
|
||||
|
||||
#
|
||||
|
@ -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
|
||||
|
||||
|
@ -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\
|
||||
|
@ -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\
|
||||
|
@ -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
|
||||
|
@ -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\
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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\
|
||||
|
@ -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"),
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -341,6 +341,7 @@ main (
|
||||
return (-1);
|
||||
}
|
||||
|
||||
AcpiOsInitialize ();
|
||||
ACPI_DEBUG_INITIALIZE (); /* For debug version only */
|
||||
|
||||
/* Initialize preprocessor and compiler before command line processing */
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -1042,6 +1042,7 @@ AcpiDbEvaluateOnePredefinedName (
|
||||
Status = AcpiGetObjectInfo (ObjHandle, &ObjInfo);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
ACPI_FREE (Pathname);
|
||||
return (Status);
|
||||
}
|
||||
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 (") {");
|
||||
}
|
||||
}
|
||||
|
@ -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 */
|
||||
{
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
363
source/components/utilities/utfileio.c
Normal file
363
source/components/utilities/utfileio.c
Normal 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
|
@ -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)
|
||||
|
@ -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
|
||||
|
796
source/components/utilities/utprint.c
Normal file
796
source/components/utilities/utprint.c
Normal 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
|
@ -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
|
||||
|
@ -377,11 +377,6 @@ AcpiDbGetTableFromFile (
|
||||
char *Filename,
|
||||
ACPI_TABLE_HEADER **Table);
|
||||
|
||||
ACPI_STATUS
|
||||
AcpiDbReadTableFromFile (
|
||||
char *Filename,
|
||||
ACPI_TABLE_HEADER **Table);
|
||||
|
||||
|
||||
/*
|
||||
* dbhistry - debugger HISTORY command
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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__ */
|
||||
|
@ -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__ */
|
||||
|
@ -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__ */
|
||||
|
@ -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)}},
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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__ */
|
||||
|
@ -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 */
|
||||
|
@ -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__ */
|
||||
|
@ -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__ */
|
||||
|
@ -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 */
|
||||
|
||||
|
63
source/include/platform/acenvex.h
Normal file
63
source/include/platform/acenvex.h
Normal 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__ */
|
@ -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__ */
|
||||
|
137
source/include/platform/aclinuxex.h
Normal file
137
source/include/platform/aclinuxex.h
Normal 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__ */
|
1033
source/os_specific/service_layers/osefitbl.c
Normal file
1033
source/os_specific/service_layers/osefitbl.c
Normal file
File diff suppressed because it is too large
Load Diff
1300
source/os_specific/service_layers/osefixf.c
Normal file
1300
source/os_specific/service_layers/osefixf.c
Normal file
File diff suppressed because it is too large
Load Diff
251
source/os_specific/service_layers/oslibcfs.c
Normal file
251
source/os_specific/service_layers/oslibcfs.c
Normal 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);
|
||||
}
|
||||
}
|
@ -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.
|
||||
|
@ -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 */
|
||||
|
||||
|
||||
|
@ -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 */
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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:
|
||||
|
||||
|
@ -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",
|
||||
|
@ -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)
|
||||
{
|
||||
|
||||
|
@ -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':
|
||||
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
||||
|
@ -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':
|
||||
|
||||
|
@ -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}
|
||||
};
|
||||
|
@ -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':
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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")
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user