336{
339 char *ExternalPath;
351
352
354
355
356 if (!ReturnNode)
357 {
359 }
360
365 AcpiGbl_NsLookupCount++;
366
367 if (!AcpiGbl_RootNode)
368 {
370 }
371
372
373
374 if ((!ScopeInfo) ||
376 {
378 "Null scope prefix, using root node (%p)\n",
379 AcpiGbl_RootNode));
380
381 PrefixNode = AcpiGbl_RootNode;
382 }
383 else
384 {
387 {
391 }
392
394 {
395
396
397
398
399
402 {
403 PrefixNode = PrefixNode->
Parent;
404 }
405 }
406 }
407
408
409
410 TypeToCheckFor =
Type;
411
412
413
414
416 {
417
418
419 NumSegments = 0;
420 ThisNode = AcpiGbl_RootNode;
422
424 "Null Pathname (Zero segments), Flags=%X\n",
Flags));
425 }
426 else
427 {
428
429
430
431
432
433
434
435
436
437
438
439
440
442 {
443
444
445 ThisNode = AcpiGbl_RootNode;
447
448
449
451
453 "Path is absolute from root [%p]\n", ThisNode));
454 }
455 else
456 {
457
458
460 "Searching relative to prefix scope [%4.4s] (%p)\n",
462
463
464
465
466
467 ThisNode = PrefixNode;
468 NumCarats = 0;
470 {
471
472
474
475
476
477
478
480
481
482
483 NumCarats++;
484 ThisNode = ThisNode->
Parent;
485 if (!ThisNode)
486 {
487
488
489
490
492 NULL, &ExternalPath);
494 {
496 "%s: Path has too many parent prefixes (^)",
497 ExternalPath));
498
500 }
501
503 }
504 }
505
507 {
509 "Search scope is [%4.4s], path has %u carat(s)\n",
511 }
512 }
513
514
515
516
517
518
519
520
521
522
523
524
525
526
528 {
529 case 0:
530
531
532
533
534 NumSegments = 0;
536
538 "Prefix-only Pathname (Zero name segments), Flags=%X\n",
540 break;
541
543
544
545
547
548
549
550 NumSegments = 2;
552
554 "Dual Pathname (2 segments, Flags=%X)\n",
Flags));
555 break;
556
558
559
560
562
563
564
568
570 "Multi Pathname (%u Segments, Flags=%X)\n",
571 NumSegments,
Flags));
572 break;
573
574 default:
575
576
577
578
579 NumSegments = 1;
580
582 "Simple Pathname (1 segment, Flags=%X)\n",
Flags));
583 break;
584 }
585
587 }
588
589
590
591
592
593
594
595
596
597
599 CurrentNode = ThisNode;
600
601 while (NumSegments && CurrentNode)
602 {
603 NumSegments--;
604 if (!NumSegments)
605 {
606
607
608 ThisSearchType =
Type;
609
610
611
612
613
616 {
618 }
619
620
621
623 {
625 }
626
627
628
630 {
632 }
633 }
634
635
636
637 LocalInterpreterMode = InterpreterMode;
639 {
640
641
643 }
644
645
646
648
649
650
652 LocalInterpreterMode, ThisSearchType,
LocalFlags, &ThisNode);
654 {
656 {
657#if !defined ACPI_ASL_COMPILER
659 {
661 "Object does not exist: %4.4s\n", (char *) &SimpleName);
662 }
663#endif
664
665
667 "Name [%4.4s] not found in scope [%4.4s] %p\n",
668 (
char *) &SimpleName, (
char *) &CurrentNode->
Name,
669 CurrentNode));
670 }
671
672#ifdef ACPI_EXEC_APP
675 {
676 ThisNode->
Flags &= ~ANOBJ_NODE_EARLY_INIT;
678 }
679#endif
680
681#ifdef ACPI_ASL_COMPILER
682
683
684
685
686
687
688
689
690 if (AcpiGbl_DisasmFlag &&
694 {
695 ThisNode->
Flags &= ~ANOBJ_IS_EXTERNAL;
698 {
700 }
701 break;
702 }
703#endif
704
705 *ReturnNode = ThisNode;
707 }
708
709
710
711 if (NumSegments > 0)
712 {
713
714
715
716
717
718
720 {
722 {
724 }
725
728 {
730 }
731 }
732 }
733
734
735
736 else
737 {
738
739
740
741
742
743
744
745
746
747
748
749
750
756 (ThisNode->
Type != TypeToCheckFor))
757 {
758
759
761 "NsLookup: Type mismatch on %4.4s (%s), searching for (%s)",
765 }
766
767
768
769
770
771
773 {
775 }
776 }
777
778
779
781 CurrentNode = ThisNode;
782 }
783
784
785
787 {
788
789
790
791
793 {
796 {
798 }
799 }
800 }
801
802#ifdef ACPI_EXEC_APP
804 {
806 }
807#endif
808
809 *ReturnNode = ThisNode;
811}
PRTL_UNICODE_STRING_BUFFER Path
void AcpiDmMarkExternalConflict(ACPI_NAMESPACE_NODE *Node)
#define AE_ALREADY_EXISTS
#define ANOBJ_IS_EXTERNAL
#define ANOBJ_NODE_EARLY_INIT
#define ACPI_ENTRY_NOT_FOUND
#define ACPI_GET_DESCRIPTOR_TYPE(d)
#define ACPI_MOVE_32_TO_32(d, s)
#define ACPI_NS_OVERRIDE_IF_FOUND
#define ACPI_NS_EARLY_INIT
#define ACPI_NS_NO_UPSEARCH
#define ACPI_NS_ERROR_IF_FOUND
ACPI_STATUS AcpiNsSearchAndEnter(UINT32 EntryName, ACPI_WALK_STATE *WalkState, ACPI_NAMESPACE_NODE *Node, ACPI_INTERPRETER_MODE InterpreterMode, ACPI_OBJECT_TYPE Type, UINT32 Flags, ACPI_NAMESPACE_NODE **RetNode)
ACPI_STATUS AcpiNsExternalizeName(UINT32 InternalNameLength, const char *InternalName, UINT32 *ConvertedNameLength, char **ConvertedName)
#define ACPI_NS_PREFIX_IS_SCOPE
void AcpiNsPrintPathname(UINT32 NumSegments, const char *Pathname)
#define ACPI_NS_DONT_OPEN_SCOPE
#define ACPI_NS_SEARCH_PARENT
#define ACPI_NS_PREFIX_MUST_EXIST
UINT32 AcpiNsOpensScope(ACPI_OBJECT_TYPE Type)
#define ACPI_DESC_TYPE_NAMED
#define ACPI_DEBUG_PRINT(pl)
#define ACPI_DEBUG_EXEC(a)
#define ACPI_WARNING(plist)
#define return_ACPI_STATUS(s)
#define ACPI_FUNCTION_TRACE(a)
#define ACPI_ERROR(plist)
void ACPI_INTERNAL_VAR_XFACE AcpiOsPrintf(const char *Format,...)
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING Pathname
#define ACPI_TYPE_LOCAL_ALIAS
#define ACPI_CAST_PTR(t, p)
#define ACPI_TYPE_LOCAL_METHOD_ALIAS
#define ACPI_TYPE_LOCAL_SCOPE
#define ACPI_NAMESEG_SIZE
#define ACPI_MSG_BIOS_ERROR
const char * AcpiUtGetTypeName(ACPI_OBJECT_TYPE Type)
const char * AcpiUtGetNodeName(void *Object)
const char * AcpiUtGetDescriptorName(void *Object)
#define AML_PARENT_PREFIX
#define AML_DUAL_NAME_PREFIX
#define AML_MULTI_NAME_PREFIX
ACPI_STATUS AcpiDsScopeStackPush(ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_TYPE Type, ACPI_WALK_STATE *WalkState)
UINT NTAPI LocalFlags(HLOCAL hMem)
union acpi_operand_object * Object
struct acpi_namespace_node * Parent
ACPI_STATE_COMMON ACPI_NAMESPACE_NODE * Node
_Must_inspect_result_ _In_ ULONG Flags