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;
|
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).
|
This code finds variable in storage blocks (Volatile or Non-Volatile).
|
||||||
@ -2050,10 +2107,7 @@ VariableServiceSetVariable (
|
|||||||
(sizeof (VARIABLE_HEADER) + StrSize (VariableName) + DataSize > PcdGet32 (PcdMaxHardwareErrorVariableSize))) {
|
(sizeof (VARIABLE_HEADER) + StrSize (VariableName) + DataSize > PcdGet32 (PcdMaxHardwareErrorVariableSize))) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
//
|
if (!IsHwErrRecVariable(VariableName, VendorGuid)) {
|
||||||
// According to UEFI spec, HARDWARE_ERROR_RECORD variable name convention should be L"HwErrRecXXXX".
|
|
||||||
//
|
|
||||||
if (StrnCmp(VariableName, L"HwErrRec", StrLen(L"HwErrRec")) != 0) {
|
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
The internal header file includes the common header files, defines
|
The internal header file includes the common header files, defines
|
||||||
internal structure and functions used by Variable modules.
|
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
|
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
|
||||||
@ -38,6 +38,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include <Guid/EventGroup.h>
|
#include <Guid/EventGroup.h>
|
||||||
#include <Guid/VariableFormat.h>
|
#include <Guid/VariableFormat.h>
|
||||||
#include <Guid/SystemNvDataGuid.h>
|
#include <Guid/SystemNvDataGuid.h>
|
||||||
|
#include <Guid/HardwareErrorVariable.h>
|
||||||
|
|
||||||
#define VARIABLE_RECLAIM_THRESHOLD (1024)
|
#define VARIABLE_RECLAIM_THRESHOLD (1024)
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# Component description file for Variable module.
|
# Component description file for Variable module.
|
||||||
#
|
#
|
||||||
# This module installs three EFI_RUNTIME_SERVICES: SetVariable, GetVariable, GetNextVariableName.
|
# 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
|
# 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
|
||||||
@ -65,6 +65,7 @@
|
|||||||
gEfiGlobalVariableGuid ## PRODUCES ## Variable Guid
|
gEfiGlobalVariableGuid ## PRODUCES ## Variable Guid
|
||||||
gEfiEventVirtualAddressChangeGuid ## PRODUCES ## Event
|
gEfiEventVirtualAddressChangeGuid ## PRODUCES ## Event
|
||||||
gEfiSystemNvDataFvGuid ## CONSUMES
|
gEfiSystemNvDataFvGuid ## CONSUMES
|
||||||
|
gEfiHardwareErrorVariableGuid ## SOMETIMES_CONSUMES
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
# This module should be used with SMM Runtime DXE module together. The
|
# This module should be used with SMM Runtime DXE module together. The
|
||||||
# SMM Runtime DXE module would install variable arch protocol and variable
|
# SMM Runtime DXE module would install variable arch protocol and variable
|
||||||
# write arch protocol based on SMM variable module.
|
# 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
|
# 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
|
||||||
@ -68,6 +68,7 @@
|
|||||||
gEfiGlobalVariableGuid ## PRODUCES ## Variable Guid
|
gEfiGlobalVariableGuid ## PRODUCES ## Variable Guid
|
||||||
gSmmVariableWriteGuid ## PRODUCES ## SMM Variable Write Guid
|
gSmmVariableWriteGuid ## PRODUCES ## SMM Variable Write Guid
|
||||||
gEfiSystemNvDataFvGuid ## CONSUMES
|
gEfiSystemNvDataFvGuid ## CONSUMES
|
||||||
|
gEfiHardwareErrorVariableGuid ## SOMETIMES_CONSUMES
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
||||||
|
@ -1884,6 +1884,63 @@ Done:
|
|||||||
return Status;
|
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).
|
This code finds variable in storage blocks (Volatile or Non-Volatile).
|
||||||
@ -2199,10 +2256,7 @@ VariableServiceSetVariable (
|
|||||||
(sizeof (VARIABLE_HEADER) + StrSize (VariableName) + PayloadSize > PcdGet32 (PcdMaxHardwareErrorVariableSize))) {
|
(sizeof (VARIABLE_HEADER) + StrSize (VariableName) + PayloadSize > PcdGet32 (PcdMaxHardwareErrorVariableSize))) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
//
|
if (!IsHwErrRecVariable(VariableName, VendorGuid)) {
|
||||||
// According to UEFI spec, HARDWARE_ERROR_RECORD variable name convention should be L"HwErrRecXXXX".
|
|
||||||
//
|
|
||||||
if (StrnCmp(VariableName, L"HwErrRec", StrLen(L"HwErrRec")) != 0) {
|
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -40,6 +40,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include <Guid/AuthenticatedVariableFormat.h>
|
#include <Guid/AuthenticatedVariableFormat.h>
|
||||||
#include <Guid/ImageAuthentication.h>
|
#include <Guid/ImageAuthentication.h>
|
||||||
#include <Guid/SystemNvDataGuid.h>
|
#include <Guid/SystemNvDataGuid.h>
|
||||||
|
#include <Guid/HardwareErrorVariable.h>
|
||||||
|
|
||||||
#define VARIABLE_RECLAIM_THRESHOLD (1024)
|
#define VARIABLE_RECLAIM_THRESHOLD (1024)
|
||||||
|
|
||||||
|
@ -76,6 +76,7 @@
|
|||||||
gEfiCustomModeEnableGuid
|
gEfiCustomModeEnableGuid
|
||||||
gEfiSystemNvDataFvGuid ## CONSUMES
|
gEfiSystemNvDataFvGuid ## CONSUMES
|
||||||
gEfiCertDbGuid
|
gEfiCertDbGuid
|
||||||
|
gEfiHardwareErrorVariableGuid ## SOMETIMES_CONSUMES
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
||||||
|
@ -81,6 +81,7 @@
|
|||||||
gEfiCustomModeEnableGuid
|
gEfiCustomModeEnableGuid
|
||||||
gEfiSystemNvDataFvGuid ## CONSUMES
|
gEfiSystemNvDataFvGuid ## CONSUMES
|
||||||
gEfiCertDbGuid
|
gEfiCertDbGuid
|
||||||
|
gEfiHardwareErrorVariableGuid ## SOMETIMES_CONSUMES
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
|
||||||
|
Loading…
x
Reference in New Issue
Block a user