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