Follow UEFI spec, set TimeOut and HwErrRecSupport variable by EFI variable service instead of PcdSet().

Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14162 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
lzeng14 2013-03-05 12:20:53 +00:00
parent fa9bebd8f9
commit e1e91b73d1
4 changed files with 48 additions and 12 deletions

View File

@ -2,7 +2,7 @@
# Intel Framework Module Package contains the definitions and module implementation
# which follows Intel EFI Framework Specification.
#
# Copyright (c) 2007 - 2012, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2007 - 2013, Intel Corporation. All rights reserved.<BR>
#
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
@ -147,14 +147,16 @@
## The PCD is used to mark whether the machine is in first boot cycle.
# TRUE means the machine is in first boot cycle. After completing the first boot,
# the PCD's value will be updated to FALSE.
# This PCD should be set as HII type PCD by platform integrator.
gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBootState|TRUE|BOOLEAN|0x0001002f
## Timeout value for displaying progressing bar in before boot OS.
# According to UEFI 2.0 spec, the default TimeOut should be 0xffff.
# This PCD should be set as HII type PCD by platform integrator mapped to variable L"TimeOut" and gEfiGlobalVariableGuid.
gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPlatformBootTimeOut|0xffff|UINT16|0x40000001
## Error level for hardware recorder. If value 0, platform does not support feature of hardware error record.
# This PCD should be set as HII type PCD by platform integrator mapped to variable L"HwErrRecSupport"
# This PCD should be set as HII type PCD by platform integrator mapped to variable L"HwErrRecSupport" and gEfiGlobalVariableGuid.
gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdHardwareErrorRecordLevel|0|UINT16|0x40000002
[PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]

View File

@ -457,6 +457,8 @@ BdsEntry (
LIST_ENTRY BootOptionList;
UINTN BootNextSize;
CHAR16 *FirmwareVendor;
EFI_STATUS Status;
UINT16 BootTimeOut;
//
// Insert the performance probe
@ -510,6 +512,25 @@ BdsEntry (
InitializeHwErrRecSupport();
//
// Initialize L"Timeout" EFI global variable.
//
BootTimeOut = PcdGet16 (PcdPlatformBootTimeOut);
if (BootTimeOut != 0xFFFF) {
//
// If time out value equal 0xFFFF, no need set to 0xFFFF to variable area because UEFI specification
// define same behavior between no value or 0xFFFF value for L"Timeout".
//
Status = gRT->SetVariable (
L"Timeout",
&gEfiGlobalVariableGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
sizeof (UINT16),
&BootTimeOut
);
ASSERT_EFI_ERROR(Status);
}
//
// bugbug: platform specific code
// Initialize the platform specific string and language

View File

@ -1,7 +1,7 @@
/** @file
The functions for Boot Maintainence Main menu.
Copyright (c) 2004 - 2012, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@ -672,7 +672,14 @@ ApplyChangeHandler (
break;
case FORM_TIME_OUT_ID:
PcdSet16 (PcdPlatformBootTimeOut, CurrentFakeNVMap->BootTimeOut);
Status = gRT->SetVariable (
L"Timeout",
&gEfiGlobalVariableGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
sizeof (UINT16),
&(CurrentFakeNVMap->BootTimeOut)
);
ASSERT_EFI_ERROR(Status);
Private->BmmOldFakeNVData.BootTimeOut = CurrentFakeNVMap->BootTimeOut;
break;

View File

@ -2,7 +2,7 @@
Set the level of support for Hardware Error Record Persistence that is
implemented by the platform.
Copyright (c) 2007 - 2008, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2007 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@ -26,17 +26,23 @@ InitializeHwErrRecSupport (
VOID
)
{
EFI_STATUS Status;
UINT16 HardwareErrorRecordLevel;
HardwareErrorRecordLevel = PcdGet16 (PcdHardwareErrorRecordLevel);
if (HardwareErrorRecordLevel != 0) {
//
// Set original value again to make sure this value is stored into variable
// area but not PCD database.
// if level value equal 0, no need set to 0 to variable area because UEFI specification
// define same behavior between no value or 0 value for L"HwErrRecSupport"
// If level value equal 0, no need set to 0 to variable area because UEFI specification
// define same behavior between no value or 0 value for L"HwErrRecSupport".
//
PcdSet16 (PcdHardwareErrorRecordLevel, HardwareErrorRecordLevel);
Status = gRT->SetVariable (
L"HwErrRecSupport",
&gEfiGlobalVariableGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
sizeof (UINT16),
&HardwareErrorRecordLevel
);
ASSERT_EFI_ERROR(Status);
}
}