]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Application/Shell/ConsoleLogger.c
ShellPkg: Clean up source files
[mirror_edk2.git] / ShellPkg / Application / Shell / ConsoleLogger.c
index 2b84d87adb06421c2ad900d80abf7521ceee3b7d..07e52f42312f0488122b7787d9049dac557bf4ac 100644 (file)
@@ -1,7 +1,9 @@
 /** @file\r
   Provides interface to shell console logger.\r
 \r
-  Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  (C) Copyright 2013 Hewlett-Packard Development Company, L.P.<BR>\r
+  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
+  (C) Copyright 2016 Hewlett-Packard Development Company, L.P.<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
   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 **/\r
 \r
-#include "ConsoleLogger.h"\r
 #include "Shell.h"\r
 \r
-STATIC CONST CHAR16                     mCrLfString[3] = { CHAR_CARRIAGE_RETURN, CHAR_LINEFEED, CHAR_NULL };\r
-\r
 /**\r
   Install our intermediate ConOut into the system table to\r
   keep a log of all the info that is displayed to the user.\r
@@ -30,7 +29,6 @@ STATIC CONST CHAR16                     mCrLfString[3] = { CHAR_CARRIAGE_RETURN,
   @sa InstallProtocolInterface\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 ConsoleLoggerInstall(\r
   IN CONST UINTN ScreensToSave,\r
   OUT CONSOLE_LOGGER_PRIVATE_DATA **ConsoleInfo\r
@@ -39,54 +37,69 @@ ConsoleLoggerInstall(
   EFI_STATUS Status;\r
   ASSERT(ConsoleInfo != NULL);\r
 \r
-  (*ConsoleInfo) = AllocatePool(sizeof(CONSOLE_LOGGER_PRIVATE_DATA));\r
+  (*ConsoleInfo) = AllocateZeroPool(sizeof(CONSOLE_LOGGER_PRIVATE_DATA));\r
   if ((*ConsoleInfo) == NULL) {\r
     return (EFI_OUT_OF_RESOURCES);\r
   }\r
 \r
-  (*ConsoleInfo)->Signature        = CONSOLE_LOGGER_PRIVATE_DATA_SIGNATURE;\r
-  (*ConsoleInfo)->OldConOut        = NULL;\r
-  (*ConsoleInfo)->OldConHandle     = NULL;\r
-  (*ConsoleInfo)->Buffer           = NULL;\r
-  (*ConsoleInfo)->BufferSize       = 0;\r
-  (*ConsoleInfo)->OriginalStartRow = 0;\r
-  (*ConsoleInfo)->CurrentStartRow  = 0;\r
-  (*ConsoleInfo)->RowsPerScreen    = 0;\r
-  (*ConsoleInfo)->ColsPerScreen    = 0;\r
-  (*ConsoleInfo)->Attributes       = NULL;\r
-  (*ConsoleInfo)->AttribSize       = 0;\r
-  (*ConsoleInfo)->ScreenCount      = ScreensToSave;\r
-  (*ConsoleInfo)->HistoryMode.MaxMode       = 1;\r
-  (*ConsoleInfo)->HistoryMode.Mode          = 0;\r
-  (*ConsoleInfo)->HistoryMode.Attribute     = 0;\r
-  (*ConsoleInfo)->HistoryMode.CursorColumn  = 0;\r
-  (*ConsoleInfo)->HistoryMode.CursorRow     = 0;\r
-  (*ConsoleInfo)->HistoryMode.CursorVisible = FALSE;\r
-  (*ConsoleInfo)->OurConOut.Reset           = ConsoleLoggerReset;\r
-  (*ConsoleInfo)->OurConOut.OutputString    = ConsoleLoggerOutputString;\r
-  (*ConsoleInfo)->OurConOut.TestString      = ConsoleLoggerTestString;\r
-  (*ConsoleInfo)->OurConOut.QueryMode       = ConsoleLoggerQueryMode;\r
-  (*ConsoleInfo)->OurConOut.SetMode         = ConsoleLoggerSetMode;\r
-  (*ConsoleInfo)->OurConOut.SetAttribute    = ConsoleLoggerSetAttribute;\r
-  (*ConsoleInfo)->OurConOut.ClearScreen     = ConsoleLoggerClearScreen;\r
+  (*ConsoleInfo)->Signature                   = CONSOLE_LOGGER_PRIVATE_DATA_SIGNATURE;\r
+  (*ConsoleInfo)->OldConOut                   = gST->ConOut;\r
+  (*ConsoleInfo)->OldConHandle                = gST->ConsoleOutHandle;\r
+  (*ConsoleInfo)->Buffer                      = NULL;\r
+  (*ConsoleInfo)->BufferSize                  = 0;\r
+  (*ConsoleInfo)->OriginalStartRow            = 0;\r
+  (*ConsoleInfo)->CurrentStartRow             = 0;\r
+  (*ConsoleInfo)->RowsPerScreen               = 0;\r
+  (*ConsoleInfo)->ColsPerScreen               = 0;\r
+  (*ConsoleInfo)->Attributes                  = NULL;\r
+  (*ConsoleInfo)->AttribSize                  = 0;\r
+  (*ConsoleInfo)->ScreenCount                 = ScreensToSave;\r
+  (*ConsoleInfo)->HistoryMode.MaxMode         = 1;\r
+  (*ConsoleInfo)->HistoryMode.Mode            = 0;\r
+  (*ConsoleInfo)->HistoryMode.Attribute       = 0;\r
+  (*ConsoleInfo)->HistoryMode.CursorColumn    = 0;\r
+  (*ConsoleInfo)->HistoryMode.CursorRow       = 0;\r
+  (*ConsoleInfo)->HistoryMode.CursorVisible   = FALSE;\r
+  (*ConsoleInfo)->OurConOut.Reset             = ConsoleLoggerReset;\r
+  (*ConsoleInfo)->OurConOut.OutputString      = ConsoleLoggerOutputString;\r
+  (*ConsoleInfo)->OurConOut.TestString        = ConsoleLoggerTestString;\r
+  (*ConsoleInfo)->OurConOut.QueryMode         = ConsoleLoggerQueryMode;\r
+  (*ConsoleInfo)->OurConOut.SetMode           = ConsoleLoggerSetMode;\r
+  (*ConsoleInfo)->OurConOut.SetAttribute      = ConsoleLoggerSetAttribute;\r
+  (*ConsoleInfo)->OurConOut.ClearScreen       = ConsoleLoggerClearScreen;\r
   (*ConsoleInfo)->OurConOut.SetCursorPosition = ConsoleLoggerSetCursorPosition;\r
-  (*ConsoleInfo)->OurConOut.EnableCursor    = ConsoleLoggerEnableCursor;\r
-  (*ConsoleInfo)->OurConOut.Mode            = NULL;\r
-  (*ConsoleInfo)->Enabled                   = TRUE;\r
+  (*ConsoleInfo)->OurConOut.EnableCursor      = ConsoleLoggerEnableCursor;\r
+  (*ConsoleInfo)->OurConOut.Mode              = gST->ConOut->Mode;\r
+  (*ConsoleInfo)->Enabled                     = TRUE;\r
 \r
   Status = ConsoleLoggerResetBuffers(*ConsoleInfo);\r
   if (EFI_ERROR(Status)) {\r
+    SHELL_FREE_NON_NULL((*ConsoleInfo));\r
+    *ConsoleInfo = NULL;\r
     return (Status);\r
   }\r
 \r
   Status = gBS->InstallProtocolInterface(&gImageHandle, &gEfiSimpleTextOutProtocolGuid, EFI_NATIVE_INTERFACE, (VOID*)&((*ConsoleInfo)->OurConOut));\r
-\r
-  (*ConsoleInfo)->OldConOut = gST->ConOut;\r
-  (*ConsoleInfo)->OldConHandle = gST->ConsoleOutHandle;\r
+  if (EFI_ERROR(Status)) {\r
+    SHELL_FREE_NON_NULL((*ConsoleInfo)->Buffer);\r
+    SHELL_FREE_NON_NULL((*ConsoleInfo)->Attributes);\r
+    SHELL_FREE_NON_NULL((*ConsoleInfo));\r
+    *ConsoleInfo = NULL;\r
+    return (Status);\r
+  }\r
 \r
   gST->ConsoleOutHandle = gImageHandle;\r
-  gST->ConOut = &(*ConsoleInfo)->OurConOut;\r
+  gST->ConOut           = &(*ConsoleInfo)->OurConOut;\r
 \r
+  //\r
+  // Update the CRC32 in the EFI System Table header\r
+  //\r
+  gST->Hdr.CRC32 = 0;\r
+  gBS->CalculateCrc32 (\r
+        (UINT8 *)&gST->Hdr,\r
+        gST->Hdr.HeaderSize,\r
+        &gST->Hdr.CRC32\r
+        );\r
   return (Status);\r
 }\r
 \r
@@ -94,13 +107,12 @@ ConsoleLoggerInstall(
   Return the system to the state it was before InstallConsoleLogger\r
   was installed.\r
 \r
-  @param[in,out] ConsoleInfo   The object from the install function.\r
+  @param[in] ConsoleInfo  The object from the install function.\r
 \r
   @retval EFI_SUCCESS     The operation was successful\r
   @return other           The operation failed.  This was from UninstallProtocolInterface.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 ConsoleLoggerUninstall(\r
   IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo\r
   )\r
@@ -122,6 +134,16 @@ ConsoleLoggerUninstall(
   gST->ConsoleOutHandle = ConsoleInfo->OldConHandle;\r
   gST->ConOut = ConsoleInfo->OldConOut;\r
 \r
+  //\r
+  // Update the CRC32 in the EFI System Table header\r
+  //\r
+  gST->Hdr.CRC32 = 0;\r
+  gBS->CalculateCrc32 (\r
+        (UINT8 *)&gST->Hdr,\r
+        gST->Hdr.HeaderSize,\r
+        &gST->Hdr.CRC32\r
+        );\r
+\r
   return (gBS->UninstallProtocolInterface(gImageHandle, &gEfiSimpleTextOutProtocolGuid, (VOID*)&ConsoleInfo->OurConOut));\r
 }\r
 \r
@@ -138,7 +160,6 @@ ConsoleLoggerUninstall(
   @param[in] ConsoleInfo  The pointer to the instance of the console logger information.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 ConsoleLoggerDisplayHistory(\r
   IN CONST BOOLEAN  Forward,\r
   IN CONST UINTN    Rows,\r
@@ -214,7 +235,6 @@ ConsoleLoggerDisplayHistory(
   @sa UpdateDisplayFromHistory\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 ConsoleLoggerStopHistory(\r
   IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo\r
   )\r
@@ -223,6 +243,12 @@ ConsoleLoggerStopHistory(
   if (ConsoleInfo->CurrentStartRow == ConsoleInfo->OriginalStartRow) {\r
     return (EFI_SUCCESS);\r
   }\r
+\r
+  //\r
+  // Clear the screen\r
+  //\r
+  ConsoleInfo->OldConOut->ClearScreen(ConsoleInfo->OldConOut);\r
+\r
   ConsoleInfo->CurrentStartRow = ConsoleInfo->OriginalStartRow;\r
   return (UpdateDisplayFromHistory(ConsoleInfo));\r
 }\r
@@ -235,7 +261,6 @@ ConsoleLoggerStopHistory(
   @return other           The operation failed.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 UpdateDisplayFromHistory(\r
   IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo\r
   )\r
@@ -252,10 +277,12 @@ UpdateDisplayFromHistory(
   CHAR16          *StringSegment;\r
   CHAR16          *StringSegmentEnd;\r
   CHAR16          StringSegmentEndChar;\r
+  INT32           OrigAttribute;\r
 \r
   ASSERT(ConsoleInfo != NULL);\r
   TempCharHolder = CHAR_NULL;\r
   RetVal = EFI_SUCCESS;\r
+  OrigAttribute = ConsoleInfo->OldConOut->Mode->Attribute;\r
 \r
   //\r
   // Disable cursor visibility and move it to the top left corner\r
@@ -295,7 +322,7 @@ UpdateDisplayFromHistory(
         //\r
         StringSegmentEndChar = CHAR_NULL;\r
         for ( StringSegmentEnd = StringSegment\r
-            ; StringSegmentEnd != CHAR_NULL\r
+            ; *StringSegmentEnd != CHAR_NULL\r
             ; StringSegmentEnd++\r
             , Column++\r
            ){\r
@@ -363,6 +390,11 @@ UpdateDisplayFromHistory(
     if (EFI_ERROR (Status)) {\r
       RetVal = Status;\r
     }\r
+  } else {\r
+    ConsoleInfo->OldConOut->SetAttribute (\r
+                                ConsoleInfo->OldConOut,\r
+                                OrigAttribute\r
+                               );\r
   }\r
 \r
   return (RetVal);\r
@@ -399,6 +431,10 @@ ConsoleLoggerReset (
   //\r
   if (!EFI_ERROR (Status)) {\r
     ConsoleLoggerResetBuffers(ConsoleInfo);\r
+    if (ExtendedVerification) {\r
+      ConsoleInfo->OriginalStartRow = 0;\r
+      ConsoleInfo->CurrentStartRow = 0;\r
+    }\r
   }\r
 \r
   return Status;\r
@@ -413,7 +449,6 @@ ConsoleLoggerReset (
   @param[in] ConsoleInfo  The pointer to the instance of the console logger information.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 AppendStringToHistory(\r
   IN CONST CHAR16 *String,\r
   IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo\r
@@ -460,7 +495,7 @@ AppendStringToHistory(
             ; Index < ConsoleInfo->ColsPerScreen\r
             ; Index++\r
            ){\r
-          *(ConsoleInfo->Attributes + (CopySize/sizeof(ConsoleInfo->Attributes)) + Index) = ConsoleInfo->HistoryMode.Attribute;\r
+          *(ConsoleInfo->Attributes + (CopySize/sizeof(ConsoleInfo->Attributes[0])) + Index) = ConsoleInfo->HistoryMode.Attribute;\r
         }\r
 \r
         //\r
@@ -568,7 +603,6 @@ AppendStringToHistory(
                                   rendered and were skipped.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 ConsoleLoggerOutputStringSplit(\r
   IN CONST CHAR16   *String,\r
   IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo\r
@@ -597,7 +631,6 @@ ConsoleLoggerOutputStringSplit(
   @return other         Break was choosen\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 ConsoleLoggerDoPageBreak(\r
   VOID\r
   )\r
@@ -622,11 +655,18 @@ ConsoleLoggerDoPageBreak(
   }\r
   if (*Resp == ShellPromptResponseContinue) {\r
     FreePool(Resp);\r
-    ShellInfoObject.ConsoleInfo->RowCounter = 0;\r
+    ShellInfoObject.ConsoleInfo->RowCounter                   = 0;\r
+//    ShellInfoObject.ConsoleInfo->OurConOut.Mode->CursorRow    = 0;\r
+//    ShellInfoObject.ConsoleInfo->OurConOut.Mode->CursorColumn = 0;\r
+\r
     return (EFI_SUCCESS);\r
   } else if (*Resp == ShellPromptResponseQuit) {\r
     FreePool(Resp);\r
     ShellInfoObject.ConsoleInfo->Enabled = FALSE;\r
+    //\r
+    // When user wants to quit, the shell should stop running the command.\r
+    //\r
+    gBS->SignalEvent (ShellInfoObject.NewEfiShellProtocol->ExecutionBreak);\r
     return (EFI_DEVICE_ERROR);\r
   } else {\r
     ASSERT(FALSE);\r
@@ -649,18 +689,24 @@ ConsoleLoggerDoPageBreak(
                                   rendered and were skipped.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 ConsoleLoggerPrintWithPageBreak(\r
-  IN CHAR16   *String,\r
+  IN CONST CHAR16   *String,\r
   IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo\r
   )\r
 {\r
   CONST CHAR16  *Walker;\r
   CONST CHAR16  *LineStart;\r
+  CHAR16        *StringCopy;\r
   CHAR16        TempChar;\r
 \r
-  for ( Walker = String\r
-      , LineStart = String\r
+  StringCopy = NULL;\r
+  StringCopy = StrnCatGrow(&StringCopy, NULL, String, 0);\r
+  if (StringCopy == NULL) {\r
+    return (EFI_OUT_OF_RESOURCES);\r
+  }\r
+\r
+  for ( Walker = StringCopy\r
+      , LineStart = StringCopy\r
       ; Walker != NULL && *Walker != CHAR_NULL\r
       ; Walker++\r
      ){\r
@@ -713,7 +759,7 @@ ConsoleLoggerPrintWithPageBreak(
       //\r
       // check if that is the last column\r
       //\r
-      if ((INTN)ConsoleInfo->ColsPerScreen == ConsoleInfo->OurConOut.Mode->CursorColumn - 1) {\r
+      if ((INTN)ConsoleInfo->ColsPerScreen == ConsoleInfo->OurConOut.Mode->CursorColumn + 1) {\r
         //\r
         // output a line similar to the linefeed character.\r
         //\r
@@ -737,7 +783,7 @@ ConsoleLoggerPrintWithPageBreak(
         //\r
         // Update LineStart Variable\r
         //\r
-        LineStart = Walker;\r
+        LineStart = Walker + 1;\r
 \r
         //\r
         // increment row count and zero the column\r
@@ -757,6 +803,7 @@ ConsoleLoggerPrintWithPageBreak(
         //\r
         // We got an error which means 'break' and halt the printing\r
         //\r
+        SHELL_FREE_NON_NULL(StringCopy);\r
         return (EFI_DEVICE_ERROR);\r
       }\r
     }\r
@@ -766,6 +813,7 @@ ConsoleLoggerPrintWithPageBreak(
     ConsoleLoggerOutputStringSplit (LineStart, ConsoleInfo);\r
   }\r
 \r
+  SHELL_FREE_NON_NULL(StringCopy);\r
   return (EFI_SUCCESS);\r
 }\r
 \r
@@ -792,9 +840,43 @@ ConsoleLoggerOutputString (
   IN  CHAR16                          *WString\r
   )\r
 {\r
-  CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo;\r
+  EFI_STATUS                        Status;\r
+  EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TxtInEx;\r
+  EFI_KEY_DATA                      KeyData;\r
+  UINTN                             EventIndex;\r
+  CONSOLE_LOGGER_PRIVATE_DATA       *ConsoleInfo;\r
+\r
   ConsoleInfo = CONSOLE_LOGGER_PRIVATE_DATA_FROM_THIS(This);\r
+  if (ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoConsoleOut) {\r
+    return (EFI_UNSUPPORTED);\r
+  }\r
   ASSERT(ShellInfoObject.ConsoleInfo == ConsoleInfo);\r
+\r
+  Status = gBS->HandleProtocol (gST->ConsoleInHandle, &gEfiSimpleTextInputExProtocolGuid, (VOID **) &TxtInEx);\r
+  if (!EFI_ERROR (Status)) {\r
+    while (ShellInfoObject.HaltOutput) {\r
+\r
+      ShellInfoObject.HaltOutput = FALSE;\r
+      //\r
+      // just get some key\r
+      //\r
+      Status = gBS->WaitForEvent (1, &TxtInEx->WaitForKeyEx, &EventIndex);\r
+      ASSERT_EFI_ERROR (Status);\r
+      Status = TxtInEx->ReadKeyStrokeEx (TxtInEx, &KeyData);\r
+      if (EFI_ERROR(Status)) {\r
+        break;\r
+      }\r
+\r
+      if ((KeyData.Key.UnicodeChar == L's') && (KeyData.Key.ScanCode == SCAN_NULL) &&\r
+          ((KeyData.KeyState.KeyShiftState == (EFI_SHIFT_STATE_VALID | EFI_LEFT_CONTROL_PRESSED)) ||\r
+           (KeyData.KeyState.KeyShiftState == (EFI_SHIFT_STATE_VALID | EFI_RIGHT_CONTROL_PRESSED))\r
+          )\r
+         ) {\r
+        ShellInfoObject.HaltOutput = TRUE;\r
+      }\r
+    }\r
+  }\r
+\r
   if (!ShellInfoObject.ConsoleInfo->Enabled) {\r
     return (EFI_DEVICE_ERROR);\r
   } else if (ShellInfoObject.PageBreakEnabled) {\r
@@ -884,8 +966,8 @@ ConsoleLoggerQueryMode (
 EFI_STATUS\r
 EFIAPI\r
 ConsoleLoggerSetMode (\r
-  IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *This,\r
-  IN  UINTN                         ModeNumber\r
+  IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL   *This,\r
+  IN  UINTN                             ModeNumber\r
   )\r
 {\r
   EFI_STATUS                  Status;\r
@@ -902,7 +984,11 @@ ConsoleLoggerSetMode (
   // Check that the buffers are still correct for logging\r
   //\r
   if (!EFI_ERROR (Status)) {\r
+    ConsoleInfo->OurConOut.Mode = ConsoleInfo->OldConOut->Mode;\r
     ConsoleLoggerResetBuffers(ConsoleInfo);\r
+    ConsoleInfo->OriginalStartRow = 0;\r
+    ConsoleInfo->CurrentStartRow = 0;\r
+    ConsoleInfo->OurConOut.ClearScreen (&ConsoleInfo->OurConOut);\r
   }\r
 \r
   return Status;\r
@@ -972,9 +1058,12 @@ ConsoleLoggerClearScreen (
   INT32             *Attributes;\r
   UINTN             Row;\r
   UINTN             Column;\r
+  CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo;\r
 \r
+  if (ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoConsoleOut) {\r
+    return (EFI_UNSUPPORTED);\r
+  }\r
 \r
-  CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo;\r
   ConsoleInfo = CONSOLE_LOGGER_PRIVATE_DATA_FROM_THIS(This);\r
 \r
   //\r
@@ -986,7 +1075,7 @@ ConsoleLoggerClearScreen (
   // Record console output history\r
   //\r
   if (!EFI_ERROR (Status)) {\r
-    Screen = &ConsoleInfo->Buffer[(ConsoleInfo->ColsPerScreen + 1) * ConsoleInfo->CurrentStartRow];\r
+    Screen = &ConsoleInfo->Buffer[(ConsoleInfo->ColsPerScreen + 2) * ConsoleInfo->CurrentStartRow];\r
     Attributes = &ConsoleInfo->Attributes[ConsoleInfo->ColsPerScreen * ConsoleInfo->CurrentStartRow];\r
     for ( Row = ConsoleInfo->OriginalStartRow\r
         ; Row < (ConsoleInfo->RowsPerScreen * ConsoleInfo->ScreenCount)\r
@@ -1004,7 +1093,7 @@ ConsoleLoggerClearScreen (
       //\r
       // Skip the NULL on each column end in text buffer only\r
       //\r
-      Screen++;\r
+      Screen += 2;\r
     }\r
     ConsoleInfo->HistoryMode.CursorColumn = 0;\r
     ConsoleInfo->HistoryMode.CursorRow    = 0;\r
@@ -1035,8 +1124,12 @@ ConsoleLoggerSetCursorPosition (
   )\r
 {\r
   EFI_STATUS                  Status;\r
-\r
   CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo;\r
+\r
+  if (ShellInfoObject.ShellInitSettings.BitUnion.Bits.NoConsoleOut) {\r
+    return (EFI_UNSUPPORTED);\r
+  }\r
+\r
   ConsoleInfo = CONSOLE_LOGGER_PRIVATE_DATA_FROM_THIS(This);\r
   //\r
   // Forward the request to the original ConOut\r
@@ -1106,7 +1199,6 @@ ConsoleLoggerEnableCursor (
   history buffers.\r
 **/\r
 EFI_STATUS\r
-EFIAPI\r
 ConsoleLoggerResetBuffers(\r
   IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo\r
   )\r
@@ -1145,8 +1237,6 @@ ConsoleLoggerResetBuffers(
     return (EFI_OUT_OF_RESOURCES);\r
   }\r
 \r
-  ConsoleInfo->OurConOut.Mode = gST->ConOut->Mode;\r
-  ConsoleInfo->OldConOut = gST->ConOut;\r
   CopyMem (&ConsoleInfo->HistoryMode, ConsoleInfo->OldConOut->Mode, sizeof (EFI_SIMPLE_TEXT_OUTPUT_MODE));\r
 \r
   return (EFI_SUCCESS);\r