mirror of https://github.com/acidanthera/audk.git
According to UEFI spec 2.3.1a. hardware error record variable should use the EFI_HARDWARE_ERROR_VARIABLE VendorGuid and have the L"HwErrRec####" name convention, #### is a printed hex value and no 0x or h is included in the hex value.
Signed-off-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Guo Dong <guo.dong@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13373 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
021a1af927
commit
a5f15e3025
|
@ -1760,6 +1760,63 @@ Done:
|
|||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Check if a Unicode character is a hexadecimal character.
|
||||
|
||||
This function checks if a Unicode character is a
|
||||
hexadecimal character. The valid hexadecimal character is
|
||||
L'0' to L'9', L'a' to L'f', or L'A' to L'F'.
|
||||
|
||||
|
||||
@param Char The character to check against.
|
||||
|
||||
@retval TRUE If the Char is a hexadecmial character.
|
||||
@retval FALSE If the Char is not a hexadecmial character.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
IsHexaDecimalDigitCharacter (
|
||||
IN CHAR16 Char
|
||||
)
|
||||
{
|
||||
return (BOOLEAN) ((Char >= L'0' && Char <= L'9') || (Char >= L'A' && Char <= L'F') || (Char >= L'a' && Char <= L'f'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
This code checks if variable is hardware error record variable or not.
|
||||
|
||||
According to UEFI spec, hardware error record variable should use the EFI_HARDWARE_ERROR_VARIABLE VendorGuid
|
||||
and have the L"HwErrRec####" name convention, #### is a printed hex value and no 0x or h is included in the hex value.
|
||||
|
||||
@param VariableName Pointer to variable name.
|
||||
@param VendorGuid Variable Vendor Guid.
|
||||
|
||||
@retval TRUE Variable is hardware error record variable.
|
||||
@retval FALSE Variable is not hardware error record variable.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
IsHwErrRecVariable (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid
|
||||
)
|
||||
{
|
||||
if (!CompareGuid (VendorGuid, &gEfiHardwareErrorVariableGuid) ||
|
||||
(StrLen (VariableName) != StrLen (L"HwErrRec####")) ||
|
||||
(StrnCmp(VariableName, L"HwErrRec", StrLen (L"HwErrRec")) != 0) ||
|
||||
!IsHexaDecimalDigitCharacter (VariableName[0x8]) ||
|
||||
!IsHexaDecimalDigitCharacter (VariableName[0x9]) ||
|
||||
!IsHexaDecimalDigitCharacter (VariableName[0xA]) ||
|
||||
!IsHexaDecimalDigitCharacter (VariableName[0xB])) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
This code finds variable in storage blocks (Volatile or Non-Volatile).
|
||||
|
@ -2050,10 +2107,7 @@ VariableServiceSetVariable (
|
|||
(sizeof (VARIABLE_HEADER) + StrSize (VariableName) + DataSize > PcdGet32 (PcdMaxHardwareErrorVariableSize))) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
//
|
||||
// According to UEFI spec, HARDWARE_ERROR_RECORD variable name convention should be L"HwErrRecXXXX".
|
||||
//
|
||||
if (StrnCmp(VariableName, L"HwErrRec", StrLen(L"HwErrRec")) != 0) {
|
||||
if (!IsHwErrRecVariable(VariableName, VendorGuid)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
The internal header file includes the common header files, defines
|
||||
internal structure and functions used by Variable modules.
|
||||
|
||||
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2006 - 2012, 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
|
||||
|
@ -38,6 +38,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#include <Guid/EventGroup.h>
|
||||
#include <Guid/VariableFormat.h>
|
||||
#include <Guid/SystemNvDataGuid.h>
|
||||
#include <Guid/HardwareErrorVariable.h>
|
||||
|
||||
#define VARIABLE_RECLAIM_THRESHOLD (1024)
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# Component description file for Variable module.
|
||||
#
|
||||
# This module installs three EFI_RUNTIME_SERVICES: SetVariable, GetVariable, GetNextVariableName.
|
||||
# Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2006 - 2012, 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
|
||||
|
@ -65,6 +65,7 @@
|
|||
gEfiGlobalVariableGuid ## PRODUCES ## Variable Guid
|
||||
gEfiEventVirtualAddressChangeGuid ## PRODUCES ## Event
|
||||
gEfiSystemNvDataFvGuid ## CONSUMES
|
||||
gEfiHardwareErrorVariableGuid ## SOMETIMES_CONSUMES
|
||||
|
||||
[Pcd]
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
# This module should be used with SMM Runtime DXE module together. The
|
||||
# SMM Runtime DXE module would install variable arch protocol and variable
|
||||
# write arch protocol based on SMM variable module.
|
||||
# Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2010 - 2012, 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
|
||||
|
@ -68,6 +68,7 @@
|
|||
gEfiGlobalVariableGuid ## PRODUCES ## Variable Guid
|
||||
gSmmVariableWriteGuid ## PRODUCES ## SMM Variable Write Guid
|
||||
gEfiSystemNvDataFvGuid ## CONSUMES
|
||||
gEfiHardwareErrorVariableGuid ## SOMETIMES_CONSUMES
|
||||
|
||||
[Pcd]
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
||||
|
|
|
@ -1884,6 +1884,63 @@ Done:
|
|||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Check if a Unicode character is a hexadecimal character.
|
||||
|
||||
This function checks if a Unicode character is a
|
||||
hexadecimal character. The valid hexadecimal character is
|
||||
L'0' to L'9', L'a' to L'f', or L'A' to L'F'.
|
||||
|
||||
|
||||
@param Char The character to check against.
|
||||
|
||||
@retval TRUE If the Char is a hexadecmial character.
|
||||
@retval FALSE If the Char is not a hexadecmial character.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
IsHexaDecimalDigitCharacter (
|
||||
IN CHAR16 Char
|
||||
)
|
||||
{
|
||||
return (BOOLEAN) ((Char >= L'0' && Char <= L'9') || (Char >= L'A' && Char <= L'F') || (Char >= L'a' && Char <= L'f'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
This code checks if variable is hardware error record variable or not.
|
||||
|
||||
According to UEFI spec, hardware error record variable should use the EFI_HARDWARE_ERROR_VARIABLE VendorGuid
|
||||
and have the L"HwErrRec####" name convention, #### is a printed hex value and no 0x or h is included in the hex value.
|
||||
|
||||
@param VariableName Pointer to variable name.
|
||||
@param VendorGuid Variable Vendor Guid.
|
||||
|
||||
@retval TRUE Variable is hardware error record variable.
|
||||
@retval FALSE Variable is not hardware error record variable.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
IsHwErrRecVariable (
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid
|
||||
)
|
||||
{
|
||||
if (!CompareGuid (VendorGuid, &gEfiHardwareErrorVariableGuid) ||
|
||||
(StrLen (VariableName) != StrLen (L"HwErrRec####")) ||
|
||||
(StrnCmp(VariableName, L"HwErrRec", StrLen (L"HwErrRec")) != 0) ||
|
||||
!IsHexaDecimalDigitCharacter (VariableName[0x8]) ||
|
||||
!IsHexaDecimalDigitCharacter (VariableName[0x9]) ||
|
||||
!IsHexaDecimalDigitCharacter (VariableName[0xA]) ||
|
||||
!IsHexaDecimalDigitCharacter (VariableName[0xB])) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
This code finds variable in storage blocks (Volatile or Non-Volatile).
|
||||
|
@ -2199,10 +2256,7 @@ VariableServiceSetVariable (
|
|||
(sizeof (VARIABLE_HEADER) + StrSize (VariableName) + PayloadSize > PcdGet32 (PcdMaxHardwareErrorVariableSize))) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
//
|
||||
// According to UEFI spec, HARDWARE_ERROR_RECORD variable name convention should be L"HwErrRecXXXX".
|
||||
//
|
||||
if (StrnCmp(VariableName, L"HwErrRec", StrLen(L"HwErrRec")) != 0) {
|
||||
if (!IsHwErrRecVariable(VariableName, VendorGuid)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -40,6 +40,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#include <Guid/AuthenticatedVariableFormat.h>
|
||||
#include <Guid/ImageAuthentication.h>
|
||||
#include <Guid/SystemNvDataGuid.h>
|
||||
#include <Guid/HardwareErrorVariable.h>
|
||||
|
||||
#define VARIABLE_RECLAIM_THRESHOLD (1024)
|
||||
|
||||
|
|
|
@ -76,6 +76,7 @@
|
|||
gEfiCustomModeEnableGuid
|
||||
gEfiSystemNvDataFvGuid ## CONSUMES
|
||||
gEfiCertDbGuid
|
||||
gEfiHardwareErrorVariableGuid ## SOMETIMES_CONSUMES
|
||||
|
||||
[Pcd]
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
||||
|
|
|
@ -81,6 +81,7 @@
|
|||
gEfiCustomModeEnableGuid
|
||||
gEfiSystemNvDataFvGuid ## CONSUMES
|
||||
gEfiCertDbGuid
|
||||
gEfiHardwareErrorVariableGuid ## SOMETIMES_CONSUMES
|
||||
|
||||
[Pcd]
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
||||
|
|
Loading…
Reference in New Issue