]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsole.c
add some error check and return.
[mirror_edk2.git] / MdeModulePkg / Universal / Console / GraphicsConsoleDxe / GraphicsConsole.c
index 6a624af1e76006ccb87754ea5d34bd5dde40b2ad..2cf2f3e64d6b10c729419f6026798f5ee37d66d0 100644 (file)
@@ -5,15 +5,15 @@ Remaining Tasks
   Implement optimal automatic Mode creation algorithm\r
   Solve palette issues for mixed graphics and text\r
   When does this protocol reset the palette?\r
-    \r
+\r
 Copyright (c) 2006 - 2007 Intel Corporation. <BR>\r
-All rights reserved. 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
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+All rights reserved. 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
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
 **/\r
 \r
@@ -139,12 +139,13 @@ GraphicsConsoleControllerDriverSupported (
   IN EFI_DEVICE_PATH_PROTOCOL       *RemainingDevicePath\r
   )\r
 {\r
-  EFI_STATUS                Status;\r
+  EFI_STATUS                   Status;\r
   EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;\r
-  EFI_UGA_DRAW_PROTOCOL     *UgaDraw;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
+  EFI_UGA_DRAW_PROTOCOL        *UgaDraw;\r
+  EFI_DEVICE_PATH_PROTOCOL     *DevicePath;\r
 \r
-  UgaDraw = NULL;\r
+  GraphicsOutput = NULL;\r
+  UgaDraw        = NULL;\r
   //\r
   // Open the IO Abstraction(s) needed to perform the supported test\r
   //\r
@@ -156,9 +157,8 @@ GraphicsConsoleControllerDriverSupported (
                   Controller,\r
                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
                   );\r
-  \r
-  if (EFI_ERROR (Status)) {\r
-    GraphicsOutput = NULL;\r
+\r
+  if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) {\r
     //\r
     // Open Graphics Output Protocol failed, try to open UGA Draw Protocol\r
     //\r
@@ -170,9 +170,9 @@ GraphicsConsoleControllerDriverSupported (
                     Controller,\r
                     EFI_OPEN_PROTOCOL_BY_DRIVER\r
                     );\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
+  }\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
   }\r
 \r
   //\r
@@ -215,7 +215,7 @@ Error:
           This->DriverBindingHandle,\r
           Controller\r
           );\r
-  } else {\r
+  } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
     gBS->CloseProtocol (\r
           Controller,\r
           &gEfiUgaDrawProtocolGuid,\r
@@ -263,6 +263,11 @@ GraphicsConsoleControllerDriverStart (
   UINTN                                Columns;\r
   UINTN                                Rows;\r
   UINT32                               ModeNumber;\r
+  EFI_HII_SIMPLE_FONT_PACKAGE_HDR      *SimplifiedFont;\r
+  UINTN                                PackageLength;\r
+  EFI_HII_PACKAGE_LIST_HEADER          *PackageList;\r
+  UINT8                                *Package;\r
+  UINT8                                *Location;\r
 \r
   ModeNumber = 0;\r
 \r
@@ -287,9 +292,8 @@ GraphicsConsoleControllerDriverStart (
                   Controller,\r
                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
                   );\r
-  if (EFI_ERROR(Status)) {\r
-    Private->GraphicsOutput = NULL;\r
 \r
+  if (EFI_ERROR(Status) && FeaturePcdGet (PcdUgaConsumeSupport)) {\r
     Status = gBS->OpenProtocol (\r
                     Controller,\r
                     &gEfiUgaDrawProtocolGuid,\r
@@ -298,41 +302,44 @@ GraphicsConsoleControllerDriverStart (
                     Controller,\r
                     EFI_OPEN_PROTOCOL_BY_DRIVER\r
                     );\r
-    if (EFI_ERROR (Status)) {\r
-      goto Error;\r
-    }\r
+  }\r
+\r
+  if (EFI_ERROR (Status)) {\r
+    goto Error;\r
   }\r
 \r
   NarrowFontSize  = ReturnNarrowFontSize ();\r
 \r
-#if 1\r
   if (mFirstAccessFlag) {\r
-    HiiLibAddFontPackageToHiiDatabase (NarrowFontSize, (UINT8 *) UsStdNarrowGlyphData, &mFontPackageListGuid, &(Private->HiiHandle));\r
-    mFirstAccessFlag = FALSE;\r
-  }\r
-#else\r
-  FontPack        = AllocateZeroPool (sizeof (EFI_HII_FONT_PACK) + NarrowFontSize);\r
-  ASSERT (FontPack);\r
-\r
-  FontPack->Header.Length         = (UINT32) (sizeof (EFI_HII_FONT_PACK) + NarrowFontSize);\r
-  FontPack->Header.Type           = EFI_HII_FONT;\r
-  FontPack->NumberOfNarrowGlyphs  = (UINT16) (NarrowFontSize / sizeof (EFI_NARROW_GLYPH));\r
+    //\r
+    // Add 4 bytes to the header for entire length for HiiLibPreparePackageList use only.\r
+    // Looks ugly. Might be updated when font tool is ready.\r
+    //\r
+    PackageLength   = sizeof (EFI_HII_SIMPLE_FONT_PACKAGE_HDR) + NarrowFontSize + 4;\r
+    Package = AllocateZeroPool (PackageLength);\r
+    if (Package == NULL) {\r
+      return EFI_OUT_OF_RESOURCES;\r
+    }\r
+    CopyMem (Package, &PackageLength, 4);\r
+    SimplifiedFont = (EFI_HII_SIMPLE_FONT_PACKAGE_HDR*) (Package + 4);\r
+    SimplifiedFont->Header.Length        = (UINT32) (PackageLength - 4);\r
+    SimplifiedFont->Header.Type          = EFI_HII_PACKAGE_SIMPLE_FONTS;\r
+    SimplifiedFont->NumberOfNarrowGlyphs = (UINT16) (NarrowFontSize / sizeof (EFI_NARROW_GLYPH));\r
 \r
-  Location                        = (UINT8 *) (&FontPack->NumberOfWideGlyphs + sizeof (UINT8));\r
-  CopyMem (Location, UsStdNarrowGlyphData, NarrowFontSize);\r
+    Location = (UINT8 *) (&SimplifiedFont->NumberOfWideGlyphs + 1);\r
+    CopyMem (Location, UsStdNarrowGlyphData, NarrowFontSize);\r
 \r
-  //\r
-  // Register our Fonts into the global database\r
-  //\r
-  Package = PreparePackages (1, NULL, FontPack);\r
-  mHii->NewPack (mHii, Package, &(Private->HiiHandle));\r
-  FreePool (Package);\r
+    //\r
+    // Add this simplified font package to a package list then install it.\r
+    //\r
+    PackageList = HiiLibPreparePackageList (1, &mFontPackageListGuid, Package);\r
+    Status = mHiiDatabase->NewPackageList (mHiiDatabase, PackageList, NULL, &(Private->HiiHandle));\r
+    ASSERT_EFI_ERROR (Status);\r
+    SafeFreePool (PackageList);\r
+    SafeFreePool (Package);\r
 \r
-  //\r
-  // Free the font database\r
-  //\r
-  FreePool (FontPack);\r
-#endif\r
+    mFirstAccessFlag = FALSE;\r
+  }\r
   //\r
   // If the current mode information can not be retrieved, then attemp to set the default mode\r
   // of 800x600, 32 bit colot, 60 Hz refresh.\r
@@ -342,13 +349,13 @@ GraphicsConsoleControllerDriverStart (
 \r
   if (Private->GraphicsOutput != NULL) {\r
     //\r
-    // The console is build on top of Graphics Output Protocol, find the mode number \r
+    // The console is build on top of Graphics Output Protocol, find the mode number\r
     // for the user-defined mode; if there are multiple video devices,\r
     // graphic console driver will set all the video devices to the same mode.\r
     //\r
     Status = CheckModeSupported (\r
-                 Private->GraphicsOutput, \r
-                 CURRENT_HORIZONTAL_RESOLUTION, \r
+                 Private->GraphicsOutput,\r
+                 CURRENT_HORIZONTAL_RESOLUTION,\r
                  CURRENT_VERTICAL_RESOLUTION,\r
                  &ModeNumber\r
                  );\r
@@ -363,9 +370,9 @@ GraphicsConsoleControllerDriverStart (
       // if not supporting current mode, try 800x600 which is required by UEFI/EFI spec\r
       //\r
       Status = CheckModeSupported (\r
-                   Private->GraphicsOutput, \r
-                   800, \r
-                   600, \r
+                   Private->GraphicsOutput,\r
+                   800,\r
+                   600,\r
                    &ModeNumber\r
                    );\r
     }\r
@@ -378,7 +385,7 @@ GraphicsConsoleControllerDriverStart (
       VerticalResolution = Private->GraphicsOutput->Mode->Info->VerticalResolution;\r
       ModeNumber = Private->GraphicsOutput->Mode->Mode;\r
     }\r
-  } else {\r
+  } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
     //\r
     // At first try to set user-defined resolution\r
     //\r
@@ -394,7 +401,7 @@ GraphicsConsoleControllerDriverStart (
     if (!EFI_ERROR (Status)) {\r
       HorizontalResolution = CURRENT_HORIZONTAL_RESOLUTION;\r
       VerticalResolution   = CURRENT_VERTICAL_RESOLUTION;\r
-    } else {\r
+    } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
       //\r
       // Try to set 800*600 which is required by UEFI/EFI spec\r
       //\r
@@ -417,6 +424,9 @@ GraphicsConsoleControllerDriverStart (
           goto Error;\r
         }\r
       }\r
+    } else {\r
+      Status = EFI_UNSUPPORTED;\r
+      goto Error;\r
     }\r
   }\r
 \r
@@ -468,11 +478,11 @@ GraphicsConsoleControllerDriverStart (
     Private->ModeData[MaxMode].DeltaY     = 0;\r
     MaxMode++;\r
   }\r
-  \r
+\r
   //\r
   // Add Mode #2 that must be 100x31 (graphic mode >= 800x600)\r
   //\r
-  if (Columns >= 100 && Rows >= 31) {  \r
+  if (Columns >= 100 && Rows >= 31) {\r
     Private->ModeData[MaxMode].GopWidth   = HorizontalResolution;\r
     Private->ModeData[MaxMode].GopHeight  = VerticalResolution;\r
     Private->ModeData[MaxMode].GopModeNumber = ModeNumber;\r
@@ -486,7 +496,7 @@ GraphicsConsoleControllerDriverStart (
   //\r
   if (HorizontalResolution > 800 && VerticalResolution > 600) {\r
     Private->ModeData[MaxMode].Columns    = HorizontalResolution/GLYPH_WIDTH;\r
-    Private->ModeData[MaxMode].Rows       = VerticalResolution/GLYPH_HEIGHT;    \r
+    Private->ModeData[MaxMode].Rows       = VerticalResolution/GLYPH_HEIGHT;\r
     Private->ModeData[MaxMode].GopWidth   = HorizontalResolution;\r
     Private->ModeData[MaxMode].GopHeight  = VerticalResolution;\r
     Private->ModeData[MaxMode].GopModeNumber = ModeNumber;\r
@@ -494,7 +504,7 @@ GraphicsConsoleControllerDriverStart (
     Private->ModeData[MaxMode].DeltaY     = (VerticalResolution % GLYPH_HEIGHT) >> 1;\r
     MaxMode++;\r
   }\r
-    \r
+\r
   //\r
   // Update the maximum number of modes\r
   //\r
@@ -534,7 +544,7 @@ Error:
             This->DriverBindingHandle,\r
             Controller\r
             );\r
-    } else {\r
+    } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
       gBS->CloseProtocol (\r
             Controller,\r
             &gEfiUgaDrawProtocolGuid,\r
@@ -601,7 +611,7 @@ GraphicsConsoleControllerDriverStop (
             This->DriverBindingHandle,\r
             Controller\r
             );\r
-    } else {\r
+    } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
       gBS->CloseProtocol (\r
             Controller,\r
             &gEfiUgaDrawProtocolGuid,\r
@@ -640,11 +650,11 @@ CheckModeSupported (
 {\r
   UINT32     ModeNumber;\r
   EFI_STATUS Status;\r
-  UINTN      SizeOfInfo;  \r
+  UINTN      SizeOfInfo;\r
   EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;\r
-    \r
+\r
   Status = EFI_SUCCESS;\r
-  \r
+\r
   for (ModeNumber = 0; ModeNumber < GraphicsOutput->Mode->MaxMode; ModeNumber++) {\r
     Status = GraphicsOutput->QueryMode (\r
                        GraphicsOutput,\r
@@ -664,13 +674,13 @@ CheckModeSupported (
       gBS->FreePool (Info);\r
     }\r
   }\r
-  \r
+\r
   if (ModeNumber == GraphicsOutput->Mode->MaxMode) {\r
     Status = EFI_UNSUPPORTED;\r
   }\r
-  \r
+\r
   *CurrentModeNumber = ModeNumber;\r
-  return Status; \r
+  return Status;\r
 }\r
 \r
 EFI_STATUS\r
@@ -738,27 +748,27 @@ GraphicsConsoleConOutReset (
   )\r
 /*++\r
   Routine Description:\r
-  \r
+\r
     Implements SIMPLE_TEXT_OUTPUT.Reset().\r
-    If ExtendeVerification is TRUE, then perform dependent Graphics Console \r
+    If ExtendeVerification is TRUE, then perform dependent Graphics Console\r
     device reset, and set display mode to mode 0.\r
     If ExtendedVerification is FALSE, only set display mode to mode 0.\r
-  \r
+\r
   Arguments:\r
-  \r
+\r
     This - Indicates the calling context.\r
-    \r
+\r
     ExtendedVerification - Indicates that the driver may perform a more exhaustive\r
                            verification operation of the device during reset.\r
-        \r
+\r
   Returns:\r
-  \r
+\r
     EFI_SUCCESS\r
-       The reset operation succeeds.   \r
-    \r
+       The reset operation succeeds.\r
+\r
     EFI_DEVICE_ERROR\r
-      The Graphics Console is not functioning correctly \r
-                \r
+      The Graphics Console is not functioning correctly\r
+\r
 --*/\r
 {\r
   This->SetAttribute (This, EFI_TEXT_ATTR (This->Mode->Attribute & 0x0F, EFI_BACKGROUND_BLACK));\r
@@ -773,31 +783,31 @@ GraphicsConsoleConOutOutputString (
   )\r
 /*++\r
   Routine Description:\r
-  \r
+\r
     Implements SIMPLE_TEXT_OUTPUT.OutputString().\r
-    The Unicode string will be converted to Glyphs and will be \r
+    The Unicode string will be converted to Glyphs and will be\r
     sent to the Graphics Console.\r
-    \r
-  \r
+\r
+\r
   Arguments:\r
-  \r
+\r
     This - Indicates the calling context.\r
-    \r
-    WString - The Null-terminated Unicode string to be displayed on \r
+\r
+    WString - The Null-terminated Unicode string to be displayed on\r
               the Graphics Console.\r
-        \r
+\r
   Returns:\r
-  \r
+\r
     EFI_SUCCESS\r
-       The string is output successfully.   \r
-    \r
+       The string is output successfully.\r
+\r
     EFI_DEVICE_ERROR\r
       The Graphics Console failed to send the string out.\r
-      \r
+\r
     EFI_WARN_UNKNOWN_GLYPH\r
-      Indicates that some of the characters in the Unicode string could not \r
-      be rendered and are skipped.          \r
-                \r
+      Indicates that some of the characters in the Unicode string could not\r
+      be rendered and are skipped.\r
+\r
 --*/\r
 {\r
   GRAPHICS_CONSOLE_DEV  *Private;\r
@@ -920,7 +930,7 @@ GraphicsConsoleConOutOutputString (
                     GLYPH_HEIGHT,\r
                     Delta\r
                     );\r
-        } else {\r
+        } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
           //\r
           // Scroll Screen Up One Row\r
           //\r
@@ -1077,28 +1087,28 @@ GraphicsConsoleConOutTestString (
   )\r
 /*++\r
   Routine Description:\r
-  \r
+\r
     Implements SIMPLE_TEXT_OUTPUT.TestString().\r
     If one of the characters in the *Wstring is\r
     neither valid valid Unicode drawing characters,\r
     not ASCII code, then this function will return\r
     EFI_UNSUPPORTED.\r
-        \r
-  \r
+\r
+\r
   Arguments:\r
-  \r
+\r
     This - Indicates the calling context.\r
-    \r
+\r
     WString - The Null-terminated Unicode string to be tested.\r
-        \r
+\r
   Returns:\r
-  \r
+\r
     EFI_SUCCESS\r
-       The Graphics Console is capable of rendering the output string. \r
-    \r
+       The Graphics Console is capable of rendering the output string.\r
+\r
     EFI_UNSUPPORTED\r
-      Some of the characters in the Unicode string cannot be rendered.      \r
-                \r
+      Some of the characters in the Unicode string cannot be rendered.\r
+\r
 --*/\r
 {\r
   EFI_STATUS            Status;\r
@@ -1138,45 +1148,45 @@ GraphicsConsoleConOutQueryMode (
   )\r
 /*++\r
   Routine Description:\r
-  \r
+\r
     Implements SIMPLE_TEXT_OUTPUT.QueryMode().\r
     It returnes information for an available text mode\r
     that the Graphics Console supports.\r
     In this driver,we only support text mode 80x25, which is\r
     defined as mode 0.\r
-        \r
-  \r
+\r
+\r
   Arguments:\r
-  \r
+\r
     This - Indicates the calling context.\r
-    \r
+\r
     ModeNumber - The mode number to return information on.\r
-        \r
+\r
     Columns - The returned columns of the requested mode.\r
-        \r
-    Rows - The returned rows of the requested mode.                \r
-        \r
+\r
+    Rows - The returned rows of the requested mode.\r
+\r
   Returns:\r
-  \r
+\r
     EFI_SUCCESS\r
-      The requested mode information is returned. \r
-    \r
+      The requested mode information is returned.\r
+\r
     EFI_UNSUPPORTED\r
-      The mode number is not valid.   \r
-                \r
+      The mode number is not valid.\r
+\r
 --*/\r
 {\r
   GRAPHICS_CONSOLE_DEV  *Private;\r
   EFI_STATUS            Status;\r
   EFI_TPL               OldTpl;\r
-       \r
+\r
   if (ModeNumber >= (UINTN) This->Mode->MaxMode) {\r
     return EFI_UNSUPPORTED;\r
   }\r
 \r
   OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
   Status = EFI_SUCCESS;\r
-  \r
+\r
   Private   = GRAPHICS_CONSOLE_CON_OUT_DEV_FROM_THIS (This);\r
 \r
   *Columns  = Private->ModeData[ModeNumber].Columns;\r
@@ -1201,28 +1211,28 @@ GraphicsConsoleConOutSetMode (
   )\r
 /*++\r
   Routine Description:\r
-  \r
+\r
     Implements SIMPLE_TEXT_OUTPUT.SetMode().\r
     Set the Graphics Console to a specified mode.\r
-    In this driver, we only support mode 0.        \r
-  \r
+    In this driver, we only support mode 0.\r
+\r
   Arguments:\r
-  \r
+\r
     This - Indicates the calling context.\r
-    \r
+\r
     ModeNumber - The text mode to set.\r
-        \r
+\r
   Returns:\r
-  \r
+\r
     EFI_SUCCESS\r
        The requested text mode is set.\r
-       \r
+\r
     EFI_DEVICE_ERROR\r
       The requested text mode cannot be set because of Graphics Console device error.\r
-    \r
+\r
     EFI_UNSUPPORTED\r
-      The text mode number is not valid.       \r
-                \r
+      The text mode number is not valid.\r
+\r
 --*/\r
 {\r
   EFI_STATUS                      Status;\r
@@ -1333,7 +1343,7 @@ GraphicsConsoleConOutSetMode (
                           0\r
                           );\r
     }\r
-  } else {\r
+  } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
     //\r
     // Get the current UGA Draw mode information\r
     //\r
@@ -1405,31 +1415,31 @@ GraphicsConsoleConOutSetAttribute (
   )\r
 /*++\r
   Routine Description:\r
-  \r
-    Implements SIMPLE_TEXT_OUTPUT.SetAttribute().       \r
-  \r
+\r
+    Implements SIMPLE_TEXT_OUTPUT.SetAttribute().\r
+\r
   Arguments:\r
-  \r
+\r
     This - Indicates the calling context.\r
-    \r
+\r
     Attrubute - The attribute to set. Only bit0..6 are valid, all other bits\r
                 are undefined and must be zero.\r
-        \r
+\r
   Returns:\r
-  \r
+\r
     EFI_SUCCESS\r
-      The requested attribute is set. \r
-       \r
+      The requested attribute is set.\r
+\r
     EFI_DEVICE_ERROR\r
       The requested attribute cannot be set due to Graphics Console port error.\r
-          \r
+\r
     EFI_UNSUPPORTED\r
-      The attribute requested is not defined by EFI spec.   \r
-                \r
+      The attribute requested is not defined by EFI spec.\r
+\r
 --*/\r
 {\r
   EFI_TPL               OldTpl;\r
-  \r
+\r
   if ((Attribute | 0xFF) != 0xFF) {\r
     return EFI_UNSUPPORTED;\r
   }\r
@@ -1458,27 +1468,27 @@ GraphicsConsoleConOutClearScreen (
   )\r
 /*++\r
   Routine Description:\r
-  \r
+\r
     Implements SIMPLE_TEXT_OUTPUT.ClearScreen().\r
-    It clears the Graphics Console's display to the \r
+    It clears the Graphics Console's display to the\r
     currently selected background color.\r
-        \r
-  \r
+\r
+\r
   Arguments:\r
-  \r
+\r
     This - Indicates the calling context.\r
 \r
   Returns:\r
-  \r
+\r
     EFI_SUCCESS\r
       The operation completed successfully.\r
-       \r
+\r
     EFI_DEVICE_ERROR\r
-      The Graphics Console cannot be cleared due to Graphics Console device error.        \r
-    \r
+      The Graphics Console cannot be cleared due to Graphics Console device error.\r
+\r
     EFI_UNSUPPORTED\r
-      The Graphics Console is not in a valid text mode.       \r
-                \r
+      The Graphics Console is not in a valid text mode.\r
+\r
 --*/\r
 {\r
   EFI_STATUS                    Status;\r
@@ -1511,7 +1521,7 @@ GraphicsConsoleConOutClearScreen (
                         ModeData->GopHeight,\r
                         0\r
                         );\r
-  } else {\r
+  } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
     Status = UgaDraw->Blt (\r
                         UgaDraw,\r
                         (EFI_UGA_PIXEL *) (UINTN) &Background,\r
@@ -1524,6 +1534,8 @@ GraphicsConsoleConOutClearScreen (
                         ModeData->GopHeight,\r
                         0\r
                         );\r
+  } else {\r
+    Status = EFI_UNSUPPORTED;\r
   }\r
 \r
   This->Mode->CursorColumn  = 0;\r
@@ -1545,29 +1557,29 @@ GraphicsConsoleConOutSetCursorPosition (
   )\r
 /*++\r
   Routine Description:\r
-  \r
-    Implements SIMPLE_TEXT_OUTPUT.SetCursorPosition().          \r
-  \r
+\r
+    Implements SIMPLE_TEXT_OUTPUT.SetCursorPosition().\r
+\r
   Arguments:\r
-  \r
+\r
     This - Indicates the calling context.\r
-        \r
+\r
     Column - The row to set cursor to.\r
-        \r
-    Row - The column to set cursor to.                \r
+\r
+    Row - The column to set cursor to.\r
 \r
   Returns:\r
-  \r
+\r
     EFI_SUCCESS\r
       The operation completed successfully.\r
-       \r
+\r
     EFI_DEVICE_ERROR\r
-      The request fails due to Graphics Console device error.        \r
-    \r
+      The request fails due to Graphics Console device error.\r
+\r
     EFI_UNSUPPORTED\r
       The Graphics Console is not in a valid text mode, or the cursor position\r
-      is invalid for current mode.     \r
-                \r
+      is invalid for current mode.\r
+\r
 --*/\r
 {\r
   GRAPHICS_CONSOLE_DEV        *Private;\r
@@ -1613,31 +1625,31 @@ GraphicsConsoleConOutEnableCursor (
   )\r
 /*++\r
   Routine Description:\r
-  \r
+\r
     Implements SIMPLE_TEXT_OUTPUT.EnableCursor().\r
-    In this driver, the cursor cannot be hidden.        \r
-  \r
+    In this driver, the cursor cannot be hidden.\r
+\r
   Arguments:\r
-  \r
+\r
     This - Indicates the calling context.\r
-        \r
+\r
     Visible - If TRUE, the cursor is set to be visible,\r
-              If FALSE, the cursor is set to be invisible.        \r
+              If FALSE, the cursor is set to be invisible.\r
 \r
   Returns:\r
-  \r
+\r
     EFI_SUCCESS\r
       The request is valid.\r
-       \r
+\r
     EFI_UNSUPPORTED\r
-      The Graphics Console does not support a hidden cursor.   \r
-                \r
+      The Graphics Console does not support a hidden cursor.\r
+\r
 --*/\r
 {\r
   EFI_TPL               OldTpl;\r
-  \r
+\r
   OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
-    \r
+\r
   EraseCursor (This);\r
 \r
   This->Mode->CursorVisible = Visible;\r
@@ -1722,7 +1734,7 @@ DrawUnicodeWeightAtCursorN (
                          NULL\r
                          );\r
 \r
-  } else {\r
+  } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
     ASSERT (Private->UgaDraw!= NULL);\r
 \r
     UgaDraw = Private->UgaDraw;\r
@@ -1758,7 +1770,7 @@ DrawUnicodeWeightAtCursorN (
       // always be 1. ASSERT here to make sure.\r
       //\r
       ASSERT (RowInfoArraySize == 1);\r
-      \r
+\r
       Status = UgaDraw->Blt (\r
                           UgaDraw,\r
                           (EFI_UGA_PIXEL *) Blt->Image.Bitmap,\r
@@ -1775,6 +1787,8 @@ DrawUnicodeWeightAtCursorN (
 \r
     SafeFreePool (RowInfoArray);\r
     SafeFreePool (Blt->Image.Bitmap);\r
+  } else {\r
+    Status = EFI_UNSUPPORTED;\r
   }\r
 \r
   SafeFreePool (Blt);\r
@@ -1833,7 +1847,7 @@ EraseCursor (
               GLYPH_HEIGHT,\r
               GLYPH_WIDTH * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)\r
               );\r
-  } else {\r
+  } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
     UgaDraw->Blt (\r
               UgaDraw,\r
               (EFI_UGA_PIXEL *) (UINTN) BltChar,\r
@@ -1874,7 +1888,7 @@ EraseCursor (
               GLYPH_HEIGHT,\r
               GLYPH_WIDTH * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL)\r
               );\r
-  } else {\r
+  } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
     UgaDraw->Blt (\r
               UgaDraw,\r
               (EFI_UGA_PIXEL *) (UINTN) BltChar,\r
@@ -1895,9 +1909,9 @@ EraseCursor (
 /**\r
   The user Entry Point for module GraphicsConsole. The user code starts with this function.\r
 \r
-  @param[in] ImageHandle    The firmware allocated handle for the EFI image.  \r
+  @param[in] ImageHandle    The firmware allocated handle for the EFI image.\r
   @param[in] SystemTable    A pointer to the EFI System Table.\r
-  \r
+\r
   @retval EFI_SUCCESS       The entry point is executed successfully.\r
   @retval other             Some error occurs when executing this entry point.\r
 \r