OvmfPkg: simply use the Bochs interface for vmsvga
BAR | std vga | vmsvga --------------------------------- 0 | Framebuffer | I/O space 1 | Reserved | Framebuffer 2 | MMIO | FIFO - We cannot recognize VMW SVGA as BOCHS because that would confuse the IsQxl setting in QemuVideoControllerDriverStart(), - We cannot recognize VMW SVGA as BOCHS_MMIO because BAR2 on VMW SVGA is not the BOCHS MMIO BAR (we can only use port IO). Therefore the list of reasons for which we should introduce QEMU_VIDEO_VMWARE_SVGA should name three reasons: (1) Get framebuffer from correct PCI BAR (2) Prevent using BAR2 for MMIO (3) Prevent mis-recognizing VMW SVGA as QXL Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: yuchenlin <yuchenlin@synology.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Regression-tested-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
330e18555c
commit
d021868ccf
|
@ -69,6 +69,12 @@ QEMU_VIDEO_CARD gQemuVideoCardList[] = {
|
||||||
0x1050,
|
0x1050,
|
||||||
QEMU_VIDEO_BOCHS_MMIO,
|
QEMU_VIDEO_BOCHS_MMIO,
|
||||||
L"QEMU VirtIO VGA"
|
L"QEMU VirtIO VGA"
|
||||||
|
},{
|
||||||
|
PCI_CLASS_DISPLAY_VGA,
|
||||||
|
0x15ad,
|
||||||
|
0x0405,
|
||||||
|
QEMU_VIDEO_VMWARE_SVGA,
|
||||||
|
L"QEMU VMWare SVGA"
|
||||||
},{
|
},{
|
||||||
0 /* end of list */
|
0 /* end of list */
|
||||||
}
|
}
|
||||||
|
@ -316,6 +322,14 @@ QemuVideoControllerDriverStart (
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// VMWare SVGA is handled like Bochs (with port IO only).
|
||||||
|
//
|
||||||
|
if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {
|
||||||
|
Private->Variant = QEMU_VIDEO_BOCHS;
|
||||||
|
Private->FrameBufferVramBarIndex = PCI_BAR_IDX1;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check if accessing the bochs interface works.
|
// Check if accessing the bochs interface works.
|
||||||
//
|
//
|
||||||
|
@ -764,7 +778,7 @@ ClearScreen (
|
||||||
Private->PciIo->Mem.Write (
|
Private->PciIo->Mem.Write (
|
||||||
Private->PciIo,
|
Private->PciIo,
|
||||||
EfiPciIoWidthFillUint32,
|
EfiPciIoWidthFillUint32,
|
||||||
0,
|
Private->FrameBufferVramBarIndex,
|
||||||
0,
|
0,
|
||||||
0x400000 >> 2,
|
0x400000 >> 2,
|
||||||
&Color
|
&Color
|
||||||
|
|
|
@ -60,7 +60,7 @@ QemuVideoCompleteModeData (
|
||||||
|
|
||||||
Private->PciIo->GetBarAttributes (
|
Private->PciIo->GetBarAttributes (
|
||||||
Private->PciIo,
|
Private->PciIo,
|
||||||
0,
|
Private->FrameBufferVramBarIndex,
|
||||||
NULL,
|
NULL,
|
||||||
(VOID**) &FrameBufDesc
|
(VOID**) &FrameBufDesc
|
||||||
);
|
);
|
||||||
|
|
|
@ -92,6 +92,7 @@ typedef enum {
|
||||||
QEMU_VIDEO_CIRRUS_5446,
|
QEMU_VIDEO_CIRRUS_5446,
|
||||||
QEMU_VIDEO_BOCHS,
|
QEMU_VIDEO_BOCHS,
|
||||||
QEMU_VIDEO_BOCHS_MMIO,
|
QEMU_VIDEO_BOCHS_MMIO,
|
||||||
|
QEMU_VIDEO_VMWARE_SVGA,
|
||||||
} QEMU_VIDEO_VARIANT;
|
} QEMU_VIDEO_VARIANT;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -120,6 +121,7 @@ typedef struct {
|
||||||
QEMU_VIDEO_VARIANT Variant;
|
QEMU_VIDEO_VARIANT Variant;
|
||||||
FRAME_BUFFER_CONFIGURE *FrameBufferBltConfigure;
|
FRAME_BUFFER_CONFIGURE *FrameBufferBltConfigure;
|
||||||
UINTN FrameBufferBltConfigureSize;
|
UINTN FrameBufferBltConfigureSize;
|
||||||
|
UINT8 FrameBufferVramBarIndex;
|
||||||
} QEMU_VIDEO_PRIVATE_DATA;
|
} QEMU_VIDEO_PRIVATE_DATA;
|
||||||
|
|
||||||
///
|
///
|
||||||
|
|
Loading…
Reference in New Issue