IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
)\r
{\r
+ EFI_TPL OldTpl;\r
EFI_STATUS Status;\r
QEMU_VIDEO_PRIVATE_DATA *Private;\r
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath;\r
QEMU_VIDEO_CARD *Card;\r
EFI_PCI_IO_PROTOCOL *ChildPciIo;\r
\r
+ OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
+\r
//\r
// Allocate Private context data for GOP inteface.\r
//\r
Private = AllocateZeroPool (sizeof (QEMU_VIDEO_PRIVATE_DATA));\r
if (Private == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ goto RestoreTpl;\r
}\r
\r
//\r
goto UninstallGop;\r
}\r
\r
+ if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO ||\r
+ Private->Variant == QEMU_VIDEO_BOCHS) {\r
+ InstallVbeShim (Card->Name, Private->GraphicsOutput.Mode->FrameBufferBase);\r
+ }\r
+\r
+ gBS->RestoreTPL (OldTpl);\r
return EFI_SUCCESS;\r
\r
UninstallGop:\r
FreePrivate:\r
FreePool (Private);\r
\r
+RestoreTpl:\r
+ gBS->RestoreTPL (OldTpl);\r
+\r
return Status;\r
}\r
\r
Private->Handle\r
);\r
\r
+ FreePool (Private->ModeData);\r
+ gBS->UninstallProtocolInterface (Private->Handle,\r
+ &gEfiDevicePathProtocolGuid, Private->GopDevicePath);\r
+ FreePool (Private->GopDevicePath);\r
+\r
//\r
// Free our instance data\r
//\r