]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg/QemuVideoDxe: factor out QemuVideoBochsAddMode
authorGerd Hoffmann <kraxel@redhat.com>
Mon, 17 Jan 2022 09:58:16 +0000 (10:58 +0100)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Sat, 29 Jan 2022 17:04:21 +0000 (17:04 +0000)
Add helper function to add a video mode to the list of modes.
Move code.  Minor debug logging tweaks, no other functional
change.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Ard Biesheuvel <ardb@kernel.org>
OvmfPkg/QemuVideoDxe/Initialize.c

index 2b174d13faf2bb51d06d1af874746fde1e899265..8c5c9176ad212c674fc038fc7e815bc9f03bcf02 100644 (file)
@@ -245,16 +245,53 @@ STATIC QEMU_VIDEO_BOCHS_MODES  QemuVideoBochsModes[] = {
 #define QEMU_VIDEO_BOCHS_MODE_COUNT \\r
   (ARRAY_SIZE (QemuVideoBochsModes))\r
 \r
+STATIC\r
+VOID\r
+QemuVideoBochsAddMode (\r
+  QEMU_VIDEO_PRIVATE_DATA  *Private,\r
+  UINT32                   AvailableFbSize,\r
+  UINT32                   Width,\r
+  UINT32                   Height\r
+  )\r
+{\r
+  QEMU_VIDEO_MODE_DATA  *ModeData = Private->ModeData + Private->MaxMode;\r
+  UINTN                 RequiredFbSize;\r
+\r
+  RequiredFbSize = (UINTN)Width * Height * 4;\r
+  if (RequiredFbSize > AvailableFbSize) {\r
+    DEBUG ((\r
+      DEBUG_INFO,\r
+      "Skipping Bochs Mode %dx%d, 32-bit (not enough vram)\n",\r
+      Width,\r
+      Height\r
+      ));\r
+    return;\r
+  }\r
+\r
+  ModeData->InternalModeIndex    = (UINT32)Private->MaxMode;\r
+  ModeData->HorizontalResolution = Width;\r
+  ModeData->VerticalResolution   = Height;\r
+  ModeData->ColorDepth           = 32;\r
+  DEBUG ((\r
+    DEBUG_INFO,\r
+    "Adding Bochs Internal Mode %d: %dx%d, %d-bit\n",\r
+    ModeData->InternalModeIndex,\r
+    ModeData->HorizontalResolution,\r
+    ModeData->VerticalResolution,\r
+    ModeData->ColorDepth\r
+    ));\r
+\r
+  Private->MaxMode++;\r
+}\r
+\r
 EFI_STATUS\r
 QemuVideoBochsModeSetup (\r
   QEMU_VIDEO_PRIVATE_DATA  *Private,\r
   BOOLEAN                  IsQxl\r
   )\r
 {\r
-  UINT32                  AvailableFbSize;\r
-  UINT32                  Index;\r
-  QEMU_VIDEO_MODE_DATA    *ModeData;\r
-  QEMU_VIDEO_BOCHS_MODES  *VideoMode;\r
+  UINT32  AvailableFbSize;\r
+  UINT32  Index;\r
 \r
   //\r
   // Fetch the available framebuffer size.\r
@@ -343,34 +380,14 @@ QemuVideoBochsModeSetup (
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
-  ModeData  = Private->ModeData;\r
-  VideoMode = &QemuVideoBochsModes[0];\r
   for (Index = 0; Index < QEMU_VIDEO_BOCHS_MODE_COUNT; Index++) {\r
-    UINTN  RequiredFbSize;\r
-\r
-    RequiredFbSize = (UINTN)VideoMode->Width * VideoMode->Height * 4;\r
-    if (RequiredFbSize <= AvailableFbSize) {\r
-      ModeData->InternalModeIndex    = Index;\r
-      ModeData->HorizontalResolution = VideoMode->Width;\r
-      ModeData->VerticalResolution   = VideoMode->Height;\r
-      ModeData->ColorDepth           = 32;\r
-      DEBUG ((\r
-        DEBUG_INFO,\r
-        "Adding Mode %d as Bochs Internal Mode %d: %dx%d, %d-bit\n",\r
-        (INT32)(ModeData - Private->ModeData),\r
-        ModeData->InternalModeIndex,\r
-        ModeData->HorizontalResolution,\r
-        ModeData->VerticalResolution,\r
-        ModeData->ColorDepth\r
-        ));\r
-\r
-      ModeData++;\r
-    }\r
-\r
-    VideoMode++;\r
+    QemuVideoBochsAddMode (\r
+      Private,\r
+      AvailableFbSize,\r
+      QemuVideoBochsModes[Index].Width,\r
+      QemuVideoBochsModes[Index].Height\r
+      );\r
   }\r
 \r
-  Private->MaxMode = ModeData - Private->ModeData;\r
-\r
   return EFI_SUCCESS;\r
 }\r