/*++\r
\r
-Copyright (c) 2006 - 2007, Intel Corporation \r
-All rights reserved. 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
+Copyright (c) 2006 - 2007, Intel Corporation\r
+All rights reserved. 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
Module Name:\r
- \r
+\r
ConSplitterGraphics.c\r
\r
Abstract:\r
\r
Arguments:\r
This - Protocol instance pointer.\r
- Mode - Mode to set the \r
+ Mode - Mode to set the\r
\r
Returns:\r
EFI_SUCCESS - Mode information returned.\r
\r
//\r
// Judge current mode with wanted mode at first.\r
- // \r
+ //\r
if (Private->ConsoleOutputMode == Mode) {\r
return EFI_SUCCESS;\r
}\r
//\r
if ((Mode == EfiConsoleControlScreenGraphics) &&((TextAndGop->GraphicsOutput != NULL) || (TextAndGop->UgaDraw != NULL))) {\r
TextAndGop->TextOutEnabled = FALSE;\r
-#if (EFI_SPECIFICATION_VERSION >= 0x00020000)\r
DevNullGopSync (Private, TextAndGop->GraphicsOutput, TextAndGop->UgaDraw);\r
-#else\r
- DevNullUgaSync (Private, TextAndGop->UgaDraw);\r
-#endif\r
}\r
}\r
\r
return EFI_SUCCESS;\r
}\r
\r
-#if (EFI_SPECIFICATION_VERSION >= 0x00020000)\r
EFI_STATUS\r
EFIAPI\r
ConSpliterGraphicsOutputQueryMode (\r
)\r
{\r
UINTN SrcY;\r
- BOOLEAN Forward; \r
+ BOOLEAN Forward;\r
UINTN Index;\r
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltPtr;\r
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *ScreenPtr;\r
}\r
}\r
\r
-#else\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-ConSpliterUgaDrawGetMode (\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
-\r
- Routine Description:\r
- Return the current video mode information.\r
-\r
- Arguments:\r
- This - Protocol instance pointer.\r
- HorizontalResolution - Current video horizontal resolution in pixels\r
- VerticalResolution - Current video vertical resolution in pixels\r
- ColorDepth - Current video color depth in bits per pixel\r
- RefreshRate - Current video refresh rate in Hz.\r
-\r
- Returns:\r
- EFI_SUCCESS - Mode information returned.\r
- EFI_NOT_STARTED - Video display is not initialized. Call SetMode () \r
- EFI_INVALID_PARAMETER - One of the input args was NULL.\r
-\r
---*/\r
-{\r
- TEXT_OUT_SPLITTER_PRIVATE_DATA *Private;\r
-\r
- if (!(HorizontalResolution && VerticalResolution && RefreshRate && ColorDepth)) {\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
-EFI_STATUS\r
-EFIAPI\r
-ConSpliterUgaDrawSetMode (\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
-\r
- Routine Description:\r
- Return the current video mode information.\r
-\r
- Arguments:\r
- This - Protocol instance pointer.\r
- HorizontalResolution - Current video horizontal resolution in pixels\r
- VerticalResolution - Current video vertical resolution in pixels\r
- ColorDepth - Current video color depth in bits per pixel\r
- RefreshRate - Current video refresh rate in Hz.\r
-\r
- Returns:\r
- EFI_SUCCESS - Mode information returned.\r
- EFI_NOT_STARTED - Video display is not initialized. Call SetMode () \r
- EFI_OUT_OF_RESOURCES - Out of resources.\r
-\r
---*/\r
-{\r
- EFI_STATUS Status;\r
- TEXT_OUT_SPLITTER_PRIVATE_DATA *Private;\r
- UINTN Index;\r
- EFI_STATUS ReturnStatus;\r
- UINTN Size;\r
-\r
- Private = UGA_DRAW_SPLITTER_PRIVATE_DATA_FROM_THIS (This);\r
-\r
- //\r
- // UgaDevNullSetMode ()\r
- //\r
- ReturnStatus = EFI_SUCCESS;\r
-\r
- //\r
- // Free the old version\r
- //\r
- FreePool (Private->UgaBlt);\r
-\r
- //\r
- // Allocate the virtual Blt buffer\r
- //\r
- Size = HorizontalResolution * VerticalResolution * sizeof (EFI_UGA_PIXEL);\r
- Private->UgaBlt = AllocateZeroPool (Size);\r
- if (Private->UgaBlt == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
- }\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
- if (Private->ConsoleOutputMode != EfiConsoleControlScreenGraphics) {\r
- return ReturnStatus;\r
- }\r
- //\r
- // return the worst status met\r
- //\r
- for (Index = 0; Index < Private->CurrentNumberOfConsoles; Index++) {\r
- if (Private->TextOutList[Index].UgaDraw != NULL) {\r
- Status = Private->TextOutList[Index].UgaDraw->SetMode (\r
- Private->TextOutList[Index].UgaDraw,\r
- HorizontalResolution,\r
- VerticalResolution,\r
- ColorDepth,\r
- RefreshRate\r
- );\r
- if (EFI_ERROR (Status)) {\r
- ReturnStatus = Status;\r
- }\r
- }\r
- }\r
-\r
- return ReturnStatus;\r
-}\r
-\r
-EFI_STATUS\r
-DevNullUgaBlt (\r
- IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private,\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
- UINTN SrcY;\r
- BOOLEAN Forward;\r
- UINTN Index;\r
- EFI_UGA_PIXEL *BltPtr;\r
- EFI_UGA_PIXEL *ScreenPtr;\r
- UINT32 HorizontalResolution;\r
- UINT32 VerticalResolution;\r
-\r
- if ((BltOperation < 0) || (BltOperation >= EfiUgaBltMax)) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- if (Width == 0 || Height == 0) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- if (Delta == 0) {\r
- Delta = Width * sizeof (EFI_UGA_PIXEL);\r
- }\r
-\r
- HorizontalResolution = Private->UgaHorizontalResolution;\r
- VerticalResolution = Private->UgaVerticalResolution;\r
-\r
- //\r
- // We need to fill the Virtual Screen buffer with the blt data.\r
- //\r
- if (BltOperation == EfiUgaVideoToBltBuffer) {\r
- //\r
- // Video to BltBuffer: Source is Video, destination is BltBuffer\r
- //\r
- if ((SourceY + Height) > VerticalResolution) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- if ((SourceX + Width) > HorizontalResolution) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- BltPtr = (EFI_UGA_PIXEL *) ((UINT8 *) BltBuffer + DestinationY * Delta + DestinationX * sizeof (EFI_UGA_PIXEL));\r
- ScreenPtr = &Private->UgaBlt[SourceY * HorizontalResolution + SourceX];\r
- while (Height) {\r
- CopyMem (BltPtr, ScreenPtr, Width * sizeof (EFI_UGA_PIXEL));\r
- BltPtr = (EFI_UGA_PIXEL *) ((UINT8 *) BltPtr + Delta);\r
- ScreenPtr += HorizontalResolution;\r
- Height--;\r
- }\r
- } else {\r
- //\r
- // BltBuffer to Video: Source is BltBuffer, destination is Video\r
- //\r
- if (DestinationY + Height > VerticalResolution) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- if (DestinationX + Width > HorizontalResolution) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- if ((BltOperation == EfiUgaVideoToVideo) && (DestinationY > SourceY)) {\r
- //\r
- // Copy backwards, only care the Video to Video Blt\r
- //\r
- ScreenPtr = &Private->UgaBlt[(DestinationY + Height - 1) * HorizontalResolution + DestinationX];\r
- SrcY = SourceY + Height - 1;\r
- Forward = FALSE;\r
- } else {\r
- //\r
- // Copy forwards, for other cases\r
- //\r
- ScreenPtr = &Private->UgaBlt[DestinationY * HorizontalResolution + DestinationX];\r
- SrcY = SourceY;\r
- Forward = TRUE;\r
- }\r
-\r
- while (Height != 0) {\r
- if (BltOperation == EfiUgaVideoFill) {\r
- for (Index = 0; Index < Width; Index++) {\r
- ScreenPtr[Index] = *BltBuffer;\r
- }\r
- } else {\r
- if (BltOperation == EfiUgaBltBufferToVideo) {\r
- BltPtr = (EFI_UGA_PIXEL *) ((UINT8 *) BltBuffer + SrcY * Delta + SourceX * sizeof (EFI_UGA_PIXEL));\r
- } else {\r
- BltPtr = &Private->UgaBlt[SrcY * HorizontalResolution + SourceX];\r
- }\r
-\r
- CopyMem (ScreenPtr, BltPtr, Width * sizeof (EFI_UGA_PIXEL));\r
- }\r
-\r
- if (Forward) {\r
- ScreenPtr += HorizontalResolution;\r
- SrcY ++;\r
- } else {\r
- ScreenPtr -= HorizontalResolution;\r
- SrcY --;\r
- }\r
- Height--;\r
- }\r
- }\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-ConSpliterUgaDrawBlt (\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
-\r
- Routine Description:\r
- The following table defines actions for BltOperations:\r
- EfiUgaVideoFill - 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 - 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 - 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 - 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
- Arguments:\r
- This - Protocol instance pointer.\r
- BltBuffer - Buffer containing data to blit into video buffer. This \r
- buffer has a size of Width*Height*sizeof(EFI_UGA_PIXEL)\r
- BltOperation - Operation to perform on BlitBuffer and video memory\r
- SourceX - X coordinate of source for the BltBuffer.\r
- SourceY - Y coordinate of source for the BltBuffer.\r
- DestinationX - X coordinate of destination for the BltBuffer.\r
- DestinationY - Y coordinate of destination for the BltBuffer.\r
- Width - Width of rectangle in BltBuffer in pixels.\r
- Height - Hight of rectangle in BltBuffer in pixels.\r
- Delta -\r
- \r
- Returns:\r
- EFI_SUCCESS - The Blt operation completed.\r
- EFI_INVALID_PARAMETER - BltOperation is not valid.\r
- EFI_DEVICE_ERROR - A hardware error occured writting to the video \r
- buffer.\r
-\r
---*/\r
-{\r
- EFI_STATUS Status;\r
- TEXT_OUT_SPLITTER_PRIVATE_DATA *Private;\r
- UINTN Index;\r
- EFI_STATUS ReturnStatus;\r
-\r
- Private = UGA_DRAW_SPLITTER_PRIVATE_DATA_FROM_THIS (This);\r
-\r
- //\r
- // Sync up DevNull UGA device\r
- //\r
- ReturnStatus = DevNullUgaBlt (\r
- Private,\r
- BltBuffer,\r
- BltOperation,\r
- SourceX,\r
- SourceY,\r
- DestinationX,\r
- DestinationY,\r
- Width,\r
- Height,\r
- Delta\r
- );\r
- if (Private->ConsoleOutputMode != EfiConsoleControlScreenGraphics) {\r
- return ReturnStatus;\r
- }\r
- //\r
- // return the worst status met\r
- //\r
- for (Index = 0; Index < Private->CurrentNumberOfConsoles; Index++) {\r
- if (Private->TextOutList[Index].UgaDraw != NULL) {\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
-EFI_STATUS\r
-DevNullUgaSync (\r
- IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private,\r
- IN EFI_UGA_DRAW_PROTOCOL *UgaDraw\r
- )\r
-{\r
- return UgaDraw->Blt (\r
- UgaDraw,\r
- Private->UgaBlt,\r
- EfiUgaBltBufferToVideo,\r
- 0,\r
- 0,\r
- 0,\r
- 0,\r
- Private->UgaHorizontalResolution,\r
- Private->UgaVerticalResolution,\r
- Private->UgaHorizontalResolution * sizeof (EFI_UGA_PIXEL)\r
- );\r
-}\r
-#endif\r
\r
EFI_STATUS\r
DevNullTextOutOutputString (\r
Private - Pointer to the console output splitter's private data. It\r
indicates the calling context.\r
WString - The NULL-terminated Unicode string to be displayed on the output\r
- device(s). All output devices must also support the Unicode \r
+ device(s). All output devices must also support the Unicode\r
drawing defined in this file.\r
\r
Returns:\r
EFI_SUCCESS - The string was output to the device.\r
- EFI_DEVICE_ERROR - The device reported an error while attempting to \r
+ EFI_DEVICE_ERROR - The device reported an error while attempting to\r
output the text.\r
- EFI_UNSUPPORTED - The output device's mode is not currently in a \r
+ EFI_UNSUPPORTED - The output device's mode is not currently in a\r
defined text mode.\r
- EFI_WARN_UNKNOWN_GLYPH - This warning code indicates that some of the \r
- characters in the Unicode string could not be \r
+ EFI_WARN_UNKNOWN_GLYPH - This warning code indicates that some of the\r
+ characters in the Unicode string could not be\r
rendered and were skipped.\r
\r
--*/\r
\r
Returns:\r
EFI_SUCCESS - The requested text mode was set.\r
- EFI_DEVICE_ERROR - The device had an error and \r
+ EFI_DEVICE_ERROR - The device had an error and\r
could not complete the request.\r
EFI_UNSUPPORTED - The mode number was not valid.\r
EFI_OUT_OF_RESOURCES - Out of resources.\r
Private->TextOutMode.Mode = (INT32) ModeNumber;\r
Private->DevNullColumns = Column;\r
Private->DevNullRows = Row;\r
- \r
+\r
if (Private->DevNullScreen != NULL) {\r
FreePool (Private->DevNullScreen);\r
}\r
/*++\r
\r
Routine Description:\r
- Clears the output device(s) display to the currently selected background \r
+ Clears the output device(s) display to the currently selected background\r
color.\r
\r
Arguments:\r
\r
Returns:\r
EFI_SUCCESS - The operation completed successfully.\r
- EFI_DEVICE_ERROR - The device had an error and \r
+ EFI_DEVICE_ERROR - The device had an error and\r
could not complete the request.\r
EFI_UNSUPPORTED - The output device is not in a valid text mode.\r
\r
\r
Returns:\r
EFI_SUCCESS - The operation completed successfully.\r
- EFI_DEVICE_ERROR - The device had an error and \r
+ EFI_DEVICE_ERROR - The device had an error and\r
could not complete the request.\r
- EFI_UNSUPPORTED - The output device is not in a valid text mode, or the \r
+ EFI_UNSUPPORTED - The output device is not in a valid text mode, or the\r
cursor position is invalid for the current mode.\r
\r
--*/\r
)\r
/*++\r
Routine Description:\r
- \r
+\r
Implements SIMPLE_TEXT_OUTPUT.EnableCursor().\r
- In this driver, the cursor cannot be hidden. \r
- \r
+ In this driver, the cursor cannot be hidden.\r
+\r
Arguments:\r
- \r
+\r
Private - Indicates the calling context.\r
- \r
- Visible - If TRUE, the cursor is set to be visible, If FALSE, the cursor \r
- is set to be invisible. \r
+\r
+ Visible - If TRUE, the cursor is set to be visible, If FALSE, the cursor\r
+ is set to be invisible.\r
\r
Returns:\r
- \r
+\r
EFI_SUCCESS - The request is valid.\r
- \r
- \r
+\r
+\r
--*/\r
{\r
Private->TextOutMode.CursorVisible = Visible;\r
/*++\r
Routine Description:\r
Take the DevNull TextOut device and update the Simple Text Out on every\r
- UGA device. \r
- \r
+ UGA device.\r
+\r
Arguments:\r
Private - Indicates the calling context.\r
\r
Returns:\r
EFI_SUCCESS - The request is valid.\r
other - Return status of TextOut->OutputString ()\r
- \r
+\r
--*/\r
{\r
EFI_STATUS Status;\r