Home | History | Annotate | Download | only in Shell
      1 /** @file
      2   Provides interface to shell console logger.
      3 
      4   Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
      5   This program and the accompanying materials
      6   are licensed and made available under the terms and conditions of the BSD License
      7   which accompanies this distribution.  The full text of the license may be found at
      8   http://opensource.org/licenses/bsd-license.php
      9 
     10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 **/
     13 
     14 #ifndef _CONSOLE_LOGGER_HEADER_
     15 #define _CONSOLE_LOGGER_HEADER_
     16 
     17 #include "Shell.h"
     18 
     19 #define CONSOLE_LOGGER_PRIVATE_DATA_SIGNATURE  SIGNATURE_32 ('c', 'o', 'P', 'D')
     20 
     21 typedef struct _CONSOLE_LOGGER_PRIVATE_DATA{
     22   UINTN                             Signature;
     23   EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL   OurConOut;        ///< the protocol we installed onto the system table
     24   EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL   *OldConOut;       ///< old protocol to reinstall upon exiting
     25   EFI_HANDLE                        OldConHandle;     ///< old protocol handle
     26   UINTN                             ScreenCount;      ///< How many screens worth of data to save
     27   CHAR16                            *Buffer;          ///< Buffer to save data
     28   UINTN                             BufferSize;       ///< size of buffer in bytes
     29 
     30                                                       //  start row is the top of the screen
     31   UINTN                             OriginalStartRow; ///< What the originally visible start row was
     32   UINTN                             CurrentStartRow;  ///< what the currently visible start row is
     33 
     34   UINTN                             RowsPerScreen;    ///< how many rows the screen can display
     35   UINTN                             ColsPerScreen;    ///< how many columns the screen can display
     36 
     37   INT32                             *Attributes;      ///< Buffer for Attribute to be saved for each character
     38   UINTN                             AttribSize;       ///< Size of Attributes in bytes
     39 
     40   EFI_SIMPLE_TEXT_OUTPUT_MODE       HistoryMode;      ///< mode of the history log
     41   BOOLEAN                           Enabled;          ///< Set to FALSE when a break is requested.
     42   UINTN                             RowCounter;       ///< Initial row of each print job.
     43 } CONSOLE_LOGGER_PRIVATE_DATA;
     44 
     45 #define CONSOLE_LOGGER_PRIVATE_DATA_FROM_THIS(a) CR (a, CONSOLE_LOGGER_PRIVATE_DATA, OurConOut, CONSOLE_LOGGER_PRIVATE_DATA_SIGNATURE)
     46 
     47 /**
     48   Install our intermediate ConOut into the system table to
     49   keep a log of all the info that is displayed to the user.
     50 
     51   @param[in] ScreensToSave  Sets how many screen-worths of data to save.
     52   @param[out] ConsoleInfo   The object to pass into later functions.
     53 
     54   @retval EFI_SUCCESS       The operation was successful.
     55   @return other             The operation failed.
     56 
     57   @sa ConsoleLoggerResetBuffers
     58   @sa InstallProtocolInterface
     59 **/
     60 EFI_STATUS
     61 EFIAPI
     62 ConsoleLoggerInstall(
     63   IN CONST UINTN ScreensToSave,
     64   OUT CONSOLE_LOGGER_PRIVATE_DATA **ConsoleInfo
     65   );
     66 
     67 /**
     68   Return the system to the state it was before InstallConsoleLogger
     69   was installed.
     70 
     71   @param[in, out] ConsoleInfo   The object from the install function.
     72 
     73   @retval EFI_SUCCESS     The operation was successful
     74   @return other           The operation failed.  This was from UninstallProtocolInterface.
     75 **/
     76 EFI_STATUS
     77 EFIAPI
     78 ConsoleLoggerUninstall(
     79   IN OUT CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
     80   );
     81 
     82 /**
     83   Displays previously logged output back to the screen.
     84 
     85   This will scroll the screen forwards and backwards through the log of previous
     86   output.  If Rows is 0 then the size of 1/2 the screen will be scrolled.  If Rows
     87   is (UINTN)(-1) then the size of the screen will be scrolled.
     88 
     89   @param[in] Forward      If TRUE then the log will be displayed forwards (scroll to newer).
     90                           If FALSE then the log will be displayed backwards (scroll to older).
     91   @param[in] Rows         Determines how many rows the log should scroll.
     92   @param[in] ConsoleInfo  The pointer to the instance of the console logger information.
     93 **/
     94 EFI_STATUS
     95 EFIAPI
     96 ConsoleLoggerDisplayHistory(
     97   IN CONST BOOLEAN  Forward,
     98   IN CONST UINTN    Rows,
     99   IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
    100   );
    101 
    102 /**
    103   Function to return to normal output whent he scrolling is complete.
    104   @param[in] ConsoleInfo  The pointer to the instance of the console logger information.
    105 
    106   @retval EFI_SUCCESS   The operation was successful.
    107   @return other         The operation failed.  See UpdateDisplayFromHistory.
    108 
    109   @sa UpdateDisplayFromHistory
    110 **/
    111 EFI_STATUS
    112 EFIAPI
    113 ConsoleLoggerStopHistory(
    114   IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
    115   );
    116 
    117 /**
    118   Updates the hidden ConOut to be displaying the correct stuff.
    119   @param[in] ConsoleInfo  The pointer to the instance of the console logger information.
    120 
    121   @retval EFI_SUCCESS     The operation was successful.
    122   @return other           The operation failed.
    123 **/
    124 EFI_STATUS
    125 EFIAPI
    126 UpdateDisplayFromHistory(
    127   IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
    128   );
    129 
    130 /**
    131   Reset the text output device hardware and optionaly run diagnostics
    132 
    133   @param This                 Pointer to EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
    134   @param ExtendedVerification Indicates that a more extensive test may be performed
    135 
    136   @retval EFI_SUCCESS         The text output device was reset.
    137   @retval EFI_DEVICE_ERROR    The text output device is not functioning correctly and
    138                               could not be reset.
    139 **/
    140 EFI_STATUS
    141 EFIAPI
    142 ConsoleLoggerReset (
    143   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
    144   IN  BOOLEAN                         ExtendedVerification
    145   );
    146 
    147 /**
    148   Write a Unicode string to the output device.
    149 
    150   @param[in] This                 Protocol instance pointer.
    151   @param[in] WString              The NULL-terminated Unicode string to be displayed on the output
    152                                   device(s). All output devices must also support the Unicode
    153                                   drawing defined in this file.
    154   @retval EFI_SUCCESS             The string was output to the device.
    155   @retval EFI_DEVICE_ERROR        The device reported an error while attempting to output
    156                                   the text.
    157   @retval EFI_UNSUPPORTED         The output device's mode is not currently in a
    158                                   defined text mode.
    159   @retval EFI_WARN_UNKNOWN_GLYPH  This warning code indicates that some of the
    160                                   characters in the Unicode string could not be
    161                                   rendered and were skipped.
    162 **/
    163 EFI_STATUS
    164 EFIAPI
    165 ConsoleLoggerOutputString(
    166   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
    167   IN  CHAR16                          *WString
    168   );
    169 
    170 /**
    171   Verifies that all characters in a Unicode string can be output to the
    172   target device.
    173 
    174   @param[in] This     Protocol instance pointer.
    175   @param[in] WString  The NULL-terminated Unicode string to be examined for the output
    176                       device(s).
    177 
    178   @retval EFI_SUCCESS           The device(s) are capable of rendering the output string.
    179   @retval EFI_UNSUPPORTED       Some of the characters in the Unicode string cannot be
    180                                 rendered by one or more of the output devices mapped
    181                                 by the EFI handle.
    182 
    183 **/
    184 EFI_STATUS
    185 EFIAPI
    186 ConsoleLoggerTestString (
    187   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
    188   IN  CHAR16                          *WString
    189   );
    190 
    191 /**
    192   Returns information for an available text mode that the output device(s)
    193   supports.
    194 
    195   @param[in] This               Protocol instance pointer.
    196   @param[in] ModeNumber         The mode number to return information on.
    197   @param[out] Columns           Upon return, the number of columns in the selected geometry
    198   @param[out] Rows              Upon return, the number of rows in the selected geometry
    199 
    200   @retval EFI_SUCCESS           The requested mode information was returned.
    201   @retval EFI_DEVICE_ERROR      The device had an error and could not
    202                                 complete the request.
    203   @retval EFI_UNSUPPORTED       The mode number was not valid.
    204 **/
    205 EFI_STATUS
    206 EFIAPI
    207 ConsoleLoggerQueryMode (
    208   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *This,
    209   IN  UINTN                            ModeNumber,
    210   OUT UINTN                            *Columns,
    211   OUT UINTN                            *Rows
    212   );
    213 
    214 /**
    215   Sets the output device(s) to a specified mode.
    216 
    217   @param[in] This               Protocol instance pointer.
    218   @param[in] ModeNumber         The mode number to set.
    219 
    220 
    221   @retval EFI_SUCCESS           The requested text mode was set.
    222   @retval EFI_DEVICE_ERROR      The device had an error and
    223                                 could not complete the request.
    224   @retval EFI_UNSUPPORTED       The mode number was not valid.
    225 **/
    226 EFI_STATUS
    227 EFIAPI
    228 ConsoleLoggerSetMode (
    229   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *This,
    230   IN  UINTN                            ModeNumber
    231   );
    232 
    233 /**
    234   Sets the background and foreground colors for the OutputString () and
    235   ClearScreen () functions.
    236 
    237   @param[in] This               Protocol instance pointer.
    238   @param[in] Attribute          The attribute to set. Bits 0..3 are the foreground color, and
    239                                 bits 4..6 are the background color. All other bits are undefined
    240                                 and must be zero. The valid Attributes are defined in this file.
    241 
    242   @retval EFI_SUCCESS           The attribute was set.
    243   @retval EFI_DEVICE_ERROR      The device had an error and
    244                                 could not complete the request.
    245   @retval EFI_UNSUPPORTED       The attribute requested is not defined.
    246 
    247 **/
    248 EFI_STATUS
    249 EFIAPI
    250 ConsoleLoggerSetAttribute (
    251   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
    252   IN  UINTN                           Attribute
    253   );
    254 
    255 /**
    256   Clears the output device(s) display to the currently selected background
    257   color.
    258 
    259   @param[in] This               Protocol instance pointer.
    260 
    261   @retval EFI_SUCCESS           The operation completed successfully.
    262   @retval EFI_DEVICE_ERROR      The device had an error and
    263                                 could not complete the request.
    264   @retval EFI_UNSUPPORTED       The output device is not in a valid text mode.
    265 **/
    266 EFI_STATUS
    267 EFIAPI
    268 ConsoleLoggerClearScreen (
    269   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *This
    270   );
    271 
    272 /**
    273   Sets the current coordinates of the cursor position.
    274 
    275   @param[in] This               Protocol instance pointer.
    276   @param[in] Column             Column to put the cursor in.  Must be between zero and Column returned from QueryMode
    277   @param[in] Row                Row to put the cursor in.  Must be between zero and Row returned from QueryMode
    278 
    279   @retval EFI_SUCCESS           The operation completed successfully.
    280   @retval EFI_DEVICE_ERROR      The device had an error and
    281                                 could not complete the request.
    282   @retval EFI_UNSUPPORTED       The output device is not in a valid text mode, or the
    283                                 cursor position is invalid for the current mode.
    284 **/
    285 EFI_STATUS
    286 EFIAPI
    287 ConsoleLoggerSetCursorPosition (
    288   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *This,
    289   IN  UINTN                         Column,
    290   IN  UINTN                         Row
    291   );
    292 
    293 /**
    294     Makes the cursor visible or invisible
    295 
    296   @param[in] This       Protocol instance pointer.
    297   @param[in] Visible    If TRUE, the cursor is set to be visible. If FALSE, the cursor is
    298                         set to be invisible.
    299 
    300   @retval EFI_SUCCESS           The operation completed successfully.
    301   @retval EFI_DEVICE_ERROR      The device had an error and could not complete the
    302                                 request, or the device does not support changing
    303                                 the cursor mode.
    304   @retval EFI_UNSUPPORTED       The output device is not in a valid text mode.
    305 
    306 **/
    307 EFI_STATUS
    308 EFIAPI
    309 ConsoleLoggerEnableCursor (
    310   IN  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *This,
    311   IN  BOOLEAN                          Visible
    312   );
    313 
    314 /**
    315   Function to update and verify that the current buffers are correct.
    316 
    317   @param[in] ConsoleInfo  The pointer to the instance of the console logger information.
    318 
    319   This will be used when a mode has changed or a reset ocurred to verify all
    320   history buffers.
    321 **/
    322 EFI_STATUS
    323 EFIAPI
    324 ConsoleLoggerResetBuffers(
    325   IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
    326   );
    327 
    328 #endif //_CONSOLE_LOGGER_HEADER_
    329 
    330