// 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
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
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
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
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
#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
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
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