Home | History | Annotate | Download | only in BootModePei
      1 /** @file
      2 
      3 Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
      4 Portions copyright (c) 2011, Apple Inc. All rights reserved.
      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 
     16 
     17 //
     18 // The package level header files this module uses
     19 //
     20 #include <PiPei.h>
     21 
     22 #include <Library/PcdLib.h>
     23 #include <Library/PeiServicesLib.h>
     24 
     25 
     26 //
     27 // The protocols, PPI and GUID defintions for this module
     28 //
     29 #include <Ppi/MasterBootMode.h>
     30 #include <Ppi/BootInRecoveryMode.h>
     31 //
     32 // The Library classes this module consumes
     33 //
     34 #include <Library/DebugLib.h>
     35 #include <Library/PeimEntryPoint.h>
     36 
     37 
     38 //
     39 // Module globals
     40 //
     41 EFI_PEI_PPI_DESCRIPTOR  mPpiListBootMode = {
     42   (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
     43   &gEfiPeiMasterBootModePpiGuid,
     44   NULL
     45 };
     46 
     47 EFI_PEI_PPI_DESCRIPTOR  mPpiListRecoveryBootMode = {
     48   (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
     49   &gEfiPeiBootInRecoveryModePpiGuid,
     50   NULL
     51 };
     52 
     53 EFI_STATUS
     54 EFIAPI
     55 InitializeBootMode (
     56   IN       EFI_PEI_FILE_HANDLE       FileHandle,
     57   IN CONST EFI_PEI_SERVICES          **PeiServices
     58   )
     59 /*++
     60 
     61 Routine Description:
     62 
     63   Peform the boot mode determination logic
     64 
     65 Arguments:
     66 
     67   PeiServices - General purpose services available to every PEIM.
     68 
     69 Returns:
     70 
     71   Status -  EFI_SUCCESS if the boot mode could be set
     72 
     73 **/
     74 {
     75   EFI_STATUS    Status;
     76   EFI_BOOT_MODE BootMode;
     77 
     78   DEBUG ((EFI_D_ERROR, "Emu Boot Mode PEIM Loaded\n"));
     79 
     80   BootMode  = FixedPcdGet32 (PcdEmuBootMode);
     81 
     82   Status    = PeiServicesSetBootMode (BootMode);
     83   ASSERT_EFI_ERROR (Status);
     84 
     85   Status = PeiServicesInstallPpi (&mPpiListBootMode);
     86   ASSERT_EFI_ERROR (Status);
     87 
     88   if (BootMode == BOOT_IN_RECOVERY_MODE) {
     89     Status = PeiServicesInstallPpi (&mPpiListRecoveryBootMode);
     90     ASSERT_EFI_ERROR (Status);
     91   }
     92 
     93   return Status;
     94 }
     95