///* // * refit/list.c // * list manager functions // * // * Copyright (c) 2013 Cadet-petit Armel // * All rights reserved. // * // * Redistribution and use in source and binary forms, with or without // * modification, are permitted provided that the following conditions are // * met: // * // * * Redistributions of source code must retain the above copyright // * notice, this list of conditions and the following disclaimer. // * // * * Redistributions in binary form must reproduce the above copyright // * notice, this list of conditions and the following disclaimer in the // * documentation and/or other materials provided with the // * distribution. // * // * * Neither the name of Cadet-petit Armel nor the names of the // * contributors may be used to endorse or promote products derived // * from this software without specific prior written permission. // * // * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // */ // //#ifndef __REFITLIST_STANDARD_H__ //#define __REFITLIST_STANDARD_H__ // // //#include "libeg.h" // //// //// NOTE: To avoid a duplicate symbol error, with the lib.c AddListElement //// do not remove this quote !!! //// ////#define RELEASE_LIST // //// //// Refit Elements Linked List Signature. //// //#define REFIT_LIST_SIGNATURE SIGNATURE_32 ('R', 'E', 'L', 'L') // //// //// Refit Elements Linked List Constructor Type. //// //typedef //EFI_STATUS //(EFIAPI *LIST_ELEMENT_CONSTRUCTOR) ( // IN OUT VOID **Element, // IN OUT VOID *Parameters // ); // //// //// Refit Elements Linked List Destructor Type. //// //typedef //EFI_STATUS //(EFIAPI *LIST_ELEMENT_DESTRUCTOR) ( // IN VOID **Element // ); // //// //// Refit Elements Linked List Entry definition. //// //// Signature must be set to REFIT_LIST_SIGNATURE //// Link is the linked list data. //// Element is a pointer to the Element. //// Constuctor is a pointer to the Element's constructor function. //// Destructor is a pointer to the Element's destructor function. //// ConstructorParameters is the to pass to the constructor. //// Handle is used to identify a particular Element. //// //typedef struct { // UINT32 Signature; // LIST_ENTRY Link; // VOID *Element; // LIST_ELEMENT_CONSTRUCTOR Constructor; // LIST_ELEMENT_DESTRUCTOR Destructor; // VOID *ConstructorParameters; // UINTN Handle; //} REFIT_LIST; // // //EFI_STATUS //CreateListElement(IN OUT LIST_ENTRY *List); // //#ifdef RELEASE_LIST //EFI_STATUS //AddListElement( // IN OUT LIST_ENTRY *List, // IN VOID *Element, // IN OUT UINTN *CurrentHandle, // IN LIST_ELEMENT_CONSTRUCTOR Constructor OPTIONAL, // IN LIST_ELEMENT_DESTRUCTOR Destructor OPTIONAL, // IN VOID *ConstructorParameters OPTIONAL // ); //#else //EFI_STATUS //Add_ListElement( // IN OUT LIST_ENTRY *List, // IN VOID *Element, // IN OUT UINTN *CurrentHandle, // IN LIST_ELEMENT_CONSTRUCTOR Constructor OPTIONAL, // IN LIST_ELEMENT_DESTRUCTOR Destructor OPTIONAL, // IN VOID *ConstructorParameters OPTIONAL // // ); //#endif // //LIST_ENTRY * //FindElementByHandle( // IN LIST_ENTRY *List, // IN CONST UINTN Handle // ); // // //EFI_STATUS //RemoveElementByHandle( // IN OUT LIST_ENTRY *List, // IN CONST UINTN Handle // ); // // //EFI_STATUS //FreeListElement(IN OUT LIST_ENTRY *List); // // //#endif ///* EOF */