]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterGraphics.c
MdeModulePkg: Clean up source files
[mirror_edk2.git] / MdeModulePkg / Universal / Console / ConSplitterDxe / ConSplitterGraphics.c
index 452f7a9c5982d3590331c6ff08c45876eff8e2ad..b40b5cb2bb00ac84ce6ff6be877e14366d519ab0 100644 (file)
@@ -1,8 +1,8 @@
 /** @file\r
   Support for Graphics output spliter.\r
-  \r
-Copyright (c) 2006 - 2009, Intel Corporation. <BR>\r
-All rights reserved. This program and the accompanying materials\r
+\r
+Copyright (c) 2006 - 2018, 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
@@ -30,14 +30,13 @@ CHAR16 mCrLfString[3] = { CHAR_CARRIAGE_RETURN, CHAR_LINEFEED, CHAR_NULL };
   @retval EFI_SUCCESS           Mode information returned.\r
   @retval EFI_BUFFER_TOO_SMALL  The Info buffer was too small.\r
   @retval EFI_DEVICE_ERROR      A hardware error occurred trying to retrieve the video mode.\r
-  @retval EFI_NOT_STARTED       Video display is not initialized. Call SetMode ()\r
   @retval EFI_INVALID_PARAMETER One of the input args was NULL.\r
   @retval EFI_OUT_OF_RESOURCES  No resource available.\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
-ConSpliterGraphicsOutputQueryMode (\r
+ConSplitterGraphicsOutputQueryMode (\r
   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL          *This,\r
   IN  UINT32                                ModeNumber,\r
   OUT UINTN                                 *SizeOfInfo,\r
@@ -45,6 +44,9 @@ ConSpliterGraphicsOutputQueryMode (
   )\r
 {\r
   TEXT_OUT_SPLITTER_PRIVATE_DATA  *Private;\r
+  EFI_GRAPHICS_OUTPUT_PROTOCOL    *GraphicsOutput;\r
+  EFI_STATUS                      Status;\r
+  UINTN                           Index;\r
 \r
   if (This == NULL || Info == NULL || SizeOfInfo == NULL || ModeNumber >= This->Mode->MaxMode) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -55,18 +57,38 @@ ConSpliterGraphicsOutputQueryMode (
   //\r
   Private = GRAPHICS_OUTPUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);\r
 \r
-  if (Private->HardwareNeedsStarting) {\r
-    return EFI_NOT_STARTED;\r
-  }\r
+  GraphicsOutput = NULL;\r
 \r
-  *Info = AllocatePool (sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION));\r
-  if (*Info == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
+  if (Private->CurrentNumberOfGraphicsOutput == 1) {\r
+    //\r
+    // Find the only one GraphicsOutput.\r
+    //\r
+    for (Index = 0; Index < Private->CurrentNumberOfConsoles; Index++) {\r
+      GraphicsOutput = Private->TextOutList[Index].GraphicsOutput;\r
+      if (GraphicsOutput != NULL) {\r
+        break;\r
+      }\r
+    }\r
   }\r
 \r
-  *SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);\r
-\r
-  CopyMem (*Info, &Private->GraphicsOutputModeBuffer[ModeNumber], *SizeOfInfo);\r
+  if (GraphicsOutput != NULL) {\r
+    //\r
+    // If only one physical GOP device exist, return its information.\r
+    //\r
+    Status = GraphicsOutput->QueryMode (GraphicsOutput, (UINT32) ModeNumber, SizeOfInfo, Info);\r
+    return Status;\r
+  } else {\r
+    //\r
+    // If 2 more phyiscal GOP device exist or GOP protocol does not exist,\r
+    // return GOP information (PixelFormat is PixelBltOnly) created in ConSplitterAddGraphicsOutputMode ().\r
+    //\r
+    *Info = AllocatePool (sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION));\r
+    if (*Info == NULL) {\r
+      return EFI_OUT_OF_RESOURCES;\r
+    }\r
+    *SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);\r
+    CopyMem (*Info, &Private->GraphicsOutputModeBuffer[ModeNumber], *SizeOfInfo);\r
+  }\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -87,7 +109,7 @@ ConSpliterGraphicsOutputQueryMode (
 **/\r
 EFI_STATUS\r
 EFIAPI\r
-ConSpliterGraphicsOutputSetMode (\r
+ConSplitterGraphicsOutputSetMode (\r
   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL * This,\r
   IN  UINT32                       ModeNumber\r
   )\r
@@ -98,6 +120,7 @@ ConSpliterGraphicsOutputSetMode (
   EFI_STATUS                             ReturnStatus;\r
   EFI_GRAPHICS_OUTPUT_MODE_INFORMATION   *Mode;\r
   EFI_GRAPHICS_OUTPUT_PROTOCOL           *GraphicsOutput;\r
+  EFI_GRAPHICS_OUTPUT_PROTOCOL           *PhysicalGraphicsOutput;\r
   UINTN                                  NumberIndex;\r
   UINTN                                  SizeOfInfo;\r
   EFI_GRAPHICS_OUTPUT_MODE_INFORMATION   *Info;\r
@@ -107,20 +130,19 @@ ConSpliterGraphicsOutputSetMode (
     return EFI_UNSUPPORTED;\r
   }\r
 \r
-  if (ModeNumber == This->Mode->Mode) {\r
-    return EFI_SUCCESS;\r
-  }\r
-\r
   Private = GRAPHICS_OUTPUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);\r
   Mode = &Private->GraphicsOutputModeBuffer[ModeNumber];\r
 \r
   ReturnStatus = EFI_SUCCESS;\r
+  GraphicsOutput = NULL;\r
+  PhysicalGraphicsOutput = NULL;\r
   //\r
   // return the worst status met\r
   //\r
   for (Index = 0; Index < Private->CurrentNumberOfConsoles; Index++) {\r
     GraphicsOutput = Private->TextOutList[Index].GraphicsOutput;\r
     if (GraphicsOutput != NULL) {\r
+      PhysicalGraphicsOutput = GraphicsOutput;\r
       //\r
       // Find corresponding ModeNumber of this GraphicsOutput instance\r
       //\r
@@ -159,16 +181,21 @@ ConSpliterGraphicsOutputSetMode (
 \r
   This->Mode->Mode = ModeNumber;\r
 \r
-  CopyMem (This->Mode->Info, &Private->GraphicsOutputModeBuffer[ModeNumber], This->Mode->SizeOfInfo);\r
-\r
-  //\r
-  // Information is not enough here, so the following items remain unchanged:\r
-  //  GraphicsOutputMode->Info->Version, GraphicsOutputMode->Info->PixelFormat\r
-  //  GraphicsOutputMode->SizeOfInfo, GraphicsOutputMode->FrameBufferBase, GraphicsOutputMode->FrameBufferSize\r
-  // These items will be initialized/updated when a new GOP device is added into ConsoleSplitter.\r
-  //\r
-\r
-  Private->HardwareNeedsStarting = FALSE;\r
+  if ((Private->CurrentNumberOfGraphicsOutput == 1) && (PhysicalGraphicsOutput != NULL)) {\r
+    //\r
+    // If only one physical GOP device exist, copy physical information to consplitter.\r
+    //\r
+    CopyMem (This->Mode->Info, PhysicalGraphicsOutput->Mode->Info, PhysicalGraphicsOutput->Mode->SizeOfInfo);\r
+    This->Mode->SizeOfInfo = PhysicalGraphicsOutput->Mode->SizeOfInfo;\r
+    This->Mode->FrameBufferBase = PhysicalGraphicsOutput->Mode->FrameBufferBase;\r
+    This->Mode->FrameBufferSize = PhysicalGraphicsOutput->Mode->FrameBufferSize;\r
+  } else {\r
+    //\r
+    // If 2 more phyiscal GOP device exist or GOP protocol does not exist,\r
+    // return GOP information (PixelFormat is PixelBltOnly) created in ConSplitterAddGraphicsOutputMode ().\r
+    //\r
+    CopyMem (This->Mode->Info, &Private->GraphicsOutputModeBuffer[ModeNumber], This->Mode->SizeOfInfo);\r
+  }\r
 \r
   return ReturnStatus;\r
 }\r
@@ -223,7 +250,7 @@ ConSpliterGraphicsOutputSetMode (
 **/\r
 EFI_STATUS\r
 EFIAPI\r
-ConSpliterGraphicsOutputBlt (\r
+ConSplitterGraphicsOutputBlt (\r
   IN  EFI_GRAPHICS_OUTPUT_PROTOCOL                  *This,\r
   IN  EFI_GRAPHICS_OUTPUT_BLT_PIXEL                 *BltBuffer, OPTIONAL\r
   IN  EFI_GRAPHICS_OUTPUT_BLT_OPERATION             BltOperation,\r
@@ -243,6 +270,10 @@ ConSpliterGraphicsOutputBlt (
   EFI_GRAPHICS_OUTPUT_PROTOCOL    *GraphicsOutput;\r
   EFI_UGA_DRAW_PROTOCOL           *UgaDraw;\r
 \r
+  if (This == NULL || ((UINTN) BltOperation) >= EfiGraphicsOutputBltOperationMax) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
   Private = GRAPHICS_OUTPUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);\r
 \r
   ReturnStatus = EFI_SUCCESS;\r
@@ -319,7 +350,7 @@ ConSpliterGraphicsOutputBlt (
 **/\r
 EFI_STATUS\r
 EFIAPI\r
-ConSpliterUgaDrawGetMode (\r
+ConSplitterUgaDrawGetMode (\r
   IN  EFI_UGA_DRAW_PROTOCOL           *This,\r
   OUT UINT32                          *HorizontalResolution,\r
   OUT UINT32                          *VerticalResolution,\r
@@ -365,7 +396,7 @@ ConSpliterUgaDrawGetMode (
 **/\r
 EFI_STATUS\r
 EFIAPI\r
-ConSpliterUgaDrawSetMode (\r
+ConSplitterUgaDrawSetMode (\r
   IN  EFI_UGA_DRAW_PROTOCOL           *This,\r
   IN UINT32                           HorizontalResolution,\r
   IN UINT32                           VerticalResolution,\r
@@ -493,7 +524,7 @@ ConSpliterUgaDrawSetMode (
 **/\r
 EFI_STATUS\r
 EFIAPI\r
-ConSpliterUgaDrawBlt (\r
+ConSplitterUgaDrawBlt (\r
   IN  EFI_UGA_DRAW_PROTOCOL                         *This,\r
   IN  EFI_UGA_PIXEL                                 *BltBuffer, OPTIONAL\r
   IN  EFI_UGA_BLT_OPERATION                         BltOperation,\r
@@ -535,7 +566,7 @@ ConSpliterUgaDrawBlt (
                               );\r
       if (EFI_ERROR (Status)) {\r
         ReturnStatus = Status;\r
-      } else if (BltOperation == EfiBltVideoToBltBuffer) {\r
+      } else if (BltOperation == EfiUgaVideoToBltBuffer) {\r
         //\r
         // Only need to read the data into buffer one time\r
         //\r