From 5070befc3b9b013f36062c7cc08320c87c02f972 Mon Sep 17 00:00:00 2001 From: Ruiyu Ni Date: Tue, 25 Mar 2014 03:54:34 +0000 Subject: [PATCH] Report the setting variable failure to platform through the status code when core cannot handle the error. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni Reviewed-by: Elvin Li git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15386 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Universal/Console/TerminalDxe/Terminal.c | 33 +++++++++++++++++++ .../Universal/Console/TerminalDxe/Terminal.h | 1 + .../Console/TerminalDxe/TerminalDxe.inf | 4 ++- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c index a27090815c..511094844b 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c @@ -1422,11 +1422,13 @@ TerminalUpdateConsoleDevVariable ( ) { EFI_STATUS Status; + UINTN NameSize; UINTN VariableSize; UINT8 TerminalType; EFI_DEVICE_PATH_PROTOCOL *Variable; EFI_DEVICE_PATH_PROTOCOL *NewVariable; EFI_DEVICE_PATH_PROTOCOL *TempDevicePath; + EDKII_SET_VARIABLE_STATUS *SetVariableStatus; // // Get global variable and its size according to the name given. @@ -1462,6 +1464,33 @@ TerminalUpdateConsoleDevVariable ( VariableSize, Variable ); + + if (EFI_ERROR (Status)) { + NameSize = StrSize (VariableName); + SetVariableStatus = AllocatePool (sizeof (EDKII_SET_VARIABLE_STATUS) + NameSize + VariableSize); + if (SetVariableStatus != NULL) { + CopyGuid (&SetVariableStatus->Guid, &gEfiGlobalVariableGuid); + SetVariableStatus->NameSize = NameSize; + SetVariableStatus->DataSize = VariableSize; + SetVariableStatus->SetStatus = Status; + SetVariableStatus->Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS; + CopyMem (SetVariableStatus + 1, VariableName, NameSize); + CopyMem (((UINT8 *) (SetVariableStatus + 1)) + NameSize, Variable, VariableSize); + + REPORT_STATUS_CODE_EX ( + EFI_ERROR_CODE, + PcdGet32 (PcdErrorCodeSetVariable), + 0, + NULL, + &gEdkiiStatusCodeDataTypeVariableGuid, + SetVariableStatus, + sizeof (EDKII_SET_VARIABLE_STATUS) + NameSize + VariableSize + ); + + FreePool (SetVariableStatus); + } + } + FreePool (Variable); return ; @@ -1569,6 +1598,10 @@ TerminalRemoveConsoleDevVariable ( VariableSize, NewVariable ); + // + // Shrinking variable with existing variable driver implementation shouldn't fail. + // + ASSERT_EFI_ERROR (Status); } if (NewVariable != NULL) { diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h index 0f285eb286..d393acbc20 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h +++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h @@ -20,6 +20,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include +#include #include #include diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf index d4bd55b4ab..6611751853 100644 --- a/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf +++ b/MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf @@ -4,7 +4,7 @@ # # This driver installs Simple Text In/Out protocol for terminal devices (serial devices or hotplug devices). # -# Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
+# Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.
# 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 @@ -65,6 +65,7 @@ gEfiVT100Guid ## SOMETIMES_CONSUMES ## GUID gEfiVT100PlusGuid ## SOMETIMES_CONSUMES ## GUID gEfiPcAnsiGuid ## SOMETIMES_CONSUMES ## GUID + gEdkiiStatusCodeDataTypeVariableGuid ## SOMETIMES_CONSUMES ## GUID [Protocols] gEfiSerialIoProtocolGuid ## TO_START @@ -75,6 +76,7 @@ [Pcd] gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType + gEfiMdeModulePkgTokenSpaceGuid.PcdErrorCodeSetVariable # [Event] # ## -- 2.39.2