ThunkPpiList.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /** @file
  2. Emulator Thunk to abstract OS services from pure EFI code
  3. Copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>
  4. Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
  5. SPDX-License-Identifier: BSD-2-Clause-Patent
  6. **/
  7. #include <PiPei.h>
  8. #include <Library/BaseLib.h>
  9. #include <Library/MemoryAllocationLib.h>
  10. UINTN gThunkPpiListSize = 0;
  11. EFI_PEI_PPI_DESCRIPTOR *gThunkPpiList = NULL;
  12. EFI_PEI_PPI_DESCRIPTOR *
  13. GetThunkPpiList (
  14. VOID
  15. )
  16. {
  17. UINTN Index;
  18. if (gThunkPpiList == NULL) {
  19. return NULL;
  20. }
  21. Index = (gThunkPpiListSize/sizeof (EFI_PEI_PPI_DESCRIPTOR)) - 1;
  22. gThunkPpiList[Index].Flags |= EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST;
  23. return gThunkPpiList;
  24. }
  25. EFI_STATUS
  26. EFIAPI
  27. AddThunkPpi (
  28. IN UINTN Flags,
  29. IN EFI_GUID *Guid,
  30. IN VOID *Ppi
  31. )
  32. {
  33. UINTN Index;
  34. gThunkPpiList = ReallocatePool (
  35. gThunkPpiListSize,
  36. gThunkPpiListSize + sizeof (EFI_PEI_PPI_DESCRIPTOR),
  37. gThunkPpiList
  38. );
  39. if (gThunkPpiList == NULL) {
  40. return EFI_OUT_OF_RESOURCES;
  41. }
  42. Index = (gThunkPpiListSize/sizeof (EFI_PEI_PPI_DESCRIPTOR));
  43. gThunkPpiList[Index].Flags = Flags;
  44. gThunkPpiList[Index].Guid = Guid;
  45. gThunkPpiList[Index].Ppi = Ppi;
  46. gThunkPpiListSize += sizeof (EFI_PEI_PPI_DESCRIPTOR);
  47. return EFI_SUCCESS;
  48. }