]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/PlatformPei/PlatformPeim.c
ArmPlatformPkg: Introduce ArmPlatformGlobalVariableLib
[mirror_edk2.git] / ArmPlatformPkg / PlatformPei / PlatformPeim.c
index 5921e35bd8d78ea9340c80ce38828bc0e3fa88a1..8392ecf6c25c743218572b2e190dae90a4735982 100755 (executable)
 //\r
 // The protocols, PPI and GUID defintions for this module\r
 //\r
+#include <Ppi/ArmGlobalVariable.h>\r
 #include <Ppi/MasterBootMode.h>\r
 #include <Ppi/BootInRecoveryMode.h>\r
+#include <Ppi/GuidedSectionExtraction.h>\r
 //\r
 // The Library classes this module consumes\r
 //\r
+#include <Library/ArmPlatformLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/HobLib.h>\r
 #include <Library/PeimEntryPoint.h>\r
+#include <Library/PeiServicesLib.h>\r
 #include <Library/PcdLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/ArmPlatformLib.h>\r
+\r
+#include <Guid/ArmGlobalVariableHob.h>\r
 \r
 EFI_STATUS\r
 EFIAPI\r
@@ -55,6 +62,24 @@ EFI_PEI_PPI_DESCRIPTOR  mPpiListRecoveryBootMode = {
   NULL\r
 };\r
 \r
+VOID\r
+EFIAPI\r
+BuildGlobalVariableHob (\r
+  IN EFI_PHYSICAL_ADDRESS         GlobalVariableBase,\r
+  IN UINT32                       GlobalVariableSize\r
+  )\r
+{\r
+  EFI_STATUS                Status;\r
+  ARM_HOB_GLOBAL_VARIABLE   *Hob;\r
+\r
+  Status = PeiServicesCreateHob (EFI_HOB_TYPE_GUID_EXTENSION, sizeof (ARM_HOB_GLOBAL_VARIABLE), (VOID**)&Hob);\r
+  if (!EFI_ERROR(Status)) {\r
+    CopyGuid (&(Hob->Header.Name), &gArmGlobalVariableGuid);\r
+    Hob->GlobalVariableBase = GlobalVariableBase;\r
+    Hob->GlobalVariableSize = GlobalVariableSize;\r
+  }\r
+}\r
+\r
 /*++\r
 \r
 Routine Description:\r
@@ -80,11 +105,23 @@ InitializePlatformPeim (
 {\r
   EFI_STATUS                    Status;\r
   UINTN                         BootMode;\r
+  ARM_GLOBAL_VARIABLE_PPI       *ArmGlobalVariablePpi;\r
+  EFI_PHYSICAL_ADDRESS          GlobalVariableBase;\r
 \r
   DEBUG ((EFI_D_ERROR, "Platform PEIM Loaded\n"));\r
 \r
   PlatformPeim ();\r
   \r
+  Status = PeiServicesLocatePpi (&gArmGlobalVariablePpiGuid, 0, NULL, (VOID**)&ArmGlobalVariablePpi);\r
+  if (!EFI_ERROR(Status)) {\r
+    Status = ArmGlobalVariablePpi->GetGlobalVariableMemory (&GlobalVariableBase);\r
+\r
+    if (!EFI_ERROR(Status)) {\r
+      // Declare the Global Variable HOB\r
+      BuildGlobalVariableHob (GlobalVariableBase, FixedPcdGet32 (PcdPeiGlobalVariableSize));\r
+    }\r
+  }\r
+\r
   BootMode  = ArmPlatformGetBootMode ();\r
   Status    = (**PeiServices).SetBootMode (PeiServices, (UINT8) BootMode);\r
   ASSERT_EFI_ERROR (Status);\r