ReactOS  0.4.15-dev-316-g938df97
dswload2.c File Reference
#include "acpi.h"
#include "accommon.h"
#include "acparser.h"
#include "amlcode.h"
#include "acdispat.h"
#include "acinterp.h"
#include "acnamesp.h"
#include "acevents.h"
Include dependency graph for dswload2.c:

Go to the source code of this file.

Macros

#define _COMPONENT   ACPI_DISPATCHER
 

Functions

ACPI_STATUS AcpiDsLoad2BeginOp (ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT **OutOp)
 
ACPI_STATUS AcpiDsLoad2EndOp (ACPI_WALK_STATE *WalkState)
 

Macro Definition Documentation

◆ _COMPONENT

#define _COMPONENT   ACPI_DISPATCHER

Definition at line 56 of file dswload2.c.

Function Documentation

◆ AcpiDsLoad2BeginOp()

ACPI_STATUS AcpiDsLoad2BeginOp ( ACPI_WALK_STATE WalkState,
ACPI_PARSE_OBJECT **  OutOp 
)

Definition at line 74 of file dswload2.c.

77 {
82  char *BufferPtr;
83  UINT32 Flags;
84 
85 
86  ACPI_FUNCTION_TRACE (DsLoad2BeginOp);
87 
88 
89  Op = WalkState->Op;
90  ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op=%p State=%p\n", Op, WalkState));
91 
92  if (Op)
93  {
94  if ((WalkState->ControlState) &&
95  (WalkState->ControlState->Common.State ==
97  {
98  /* We are executing a while loop outside of a method */
99 
100  Status = AcpiDsExecBeginOp (WalkState, OutOp);
102  }
103 
104  /* We only care about Namespace opcodes here */
105 
106  if ((!(WalkState->OpInfo->Flags & AML_NSOPCODE) &&
107  (WalkState->Opcode != AML_INT_NAMEPATH_OP)) ||
108  (!(WalkState->OpInfo->Flags & AML_NAMED)))
109  {
111  }
112 
113  /* Get the name we are going to enter or lookup in the namespace */
114 
115  if (WalkState->Opcode == AML_INT_NAMEPATH_OP)
116  {
117  /* For Namepath op, get the path string */
118 
119  BufferPtr = Op->Common.Value.String;
120  if (!BufferPtr)
121  {
122  /* No name, just exit */
123 
125  }
126  }
127  else
128  {
129  /* Get name from the op */
130 
131  BufferPtr = ACPI_CAST_PTR (char, &Op->Named.Name);
132  }
133  }
134  else
135  {
136  /* Get the namestring from the raw AML */
137 
138  BufferPtr = AcpiPsGetNextNamestring (&WalkState->ParserState);
139  }
140 
141  /* Map the opcode into an internal object type */
142 
143  ObjectType = WalkState->OpInfo->ObjectType;
144 
146  "State=%p Op=%p Type=%X\n", WalkState, Op, ObjectType));
147 
148  switch (WalkState->Opcode)
149  {
150  case AML_FIELD_OP:
151  case AML_BANK_FIELD_OP:
152  case AML_INDEX_FIELD_OP:
153 
154  Node = NULL;
155  Status = AE_OK;
156  break;
157 
158  case AML_INT_NAMEPATH_OP:
159  /*
160  * The NamePath is an object reference to an existing object.
161  * Don't enter the name into the namespace, but look it up
162  * for use later.
163  */
164  Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType,
166  WalkState, &(Node));
167  break;
168 
169  case AML_SCOPE_OP:
170 
171  /* Special case for Scope(\) -> refers to the Root node */
172 
173  if (Op && (Op->Named.Node == AcpiGbl_RootNode))
174  {
175  Node = Op->Named.Node;
176 
177  Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState);
178  if (ACPI_FAILURE (Status))
179  {
181  }
182  }
183  else
184  {
185  /*
186  * The Path is an object reference to an existing object.
187  * Don't enter the name into the namespace, but look it up
188  * for use later.
189  */
190  Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType,
192  WalkState, &(Node));
193  if (ACPI_FAILURE (Status))
194  {
195 #ifdef ACPI_ASL_COMPILER
196  if (Status == AE_NOT_FOUND)
197  {
198  Status = AE_OK;
199  }
200  else
201  {
202  ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
203  BufferPtr, Status);
204  }
205 #else
206  ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
207  BufferPtr, Status);
208 #endif
210  }
211  }
212 
213  /*
214  * We must check to make sure that the target is
215  * one of the opcodes that actually opens a scope
216  */
217  switch (Node->Type)
218  {
219  case ACPI_TYPE_ANY:
220  case ACPI_TYPE_LOCAL_SCOPE: /* Scope */
221  case ACPI_TYPE_DEVICE:
222  case ACPI_TYPE_POWER:
223  case ACPI_TYPE_PROCESSOR:
224  case ACPI_TYPE_THERMAL:
225 
226  /* These are acceptable types */
227  break;
228 
229  case ACPI_TYPE_INTEGER:
230  case ACPI_TYPE_STRING:
231  case ACPI_TYPE_BUFFER:
232 
233  /*
234  * These types we will allow, but we will change the type.
235  * This enables some existing code of the form:
236  *
237  * Name (DEB, 0)
238  * Scope (DEB) { ... }
239  */
241  "Type override - [%4.4s] had invalid type (%s) "
242  "for Scope operator, changed to type ANY",
244 
245  Node->Type = ACPI_TYPE_ANY;
246  WalkState->ScopeInfo->Common.Value = ACPI_TYPE_ANY;
247  break;
248 
249  case ACPI_TYPE_METHOD:
250 
251  /*
252  * Allow scope change to root during execution of module-level
253  * code. Root is typed METHOD during this time.
254  */
255  if ((Node == AcpiGbl_RootNode) &&
256  (WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL))
257  {
258  break;
259  }
260 
261  /*lint -fallthrough */
262 
263  default:
264 
265  /* All other types are an error */
266 
268  "Invalid type (%s) for target of "
269  "Scope operator [%4.4s] (Cannot override)",
271 
273  }
274  break;
275 
276  default:
277 
278  /* All other opcodes */
279 
280  if (Op && Op->Common.Node)
281  {
282  /* This op/node was previously entered into the namespace */
283 
284  Node = Op->Common.Node;
285 
287  {
288  Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState);
289  if (ACPI_FAILURE (Status))
290  {
292  }
293  }
294 
296  }
297 
298  /*
299  * Enter the named type into the internal namespace. We enter the name
300  * as we go downward in the parse tree. Any necessary subobjects that
301  * involve arguments to the opcode must be created as we go back up the
302  * parse tree later.
303  *
304  * Note: Name may already exist if we are executing a deferred opcode.
305  */
306  if (WalkState->DeferredNode)
307  {
308  /* This name is already in the namespace, get the node */
309 
310  Node = WalkState->DeferredNode;
311  Status = AE_OK;
312  break;
313  }
314 
316  if (WalkState->PassNumber == ACPI_IMODE_EXECUTE)
317  {
318  /* Execution mode, node cannot already exist, node is temporary */
319 
321 
322  if (!(WalkState->ParseFlags & ACPI_PARSE_MODULE_LEVEL))
323  {
325  }
326  }
327 
328 #ifdef ACPI_ASL_COMPILER
329 
330  /*
331  * Do not open a scope for AML_EXTERNAL_OP
332  * AcpiNsLookup can open a new scope based on the object type
333  * of this op. AML_EXTERNAL_OP is a declaration rather than a
334  * definition. In the case that this external is a method object,
335  * AcpiNsLookup will open a new scope. However, an AML_EXTERNAL_OP
336  * associated with the ACPI_TYPE_METHOD is a declaration, rather than
337  * a definition. Flags is set to avoid opening a scope for any
338  * AML_EXTERNAL_OP.
339  */
340  if (WalkState->Opcode == AML_EXTERNAL_OP)
341  {
343  }
344 #endif
345 
346  /*
347  * For name creation opcodes, the full namepath prefix must
348  * exist, except for the final (new) nameseg.
349  */
350  if (WalkState->OpInfo->Flags & AML_NAMED)
351  {
353  }
354 
355  /* Add new entry or lookup existing entry */
356 
357  Status = AcpiNsLookup (WalkState->ScopeInfo, BufferPtr, ObjectType,
358  ACPI_IMODE_LOAD_PASS2, Flags, WalkState, &Node);
359 
361  {
363  "***New Node [%4.4s] %p is temporary\n",
365  }
366  break;
367  }
368 
369  if (ACPI_FAILURE (Status))
370  {
371  ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
372  BufferPtr, Status);
374  }
375 
376  if (!Op)
377  {
378  /* Create a new op */
379 
380  Op = AcpiPsAllocOp (WalkState->Opcode, WalkState->Aml);
381  if (!Op)
382  {
384  }
385 
386  /* Initialize the new op */
387 
388  if (Node)
389  {
390  Op->Named.Name = Node->Name.Integer;
391  }
392  *OutOp = Op;
393  }
394 
395  /*
396  * Put the Node in the "op" object that the parser uses, so we
397  * can get it again quickly when this scope is closed
398  */
399  Op->Common.Node = Node;
401 }
#define ACPI_NS_TEMPORARY
Definition: acnamesp.h:69
#define ACPI_NS_SEARCH_PARENT
Definition: acnamesp.h:63
ObjectType
Definition: metafile.c:80
ACPI_PARSE_OBJ_COMMON Common
Definition: aclocal.h:1078
#define AML_NAMED
Definition: amlcode.h:323
#define ACPI_SUCCESS(a)
Definition: acexcep.h:94
ACPI_STATUS AcpiNsLookup(ACPI_GENERIC_STATE *ScopeInfo, char *Name, ACPI_OBJECT_TYPE Type, ACPI_INTERPRETER_MODE InterpreterMode, UINT32 Flags, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE **RetNode)
Definition: nsaccess.c:329
#define ACPI_TYPE_THERMAL
Definition: actypes.h:692
#define AE_NO_MEMORY
Definition: acexcep.h:112
#define ACPI_WARNING(plist)
Definition: acoutput.h:238
#define ACPI_TYPE_BUFFER
Definition: actypes.h:682
#define ACPI_TYPE_INTEGER
Definition: actypes.h:680
#define ACPI_TYPE_POWER
Definition: actypes.h:690
ACPI_STATUS AcpiDsScopeStackPush(ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_TYPE Type, ACPI_WALK_STATE *WalkState)
Definition: dswscope.c:107
UINT8 ObjectType
Definition: aclocal.h:874
struct acpi_namespace_node * DeferredNode
Definition: acstruct.h:111
ACPI_PARSE_OBJECT * AcpiPsAllocOp(UINT16 Opcode, UINT8 *Aml)
Definition: psutils.c:130
#define ACPI_NS_ERROR_IF_FOUND
Definition: acnamesp.h:66
UINT32 ParseFlags
Definition: acstruct.h:95
UINT32 ACPI_STATUS
Definition: actypes.h:460
#define ACPI_NS_PREFIX_MUST_EXIST
Definition: acnamesp.h:72
ACPI_GENERIC_STATE * ControlState
Definition: acstruct.h:110
#define AE_AML_OPERAND_TYPE
Definition: acexcep.h:182
#define AML_EXTERNAL_OP
Definition: amlcode.h:65
#define AML_INT_NAMEPATH_OP
Definition: amlcode.h:205
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
#define ACPI_FAILURE(a)
Definition: acexcep.h:95
char * AcpiPsGetNextNamestring(ACPI_PARSE_STATE *ParserState)
Definition: psargs.c:172
unsigned int UINT32
union node Node
Definition: types.h:1255
#define ACPI_NS_DONT_OPEN_SCOPE
Definition: acnamesp.h:64
#define AE_INFO
Definition: acoutput.h:230
smooth NULL
Definition: ftsmooth.c:416
UINT32 ACPI_OBJECT_TYPE
Definition: actypes.h:677
ACPI_PARSE_OBJ_NAMED Named
Definition: aclocal.h:1079
UINT32 AcpiNsOpensScope(ACPI_OBJECT_TYPE Type)
Definition: nsutils.c:736
#define ACPI_DB_DISPATCH
Definition: acoutput.h:163
#define AML_BANK_FIELD_OP
Definition: amlcode.h:187
#define AML_NSOPCODE
Definition: amlcode.h:325
#define ACPI_TYPE_METHOD
Definition: actypes.h:687
ACPI_PARSE_OBJECT * Op
Definition: acstruct.h:118
#define AML_FIELD_OP
Definition: amlcode.h:181
#define ACPI_DEBUG_PRINT(pl)
Definition: acoutput.h:475
#define AML_SCOPE_OP
Definition: amlcode.h:60
#define AE_NOT_FOUND
Definition: acexcep.h:113
const ACPI_OPCODE_INFO * OpInfo
Definition: acstruct.h:119
#define AML_INDEX_FIELD_OP
Definition: amlcode.h:186
ACPI_GENERIC_STATE * ScopeInfo
Definition: acstruct.h:124
#define ACPI_TYPE_ANY
Definition: actypes.h:679
ACPI_PARSE_STATE ParserState
Definition: acstruct.h:97
ACPI_STATUS AcpiDsExecBeginOp(ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT **OutOp)
Definition: dswexec.c:234
#define ACPI_TYPE_DEVICE
Definition: actypes.h:685
ACPI_COMMON_STATE Common
Definition: aclocal.h:822
#define ACPI_TYPE_PROCESSOR
Definition: actypes.h:691
Status
Definition: gdiplustypes.h:24
#define return_ACPI_STATUS(s)
Definition: acoutput.h:496
#define ACPI_NS_NO_UPSEARCH
Definition: acnamesp.h:62
#define ACPI_FUNCTION_TRACE(a)
Definition: acoutput.h:480
#define ACPI_PARSE_MODULE_LEVEL
Definition: acparser.h:67
const char * AcpiUtGetTypeName(ACPI_OBJECT_TYPE Type)
Definition: utdecode.c:249
#define ACPI_ERROR(plist)
Definition: acoutput.h:240
const char * AcpiUtGetNodeName(void *Object)
Definition: utdecode.c:305
UINT8 PassNumber
Definition: acstruct.h:87
#define ACPI_TYPE_LOCAL_SCOPE
Definition: actypes.h:718
UINT16 Opcode
Definition: acstruct.h:78
#define ACPI_TYPE_STRING
Definition: actypes.h:681
#define ACPI_CAST_PTR(t, p)
Definition: actypes.h:544
#define ACPI_ERROR_NAMESPACE(s, p, e)
Definition: acmacros.h:462
#define ACPI_CONTROL_CONDITIONAL_EXECUTING
Definition: aclocal.h:670
#define AE_OK
Definition: acexcep.h:97
UINT16 Flags
Definition: aclocal.h:873
Definition: dlist.c:348
UINT8 * Aml
Definition: acstruct.h:91

Referenced by AcpiDsExecBeginOp(), and AcpiDsInitCallbacks().

◆ AcpiDsLoad2EndOp()

ACPI_STATUS AcpiDsLoad2EndOp ( ACPI_WALK_STATE WalkState)

Definition at line 418 of file dswload2.c.

420 {
421  ACPI_PARSE_OBJECT *Op;
425  ACPI_PARSE_OBJECT *Arg;
426  ACPI_NAMESPACE_NODE *NewNode;
427  UINT32 i;
428  UINT8 RegionSpace;
429 #ifdef ACPI_EXEC_APP
430  ACPI_OPERAND_OBJECT *ObjDesc;
431  char *Namepath;
432 #endif
433 
434 
435  ACPI_FUNCTION_TRACE (DsLoad2EndOp);
436 
437  Op = WalkState->Op;
438  ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Opcode [%s] Op %p State %p\n",
439  WalkState->OpInfo->Name, Op, WalkState));
440 
441  /* Check if opcode had an associated namespace object */
442 
443  if (!(WalkState->OpInfo->Flags & AML_NSOBJECT))
444  {
446  }
447 
448  if (Op->Common.AmlOpcode == AML_SCOPE_OP)
449  {
451  "Ending scope Op=%p State=%p\n", Op, WalkState));
452  }
453 
454  ObjectType = WalkState->OpInfo->ObjectType;
455 
456  /*
457  * Get the Node/name from the earlier lookup
458  * (It was saved in the *op structure)
459  */
460  Node = Op->Common.Node;
461 
462  /*
463  * Put the Node on the object stack (Contains the ACPI Name of
464  * this object)
465  */
466  WalkState->Operands[0] = (void *) Node;
467  WalkState->NumOperands = 1;
468 
469  /* Pop the scope stack */
470 
472  (Op->Common.AmlOpcode != AML_INT_METHODCALL_OP))
473  {
474  ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "(%s) Popping scope for Op %p\n",
476 
477  Status = AcpiDsScopeStackPop (WalkState);
478  if (ACPI_FAILURE (Status))
479  {
480  goto Cleanup;
481  }
482  }
483 
484  /*
485  * Named operations are as follows:
486  *
487  * AML_ALIAS
488  * AML_BANKFIELD
489  * AML_CREATEBITFIELD
490  * AML_CREATEBYTEFIELD
491  * AML_CREATEDWORDFIELD
492  * AML_CREATEFIELD
493  * AML_CREATEQWORDFIELD
494  * AML_CREATEWORDFIELD
495  * AML_DATA_REGION
496  * AML_DEVICE
497  * AML_EVENT
498  * AML_FIELD
499  * AML_INDEXFIELD
500  * AML_METHOD
501  * AML_METHODCALL
502  * AML_MUTEX
503  * AML_NAME
504  * AML_NAMEDFIELD
505  * AML_OPREGION
506  * AML_POWERRES
507  * AML_PROCESSOR
508  * AML_SCOPE
509  * AML_THERMALZONE
510  */
511 
513  "Create-Load [%s] State=%p Op=%p NamedObj=%p\n",
514  AcpiPsGetOpcodeName (Op->Common.AmlOpcode), WalkState, Op, Node));
515 
516  /* Decode the opcode */
517 
518  Arg = Op->Common.Value.Arg;
519 
520  switch (WalkState->OpInfo->Type)
521  {
522 
524  /*
525  * Create the field object, but the field buffer and index must
526  * be evaluated later during the execution phase
527  */
528  Status = AcpiDsCreateBufferField (Op, WalkState);
529  if ACPI_FAILURE (Status)
530  {
531  ACPI_EXCEPTION ((AE_INFO, Status, "CreateBufferField failure"));
532  goto Cleanup;
533  }
534  break;
535 
537  /*
538  * If we are executing a method, initialize the field
539  */
540  if (WalkState->MethodNode)
541  {
542  Status = AcpiDsInitFieldObjects (Op, WalkState);
543  }
544 
545  switch (Op->Common.AmlOpcode)
546  {
547  case AML_INDEX_FIELD_OP:
548 
550  Op, (ACPI_HANDLE) Arg->Common.Node, WalkState);
551  break;
552 
553  case AML_BANK_FIELD_OP:
554 
555  Status = AcpiDsCreateBankField (Op, Arg->Common.Node, WalkState);
556  break;
557 
558  case AML_FIELD_OP:
559 
560  Status = AcpiDsCreateField (Op, Arg->Common.Node, WalkState);
561  break;
562 
563  default:
564 
565  /* All NAMED_FIELD opcodes must be handled above */
566  break;
567  }
568  break;
569 
571 
572  Status = AcpiDsCreateOperands (WalkState, Arg);
573  if (ACPI_FAILURE (Status))
574  {
575  goto Cleanup;
576  }
577 
578  switch (Op->Common.AmlOpcode)
579  {
580  case AML_PROCESSOR_OP:
581 
582  Status = AcpiExCreateProcessor (WalkState);
583  break;
584 
586 
587  Status = AcpiExCreatePowerResource (WalkState);
588  break;
589 
590  case AML_MUTEX_OP:
591 
592  Status = AcpiExCreateMutex (WalkState);
593  break;
594 
595  case AML_EVENT_OP:
596 
597  Status = AcpiExCreateEvent (WalkState);
598  break;
599 
600  case AML_ALIAS_OP:
601 
602  Status = AcpiExCreateAlias (WalkState);
603  break;
604 
605  default:
606 
607  /* Unknown opcode */
608 
609  Status = AE_OK;
610  goto Cleanup;
611  }
612 
613  /* Delete operands */
614 
615  for (i = 1; i < WalkState->NumOperands; i++)
616  {
617  AcpiUtRemoveReference (WalkState->Operands[i]);
618  WalkState->Operands[i] = NULL;
619  }
620 
621  break;
622 
624 
625  switch (Op->Common.AmlOpcode)
626  {
627  case AML_REGION_OP:
628  case AML_DATA_REGION_OP:
629 
630  if (Op->Common.AmlOpcode == AML_REGION_OP)
631  {
632  RegionSpace = (ACPI_ADR_SPACE_TYPE)
633  ((Op->Common.Value.Arg)->Common.Value.Integer);
634  }
635  else
636  {
637  RegionSpace = ACPI_ADR_SPACE_DATA_TABLE;
638  }
639 
640  /*
641  * The OpRegion is not fully parsed at this time. The only valid
642  * argument is the SpaceId. (We must save the address of the
643  * AML of the address and length operands)
644  *
645  * If we have a valid region, initialize it. The namespace is
646  * unlocked at this point.
647  *
648  * Need to unlock interpreter if it is locked (if we are running
649  * a control method), in order to allow _REG methods to be run
650  * during AcpiEvInitializeRegion.
651  */
652  if (WalkState->MethodNode)
653  {
654  /*
655  * Executing a method: initialize the region and unlock
656  * the interpreter
657  */
659  Op->Named.Length, RegionSpace, WalkState);
660  if (ACPI_FAILURE (Status))
661  {
663  }
664  }
665 
668  break;
669 
670  case AML_NAME_OP:
671 
672  Status = AcpiDsCreateNode (WalkState, Node, Op);
673  if (ACPI_FAILURE (Status))
674  {
675  goto Cleanup;
676  }
677 
678 #ifdef ACPI_EXEC_APP
679  /*
680  * AcpiExec support for namespace initialization file (initialize
681  * Name opcodes in this code.)
682  */
683  Namepath = AcpiNsGetExternalPathname (Node);
684  Status = AeLookupInitFileEntry (Namepath, &ObjDesc);
685  if (ACPI_SUCCESS (Status))
686  {
687  /* Detach any existing object, attach new object */
688 
689  if (Node->Object)
690  {
692  }
693  AcpiNsAttachObject (Node, ObjDesc, ObjDesc->Common.Type);
694  }
695  ACPI_FREE (Namepath);
696  Status = AE_OK;
697 #endif
698  break;
699 
700  case AML_METHOD_OP:
701  /*
702  * MethodOp PkgLength NameString MethodFlags TermList
703  *
704  * Note: We must create the method node/object pair as soon as we
705  * see the method declaration. This allows later pass1 parsing
706  * of invocations of the method (need to know the number of
707  * arguments.)
708  */
710  "LOADING-Method: State=%p Op=%p NamedObj=%p\n",
711  WalkState, Op, Op->Named.Node));
712 
713  if (!AcpiNsGetAttachedObject (Op->Named.Node))
714  {
715  WalkState->Operands[0] = ACPI_CAST_PTR (void, Op->Named.Node);
716  WalkState->NumOperands = 1;
717 
719  WalkState, Op->Common.Value.Arg);
720  if (ACPI_SUCCESS (Status))
721  {
723  Op->Named.Data, Op->Named.Length, WalkState);
724  }
725 
726  WalkState->Operands[0] = NULL;
727  WalkState->NumOperands = 0;
728 
729  if (ACPI_FAILURE (Status))
730  {
732  }
733  }
734  break;
735 
736 
737  default:
738 
739  /* All NAMED_COMPLEX opcodes must be handled above */
740  break;
741  }
742  break;
743 
744  case AML_CLASS_INTERNAL:
745 
746  /* case AML_INT_NAMEPATH_OP: */
747  break;
748 
750 
752  "RESOLVING-MethodCall: State=%p Op=%p NamedObj=%p\n",
753  WalkState, Op, Node));
754 
755  /*
756  * Lookup the method name and save the Node
757  */
758  Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Common.Value.String,
761  WalkState, &(NewNode));
762  if (ACPI_SUCCESS (Status))
763  {
764  /*
765  * Make sure that what we found is indeed a method
766  * We didn't search for a method on purpose, to see if the name
767  * would resolve
768  */
769  if (NewNode->Type != ACPI_TYPE_METHOD)
770  {
772  }
773 
774  /* We could put the returned object (Node) on the object stack for
775  * later, but for now, we will put it in the "op" object that the
776  * parser uses, so we can get it again at the end of this scope
777  */
778  Op->Common.Node = NewNode;
779  }
780  else
781  {
782  ACPI_ERROR_NAMESPACE (WalkState->ScopeInfo,
783  Arg->Common.Value.String, Status);
784  }
785  break;
786 
787 
788  default:
789 
790  break;
791  }
792 
793 Cleanup:
794 
795  /* Remove the Node pushed at the very beginning */
796 
797  WalkState->Operands[0] = NULL;
798  WalkState->NumOperands = 0;
800 }
#define ACPI_EXCEPTION(plist)
Definition: acoutput.h:239
ACPI_STATUS AcpiDsCreateOperands(ACPI_WALK_STATE *WalkState, ACPI_PARSE_OBJECT *FirstArg)
Definition: dsutils.c:753
#define ACPI_NS_SEARCH_PARENT
Definition: acnamesp.h:63
#define ACPI_FREE(a)
Definition: actypes.h:386
ACPI_STATUS AcpiDsInitFieldObjects(ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState)
Definition: dsfield.c:617
ObjectType
Definition: metafile.c:80
ACPI_STATUS AcpiEvInitializeRegion(ACPI_OPERAND_OBJECT *RegionObj)
Definition: evrgnini.c:568
ACPI_PARSE_OBJ_COMMON Common
Definition: aclocal.h:1078
UINT8 ACPI_ADR_SPACE_TYPE
Definition: actypes.h:850
const char * AcpiPsGetOpcodeName(UINT16 Opcode)
Definition: psopinfo.c:169
#define ACPI_SUCCESS(a)
Definition: acexcep.h:94
ACPI_STATUS AcpiNsLookup(ACPI_GENERIC_STATE *ScopeInfo, char *Name, ACPI_OBJECT_TYPE Type, ACPI_INTERPRETER_MODE InterpreterMode, UINT32 Flags, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE **RetNode)
Definition: nsaccess.c:329
ACPI_STATUS AcpiDsScopeStackPop(ACPI_WALK_STATE *WalkState)
Definition: dswscope.c:192
UINT8 NumOperands
Definition: acstruct.h:80
#define AML_NSOBJECT
Definition: amlcode.h:326
ACPI_STATUS AcpiExCreatePowerResource(ACPI_WALK_STATE *WalkState)
Definition: excreate.c:432
#define AML_INT_METHODCALL_OP
Definition: amlcode.h:210
UINT8 ObjectType
Definition: aclocal.h:874
#define ACPI_ADR_SPACE_DATA_TABLE
Definition: actypes.h:874
UINT32 ACPI_STATUS
Definition: actypes.h:460
ACPI_STATUS AcpiDsCreateBankField(ACPI_PARSE_OBJECT *Op, ACPI_NAMESPACE_NODE *RegionNode, ACPI_WALK_STATE *WalkState)
Definition: dsfield.c:748
#define AE_AML_OPERAND_TYPE
Definition: acexcep.h:182
#define AML_REGION_OP
Definition: amlcode.h:180
#define ACPI_FAILURE(a)
Definition: acexcep.h:95
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define AML_NAME_OP
Definition: amlcode.h:54
ACPI_STATUS AcpiExCreateMethod(UINT8 *AmlStart, UINT32 AmlLength, ACPI_WALK_STATE *WalkState)
Definition: excreate.c:483
#define AML_TYPE_NAMED_SIMPLE
Definition: amlcode.h:384
unsigned int UINT32
union node Node
Definition: types.h:1255
#define ACPI_NS_DONT_OPEN_SCOPE
Definition: acnamesp.h:64
#define AML_PROCESSOR_OP
Definition: amlcode.h:183
ACPI_STATUS AcpiDsCreateField(ACPI_PARSE_OBJECT *Op, ACPI_NAMESPACE_NODE *RegionNode, ACPI_WALK_STATE *WalkState)
Definition: dsfield.c:534
smooth NULL
Definition: ftsmooth.c:416
#define AE_INFO
Definition: acoutput.h:230
#define AML_MUTEX_OP
Definition: amlcode.h:158
UINT32 ACPI_OBJECT_TYPE
Definition: actypes.h:677
ACPI_PARSE_OBJ_NAMED Named
Definition: aclocal.h:1079
#define AML_CLASS_METHOD_CALL
Definition: amlcode.h:409
UINT32 AcpiNsOpensScope(ACPI_OBJECT_TYPE Type)
Definition: nsutils.c:736
#define ACPI_DB_DISPATCH
Definition: acoutput.h:163
void AcpiNsDetachObject(ACPI_NAMESPACE_NODE *Node)
Definition: nsobject.c:220
#define AML_BANK_FIELD_OP
Definition: amlcode.h:187
#define ACPI_TYPE_METHOD
Definition: actypes.h:687
char * AcpiNsGetExternalPathname(ACPI_NAMESPACE_NODE *Node)
Definition: nsnames.c:70
ACPI_STATUS AcpiExCreateRegion(UINT8 *AmlStart, UINT32 AmlLength, UINT8 SpaceId, ACPI_WALK_STATE *WalkState)
Definition: excreate.c:268
#define AML_EVENT_OP
Definition: amlcode.h:159
ACPI_PARSE_OBJECT * Op
Definition: acstruct.h:118
ACPI_STATUS AcpiExCreateAlias(ACPI_WALK_STATE *WalkState)
Definition: excreate.c:68
#define AML_FIELD_OP
Definition: amlcode.h:181
#define ACPI_DEBUG_PRINT(pl)
Definition: acoutput.h:475
ACPI_STATUS AcpiDsCreateNode(ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE *Node, ACPI_PARSE_OBJECT *Op)
Definition: dsobject.c:302
#define AML_SCOPE_OP
Definition: amlcode.h:60
ACPI_OPERAND_OBJECT * AcpiNsGetAttachedObject(ACPI_NAMESPACE_NODE *Node)
Definition: nsobject.c:308
ACPI_STATUS AcpiDsCreateIndexField(ACPI_PARSE_OBJECT *Op, ACPI_NAMESPACE_NODE *RegionNode, ACPI_WALK_STATE *WalkState)
Definition: dsfield.c:842
#define AML_ALIAS_OP
Definition: amlcode.h:53
const ACPI_OPCODE_INFO * OpInfo
Definition: acstruct.h:119
#define AML_INDEX_FIELD_OP
Definition: amlcode.h:186
ACPI_GENERIC_STATE * ScopeInfo
Definition: acstruct.h:124
#define ACPI_TYPE_ANY
Definition: actypes.h:679
#define AML_METHOD_OP
Definition: amlcode.h:64
static const WCHAR Cleanup[]
Definition: register.c:80
struct acpi_namespace_node * MethodNode
Definition: acstruct.h:116
Status
Definition: gdiplustypes.h:24
union acpi_operand_object * Operands[ACPI_OBJ_NUM_OPERANDS+1]
Definition: acstruct.h:105
ACPI_STATUS AcpiNsAttachObject(ACPI_NAMESPACE_NODE *Node, ACPI_OPERAND_OBJECT *Object, ACPI_OBJECT_TYPE Type)
Definition: nsobject.c:76
ACPI_STATUS AcpiExCreateMutex(ACPI_WALK_STATE *WalkState)
Definition: excreate.c:206
#define return_ACPI_STATUS(s)
Definition: acoutput.h:496
#define ACPI_FUNCTION_TRACE(a)
Definition: acoutput.h:480
ACPI_OBJECT_COMMON Common
Definition: acobject.h:517
void AcpiUtRemoveReference(ACPI_OPERAND_OBJECT *Object)
Definition: utdelete.c:785
const char * AcpiUtGetTypeName(ACPI_OBJECT_TYPE Type)
Definition: utdecode.c:249
#define AML_CLASS_INTERNAL
Definition: amlcode.h:407
#define AML_TYPE_NAMED_COMPLEX
Definition: amlcode.h:385
#define AML_TYPE_NAMED_FIELD
Definition: amlcode.h:383
#define AML_TYPE_CREATE_FIELD
Definition: amlcode.h:379
ACPI_STATUS AcpiDsCreateBufferField(ACPI_PARSE_OBJECT *Op, ACPI_WALK_STATE *WalkState)
Definition: dsfield.c:165
ACPI_STATUS AcpiExCreateEvent(ACPI_WALK_STATE *WalkState)
Definition: excreate.c:147
#define ACPI_CAST_PTR(t, p)
Definition: actypes.h:544
#define ACPI_ERROR_NAMESPACE(s, p, e)
Definition: acmacros.h:462
unsigned char UINT8
#define AML_DATA_REGION_OP
Definition: amlcode.h:188
#define AE_OK
Definition: acexcep.h:97
UINT16 Flags
Definition: aclocal.h:873
ACPI_STATUS AcpiExCreateProcessor(ACPI_WALK_STATE *WalkState)
Definition: excreate.c:380
Definition: dlist.c:348
#define AML_POWER_RESOURCE_OP
Definition: amlcode.h:184

Referenced by AcpiDsExecEndOp(), and AcpiDsInitCallbacks().