MFV: r335802

Merge ACPICA 20180629.
This commit is contained in:
Jung-uk Kim 2018-06-29 23:48:30 +00:00
commit da9b0901f6
19 changed files with 140 additions and 126 deletions

View File

@ -1,3 +1,62 @@
----------------------------------------
29 June 2018. Summary of changes for version 20180629:
1) iASL Compiler/Disassembler and Tools:
iASL: Fixed a regression related to the use of the ASL External
statement. Error checking for the use of the External() statement has
been relaxed. Previously, a restriction on the use of External meant that
the referenced named object was required to be defined in a different
table (an SSDT). Thus it would be an error to declare an object as an
external and then define the same named object in the same table. For
example:
DefinitionBlock (...)
{
External (DEV1)
Device (DEV1){...} // This was an error
}
However, this behavior has caused regressions in some existing ASL code,
because there is code that depends on named objects and externals (with
the same name) being declared in the same table. This change will allow
the ASL code above to compile without errors or warnings.
iASL: Implemented ASL language extensions for four operators to make some
of their arguments optional instead of required:
1) Field (RegionName, AccessType, LockRule, UpdateRule)
2) BankField (RegionName, BankName, BankValue,
AccessType, LockRule, UpdateRule)
3) IndexField (IndexName, DataName,
AccessType, LockRule, UpdateRule)
For the Field operators above, the AccessType, LockRule, and UpdateRule
are now optional arguments. The default values are:
AccessType: AnyAcc
LockRule: NoLock
UpdateRule: Preserve
4) Mutex (MutexName, SyncLevel)
For this operator, the SyncLevel argument is now optional. This argument
is rarely used in any meaningful way by ASL code, and thus it makes sense
to make it optional. The default value is:
SyncLevel: 0
iASL: Attempted use of the ASL Unload() operator now results in the
following warning:
"Unload is not supported by all operating systems"
This is in fact very true, and the Unload operator may be completely
deprecated in the near future.
AcpiExec: Fixed a regression for the -fi option (Namespace initialization
file. Recent changes in the ACPICA module-level code support altered the
table load/initialization sequence . This means that the table load has
become a large method execution of the table itself. If Operation Region
Fields are used within any module-level code and the -fi option was
specified, the initialization values were populated only after the table
had completely finished loading (and thus the module-level code had
already been executed). This change moves the initialization of objects
listed in the initialization file to before the table is executed as a
method. Field unit values are now initialized before the table execution
is performed.
----------------------------------------
31 May 2018. Summary of changes for version 20180531:

View File

@ -538,7 +538,7 @@ AcpiDmGetExternalsFromFile (
/* Each line defines a method */
while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ExternalRefFile))
while (fgets (StringBuffer, ASL_STRING_BUFFER_SIZE, ExternalRefFile))
{
Token = strtok (StringBuffer, METHOD_SEPARATORS); /* "External" */
if (!Token)

View File

@ -251,7 +251,8 @@ extern int AslCompilerdebug;
#define ASL_DEFAULT_LINE_BUFFER_SIZE (1024 * 32) /* 32K */
#define ASL_MSG_BUFFER_SIZE (1024 * 32) /* 32k */
#define ASL_MSG_BUFFER_SIZE (1024 * 128) /* 128k */
#define ASL_STRING_BUFFER_SIZE (1024 * 32) /* 32k */
#define ASL_MAX_DISABLED_MESSAGES 32
#define ASL_MAX_EXPECTED_MESSAGES 32
#define HEX_TABLE_LINE_SIZE 8
@ -438,8 +439,8 @@ ASL_EXTERN UINT8 AslGbl_NamespaceEvent;
ASL_EXTERN UINT8 Gbl_AmlBuffer[HEX_LISTING_LINE_SIZE];
ASL_EXTERN char MsgBuffer[ASL_MSG_BUFFER_SIZE];
ASL_EXTERN char StringBuffer[ASL_MSG_BUFFER_SIZE];
ASL_EXTERN char StringBuffer2[ASL_MSG_BUFFER_SIZE];
ASL_EXTERN char StringBuffer[ASL_STRING_BUFFER_SIZE];
ASL_EXTERN char StringBuffer2[ASL_STRING_BUFFER_SIZE];
ASL_EXTERN UINT32 Gbl_DisabledMessages[ASL_MAX_DISABLED_MESSAGES];
ASL_EXTERN ASL_EXPECTED_MESSAGE Gbl_ExpectedMessages[ASL_MAX_EXPECTED_MESSAGES];

View File

@ -183,6 +183,14 @@ OptionalAccessSize
| ',' ByteConstExpr {$$ = $2;}
;
OptionalAccessTypeKeyword /* Default: AnyAcc */
: {$$ = TrCreateLeafOp (
PARSEOP_ACCESSTYPE_ANY);}
| ',' {$$ = TrCreateLeafOp (
PARSEOP_ACCESSTYPE_ANY);}
| ',' AccessTypeKeyword {$$ = $2;}
;
OptionalAddressingMode
: ',' {$$ = NULL;}
| ',' AddressingModeKeyword {$$ = $2;}
@ -252,6 +260,14 @@ OptionalListString
| ',' TermArg {$$ = $2;}
;
OptionalLockRuleKeyword /* Default: NoLock */
: {$$ = TrCreateLeafOp (
PARSEOP_LOCKRULE_NOLOCK);}
| ',' {$$ = TrCreateLeafOp (
PARSEOP_LOCKRULE_NOLOCK);}
| ',' LockRuleKeyword {$$ = $2;}
;
OptionalMaxType
: ',' {$$ = NULL;}
| ',' MaxKeyword {$$ = $2;}
@ -366,6 +382,14 @@ OptionalStringData
| ',' StringData {$$ = $2;}
;
OptionalSyncLevel /* Default: 0 */
: {$$ = TrCreateValuedLeafOp (
PARSEOP_BYTECONST, 0);}
| ',' {$$ = TrCreateValuedLeafOp (
PARSEOP_BYTECONST, 0);}
| ',' ByteConstExpr {$$ = $2;}
;
OptionalTranslationType_Last
: {$$ = NULL;}
| ',' {$$ = NULL;}
@ -384,6 +408,14 @@ OptionalType_Last
| ',' TypeKeyword {$$ = $2;}
;
OptionalUpdateRuleKeyword /* Default: Preserve */
: {$$ = TrCreateLeafOp (
PARSEOP_UPDATERULE_PRESERVE);}
| ',' {$$ = TrCreateLeafOp (
PARSEOP_UPDATERULE_PRESERVE);}
| ',' UpdateRuleKeyword {$$ = $2;}
;
OptionalWireMode
: ',' {$$ = NULL;}
| ',' WireModeKeyword {$$ = $2;}

View File

@ -321,8 +321,7 @@ LdLoadFieldElements (
return (Status);
}
else if (Status == AE_ALREADY_EXISTS &&
(Node->Flags & ANOBJ_IS_EXTERNAL) &&
Node->OwnerId != WalkState->OwnerId)
(Node->Flags & ANOBJ_IS_EXTERNAL))
{
Node->Type = (UINT8) ACPI_TYPE_LOCAL_REGION_FIELD;
}
@ -474,7 +473,6 @@ LdNamespace1Begin (
ACPI_PARSE_OBJECT *Arg;
UINT32 i;
BOOLEAN ForceNewScope = FALSE;
ACPI_OWNER_ID OwnerId = 0;
const ACPI_OPCODE_INFO *OpInfo;
ACPI_PARSE_OBJECT *ParentOp;
@ -485,23 +483,6 @@ LdNamespace1Begin (
ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op %p [%s]\n",
Op, Op->Asl.ParseOpName));
if (Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK)
{
/*
* Allocate an OwnerId for this block. This helps identify the owners
* of each namespace node. This is used in determining whether if
* certain external declarations cause redefinition errors.
*/
Status = AcpiUtAllocateOwnerId (&OwnerId);
WalkState->OwnerId = OwnerId;
if (ACPI_FAILURE (Status))
{
AslCoreSubsystemError (Op, Status,
"Failure to allocate owner ID to this definition block.", FALSE);
return_ACPI_STATUS (Status);
}
}
/*
* We are only interested in opcodes that have an associated name
* (or multiple names)
@ -877,9 +858,7 @@ LdNamespace1Begin (
{
/*
* Allow one create on an object or segment that was
* previously declared External only if WalkState->OwnerId and
* Node->OwnerId are different (meaning that the current WalkState
* and the Node are in different tables).
* previously declared External
*/
Node->Flags &= ~ANOBJ_IS_EXTERNAL;
Node->Type = (UINT8) ObjectType;
@ -896,18 +875,6 @@ LdNamespace1Begin (
}
Status = AE_OK;
if (Node->OwnerId == WalkState->OwnerId &&
!(Node->Flags & IMPLICIT_EXTERNAL))
{
AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Op,
Op->Asl.ExternalName, ASL_MSG_EXTERN_FOUND_HERE, Node->Op,
Node->Op->Asl.ExternalName);
}
if (Node->Flags & IMPLICIT_EXTERNAL)
{
Node->Flags &= ~IMPLICIT_EXTERNAL;
}
}
else if (!(Node->Flags & ANOBJ_IS_EXTERNAL) &&
(Op->Asl.ParseOpcode == PARSEOP_EXTERNAL))
@ -915,53 +882,15 @@ LdNamespace1Begin (
/*
* Allow externals in same scope as the definition of the
* actual object. Similar to C. Allows multiple definition
* blocks that refer to each other in the same file. However,
* do not allow name declaration and an external declaration
* within the same table. This is considered a re-declaration.
* blocks that refer to each other in the same file.
*/
Status = AE_OK;
if (Node->OwnerId == WalkState->OwnerId)
{
AslDualParseOpError (ASL_WARNING, ASL_MSG_EXTERN_COLLISION, Op,
Op->Asl.ExternalName, ASL_MSG_EXTERN_FOUND_HERE, Node->Op,
Node->Op->Asl.ExternalName);
}
}
else if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
(Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) &&
(ObjectType == ACPI_TYPE_ANY))
{
/*
* Allow update of externals of unknown type.
* In the case that multiple definition blocks are being
* parsed, updating the OwnerId allows enables subsequent calls
* of this method to understand which table the most recent
* external declaration was seen. Without this OwnerId update,
* code like the following is allowed to compile:
*
* DefinitionBlock("externtest.aml", "DSDT", 0x02, "Intel", "Many", 0x00000001)
* {
* External(ERRS,methodobj)
* Method (MAIN)
* {
* Name(NUM2, 0)
* ERRS(1,2,3)
* }
* }
*
* DefinitionBlock("externtest.aml", "SSDT", 0x02, "Intel", "Many", 0x00000001)
* {
* if (0)
* {
* External(ERRS,methodobj)
* }
* Method (ERRS,3)
* {}
*
* }
*/
Node->OwnerId = WalkState->OwnerId;
/* Allow update of externals of unknown type. */
if (AcpiNsOpensScope (ActualObjectType))
{

View File

@ -208,7 +208,6 @@ main (
signal (SIGINT, AslSignalHandler);
signal (SIGSEGV, AslSignalHandler);
/*
* Big-endian machines are not currently supported. ACPI tables must
@ -306,8 +305,7 @@ main (
*
* DESCRIPTION: Signal interrupt handler. Delete any intermediate files and
* any output files that may be left in an indeterminate state.
* Currently handles SIGINT (control-c) and SIGSEGV (segmentation
* fault).
* Currently handles SIGINT (control-c).
*
*****************************************************************************/
@ -329,17 +327,10 @@ AslSignalHandler (
printf ("\n" ASL_PREFIX "<Control-C>\n");
break;
case SIGSEGV:
/* Even on a seg fault, we will try to delete any partial files */
printf (ASL_PREFIX "Segmentation Fault\n");
break;
default:
printf (ASL_PREFIX "Unknown interrupt signal (%u), ignoring\n", Sig);
return;
printf (ASL_PREFIX "Unknown interrupt signal (%u)\n", Sig);
break;
}
/*

View File

@ -356,7 +356,8 @@ const char *AslCompilerMsgs [] =
/* ASL_MSG_EXTERN_COLLISION */ "A name cannot be defined and declared external in the same table",
/* ASL_MSG_FOUND_HERE_EXTERN */ "Remove one of the declarations indicated above or below:",
/* ASL_MSG_OEM_TABLE_ID */ "Invalid OEM Table ID",
/* ASL_MSG_OEM_ID */ "Invalid OEM ID"
/* ASL_MSG_OEM_ID */ "Invalid OEM ID",
/* ASL_MSG_UNLOAD */ "Unload is not supported by all operating systems"
};
/* Table compiler */

View File

@ -359,6 +359,7 @@ typedef enum
ASL_MSG_EXTERN_FOUND_HERE,
ASL_MSG_OEM_TABLE_ID,
ASL_MSG_OEM_ID,
ASL_MSG_UNLOAD,
/* These messages are used by the Data Table compiler only */

View File

@ -1074,7 +1074,7 @@ AslDoResponseFile (
* Process all lines in the response file. There must be one complete
* option per line
*/
while (fgets (StringBuffer, ASL_MSG_BUFFER_SIZE, ResponseFile))
while (fgets (StringBuffer, ASL_STRING_BUFFER_SIZE, ResponseFile))
{
/* Compress all tokens, allowing us to use a single argv entry */

View File

@ -208,7 +208,7 @@ AslLocalAllocate (
* These shift/reduce conflicts are expected. There should be zero
* reduce/reduce conflicts.
*/
%expect 118
%expect 124
/*! [Begin] no source code translation */

View File

@ -235,12 +235,12 @@ BankFieldTerm
NameString
NameStringItem
TermArgItem
',' AccessTypeKeyword
',' LockRuleKeyword
',' UpdateRuleKeyword
OptionalAccessTypeKeyword
OptionalLockRuleKeyword
OptionalUpdateRuleKeyword
PARSEOP_CLOSE_PAREN '{'
FieldUnitList '}' {$$ = TrLinkOpChildren ($<n>3,7,
$4,$5,$6,$8,$10,$12,$15);}
$4,$5,$6,$7,$8,$9,$12);}
| PARSEOP_BANKFIELD
PARSEOP_OPEN_PAREN
error PARSEOP_CLOSE_PAREN
@ -579,11 +579,11 @@ FieldTerm
: PARSEOP_FIELD
PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafOp (PARSEOP_FIELD);}
NameString
',' AccessTypeKeyword
',' LockRuleKeyword
',' UpdateRuleKeyword
OptionalAccessTypeKeyword
OptionalLockRuleKeyword
OptionalUpdateRuleKeyword
PARSEOP_CLOSE_PAREN '{'
FieldUnitList '}' {$$ = TrLinkOpChildren ($<n>3,5,$4,$6,$8,$10,$13);}
FieldUnitList '}' {$$ = TrLinkOpChildren ($<n>3,5,$4,$5,$6,$7,$10);}
| PARSEOP_FIELD
PARSEOP_OPEN_PAREN
error PARSEOP_CLOSE_PAREN
@ -711,11 +711,11 @@ IndexFieldTerm
PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafOp (PARSEOP_INDEXFIELD);}
NameString
NameStringItem
',' AccessTypeKeyword
',' LockRuleKeyword
',' UpdateRuleKeyword
OptionalAccessTypeKeyword
OptionalLockRuleKeyword
OptionalUpdateRuleKeyword
PARSEOP_CLOSE_PAREN '{'
FieldUnitList '}' {$$ = TrLinkOpChildren ($<n>3,6,$4,$5,$7,$9,$11,$14);}
FieldUnitList '}' {$$ = TrLinkOpChildren ($<n>3,6,$4,$5,$6,$7,$8,$11);}
| PARSEOP_INDEXFIELD
PARSEOP_OPEN_PAREN
error PARSEOP_CLOSE_PAREN
@ -946,9 +946,9 @@ MutexTerm
: PARSEOP_MUTEX
PARSEOP_OPEN_PAREN {$<n>$ = TrCreateLeafOp (PARSEOP_MUTEX);}
NameString
',' ByteConstExpr
OptionalSyncLevel
PARSEOP_CLOSE_PAREN {$$ = TrLinkOpChildren ($<n>3,2,
TrSetOpFlags ($4, OP_IS_NAME_DECLARATION),$6);}
TrSetOpFlags ($4, OP_IS_NAME_DECLARATION),$5);}
| PARSEOP_MUTEX
PARSEOP_OPEN_PAREN
error PARSEOP_CLOSE_PAREN {$$ = AslDoError(); yyclearin;}

View File

@ -496,6 +496,11 @@ TrTransformSubtree (
Op->Asl.Value.String = "\\";
break;
case PARSEOP_UNLOAD:
AslError (ASL_WARNING, ASL_MSG_UNLOAD, Op, NULL);
break;
default:
/* Nothing to do here for other opcodes */

View File

@ -461,6 +461,7 @@ NoEcho('
%type <n> TermArgItem
%type <n> OptionalAccessSize
%type <n> OptionalAccessTypeKeyword
%type <n> OptionalAddressingMode
%type <n> OptionalAddressRange
%type <n> OptionalBitsPerByte
@ -475,6 +476,7 @@ NoEcho('
%type <n> OptionalFlowControl
%type <n> OptionalIoRestriction
%type <n> OptionalListString
%type <n> OptionalLockRuleKeyword
%type <n> OptionalMaxType
%type <n> OptionalMemType
%type <n> OptionalMinType
@ -500,10 +502,12 @@ NoEcho('
%type <n> OptionalSlaveMode
%type <n> OptionalStopBits
%type <n> OptionalStringData
%type <n> OptionalSyncLevel
%type <n> OptionalTermArg
%type <n> OptionalTranslationType_Last
%type <n> OptionalType
%type <n> OptionalType_Last
%type <n> OptionalUpdateRuleKeyword
%type <n> OptionalWireMode
%type <n> OptionalWordConst
%type <n> OptionalWordConstExpr

View File

@ -184,17 +184,17 @@ AcpiHwSleepDispatch (
static ACPI_SLEEP_FUNCTIONS AcpiSleepDispatch[] =
{
{ACPI_STRUCT_INIT (legacy_function,
{ACPI_STRUCT_INIT (LegacyFunction,
ACPI_HW_OPTIONAL_FUNCTION (AcpiHwLegacySleep)),
ACPI_STRUCT_INIT (extended_function,
ACPI_STRUCT_INIT (ExtendedFunction,
AcpiHwExtendedSleep) },
{ACPI_STRUCT_INIT (legacy_function,
{ACPI_STRUCT_INIT (LegacyFunction,
ACPI_HW_OPTIONAL_FUNCTION (AcpiHwLegacyWakePrep)),
ACPI_STRUCT_INIT (extended_function,
ACPI_STRUCT_INIT (ExtendedFunction,
AcpiHwExtendedWakePrep) },
{ACPI_STRUCT_INIT (legacy_function,
{ACPI_STRUCT_INIT (Legacy_function,
ACPI_HW_OPTIONAL_FUNCTION (AcpiHwLegacyWake)),
ACPI_STRUCT_INIT (extended_function,
ACPI_STRUCT_INIT (ExtendedFunction,
AcpiHwExtendedWake) }
};

View File

@ -781,13 +781,6 @@ AcpiNsLookup (
else
{
#ifdef ACPI_ASL_COMPILER
if (!AcpiGbl_DisasmFlag && (ThisNode->Flags & ANOBJ_IS_EXTERNAL))
{
ThisNode->Flags &= ~IMPLICIT_EXTERNAL;
}
#endif
/*
* Sanity typecheck of the target object:
*

View File

@ -429,11 +429,11 @@ AcpiNsEvaluate (
Status = AE_OK;
}
else if (ACPI_FAILURE(Status))
else if (ACPI_FAILURE(Status))
{
/* If ReturnObject exists, delete it */
if (Info->ReturnObject)
if (Info->ReturnObject)
{
AcpiUtRemoveReference (Info->ReturnObject);
Info->ReturnObject = NULL;

View File

@ -545,7 +545,6 @@ AcpiNsSearchAndEnter (
(WalkState && WalkState->Opcode == AML_SCOPE_OP))
{
NewNode->Flags |= ANOBJ_IS_EXTERNAL;
NewNode->Flags |= IMPLICIT_EXTERNAL;
}
#endif

View File

@ -328,7 +328,6 @@ typedef struct acpi_namespace_node
#define ANOBJ_EVALUATED 0x20 /* Set on first evaluation of node */
#define ANOBJ_ALLOCATED_BUFFER 0x40 /* Method AML buffer is dynamic (InstallMethod) */
#define IMPLICIT_EXTERNAL 0x02 /* iASL only: This object created implicitly via External */
#define ANOBJ_IS_EXTERNAL 0x08 /* iASL only: This object created via External() */
#define ANOBJ_METHOD_NO_RETVAL 0x10 /* iASL only: Method has no return value */
#define ANOBJ_METHOD_SOME_NO_RETVAL 0x20 /* iASL only: Method has at least one return value */

View File

@ -154,7 +154,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
#define ACPI_CA_VERSION 0x20180531
#define ACPI_CA_VERSION 0x20180629
#include <contrib/dev/acpica/include/acconfig.h>
#include <contrib/dev/acpica/include/actypes.h>