mirror of https://github.com/acidanthera/audk.git
342 lines
12 KiB
C
342 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 <Uefi.h>
|
|
|
|
#include <Protocol/SimpleTextOut.h>
|
|
#include <Protocol/EfiShell.h>
|
|
#include <Protocol/EfiShellParameters.h>
|
|
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/BaseLib.h>
|
|
#include <Library/BaseMemoryLib.h>
|
|
#include <Library/MemoryAllocationLib.h>
|
|
#include <Library/UefiBootServicesTableLib.h>
|
|
#include <Library/HiiLib.h>
|
|
#include <Library/ShellLib.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_
|
|
|