]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/QemuVideoDxe/Gop.c
SecurityPkg: Refine type cast for pointer subtraction
[mirror_edk2.git] / OvmfPkg / QemuVideoDxe / Gop.c
index 532f20e6446ca383c5acf8fbd8ca4966cd2734fe..359e9217d3d143fbbe90c6a742cd15b9e74cd73b 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Graphics Output Protocol functions for the QEMU video controller.\r
 \r
-  Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -167,15 +167,6 @@ Routine Description:
 \r
   ModeData = &Private->ModeData[ModeNumber];\r
 \r
-  if (Private->LineBuffer) {\r
-    gBS->FreePool (Private->LineBuffer);\r
-  }\r
-\r
-  Private->LineBuffer = AllocatePool (4 * ModeData->HorizontalResolution);\r
-  if (Private->LineBuffer == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-\r
   switch (Private->Variant) {\r
   case QEMU_VIDEO_CIRRUS_5430:\r
   case QEMU_VIDEO_CIRRUS_5446:\r
@@ -187,8 +178,6 @@ Routine Description:
     break;\r
   default:\r
     ASSERT (FALSE);\r
-    gBS->FreePool (Private->LineBuffer);\r
-    Private->LineBuffer = NULL;\r
     return EFI_DEVICE_ERROR;\r
   }\r
 \r
@@ -200,30 +189,35 @@ Routine Description:
   QemuVideoCompleteModeData (Private, This->Mode);\r
 \r
   //\r
-  // Allocate when using first time.\r
+  // Re-initialize the frame buffer configure when mode changes.\r
   //\r
-  if (Private->FrameBufferBltConfigure == NULL) {\r
-    Status = FrameBufferBltConfigure (\r
-               (VOID*) (UINTN) This->Mode->FrameBufferBase,\r
-               This->Mode->Info,\r
-               Private->FrameBufferBltConfigure,\r
-               &Private->FrameBufferBltConfigureSize\r
-               );\r
-    ASSERT (Status == RETURN_BUFFER_TOO_SMALL);\r
+  Status = FrameBufferBltConfigure (\r
+             (VOID*) (UINTN) This->Mode->FrameBufferBase,\r
+             This->Mode->Info,\r
+             Private->FrameBufferBltConfigure,\r
+             &Private->FrameBufferBltConfigureSize\r
+             );\r
+  if (Status == RETURN_BUFFER_TOO_SMALL) {\r
+    //\r
+    // Frame buffer configure may be larger in new mode.\r
+    //\r
+    if (Private->FrameBufferBltConfigure != NULL) {\r
+      FreePool (Private->FrameBufferBltConfigure);\r
+    }\r
     Private->FrameBufferBltConfigure =\r
       AllocatePool (Private->FrameBufferBltConfigureSize);\r
-  }\r
+    ASSERT (Private->FrameBufferBltConfigure != NULL);\r
 \r
-  //\r
-  // Create the configuration for FrameBufferBltLib\r
-  //\r
-  ASSERT (Private->FrameBufferBltConfigure != NULL);\r
-  Status = FrameBufferBltConfigure (\r
-              (VOID*) (UINTN) This->Mode->FrameBufferBase,\r
-              This->Mode->Info,\r
-              Private->FrameBufferBltConfigure,\r
-              &Private->FrameBufferBltConfigureSize\r
-              );\r
+    //\r
+    // Create the configuration for FrameBufferBltLib\r
+    //\r
+    Status = FrameBufferBltConfigure (\r
+                (VOID*) (UINTN) This->Mode->FrameBufferBase,\r
+                This->Mode->Info,\r
+                Private->FrameBufferBltConfigure,\r
+                &Private->FrameBufferBltConfigureSize\r
+                );\r
+  }\r
   ASSERT (Status == RETURN_SUCCESS);\r
 \r
   return EFI_SUCCESS;\r
@@ -349,7 +343,6 @@ QemuVideoGraphicsOutputConstructor (
   }\r
   Private->GraphicsOutput.Mode->MaxMode = (UINT32) Private->MaxMode;\r
   Private->GraphicsOutput.Mode->Mode    = GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER;\r
-  Private->LineBuffer                   = NULL;\r
   Private->FrameBufferBltConfigure      = NULL;\r
   Private->FrameBufferBltConfigureSize  = 0;\r
 \r
@@ -395,10 +388,6 @@ Returns:
 \r
 --*/\r
 {\r
-  if (Private->LineBuffer != NULL) {\r
-    FreePool (Private->LineBuffer);\r
-  }\r
-\r
   if (Private->FrameBufferBltConfigure != NULL) {\r
     FreePool (Private->FrameBufferBltConfigure);\r
   }\r