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 # Intel Framework Module Package contains the definitions and module implementation
# which follows Intel EFI Framework Specification. # 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 # This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License # 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. ## 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, # TRUE means the machine is in first boot cycle. After completing the first boot,
# the PCD's value will be updated to FALSE. # 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 gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdBootState|TRUE|BOOLEAN|0x0001002f
## Timeout value for displaying progressing bar in before boot OS. ## Timeout value for displaying progressing bar in before boot OS.
# According to UEFI 2.0 spec, the default TimeOut should be 0xffff. # 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 gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPlatformBootTimeOut|0xffff|UINT16|0x40000001
## Error level for hardware recorder. If value 0, platform does not support feature of hardware error record. ## 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 gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdHardwareErrorRecordLevel|0|UINT16|0x40000002
[PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx] [PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]

View File

@ -457,6 +457,8 @@ BdsEntry (
LIST_ENTRY BootOptionList; LIST_ENTRY BootOptionList;
UINTN BootNextSize; UINTN BootNextSize;
CHAR16 *FirmwareVendor; CHAR16 *FirmwareVendor;
EFI_STATUS Status;
UINT16 BootTimeOut;
// //
// Insert the performance probe // Insert the performance probe
@ -510,6 +512,25 @@ BdsEntry (
InitializeHwErrRecSupport(); 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 // bugbug: platform specific code
// Initialize the platform specific string and language // Initialize the platform specific string and language

View File

@ -1,7 +1,7 @@
/** @file /** @file
The functions for Boot Maintainence Main menu. 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 This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -672,7 +672,14 @@ ApplyChangeHandler (
break; break;
case FORM_TIME_OUT_ID: 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; Private->BmmOldFakeNVData.BootTimeOut = CurrentFakeNVMap->BootTimeOut;
break; break;

View File

@ -2,7 +2,7 @@
Set the level of support for Hardware Error Record Persistence that is Set the level of support for Hardware Error Record Persistence that is
implemented by the platform. 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 This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License 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 which accompanies this distribution. The full text of the license may be found at
@ -26,17 +26,23 @@ InitializeHwErrRecSupport (
VOID VOID
) )
{ {
EFI_STATUS Status;
UINT16 HardwareErrorRecordLevel; UINT16 HardwareErrorRecordLevel;
HardwareErrorRecordLevel = PcdGet16 (PcdHardwareErrorRecordLevel); HardwareErrorRecordLevel = PcdGet16 (PcdHardwareErrorRecordLevel);
if (HardwareErrorRecordLevel != 0) { if (HardwareErrorRecordLevel != 0) {
// //
// Set original value again to make sure this value is stored into variable // If level value equal 0, no need set to 0 to variable area because UEFI specification
// area but not PCD database. // 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);
} }
} }