1. code scrub for ConSplitterDxe.

2. fixed some bugs when thunking UGA based on GOP.


git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7107 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
vanjeff 2008-12-24 00:15:20 +00:00
parent bcb85cda9d
commit 2da292f637
4 changed files with 411 additions and 369 deletions

View File

@ -410,7 +410,7 @@ ConSplitterDriverEntry(
ASSERT_EFI_ERROR (Status); ASSERT_EFI_ERROR (Status);
// //
// One of Either Graphics Output protocol and UGA Draw protocol must be supported. // Either Graphics Output protocol or UGA Draw protocol must be supported.
// //
ASSERT (FeaturePcdGet (PcdConOutGopSupport) || ASSERT (FeaturePcdGet (PcdConOutGopSupport) ||
FeaturePcdGet (PcdConOutUgaSupport)); FeaturePcdGet (PcdConOutUgaSupport));
@ -1273,6 +1273,8 @@ ConSplitterConOutDriverBindingStart (
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut; EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut;
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;
EFI_UGA_DRAW_PROTOCOL *UgaDraw; EFI_UGA_DRAW_PROTOCOL *UgaDraw;
UINTN SizeOfInfo;
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
// //
// Start ConSplitter on ControllerHandle, and create the virtual // Start ConSplitter on ControllerHandle, and create the virtual
@ -1308,7 +1310,7 @@ ConSplitterConOutDriverBindingStart (
// //
// Open UGA DRAW protocol // Open UGA DRAW protocol
// //
Status = gBS->OpenProtocol ( gBS->OpenProtocol (
ControllerHandle, ControllerHandle,
&gEfiUgaDrawProtocolGuid, &gEfiUgaDrawProtocolGuid,
(VOID **) &UgaDraw, (VOID **) &UgaDraw,
@ -1331,12 +1333,26 @@ ConSplitterConOutDriverBindingStart (
Status = ConSplitterTextOutAddDevice (&mConOut, TextOut, GraphicsOutput, UgaDraw); Status = ConSplitterTextOutAddDevice (&mConOut, TextOut, GraphicsOutput, UgaDraw);
ConSplitterTextOutSetAttribute (&mConOut.TextOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK)); ConSplitterTextOutSetAttribute (&mConOut.TextOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK));
if (FeaturePcdGet (PcdConOutUgaSupport) && FeaturePcdGet (PcdUgaConsumeSupport)) { if (FeaturePcdGet (PcdConOutUgaSupport)) {
// //
// Match the UGA mode data of ConOut with the current mode // Get the UGA mode data of ConOut from the current mode
// //
if (UgaDraw != NULL) { if (GraphicsOutput != NULL) {
UgaDraw->GetMode ( Status = GraphicsOutput->QueryMode (GraphicsOutput, GraphicsOutput->Mode->Mode, &SizeOfInfo, &Info);
if (EFI_ERROR (Status)) {
return Status;
}
ASSERT ( SizeOfInfo <= sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION));
mConOut.UgaHorizontalResolution = Info->HorizontalResolution;
mConOut.UgaVerticalResolution = Info->VerticalResolution;
mConOut.UgaColorDepth = 32;
mConOut.UgaRefreshRate = 60;
FreePool (Info);
} else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
Status = UgaDraw->GetMode (
UgaDraw, UgaDraw,
&mConOut.UgaHorizontalResolution, &mConOut.UgaHorizontalResolution,
&mConOut.UgaVerticalResolution, &mConOut.UgaVerticalResolution,
@ -1345,6 +1361,7 @@ ConSplitterConOutDriverBindingStart (
); );
} }
} }
return Status; return Status;
} }
@ -2366,7 +2383,7 @@ ConSplitterGetIntersection (
} }
/** /**
Add the device's output mode to console splitter's mode list. Sync the device's output mode to console splitter's mode list.
@param Private Text Out Splitter pointer. @param Private Text Out Splitter pointer.
@param TextOut Simple Text Output protocol pointer. @param TextOut Simple Text Output protocol pointer.
@ -2614,7 +2631,7 @@ ConSplitterGetIntersectionBetweenConOutAndStrErr (
/** /**
Add display (GOP or UGA) output modes into Consplitter Text Out list. Add Grahpics Output modes into Consplitter Text Out list.
@param Private Text Out Splitter pointer. @param Private Text Out Splitter pointer.
@param GraphicsOutput Graphics Output protocol pointer. @param GraphicsOutput Graphics Output protocol pointer.
@ -2625,7 +2642,7 @@ ConSplitterGetIntersectionBetweenConOutAndStrErr (
**/ **/
EFI_STATUS EFI_STATUS
ConSplitterAddDisplayOutputMode ( ConSplitterAddGraphicsOutputMode (
IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private, IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private,
IN EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput, IN EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput,
IN EFI_UGA_DRAW_PROTOCOL *UgaDraw IN EFI_UGA_DRAW_PROTOCOL *UgaDraw
@ -2648,9 +2665,7 @@ ConSplitterAddDisplayOutputMode (
UINT32 UgaColorDepth; UINT32 UgaColorDepth;
UINT32 UgaRefreshRate; UINT32 UgaRefreshRate;
if ((GraphicsOutput == NULL) && (UgaDraw == NULL)) { ASSERT (GraphicsOutput != NULL || UgaDraw != NULL);
return EFI_UNSUPPORTED;
}
CurrentGraphicsOutputMode = Private->GraphicsOutput.Mode; CurrentGraphicsOutputMode = Private->GraphicsOutput.Mode;
@ -2671,12 +2686,8 @@ ConSplitterAddDisplayOutputMode (
// //
// This is the first Graphics Output device added // This is the first Graphics Output device added
// //
CurrentGraphicsOutputMode->MaxMode = GraphicsOutput->Mode->MaxMode; CopyMem (CurrentGraphicsOutputMode, GraphicsOutput->Mode, sizeof (EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE));
CurrentGraphicsOutputMode->Mode = GraphicsOutput->Mode->Mode;
CopyMem (CurrentGraphicsOutputMode->Info, GraphicsOutput->Mode->Info, GraphicsOutput->Mode->SizeOfInfo); CopyMem (CurrentGraphicsOutputMode->Info, GraphicsOutput->Mode->Info, GraphicsOutput->Mode->SizeOfInfo);
CurrentGraphicsOutputMode->SizeOfInfo = GraphicsOutput->Mode->SizeOfInfo;
CurrentGraphicsOutputMode->FrameBufferBase = GraphicsOutput->Mode->FrameBufferBase;
CurrentGraphicsOutputMode->FrameBufferSize = GraphicsOutput->Mode->FrameBufferSize;
// //
// Allocate resource for the private mode buffer // Allocate resource for the private mode buffer
@ -2811,8 +2822,7 @@ ConSplitterAddDisplayOutputMode (
} }
} }
} }
} } else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
// //
// Graphics console driver can ensure the same mode for all GOP devices // Graphics console driver can ensure the same mode for all GOP devices
// so we can get the current mode from this video device // so we can get the current mode from this video device
@ -2881,8 +2891,9 @@ Done:
return Status; return Status;
} }
/** /**
Set the current console out mode.
This routine will get the current console mode information (column, row) This routine will get the current console mode information (column, row)
from ConsoleOutMode variable and set it; if the variable does not exist, from ConsoleOutMode variable and set it; if the variable does not exist,
set to user defined console mode. set to user defined console mode.
@ -2900,49 +2911,50 @@ ConsplitterSetConsoleOutMode (
UINTN Mode; UINTN Mode;
UINTN PreferMode; UINTN PreferMode;
UINTN BaseMode; UINTN BaseMode;
UINTN ModeInfoSize;
UINTN MaxMode; UINTN MaxMode;
EFI_STATUS Status; EFI_STATUS Status;
CONSOLE_OUT_MODE *ModeInfo; CONSOLE_OUT_MODE ModeInfo;
UINTN ModeInfoSize;
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut; EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut;
PreferMode = 0xFF; PreferMode = 0xFF;
BaseMode = 0xFF; BaseMode = 0xFF;
TextOut = &Private->TextOut; TextOut = &Private->TextOut;
MaxMode = (UINTN) (TextOut->Mode->MaxMode); MaxMode = (UINTN) (TextOut->Mode->MaxMode);
ModeInfoSize = sizeof (CONSOLE_OUT_MODE); ModeInfoSize = sizeof (CONSOLE_OUT_MODE);
ModeInfo = AllocateZeroPool (sizeof(CONSOLE_OUT_MODE));
ASSERT(ModeInfo != NULL);
Status = gRT->GetVariable ( Status = gRT->GetVariable (
VARCONOUTMODE, VARCONOUTMODE,
&gEfiGenericPlatformVariableGuid, &gEfiGenericPlatformVariableGuid,
NULL, NULL,
&ModeInfoSize, &ModeInfoSize,
ModeInfo &ModeInfo
); );
//
// Set to the default mode 80 x 25 required by EFI/UEFI spec;
// user can also define other valid default console mode here.
//
if (EFI_ERROR(Status)) { if (EFI_ERROR(Status)) {
ModeInfo->Column = 80; //
ModeInfo->Row = 25; // If fail to get variable, set variable to the default mode 80 x 25
Status = gRT->SetVariable ( // required by UEFI spec;
//
ModeInfo.Column = 80;
ModeInfo.Row = 25;
gRT->SetVariable (
VARCONOUTMODE, VARCONOUTMODE,
&gEfiGenericPlatformVariableGuid, &gEfiGenericPlatformVariableGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE, EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
sizeof (CONSOLE_OUT_MODE), sizeof (CONSOLE_OUT_MODE),
ModeInfo &ModeInfo
); );
} }
//
// To find the prefer mode and basic mode from Text Out mode list
//
for (Mode = 0; Mode < MaxMode; Mode++) { for (Mode = 0; Mode < MaxMode; Mode++) {
Status = TextOut->QueryMode (TextOut, Mode, &Col, &Row); Status = TextOut->QueryMode (TextOut, Mode, &Col, &Row);
if (!EFI_ERROR(Status)) { if (!EFI_ERROR(Status)) {
if (Col == ModeInfo->Column && Row == ModeInfo->Row) { if (Col == ModeInfo.Column && Row == ModeInfo.Row) {
PreferMode = Mode; PreferMode = Mode;
} }
if (Col == 80 && Row == 25) { if (Col == 80 && Row == 25) {
@ -2951,31 +2963,33 @@ ConsplitterSetConsoleOutMode (
} }
} }
//
// Set perfer mode to Text Out devices.
//
Status = TextOut->SetMode (TextOut, PreferMode); Status = TextOut->SetMode (TextOut, PreferMode);
if (EFI_ERROR(Status)) {
// //
// if current mode setting is failed, default 80x25 mode will be set. // if current mode setting is failed, default 80x25 mode will be set.
// //
if (EFI_ERROR(Status)) {
Status = TextOut->SetMode (TextOut, BaseMode); Status = TextOut->SetMode (TextOut, BaseMode);
ASSERT(!EFI_ERROR(Status)); ASSERT(!EFI_ERROR(Status));
ModeInfo->Column = 80; ModeInfo.Column = 80;
ModeInfo->Row = 25; ModeInfo.Row = 25;
// //
// Update ConOutMode variable // Update ConOutMode variable
// //
Status = gRT->SetVariable ( gRT->SetVariable (
VARCONOUTMODE, VARCONOUTMODE,
&gEfiGenericPlatformVariableGuid, &gEfiGenericPlatformVariableGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE, EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,
sizeof (CONSOLE_OUT_MODE), sizeof (CONSOLE_OUT_MODE),
ModeInfo &ModeInfo
); );
} }
gBS->FreePool (ModeInfo); return ;
} }
@ -3008,6 +3022,8 @@ ConSplitterTextOutAddDevice (
UINT32 UgaColorDepth; UINT32 UgaColorDepth;
UINT32 UgaRefreshRate; UINT32 UgaRefreshRate;
TEXT_OUT_AND_GOP_DATA *TextAndGop; TEXT_OUT_AND_GOP_DATA *TextAndGop;
UINTN SizeOfInfo;
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
Status = EFI_SUCCESS; Status = EFI_SUCCESS;
CurrentNumOfConsoles = Private->CurrentNumberOfConsoles; CurrentNumOfConsoles = Private->CurrentNumberOfConsoles;
@ -3073,16 +3089,38 @@ ConSplitterTextOutAddDevice (
MaxMode = Private->TextOutMode.MaxMode; MaxMode = Private->TextOutMode.MaxMode;
ASSERT (MaxMode >= 1); ASSERT (MaxMode >= 1);
//
// Update DevNull mode according to current video device
//
if (FeaturePcdGet (PcdConOutGopSupport)) { if (FeaturePcdGet (PcdConOutGopSupport)) {
if ((GraphicsOutput != NULL) || (UgaDraw != NULL)) { //
ConSplitterAddDisplayOutputMode (Private, GraphicsOutput, UgaDraw); // If GOP is produced by Consplitter, this device display mode will be added into Graphics Ouput modes.
//
if ((GraphicsOutput != NULL) || (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport))) {
ConSplitterAddGraphicsOutputMode (Private, GraphicsOutput, UgaDraw);
} }
} }
if (FeaturePcdGet (PcdConOutUgaSupport)) { if (FeaturePcdGet (PcdConOutUgaSupport)) {
if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) { UgaHorizontalResolution = 800;
UgaVerticalResolution = 600;
UgaColorDepth = 32;
UgaRefreshRate = 60;
Status = EFI_DEVICE_ERROR;
//
// If UGA is produced by Consplitter
//
if (GraphicsOutput != NULL) {
Status = GraphicsOutput->QueryMode (GraphicsOutput, GraphicsOutput->Mode->Mode, &SizeOfInfo, &Info);
if (EFI_ERROR (Status)) {
return Status;
}
ASSERT ( SizeOfInfo <= sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION));
UgaHorizontalResolution = Info->HorizontalResolution;
UgaVerticalResolution = Info->VerticalResolution;
FreePool (Info);
} else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
Status = UgaDraw->GetMode ( Status = UgaDraw->GetMode (
UgaDraw, UgaDraw,
&UgaHorizontalResolution, &UgaHorizontalResolution,
@ -3090,7 +3128,12 @@ ConSplitterTextOutAddDevice (
&UgaColorDepth, &UgaColorDepth,
&UgaRefreshRate &UgaRefreshRate
); );
if (!EFI_ERROR (Status)) { }
//
// Set UGA Draw mode,
// if GetMode is failed, set to 800x600 mode
//
Status = ConSpliterUgaDrawSetMode ( Status = ConSpliterUgaDrawSetMode (
&Private->UgaDraw, &Private->UgaDraw,
UgaHorizontalResolution, UgaHorizontalResolution,
@ -3099,28 +3142,20 @@ ConSplitterTextOutAddDevice (
UgaRefreshRate UgaRefreshRate
); );
} }
//
// If GetMode/SetMode is failed, set to 800x600 mode
//
if(EFI_ERROR (Status)) {
Status = ConSpliterUgaDrawSetMode (
&Private->UgaDraw,
800,
600,
32,
60
);
}
}
}
if (Private->ConsoleOutputMode == EfiConsoleControlScreenGraphics && GraphicsOutput != NULL) { if (Private->ConsoleOutputMode == EfiConsoleControlScreenGraphics && GraphicsOutput != NULL) {
// //
// We just added a new GOP or UGA device in graphics mode // We just added a new GOP or UGA device in graphics mode
// //
if (FeaturePcdGet (PcdConOutGopSupport)) { if (FeaturePcdGet (PcdConOutGopSupport)) {
//
// Sync display output on new device based on GOP settings.
//
DevNullGopSync (Private, TextAndGop->GraphicsOutput, TextAndGop->UgaDraw); DevNullGopSync (Private, TextAndGop->GraphicsOutput, TextAndGop->UgaDraw);
} else if (FeaturePcdGet (PcdConOutUgaSupport)) { } else if (FeaturePcdGet (PcdConOutUgaSupport)) {
//
// Sync display output on new device based on UGA settings.
//
DevNullUgaSync (Private, TextAndGop->GraphicsOutput, TextAndGop->UgaDraw); DevNullUgaSync (Private, TextAndGop->GraphicsOutput, TextAndGop->UgaDraw);
} }
} else if ((CurrentMode >= 0) && ((GraphicsOutput != NULL) || (UgaDraw != NULL)) && (CurrentMode < Private->TextOutMode.MaxMode)) { } else if ((CurrentMode >= 0) && ((GraphicsOutput != NULL) || (UgaDraw != NULL)) && (CurrentMode < Private->TextOutMode.MaxMode)) {

View File

@ -1861,8 +1861,8 @@ ConSpliterConsoleControlGetMode (
Set the current mode to either text or graphics. Graphics is Set the current mode to either text or graphics. Graphics is
for Quiet Boot. for Quiet Boot.
@param This Protocol instance pointer. @param This Console Control Protocol instance pointer.
@param Mode Mode to set the @param Mode Mode to set.
@retval EFI_SUCCESS Mode information returned. @retval EFI_SUCCESS Mode information returned.
@retval EFI_INVALID_PARAMETER Invalid parameter. @retval EFI_INVALID_PARAMETER Invalid parameter.
@ -1877,21 +1877,20 @@ ConSpliterConsoleControlSetMode (
); );
/** /**
Return the current video mode information. Returns information for an available graphics mode that the graphics device
and the set of active video output devices supports.
@param This Protocol instance pointer. @param This The EFI_GRAPHICS_OUTPUT_PROTOCOL instance.
@param ModeNumber The mode number to return information on. @param ModeNumber The mode number to return information on.
@param SizeOfInfo A pointer to the size, in bytes, of the Info @param SizeOfInfo A pointer to the size, in bytes, of the Info buffer.
buffer. @param Info A pointer to callee allocated buffer that returns information about ModeNumber.
@param Info Caller allocated buffer that returns information
about ModeNumber.
@retval EFI_SUCCESS Mode information returned. @retval EFI_SUCCESS Mode information returned.
@retval EFI_BUFFER_TOO_SMALL The Info buffer was too small. @retval EFI_BUFFER_TOO_SMALL The Info buffer was too small.
@retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the @retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the video mode.
video mode.
@retval EFI_NOT_STARTED Video display is not initialized. Call SetMode () @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode ()
@retval EFI_INVALID_PARAMETER One of the input args was NULL. @retval EFI_INVALID_PARAMETER One of the input args was NULL.
@retval EFI_OUT_OF_RESOURCES No resource available.
**/ **/
EFI_STATUS EFI_STATUS
@ -1904,15 +1903,16 @@ ConSpliterGraphicsOutputQueryMode (
); );
/** /**
Graphics output protocol interface to set video mode. Set the video device into the specified mode and clears the visible portions of
the output display to black.
@param This Protocol instance pointer. @param This The EFI_GRAPHICS_OUTPUT_PROTOCOL instance.
@param ModeNumber The mode number to be set. @param ModeNumber Abstraction that defines the current video mode.
@retval EFI_SUCCESS Graphics mode was changed. @retval EFI_SUCCESS The graphics mode specified by ModeNumber was selected.
@retval EFI_DEVICE_ERROR The device had an error and could not complete @retval EFI_DEVICE_ERROR The device had an error and could not complete the request.
the request.
@retval EFI_UNSUPPORTED ModeNumber is not supported by this device. @retval EFI_UNSUPPORTED ModeNumber is not supported by this device.
@retval EFI_OUT_OF_RESOURCES No resource available.
**/ **/
EFI_STATUS EFI_STATUS
@ -2007,11 +2007,11 @@ DevNullGopSync (
/** /**
Return the current video mode information. Return the current video mode information.
@param This Protocol instance pointer. @param This The EFI_UGA_DRAW_PROTOCOL instance.
@param HorizontalResolution Current video horizontal resolution in pixels @param HorizontalResolution The size of video screen in pixels in the X dimension.
@param VerticalResolution Current video vertical resolution in pixels @param VerticalResolution The size of video screen in pixels in the Y dimension.
@param ColorDepth Current video color depth in bits per pixel @param ColorDepth Number of bits per pixel, currently defined to be 32.
@param RefreshRate Current video refresh rate in Hz. @param RefreshRate The refresh rate of the monitor in Hertz.
@retval EFI_SUCCESS Mode information returned. @retval EFI_SUCCESS Mode information returned.
@retval EFI_NOT_STARTED Video display is not initialized. Call SetMode () @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode ()
@ -2029,13 +2029,13 @@ ConSpliterUgaDrawGetMode (
); );
/** /**
Return the current video mode information. Set the current video mode information.
@param This Protocol instance pointer. @param This The EFI_UGA_DRAW_PROTOCOL instance.
@param HorizontalResolution Current video horizontal resolution in pixels @param HorizontalResolution The size of video screen in pixels in the X dimension.
@param VerticalResolution Current video vertical resolution in pixels @param VerticalResolution The size of video screen in pixels in the Y dimension.
@param ColorDepth Current video color depth in bits per pixel @param ColorDepth Number of bits per pixel, currently defined to be 32.
@param RefreshRate Current video refresh rate in Hz. @param RefreshRate The refresh rate of the monitor in Hertz.
@retval EFI_SUCCESS Mode information returned. @retval EFI_SUCCESS Mode information returned.
@retval EFI_NOT_STARTED Video display is not initialized. Call SetMode () @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode ()
@ -2053,49 +2053,52 @@ ConSpliterUgaDrawSetMode (
); );
/** /**
Blt a rectangle of pixels on the graphics screen.
The following table defines actions for BltOperations. The following table defines actions for BltOperations.
EfiUgaVideoFill - Write data from the BltBuffer pixel (SourceX, SourceY) EfiUgaVideoFill:
Write data from the BltBuffer pixel (SourceX, SourceY)
directly to every pixel of the video display rectangle directly to every pixel of the video display rectangle
(DestinationX, DestinationY) (DestinationX, DestinationY)
(DestinationX + Width, DestinationY + Height). (DestinationX + Width, DestinationY + Height).
Only one pixel will be used from the BltBuffer. Delta is NOT used. Only one pixel will be used from the BltBuffer. Delta is NOT used.
EfiUgaVideoToBltBuffer - Read data from the video display rectangle EfiUgaVideoToBltBuffer:
Read data from the video display rectangle
(SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in
the BltBuffer rectangle (DestinationX, DestinationY ) the BltBuffer rectangle (DestinationX, DestinationY )
(DestinationX + Width, DestinationY + Height). If DestinationX or (DestinationX + Width, DestinationY + Height). If DestinationX or
DestinationY is not zero then Delta must be set to the length in bytes DestinationY is not zero then Delta must be set to the length in bytes
of a row in the BltBuffer. of a row in the BltBuffer.
EfiUgaBltBufferToVideo - Write data from the BltBuffer rectangle EfiUgaBltBufferToVideo:
Write data from the BltBuffer rectangle
(SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the
video display rectangle (DestinationX, DestinationY) video display rectangle (DestinationX, DestinationY)
(DestinationX + Width, DestinationY + Height). If SourceX or SourceY is (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is
not zero then Delta must be set to the length in bytes of a row in the not zero then Delta must be set to the length in bytes of a row in the
BltBuffer. BltBuffer.
EfiUgaVideoToVideo - Copy from the video display rectangle EfiUgaVideoToVideo:
Copy from the video display rectangle
(SourceX, SourceY) (SourceX + Width, SourceY + Height) . (SourceX, SourceY) (SourceX + Width, SourceY + Height) .
to the video display rectangle (DestinationX, DestinationY) to the video display rectangle (DestinationX, DestinationY)
(DestinationX + Width, DestinationY + Height). (DestinationX + Width, DestinationY + Height).
The BltBuffer and Delta are not used in this mode. The BltBuffer and Delta are not used in this mode.
@param This Protocol instance pointer. @param This Protocol instance pointer.
@param BltBuffer Buffer containing data to blit into video buffer. @param BltBuffer Buffer containing data to blit into video buffer. This
This buffer has a size of buffer has a size of Width*Height*sizeof(EFI_UGA_PIXEL)
Width*Height*sizeof(EFI_UGA_PIXEL) @param BltOperation Operation to perform on BlitBuffer and video memory
@param BltOperation Operation to perform on BlitBuffer and video
memory
@param SourceX X coordinate of source for the BltBuffer. @param SourceX X coordinate of source for the BltBuffer.
@param SourceY Y coordinate of source for the BltBuffer. @param SourceY Y coordinate of source for the BltBuffer.
@param DestinationX X coordinate of destination for the BltBuffer. @param DestinationX X coordinate of destination for the BltBuffer.
@param DestinationY Y coordinate of destination for the BltBuffer. @param DestinationY Y coordinate of destination for the BltBuffer.
@param Width Width of rectangle in BltBuffer in pixels. @param Width Width of rectangle in BltBuffer in pixels.
@param Height Hight of rectangle in BltBuffer in pixels. @param Height Hight of rectangle in BltBuffer in pixels.
@param Delta OPTIONAL. @param Delta OPTIONAL
@retval EFI_SUCCESS The Blt operation completed. @retval EFI_SUCCESS The Blt operation completed.
@retval EFI_INVALID_PARAMETER BltOperation is not valid. @retval EFI_INVALID_PARAMETER BltOperation is not valid.
@retval EFI_DEVICE_ERROR A hardware error occured writting to the video @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer.
buffer.
**/ **/
EFI_STATUS EFI_STATUS
@ -2162,7 +2165,7 @@ DevNullTextOutOutputString (
/** /**
Sets the output device(s) to a specified mode. Sets the output device(s) to a specified mode.
@param Private Private data structure pointer. @param Private Text Out Splitter pointer.
@param ModeNumber The mode number to set. @param ModeNumber The mode number to set.
@retval EFI_SUCCESS The requested text mode was set. @retval EFI_SUCCESS The requested text mode was set.
@ -2182,7 +2185,7 @@ DevNullTextOutSetMode (
Clears the output device(s) display to the currently selected background Clears the output device(s) display to the currently selected background
color. color.
@param Private Protocol instance pointer. @param Private Text Out Splitter pointer.
@retval EFI_SUCCESS The operation completed successfully. @retval EFI_SUCCESS The operation completed successfully.
@retval EFI_DEVICE_ERROR The device had an error and could not complete @retval EFI_DEVICE_ERROR The device had an error and could not complete
@ -2198,7 +2201,7 @@ DevNullTextOutClearScreen (
/** /**
Sets the current coordinates of the cursor position. Sets the current coordinates of the cursor position.
@param Private Protocol instance pointer. @param Private Text Out Splitter pointer.
@param Column @param Column
@param Row the position to set the cursor to. Must be @param Row the position to set the cursor to. Must be
greater than or equal to zero and less than the greater than or equal to zero and less than the
@ -2220,14 +2223,13 @@ DevNullTextOutSetCursorPosition (
); );
/** /**
Implements SIMPLE_TEXT_OUTPUT.EnableCursor(). Set cursor visibility property.
In this driver, the cursor cannot be hidden.
@param Private Indicates the calling context. @param Private Text Out Splitter pointer.
@param Visible If TRUE, the cursor is set to be visible, If @param Visible If TRUE, the cursor is set to be visible, If
FALSE, the cursor is set to be invisible. FALSE, the cursor is set to be invisible.
@retval EFI_SUCCESS The request is valid. @retval EFI_SUCCESS Returns always.
**/ **/
EFI_STATUS EFI_STATUS
@ -2240,7 +2242,7 @@ DevNullTextOutEnableCursor (
Take the DevNull TextOut device and update the Simple Text Out on every Take the DevNull TextOut device and update the Simple Text Out on every
UGA device. UGA device.
@param Private Indicates the calling context. @param Private Text Out Splitter pointer.
@retval EFI_SUCCESS The request is valid. @retval EFI_SUCCESS The request is valid.
@retval other Return status of TextOut->OutputString () @retval other Return status of TextOut->OutputString ()

View File

@ -3,6 +3,13 @@
# #
# This driver acts as a virtual console, takes over the console I/O control from selected # This driver acts as a virtual console, takes over the console I/O control from selected
# standard console devices, and transmits console I/O to related console device drivers. # standard console devices, and transmits console I/O to related console device drivers.
# Consplitter could install Graphics Output protocol and/or UGA Draw protocol in system
# table according PCD settings(PcdConOutGopSupport, and PcdConOutUgaSupport). It always
# consumes Graphics Output protocol which is produced by display device, and consumes UGA Draw
# protocol which is produced by display device according to PcdUgaConsumeSupport value.
# Note: If only UGA Draw protocol is installed in system table, PcdUgaConsumeSupport
# should be set to TRUE.
#
# Copyright (c) 2006 - 2008, Intel Corporation # Copyright (c) 2006 - 2008, Intel Corporation
# #
# All rights reserved. This program and the accompanying materials # All rights reserved. This program and the accompanying materials

View File

@ -16,7 +16,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/ **/
#include "ConSplitter.h" #include "ConSplitter.h"
@ -80,8 +79,8 @@ ConSpliterConsoleControlGetMode (
Set the current mode to either text or graphics. Graphics is Set the current mode to either text or graphics. Graphics is
for Quiet Boot. for Quiet Boot.
@param This Protocol instance pointer. @param This Console Control Protocol instance pointer.
@param Mode Mode to set the @param Mode Mode to set.
@retval EFI_SUCCESS Mode information returned. @retval EFI_SUCCESS Mode information returned.
@retval EFI_INVALID_PARAMETER Invalid parameter. @retval EFI_INVALID_PARAMETER Invalid parameter.
@ -152,21 +151,20 @@ ConSpliterConsoleControlSetMode (
/** /**
Return the current video mode information. Returns information for an available graphics mode that the graphics device
and the set of active video output devices supports.
@param This Protocol instance pointer. @param This The EFI_GRAPHICS_OUTPUT_PROTOCOL instance.
@param ModeNumber The mode number to return information on. @param ModeNumber The mode number to return information on.
@param SizeOfInfo A pointer to the size, in bytes, of the Info @param SizeOfInfo A pointer to the size, in bytes, of the Info buffer.
buffer. @param Info A pointer to callee allocated buffer that returns information about ModeNumber.
@param Info Caller allocated buffer that returns information
about ModeNumber.
@retval EFI_SUCCESS Mode information returned. @retval EFI_SUCCESS Mode information returned.
@retval EFI_BUFFER_TOO_SMALL The Info buffer was too small. @retval EFI_BUFFER_TOO_SMALL The Info buffer was too small.
@retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the @retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the video mode.
video mode.
@retval EFI_NOT_STARTED Video display is not initialized. Call SetMode () @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode ()
@retval EFI_INVALID_PARAMETER One of the input args was NULL. @retval EFI_INVALID_PARAMETER One of the input args was NULL.
@retval EFI_OUT_OF_RESOURCES No resource available.
**/ **/
EFI_STATUS EFI_STATUS
@ -194,7 +192,6 @@ ConSpliterGraphicsOutputQueryMode (
} }
*Info = AllocatePool (sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION)); *Info = AllocatePool (sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION));
if (*Info == NULL) { if (*Info == NULL) {
return EFI_OUT_OF_RESOURCES; return EFI_OUT_OF_RESOURCES;
} }
@ -208,15 +205,16 @@ ConSpliterGraphicsOutputQueryMode (
/** /**
Graphics output protocol interface to set video mode. Set the video device into the specified mode and clears the visible portions of
the output display to black.
@param This Protocol instance pointer. @param This The EFI_GRAPHICS_OUTPUT_PROTOCOL instance.
@param ModeNumber The mode number to be set. @param ModeNumber Abstraction that defines the current video mode.
@retval EFI_SUCCESS Graphics mode was changed. @retval EFI_SUCCESS The graphics mode specified by ModeNumber was selected.
@retval EFI_DEVICE_ERROR The device had an error and could not complete @retval EFI_DEVICE_ERROR The device had an error and could not complete the request.
the request.
@retval EFI_UNSUPPORTED ModeNumber is not supported by this device. @retval EFI_UNSUPPORTED ModeNumber is not supported by this device.
@retval EFI_OUT_OF_RESOURCES No resource available.
**/ **/
EFI_STATUS EFI_STATUS
@ -293,9 +291,7 @@ ConSpliterGraphicsOutputSetMode (
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
ReturnStatus = Status; ReturnStatus = Status;
} }
} } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {
if (EFI_ERROR (ReturnStatus) && FeaturePcdGet (PcdUgaConsumeSupport)) {
UgaDraw = Private->TextOutList[Index].UgaDraw; UgaDraw = Private->TextOutList[Index].UgaDraw;
if (UgaDraw != NULL) { if (UgaDraw != NULL) {
Status = UgaDraw->SetMode ( Status = UgaDraw->SetMode (
@ -671,7 +667,7 @@ DevNullGopSync (
Private->GraphicsOutput.Mode->Info->VerticalResolution, Private->GraphicsOutput.Mode->Info->VerticalResolution,
0 0
); );
} else if (FeaturePcdGet (PcdUgaConsumeSupport)) { } else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
return UgaDraw->Blt ( return UgaDraw->Blt (
UgaDraw, UgaDraw,
(EFI_UGA_PIXEL *) Private->GraphicsOutputBlt, (EFI_UGA_PIXEL *) Private->GraphicsOutputBlt,
@ -689,15 +685,14 @@ DevNullGopSync (
} }
} }
/** /**
Return the current video mode information. Return the current video mode information.
@param This Protocol instance pointer. @param This The EFI_UGA_DRAW_PROTOCOL instance.
@param HorizontalResolution Current video horizontal resolution in pixels @param HorizontalResolution The size of video screen in pixels in the X dimension.
@param VerticalResolution Current video vertical resolution in pixels @param VerticalResolution The size of video screen in pixels in the Y dimension.
@param ColorDepth Current video color depth in bits per pixel @param ColorDepth Number of bits per pixel, currently defined to be 32.
@param RefreshRate Current video refresh rate in Hz. @param RefreshRate The refresh rate of the monitor in Hertz.
@retval EFI_SUCCESS Mode information returned. @retval EFI_SUCCESS Mode information returned.
@retval EFI_NOT_STARTED Video display is not initialized. Call SetMode () @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode ()
@ -737,13 +732,13 @@ ConSpliterUgaDrawGetMode (
/** /**
Return the current video mode information. Set the current video mode information.
@param This Protocol instance pointer. @param This The EFI_UGA_DRAW_PROTOCOL instance.
@param HorizontalResolution Current video horizontal resolution in pixels @param HorizontalResolution The size of video screen in pixels in the X dimension.
@param VerticalResolution Current video vertical resolution in pixels @param VerticalResolution The size of video screen in pixels in the Y dimension.
@param ColorDepth Current video color depth in bits per pixel @param ColorDepth Number of bits per pixel, currently defined to be 32.
@param RefreshRate Current video refresh rate in Hz. @param RefreshRate The refresh rate of the monitor in Hertz.
@retval EFI_SUCCESS Mode information returned. @retval EFI_SUCCESS Mode information returned.
@retval EFI_NOT_STARTED Video display is not initialized. Call SetMode () @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode ()
@ -812,23 +807,6 @@ ConSpliterUgaDrawSetMode (
ReturnStatus = EFI_UNSUPPORTED; ReturnStatus = EFI_UNSUPPORTED;
if (FeaturePcdGet (PcdUgaConsumeSupport)) {
UgaDraw = Private->TextOutList[Index].UgaDraw;
if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
Status = UgaDraw->SetMode (
UgaDraw,
HorizontalResolution,
VerticalResolution,
ColorDepth,
RefreshRate
);
if (EFI_ERROR (Status)) {
ReturnStatus = Status;
}
}
}
if (EFI_ERROR (ReturnStatus)) {
GraphicsOutput = Private->TextOutList[Index].GraphicsOutput; GraphicsOutput = Private->TextOutList[Index].GraphicsOutput;
if (GraphicsOutput != NULL) { if (GraphicsOutput != NULL) {
// //
@ -850,6 +828,19 @@ ConSpliterUgaDrawSetMode (
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
ReturnStatus = Status; ReturnStatus = Status;
} }
} else if (FeaturePcdGet (PcdUgaConsumeSupport)){
UgaDraw = Private->TextOutList[Index].UgaDraw;
if (UgaDraw != NULL) {
Status = UgaDraw->SetMode (
UgaDraw,
HorizontalResolution,
VerticalResolution,
ColorDepth,
RefreshRate
);
if (EFI_ERROR (Status)) {
ReturnStatus = Status;
}
} }
} }
} }
@ -858,32 +849,38 @@ ConSpliterUgaDrawSetMode (
} }
/** /**
Blt a rectangle of pixels on the graphics screen.
The following table defines actions for BltOperations. The following table defines actions for BltOperations.
EfiBltVideoFill - Write data from the BltBuffer pixel (SourceX, SourceY) EfiUgaVideoFill:
Write data from the BltBuffer pixel (SourceX, SourceY)
directly to every pixel of the video display rectangle directly to every pixel of the video display rectangle
(DestinationX, DestinationY) (DestinationX, DestinationY)
(DestinationX + Width, DestinationY + Height). (DestinationX + Width, DestinationY + Height).
Only one pixel will be used from the BltBuffer. Delta is NOT used. Only one pixel will be used from the BltBuffer. Delta is NOT used.
EfiBltVideoToBltBuffer - Read data from the video display rectangle EfiUgaVideoToBltBuffer:
Read data from the video display rectangle
(SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in
the BltBuffer rectangle (DestinationX, DestinationY ) the BltBuffer rectangle (DestinationX, DestinationY )
(DestinationX + Width, DestinationY + Height). If DestinationX or (DestinationX + Width, DestinationY + Height). If DestinationX or
DestinationY is not zero then Delta must be set to the length in bytes DestinationY is not zero then Delta must be set to the length in bytes
of a row in the BltBuffer. of a row in the BltBuffer.
EfiBltBufferToVideo - Write data from the BltBuffer rectangle EfiUgaBltBufferToVideo:
Write data from the BltBuffer rectangle
(SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the
video display rectangle (DestinationX, DestinationY) video display rectangle (DestinationX, DestinationY)
(DestinationX + Width, DestinationY + Height). If SourceX or SourceY is (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is
not zero then Delta must be set to the length in bytes of a row in the not zero then Delta must be set to the length in bytes of a row in the
BltBuffer. BltBuffer.
EfiBltVideoToVideo - Copy from the video display rectangle EfiUgaVideoToVideo:
Copy from the video display rectangle
(SourceX, SourceY) (SourceX + Width, SourceY + Height) . (SourceX, SourceY) (SourceX + Width, SourceY + Height) .
to the video display rectangle (DestinationX, DestinationY) to the video display rectangle (DestinationX, DestinationY)
(DestinationX + Width, DestinationY + Height). (DestinationX + Width, DestinationY + Height).
The BltBuffer and Delta are not used in this mode. The BltBuffer and Delta are not used in this mode.
@param Private Protocol instance pointer. @param Private Text Out Splitter pointer.
@param BltBuffer Buffer containing data to blit into video buffer. @param BltBuffer Buffer containing data to blit into video buffer.
This buffer has a size of This buffer has a size of
Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL) Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
@ -1020,51 +1017,53 @@ DevNullUgaBlt (
return EFI_SUCCESS; return EFI_SUCCESS;
} }
/** /**
Blt a rectangle of pixels on the graphics screen.
The following table defines actions for BltOperations. The following table defines actions for BltOperations.
EfiUgaVideoFill - Write data from the BltBuffer pixel (SourceX, SourceY) EfiUgaVideoFill:
Write data from the BltBuffer pixel (SourceX, SourceY)
directly to every pixel of the video display rectangle directly to every pixel of the video display rectangle
(DestinationX, DestinationY) (DestinationX, DestinationY)
(DestinationX + Width, DestinationY + Height). (DestinationX + Width, DestinationY + Height).
Only one pixel will be used from the BltBuffer. Delta is NOT used. Only one pixel will be used from the BltBuffer. Delta is NOT used.
EfiUgaVideoToBltBuffer - Read data from the video display rectangle EfiUgaVideoToBltBuffer:
Read data from the video display rectangle
(SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in
the BltBuffer rectangle (DestinationX, DestinationY ) the BltBuffer rectangle (DestinationX, DestinationY )
(DestinationX + Width, DestinationY + Height). If DestinationX or (DestinationX + Width, DestinationY + Height). If DestinationX or
DestinationY is not zero then Delta must be set to the length in bytes DestinationY is not zero then Delta must be set to the length in bytes
of a row in the BltBuffer. of a row in the BltBuffer.
EfiUgaBltBufferToVideo - Write data from the BltBuffer rectangle EfiUgaBltBufferToVideo:
Write data from the BltBuffer rectangle
(SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the
video display rectangle (DestinationX, DestinationY) video display rectangle (DestinationX, DestinationY)
(DestinationX + Width, DestinationY + Height). If SourceX or SourceY is (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is
not zero then Delta must be set to the length in bytes of a row in the not zero then Delta must be set to the length in bytes of a row in the
BltBuffer. BltBuffer.
EfiUgaVideoToVideo - Copy from the video display rectangle EfiUgaVideoToVideo:
Copy from the video display rectangle
(SourceX, SourceY) (SourceX + Width, SourceY + Height) . (SourceX, SourceY) (SourceX + Width, SourceY + Height) .
to the video display rectangle (DestinationX, DestinationY) to the video display rectangle (DestinationX, DestinationY)
(DestinationX + Width, DestinationY + Height). (DestinationX + Width, DestinationY + Height).
The BltBuffer and Delta are not used in this mode. The BltBuffer and Delta are not used in this mode.
@param This Protocol instance pointer. @param This Protocol instance pointer.
@param BltBuffer Buffer containing data to blit into video buffer. @param BltBuffer Buffer containing data to blit into video buffer. This
This buffer has a size of buffer has a size of Width*Height*sizeof(EFI_UGA_PIXEL)
Width*Height*sizeof(EFI_UGA_PIXEL) @param BltOperation Operation to perform on BlitBuffer and video memory
@param BltOperation Operation to perform on BlitBuffer and video
memory
@param SourceX X coordinate of source for the BltBuffer. @param SourceX X coordinate of source for the BltBuffer.
@param SourceY Y coordinate of source for the BltBuffer. @param SourceY Y coordinate of source for the BltBuffer.
@param DestinationX X coordinate of destination for the BltBuffer. @param DestinationX X coordinate of destination for the BltBuffer.
@param DestinationY Y coordinate of destination for the BltBuffer. @param DestinationY Y coordinate of destination for the BltBuffer.
@param Width Width of rectangle in BltBuffer in pixels. @param Width Width of rectangle in BltBuffer in pixels.
@param Height Hight of rectangle in BltBuffer in pixels. @param Height Hight of rectangle in BltBuffer in pixels.
@param Delta OPTIONAL. @param Delta OPTIONAL
@retval EFI_SUCCESS The Blt operation completed. @retval EFI_SUCCESS The Blt operation completed.
@retval EFI_INVALID_PARAMETER BltOperation is not valid. @retval EFI_INVALID_PARAMETER BltOperation is not valid.
@retval EFI_DEVICE_ERROR A hardware error occured writting to the video @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer.
buffer.
**/ **/
EFI_STATUS EFI_STATUS
@ -1183,20 +1182,7 @@ DevNullUgaSync (
IN EFI_UGA_DRAW_PROTOCOL *UgaDraw IN EFI_UGA_DRAW_PROTOCOL *UgaDraw
) )
{ {
if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) { if (GraphicsOutput != NULL) {
return UgaDraw->Blt (
UgaDraw,
Private->UgaBlt,
EfiUgaBltBufferToVideo,
0,
0,
0,
0,
Private->UgaHorizontalResolution,
Private->UgaVerticalResolution,
Private->UgaHorizontalResolution * sizeof (EFI_UGA_PIXEL)
);
} else if (GraphicsOutput != NULL) {
return GraphicsOutput->Blt ( return GraphicsOutput->Blt (
GraphicsOutput, GraphicsOutput,
(EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) Private->UgaBlt, (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) Private->UgaBlt,
@ -1209,6 +1195,19 @@ DevNullUgaSync (
Private->UgaVerticalResolution, Private->UgaVerticalResolution,
0 0
); );
} else if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {
return UgaDraw->Blt (
UgaDraw,
Private->UgaBlt,
EfiUgaBltBufferToVideo,
0,
0,
0,
0,
Private->UgaHorizontalResolution,
Private->UgaVerticalResolution,
Private->UgaHorizontalResolution * sizeof (EFI_UGA_PIXEL)
);
} else { } else {
return EFI_UNSUPPORTED; return EFI_UNSUPPORTED;
} }
@ -1436,7 +1435,7 @@ DevNullTextOutOutputString (
/** /**
Sets the output device(s) to a specified mode. Sets the output device(s) to a specified mode.
@param Private Private data structure pointer. @param Private Text Out Splitter pointer.
@param ModeNumber The mode number to set. @param ModeNumber The mode number to set.
@retval EFI_SUCCESS The requested text mode was set. @retval EFI_SUCCESS The requested text mode was set.
@ -1513,7 +1512,7 @@ DevNullTextOutSetMode (
Clears the output device(s) display to the currently selected background Clears the output device(s) display to the currently selected background
color. color.
@param Private Protocol instance pointer. @param Private Text Out Splitter pointer.
@retval EFI_SUCCESS The operation completed successfully. @retval EFI_SUCCESS The operation completed successfully.
@retval EFI_DEVICE_ERROR The device had an error and could not complete @retval EFI_DEVICE_ERROR The device had an error and could not complete
@ -1561,7 +1560,7 @@ DevNullTextOutClearScreen (
/** /**
Sets the current coordinates of the cursor position. Sets the current coordinates of the cursor position.
@param Private Protocol instance pointer. @param Private Text Out Splitter pointer.
@param Column @param Column
@param Row the position to set the cursor to. Must be @param Row the position to set the cursor to. Must be
greater than or equal to zero and less than the greater than or equal to zero and less than the
@ -1595,14 +1594,13 @@ DevNullTextOutSetCursorPosition (
/** /**
Implements SIMPLE_TEXT_OUTPUT.EnableCursor(). Set cursor visibility property.
In this driver, the cursor cannot be hidden.
@param Private Indicates the calling context. @param Private Text Out Splitter pointer.
@param Visible If TRUE, the cursor is set to be visible, If @param Visible If TRUE, the cursor is set to be visible, If
FALSE, the cursor is set to be invisible. FALSE, the cursor is set to be invisible.
@retval EFI_SUCCESS The request is valid. @retval EFI_SUCCESS Returns always.
**/ **/
EFI_STATUS EFI_STATUS
@ -1621,7 +1619,7 @@ DevNullTextOutEnableCursor (
Take the DevNull TextOut device and update the Simple Text Out on every Take the DevNull TextOut device and update the Simple Text Out on every
UGA device. UGA device.
@param Private Indicates the calling context. @param Private Text Out Splitter pointer.
@retval EFI_SUCCESS The request is valid. @retval EFI_SUCCESS The request is valid.
@retval other Return status of TextOut->OutputString () @retval other Return status of TextOut->OutputString ()