Home | History | Annotate | Download | only in BootModePei
      1 /**@file
      2 
      3 Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
      4 This program and the accompanying materials
      5 are licensed and made available under the terms and conditions of the BSD License
      6 which accompanies this distribution.  The full text of the license may be found at
      7 http://opensource.org/licenses/bsd-license.php
      8 
      9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 
     12 Module Name:
     13 
     14   BootMode.c
     15 
     16 Abstract:
     17 
     18   Tiano PEIM to provide the platform support functionality within Windows
     19 
     20 **/
     21 
     22 
     23 
     24 //
     25 // The package level header files this module uses
     26 //
     27 #include <PiPei.h>
     28 //
     29 // The protocols, PPI and GUID defintions for this module
     30 //
     31 #include <Ppi/MasterBootMode.h>
     32 #include <Ppi/BootInRecoveryMode.h>
     33 //
     34 // The Library classes this module consumes
     35 //
     36 #include <Library/DebugLib.h>
     37 #include <Library/PeimEntryPoint.h>
     38 
     39 
     40 //
     41 // Module globals
     42 //
     43 EFI_PEI_PPI_DESCRIPTOR  mPpiListBootMode = {
     44   (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
     45   &gEfiPeiMasterBootModePpiGuid,
     46   NULL
     47 };
     48 
     49 EFI_PEI_PPI_DESCRIPTOR  mPpiListRecoveryBootMode = {
     50   (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
     51   &gEfiPeiBootInRecoveryModePpiGuid,
     52   NULL
     53 };
     54 
     55 EFI_STATUS
     56 EFIAPI
     57 InitializeBootMode (
     58   IN       EFI_PEI_FILE_HANDLE  FileHandle,
     59   IN CONST EFI_PEI_SERVICES     **PeiServices
     60   )
     61 /*++
     62 
     63 Routine Description:
     64 
     65   Peform the boot mode determination logic
     66 
     67 Arguments:
     68 
     69   FileHandle  - Handle of the file being invoked.
     70   PeiServices - Describes the list of possible PEI Services.
     71 
     72 Returns:
     73 
     74   Status -  EFI_SUCCESS if the boot mode could be set
     75 
     76 --*/
     77 {
     78   EFI_STATUS  Status;
     79   UINTN       BootMode;
     80 
     81   DEBUG ((EFI_D_ERROR, "NT32 Boot Mode PEIM Loaded\n"));
     82 
     83   //
     84   // Let's assume things are OK if not told otherwise
     85   // Should we read an environment variable in order to easily change this?
     86   //
     87   BootMode  = BOOT_WITH_FULL_CONFIGURATION;
     88 
     89   Status    = (**PeiServices).SetBootMode (PeiServices, (UINT8) BootMode);
     90   ASSERT_EFI_ERROR (Status);
     91 
     92   Status = (**PeiServices).InstallPpi (PeiServices, &mPpiListBootMode);
     93   ASSERT_EFI_ERROR (Status);
     94 
     95   if (BootMode == BOOT_IN_RECOVERY_MODE) {
     96     Status = (**PeiServices).InstallPpi (PeiServices, &mPpiListRecoveryBootMode);
     97     ASSERT_EFI_ERROR (Status);
     98   }
     99 
    100   return Status;
    101 }
    102