+++ /dev/null
-/** @file\r
- Support for Graphics output spliter.\r
- \r
-Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-\r
-**/\r
-\r
-#include "ConSplitter.h"\r
-\r
-\r
-CHAR16 mCrLfString[3] = { CHAR_CARRIAGE_RETURN, CHAR_LINEFEED, CHAR_NULL };\r
-\r
-/**\r
- Returns information for an available graphics mode that the graphics device\r
- and the set of active video output devices supports.\r
-\r
- @param This The EFI_GRAPHICS_OUTPUT_PROTOCOL instance.\r
- @param ModeNumber The mode number to return information on.\r
- @param SizeOfInfo A pointer to the size, in bytes, of the Info buffer.\r
- @param Info A pointer to callee allocated buffer that returns information about ModeNumber.\r
-\r
- @retval EFI_SUCCESS Mode information returned.\r
- @retval EFI_BUFFER_TOO_SMALL The Info buffer was too small.\r
- @retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the video mode.\r
- @retval EFI_INVALID_PARAMETER One of the input args was NULL.\r
- @retval EFI_OUT_OF_RESOURCES No resource available.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-ConSplitterGraphicsOutputQueryMode (\r
- IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,\r
- IN UINT32 ModeNumber,\r
- OUT UINTN *SizeOfInfo,\r
- OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info\r
- )\r
-{\r
- TEXT_OUT_SPLITTER_PRIVATE_DATA *Private;\r
- EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;\r
- EFI_STATUS Status;\r
- UINTN Index;\r
-\r
- if (This == NULL || Info == NULL || SizeOfInfo == NULL || ModeNumber >= This->Mode->MaxMode) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- //\r
- // retrieve private data\r
- //\r
- Private = GRAPHICS_OUTPUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);\r
-\r
- GraphicsOutput = NULL;\r
- \r
- if (Private->CurrentNumberOfGraphicsOutput == 1) {\r
- //\r
- // Find the only one GraphicsOutput.\r
- //\r
- for (Index = 0; Index < Private->CurrentNumberOfConsoles; Index++) {\r
- GraphicsOutput = Private->TextOutList[Index].GraphicsOutput;\r
- if (GraphicsOutput != NULL) {\r
- break;\r
- }\r
- }\r
- }\r
- \r
- if (GraphicsOutput != NULL) {\r
- //\r
- // If only one physical GOP device exist, return its information.\r
- //\r
- Status = GraphicsOutput->QueryMode (GraphicsOutput, (UINT32) ModeNumber, SizeOfInfo, Info);\r
- return Status;\r
- } else {\r
- //\r
- // If 2 more phyiscal GOP device exist or GOP protocol does not exist, \r
- // return GOP information (PixelFormat is PixelBltOnly) created in ConSplitterAddGraphicsOutputMode ().\r
- //\r
- *Info = AllocatePool (sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION));\r
- if (*Info == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
- }\r
- *SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);\r
- CopyMem (*Info, &Private->GraphicsOutputModeBuffer[ModeNumber], *SizeOfInfo);\r
- }\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-\r
-/**\r
- Set the video device into the specified mode and clears the visible portions of\r
- the output display to black.\r
-\r
- @param This The EFI_GRAPHICS_OUTPUT_PROTOCOL instance.\r
- @param ModeNumber Abstraction that defines the current video mode.\r
-\r
- @retval EFI_SUCCESS The graphics mode specified by ModeNumber was selected.\r
- @retval EFI_DEVICE_ERROR The device had an error and could not complete the request.\r
- @retval EFI_UNSUPPORTED ModeNumber is not supported by this device.\r
- @retval EFI_OUT_OF_RESOURCES No resource available.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-ConSplitterGraphicsOutputSetMode (\r
- IN EFI_GRAPHICS_OUTPUT_PROTOCOL * This,\r
- IN UINT32 ModeNumber\r
- )\r
-{\r
- EFI_STATUS Status;\r
- TEXT_OUT_SPLITTER_PRIVATE_DATA *Private;\r
- UINTN Index;\r
- EFI_STATUS ReturnStatus;\r
- EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Mode;\r
- EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;\r
- EFI_GRAPHICS_OUTPUT_PROTOCOL *PhysicalGraphicsOutput;\r
- UINTN NumberIndex;\r
- UINTN SizeOfInfo;\r
- EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;\r
- EFI_UGA_DRAW_PROTOCOL *UgaDraw;\r
-\r
- if (ModeNumber >= This->Mode->MaxMode) {\r
- return EFI_UNSUPPORTED;\r
- }\r
-\r
- Private = GRAPHICS_OUTPUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);\r
- Mode = &Private->GraphicsOutputModeBuffer[ModeNumber];\r
-\r
- ReturnStatus = EFI_SUCCESS;\r
- GraphicsOutput = NULL;\r
- PhysicalGraphicsOutput = NULL;\r
- //\r
- // return the worst status met\r
- //\r
- for (Index = 0; Index < Private->CurrentNumberOfConsoles; Index++) {\r
- GraphicsOutput = Private->TextOutList[Index].GraphicsOutput;\r
- if (GraphicsOutput != NULL) {\r
- PhysicalGraphicsOutput = GraphicsOutput;\r
- //\r
- // Find corresponding ModeNumber of this GraphicsOutput instance\r
- //\r
- for (NumberIndex = 0; NumberIndex < GraphicsOutput->Mode->MaxMode; NumberIndex ++) {\r
- Status = GraphicsOutput->QueryMode (GraphicsOutput, (UINT32) NumberIndex, &SizeOfInfo, &Info);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
- if ((Info->HorizontalResolution == Mode->HorizontalResolution) && (Info->VerticalResolution == Mode->VerticalResolution)) {\r
- FreePool (Info);\r
- break;\r
- }\r
- FreePool (Info);\r
- }\r
-\r
- Status = GraphicsOutput->SetMode (GraphicsOutput, (UINT32) NumberIndex);\r
- if (EFI_ERROR (Status)) {\r
- ReturnStatus = Status;\r
- }\r
- } else if (FeaturePcdGet (PcdUgaConsumeSupport)) {\r
- UgaDraw = Private->TextOutList[Index].UgaDraw;\r
- if (UgaDraw != NULL) {\r
- Status = UgaDraw->SetMode (\r
- UgaDraw,\r
- Mode->HorizontalResolution,\r
- Mode->VerticalResolution,\r
- 32,\r
- 60\r
- );\r
- if (EFI_ERROR (Status)) {\r
- ReturnStatus = Status;\r
- }\r
- }\r
- }\r
- }\r
-\r
- This->Mode->Mode = ModeNumber;\r
-\r
- if ((Private->CurrentNumberOfGraphicsOutput == 1) && (PhysicalGraphicsOutput != NULL)) {\r
- //\r
- // If only one physical GOP device exist, copy physical information to consplitter.\r
- //\r
- CopyMem (This->Mode->Info, PhysicalGraphicsOutput->Mode->Info, PhysicalGraphicsOutput->Mode->SizeOfInfo);\r
- This->Mode->SizeOfInfo = PhysicalGraphicsOutput->Mode->SizeOfInfo;\r
- This->Mode->FrameBufferBase = PhysicalGraphicsOutput->Mode->FrameBufferBase;\r
- This->Mode->FrameBufferSize = PhysicalGraphicsOutput->Mode->FrameBufferSize;\r
- } else {\r
- //\r
- // If 2 more phyiscal GOP device exist or GOP protocol does not exist, \r
- // return GOP information (PixelFormat is PixelBltOnly) created in ConSplitterAddGraphicsOutputMode ().\r
- //\r
- CopyMem (This->Mode->Info, &Private->GraphicsOutputModeBuffer[ModeNumber], This->Mode->SizeOfInfo);\r
- }\r
-\r
- return ReturnStatus;\r
-}\r
-\r
-\r
-\r
-/**\r
- The following table defines actions for BltOperations.\r
-\r
- EfiBltVideoFill - Write data from the BltBuffer pixel (SourceX, SourceY)\r
- directly to every pixel of the video display rectangle\r
- (DestinationX, DestinationY)\r
- (DestinationX + Width, DestinationY + Height).\r
- Only one pixel will be used from the BltBuffer. Delta is NOT used.\r
- EfiBltVideoToBltBuffer - Read data from the video display rectangle\r
- (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in\r
- the BltBuffer rectangle (DestinationX, DestinationY )\r
- (DestinationX + Width, DestinationY + Height). If DestinationX or\r
- DestinationY is not zero then Delta must be set to the length in bytes\r
- of a row in the BltBuffer.\r
- EfiBltBufferToVideo - Write data from the BltBuffer rectangle\r
- (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the\r
- video display rectangle (DestinationX, DestinationY)\r
- (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is\r
- not zero then Delta must be set to the length in bytes of a row in the\r
- BltBuffer.\r
- EfiBltVideoToVideo - Copy from the video display rectangle\r
- (SourceX, SourceY) (SourceX + Width, SourceY + Height) .\r
- to the video display rectangle (DestinationX, DestinationY)\r
- (DestinationX + Width, DestinationY + Height).\r
- The BltBuffer and Delta are not used in this mode.\r
-\r
- @param This Protocol instance pointer.\r
- @param BltBuffer Buffer containing data to blit into video buffer.\r
- This buffer has a size of\r
- Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL)\r
- @param BltOperation Operation to perform on BlitBuffer and video\r
- memory\r
- @param SourceX X coordinate of source for the BltBuffer.\r
- @param SourceY Y coordinate of source for the BltBuffer.\r
- @param DestinationX X coordinate of destination for the BltBuffer.\r
- @param DestinationY Y coordinate of destination for the BltBuffer.\r
- @param Width Width of rectangle in BltBuffer in pixels.\r
- @param Height Hight of rectangle in BltBuffer in pixels.\r
- @param Delta OPTIONAL.\r
-\r
- @retval EFI_SUCCESS The Blt operation completed.\r
- @retval EFI_INVALID_PARAMETER BltOperation is not valid.\r
- @retval EFI_DEVICE_ERROR A hardware error occured writting to the video\r
- buffer.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-ConSplitterGraphicsOutputBlt (\r
- IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,\r
- IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, OPTIONAL\r
- IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,\r
- IN UINTN SourceX,\r
- IN UINTN SourceY,\r
- IN UINTN DestinationX,\r
- IN UINTN DestinationY,\r
- IN UINTN Width,\r
- IN UINTN Height,\r
- IN UINTN Delta OPTIONAL\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_STATUS ReturnStatus;\r
- TEXT_OUT_SPLITTER_PRIVATE_DATA *Private;\r
- UINTN Index;\r
- EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;\r
- EFI_UGA_DRAW_PROTOCOL *UgaDraw;\r
-\r
- if (This == NULL || ((UINTN) BltOperation) >= EfiGraphicsOutputBltOperationMax) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- \r
- Private = GRAPHICS_OUTPUT_SPLITTER_PRIVATE_DATA_FROM_THIS (This);\r
-\r
- ReturnStatus = EFI_SUCCESS;\r
-\r
- //\r
- // return the worst status met\r
- //\r
- for (Index = 0; Index < Private->CurrentNumberOfConsoles; Index++) {\r
- GraphicsOutput = Private->TextOutList[Index].GraphicsOutput;\r
- if (GraphicsOutput != NULL) {\r
- Status = GraphicsOutput->Blt (\r
- GraphicsOutput,\r
- BltBuffer,\r
- BltOperation,\r
- SourceX,\r
- SourceY,\r
- DestinationX,\r
- DestinationY,\r
- Width,\r
- Height,\r
- Delta\r
- );\r
- if (EFI_ERROR (Status)) {\r
- ReturnStatus = Status;\r
- } else if (BltOperation == EfiBltVideoToBltBuffer) {\r
- //\r
- // Only need to read the data into buffer one time\r
- //\r
- return EFI_SUCCESS;\r
- }\r
- }\r
-\r
- UgaDraw = Private->TextOutList[Index].UgaDraw;\r
- if (UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {\r
- Status = UgaDraw->Blt (\r
- UgaDraw,\r
- (EFI_UGA_PIXEL *) BltBuffer,\r
- (EFI_UGA_BLT_OPERATION) BltOperation,\r
- SourceX,\r
- SourceY,\r
- DestinationX,\r
- DestinationY,\r
- Width,\r
- Height,\r
- Delta\r
- );\r
- if (EFI_ERROR (Status)) {\r
- ReturnStatus = Status;\r
- } else if (BltOperation == EfiBltVideoToBltBuffer) {\r
- //\r
- // Only need to read the data into buffer one time\r
- //\r
- return EFI_SUCCESS;\r
- }\r
- }\r
- }\r
-\r
- return ReturnStatus;\r
-}\r
-\r
-/**\r
- Return the current video mode information.\r
-\r
- @param This The EFI_UGA_DRAW_PROTOCOL instance.\r
- @param HorizontalResolution The size of video screen in pixels in the X dimension.\r
- @param VerticalResolution The size of video screen in pixels in the Y dimension.\r
- @param ColorDepth Number of bits per pixel, currently defined to be 32.\r
- @param RefreshRate The refresh rate of the monitor in Hertz.\r
-\r
- @retval EFI_SUCCESS Mode information returned.\r
- @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode ()\r
- @retval EFI_INVALID_PARAMETER One of the input args was NULL.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-ConSplitterUgaDrawGetMode (\r
- IN EFI_UGA_DRAW_PROTOCOL *This,\r
- OUT UINT32 *HorizontalResolution,\r
- OUT UINT32 *VerticalResolution,\r
- OUT UINT32 *ColorDepth,\r
- OUT UINT32 *RefreshRate\r
- )\r
-{\r
- TEXT_OUT_SPLITTER_PRIVATE_DATA *Private;\r
-\r
- if ((HorizontalResolution == NULL) ||\r
- (VerticalResolution == NULL) ||\r
- (RefreshRate == NULL) ||\r
- (ColorDepth == NULL)) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- //\r
- // retrieve private data\r
- //\r
- Private = UGA_DRAW_SPLITTER_PRIVATE_DATA_FROM_THIS (This);\r
-\r
- *HorizontalResolution = Private->UgaHorizontalResolution;\r
- *VerticalResolution = Private->UgaVerticalResolution;\r
- *ColorDepth = Private->UgaColorDepth;\r
- *RefreshRate = Private->UgaRefreshRate;\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-\r
-/**\r
- Set the current video mode information.\r
-\r
- @param This The EFI_UGA_DRAW_PROTOCOL instance.\r
- @param HorizontalResolution The size of video screen in pixels in the X dimension.\r
- @param VerticalResolution The size of video screen in pixels in the Y dimension.\r
- @param ColorDepth Number of bits per pixel, currently defined to be 32.\r
- @param RefreshRate The refresh rate of the monitor in Hertz.\r
-\r
- @retval EFI_SUCCESS Mode information returned.\r
- @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode ()\r
- @retval EFI_OUT_OF_RESOURCES Out of resources.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-ConSplitterUgaDrawSetMode (\r
- IN EFI_UGA_DRAW_PROTOCOL *This,\r
- IN UINT32 HorizontalResolution,\r
- IN UINT32 VerticalResolution,\r
- IN UINT32 ColorDepth,\r
- IN UINT32 RefreshRate\r
- )\r
-{\r
- EFI_STATUS Status;\r
- TEXT_OUT_SPLITTER_PRIVATE_DATA *Private;\r
- UINTN Index;\r
- EFI_STATUS ReturnStatus;\r
- EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;\r
- UINTN NumberIndex;\r
- UINTN SizeOfInfo;\r
- EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;\r
- EFI_UGA_DRAW_PROTOCOL *UgaDraw;\r
-\r
- Private = UGA_DRAW_SPLITTER_PRIVATE_DATA_FROM_THIS (This);\r
-\r
- ReturnStatus = EFI_SUCCESS;\r
-\r
- //\r
- // Update the Mode data\r
- //\r
- Private->UgaHorizontalResolution = HorizontalResolution;\r
- Private->UgaVerticalResolution = VerticalResolution;\r
- Private->UgaColorDepth = ColorDepth;\r
- Private->UgaRefreshRate = RefreshRate;\r
-\r
- //\r
- // return the worst status met\r
- //\r
- for (Index = 0; Index < Private->CurrentNumberOfConsoles; Index++) {\r
-\r
- GraphicsOutput = Private->TextOutList[Index].GraphicsOutput;\r
- if (GraphicsOutput != NULL) {\r
- //\r
- // Find corresponding ModeNumber of this GraphicsOutput instance\r
- //\r
- for (NumberIndex = 0; NumberIndex < GraphicsOutput->Mode->MaxMode; NumberIndex ++) {\r
- Status = GraphicsOutput->QueryMode (GraphicsOutput, (UINT32) NumberIndex, &SizeOfInfo, &Info);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
- if ((Info->HorizontalResolution == HorizontalResolution) && (Info->VerticalResolution == VerticalResolution)) {\r
- FreePool (Info);\r
- break;\r
- }\r
- FreePool (Info);\r
- }\r
-\r
- Status = GraphicsOutput->SetMode (GraphicsOutput, (UINT32) NumberIndex);\r
- if (EFI_ERROR (Status)) {\r
- ReturnStatus = Status;\r
- }\r
- } else if (FeaturePcdGet (PcdUgaConsumeSupport)){\r
- UgaDraw = Private->TextOutList[Index].UgaDraw;\r
- if (UgaDraw != NULL) {\r
- Status = UgaDraw->SetMode (\r
- UgaDraw,\r
- HorizontalResolution,\r
- VerticalResolution,\r
- ColorDepth,\r
- RefreshRate\r
- );\r
- if (EFI_ERROR (Status)) {\r
- ReturnStatus = Status;\r
- }\r
- }\r
- }\r
- }\r
-\r
- return ReturnStatus;\r
-}\r
-\r
-\r
-/**\r
- Blt a rectangle of pixels on the graphics screen.\r
-\r
- The following table defines actions for BltOperations.\r
-\r
- EfiUgaVideoFill:\r
- Write data from the BltBuffer pixel (SourceX, SourceY)\r
- directly to every pixel of the video display rectangle\r
- (DestinationX, DestinationY)\r
- (DestinationX + Width, DestinationY + Height).\r
- Only one pixel will be used from the BltBuffer. Delta is NOT used.\r
- EfiUgaVideoToBltBuffer:\r
- Read data from the video display rectangle\r
- (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in\r
- the BltBuffer rectangle (DestinationX, DestinationY )\r
- (DestinationX + Width, DestinationY + Height). If DestinationX or\r
- DestinationY is not zero then Delta must be set to the length in bytes\r
- of a row in the BltBuffer.\r
- EfiUgaBltBufferToVideo:\r
- Write data from the BltBuffer rectangle\r
- (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the\r
- video display rectangle (DestinationX, DestinationY)\r
- (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is\r
- not zero then Delta must be set to the length in bytes of a row in the\r
- BltBuffer.\r
- EfiUgaVideoToVideo:\r
- Copy from the video display rectangle\r
- (SourceX, SourceY) (SourceX + Width, SourceY + Height) .\r
- to the video display rectangle (DestinationX, DestinationY)\r
- (DestinationX + Width, DestinationY + Height).\r
- The BltBuffer and Delta are not used in this mode.\r
-\r
- @param This Protocol instance pointer.\r
- @param BltBuffer Buffer containing data to blit into video buffer. This\r
- buffer has a size of Width*Height*sizeof(EFI_UGA_PIXEL)\r
- @param BltOperation Operation to perform on BlitBuffer and video memory\r
- @param SourceX X coordinate of source for the BltBuffer.\r
- @param SourceY Y coordinate of source for the BltBuffer.\r
- @param DestinationX X coordinate of destination for the BltBuffer.\r
- @param DestinationY Y coordinate of destination for the BltBuffer.\r
- @param Width Width of rectangle in BltBuffer in pixels.\r
- @param Height Hight of rectangle in BltBuffer in pixels.\r
- @param Delta OPTIONAL\r
-\r
- @retval EFI_SUCCESS The Blt operation completed.\r
- @retval EFI_INVALID_PARAMETER BltOperation is not valid.\r
- @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-ConSplitterUgaDrawBlt (\r
- IN EFI_UGA_DRAW_PROTOCOL *This,\r
- IN EFI_UGA_PIXEL *BltBuffer, OPTIONAL\r
- IN EFI_UGA_BLT_OPERATION BltOperation,\r
- IN UINTN SourceX,\r
- IN UINTN SourceY,\r
- IN UINTN DestinationX,\r
- IN UINTN DestinationY,\r
- IN UINTN Width,\r
- IN UINTN Height,\r
- IN UINTN Delta OPTIONAL\r
- )\r
-{\r
- EFI_STATUS Status;\r
- TEXT_OUT_SPLITTER_PRIVATE_DATA *Private;\r
- UINTN Index;\r
- EFI_STATUS ReturnStatus;\r
- EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;\r
-\r
- Private = UGA_DRAW_SPLITTER_PRIVATE_DATA_FROM_THIS (This);\r
-\r
- ReturnStatus = EFI_SUCCESS;\r
- //\r
- // return the worst status met\r
- //\r
- for (Index = 0; Index < Private->CurrentNumberOfConsoles; Index++) {\r
- GraphicsOutput = Private->TextOutList[Index].GraphicsOutput;\r
- if (GraphicsOutput != NULL) {\r
- Status = GraphicsOutput->Blt (\r
- GraphicsOutput,\r
- (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *) BltBuffer,\r
- (EFI_GRAPHICS_OUTPUT_BLT_OPERATION) BltOperation,\r
- SourceX,\r
- SourceY,\r
- DestinationX,\r
- DestinationY,\r
- Width,\r
- Height,\r
- Delta\r
- );\r
- if (EFI_ERROR (Status)) {\r
- ReturnStatus = Status;\r
- } else if (BltOperation == EfiUgaVideoToBltBuffer) {\r
- //\r
- // Only need to read the data into buffer one time\r
- //\r
- return EFI_SUCCESS;\r
- }\r
- }\r
-\r
- if (Private->TextOutList[Index].UgaDraw != NULL && FeaturePcdGet (PcdUgaConsumeSupport)) {\r
- Status = Private->TextOutList[Index].UgaDraw->Blt (\r
- Private->TextOutList[Index].UgaDraw,\r
- BltBuffer,\r
- BltOperation,\r
- SourceX,\r
- SourceY,\r
- DestinationX,\r
- DestinationY,\r
- Width,\r
- Height,\r
- Delta\r
- );\r
- if (EFI_ERROR (Status)) {\r
- ReturnStatus = Status;\r
- } else if (BltOperation == EfiUgaVideoToBltBuffer) {\r
- //\r
- // Only need to read the data into buffer one time\r
- //\r
- return EFI_SUCCESS;\r
- }\r
- }\r
- }\r
-\r
- return ReturnStatus;\r
-}\r
-\r
-/**\r
- Sets the output device(s) to a specified mode.\r
-\r
- @param Private Text Out Splitter pointer.\r
- @param ModeNumber The mode number to set.\r
-\r
-**/\r
-VOID\r
-TextOutSetMode (\r
- IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private,\r
- IN UINTN ModeNumber\r
- )\r
-{\r
- //\r
- // No need to do extra check here as whether (Column, Row) is valid has\r
- // been checked in ConSplitterTextOutSetCursorPosition. And (0, 0) should\r
- // always be supported.\r
- //\r
- Private->TextOutMode.Mode = (INT32) ModeNumber;\r
- Private->TextOutMode.CursorColumn = 0;\r
- Private->TextOutMode.CursorRow = 0;\r
- Private->TextOutMode.CursorVisible = TRUE;\r
-\r
- return;\r
-}\r