mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-27 12:15:19 +01:00
7c0aa811ec
Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
141 lines
4.4 KiB
C
141 lines
4.4 KiB
C
/*
|
|
* 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 */
|