47 if (AmlNodeList ==
NULL) {
48 ASSERT (AmlNodeList !=
NULL);
52 AmlNodeList->Signature = EFI_AML_NODE_LIST_SIGNATURE;
53 CopyMem (AmlNodeList->Name, NameSeg, AML_NAME_SEG_SIZE);
54 AmlNodeList->Buffer =
NULL;
55 AmlNodeList->Size = 0;
58 AmlNodeList->Parent = Parent;
59 AmlNodeList->AmlByteEncoding = AmlByteEncoding;
85 StartLink = &AmlParentNodeList->Children;
86 CurrentLink = StartLink->ForwardLink;
88 while (CurrentLink != StartLink) {
89 CurrentAmlNodeList = EFI_AML_NODE_LIST_FROM_LINK (CurrentLink);
93 if (
CompareMem (CurrentAmlNodeList->Name, NameSeg, AML_NAME_SEG_SIZE) == 0) {
97 return CurrentAmlNodeList;
100 CurrentLink = CurrentLink->ForwardLink;
114 if (AmlNodeList ==
NULL) {
118 InsertTailList (&AmlParentNodeList->Children, &AmlNodeList->Link);
135 IN UINT8 *NameString,
152 if (*Buffer == AML_ROOT_CHAR) {
153 AmlCurrentNodeList = AmlRootNodeList;
155 }
else if (*Buffer == AML_PARENT_PREFIX_CHAR) {
156 AmlCurrentNodeList = AmlParentNodeList;
158 if (AmlCurrentNodeList->Parent !=
NULL) {
159 AmlCurrentNodeList = AmlCurrentNodeList->Parent;
164 ASSERT (AmlCurrentNodeList == AmlRootNodeList);
168 }
while (*Buffer == AML_PARENT_PREFIX_CHAR);
170 AmlCurrentNodeList = AmlParentNodeList;
176 if (*Buffer == AML_DUAL_NAME_PREFIX) {
179 }
else if (*Buffer == AML_MULTI_NAME_PREFIX) {
183 }
else if (*Buffer == 0) {
187 ASSERT (AmlCurrentNodeList == AmlRootNodeList);
188 return AmlCurrentNodeList;
199 if (AmlNodeList ==
NULL) {
203 AmlCurrentNodeList = AmlNodeList;
204 Buffer += AML_NAME_SEG_SIZE;
206 }
while (Index < SegCount);
224 IN UINT8 *NameString,
239 ASSERT (AmlNodeList !=
NULL);
240 if (AmlNodeList ==
NULL) {
247 if (AmlNodeList->Buffer ==
NULL) {
251 if (*(UINT8 *)Buffer != AML_SCOPE_OP) {
256 AmlNodeList->Buffer = Buffer;
257 AmlNodeList->Size = Size;
267 if (*(UINT8 *)Buffer == AML_SCOPE_OP) {
277 DEBUG ((DEBUG_ERROR,
"AML: Override Happen - %a!\n", NameString));
278 DEBUG ((DEBUG_ERROR,
"AML: Existing Node - %x\n", AmlNodeList->Buffer));
279 DEBUG ((DEBUG_ERROR,
"AML: New Buffer - %x\n", Buffer));
304 UINT8 *CurrentBuffer;
308 CurrentBuffer =
NULL;
309 AmlChildHandle =
NULL;
310 AmlByteEncoding = AmlHandle->AmlByteEncoding;
311 Buffer = AmlHandle->Buffer;
312 BufferSize = AmlHandle->Size;
333 if (EFI_ERROR (Status)) {
334 return EFI_INVALID_PARAMETER;
340 while ((
UINTN)CurrentBuffer < (
UINTN)Buffer + BufferSize) {
344 Status =
SdtOpenEx (CurrentBuffer, (
UINTN)Buffer + BufferSize - (
UINTN)CurrentBuffer, (EFI_ACPI_HANDLE *)&AmlChildHandle);
345 if (EFI_ERROR (Status)) {
360 if (EFI_ERROR (Status)) {
367 CurrentBuffer += AmlChildHandle->Size;
369 Close ((EFI_ACPI_HANDLE)AmlChildHandle);
409 if (NameString ==
NULL) {
410 return EFI_INVALID_PARAMETER;
417 AmlNodeList =
AmlInsertNodeToTree (NameString, AmlHandle->Buffer, AmlHandle->Size, AmlRootNodeList, AmlParentNodeList);
418 ASSERT (AmlNodeList !=
NULL);
443 StartLink = &AmlParentNodeList->Children;
444 CurrentLink = StartLink->ForwardLink;
449 while (CurrentLink != StartLink) {
453 CurrentAmlNodeList = EFI_AML_NODE_LIST_FROM_LINK (CurrentLink);
454 CurrentLink = CurrentLink->ForwardLink;
487 CurrentLink = AmlParentNodeList->Children.ForwardLink;
490 DEBUG ((DEBUG_ERROR,
"\\"));
492 for (Index = 0; Index < Level; Index++) {
493 DEBUG ((DEBUG_ERROR,
" "));
499 DEBUG ((DEBUG_ERROR,
"\n"));
501 while (CurrentLink != &AmlParentNodeList->Children) {
502 CurrentAmlNodeList = EFI_AML_NODE_LIST_FROM_LINK (CurrentLink);
504 CurrentLink = CurrentLink->ForwardLink;
535 UINT8 RootNameSeg[AML_NAME_SEG_SIZE];
546 RootNameSeg[0] = AML_ROOT_CHAR;
549 if (AmlRootNodeList ==
NULL) {
550 return EFI_OUT_OF_RESOURCES;
558 if (EFI_ERROR (Status)) {
559 return EFI_INVALID_PARAMETER;
563 DEBUG ((DEBUG_ERROR,
"AcpiSdt: NameSpace:\n"));
574 CurrentAmlNodeList = AmlRootNodeList;
580 CurrentLink = AmlRootNodeList->Children.ForwardLink;
581 if (CurrentLink != &AmlRootNodeList->Children) {
585 CurrentAmlNodeList = EFI_AML_NODE_LIST_FROM_LINK (CurrentLink);
590 CurrentAmlNodeList =
NULL;
597 if (CurrentAmlNodeList !=
NULL) {
599 DEBUG ((DEBUG_ERROR,
"AcpiSdt: Search from: \\"));
601 DEBUG ((DEBUG_ERROR,
"\n"));
615 if ((AmlNodeList !=
NULL) && (AmlNodeList->Buffer !=
NULL)) {
616 *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.