| /** @file | |
| Emulator Thunk to abstract OS services from pure EFI code | |
| Copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR> | |
| Copyright (c) 2011, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #include <PiPei.h> | |
| #include <Library/BaseLib.h> | |
| #include <Library/MemoryAllocationLib.h> | |
| UINTN gThunkPpiListSize = 0; | |
| EFI_PEI_PPI_DESCRIPTOR *gThunkPpiList = NULL; | |
| EFI_PEI_PPI_DESCRIPTOR * | |
| GetThunkPpiList ( | |
| VOID | |
| ) | |
| { | |
| UINTN Index; | |
| if (gThunkPpiList == NULL) { | |
| return NULL; | |
| } | |
| Index = (gThunkPpiListSize/sizeof (EFI_PEI_PPI_DESCRIPTOR)) - 1; | |
| gThunkPpiList[Index].Flags |= EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST; | |
| return gThunkPpiList; | |
| } | |
| EFI_STATUS | |
| EFIAPI | |
| AddThunkPpi ( | |
| IN UINTN Flags, | |
| IN EFI_GUID *Guid, | |
| IN VOID *Ppi | |
| ) | |
| { | |
| UINTN Index; | |
| gThunkPpiList = ReallocatePool ( | |
| gThunkPpiListSize, | |
| gThunkPpiListSize + sizeof (EFI_PEI_PPI_DESCRIPTOR), | |
| gThunkPpiList | |
| ); | |
| if (gThunkPpiList == NULL) { | |
| return EFI_OUT_OF_RESOURCES; | |
| } | |
| Index = (gThunkPpiListSize/sizeof (EFI_PEI_PPI_DESCRIPTOR)); | |
| gThunkPpiList[Index].Flags = Flags; | |
| gThunkPpiList[Index].Guid = Guid; | |
| gThunkPpiList[Index].Ppi = Ppi; | |
| gThunkPpiListSize += sizeof (EFI_PEI_PPI_DESCRIPTOR); | |
| return EFI_SUCCESS; | |
| } |