blob: 97cc27c6b7ebc6714b6002d98c4b3c28b56735e6 [file] [log] [blame]
klu26ae81422008-03-19 03:23:16 +00001/**@file
qwang1289b65422007-06-26 10:10:18 +00002
3Copyright (c) 2006, Intel Corporation
4All rights reserved. This program and the accompanying materials
5are licensed and made available under the terms and conditions of the BSD License
6which accompanies this distribution. The full text of the license may be found at
7http://opensource.org/licenses/bsd-license.php
8
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12Module Name:
13
14 BootMode.c
15
16Abstract:
17
18 Tiano PEIM to provide the platform support functionality within Windows
19
klu26ae81422008-03-19 03:23:16 +000020**/
qwang1289b65422007-06-26 10:10:18 +000021
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//
43EFI_PEI_PPI_DESCRIPTOR mPpiListBootMode = {
44 (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
45 &gEfiPeiMasterBootModePpiGuid,
46 NULL
47};
48
49EFI_PEI_PPI_DESCRIPTOR mPpiListRecoveryBootMode = {
50 (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
51 &gEfiPeiBootInRecoveryModePpiGuid,
52 NULL
53};
54
55EFI_STATUS
56EFIAPI
57InitializeBootMode (
lgao4f0ba8fd2008-11-27 05:18:34 +000058 IN EFI_PEI_FILE_HANDLE FileHandle,
59 IN CONST EFI_PEI_SERVICES **PeiServices
qwang1289b65422007-06-26 10:10:18 +000060 )
61/*++
62
63Routine Description:
64
65 Peform the boot mode determination logic
66
67Arguments:
68
lgao4f0ba8fd2008-11-27 05:18:34 +000069 FileHandle - Handle of the file being invoked.
70 PeiServices - Describes the list of possible PEI Services.
qwang1289b65422007-06-26 10:10:18 +000071
72Returns:
73
74 Status - EFI_SUCCESS if the boot mode could be set
75
76--*/
qwang1289b65422007-06-26 10:10:18 +000077{
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
lgao4f0ba8fd2008-11-27 05:18:34 +000089 Status = (**PeiServices).SetBootMode (PeiServices, (UINT8) BootMode);
qwang1289b65422007-06-26 10:10:18 +000090 ASSERT_EFI_ERROR (Status);
91
lgao4f0ba8fd2008-11-27 05:18:34 +000092 Status = (**PeiServices).InstallPpi (PeiServices, &mPpiListBootMode);
qwang1289b65422007-06-26 10:10:18 +000093 ASSERT_EFI_ERROR (Status);
94
95 if (BootMode == BOOT_IN_RECOVERY_MODE) {
lgao4f0ba8fd2008-11-27 05:18:34 +000096 Status = (**PeiServices).InstallPpi (PeiServices, &mPpiListRecoveryBootMode);
qwang1289b65422007-06-26 10:10:18 +000097 ASSERT_EFI_ERROR (Status);
98 }
99
100 return Status;
101}