]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/QemuVideoDxe/Qemu.h
OvmfPkg: QemuVideoDxe: Int10h stub for Windows 7 & 2008 (stdvga, QXL)
[mirror_edk2.git] / OvmfPkg / QemuVideoDxe / Qemu.h
index f294901fa6a14c6140d05241989f3b29c849aa4b..4bf51c715044ec345a3d13b220f340f1aeb4bf72 100644 (file)
@@ -50,7 +50,7 @@
 // QEMU Vide Graphical Mode Data\r
 //\r
 typedef struct {\r
-  UINT32  ModeNumber;\r
+  UINT32  InternalModeIndex; // points into card-specific mode table\r
   UINT32  HorizontalResolution;\r
   UINT32  VerticalResolution;\r
   UINT32  ColorDepth;\r
@@ -89,6 +89,8 @@ typedef struct {
 typedef enum {\r
   QEMU_VIDEO_CIRRUS_5430 = 1,\r
   QEMU_VIDEO_CIRRUS_5446,\r
+  QEMU_VIDEO_BOCHS,\r
+  QEMU_VIDEO_BOCHS_MMIO,\r
 } QEMU_VIDEO_VARIANT;\r
 \r
 typedef struct {\r
@@ -105,16 +107,22 @@ typedef struct {
   UINT64                                OriginalPciAttributes;\r
   EFI_GRAPHICS_OUTPUT_PROTOCOL          GraphicsOutput;\r
   EFI_DEVICE_PATH_PROTOCOL              *GopDevicePath;\r
+\r
+  //\r
+  // The next three fields match the client-visible\r
+  // EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE.Mode and\r
+  // EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE.MaxMode fields.\r
+  //\r
   UINTN                                 CurrentMode;\r
   UINTN                                 MaxMode;\r
   QEMU_VIDEO_MODE_DATA                  *ModeData;\r
+\r
   UINT8                                 *LineBuffer;\r
-  BOOLEAN                               HardwareNeedsStarting;\r
   QEMU_VIDEO_VARIANT                    Variant;\r
 } QEMU_VIDEO_PRIVATE_DATA;\r
 \r
 ///\r
-/// Video Mode structure\r
+/// Card-specific Video Mode structures\r
 ///\r
 typedef struct {\r
   UINT32  Width;\r
@@ -126,6 +134,12 @@ typedef struct {
   UINT8   MiscSetting;\r
 } QEMU_VIDEO_CIRRUS_MODES;\r
 \r
+typedef struct {\r
+  UINT32  Width;\r
+  UINT32  Height;\r
+  UINT32  ColorDepth;\r
+} QEMU_VIDEO_BOCHS_MODES;\r
+\r
 #define QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS(a) \\r
   CR(a, QEMU_VIDEO_PRIVATE_DATA, GraphicsOutput, QEMU_VIDEO_PRIVATE_DATA_SIGNATURE)\r
 \r
@@ -142,6 +156,7 @@ extern UINT16                                     Seq_800_600_256_60[];
 extern UINT8                                      Crtc_1024_768_256_60[];\r
 extern UINT16                                     Seq_1024_768_256_60[];\r
 extern QEMU_VIDEO_CIRRUS_MODES                    QemuVideoCirrusModes[];\r
+extern QEMU_VIDEO_BOCHS_MODES                     QemuVideoBochsModes[];\r
 extern EFI_DRIVER_BINDING_PROTOCOL                gQemuVideoDriverBinding;\r
 extern EFI_COMPONENT_NAME_PROTOCOL                gQemuVideoComponentName;\r
 extern EFI_COMPONENT_NAME2_PROTOCOL               gQemuVideoComponentName2;\r
@@ -163,6 +178,34 @@ extern EFI_DRIVER_SUPPORTED_EFI_VERSION_PROTOCOL  gQemuVideoDriverSupportedEfiVe
 #define PALETTE_INDEX_REGISTER  0x3c8\r
 #define PALETTE_DATA_REGISTER   0x3c9\r
 \r
+#define VBE_DISPI_IOPORT_INDEX           0x01CE\r
+#define VBE_DISPI_IOPORT_DATA            0x01D0\r
+\r
+#define VBE_DISPI_INDEX_ID               0x0\r
+#define VBE_DISPI_INDEX_XRES             0x1\r
+#define VBE_DISPI_INDEX_YRES             0x2\r
+#define VBE_DISPI_INDEX_BPP              0x3\r
+#define VBE_DISPI_INDEX_ENABLE           0x4\r
+#define VBE_DISPI_INDEX_BANK             0x5\r
+#define VBE_DISPI_INDEX_VIRT_WIDTH       0x6\r
+#define VBE_DISPI_INDEX_VIRT_HEIGHT      0x7\r
+#define VBE_DISPI_INDEX_X_OFFSET         0x8\r
+#define VBE_DISPI_INDEX_Y_OFFSET         0x9\r
+#define VBE_DISPI_INDEX_VIDEO_MEMORY_64K 0xa\r
+\r
+#define VBE_DISPI_ID0                    0xB0C0\r
+#define VBE_DISPI_ID1                    0xB0C1\r
+#define VBE_DISPI_ID2                    0xB0C2\r
+#define VBE_DISPI_ID3                    0xB0C3\r
+#define VBE_DISPI_ID4                    0xB0C4\r
+#define VBE_DISPI_ID5                    0xB0C5\r
+\r
+#define VBE_DISPI_DISABLED               0x00\r
+#define VBE_DISPI_ENABLED                0x01\r
+#define VBE_DISPI_GETCAPS                0x02\r
+#define VBE_DISPI_8BIT_DAC               0x20\r
+#define VBE_DISPI_LFB_ENABLED            0x40\r
+#define VBE_DISPI_NOCLEARMEM             0x80\r
 \r
 //\r
 // Graphics Output Hardware abstraction internal worker functions\r
@@ -376,6 +419,12 @@ InitializeCirrusGraphicsMode (
   QEMU_VIDEO_CIRRUS_MODES  *ModeData\r
   );\r
 \r
+VOID\r
+InitializeBochsGraphicsMode (\r
+  QEMU_VIDEO_PRIVATE_DATA  *Private,\r
+  QEMU_VIDEO_BOCHS_MODES   *ModeData\r
+  );\r
+\r
 VOID\r
 SetPaletteColor (\r
   QEMU_VIDEO_PRIVATE_DATA  *Private,\r
@@ -423,9 +472,39 @@ inw (
   UINTN                           Address\r
   );\r
 \r
+VOID\r
+BochsWrite (\r
+  QEMU_VIDEO_PRIVATE_DATA  *Private,\r
+  UINT16                   Reg,\r
+  UINT16                   Data\r
+  );\r
+\r
+UINT16\r
+BochsRead (\r
+  QEMU_VIDEO_PRIVATE_DATA  *Private,\r
+  UINT16                   Reg\r
+  );\r
+\r
+VOID\r
+VgaOutb (\r
+  QEMU_VIDEO_PRIVATE_DATA  *Private,\r
+  UINTN                    Reg,\r
+  UINT8                    Data\r
+  );\r
+\r
 EFI_STATUS\r
 QemuVideoCirrusModeSetup (\r
   QEMU_VIDEO_PRIVATE_DATA  *Private\r
   );\r
 \r
+EFI_STATUS\r
+QemuVideoBochsModeSetup (\r
+  QEMU_VIDEO_PRIVATE_DATA  *Private\r
+  );\r
+\r
+VOID\r
+InstallVbeShim (\r
+  IN CONST CHAR16         *CardName,\r
+  IN EFI_PHYSICAL_ADDRESS FrameBufferBase\r
+  );\r
 #endif\r