)\r
{\r
EFI_STATUS Status;\r
+ UINTN NameSize;\r
UINTN VariableSize;\r
UINT8 TerminalType;\r
EFI_DEVICE_PATH_PROTOCOL *Variable;\r
EFI_DEVICE_PATH_PROTOCOL *NewVariable;\r
EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;\r
+ EDKII_SET_VARIABLE_STATUS *SetVariableStatus;\r
\r
//\r
// Get global variable and its size according to the name given.\r
VariableSize,\r
Variable\r
);\r
+\r
+ if (EFI_ERROR (Status)) {\r
+ NameSize = StrSize (VariableName);\r
+ SetVariableStatus = AllocatePool (sizeof (EDKII_SET_VARIABLE_STATUS) + NameSize + VariableSize);\r
+ if (SetVariableStatus != NULL) {\r
+ CopyGuid (&SetVariableStatus->Guid, &gEfiGlobalVariableGuid);\r
+ SetVariableStatus->NameSize = NameSize;\r
+ SetVariableStatus->DataSize = VariableSize;\r
+ SetVariableStatus->SetStatus = Status;\r
+ SetVariableStatus->Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS;\r
+ CopyMem (SetVariableStatus + 1, VariableName, NameSize);\r
+ CopyMem (((UINT8 *) (SetVariableStatus + 1)) + NameSize, Variable, VariableSize);\r
+\r
+ REPORT_STATUS_CODE_EX (\r
+ EFI_ERROR_CODE,\r
+ PcdGet32 (PcdErrorCodeSetVariable),\r
+ 0,\r
+ NULL,\r
+ &gEdkiiStatusCodeDataTypeVariableGuid,\r
+ SetVariableStatus,\r
+ sizeof (EDKII_SET_VARIABLE_STATUS) + NameSize + VariableSize\r
+ );\r
+\r
+ FreePool (SetVariableStatus);\r
+ }\r
+ }\r
+\r
FreePool (Variable);\r
\r
return ;\r
VariableSize,\r
NewVariable\r
);\r
+ //\r
+ // Shrinking variable with existing variable driver implementation shouldn't fail.\r
+ //\r
+ ASSERT_EFI_ERROR (Status);\r
}\r
\r
if (NewVariable != NULL) {\r
#\r
# This driver installs Simple Text In/Out protocol for terminal devices (serial devices or hotplug devices).\r
#\r
-# Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>\r
# This program and the accompanying materials\r
# are licensed and made available under the terms and conditions of the BSD License\r
# which accompanies this distribution. The full text of the license may be found at\r
gEfiVT100Guid ## SOMETIMES_CONSUMES ## GUID\r
gEfiVT100PlusGuid ## SOMETIMES_CONSUMES ## GUID\r
gEfiPcAnsiGuid ## SOMETIMES_CONSUMES ## GUID\r
+ gEdkiiStatusCodeDataTypeVariableGuid ## SOMETIMES_CONSUMES ## GUID\r
\r
[Protocols]\r
gEfiSerialIoProtocolGuid ## TO_START\r
\r
[Pcd]\r
gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType\r
+ gEfiMdeModulePkgTokenSpaceGuid.PcdErrorCodeSetVariable\r
\r
# [Event]\r
# ##\r