QemuVideo: Add support for the bochs dispi interface
Add code to handle qemu-emulated vga cards supporting the bochs dispi interface (standard vga, qxl vga). This requires qemu 1.3+ which provides the bochs dispi interface data register on a aligned io address. See http://git.qemu.org/?p=qemu.git;a=commitdiff;h=df9ffb726ff13f850b8829be1bc85ed621b903ac Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13968 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -89,6 +89,7 @@ typedef struct {
|
||||
typedef enum {
|
||||
QEMU_VIDEO_CIRRUS_5430 = 1,
|
||||
QEMU_VIDEO_CIRRUS_5446,
|
||||
QEMU_VIDEO_BOCHS,
|
||||
} QEMU_VIDEO_VARIANT;
|
||||
|
||||
typedef struct {
|
||||
@@ -126,6 +127,12 @@ typedef struct {
|
||||
UINT8 MiscSetting;
|
||||
} QEMU_VIDEO_CIRRUS_MODES;
|
||||
|
||||
typedef struct {
|
||||
UINT32 Width;
|
||||
UINT32 Height;
|
||||
UINT32 ColorDepth;
|
||||
} QEMU_VIDEO_BOCHS_MODES;
|
||||
|
||||
#define QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS(a) \
|
||||
CR(a, QEMU_VIDEO_PRIVATE_DATA, GraphicsOutput, QEMU_VIDEO_PRIVATE_DATA_SIGNATURE)
|
||||
|
||||
@@ -142,6 +149,7 @@ extern UINT16 Seq_800_600_256_60[];
|
||||
extern UINT8 Crtc_1024_768_256_60[];
|
||||
extern UINT16 Seq_1024_768_256_60[];
|
||||
extern QEMU_VIDEO_CIRRUS_MODES QemuVideoCirrusModes[];
|
||||
extern QEMU_VIDEO_BOCHS_MODES QemuVideoBochsModes[];
|
||||
extern EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding;
|
||||
extern EFI_COMPONENT_NAME_PROTOCOL gQemuVideoComponentName;
|
||||
extern EFI_COMPONENT_NAME2_PROTOCOL gQemuVideoComponentName2;
|
||||
@@ -163,6 +171,34 @@ extern EFI_DRIVER_SUPPORTED_EFI_VERSION_PROTOCOL gQemuVideoDriverSupportedEfiVe
|
||||
#define PALETTE_INDEX_REGISTER 0x3c8
|
||||
#define PALETTE_DATA_REGISTER 0x3c9
|
||||
|
||||
#define VBE_DISPI_IOPORT_INDEX 0x01CE
|
||||
#define VBE_DISPI_IOPORT_DATA 0x01D0
|
||||
|
||||
#define VBE_DISPI_INDEX_ID 0x0
|
||||
#define VBE_DISPI_INDEX_XRES 0x1
|
||||
#define VBE_DISPI_INDEX_YRES 0x2
|
||||
#define VBE_DISPI_INDEX_BPP 0x3
|
||||
#define VBE_DISPI_INDEX_ENABLE 0x4
|
||||
#define VBE_DISPI_INDEX_BANK 0x5
|
||||
#define VBE_DISPI_INDEX_VIRT_WIDTH 0x6
|
||||
#define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7
|
||||
#define VBE_DISPI_INDEX_X_OFFSET 0x8
|
||||
#define VBE_DISPI_INDEX_Y_OFFSET 0x9
|
||||
#define VBE_DISPI_INDEX_VIDEO_MEMORY_64K 0xa
|
||||
|
||||
#define VBE_DISPI_ID0 0xB0C0
|
||||
#define VBE_DISPI_ID1 0xB0C1
|
||||
#define VBE_DISPI_ID2 0xB0C2
|
||||
#define VBE_DISPI_ID3 0xB0C3
|
||||
#define VBE_DISPI_ID4 0xB0C4
|
||||
#define VBE_DISPI_ID5 0xB0C5
|
||||
|
||||
#define VBE_DISPI_DISABLED 0x00
|
||||
#define VBE_DISPI_ENABLED 0x01
|
||||
#define VBE_DISPI_GETCAPS 0x02
|
||||
#define VBE_DISPI_8BIT_DAC 0x20
|
||||
#define VBE_DISPI_LFB_ENABLED 0x40
|
||||
#define VBE_DISPI_NOCLEARMEM 0x80
|
||||
|
||||
//
|
||||
// Graphics Output Hardware abstraction internal worker functions
|
||||
@@ -376,6 +412,12 @@ InitializeCirrusGraphicsMode (
|
||||
QEMU_VIDEO_CIRRUS_MODES *ModeData
|
||||
);
|
||||
|
||||
VOID
|
||||
InitializeBochsGraphicsMode (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
QEMU_VIDEO_BOCHS_MODES *ModeData
|
||||
);
|
||||
|
||||
VOID
|
||||
SetPaletteColor (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
@@ -423,9 +465,27 @@ inw (
|
||||
UINTN Address
|
||||
);
|
||||
|
||||
VOID
|
||||
BochsWrite (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
UINT16 Reg,
|
||||
UINT16 Data
|
||||
);
|
||||
|
||||
UINT16
|
||||
BochsRead (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private,
|
||||
UINT16 Reg
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
QemuVideoCirrusModeSetup (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
QemuVideoBochsModeSetup (
|
||||
QEMU_VIDEO_PRIVATE_DATA *Private
|
||||
);
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user