Import ACPICA 20181213.
This commit is contained in:
parent
4d4b15a0e8
commit
d28459aaaf
65
changes.txt
65
changes.txt
@ -1,8 +1,69 @@
|
||||
----------------------------------------
|
||||
13 December 2018. Summary of changes for version 20181213:
|
||||
|
||||
|
||||
1) ACPICA Kernel-resident Subsystem:
|
||||
|
||||
Fixed some buffer length issues with the GenericSerialBus, related to two
|
||||
of the bidirectional protocols: AttribRawProcessBytes and AttribRawBytes,
|
||||
which are rarely seen in the field. For these, the LEN field of the ASL
|
||||
buffer is now ignored. Hans de Goede
|
||||
|
||||
Implemented a new object evaluation trace mechanism for control methods
|
||||
and data objects. This includes nested control methods. It is
|
||||
particularly useful for examining the ACPI execution during system
|
||||
initialization since the output is relatively terse. The flag below
|
||||
enables the output of the trace via the ACPI_DEBUG_PRINT_RAW interface:
|
||||
#define ACPI_LV_EVALUATION 0x00080000
|
||||
|
||||
Examples:
|
||||
Enter evaluation : _SB.PCI0._INI (Method)
|
||||
Exit evaluation : _SB.PCI0._INI
|
||||
Enter evaluation : _OSI (Method)
|
||||
Exit evaluation : _OSI
|
||||
Enter evaluation : _SB.PCI0.TEST (Method)
|
||||
Nested method call : _SB.PCI0.NST1
|
||||
Exit nested method : _SB.PCI0.NST1
|
||||
Exit evaluation : _SB.PCI0.TEST
|
||||
|
||||
Added two recently-defined _OSI strings. See
|
||||
https://docs.microsoft.com/en-us/windows-hardware/drivers/acpi/winacpi-
|
||||
osi.
|
||||
"Windows 2018"
|
||||
"Windows 2018.2"
|
||||
|
||||
Update for buffer-to-string conversions via the ToHexString ASL operator.
|
||||
A "0x" is now prepended to each of the hex values in the output string.
|
||||
This provides compatibility with other ACPI implementations. The ACPI
|
||||
specification is somewhat vague on this issue.
|
||||
Example output string after conversion:
|
||||
"0x01,0x02,0x03,0x04,0x05,0x06"
|
||||
|
||||
Return a run-time error for TermArg expressions within individual package
|
||||
elements. Although this is technically supported by the ASL grammar,
|
||||
other ACPI implementations do not support this either. Also, this fixes a
|
||||
fault if this type of construct is ever encountered (it never has been).
|
||||
|
||||
|
||||
2) iASL Compiler/Disassembler and Tools:
|
||||
|
||||
iASL: Implemented a new compile option (-ww) that will promote individual
|
||||
warnings and remarks to errors. This is intended to enhance the firmware
|
||||
build process.
|
||||
|
||||
AcpiExec: Implemented a new command-line option (-eo) to support the new
|
||||
object evaluation trace mechanism described above.
|
||||
|
||||
Disassembler: Added support to disassemble OEMx tables as AML/ASL tables
|
||||
instead of a "unknown table" message.
|
||||
|
||||
AcpiHelp: Improved support for the "special" predefined names such as
|
||||
_Lxx, _Exx, _EJx, _T_x, etc. For these, any legal hex value can now be
|
||||
used for "xx" and "x".
|
||||
|
||||
----------------------------------------
|
||||
31 October 2018. Summary of changes for version 20181031:
|
||||
|
||||
This release is available at https://acpica.org/downloads
|
||||
|
||||
|
||||
An Operation Region regression was fixed by properly adding address
|
||||
ranges to a global list during initialization. This allows OS to
|
||||
|
@ -171,7 +171,7 @@
|
||||
*/
|
||||
const AH_PREDEFINED_NAME AslPredefinedInfo[] =
|
||||
{
|
||||
AH_PREDEF ("_ACx", "Active Cooling", "Returns the active cooling policy threshold values"),
|
||||
AH_PREDEF ("_ACx", "Active Cooling, x=0-9", "Returns the active cooling policy threshold values"),
|
||||
AH_PREDEF ("_ADR", "Address", "Returns address of a device on parent bus, and resource field"),
|
||||
AH_PREDEF ("_AEI", "ACPI Event Interrupts", "Returns a list of GPIO events to be used as ACPI events"),
|
||||
AH_PREDEF ("_ALC", "Ambient Light Chromaticity", "Returns the ambient light color chromaticity"),
|
||||
@ -180,7 +180,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
|
||||
AH_PREDEF ("_ALP", "Ambient Light Polling", "Returns the ambient light sensor polling frequency"),
|
||||
AH_PREDEF ("_ALR", "Ambient Light Response", "Returns the ambient light brightness to display brightness mappings"),
|
||||
AH_PREDEF ("_ALT", "Ambient Light Temperature", "Returns the ambient light color temperature"),
|
||||
AH_PREDEF ("_ALx", "Active List", "Returns a list of active cooling device objects"),
|
||||
AH_PREDEF ("_ALx", "Active List, x=0-9", "Returns a list of active cooling device objects"),
|
||||
AH_PREDEF ("_ART", "Active Cooling Relationship Table", "Returns thermal relationship information between platform devices and fan devices"),
|
||||
AH_PREDEF ("_ASI", "Address Space Id", "Resource Descriptor field"),
|
||||
AH_PREDEF ("_ASZ", "Access Size", "Resource Descriptor field"),
|
||||
@ -237,11 +237,11 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
|
||||
AH_PREDEF ("_DSS", "Device Set State", "Sets the display device state"),
|
||||
AH_PREDEF ("_DSW", "Device Sleep Wake", "Sets the sleep and wake transition states for a device"),
|
||||
AH_PREDEF ("_DTI", "Device Temperature Indication", "Conveys native device temperature to the platform"),
|
||||
AH_PREDEF ("_Exx", "Edge-Triggered GPE", "Method executed as a result of a general-purpose event"),
|
||||
AH_PREDEF ("_Exx", "Edge-Triggered GPE, xx=0x00-0xFF", "Method executed as a result of a general-purpose event"),
|
||||
AH_PREDEF ("_EC_", "Embedded Controller", "returns EC offset and query information"),
|
||||
AH_PREDEF ("_EDL", "Eject Device List", "Returns a list of devices that are dependent on a device (docking)"),
|
||||
AH_PREDEF ("_EJD", "Ejection Dependent Device", "Returns the name of dependent (parent) device (docking)"),
|
||||
AH_PREDEF ("_EJx", "Eject Device", "Begin or cancel a device ejection request (docking)"),
|
||||
AH_PREDEF ("_EJx", "Eject Device, x=0-9", "Begin or cancel a device ejection request (docking)"),
|
||||
AH_PREDEF ("_END", "Endianness", "Endian orientation, Resource Descriptor field"),
|
||||
AH_PREDEF ("_EVT", "Event", "Event method for GPIO events"),
|
||||
AH_PREDEF ("_FDE", "Floppy Disk Enumerate", "Returns floppy disk configuration information"),
|
||||
@ -281,7 +281,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
|
||||
AH_PREDEF ("_INT", "Interrupts", "Interrupt mask bits, Resource Descriptor field"),
|
||||
AH_PREDEF ("_IOR", "I/O Restriction", "Restriction type, Resource Descriptor field"),
|
||||
AH_PREDEF ("_IRC", "Inrush Current", "Presence indicates that a device has a significant inrush current draw"),
|
||||
AH_PREDEF ("_Lxx", "Level-Triggered GPE", "Control method executed as a result of a general-purpose event"),
|
||||
AH_PREDEF ("_Lxx", "Level-Triggered GPE, xx=0x00-0xFF", "Control method executed as a result of a general-purpose event"),
|
||||
AH_PREDEF ("_LCK", "Lock Device", "Locks or unlocks a device (docking)"),
|
||||
AH_PREDEF ("_LEN", "Length", "Range length, Resource Descriptor field"),
|
||||
AH_PREDEF ("_LID", "Lid Status", "Returns the open/closed status of the lid on a mobile system"),
|
||||
@ -358,7 +358,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
|
||||
AH_PREDEF ("_PTS", "Prepare To Sleep", "Inform the platform of an impending sleep transition"),
|
||||
AH_PREDEF ("_PUR", "Processor Utilization Request", "Returns the number of processors that the platform would like to idle"),
|
||||
AH_PREDEF ("_PXM", "Device Proximity", "Returns a device's proximity domain identifier"),
|
||||
AH_PREDEF ("_Qxx", "EC Query", "Embedded Controller query and SMBus Alarm control method"),
|
||||
AH_PREDEF ("_Qxx", "EC Query, xx=0x00-0xFF", "Embedded Controller query and SMBus Alarm control method"),
|
||||
AH_PREDEF ("_RBO", "Register Bit Offset", "Resource Descriptor field"),
|
||||
AH_PREDEF ("_RBW", "Register Bit Width", "Resource Descriptor field"),
|
||||
AH_PREDEF ("_RDI", "Resource Dependencies for Idle", "Returns a list of dependencies for idle states"),
|
||||
@ -413,7 +413,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
|
||||
AH_PREDEF ("_SUB", "Subsystem ID", "Returns the subsystem ID for a device"),
|
||||
AH_PREDEF ("_SUN", "Slot User Number", "Returns the slot unique ID number"),
|
||||
AH_PREDEF ("_SWS", "System Wake Source", "Returns the source event that caused the system to wake"),
|
||||
AH_PREDEF ("_T_x", "Emitted by ASL Compiler", "Reserved for use by ASL compilers"),
|
||||
AH_PREDEF ("_T_x", "Emitted by ASL Compiler, x=0-9, A-Z", "Reserved for use by ASL compilers"),
|
||||
AH_PREDEF ("_TC1", "Thermal Constant 1", "Returns TC1 for the passive cooling formula"),
|
||||
AH_PREDEF ("_TC2", "Thermal Constant 2", "Returns TC2 for the passive cooling formula"),
|
||||
AH_PREDEF ("_TDL", "T-State Depth Limit", "Returns the _TSS entry number of the lowest power throttling state"),
|
||||
@ -447,7 +447,7 @@ const AH_PREDEFINED_NAME AslPredefinedInfo[] =
|
||||
AH_PREDEF ("_VAL", "Pin Configuration Value", "Resource Descriptor field"),
|
||||
AH_PREDEF ("_VEN", "Vendor Data", "Resource Descriptor field"),
|
||||
AH_PREDEF ("_VPO", "Video Post Options", "Returns the implemented video post options"),
|
||||
AH_PREDEF ("_Wxx", "Wake Event", "Method executed as a result of a wake event"),
|
||||
AH_PREDEF ("_Wxx", "Wake Event, xx=0x00-0xFF", "Method executed as a result of a wake event"),
|
||||
AH_PREDEF ("_WAK", "Wake", "Inform AML that the system has just awakened"),
|
||||
AH_PREDEF ("_WPC", "Wireless Power Calibration", "Calibrate power and notify wireless device"),
|
||||
AH_PREDEF ("_WPP", "Wireless Power Polling", "Get recommended polling interval"),
|
||||
|
@ -325,6 +325,8 @@ AcpiDmClearTempList (
|
||||
* FUNCTION: AcpiDmIsSwitchBlock
|
||||
*
|
||||
* PARAMETERS: Op - While Object
|
||||
* Temp - Where the compiler temp name is returned
|
||||
* (_T_x)
|
||||
*
|
||||
* RETURN: TRUE if While block can be converted to a Switch/Case block
|
||||
*
|
||||
@ -550,6 +552,10 @@ AcpiDmIsSwitchBlock (
|
||||
if (CurrentOp->Common.AmlOpcode == AML_ELSE_OP)
|
||||
{
|
||||
CurrentOp = CurrentOp->Common.Next;
|
||||
if (!CurrentOp)
|
||||
{
|
||||
return (FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
/* Ignore the Break Op */
|
||||
|
@ -773,12 +773,6 @@ CgWriteNode (
|
||||
return;
|
||||
}
|
||||
|
||||
if ((Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) &&
|
||||
AslGbl_DoExternals == FALSE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Op->Asl.FinalAmlLength = 0;
|
||||
|
||||
switch (Op->Asl.AmlOpcode)
|
||||
|
@ -388,23 +388,20 @@ CmDoCompile (
|
||||
|
||||
/* Resolve External Declarations */
|
||||
|
||||
if (AslGbl_DoExternals)
|
||||
{
|
||||
Event = UtBeginEvent ("Resolve all Externals");
|
||||
DbgPrint (ASL_DEBUG_OUTPUT, "\nResolve Externals\n\n");
|
||||
Event = UtBeginEvent ("Resolve all Externals");
|
||||
DbgPrint (ASL_DEBUG_OUTPUT, "\nResolve Externals\n\n");
|
||||
|
||||
if (AslGbl_DoExternalsInPlace)
|
||||
{
|
||||
TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD,
|
||||
ExAmlExternalWalkBegin, NULL, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_TWICE,
|
||||
ExAmlExternalWalkBegin, ExAmlExternalWalkEnd, NULL);
|
||||
}
|
||||
UtEndEvent (Event);
|
||||
if (AslGbl_DoExternalsInPlace)
|
||||
{
|
||||
TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_DOWNWARD,
|
||||
ExAmlExternalWalkBegin, NULL, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
TrWalkParseTree (AslGbl_ParseTreeRoot, ASL_WALK_VISIT_TWICE,
|
||||
ExAmlExternalWalkBegin, ExAmlExternalWalkEnd, NULL);
|
||||
}
|
||||
UtEndEvent (Event);
|
||||
|
||||
/*
|
||||
* Semantic analysis. This can happen only after the
|
||||
|
@ -474,6 +474,10 @@ ACPI_STATUS
|
||||
AslExpectException (
|
||||
char *MessageIdString);
|
||||
|
||||
ACPI_STATUS
|
||||
AslElevateException (
|
||||
char *MessageIdString);
|
||||
|
||||
ACPI_STATUS
|
||||
AslDisableException (
|
||||
char *MessageIdString);
|
||||
|
@ -201,6 +201,11 @@ AePrintSubError (
|
||||
FILE *OutputFile,
|
||||
ASL_ERROR_MSG *Enode);
|
||||
|
||||
static UINT8
|
||||
GetModifiedLevel (
|
||||
UINT8 Level,
|
||||
UINT16 MessageId);
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
@ -968,11 +973,12 @@ AslLogNewError (
|
||||
ASL_ERROR_MSG *SubError)
|
||||
{
|
||||
ASL_ERROR_MSG *Enode = NULL;
|
||||
UINT8 ModifiedLevel = GetModifiedLevel (Level, MessageId);
|
||||
|
||||
|
||||
AslInitEnode (&Enode, Level, MessageId, LineNumber, LogicalLineNumber,
|
||||
LogicalByteOffset, Column, Filename, Message, SourceLine,
|
||||
SubError);
|
||||
AslInitEnode (&Enode, ModifiedLevel, MessageId, LineNumber,
|
||||
LogicalLineNumber, LogicalByteOffset, Column, Filename, Message,
|
||||
SourceLine, SubError);
|
||||
|
||||
/* Add the new node to the error node list */
|
||||
|
||||
@ -985,7 +991,7 @@ AslLogNewError (
|
||||
AePrintException (ASL_FILE_STDERR, Enode, NULL);
|
||||
}
|
||||
|
||||
AslGbl_ExceptionCount[Level]++;
|
||||
AslGbl_ExceptionCount[ModifiedLevel]++;
|
||||
if (AslGbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT)
|
||||
{
|
||||
printf ("\nMaximum error count (%u) exceeded\n", ASL_MAX_ERROR_COUNT);
|
||||
@ -999,6 +1005,44 @@ AslLogNewError (
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: GetModifiedLevel
|
||||
*
|
||||
* PARAMETERS: Level - Seriousness (Warning/error, etc.)
|
||||
* MessageId - Index into global message buffer
|
||||
*
|
||||
* RETURN: UINT8 - modified level
|
||||
*
|
||||
* DESCRIPTION: Get the modified level of exception codes that are reported as
|
||||
* errors from the -ww option.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static UINT8
|
||||
GetModifiedLevel (
|
||||
UINT8 Level,
|
||||
UINT16 MessageId)
|
||||
{
|
||||
UINT16 i;
|
||||
UINT16 ExceptionCode;
|
||||
|
||||
|
||||
ExceptionCode = AeBuildFullExceptionCode (Level, MessageId);
|
||||
|
||||
for (i = 0; i < AslGbl_ElevatedMessagesIndex; i++)
|
||||
{
|
||||
if (ExceptionCode == AslGbl_ElevatedMessages[i])
|
||||
{
|
||||
return (ASL_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
return (Level);
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AslIsExceptionIgnored
|
||||
@ -1155,6 +1199,51 @@ AslDisableException (
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AslElevateException
|
||||
*
|
||||
* PARAMETERS: MessageIdString - ID of excepted exception during compile
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Enter a message ID into the global elevated exceptions table.
|
||||
* These messages will be considered as compilation errors.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
ACPI_STATUS
|
||||
AslElevateException (
|
||||
char *MessageIdString)
|
||||
{
|
||||
UINT32 MessageId;
|
||||
|
||||
|
||||
/* Convert argument to an integer and validate it */
|
||||
|
||||
MessageId = (UINT32) strtoul (MessageIdString, NULL, 0);
|
||||
|
||||
if (MessageId > 6999)
|
||||
{
|
||||
printf ("\"%s\" is not a valid warning/remark/erro ID\n",
|
||||
MessageIdString);
|
||||
return (AE_BAD_PARAMETER);
|
||||
}
|
||||
|
||||
/* Insert value into the global expected message array */
|
||||
|
||||
if (AslGbl_ElevatedMessagesIndex >= ASL_MAX_ELEVATED_MESSAGES)
|
||||
{
|
||||
printf ("Too many messages have been registered as elevated (max %d)\n",
|
||||
ASL_MAX_DISABLED_MESSAGES);
|
||||
return (AE_LIMIT);
|
||||
}
|
||||
|
||||
AslGbl_ElevatedMessages[AslGbl_ExpectedMessagesIndex] = MessageId;
|
||||
AslGbl_ElevatedMessagesIndex++;
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AslIsExceptionDisabled
|
||||
|
@ -255,6 +255,7 @@ extern int AslCompilerdebug;
|
||||
#define ASL_STRING_BUFFER_SIZE (1024 * 32) /* 32k */
|
||||
#define ASL_MAX_DISABLED_MESSAGES 32
|
||||
#define ASL_MAX_EXPECTED_MESSAGES 32
|
||||
#define ASL_MAX_ELEVATED_MESSAGES 32
|
||||
#define HEX_TABLE_LINE_SIZE 8
|
||||
#define HEX_LISTING_LINE_SIZE 8
|
||||
|
||||
@ -319,7 +320,6 @@ ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_AllExceptionsDisable
|
||||
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_PruneParseTree, FALSE);
|
||||
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DoTypechecking, TRUE);
|
||||
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_EnableReferenceTypechecking, FALSE);
|
||||
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DoExternals, TRUE);
|
||||
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DoExternalsInPlace, FALSE);
|
||||
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_DoAslConversion, FALSE);
|
||||
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (AslGbl_OptimizeTrivialParseNodes, TRUE);
|
||||
@ -394,6 +394,7 @@ ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_CurrentAmlOffset, 0)
|
||||
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_CurrentLine, 0);
|
||||
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_DisabledMessagesIndex, 0);
|
||||
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_ExpectedMessagesIndex, 0);
|
||||
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_ElevatedMessagesIndex, 0);
|
||||
ASL_EXTERN UINT8 ASL_INIT_GLOBAL (AslGbl_HexBytesWereWritten, FALSE);
|
||||
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_NumNamespaceObjects, 0);
|
||||
ASL_EXTERN UINT32 ASL_INIT_GLOBAL (AslGbl_ReservedMethods, 0);
|
||||
@ -435,6 +436,7 @@ ASL_EXTERN char AslGbl_StringBuffer[ASL_STRING_BUFFER_SIZE];
|
||||
ASL_EXTERN char AslGbl_StringBuffer2[ASL_STRING_BUFFER_SIZE];
|
||||
ASL_EXTERN UINT32 AslGbl_DisabledMessages[ASL_MAX_DISABLED_MESSAGES];
|
||||
ASL_EXTERN ASL_EXPECTED_MESSAGE AslGbl_ExpectedMessages[ASL_MAX_EXPECTED_MESSAGES];
|
||||
ASL_EXTERN UINT32 AslGbl_ElevatedMessages[ASL_MAX_ELEVATED_MESSAGES];
|
||||
|
||||
|
||||
#endif /* __ASLGLOBAL_H */
|
||||
|
@ -209,6 +209,7 @@ Usage (
|
||||
ACPI_OPTION ("-vx <messageid>", "Expect a specific warning, remark, or error");
|
||||
ACPI_OPTION ("-w <1|2|3>", "Set warning reporting level");
|
||||
ACPI_OPTION ("-we", "Report warnings as errors");
|
||||
ACPI_OPTION ("-ww <messageid>", "Report specific warning or remark as error");
|
||||
|
||||
printf ("\nAML Bytecode Generation (*.aml):\n");
|
||||
ACPI_OPTION ("-oa", "Disable all optimizations (compatibility mode)");
|
||||
|
@ -519,10 +519,7 @@ CgGenerateAmlLengths (
|
||||
|
||||
case PARSEOP_EXTERNAL:
|
||||
|
||||
if (AslGbl_DoExternals == TRUE)
|
||||
{
|
||||
CgGenerateAmlOpcodeLength (Op);
|
||||
}
|
||||
CgGenerateAmlOpcodeLength (Op);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -927,15 +927,6 @@ OpcGenerateAmlOpcode (
|
||||
AslGbl_HasIncludeFiles = TRUE;
|
||||
break;
|
||||
|
||||
case PARSEOP_EXTERNAL:
|
||||
|
||||
if (AslGbl_DoExternals == FALSE)
|
||||
{
|
||||
Op->Asl.Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
|
||||
Op->Asl.Child->Asl.Next->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG;
|
||||
}
|
||||
break;
|
||||
|
||||
case PARSEOP_TIMER:
|
||||
|
||||
if (AcpiGbl_IntegerBitWidth == 32)
|
||||
|
@ -982,6 +982,23 @@ AslDoOptions (
|
||||
AslGbl_WarningsAsErrors = TRUE;
|
||||
break;
|
||||
|
||||
case 'w':
|
||||
|
||||
/* Get the required argument */
|
||||
|
||||
if (AcpiGetoptArgument (argc, argv))
|
||||
{
|
||||
return (-1);
|
||||
}
|
||||
|
||||
Status = AslElevateException (AcpiGbl_Optarg);
|
||||
if (ACPI_FAILURE (Status))
|
||||
{
|
||||
return (-1);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
|
||||
printf ("Unknown option: -w%s\n", AcpiGbl_Optarg);
|
||||
|
@ -460,11 +460,7 @@ TrTransformSubtree (
|
||||
|
||||
case PARSEOP_EXTERNAL:
|
||||
|
||||
if (AslGbl_DoExternals == TRUE)
|
||||
{
|
||||
ExDoExternal (Op);
|
||||
}
|
||||
|
||||
ExDoExternal (Op);
|
||||
break;
|
||||
|
||||
case PARSEOP___METHOD__:
|
||||
|
@ -720,6 +720,8 @@ AcpiDsCallControlMethod (
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
NextWalkState->MethodNestingDepth = ThisWalkState->MethodNestingDepth + 1;
|
||||
|
||||
/*
|
||||
* Delete the operands on the previous walkstate operand stack
|
||||
* (they were copied to new objects)
|
||||
@ -738,6 +740,16 @@ AcpiDsCallControlMethod (
|
||||
"**** Begin nested execution of [%4.4s] **** WalkState=%p\n",
|
||||
MethodNode->Name.Ascii, NextWalkState));
|
||||
|
||||
ThisWalkState->MethodPathname = AcpiNsGetNormalizedPathname (MethodNode, TRUE);
|
||||
ThisWalkState->MethodIsNested = TRUE;
|
||||
|
||||
/* Optional object evaluation log */
|
||||
|
||||
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION,
|
||||
"%-26s: %*s%s\n", " Nested method call",
|
||||
NextWalkState->MethodNestingDepth * 3, " ",
|
||||
&ThisWalkState->MethodPathname[1]));
|
||||
|
||||
/* Invoke an internal method if necessary */
|
||||
|
||||
if (ObjDesc->Method.InfoFlags & ACPI_METHOD_INTERNAL_ONLY)
|
||||
|
@ -161,7 +161,6 @@
|
||||
ACPI_MODULE_NAME ("dsobject")
|
||||
|
||||
|
||||
#ifndef ACPI_NO_METHOD_EXECUTION
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDsBuildInternalObject
|
||||
@ -460,7 +459,6 @@ AcpiDsCreateNode (
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
|
||||
#endif /* ACPI_NO_METHOD_EXECUTION */
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
@ -571,9 +569,7 @@ AcpiDsInitObjectFromOp (
|
||||
|
||||
/* Truncate value if we are executing from a 32-bit ACPI table */
|
||||
|
||||
#ifndef ACPI_NO_METHOD_EXECUTION
|
||||
(void) AcpiExTruncateFor32bitTable (ObjDesc);
|
||||
#endif
|
||||
break;
|
||||
|
||||
case AML_REVISION_OP:
|
||||
@ -594,7 +590,6 @@ AcpiDsInitObjectFromOp (
|
||||
|
||||
ObjDesc->Integer.Value = Op->Common.Value.Integer;
|
||||
|
||||
#ifndef ACPI_NO_METHOD_EXECUTION
|
||||
if (AcpiExTruncateFor32bitTable (ObjDesc))
|
||||
{
|
||||
/* Warn if we found a 64-bit constant in a 32-bit table */
|
||||
@ -604,7 +599,6 @@ AcpiDsInitObjectFromOp (
|
||||
ACPI_FORMAT_UINT64 (Op->Common.Value.Integer),
|
||||
(UINT32) ObjDesc->Integer.Value));
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -642,12 +636,10 @@ AcpiDsInitObjectFromOp (
|
||||
ObjDesc->Reference.Value = ((UINT32) Opcode) - AML_FIRST_LOCAL_OP;
|
||||
ObjDesc->Reference.Class = ACPI_REFCLASS_LOCAL;
|
||||
|
||||
#ifndef ACPI_NO_METHOD_EXECUTION
|
||||
Status = AcpiDsMethodDataGetNode (ACPI_REFCLASS_LOCAL,
|
||||
ObjDesc->Reference.Value, WalkState,
|
||||
ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE,
|
||||
&ObjDesc->Reference.Object));
|
||||
#endif
|
||||
break;
|
||||
|
||||
case AML_TYPE_METHOD_ARGUMENT:
|
||||
@ -657,12 +649,10 @@ AcpiDsInitObjectFromOp (
|
||||
ObjDesc->Reference.Value = ((UINT32) Opcode) - AML_FIRST_ARG_OP;
|
||||
ObjDesc->Reference.Class = ACPI_REFCLASS_ARG;
|
||||
|
||||
#ifndef ACPI_NO_METHOD_EXECUTION
|
||||
Status = AcpiDsMethodDataGetNode (ACPI_REFCLASS_ARG,
|
||||
ObjDesc->Reference.Value, WalkState,
|
||||
ACPI_CAST_INDIRECT_PTR (ACPI_NAMESPACE_NODE,
|
||||
&ObjDesc->Reference.Object));
|
||||
#endif
|
||||
break;
|
||||
|
||||
default: /* Object name or Debug object */
|
||||
|
@ -308,6 +308,32 @@ AcpiDsBuildInternalPackageObj (
|
||||
{
|
||||
if (Arg->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP)
|
||||
{
|
||||
if (!Arg->Common.Node)
|
||||
{
|
||||
/*
|
||||
* This is the case where an expression has returned a value.
|
||||
* The use of expressions (TermArgs) within individual
|
||||
* package elements is not supported by the AML interpreter,
|
||||
* even though the ASL grammar supports it. Example:
|
||||
*
|
||||
* Name (INT1, 0x1234)
|
||||
*
|
||||
* Name (PKG3, Package () {
|
||||
* Add (INT1, 0xAAAA0000)
|
||||
* })
|
||||
*
|
||||
* 1) No known AML interpreter supports this type of construct
|
||||
* 2) This fixes a fault if the construct is encountered
|
||||
*/
|
||||
ACPI_EXCEPTION ((AE_INFO, AE_SUPPORT,
|
||||
"Expressions within package elements are not supported"));
|
||||
|
||||
/* Cleanup the return object, it is not needed */
|
||||
|
||||
AcpiUtRemoveReference (WalkState->Results->Results.ObjDesc[0]);
|
||||
return_ACPI_STATUS (AE_SUPPORT);
|
||||
}
|
||||
|
||||
if (Arg->Common.Node->Type == ACPI_TYPE_METHOD)
|
||||
{
|
||||
/*
|
||||
|
@ -209,7 +209,6 @@ AcpiDsClearImplicitReturn (
|
||||
}
|
||||
|
||||
|
||||
#ifndef ACPI_NO_METHOD_EXECUTION
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiDsDoImplicitReturn
|
||||
@ -583,7 +582,6 @@ AcpiDsClearOperands (
|
||||
WalkState->NumOperands = 0;
|
||||
return_VOID;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
@ -221,12 +221,10 @@ AcpiDsInitCallbacks (
|
||||
|
||||
/* Execution pass */
|
||||
|
||||
#ifndef ACPI_NO_METHOD_EXECUTION
|
||||
WalkState->ParseFlags |= ACPI_PARSE_EXECUTE |
|
||||
ACPI_PARSE_DELETE_TREE;
|
||||
WalkState->DescendingCallback = AcpiDsExecBeginOp;
|
||||
WalkState->AscendingCallback = AcpiDsExecEndOp;
|
||||
#endif
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -517,7 +515,7 @@ AcpiDsLoad1BeginOp (
|
||||
|
||||
/* Initialize the op */
|
||||
|
||||
#if (defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY))
|
||||
#ifdef ACPI_CONSTANT_EVAL_ONLY
|
||||
Op->Named.Path = Path;
|
||||
#endif
|
||||
|
||||
@ -580,7 +578,6 @@ AcpiDsLoad1EndOp (
|
||||
|
||||
ObjectType = WalkState->OpInfo->ObjectType;
|
||||
|
||||
#ifndef ACPI_NO_METHOD_EXECUTION
|
||||
if (WalkState->OpInfo->Flags & AML_FIELD)
|
||||
{
|
||||
/*
|
||||
@ -626,7 +623,6 @@ AcpiDsLoad1EndOp (
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (Op->Common.AmlOpcode == AML_NAME_OP)
|
||||
{
|
||||
|
@ -529,10 +529,8 @@ AcpiDsLoad2EndOp (
|
||||
ACPI_NAMESPACE_NODE *Node;
|
||||
ACPI_PARSE_OBJECT *Arg;
|
||||
ACPI_NAMESPACE_NODE *NewNode;
|
||||
#ifndef ACPI_NO_METHOD_EXECUTION
|
||||
UINT32 i;
|
||||
UINT8 RegionSpace;
|
||||
#endif
|
||||
|
||||
|
||||
ACPI_FUNCTION_TRACE (DsLoad2EndOp);
|
||||
@ -622,7 +620,6 @@ AcpiDsLoad2EndOp (
|
||||
|
||||
switch (WalkState->OpInfo->Type)
|
||||
{
|
||||
#ifndef ACPI_NO_METHOD_EXECUTION
|
||||
|
||||
case AML_TYPE_CREATE_FIELD:
|
||||
/*
|
||||
@ -718,13 +715,11 @@ AcpiDsLoad2EndOp (
|
||||
}
|
||||
|
||||
break;
|
||||
#endif /* ACPI_NO_METHOD_EXECUTION */
|
||||
|
||||
case AML_TYPE_NAMED_COMPLEX:
|
||||
|
||||
switch (Op->Common.AmlOpcode)
|
||||
{
|
||||
#ifndef ACPI_NO_METHOD_EXECUTION
|
||||
case AML_REGION_OP:
|
||||
case AML_DATA_REGION_OP:
|
||||
|
||||
@ -809,7 +804,6 @@ AcpiDsLoad2EndOp (
|
||||
}
|
||||
break;
|
||||
|
||||
#endif /* ACPI_NO_METHOD_EXECUTION */
|
||||
|
||||
default:
|
||||
|
||||
|
@ -733,7 +733,7 @@ AcpiDsCreateWalkState (
|
||||
|
||||
/* Init the method args/local */
|
||||
|
||||
#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))
|
||||
#ifndef ACPI_CONSTANT_EVAL_ONLY
|
||||
AcpiDsMethodDataInit (WalkState);
|
||||
#endif
|
||||
|
||||
|
@ -496,7 +496,7 @@ AcpiExConvertToAscii (
|
||||
|
||||
/* HexLength: 2 ascii hex chars per data byte */
|
||||
|
||||
HexLength = ACPI_MUL_2 (DataWidth);
|
||||
HexLength = (DataWidth * 2);
|
||||
for (i = 0, j = (HexLength-1); i < HexLength; i++, j--)
|
||||
{
|
||||
/* Get one hex digit, most significant digits first */
|
||||
@ -539,7 +539,8 @@ AcpiExConvertToAscii (
|
||||
*
|
||||
* RETURN: Status
|
||||
*
|
||||
* DESCRIPTION: Convert an ACPI Object to a string
|
||||
* DESCRIPTION: Convert an ACPI Object to a string. Supports both implicit
|
||||
* and explicit conversions and related rules.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
@ -574,9 +575,11 @@ AcpiExConvertToString (
|
||||
switch (Type)
|
||||
{
|
||||
case ACPI_EXPLICIT_CONVERT_DECIMAL:
|
||||
|
||||
/* Make room for maximum decimal number */
|
||||
|
||||
/*
|
||||
* From ToDecimalString, integer source.
|
||||
*
|
||||
* Make room for the maximum decimal number size
|
||||
*/
|
||||
StringLength = ACPI_MAX_DECIMAL_DIGITS;
|
||||
Base = 10;
|
||||
break;
|
||||
@ -620,8 +623,10 @@ AcpiExConvertToString (
|
||||
{
|
||||
case ACPI_EXPLICIT_CONVERT_DECIMAL: /* Used by ToDecimalString */
|
||||
/*
|
||||
* From ACPI: "If Data is a buffer, it is converted to a string of
|
||||
* decimal values separated by commas."
|
||||
* Explicit conversion from the ToDecimalString ASL operator.
|
||||
*
|
||||
* From ACPI: "If the input is a buffer, it is converted to a
|
||||
* a string of decimal values separated by commas."
|
||||
*/
|
||||
Base = 10;
|
||||
|
||||
@ -648,20 +653,29 @@ AcpiExConvertToString (
|
||||
|
||||
case ACPI_IMPLICIT_CONVERT_HEX:
|
||||
/*
|
||||
* Implicit buffer-to-string conversion
|
||||
*
|
||||
* From the ACPI spec:
|
||||
*"The entire contents of the buffer are converted to a string of
|
||||
* "The entire contents of the buffer are converted to a string of
|
||||
* two-character hexadecimal numbers, each separated by a space."
|
||||
*
|
||||
* Each hex number is prefixed with 0x (11/2018)
|
||||
*/
|
||||
Separator = ' ';
|
||||
StringLength = (ObjDesc->Buffer.Length * 3);
|
||||
StringLength = (ObjDesc->Buffer.Length * 5);
|
||||
break;
|
||||
|
||||
case ACPI_EXPLICIT_CONVERT_HEX: /* Used by ToHexString */
|
||||
case ACPI_EXPLICIT_CONVERT_HEX:
|
||||
/*
|
||||
* Explicit conversion from the ToHexString ASL operator.
|
||||
*
|
||||
* From ACPI: "If Data is a buffer, it is converted to a string of
|
||||
* hexadecimal values separated by commas."
|
||||
*
|
||||
* Each hex number is prefixed with 0x (11/2018)
|
||||
*/
|
||||
StringLength = (ObjDesc->Buffer.Length * 3);
|
||||
Separator = ',';
|
||||
StringLength = (ObjDesc->Buffer.Length * 5);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -692,9 +706,20 @@ AcpiExConvertToString (
|
||||
*/
|
||||
for (i = 0; i < ObjDesc->Buffer.Length; i++)
|
||||
{
|
||||
if (Base == 16)
|
||||
{
|
||||
/* Emit 0x prefix for explict/implicit hex conversion */
|
||||
|
||||
*NewBuf++ = '0';
|
||||
*NewBuf++ = 'x';
|
||||
}
|
||||
|
||||
NewBuf += AcpiExConvertToAscii (
|
||||
(UINT64) ObjDesc->Buffer.Pointer[i], Base, NewBuf, 1);
|
||||
*NewBuf++ = Separator; /* each separated by a comma or space */
|
||||
|
||||
/* Each digit is separated by either a comma or space */
|
||||
|
||||
*NewBuf++ = Separator;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -161,7 +161,6 @@
|
||||
ACPI_MODULE_NAME ("excreate")
|
||||
|
||||
|
||||
#ifndef ACPI_NO_METHOD_EXECUTION
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiExCreateAlias
|
||||
@ -573,7 +572,6 @@ AcpiExCreatePowerResource (
|
||||
AcpiUtRemoveReference (ObjDesc);
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
@ -460,9 +460,9 @@ AcpiExOpcode_2A_1T_1R (
|
||||
* NOTE: A length of zero is ok, and will create a zero-length, null
|
||||
* terminated string.
|
||||
*/
|
||||
while ((Length < Operand[0]->Buffer.Length) &&
|
||||
(Length < Operand[1]->Integer.Value) &&
|
||||
(Operand[0]->Buffer.Pointer[Length]))
|
||||
while ((Length < Operand[0]->Buffer.Length) && /* Length of input buffer */
|
||||
(Length < Operand[1]->Integer.Value) && /* Length operand */
|
||||
(Operand[0]->Buffer.Pointer[Length])) /* Null terminator */
|
||||
{
|
||||
Length++;
|
||||
}
|
||||
|
@ -445,14 +445,12 @@ AcpiExWriteSerialBus (
|
||||
case ACPI_ADR_SPACE_SMBUS:
|
||||
|
||||
BufferLength = ACPI_SMBUS_BUFFER_SIZE;
|
||||
DataLength = ACPI_SMBUS_DATA_SIZE;
|
||||
Function = ACPI_WRITE | (ObjDesc->Field.Attribute << 16);
|
||||
break;
|
||||
|
||||
case ACPI_ADR_SPACE_IPMI:
|
||||
|
||||
BufferLength = ACPI_IPMI_BUFFER_SIZE;
|
||||
DataLength = ACPI_IPMI_DATA_SIZE;
|
||||
Function = ACPI_WRITE;
|
||||
break;
|
||||
|
||||
@ -471,7 +469,6 @@ AcpiExWriteSerialBus (
|
||||
/* Add header length to get the full size of the buffer */
|
||||
|
||||
BufferLength += ACPI_SERIAL_HEADER_SIZE;
|
||||
DataLength = SourceDesc->Buffer.Pointer[1];
|
||||
Function = ACPI_WRITE | (AccessorType << 16);
|
||||
break;
|
||||
|
||||
@ -479,21 +476,6 @@ AcpiExWriteSerialBus (
|
||||
return_ACPI_STATUS (AE_AML_INVALID_SPACE_ID);
|
||||
}
|
||||
|
||||
#if 0
|
||||
OBSOLETE?
|
||||
/* Check for possible buffer overflow */
|
||||
|
||||
if (DataLength > SourceDesc->Buffer.Length)
|
||||
{
|
||||
ACPI_ERROR ((AE_INFO,
|
||||
"Length in buffer header (%u)(%u) is greater than "
|
||||
"the physical buffer length (%u) and will overflow",
|
||||
DataLength, BufferLength, SourceDesc->Buffer.Length));
|
||||
|
||||
return_ACPI_STATUS (AE_AML_BUFFER_LIMIT);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Create the transfer/bidirectional/return buffer */
|
||||
|
||||
BufferDesc = AcpiUtCreateBufferObject (BufferLength);
|
||||
@ -505,6 +487,8 @@ OBSOLETE?
|
||||
/* Copy the input buffer data to the transfer buffer */
|
||||
|
||||
Buffer = BufferDesc->Buffer.Pointer;
|
||||
DataLength = (BufferLength < SourceDesc->Buffer.Length ?
|
||||
BufferLength : SourceDesc->Buffer.Length);
|
||||
memcpy (Buffer, SourceDesc->Buffer.Pointer, DataLength);
|
||||
|
||||
/* Lock entire transaction if requested */
|
||||
|
@ -181,7 +181,6 @@ AcpiExDigitsNeeded (
|
||||
UINT32 Base);
|
||||
|
||||
|
||||
#ifndef ACPI_NO_METHOD_EXECUTION
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiExEnterInterpreter
|
||||
@ -615,4 +614,3 @@ AcpiIsValidSpaceId (
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -259,6 +259,12 @@ AcpiNsEvaluate (
|
||||
return_ACPI_STATUS (AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
/* Optional object evaluation log */
|
||||
|
||||
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION,
|
||||
"%-26s: %s (%s)\n", " Enter evaluation",
|
||||
&Info->FullPathname[1], AcpiUtGetTypeName (Info->Node->Type)));
|
||||
|
||||
/* Count the number of arguments being passed in */
|
||||
|
||||
Info->ParamCount = 0;
|
||||
@ -445,6 +451,12 @@ AcpiNsEvaluate (
|
||||
Info->RelativePathname));
|
||||
|
||||
Cleanup:
|
||||
/* Optional object evaluation log */
|
||||
|
||||
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION,
|
||||
"%-26s: %s\n", " Exit evaluation",
|
||||
&Info->FullPathname[1]));
|
||||
|
||||
/*
|
||||
* Namespace was unlocked by the handling AcpiNs* function, so we
|
||||
* just free the pathname and return
|
||||
|
@ -173,7 +173,6 @@ AcpiNsDeleteSubtree (
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef ACPI_NO_METHOD_EXECUTION
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AcpiNsLoadTable
|
||||
@ -477,4 +476,3 @@ AcpiNsUnloadNamespace (
|
||||
return_ACPI_STATUS (Status);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
@ -261,8 +261,18 @@ AcpiNsExecuteTable (
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
/* Optional object evaluation log */
|
||||
|
||||
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION,
|
||||
"%-26s: (Definition Block level)\n", "Module-level evaluation"));
|
||||
|
||||
Status = AcpiPsExecuteTable (Info);
|
||||
|
||||
/* Optional object evaluation log */
|
||||
|
||||
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION,
|
||||
"%-26s: (Definition Block level)\n", "Module-level complete"));
|
||||
|
||||
Cleanup:
|
||||
if (Info)
|
||||
{
|
||||
|
@ -580,7 +580,7 @@ AcpiPsParseLoop (
|
||||
ParserState = &WalkState->ParserState;
|
||||
WalkState->ArgTypes = 0;
|
||||
|
||||
#if (!defined (ACPI_NO_METHOD_EXECUTION) && !defined (ACPI_CONSTANT_EVAL_ONLY))
|
||||
#ifndef ACPI_CONSTANT_EVAL_ONLY
|
||||
|
||||
if (WalkState->WalkType & ACPI_WALK_METHOD_RESTART)
|
||||
{
|
||||
|
@ -637,6 +637,18 @@ AcpiPsParseAml (
|
||||
"Completed one call to walk loop, %s State=%p\n",
|
||||
AcpiFormatException (Status), WalkState));
|
||||
|
||||
if (WalkState->MethodPathname && WalkState->MethodIsNested)
|
||||
{
|
||||
/* Optional object evaluation log */
|
||||
|
||||
ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EVALUATION, "%-26s: %*s%s\n",
|
||||
" Exit nested method",
|
||||
(WalkState->MethodNestingDepth + 1) * 3, " ",
|
||||
&WalkState->MethodPathname[1]));
|
||||
|
||||
ACPI_FREE (WalkState->MethodPathname);
|
||||
WalkState->MethodIsNested = FALSE;
|
||||
}
|
||||
if (Status == AE_CTRL_TRANSFER)
|
||||
{
|
||||
/*
|
||||
|
@ -307,6 +307,9 @@ AcpiPsExecuteMethod (
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
WalkState->MethodPathname = Info->FullPathname;
|
||||
WalkState->MethodIsNested = FALSE;
|
||||
|
||||
if (Info->ObjDesc->Method.InfoFlags & ACPI_METHOD_MODULE_LEVEL)
|
||||
{
|
||||
WalkState->ParseFlags |= ACPI_PARSE_MODULE_LEVEL;
|
||||
@ -437,6 +440,9 @@ AcpiPsExecuteTable (
|
||||
goto Cleanup;
|
||||
}
|
||||
|
||||
WalkState->MethodPathname = Info->FullPathname;
|
||||
WalkState->MethodIsNested = FALSE;
|
||||
|
||||
if (Info->ObjDesc->Method.InfoFlags & ACPI_METHOD_MODULE_LEVEL)
|
||||
{
|
||||
WalkState->ParseFlags |= ACPI_PARSE_MODULE_LEVEL;
|
||||
|
@ -235,10 +235,7 @@ const ACPI_PREDEFINED_NAMES AcpiGbl_PreDefinedNames[] =
|
||||
{"_REV", ACPI_TYPE_INTEGER, ACPI_CAST_PTR (char, 2)},
|
||||
{"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME},
|
||||
{"_GL_", ACPI_TYPE_MUTEX, ACPI_CAST_PTR (char, 1)},
|
||||
|
||||
#if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
|
||||
{"_OSI", ACPI_TYPE_METHOD, ACPI_CAST_PTR (char, 1)},
|
||||
#endif
|
||||
|
||||
/* Table terminator */
|
||||
|
||||
|
@ -217,7 +217,8 @@ AcpiUtIsAmlTable (
|
||||
if (ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_DSDT) ||
|
||||
ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_PSDT) ||
|
||||
ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_SSDT) ||
|
||||
ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_OSDT))
|
||||
ACPI_COMPARE_NAME (Table->Signature, ACPI_SIG_OSDT) ||
|
||||
ACPI_IS_OEM_SIG (Table->Signature))
|
||||
{
|
||||
return (TRUE);
|
||||
}
|
||||
|
@ -217,6 +217,8 @@ static ACPI_INTERFACE_INFO AcpiDefaultSupportedInterfaces[] =
|
||||
{"Windows 2016", NULL, 0, ACPI_OSI_WIN_10_RS1}, /* Windows 10 version 1607 - Added 12/2017 */
|
||||
{"Windows 2017", NULL, 0, ACPI_OSI_WIN_10_RS2}, /* Windows 10 version 1703 - Added 12/2017 */
|
||||
{"Windows 2017.2", NULL, 0, ACPI_OSI_WIN_10_RS3}, /* Windows 10 version 1709 - Added 02/2018 */
|
||||
{"Windows 2018", NULL, 0, ACPI_OSI_WIN_10_RS4}, /* Windows 10 version 1803 - Added 11/2018 */
|
||||
{"Windows 2018.2", NULL, 0, ACPI_OSI_WIN_10_RS5}, /* Windows 10 version 1809 - Added 11/2018 */
|
||||
|
||||
/* Feature Group Strings */
|
||||
|
||||
|
@ -317,11 +317,7 @@ ACPI_GLOBAL (BOOLEAN, AcpiGbl_DisableMemTracking);
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY)
|
||||
#define NUM_PREDEFINED_NAMES 10
|
||||
#else
|
||||
#define NUM_PREDEFINED_NAMES 9
|
||||
#endif
|
||||
|
||||
ACPI_GLOBAL (ACPI_NAMESPACE_NODE, AcpiGbl_RootNodeStruct);
|
||||
ACPI_GLOBAL (ACPI_NAMESPACE_NODE *, AcpiGbl_RootNode);
|
||||
|
@ -216,7 +216,8 @@
|
||||
#define ACPI_LV_RESOURCES 0x00010000
|
||||
#define ACPI_LV_USER_REQUESTS 0x00020000
|
||||
#define ACPI_LV_PACKAGE 0x00040000
|
||||
#define ACPI_LV_VERBOSITY1 0x0007FF40 | ACPI_LV_ALL_EXCEPTIONS
|
||||
#define ACPI_LV_EVALUATION 0x00080000
|
||||
#define ACPI_LV_VERBOSITY1 0x000FFF40 | ACPI_LV_ALL_EXCEPTIONS
|
||||
|
||||
/* Trace verbosity level 2 [Function tracing and memory allocation] */
|
||||
|
||||
@ -285,6 +286,7 @@
|
||||
#define ACPI_DB_INTERRUPTS ACPI_DEBUG_LEVEL (ACPI_LV_INTERRUPTS)
|
||||
#define ACPI_DB_USER_REQUESTS ACPI_DEBUG_LEVEL (ACPI_LV_USER_REQUESTS)
|
||||
#define ACPI_DB_PACKAGE ACPI_DEBUG_LEVEL (ACPI_LV_PACKAGE)
|
||||
#define ACPI_DB_EVALUATION ACPI_DEBUG_LEVEL (ACPI_LV_EVALUATION)
|
||||
#define ACPI_DB_MUTEX ACPI_DEBUG_LEVEL (ACPI_LV_MUTEX)
|
||||
#define ACPI_DB_EVENTS ACPI_DEBUG_LEVEL (ACPI_LV_EVENTS)
|
||||
|
||||
@ -292,7 +294,7 @@
|
||||
|
||||
/* Defaults for DebugLevel, debug and normal */
|
||||
|
||||
#define ACPI_DEBUG_DEFAULT (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_REPAIR)
|
||||
#define ACPI_DEBUG_DEFAULT (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_EVALUATION | ACPI_LV_REPAIR)
|
||||
#define ACPI_NORMAL_DEFAULT (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_REPAIR)
|
||||
#define ACPI_DEBUG_ALL (ACPI_LV_AML_DISASSEMBLE | ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL)
|
||||
|
||||
|
@ -154,7 +154,7 @@
|
||||
|
||||
/* Current ACPICA subsystem version in YYYYMMDD format */
|
||||
|
||||
#define ACPI_CA_VERSION 0x20181031
|
||||
#define ACPI_CA_VERSION 0x20181213
|
||||
|
||||
#include "acconfig.h"
|
||||
#include "actypes.h"
|
||||
|
@ -205,6 +205,8 @@ typedef struct acpi_walk_state
|
||||
ACPI_PARSE_STATE ParserState; /* Current state of parser */
|
||||
UINT32 PrevArgTypes;
|
||||
UINT32 ArgCount; /* push for fixed or var args */
|
||||
UINT16 MethodNestingDepth;
|
||||
UINT8 MethodIsNested;
|
||||
|
||||
struct acpi_namespace_node Arguments[ACPI_METHOD_NUM_ARGS]; /* Control method arguments */
|
||||
struct acpi_namespace_node LocalVariables[ACPI_METHOD_NUM_LOCALS]; /* Control method locals */
|
||||
@ -219,7 +221,8 @@ typedef struct acpi_walk_state
|
||||
struct acpi_namespace_node *MethodCallNode; /* Called method Node*/
|
||||
ACPI_PARSE_OBJECT *MethodCallOp; /* MethodCall Op if running a method */
|
||||
union acpi_operand_object *MethodDesc; /* Method descriptor if running a method */
|
||||
struct acpi_namespace_node *MethodNode; /* Method node if running a method. */
|
||||
struct acpi_namespace_node *MethodNode; /* Method node if running a method */
|
||||
char *MethodPathname; /* Full pathname of running method */
|
||||
ACPI_PARSE_OBJECT *Op; /* Current parser op */
|
||||
const ACPI_OPCODE_INFO *OpInfo; /* Info on current opcode */
|
||||
ACPI_PARSE_OBJECT *Origin; /* Start of walk [Obsolete] */
|
||||
|
@ -182,6 +182,7 @@
|
||||
#define ACPI_SIG_XSDT "XSDT" /* Extended System Description Table */
|
||||
#define ACPI_SIG_SSDT "SSDT" /* Secondary System Description Table */
|
||||
#define ACPI_RSDP_NAME "RSDP" /* Short name for RSDP, not signature */
|
||||
#define ACPI_OEM_NAME "OEM" /* Short name for OEM, not signature */
|
||||
|
||||
|
||||
/*
|
||||
|
@ -678,6 +678,10 @@ typedef UINT64 ACPI_INTEGER;
|
||||
#define ACPI_VALIDATE_RSDP_SIG(a) (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_SIG_RSDP, 8))
|
||||
#define ACPI_MAKE_RSDP_SIG(dest) (memcpy (ACPI_CAST_PTR (char, (dest)), ACPI_SIG_RSDP, 8))
|
||||
|
||||
/* Support for OEMx signature (x can be any character) */
|
||||
#define ACPI_IS_OEM_SIG(a) (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_OEM_NAME, 3) &&\
|
||||
strnlen (a, ACPI_NAME_SIZE) == ACPI_NAME_SIZE)
|
||||
|
||||
/*
|
||||
* Algorithm to obtain access bit width.
|
||||
* Can be used with AccessWidth of ACPI_GENERIC_ADDRESS and AccessSize of
|
||||
@ -1512,6 +1516,8 @@ typedef enum
|
||||
#define ACPI_OSI_WIN_10_RS1 0x0E
|
||||
#define ACPI_OSI_WIN_10_RS2 0x0F
|
||||
#define ACPI_OSI_WIN_10_RS3 0x10
|
||||
#define ACPI_OSI_WIN_10_RS4 0x11
|
||||
#define ACPI_OSI_WIN_10_RS5 0x12
|
||||
|
||||
|
||||
/* Definitions of getopt */
|
||||
|
@ -537,7 +537,11 @@ AbCompareAmlFiles (
|
||||
printf ("Compare offset: %u\n", AbGbl_CompareOffset);
|
||||
if (AbGbl_CompareOffset)
|
||||
{
|
||||
fseek (File2, AbGbl_CompareOffset, SEEK_CUR);
|
||||
if (fseek (File2, AbGbl_CompareOffset, SEEK_CUR))
|
||||
{
|
||||
printf ("Seek error on file %s\n", File2Path);
|
||||
goto Exit2;
|
||||
}
|
||||
}
|
||||
|
||||
Actual1 = fread (&Char1, 1, 1, File1);
|
||||
|
@ -266,6 +266,7 @@ usage (
|
||||
ACPI_OPTION ("-ef", "Enable display of final memory statistics");
|
||||
ACPI_OPTION ("-ei", "Enable additional tests for ACPICA interfaces");
|
||||
ACPI_OPTION ("-el", "Enable loading of additional test tables");
|
||||
ACPI_OPTION ("-eo", "Enable object evaluation log");
|
||||
ACPI_OPTION ("-es", "Enable Interpreter Slack Mode");
|
||||
ACPI_OPTION ("-et", "Enable debug semaphore timeout");
|
||||
printf ("\n");
|
||||
@ -406,6 +407,12 @@ AeDoOptions (
|
||||
AcpiGbl_LoadTestTables = TRUE;
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
|
||||
AcpiDbgLevel |= ACPI_LV_EVALUATION;
|
||||
AcpiGbl_DbConsoleDebugLevel |= ACPI_LV_EVALUATION;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
|
||||
AcpiGbl_EnableInterpreterSlack = TRUE;
|
||||
|
@ -167,6 +167,10 @@ static void
|
||||
AhDisplayPredefinedInfo (
|
||||
char *Name);
|
||||
|
||||
static void
|
||||
AhDoSpecialNames (
|
||||
char *Name);
|
||||
|
||||
static void
|
||||
AhDisplayResourceName (
|
||||
const ACPI_PREDEFINED_INFO *ThisName);
|
||||
@ -293,15 +297,23 @@ AhFindPredefinedNames (
|
||||
{
|
||||
UINT32 Length;
|
||||
BOOLEAN Found;
|
||||
char Name[9];
|
||||
char Name[ACPI_NAME_SIZE + 1];
|
||||
|
||||
|
||||
if (!NamePrefix || (NamePrefix[0] == '*'))
|
||||
if (!NamePrefix || (*NamePrefix == '*'))
|
||||
{
|
||||
Found = AhDisplayPredefinedName (NULL, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
Length = strlen (NamePrefix);
|
||||
if (Length > ACPI_NAME_SIZE)
|
||||
{
|
||||
printf ("%.8s: Predefined name must be 4 characters maximum\n",
|
||||
NamePrefix);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Contruct a local name or name prefix */
|
||||
|
||||
AcpiUtStrupr (NamePrefix);
|
||||
@ -311,14 +323,13 @@ AhFindPredefinedNames (
|
||||
}
|
||||
|
||||
Name[0] = '_';
|
||||
AcpiUtSafeStrncpy (&Name[1], NamePrefix, 7);
|
||||
AcpiUtSafeStrncpy (&Name[1], NamePrefix, 4);
|
||||
|
||||
Length = strlen (Name);
|
||||
if (Length > ACPI_NAME_SIZE)
|
||||
{
|
||||
printf ("%.8s: Predefined name must be 4 characters maximum\n", Name);
|
||||
return;
|
||||
}
|
||||
/* Check for special names such as _Exx, _ACx, etc. */
|
||||
|
||||
AhDoSpecialNames (Name);
|
||||
|
||||
/* Lookup and display the name(s) */
|
||||
|
||||
Found = AhDisplayPredefinedName (Name, Length);
|
||||
if (!Found)
|
||||
@ -328,6 +339,95 @@ AhFindPredefinedNames (
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AhDoSpecialNames
|
||||
*
|
||||
* PARAMETERS: Name - Name or prefix to find
|
||||
*
|
||||
* RETURN: None
|
||||
*
|
||||
* DESCRIPTION: Detect and handle the "special" names such as _Exx, _ACx, etc.
|
||||
*
|
||||
* Current support:
|
||||
* _EJx
|
||||
* _Exx
|
||||
* _Lxx
|
||||
* _Qxx
|
||||
* _Wxx
|
||||
* _ACx
|
||||
* _ALx
|
||||
* _T_x
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
static void
|
||||
AhDoSpecialNames (
|
||||
char *Name)
|
||||
{
|
||||
|
||||
/*
|
||||
* Check for the special names that have one or more numeric
|
||||
* suffixes. For example, _Lxx can have 256 different flavors,
|
||||
* from _L00 to _LFF.
|
||||
*/
|
||||
switch (Name[1])
|
||||
{
|
||||
case 'E':
|
||||
if (Name[2] == 'J')
|
||||
{
|
||||
if (isdigit (Name[3]) || (Name[3] == 'X'))
|
||||
{
|
||||
/* _EJx */
|
||||
|
||||
Name[3] = 'x';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Fallthrough */
|
||||
|
||||
case 'L':
|
||||
case 'Q':
|
||||
case 'W':
|
||||
if ((isxdigit (Name[2]) && isxdigit (Name[3]))
|
||||
||
|
||||
((Name[2] == 'X') && (Name[3] == 'X')))
|
||||
{
|
||||
/* _Exx, _Lxx, _Qxx, or _Wxx */
|
||||
|
||||
Name[2] = 'x';
|
||||
Name[3] = 'x';
|
||||
}
|
||||
break;
|
||||
|
||||
case 'A':
|
||||
if ((Name[2] == 'C') || (Name[2] == 'L'))
|
||||
{
|
||||
if (isdigit (Name[3]) || (Name[3] == 'X'))
|
||||
{
|
||||
/* _ACx or _ALx */
|
||||
|
||||
Name[3] = 'x';
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'T':
|
||||
if (Name[2] == '_')
|
||||
{
|
||||
/* _T_x (Reserved for iASL compiler */
|
||||
|
||||
Name[3] = 'x';
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: AhDisplayPredefinedName
|
||||
@ -420,7 +520,7 @@ AhDisplayPredefinedInfo (
|
||||
|
||||
/* NOTE: we check both tables always because there are some dupes */
|
||||
|
||||
/* Check against the predefine methods first */
|
||||
/* Check against the predefined methods first */
|
||||
|
||||
ThisName = AcpiUtMatchPredefinedMethod (Name);
|
||||
if (ThisName)
|
||||
|
@ -176,8 +176,8 @@ AxExtractTables (
|
||||
{
|
||||
FILE *InputFile;
|
||||
FILE *OutputFile = NULL;
|
||||
unsigned int BytesConverted;
|
||||
unsigned int ThisTableBytesWritten = 0;
|
||||
int BytesConverted;
|
||||
int ThisTableBytesWritten = 0;
|
||||
unsigned int FoundTable = 0;
|
||||
unsigned int Instances = 0;
|
||||
unsigned int ThisInstance;
|
||||
@ -323,8 +323,7 @@ AxExtractTables (
|
||||
|
||||
/* Empty line or non-data line terminates the data block */
|
||||
|
||||
BytesConverted = AxConvertAndWrite (OutputFile, ThisSignature,
|
||||
ThisTableBytesWritten);
|
||||
BytesConverted = AxConvertAndWrite (OutputFile, ThisSignature);
|
||||
switch (BytesConverted)
|
||||
{
|
||||
case 0:
|
||||
@ -334,6 +333,7 @@ AxExtractTables (
|
||||
|
||||
case -1:
|
||||
|
||||
Status = -1;
|
||||
goto CleanupAndExit; /* There was a write error */
|
||||
|
||||
default: /* Normal case, get next line */
|
||||
@ -397,8 +397,8 @@ AxExtractToMultiAmlFile (
|
||||
FILE *InputFile;
|
||||
FILE *OutputFile;
|
||||
int Status = 0;
|
||||
unsigned int TotalBytesWritten = 0;
|
||||
unsigned int ThisTableBytesWritten = 0;
|
||||
int TotalBytesWritten = 0;
|
||||
int ThisTableBytesWritten = 0;
|
||||
unsigned int BytesConverted;
|
||||
char ThisSignature[4];
|
||||
unsigned int State = AX_STATE_FIND_HEADER;
|
||||
@ -494,8 +494,7 @@ AxExtractToMultiAmlFile (
|
||||
|
||||
/* Empty line or non-data line terminates the data block */
|
||||
|
||||
BytesConverted = AxConvertAndWrite (
|
||||
OutputFile, ThisSignature, ThisTableBytesWritten);
|
||||
BytesConverted = AxConvertAndWrite (OutputFile, ThisSignature);
|
||||
switch (BytesConverted)
|
||||
{
|
||||
case 0:
|
||||
@ -505,6 +504,7 @@ AxExtractToMultiAmlFile (
|
||||
|
||||
case -1:
|
||||
|
||||
Status = -1;
|
||||
goto CleanupAndExit; /* There was a write error */
|
||||
|
||||
default: /* Normal case, get next line */
|
||||
@ -561,6 +561,7 @@ AxListAllTables (
|
||||
FILE *InputFile;
|
||||
unsigned char Header[48];
|
||||
UINT32 ByteCount = 0;
|
||||
UINT32 ThisLineByteCount;
|
||||
unsigned int State = AX_STATE_FIND_HEADER;
|
||||
|
||||
|
||||
@ -633,7 +634,15 @@ AxListAllTables (
|
||||
|
||||
/* Convert header to hex and display it */
|
||||
|
||||
ByteCount += AxConvertToBinary (Gbl_LineBuffer, &Header[ByteCount]);
|
||||
ThisLineByteCount = AxConvertToBinary (Gbl_LineBuffer,
|
||||
&Header[ByteCount]);
|
||||
if (ThisLineByteCount == EOF)
|
||||
{
|
||||
fclose (InputFile);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
ByteCount += ThisLineByteCount;
|
||||
if (ByteCount >= sizeof (ACPI_TABLE_HEADER))
|
||||
{
|
||||
AxDumpTableHeader (Header);
|
||||
|
@ -276,13 +276,12 @@ BOOLEAN
|
||||
AxIsDataBlockHeader (
|
||||
void);
|
||||
|
||||
long
|
||||
int
|
||||
AxConvertAndWrite (
|
||||
FILE *OutputFile,
|
||||
char *ThisSignature,
|
||||
unsigned int ThisTableBytesWritten);
|
||||
char *ThisSignature);
|
||||
|
||||
size_t
|
||||
int
|
||||
AxConvertToBinary (
|
||||
char *InputLine,
|
||||
unsigned char *OutputData);
|
||||
|
@ -427,7 +427,7 @@ AxNormalizeSignature (
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
size_t
|
||||
int
|
||||
AxConvertToBinary (
|
||||
char *InputLine,
|
||||
unsigned char *OutputData)
|
||||
@ -468,14 +468,22 @@ AxConvertToBinary (
|
||||
&Converted[8], &Converted[9], &Converted[10], &Converted[11],
|
||||
&Converted[12], &Converted[13], &Converted[14], &Converted[15]);
|
||||
|
||||
/* Pack converted data into a byte array */
|
||||
if (BytesConverted == EOF)
|
||||
{
|
||||
printf ("EOF while converting ASCII line to binary\n");
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Pack converted data into a byte array.
|
||||
* Note: BytesConverted == 0 is acceptable.
|
||||
*/
|
||||
for (i = 0; i < BytesConverted; i++)
|
||||
{
|
||||
OutputData[i] = (unsigned char) Converted[i];
|
||||
}
|
||||
|
||||
return ((size_t) BytesConverted);
|
||||
return (BytesConverted);
|
||||
}
|
||||
|
||||
|
||||
@ -603,7 +611,6 @@ AxGetNextInstance (
|
||||
*
|
||||
* PARAMETERS: OutputFile - Where to write the binary data
|
||||
* ThisSignature - Signature of current ACPI table
|
||||
* ThisTableBytesWritten - Total count of data written
|
||||
*
|
||||
* RETURN: Length of the converted line
|
||||
*
|
||||
@ -616,27 +623,29 @@ AxGetNextInstance (
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
long
|
||||
int
|
||||
AxConvertAndWrite (
|
||||
FILE *OutputFile,
|
||||
char *ThisSignature,
|
||||
unsigned int ThisTableBytesWritten)
|
||||
char *ThisSignature)
|
||||
{
|
||||
size_t BytesWritten;
|
||||
size_t BytesConverted;
|
||||
int BytesWritten;
|
||||
int BytesConverted;
|
||||
|
||||
|
||||
/* Convert one line of ascii hex data to binary */
|
||||
|
||||
BytesConverted = AxConvertToBinary (Gbl_LineBuffer, Gbl_BinaryData);
|
||||
|
||||
/* Write the binary data */
|
||||
|
||||
if (BytesConverted == EOF)
|
||||
{
|
||||
return (EOF);
|
||||
}
|
||||
if (!BytesConverted)
|
||||
{
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* Write the binary data */
|
||||
|
||||
BytesWritten = fwrite (Gbl_BinaryData, 1, BytesConverted, OutputFile);
|
||||
if (BytesWritten != BytesConverted)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user