Revert "Acpica parser"

This commit is contained in:
Robert Moore 2016-07-01 07:20:27 -07:00 committed by GitHub
parent badd47cbd3
commit d18654bc94
18 changed files with 42 additions and 454 deletions

View File

@ -119,7 +119,6 @@
#include "acevents.h"
#include "acinterp.h"
#include "acnamesp.h"
#include "acparser.h"
#define _COMPONENT ACPI_COMPILER
ACPI_MODULE_NAME ("aslstubs")
@ -143,13 +142,6 @@ AcpiNsInitializeObjects (
return (AE_OK);
}
ACPI_STATUS
AcpiPsExecuteTable (
ACPI_EVALUATE_INFO *Info)
{
return (AE_OK);
}
ACPI_STATUS
AcpiHwReadPort (
ACPI_IO_ADDRESS Address,

View File

@ -554,11 +554,6 @@ AcpiDsEvalRegionOperands (
/* Now the address and length are valid for this opregion */
ObjDesc->Region.Flags |= AOPOBJ_DATA_VALID;
if (WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL)
{
Status = AcpiUtAddAddressRange (ObjDesc->Region.SpaceId,
ObjDesc->Region.Address, ObjDesc->Region.Length, Node);
}
return_ACPI_STATUS (Status);
}

View File

@ -690,8 +690,7 @@ AcpiEvInitializeRegion (
*
* See AcpiNsExecModuleCode
*/
if (!AcpiGbl_ParseTableAsTermList &&
ObjDesc->Method.InfoFlags & ACPI_METHOD_MODULE_LEVEL)
if (ObjDesc->Method.InfoFlags & ACPI_METHOD_MODULE_LEVEL)
{
HandlerObj = ObjDesc->Method.Dispatch.Handler;
}

View File

@ -191,9 +191,7 @@ AcpiExAddTable (
/* Add the table to the namespace */
AcpiExExitInterpreter ();
Status = AcpiNsLoadTable (TableIndex, ParentNode);
AcpiExEnterInterpreter ();
if (ACPI_FAILURE (Status))
{
AcpiUtRemoveReference (ObjDesc);
@ -204,7 +202,7 @@ AcpiExAddTable (
/* Execute any module-level code that was found in the table */
AcpiExExitInterpreter ();
if (!AcpiGbl_ParseTableAsTermList && AcpiGbl_GroupModuleLevelCode)
if (AcpiGbl_GroupModuleLevelCode)
{
AcpiNsExecModuleCodeList ();
}

View File

@ -252,7 +252,7 @@ Unlock:
* other ACPI implementations. Optionally, the execution can be deferred
* until later, see AcpiInitializeObjects.
*/
if (!AcpiGbl_ParseTableAsTermList && !AcpiGbl_GroupModuleLevelCode)
if (!AcpiGbl_GroupModuleLevelCode)
{
AcpiNsExecModuleCodeList ();
}

View File

@ -119,118 +119,12 @@
#include "acparser.h"
#include "acdispat.h"
#include "actables.h"
#include "acinterp.h"
#define _COMPONENT ACPI_NAMESPACE
ACPI_MODULE_NAME ("nsparse")
/*******************************************************************************
*
* FUNCTION: NsExecuteTable
*
* PARAMETERS: TableDesc - An ACPI table descriptor for table to parse
* StartNode - Where to enter the table into the namespace
*
* RETURN: Status
*
* DESCRIPTION: Load ACPI/AML table by executing the entire table as a
* TermList.
*
******************************************************************************/
ACPI_STATUS
AcpiNsExecuteTable (
UINT32 TableIndex,
ACPI_NAMESPACE_NODE *StartNode)
{
ACPI_STATUS Status;
ACPI_TABLE_HEADER *Table;
ACPI_OWNER_ID OwnerId;
ACPI_EVALUATE_INFO *Info = NULL;
UINT32 AmlLength;
UINT8 *AmlStart;
ACPI_OPERAND_OBJECT *MethodObj = NULL;
ACPI_FUNCTION_TRACE (NsExecuteTable);
Status = AcpiGetTableByIndex (TableIndex, &Table);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/* Table must consist of at least a complete header */
if (Table->Length < sizeof (ACPI_TABLE_HEADER))
{
return_ACPI_STATUS (AE_BAD_HEADER);
}
AmlStart = (UINT8 *) Table + sizeof (ACPI_TABLE_HEADER);
AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER);
Status = AcpiTbGetOwnerId (TableIndex, &OwnerId);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
/* Create, initialize, and link a new temporary method object */
MethodObj = AcpiUtCreateInternalObject (ACPI_TYPE_METHOD);
if (!MethodObj)
{
return_ACPI_STATUS (AE_NO_MEMORY);
}
/* Allocate the evaluation information block */
Info = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_EVALUATE_INFO));
if (!Info)
{
Status = AE_NO_MEMORY;
goto Cleanup;
}
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE,
"Create table code block: %p\n", MethodObj));
MethodObj->Method.AmlStart = AmlStart;
MethodObj->Method.AmlLength = AmlLength;
MethodObj->Method.OwnerId = OwnerId;
MethodObj->Method.InfoFlags |= ACPI_METHOD_MODULE_LEVEL;
Info->PassNumber = ACPI_IMODE_EXECUTE;
Info->Node = StartNode;
Info->ObjDesc = MethodObj;
Info->NodeFlags = Info->Node->Flags;
Info->FullPathname = AcpiNsGetNormalizedPathname (Info->Node, TRUE);
if (!Info->FullPathname)
{
Status = AE_NO_MEMORY;
goto Cleanup;
}
(void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
Status = AcpiPsExecuteTable (Info);
(void) AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
Cleanup:
if (Info)
{
ACPI_FREE (Info->FullPathname);
Info->FullPathname = NULL;
}
ACPI_FREE (Info);
AcpiUtRemoveReference (MethodObj);
return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
* FUNCTION: NsOneCompleteParse
@ -366,58 +260,41 @@ AcpiNsParseTable (
ACPI_FUNCTION_TRACE (NsParseTable);
AcpiExEnterInterpreter ();
/*
* AML Parse, pass 1
*
* In this pass, we load most of the namespace. Control methods
* are not parsed until later. A parse tree is not created. Instead,
* each Parser Op subtree is deleted when it is finished. This saves
* a great deal of memory, and allows a small cache of parse objects
* to service the entire parse. The second pass of the parse then
* performs another complete parse of the AML.
*/
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** Start pass 1\n"));
if (AcpiGbl_ParseTableAsTermList)
Status = AcpiNsOneCompleteParse (ACPI_IMODE_LOAD_PASS1,
TableIndex, StartNode);
if (ACPI_FAILURE (Status))
{
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** Start load pass\n"));
Status = AcpiNsExecuteTable (TableIndex, StartNode);
if (ACPI_FAILURE (Status))
{
goto ErrorExit;
}
}
else
{
/*
* AML Parse, pass 1
*
* In this pass, we load most of the namespace. Control methods
* are not parsed until later. A parse tree is not created.
* Instead, each Parser Op subtree is deleted when it is finished.
* This saves a great deal of memory, and allows a small cache of
* parse objects to service the entire parse. The second pass of
* the parse then performs another complete parse of the AML.
*/
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** Start pass 1\n"));
Status = AcpiNsOneCompleteParse (ACPI_IMODE_LOAD_PASS1,
TableIndex, StartNode);
if (ACPI_FAILURE (Status))
{
goto ErrorExit;
}
/*
* AML Parse, pass 2
*
* In this pass, we resolve forward references and other things
* that could not be completed during the first pass.
* Another complete parse of the AML is performed, but the
* overhead of this is compensated for by the fact that the
* parse objects are all cached.
*/
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** Start pass 2\n"));
Status = AcpiNsOneCompleteParse (ACPI_IMODE_LOAD_PASS2,
TableIndex, StartNode);
if (ACPI_FAILURE (Status))
{
goto ErrorExit;
}
return_ACPI_STATUS (Status);
}
/*
* AML Parse, pass 2
*
* In this pass, we resolve forward references and other things
* that could not be completed during the first pass.
* Another complete parse of the AML is performed, but the
* overhead of this is compensated for by the fact that the
* parse objects are all cached.
*/
ACPI_DEBUG_PRINT ((ACPI_DB_PARSE, "**** Start pass 2\n"));
Status = AcpiNsOneCompleteParse (ACPI_IMODE_LOAD_PASS2,
TableIndex, StartNode);
if (ACPI_FAILURE (Status))
{
return_ACPI_STATUS (Status);
}
ErrorExit:
AcpiExExitInterpreter ();
return_ACPI_STATUS (Status);
}

View File

@ -661,8 +661,7 @@ AcpiPsParseAml (
* cleanup to do
*/
if (((WalkState->ParseFlags & ACPI_PARSE_MODE_MASK) ==
ACPI_PARSE_EXECUTE &&
!(WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL)) ||
ACPI_PARSE_EXECUTE) ||
(ACPI_FAILURE (Status)))
{
AcpiDsTerminateControlMethod (WalkState->MethodDesc, WalkState);

View File

@ -345,86 +345,6 @@ Cleanup:
}
/*******************************************************************************
*
* FUNCTION: AcpiPsExecuteTable
*
* PARAMETERS: Info - Method info block, contains:
* Node - Node to where the is entered into the
* namespace
* ObjDesc - Pseudo method object describing the AML
* code of the entire table
* PassNumber - Parse or execute pass
*
* RETURN: Status
*
* DESCRIPTION: Execute a table
*
******************************************************************************/
ACPI_STATUS
AcpiPsExecuteTable (
ACPI_EVALUATE_INFO *Info)
{
ACPI_STATUS Status;
ACPI_PARSE_OBJECT *Op = NULL;
ACPI_WALK_STATE *WalkState = NULL;
ACPI_FUNCTION_TRACE (PsExecuteTable);
/* Create and init a Root Node */
Op = AcpiPsCreateScopeOp (Info->ObjDesc->Method.AmlStart);
if (!Op)
{
Status = AE_NO_MEMORY;
goto Cleanup;
}
/* Create and initialize a new walk state */
WalkState = AcpiDsCreateWalkState (
Info->ObjDesc->Method.OwnerId, NULL, NULL, NULL);
if (!WalkState)
{
Status = AE_NO_MEMORY;
goto Cleanup;
}
Status = AcpiDsInitAmlWalk (WalkState, Op, Info->Node,
Info->ObjDesc->Method.AmlStart,
Info->ObjDesc->Method.AmlLength, Info, Info->PassNumber);
if (ACPI_FAILURE (Status))
{
goto Cleanup;
}
if (Info->ObjDesc->Method.InfoFlags & ACPI_METHOD_MODULE_LEVEL)
{
WalkState->ParseFlags |= ACPI_PARSE_MODULE_LEVEL;
}
/*
* Parse the AML, WalkState will be deleted by ParseAml
*/
Status = AcpiPsParseAml (WalkState);
WalkState = NULL;
Cleanup:
if (Op)
{
AcpiPsDeleteParseTree (Op);
}
if (WalkState)
{
AcpiDsDeleteWalkState (WalkState);
}
return_ACPI_STATUS (Status);
}
/*******************************************************************************
*
* FUNCTION: AcpiPsUpdateParameterList

View File

@ -183,7 +183,7 @@ AcpiLoadTables (
"While loading namespace from ACPI tables"));
}
if (AcpiGbl_ParseTableAsTermList || !AcpiGbl_GroupModuleLevelCode)
if (!AcpiGbl_GroupModuleLevelCode)
{
/*
* Initialize the objects that remain uninitialized. This

View File

@ -365,7 +365,7 @@ AcpiInitializeObjects (
* all of the tables have been loaded. It is a legacy option and is
* not compatible with other ACPI implementations. See AcpiNsLoadTable.
*/
if (!AcpiGbl_ParseTableAsTermList && AcpiGbl_GroupModuleLevelCode)
if (AcpiGbl_GroupModuleLevelCode)
{
AcpiNsExecModuleCodeList ();

View File

@ -215,11 +215,6 @@ AcpiNsParseTable (
UINT32 TableIndex,
ACPI_NAMESPACE_NODE *StartNode);
ACPI_STATUS
AcpiNsExecuteTable (
UINT32 TableIndex,
ACPI_NAMESPACE_NODE *StartNode);
ACPI_STATUS
AcpiNsOneCompleteParse (
UINT32 PassNumber,

View File

@ -155,10 +155,6 @@ ACPI_STATUS
AcpiPsExecuteMethod (
ACPI_EVALUATE_INFO *Info);
ACPI_STATUS
AcpiPsExecuteTable (
ACPI_EVALUATE_INFO *Info);
/*
* psargs - Parse AML opcode arguments

View File

@ -268,12 +268,6 @@ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_DoNotUseXsdt, FALSE);
*/
ACPI_INIT_GLOBAL (UINT8, AcpiGbl_GroupModuleLevelCode, FALSE);
/*
* Optionally support module level code by parsing the entire table as
* a TermList. Default is TRUE, do execute entire table.
*/
ACPI_INIT_GLOBAL (UINT8, AcpiGbl_ParseTableAsTermList, TRUE);
/*
* Optionally use 32-bit FADT addresses if and when there is a conflict
* (address mismatch) between the 32-bit and 64-bit versions of the

View File

@ -1712,7 +1712,6 @@ Name(TFN0, Package() {
"ns-fullpath.asl",
"scope.asl",
"object.asl",
"order.asl",
// below are incorrect yet:

View File

@ -30,13 +30,7 @@
if (STTT("Module level code execution", TCLF, 14, W01a)) {
SRMT("MLS0")
MLS0()
SRMT("MLS1")
MLS1()
SRMT("MLO0")
MLO0()
SRMT("MLO1")
MLO1()
SRMT("MLD0")
MLD0()
}
FTTT()

View File

@ -31,8 +31,8 @@
*/
/*
* Verify if Type1Opcode (ex., If) and Type2Opcode (ex., Store) is allowed
* under Device, PowerResource, Processor, or ThermalZone
* Verify if Type1Opcode (ex., If) is allowed under Device, PowerResource,
* Processor, or ThermalZone
*
* ASL spec state:
* 1. DeviceTerm supports ObjectList for ACPI 1.0 ~ ACPI 6.1.
@ -113,68 +113,3 @@ Method(MLO0,, Serialized)
err(ts, z181, 3, z181, 3, ml13, 2)
}
}
/* Tests for Type2Opcode */
Name(ml14, 0)
Name(ml15, 0)
Name(ml16, 0)
Name(ml17, 0)
Scope(\_SB)
{
Device(dev1)
{
Store (1, ml14)
if (LEqual(ml14, 1)) {
Store(2, ml14)
}
PowerResource(pr01, 1, 0)
{
Store (1, ml15)
if (LEqual(ml15, 1)) {
Store(2, ml15)
}
}
}
}
Scope(\_PR)
{
Processor(cpu1, 0, 0xFFFFFFFF, 0)
{
Store (1, ml16)
if (LEqual(ml16, 1)) {
Store(2, ml16)
}
}
}
Scope(\_TZ)
{
ThermalZone(thz1)
{
Store (1, ml17)
if (LEqual(ml17, 1)) {
Store(2, ml17)
}
}
}
Method(MLO1,, Serialized)
{
Name(ts, "MLO1")
Store("TEST: MLO1 Type2Opcode is executable under objects", Debug)
if (LNotEqual(ml14, 2)) {
err(ts, z181, 4, z181, 4, ml14, 2)
}
if (LNotEqual(ml15, 2)) {
err(ts, z181, 5, z181, 5, ml15, 2)
}
if (LNotEqual(ml16, 2)) {
err(ts, z181, 6, z181, 6, ml16, 2)
}
if (LNotEqual(ml17, 2)) {
err(ts, z181, 7, z181, 7, ml17, 2)
}
}

View File

@ -1,63 +0,0 @@
/*
* Some or all of this work - Copyright (c) 2006 - 2016, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* Neither the name of Intel Corporation nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Module level execution order
*/
/*
* Verify if module level opcode is executed right in place.
*/
Name(z182, 182)
/* Tests for Type2Opcode order */
Name(ml20, 0)
Name(ob01, 0)
if (CondRefOf(ob01))
{
Store(1, ml20)
if (CondRefOf(ob02))
{
Store(2, ml20)
}
}
Name(ob02, 0)
Method(MLD0,, Serialized)
{
Name(ts, "MLD0")
Store("TEST: MLD0, Type2Opcode is executed right in place", Debug)
if (LNotEqual(ml20, 1)) {
err(ts, z182, 6, z182, 6, ml20, 1)
}
}

View File

@ -31,8 +31,8 @@
*/
/*
* Verify if Type1Opcode (ex., If) and Type2Opcode (ex., Store) is allowed
* under DefinitionBlock or Scope
* Verify if Type1Opcode (ex., If) is allowed under DefinitionBlock or
* Scope
*
* ASL spec state:
* 1. DefinitionBlockTerm supports TermList for ACPI 1.0 ~ 6.0.
@ -89,45 +89,3 @@ Method(MLS0,, Serialized)
err(ts, z180, 2, z180, 2, ml02, 2)
}
}
/* Tests for Type2Opcode */
Name(ml03, 0)
Name(ml04, 0)
Name(ml05, 0)
Store (1, ml03)
if (LEqual(ml03, 1)) {
Store(2, ml03)
}
Scope(\)
{
Store (1, ml04)
if (LEqual(ml04, 1)) {
Store(2, ml04)
}
}
Scope(\_SB)
{
Store (1, ml05)
if (LEqual(ml05, 1)) {
Store(2, ml05)
}
}
Method(MLS1,, Serialized)
{
Name(ts, "MLS1")
Store("TEST: MLS1, Type2Opcode is executable under scopes", Debug)
if (LNotEqual(ml03, 2)) {
err(ts, z180, 3, z180, 3, ml03, 2)
}
if (LNotEqual(ml04, 2)) {
err(ts, z180, 4, z180, 4, ml04, 2)
}
if (LNotEqual(ml05, 2)) {
err(ts, z180, 5, z180, 5, ml05, 2)
}
}