+VOID\r
+BochsWrite (\r
+ QEMU_VIDEO_PRIVATE_DATA *Private,\r
+ UINT16 Reg,\r
+ UINT16 Data\r
+ )\r
+{\r
+ outw (Private, VBE_DISPI_IOPORT_INDEX, Reg);\r
+ outw (Private, VBE_DISPI_IOPORT_DATA, Data);\r
+}\r
+\r
+UINT16\r
+BochsRead (\r
+ QEMU_VIDEO_PRIVATE_DATA *Private,\r
+ UINT16 Reg\r
+ )\r
+{\r
+ UINT16 Data;\r
+\r
+ outw (Private, VBE_DISPI_IOPORT_INDEX, Reg);\r
+ Data = inw (Private, VBE_DISPI_IOPORT_DATA);\r
+ return Data;\r
+}\r
+\r
+VOID\r
+InitializeBochsGraphicsMode (\r
+ QEMU_VIDEO_PRIVATE_DATA *Private,\r
+ QEMU_VIDEO_BOCHS_MODES *ModeData\r
+ )\r
+{\r
+ DEBUG ((EFI_D_INFO, "InitializeBochsGraphicsMode: %dx%d @ %d\n",\r
+ ModeData->Width, ModeData->Height, ModeData->ColorDepth));\r
+\r
+ /* unblank */\r
+ outb (Private, ATT_ADDRESS_REGISTER, 0x20);\r
+\r
+ BochsWrite (Private, VBE_DISPI_INDEX_ENABLE, 0);\r
+ BochsWrite (Private, VBE_DISPI_INDEX_BANK, 0);\r
+ BochsWrite (Private, VBE_DISPI_INDEX_X_OFFSET, 0);\r
+ BochsWrite (Private, VBE_DISPI_INDEX_Y_OFFSET, 0);\r
+\r
+ BochsWrite (Private, VBE_DISPI_INDEX_BPP, (UINT16) ModeData->ColorDepth);\r
+ BochsWrite (Private, VBE_DISPI_INDEX_XRES, (UINT16) ModeData->Width);\r
+ BochsWrite (Private, VBE_DISPI_INDEX_VIRT_WIDTH, (UINT16) ModeData->Width);\r
+ BochsWrite (Private, VBE_DISPI_INDEX_YRES, (UINT16) ModeData->Height);\r
+ BochsWrite (Private, VBE_DISPI_INDEX_VIRT_HEIGHT, (UINT16) ModeData->Height);\r
+\r
+ BochsWrite (Private, VBE_DISPI_INDEX_ENABLE,\r
+ VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED);\r
+\r
+ SetDefaultPalette (Private);\r
+ ClearScreen (Private);\r
+}\r
+\r