/** @file | |
Header file for GraphicsConsole driver. | |
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef _GRAPHICS_CONSOLE_H_ | |
#define _GRAPHICS_CONSOLE_H_ | |
#include <Uefi.h> | |
#include <Protocol/SimpleTextOut.h> | |
#include <Protocol/GraphicsOutput.h> | |
#include <Protocol/UgaDraw.h> | |
#include <Protocol/DevicePath.h> | |
#include <Library/DebugLib.h> | |
#include <Library/UefiDriverEntryPoint.h> | |
#include <Library/UefiLib.h> | |
#include <Library/BaseMemoryLib.h> | |
#include <Library/MemoryAllocationLib.h> | |
#include <Library/UefiBootServicesTableLib.h> | |
#include <Library/HiiLib.h> | |
#include <Library/BaseLib.h> | |
#include <Library/PcdLib.h> | |
#include <Guid/MdeModuleHii.h> | |
#include <Protocol/HiiFont.h> | |
#include <Protocol/HiiDatabase.h> | |
extern EFI_COMPONENT_NAME_PROTOCOL gGraphicsConsoleComponentName; | |
extern EFI_COMPONENT_NAME2_PROTOCOL gGraphicsConsoleComponentName2; | |
extern EFI_DRIVER_BINDING_PROTOCOL gGraphicsConsoleDriverBinding; | |
extern EFI_NARROW_GLYPH gUsStdNarrowGlyphData[]; | |
extern UINT32 mNarrowFontSize; | |
typedef union { | |
EFI_NARROW_GLYPH NarrowGlyph; | |
EFI_WIDE_GLYPH WideGlyph; | |
} GLYPH_UNION; | |
// | |
// Device Structure | |
// | |
#define GRAPHICS_CONSOLE_DEV_SIGNATURE SIGNATURE_32 ('g', 's', 't', 'o') | |
typedef struct { | |
UINTN Columns; | |
UINTN Rows; | |
INTN DeltaX; | |
INTN DeltaY; | |
UINT32 GopWidth; | |
UINT32 GopHeight; | |
UINT32 GopModeNumber; | |
} GRAPHICS_CONSOLE_MODE_DATA; | |
typedef struct { | |
UINTN Signature; | |
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; | |
EFI_UGA_DRAW_PROTOCOL *UgaDraw; | |
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL SimpleTextOutput; | |
EFI_SIMPLE_TEXT_OUTPUT_MODE SimpleTextOutputMode; | |
GRAPHICS_CONSOLE_MODE_DATA *ModeData; | |
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *LineBuffer; | |
} GRAPHICS_CONSOLE_DEV; | |
#define GRAPHICS_CONSOLE_CON_OUT_DEV_FROM_THIS(a) \ | |
CR (a, GRAPHICS_CONSOLE_DEV, SimpleTextOutput, GRAPHICS_CONSOLE_DEV_SIGNATURE) | |
// | |
// EFI Component Name Functions | |
// | |
/** | |
Retrieves a Unicode string that is the user readable name of the driver. | |
This function retrieves the user readable name of a driver in the form of a | |
Unicode string. If the driver specified by This has a user readable name in | |
the language specified by Language, then a pointer to the driver name is | |
returned in DriverName, and EFI_SUCCESS is returned. If the driver specified | |
by This does not support the language specified by Language, | |
then EFI_UNSUPPORTED is returned. | |
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or | |
EFI_COMPONENT_NAME_PROTOCOL instance. | |
@param Language[in] A pointer to a Null-terminated ASCII string | |
array indicating the language. This is the | |
language of the driver name that the caller is | |
requesting, and it must match one of the | |
languages specified in SupportedLanguages. The | |
number of languages supported by a driver is up | |
to the driver writer. Language is specified | |
in RFC 4646 or ISO 639-2 language code format. | |
@param DriverName[out] A pointer to the Unicode string to return. | |
This Unicode string is the name of the | |
driver specified by This in the language | |
specified by Language. | |
@retval EFI_SUCCESS The Unicode string for the Driver specified by | |
This and the language specified by Language was | |
returned in DriverName. | |
@retval EFI_INVALID_PARAMETER Language is NULL. | |
@retval EFI_INVALID_PARAMETER DriverName is NULL. | |
@retval EFI_UNSUPPORTED The driver specified by This does not support | |
the language specified by Language. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
GraphicsConsoleComponentNameGetDriverName ( | |
IN EFI_COMPONENT_NAME_PROTOCOL *This, | |
IN CHAR8 *Language, | |
OUT CHAR16 **DriverName | |
); | |
/** | |
Retrieves a Unicode string that is the user readable name of the controller | |
that is being managed by a driver. | |
This function retrieves the user readable name of the controller specified by | |
ControllerHandle and ChildHandle in the form of a Unicode string. If the | |
driver specified by This has a user readable name in the language specified by | |
Language, then a pointer to the controller name is returned in ControllerName, | |
and EFI_SUCCESS is returned. If the driver specified by This is not currently | |
managing the controller specified by ControllerHandle and ChildHandle, | |
then EFI_UNSUPPORTED is returned. If the driver specified by This does not | |
support the language specified by Language, then EFI_UNSUPPORTED is returned. | |
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or | |
EFI_COMPONENT_NAME_PROTOCOL instance. | |
@param ControllerHandle[in] The handle of a controller that the driver | |
specified by This is managing. This handle | |
specifies the controller whose name is to be | |
returned. | |
@param ChildHandle[in] The handle of the child controller to retrieve | |
the name of. This is an optional parameter that | |
may be NULL. It will be NULL for device | |
drivers. It will also be NULL for a bus drivers | |
that wish to retrieve the name of the bus | |
controller. It will not be NULL for a bus | |
driver that wishes to retrieve the name of a | |
child controller. | |
@param Language[in] A pointer to a Null-terminated ASCII string | |
array indicating the language. This is the | |
language of the driver name that the caller is | |
requesting, and it must match one of the | |
languages specified in SupportedLanguages. The | |
number of languages supported by a driver is up | |
to the driver writer. Language is specified in | |
RFC 4646 or ISO 639-2 language code format. | |
@param ControllerName[out] A pointer to the Unicode string to return. | |
This Unicode string is the name of the | |
controller specified by ControllerHandle and | |
ChildHandle in the language specified by | |
Language from the point of view of the driver | |
specified by This. | |
@retval EFI_SUCCESS The Unicode string for the user readable name in | |
the language specified by Language for the | |
driver specified by This was returned in | |
DriverName. | |
@retval EFI_INVALID_PARAMETER ControllerHandle is NULL. | |
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid | |
EFI_HANDLE. | |
@retval EFI_INVALID_PARAMETER Language is NULL. | |
@retval EFI_INVALID_PARAMETER ControllerName is NULL. | |
@retval EFI_UNSUPPORTED The driver specified by This is not currently | |
managing the controller specified by | |
ControllerHandle and ChildHandle. | |
@retval EFI_UNSUPPORTED The driver specified by This does not support | |
the language specified by Language. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
GraphicsConsoleComponentNameGetControllerName ( | |
IN EFI_COMPONENT_NAME_PROTOCOL *This, | |
IN EFI_HANDLE ControllerHandle, | |
IN EFI_HANDLE ChildHandle OPTIONAL, | |
IN CHAR8 *Language, | |
OUT CHAR16 **ControllerName | |
); | |
/** | |
Reset the text output device hardware and optionally run diagnostics. | |
Implements SIMPLE_TEXT_OUTPUT.Reset(). | |
If ExtendedVerification is TRUE, then perform dependent Graphics Console | |
device reset, and set display mode to mode 0. | |
If ExtendedVerification is FALSE, only set display mode to mode 0. | |
@param This Protocol instance pointer. | |
@param ExtendedVerification Indicates that the driver may perform a more | |
exhaustive verification operation of the device | |
during reset. | |
@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 | |
GraphicsConsoleConOutReset ( | |
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, | |
IN BOOLEAN ExtendedVerification | |
); | |
/** | |
Write a Unicode string to the output device. | |
Implements SIMPLE_TEXT_OUTPUT.OutputString(). | |
The Unicode string will be converted to Glyphs and will be | |
sent to the Graphics Console. | |
@param This Protocol instance pointer. | |
@param 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 | |
GraphicsConsoleConOutOutputString ( | |
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. | |
Implements SIMPLE_TEXT_OUTPUT.TestString(). | |
If one of the characters in the *Wstring is neither valid valid Unicode | |
drawing characters, not ASCII code, then this function will return | |
EFI_UNSUPPORTED | |
@param This Protocol instance pointer. | |
@param 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 | |
GraphicsConsoleConOutTestString ( | |
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, | |
IN CHAR16 *WString | |
); | |
/** | |
Returns information for an available text mode that the output device(s) | |
supports | |
Implements SIMPLE_TEXT_OUTPUT.QueryMode(). | |
It returns information for an available text mode that the Graphics Console supports. | |
In this driver,we only support text mode 80x25, which is defined as mode 0. | |
@param This Protocol instance pointer. | |
@param ModeNumber The mode number to return information on. | |
@param Columns The returned columns of the requested mode. | |
@param Rows The returned rows of the requested mode. | |
@retval EFI_SUCCESS The requested mode information is returned. | |
@retval EFI_UNSUPPORTED The mode number is not valid. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
GraphicsConsoleConOutQueryMode ( | |
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. | |
Implements SIMPLE_TEXT_OUTPUT.SetMode(). | |
Set the Graphics Console to a specified mode. In this driver, we only support mode 0. | |
@param This Protocol instance pointer. | |
@param ModeNumber The text mode to set. | |
@retval EFI_SUCCESS The requested text mode is set. | |
@retval EFI_DEVICE_ERROR The requested text mode cannot be set because of | |
Graphics Console device error. | |
@retval EFI_UNSUPPORTED The text mode number is not valid. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
GraphicsConsoleConOutSetMode ( | |
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, | |
IN UINTN ModeNumber | |
); | |
/** | |
Sets the background and foreground colors for the OutputString () and | |
ClearScreen () functions. | |
Implements SIMPLE_TEXT_OUTPUT.SetAttribute(). | |
@param This Protocol instance pointer. | |
@param 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. | |
@retval EFI_SUCCESS The requested attribute is set. | |
@retval EFI_DEVICE_ERROR The requested attribute cannot be set due to Graphics Console port error. | |
@retval EFI_UNSUPPORTED The attribute requested is not defined. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
GraphicsConsoleConOutSetAttribute ( | |
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, | |
IN UINTN Attribute | |
); | |
/** | |
Clears the output device(s) display to the currently selected background | |
color. | |
Implements SIMPLE_TEXT_OUTPUT.ClearScreen(). | |
@param 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 | |
GraphicsConsoleConOutClearScreen ( | |
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This | |
); | |
/** | |
Sets the current coordinates of the cursor position. | |
Implements SIMPLE_TEXT_OUTPUT.SetCursorPosition(). | |
@param This Protocol instance pointer. | |
@param Column The position to set the cursor to. Must be greater than or | |
equal to zero and less than the number of columns and rows | |
by QueryMode (). | |
@param Row The position to set the cursor to. Must be greater than or | |
equal to zero and less than the number of columns and rows | |
by 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 | |
GraphicsConsoleConOutSetCursorPosition ( | |
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, | |
IN UINTN Column, | |
IN UINTN Row | |
); | |
/** | |
Makes the cursor visible or invisible. | |
Implements SIMPLE_TEXT_OUTPUT.EnableCursor(). | |
@param This Protocol instance pointer. | |
@param 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. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
GraphicsConsoleConOutEnableCursor ( | |
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, | |
IN BOOLEAN Visible | |
); | |
/** | |
Test to see if Graphics Console could be supported on the Controller. | |
Graphics Console could be supported if Graphics Output Protocol or UGADraw | |
Protocol exists on the Controller. (UGA Draw Protocol could be skipped | |
if PcdUgaConsumeSupport is set to FALSE.) | |
@param This Protocol instance pointer. | |
@param Controller Handle of device to test. | |
@param RemainingDevicePath Optional parameter use to pick a specific child | |
device to start. | |
@retval EFI_SUCCESS This driver supports this device. | |
@retval other This driver does not support this device. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
GraphicsConsoleControllerDriverSupported ( | |
IN EFI_DRIVER_BINDING_PROTOCOL *This, | |
IN EFI_HANDLE Controller, | |
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath | |
); | |
/** | |
Start this driver on Controller by opening Graphics Output protocol or | |
UGA Draw protocol, and installing Simple Text Out protocol on Controller. | |
(UGA Draw protocol could be skipped if PcdUgaConsumeSupport is set to FALSE.) | |
@param This Protocol instance pointer. | |
@param Controller Handle of device to bind driver to | |
@param RemainingDevicePath Optional parameter use to pick a specific child | |
device to start. | |
@retval EFI_SUCCESS This driver is added to Controller. | |
@retval other This driver does not support this device. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
GraphicsConsoleControllerDriverStart ( | |
IN EFI_DRIVER_BINDING_PROTOCOL *This, | |
IN EFI_HANDLE Controller, | |
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath | |
); | |
/** | |
Stop this driver on Controller by removing Simple Text Out protocol | |
and closing the Graphics Output Protocol or UGA Draw protocol on Controller. | |
(UGA Draw protocol could be skipped if PcdUgaConsumeSupport is set to FALSE.) | |
@param This Protocol instance pointer. | |
@param Controller Handle of device to stop driver on | |
@param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of | |
children is zero stop the entire bus driver. | |
@param ChildHandleBuffer List of Child Handles to Stop. | |
@retval EFI_SUCCESS This driver is removed Controller. | |
@retval EFI_NOT_STARTED Simple Text Out protocol could not be found the | |
Controller. | |
@retval other This driver was not removed from this device. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
GraphicsConsoleControllerDriverStop ( | |
IN EFI_DRIVER_BINDING_PROTOCOL *This, | |
IN EFI_HANDLE Controller, | |
IN UINTN NumberOfChildren, | |
IN EFI_HANDLE *ChildHandleBuffer | |
); | |
/** | |
Locate HII Database protocol and HII Font protocol. | |
@retval EFI_SUCCESS HII Database protocol and HII Font protocol | |
are located successfully. | |
@return other Failed to locate HII Database protocol or | |
HII Font protocol. | |
**/ | |
EFI_STATUS | |
EfiLocateHiiProtocol ( | |
VOID | |
); | |
/** | |
Gets Graphics Console device's foreground color and background color. | |
@param This Protocol instance pointer. | |
@param Foreground Returned text foreground color. | |
@param Background Returned text background color. | |
@retval EFI_SUCCESS It returned always. | |
**/ | |
EFI_STATUS | |
GetTextColors ( | |
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, | |
OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Foreground, | |
OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Background | |
); | |
/** | |
Draw Unicode string on the Graphics Console device's screen. | |
@param This Protocol instance pointer. | |
@param UnicodeWeight One Unicode string to be displayed. | |
@param Count The count of Unicode string. | |
@retval EFI_OUT_OF_RESOURCES If no memory resource to use. | |
@retval EFI_UNSUPPORTED If no Graphics Output protocol and UGA Draw | |
protocol exist. | |
@retval EFI_SUCCESS Drawing Unicode string implemented successfully. | |
**/ | |
EFI_STATUS | |
DrawUnicodeWeightAtCursorN ( | |
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, | |
IN CHAR16 *UnicodeWeight, | |
IN UINTN Count | |
); | |
/** | |
Flush the cursor on the screen. | |
If CursorVisible is FALSE, nothing to do and return directly. | |
If CursorVisible is TRUE, | |
i) If the cursor shows on screen, it will be erased. | |
ii) If the cursor does not show on screen, it will be shown. | |
@param This Protocol instance pointer. | |
@retval EFI_SUCCESS The cursor is erased successfully. | |
**/ | |
EFI_STATUS | |
FlushCursor ( | |
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This | |
); | |
/** | |
Check if the current specific mode supported the user defined resolution | |
for the Graphics Console device based on Graphics Output Protocol. | |
If yes, set the graphic device's current mode to this specific mode. | |
@param GraphicsOutput Graphics Output Protocol instance pointer. | |
@param HorizontalResolution User defined horizontal resolution | |
@param VerticalResolution User defined vertical resolution. | |
@param CurrentModeNumber Current specific mode to be check. | |
@retval EFI_SUCCESS The mode is supported. | |
@retval EFI_UNSUPPORTED The specific mode is out of range of graphics | |
device supported. | |
@retval other The specific mode does not support user defined | |
resolution or failed to set the current mode to the | |
specific mode on graphics device. | |
**/ | |
EFI_STATUS | |
CheckModeSupported ( | |
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput, | |
IN UINT32 HorizontalResolution, | |
IN UINT32 VerticalResolution, | |
OUT UINT32 *CurrentModeNumber | |
); | |
#endif |