]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPlatformPkg/PlatformPei/PlatformPeim.c
ArmPlatformPkg/PlatformPeim: constify EFI_PEI_PPI_DESCRIPTOR globals
[mirror_edk2.git] / ArmPlatformPkg / PlatformPei / PlatformPeim.c
CommitLineData
1d5d0ae9 1/** @file\r
2*\r
3* Copyright (c) 2011, ARM Limited. All rights reserved.\r
1d5d0ae9 4*\r
3402aac7
RC
5* This program and the accompanying materials\r
6* are licensed and made available under the terms and conditions of the BSD License\r
7* which accompanies this distribution. The full text of the license may be found at\r
8* http://opensource.org/licenses/bsd-license.php\r
9*\r
10* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
1d5d0ae9 12*\r
13**/\r
14\r
1d5d0ae9 15#include <PiPei.h>\r
48835130 16\r
1d5d0ae9 17//\r
18// The protocols, PPI and GUID defintions for this module\r
19//\r
8fc38a3f 20#include <Ppi/ArmGlobalVariable.h>\r
1d5d0ae9 21#include <Ppi/MasterBootMode.h>\r
22#include <Ppi/BootInRecoveryMode.h>\r
8fc38a3f 23#include <Ppi/GuidedSectionExtraction.h>\r
1d5d0ae9 24//\r
25// The Library classes this module consumes\r
26//\r
8fc38a3f 27#include <Library/ArmPlatformLib.h>\r
28#include <Library/BaseMemoryLib.h>\r
29#include <Library/DebugLib.h>\r
30#include <Library/HobLib.h>\r
1d5d0ae9 31#include <Library/PeimEntryPoint.h>\r
8fc38a3f 32#include <Library/PeiServicesLib.h>\r
1d5d0ae9 33#include <Library/PcdLib.h>\r
8fc38a3f 34\r
35#include <Guid/ArmGlobalVariableHob.h>\r
1d5d0ae9 36\r
48835130 37EFI_STATUS\r
38EFIAPI\r
39InitializePlatformPeim (\r
40 IN EFI_PEI_FILE_HANDLE FileHandle,\r
41 IN CONST EFI_PEI_SERVICES **PeiServices\r
42 );\r
3402aac7 43\r
3723a71a 44EFI_STATUS\r
45EFIAPI\r
46PlatformPeim (\r
47 VOID\r
48 );\r
1d5d0ae9 49\r
50//\r
51// Module globals\r
52//\r
64748d26 53CONST EFI_PEI_PPI_DESCRIPTOR mPpiListBootMode = {\r
1d5d0ae9 54 (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
55 &gEfiPeiMasterBootModePpiGuid,\r
56 NULL\r
57};\r
58\r
64748d26 59CONST EFI_PEI_PPI_DESCRIPTOR mPpiListRecoveryBootMode = {\r
1d5d0ae9 60 (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
61 &gEfiPeiBootInRecoveryModePpiGuid,\r
62 NULL\r
63};\r
64\r
8fc38a3f 65VOID\r
66EFIAPI\r
67BuildGlobalVariableHob (\r
68 IN EFI_PHYSICAL_ADDRESS GlobalVariableBase,\r
69 IN UINT32 GlobalVariableSize\r
70 )\r
71{\r
72 EFI_STATUS Status;\r
73 ARM_HOB_GLOBAL_VARIABLE *Hob;\r
74\r
75 Status = PeiServicesCreateHob (EFI_HOB_TYPE_GUID_EXTENSION, sizeof (ARM_HOB_GLOBAL_VARIABLE), (VOID**)&Hob);\r
76 if (!EFI_ERROR(Status)) {\r
77 CopyGuid (&(Hob->Header.Name), &gArmGlobalVariableGuid);\r
78 Hob->GlobalVariableBase = GlobalVariableBase;\r
79 Hob->GlobalVariableSize = GlobalVariableSize;\r
80 }\r
81}\r
82\r
1d5d0ae9 83/*++\r
84\r
85Routine Description:\r
86\r
3402aac7 87\r
1d5d0ae9 88\r
89Arguments:\r
90\r
91 FileHandle - Handle of the file being invoked.\r
92 PeiServices - Describes the list of possible PEI Services.\r
3402aac7 93\r
1d5d0ae9 94Returns:\r
95\r
96 Status - EFI_SUCCESS if the boot mode could be set\r
97\r
98--*/\r
48835130 99EFI_STATUS\r
100EFIAPI\r
101InitializePlatformPeim (\r
102 IN EFI_PEI_FILE_HANDLE FileHandle,\r
103 IN CONST EFI_PEI_SERVICES **PeiServices\r
104 )\r
1d5d0ae9 105{\r
106 EFI_STATUS Status;\r
107 UINTN BootMode;\r
8fc38a3f 108 ARM_GLOBAL_VARIABLE_PPI *ArmGlobalVariablePpi;\r
109 EFI_PHYSICAL_ADDRESS GlobalVariableBase;\r
1d5d0ae9 110\r
3d5cf372 111 DEBUG ((EFI_D_LOAD | EFI_D_INFO, "Platform PEIM Loaded\n"));\r
1d5d0ae9 112\r
48835130 113 PlatformPeim ();\r
3402aac7 114\r
8fc38a3f 115 Status = PeiServicesLocatePpi (&gArmGlobalVariablePpiGuid, 0, NULL, (VOID**)&ArmGlobalVariablePpi);\r
116 if (!EFI_ERROR(Status)) {\r
117 Status = ArmGlobalVariablePpi->GetGlobalVariableMemory (&GlobalVariableBase);\r
118\r
119 if (!EFI_ERROR(Status)) {\r
120 // Declare the Global Variable HOB\r
121 BuildGlobalVariableHob (GlobalVariableBase, FixedPcdGet32 (PcdPeiGlobalVariableSize));\r
122 }\r
123 }\r
124\r
a534d714 125 BootMode = ArmPlatformGetBootMode ();\r
1d5d0ae9 126 Status = (**PeiServices).SetBootMode (PeiServices, (UINT8) BootMode);\r
127 ASSERT_EFI_ERROR (Status);\r
128\r
129 Status = (**PeiServices).InstallPpi (PeiServices, &mPpiListBootMode);\r
130 ASSERT_EFI_ERROR (Status);\r
131\r
132 if (BootMode == BOOT_IN_RECOVERY_MODE) {\r
133 Status = (**PeiServices).InstallPpi (PeiServices, &mPpiListRecoveryBootMode);\r
134 ASSERT_EFI_ERROR (Status);\r
135 }\r
136\r
137 return Status;\r
138}\r