]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitter.c
add PCD PcdUgaConsumeSupport to switch on/off EFI UGA Draw Protocol's consuming,...
[mirror_edk2.git] / MdeModulePkg / Universal / Console / ConSplitterDxe / ConSplitter.c
index 5053251e333cdb5a13d24d50731ef94835db22ad..00c809b6aae4d1cc9afef026ec8bd8f2328469be 100644 (file)
@@ -686,7 +686,7 @@ ConSplitterTextOutConstructor (
   //\r
   // When new console device is added, the new mode will be set later,\r
   // so put current mode back to init state.\r
-  //  \r
+  //\r
   ConOutPrivate->TextOutMode.Mode = 0xFF;\r
 \r
   Status = ConSplitterGrowBuffer (\r
@@ -1236,6 +1236,9 @@ Returns:
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
+\r
+  GraphicsOutput = NULL;\r
+  UgaDraw        = NULL;\r
   //\r
   // Try to Open Graphics Output protocol\r
   //\r
@@ -1247,22 +1250,19 @@ Returns:
                   mConOut.VirtualHandle,\r
                   EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
                   );\r
-  if (EFI_ERROR (Status)) {\r
-    GraphicsOutput = NULL;\r
-  }\r
-  //\r
-  // Open UGA_DRAW protocol\r
-  //\r
-  Status = gBS->OpenProtocol (\r
-                  ControllerHandle,\r
-                  &gEfiUgaDrawProtocolGuid,\r
-                  (VOID **) &UgaDraw,\r
-                  This->DriverBindingHandle,\r
-                  mConOut.VirtualHandle,\r
-                  EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    UgaDraw = NULL;\r
+\r
+  if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) {\r
+    //\r
+    // Open UGA_DRAW protocol\r
+    //\r
+    Status = gBS->OpenProtocol (\r
+                    ControllerHandle,\r
+                    &gEfiUgaDrawProtocolGuid,\r
+                    (VOID **) &UgaDraw,\r
+                    This->DriverBindingHandle,\r
+                    mConOut.VirtualHandle,\r
+                    EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
+                    );\r
   }\r
 \r
   //\r
@@ -1270,7 +1270,7 @@ Returns:
   // so put current mode back to init state.\r
   //\r
   mConOut.TextOutMode.Mode = 0xFF;\r
-  \r
+\r
   //\r
   // If both ConOut and StdErr incorporate the same Text Out device,\r
   // their MaxMode and QueryData should be the intersection of both.\r
@@ -1278,7 +1278,7 @@ Returns:
   Status = ConSplitterTextOutAddDevice (&mConOut, TextOut, GraphicsOutput, UgaDraw);\r
   ConSplitterTextOutSetAttribute (&mConOut.TextOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK));\r
 \r
-  if (FeaturePcdGet (PcdConOutUgaSupport)) {\r
+  if (FeaturePcdGet (PcdConOutUgaSupport) && FeaturePcdGet (PcdUgaConsumeSupport)) {\r
     //\r
     // Match the UGA mode data of ConOut with the current mode\r
     //\r
@@ -1332,13 +1332,13 @@ Returns:
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
-  \r
+\r
   //\r
   // When new console device is added, the new mode will be set later,\r
   // so put current mode back to init state.\r
   //\r
   mStdErr.TextOutMode.Mode = 0xFF;\r
-  \r
+\r
   //\r
   // If both ConOut and StdErr incorporate the same Text Out device,\r
   // their MaxMode and QueryData should be the intersection of both.\r
@@ -2711,7 +2711,7 @@ Returns:
       }\r
     }\r
   }\r
-  if (UgaDraw != NULL) {\r
+  if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {\r
     //\r
     // Graphics console driver can ensure the same mode for all GOP devices\r
     // so we can get the current mode from this video device\r
@@ -2751,7 +2751,7 @@ Done:
   if (GraphicsOutput != NULL) {\r
     Private->CurrentNumberOfGraphicsOutput++;\r
   }\r
-  if (UgaDraw != NULL) {\r
+  if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {\r
     Private->CurrentNumberOfUgaDraw++;\r
   }\r
 \r
@@ -2801,7 +2801,7 @@ Returns:
 \r
   None\r
 \r
---*/  \r
+--*/\r
 {\r
   UINTN                         Col;\r
   UINTN                         Row;\r
@@ -2813,7 +2813,7 @@ Returns:
   EFI_STATUS                    Status;\r
   CONSOLE_OUT_MODE              *ModeInfo;\r
   EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *TextOut;\r
-  \r
+\r
   PreferMode   = 0xFF;\r
   BaseMode     = 0xFF;\r
   TextOut      = &Private->TextOut;\r
@@ -2832,9 +2832,9 @@ Returns:
                    );\r
 \r
   //\r
-  // Set to the default mode 80 x 25 required by EFI/UEFI spec; \r
+  // Set to the default mode 80 x 25 required by EFI/UEFI spec;\r
   // user can also define other valid default console mode here.\r
-  //            \r
+  //\r
   if (EFI_ERROR(Status)) {\r
     ModeInfo->Column = 80;\r
     ModeInfo->Row    = 25;\r
@@ -2844,9 +2844,9 @@ Returns:
                     EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
                     sizeof (CONSOLE_OUT_MODE),\r
                     ModeInfo\r
-                    );    \r
+                    );\r
   }\r
-  \r
+\r
   for (Mode = 0; Mode < MaxMode; Mode++) {\r
     Status = TextOut->QueryMode (TextOut, Mode, &Col, &Row);\r
     if (!EFI_ERROR(Status)) {\r
@@ -2858,19 +2858,19 @@ Returns:
       }\r
     }\r
   }\r
-  \r
+\r
   Status = TextOut->SetMode (TextOut, PreferMode);\r
-  \r
+\r
   //\r
   // if current mode setting is failed, default 80x25 mode will be set.\r
   //\r
   if (EFI_ERROR(Status)) {\r
     Status = TextOut->SetMode (TextOut, BaseMode);\r
     ASSERT(!EFI_ERROR(Status));\r
-    \r
+\r
     ModeInfo->Column = 80;\r
     ModeInfo->Row    = 25;\r
-    \r
+\r
     //\r
     // Update ConOutMode variable\r
     //\r
@@ -2880,7 +2880,7 @@ Returns:
                     EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
                     sizeof (CONSOLE_OUT_MODE),\r
                     ModeInfo\r
-                    );     \r
+                    );\r
   }\r
 \r
   gBS->FreePool (ModeInfo);\r
@@ -2989,7 +2989,7 @@ Returns:
     }\r
   }\r
   if (FeaturePcdGet (PcdConOutUgaSupport)) {\r
-    if (UgaDraw != NULL) {\r
+    if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {\r
       Status = UgaDraw->GetMode (\r
                     UgaDraw,\r
                     &UgaHorizontalResolution,\r
@@ -3043,7 +3043,7 @@ Returns:
   }\r
 \r
   //\r
-  // After adding new console device, all existing console devices should be \r
+  // After adding new console device, all existing console devices should be\r
   // synced to the current shared mode.\r
   //\r
   ConsplitterSetConsoleOutMode (Private);\r
@@ -3084,7 +3084,7 @@ Returns:
     if (TextOutList->TextOut == TextOut) {\r
       CopyMem (TextOutList, TextOutList + 1, sizeof (TEXT_OUT_AND_GOP_DATA) * Index);\r
       CurrentNumOfConsoles--;\r
-      if (TextOutList->UgaDraw != NULL) {\r
+      if (TextOutList->UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {\r
         Private->CurrentNumberOfUgaDraw--;\r
       }\r
       if (TextOutList->GraphicsOutput != NULL) {\r