]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/QemuVideoDxe/Driver.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / OvmfPkg / QemuVideoDxe / Driver.c
index d9f0a2464aa3d4f2025b73c787c89accc70ea94f..c28171d1371991a1f46150773af91b10571cc72f 100644 (file)
@@ -984,21 +984,53 @@ VgaOutb (
   }\r
 }\r
 \r
+STATIC\r
+UINT8\r
+VgaInb (\r
+  QEMU_VIDEO_PRIVATE_DATA  *Private,\r
+  UINTN                    Reg\r
+  )\r
+{\r
+  EFI_STATUS  Status;\r
+  UINT8       Data;\r
+\r
+  if (Private->Variant == QEMU_VIDEO_BOCHS_MMIO) {\r
+    Data   = 0;\r
+    Status = Private->PciIo->Mem.Read (\r
+                                   Private->PciIo,\r
+                                   EfiPciIoWidthUint8,\r
+                                   PCI_BAR_IDX2,\r
+                                   0x400 - 0x3c0 + Reg,\r
+                                   1,\r
+                                   &Data\r
+                                   );\r
+    ASSERT_EFI_ERROR (Status);\r
+  } else {\r
+    Data = inb (Private, Reg);\r
+  }\r
+\r
+  return Data;\r
+}\r
+\r
 VOID\r
 InitializeBochsGraphicsMode (\r
   QEMU_VIDEO_PRIVATE_DATA  *Private,\r
-  QEMU_VIDEO_BOCHS_MODES   *ModeData\r
+  QEMU_VIDEO_MODE_DATA     *ModeData\r
   )\r
 {\r
   DEBUG ((\r
     DEBUG_INFO,\r
     "InitializeBochsGraphicsMode: %dx%d @ %d\n",\r
-    ModeData->Width,\r
-    ModeData->Height,\r
+    ModeData->HorizontalResolution,\r
+    ModeData->VerticalResolution,\r
     ModeData->ColorDepth\r
     ));\r
 \r
-  /* unblank */\r
+  /* set color mode */\r
+  VgaOutb (Private, MISC_OUTPUT_REGISTER, 0x01);\r
+\r
+  /* reset flip flop + unblank */\r
+  VgaInb (Private, INPUT_STATUS_1_REGISTER);\r
   VgaOutb (Private, ATT_ADDRESS_REGISTER, 0x20);\r
 \r
   BochsWrite (Private, VBE_DISPI_INDEX_ENABLE, 0);\r
@@ -1007,10 +1039,10 @@ InitializeBochsGraphicsMode (
   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
+  BochsWrite (Private, VBE_DISPI_INDEX_XRES, (UINT16)ModeData->HorizontalResolution);\r
+  BochsWrite (Private, VBE_DISPI_INDEX_VIRT_WIDTH, (UINT16)ModeData->HorizontalResolution);\r
+  BochsWrite (Private, VBE_DISPI_INDEX_YRES, (UINT16)ModeData->VerticalResolution);\r
+  BochsWrite (Private, VBE_DISPI_INDEX_VIRT_HEIGHT, (UINT16)ModeData->VerticalResolution);\r
 \r
   BochsWrite (\r
     Private,\r