diff options
Diffstat (limited to 'source/tools')
-rw-r--r-- | source/tools/acpidump/apmain.c | 3 | ||||
-rw-r--r-- | source/tools/acpiexec/aecommon.h | 12 | ||||
-rw-r--r-- | source/tools/acpiexec/aeexception.c | 441 | ||||
-rw-r--r-- | source/tools/acpiexec/aehandlers.c | 214 | ||||
-rw-r--r-- | source/tools/acpiexec/aemain.c | 4 | ||||
-rw-r--r-- | source/tools/acpisrc/asremove.c | 92 | ||||
-rw-r--r-- | source/tools/acpisrc/astable.c | 25 |
7 files changed, 583 insertions, 208 deletions
diff --git a/source/tools/acpidump/apmain.c b/source/tools/acpidump/apmain.c index 3711b532304f..60ee23dcde17 100644 --- a/source/tools/acpidump/apmain.c +++ b/source/tools/acpidump/apmain.c @@ -231,8 +231,7 @@ ApDisplayUsage ( ACPI_OPTION ("-c <on|off>", "Turning on/off customized table dumping"); ACPI_OPTION ("-f <BinaryFile>", "Get table via a binary file"); ACPI_OPTION ("-n <Signature>", "Get table via a name/signature"); - ACPI_OPTION ("-x", "Do not use but dump XSDT"); - ACPI_OPTION ("-x -x", "Do not use or dump XSDT"); + ACPI_OPTION ("-x", "Use RSDT instead of XSDT"); ACPI_USAGE_TEXT ( "\n" diff --git a/source/tools/acpiexec/aecommon.h b/source/tools/acpiexec/aecommon.h index c773e96fa05e..b4864610a69d 100644 --- a/source/tools/acpiexec/aecommon.h +++ b/source/tools/acpiexec/aecommon.h @@ -204,11 +204,21 @@ extern ACPI_CONNECTION_INFO AeMyContext; #define OSD_PRINT(lvl,fp) TEST_OUTPUT_LEVEL(lvl) {\ AcpiOsPrintf PARAM_LIST(fp);} +#define AE_PREFIX "ACPI Exec: " + void ACPI_SYSTEM_XFACE -AeCtrlCHandler ( +AeSignalHandler ( int Sig); ACPI_STATUS +AeExceptionHandler ( + ACPI_STATUS AmlStatus, + ACPI_NAME Name, + UINT16 Opcode, + UINT32 AmlOffset, + void *Context); + +ACPI_STATUS AeBuildLocalTables ( ACPI_NEW_TABLE_DESC *TableList); diff --git a/source/tools/acpiexec/aeexception.c b/source/tools/acpiexec/aeexception.c new file mode 100644 index 000000000000..a5a3293ad304 --- /dev/null +++ b/source/tools/acpiexec/aeexception.c @@ -0,0 +1,441 @@ +/****************************************************************************** + * + * Module Name: aeexception - Exception and signal handlers + * + *****************************************************************************/ + +/****************************************************************************** + * + * 1. Copyright Notice + * + * Some or all of this work - Copyright (c) 1999 - 2017, 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. + * + ***************************************************************************** + * + * Alternatively, you may choose to be licensed under the terms of the + * following license: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Alternatively, you may choose to be licensed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + *****************************************************************************/ + +#include "aecommon.h" + +#define _COMPONENT ACPI_TOOLS + ACPI_MODULE_NAME ("aeexception") + + +/* Local prototypes */ + +static void +AeDisplayMethodCallStack ( + void); + + +/****************************************************************************** + * + * FUNCTION: AeExceptionHandler + * + * PARAMETERS: Standard exception handler parameters + * + * RETURN: Status + * + * DESCRIPTION: System exception handler for AcpiExec utility. Called from + * the core ACPICA code after any exception during method + * execution. + * + *****************************************************************************/ + +ACPI_STATUS +AeExceptionHandler ( + ACPI_STATUS AmlStatus, + ACPI_NAME Name, + UINT16 Opcode, + UINT32 AmlOffset, + void *Context) +{ + ACPI_STATUS NewAmlStatus = AmlStatus; + ACPI_STATUS Status; + ACPI_BUFFER ReturnObj; + ACPI_OBJECT_LIST ArgList; + ACPI_OBJECT Arg[3]; + const char *Exception; + ACPI_HANDLE ErrHandle; + + + Exception = AcpiFormatException (AmlStatus); + AcpiOsPrintf (AE_PREFIX + "Exception %s during execution\n", Exception); + if (Name) + { + AcpiOsPrintf (AE_PREFIX + "Evaluating Method or Node: [%4.4s]", + (char *) &Name); + } + + AcpiOsPrintf ("\n" AE_PREFIX + "AML Opcode [%s], Method Offset ~%5.5X\n", + AcpiPsGetOpcodeName (Opcode), AmlOffset); + + /* Invoke the _ERR method if present */ + + Status = AcpiGetHandle (NULL, "\\_ERR", &ErrHandle); + if (ACPI_FAILURE (Status)) + { + goto Cleanup; + } + + /* Setup parameter object */ + + ArgList.Count = 3; + ArgList.Pointer = Arg; + + Arg[0].Type = ACPI_TYPE_INTEGER; + Arg[0].Integer.Value = AmlStatus; + + Arg[1].Type = ACPI_TYPE_STRING; + Arg[1].String.Pointer = ACPI_CAST_PTR (char, Exception); + Arg[1].String.Length = strlen (Exception); + + Arg[2].Type = ACPI_TYPE_INTEGER; + Arg[2].Integer.Value = AcpiOsGetThreadId(); + + /* Setup return buffer */ + + ReturnObj.Pointer = NULL; + ReturnObj.Length = ACPI_ALLOCATE_BUFFER; + + Status = AcpiEvaluateObject (ErrHandle, NULL, &ArgList, &ReturnObj); + if (ACPI_SUCCESS (Status)) + { + if (ReturnObj.Pointer) + { + /* Override original status */ + + NewAmlStatus = (ACPI_STATUS) + ((ACPI_OBJECT *) ReturnObj.Pointer)->Integer.Value; + + /* Free a buffer created via ACPI_ALLOCATE_BUFFER */ + + AcpiOsFree (ReturnObj.Pointer); + } + } + else if (Status != AE_NOT_FOUND) + { + AcpiOsPrintf (AE_PREFIX + "Could not execute _ERR method, %s\n", + AcpiFormatException (Status)); + } + +Cleanup: + + /* Global overrides */ + + if (AcpiGbl_IgnoreErrors) + { + NewAmlStatus = AE_OK; + } + else if (AmlStatus == AE_AML_INTERNAL) + { + NewAmlStatus = AE_AML_INTERNAL; + AcpiOsPrintf (AE_PREFIX + "Cannot override status %s\n\n", + AcpiFormatException (NewAmlStatus)); + } + else if (NewAmlStatus != AmlStatus) + { + AcpiOsPrintf (AE_PREFIX + "Exception override, new status %s\n\n", + AcpiFormatException (NewAmlStatus)); + } + + return (NewAmlStatus); +} + + +/****************************************************************************** + * + * FUNCTION: AeSignalHandler + * + * PARAMETERS: Sig + * + * RETURN: none + * + * DESCRIPTION: Master signal handler. Currently handles SIGINT (ctrl-c), + * and SIGSEGV (Segment violation). + * + *****************************************************************************/ + +void ACPI_SYSTEM_XFACE +AeSignalHandler ( + int Sig) +{ + + fflush(stdout); + AcpiOsPrintf ("\n" AE_PREFIX); + + switch (Sig) + { + case SIGINT: + signal(Sig, SIG_IGN); + AcpiOsPrintf ("<Control-C>\n"); + + /* Abort the application if there are no methods executing */ + + if (!AcpiGbl_MethodExecuting) + { + break; + } + + /* + * Abort the method(s). This will also dump the method call + * stack so there is no need to do it here. The application + * will then drop back into the debugger interface. + */ + AcpiGbl_AbortMethod = TRUE; + AcpiOsPrintf (AE_PREFIX "Control Method Call Stack:\n"); + signal (SIGINT, AeSignalHandler); + return; + + case SIGSEGV: + AcpiOsPrintf ("Segmentation Fault\n"); + AeDisplayMethodCallStack (); + break; + + default: + AcpiOsPrintf ("Unknown Signal, %X\n", Sig); + break; + } + + /* Terminate application -- cleanup then exit */ + + AcpiOsPrintf (AE_PREFIX "Terminating\n"); + (void) AcpiOsTerminate (); + exit (0); +} + + +/****************************************************************************** + * + * FUNCTION: AeDisplayMethodCallStack + * + * PARAMETERS: None + * + * RETURN: None + * + * DESCRIPTION: Display current method call stack, if possible. + * + * NOTE: Currently only called from a SIGSEGV, so AcpiExec is about + * to terminate. + * + *****************************************************************************/ + +static void +AeDisplayMethodCallStack ( + void) +{ + ACPI_WALK_STATE *WalkState; + ACPI_THREAD_STATE *ThreadList = AcpiGbl_CurrentWalkList; + char *FullPathname = NULL; + + + if (!AcpiGbl_MethodExecuting) + { + AcpiOsPrintf (AE_PREFIX "No method is executing\n"); + return; + } + + /* + * Try to find the currently executing control method(s) + * + * Note: The following code may fault if the data structures are + * in an indeterminate state when the interrupt occurs. However, + * in practice, this works quite well and can provide very + * valuable information. + * + * 1) Walk the global thread list + */ + while (ThreadList && + (ThreadList->DescriptorType == ACPI_DESC_TYPE_STATE_THREAD)) + { + /* 2) Walk the walk state list for this thread */ + + WalkState = ThreadList->WalkStateList; + while (WalkState && + (WalkState->DescriptorType == ACPI_DESC_TYPE_WALK)) + { + /* An executing control method */ + + if (WalkState->MethodNode) + { + FullPathname = AcpiNsGetExternalPathname ( + WalkState->MethodNode); + + AcpiOsPrintf (AE_PREFIX + "Executing Method: %s\n", FullPathname); + } + + /* Execution of a deferred opcode/node */ + + if (WalkState->DeferredNode) + { + FullPathname = AcpiNsGetExternalPathname ( + WalkState->DeferredNode); + + AcpiOsPrintf (AE_PREFIX + "Evaluating deferred node: %s\n", FullPathname); + } + + /* Get the currently executing AML opcode */ + + if ((WalkState->Opcode != AML_INT_METHODCALL_OP) && + FullPathname) + { + AcpiOsPrintf (AE_PREFIX + "Current AML Opcode in %s: [%s]-0x%4.4X at %p\n", + FullPathname, AcpiPsGetOpcodeName (WalkState->Opcode), + WalkState->Opcode, WalkState->Aml); + } + + if (FullPathname) + { + ACPI_FREE (FullPathname); + FullPathname = NULL; + } + + WalkState = WalkState->Next; + } + + ThreadList = ThreadList->Next; + } +} diff --git a/source/tools/acpiexec/aehandlers.c b/source/tools/acpiexec/aehandlers.c index 5f32b6af93fc..b28541955a19 100644 --- a/source/tools/acpiexec/aehandlers.c +++ b/source/tools/acpiexec/aehandlers.c @@ -182,14 +182,6 @@ AeDeviceNotifyHandler ( void *Context); static ACPI_STATUS -AeExceptionHandler ( - ACPI_STATUS AmlStatus, - ACPI_NAME Name, - UINT16 Opcode, - UINT32 AmlOffset, - void *Context); - -static ACPI_STATUS AeTableHandler ( UINT32 Event, void *Table, @@ -230,50 +222,11 @@ static char *TableEvents[] = #endif /* !ACPI_REDUCED_HARDWARE */ -static UINT32 SigintCount = 0; static AE_DEBUG_REGIONS AeRegions; /****************************************************************************** * - * FUNCTION: AeCtrlCHandler - * - * PARAMETERS: Sig - * - * RETURN: none - * - * DESCRIPTION: Control-C handler. Abort running control method if any. - * - *****************************************************************************/ - -void ACPI_SYSTEM_XFACE -AeCtrlCHandler ( - int Sig) -{ - - signal (SIGINT, SIG_IGN); - SigintCount++; - - AcpiOsPrintf ("Caught a ctrl-c (#%u)\n\n", SigintCount); - - if (AcpiGbl_MethodExecuting) - { - AcpiGbl_AbortMethod = TRUE; - signal (SIGINT, AeCtrlCHandler); - - if (SigintCount < 10) - { - return; - } - } - - (void) AcpiOsTerminate (); - exit (0); -} - - -/****************************************************************************** - * * FUNCTION: AeNotifyHandler(s) * * PARAMETERS: Standard notify handler parameters @@ -325,28 +278,34 @@ AeCommonNotifyHandler ( #if 0 case 0: - printf ("[AcpiExec] Method Error 0x%X: Results not equal\n", Value); + printf (AE_PREFIX + "Method Error 0x%X: Results not equal\n", Value); if (AcpiGbl_DebugFile) { - AcpiOsPrintf ("[AcpiExec] Method Error: Results not equal\n"); + AcpiOsPrintf (AE_PREFIX + "Method Error: Results not equal\n"); } break; case 1: - printf ("[AcpiExec] Method Error: Incorrect numeric result\n"); + printf (AE_PREFIX + "Method Error: Incorrect numeric result\n"); if (AcpiGbl_DebugFile) { - AcpiOsPrintf ("[AcpiExec] Method Error: Incorrect numeric result\n"); + AcpiOsPrintf (AE_PREFIX + "Method Error: Incorrect numeric result\n"); } break; case 2: - printf ("[AcpiExec] Method Error: An operand was overwritten\n"); + printf (AE_PREFIX + "Method Error: An operand was overwritten\n"); if (AcpiGbl_DebugFile) { - AcpiOsPrintf ("[AcpiExec] Method Error: An operand was overwritten\n"); + AcpiOsPrintf (AE_PREFIX + "Method Error: An operand was overwritten\n"); } break; @@ -354,12 +313,14 @@ AeCommonNotifyHandler ( default: - printf ("[AcpiExec] Handler %u: Received a %s Notify on [%4.4s] %p Value 0x%2.2X (%s)\n", + printf (AE_PREFIX + "Handler %u: Received a %s Notify on [%4.4s] %p Value 0x%2.2X (%s)\n", HandlerId, Type, AcpiUtGetNodeName (Device), Device, Value, AcpiUtGetNotifyName (Value, ACPI_TYPE_ANY)); if (AcpiGbl_DebugFile) { - AcpiOsPrintf ("[AcpiExec] Handler %u: Received a %s notify, Value 0x%2.2X\n", + AcpiOsPrintf (AE_PREFIX + "Handler %u: Received a %s notify, Value 0x%2.2X\n", HandlerId, Type, Value); } @@ -390,12 +351,14 @@ AeSystemNotifyHandler ( void *Context) { - printf ("[AcpiExec] Global: Received a System Notify on [%4.4s] %p Value 0x%2.2X (%s)\n", + printf (AE_PREFIX + "Global: Received a System Notify on [%4.4s] %p Value 0x%2.2X (%s)\n", AcpiUtGetNodeName (Device), Device, Value, AcpiUtGetNotifyName (Value, ACPI_TYPE_ANY)); if (AcpiGbl_DebugFile) { - AcpiOsPrintf ("[AcpiExec] Global: Received a System Notify, Value 0x%2.2X\n", Value); + AcpiOsPrintf (AE_PREFIX + "Global: Received a System Notify, Value 0x%2.2X\n", Value); } (void) AcpiEvaluateObject (Device, "_NOT", NULL, NULL); @@ -423,12 +386,14 @@ AeDeviceNotifyHandler ( void *Context) { - printf ("[AcpiExec] Global: Received a Device Notify on [%4.4s] %p Value 0x%2.2X (%s)\n", + printf (AE_PREFIX + "Global: Received a Device Notify on [%4.4s] %p Value 0x%2.2X (%s)\n", AcpiUtGetNodeName (Device), Device, Value, AcpiUtGetNotifyName (Value, ACPI_TYPE_ANY)); if (AcpiGbl_DebugFile) { - AcpiOsPrintf ("[AcpiExec] Global: Received a Device Notify, Value 0x%2.2X\n", Value); + AcpiOsPrintf (AE_PREFIX + "Global: Received a Device Notify, Value 0x%2.2X\n", Value); } (void) AcpiEvaluateObject (Device, "_NOT", NULL, NULL); @@ -437,108 +402,6 @@ AeDeviceNotifyHandler ( /****************************************************************************** * - * FUNCTION: AeExceptionHandler - * - * PARAMETERS: Standard exception handler parameters - * - * RETURN: Status - * - * DESCRIPTION: System exception handler for AcpiExec utility. - * - *****************************************************************************/ - -static ACPI_STATUS -AeExceptionHandler ( - ACPI_STATUS AmlStatus, - ACPI_NAME Name, - UINT16 Opcode, - UINT32 AmlOffset, - void *Context) -{ - ACPI_STATUS NewAmlStatus = AmlStatus; - ACPI_STATUS Status; - ACPI_BUFFER ReturnObj; - ACPI_OBJECT_LIST ArgList; - ACPI_OBJECT Arg[3]; - const char *Exception; - - - Exception = AcpiFormatException (AmlStatus); - AcpiOsPrintf ("[AcpiExec] Exception %s during execution ", Exception); - if (Name) - { - AcpiOsPrintf ("of method [%4.4s]", (char *) &Name); - } - else - { - AcpiOsPrintf ("at module level (table load)"); - } - - AcpiOsPrintf (" Opcode [%s] @%X\n", AcpiPsGetOpcodeName (Opcode), AmlOffset); - - /* - * Invoke the _ERR method if present - * - * Setup parameter object - */ - ArgList.Count = 3; - ArgList.Pointer = Arg; - - Arg[0].Type = ACPI_TYPE_INTEGER; - Arg[0].Integer.Value = AmlStatus; - - Arg[1].Type = ACPI_TYPE_STRING; - Arg[1].String.Pointer = ACPI_CAST_PTR (char, Exception); - Arg[1].String.Length = strlen (Exception); - - Arg[2].Type = ACPI_TYPE_INTEGER; - Arg[2].Integer.Value = AcpiOsGetThreadId(); - - /* Setup return buffer */ - - ReturnObj.Pointer = NULL; - ReturnObj.Length = ACPI_ALLOCATE_BUFFER; - - Status = AcpiEvaluateObject (NULL, "\\_ERR", &ArgList, &ReturnObj); - if (ACPI_SUCCESS (Status)) - { - if (ReturnObj.Pointer) - { - /* Override original status */ - - NewAmlStatus = (ACPI_STATUS) - ((ACPI_OBJECT *) ReturnObj.Pointer)->Integer.Value; - - /* Free a buffer created via ACPI_ALLOCATE_BUFFER */ - - AcpiOsFree (ReturnObj.Pointer); - } - } - else if (Status != AE_NOT_FOUND) - { - AcpiOsPrintf ("[AcpiExec] Could not execute _ERR method, %s\n", - AcpiFormatException (Status)); - } - - /* Global override */ - - if (AcpiGbl_IgnoreErrors) - { - NewAmlStatus = AE_OK; - } - - if (NewAmlStatus != AmlStatus) - { - AcpiOsPrintf ("[AcpiExec] Exception override, new status %s\n\n", - AcpiFormatException (NewAmlStatus)); - } - - return (NewAmlStatus); -} - - -/****************************************************************************** - * * FUNCTION: AeTableHandler * * PARAMETERS: Table handler @@ -571,8 +434,9 @@ AeTableHandler ( Status = AcpiUpdateAllGpes (); ACPI_CHECK_OK (AcpiUpdateAllGpes, Status); - printf ("[AcpiExec] Table Event %s, [%4.4s] %p\n", - TableEvents[Event], ((ACPI_TABLE_HEADER *) Table)->Signature, Table); + printf (AE_PREFIX "Table Event %s, [%4.4s] %p\n", + TableEvents[Event], + ((ACPI_TABLE_HEADER *) Table)->Signature, Table); #endif /* !ACPI_REDUCED_HARDWARE */ return (AE_OK); @@ -596,7 +460,8 @@ AeGpeHandler ( ACPI_NAMESPACE_NODE *DeviceNode = (ACPI_NAMESPACE_NODE *) GpeDevice; - AcpiOsPrintf ("[AcpiExec] GPE Handler received GPE %02X (GPE block %4.4s)\n", + AcpiOsPrintf (AE_PREFIX + "GPE Handler received GPE %02X (GPE block %4.4s)\n", GpeNumber, GpeDevice ? DeviceNode->Name.Ascii : "FADT"); return (ACPI_REENABLE_GPE); @@ -639,8 +504,8 @@ AeGlobalEventHandler ( break; } - AcpiOsPrintf ( - "[AcpiExec] Global Event Handler received: Type %s Number %.2X Dev %p\n", + AcpiOsPrintf (AE_PREFIX + "Global Event Handler received: Type %s Number %.2X Dev %p\n", TypeName, EventNumber, Device); } @@ -662,7 +527,8 @@ AeAttachedDataHandler ( ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Data); - AcpiOsPrintf ("Received an attached data deletion (1) on %4.4s\n", + AcpiOsPrintf (AE_PREFIX + "Received an attached data deletion (1) on %4.4s\n", Node->Name.Ascii); } @@ -684,7 +550,8 @@ AeAttachedDataHandler2 ( ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Data); - AcpiOsPrintf ("Received an attached data deletion (2) on %4.4s\n", + AcpiOsPrintf (AE_PREFIX + "Received an attached data deletion (2) on %4.4s\n", Node->Name.Ascii); } @@ -734,7 +601,8 @@ AeSciHandler ( void *Context) { - AcpiOsPrintf ("[AcpiExec] Received an SCI at handler\n"); + AcpiOsPrintf (AE_PREFIX + "Received an SCI at handler\n"); return (0); } @@ -926,16 +794,16 @@ AeInstallEarlyHandlers ( /* Install global notify handlers */ - Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT, ACPI_SYSTEM_NOTIFY, - AeSystemNotifyHandler, NULL); + Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT, + ACPI_SYSTEM_NOTIFY, AeSystemNotifyHandler, NULL); if (ACPI_FAILURE (Status)) { printf ("Could not install a global system notify handler, %s\n", AcpiFormatException (Status)); } - Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT, ACPI_DEVICE_NOTIFY, - AeDeviceNotifyHandler, NULL); + Status = AcpiInstallNotifyHandler (ACPI_ROOT_OBJECT, + ACPI_DEVICE_NOTIFY, AeDeviceNotifyHandler, NULL); if (ACPI_FAILURE (Status)) { printf ("Could not install a global notify handler, %s\n", diff --git a/source/tools/acpiexec/aemain.c b/source/tools/acpiexec/aemain.c index def7b1b9efc0..2601d3369b89 100644 --- a/source/tools/acpiexec/aemain.c +++ b/source/tools/acpiexec/aemain.c @@ -575,7 +575,9 @@ main ( ACPI_DEBUG_INITIALIZE (); /* For debug version only */ - signal (SIGINT, AeCtrlCHandler); + + signal (SIGINT, AeSignalHandler); + signal (SIGSEGV, AeSignalHandler); /* Init debug globals */ diff --git a/source/tools/acpisrc/asremove.c b/source/tools/acpisrc/asremove.c index 0ee4b3a10417..a728d9067711 100644 --- a/source/tools/acpisrc/asremove.c +++ b/source/tools/acpisrc/asremove.c @@ -550,6 +550,7 @@ AsReduceTypedefs ( { char *SubString; char *SubBuffer; + char *SubSubString; int NestLevel; @@ -562,56 +563,89 @@ AsReduceTypedefs ( if (SubString) { - /* Remove the typedef itself */ + SubSubString = SubString + strlen (Keyword); - SubBuffer = SubString + strlen ("typedef") + 1; - SubBuffer = AsRemoveData (SubString, SubBuffer); + /* skip spaces */ - /* Find the opening brace of the struct or union */ + while (strchr(" \t\r\n", *SubSubString)) + { + SubSubString++; + } - while (*SubString != '{') + /* skip type name */ + + while (!strchr(" \t\r\n", *SubSubString)) { - SubString++; + SubSubString++; } - SubString++; - /* Find the closing brace. Handles nested braces */ + /* skip spaces */ - NestLevel = 1; - while (*SubString) + while (strchr(" \t\r\n", *SubSubString)) + { + SubSubString++; + } + + if (*SubSubString == '{') { - if (*SubString == '{') + /* Remove the typedef itself */ + + SubBuffer = SubString + strlen ("typedef") + 1; + SubBuffer = AsRemoveData (SubString, SubBuffer); + + /* Find the opening brace of the struct or union */ + + while (*SubString != '{') { - NestLevel++; + SubString++; } - else if (*SubString == '}') + SubString++; + + /* Find the closing brace. Handles nested braces */ + + NestLevel = 1; + while (*SubString) { - NestLevel--; + if (*SubString == '{') + { + NestLevel++; + } + else if (*SubString == '}') + { + NestLevel--; + } + + SubString++; + + if (NestLevel == 0) + { + break; + } } - SubString++; + /* Remove an extra line feed if present */ - if (NestLevel == 0) + if (!strncmp (SubString - 3, "\n\n", 2)) { - break; + *(SubString -2) = '}'; + SubString--; } - } - - /* Remove an extra line feed if present */ - if (!strncmp (SubString - 3, "\n\n", 2)) - { - *(SubString -2) = '}'; - SubString--; - } + /* Find the end of the typedef name */ - /* Find the end of the typedef name */ + SubBuffer = AsSkipUntilChar (SubString, ';'); - SubBuffer = AsSkipUntilChar (SubString, ';'); + /* And remove the typedef name */ - /* And remove the typedef name */ + SubBuffer = AsRemoveData (SubString, SubBuffer); + } + else + { + /* Skip the entire definition */ - SubBuffer = AsRemoveData (SubString, SubBuffer); + SubString = strchr (SubString, ';') + 1; + SubBuffer = SubString; + } } } } diff --git a/source/tools/acpisrc/astable.c b/source/tools/acpisrc/astable.c index 521d910eac92..fe07e44cb47f 100644 --- a/source/tools/acpisrc/astable.c +++ b/source/tools/acpisrc/astable.c @@ -294,6 +294,8 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"ACPI_BUS_ATTRIBUTE", SRC_TYPE_STRUCT}, {"ACPI_CACHE_T", SRC_TYPE_SIMPLE}, {"ACPI_CMTABLE_HANDLER", SRC_TYPE_SIMPLE}, + {"ACPI_COMMENT_ADDR_NODE", SRC_TYPE_STRUCT}, + {"ACPI_COMMENT_NODE", SRC_TYPE_STRUCT}, {"ACPI_COMMON_FACS", SRC_TYPE_STRUCT}, {"ACPI_COMMON_STATE", SRC_TYPE_STRUCT}, {"ACPI_COMMON_DESCRIPTOR", SRC_TYPE_STRUCT}, @@ -317,6 +319,7 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"ACPI_DMTABLE_DATA", SRC_TYPE_STRUCT}, {"ACPI_DMTABLE_INFO", SRC_TYPE_STRUCT}, {"ACPI_DMTABLE_HANDLER", SRC_TYPE_SIMPLE}, + {"ACPI_EFI_FILE", SRC_TYPE_SIMPLE}, {"ACPI_EVALUATE_INFO", SRC_TYPE_STRUCT}, {"ACPI_EVENT_HANDLER", SRC_TYPE_SIMPLE}, {"ACPI_EVENT_STATUS", SRC_TYPE_SIMPLE}, @@ -331,6 +334,7 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"ACPI_FADT_INFO", SRC_TYPE_STRUCT}, {"ACPI_FADT_PM_INFO", SRC_TYPE_STRUCT}, {"ACPI_FIELD_INFO", SRC_TYPE_STRUCT}, + {"ACPI_FILE_NODE", SRC_TYPE_STRUCT}, {"ACPI_FIND_CONTEXT", SRC_TYPE_STRUCT}, {"ACPI_FIXED_EVENT_HANDLER", SRC_TYPE_STRUCT}, {"ACPI_FIXED_EVENT_INFO", SRC_TYPE_STRUCT}, @@ -594,6 +598,8 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"AE_DEBUG_REGIONS", SRC_TYPE_STRUCT}, {"AE_REGION", SRC_TYPE_STRUCT}, {"ASL_ANALYSIS_WALK_INFO", SRC_TYPE_STRUCT}, + {"ASL_COMMENT_STATE", SRC_TYPE_STRUCT}, + {"ASL_COMMENT_TYPES", SRC_TYPE_SIMPLE}, {"ASL_ERROR_MSG", SRC_TYPE_STRUCT}, {"ASL_ERROR_MSG", SRC_TYPE_STRUCT}, {"ASL_EVENT_INFO", SRC_TYPE_STRUCT}, @@ -633,6 +639,7 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"ACPI_TABLE_FPDT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_GTDT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_HEST", SRC_TYPE_STRUCT}, + {"ACPI_TABLE_HMAT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_HPET", SRC_TYPE_STRUCT}, {"ACPI_TABLE_IBFT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_IORT", SRC_TYPE_STRUCT}, @@ -645,6 +652,7 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"ACPI_TABLE_MSDM", SRC_TYPE_STRUCT}, {"ACPI_TABLE_NFIT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_PCCT", SRC_TYPE_STRUCT}, + {"ACPI_TABLE_PPTT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_RSDP", SRC_TYPE_STRUCT}, {"ACPI_TABLE_RSDT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_MCHI", SRC_TYPE_STRUCT}, @@ -664,6 +672,7 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"ACPI_TABLE_WDDT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_WDRT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_WPBT", SRC_TYPE_STRUCT}, + {"ACPI_TABLE_WSMT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_XENV", SRC_TYPE_STRUCT}, {"ACPI_TABLE_XSDT", SRC_TYPE_STRUCT}, @@ -719,6 +728,10 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"ACPI_HEST_GENERIC_STATUS", SRC_TYPE_STRUCT}, {"ACPI_HEST_GENERIC_DATA", SRC_TYPE_STRUCT}, {"ACPI_HEST_GENERIC_DATA_V300", SRC_TYPE_STRUCT}, + {"ACPI_HEST_IA_DEFERRED_CHECK", SRC_TYPE_STRUCT}, + {"ACPI_HMAT_ADDRESS_RANGE", SRC_TYPE_STRUCT}, + {"ACPI_HMAT_LOCALITY", SRC_TYPE_STRUCT}, + {"ACPI_HMAT_CACHE", SRC_TYPE_STRUCT}, {"ACPI_IBFT_HEADER", SRC_TYPE_STRUCT}, {"ACPI_IBFT_CONTROL", SRC_TYPE_STRUCT}, {"ACPI_IBFT_INITIATOR", SRC_TYPE_STRUCT}, @@ -774,22 +787,30 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"ACPI_NFIT_CONTROL_REGION", SRC_TYPE_STRUCT}, {"ACPI_NFIT_DATA_REGION", SRC_TYPE_STRUCT}, {"ACPI_NFIT_FLUSH_ADDRESS", SRC_TYPE_STRUCT}, + {"ACPI_PCCT_EXT_PCC_SHARED_MEMORY", SRC_TYPE_STRUCT}, {"ACPI_PCCT_HW_REDUCED", SRC_TYPE_STRUCT}, {"ACPI_PCCT_HW_REDUCED_TYPE2", SRC_TYPE_STRUCT}, + {"ACPI_PCCT_EXT_PCC_MASTER", SRC_TYPE_STRUCT}, + {"ACPI_PCCT_EXT_PCC_SLAVE", SRC_TYPE_STRUCT}, {"ACPI_PCCT_SHARED_MEMORY", SRC_TYPE_STRUCT}, {"ACPI_PCCT_SUBSPACE", SRC_TYPE_STRUCT}, + {"ACPI_PPTT_PROCESSOR", SRC_TYPE_STRUCT}, + {"ACPI_PPTT_CACHE", SRC_TYPE_STRUCT}, + {"ACPI_PPTT_ID", SRC_TYPE_STRUCT}, {"ACPI_RSDP_COMMON", SRC_TYPE_STRUCT}, {"ACPI_RSDP_EXTENSION", SRC_TYPE_STRUCT}, {"ACPI_S3PT_RESUME", SRC_TYPE_STRUCT}, {"ACPI_S3PT_SUSPEND", SRC_TYPE_STRUCT}, {"ACPI_SRAT_CPU_AFFINITY", SRC_TYPE_STRUCT}, {"ACPI_SRAT_HEADER", SRC_TYPE_STRUCT}, + {"ACPI_SRAT_GIC_ITS_AFFINITY", SRC_TYPE_STRUCT}, + {"ACPI_SRAT_GICC_AFFINITY", SRC_TYPE_STRUCT}, {"ACPI_SRAT_MEM_AFFINITY", SRC_TYPE_STRUCT}, {"ACPI_SRAT_X2APIC_CPU_AFFINITY", SRC_TYPE_STRUCT}, - {"ACPI_SRAT_GICC_AFFINITY", SRC_TYPE_STRUCT}, {"ACPI_TABLE_TCPA_CLIENT", SRC_TYPE_STRUCT}, {"ACPI_TABLE_TCPA_SERVER", SRC_TYPE_STRUCT}, - {"ACPI_TPM2_CONTROL", SRC_TYPE_STRUCT}, + {"ACPI_TPM2_TRAILER", SRC_TYPE_STRUCT}, + {"ACPI_TPM2_ARM_SMC", SRC_TYPE_STRUCT}, {"ACPI_WDAT_ENTRY", SRC_TYPE_STRUCT}, /* Data Table compiler */ |