]> git.proxmox.com Git - mirror_edk2.git/blobdiff - DuetPkg/BiosVideoThunkDxe/BiosVideo.c
CorebootPayloadPkg: Use extra braces to prevent gcc compile fail
[mirror_edk2.git] / DuetPkg / BiosVideoThunkDxe / BiosVideo.c
index 567f4d00bccafe31c5da6e479d64b70a8cfbda05..da2c877d3553d10e4c33c3f78f86d404bfee264e 100644 (file)
@@ -2,8 +2,8 @@
 \r
   BiosVideo driver produce EFI_GRAPHIC_OUTPUT_PROTOCOL via LegacyBios Video rom.\r
 \r
-Copyright (c) 2006 - 2008, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
+Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials                          \r
 are licensed and made available under the terms and conditions of the BSD License         \r
 which accompanies this distribution.  The full text of the license may be found at        \r
 http://opensource.org/licenses/bsd-license.php                                            \r
@@ -493,9 +493,7 @@ BiosVideoChildHandleInstall (
     // for the standard 640x480 16 color VGA mode\r
     //\r
     if (BiosVideoPrivate->VgaCompatible) {\r
-      DEBUG ((EFI_D_INFO, "Before BiosVideoCheckForVga()\n"));\r
       Status = BiosVideoCheckForVga (BiosVideoPrivate);\r
-      DEBUG ((EFI_D_INFO, "Status BiosVideoCheckForVga(): %r\n", Status));\r
     }\r
 \r
     if (EFI_ERROR (Status)) {\r
@@ -601,7 +599,7 @@ BiosVideoChildHandleUninstall (
   )\r
 {\r
   EFI_STATUS                   Status;\r
-  EFI_IA32_REGISTER_SET        Regs;\r
+  IA32_REGISTER_SET        Regs;\r
   EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;\r
   EFI_VGA_MINI_PORT_PROTOCOL   *VgaMiniPort;\r
   BIOS_VIDEO_DEV               *BiosVideoPrivate;\r
@@ -1033,7 +1031,7 @@ BiosVideoCheckForVbe (
   )\r
 {\r
   EFI_STATUS                             Status;\r
-  EFI_IA32_REGISTER_SET                  Regs;\r
+  IA32_REGISTER_SET                  Regs;\r
   UINT16                                 *ModeNumberPtr;\r
   BOOLEAN                                ModeFound;\r
   BOOLEAN                                EdidFound;\r
@@ -1045,7 +1043,6 @@ BiosVideoCheckForVbe (
   VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING ValidEdidTiming;\r
   EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE      *GraphicsOutputMode;\r
 \r
-  DEBUG ((EFI_D_INFO, "Enter BiosVideoCheckForVbe()\n"));\r
   //\r
   // Allocate buffer under 1MB for VBE data structures\r
   //\r
@@ -1091,18 +1088,29 @@ BiosVideoCheckForVbe (
   //\r
   // Test to see if the Video Adapter is compliant with VBE 3.0\r
   //\r
+  // INT 10 - VESA SuperVGA BIOS (VBE) - GET SuperVGA INFORMATION\r
+  //\r
+  //  AX = 4F00h\r
+  //  ES:DI -> buffer for SuperVGA information (see #00077)\r
+  // Return: AL = 4Fh if function supported\r
+  //  AH = status\r
+  //      00h successful\r
+  //    ES:DI buffer filled\r
+  //      01h failed\r
+  //      ---VBE v2.0---\r
+  //      02h function not supported by current hardware configuration\r
+  //      03h function invalid in current video mode\r
+  // Desc:  determine whether VESA BIOS extensions are present and the capabilities\r
+  //    supported by the display adapter\r
+  //\r
   gBS->SetMem (&Regs, sizeof (Regs), 0);\r
   Regs.X.AX = VESA_BIOS_EXTENSIONS_RETURN_CONTROLLER_INFORMATION;\r
   gBS->SetMem (BiosVideoPrivate->VbeInformationBlock, sizeof (VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK), 0);\r
   BiosVideoPrivate->VbeInformationBlock->VESASignature  = VESA_BIOS_EXTENSIONS_VBE2_SIGNATURE;\r
-  Regs.X.ES = EFI_SEGMENT ((UINTN) BiosVideoPrivate->VbeInformationBlock);\r
+  Regs.E.ES = EFI_SEGMENT ((UINTN) BiosVideoPrivate->VbeInformationBlock);\r
   Regs.X.DI = EFI_OFFSET ((UINTN) BiosVideoPrivate->VbeInformationBlock);\r
 \r
-  DEBUG ((EFI_D_INFO, "Before VESA!\n"));\r
   LegacyBiosInt86 (BiosVideoPrivate, 0x10, &Regs);\r
-  DEBUG ((EFI_D_INFO, "Call VESA! Return Status=0x%X\n", Regs.X.AX));\r
-  DEBUG ((EFI_D_INFO, "Call VESA! VESA Signature =0x%X\n", BiosVideoPrivate->VbeInformationBlock->VESASignature));\r
-  DEBUG ((EFI_D_INFO, "Call VESA! VESA Version =0x%X\n", BiosVideoPrivate->VbeInformationBlock->VESAVersion));\r
     \r
   Status = EFI_DEVICE_ERROR;\r
 \r
@@ -1110,33 +1118,43 @@ BiosVideoCheckForVbe (
   // See if the VESA call succeeded\r
   //\r
   if (Regs.X.AX != VESA_BIOS_EXTENSIONS_STATUS_SUCCESS) {\r
-    DEBUG ((EFI_D_INFO, "Fail to call VESA! Status=0x%X\n", Regs.X.AX));\r
     return Status;\r
   }\r
   //\r
   // Check for 'VESA' signature\r
   //\r
   if (BiosVideoPrivate->VbeInformationBlock->VESASignature != VESA_BIOS_EXTENSIONS_VESA_SIGNATURE) {\r
-    DEBUG ((EFI_D_INFO, "Fail to check VESA signature!\n"));\r
     return Status;\r
   }\r
   //\r
   // Check to see if this is VBE 2.0 or higher\r
   //\r
   if (BiosVideoPrivate->VbeInformationBlock->VESAVersion < VESA_BIOS_EXTENSIONS_VERSION_2_0) {\r
-    DEBUG ((EFI_D_INFO, "VBE version is little than 2.0!\n"));\r
     return Status;\r
   }\r
 \r
   //\r
   // Read EDID information\r
   //\r
+  // INT 10 - VESA VBE/DC (Display Data Channel) - READ EDID\r
+  //\r
+  //    AX = 4F15h\r
+  //    BL = 01h\r
+  //    CX = 0000h\r
+  //    DX = 0000h\r
+  //    ES:DI -> 128-byte buffer for EDID record (see #00127)\r
+  // Return: AL = 4Fh if function supported\r
+  //    AH = status\r
+  //        00h successful\r
+  //    ES:DI buffer filled\r
+  //    01h failed (e.g. non-DDC monitor)\r
+  //\r
   gBS->SetMem (&Regs, sizeof (Regs), 0);\r
   Regs.X.AX = VESA_BIOS_EXTENSIONS_EDID;\r
   Regs.X.BX = 1;\r
   Regs.X.CX = 0;\r
   Regs.X.DX = 0;\r
-  Regs.X.ES = EFI_SEGMENT ((UINTN) BiosVideoPrivate->VbeEdidDataBlock);\r
+  Regs.E.ES = EFI_SEGMENT ((UINTN) BiosVideoPrivate->VbeEdidDataBlock);\r
   Regs.X.DI = EFI_OFFSET ((UINTN) BiosVideoPrivate->VbeEdidDataBlock);\r
 \r
   LegacyBiosInt86 (BiosVideoPrivate, 0x10, &Regs);\r
@@ -1212,11 +1230,23 @@ BiosVideoCheckForVbe (
     //\r
     // Get the information about the mode\r
     //\r
+    // INT 10 - VESA SuperVGA BIOS - GET SuperVGA MODE INFORMATION\r
+    //\r
+    //   AX = 4F01h\r
+    //   CX = SuperVGA video mode (see #04082 for bitfields)\r
+    //   ES:DI -> 256-byte buffer for mode information (see #00079)\r
+    // Return: AL = 4Fh if function supported\r
+    //   AH = status\r
+    //      00h successful\r
+    //    ES:DI buffer filled\r
+    //      01h failed\r
+    // Desc:  determine the attributes of the specified video mode\r
+    //\r
     gBS->SetMem (&Regs, sizeof (Regs), 0);\r
     Regs.X.AX = VESA_BIOS_EXTENSIONS_RETURN_MODE_INFORMATION;\r
     Regs.X.CX = *ModeNumberPtr;\r
     gBS->SetMem (BiosVideoPrivate->VbeModeInformationBlock, sizeof (VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK), 0);\r
-    Regs.X.ES = EFI_SEGMENT ((UINTN) BiosVideoPrivate->VbeModeInformationBlock);\r
+    Regs.E.ES = EFI_SEGMENT ((UINTN) BiosVideoPrivate->VbeModeInformationBlock);\r
     Regs.X.DI = EFI_OFFSET ((UINTN) BiosVideoPrivate->VbeModeInformationBlock);\r
 \r
     LegacyBiosInt86 (BiosVideoPrivate, 0x10, &Regs);\r
@@ -1526,9 +1556,7 @@ BiosVideoCheckForVga (
   // Test to see if the Video Adapter support the 640x480 16 color mode\r
   //\r
   BiosVideoPrivate->GraphicsOutput.Mode->Mode = GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER;\r
-  DEBUG ((EFI_D_INFO, "BiosVideoCheckForVga: before BiosVideoGraphicsOutputSetMode"));\r
   Status = BiosVideoGraphicsOutputSetMode (&BiosVideoPrivate->GraphicsOutput, 0);\r
-  DEBUG ((EFI_D_INFO, "BiosVideoCheckForVga: after BiosVideoGraphicsOutputSetMode, %r", Status));\r
 \r
 Done:\r
   //\r
@@ -1634,7 +1662,7 @@ BiosVideoGraphicsOutputSetMode (
 {\r
   EFI_STATUS              Status;\r
   BIOS_VIDEO_DEV          *BiosVideoPrivate;\r
-  EFI_IA32_REGISTER_SET   Regs;\r
+  IA32_REGISTER_SET   Regs;\r
   BIOS_VIDEO_MODE_DATA    *ModeData;\r
 \r
   BiosVideoPrivate = BIOS_VIDEO_DEV_FROM_GRAPHICS_OUTPUT_THIS (This);\r
@@ -1647,10 +1675,6 @@ BiosVideoGraphicsOutputSetMode (
     return EFI_UNSUPPORTED;\r
   }\r
 \r
-  if (ModeNumber == This->Mode->Mode) {\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
   ModeData = &BiosVideoPrivate->ModeData[ModeNumber];\r
 \r
   if (BiosVideoPrivate->LineBuffer) {\r
@@ -1695,10 +1719,7 @@ BiosVideoGraphicsOutputSetMode (
     //\r
     // Set VGA Mode\r
     //\r
-    //Regs.X.AX = ModeData->VbeModeNumber;\r
-    Regs.H.AH = 0x0;\r
-    Regs.H.AL = 0x1;\r
-    DEBUG ((EFI_D_INFO, "Set VGA Mode, VbeModeNumber AX=0x%X!\n", Regs.X.AX));\r
+    Regs.X.AX = ModeData->VbeModeNumber;\r
     LegacyBiosInt86 (BiosVideoPrivate, 0x10, &Regs);\r
 \r
   } else {\r
@@ -1720,10 +1741,9 @@ BiosVideoGraphicsOutputSetMode (
     Regs.X.AX = VESA_BIOS_EXTENSIONS_SET_MODE;\r
     Regs.X.BX = (UINT16) (ModeData->VbeModeNumber | VESA_BIOS_EXTENSIONS_MODE_NUMBER_LINEAR_FRAME_BUFFER);\r
     gBS->SetMem (BiosVideoPrivate->VbeCrtcInformationBlock, sizeof (VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK), 0);\r
-    Regs.X.ES = EFI_SEGMENT ((UINTN) BiosVideoPrivate->VbeCrtcInformationBlock);\r
+    Regs.E.ES = EFI_SEGMENT ((UINTN) BiosVideoPrivate->VbeCrtcInformationBlock);\r
     Regs.X.DI = EFI_OFFSET ((UINTN) BiosVideoPrivate->VbeCrtcInformationBlock);\r
     \r
-    DEBUG ((EFI_D_INFO, "Set VBE Mode!\n"));\r
     LegacyBiosInt86 (BiosVideoPrivate, 0x10, &Regs);\r
     \r
     //\r
@@ -2745,7 +2765,7 @@ BiosVideoVgaMiniPortSetMode (
   )\r
 {\r
   BIOS_VIDEO_DEV        *BiosVideoPrivate;\r
-  EFI_IA32_REGISTER_SET Regs;\r
+  IA32_REGISTER_SET Regs;\r
 \r
   if (This == NULL) {\r
     return EFI_INVALID_PARAMETER;\r