/** @file Copyright (C) 2020-2025 Advanced Micro Devices, Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef INTERNAL_AML_OBJECTS_H_ #define INTERNAL_AML_OBJECTS_H_ // #include "LocalAmlLib.h" /** Free Object->Data Frees Object->Data, Nulls pointer, zeros size and marks Object->Completed = FALSE @param [in] Object - Pointer to Object to have Data freed @return EFI_SUCCESS - Object Freed @return - Object free failed **/ EFI_STATUS EFIAPI InternalFreeAmlObjectData ( IN AML_OBJECT_INSTANCE *Object ); /** Free an Object Removes Object from it's linked list. Frees Object->Data Frees Object @param [in] Object - Pointer to Object to be freed @param [in,out] ListHead - Head of AML Object linked list @return EFI_SUCCESS - Object Freed @return - Object free failed **/ EFI_STATUS EFIAPI InternalFreeAmlObject ( IN AML_OBJECT_INSTANCE **Object, IN OUT LIST_ENTRY *ListHead ); /** Creates a new AML_OBJECT_INSTANCE. Object->Data will be NULL and Object->DataSize will be 0 Allocates AML_OBJECT_INSTANCE which must be freed by caller @param [out] ReturnObject - Pointer to an Object @return EFI_SUCCESS - Object created and appended to linked list @return - Object creation failed, Object = NULL **/ EFI_STATUS EFIAPI InternalNewAmlObjectNoData ( OUT AML_OBJECT_INSTANCE **ReturnObject ); /** Inserts a new AML_OBJECT_INSTANCE at the end of the linked list. Object->Data will be NULL and Object->DataSize will be 0 Allocates AML_OBJECT_INSTANCE which must be freed by caller @param [out] ReturnObject - Pointer to an Object @param [in,out] ListHead - Head of AML Object linked list @return EFI_SUCCESS - Object created and appended to linked list @return - Object creation failed, Object = NULL **/ EFI_STATUS EFIAPI InternalAppendNewAmlObjectNoData ( OUT AML_OBJECT_INSTANCE **ReturnObject, IN OUT LIST_ENTRY *ListHead ); /** Inserts a new AML_OBJECT_INSTANCE at the end of the linked list. Using a string Identifier for comparison purposes Allocates AML_OBJECT_INSTANCE which must be freed by caller @param [out] ReturnObject - Pointer to an Object @param [in] Identifier - String Identifier to create object with @param [in,out] ListHead - Head of AML Object linked list @return EFI_SUCCESS - Object created and appended to linked list @return - Object creation failed, Object = NULL **/ EFI_STATUS EFIAPI InternalAppendNewAmlObject ( OUT AML_OBJECT_INSTANCE **ReturnObject, IN CHAR8 *Identifier, IN OUT LIST_ENTRY *ListHead ); /** Finds AML_OBJECT_INSTANCE given a string Identifier looking backwards in the AML_OBJECT_INSTANCE linked list @param [out] ReturnObject - Pointer to an Object @param [in] Identifier - String Identifier to create object with @param [in] ListHead - Head of AML Object linked list @return EFI_SUCCESS - Object located and returned @return - Object creation failed, Object = NULL **/ EFI_STATUS EFIAPI InternalAmlLocateObjectByIdentifier ( OUT AML_OBJECT_INSTANCE **ReturnObject, IN CHAR8 *Identifier, IN LIST_ENTRY *ListHead ); /** Finds all children of the Link and appends them into a single ObjectData buffer of ObjectDataSize Allocates AML_OBJECT_INSTANCE and Data which must be freed by caller @param [out] ReturnObject - Pointer to an Object pointer @param [out] ChildCount - Count of Child Objects collapsed @param [in] Link - Linked List Object entry to collect children @param [in,out] ListHead - Head of Object Linked List @return EFI_SUCCESS - ChildObject created and returned @return - Object creation failed, Object = NULL **/ EFI_STATUS EFIAPI InternalAmlCollapseAndReleaseChildren ( OUT AML_OBJECT_INSTANCE **ReturnObject, OUT UINTN *ChildCount, IN LIST_ENTRY *Link, IN OUT LIST_ENTRY *ListHead ); #endif // INTERNAL_AML_OBJECTS_H_