From 09e3e7cd5c7eb44bd5f632149ad28aef7f2d0690 Mon Sep 17 00:00:00 2001 From: Jung-uk Kim Date: Wed, 15 Sep 2010 20:49:34 +0000 Subject: [PATCH 1/2] Import ACPICA 20100915. --- changes.txt | 64 +++ common/adfile.c | 6 +- common/adisasm.c | 12 +- common/adwalk.c | 16 +- common/dmrestag.c | 4 +- common/getopt.c | 5 +- compiler/Makefile | 4 + compiler/aslanalyze.c | 5 +- compiler/aslcompile.c | 8 +- compiler/aslcompiler.h | 4 + compiler/aslerror.c | 4 +- compiler/aslfiles.c | 4 +- compiler/asllisting.c | 4 +- compiler/asllookup.c | 8 +- compiler/aslmain.c | 18 +- compiler/aslopcodes.c | 6 +- compiler/aslpredef.c | 2 - compiler/aslrestype1.c | 2 - compiler/aslrestype2d.c | 24 +- compiler/aslrestype2e.c | 1 - compiler/aslrestype2w.c | 24 +- compiler/aslstartup.c | 30 +- compiler/dtcompile.c | 29 +- compiler/dtio.c | 2 +- debugger/dbexec.c | 10 +- events/evrgnini.c | 13 +- executer/exmutex.c | 6 +- hardware/hwpci.c | 531 +++++++++++++++++++++++++ include/acglobal.h | 2 +- include/achware.h | 10 + include/aclocal.h | 2 +- include/acmacros.h | 4 +- include/acnamesp.h | 16 - include/acpiosxf.h | 10 - include/acpixf.h | 3 +- include/actypes.h | 32 +- include/acutils.h | 57 ++- include/platform/accygwin.h | 8 +- include/platform/acenv.h | 6 + include/platform/acfreebsd.h | 3 - include/platform/acgcc.h | 2 + include/platform/acintel.h | 22 +- include/platform/aclinux.h | 3 +- include/platform/acmsvc.h | 6 +- include/platform/acos2.h | 6 - include/platform/acwin.h | 2 - include/platform/acwin64.h | 2 +- namespace/nsrepair2.c | 180 +++++++++ namespace/nsutils.c | 112 ------ os_specific/service_layers/osunixxf.c | 18 +- os_specific/service_layers/oswintbl.c | 3 - os_specific/service_layers/oswinxf.c | 13 +- osunixxf.c | 18 +- tables/tbfadt.c | 4 +- tools/acpiexec/Makefile | 8 + tools/acpiexec/aecommon.h | 14 +- tools/acpiexec/aeexec.c | 247 +++++++----- tools/acpiexec/aehandlers.c | 84 ++-- tools/acpiexec/aemain.c | 54 +-- tools/acpiexec/aetables.c | 66 ++-- tools/acpisrc/asfile.c | 5 +- tools/acpisrc/astable.c | 1 + tools/acpixtract/acpixtract.c | 50 +-- utilities/utdebug.c | 7 +- utilities/utmath.c | 28 +- utilities/utmisc.c | 194 --------- utilities/utmutex.c | 24 +- utilities/utxferror.c | 550 ++++++++++++++++++++++++++ 68 files changed, 1918 insertions(+), 804 deletions(-) create mode 100644 hardware/hwpci.c create mode 100644 utilities/utxferror.c diff --git a/changes.txt b/changes.txt index 6ac171f2fb60..9bb84d4c77b3 100644 --- a/changes.txt +++ b/changes.txt @@ -1,3 +1,67 @@ +---------------------------------------- +15 September 2010. Summary of changes for version 20100915: + +This release is available at www.acpica.org/downloads + +1) ACPI CA Core Subsystem: + +Removed the AcpiOsDerivePciId OSL interface. The various host implementations +of this function were not OS-dependent and are now obsolete and can be +removed from all host OSLs. This function has been replaced by +AcpiHwDerivePciId, which is now part of the ACPICA core code. +AcpiHwDerivePciId has been implemented without recursion. Adds one new +module, hwpci.c. ACPICA BZ 857. + +Implemented a dynamic repair for _HID and _CID strings. The following +problems are now repaired at runtime: 1) Remove a leading asterisk in the +string, and 2) the entire string is uppercased. Both repairs are in +accordance with the ACPI specification and will simplify host driver code. +ACPICA BZ 871. + +The ACPI_THREAD_ID type is no longer configurable, internally it is now +always UINT64. This simplifies the ACPICA code, especially any printf output. +UINT64 is the only common data type for all thread_id types across all +operating systems. It is now up to the host OSL to cast the native thread_id +type to UINT64 before returning the value to ACPICA (via AcpiOsGetThreadId). +Lin Ming, Bob Moore. + +Added the ACPI_INLINE type to enhance the ACPICA configuration. The "inline" +keyword is not standard across compilers, and this type allows inline to be +configured on a per-compiler basis. Lin Ming. + +Made the system global AcpiGbl_SystemAwakeAndRunning publically available. +Added an extern for this boolean in acpixf.h. Some hosts utilize this value +during suspend/restore operations. ACPICA BZ 869. + +All code that implements error/warning messages with the "ACPI:" prefix has +been moved to a new module, utxferror.c. + +The UINT64_OVERLAY was moved to utmath.c, which is the only module where it +is used. ACPICA BZ 829. Lin Ming, Bob Moore. + +Example Code and Data Size: These are the sizes for the OS-independent +acpica.lib produced by the Microsoft Visual C++ 6.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. + + Previous Release: + Non-Debug Version: 89.1K Code, 19.0K Data, 108.1K Total + Debug Version: 165.1K Code, 51.9K Data, 217.0K Total + Current Release: + Non-Debug Version: 89.9K Code, 19.0K Data, 108.9K Total + Debug Version: 166.3K Code, 52.1K Data, 218.4K Total + +2) iASL Compiler/Disassembler and Tools: + +iASL/Disassembler: Write ACPI errors to stderr instead of the output file. +This keeps the output files free of random error messages that may originate +from within the namespace/interpreter code. Used this opportunity to merge +all ACPI:-style messages into a single new module, utxferror.c. ACPICA BZ +866. Lin Ming, Bob Moore. + +Tools: update some printfs for ansi warnings on size_t. Handle width change +of size_t on 32-bit versus 64-bit generations. Lin Ming. + ---------------------------------------- 06 August 2010. Summary of changes for version 20100806: diff --git a/common/adfile.c b/common/adfile.c index c7f3dfb47602..629bd535c449 100644 --- a/common/adfile.c +++ b/common/adfile.c @@ -126,13 +126,13 @@ /* Local prototypes */ -INT32 +static INT32 AdWriteBuffer ( char *Filename, char *Buffer, UINT32 Length); -char FilenameBuf[20]; +static char FilenameBuf[20]; /****************************************************************************** @@ -190,7 +190,7 @@ AdGenerateFilename ( * ******************************************************************************/ -INT32 +static INT32 AdWriteBuffer ( char *Filename, char *Buffer, diff --git a/common/adisasm.c b/common/adisasm.c index 79960c9bc27f..31985f7f3c30 100644 --- a/common/adisasm.c +++ b/common/adisasm.c @@ -147,18 +147,18 @@ LsSetupNsList ( /* Local prototypes */ -void +static void AdCreateTableHeader ( char *Filename, ACPI_TABLE_HEADER *Table); -ACPI_STATUS +static ACPI_STATUS AdDeferredParse ( ACPI_PARSE_OBJECT *Op, UINT8 *Aml, UINT32 AmlLength); -ACPI_STATUS +static ACPI_STATUS AdParseDeferredOps ( ACPI_PARSE_OBJECT *Root); @@ -634,7 +634,7 @@ AdDisassemblerHeader ( * *****************************************************************************/ -void +static void AdCreateTableHeader ( char *Filename, ACPI_TABLE_HEADER *Table) @@ -781,7 +781,7 @@ AdDisplayTables ( * *****************************************************************************/ -ACPI_STATUS +static ACPI_STATUS AdDeferredParse ( ACPI_PARSE_OBJECT *Op, UINT8 *Aml, @@ -904,7 +904,7 @@ AdDeferredParse ( * *****************************************************************************/ -ACPI_STATUS +static ACPI_STATUS AdParseDeferredOps ( ACPI_PARSE_OBJECT *Root) { diff --git a/common/adwalk.c b/common/adwalk.c index b07053329cda..e8f580c1c1ef 100644 --- a/common/adwalk.c +++ b/common/adwalk.c @@ -792,6 +792,7 @@ AcpiDmXrefDescendingOp ( ACPI_PARSE_OBJECT *NextOp; ACPI_NAMESPACE_NODE *Node; ACPI_OPERAND_OBJECT *Object; + UINT32 ParamCount = 0; WalkState = Info->WalkState; @@ -880,18 +881,13 @@ AcpiDmXrefDescendingOp ( if (Object) { ObjectType2 = Object->Common.Type; + if (ObjectType2 == ACPI_TYPE_METHOD) + { + ParamCount = Object->Method.ParamCount; + } } - if (ObjectType2 == ACPI_TYPE_METHOD) - { - AcpiDmAddToExternalList (Op, Path, ACPI_TYPE_METHOD, - Object->Method.ParamCount); - } - else - { - AcpiDmAddToExternalList (Op, Path, (UINT8) ObjectType2, 0); - } - + AcpiDmAddToExternalList (Op, Path, (UINT8) ObjectType2, ParamCount); Op->Common.Node = Node; } else diff --git a/common/dmrestag.c b/common/dmrestag.c index e1f340d54f14..184a856ed6d9 100644 --- a/common/dmrestag.c +++ b/common/dmrestag.c @@ -704,8 +704,8 @@ AcpiDmUpdateResourceName ( Name[0] = '_'; Name[1] = AcpiGbl_Prefix[AcpiGbl_NextPrefix]; - Name[2] = AcpiUtHexToAsciiChar (AcpiGbl_NextResourceId, 4); - Name[3] = AcpiUtHexToAsciiChar (AcpiGbl_NextResourceId, 0); + Name[2] = AcpiUtHexToAsciiChar ((UINT64) AcpiGbl_NextResourceId, 4); + Name[3] = AcpiUtHexToAsciiChar ((UINT64) AcpiGbl_NextResourceId, 0); /* Update globals for next name */ diff --git a/common/getopt.c b/common/getopt.c index db1eb167d1f3..9a8589c99566 100644 --- a/common/getopt.c +++ b/common/getopt.c @@ -126,7 +126,6 @@ int AcpiGbl_Opterr = 1; int AcpiGbl_Optind = 1; -int AcpiGbl_Optopt; char *AcpiGbl_Optarg; @@ -171,9 +170,7 @@ AcpiGetopt( /* Get the option */ - CurrentChar = - AcpiGbl_Optopt = - argv[AcpiGbl_Optind][CurrentCharPtr]; + CurrentChar = argv[AcpiGbl_Optind][CurrentCharPtr]; /* Make sure that the option is legal */ diff --git a/compiler/Makefile b/compiler/Makefile index f1f175c50362..3d7028200b36 100644 --- a/compiler/Makefile +++ b/compiler/Makefile @@ -151,6 +151,7 @@ OBJS = \ utobject.o \ utresrc.o \ utstate.o \ + utxferror.o \ utxface.o INTERMEDIATES = \ @@ -565,6 +566,9 @@ utresrc.o : $(ACPICA_CORE)/utilities/utresrc.c utstate.o : $(ACPICA_CORE)/utilities/utstate.c $(COMPILE) +utxferror.o : $(ACPICA_CORE)/utilities/utxferror.c + $(COMPILE) + utxface.o : $(ACPICA_CORE)/utilities/utxface.c $(COMPILE) diff --git a/compiler/aslanalyze.c b/compiler/aslanalyze.c index 9679d904c8cf..4846c6b7d07b 100644 --- a/compiler/aslanalyze.c +++ b/compiler/aslanalyze.c @@ -166,7 +166,7 @@ static UINT32 AnGetInternalMethodReturnType ( ACPI_PARSE_OBJECT *Op); -BOOLEAN +static BOOLEAN AnIsResultUsed ( ACPI_PARSE_OBJECT *Op); @@ -1754,7 +1754,7 @@ AnOperandTypecheckWalkEnd ( * ******************************************************************************/ -BOOLEAN +static BOOLEAN AnIsResultUsed ( ACPI_PARSE_OBJECT *Op) { @@ -1862,6 +1862,7 @@ AnOtherSemanticAnalysisWalkBegin ( if (Op->Asl.AmlOpcode == AML_DIVIDE_OP) { if ((ArgNode->Asl.ParseOpcode == PARSEOP_ZERO) && + (PrevArgNode) && (PrevArgNode->Asl.ParseOpcode == PARSEOP_ZERO)) { AslError (ASL_WARNING, ASL_MSG_RESULT_NOT_USED, Op, Op->Asl.ExternalName); diff --git a/compiler/aslcompile.c b/compiler/aslcompile.c index 5b664ff5e3c5..f199c5b9b816 100644 --- a/compiler/aslcompile.c +++ b/compiler/aslcompile.c @@ -127,12 +127,12 @@ static void CmFlushSourceCode ( void); -void +static void FlConsumeAnsiComment ( ASL_FILE_INFO *FileInfo, ASL_FILE_STATUS *Status); -void +static void FlConsumeNewComment ( ASL_FILE_INFO *FileInfo, ASL_FILE_STATUS *Status); @@ -345,7 +345,7 @@ CmFlushSourceCode ( * ******************************************************************************/ -void +static void FlConsumeAnsiComment ( ASL_FILE_INFO *FileInfo, ASL_FILE_STATUS *Status) @@ -389,7 +389,7 @@ FlConsumeAnsiComment ( } -void +static void FlConsumeNewComment ( ASL_FILE_INFO *FileInfo, ASL_FILE_STATUS *Status) diff --git a/compiler/aslcompiler.h b/compiler/aslcompiler.h index c097feee6374..4e97677b56e8 100644 --- a/compiler/aslcompiler.h +++ b/compiler/aslcompiler.h @@ -686,6 +686,10 @@ ACPI_STATUS LsDisplayNamespace ( void); +void +LsSetupNsList ( + void *Handle); + /* * aslutils - common compiler utilites diff --git a/compiler/aslerror.c b/compiler/aslerror.c index ff24e62b7aa9..59d3d20b6fb7 100644 --- a/compiler/aslerror.c +++ b/compiler/aslerror.c @@ -304,7 +304,7 @@ AePrintException ( if (Enode->LineNumber) { - fprintf (OutputFile, "%6u: ", Enode->LineNumber); + fprintf (OutputFile, " %6u: ", Enode->LineNumber); /* * Seek to the offset in the combined source file, read the source @@ -358,7 +358,7 @@ AePrintException ( { /* Decode the message ID */ - fprintf (OutputFile, "%s %4.4d -", + fprintf (OutputFile, "%s %4.4d - ", AslErrorLevel[Enode->Level], Enode->MessageId + ((Enode->Level+1) * 1000)); diff --git a/compiler/aslfiles.c b/compiler/aslfiles.c index 6ba32ca9f748..281b779b0a0c 100644 --- a/compiler/aslfiles.c +++ b/compiler/aslfiles.c @@ -122,7 +122,7 @@ /* Local prototypes */ -FILE * +static FILE * FlOpenIncludeWithPrefix ( char *PrefixDir, char *Filename); @@ -546,7 +546,7 @@ FlAddIncludeDirectory ( * ******************************************************************************/ -FILE * +static FILE * FlOpenIncludeWithPrefix ( char *PrefixDir, char *Filename) diff --git a/compiler/asllisting.c b/compiler/asllisting.c index 93f83ad84279..2ad87d42dcd5 100644 --- a/compiler/asllisting.c +++ b/compiler/asllisting.c @@ -202,7 +202,7 @@ static void LsDoHexOutputAsl ( void); -ACPI_STATUS +static ACPI_STATUS LsTreeWriteWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, @@ -222,7 +222,7 @@ LsTreeWriteWalk ( * ******************************************************************************/ -ACPI_STATUS +static ACPI_STATUS LsTreeWriteWalk ( ACPI_PARSE_OBJECT *Op, UINT32 Level, diff --git a/compiler/asllookup.c b/compiler/asllookup.c index 7cc723240603..db909fa1c0fa 100644 --- a/compiler/asllookup.c +++ b/compiler/asllookup.c @@ -180,11 +180,7 @@ LsDoOnePathname ( void *Context, void **ReturnValue); -void -LsSetupNsList ( - void *Handle); - -ACPI_PARSE_OBJECT * +static ACPI_PARSE_OBJECT * LkGetNameOp ( ACPI_PARSE_OBJECT *Op); @@ -623,7 +619,7 @@ LkObjectExists ( * ******************************************************************************/ -ACPI_PARSE_OBJECT * +static ACPI_PARSE_OBJECT * LkGetNameOp ( ACPI_PARSE_OBJECT *Op) { diff --git a/compiler/aslmain.c b/compiler/aslmain.c index 39ea7aa399b3..90faff739f8c 100644 --- a/compiler/aslmain.c +++ b/compiler/aslmain.c @@ -214,7 +214,7 @@ Options ( printf (" -cr Disable Resource Descriptor error checking\n"); printf (" -r Override table header Revision (1-255)\n"); - printf ("\nListings:\n"); + printf ("\nASL Listing Files:\n"); printf (" -l Create mixed listing file (ASL source and AML) (*.lst)\n"); printf (" -ln Create namespace file (*.nsp)\n"); printf (" -ls Create combined source file (expanded includes) (*.src)\n"); @@ -462,6 +462,7 @@ AslDoOptions ( BOOLEAN IsResponseFile) { int j; + ACPI_STATUS Status; /* Get the command line options */ @@ -554,7 +555,12 @@ AslDoOptions ( case 'e': - AcpiDmAddToExternalFileList (AcpiGbl_Optarg); + Status = AcpiDmAddToExternalFileList (AcpiGbl_Optarg); + if (ACPI_FAILURE (Status)) + { + printf ("Could not add %s to external list\n", AcpiGbl_Optarg); + return (-1); + } break; @@ -601,7 +607,6 @@ AslDoOptions ( printf ("Unknown option: -h%s\n", AcpiGbl_Optarg); return (-1); } - break; case 'I': /* Add an include file search directory */ @@ -891,6 +896,7 @@ AslCommandLine ( char **argv) { int BadCommandLine = 0; + ACPI_STATUS Status; /* Minimum command line contains at least the command and an input file */ @@ -908,7 +914,11 @@ AslCommandLine ( if (Gbl_DoTemplates) { - DtCreateTemplates (Gbl_TemplateSignature); + Status = DtCreateTemplates (Gbl_TemplateSignature); + if (ACPI_FAILURE (Status)) + { + exit (-1); + } exit (1); } diff --git a/compiler/aslopcodes.c b/compiler/aslopcodes.c index 1c6eef724804..48aaa50c0fe5 100644 --- a/compiler/aslopcodes.c +++ b/compiler/aslopcodes.c @@ -592,9 +592,9 @@ OpcDoEisaId ( /* Create ID big-endian first (bits are contiguous) */ BigEndianId = - (UINT32) (InString[0] - 0x40) << 26 | - (UINT32) (InString[1] - 0x40) << 21 | - (UINT32) (InString[2] - 0x40) << 16 | + (UINT32) ((UINT8) (InString[0] - 0x40)) << 26 | + (UINT32) ((UINT8) (InString[1] - 0x40)) << 21 | + (UINT32) ((UINT8) (InString[2] - 0x40)) << 16 | (UtHexCharToValue (InString[3])) << 12 | (UtHexCharToValue (InString[4])) << 8 | diff --git a/compiler/aslpredef.c b/compiler/aslpredef.c index 49056edd180e..f2c3f5919af8 100644 --- a/compiler/aslpredef.c +++ b/compiler/aslpredef.c @@ -117,8 +117,6 @@ #include "aslcompiler.h" #include "aslcompiler.y.h" -#include "amlcode.h" -#include "acparser.h" #include "acpredef.h" diff --git a/compiler/aslrestype1.c b/compiler/aslrestype1.c index 381fb53cc25b..5c1bd0ed1ac2 100644 --- a/compiler/aslrestype1.c +++ b/compiler/aslrestype1.c @@ -224,7 +224,6 @@ RsDoMemory24Descriptor ( ACPI_PARSE_OBJECT *MinOp = NULL; ACPI_PARSE_OBJECT *MaxOp = NULL; ACPI_PARSE_OBJECT *LengthOp = NULL; - ACPI_PARSE_OBJECT *AlignOp = NULL; ASL_RESOURCE_NODE *Rnode; UINT32 i; @@ -270,7 +269,6 @@ RsDoMemory24Descriptor ( Descriptor->Memory24.Alignment = (UINT16) InitializerOp->Asl.Value.Integer; RsCreateByteField (InitializerOp, ACPI_RESTAG_ALIGNMENT, CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Alignment)); - AlignOp = InitializerOp; break; case 4: /* Length */ diff --git a/compiler/aslrestype2d.c b/compiler/aslrestype2d.c index 7725bf9a8da7..17ce2703981c 100644 --- a/compiler/aslrestype2d.c +++ b/compiler/aslrestype2d.c @@ -347,10 +347,10 @@ RsDoDwordIoDescriptor ( /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( - Descriptor->Address32.Minimum, - Descriptor->Address32.Maximum, - Descriptor->Address32.AddressLength, - Descriptor->Address32.Granularity, + (UINT64) Descriptor->Address32.Minimum, + (UINT64) Descriptor->Address32.Maximum, + (UINT64) Descriptor->Address32.AddressLength, + (UINT64) Descriptor->Address32.Granularity, Descriptor->Address32.Flags, MinOp, MaxOp, LengthOp, GranOp); @@ -583,10 +583,10 @@ RsDoDwordMemoryDescriptor ( /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( - Descriptor->Address32.Minimum, - Descriptor->Address32.Maximum, - Descriptor->Address32.AddressLength, - Descriptor->Address32.Granularity, + (UINT64) Descriptor->Address32.Minimum, + (UINT64) Descriptor->Address32.Maximum, + (UINT64) Descriptor->Address32.AddressLength, + (UINT64) Descriptor->Address32.Granularity, Descriptor->Address32.Flags, MinOp, MaxOp, LengthOp, GranOp); @@ -801,10 +801,10 @@ RsDoDwordSpaceDescriptor ( /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( - Descriptor->Address32.Minimum, - Descriptor->Address32.Maximum, - Descriptor->Address32.AddressLength, - Descriptor->Address32.Granularity, + (UINT64) Descriptor->Address32.Minimum, + (UINT64) Descriptor->Address32.Maximum, + (UINT64) Descriptor->Address32.AddressLength, + (UINT64) Descriptor->Address32.Granularity, Descriptor->Address32.Flags, MinOp, MaxOp, LengthOp, GranOp); diff --git a/compiler/aslrestype2e.c b/compiler/aslrestype2e.c index 46f56cec1360..e5b2bd9054b5 100644 --- a/compiler/aslrestype2e.c +++ b/compiler/aslrestype2e.c @@ -116,7 +116,6 @@ #include "aslcompiler.h" -#include "aslcompiler.y.h" #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslrestype2e") diff --git a/compiler/aslrestype2w.c b/compiler/aslrestype2w.c index 45f1858fccfb..a6e6774c028e 100644 --- a/compiler/aslrestype2w.c +++ b/compiler/aslrestype2w.c @@ -338,10 +338,10 @@ RsDoWordIoDescriptor ( /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( - Descriptor->Address16.Minimum, - Descriptor->Address16.Maximum, - Descriptor->Address16.AddressLength, - Descriptor->Address16.Granularity, + (UINT64) Descriptor->Address16.Minimum, + (UINT64) Descriptor->Address16.Maximum, + (UINT64) Descriptor->Address16.AddressLength, + (UINT64) Descriptor->Address16.Granularity, Descriptor->Address16.Flags, MinOp, MaxOp, LengthOp, GranOp); @@ -544,10 +544,10 @@ RsDoWordBusNumberDescriptor ( /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( - Descriptor->Address16.Minimum, - Descriptor->Address16.Maximum, - Descriptor->Address16.AddressLength, - Descriptor->Address16.Granularity, + (UINT64) Descriptor->Address16.Minimum, + (UINT64) Descriptor->Address16.Maximum, + (UINT64) Descriptor->Address16.AddressLength, + (UINT64) Descriptor->Address16.Granularity, Descriptor->Address16.Flags, MinOp, MaxOp, LengthOp, GranOp); @@ -761,10 +761,10 @@ RsDoWordSpaceDescriptor ( /* Validate the Min/Max/Len/Gran values */ RsLargeAddressCheck ( - Descriptor->Address16.Minimum, - Descriptor->Address16.Maximum, - Descriptor->Address16.AddressLength, - Descriptor->Address16.Granularity, + (UINT64) Descriptor->Address16.Minimum, + (UINT64) Descriptor->Address16.Maximum, + (UINT64) Descriptor->Address16.AddressLength, + (UINT64) Descriptor->Address16.Granularity, Descriptor->Address16.Flags, MinOp, MaxOp, LengthOp, GranOp); diff --git a/compiler/aslstartup.c b/compiler/aslstartup.c index 11c400493064..0d101430da56 100644 --- a/compiler/aslstartup.c +++ b/compiler/aslstartup.c @@ -124,9 +124,8 @@ #define ASL_MAX_FILES 256 -char *FileList[ASL_MAX_FILES]; -int FileCount; -BOOLEAN AslToFile = TRUE; +static char *FileList[ASL_MAX_FILES]; +static BOOLEAN AslToFile = TRUE; /* Local prototypes */ @@ -136,7 +135,7 @@ AsDoWildcard ( char *DirectoryPathname, char *FileSpecifier); -UINT8 +static UINT8 AslDetectSourceFileType ( ASL_FILE_INFO *Info); @@ -210,6 +209,7 @@ AsDoWildcard ( #ifdef WIN32 void *DirInfo; char *Filename; + int FileCount; FileCount = 0; @@ -277,7 +277,7 @@ AsDoWildcard ( * ******************************************************************************/ -UINT8 +static UINT8 AslDetectSourceFileType ( ASL_FILE_INFO *Info) { @@ -397,7 +397,7 @@ AslDoOneFile ( /* Shutdown compiler and ACPICA subsystem */ AeClearErrorLog (); - AcpiTerminate (); + (void) AcpiTerminate (); /* * Gbl_Files[ASL_FILE_INPUT].Filename was replaced with the @@ -487,7 +487,7 @@ AslDoOneFile ( } Status = CmDoCompile (); - AcpiTerminate (); + (void) AcpiTerminate (); /* * Return non-zero exit code if there have been errors, unless the @@ -533,7 +533,7 @@ AslDoOnePathname ( ASL_PATHNAME_CALLBACK PathCallback) { ACPI_STATUS Status = AE_OK; - char **FileList; + char **WildcardList; char *Filename; char *FullPathname; @@ -548,16 +548,16 @@ AslDoOnePathname ( /* Expand possible wildcard into a file list (Windows/DOS only) */ - FileList = AsDoWildcard (Gbl_DirectoryPath, Filename); - while (*FileList) + WildcardList = AsDoWildcard (Gbl_DirectoryPath, Filename); + while (*WildcardList) { FullPathname = ACPI_ALLOCATE ( - strlen (Gbl_DirectoryPath) + strlen (*FileList) + 1); + strlen (Gbl_DirectoryPath) + strlen (*WildcardList) + 1); /* Construct a full path to the file */ strcpy (FullPathname, Gbl_DirectoryPath); - strcat (FullPathname, *FileList); + strcat (FullPathname, *WildcardList); /* * If -p not specified, we will use the input filename as the @@ -573,9 +573,9 @@ AslDoOnePathname ( Status |= (*PathCallback) (FullPathname); ACPI_FREE (FullPathname); - ACPI_FREE (*FileList); - *FileList = NULL; - FileList++; + ACPI_FREE (*WildcardList); + *WildcardList = NULL; + WildcardList++; } ACPI_FREE (Gbl_DirectoryPath); diff --git a/compiler/dtcompile.c b/compiler/dtcompile.c index 651bdfa192e0..c287c5b7af32 100644 --- a/compiler/dtcompile.c +++ b/compiler/dtcompile.c @@ -127,7 +127,7 @@ static char VersionString[9]; /* Local prototypes */ -static void +static ACPI_STATUS DtInitialize ( void); @@ -166,7 +166,12 @@ DtDoCompile ( /* Initialize globals */ - DtInitialize (); + Status = DtInitialize (); + if (ACPI_FAILURE (Status)) + { + printf ("Error during compiler initialization, 0x%X\n", Status); + return (Status); + } /* * Scan the input file (file is already open) and @@ -236,26 +241,38 @@ DtDoCompile ( * * PARAMETERS: None * - * RETURN: None + * RETURN: Status * * DESCRIPTION: Initialize data table compiler globals. Enables multiple * compiles per invocation. * *****************************************************************************/ -static void +static ACPI_STATUS DtInitialize ( void) { + ACPI_STATUS Status; - AcpiOsInitialize (); - AcpiUtInitGlobals (); + + Status = AcpiOsInitialize (); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + Status = AcpiUtInitGlobals (); + if (ACPI_FAILURE (Status)) + { + return (Status); + } Gbl_FieldList = NULL; Gbl_RootTable = NULL; Gbl_SubtableStack = NULL; sprintf (VersionString, "%X", (UINT32) ACPI_CA_VERSION); + return (AE_OK); } diff --git a/compiler/dtio.c b/compiler/dtio.c index 4c19ad0b0c8c..a18ab5f7747d 100644 --- a/compiler/dtio.c +++ b/compiler/dtio.c @@ -158,7 +158,7 @@ DtWriteBinary ( #define DT_SLASH_SLASH_COMMENT 4 #define DT_END_COMMENT 5 -UINT32 Gbl_NextLineOffset; +static UINT32 Gbl_NextLineOffset; /****************************************************************************** diff --git a/debugger/dbexec.c b/debugger/dbexec.c index 3555e8f63d95..56e7de72d356 100644 --- a/debugger/dbexec.c +++ b/debugger/dbexec.c @@ -567,14 +567,12 @@ AcpiDbMethodThread ( if (Info->InitArgs) { AcpiDbUInt32ToHexString (Info->NumCreated, Info->IndexOfThreadStr); - AcpiDbUInt32ToHexString (ACPI_TO_INTEGER (AcpiOsGetThreadId ()), - Info->IdOfThreadStr); + AcpiDbUInt32ToHexString ((UINT32) AcpiOsGetThreadId (), Info->IdOfThreadStr); } if (Info->Threads && (Info->NumCreated < Info->NumThreads)) { - Info->Threads[Info->NumCreated++] = - ACPI_TO_INTEGER (AcpiOsGetThreadId()); + Info->Threads[Info->NumCreated++] = AcpiOsGetThreadId(); } LocalInfo = *Info; @@ -722,8 +720,8 @@ AcpiDbCreateExecutionThreads ( /* Array to store IDs of threads */ AcpiGbl_DbMethodInfo.NumThreads = NumThreads; - Size = 4 * AcpiGbl_DbMethodInfo.NumThreads; - AcpiGbl_DbMethodInfo.Threads = (UINT32 *) AcpiOsAllocate (Size); + Size = sizeof (ACPI_THREAD_ID) * AcpiGbl_DbMethodInfo.NumThreads; + AcpiGbl_DbMethodInfo.Threads = AcpiOsAllocate (Size); if (AcpiGbl_DbMethodInfo.Threads == NULL) { AcpiOsPrintf ("No memory for thread IDs array\n"); diff --git a/events/evrgnini.c b/events/evrgnini.c index 1cce564ca8e7..9fdda23a58e8 100644 --- a/events/evrgnini.c +++ b/events/evrgnini.c @@ -395,8 +395,8 @@ AcpiEvPciConfigRegionSetup ( } /* - * Get the PCI device and function numbers from the _ADR object contained - * in the parent's scope. + * Get the PCI device and function numbers from the _ADR object + * contained in the parent's scope. */ Status = AcpiUtEvaluateNumericObject (METHOD_NAME__ADR, PciDeviceNode, &PciValue); @@ -429,9 +429,14 @@ AcpiEvPciConfigRegionSetup ( PciId->Bus = ACPI_LOWORD (PciValue); } - /* Complete this device's PciId */ + /* Complete/update the PCI ID for this device */ - AcpiOsDerivePciId (PciRootNode, RegionObj->Region.Node, &PciId); + Status = AcpiHwDerivePciId (PciId, PciRootNode, RegionObj->Region.Node); + if (ACPI_FAILURE (Status)) + { + ACPI_FREE (PciId); + return_ACPI_STATUS (Status); + } *RegionContext = PciId; return_ACPI_STATUS (AE_OK); diff --git a/executer/exmutex.c b/executer/exmutex.c index e9646ca77d92..4f7421d4a23b 100644 --- a/executer/exmutex.c +++ b/executer/exmutex.c @@ -513,10 +513,10 @@ AcpiExReleaseMutex ( (ObjDesc != AcpiGbl_GlobalLockMutex)) { ACPI_ERROR ((AE_INFO, - "Thread %p cannot release Mutex [%4.4s] acquired by thread %p", - ACPI_CAST_PTR (void, WalkState->Thread->ThreadId), + "Thread %u cannot release Mutex [%4.4s] acquired by thread %u", + (UINT32) WalkState->Thread->ThreadId, AcpiUtGetNodeName (ObjDesc->Mutex.Node), - ACPI_CAST_PTR (void, OwnerThread->ThreadId))); + (UINT32) OwnerThread->ThreadId)); return_ACPI_STATUS (AE_AML_NOT_OWNER); } diff --git a/hardware/hwpci.c b/hardware/hwpci.c new file mode 100644 index 000000000000..74c5f87a963e --- /dev/null +++ b/hardware/hwpci.c @@ -0,0 +1,531 @@ +/******************************************************************************* + * + * Module Name: hwpci - Obtain PCI bus, device, and function numbers + * + ******************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + *****************************************************************************/ + +#define __HWPCI_C__ + +#include "acpi.h" +#include "accommon.h" + + +#define _COMPONENT ACPI_NAMESPACE + ACPI_MODULE_NAME ("hwpci") + + +/* PCI configuration space values */ + +#define PCI_CFG_HEADER_TYPE_REG 0x0E +#define PCI_CFG_PRIMARY_BUS_NUMBER_REG 0x18 +#define PCI_CFG_SECONDARY_BUS_NUMBER_REG 0x19 + +/* PCI header values */ + +#define PCI_HEADER_TYPE_MASK 0x7F +#define PCI_TYPE_BRIDGE 0x01 +#define PCI_TYPE_CARDBUS_BRIDGE 0x02 + +typedef struct acpi_pci_device +{ + ACPI_HANDLE Device; + struct acpi_pci_device *Next; + +} ACPI_PCI_DEVICE; + + +/* Local prototypes */ + +static ACPI_STATUS +AcpiHwBuildPciList ( + ACPI_HANDLE RootPciDevice, + ACPI_HANDLE PciRegion, + ACPI_PCI_DEVICE **ReturnListHead); + +static ACPI_STATUS +AcpiHwProcessPciList ( + ACPI_PCI_ID *PciId, + ACPI_PCI_DEVICE *ListHead); + +static void +AcpiHwDeletePciList ( + ACPI_PCI_DEVICE *ListHead); + +static ACPI_STATUS +AcpiHwGetPciDeviceInfo ( + ACPI_PCI_ID *PciId, + ACPI_HANDLE PciDevice, + UINT16 *BusNumber, + BOOLEAN *IsBridge); + + +/******************************************************************************* + * + * FUNCTION: AcpiHwDerivePciId + * + * PARAMETERS: PciId - Initial values for the PCI ID. May be + * modified by this function. + * RootPciDevice - A handle to a PCI device object. This + * object must be a PCI Root Bridge having a + * _HID value of either PNP0A03 or PNP0A08 + * PciRegion - A handle to a PCI configuration space + * Operation Region being initialized + * + * RETURN: Status + * + * DESCRIPTION: This function derives a full PCI ID for a PCI device, + * consisting of a Segment number, Bus number, Device number, + * and function code. + * + * The PCI hardware dynamically configures PCI bus numbers + * depending on the bus topology discovered during system + * initialization. This function is invoked during configuration + * of a PCI_Config Operation Region in order to (possibly) update + * the Bus/Device/Function numbers in the PciId with the actual + * values as determined by the hardware and operating system + * configuration. + * + * The PciId parameter is initially populated during the Operation + * Region initialization. This function is then called, and is + * will make any necessary modifications to the Bus, Device, or + * Function number PCI ID subfields as appropriate for the + * current hardware and OS configuration. + * + * NOTE: Created 08/2010. Replaces the previous OSL AcpiOsDerivePciId + * interface since this feature is OS-independent. This module + * specifically avoids any use of recursion by building a local + * temporary device list. + * + ******************************************************************************/ + +ACPI_STATUS +AcpiHwDerivePciId ( + ACPI_PCI_ID *PciId, + ACPI_HANDLE RootPciDevice, + ACPI_HANDLE PciRegion) +{ + ACPI_STATUS Status; + ACPI_PCI_DEVICE *ListHead = NULL; + + + ACPI_FUNCTION_TRACE (HwDerivePciId); + + + if (!PciId) + { + return_ACPI_STATUS (AE_BAD_PARAMETER); + } + + /* Build a list of PCI devices, from PciRegion up to RootPciDevice */ + + Status = AcpiHwBuildPciList (RootPciDevice, PciRegion, &ListHead); + if (ACPI_SUCCESS (Status)) + { + /* Walk the list, updating the PCI device/function/bus numbers */ + + Status = AcpiHwProcessPciList (PciId, ListHead); + } + + /* Always delete the list */ + + AcpiHwDeletePciList (ListHead); + return_ACPI_STATUS (Status); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiHwBuildPciList + * + * PARAMETERS: RootPciDevice - A handle to a PCI device object. This + * object is guaranteed to be a PCI Root + * Bridge having a _HID value of either + * PNP0A03 or PNP0A08 + * PciRegion - A handle to the PCI configuration space + * Operation Region + * ReturnListHead - Where the PCI device list is returned + * + * RETURN: Status + * + * DESCRIPTION: Builds a list of devices from the input PCI region up to the + * Root PCI device for this namespace subtree. + * + ******************************************************************************/ + +static ACPI_STATUS +AcpiHwBuildPciList ( + ACPI_HANDLE RootPciDevice, + ACPI_HANDLE PciRegion, + ACPI_PCI_DEVICE **ReturnListHead) +{ + ACPI_HANDLE CurrentDevice; + ACPI_HANDLE ParentDevice; + ACPI_STATUS Status; + ACPI_PCI_DEVICE *ListElement; + ACPI_PCI_DEVICE *ListHead = NULL; + + + /* + * Ascend namespace branch until the RootPciDevice is reached, building + * a list of device nodes. Loop will exit when either the PCI device is + * found, or the root of the namespace is reached. + */ + CurrentDevice = PciRegion; + while (1) + { + Status = AcpiGetParent (CurrentDevice, &ParentDevice); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + /* Finished when we reach the PCI root device (PNP0A03 or PNP0A08) */ + + if (ParentDevice == RootPciDevice) + { + *ReturnListHead = ListHead; + return (AE_OK); + } + + ListElement = ACPI_ALLOCATE (sizeof (ACPI_PCI_DEVICE)); + if (!ListElement) + { + return (AE_NO_MEMORY); + } + + /* Put new element at the head of the list */ + + ListElement->Next = ListHead; + ListElement->Device = ParentDevice; + ListHead = ListElement; + + CurrentDevice = ParentDevice; + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiHwProcessPciList + * + * PARAMETERS: PciId - Initial values for the PCI ID. May be + * modified by this function. + * ListHead - Device list created by + * AcpiHwBuildPciList + * + * RETURN: Status + * + * DESCRIPTION: Walk downward through the PCI device list, getting the device + * info for each, via the PCI configuration space and updating + * the PCI ID as necessary. Deletes the list during traversal. + * + ******************************************************************************/ + +static ACPI_STATUS +AcpiHwProcessPciList ( + ACPI_PCI_ID *PciId, + ACPI_PCI_DEVICE *ListHead) +{ + ACPI_STATUS Status = AE_OK; + ACPI_PCI_DEVICE *Info; + UINT16 BusNumber; + BOOLEAN IsBridge = TRUE; + + + ACPI_FUNCTION_NAME (HwProcessPciList); + + + ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, + "Input PciId: Seg %4.4X Bus %4.4X Dev %4.4X Func %4.4X\n", + PciId->Segment, PciId->Bus, PciId->Device, PciId->Function)); + + BusNumber = PciId->Bus; + + /* + * Descend down the namespace tree, collecting PCI device, function, + * and bus numbers. BusNumber is only important for PCI bridges. + * Algorithm: As we descend the tree, use the last valid PCI device, + * function, and bus numbers that are discovered, and assign them + * to the PCI ID for the target device. + */ + Info = ListHead; + while (Info) + { + Status = AcpiHwGetPciDeviceInfo (PciId, Info->Device, + &BusNumber, &IsBridge); + if (ACPI_FAILURE (Status)) + { + return_ACPI_STATUS (Status); + } + + Info = Info->Next; + } + + ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION, + "Output PciId: Seg %4.4X Bus %4.4X Dev %4.4X Func %4.4X " + "Status %X BusNumber %X IsBridge %X\n", + PciId->Segment, PciId->Bus, PciId->Device, PciId->Function, + Status, BusNumber, IsBridge)); + + return_ACPI_STATUS (AE_OK); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiHwDeletePciList + * + * PARAMETERS: ListHead - Device list created by + * AcpiHwBuildPciList + * + * RETURN: None + * + * DESCRIPTION: Free the entire PCI list. + * + ******************************************************************************/ + +static void +AcpiHwDeletePciList ( + ACPI_PCI_DEVICE *ListHead) +{ + ACPI_PCI_DEVICE *Next; + ACPI_PCI_DEVICE *Previous; + + + Next = ListHead; + while (Next) + { + Previous = Next; + Next = Previous->Next; + ACPI_FREE (Previous); + } +} + + +/******************************************************************************* + * + * FUNCTION: AcpiHwGetPciDeviceInfo + * + * PARAMETERS: PciId - Initial values for the PCI ID. May be + * modified by this function. + * PciDevice - Handle for the PCI device object + * BusNumber - Where a PCI bridge bus number is returned + * IsBridge - Return value, indicates if this PCI + * device is a PCI bridge + * + * RETURN: Status + * + * DESCRIPTION: Get the device info for a single PCI device object. Get the + * _ADR (contains PCI device and function numbers), and for PCI + * bridge devices, get the bus number from PCI configuration + * space. + * + ******************************************************************************/ + +static ACPI_STATUS +AcpiHwGetPciDeviceInfo ( + ACPI_PCI_ID *PciId, + ACPI_HANDLE PciDevice, + UINT16 *BusNumber, + BOOLEAN *IsBridge) +{ + ACPI_STATUS Status; + ACPI_OBJECT_TYPE ObjectType; + UINT64 ReturnValue; + UINT64 PciValue; + + + /* We only care about objects of type Device */ + + Status = AcpiGetType (PciDevice, &ObjectType); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + if (ObjectType != ACPI_TYPE_DEVICE) + { + return (AE_OK); + } + + /* We need an _ADR. Ignore device if not present */ + + Status = AcpiUtEvaluateNumericObject (METHOD_NAME__ADR, + PciDevice, &ReturnValue); + if (ACPI_FAILURE (Status)) + { + return (AE_OK); + } + + /* + * From _ADR, get the PCI Device and Function and + * update the PCI ID. + */ + PciId->Device = ACPI_HIWORD (ACPI_LODWORD (ReturnValue)); + PciId->Function = ACPI_LOWORD (ACPI_LODWORD (ReturnValue)); + + /* + * If the previous device was a bridge, use the previous + * device bus number + */ + if (*IsBridge) + { + PciId->Bus = *BusNumber; + } + + /* + * Get the bus numbers from PCI Config space: + * + * First, get the PCI HeaderType + */ + *IsBridge = FALSE; + Status = AcpiOsReadPciConfiguration (PciId, + PCI_CFG_HEADER_TYPE_REG, &PciValue, 8); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + /* We only care about bridges (1=PciBridge, 2=CardBusBridge) */ + + PciValue &= PCI_HEADER_TYPE_MASK; + + if ((PciValue != PCI_TYPE_BRIDGE) && + (PciValue != PCI_TYPE_CARDBUS_BRIDGE)) + { + return (AE_OK); + } + + /* Bridge: Get the Primary BusNumber */ + + Status = AcpiOsReadPciConfiguration (PciId, + PCI_CFG_PRIMARY_BUS_NUMBER_REG, &PciValue, 8); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + *IsBridge = TRUE; + PciId->Bus = (UINT16) PciValue; + + /* Bridge: Get the Secondary BusNumber */ + + Status = AcpiOsReadPciConfiguration (PciId, + PCI_CFG_SECONDARY_BUS_NUMBER_REG, &PciValue, 8); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + *BusNumber = (UINT16) PciValue; + return (AE_OK); +} diff --git a/include/acglobal.h b/include/acglobal.h index 581fc76f376d..2e158fbf79ea 100644 --- a/include/acglobal.h +++ b/include/acglobal.h @@ -214,6 +214,7 @@ ACPI_TABLE_FADT AcpiGbl_FADT; UINT32 AcpiCurrentGpeCount; UINT32 AcpiGbl_TraceFlags; ACPI_NAME AcpiGbl_TraceMethodName; +BOOLEAN AcpiGbl_SystemAwakeAndRunning; #endif @@ -334,7 +335,6 @@ ACPI_EXTERN UINT8 AcpiGbl_DebuggerConfiguration; ACPI_EXTERN BOOLEAN AcpiGbl_StepToNextCall; ACPI_EXTERN BOOLEAN AcpiGbl_AcpiHardwarePresent; ACPI_EXTERN BOOLEAN AcpiGbl_EventsInitialized; -ACPI_EXTERN BOOLEAN AcpiGbl_SystemAwakeAndRunning; ACPI_EXTERN UINT8 AcpiGbl_OsiData; ACPI_EXTERN ACPI_INTERFACE_INFO *AcpiGbl_SupportedInterfaces; diff --git a/include/achware.h b/include/achware.h index db08293c0af0..e63fe3f2152b 100644 --- a/include/achware.h +++ b/include/achware.h @@ -250,6 +250,16 @@ AcpiHwEnableRuntimeGpeBlock ( void *Context); +/* + * hwpci - PCI configuration support + */ +ACPI_STATUS +AcpiHwDerivePciId ( + ACPI_PCI_ID *PciId, + ACPI_HANDLE RootPciDevice, + ACPI_HANDLE PciRegion); + + /* * hwtimer - ACPI Timer prototypes */ diff --git a/include/aclocal.h b/include/aclocal.h index 39b6616d66c6..eec3ffcb4732 100644 --- a/include/aclocal.h +++ b/include/aclocal.h @@ -1270,7 +1270,7 @@ typedef struct acpi_db_method_info ACPI_HANDLE MainThreadGate; ACPI_HANDLE ThreadCompleteGate; ACPI_HANDLE InfoGate; - UINT32 *Threads; + ACPI_THREAD_ID *Threads; UINT32 NumThreads; UINT32 NumCreated; UINT32 NumCompleted; diff --git a/include/acmacros.h b/include/acmacros.h index e9a6f42cbf21..417cdc3b003b 100644 --- a/include/acmacros.h +++ b/include/acmacros.h @@ -400,8 +400,8 @@ * the plist contains a set of parens to allow variable-length lists. * These macros are used for both the debug and non-debug versions of the code. */ -#define ACPI_ERROR_NAMESPACE(s, e) AcpiNsReportError (AE_INFO, s, e); -#define ACPI_ERROR_METHOD(s, n, p, e) AcpiNsReportMethodError (AE_INFO, s, n, p, e); +#define ACPI_ERROR_NAMESPACE(s, e) AcpiUtNamespaceError (AE_INFO, s, e); +#define ACPI_ERROR_METHOD(s, n, p, e) AcpiUtMethodError (AE_INFO, s, n, p, e); #define ACPI_WARN_PREDEFINED(plist) AcpiUtPredefinedWarning plist #define ACPI_INFO_PREDEFINED(plist) AcpiUtPredefinedInfo plist diff --git a/include/acnamesp.h b/include/acnamesp.h index 5895e062fecc..5840bbc5861f 100644 --- a/include/acnamesp.h +++ b/include/acnamesp.h @@ -513,22 +513,6 @@ UINT32 AcpiNsLocal ( ACPI_OBJECT_TYPE Type); -void -AcpiNsReportError ( - const char *ModuleName, - UINT32 LineNumber, - const char *InternalName, - ACPI_STATUS LookupStatus); - -void -AcpiNsReportMethodError ( - const char *ModuleName, - UINT32 LineNumber, - const char *Message, - ACPI_NAMESPACE_NODE *Node, - const char *Path, - ACPI_STATUS LookupStatus); - void AcpiNsPrintNodePathname ( ACPI_NAMESPACE_NODE *Node, diff --git a/include/acpiosxf.h b/include/acpiosxf.h index 3b4e112895e7..9187a4ab341c 100644 --- a/include/acpiosxf.h +++ b/include/acpiosxf.h @@ -405,16 +405,6 @@ AcpiOsWritePciConfiguration ( UINT32 Width); -/* - * Interim function needed for PCI IRQ routing - */ -void -AcpiOsDerivePciId( - ACPI_HANDLE Device, - ACPI_HANDLE Region, - ACPI_PCI_ID **PciId); - - /* * Miscellaneous */ diff --git a/include/acpixf.h b/include/acpixf.h index bf101689063a..7fac29fab557 100644 --- a/include/acpixf.h +++ b/include/acpixf.h @@ -120,7 +120,7 @@ /* Current ACPICA subsystem version in YYYYMMDD format */ -#define ACPI_CA_VERSION 0x20100806 +#define ACPI_CA_VERSION 0x20100915 #include "actypes.h" #include "actbl.h" @@ -130,6 +130,7 @@ */ extern UINT32 AcpiCurrentGpeCount; extern ACPI_TABLE_FADT AcpiGbl_FADT; +extern BOOLEAN AcpiGbl_SystemAwakeAndRunning; /* Runtime configuration of debug print levels */ diff --git a/include/actypes.h b/include/actypes.h index 0486f8eb63d8..e4290ae55d3c 100644 --- a/include/actypes.h +++ b/include/actypes.h @@ -188,7 +188,6 @@ * * ACPI_SIZE 16/32/64-bit unsigned value * ACPI_NATIVE_INT 16/32/64-bit signed value - * */ /******************************************************************************* @@ -205,6 +204,16 @@ typedef COMPILER_DEPENDENT_INT64 INT64; /*! [End] no source code translation !*/ +/* + * Value returned by AcpiOsGetThreadId. There is no standard "thread_id" + * across operating systems or even the various UNIX systems. Since ACPICA + * only needs the thread ID as a unique thread identifier, we use a UINT64 + * as the only common data type - it will accommodate any type of pointer or + * any type of integer. It is up to the host-dependent OSL to cast the + * native thread ID type to a UINT64 (in AcpiOsGetThreadId). + */ +#define ACPI_THREAD_ID UINT64 + /******************************************************************************* * @@ -286,12 +295,6 @@ typedef UINT32 ACPI_PHYSICAL_ADDRESS; * ******************************************************************************/ -/* Value returned by AcpiOsGetThreadId */ - -#ifndef ACPI_THREAD_ID -#define ACPI_THREAD_ID ACPI_SIZE -#endif - /* Flags for AcpiOsAcquireLock/AcpiOsReleaseLock */ #ifndef ACPI_CPU_FLAGS @@ -456,21 +459,6 @@ typedef UINT8 ACPI_OWNER_ID; #define ACPI_OWNER_ID_MAX 0xFF -typedef struct uint64_struct -{ - UINT32 Lo; - UINT32 Hi; - -} UINT64_STRUCT; - -typedef union uint64_overlay -{ - UINT64 Full; - UINT64_STRUCT Part; - -} UINT64_OVERLAY; - - #define ACPI_INTEGER_BIT_SIZE 64 #define ACPI_MAX_DECIMAL_DIGITS 20 /* 2^64 = 18,446,744,073,709,551,616 */ #define ACPI_MAX64_DECIMAL_DIGITS 20 diff --git a/include/acutils.h b/include/acutils.h index f729399154d6..2d73da64fa4a 100644 --- a/include/acutils.h +++ b/include/acutils.h @@ -818,24 +818,6 @@ AcpiUtStrtoul64 ( UINT32 Base, UINT64 *RetInteger); -void ACPI_INTERNAL_VAR_XFACE -AcpiUtPredefinedWarning ( - const char *ModuleName, - UINT32 LineNumber, - char *Pathname, - UINT8 NodeFlags, - const char *Format, - ...); - -void ACPI_INTERNAL_VAR_XFACE -AcpiUtPredefinedInfo ( - const char *ModuleName, - UINT32 LineNumber, - char *Pathname, - UINT8 NodeFlags, - const char *Format, - ...); - /* Values for Base above (16=Hex, 10=Decimal) */ #define ACPI_ANY_BASE 0 @@ -985,7 +967,44 @@ AcpiUtCreateList ( UINT16 ObjectSize, ACPI_MEMORY_LIST **ReturnCache); +#endif /* ACPI_DBG_TRACK_ALLOCATIONS */ -#endif + +/* + * utxferror - various error/warning output functions + */ +void ACPI_INTERNAL_VAR_XFACE +AcpiUtPredefinedWarning ( + const char *ModuleName, + UINT32 LineNumber, + char *Pathname, + UINT8 NodeFlags, + const char *Format, + ...); + +void ACPI_INTERNAL_VAR_XFACE +AcpiUtPredefinedInfo ( + const char *ModuleName, + UINT32 LineNumber, + char *Pathname, + UINT8 NodeFlags, + const char *Format, + ...); + +void +AcpiUtNamespaceError ( + const char *ModuleName, + UINT32 LineNumber, + const char *InternalName, + ACPI_STATUS LookupStatus); + +void +AcpiUtMethodError ( + const char *ModuleName, + UINT32 LineNumber, + const char *Message, + ACPI_NAMESPACE_NODE *Node, + const char *Path, + ACPI_STATUS LookupStatus); #endif /* _ACUTILS_H */ diff --git a/include/platform/accygwin.h b/include/platform/accygwin.h index 6936024839ef..36c0d6d2cedd 100644 --- a/include/platform/accygwin.h +++ b/include/platform/accygwin.h @@ -121,7 +121,6 @@ */ #define ACPI_USE_SYSTEM_CLIBRARY #define ACPI_USE_DO_WHILE_0 -#define ACPI_THREAD_ID pthread_t #define ACPI_FLUSH_CPU_CACHE() /* * This is needed since sem_timedwait does not appear to work properly @@ -151,13 +150,12 @@ #define __cdecl #endif -#ifdef _ANSI -#define inline -#endif - #define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) if (GLptr) Acq=1; else Acq=0; #define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Pending) Pending = 1 +/* On Cygwin, pthread_t is a pointer */ + +#define ACPI_CAST_PTHREAD_T(pthread) ((ACPI_THREAD_ID) ACPI_TO_INTEGER (pthread)) /* Cygwin uses GCC */ diff --git a/include/platform/acenv.h b/include/platform/acenv.h index 0567a003c6d1..c709f4423ebf 100644 --- a/include/platform/acenv.h +++ b/include/platform/acenv.h @@ -275,6 +275,12 @@ #define ACPI_FLUSH_CPU_CACHE() #endif +/* "inline" keywords - configurable since inline is not standardized */ + +#ifndef ACPI_INLINE +#define ACPI_INLINE +#endif + /* * Configurable calling conventions: * diff --git a/include/platform/acfreebsd.h b/include/platform/acfreebsd.h index 145b7bb0de67..6c087da084f6 100644 --- a/include/platform/acfreebsd.h +++ b/include/platform/acfreebsd.h @@ -139,7 +139,6 @@ #include "opt_acpi.h" -#define ACPI_THREAD_ID lwpid_t #define ACPI_MUTEX_TYPE ACPI_OSL_MUTEX #ifdef ACPI_DEBUG @@ -166,8 +165,6 @@ #include #endif -#define ACPI_THREAD_ID pthread_t - #define ACPI_USE_STANDARD_HEADERS #define ACPI_FLUSH_CPU_CACHE() diff --git a/include/platform/acgcc.h b/include/platform/acgcc.h index d0098b1800ab..9c7c9b94441f 100644 --- a/include/platform/acgcc.h +++ b/include/platform/acgcc.h @@ -116,6 +116,8 @@ #ifndef __ACGCC_H__ #define __ACGCC_H__ +#define ACPI_INLINE __inline__ + /* Function name is used for debug output. Non-ANSI, compiler-dependent */ #define ACPI_GET_FUNCTION_NAME __FUNCTION__ diff --git a/include/platform/acintel.h b/include/platform/acintel.h index a7e75ec60313..415e9b00df43 100644 --- a/include/platform/acintel.h +++ b/include/platform/acintel.h @@ -116,11 +116,11 @@ #ifndef __ACINTEL_H__ #define __ACINTEL_H__ +/* Configuration specific to Intel 64-bit C compiler */ -#define COMPILER_DEPENDENT_INT64 __int64 -#define COMPILER_DEPENDENT_UINT64 unsigned __int64 - -#define inline __inline +#define COMPILER_DEPENDENT_INT64 __int64 +#define COMPILER_DEPENDENT_UINT64 unsigned __int64 +#define ACPI_INLINE __inline /* * Calling conventions: @@ -135,20 +135,6 @@ #define ACPI_INTERNAL_XFACE #define ACPI_INTERNAL_VAR_XFACE -/* - * Math helper functions - */ -#define ACPI_DIV_64_BY_32(n, n_hi, n_lo, d32, q32, r32) \ -{ \ - q32 = n / d32; \ - r32 = n % d32; \ -} - -#define ACPI_SHIFT_RIGHT_64(n, n_hi, n_lo) \ -{ \ - n <<= 1; \ -} - /* remark 981 - operands evaluated in no particular order */ #pragma warning(disable:981) diff --git a/include/platform/aclinux.h b/include/platform/aclinux.h index 9009689c938d..44977468dcfa 100644 --- a/include/platform/aclinux.h +++ b/include/platform/aclinux.h @@ -147,7 +147,6 @@ #define ACPI_CACHE_T struct kmem_cache #define ACPI_SPINLOCK spinlock_t * #define ACPI_CPU_FLAGS unsigned long -#define ACPI_THREAD_ID struct task_struct * #else /* !__KERNEL__ */ @@ -160,7 +159,7 @@ /* Host-dependent types and defines for user-space ACPICA */ #define ACPI_FLUSH_CPU_CACHE() -#define ACPI_THREAD_ID pthread_t +#define ACPI_CAST_PTHREAD_T(pthread) ((ACPI_THREAD_ID) (pthread)) #if defined(__ia64__) || defined(__x86_64__) #define ACPI_MACHINE_WIDTH 64 diff --git a/include/platform/acmsvc.h b/include/platform/acmsvc.h index 62e69d16dc1d..28a072780fb8 100644 --- a/include/platform/acmsvc.h +++ b/include/platform/acmsvc.h @@ -116,8 +116,9 @@ #ifndef __ACMSVC_H__ #define __ACMSVC_H__ -#define COMPILER_DEPENDENT_INT64 __int64 -#define COMPILER_DEPENDENT_UINT64 unsigned __int64 +#define COMPILER_DEPENDENT_INT64 __int64 +#define COMPILER_DEPENDENT_UINT64 unsigned __int64 +#define ACPI_INLINE __inline /* * Calling conventions: @@ -179,5 +180,4 @@ /* warn C4131: uses old-style declarator (iASL compiler only) */ #pragma warning(disable:4131) - #endif /* __ACMSVC_H__ */ diff --git a/include/platform/acos2.h b/include/platform/acos2.h index 90e6b2e4914c..95f97eb81245 100644 --- a/include/platform/acos2.h +++ b/include/platform/acos2.h @@ -158,12 +158,6 @@ unsigned short OSPMReleaseGlobalLock (void *); n_lo = (unsigned long)(val & 0xffffffff); \ } -/* IBM VAC does not have inline */ - -#if __IBMC__ || __IBMCPP__ -#define inline -#endif - #ifndef ACPI_ASL_COMPILER #define ACPI_USE_LOCAL_CACHE #undef ACPI_DEBUGGER diff --git a/include/platform/acwin.h b/include/platform/acwin.h index 583f677b4751..a6ae8071a97d 100644 --- a/include/platform/acwin.h +++ b/include/platform/acwin.h @@ -126,8 +126,6 @@ #define ACPI_MACHINE_WIDTH 32 -#define inline __inline - #define ACPI_USE_STANDARD_HEADERS #ifdef ACPI_DEFINE_ALTERNATE_TYPES diff --git a/include/platform/acwin64.h b/include/platform/acwin64.h index 64c1f99702a6..076f586bd005 100644 --- a/include/platform/acwin64.h +++ b/include/platform/acwin64.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * Name: acwin.h - OS specific defines, etc. + * Name: acwin64.h - OS specific defines, etc. * *****************************************************************************/ diff --git a/namespace/nsrepair2.c b/namespace/nsrepair2.c index 6ac7d6c356ef..1464a3b2b5de 100644 --- a/namespace/nsrepair2.c +++ b/namespace/nsrepair2.c @@ -152,11 +152,21 @@ AcpiNsRepair_ALR ( ACPI_PREDEFINED_DATA *Data, ACPI_OPERAND_OBJECT **ReturnObjectPtr); +static ACPI_STATUS +AcpiNsRepair_CID ( + ACPI_PREDEFINED_DATA *Data, + ACPI_OPERAND_OBJECT **ReturnObjectPtr); + static ACPI_STATUS AcpiNsRepair_FDE ( ACPI_PREDEFINED_DATA *Data, ACPI_OPERAND_OBJECT **ReturnObjectPtr); +static ACPI_STATUS +AcpiNsRepair_HID ( + ACPI_PREDEFINED_DATA *Data, + ACPI_OPERAND_OBJECT **ReturnObjectPtr); + static ACPI_STATUS AcpiNsRepair_PSS ( ACPI_PREDEFINED_DATA *Data, @@ -196,8 +206,10 @@ AcpiNsSortList ( * As necessary: * * _ALR: Sort the list ascending by AmbientIlluminance + * _CID: Strings: uppercase all, remove any leading asterisk * _FDE: Convert Buffer of BYTEs to a Buffer of DWORDs * _GTM: Convert Buffer of BYTEs to a Buffer of DWORDs + * _HID: Strings: uppercase all, remove any leading asterisk * _PSS: Sort the list descending by Power * _TSS: Sort the list descending by Power * @@ -211,8 +223,10 @@ AcpiNsSortList ( static const ACPI_REPAIR_INFO AcpiNsRepairableNames[] = { {"_ALR", AcpiNsRepair_ALR}, + {"_CID", AcpiNsRepair_CID}, {"_FDE", AcpiNsRepair_FDE}, {"_GTM", AcpiNsRepair_FDE}, /* _GTM has same repair as _FDE */ + {"_HID", AcpiNsRepair_HID}, {"_PSS", AcpiNsRepair_PSS}, {"_TSS", AcpiNsRepair_TSS}, {{0,0,0,0}, NULL} /* Table terminator */ @@ -425,6 +439,172 @@ AcpiNsRepair_FDE ( } +/****************************************************************************** + * + * FUNCTION: AcpiNsRepair_CID + * + * PARAMETERS: Data - Pointer to validation data structure + * ReturnObjectPtr - Pointer to the object returned from the + * evaluation of a method or object + * + * RETURN: Status. AE_OK if object is OK or was repaired successfully + * + * DESCRIPTION: Repair for the _CID object. If a string, ensure that all + * letters are uppercase and that there is no leading asterisk. + * If a Package, ensure same for all string elements. + * + *****************************************************************************/ + +static ACPI_STATUS +AcpiNsRepair_CID ( + ACPI_PREDEFINED_DATA *Data, + ACPI_OPERAND_OBJECT **ReturnObjectPtr) +{ + ACPI_STATUS Status; + ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; + ACPI_OPERAND_OBJECT **ElementPtr; + ACPI_OPERAND_OBJECT *OriginalElement; + UINT16 OriginalRefCount; + UINT32 i; + + + /* Check for _CID as a simple string */ + + if (ReturnObject->Common.Type == ACPI_TYPE_STRING) + { + Status = AcpiNsRepair_HID (Data, ReturnObjectPtr); + return (Status); + } + + /* Exit if not a Package */ + + if (ReturnObject->Common.Type != ACPI_TYPE_PACKAGE) + { + return (AE_OK); + } + + /* Examine each element of the _CID package */ + + ElementPtr = ReturnObject->Package.Elements; + for (i = 0; i < ReturnObject->Package.Count; i++) + { + OriginalElement = *ElementPtr; + OriginalRefCount = OriginalElement->Common.ReferenceCount; + + Status = AcpiNsRepair_HID (Data, ElementPtr); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + /* Take care with reference counts */ + + if (OriginalElement != *ElementPtr) + { + /* Element was replaced */ + + (*ElementPtr)->Common.ReferenceCount = + OriginalRefCount; + + AcpiUtRemoveReference (OriginalElement); + } + + ElementPtr++; + } + + return (AE_OK); +} + + +/****************************************************************************** + * + * FUNCTION: AcpiNsRepair_HID + * + * PARAMETERS: Data - Pointer to validation data structure + * ReturnObjectPtr - Pointer to the object returned from the + * evaluation of a method or object + * + * RETURN: Status. AE_OK if object is OK or was repaired successfully + * + * DESCRIPTION: Repair for the _HID object. If a string, ensure that all + * letters are uppercase and that there is no leading asterisk. + * + *****************************************************************************/ + +static ACPI_STATUS +AcpiNsRepair_HID ( + ACPI_PREDEFINED_DATA *Data, + ACPI_OPERAND_OBJECT **ReturnObjectPtr) +{ + ACPI_OPERAND_OBJECT *ReturnObject = *ReturnObjectPtr; + ACPI_OPERAND_OBJECT *NewString; + char *Source; + char *Dest; + + + ACPI_FUNCTION_NAME (NsRepair_HID); + + + /* We only care about string _HID objects (not integers) */ + + if (ReturnObject->Common.Type != ACPI_TYPE_STRING) + { + return (AE_OK); + } + + if (ReturnObject->String.Length == 0) + { + ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags, + "Invalid zero-length _HID or _CID string")); + + /* Return AE_OK anyway, let driver handle it */ + + Data->Flags |= ACPI_OBJECT_REPAIRED; + return (AE_OK); + } + + /* It is simplest to always create a new string object */ + + NewString = AcpiUtCreateStringObject (ReturnObject->String.Length); + if (!NewString) + { + return (AE_NO_MEMORY); + } + + /* + * Remove a leading asterisk if present. For some unknown reason, there + * are many machines in the field that contains IDs like this. + * + * Examples: "*PNP0C03", "*ACPI0003" + */ + Source = ReturnObject->String.Pointer; + if (*Source == '*') + { + Source++; + NewString->String.Length--; + + ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR, + "%s: Removed invalid leading asterisk\n", Data->Pathname)); + } + + /* + * Copy and uppercase the string. From the ACPI specification: + * + * A valid PNP ID must be of the form "AAA####" where A is an uppercase + * letter and # is a hex digit. A valid ACPI ID must be of the form + * "ACPI####" where # is a hex digit. + */ + for (Dest = NewString->String.Pointer; *Source; Dest++, Source++) + { + *Dest = (char) ACPI_TOUPPER (*Source); + } + + AcpiUtRemoveReference (ReturnObject); + *ReturnObjectPtr = NewString; + return (AE_OK); +} + + /****************************************************************************** * * FUNCTION: AcpiNsRepair_TSS diff --git a/namespace/nsutils.c b/namespace/nsutils.c index fc6140c00f1e..aee9adcde953 100644 --- a/namespace/nsutils.c +++ b/namespace/nsutils.c @@ -137,118 +137,6 @@ AcpiNsFindParentName ( #endif -/******************************************************************************* - * - * FUNCTION: AcpiNsReportError - * - * PARAMETERS: ModuleName - Caller's module name (for error output) - * LineNumber - Caller's line number (for error output) - * InternalName - Name or path of the namespace node - * LookupStatus - Exception code from NS lookup - * - * RETURN: None - * - * DESCRIPTION: Print warning message with full pathname - * - ******************************************************************************/ - -void -AcpiNsReportError ( - const char *ModuleName, - UINT32 LineNumber, - const char *InternalName, - ACPI_STATUS LookupStatus) -{ - ACPI_STATUS Status; - UINT32 BadName; - char *Name = NULL; - - - AcpiOsPrintf ("ACPI Error (%s-%04d): ", ModuleName, LineNumber); - - if (LookupStatus == AE_BAD_CHARACTER) - { - /* There is a non-ascii character in the name */ - - ACPI_MOVE_32_TO_32 (&BadName, ACPI_CAST_PTR (UINT32, InternalName)); - AcpiOsPrintf ("[0x%4.4X] (NON-ASCII)", BadName); - } - else - { - /* Convert path to external format */ - - Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, - InternalName, NULL, &Name); - - /* Print target name */ - - if (ACPI_SUCCESS (Status)) - { - AcpiOsPrintf ("[%s]", Name); - } - else - { - AcpiOsPrintf ("[COULD NOT EXTERNALIZE NAME]"); - } - - if (Name) - { - ACPI_FREE (Name); - } - } - - AcpiOsPrintf (" Namespace lookup failure, %s\n", - AcpiFormatException (LookupStatus)); -} - - -/******************************************************************************* - * - * FUNCTION: AcpiNsReportMethodError - * - * PARAMETERS: ModuleName - Caller's module name (for error output) - * LineNumber - Caller's line number (for error output) - * Message - Error message to use on failure - * PrefixNode - Prefix relative to the path - * Path - Path to the node (optional) - * MethodStatus - Execution status - * - * RETURN: None - * - * DESCRIPTION: Print warning message with full pathname - * - ******************************************************************************/ - -void -AcpiNsReportMethodError ( - const char *ModuleName, - UINT32 LineNumber, - const char *Message, - ACPI_NAMESPACE_NODE *PrefixNode, - const char *Path, - ACPI_STATUS MethodStatus) -{ - ACPI_STATUS Status; - ACPI_NAMESPACE_NODE *Node = PrefixNode; - - - AcpiOsPrintf ("ACPI Error (%s-%04d): ", ModuleName, LineNumber); - - if (Path) - { - Status = AcpiNsGetNode (PrefixNode, Path, ACPI_NS_NO_UPSEARCH, - &Node); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("[Could not get node by pathname]"); - } - } - - AcpiNsPrintNodePathname (Node, Message); - AcpiOsPrintf (", %s\n", AcpiFormatException (MethodStatus)); -} - - /******************************************************************************* * * FUNCTION: AcpiNsPrintNodePathname diff --git a/os_specific/service_layers/osunixxf.c b/os_specific/service_layers/osunixxf.c index 70c40d845d12..78fa435fec32 100644 --- a/os_specific/service_layers/osunixxf.c +++ b/os_specific/service_layers/osunixxf.c @@ -972,16 +972,6 @@ AcpiOsWritePciConfiguration ( return (AE_OK); } -/* TEMPORARY STUB FUNCTION */ -void -AcpiOsDerivePciId( - ACPI_HANDLE Device, - ACPI_HANDLE Region, - ACPI_PCI_ID **PciId) -{ - -} - /****************************************************************************** * @@ -1168,16 +1158,14 @@ AcpiOsWritable ( * * DESCRIPTION: Get the Id of the current (running) thread * - * NOTE: The environment header should contain this line: - * #define ACPI_THREAD_ID pthread_t - * *****************************************************************************/ ACPI_THREAD_ID -AcpiOsGetThreadId (void) +AcpiOsGetThreadId ( + void) { - return (pthread_self ()); + return (ACPI_CAST_PTHREAD_T (pthread_self())); } diff --git a/os_specific/service_layers/oswintbl.c b/os_specific/service_layers/oswintbl.c index db609ee99d12..62df4c087623 100644 --- a/os_specific/service_layers/oswintbl.c +++ b/os_specific/service_layers/oswintbl.c @@ -116,16 +116,13 @@ #ifdef WIN32 #pragma warning(disable:4115) /* warning C4115: (caused by rpcasync.h) */ - #include -#include #elif WIN64 #include #endif #include "acpi.h" -#include "accommon.h" #define _COMPONENT ACPI_OS_SERVICES ACPI_MODULE_NAME ("oswintbl") diff --git a/os_specific/service_layers/oswinxf.c b/os_specific/service_layers/oswinxf.c index 8a799b009993..cf19603ec280 100644 --- a/os_specific/service_layers/oswinxf.c +++ b/os_specific/service_layers/oswinxf.c @@ -1077,7 +1077,7 @@ AcpiOsGetThreadId ( /* Ensure ID is never 0 */ ThreadId = GetCurrentThreadId (); - return (ThreadId + 1); + return ((ACPI_THREAD_ID) (ThreadId + 1)); } @@ -1209,17 +1209,6 @@ AcpiOsWritePciConfiguration ( return (AE_OK); } -/* TEMPORARY STUB FUNCTION */ -void -AcpiOsDerivePciId( - ACPI_HANDLE Device, - ACPI_HANDLE Region, - ACPI_PCI_ID **PciId) -{ - - return; -} - /****************************************************************************** * diff --git a/osunixxf.c b/osunixxf.c index 70c40d845d12..78fa435fec32 100644 --- a/osunixxf.c +++ b/osunixxf.c @@ -972,16 +972,6 @@ AcpiOsWritePciConfiguration ( return (AE_OK); } -/* TEMPORARY STUB FUNCTION */ -void -AcpiOsDerivePciId( - ACPI_HANDLE Device, - ACPI_HANDLE Region, - ACPI_PCI_ID **PciId) -{ - -} - /****************************************************************************** * @@ -1168,16 +1158,14 @@ AcpiOsWritable ( * * DESCRIPTION: Get the Id of the current (running) thread * - * NOTE: The environment header should contain this line: - * #define ACPI_THREAD_ID pthread_t - * *****************************************************************************/ ACPI_THREAD_ID -AcpiOsGetThreadId (void) +AcpiOsGetThreadId ( + void) { - return (pthread_self ()); + return (ACPI_CAST_PTHREAD_T (pthread_self())); } diff --git a/tables/tbfadt.c b/tables/tbfadt.c index 9ae4669d94ae..a86a55cdaa4f 100644 --- a/tables/tbfadt.c +++ b/tables/tbfadt.c @@ -124,7 +124,7 @@ /* Local prototypes */ -static inline void +static ACPI_INLINE void AcpiTbInitGenericAddress ( ACPI_GENERIC_ADDRESS *GenericAddress, UINT8 SpaceId, @@ -273,7 +273,7 @@ static ACPI_FADT_PM_INFO FadtPmInfoTable[] = * ******************************************************************************/ -static inline void +static ACPI_INLINE void AcpiTbInitGenericAddress ( ACPI_GENERIC_ADDRESS *GenericAddress, UINT8 SpaceId, diff --git a/tools/acpiexec/Makefile b/tools/acpiexec/Makefile index 5fbe79504be0..102c33d5b51c 100644 --- a/tools/acpiexec/Makefile +++ b/tools/acpiexec/Makefile @@ -89,6 +89,7 @@ OBJS = \ getopt.o \ hwacpi.o \ hwgpe.o \ + hwpci.o \ hwregs.o \ hwsleep.o \ hwvalid.o \ @@ -158,6 +159,7 @@ OBJS = \ utstate.o \ uttrack.o \ utosi.o \ + utxferror.o \ utxface.o @@ -396,6 +398,9 @@ hwacpi.o : $(ACPICA_CORE)/hardware/hwacpi.c hwgpe.o : $(ACPICA_CORE)/hardware/hwgpe.c $(COMPILE) +hwpci.o : $(ACPICA_CORE)/hardware/hwpci.c + $(COMPILE) + hwregs.o : $(ACPICA_CORE)/hardware/hwregs.c $(COMPILE) @@ -600,6 +605,9 @@ uttrack.o : $(ACPICA_CORE)/utilities/uttrack.c utosi.o : $(ACPICA_CORE)/utilities/utosi.c $(COMPILE) +utxferror.o : $(ACPICA_CORE)/utilities/utxferror.c + $(COMPILE) + utxface.o : $(ACPICA_CORE)/utilities/utxface.c $(COMPILE) diff --git a/tools/acpiexec/aecommon.h b/tools/acpiexec/aecommon.h index 7608c5de4887..3b7d36d9912e 100644 --- a/tools/acpiexec/aecommon.h +++ b/tools/acpiexec/aecommon.h @@ -139,6 +139,18 @@ extern FILE *AcpiGbl_DebugFile; extern BOOLEAN AcpiGbl_IgnoreErrors; extern UINT8 AcpiGbl_RegionFillValue; +/* Check for unexpected exceptions */ + +#define AE_CHECK_STATUS(Name, Status, Expected) \ + if (Status != Expected) \ + { \ + AcpiOsPrintf ("Unexpected %s from %s (%s-%d)\n", \ + AcpiFormatException (Status), #Name, _AcpiModuleName, __LINE__); \ + } + +/* Check for unexpected non-AE_OK errors */ + +#define AE_CHECK_OK(Name, Status) AE_CHECK_STATUS (Name, Status, AE_OK); typedef struct ae_table_desc { @@ -173,7 +185,7 @@ typedef struct ae_debug_regions #define OSD_PRINT(lvl,fp) TEST_OUTPUT_LEVEL(lvl) {\ AcpiOsPrintf PARAM_LIST(fp);} -void __cdecl +void ACPI_SYSTEM_XFACE AeCtrlCHandler ( int Sig); diff --git a/tools/acpiexec/aeexec.c b/tools/acpiexec/aeexec.c index 948b22754694..baf1aeb75b15 100644 --- a/tools/acpiexec/aeexec.c +++ b/tools/acpiexec/aeexec.c @@ -120,39 +120,39 @@ /* Local prototypes */ -ACPI_STATUS +static ACPI_STATUS AeSetupConfiguration ( void *RegionAddr); -void +static void AfInstallGpeBlock ( void); -void +static void AeTestBufferArgument ( void); -void +static void AeTestPackageArgument ( void); -ACPI_STATUS +static ACPI_STATUS AeGetDevices ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, void *Context, void **ReturnValue); -ACPI_STATUS +static ACPI_STATUS ExecuteOSI ( char *OsiString, UINT32 ExpectedResult); -void +static void AeHardwareInterfaces ( void); -void +static void AeGenericRegisters ( void); @@ -172,11 +172,10 @@ extern unsigned char Ssdt3Code[]; * *****************************************************************************/ -ACPI_STATUS +static ACPI_STATUS AeSetupConfiguration ( void *RegionAddr) { - ACPI_STATUS Status; ACPI_OBJECT_LIST ArgList; ACPI_OBJECT Arg[3]; @@ -190,8 +189,7 @@ AeSetupConfiguration ( Arg[0].Type = ACPI_TYPE_INTEGER; Arg[0].Integer.Value = ACPI_TO_INTEGER (RegionAddr); - Status = AcpiEvaluateObject (NULL, "\\_CFG", &ArgList, NULL); - + (void) AcpiEvaluateObject (NULL, "\\_CFG", &ArgList, NULL); return (AE_OK); } @@ -209,7 +207,7 @@ AeSetupConfiguration ( * *****************************************************************************/ -void +static void AfInstallGpeBlock ( void) { @@ -235,33 +233,46 @@ AfInstallGpeBlock ( if (ACPI_SUCCESS (Status)) { Status = AcpiInstallGpeBlock (Handle2, &BlockAddress, 7, 8); + AE_CHECK_OK (AcpiInstallGpeBlock, Status); - AcpiInstallGpeHandler (Handle2, 8, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); - AcpiEnableGpe (Handle2, 8); + Status = AcpiInstallGpeHandler (Handle2, 8, + ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); + AE_CHECK_OK (AcpiInstallGpeHandler, Status); + + Status = AcpiEnableGpe (Handle2, 8); + AE_CHECK_OK (AcpiEnableGpe, Status); Status = AcpiGetGpeDevice (0x30, &GpeDevice); - Status = AcpiGetGpeDevice (0x42, &GpeDevice); - Status = AcpiGetGpeDevice (AcpiCurrentGpeCount-1, &GpeDevice); - Status = AcpiGetGpeDevice (AcpiCurrentGpeCount, &GpeDevice); + AE_CHECK_OK (AcpiGetGpeDevice, Status); - AcpiRemoveGpeHandler (Handle2, 8, AeGpeHandler); + Status = AcpiGetGpeDevice (0x42, &GpeDevice); + AE_CHECK_OK (AcpiGetGpeDevice, Status); + + Status = AcpiGetGpeDevice (AcpiCurrentGpeCount-1, &GpeDevice); + AE_CHECK_OK (AcpiGetGpeDevice, Status); + + Status = AcpiGetGpeDevice (AcpiCurrentGpeCount, &GpeDevice); + AE_CHECK_STATUS (AcpiGetGpeDevice, Status, AE_NOT_EXIST); + + Status = AcpiRemoveGpeHandler (Handle2, 8, AeGpeHandler); + AE_CHECK_OK (AcpiRemoveGpeHandler, Status); } Status = AcpiGetHandle (NULL, "\\GPE3", &Handle3); if (ACPI_SUCCESS (Status)) { Status = AcpiInstallGpeBlock (Handle3, &BlockAddress, 8, 11); + AE_CHECK_OK (AcpiInstallGpeBlock, Status); } } /* Test using a Buffer object as a method argument */ -void +static void AeTestBufferArgument ( void) { - ACPI_STATUS Status; ACPI_OBJECT_LIST Params; ACPI_OBJECT BufArg; UINT8 Buffer[] = { @@ -277,26 +288,23 @@ AeTestBufferArgument ( Params.Count = 1; Params.Pointer = &BufArg; - - Status = AcpiEvaluateObject (NULL, "\\BUF", &Params, NULL); + (void) AcpiEvaluateObject (NULL, "\\BUF", &Params, NULL); } -ACPI_OBJECT PkgArg; -ACPI_OBJECT PkgElements[5]; -ACPI_OBJECT Pkg2Elements[5]; -ACPI_OBJECT_LIST Params; +static ACPI_OBJECT PkgArg; +static ACPI_OBJECT PkgElements[5]; +static ACPI_OBJECT Pkg2Elements[5]; +static ACPI_OBJECT_LIST Params; /* * Test using a Package object as an method argument */ -void +static void AeTestPackageArgument ( void) { - ACPI_STATUS Status; - /* Main package */ @@ -335,11 +343,11 @@ AeTestPackageArgument ( Params.Count = 1; Params.Pointer = &PkgArg; - Status = AcpiEvaluateObject (NULL, "\\_PKG", &Params, NULL); + (void) AcpiEvaluateObject (NULL, "\\_PKG", &Params, NULL); } -ACPI_STATUS +static ACPI_STATUS AeGetDevices ( ACPI_HANDLE ObjHandle, UINT32 NestingLevel, @@ -364,7 +372,7 @@ AeGetDevices ( * *****************************************************************************/ -ACPI_STATUS +static ACPI_STATUS ExecuteOSI ( char *OsiString, UINT32 ExpectedResult) @@ -434,9 +442,9 @@ ExecuteOSI ( * *****************************************************************************/ -ACPI_GENERIC_ADDRESS GenericRegister; +static ACPI_GENERIC_ADDRESS GenericRegister; -void +static void AeGenericRegisters ( void) { @@ -450,14 +458,20 @@ AeGenericRegisters ( GenericRegister.SpaceId = ACPI_ADR_SPACE_SYSTEM_IO; Status = AcpiRead (&Value, &GenericRegister); + AE_CHECK_OK (AcpiRead, Status); + Status = AcpiWrite (Value, &GenericRegister); + AE_CHECK_OK (AcpiWrite, Status); GenericRegister.Address = 0x12345678; GenericRegister.BitOffset = 0; GenericRegister.SpaceId = ACPI_ADR_SPACE_SYSTEM_MEMORY; Status = AcpiRead (&Value, &GenericRegister); + AE_CHECK_OK (AcpiRead, Status); + Status = AcpiWrite (Value, &GenericRegister); + AE_CHECK_OK (AcpiWrite, Status); } @@ -469,7 +483,7 @@ AeGenericRegisters ( * *****************************************************************************/ -void +static void AeHardwareInterfaces ( void) { @@ -478,14 +492,29 @@ AeHardwareInterfaces ( Status = AcpiWriteBitRegister (ACPI_BITREG_WAKE_STATUS, 1); + AE_CHECK_OK (AcpiWriteBitRegister, Status); + Status = AcpiWriteBitRegister (ACPI_BITREG_GLOBAL_LOCK_ENABLE, 1); + AE_CHECK_OK (AcpiWriteBitRegister, Status); + Status = AcpiWriteBitRegister (ACPI_BITREG_SLEEP_ENABLE, 1); + AE_CHECK_OK (AcpiWriteBitRegister, Status); + Status = AcpiWriteBitRegister (ACPI_BITREG_ARB_DISABLE, 1); + AE_CHECK_OK (AcpiWriteBitRegister, Status); + Status = AcpiReadBitRegister (ACPI_BITREG_WAKE_STATUS, &Value); + AE_CHECK_OK (AcpiReadBitRegister, Status); + Status = AcpiReadBitRegister (ACPI_BITREG_GLOBAL_LOCK_ENABLE, &Value); + AE_CHECK_OK (AcpiReadBitRegister, Status); + Status = AcpiReadBitRegister (ACPI_BITREG_SLEEP_ENABLE, &Value); + AE_CHECK_OK (AcpiReadBitRegister, Status); + Status = AcpiReadBitRegister (ACPI_BITREG_ARB_DISABLE, &Value); + AE_CHECK_OK (AcpiReadBitRegister, Status); } @@ -519,52 +548,108 @@ AeMiscellaneousTests ( AeTestPackageArgument (); - AcpiInstallInterface (""); - AcpiInstallInterface ("TestString"); - AcpiInstallInterface ("TestString"); - AcpiRemoveInterface ("Windows 2006"); - AcpiRemoveInterface ("TestString"); - AcpiRemoveInterface ("XXXXXX"); - AcpiInstallInterface ("AnotherTestString"); + Status = AcpiInstallInterface (""); + AE_CHECK_STATUS (AcpiInstallInterface, Status, AE_BAD_PARAMETER); - ExecuteOSI ("Windows 2001", 0xFFFFFFFF); - ExecuteOSI ("MichiganTerminalSystem", 0); + Status = AcpiInstallInterface ("TestString"); + AE_CHECK_OK (AcpiInstallInterface, Status); + + Status = AcpiInstallInterface ("TestString"); + AE_CHECK_STATUS (AcpiInstallInterface, Status, AE_ALREADY_EXISTS); + + Status = AcpiRemoveInterface ("Windows 2006"); + AE_CHECK_OK (AcpiRemoveInterface, Status); + + Status = AcpiRemoveInterface ("TestString"); + AE_CHECK_OK (AcpiRemoveInterface, Status); + + Status = AcpiRemoveInterface ("XXXXXX"); + AE_CHECK_STATUS (AcpiRemoveInterface, Status, AE_NOT_EXIST); + + Status = AcpiInstallInterface ("AnotherTestString"); + AE_CHECK_OK (AcpiInstallInterface, Status); + + + Status = ExecuteOSI ("Windows 2001", 0xFFFFFFFF); + AE_CHECK_OK (ExecuteOSI, Status); + + Status = ExecuteOSI ("MichiganTerminalSystem", 0); + AE_CHECK_OK (ExecuteOSI, Status); ReturnBuf.Length = 32; ReturnBuf.Pointer = Buffer; - AcpiGetName (AcpiGbl_RootNode, ACPI_FULL_PATHNAME, &ReturnBuf); - AcpiEnableEvent (ACPI_EVENT_GLOBAL, 0); + Status = AcpiGetName (AcpiGbl_RootNode, ACPI_FULL_PATHNAME, &ReturnBuf); + AE_CHECK_OK (AcpiGetName, Status); + + Status = AcpiEnableEvent (ACPI_EVENT_GLOBAL, 0); + AE_CHECK_OK (AcpiEnableEvent, Status); /* * GPEs: Handlers, enable/disable, etc. */ - AcpiInstallGpeHandler (NULL, 0, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); - AcpiEnableGpe (NULL, 0); - AcpiRemoveGpeHandler (NULL, 0, AeGpeHandler); + Status = AcpiInstallGpeHandler (NULL, 0, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); + AE_CHECK_OK (AcpiInstallGpeHandler, Status); - AcpiInstallGpeHandler (NULL, 0, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); - AcpiEnableGpe (NULL, 0); - AcpiSetGpe (NULL, 0, ACPI_GPE_DISABLE); - AcpiSetGpe (NULL, 0, ACPI_GPE_ENABLE); + Status = AcpiEnableGpe (NULL, 0); + AE_CHECK_OK (AcpiEnableGpe, Status); - AcpiInstallGpeHandler (NULL, 1, ACPI_GPE_EDGE_TRIGGERED, AeGpeHandler, NULL); - AcpiEnableGpe (NULL, 1); + Status = AcpiRemoveGpeHandler (NULL, 0, AeGpeHandler); + AE_CHECK_OK (AcpiRemoveGpeHandler, Status); - AcpiInstallGpeHandler (NULL, 2, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); - AcpiEnableGpe (NULL, 2); + Status = AcpiInstallGpeHandler (NULL, 0, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); + AE_CHECK_OK (AcpiInstallGpeHandler, Status); - AcpiInstallGpeHandler (NULL, 3, ACPI_GPE_EDGE_TRIGGERED, AeGpeHandler, NULL); - AcpiInstallGpeHandler (NULL, 4, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); - AcpiInstallGpeHandler (NULL, 5, ACPI_GPE_EDGE_TRIGGERED, AeGpeHandler, NULL); + Status = AcpiEnableGpe (NULL, 0); + AE_CHECK_OK (AcpiEnableGpe, Status); - AcpiInstallGpeHandler (NULL, 0x19, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); - AcpiEnableGpe (NULL, 0x19); + Status = AcpiSetGpe (NULL, 0, ACPI_GPE_DISABLE); + AE_CHECK_OK (AcpiSetGpe, Status); - AcpiInstallGpeHandler (NULL, 0x62, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); - AcpiEnableGpe (NULL, 0x62); - AcpiDisableGpe (NULL, 0x62); + Status = AcpiSetGpe (NULL, 0, ACPI_GPE_ENABLE); + AE_CHECK_OK (AcpiSetGpe, Status); + + + Status = AcpiInstallGpeHandler (NULL, 1, ACPI_GPE_EDGE_TRIGGERED, AeGpeHandler, NULL); + AE_CHECK_OK (AcpiInstallGpeHandler, Status); + + Status = AcpiEnableGpe (NULL, 1); + AE_CHECK_OK (AcpiEnableGpe, Status); + + + Status = AcpiInstallGpeHandler (NULL, 2, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); + AE_CHECK_OK (AcpiInstallGpeHandler, Status); + + Status = AcpiEnableGpe (NULL, 2); + AE_CHECK_OK (AcpiEnableGpe, Status); + + + Status = AcpiInstallGpeHandler (NULL, 3, ACPI_GPE_EDGE_TRIGGERED, AeGpeHandler, NULL); + AE_CHECK_OK (AcpiInstallGpeHandler, Status); + + Status = AcpiInstallGpeHandler (NULL, 4, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); + AE_CHECK_OK (AcpiInstallGpeHandler, Status); + + Status = AcpiInstallGpeHandler (NULL, 5, ACPI_GPE_EDGE_TRIGGERED, AeGpeHandler, NULL); + AE_CHECK_OK (AcpiInstallGpeHandler, Status); + + + Status = AcpiInstallGpeHandler (NULL, 0x19, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); + AE_CHECK_OK (AcpiInstallGpeHandler, Status); + + Status = AcpiEnableGpe (NULL, 0x19); + AE_CHECK_OK (AcpiEnableGpe, Status); + + + Status = AcpiInstallGpeHandler (NULL, 0x62, ACPI_GPE_LEVEL_TRIGGERED, AeGpeHandler, NULL); + AE_CHECK_OK (AcpiInstallGpeHandler, Status); + + Status = AcpiEnableGpe (NULL, 0x62); + AE_CHECK_OK (AcpiEnableGpe, Status); + + Status = AcpiDisableGpe (NULL, 0x62); + AE_CHECK_OK (AcpiDisableGpe, Status); AfInstallGpeBlock (); @@ -584,41 +669,23 @@ AeMiscellaneousTests ( /* Test global lock */ Status = AcpiAcquireGlobalLock (0xFFFF, &LockHandle1); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not get GlobalLock, %X\n", Status); - } + AE_CHECK_OK (AcpiAcquireGlobalLock, Status); Status = AcpiAcquireGlobalLock (0x5, &LockHandle2); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not get GlobalLock, %X\n", Status); - } + AE_CHECK_OK (AcpiAcquireGlobalLock, Status); Status = AcpiReleaseGlobalLock (LockHandle1); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not release GlobalLock, %X\n", Status); - } + AE_CHECK_OK (AcpiReleaseGlobalLock, Status); Status = AcpiReleaseGlobalLock (LockHandle2); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not release GlobalLock, %X\n", Status); - } + AE_CHECK_OK (AcpiReleaseGlobalLock, Status); /* Get Devices */ Status = AcpiGetDevices (NULL, AeGetDevices, NULL, NULL); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not AcpiGetDevices, %X\n", Status); - } + AE_CHECK_OK (AcpiGetDevices, Status); Status = AcpiGetStatistics (&Stats); - if (ACPI_FAILURE (Status)) - { - AcpiOsPrintf ("Could not AcpiGetStatistics, %X\n", Status); - } + AE_CHECK_OK (AcpiGetStatistics, Status); } diff --git a/tools/acpiexec/aehandlers.c b/tools/acpiexec/aehandlers.c index d4749c9afc2f..1f9b1f6ec125 100644 --- a/tools/acpiexec/aehandlers.c +++ b/tools/acpiexec/aehandlers.c @@ -120,19 +120,19 @@ /* Local prototypes */ -void +static void AeNotifyHandler ( ACPI_HANDLE Device, UINT32 Value, void *Context); -void +static void AeDeviceNotifyHandler ( ACPI_HANDLE Device, UINT32 Value, void *Context); -ACPI_STATUS +static ACPI_STATUS AeExceptionHandler ( ACPI_STATUS AmlStatus, ACPI_NAME Name, @@ -140,31 +140,31 @@ AeExceptionHandler ( UINT32 AmlOffset, void *Context); -ACPI_STATUS +static ACPI_STATUS AeTableHandler ( UINT32 Event, void *Table, void *Context); -ACPI_STATUS +static ACPI_STATUS AeRegionInit ( ACPI_HANDLE RegionHandle, UINT32 Function, void *HandlerContext, void **RegionContext); -void +static void AeAttachedDataHandler ( ACPI_HANDLE Object, void *Data); -UINT32 +static UINT32 AeInterfaceHandler ( ACPI_STRING InterfaceName, UINT32 Supported); -UINT32 SigintCount = 0; -AE_DEBUG_REGIONS AeRegions; +static UINT32 SigintCount = 0; +static AE_DEBUG_REGIONS AeRegions; /****************************************************************************** @@ -179,7 +179,7 @@ AE_DEBUG_REGIONS AeRegions; * *****************************************************************************/ -void __cdecl +void ACPI_SYSTEM_XFACE AeCtrlCHandler ( int Sig) { @@ -218,7 +218,7 @@ AeCtrlCHandler ( * *****************************************************************************/ -void +static void AeNotifyHandler ( ACPI_HANDLE Device, UINT32 Value, @@ -268,7 +268,6 @@ AeNotifyHandler ( (void) AcpiEvaluateObject (Device, "_NOT", NULL, NULL); break; } - } @@ -286,7 +285,7 @@ AeNotifyHandler ( * *****************************************************************************/ -void +static void AeDeviceNotifyHandler ( ACPI_HANDLE Device, UINT32 Value, @@ -317,7 +316,7 @@ AeDeviceNotifyHandler ( * *****************************************************************************/ -ACPI_STATUS +static ACPI_STATUS AeExceptionHandler ( ACPI_STATUS AmlStatus, ACPI_NAME Name, @@ -361,7 +360,7 @@ AeExceptionHandler ( Arg[1].String.Length = ACPI_STRLEN (Exception); Arg[2].Type = ACPI_TYPE_INTEGER; - Arg[2].Integer.Value = ACPI_TO_INTEGER (AcpiOsGetThreadId()); + Arg[2].Integer.Value = AcpiOsGetThreadId(); /* Setup return buffer */ @@ -416,14 +415,14 @@ AeExceptionHandler ( * *****************************************************************************/ -char *TableEvents[] = +static char *TableEvents[] = { "LOAD", "UNLOAD", "UNKNOWN" }; -ACPI_STATUS +static ACPI_STATUS AeTableHandler ( UINT32 Event, void *Table, @@ -469,7 +468,7 @@ AeGpeHandler ( * *****************************************************************************/ -void +static void AeAttachedDataHandler ( ACPI_HANDLE Object, void *Data) @@ -490,7 +489,7 @@ AeAttachedDataHandler ( * *****************************************************************************/ -UINT32 +static UINT32 AeInterfaceHandler ( ACPI_STRING InterfaceName, UINT32 Supported) @@ -518,7 +517,7 @@ AeInterfaceHandler ( * *****************************************************************************/ -ACPI_STATUS +static ACPI_STATUS AeRegionInit ( ACPI_HANDLE RegionHandle, UINT32 Function, @@ -530,7 +529,7 @@ AeRegionInit ( */ *RegionContext = RegionHandle; - return AE_OK; + return (AE_OK); } @@ -544,10 +543,13 @@ AeRegionInit ( * * DESCRIPTION: Install handlers for the AcpiExec utility. * + * Notes: Don't install handler for PCI_Config, we want to use the + * default handler to exercise that code. + * *****************************************************************************/ -ACPI_ADR_SPACE_TYPE SpaceId[] = {0, 1, 2, 3, 4, 5, 6, 7, 0x80}; -#define AEXEC_NUM_REGIONS 9 +static ACPI_ADR_SPACE_TYPE SpaceIdList[] = {0, 1, 3, 4, 5, 6, 7, 0x80}; +#define AEXEC_NUM_REGIONS 8 ACPI_STATUS AeInstallHandlers (void) @@ -620,8 +622,12 @@ AeInstallHandlers (void) Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler, NULL); + AE_CHECK_OK (AcpiInstallNotifyHandler, Status); + Status = AcpiRemoveNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler); + AE_CHECK_OK (AcpiRemoveNotifyHandler, Status); + Status = AcpiInstallNotifyHandler (Handle, ACPI_ALL_NOTIFY, AeNotifyHandler, NULL); if (ACPI_FAILURE (Status)) @@ -631,8 +637,13 @@ AeInstallHandlers (void) } Status = AcpiAttachData (Handle, AeAttachedDataHandler, Handle); + AE_CHECK_OK (AcpiAttachData, Status); + Status = AcpiDetachData (Handle, AeAttachedDataHandler); + AE_CHECK_OK (AcpiDetachData, Status); + Status = AcpiAttachData (Handle, AeAttachedDataHandler, Handle); + AE_CHECK_OK (AcpiAttachData, Status); } else { @@ -643,19 +654,21 @@ AeInstallHandlers (void) for (i = 0; i < AEXEC_NUM_REGIONS; i++) { - Status = AcpiRemoveAddressSpaceHandler (AcpiGbl_RootNode, - SpaceId[i], AeRegionHandler); + /* Remove any existing handler */ + + (void) AcpiRemoveAddressSpaceHandler (AcpiGbl_RootNode, + SpaceIdList[i], AeRegionHandler); /* Install handler at the root object. * TBD: all default handlers should be installed here! */ Status = AcpiInstallAddressSpaceHandler (AcpiGbl_RootNode, - SpaceId[i], AeRegionHandler, AeRegionInit, NULL); + SpaceIdList[i], AeRegionHandler, AeRegionInit, NULL); if (ACPI_FAILURE (Status)) { ACPI_EXCEPTION ((AE_INFO, Status, "Could not install an OpRegion handler for %s space(%u)", - AcpiUtGetRegionName((UINT8) SpaceId[i]), SpaceId[i])); + AcpiUtGetRegionName((UINT8) SpaceIdList[i]), SpaceIdList[i])); return (Status); } } @@ -667,7 +680,7 @@ AeInstallHandlers (void) AeRegions.NumberOfRegions = 0; AeRegions.RegionList = NULL; - return Status; + return (Status); } @@ -714,7 +727,7 @@ AeRegionHandler ( */ if (RegionObject->Region.Type != ACPI_TYPE_REGION) { - return AE_OK; + return (AE_OK); } /* @@ -756,10 +769,12 @@ AeRegionHandler ( { case ACPI_READ: Status = AcpiHwReadPort (Address, (UINT32 *) Value, BitWidth); + AE_CHECK_OK (AcpiHwReadPort, Status); break; case ACPI_WRITE: Status = AcpiHwWritePort (Address, (UINT32) *Value, BitWidth); + AE_CHECK_OK (AcpiHwWritePort, Status); break; default: @@ -903,14 +918,14 @@ AeRegionHandler ( RegionElement = AcpiOsAllocate (sizeof (AE_REGION)); if (!RegionElement) { - return AE_NO_MEMORY; + return (AE_NO_MEMORY); } RegionElement->Buffer = AcpiOsAllocate (Length); if (!RegionElement->Buffer) { AcpiOsFree (RegionElement); - return AE_NO_MEMORY; + return (AE_NO_MEMORY); } /* Initialize the region with the default fill value */ @@ -963,7 +978,7 @@ AeRegionHandler ( ByteWidth, (UINT32)(RegionElement->Address), RegionElement->Length)); - return AE_AML_REGION_LIMIT; + return (AE_AML_REGION_LIMIT); } /* @@ -994,9 +1009,10 @@ AeRegionHandler ( break; default: - return AE_BAD_PARAMETER; + return (AE_BAD_PARAMETER); } - return AE_OK; + + return (AE_OK); } diff --git a/tools/acpiexec/aemain.c b/tools/acpiexec/aemain.c index 050ba281025b..5773a6917e03 100644 --- a/tools/acpiexec/aemain.c +++ b/tools/acpiexec/aemain.c @@ -122,17 +122,18 @@ #define _COMPONENT PARSER ACPI_MODULE_NAME ("aemain") -UINT8 AcpiGbl_BatchMode = 0; -UINT8 AcpiGbl_RegionFillValue = 0; -BOOLEAN AcpiGbl_IgnoreErrors = FALSE; -BOOLEAN AcpiGbl_DbOpt_NoRegionSupport = FALSE; -BOOLEAN AcpiGbl_DebugTimeout = FALSE; -char BatchBuffer[128]; -AE_TABLE_DESC *AeTableListHead = NULL; + +UINT8 AcpiGbl_RegionFillValue = 0; +BOOLEAN AcpiGbl_IgnoreErrors = FALSE; +BOOLEAN AcpiGbl_DbOpt_NoRegionSupport = FALSE; +BOOLEAN AcpiGbl_DebugTimeout = FALSE; + +static UINT8 AcpiGbl_BatchMode = 0; +static char BatchBuffer[128]; +static AE_TABLE_DESC *AeTableListHead = NULL; #define ASL_MAX_FILES 256 -char *FileList[ASL_MAX_FILES]; -int FileCount; +static char *FileList[ASL_MAX_FILES]; #define AE_SUPPORTED_OPTIONS "?b:d:e:f:gm^ovx:" @@ -203,6 +204,7 @@ AcpiDbRunBatchMode ( char *Cmd = Ptr; UINT8 Run = 0; + AcpiGbl_MethodExecuting = FALSE; AcpiGbl_StepToNextCall = FALSE; @@ -360,6 +362,7 @@ AsDoWildcard ( #ifdef WIN32 void *DirInfo; char *Filename; + int FileCount; FileCount = 0; @@ -441,7 +444,7 @@ main ( ACPI_TABLE_HEADER *Table = NULL; UINT32 TableCount; AE_TABLE_DESC *TableDesc; - char **FileList; + char **WildcardList; char *Filename; char *Directory; char *FullPathname; @@ -459,7 +462,7 @@ main ( if (argc < 2) { usage (); - return 0; + return (0); } signal (SIGINT, AeCtrlCHandler); @@ -471,7 +474,8 @@ main ( /* Init ACPI and start debugger thread */ - AcpiInitializeSubsystem (); + Status = AcpiInitializeSubsystem (); + AE_CHECK_OK (AcpiInitializeSubsystem, Status); /* Get the command line options */ @@ -482,7 +486,7 @@ main ( { printf ("**** The length of command line (%u) exceeded maximum (127)\n", (UINT32) strlen (AcpiGbl_Optarg)); - return -1; + return (-1); } AcpiGbl_BatchMode = 1; strcpy (BatchBuffer, AcpiGbl_Optarg); @@ -586,7 +590,7 @@ main ( case 'h': default: usage(); - return -1; + return (-1); } @@ -617,21 +621,21 @@ main ( /* Expand wildcards (Windows only) */ - FileList = AsDoWildcard (Directory, Filename); - if (!FileList) + WildcardList = AsDoWildcard (Directory, Filename); + if (!WildcardList) { - return -1; + return (-1); } - while (*FileList) + while (*WildcardList) { FullPathname = AcpiOsAllocate ( - strlen (Directory) + strlen (*FileList) + 1); + strlen (Directory) + strlen (*WildcardList) + 1); /* Construct a full path to the file */ strcpy (FullPathname, Directory); - strcat (FullPathname, *FileList); + strcat (FullPathname, *WildcardList); /* Get one table */ @@ -644,9 +648,9 @@ main ( } AcpiOsFree (FullPathname); - AcpiOsFree (*FileList); - *FileList = NULL; - FileList++; + AcpiOsFree (*WildcardList); + *WildcardList = NULL; + WildcardList++; /* * Ignore an FACS or RSDT, we can't use them. @@ -676,7 +680,7 @@ main ( Status = AeBuildLocalTables (TableCount, AeTableListHead); if (ACPI_FAILURE (Status)) { - return -1; + return (-1); } Status = AeInstallTables (); @@ -730,6 +734,6 @@ main ( AcpiDbUserCommands (ACPI_DEBUGGER_COMMAND_PROMPT, NULL); } - return 0; + return (0); } diff --git a/tools/acpiexec/aetables.c b/tools/acpiexec/aetables.c index e1f61c6e61a5..a2ccdab02ea3 100644 --- a/tools/acpiexec/aetables.c +++ b/tools/acpiexec/aetables.c @@ -135,7 +135,7 @@ AeLocalGetRootPointer ( /* Default DSDT. This will be replaced with the input DSDT */ -unsigned char DsdtCode[] = +static unsigned char DsdtCode[] = { 0x44,0x53,0x44,0x54,0x24,0x00,0x00,0x00, /* 00000000 "DSDT$..." */ 0x02,0x6F,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 ".oIntel." */ @@ -144,7 +144,7 @@ unsigned char DsdtCode[] = 0x04,0x12,0x08,0x20, }; -unsigned char LocalDsdtCode[] = +static unsigned char LocalDsdtCode[] = { 0x44,0x53,0x44,0x54,0x24,0x00,0x00,0x00, /* 00000000 "DSDT$..." */ 0x02,0x2C,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 ".,Intel." */ @@ -155,7 +155,7 @@ unsigned char LocalDsdtCode[] = /* Several example SSDTs */ -unsigned char Ssdt1Code[] = /* Has method _T98 */ +static unsigned char Ssdt1Code[] = /* Has method _T98 */ { 0x53,0x53,0x44,0x54,0x30,0x00,0x00,0x00, /* 00000000 "SSDT0..." */ 0x01,0xB8,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 "..Intel." */ @@ -165,7 +165,7 @@ unsigned char Ssdt1Code[] = /* Has method _T98 */ 0x39,0x38,0x00,0x70,0x0A,0x04,0x60,0xA4, /* 00000028 "98.p..`." */ }; -unsigned char Ssdt2Code[] = /* Has method _T99 */ +static unsigned char Ssdt2Code[] = /* Has method _T99 */ { 0x53,0x53,0x44,0x54,0x30,0x00,0x00,0x00, /* 00000000 "SSDT0..." */ 0x01,0xB7,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 "..Intel." */ @@ -175,7 +175,7 @@ unsigned char Ssdt2Code[] = /* Has method _T99 */ 0x39,0x39,0x00,0x70,0x0A,0x04,0x60,0xA4, /* 00000028 "99.p..`." */ }; -unsigned char Ssdt3Code[] = /* Has method _T97 */ +unsigned char Ssdt3Code[] = /* Has method _T97 */ { 0x54,0x53,0x44,0x54,0x30,0x00,0x00,0x00, /* 00000000 "TSDT0..." */ 0x01,0xB8,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 "..Intel." */ @@ -187,7 +187,7 @@ unsigned char Ssdt3Code[] = /* Has method _T97 */ /* Example OEM table */ -unsigned char Oem1Code[] = +static unsigned char Oem1Code[] = { 0x4F,0x45,0x4D,0x31,0x38,0x00,0x00,0x00, /* 00000000 "OEM18..." */ 0x01,0x4B,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 ".KIntel." */ @@ -200,7 +200,7 @@ unsigned char Oem1Code[] = /* ASL source for this table is at the end of this file */ -unsigned char OemxCode[] = +static unsigned char OemxCode[] = { 0x4F,0x45,0x4D,0x58,0xB0,0x00,0x00,0x00, /* 00000000 "OEMX...." */ 0x02,0x54,0x4D,0x79,0x4F,0x45,0x4D,0x00, /* 00000008 ".TMyOEM." */ @@ -241,7 +241,7 @@ unsigned char OemxCode[] = * * Compiled byte code below. */ -unsigned char MethodCode[] = +static unsigned char MethodCode[] = { 0x44,0x53,0x44,0x54,0x53,0x00,0x00,0x00, /* 00000000 "DSDTS..." */ 0x02,0xF9,0x49,0x6E,0x74,0x65,0x6C,0x00, /* 00000008 "..Intel." */ @@ -262,19 +262,19 @@ unsigned char MethodCode[] = * even though the underlying OSD HW access functions don't do * anything. */ -ACPI_TABLE_HEADER *DsdtToInstallOverride; -ACPI_TABLE_RSDP LocalRSDP; -ACPI_TABLE_FADT LocalFADT; -ACPI_TABLE_FACS LocalFACS; -ACPI_TABLE_HEADER LocalTEST; -ACPI_TABLE_HEADER LocalBADTABLE; -ACPI_TABLE_RSDT *LocalRSDT; +static ACPI_TABLE_HEADER *DsdtToInstallOverride; +static ACPI_TABLE_RSDP LocalRSDP; +static ACPI_TABLE_FADT LocalFADT; +static ACPI_TABLE_FACS LocalFACS; +static ACPI_TABLE_HEADER LocalTEST; +static ACPI_TABLE_HEADER LocalBADTABLE; +static ACPI_TABLE_RSDT *LocalRSDT; -#define BASE_RSDT_TABLES 7 -#define BASE_RSDT_SIZE (sizeof (ACPI_TABLE_RSDT) + ((BASE_RSDT_TABLES -1) * sizeof (UINT32))) +#define BASE_RSDT_TABLES 7 +#define BASE_RSDT_SIZE (sizeof (ACPI_TABLE_RSDT) + ((BASE_RSDT_TABLES -1) * sizeof (UINT32))) -#define ACPI_MAX_INIT_TABLES (32) -static ACPI_TABLE_DESC Tables[ACPI_MAX_INIT_TABLES]; +#define ACPI_MAX_INIT_TABLES (32) +static ACPI_TABLE_DESC Tables[ACPI_MAX_INIT_TABLES]; /****************************************************************************** @@ -357,7 +357,7 @@ AeBuildLocalTables ( LocalRSDT = AcpiOsAllocate (RsdtSize); if (!LocalRSDT) { - return AE_NO_MEMORY; + return (AE_NO_MEMORY); } ACPI_MEMSET (LocalRSDT, 0, RsdtSize); @@ -398,7 +398,7 @@ AeBuildLocalTables ( if (DsdtAddress) { printf ("Already found a DSDT, only one allowed\n"); - return AE_ALREADY_EXISTS; + return (AE_ALREADY_EXISTS); } /* The incoming user table is a DSDT */ @@ -488,21 +488,25 @@ AeBuildLocalTables ( /* Miscellaneous FADT fields */ LocalFADT.Gpe0BlockLength = 16; + LocalFADT.Gpe0Block = 0x00001234; + LocalFADT.Gpe1BlockLength = 6; + LocalFADT.Gpe1Block = 0x00005678; LocalFADT.Gpe1Base = 96; LocalFADT.Pm1EventLength = 4; - LocalFADT.Pm1ControlLength = 2; - LocalFADT.PmTimerLength = 4; - - LocalFADT.Gpe0Block = 0x00001234; - LocalFADT.Gpe1Block = 0x00005678; - LocalFADT.Pm1aEventBlock = 0x00001aaa; LocalFADT.Pm1bEventBlock = 0x00001bbb; - LocalFADT.PmTimerBlock = 0xA0; + + LocalFADT.Pm1ControlLength = 2; LocalFADT.Pm1aControlBlock = 0xB0; + LocalFADT.PmTimerLength = 4; + LocalFADT.PmTimerBlock = 0xA0; + + LocalFADT.Pm2ControlBlock = 0xC0; + LocalFADT.Pm2ControlLength = 1; + /* Setup one example X-64 field */ LocalFADT.XPm1bEventBlock.SpaceId = ACPI_ADR_SPACE_SYSTEM_IO; @@ -566,9 +570,15 @@ AeInstallTables ( { ACPI_STATUS Status; + Status = AcpiInitializeTables (Tables, ACPI_MAX_INIT_TABLES, TRUE); + AE_CHECK_OK (AcpiInitializeTables, Status); + Status = AcpiReallocateRootTable (); + AE_CHECK_OK (AcpiReallocateRootTable, Status); + Status = AcpiLoadTables (); + AE_CHECK_OK (AcpiLoadTables, Status); /* * Test run-time control method installation. Do it twice to test code diff --git a/tools/acpisrc/asfile.c b/tools/acpisrc/asfile.c index dd249410772f..c82a98b30cc5 100644 --- a/tools/acpisrc/asfile.c +++ b/tools/acpisrc/asfile.c @@ -132,7 +132,7 @@ AsDetectLoneLineFeeds ( char *Filename, char *Buffer); -static inline int +static ACPI_INLINE int AsMaxInt (int a, int b) { return (a > b ? a : b); @@ -409,7 +409,8 @@ AsConvertFile ( Gbl_StructDefs = strstr (FileBuffer, "/* acpisrc:StructDefs"); Gbl_Files++; - VERBOSE_PRINT (("Processing %u bytes\n", strlen (FileBuffer))); + VERBOSE_PRINT (("Processing %u bytes\n", + (unsigned int) strlen (FileBuffer))); if (ConversionTable->LowerCaseTable) { diff --git a/tools/acpisrc/astable.c b/tools/acpisrc/astable.c index 058d5a2b545b..c850891095a0 100644 --- a/tools/acpisrc/astable.c +++ b/tools/acpisrc/astable.c @@ -378,6 +378,7 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"ACPI_PARSE_STATE", SRC_TYPE_STRUCT}, {"ACPI_PARSE_UPWARDS", SRC_TYPE_SIMPLE}, {"ACPI_PARSE_VALUE", SRC_TYPE_UNION}, + {"ACPI_PCI_DEVICE", SRC_TYPE_STRUCT}, {"ACPI_PCI_ID", SRC_TYPE_STRUCT}, {"ACPI_PCI_ROUTING_TABLE", SRC_TYPE_STRUCT}, {"ACPI_PHYSICAL_ADDRESS", SRC_TYPE_SIMPLE}, diff --git a/tools/acpixtract/acpixtract.c b/tools/acpixtract/acpixtract.c index e3d6b7529edc..543d0bd8ad24 100644 --- a/tools/acpixtract/acpixtract.c +++ b/tools/acpixtract/acpixtract.c @@ -130,46 +130,46 @@ /* Local prototypes */ -void +static void CheckAscii ( char *Name, int Count); -void +static void NormalizeSignature ( char *Signature); -unsigned int +static unsigned int GetNextInstance ( char *InputPathname, char *Signature); -int +static int ExtractTables ( char *InputPathname, char *Signature, unsigned int MinimumInstances); -size_t +static size_t GetTableHeader ( FILE *InputFile, unsigned char *OutputData); -unsigned int +static unsigned int CountTableInstances ( char *InputPathname, char *Signature); -int +static int ListTables ( char *InputPathname); -size_t +static size_t ConvertLine ( char *InputLine, unsigned char *OutputData); -void +static void DisplayUsage ( void); @@ -196,9 +196,9 @@ struct TableInfo struct TableInfo *Next; }; -struct TableInfo *ListHead = NULL; -char Filename[16]; -unsigned char Data[16]; +static struct TableInfo *ListHead = NULL; +static char Filename[16]; +static unsigned char Data[16]; /****************************************************************************** @@ -209,7 +209,7 @@ unsigned char Data[16]; * ******************************************************************************/ -void +static void DisplayUsage ( void) { @@ -240,7 +240,7 @@ DisplayUsage ( * ******************************************************************************/ -void +static void CheckAscii ( char *Name, int Count) @@ -270,7 +270,7 @@ CheckAscii ( * ******************************************************************************/ -void +static void NormalizeSignature ( char *Signature) { @@ -295,7 +295,7 @@ NormalizeSignature ( * ******************************************************************************/ -size_t +static size_t ConvertLine ( char *InputLine, unsigned char *OutputData) @@ -353,7 +353,7 @@ ConvertLine ( * ******************************************************************************/ -size_t +static size_t GetTableHeader ( FILE *InputFile, unsigned char *OutputData) @@ -401,7 +401,7 @@ GetTableHeader ( * ******************************************************************************/ -unsigned int +static unsigned int CountTableInstances ( char *InputPathname, char *Signature) @@ -459,7 +459,7 @@ CountTableInstances ( * ******************************************************************************/ -unsigned int +static unsigned int GetNextInstance ( char *InputPathname, char *Signature) @@ -520,7 +520,7 @@ GetNextInstance ( * ******************************************************************************/ -int +static int ExtractTables ( char *InputPathname, char *Signature, @@ -639,8 +639,8 @@ ExtractTables ( OutputFile = NULL; State = FIND_HEADER; - printf ("Acpi table [%4.4s] - % 7d bytes written to %s\n", - ThisSignature, TotalBytesWritten, Filename); + printf ("Acpi table [%4.4s] - %u bytes written to %s\n", + ThisSignature, (unsigned int) TotalBytesWritten, Filename); continue; } @@ -684,8 +684,8 @@ ExtractTables ( { /* Received an EOF while extracting data */ - printf ("Acpi table [%4.4s] - % 7d bytes written to %s\n", - ThisSignature, TotalBytesWritten, Filename); + printf ("Acpi table [%4.4s] - %u bytes written to %s\n", + ThisSignature, (unsigned int) TotalBytesWritten, Filename); } } @@ -707,7 +707,7 @@ ExtractTables ( * ******************************************************************************/ -int +static int ListTables ( char *InputPathname) { diff --git a/utilities/utdebug.c b/utilities/utdebug.c index 0a91716f24cc..ad158465e00a 100644 --- a/utilities/utdebug.c +++ b/utilities/utdebug.c @@ -279,9 +279,8 @@ AcpiDebugPrint ( if (ACPI_LV_THREADS & AcpiDbgLevel) { AcpiOsPrintf ( - "\n**** Context Switch from TID %p to TID %p ****\n\n", - ACPI_CAST_PTR (void, AcpiGbl_PrevThreadId), - ACPI_CAST_PTR (void, ThreadId)); + "\n**** Context Switch from TID %u to TID %u ****\n\n", + (UINT32) AcpiGbl_PrevThreadId, (UINT32) ThreadId); } AcpiGbl_PrevThreadId = ThreadId; @@ -295,7 +294,7 @@ AcpiDebugPrint ( if (ACPI_LV_THREADS & AcpiDbgLevel) { - AcpiOsPrintf ("[%p] ", ACPI_CAST_PTR (void, ThreadId)); + AcpiOsPrintf ("[%u] ", (UINT32) ThreadId); } AcpiOsPrintf ("[%02ld] %-22.22s: ", diff --git a/utilities/utmath.c b/utilities/utmath.c index 54d492f234f3..90f3cd58cc1f 100644 --- a/utilities/utmath.c +++ b/utilities/utmath.c @@ -124,12 +124,32 @@ ACPI_MODULE_NAME ("utmath") /* - * Support for double-precision integer divide. This code is included here - * in order to support kernel environments where the double-precision math - * library is not available. + * Optional support for 64-bit double-precision integer divide. This code + * is configurable and is implemented in order to support 32-bit kernel + * environments where a 64-bit double-precision math library is not available. + * + * Support for a more normal 64-bit divide/modulo (with check for a divide- + * by-zero) appears after this optional section of code. */ - #ifndef ACPI_USE_NATIVE_DIVIDE + +/* Structures used only for 64-bit divide */ + +typedef struct uint64_struct +{ + UINT32 Lo; + UINT32 Hi; + +} UINT64_STRUCT; + +typedef union uint64_overlay +{ + UINT64 Full; + UINT64_STRUCT Part; + +} UINT64_OVERLAY; + + /******************************************************************************* * * FUNCTION: AcpiUtShortDivide diff --git a/utilities/utmisc.c b/utilities/utmisc.c index f3e2d180fcd0..1867a31fa9ac 100644 --- a/utilities/utmisc.c +++ b/utilities/utmisc.c @@ -124,12 +124,6 @@ #define _COMPONENT ACPI_UTILITIES ACPI_MODULE_NAME ("utmisc") -/* - * Common suffix for messages - */ -#define ACPI_COMMON_MSG_SUFFIX \ - AcpiOsPrintf (" (%8.8X/%s-%u)\n", ACPI_CA_VERSION, ModuleName, LineNumber) - /******************************************************************************* * @@ -1337,191 +1331,3 @@ AcpiUtWalkPackageTree ( } -/******************************************************************************* - * - * FUNCTION: AcpiError, AcpiException, AcpiWarning, AcpiInfo - * - * PARAMETERS: ModuleName - Caller's module name (for error output) - * LineNumber - Caller's line number (for error output) - * Format - Printf format string + additional args - * - * RETURN: None - * - * DESCRIPTION: Print message with module/line/version info - * - ******************************************************************************/ - -void ACPI_INTERNAL_VAR_XFACE -AcpiError ( - const char *ModuleName, - UINT32 LineNumber, - const char *Format, - ...) -{ - va_list args; - - - AcpiOsPrintf ("ACPI Error: "); - - va_start (args, Format); - AcpiOsVprintf (Format, args); - ACPI_COMMON_MSG_SUFFIX; - va_end (args); -} - -void ACPI_INTERNAL_VAR_XFACE -AcpiException ( - const char *ModuleName, - UINT32 LineNumber, - ACPI_STATUS Status, - const char *Format, - ...) -{ - va_list args; - - - AcpiOsPrintf ("ACPI Exception: %s, ", AcpiFormatException (Status)); - - va_start (args, Format); - AcpiOsVprintf (Format, args); - ACPI_COMMON_MSG_SUFFIX; - va_end (args); -} - -void ACPI_INTERNAL_VAR_XFACE -AcpiWarning ( - const char *ModuleName, - UINT32 LineNumber, - const char *Format, - ...) -{ - va_list args; - - - AcpiOsPrintf ("ACPI Warning: "); - - va_start (args, Format); - AcpiOsVprintf (Format, args); - ACPI_COMMON_MSG_SUFFIX; - va_end (args); -} - -void ACPI_INTERNAL_VAR_XFACE -AcpiInfo ( - const char *ModuleName, - UINT32 LineNumber, - const char *Format, - ...) -{ - va_list args; - - - AcpiOsPrintf ("ACPI: "); - - va_start (args, Format); - AcpiOsVprintf (Format, args); - AcpiOsPrintf ("\n"); - va_end (args); -} - -ACPI_EXPORT_SYMBOL (AcpiError) -ACPI_EXPORT_SYMBOL (AcpiException) -ACPI_EXPORT_SYMBOL (AcpiWarning) -ACPI_EXPORT_SYMBOL (AcpiInfo) - - -/******************************************************************************* - * - * FUNCTION: AcpiUtPredefinedWarning - * - * PARAMETERS: ModuleName - Caller's module name (for error output) - * LineNumber - Caller's line number (for error output) - * Pathname - Full pathname to the node - * NodeFlags - From Namespace node for the method/object - * Format - Printf format string + additional args - * - * RETURN: None - * - * DESCRIPTION: Warnings for the predefined validation module. Messages are - * only emitted the first time a problem with a particular - * method/object is detected. This prevents a flood of error - * messages for methods that are repeatedly evaluated. - * - ******************************************************************************/ - -void ACPI_INTERNAL_VAR_XFACE -AcpiUtPredefinedWarning ( - const char *ModuleName, - UINT32 LineNumber, - char *Pathname, - UINT8 NodeFlags, - const char *Format, - ...) -{ - va_list args; - - - /* - * Warning messages for this method/object will be disabled after the - * first time a validation fails or an object is successfully repaired. - */ - if (NodeFlags & ANOBJ_EVALUATED) - { - return; - } - - AcpiOsPrintf ("ACPI Warning for %s: ", Pathname); - - va_start (args, Format); - AcpiOsVprintf (Format, args); - ACPI_COMMON_MSG_SUFFIX; - va_end (args); -} - -/******************************************************************************* - * - * FUNCTION: AcpiUtPredefinedInfo - * - * PARAMETERS: ModuleName - Caller's module name (for error output) - * LineNumber - Caller's line number (for error output) - * Pathname - Full pathname to the node - * NodeFlags - From Namespace node for the method/object - * Format - Printf format string + additional args - * - * RETURN: None - * - * DESCRIPTION: Info messages for the predefined validation module. Messages - * are only emitted the first time a problem with a particular - * method/object is detected. This prevents a flood of - * messages for methods that are repeatedly evaluated. - * - ******************************************************************************/ - -void ACPI_INTERNAL_VAR_XFACE -AcpiUtPredefinedInfo ( - const char *ModuleName, - UINT32 LineNumber, - char *Pathname, - UINT8 NodeFlags, - const char *Format, - ...) -{ - va_list args; - - - /* - * Warning messages for this method/object will be disabled after the - * first time a validation fails or an object is successfully repaired. - */ - if (NodeFlags & ANOBJ_EVALUATED) - { - return; - } - - AcpiOsPrintf ("ACPI Info for %s: ", Pathname); - - va_start (args, Format); - AcpiOsVprintf (Format, args); - ACPI_COMMON_MSG_SUFFIX; - va_end (args); -} diff --git a/utilities/utmutex.c b/utilities/utmutex.c index f4d717516a3b..92a95e15af7f 100644 --- a/utilities/utmutex.c +++ b/utilities/utmutex.c @@ -348,16 +348,16 @@ AcpiUtAcquireMutex ( if (i == MutexId) { ACPI_ERROR ((AE_INFO, - "Mutex [%s] already acquired by this thread [%p]", + "Mutex [%s] already acquired by this thread [%u]", AcpiUtGetMutexName (MutexId), - ACPI_CAST_PTR (void, ThisThreadId))); + (UINT32) ThisThreadId)); return (AE_ALREADY_ACQUIRED); } ACPI_ERROR ((AE_INFO, - "Invalid acquire order: Thread %p owns [%s], wants [%s]", - ACPI_CAST_PTR (void, ThisThreadId), AcpiUtGetMutexName (i), + "Invalid acquire order: Thread %u owns [%s], wants [%s]", + (UINT32) ThisThreadId, AcpiUtGetMutexName (i), AcpiUtGetMutexName (MutexId))); return (AE_ACQUIRE_DEADLOCK); @@ -367,15 +367,15 @@ AcpiUtAcquireMutex ( #endif ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, - "Thread %p attempting to acquire Mutex [%s]\n", - ACPI_CAST_PTR (void, ThisThreadId), AcpiUtGetMutexName (MutexId))); + "Thread %u attempting to acquire Mutex [%s]\n", + (UINT32) ThisThreadId, AcpiUtGetMutexName (MutexId))); Status = AcpiOsAcquireMutex (AcpiGbl_MutexInfo[MutexId].Mutex, ACPI_WAIT_FOREVER); if (ACPI_SUCCESS (Status)) { - ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Thread %p acquired Mutex [%s]\n", - ACPI_CAST_PTR (void, ThisThreadId), AcpiUtGetMutexName (MutexId))); + ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Thread %u acquired Mutex [%s]\n", + (UINT32) ThisThreadId, AcpiUtGetMutexName (MutexId))); AcpiGbl_MutexInfo[MutexId].UseCount++; AcpiGbl_MutexInfo[MutexId].ThreadId = ThisThreadId; @@ -383,8 +383,8 @@ AcpiUtAcquireMutex ( else { ACPI_EXCEPTION ((AE_INFO, Status, - "Thread %p could not acquire Mutex [0x%X]", - ACPI_CAST_PTR (void, ThisThreadId), MutexId)); + "Thread %u could not acquire Mutex [0x%X]", + (UINT32) ThisThreadId, MutexId)); } return (Status); @@ -414,8 +414,8 @@ AcpiUtReleaseMutex ( ThisThreadId = AcpiOsGetThreadId (); - ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Thread %p releasing Mutex [%s]\n", - ACPI_CAST_PTR (void, ThisThreadId), AcpiUtGetMutexName (MutexId))); + ACPI_DEBUG_PRINT ((ACPI_DB_MUTEX, "Thread %u releasing Mutex [%s]\n", + (UINT32) ThisThreadId, AcpiUtGetMutexName (MutexId))); if (MutexId > ACPI_MAX_MUTEX) { diff --git a/utilities/utxferror.c b/utilities/utxferror.c new file mode 100644 index 000000000000..b397a40c2a71 --- /dev/null +++ b/utilities/utxferror.c @@ -0,0 +1,550 @@ +/******************************************************************************* + * + * Module Name: utxferror - Various error/warning output functions + * + ******************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp. + * All rights reserved. + * + * 2. License + * + * 2.1. This is your license from Intel Corp. under its intellectual property + * rights. You may have additional license terms from the party that provided + * you this software, covering your right to use that party's intellectual + * property rights. + * + * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a + * copy of the source code appearing in this file ("Covered Code") an + * irrevocable, perpetual, worldwide license under Intel's copyrights in the + * base code distributed originally by Intel ("Original Intel Code") to copy, + * make derivatives, distribute, use and display any portion of the Covered + * Code in any form, with the right to sublicense such rights; and + * + * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent + * license (with the right to sublicense), under only those claims of Intel + * patents that are infringed by the Original Intel Code, to make, use, sell, + * offer to sell, and import the Covered Code and derivative works thereof + * solely to the minimum extent necessary to exercise the above copyright + * license, and in no event shall the patent license extend to any additions + * to or modifications of the Original Intel Code. No other license or right + * is granted directly or by implication, estoppel or otherwise; + * + * The above copyright and patent license is granted only if the following + * conditions are met: + * + * 3. Conditions + * + * 3.1. Redistribution of Source with Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification with rights to further distribute source must include + * the above Copyright Notice, the above License, this list of Conditions, + * and the following Disclaimer and Export Compliance provision. In addition, + * Licensee must cause all Covered Code to which Licensee contributes to + * contain a file documenting the changes Licensee made to create that Covered + * Code and the date of any change. Licensee must include in that file the + * documentation of any changes made by any predecessor Licensee. Licensee + * must include a prominent statement that the modification is derived, + * directly or indirectly, from Original Intel Code. + * + * 3.2. Redistribution of Source with no Rights to Further Distribute Source. + * Redistribution of source code of any substantial portion of the Covered + * Code or modification without rights to further distribute source must + * include the following Disclaimer and Export Compliance provision in the + * documentation and/or other materials provided with distribution. In + * addition, Licensee may not authorize further sublicense of source of any + * portion of the Covered Code, and must include terms to the effect that the + * license from Licensee to its licensee is limited to the intellectual + * property embodied in the software Licensee provides to its licensee, and + * not to intellectual property embodied in modifications its licensee may + * make. + * + * 3.3. Redistribution of Executable. Redistribution in executable form of any + * substantial portion of the Covered Code or modification must reproduce the + * above Copyright Notice, and the following Disclaimer and Export Compliance + * provision in the documentation and/or other materials provided with the + * distribution. + * + * 3.4. Intel retains all right, title, and interest in and to the Original + * Intel Code. + * + * 3.5. Neither the name Intel nor any other trademark owned or controlled by + * Intel shall be used in advertising or otherwise to promote the sale, use or + * other dealings in products derived from or relating to the Covered Code + * without prior written authorization from Intel. + * + * 4. Disclaimer and Export Compliance + * + * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED + * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE + * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, + * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY + * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY + * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A + * PARTICULAR PURPOSE. + * + * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES + * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR + * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, + * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY + * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL + * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS + * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY + * LIMITED REMEDY. + * + * 4.3. Licensee shall not export, either directly or indirectly, any of this + * software or system incorporating such software without first obtaining any + * required license or other approval from the U. S. Department of Commerce or + * any other agency or department of the United States Government. In the + * event Licensee exports any such software from the United States or + * re-exports any such software from a foreign destination, Licensee shall + * ensure that the distribution and export/re-export of the software is in + * compliance with all laws, regulations, orders, or other restrictions of the + * U.S. Export Administration Regulations. Licensee agrees that neither it nor + * any of its subsidiaries will export/re-export any technical data, process, + * software, or service, directly or indirectly, to any country for which the + * United States government or any agency thereof requires an export license, + * other governmental approval, or letter of assurance, without first obtaining + * such license, approval or letter. + * + *****************************************************************************/ + +#define __UTXFERROR_C__ + +#include "acpi.h" +#include "accommon.h" +#include "acnamesp.h" + + +#define _COMPONENT ACPI_UTILITIES + ACPI_MODULE_NAME ("utxferror") + +/* + * This module is used for the in-kernel ACPICA as well as the ACPICA + * tools/applications. + * + * For the iASL compiler case, the output is redirected to stderr so that + * any of the various ACPI errors and warnings do not appear in the output + * files, for either the compiler or disassembler portions of the tool. + */ +#ifdef ACPI_ASL_COMPILER +#include + +extern FILE *AcpiGbl_OutputFile; + +#define ACPI_MSG_REDIRECT_BEGIN \ + FILE *OutputFile = AcpiGbl_OutputFile; \ + AcpiOsRedirectOutput (stderr); + +#define ACPI_MSG_REDIRECT_END \ + AcpiOsRedirectOutput (OutputFile); + +#else +/* + * non-iASL case - no redirection, nothing to do + */ +#define ACPI_MSG_REDIRECT_BEGIN +#define ACPI_MSG_REDIRECT_END +#endif + +/* + * Common message prefixes + */ +#define ACPI_MSG_ERROR "ACPI Error: " +#define ACPI_MSG_EXCEPTION "ACPI Exception: " +#define ACPI_MSG_WARNING "ACPI Warning: " +#define ACPI_MSG_INFO "ACPI: " + +/* + * Common message suffix + */ +#define ACPI_MSG_SUFFIX \ + AcpiOsPrintf (" (%8.8X/%s-%u)\n", ACPI_CA_VERSION, ModuleName, LineNumber) + + +/******************************************************************************* + * + * FUNCTION: AcpiError + * + * PARAMETERS: ModuleName - Caller's module name (for error output) + * LineNumber - Caller's line number (for error output) + * Format - Printf format string + additional args + * + * RETURN: None + * + * DESCRIPTION: Print "ACPI Error" message with module/line/version info + * + ******************************************************************************/ + +void ACPI_INTERNAL_VAR_XFACE +AcpiError ( + const char *ModuleName, + UINT32 LineNumber, + const char *Format, + ...) +{ + va_list ArgList; + + + ACPI_MSG_REDIRECT_BEGIN; + AcpiOsPrintf (ACPI_MSG_ERROR); + + va_start (ArgList, Format); + AcpiOsVprintf (Format, ArgList); + ACPI_MSG_SUFFIX; + va_end (ArgList); + + ACPI_MSG_REDIRECT_END; +} + +ACPI_EXPORT_SYMBOL (AcpiError) + + +/******************************************************************************* + * + * FUNCTION: AcpiException + * + * PARAMETERS: ModuleName - Caller's module name (for error output) + * LineNumber - Caller's line number (for error output) + * Status - Status to be formatted + * Format - Printf format string + additional args + * + * RETURN: None + * + * DESCRIPTION: Print "ACPI Exception" message with module/line/version info + * and decoded ACPI_STATUS. + * + ******************************************************************************/ + +void ACPI_INTERNAL_VAR_XFACE +AcpiException ( + const char *ModuleName, + UINT32 LineNumber, + ACPI_STATUS Status, + const char *Format, + ...) +{ + va_list ArgList; + + + ACPI_MSG_REDIRECT_BEGIN; + AcpiOsPrintf (ACPI_MSG_EXCEPTION "%s, ", AcpiFormatException (Status)); + + va_start (ArgList, Format); + AcpiOsVprintf (Format, ArgList); + ACPI_MSG_SUFFIX; + va_end (ArgList); + + ACPI_MSG_REDIRECT_END; +} + +ACPI_EXPORT_SYMBOL (AcpiException) + + +/******************************************************************************* + * + * FUNCTION: AcpiWarning + * + * PARAMETERS: ModuleName - Caller's module name (for error output) + * LineNumber - Caller's line number (for error output) + * Format - Printf format string + additional args + * + * RETURN: None + * + * DESCRIPTION: Print "ACPI Warning" message with module/line/version info + * + ******************************************************************************/ + +void ACPI_INTERNAL_VAR_XFACE +AcpiWarning ( + const char *ModuleName, + UINT32 LineNumber, + const char *Format, + ...) +{ + va_list ArgList; + + + ACPI_MSG_REDIRECT_BEGIN; + AcpiOsPrintf (ACPI_MSG_WARNING); + + va_start (ArgList, Format); + AcpiOsVprintf (Format, ArgList); + ACPI_MSG_SUFFIX; + va_end (ArgList); + + ACPI_MSG_REDIRECT_END; +} + +ACPI_EXPORT_SYMBOL (AcpiWarning) + + +/******************************************************************************* + * + * FUNCTION: AcpiInfo + * + * PARAMETERS: ModuleName - Caller's module name (for error output) + * LineNumber - Caller's line number (for error output) + * Format - Printf format string + additional args + * + * RETURN: None + * + * DESCRIPTION: Print generic "ACPI:" information message. There is no + * module/line/version info in order to keep the message simple. + * + * TBD: ModuleName and LineNumber args are not needed, should be removed. + * + ******************************************************************************/ + +void ACPI_INTERNAL_VAR_XFACE +AcpiInfo ( + const char *ModuleName, + UINT32 LineNumber, + const char *Format, + ...) +{ + va_list ArgList; + + + ACPI_MSG_REDIRECT_BEGIN; + AcpiOsPrintf (ACPI_MSG_INFO); + + va_start (ArgList, Format); + AcpiOsVprintf (Format, ArgList); + AcpiOsPrintf ("\n"); + va_end (ArgList); + + ACPI_MSG_REDIRECT_END; +} + +ACPI_EXPORT_SYMBOL (AcpiInfo) + + +/* + * The remainder of this module contains internal error functions that may + * be configured out. + */ +#if !defined (ACPI_NO_ERROR_MESSAGES) && !defined (ACPI_BIN_APP) + +/******************************************************************************* + * + * FUNCTION: AcpiUtPredefinedWarning + * + * PARAMETERS: ModuleName - Caller's module name (for error output) + * LineNumber - Caller's line number (for error output) + * Pathname - Full pathname to the node + * NodeFlags - From Namespace node for the method/object + * Format - Printf format string + additional args + * + * RETURN: None + * + * DESCRIPTION: Warnings for the predefined validation module. Messages are + * only emitted the first time a problem with a particular + * method/object is detected. This prevents a flood of error + * messages for methods that are repeatedly evaluated. + * + ******************************************************************************/ + +void ACPI_INTERNAL_VAR_XFACE +AcpiUtPredefinedWarning ( + const char *ModuleName, + UINT32 LineNumber, + char *Pathname, + UINT8 NodeFlags, + const char *Format, + ...) +{ + va_list ArgList; + + + /* + * Warning messages for this method/object will be disabled after the + * first time a validation fails or an object is successfully repaired. + */ + if (NodeFlags & ANOBJ_EVALUATED) + { + return; + } + + AcpiOsPrintf (ACPI_MSG_WARNING "For %s: ", Pathname); + + va_start (ArgList, Format); + AcpiOsVprintf (Format, ArgList); + ACPI_MSG_SUFFIX; + va_end (ArgList); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiUtPredefinedInfo + * + * PARAMETERS: ModuleName - Caller's module name (for error output) + * LineNumber - Caller's line number (for error output) + * Pathname - Full pathname to the node + * NodeFlags - From Namespace node for the method/object + * Format - Printf format string + additional args + * + * RETURN: None + * + * DESCRIPTION: Info messages for the predefined validation module. Messages + * are only emitted the first time a problem with a particular + * method/object is detected. This prevents a flood of + * messages for methods that are repeatedly evaluated. + * + ******************************************************************************/ + +void ACPI_INTERNAL_VAR_XFACE +AcpiUtPredefinedInfo ( + const char *ModuleName, + UINT32 LineNumber, + char *Pathname, + UINT8 NodeFlags, + const char *Format, + ...) +{ + va_list ArgList; + + + /* + * Warning messages for this method/object will be disabled after the + * first time a validation fails or an object is successfully repaired. + */ + if (NodeFlags & ANOBJ_EVALUATED) + { + return; + } + + AcpiOsPrintf (ACPI_MSG_INFO "For %s: ", Pathname); + + va_start (ArgList, Format); + AcpiOsVprintf (Format, ArgList); + ACPI_MSG_SUFFIX; + va_end (ArgList); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiUtNamespaceError + * + * PARAMETERS: ModuleName - Caller's module name (for error output) + * LineNumber - Caller's line number (for error output) + * InternalName - Name or path of the namespace node + * LookupStatus - Exception code from NS lookup + * + * RETURN: None + * + * DESCRIPTION: Print error message with the full pathname for the NS node. + * + ******************************************************************************/ + +void +AcpiUtNamespaceError ( + const char *ModuleName, + UINT32 LineNumber, + const char *InternalName, + ACPI_STATUS LookupStatus) +{ + ACPI_STATUS Status; + UINT32 BadName; + char *Name = NULL; + + + ACPI_MSG_REDIRECT_BEGIN; + AcpiOsPrintf (ACPI_MSG_ERROR); + + if (LookupStatus == AE_BAD_CHARACTER) + { + /* There is a non-ascii character in the name */ + + ACPI_MOVE_32_TO_32 (&BadName, ACPI_CAST_PTR (UINT32, InternalName)); + AcpiOsPrintf ("[0x%4.4X] (NON-ASCII)", BadName); + } + else + { + /* Convert path to external format */ + + Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, + InternalName, NULL, &Name); + + /* Print target name */ + + if (ACPI_SUCCESS (Status)) + { + AcpiOsPrintf ("[%s]", Name); + } + else + { + AcpiOsPrintf ("[COULD NOT EXTERNALIZE NAME]"); + } + + if (Name) + { + ACPI_FREE (Name); + } + } + + AcpiOsPrintf (" Namespace lookup failure, %s", + AcpiFormatException (LookupStatus)); + + ACPI_MSG_SUFFIX; + ACPI_MSG_REDIRECT_END; +} + + +/******************************************************************************* + * + * FUNCTION: AcpiUtMethodError + * + * PARAMETERS: ModuleName - Caller's module name (for error output) + * LineNumber - Caller's line number (for error output) + * Message - Error message to use on failure + * PrefixNode - Prefix relative to the path + * Path - Path to the node (optional) + * MethodStatus - Execution status + * + * RETURN: None + * + * DESCRIPTION: Print error message with the full pathname for the method. + * + ******************************************************************************/ + +void +AcpiUtMethodError ( + const char *ModuleName, + UINT32 LineNumber, + const char *Message, + ACPI_NAMESPACE_NODE *PrefixNode, + const char *Path, + ACPI_STATUS MethodStatus) +{ + ACPI_STATUS Status; + ACPI_NAMESPACE_NODE *Node = PrefixNode; + + + ACPI_MSG_REDIRECT_BEGIN; + AcpiOsPrintf (ACPI_MSG_ERROR); + + if (Path) + { + Status = AcpiNsGetNode (PrefixNode, Path, ACPI_NS_NO_UPSEARCH, + &Node); + if (ACPI_FAILURE (Status)) + { + AcpiOsPrintf ("[Could not get node by pathname]"); + } + } + + AcpiNsPrintNodePathname (Node, Message); + AcpiOsPrintf (", %s", AcpiFormatException (MethodStatus)); + + ACPI_MSG_SUFFIX; + ACPI_MSG_REDIRECT_END; +} + +#endif /* ACPI_NO_ERROR_MESSAGES */ From 65742a25f73183e6d4476539ba18aff6480e73d4 Mon Sep 17 00:00:00 2001 From: Jung-uk Kim Date: Thu, 16 Sep 2010 19:43:32 +0000 Subject: [PATCH 2/2] Update acfreebsd.h for ACPI_THREAD_ID change. Note this patch was committed on upstream GIT: http://git.moblin.org/cgit.cgi/acpica/commit/?id=184ee2428cf02b0035d5de8a82c06fdfbc2ae14c --- include/platform/acfreebsd.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/platform/acfreebsd.h b/include/platform/acfreebsd.h index 6c087da084f6..59694e3d573e 100644 --- a/include/platform/acfreebsd.h +++ b/include/platform/acfreebsd.h @@ -165,6 +165,8 @@ #include #endif +#define ACPI_CAST_PTHREAD_T(pthread) ((ACPI_THREAD_ID) ACPI_TO_INTEGER (pthread)) + #define ACPI_USE_STANDARD_HEADERS #define ACPI_FLUSH_CPU_CACHE()