#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
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