Merge ACPICA 20110527.
This commit is contained in:
commit
42e58c0372
@ -1,31 +1,99 @@
|
||||
----------------------------------------
|
||||
27 May 2011. Summary of changes for version 20110527:
|
||||
|
||||
This release is available at www.acpica.org/downloads
|
||||
|
||||
1) ACPI CA Core Subsystem:
|
||||
|
||||
ASL Load() operator: Reinstate most restrictions on the incoming ACPI table
|
||||
signature. Now, only allow SSDT, OEMx, and a null signature. History:
|
||||
1) Originally, we checked the table signature for "SSDT" or "PSDT".
|
||||
(PSDT is now obsolete.)
|
||||
2) We added support for OEMx tables, signature "OEM" plus a fourth
|
||||
"don't care" character.
|
||||
3) Valid tables were encountered with a null signature, so we just
|
||||
gave up on validating the signature, (05/2008).
|
||||
4) We encountered non-AML tables such as the MADT, which caused
|
||||
interpreter errors and kernel faults. So now, we once again allow
|
||||
only SSDT, OEMx, and now, also a null signature. (05/2011).
|
||||
|
||||
Added the missing _TDL predefined name to the global name list in order to
|
||||
enable validation. Affects both the core ACPICA code and the iASL compiler.
|
||||
|
||||
Example Code and Data Size: These are the sizes for the OS-independent
|
||||
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The debug
|
||||
version of the code includes the debug output trace mechanism and has a much
|
||||
larger code and data size.
|
||||
|
||||
Previous Release (VC 9.0):
|
||||
Non-Debug Version: 90.0K Code, 23.8K Data, 113.8K Total
|
||||
Debug Version: 164.5K Code, 68.0K Data, 232.5K Total
|
||||
Current Release (VC 9.0):
|
||||
Non-Debug Version: 90.1K Code, 23.9K Data, 114.0K Total
|
||||
Debug Version: 165.6K Code, 68.4K Data, 234.0K Total
|
||||
|
||||
2) iASL Compiler/Disassembler and Tools:
|
||||
|
||||
Debugger/AcpiExec: Implemented support for "complex" method arguments on the
|
||||
debugger command line. This adds support beyond simple integers -- including
|
||||
Strings, Buffers, and Packages. Includes support for nested packages.
|
||||
Increased the default command line buffer size to accommodate these arguments.
|
||||
See the ACPICA reference for details and syntax. ACPICA BZ 917.
|
||||
|
||||
Debugger/AcpiExec: Implemented support for "default" method arguments for the
|
||||
Execute/Debug command. Now, the debugger will always invoke a control method
|
||||
with the required number of arguments -- even if the command line specifies
|
||||
none or insufficient arguments. It uses default integer values for any missing
|
||||
arguments. Also fixes a bug where only six method arguments maximum were
|
||||
supported instead of the required seven.
|
||||
|
||||
Debugger/AcpiExec: Add a maximum buffer length parameter to AcpiOsGetLine and
|
||||
also return status in order to prevent buffer overruns. See the ACPICA
|
||||
reference for details and syntax. ACPICA BZ 921
|
||||
|
||||
iASL: Cleaned up support for Berkeley yacc. A general cleanup of code and
|
||||
makefiles to simplify support for the two different but similar parser
|
||||
generators, bison and yacc.
|
||||
|
||||
Updated the generic unix makefile for gcc 4. The default gcc version is now
|
||||
expected to be 4 or greater, since options specific to gcc 4 are used.
|
||||
|
||||
----------------------------------------
|
||||
13 April 2011. Summary of changes for version 20110413:
|
||||
|
||||
1) ACPI CA Core Subsystem:
|
||||
|
||||
Implemented support to execute a so-called "orphan" _REG method under the EC
|
||||
device. This change will force the execution of a _REG method underneath the EC
|
||||
device. This change will force the execution of a _REG method underneath the
|
||||
EC
|
||||
device even if there is no corresponding operation region of type
|
||||
EmbeddedControl. Fixes a problem seen on some machines and apparently is
|
||||
compatible with Windows behavior. ACPICA BZ 875.
|
||||
|
||||
Added more predefined methods that are eligible for automatic NULL package
|
||||
element removal. This change adds another group of predefined names to the list
|
||||
element removal. This change adds another group of predefined names to the
|
||||
list
|
||||
of names that can be repaired by having NULL package elements dynamically
|
||||
removed. This group are those methods that return a single variable-length
|
||||
package containing simple data types such as integers, buffers, strings. This
|
||||
includes: _ALx, _BCL, _CID,_ DOD, _EDL, _FIX, _PCL, _PLD, _PMD, _PRx, _PSL, _Sx,
|
||||
includes: _ALx, _BCL, _CID,_ DOD, _EDL, _FIX, _PCL, _PLD, _PMD, _PRx, _PSL,
|
||||
_Sx,
|
||||
and _TZD. ACPICA BZ 914.
|
||||
|
||||
Split and segregated all internal global lock functions to a new file, evglock.c.
|
||||
Split and segregated all internal global lock functions to a new file,
|
||||
evglock.c.
|
||||
|
||||
Updated internal address SpaceID for DataTable regions. Moved this internal space
|
||||
id in preparation for ACPI 5.0 changes that will include some new space IDs. This
|
||||
Updated internal address SpaceID for DataTable regions. Moved this internal
|
||||
space
|
||||
id in preparation for ACPI 5.0 changes that will include some new space IDs.
|
||||
This
|
||||
change should not affect user/host code.
|
||||
|
||||
Example Code and Data Size: These are the sizes for the OS-independent acpica.lib
|
||||
Example Code and Data Size: These are the sizes for the OS-independent
|
||||
acpica.lib
|
||||
produced by the Microsoft Visual C++ 9.0 32-bit compiler. The debug version of
|
||||
the code includes the debug output trace mechanism and has a much larger code and
|
||||
the code includes the debug output trace mechanism and has a much larger code
|
||||
and
|
||||
data size.
|
||||
|
||||
Previous Release (VC 9.0):
|
||||
@ -40,34 +108,44 @@ data size.
|
||||
iASL/DTC: Major update for new grammar features. Allow generic data types in
|
||||
custom ACPI tables. Field names are now optional. Any line can be split to
|
||||
multiple lines using the continuation char (\). Large buffers now use line-
|
||||
continuation character(s) and no colon on the continuation lines. See the grammar
|
||||
continuation character(s) and no colon on the continuation lines. See the
|
||||
grammar
|
||||
update in the iASL compiler reference. ACPI BZ 910,911. Lin Ming, Bob Moore.
|
||||
|
||||
iASL: Mark ASL "Return()" and the simple "Return" as "Null" return statements.
|
||||
Since the parser stuffs a "zero" as the return value for these statements (due to
|
||||
Since the parser stuffs a "zero" as the return value for these statements (due
|
||||
to
|
||||
the underlying AML grammar), they were seen as "return with value" by the iASL
|
||||
semantic checking. They are now seen correctly as "null" return statements.
|
||||
|
||||
iASL: Check if a_REG declaration has a corresponding Operation Region. Adds a
|
||||
check for each _REG to ensure that there is in fact a corresponding operation
|
||||
region declaration in the same scope. If not, the _REG method is not very useful
|
||||
region declaration in the same scope. If not, the _REG method is not very
|
||||
useful
|
||||
since it probably won't be executed. ACPICA BZ 915.
|
||||
|
||||
iASL/DTC: Finish support for expression evaluation. Added a new expression parser
|
||||
that implements c-style operator precedence and parenthesization. ACPICA bugzilla
|
||||
iASL/DTC: Finish support for expression evaluation. Added a new expression
|
||||
parser
|
||||
that implements c-style operator precedence and parenthesization. ACPICA
|
||||
bugzilla
|
||||
908.
|
||||
|
||||
Disassembler/DTC: Remove support for () and <> style comments in data tables. Now
|
||||
that DTC has full expression support, we don't want to have comment strings that
|
||||
start with a parentheses or a less-than symbol. Now, only the standard /* and //
|
||||
Disassembler/DTC: Remove support for () and <> style comments in data tables.
|
||||
Now
|
||||
that DTC has full expression support, we don't want to have comment strings
|
||||
that
|
||||
start with a parentheses or a less-than symbol. Now, only the standard /* and
|
||||
//
|
||||
comments are supported, as well as the bracket [] comments.
|
||||
|
||||
AcpiXtract: Fix for RSDP and dynamic SSDT extraction. These tables have "unusual"
|
||||
AcpiXtract: Fix for RSDP and dynamic SSDT extraction. These tables have
|
||||
"unusual"
|
||||
headers in the acpidump file. Update the header validation to support these
|
||||
tables. Problem introduced in previous AcpiXtract version in the change to
|
||||
support "wrong checksum" error messages emitted by acpidump utility.
|
||||
|
||||
iASL: Add a * option to generate all template files (as a synonym for ALL) as in
|
||||
iASL: Add a * option to generate all template files (as a synonym for ALL) as
|
||||
in
|
||||
"iasl -T *" or "iasl -T ALL".
|
||||
|
||||
iASL/DTC: Do not abort compiler on fatal errors. We do not want to completely
|
||||
@ -81,7 +159,8 @@ invocation.
|
||||
1) ACPI CA Core Subsystem:
|
||||
|
||||
Fixed a problem caused by a _PRW method appearing at the namespace root scope
|
||||
during the setup of wake GPEs. A fault could occur if a _PRW directly under the
|
||||
during the setup of wake GPEs. A fault could occur if a _PRW directly under
|
||||
the
|
||||
root object was passed to the AcpiSetupGpeForWake interface. Lin Ming.
|
||||
|
||||
Implemented support for "spurious" Global Lock interrupts. On some systems, a
|
||||
@ -89,9 +168,11 @@ global lock interrupt can occur without the pending flag being set. Upon a GL
|
||||
interrupt, we now ensure that a thread is actually waiting for the lock before
|
||||
signaling GL availability. Rafael Wysocki, Bob Moore.
|
||||
|
||||
Example Code and Data Size: These are the sizes for the OS-independent acpica.lib
|
||||
Example Code and Data Size: These are the sizes for the OS-independent
|
||||
acpica.lib
|
||||
produced by the Microsoft Visual C++ 9.0 32-bit compiler. The debug version of
|
||||
the code includes the debug output trace mechanism and has a much larger code and
|
||||
the code includes the debug output trace mechanism and has a much larger code
|
||||
and
|
||||
data size.
|
||||
|
||||
Previous Release (VC 9.0):
|
||||
@ -108,14 +189,16 @@ header files, disassembler, table compiler, and template generator. Bob Moore,
|
||||
Lin Ming.
|
||||
|
||||
AcpiXtract: Correctly handle embedded comments and messages from AcpiDump.
|
||||
Apparently some or all versions of acpidump will occasionally emit a comment like
|
||||
Apparently some or all versions of acpidump will occasionally emit a comment
|
||||
like
|
||||
"Wrong checksum", etc., into the dump file. This was causing problems for
|
||||
AcpiXtract. ACPICA BZ 905.
|
||||
|
||||
iASL: Fix the Linux makefile by removing an inadvertent double file inclusion.
|
||||
ACPICA BZ 913.
|
||||
|
||||
AcpiExec: Update installation of operation region handlers. Install one handler
|
||||
AcpiExec: Update installation of operation region handlers. Install one
|
||||
handler
|
||||
for a user-defined address space. This is used by the ASL test suite (ASLTS).
|
||||
|
||||
----------------------------------------
|
||||
|
@ -53,7 +53,8 @@
|
||||
ACPI_MODULE_NAME ("dbexec")
|
||||
|
||||
|
||||
static ACPI_DB_METHOD_INFO AcpiGbl_DbMethodInfo;
|
||||
static ACPI_DB_METHOD_INFO AcpiGbl_DbMethodInfo;
|
||||
#define DB_DEFAULT_PKG_ELEMENTS 33
|
||||
|
||||
/* Local prototypes */
|
||||
|
||||
@ -81,6 +82,348 @@ AcpiDbExecutionWalk (
|
||||
void *Context,
|
||||
void **ReturnValue);
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiDbHexCharToValue (
|
||||
int HexChar,
|
||||
UINT8 *ReturnValue);
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiDbConvertToPackage (
|
||||
char *String,
|
||||
ACPI_OBJECT *Object);
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiDbConvertToObject (
|
||||
ACPI_OBJECT_TYPE Type,
|
||||
char *String,
|
||||
ACPI_OBJECT *Object);
|
||||
|
||||
static void
|
||||
AcpiDbDeleteObjects (
|
||||
UINT32 Count,
|
||||
ACPI_OBJECT *Objects);
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDbHexCharToValue
|
||||
*
|
||||
* PARAMETERS: HexChar - Ascii Hex digit, 0-9|a-f|A-F
|
||||
* ReturnValue - Where the converted value is returned
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Convert a single hex character to a 4-bit number (0-16).
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiDbHexCharToValue (
|
||||
int HexChar,
|
||||
UINT8 *ReturnValue)
|
||||
{
|
||||
UINT8 Value;
|
||||
|
||||
|
||||
/* Digit must be ascii [0-9a-fA-F] */
|
||||
|
||||
if (!ACPI_IS_XDIGIT (HexChar))
|
||||
{
|
||||
return (AE_BAD_HEX_CONSTANT);
|
||||
}
|
||||
|
||||
if (HexChar <= 0x39)
|
||||
{
|
||||
Value = (UINT8) (HexChar - 0x30);
|
||||
}
|
||||
else
|
||||
{
|
||||
Value = (UINT8) (ACPI_TOUPPER (HexChar) - 0x37);
|
||||
}
|
||||
|
||||
*ReturnValue = Value;
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDbHexByteToBinary
|
||||
*
|
||||
* PARAMETERS: HexByte - Double hex digit (0x00 - 0xFF) in format:
|
||||
* HiByte then LoByte.
|
||||
* ReturnValue - Where the converted value is returned
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Convert two hex characters to an 8 bit number (0 - 255).
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiDbHexByteToBinary (
|
||||
char *HexByte,
|
||||
UINT8 *ReturnValue)
|
||||
{
|
||||
UINT8 Local0;
|
||||
UINT8 Local1;
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
/* High byte */
|
||||
|
||||
Status = AcpiDbHexCharToValue (HexByte[0], &Local0);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
|
||||
/* Low byte */
|
||||
|
||||
Status = AcpiDbHexCharToValue (HexByte[1], &Local1);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (Status);
|
||||
}
|
||||
|
||||
*ReturnValue = (UINT8) ((Local0 << 4) | Local1);
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDbConvertToBuffer
|
||||
*
|
||||
* PARAMETERS: String - Input string to be converted
|
||||
* Object - Where the buffer object is returned
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Convert a string to a buffer object. String is treated a list
|
||||
* of buffer elements, each separated by a space or comma.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiDbConvertToBuffer (
|
||||
char *String,
|
||||
ACPI_OBJECT *Object)
|
||||
{
|
||||
UINT32 i;
|
||||
UINT32 j;
|
||||
UINT32 Length;
|
||||
UINT8 *Buffer;
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
/* Generate the final buffer length */
|
||||
|
||||
for (i = 0, Length = 0; String[i];)
|
||||
{
|
||||
i+=2;
|
||||
Length++;
|
||||
|
||||
while (String[i] &&
|
||||
((String[i] == ',') || (String[i] == ' ')))
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
Buffer = ACPI_ALLOCATE (Length);
|
||||
if (!Buffer)
|
||||
{
|
||||
return (AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
/* Convert the command line bytes to the buffer */
|
||||
|
||||
for (i = 0, j = 0; String[i];)
|
||||
{
|
||||
Status = AcpiDbHexByteToBinary (&String[i], &Buffer[j]);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
ACPI_FREE (Buffer);
|
||||
return (Status);
|
||||
}
|
||||
|
||||
j++;
|
||||
i+=2;
|
||||
while (String[i] &&
|
||||
((String[i] == ',') || (String[i] == ' ')))
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
Object->Type = ACPI_TYPE_BUFFER;
|
||||
Object->Buffer.Pointer = Buffer;
|
||||
Object->Buffer.Length = Length;
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDbConvertToPackage
|
||||
*
|
||||
* PARAMETERS: String - Input string to be converted
|
||||
* Object - Where the package object is returned
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Convert a string to a package object. Handles nested packages
|
||||
* via recursion with AcpiDbConvertToObject.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiDbConvertToPackage (
|
||||
char *String,
|
||||
ACPI_OBJECT *Object)
|
||||
{
|
||||
char *This;
|
||||
char *Next;
|
||||
UINT32 i;
|
||||
ACPI_OBJECT_TYPE Type;
|
||||
ACPI_OBJECT *Elements;
|
||||
ACPI_STATUS Status;
|
||||
|
||||
|
||||
Elements = ACPI_ALLOCATE_ZEROED (
|
||||
DB_DEFAULT_PKG_ELEMENTS * sizeof (ACPI_OBJECT));
|
||||
|
||||
This = String;
|
||||
for (i = 0; i < (DB_DEFAULT_PKG_ELEMENTS - 1); i++)
|
||||
{
|
||||
This = AcpiDbGetNextToken (This, &Next, &Type);
|
||||
if (!This)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
/* Recursive call to convert each package element */
|
||||
|
||||
Status = AcpiDbConvertToObject (Type, This, &Elements[i]);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
AcpiDbDeleteObjects (i + 1, Elements);
|
||||
ACPI_FREE (Elements);
|
||||
return (Status);
|
||||
}
|
||||
|
||||
This = Next;
|
||||
}
|
||||
|
||||
Object->Type = ACPI_TYPE_PACKAGE;
|
||||
Object->Package.Count = i;
|
||||
Object->Package.Elements = Elements;
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDbConvertToObject
|
||||
*
|
||||
* PARAMETERS: Type - Object type as determined by parser
|
||||
* String - Input string to be converted
|
||||
* Object - Where the new object is returned
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Convert a typed and tokenized string to an ACPI_OBJECT. Typing:
|
||||
* 1) String objects were surrounded by quotes.
|
||||
* 2) Buffer objects were surrounded by parentheses.
|
||||
* 3) Package objects were surrounded by brackets "[]".
|
||||
* 4) All standalone tokens are treated as integers.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static ACPI_STATUS
|
||||
AcpiDbConvertToObject (
|
||||
ACPI_OBJECT_TYPE Type,
|
||||
char *String,
|
||||
ACPI_OBJECT *Object)
|
||||
{
|
||||
ACPI_STATUS Status = AE_OK;
|
||||
|
||||
|
||||
switch (Type)
|
||||
{
|
||||
case ACPI_TYPE_STRING:
|
||||
Object->Type = ACPI_TYPE_STRING;
|
||||
Object->String.Pointer = String;
|
||||
Object->String.Length = (UINT32) ACPI_STRLEN (String);
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_BUFFER:
|
||||
Status = AcpiDbConvertToBuffer (String, Object);
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_PACKAGE:
|
||||
Status = AcpiDbConvertToPackage (String, Object);
|
||||
break;
|
||||
|
||||
default:
|
||||
Object->Type = ACPI_TYPE_INTEGER;
|
||||
Status = AcpiUtStrtoul64 (String, 16, &Object->Integer.Value);
|
||||
break;
|
||||
}
|
||||
|
||||
return (Status);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDbDeleteObjects
|
||||
*
|
||||
* PARAMETERS: Count - Count of objects in the list
|
||||
* Objects - Array of ACPI_OBJECTs to be deleted
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Delete a list of ACPI_OBJECTS. Handles packages and nested
|
||||
* packages via recursion.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void
|
||||
AcpiDbDeleteObjects (
|
||||
UINT32 Count,
|
||||
ACPI_OBJECT *Objects)
|
||||
{
|
||||
UINT32 i;
|
||||
|
||||
|
||||
for (i = 0; i < Count; i++)
|
||||
{
|
||||
switch (Objects[i].Type)
|
||||
{
|
||||
case ACPI_TYPE_BUFFER:
|
||||
ACPI_FREE (Objects[i].Buffer.Pointer);
|
||||
break;
|
||||
|
||||
case ACPI_TYPE_PACKAGE:
|
||||
|
||||
/* Recursive call to delete package elements */
|
||||
|
||||
AcpiDbDeleteObjects (Objects[i].Package.Count,
|
||||
Objects[i].Package.Elements);
|
||||
|
||||
/* Free the elements array */
|
||||
|
||||
ACPI_FREE (Objects[i].Package.Elements);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
@ -104,8 +447,8 @@ AcpiDbExecuteMethod (
|
||||
ACPI_OBJECT_LIST ParamObjects;
|
||||
ACPI_OBJECT Params[ACPI_METHOD_NUM_ARGS];
|
||||
ACPI_HANDLE Handle;
|
||||
UINT32 i;
|
||||
ACPI_DEVICE_INFO *ObjInfo;
|
||||
UINT32 i;
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE (DbExecuteMethod);
|
||||
@ -139,25 +482,37 @@ AcpiDbExecuteMethod (
|
||||
{
|
||||
/* Are there arguments to the method? */
|
||||
|
||||
i = 0;
|
||||
if (Info->Args && Info->Args[0])
|
||||
{
|
||||
for (i = 0; Info->Args[i] &&
|
||||
/* Get arguments passed on the command line */
|
||||
|
||||
for (; Info->Args[i] &&
|
||||
(i < ACPI_METHOD_NUM_ARGS) &&
|
||||
(i < ObjInfo->ParamCount);
|
||||
i++)
|
||||
{
|
||||
Params[i].Type = ACPI_TYPE_INTEGER;
|
||||
Params[i].Integer.Value = ACPI_STRTOUL (Info->Args[i], NULL, 16);
|
||||
/* Convert input string (token) to an actual ACPI_OBJECT */
|
||||
|
||||
Status = AcpiDbConvertToObject (Info->Types[i],
|
||||
Info->Args[i], &Params[i]);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
ACPI_EXCEPTION ((AE_INFO, Status,
|
||||
"While parsing method arguments"));
|
||||
goto Cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
ParamObjects.Pointer = Params;
|
||||
ParamObjects.Count = i;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Setup default parameters */
|
||||
|
||||
for (i = 0; i < ObjInfo->ParamCount; i++)
|
||||
/* Create additional "default" parameters as needed */
|
||||
|
||||
if (i < ObjInfo->ParamCount)
|
||||
{
|
||||
AcpiOsPrintf ("Adding %u arguments containing default values\n",
|
||||
ObjInfo->ParamCount - i);
|
||||
|
||||
for (; i < ObjInfo->ParamCount; i++)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
@ -181,13 +536,11 @@ AcpiDbExecuteMethod (
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ParamObjects.Pointer = Params;
|
||||
ParamObjects.Count = ObjInfo->ParamCount;
|
||||
}
|
||||
}
|
||||
|
||||
ACPI_FREE (ObjInfo);
|
||||
ParamObjects.Count = ObjInfo->ParamCount;
|
||||
ParamObjects.Pointer = Params;
|
||||
}
|
||||
|
||||
/* Prepare for a return object of arbitrary size */
|
||||
|
||||
@ -198,7 +551,7 @@ AcpiDbExecuteMethod (
|
||||
|
||||
AcpiGbl_MethodExecuting = TRUE;
|
||||
Status = AcpiEvaluateObject (NULL,
|
||||
Info->Pathname, &ParamObjects, ReturnObj);
|
||||
Info->Pathname, &ParamObjects, ReturnObj);
|
||||
|
||||
AcpiGbl_CmSingleStep = FALSE;
|
||||
AcpiGbl_MethodExecuting = FALSE;
|
||||
@ -206,16 +559,20 @@ AcpiDbExecuteMethod (
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
ACPI_EXCEPTION ((AE_INFO, Status,
|
||||
"while executing %s from debugger", Info->Pathname));
|
||||
"while executing %s from debugger", Info->Pathname));
|
||||
|
||||
if (Status == AE_BUFFER_OVERFLOW)
|
||||
{
|
||||
ACPI_ERROR ((AE_INFO,
|
||||
"Possible overflow of internal debugger buffer (size 0x%X needed 0x%X)",
|
||||
"Possible overflow of internal debugger buffer (size 0x%X needed 0x%X)",
|
||||
ACPI_DEBUG_BUFFER_SIZE, (UINT32) ReturnObj->Length));
|
||||
}
|
||||
}
|
||||
|
||||
Cleanup:
|
||||
AcpiDbDeleteObjects (ObjInfo->ParamCount, Params);
|
||||
ACPI_FREE (ObjInfo);
|
||||
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
@ -380,6 +737,7 @@ void
|
||||
AcpiDbExecute (
|
||||
char *Name,
|
||||
char **Args,
|
||||
ACPI_OBJECT_TYPE *Types,
|
||||
UINT32 Flags)
|
||||
{
|
||||
ACPI_STATUS Status;
|
||||
@ -417,6 +775,7 @@ AcpiDbExecute (
|
||||
AcpiUtStrupr (NameString);
|
||||
AcpiGbl_DbMethodInfo.Name = NameString;
|
||||
AcpiGbl_DbMethodInfo.Args = Args;
|
||||
AcpiGbl_DbMethodInfo.Types = Types;
|
||||
AcpiGbl_DbMethodInfo.Flags = Flags;
|
||||
|
||||
ReturnObj.Pointer = NULL;
|
||||
@ -529,6 +888,8 @@ AcpiDbMethodThread (
|
||||
LocalInfo.Arguments[2] = LocalInfo.IndexOfThreadStr;
|
||||
LocalInfo.Arguments[3] = NULL;
|
||||
|
||||
LocalInfo.Types = LocalInfo.ArgTypes;
|
||||
|
||||
(void) AcpiOsSignalSemaphore (Info->InfoGate, 1);
|
||||
|
||||
for (i = 0; i < Info->NumLoops; i++)
|
||||
@ -696,6 +1057,12 @@ AcpiDbCreateExecutionThreads (
|
||||
AcpiGbl_DbMethodInfo.Arguments[1] = AcpiGbl_DbMethodInfo.IdOfThreadStr;
|
||||
AcpiGbl_DbMethodInfo.Arguments[2] = AcpiGbl_DbMethodInfo.IndexOfThreadStr;
|
||||
AcpiGbl_DbMethodInfo.Arguments[3] = NULL;
|
||||
|
||||
AcpiGbl_DbMethodInfo.Types = AcpiGbl_DbMethodInfo.ArgTypes;
|
||||
AcpiGbl_DbMethodInfo.ArgTypes[0] = ACPI_TYPE_INTEGER;
|
||||
AcpiGbl_DbMethodInfo.ArgTypes[1] = ACPI_TYPE_INTEGER;
|
||||
AcpiGbl_DbMethodInfo.ArgTypes[2] = ACPI_TYPE_INTEGER;
|
||||
|
||||
AcpiDbUInt32ToHexString (NumThreads, AcpiGbl_DbMethodInfo.NumThreadsStr);
|
||||
|
||||
AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo);
|
||||
|
@ -54,11 +54,6 @@
|
||||
|
||||
/* Local prototypes */
|
||||
|
||||
static char *
|
||||
AcpiDbGetNextToken (
|
||||
char *String,
|
||||
char **Next);
|
||||
|
||||
static UINT32
|
||||
AcpiDbGetLine (
|
||||
char *InputBuffer);
|
||||
@ -285,6 +280,10 @@ AcpiDbDisplayHelp (
|
||||
AcpiOsPrintf (" Call Run to next control method invocation\n");
|
||||
AcpiOsPrintf (" Debug <Namepath> [Arguments] Single Step a control method\n");
|
||||
AcpiOsPrintf (" Execute <Namepath> [Arguments] Execute control method\n");
|
||||
AcpiOsPrintf (" Hex Integer Integer method argument\n");
|
||||
AcpiOsPrintf (" \"Ascii String\" String method argument\n");
|
||||
AcpiOsPrintf (" (Byte List) Buffer method argument\n");
|
||||
AcpiOsPrintf (" [Package Element List] Package method argument\n");
|
||||
AcpiOsPrintf (" Go Allow method to run to completion\n");
|
||||
AcpiOsPrintf (" Information Display info about the current method\n");
|
||||
AcpiOsPrintf (" Into Step into (not over) a method call\n");
|
||||
@ -318,12 +317,15 @@ AcpiDbDisplayHelp (
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static char *
|
||||
char *
|
||||
AcpiDbGetNextToken (
|
||||
char *String,
|
||||
char **Next)
|
||||
char **Next,
|
||||
ACPI_OBJECT_TYPE *ReturnType)
|
||||
{
|
||||
char *Start;
|
||||
UINT32 Depth;
|
||||
ACPI_OBJECT_TYPE Type = ACPI_TYPE_INTEGER;
|
||||
|
||||
|
||||
/* At end of buffer? */
|
||||
@ -333,7 +335,7 @@ AcpiDbGetNextToken (
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/* Get rid of any spaces at the beginning */
|
||||
/* Remove any spaces at the beginning */
|
||||
|
||||
if (*String == ' ')
|
||||
{
|
||||
@ -348,22 +350,88 @@ AcpiDbGetNextToken (
|
||||
}
|
||||
}
|
||||
|
||||
if (*String == '"')
|
||||
switch (*String)
|
||||
{
|
||||
case '"':
|
||||
|
||||
/* This is a quoted string, scan until closing quote */
|
||||
|
||||
String++;
|
||||
Start = String;
|
||||
Type = ACPI_TYPE_STRING;
|
||||
|
||||
/* Find end of token */
|
||||
/* Find end of string */
|
||||
|
||||
while (*String && (*String != '"'))
|
||||
{
|
||||
String++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
|
||||
case '(':
|
||||
|
||||
/* This is the start of a buffer, scan until closing paren */
|
||||
|
||||
String++;
|
||||
Start = String;
|
||||
Type = ACPI_TYPE_BUFFER;
|
||||
|
||||
/* Find end of buffer */
|
||||
|
||||
while (*String && (*String != ')'))
|
||||
{
|
||||
String++;
|
||||
}
|
||||
break;
|
||||
|
||||
case '[':
|
||||
|
||||
/* This is the start of a package, scan until closing bracket */
|
||||
|
||||
String++;
|
||||
Depth = 1;
|
||||
Start = String;
|
||||
Type = ACPI_TYPE_PACKAGE;
|
||||
|
||||
/* Find end of package (closing bracket) */
|
||||
|
||||
while (*String)
|
||||
{
|
||||
/* Handle String package elements */
|
||||
|
||||
if (*String == '"')
|
||||
{
|
||||
/* Find end of string */
|
||||
|
||||
String++;
|
||||
while (*String && (*String != '"'))
|
||||
{
|
||||
String++;
|
||||
}
|
||||
if (!(*String))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (*String == '[')
|
||||
{
|
||||
Depth++; /* A nested package declaration */
|
||||
}
|
||||
else if (*String == ']')
|
||||
{
|
||||
Depth--;
|
||||
if (Depth == 0) /* Found final package closing bracket */
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
String++;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
Start = String;
|
||||
|
||||
/* Find end of token */
|
||||
@ -372,6 +440,7 @@ AcpiDbGetNextToken (
|
||||
{
|
||||
String++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!(*String))
|
||||
@ -384,6 +453,7 @@ AcpiDbGetNextToken (
|
||||
*Next = String + 1;
|
||||
}
|
||||
|
||||
*ReturnType = Type;
|
||||
return (Start);
|
||||
}
|
||||
|
||||
@ -416,7 +486,8 @@ AcpiDbGetLine (
|
||||
This = AcpiGbl_DbParsedBuf;
|
||||
for (i = 0; i < ACPI_DEBUGGER_MAX_ARGS; i++)
|
||||
{
|
||||
AcpiGbl_DbArgs[i] = AcpiDbGetNextToken (This, &Next);
|
||||
AcpiGbl_DbArgs[i] = AcpiDbGetNextToken (This, &Next,
|
||||
&AcpiGbl_DbArgTypes[i]);
|
||||
if (!AcpiGbl_DbArgs[i])
|
||||
{
|
||||
break;
|
||||
@ -575,7 +646,8 @@ AcpiDbCommandDispatch (
|
||||
break;
|
||||
|
||||
case CMD_DEBUG:
|
||||
AcpiDbExecute (AcpiGbl_DbArgs[1], &AcpiGbl_DbArgs[2], EX_SINGLE_STEP);
|
||||
AcpiDbExecute (AcpiGbl_DbArgs[1],
|
||||
&AcpiGbl_DbArgs[2], &AcpiGbl_DbArgTypes[2], EX_SINGLE_STEP);
|
||||
break;
|
||||
|
||||
case CMD_DISASSEMBLE:
|
||||
@ -601,7 +673,7 @@ AcpiDbCommandDispatch (
|
||||
|
||||
case CMD_EXECUTE:
|
||||
AcpiDbExecute (AcpiGbl_DbArgs[1],
|
||||
&AcpiGbl_DbArgs[2], EX_NO_SINGLE_STEP);
|
||||
&AcpiGbl_DbArgs[2], &AcpiGbl_DbArgTypes[2], EX_NO_SINGLE_STEP);
|
||||
break;
|
||||
|
||||
case CMD_FIND:
|
||||
@ -961,7 +1033,13 @@ AcpiDbUserCommands (
|
||||
|
||||
/* Get the user input line */
|
||||
|
||||
(void) AcpiOsGetLine (AcpiGbl_DbLineBuf);
|
||||
Status = AcpiOsGetLine (AcpiGbl_DbLineBuf,
|
||||
ACPI_DB_LINE_BUFFER_SIZE, NULL);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
ACPI_EXCEPTION ((AE_INFO, Status, "While parsing command line"));
|
||||
return (Status);
|
||||
}
|
||||
|
||||
/* Check for single or multithreaded debug */
|
||||
|
||||
|
@ -382,7 +382,7 @@ AcpiDbUInt32ToHexString (
|
||||
UINT32 Value,
|
||||
char *Buffer)
|
||||
{
|
||||
UINT8 i;
|
||||
int i;
|
||||
|
||||
|
||||
if (Value == 0)
|
||||
@ -391,10 +391,9 @@ AcpiDbUInt32ToHexString (
|
||||
return;
|
||||
}
|
||||
|
||||
ACPI_STRCPY (Buffer, "0x");
|
||||
Buffer[10] = '\0';
|
||||
Buffer[8] = '\0';
|
||||
|
||||
for (i = 9; i > 1; i--)
|
||||
for (i = 7; i >= 0; i--)
|
||||
{
|
||||
Buffer[i] = Converter [Value & 0x0F];
|
||||
Value = Value >> 4;
|
||||
|
@ -137,7 +137,13 @@ AcpiDbStartCommand (
|
||||
|
||||
/* Get the user input line */
|
||||
|
||||
(void) AcpiOsGetLine (AcpiGbl_DbLineBuf);
|
||||
Status = AcpiOsGetLine (AcpiGbl_DbLineBuf,
|
||||
ACPI_DB_LINE_BUFFER_SIZE, NULL);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
ACPI_EXCEPTION ((AE_INFO, Status, "While parsing command line"));
|
||||
return (Status);
|
||||
}
|
||||
}
|
||||
|
||||
Status = AcpiDbCommandDispatch (AcpiGbl_DbLineBuf, WalkState, Op);
|
||||
|
@ -200,7 +200,8 @@
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#define ACPI_DEBUGGER_MAX_ARGS 8 /* Must be max method args + 1 */
|
||||
#define ACPI_DEBUGGER_MAX_ARGS ACPI_METHOD_NUM_ARGS + 2 /* Max command line arguments */
|
||||
#define ACPI_DB_LINE_BUFFER_SIZE 512
|
||||
|
||||
#define ACPI_DEBUGGER_COMMAND_PROMPT '-'
|
||||
#define ACPI_DEBUGGER_EXECUTE_PROMPT '%'
|
||||
|
@ -277,6 +277,7 @@ void
|
||||
AcpiDbExecute (
|
||||
char *Name,
|
||||
char **Args,
|
||||
ACPI_OBJECT_TYPE *Types,
|
||||
UINT32 Flags);
|
||||
|
||||
void
|
||||
@ -357,6 +358,12 @@ AcpiDbUserCommands (
|
||||
char Prompt,
|
||||
ACPI_PARSE_OBJECT *Op);
|
||||
|
||||
char *
|
||||
AcpiDbGetNextToken (
|
||||
char *String,
|
||||
char **Next,
|
||||
ACPI_OBJECT_TYPE *ReturnType);
|
||||
|
||||
|
||||
/*
|
||||
* dbstats - Generation and display of ACPI table statistics
|
||||
|
@ -425,10 +425,11 @@ ACPI_EXTERN BOOLEAN AcpiGbl_DbOpt_ini_methods;
|
||||
ACPI_EXTERN BOOLEAN AcpiGbl_DbOpt_NoRegionSupport;
|
||||
|
||||
ACPI_EXTERN char *AcpiGbl_DbArgs[ACPI_DEBUGGER_MAX_ARGS];
|
||||
ACPI_EXTERN char AcpiGbl_DbLineBuf[80];
|
||||
ACPI_EXTERN char AcpiGbl_DbParsedBuf[80];
|
||||
ACPI_EXTERN char AcpiGbl_DbScopeBuf[40];
|
||||
ACPI_EXTERN char AcpiGbl_DbDebugFilename[40];
|
||||
ACPI_EXTERN ACPI_OBJECT_TYPE AcpiGbl_DbArgTypes[ACPI_DEBUGGER_MAX_ARGS];
|
||||
ACPI_EXTERN char AcpiGbl_DbLineBuf[ACPI_DB_LINE_BUFFER_SIZE];
|
||||
ACPI_EXTERN char AcpiGbl_DbParsedBuf[ACPI_DB_LINE_BUFFER_SIZE];
|
||||
ACPI_EXTERN char AcpiGbl_DbScopeBuf[80];
|
||||
ACPI_EXTERN char AcpiGbl_DbDebugFilename[80];
|
||||
ACPI_EXTERN BOOLEAN AcpiGbl_DbOutputToFile;
|
||||
ACPI_EXTERN char *AcpiGbl_DbBuffer;
|
||||
ACPI_EXTERN char *AcpiGbl_DbFilename;
|
||||
|
@ -1198,6 +1198,7 @@ typedef struct acpi_db_method_info
|
||||
UINT32 NumLoops;
|
||||
char Pathname[128];
|
||||
char **Args;
|
||||
ACPI_OBJECT_TYPE *Types;
|
||||
|
||||
/*
|
||||
* Arguments to be passed to method for the command
|
||||
@ -1206,6 +1207,7 @@ typedef struct acpi_db_method_info
|
||||
* Index of current thread inside all them created.
|
||||
*/
|
||||
char InitArgs;
|
||||
ACPI_OBJECT_TYPE ArgTypes[4];
|
||||
char *Arguments[4];
|
||||
char NumThreadsStr[11];
|
||||
char IdOfThreadStr[11];
|
||||
|
@ -376,9 +376,11 @@ AcpiOsRedirectOutput (
|
||||
/*
|
||||
* Debug input
|
||||
*/
|
||||
UINT32
|
||||
ACPI_STATUS
|
||||
AcpiOsGetLine (
|
||||
char *Buffer);
|
||||
char *Buffer,
|
||||
UINT32 BufferLength,
|
||||
UINT32 *BytesRead);
|
||||
|
||||
|
||||
/*
|
||||
|
@ -48,7 +48,7 @@
|
||||
|
||||
/* Current ACPICA subsystem version in YYYYMMDD format */
|
||||
|
||||
#define ACPI_CA_VERSION 0x20110413
|
||||
#define ACPI_CA_VERSION 0x20110527
|
||||
|
||||
#include <contrib/dev/acpica/include/actypes.h>
|
||||
#include <contrib/dev/acpica/include/actbl.h>
|
||||
|
@ -470,6 +470,7 @@ static const ACPI_PREDEFINED_INFO PredefinedNames[] =
|
||||
{{"_SWS", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_TC1", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_TC2", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_TDL", 0, ACPI_RTYPE_INTEGER}},
|
||||
{{"_TIP", 1, ACPI_RTYPE_INTEGER}},
|
||||
{{"_TIV", 1, ACPI_RTYPE_INTEGER}},
|
||||
{{"_TMP", 0, ACPI_RTYPE_INTEGER}},
|
||||
|
@ -311,18 +311,21 @@ AcpiOsVprintf (
|
||||
*
|
||||
* FUNCTION: AcpiOsGetLine
|
||||
*
|
||||
* PARAMETERS: fmt - Standard printf format
|
||||
* args - Argument list
|
||||
* PARAMETERS: Buffer - Where to return the command line
|
||||
* BufferLength - Maximum length of Buffer
|
||||
* BytesRead - Where the actual byte count is returned
|
||||
*
|
||||
* RETURN: Actual bytes read
|
||||
* RETURN: Status and actual bytes read
|
||||
*
|
||||
* DESCRIPTION: Formatted input with argument list pointer
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
UINT32
|
||||
ACPI_STATUS
|
||||
AcpiOsGetLine (
|
||||
char *Buffer)
|
||||
char *Buffer,
|
||||
UINT32 BufferLength,
|
||||
UINT32 *BytesRead)
|
||||
{
|
||||
UINT8 Temp;
|
||||
UINT32 i;
|
||||
@ -330,6 +333,11 @@ AcpiOsGetLine (
|
||||
|
||||
for (i = 0; ; i++)
|
||||
{
|
||||
if (i >= BufferLength)
|
||||
{
|
||||
return (AE_BUFFER_OVERFLOW);
|
||||
}
|
||||
|
||||
scanf ("%1c", &Temp);
|
||||
if (!Temp || Temp == '\n')
|
||||
{
|
||||
@ -345,7 +353,11 @@ AcpiOsGetLine (
|
||||
|
||||
/* Return the number of bytes in the string */
|
||||
|
||||
return (i);
|
||||
if (BytesRead)
|
||||
{
|
||||
*BytesRead = i;
|
||||
}
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
|
||||
|
@ -144,12 +144,28 @@ AcpiTbAddTable (
|
||||
}
|
||||
|
||||
/*
|
||||
* Originally, we checked the table signature for "SSDT" or "PSDT" here.
|
||||
* Next, we added support for OEMx tables, signature "OEM".
|
||||
* Valid tables were encountered with a null signature, so we've just
|
||||
* given up on validating the signature, since it seems to be a waste
|
||||
* of code. The original code was removed (05/2008).
|
||||
* Validate the incoming table signature.
|
||||
*
|
||||
* 1) Originally, we checked the table signature for "SSDT" or "PSDT".
|
||||
* 2) We added support for OEMx tables, signature "OEM".
|
||||
* 3) Valid tables were encountered with a null signature, so we just
|
||||
* gave up on validating the signature, (05/2008).
|
||||
* 4) We encountered non-AML tables such as the MADT, which caused
|
||||
* interpreter errors and kernel faults. So now, we once again allow
|
||||
* only "SSDT", "OEMx", and now, also a null signature. (05/2011).
|
||||
*/
|
||||
if ((TableDesc->Pointer->Signature[0] != 0x00) &&
|
||||
(!ACPI_COMPARE_NAME (TableDesc->Pointer->Signature, ACPI_SIG_SSDT)) &&
|
||||
(ACPI_STRNCMP (TableDesc->Pointer->Signature, "OEM", 3)))
|
||||
{
|
||||
ACPI_ERROR ((AE_INFO,
|
||||
"Table has invalid signature [%4.4s] (0x%8.8X), must be SSDT or OEMx",
|
||||
AcpiUtValidAcpiName (*(UINT32 *) TableDesc->Pointer->Signature) ?
|
||||
TableDesc->Pointer->Signature : "????",
|
||||
*(UINT32 *) TableDesc->Pointer->Signature));
|
||||
|
||||
return_ACPI_STATUS (AE_BAD_SIGNATURE);
|
||||
}
|
||||
|
||||
(void) AcpiUtAcquireMutex (ACPI_MTX_TABLES);
|
||||
|
||||
|
@ -47,20 +47,23 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
#include <dev/acpica/acpivar.h>
|
||||
|
||||
UINT32
|
||||
AcpiOsGetLine(char *Buffer)
|
||||
ACPI_STATUS
|
||||
AcpiOsGetLine(char *Buffer, UINT32 BufferLength, UINT32 *BytesRead)
|
||||
{
|
||||
#ifdef DDB
|
||||
char *cp;
|
||||
char *cp;
|
||||
|
||||
db_readline(Buffer, 80);
|
||||
for (cp = Buffer; *cp != 0; cp++)
|
||||
if (*cp == '\n')
|
||||
*cp = 0;
|
||||
return (AE_OK);
|
||||
cp = Buffer;
|
||||
if (db_readline(Buffer, BufferLength) > 0)
|
||||
while (*cp != '\0' && *cp != '\n' && *cp != '\r')
|
||||
cp++;
|
||||
*cp = '\0';
|
||||
if (BytesRead != NULL)
|
||||
*BytesRead = cp - Buffer;
|
||||
return (AE_OK);
|
||||
#else
|
||||
printf("AcpiOsGetLine called but no input support");
|
||||
return (AE_NOT_EXIST);
|
||||
printf("AcpiOsGetLine called but no input support");
|
||||
return (AE_NOT_EXIST);
|
||||
#endif /* DDB */
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user