| /** @file | |
| Provides interface to shell console logger. | |
| Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| UpdateDisplayFromHistory ( | |
| IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo | |
| ); | |
| /** | |
| Reset the text output device hardware and optionally 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 occurred to verify all | |
| history buffers. | |
| **/ | |
| EFI_STATUS | |
| ConsoleLoggerResetBuffers ( | |
| IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo | |
| ); | |
| #endif //_CONSOLE_LOGGER_HEADER_ |