Signed-off-by: Tian, Hot <hot.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15160 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			330 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			330 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Provides interface to shell console logger.
 | |
| 
 | |
|   Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
 | |
|   This program and the accompanying materials
 | |
|   are licensed and made available under the terms and conditions of the BSD License
 | |
|   which accompanies this distribution.  The full text of the license may be found at
 | |
|   http://opensource.org/licenses/bsd-license.php
 | |
| 
 | |
|   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
|   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| **/
 | |
| 
 | |
| #ifndef _CONSOLE_LOGGER_HEADER_
 | |
| #define _CONSOLE_LOGGER_HEADER_
 | |
| 
 | |
| #include "Shell.h"
 | |
| 
 | |
| #define CONSOLE_LOGGER_PRIVATE_DATA_SIGNATURE  SIGNATURE_32 ('c', 'o', 'P', 'D')
 | |
| 
 | |
| typedef struct _CONSOLE_LOGGER_PRIVATE_DATA{
 | |
|   UINTN                             Signature;
 | |
|   EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL   OurConOut;        ///< the protocol we installed onto the system table
 | |
|   EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL   *OldConOut;       ///< old protocol to reinstall upon exiting
 | |
|   EFI_HANDLE                        OldConHandle;     ///< old protocol handle
 | |
|   UINTN                             ScreenCount;      ///< How many screens worth of data to save
 | |
|   CHAR16                            *Buffer;          ///< Buffer to save data
 | |
|   UINTN                             BufferSize;       ///< size of buffer in bytes
 | |
| 
 | |
|                                                       //  start row is the top of the screen
 | |
|   UINTN                             OriginalStartRow; ///< What the originally visible start row was
 | |
|   UINTN                             CurrentStartRow;  ///< what the currently visible start row is
 | |
| 
 | |
|   UINTN                             RowsPerScreen;    ///< how many rows the screen can display
 | |
|   UINTN                             ColsPerScreen;    ///< how many columns the screen can display
 | |
| 
 | |
|   INT32                             *Attributes;      ///< Buffer for Attribute to be saved for each character
 | |
|   UINTN                             AttribSize;       ///< Size of Attributes in bytes
 | |
| 
 | |
|   EFI_SIMPLE_TEXT_OUTPUT_MODE       HistoryMode;      ///< mode of the history log
 | |
|   BOOLEAN                           Enabled;          ///< Set to FALSE when a break is requested.
 | |
|   UINTN                             RowCounter;       ///< Initial row of each print job.
 | |
| } CONSOLE_LOGGER_PRIVATE_DATA;
 | |
| 
 | |
| #define CONSOLE_LOGGER_PRIVATE_DATA_FROM_THIS(a) CR (a, CONSOLE_LOGGER_PRIVATE_DATA, OurConOut, CONSOLE_LOGGER_PRIVATE_DATA_SIGNATURE)
 | |
| 
 | |
| /**
 | |
|   Install our intermediate ConOut into the system table to
 | |
|   keep a log of all the info that is displayed to the user.
 | |
| 
 | |
|   @param[in] ScreensToSave  Sets how many screen-worths of data to save.
 | |
|   @param[out] ConsoleInfo   The object to pass into later functions.
 | |
| 
 | |
|   @retval EFI_SUCCESS       The operation was successful.
 | |
|   @return other             The operation failed.
 | |
| 
 | |
|   @sa ConsoleLoggerResetBuffers
 | |
|   @sa InstallProtocolInterface
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConsoleLoggerInstall(
 | |
|   IN CONST UINTN ScreensToSave,
 | |
|   OUT CONSOLE_LOGGER_PRIVATE_DATA **ConsoleInfo
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Return the system to the state it was before InstallConsoleLogger
 | |
|   was installed.
 | |
| 
 | |
|   @param[in, out] ConsoleInfo   The object from the install function.
 | |
| 
 | |
|   @retval EFI_SUCCESS     The operation was successful
 | |
|   @return other           The operation failed.  This was from UninstallProtocolInterface.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConsoleLoggerUninstall(
 | |
|   IN OUT CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Displays previously logged output back to the screen.
 | |
| 
 | |
|   This will scroll the screen forwards and backwards through the log of previous
 | |
|   output.  If Rows is 0 then the size of 1/2 the screen will be scrolled.  If Rows
 | |
|   is (UINTN)(-1) then the size of the screen will be scrolled.
 | |
| 
 | |
|   @param[in] Forward      If TRUE then the log will be displayed forwards (scroll to newer).
 | |
|                           If FALSE then the log will be displayed backwards (scroll to older).
 | |
|   @param[in] Rows         Determines how many rows the log should scroll.
 | |
|   @param[in] ConsoleInfo  The pointer to the instance of the console logger information.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConsoleLoggerDisplayHistory(
 | |
|   IN CONST BOOLEAN  Forward,
 | |
|   IN CONST UINTN    Rows,
 | |
|   IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Function to return to normal output whent he scrolling is complete.
 | |
|   @param[in] ConsoleInfo  The pointer to the instance of the console logger information.
 | |
| 
 | |
|   @retval EFI_SUCCESS   The operation was successful.
 | |
|   @return other         The operation failed.  See UpdateDisplayFromHistory.
 | |
| 
 | |
|   @sa UpdateDisplayFromHistory
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConsoleLoggerStopHistory(
 | |
|   IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Updates the hidden ConOut to be displaying the correct stuff.
 | |
|   @param[in] ConsoleInfo  The pointer to the instance of the console logger information.
 | |
| 
 | |
|   @retval EFI_SUCCESS     The operation was successful.
 | |
|   @return other           The operation failed.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| UpdateDisplayFromHistory(
 | |
|   IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Reset the text output device hardware and optionaly run diagnostics
 | |
| 
 | |
|   @param This                 Pointer to EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
 | |
|   @param ExtendedVerification Indicates that a more extensive test may be performed
 | |
| 
 | |
|   @retval EFI_SUCCESS         The text output device was reset.
 | |
|   @retval EFI_DEVICE_ERROR    The text output device is not functioning correctly and
 | |
|                               could not be reset.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConsoleLoggerReset (
 | |
|   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
 | |
|   IN  BOOLEAN                         ExtendedVerification
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Write a Unicode string to the output device.
 | |
| 
 | |
|   @param[in] This                 Protocol instance pointer.
 | |
|   @param[in] WString              The NULL-terminated Unicode string to be displayed on the output
 | |
|                                   device(s). All output devices must also support the Unicode
 | |
|                                   drawing defined in this file.
 | |
|   @retval EFI_SUCCESS             The string was output to the device.
 | |
|   @retval EFI_DEVICE_ERROR        The device reported an error while attempting to output
 | |
|                                   the text.
 | |
|   @retval EFI_UNSUPPORTED         The output device's mode is not currently in a
 | |
|                                   defined text mode.
 | |
|   @retval EFI_WARN_UNKNOWN_GLYPH  This warning code indicates that some of the
 | |
|                                   characters in the Unicode string could not be
 | |
|                                   rendered and were skipped.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConsoleLoggerOutputString(
 | |
|   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
 | |
|   IN  CHAR16                          *WString
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Verifies that all characters in a Unicode string can be output to the
 | |
|   target device.
 | |
| 
 | |
|   @param[in] This     Protocol instance pointer.
 | |
|   @param[in] WString  The NULL-terminated Unicode string to be examined for the output
 | |
|                       device(s).
 | |
| 
 | |
|   @retval EFI_SUCCESS           The device(s) are capable of rendering the output string.
 | |
|   @retval EFI_UNSUPPORTED       Some of the characters in the Unicode string cannot be
 | |
|                                 rendered by one or more of the output devices mapped
 | |
|                                 by the EFI handle.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConsoleLoggerTestString (
 | |
|   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
 | |
|   IN  CHAR16                          *WString
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Returns information for an available text mode that the output device(s)
 | |
|   supports.
 | |
| 
 | |
|   @param[in] This               Protocol instance pointer.
 | |
|   @param[in] ModeNumber         The mode number to return information on.
 | |
|   @param[out] Columns           Upon return, the number of columns in the selected geometry
 | |
|   @param[out] Rows              Upon return, the number of rows in the selected geometry
 | |
| 
 | |
|   @retval EFI_SUCCESS           The requested mode information was returned.
 | |
|   @retval EFI_DEVICE_ERROR      The device had an error and could not
 | |
|                                 complete the request.
 | |
|   @retval EFI_UNSUPPORTED       The mode number was not valid.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConsoleLoggerQueryMode (
 | |
|   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *This,
 | |
|   IN  UINTN                            ModeNumber,
 | |
|   OUT UINTN                            *Columns,
 | |
|   OUT UINTN                            *Rows
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Sets the output device(s) to a specified mode.
 | |
| 
 | |
|   @param[in] This               Protocol instance pointer.
 | |
|   @param[in] ModeNumber         The mode number to set.
 | |
| 
 | |
| 
 | |
|   @retval EFI_SUCCESS           The requested text mode was set.
 | |
|   @retval EFI_DEVICE_ERROR      The device had an error and
 | |
|                                 could not complete the request.
 | |
|   @retval EFI_UNSUPPORTED       The mode number was not valid.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConsoleLoggerSetMode (
 | |
|   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *This,
 | |
|   IN  UINTN                            ModeNumber
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Sets the background and foreground colors for the OutputString () and
 | |
|   ClearScreen () functions.
 | |
| 
 | |
|   @param[in] This               Protocol instance pointer.
 | |
|   @param[in] Attribute          The attribute to set. Bits 0..3 are the foreground color, and
 | |
|                                 bits 4..6 are the background color. All other bits are undefined
 | |
|                                 and must be zero. The valid Attributes are defined in this file.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The attribute was set.
 | |
|   @retval EFI_DEVICE_ERROR      The device had an error and
 | |
|                                 could not complete the request.
 | |
|   @retval EFI_UNSUPPORTED       The attribute requested is not defined.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConsoleLoggerSetAttribute (
 | |
|   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
 | |
|   IN  UINTN                           Attribute
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Clears the output device(s) display to the currently selected background
 | |
|   color.
 | |
| 
 | |
|   @param[in] This               Protocol instance pointer.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The operation completed successfully.
 | |
|   @retval EFI_DEVICE_ERROR      The device had an error and
 | |
|                                 could not complete the request.
 | |
|   @retval EFI_UNSUPPORTED       The output device is not in a valid text mode.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConsoleLoggerClearScreen (
 | |
|   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *This
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Sets the current coordinates of the cursor position.
 | |
| 
 | |
|   @param[in] This               Protocol instance pointer.
 | |
|   @param[in] Column             Column to put the cursor in.  Must be between zero and Column returned from QueryMode
 | |
|   @param[in] Row                Row to put the cursor in.  Must be between zero and Row returned from QueryMode
 | |
| 
 | |
|   @retval EFI_SUCCESS           The operation completed successfully.
 | |
|   @retval EFI_DEVICE_ERROR      The device had an error and
 | |
|                                 could not complete the request.
 | |
|   @retval EFI_UNSUPPORTED       The output device is not in a valid text mode, or the
 | |
|                                 cursor position is invalid for the current mode.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConsoleLoggerSetCursorPosition (
 | |
|   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *This,
 | |
|   IN  UINTN                         Column,
 | |
|   IN  UINTN                         Row
 | |
|   );
 | |
| 
 | |
| /**
 | |
|     Makes the cursor visible or invisible
 | |
| 
 | |
|   @param[in] This       Protocol instance pointer.
 | |
|   @param[in] Visible    If TRUE, the cursor is set to be visible. If FALSE, the cursor is
 | |
|                         set to be invisible.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The operation completed successfully.
 | |
|   @retval EFI_DEVICE_ERROR      The device had an error and could not complete the
 | |
|                                 request, or the device does not support changing
 | |
|                                 the cursor mode.
 | |
|   @retval EFI_UNSUPPORTED       The output device is not in a valid text mode.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConsoleLoggerEnableCursor (
 | |
|   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *This,
 | |
|   IN  BOOLEAN                          Visible
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Function to update and verify that the current buffers are correct.
 | |
| 
 | |
|   @param[in] ConsoleInfo  The pointer to the instance of the console logger information.
 | |
| 
 | |
|   This will be used when a mode has changed or a reset ocurred to verify all
 | |
|   history buffers.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ConsoleLoggerResetBuffers(
 | |
|   IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
 | |
|   );
 | |
| 
 | |
| #endif //_CONSOLE_LOGGER_HEADER_
 | |
| 
 |