diff --git a/OvmfPkg/QemuVideoDxe/Gop.c b/OvmfPkg/QemuVideoDxe/Gop.c index 912947c2ff..2ff4bcfeba 100644 --- a/OvmfPkg/QemuVideoDxe/Gop.c +++ b/OvmfPkg/QemuVideoDxe/Gop.c @@ -180,11 +180,11 @@ Routine Description: switch (Private->Variant) { case QEMU_VIDEO_CIRRUS_5430: case QEMU_VIDEO_CIRRUS_5446: - InitializeCirrusGraphicsMode (Private, &QemuVideoCirrusModes[ModeData->ModeNumber]); + InitializeCirrusGraphicsMode (Private, &QemuVideoCirrusModes[ModeData->InternalModeIndex]); break; case QEMU_VIDEO_BOCHS_MMIO: case QEMU_VIDEO_BOCHS: - InitializeBochsGraphicsMode (Private, &QemuVideoBochsModes[ModeData->ModeNumber]); + InitializeBochsGraphicsMode (Private, &QemuVideoBochsModes[ModeData->InternalModeIndex]); break; default: ASSERT (FALSE); diff --git a/OvmfPkg/QemuVideoDxe/Initialize.c b/OvmfPkg/QemuVideoDxe/Initialize.c index 37744786cb..af3b6af47c 100644 --- a/OvmfPkg/QemuVideoDxe/Initialize.c +++ b/OvmfPkg/QemuVideoDxe/Initialize.c @@ -182,14 +182,15 @@ QemuVideoCirrusModeSetup ( ModeData = Private->ModeData; VideoMode = &QemuVideoCirrusModes[0]; for (Index = 0; Index < QEMU_VIDEO_CIRRUS_MODE_COUNT; Index ++) { - ModeData->ModeNumber = Index; + ModeData->InternalModeIndex = Index; ModeData->HorizontalResolution = VideoMode->Width; ModeData->VerticalResolution = VideoMode->Height; ModeData->ColorDepth = VideoMode->ColorDepth; ModeData->RefreshRate = VideoMode->RefreshRate; DEBUG ((EFI_D_INFO, - "Adding Cirrus Video Mode %d: %dx%d, %d-bit, %d Hz\n", - ModeData->ModeNumber, + "Adding Mode %d as Cirrus Internal Mode %d: %dx%d, %d-bit, %d Hz\n", + (INT32) (ModeData - Private->ModeData), + ModeData->InternalModeIndex, ModeData->HorizontalResolution, ModeData->VerticalResolution, ModeData->ColorDepth, @@ -237,14 +238,15 @@ QemuVideoBochsModeSetup ( ModeData = Private->ModeData; VideoMode = &QemuVideoBochsModes[0]; for (Index = 0; Index < QEMU_VIDEO_BOCHS_MODE_COUNT; Index ++) { - ModeData->ModeNumber = Index; + ModeData->InternalModeIndex = Index; ModeData->HorizontalResolution = VideoMode->Width; ModeData->VerticalResolution = VideoMode->Height; ModeData->ColorDepth = VideoMode->ColorDepth; ModeData->RefreshRate = 60; DEBUG ((EFI_D_INFO, - "Adding Bochs Video Mode %d: %dx%d, %d-bit, %d Hz\n", - ModeData->ModeNumber, + "Adding Mode %d as Bochs Internal Mode %d: %dx%d, %d-bit, %d Hz\n", + (INT32) (ModeData - Private->ModeData), + ModeData->InternalModeIndex, ModeData->HorizontalResolution, ModeData->VerticalResolution, ModeData->ColorDepth, diff --git a/OvmfPkg/QemuVideoDxe/Qemu.h b/OvmfPkg/QemuVideoDxe/Qemu.h index 78e182e6bf..098ee774e0 100644 --- a/OvmfPkg/QemuVideoDxe/Qemu.h +++ b/OvmfPkg/QemuVideoDxe/Qemu.h @@ -50,7 +50,7 @@ // QEMU Vide Graphical Mode Data // typedef struct { - UINT32 ModeNumber; + UINT32 InternalModeIndex; // points into card-specific mode table UINT32 HorizontalResolution; UINT32 VerticalResolution; UINT32 ColorDepth; @@ -107,15 +107,22 @@ typedef struct { UINT64 OriginalPciAttributes; EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput; EFI_DEVICE_PATH_PROTOCOL *GopDevicePath; + + // + // The next three fields match the client-visible + // EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE.Mode and + // EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE.MaxMode fields. + // UINTN CurrentMode; UINTN MaxMode; QEMU_VIDEO_MODE_DATA *ModeData; + UINT8 *LineBuffer; QEMU_VIDEO_VARIANT Variant; } QEMU_VIDEO_PRIVATE_DATA; /// -/// Video Mode structure +/// Card-specific Video Mode structures /// typedef struct { UINT32 Width;