Deleted Added
full compact
5c5
< * $Revision: 74 $
---
> * $Revision: 80 $
127d126
< #include "actables.h"
138c137,138
< * ExtraDesc - Has AML pointer and length
---
> * AmlLength - Length of executable AML
> * AmlStart - Pointer to the AML
173c173
< Op->Node = ScopeNode;
---
> Op->Common.Node = ScopeNode;
204,206c204,206
< Arg = Op->Value.Arg;
< Op->Node = Node;
< Arg->Node = Node;
---
> Arg = Op->Common.Value.Arg;
> Op->Common.Node = Node;
> Arg->Common.Node = Node;
217c217
< Op->Node = ScopeNode;
---
> Op->Common.Node = ScopeNode;
278c278
< (char *) &Node->Name));
---
> Node->Name.Ascii));
429c429
< (char *) &Node->Name, ExtraDesc->Extra.AmlStart));
---
> Node->Name.Ascii, ExtraDesc->Extra.AmlStart));
446c446
< * DESCRIPTION:
---
> * DESCRIPTION: Front end to EvInitializeRegion
469c469
< * FUNCTION: AcpiDsEvalBufferFieldOperands
---
> * FUNCTION: AcpiDsInitBufferField
471c471,476
< * PARAMETERS: Op - A valid BufferField Op object
---
> * PARAMETERS: AmlOpcode - CreateXxxField
> * ObjDesc - BufferField object
> * BufferDesc - Host Buffer
> * OffsetDesc - Offset into buffer
> * Length - Length of field (CREATE_FIELD_OP only)
> * Result - Where to store the result
475,476c480
< * DESCRIPTION: Get BufferField Buffer and Index
< * Called from AcpiDsExecEndOp during BufferField parse tree walk
---
> * DESCRIPTION: Perform actual initialization of a buffer field
481,483c485,491
< AcpiDsEvalBufferFieldOperands (
< ACPI_WALK_STATE *WalkState,
< ACPI_PARSE_OBJECT *Op)
---
> AcpiDsInitBufferField (
> UINT16 AmlOpcode,
> ACPI_OPERAND_OBJECT *ObjDesc,
> ACPI_OPERAND_OBJECT *BufferDesc,
> ACPI_OPERAND_OBJECT *OffsetDesc,
> ACPI_OPERAND_OBJECT *LengthDesc,
> ACPI_OPERAND_OBJECT *ResultDesc)
485,488d492
< ACPI_STATUS Status;
< ACPI_OPERAND_OBJECT *ObjDesc;
< ACPI_NAMESPACE_NODE *Node;
< ACPI_PARSE_OBJECT *NextOp;
493,496c497
< ACPI_OPERAND_OBJECT *ResDesc = NULL;
< ACPI_OPERAND_OBJECT *CntDesc = NULL;
< ACPI_OPERAND_OBJECT *OffDesc = NULL;
< ACPI_OPERAND_OBJECT *SrcDesc = NULL;
---
> ACPI_STATUS Status;
499c500
< ACPI_FUNCTION_TRACE_PTR ("DsEvalBufferFieldOperands", Op);
---
> ACPI_FUNCTION_TRACE_PTR ("DsInitBufferField", ObjDesc);
502,506c503
< /*
< * This is where we evaluate the address and length fields of the
< * CreateXxxField declaration
< */
< Node = Op->Node;
---
> /* Host object must be a Buffer */
508,515c505
< /* NextOp points to the op that holds the Buffer */
<
< NextOp = Op->Value.Arg;
<
< /* Evaluate/create the address and length operands */
<
< Status = AcpiDsCreateOperands (WalkState, NextOp);
< if (ACPI_FAILURE (Status))
---
> if (ACPI_GET_OBJECT_TYPE (BufferDesc) != ACPI_TYPE_BUFFER)
517,518c507,509
< return_ACPI_STATUS (Status);
< }
---
> ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
> "Target of Create Field is not a Buffer object - %s\n",
> AcpiUtGetObjectTypeName (BufferDesc)));
520,536c511
< ObjDesc = AcpiNsGetAttachedObject (Node);
< if (!ObjDesc)
< {
< return_ACPI_STATUS (AE_NOT_EXIST);
< }
<
< /* Resolve the operands */
<
< Status = AcpiExResolveOperands (Op->Opcode, ACPI_WALK_OPERANDS, WalkState);
< ACPI_DUMP_OPERANDS (ACPI_WALK_OPERANDS, ACPI_IMODE_EXECUTE, AcpiPsGetOpcodeName (Op->Opcode),
< WalkState->NumOperands, "after AcpiExResolveOperands");
<
< if (ACPI_FAILURE (Status))
< {
< ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "(%s) bad operand(s) (%X)\n",
< AcpiPsGetOpcodeName (Op->Opcode), Status));
<
---
> Status = AE_AML_OPERAND_TYPE;
540,555d514
< /* Get the operands */
<
< if (AML_CREATE_FIELD_OP == Op->Opcode)
< {
< ResDesc = WalkState->Operands[3];
< CntDesc = WalkState->Operands[2];
< }
< else
< {
< ResDesc = WalkState->Operands[2];
< }
<
< OffDesc = WalkState->Operands[1];
< SrcDesc = WalkState->Operands[0];
< Offset = (UINT32) OffDesc->Integer.Value;
<
557,558c516,518
< * If ResDesc is a Name, it will be a direct name pointer after
< * AcpiExResolveOperands()
---
> * The last parameter to all of these opcodes (ResultDesc) started
> * out as a NameString, and should therefore now be a NS node
> * after resolution in AcpiExResolveOperands().
560c520
< if (ACPI_GET_DESCRIPTOR_TYPE (ResDesc) != ACPI_DESC_TYPE_NAMED)
---
> if (ACPI_GET_DESCRIPTOR_TYPE (ResultDesc) != ACPI_DESC_TYPE_NAMED)
563c523
< AcpiPsGetOpcodeName (Op->Opcode)));
---
> AcpiPsGetOpcodeName (AmlOpcode)));
568a529,530
> Offset = (UINT32) OffsetDesc->Integer.Value;
>
572c534
< switch (Op->Opcode)
---
> switch (AmlOpcode)
578,580c540,542
< BitOffset = Offset;
< BitCount = (UINT32) CntDesc->Integer.Value;
< FieldFlags = AML_FIELD_ACCESS_BYTE;
---
> BitOffset = Offset;
> BitCount = (UINT32) LengthDesc->Integer.Value;
> FieldFlags = AML_FIELD_ACCESS_BYTE;
587,589c549,551
< BitOffset = Offset;
< BitCount = 1;
< FieldFlags = AML_FIELD_ACCESS_BYTE;
---
> BitOffset = Offset;
> BitCount = 1;
> FieldFlags = AML_FIELD_ACCESS_BYTE;
596,598c558,560
< BitOffset = 8 * Offset;
< BitCount = 8;
< FieldFlags = AML_FIELD_ACCESS_BYTE;
---
> BitOffset = 8 * Offset;
> BitCount = 8;
> FieldFlags = AML_FIELD_ACCESS_BYTE;
605,607c567,569
< BitOffset = 8 * Offset;
< BitCount = 16;
< FieldFlags = AML_FIELD_ACCESS_WORD;
---
> BitOffset = 8 * Offset;
> BitCount = 16;
> FieldFlags = AML_FIELD_ACCESS_WORD;
614,616c576,578
< BitOffset = 8 * Offset;
< BitCount = 32;
< FieldFlags = AML_FIELD_ACCESS_DWORD;
---
> BitOffset = 8 * Offset;
> BitCount = 32;
> FieldFlags = AML_FIELD_ACCESS_DWORD;
623,625c585,587
< BitOffset = 8 * Offset;
< BitCount = 64;
< FieldFlags = AML_FIELD_ACCESS_QWORD;
---
> BitOffset = 8 * Offset;
> BitCount = 64;
> FieldFlags = AML_FIELD_ACCESS_QWORD;
631,632c593,594
< "Internal error - unknown field creation opcode %02x\n",
< Op->Opcode));
---
> "Unknown field creation opcode %02x\n",
> AmlOpcode));
636a599,611
>
> /* Entire field must fit within the current length of the buffer */
>
> if ((BitOffset + BitCount) >
> (8 * (UINT32) BufferDesc->Buffer.Length))
> {
> ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
> "Field size %d exceeds Buffer size %d (bits)\n",
> BitOffset + BitCount, 8 * (UINT32) BufferDesc->Buffer.Length));
> Status = AE_AML_BUFFER_LIMIT;
> goto Cleanup;
> }
>
638c613,614
< * Setup field according to the object type
---
> * Initialize areas of the field object that are common to all fields
> * For FieldFlags, use LOCK_RULE = 0 (NO_LOCK), UPDATE_RULE = 0 (UPDATE_PRESERVE)
640c616,618
< switch (SrcDesc->Common.Type)
---
> Status = AcpiExPrepCommonFieldObject (ObjDesc, FieldFlags, 0,
> BitOffset, BitCount);
> if (ACPI_FAILURE (Status))
641a620,621
> goto Cleanup;
> }
643c623
< /* SourceBuff := TermArg=>Buffer */
---
> ObjDesc->BufferField.BufferObj = BufferDesc;
645c625
< case ACPI_TYPE_BUFFER:
---
> /* Reference count for BufferDesc inherits ObjDesc count */
647,655c627,628
< if ((BitOffset + BitCount) >
< (8 * (UINT32) SrcDesc->Buffer.Length))
< {
< ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
< "Field size %d exceeds Buffer size %d (bits)\n",
< BitOffset + BitCount, 8 * (UINT32) SrcDesc->Buffer.Length));
< Status = AE_AML_BUFFER_LIMIT;
< goto Cleanup;
< }
---
> BufferDesc->Common.ReferenceCount = (UINT16) (BufferDesc->Common.ReferenceCount +
> ObjDesc->Common.ReferenceCount);
657,666d629
< /*
< * Initialize areas of the field object that are common to all fields
< * For FieldFlags, use LOCK_RULE = 0 (NO_LOCK), UPDATE_RULE = 0 (UPDATE_PRESERVE)
< */
< Status = AcpiExPrepCommonFieldObject (ObjDesc, FieldFlags, 0,
< BitOffset, BitCount);
< if (ACPI_FAILURE (Status))
< {
< return_ACPI_STATUS (Status);
< }
668c631
< ObjDesc->BufferField.BufferObj = SrcDesc;
---
> Cleanup:
670c633
< /* Reference count for SrcDesc inherits ObjDesc count */
---
> /* Always delete the operands */
672,674c635,636
< SrcDesc->Common.ReferenceCount = (UINT16) (SrcDesc->Common.ReferenceCount +
< ObjDesc->Common.ReferenceCount);
< break;
---
> AcpiUtRemoveReference (OffsetDesc);
> AcpiUtRemoveReference (BufferDesc);
675a638,641
> if (AmlOpcode == AML_CREATE_FIELD_OP)
> {
> AcpiUtRemoveReference (LengthDesc);
> }
677c643
< /* Improper object type */
---
> /* On failure, delete the result descriptor */
679c645,651
< default:
---
> if (ACPI_FAILURE (Status))
> {
> AcpiUtRemoveReference (ResultDesc); /* Result descriptor */
> }
> else
> {
> /* Now the address and length are valid for this BufferField */
681,695c653
< if ((SrcDesc->Common.Type > (UINT8) INTERNAL_TYPE_REFERENCE) || !AcpiUtValidObjectType (SrcDesc->Common.Type)) /* This line MUST be a single line until AcpiSrc can handle it (block deletion) */
< {
< ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
< "Tried to create field in invalid object type %X\n",
< SrcDesc->Common.Type));
< }
< else
< {
< ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
< "Tried to create field in improper object type - %s\n",
< AcpiUtGetTypeName (SrcDesc->Common.Type)));
< }
<
< Status = AE_AML_OPERAND_TYPE;
< goto Cleanup;
---
> ObjDesc->BufferField.Flags |= AOPOBJ_DATA_VALID;
697a656,657
> return_ACPI_STATUS (Status);
> }
699,701d658
< if (AML_CREATE_FIELD_OP == Op->Opcode)
< {
< /* Delete object descriptor unique to CreateField */
703,705c660,672
< AcpiUtRemoveReference (CntDesc);
< CntDesc = NULL;
< }
---
> /*****************************************************************************
> *
> * FUNCTION: AcpiDsEvalBufferFieldOperands
> *
> * PARAMETERS: WalkState - Current walk
> * Op - A valid BufferField Op object
> *
> * RETURN: Status
> *
> * DESCRIPTION: Get BufferField Buffer and Index
> * Called from AcpiDsExecEndOp during BufferField parse tree walk
> *
> ****************************************************************************/
706a674,682
> ACPI_STATUS
> AcpiDsEvalBufferFieldOperands (
> ACPI_WALK_STATE *WalkState,
> ACPI_PARSE_OBJECT *Op)
> {
> ACPI_STATUS Status;
> ACPI_OPERAND_OBJECT *ObjDesc;
> ACPI_NAMESPACE_NODE *Node;
> ACPI_PARSE_OBJECT *NextOp;
708d683
< Cleanup:
710c685
< /* Always delete the operands */
---
> ACPI_FUNCTION_TRACE_PTR ("DsEvalBufferFieldOperands", Op);
712,713d686
< AcpiUtRemoveReference (OffDesc);
< AcpiUtRemoveReference (SrcDesc);
715c688,701
< if (AML_CREATE_FIELD_OP == Op->Opcode)
---
> /*
> * This is where we evaluate the address and length fields of the
> * CreateXxxField declaration
> */
> Node = Op->Common.Node;
>
> /* NextOp points to the op that holds the Buffer */
>
> NextOp = Op->Common.Value.Arg;
>
> /* Evaluate/create the address and length operands */
>
> Status = AcpiDsCreateOperands (WalkState, NextOp);
> if (ACPI_FAILURE (Status))
717c703
< AcpiUtRemoveReference (CntDesc);
---
> return_ACPI_STATUS (Status);
720c706,710
< /* On failure, delete the result descriptor */
---
> ObjDesc = AcpiNsGetAttachedObject (Node);
> if (!ObjDesc)
> {
> return_ACPI_STATUS (AE_NOT_EXIST);
> }
721a712,720
> /* Resolve the operands */
>
> Status = AcpiExResolveOperands (Op->Common.AmlOpcode,
> ACPI_WALK_OPERANDS, WalkState);
>
> ACPI_DUMP_OPERANDS (ACPI_WALK_OPERANDS, ACPI_IMODE_EXECUTE,
> AcpiPsGetOpcodeName (Op->Common.AmlOpcode),
> WalkState->NumOperands, "after AcpiExResolveOperands");
>
724c723,726
< AcpiUtRemoveReference (ResDesc); /* Result descriptor */
---
> ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "(%s) bad operand(s) (%X)\n",
> AcpiPsGetOpcodeName (Op->Common.AmlOpcode), Status));
>
> return_ACPI_STATUS (Status);
725a728,738
>
> /* Initialize the Buffer Field */
>
> if (Op->Common.AmlOpcode == AML_CREATE_FIELD_OP)
> {
> /* NOTE: Slightly different operands for this opcode */
>
> Status = AcpiDsInitBufferField (Op->Common.AmlOpcode, ObjDesc,
> WalkState->Operands[0], WalkState->Operands[1],
> WalkState->Operands[2], WalkState->Operands[3]);
> }
728c741
< /* Now the address and length are valid for this BufferField */
---
> /* All other, CreateXxxField opcodes */
730c743,745
< ObjDesc->BufferField.Flags |= AOPOBJ_DATA_VALID;
---
> Status = AcpiDsInitBufferField (Op->Common.AmlOpcode, ObjDesc,
> WalkState->Operands[0], WalkState->Operands[1],
> NULL, WalkState->Operands[2]);
741c756,757
< * PARAMETERS: Op - A valid region Op object
---
> * PARAMETERS: WalkState - Current walk
> * Op - A valid region Op object
768c784
< Node = Op->Node;
---
> Node = Op->Common.Node;
772c788
< NextOp = Op->Value.Arg;
---
> NextOp = Op->Common.Value.Arg;
776c792
< NextOp = NextOp->Next;
---
> NextOp = NextOp->Common.Next;
788c804
< Status = AcpiExResolveOperands (Op->Opcode, ACPI_WALK_OPERANDS, WalkState);
---
> Status = AcpiExResolveOperands (Op->Common.AmlOpcode, ACPI_WALK_OPERANDS, WalkState);
795c811
< AcpiPsGetOpcodeName (Op->Opcode),
---
> AcpiPsGetOpcodeName (Op->Common.AmlOpcode),
840c856,858
< * PARAMETERS: Op - A valid DataObject Op object
---
> * PARAMETERS: WalkState - Current walk
> * Op - A valid DataObject Op object
> * ObjDesc - DataObject
866c884
< Status = AcpiDsCreateOperand (WalkState, Op->Value.Arg, 1);
---
> Status = AcpiDsCreateOperand (WalkState, Op->Common.Value.Arg, 1);
887c905,910
< AcpiDsObjStackPop (1, WalkState);
---
> Status = AcpiDsObjStackPop (1, WalkState);
> if (ACPI_FAILURE (Status))
> {
> return_ACPI_STATUS (Status);
> }
>
893c916
< switch (Op->Opcode)
---
> switch (Op->Common.AmlOpcode)
917,920c940,943
< if ((!Op->Parent) ||
< ((Op->Parent->Opcode != AML_PACKAGE_OP) &&
< (Op->Parent->Opcode != AML_VAR_PACKAGE_OP) &&
< (Op->Parent->Opcode != AML_NAME_OP)))
---
> if ((!Op->Common.Parent) ||
> ((Op->Common.Parent->Common.AmlOpcode != AML_PACKAGE_OP) &&
> (Op->Common.Parent->Common.AmlOpcode != AML_VAR_PACKAGE_OP) &&
> (Op->Common.Parent->Common.AmlOpcode != AML_NAME_OP)))
958c981
< Op->Opcode, WalkState));
---
> Op->Common.AmlOpcode, WalkState));
960c983
< switch (Op->Opcode)
---
> switch (Op->Common.AmlOpcode)
982c1005
< ControlState->Control.Opcode = Op->Opcode;
---
> ControlState->Control.Opcode = Op->Common.AmlOpcode;
1040c1063
< switch (Op->Opcode)
---
> switch (Op->Common.AmlOpcode)
1092c1115
< "[RETURN_OP] Op=%p Arg=%p\n",Op, Op->Value.Arg));
---
> "[RETURN_OP] Op=%p Arg=%p\n",Op, Op->Common.Value.Arg));
1099c1122
< if (Op->Value.Arg)
---
> if (Op->Common.Value.Arg)
1103c1126
< Status = AcpiDsCreateOperands (WalkState, Op->Value.Arg);
---
> Status = AcpiDsCreateOperands (WalkState, Op->Common.Value.Arg);
1139,1140c1162,1163
< if ((ACPI_GET_DESCRIPTOR_TYPE (WalkState->Results->Results.ObjDesc[0]) == ACPI_DESC_TYPE_INTERNAL) &&
< ((WalkState->Results->Results.ObjDesc [0])->Common.Type == INTERNAL_TYPE_REFERENCE) &&
---
> if ((ACPI_GET_DESCRIPTOR_TYPE (WalkState->Results->Results.ObjDesc[0]) == ACPI_DESC_TYPE_OPERAND) &&
> (ACPI_GET_OBJECT_TYPE (WalkState->Results->Results.ObjDesc [0]) == INTERNAL_TYPE_REFERENCE) &&
1187c1210
< AcpiOsSignal (ACPI_SIGNAL_BREAKPOINT, "Executed AML Breakpoint opcode");
---
> Status = AcpiOsSignal (ACPI_SIGNAL_BREAKPOINT, "Executed AML Breakpoint opcode");
1220c1243
< if (Op->Opcode == AML_BREAK_OP)
---
> if (Op->Common.AmlOpcode == AML_BREAK_OP)
1234c1257
< Op->Opcode, Op));
---
> Op->Common.AmlOpcode, Op));