47 ASSERT (AmlNodeList !=
NULL);
49 AmlNodeList->Signature = EFI_AML_NODE_LIST_SIGNATURE;
50 CopyMem (AmlNodeList->Name, NameSeg, AML_NAME_SEG_SIZE);
51 AmlNodeList->Buffer =
NULL;
52 AmlNodeList->Size = 0;
55 AmlNodeList->Parent = Parent;
56 AmlNodeList->AmlByteEncoding = AmlByteEncoding;
82 StartLink = &AmlParentNodeList->Children;
83 CurrentLink = StartLink->ForwardLink;
85 while (CurrentLink != StartLink) {
86 CurrentAmlNodeList = EFI_AML_NODE_LIST_FROM_LINK (CurrentLink);
90 if (
CompareMem (CurrentAmlNodeList->Name, NameSeg, AML_NAME_SEG_SIZE) == 0) {
94 return CurrentAmlNodeList;
97 CurrentLink = CurrentLink->ForwardLink;
111 InsertTailList (&AmlParentNodeList->Children, &AmlNodeList->Link);
128 IN UINT8 *NameString,
145 if (*Buffer == AML_ROOT_CHAR) {
146 AmlCurrentNodeList = AmlRootNodeList;
148 }
else if (*Buffer == AML_PARENT_PREFIX_CHAR) {
149 AmlCurrentNodeList = AmlParentNodeList;
151 if (AmlCurrentNodeList->Parent !=
NULL) {
152 AmlCurrentNodeList = AmlCurrentNodeList->Parent;
157 ASSERT (AmlCurrentNodeList == AmlRootNodeList);
161 }
while (*Buffer == AML_PARENT_PREFIX_CHAR);
163 AmlCurrentNodeList = AmlParentNodeList;
169 if (*Buffer == AML_DUAL_NAME_PREFIX) {
172 }
else if (*Buffer == AML_MULTI_NAME_PREFIX) {
176 }
else if (*Buffer == 0) {
180 ASSERT (AmlCurrentNodeList == AmlRootNodeList);
181 return AmlCurrentNodeList;
192 if (AmlNodeList ==
NULL) {
196 AmlCurrentNodeList = AmlNodeList;
197 Buffer += AML_NAME_SEG_SIZE;
199 }
while (Index < SegCount);
217 IN UINT8 *NameString,
232 ASSERT (AmlNodeList !=
NULL);
233 if (AmlNodeList ==
NULL) {
240 if (AmlNodeList->Buffer ==
NULL) {
244 if (*(UINT8 *)Buffer != AML_SCOPE_OP) {
249 AmlNodeList->Buffer = Buffer;
250 AmlNodeList->Size = Size;
260 if (*(UINT8 *)Buffer == AML_SCOPE_OP) {
270 DEBUG ((DEBUG_ERROR,
"AML: Override Happen - %a!\n", NameString));
271 DEBUG ((DEBUG_ERROR,
"AML: Existing Node - %x\n", AmlNodeList->Buffer));
272 DEBUG ((DEBUG_ERROR,
"AML: New Buffer - %x\n", Buffer));
297 UINT8 *CurrentBuffer;
301 CurrentBuffer =
NULL;
302 AmlChildHandle =
NULL;
303 AmlByteEncoding = AmlHandle->AmlByteEncoding;
304 Buffer = AmlHandle->Buffer;
305 BufferSize = AmlHandle->Size;
326 if (EFI_ERROR (Status)) {
327 return EFI_INVALID_PARAMETER;
333 while ((
UINTN)CurrentBuffer < (
UINTN)Buffer + BufferSize) {
337 Status =
SdtOpenEx (CurrentBuffer, (
UINTN)Buffer + BufferSize - (
UINTN)CurrentBuffer, (EFI_ACPI_HANDLE *)&AmlChildHandle);
338 if (EFI_ERROR (Status)) {
353 if (EFI_ERROR (Status)) {
360 CurrentBuffer += AmlChildHandle->Size;
362 Close ((EFI_ACPI_HANDLE)AmlChildHandle);
402 if (NameString ==
NULL) {
403 return EFI_INVALID_PARAMETER;
410 AmlNodeList =
AmlInsertNodeToTree (NameString, AmlHandle->Buffer, AmlHandle->Size, AmlRootNodeList, AmlParentNodeList);
411 ASSERT (AmlNodeList !=
NULL);
436 StartLink = &AmlParentNodeList->Children;
437 CurrentLink = StartLink->ForwardLink;
442 while (CurrentLink != StartLink) {
446 CurrentAmlNodeList = EFI_AML_NODE_LIST_FROM_LINK (CurrentLink);
447 CurrentLink = CurrentLink->ForwardLink;
480 CurrentLink = AmlParentNodeList->Children.ForwardLink;
483 DEBUG ((DEBUG_ERROR,
"\\"));
485 for (Index = 0; Index < Level; Index++) {
486 DEBUG ((DEBUG_ERROR,
" "));
492 DEBUG ((DEBUG_ERROR,
"\n"));
494 while (CurrentLink != &AmlParentNodeList->Children) {
495 CurrentAmlNodeList = EFI_AML_NODE_LIST_FROM_LINK (CurrentLink);
497 CurrentLink = CurrentLink->ForwardLink;
527 UINT8 RootNameSeg[AML_NAME_SEG_SIZE];
538 RootNameSeg[0] = AML_ROOT_CHAR;
547 if (EFI_ERROR (Status)) {
548 return EFI_INVALID_PARAMETER;
552 DEBUG ((DEBUG_ERROR,
"AcpiSdt: NameSpace:\n"));
563 CurrentAmlNodeList = AmlRootNodeList;
569 CurrentLink = AmlRootNodeList->Children.ForwardLink;
570 if (CurrentLink != &AmlRootNodeList->Children) {
574 CurrentAmlNodeList = EFI_AML_NODE_LIST_FROM_LINK (CurrentLink);
579 CurrentAmlNodeList =
NULL;
586 if (CurrentAmlNodeList !=
NULL) {
588 DEBUG ((DEBUG_ERROR,
"AcpiSdt: Search from: \\"));
590 DEBUG ((DEBUG_ERROR,
"\n"));
604 if ((AmlNodeList !=
NULL) && (AmlNodeList->Buffer !=
NULL)) {
605 *Buffer = AmlNodeList->Buffer;
EFI_STATUS SdtOpenEx(IN VOID *Buffer, IN UINTN BufferSize, OUT EFI_ACPI_HANDLE *Handle)
EFI_STATUS EFIAPI Close(IN EFI_ACPI_HANDLE Handle)
CHAR8 * AmlGetObjectName(IN EFI_AML_HANDLE *AmlHandle)
VOID AmlPrintNameSeg(IN UINT8 *Buffer)
AML_BYTE_ENCODING * AmlSearchByOpByte(IN UINT8 *OpByteBuffer)
EFI_STATUS AmlGetOffsetAfterLastOption(IN EFI_AML_HANDLE *AmlHandle, OUT UINT8 **Buffer)
#define AML_HAS_CHILD_OBJ
LIST_ENTRY *EFIAPI RemoveEntryList(IN CONST LIST_ENTRY *Entry)
LIST_ENTRY *EFIAPI InitializeListHead(IN OUT LIST_ENTRY *ListHead)
LIST_ENTRY *EFIAPI InsertTailList(IN OUT LIST_ENTRY *ListHead, IN OUT LIST_ENTRY *Entry)
INTN EFIAPI CompareMem(IN CONST VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID EFIAPI FreePool(IN VOID *Buffer)
EFI_STATUS AmlConstructNodeList(IN EFI_AML_HANDLE *AmlHandle, IN EFI_AML_NODE_LIST *AmlRootNodeList, IN EFI_AML_NODE_LIST *AmlParentNodeList)
EFI_STATUS AmlFindPath(IN EFI_AML_HANDLE *AmlHandle, IN UINT8 *AmlPath, OUT VOID **Buffer, IN BOOLEAN FromRoot)
EFI_AML_NODE_LIST * AmlFindNodeInTheTree(IN UINT8 *NameString, IN EFI_AML_NODE_LIST *AmlRootNodeList, IN EFI_AML_NODE_LIST *AmlParentNodeList, IN BOOLEAN Create)
EFI_AML_NODE_LIST * AmlFindNodeInThis(IN UINT8 *NameSeg, IN EFI_AML_NODE_LIST *AmlParentNodeList, IN BOOLEAN Create)
EFI_AML_NODE_LIST * AmlCreateNode(IN UINT8 *NameSeg, IN EFI_AML_NODE_LIST *Parent, IN AML_BYTE_ENCODING *AmlByteEncoding)
EFI_STATUS AmlConstructNodeListForChild(IN EFI_AML_HANDLE *AmlHandle, IN EFI_AML_NODE_LIST *AmlRootNodeList, IN EFI_AML_NODE_LIST *AmlParentNodeList)
EFI_AML_NODE_LIST * AmlInsertNodeToTree(IN UINT8 *NameString, IN VOID *Buffer, IN UINTN Size, IN EFI_AML_NODE_LIST *AmlRootNodeList, IN EFI_AML_NODE_LIST *AmlParentNodeList)
VOID AmlDestructNodeList(IN EFI_AML_NODE_LIST *AmlParentNodeList)
VOID AmlDumpNodeInfo(IN EFI_AML_NODE_LIST *AmlParentNodeList, IN UINTN Level)
#define DEBUG_CODE_BEGIN()
#define DEBUG(Expression)
VOID *EFIAPI AllocatePool(IN UINTN AllocationSize)
AML_OP_ATTRIBUTE Attribute
Additional information on the AML object.