diff options
author | Jung-uk Kim <jkim@FreeBSD.org> | 2014-11-10 21:30:04 +0000 |
---|---|---|
committer | Jung-uk Kim <jkim@FreeBSD.org> | 2014-11-10 21:30:04 +0000 |
commit | e8991236d498c9646c20a8acf0236cf3342dad6f (patch) | |
tree | b4bd3052883fca1145eaa389311d46371584f6d9 /source/tools | |
parent | d4e301bc21b6911ed7f5d6a86659c4882fa7ab55 (diff) |
Notes
Diffstat (limited to 'source/tools')
-rw-r--r-- | source/tools/acpiexec/aecommon.h | 11 | ||||
-rw-r--r-- | source/tools/acpiexec/aeinitfile.c | 226 | ||||
-rw-r--r-- | source/tools/acpiexec/aemain.c | 41 | ||||
-rw-r--r-- | source/tools/examples/examples.c | 1 | ||||
-rw-r--r-- | source/tools/examples/extables.c | 2 |
5 files changed, 274 insertions, 7 deletions
diff --git a/source/tools/acpiexec/aecommon.h b/source/tools/acpiexec/aecommon.h index a14ae6406817d..1025b4c809a3a 100644 --- a/source/tools/acpiexec/aecommon.h +++ b/source/tools/acpiexec/aecommon.h @@ -70,6 +70,7 @@ extern UINT8 AcpiGbl_UseHwReducedFadt; extern BOOLEAN AcpiGbl_DisplayRegionAccess; extern BOOLEAN AcpiGbl_DoInterfaceTests; extern BOOLEAN AcpiGbl_LoadTestTables; +extern FILE *AcpiGbl_NamespaceInitFile; extern ACPI_CONNECTION_INFO AeMyContext; /* Check for unexpected exceptions */ @@ -213,4 +214,14 @@ AeOverrideRegionHandlers ( void); +/* aeinitfile */ + +int +AeOpenInitializationFile ( + char *Filename); + +void +AeDoObjectOverrides ( + void); + #endif /* _AECOMMON */ diff --git a/source/tools/acpiexec/aeinitfile.c b/source/tools/acpiexec/aeinitfile.c new file mode 100644 index 0000000000000..de36020d71196 --- /dev/null +++ b/source/tools/acpiexec/aeinitfile.c @@ -0,0 +1,226 @@ +/****************************************************************************** + * + * Module Name: aeinitfile - Support for optional initialization file + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 - 2014, Intel Corp. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * Alternatively, this software may be distributed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ + +#include "aecommon.h" +#include "acdispat.h" + +#define _COMPONENT ACPI_TOOLS + ACPI_MODULE_NAME ("aeinitfile") + + +/* Local prototypes */ + +static void +AeDoOneOverride ( + char *Pathname, + char *ValueString, + ACPI_OPERAND_OBJECT *ObjDesc, + ACPI_WALK_STATE *WalkState); + + +#define AE_FILE_BUFFER_SIZE 512 + +static char NameBuffer[AE_FILE_BUFFER_SIZE]; +static char ValueBuffer[AE_FILE_BUFFER_SIZE]; +static FILE *InitFile; + + +/****************************************************************************** + * + * FUNCTION: AeOpenInitializationFile + * + * PARAMETERS: Filename - Path to the init file + * + * RETURN: Status + * + * DESCRIPTION: Open the initialization file for the -fi option + * + *****************************************************************************/ + +int +AeOpenInitializationFile ( + char *Filename) +{ + + InitFile = fopen (Filename, "r"); + if (!InitFile) + { + perror ("Could not open initialization file"); + return (-1); + } + + AcpiOsPrintf ("Opened initialization file [%s]\n", Filename); + return (0); +} + + +/****************************************************************************** + * + * FUNCTION: AeDoObjectOverrides + * + * PARAMETERS: None + * + * RETURN: None + * + * DESCRIPTION: Read the initialization file and perform all overrides + * + * NOTE: The format of the file is multiple lines, each of format: + * <ACPI-pathname> <Integer Value> + * + *****************************************************************************/ + +void +AeDoObjectOverrides ( + void) +{ + ACPI_OPERAND_OBJECT *ObjDesc; + ACPI_WALK_STATE *WalkState; + int i; + + + if (!InitFile) + { + return; + } + + /* Create needed objects to be reused for each init entry */ + + ObjDesc = AcpiUtCreateIntegerObject (0); + WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL); + + NameBuffer[0] = '\\'; + + /* Read the entire file line-by-line */ + + while (fscanf (InitFile, "%s %s\n", + ACPI_CAST_PTR (char, &NameBuffer[1]), + ACPI_CAST_PTR (char, &ValueBuffer)) == 2) + { + /* Add a root prefix if not present in the string */ + + i = 0; + if (NameBuffer[1] == '\\') + { + i = 1; + } + + AeDoOneOverride (&NameBuffer[i], ValueBuffer, ObjDesc, WalkState); + } + + /* Cleanup */ + + fclose (InitFile); + AcpiDsDeleteWalkState (WalkState); + AcpiUtRemoveReference (ObjDesc); +} + + +/****************************************************************************** + * + * FUNCTION: AeDoOneOverride + * + * PARAMETERS: Pathname - AML namepath + * ValueString - New integer value to be stored + * ObjDesc - Descriptor with integer override value + * WalkState - Used for the Store operation + * + * RETURN: None + * + * DESCRIPTION: Perform an overrided for a single namespace object + * + *****************************************************************************/ + +static void +AeDoOneOverride ( + char *Pathname, + char *ValueString, + ACPI_OPERAND_OBJECT *ObjDesc, + ACPI_WALK_STATE *WalkState) +{ + ACPI_HANDLE Handle; + ACPI_STATUS Status; + UINT64 Value; + + + AcpiOsPrintf ("Value Override: %s, ", Pathname); + + /* + * Get the namespace node associated with the override + * pathname from the init file. + */ + Status = AcpiGetHandle (NULL, Pathname, &Handle); + if (ACPI_FAILURE (Status)) + { + AcpiOsPrintf ("%s\n", AcpiFormatException (Status)); + return; + } + + /* Extract the 64-bit integer */ + + Status = AcpiUtStrtoul64 (ValueString, 0, &Value); + if (ACPI_FAILURE (Status)) + { + AcpiOsPrintf ("%s\n", AcpiFormatException (Status)); + return; + } + + ObjDesc->Integer.Value = Value; + + /* + * At the point this function is called, the namespace is fully + * built and initialized. We can simply store the new object to + * the target node. + */ + AcpiExEnterInterpreter (); + Status = AcpiExStore (ObjDesc, Handle, WalkState); + AcpiExExitInterpreter (); + + if (ACPI_FAILURE (Status)) + { + AcpiOsPrintf ("%s\n", AcpiFormatException (Status)); + return; + } + + AcpiOsPrintf ("New value: 0x%8.8X%8.8X\n", + ACPI_FORMAT_UINT64 (Value)); +} diff --git a/source/tools/acpiexec/aemain.c b/source/tools/acpiexec/aemain.c index 5381b4e0722a4..476539e48aa0d 100644 --- a/source/tools/acpiexec/aemain.c +++ b/source/tools/acpiexec/aemain.c @@ -95,7 +95,7 @@ static char BatchBuffer[AE_BUFFER_SIZE]; /* Batch command buf static AE_TABLE_DESC *AeTableListHead = NULL; #define ACPIEXEC_NAME "AML Execution/Debug Utility" -#define AE_SUPPORTED_OPTIONS "?b:d:e:f:ghm^orv^:x:" +#define AE_SUPPORTED_OPTIONS "?b:d:e:f^ghm^orv^:x:" /* Stubs for the disassembler */ @@ -158,12 +158,16 @@ usage ( ACPI_OPTION ("-et", "Enable debug semaphore timeout"); printf ("\n"); - ACPI_OPTION ("-f <Value>", "Operation Region initialization fill value"); + ACPI_OPTION ("-fv <Value>", "Operation Region initialization fill value"); + ACPI_OPTION ("-fi <file>", "Specify namespace initialization file"); ACPI_OPTION ("-r", "Use hardware-reduced FADT V5"); ACPI_OPTION ("-v", "Display version information"); ACPI_OPTION ("-vi", "Verbose initialization output"); ACPI_OPTION ("-vr", "Verbose region handler output"); ACPI_OPTION ("-x <DebugLevel>", "Debug output level"); + + printf ("\n From within the interactive mode, use '?' or \"help\" to see\n" + " a list of available AML Debugger commands\n"); } @@ -285,7 +289,36 @@ AeDoOptions ( case 'f': - AcpiGbl_RegionFillValue = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); + switch (AcpiGbl_Optarg[0]) + { + case 'v': /* -fv: region fill value */ + + if (AcpiGetoptArgument (argc, argv)) + { + return (-1); + } + + AcpiGbl_RegionFillValue = (UINT8) strtoul (AcpiGbl_Optarg, NULL, 0); + break; + + case 'i': /* -fi: specify initialization file */ + + if (AcpiGetoptArgument (argc, argv)) + { + return (-1); + } + + if (AeOpenInitializationFile (AcpiGbl_Optarg)) + { + return (-1); + } + break; + + default: + + printf ("Unknown option: -f%s\n", AcpiGbl_Optarg); + return (-1); + } break; case 'g': @@ -436,6 +469,7 @@ main ( } AcpiGbl_DbOpt_tables = TRUE; + AcpiGbl_CstyleDisassembly = FALSE; /* Not supported for AcpiExec */ TableCount = 0; /* Get each of the ACPI table files on the command line */ @@ -579,7 +613,6 @@ EnterDebugger: ErrorExit: - (void) AcpiOsTerminate (); return (-1); } diff --git a/source/tools/examples/examples.c b/source/tools/examples/examples.c index 762118a13338b..3a6048d0a99da 100644 --- a/source/tools/examples/examples.c +++ b/source/tools/examples/examples.c @@ -41,7 +41,6 @@ * POSSIBILITY OF SUCH DAMAGES. */ -#define __EXAMPLES_C__ #include "examples.h" #define _COMPONENT ACPI_EXAMPLE diff --git a/source/tools/examples/extables.c b/source/tools/examples/extables.c index aa5fc1fea8eea..18c1a8534e1cd 100644 --- a/source/tools/examples/extables.c +++ b/source/tools/examples/extables.c @@ -41,8 +41,6 @@ * POSSIBILITY OF SUCH DAMAGES. */ -#define __EXTABLES_C__ - #include "examples.h" #include "actables.h" |