0,\r
FALSE,\r
},\r
+ {\r
+ ConSpliterUgaDrawGetMode,\r
+ ConSpliterUgaDrawSetMode,\r
+ ConSpliterUgaDrawBlt\r
+ },\r
+ 0,\r
+ 0,\r
+ 0,\r
+ 0,\r
+ (EFI_UGA_PIXEL *) NULL,\r
{\r
ConSpliterGraphicsOutputQueryMode,\r
ConSpliterGraphicsOutputSetMode,\r
0,\r
FALSE,\r
},\r
+ {\r
+ ConSpliterUgaDrawGetMode,\r
+ ConSpliterUgaDrawSetMode,\r
+ ConSpliterUgaDrawBlt\r
+ },\r
+ 0,\r
+ 0,\r
+ 0,\r
+ 0,\r
+ (EFI_UGA_PIXEL *) NULL,\r
{\r
ConSpliterGraphicsOutputQueryMode,\r
ConSpliterGraphicsOutputSetMode,\r
/**\r
The user Entry Point for module ConSplitter. The user code starts with this function.\r
\r
- @param[in] ImageHandle The firmware allocated handle for the EFI image. \r
+ @param[in] ImageHandle The firmware allocated handle for the EFI image.\r
@param[in] SystemTable A pointer to the EFI System Table.\r
- \r
+\r
@retval EFI_SUCCESS The entry point is executed successfully.\r
@retval other Some error occurs when executing this entry point.\r
\r
{\r
EFI_STATUS Status;\r
\r
+ ASSERT (FeaturePcdGet (PcdConOutGopSupport) ||\r
+ FeaturePcdGet (PcdConOutUgaSupport));\r
//\r
// The driver creates virtual handles for ConIn, ConOut, and StdErr.\r
// The virtual handles will always exist even if no console exist in the\r
//\r
Status = ConSplitterTextOutConstructor (&mConOut);\r
if (!EFI_ERROR (Status)) {\r
- //\r
- // In UEFI mode, Graphics Output Protocol is installed on virtual handle.\r
- //\r
- Status = gBS->InstallMultipleProtocolInterfaces (\r
- &mConOut.VirtualHandle,\r
- &gEfiSimpleTextOutProtocolGuid,\r
- &mConOut.TextOut,\r
- &gEfiGraphicsOutputProtocolGuid,\r
- &mConOut.GraphicsOutput,\r
- &gEfiConsoleControlProtocolGuid,\r
- &mConOut.ConsoleControl,\r
- &gEfiPrimaryConsoleOutDeviceGuid,\r
- NULL,\r
- NULL\r
- );\r
+ if (!FeaturePcdGet (PcdConOutGopSupport)) {\r
+ //\r
+ // In EFI mode, UGA Draw protocol is installed\r
+ //\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
+ &mConOut.VirtualHandle,\r
+ &gEfiSimpleTextOutProtocolGuid,\r
+ &mConOut.TextOut,\r
+ &gEfiUgaDrawProtocolGuid,\r
+ &mConOut.UgaDraw,\r
+ &gEfiConsoleControlProtocolGuid,\r
+ &mConOut.ConsoleControl,\r
+ &gEfiPrimaryConsoleOutDeviceGuid,\r
+ NULL,\r
+ NULL\r
+ );\r
+ } else if (!FeaturePcdGet (PcdConOutUgaSupport)) {\r
+ //\r
+ // In UEFI mode, Graphics Output Protocol is installed on virtual handle.\r
+ //\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
+ &mConOut.VirtualHandle,\r
+ &gEfiSimpleTextOutProtocolGuid,\r
+ &mConOut.TextOut,\r
+ &gEfiGraphicsOutputProtocolGuid,\r
+ &mConOut.GraphicsOutput,\r
+ &gEfiConsoleControlProtocolGuid,\r
+ &mConOut.ConsoleControl,\r
+ &gEfiPrimaryConsoleOutDeviceGuid,\r
+ NULL,\r
+ NULL\r
+ );\r
+ } else {\r
+ //\r
+ // In EFI and UEFI comptible mode, Graphics Output Protocol and UGA are\r
+ // installed on virtual handle.\r
+ //\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
+ &mConOut.VirtualHandle,\r
+ &gEfiSimpleTextOutProtocolGuid,\r
+ &mConOut.TextOut,\r
+ &gEfiGraphicsOutputProtocolGuid,\r
+ &mConOut.GraphicsOutput,\r
+ &gEfiUgaDrawProtocolGuid,\r
+ &mConOut.UgaDraw,\r
+ &gEfiConsoleControlProtocolGuid,\r
+ &mConOut.ConsoleControl,\r
+ &gEfiPrimaryConsoleOutDeviceGuid,\r
+ NULL,\r
+ NULL\r
+ );\r
+ }\r
\r
if (!EFI_ERROR (Status)) {\r
//\r
ConOutPrivate->TextOutQueryData[0].Rows = 25;\r
DevNullTextOutSetMode (ConOutPrivate, 0);\r
\r
- //\r
- // Setup resource for mode information in Graphics Output Protocol interface\r
- //\r
- if ((ConOutPrivate->GraphicsOutput.Mode = AllocateZeroPool (sizeof (EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE))) == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
- }\r
- if ((ConOutPrivate->GraphicsOutput.Mode->Info = AllocateZeroPool (sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION))) == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
- }\r
- //\r
- // Setup the DevNullGraphicsOutput to 800 x 600 x 32 bits per pixel\r
- //\r
- if ((ConOutPrivate->GraphicsOutputModeBuffer = AllocateZeroPool (sizeof (TEXT_OUT_GOP_MODE))) == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
+ if (FeaturePcdGet (PcdConOutUgaSupport)) {\r
+ //\r
+ // Setup the DevNullUgaDraw to 800 x 600 x 32 bits per pixel\r
+ //\r
+ ConSpliterUgaDrawSetMode (&ConOutPrivate->UgaDraw, 800, 600, 32, 60);\r
}\r
- ConOutPrivate->GraphicsOutputModeBuffer[0].HorizontalResolution = 800;\r
- ConOutPrivate->GraphicsOutputModeBuffer[0].VerticalResolution = 600;\r
+ if (FeaturePcdGet (PcdConOutGopSupport)) {\r
+ //\r
+ // Setup resource for mode information in Graphics Output Protocol interface\r
+ //\r
+ if ((ConOutPrivate->GraphicsOutput.Mode = AllocateZeroPool (sizeof (EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE))) == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+ if ((ConOutPrivate->GraphicsOutput.Mode->Info = AllocateZeroPool (sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION))) == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+ //\r
+ // Setup the DevNullGraphicsOutput to 800 x 600 x 32 bits per pixel\r
+ //\r
+ if ((ConOutPrivate->GraphicsOutputModeBuffer = AllocateZeroPool (sizeof (TEXT_OUT_GOP_MODE))) == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+ ConOutPrivate->GraphicsOutputModeBuffer[0].HorizontalResolution = 800;\r
+ ConOutPrivate->GraphicsOutputModeBuffer[0].VerticalResolution = 600;\r
\r
- //\r
- // Initialize the following items, theset items remain unchanged in GraphicsOutput->SetMode()\r
- // GraphicsOutputMode->Info->Version, GraphicsOutputMode->Info->PixelFormat\r
- // GraphicsOutputMode->SizeOfInfo, GraphicsOutputMode->FrameBufferBase, GraphicsOutputMode->FrameBufferSize\r
- //\r
- ConOutPrivate->GraphicsOutput.Mode->Info->Version = 0;\r
- ConOutPrivate->GraphicsOutput.Mode->Info->PixelFormat = PixelBltOnly;\r
- ConOutPrivate->GraphicsOutput.Mode->SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);\r
- ConOutPrivate->GraphicsOutput.Mode->FrameBufferBase = (EFI_PHYSICAL_ADDRESS) NULL;\r
- ConOutPrivate->GraphicsOutput.Mode->FrameBufferSize = 0;\r
+ //\r
+ // Initialize the following items, theset items remain unchanged in GraphicsOutput->SetMode()\r
+ // GraphicsOutputMode->Info->Version, GraphicsOutputMode->Info->PixelFormat\r
+ // GraphicsOutputMode->SizeOfInfo, GraphicsOutputMode->FrameBufferBase, GraphicsOutputMode->FrameBufferSize\r
+ //\r
+ ConOutPrivate->GraphicsOutput.Mode->Info->Version = 0;\r
+ ConOutPrivate->GraphicsOutput.Mode->Info->PixelFormat = PixelBltOnly;\r
+ ConOutPrivate->GraphicsOutput.Mode->SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);\r
+ ConOutPrivate->GraphicsOutput.Mode->FrameBufferBase = (EFI_PHYSICAL_ADDRESS) NULL;\r
+ ConOutPrivate->GraphicsOutput.Mode->FrameBufferSize = 0;\r
\r
- ConOutPrivate->GraphicsOutput.Mode->MaxMode = 1;\r
- //\r
- // Initial current mode to unknow state, and then set to mode 0\r
- //\r
- ConOutPrivate->GraphicsOutput.Mode->Mode = 0xffff;\r
- ConOutPrivate->GraphicsOutput.SetMode (&ConOutPrivate->GraphicsOutput, 0);\r
+ ConOutPrivate->GraphicsOutput.Mode->MaxMode = 1;\r
+ //\r
+ // Initial current mode to unknow state, and then set to mode 0\r
+ //\r
+ ConOutPrivate->GraphicsOutput.Mode->Mode = 0xffff;\r
+ ConOutPrivate->GraphicsOutput.SetMode (&ConOutPrivate->GraphicsOutput, 0);\r
+ }\r
\r
return Status;\r
}\r
Status = ConSplitterTextOutAddDevice (&mConOut, TextOut, GraphicsOutput, UgaDraw);\r
ConSplitterTextOutSetAttribute (&mConOut.TextOut, EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK));\r
\r
+ if (FeaturePcdGet (PcdConOutUgaSupport)) {\r
+ //\r
+ // Match the UGA mode data of ConOut with the current mode\r
+ //\r
+ if (UgaDraw != NULL) {\r
+ UgaDraw->GetMode (\r
+ UgaDraw,\r
+ &mConOut.UgaHorizontalResolution,\r
+ &mConOut.UgaVerticalResolution,\r
+ &mConOut.UgaColorDepth,\r
+ &mConOut.UgaRefreshRate\r
+ );\r
+ }\r
+ }\r
return Status;\r
}\r
\r
MaxMode = Private->TextOutMode.MaxMode;\r
ASSERT (MaxMode >= 1);\r
\r
- if ((GraphicsOutput != NULL) || (UgaDraw != NULL)) {\r
- ConSplitterAddGraphicsOutputMode (Private, GraphicsOutput, UgaDraw);\r
+ if (FeaturePcdGet (PcdConOutGopSupport)) {\r
+ if ((GraphicsOutput != NULL) || (UgaDraw != NULL)) {\r
+ ConSplitterAddGraphicsOutputMode (Private, GraphicsOutput, UgaDraw);\r
+ }\r
}\r
\r
if (Private->ConsoleOutputMode == EfiConsoleControlScreenGraphics && GraphicsOutput != NULL) {\r
//\r
// We just added a new UGA device in graphics mode\r
//\r
- DevNullGopSync (Private, GraphicsOutput, UgaDraw);\r
+ if (FeaturePcdGet (PcdConOutGopSupport)) {\r
+ DevNullGopSync (Private, TextAndGop->GraphicsOutput, TextAndGop->UgaDraw);\r
+ } else if (FeaturePcdGet (PcdConOutUgaSupport)) {\r
+ DevNullUgaSync (Private, TextAndGop->GraphicsOutput, TextAndGop->UgaDraw);\r
+ }\r
} else if ((CurrentMode >= 0) && ((GraphicsOutput != NULL) || (UgaDraw != NULL)) && (CurrentMode < Private->TextOutMode.MaxMode)) {\r
//\r
// The new console supports the same mode of the current console so sync up\r