[edk2-devel] [PATCH v2 4/5] OvmfPkg/QemuVideoDxe: factor out QemuVideoBochsAddMode
Gerd Hoffmann
kraxel at redhat.com
Mon Jan 17 09:58:16 UTC 2022
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 at redhat.com>
---
OvmfPkg/QemuVideoDxe/Initialize.c | 77 +++++++++++++++++++------------
1 file changed, 47 insertions(+), 30 deletions(-)
diff --git a/OvmfPkg/QemuVideoDxe/Initialize.c b/OvmfPkg/QemuVideoDxe/Initialize.c
index 2b174d13faf2..8c5c9176ad21 100644
--- a/OvmfPkg/QemuVideoDxe/Initialize.c
+++ b/OvmfPkg/QemuVideoDxe/Initialize.c
@@ -245,16 +245,53 @@ STATIC QEMU_VIDEO_BOCHS_MODES QemuVideoBochsModes[] = {
#define QEMU_VIDEO_BOCHS_MODE_COUNT \
(ARRAY_SIZE (QemuVideoBochsModes))
+STATIC
+VOID
+QemuVideoBochsAddMode (
+ QEMU_VIDEO_PRIVATE_DATA *Private,
+ UINT32 AvailableFbSize,
+ UINT32 Width,
+ UINT32 Height
+ )
+{
+ QEMU_VIDEO_MODE_DATA *ModeData = Private->ModeData + Private->MaxMode;
+ UINTN RequiredFbSize;
+
+ RequiredFbSize = (UINTN)Width * Height * 4;
+ if (RequiredFbSize > AvailableFbSize) {
+ DEBUG ((
+ DEBUG_INFO,
+ "Skipping Bochs Mode %dx%d, 32-bit (not enough vram)\n",
+ Width,
+ Height
+ ));
+ return;
+ }
+
+ ModeData->InternalModeIndex = (UINT32)Private->MaxMode;
+ ModeData->HorizontalResolution = Width;
+ ModeData->VerticalResolution = Height;
+ ModeData->ColorDepth = 32;
+ DEBUG ((
+ DEBUG_INFO,
+ "Adding Bochs Internal Mode %d: %dx%d, %d-bit\n",
+ ModeData->InternalModeIndex,
+ ModeData->HorizontalResolution,
+ ModeData->VerticalResolution,
+ ModeData->ColorDepth
+ ));
+
+ Private->MaxMode++;
+}
+
EFI_STATUS
QemuVideoBochsModeSetup (
QEMU_VIDEO_PRIVATE_DATA *Private,
BOOLEAN IsQxl
)
{
- UINT32 AvailableFbSize;
- UINT32 Index;
- QEMU_VIDEO_MODE_DATA *ModeData;
- QEMU_VIDEO_BOCHS_MODES *VideoMode;
+ UINT32 AvailableFbSize;
+ UINT32 Index;
//
// Fetch the available framebuffer size.
@@ -343,34 +380,14 @@ QemuVideoBochsModeSetup (
return EFI_OUT_OF_RESOURCES;
}
- ModeData = Private->ModeData;
- VideoMode = &QemuVideoBochsModes[0];
for (Index = 0; Index < QEMU_VIDEO_BOCHS_MODE_COUNT; Index++) {
- UINTN RequiredFbSize;
-
- RequiredFbSize = (UINTN)VideoMode->Width * VideoMode->Height * 4;
- if (RequiredFbSize <= AvailableFbSize) {
- ModeData->InternalModeIndex = Index;
- ModeData->HorizontalResolution = VideoMode->Width;
- ModeData->VerticalResolution = VideoMode->Height;
- ModeData->ColorDepth = 32;
- DEBUG ((
- DEBUG_INFO,
- "Adding Mode %d as Bochs Internal Mode %d: %dx%d, %d-bit\n",
- (INT32)(ModeData - Private->ModeData),
- ModeData->InternalModeIndex,
- ModeData->HorizontalResolution,
- ModeData->VerticalResolution,
- ModeData->ColorDepth
- ));
-
- ModeData++;
- }
-
- VideoMode++;
+ QemuVideoBochsAddMode (
+ Private,
+ AvailableFbSize,
+ QemuVideoBochsModes[Index].Width,
+ QemuVideoBochsModes[Index].Height
+ );
}
- Private->MaxMode = ModeData - Private->ModeData;
-
return EFI_SUCCESS;
}
--
2.34.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#85734): https://edk2.groups.io/g/devel/message/85734
Mute This Topic: https://groups.io/mt/88481085/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list