X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=OvmfPkg%2FQemuVideoDxe%2FQemu.h;h=7fbb25b3efd35c47bb88ac31bda9d92653f7f145;hp=d3d5f6fb82c12ce83e49be0c087afd244d872371;hb=947f3737abf65fda63f3ffd97fddfa6986986868;hpb=eaf4f336ea42dc32e1a5b31d6b7822c125a15d34 diff --git a/OvmfPkg/QemuVideoDxe/Qemu.h b/OvmfPkg/QemuVideoDxe/Qemu.h index d3d5f6fb82..7fbb25b3ef 100644 --- a/OvmfPkg/QemuVideoDxe/Qemu.h +++ b/OvmfPkg/QemuVideoDxe/Qemu.h @@ -1,8 +1,8 @@ /** @file QEMU Video Controller Driver - Copyright (c) 2006 - 2010, Intel Corporation - All rights reserved. This program and the accompanying materials + Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.
+ This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php @@ -35,8 +35,10 @@ #include #include #include +#include #include +#include // // QEMU Video PCI Configuration Header values @@ -50,11 +52,10 @@ // QEMU Vide Graphical Mode Data // typedef struct { - UINT32 ModeNumber; + UINT32 InternalModeIndex; // points into card-specific mode table UINT32 HorizontalResolution; UINT32 VerticalResolution; UINT32 ColorDepth; - UINT32 RefreshRate; } QEMU_VIDEO_MODE_DATA; #define PIXEL_RED_SHIFT 0 @@ -86,6 +87,21 @@ typedef struct { // #define QEMU_VIDEO_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('Q', 'V', 'I', 'D') +typedef enum { + QEMU_VIDEO_CIRRUS_5430 = 1, + QEMU_VIDEO_CIRRUS_5446, + QEMU_VIDEO_BOCHS, + QEMU_VIDEO_BOCHS_MMIO, + QEMU_VIDEO_VMWARE_SVGA, +} QEMU_VIDEO_VARIANT; + +typedef struct { + UINT16 VendorId; + UINT16 DeviceId; + QEMU_VIDEO_VARIANT Variant; + CHAR16 *Name; +} QEMU_VIDEO_CARD; + typedef struct { UINT64 Signature; EFI_HANDLE Handle; @@ -93,25 +109,39 @@ typedef struct { UINT64 OriginalPciAttributes; EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput; EFI_DEVICE_PATH_PROTOCOL *GopDevicePath; - UINTN CurrentMode; + + // + // The next two fields match the client-visible + // EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE.MaxMode field. + // UINTN MaxMode; QEMU_VIDEO_MODE_DATA *ModeData; - UINT8 *LineBuffer; - BOOLEAN HardwareNeedsStarting; + EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *VmwareSvgaModeInfo; + + QEMU_VIDEO_VARIANT Variant; + FRAME_BUFFER_CONFIGURE *FrameBufferBltConfigure; + UINTN FrameBufferBltConfigureSize; + UINT8 FrameBufferVramBarIndex; + UINT16 VmwareSvgaBasePort; } QEMU_VIDEO_PRIVATE_DATA; /// -/// Video Mode structure +/// Card-specific Video Mode structures /// typedef struct { UINT32 Width; UINT32 Height; UINT32 ColorDepth; - UINT32 RefreshRate; UINT8 *CrtcSettings; UINT16 *SeqSettings; UINT8 MiscSetting; -} QEMU_VIDEO_VIDEO_MODES; +} 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) @@ -128,7 +158,8 @@ extern UINT8 Crtc_800_600_256_60[]; extern UINT16 Seq_800_600_256_60[]; extern UINT8 Crtc_1024_768_256_60[]; extern UINT16 Seq_1024_768_256_60[]; -extern QEMU_VIDEO_VIDEO_MODES QemuVideoVideoModes[]; +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; @@ -150,6 +181,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 @@ -358,9 +417,15 @@ QemuVideoComponentNameGetControllerName ( // Local Function Prototypes // VOID -InitializeGraphicsMode ( +InitializeCirrusGraphicsMode ( QEMU_VIDEO_PRIVATE_DATA *Private, - QEMU_VIDEO_VIDEO_MODES *ModeData + QEMU_VIDEO_CIRRUS_MODES *ModeData + ); + +VOID +InitializeBochsGraphicsMode ( + QEMU_VIDEO_PRIVATE_DATA *Private, + QEMU_VIDEO_BOCHS_MODES *ModeData ); VOID @@ -410,9 +475,65 @@ inw ( UINTN Address ); +VOID +BochsWrite ( + QEMU_VIDEO_PRIVATE_DATA *Private, + UINT16 Reg, + UINT16 Data + ); + +UINT16 +BochsRead ( + QEMU_VIDEO_PRIVATE_DATA *Private, + UINT16 Reg + ); + +VOID +VgaOutb ( + QEMU_VIDEO_PRIVATE_DATA *Private, + UINTN Reg, + UINT8 Data + ); + EFI_STATUS -QemuVideoVideoModeSetup ( +QemuVideoCirrusModeSetup ( QEMU_VIDEO_PRIVATE_DATA *Private ); +EFI_STATUS +QemuVideoBochsModeSetup ( + QEMU_VIDEO_PRIVATE_DATA *Private, + BOOLEAN IsQxl + ); + +EFI_STATUS +QemuVideoVmwareSvgaModeSetup ( + QEMU_VIDEO_PRIVATE_DATA *Private + ); + +VOID +InstallVbeShim ( + IN CONST CHAR16 *CardName, + IN EFI_PHYSICAL_ADDRESS FrameBufferBase + ); + +VOID +VmwareSvgaWrite ( + QEMU_VIDEO_PRIVATE_DATA *Private, + UINT16 Register, + UINT32 Value + ); + +UINT32 +VmwareSvgaRead ( + QEMU_VIDEO_PRIVATE_DATA *Private, + UINT16 Register + ); + +VOID +InitializeVmwareSvgaGraphicsMode ( + QEMU_VIDEO_PRIVATE_DATA *Private, + QEMU_VIDEO_BOCHS_MODES *ModeData + ); + #endif