NULL\r
);\r
if (EFI_ERROR (Status)) {\r
- return Status;\r
+ goto Exit;\r
}\r
\r
//\r
NULL\r
);\r
if (EFI_ERROR (Status)) {\r
- return Status;\r
+ goto Exit;\r
}\r
\r
//\r
gUpdateData.BufferSize = UPDATE_DATA_SIZE;\r
gUpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);\r
if (gUpdateData.Data == NULL) {\r
- FreePool (BmmCallbackInfo->LoadContext);\r
- FreePool (BmmCallbackInfo);\r
- return EFI_OUT_OF_RESOURCES;\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto Exit;\r
}\r
\r
InitializeStringDepository ();\r
\r
FreeAllMenu ();\r
\r
- FreePool (BmmCallbackInfo->LoadContext);\r
- FreePool (BmmCallbackInfo);\r
FreePool (gUpdateData.Data);\r
gUpdateData.Data = NULL;\r
\r
+Exit:\r
+ if (BmmCallbackInfo->FeDriverHandle != NULL) {\r
+ gBS->UninstallMultipleProtocolInterfaces (\r
+ BmmCallbackInfo->FeDriverHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mFeHiiVendorDevicePath,\r
+ &gEfiHiiConfigAccessProtocolGuid,\r
+ &BmmCallbackInfo->FeConfigAccess,\r
+ NULL\r
+ );\r
+ }\r
+\r
+ if (BmmCallbackInfo->BmmDriverHandle != NULL) {\r
+ gBS->UninstallMultipleProtocolInterfaces (\r
+ BmmCallbackInfo->BmmDriverHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mBmmHiiVendorDevicePath,\r
+ &gEfiHiiConfigAccessProtocolGuid,\r
+ &BmmCallbackInfo->BmmConfigAccess,\r
+ NULL\r
+ );\r
+ }\r
+\r
+ FreePool (BmmCallbackInfo->LoadContext);\r
+ FreePool (BmmCallbackInfo);\r
+\r
return Status;\r
}\r
\r