FlashMapPei.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*++ @file
  2. PEIM to build GUIDed HOBs for platform specific flash map
  3. Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
  4. Portions copyright (c) 2011, Apple Inc. All rights reserved.
  5. SPDX-License-Identifier: BSD-2-Clause-Patent
  6. **/
  7. #include "PiPei.h"
  8. #include <Guid/SystemNvDataGuid.h>
  9. #include <Ppi/EmuThunk.h>
  10. #include <Library/DebugLib.h>
  11. #include <Library/PeimEntryPoint.h>
  12. #include <Library/HobLib.h>
  13. #include <Library/PeiServicesLib.h>
  14. #include <Library/PeiServicesTablePointerLib.h>
  15. #include <Library/BaseMemoryLib.h>
  16. #include <Library/PcdLib.h>
  17. EFI_STATUS
  18. EFIAPI
  19. PeimInitializeFlashMap (
  20. IN EFI_PEI_FILE_HANDLE FileHandle,
  21. IN CONST EFI_PEI_SERVICES **PeiServices
  22. )
  23. /*++
  24. Routine Description:
  25. Build GUIDed HOBs for platform specific flash map
  26. Arguments:
  27. FfsHeader - A pointer to the EFI_FFS_FILE_HEADER structure.
  28. PeiServices - General purpose services available to every PEIM.
  29. Returns:
  30. EFI_STATUS
  31. **/
  32. {
  33. EFI_STATUS Status;
  34. EMU_THUNK_PPI *Thunk;
  35. EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor;
  36. EFI_PHYSICAL_ADDRESS FdBase;
  37. EFI_PHYSICAL_ADDRESS FdFixUp;
  38. UINT64 FdSize;
  39. DEBUG ((DEBUG_ERROR, "EmulatorPkg Flash Map PEIM Loaded\n"));
  40. //
  41. // Get the Fwh Information PPI
  42. //
  43. Status = PeiServicesLocatePpi (
  44. &gEmuThunkPpiGuid, // GUID
  45. 0, // INSTANCE
  46. &PpiDescriptor, // EFI_PEI_PPI_DESCRIPTOR
  47. (VOID **)&Thunk // PPI
  48. );
  49. ASSERT_EFI_ERROR (Status);
  50. //
  51. // Assume that FD0 contains the Flash map.
  52. //
  53. Status = Thunk->FirmwareDevices (0, &FdBase, &FdSize, &FdFixUp);
  54. if (EFI_ERROR (Status)) {
  55. return Status;
  56. }
  57. PcdSet64S (PcdFlashNvStorageVariableBase64, PcdGet64 (PcdEmuFlashNvStorageVariableBase) + FdFixUp);
  58. PcdSet64S (PcdFlashNvStorageFtwWorkingBase64, PcdGet64 (PcdEmuFlashNvStorageFtwWorkingBase) + FdFixUp);
  59. PcdSet64S (PcdFlashNvStorageFtwSpareBase64, PcdGet64 (PcdEmuFlashNvStorageFtwSpareBase) + FdFixUp);
  60. return EFI_SUCCESS;
  61. }