Home | History | Annotate | Download | only in PlatformPei
      1 /** @file
      2 *
      3 *  Copyright (c) 2011, ARM Limited. All rights reserved.
      4 *
      5 *  This program and the accompanying materials
      6 *  are licensed and made available under the terms and conditions of the BSD License
      7 *  which accompanies this distribution.  The full text of the license may be found at
      8 *  http://opensource.org/licenses/bsd-license.php
      9 *
     10 *  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11 *  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 *
     13 **/
     14 
     15 #include <PiPei.h>
     16 
     17 //
     18 // The protocols, PPI and GUID defintions for this module
     19 //
     20 #include <Ppi/MasterBootMode.h>
     21 #include <Ppi/BootInRecoveryMode.h>
     22 #include <Ppi/GuidedSectionExtraction.h>
     23 //
     24 // The Library classes this module consumes
     25 //
     26 #include <Library/ArmPlatformLib.h>
     27 #include <Library/BaseMemoryLib.h>
     28 #include <Library/DebugLib.h>
     29 #include <Library/HobLib.h>
     30 #include <Library/PeimEntryPoint.h>
     31 #include <Library/PeiServicesLib.h>
     32 #include <Library/PcdLib.h>
     33 
     34 EFI_STATUS
     35 EFIAPI
     36 InitializePlatformPeim (
     37   IN       EFI_PEI_FILE_HANDLE  FileHandle,
     38   IN CONST EFI_PEI_SERVICES     **PeiServices
     39   );
     40 
     41 EFI_STATUS
     42 EFIAPI
     43 PlatformPeim (
     44   VOID
     45   );
     46 
     47 //
     48 // Module globals
     49 //
     50 CONST EFI_PEI_PPI_DESCRIPTOR  mPpiListBootMode = {
     51   (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
     52   &gEfiPeiMasterBootModePpiGuid,
     53   NULL
     54 };
     55 
     56 CONST EFI_PEI_PPI_DESCRIPTOR  mPpiListRecoveryBootMode = {
     57   (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
     58   &gEfiPeiBootInRecoveryModePpiGuid,
     59   NULL
     60 };
     61 
     62 /*++
     63 
     64 Routine Description:
     65 
     66 
     67 
     68 Arguments:
     69 
     70   FileHandle  - Handle of the file being invoked.
     71   PeiServices - Describes the list of possible PEI Services.
     72 
     73 Returns:
     74 
     75   Status -  EFI_SUCCESS if the boot mode could be set
     76 
     77 --*/
     78 EFI_STATUS
     79 EFIAPI
     80 InitializePlatformPeim (
     81   IN       EFI_PEI_FILE_HANDLE  FileHandle,
     82   IN CONST EFI_PEI_SERVICES     **PeiServices
     83   )
     84 {
     85   EFI_STATUS                    Status;
     86   UINTN                         BootMode;
     87 
     88   DEBUG ((EFI_D_LOAD | EFI_D_INFO, "Platform PEIM Loaded\n"));
     89 
     90   PlatformPeim ();
     91 
     92   BootMode  = ArmPlatformGetBootMode ();
     93   Status    = (**PeiServices).SetBootMode (PeiServices, (UINT8) BootMode);
     94   ASSERT_EFI_ERROR (Status);
     95 
     96   Status = (**PeiServices).InstallPpi (PeiServices, &mPpiListBootMode);
     97   ASSERT_EFI_ERROR (Status);
     98 
     99   if (BootMode == BOOT_IN_RECOVERY_MODE) {
    100     Status = (**PeiServices).InstallPpi (PeiServices, &mPpiListRecoveryBootMode);
    101     ASSERT_EFI_ERROR (Status);
    102   }
    103 
    104   return Status;
    105 }
    106