EmulatorPkg: Remove UGA support

The Universal Graphics Adapter (UGA) is a graphic abstraction.
The UGA I/O and Draw protocols are deprecated since UEFI 2.0 was
introduced. Cf. the UEFI spec v2.9:
"Appendix L - EFI 1.10 Protocol Changes and Deprecation List"
section L.2 "Deprecated Protocols"

Remove the UGA support.

Signed-off-by: GuoMinJ <newexplorerj@gmail.com>
Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
This commit is contained in:
GuoMinJ
2025-06-12 17:40:57 +02:00
committed by mergify[bot]
parent d97f415b52
commit b2f90ef115
12 changed files with 84 additions and 87 deletions
+3 -5
View File
@@ -6,8 +6,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef __UGA_H_
#define __UGA_H_
#ifndef __GOP_H_
#define __GOP_H_
#include <PiDxe.h>
@@ -60,8 +60,6 @@ typedef struct {
extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding;
extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName;
#define EMU_UGA_CLASS_NAME L"EmuGopWindow"
#define GOP_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('G', 'o', 'p', 'N')
typedef struct {
UINT64 Signature;
@@ -83,7 +81,7 @@ typedef struct {
GOP_MODE_DATA *ModeData;
//
// UGA Private Data knowing when to start hardware
// Private Data knowing when to start hardware
//
BOOLEAN HardwareNeedsStarting;
+7 -7
View File
@@ -10,7 +10,7 @@ Module Name:
Abstract:
This file produces the graphics abstration of UGA. It is called by
This file produces the graphics abstration of GOP. It is called by
EmuGopDriver.c file which deals with the EFI 1.1 driver model.
This file just does graphics.
@@ -209,7 +209,7 @@ EmuGopBlt (
// the number of bytes in each row can be computed.
//
if (Delta == 0) {
Delta = Width * sizeof (EFI_UGA_PIXEL);
Delta = Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
}
//
@@ -220,8 +220,8 @@ EmuGopBlt (
OriginalTPL = gBS->RaiseTPL (TPL_NOTIFY);
//
// Pack UGA Draw protocol parameters to EMU_GRAPHICS_WINDOWS__BLT_ARGS structure to adapt to
// GopBlt() API of Unix UGA IO protocol.
// Pack GOP protocol parameters to EMU_GRAPHICS_WINDOWS__BLT_ARGS structure to adapt to
// GopBlt() API of GOP protocol.
//
GopBltArgs.DestinationX = DestinationX;
GopBltArgs.DestinationY = DestinationY;
@@ -232,8 +232,8 @@ EmuGopBlt (
GopBltArgs.Delta = Delta;
Status = Private->EmuGraphicsWindow->Blt (
Private->EmuGraphicsWindow,
(EFI_UGA_PIXEL *)BltBuffer,
(EFI_UGA_BLT_OPERATION)BltOperation,
BltBuffer,
BltOperation,
&GopBltArgs
);
@@ -384,7 +384,7 @@ ShutdownGopEvent (
Routine Description:
This is the UGA screen's callback notification function for exit-boot-services.
This is the screen's callback notification function for exit-boot-services.
All we do here is call EmuGopDestructor().
Arguments:
+9 -9
View File
@@ -13,13 +13,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _EMU_UGA_IO_H_
#define _EMU_UGA_IO_H_
#ifndef _EMU_GRAPHICS_WINDOW_H_
#define _EMU_GRAPHICS_WINDOW_H_
#include <Protocol/SimplePointer.h>
#include <Protocol/SimpleTextIn.h>
#include <Protocol/SimpleTextInEx.h>
#include <Protocol/UgaDraw.h>
#include <Protocol/GraphicsOutput.h>
#define EMU_GRAPHICS_WINDOW_PROTOCOL_GUID \
{ 0x30FD316A, 0x6728, 0x2E41, { 0xA6, 0x90, 0x0D, 0x13, 0x33, 0xD8, 0xCA, 0xC1 } }
@@ -29,13 +29,13 @@ typedef struct _EMU_GRAPHICS_WINDOW_PROTOCOL EMU_GRAPHICS_WINDOW_PROTOCOL;
typedef
EFI_STATUS
(EFIAPI *EMU_GRAPHICS_WINDOWS_CLOSE)(
EMU_GRAPHICS_WINDOW_PROTOCOL *Uga
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows
);
typedef
EFI_STATUS
(EFIAPI *EMU_GRAPHICS_WINDOWS_SIZE)(
EMU_GRAPHICS_WINDOW_PROTOCOL *Uga,
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows,
UINT32 Width,
UINT32 Height
);
@@ -43,13 +43,13 @@ EFI_STATUS
typedef
EFI_STATUS
(EFIAPI *EMU_GRAPHICS_WINDOWS_CHECK_KEY)(
EMU_GRAPHICS_WINDOW_PROTOCOL *Uga
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows
);
typedef
EFI_STATUS
(EFIAPI *EMU_GRAPHICS_WINDOWS_GET_KEY)(
EMU_GRAPHICS_WINDOW_PROTOCOL *Uga,
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows,
EFI_KEY_DATA *key
);
@@ -89,8 +89,8 @@ typedef
EFI_STATUS
(EFIAPI *EMU_GRAPHICS_WINDOWS_BLT)(
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows,
IN EFI_UGA_PIXEL *BltBuffer OPTIONAL,
IN EFI_UGA_BLT_OPERATION BltOperation,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL,
IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args
);
@@ -6,13 +6,13 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _EMU_UGA_IO_H_
#define _EMU_UGA_IO_H_
#ifndef _EMU_GRAPHICS_WINDOW_H_
#define _EMU_GRAPHICS_WINDOW_H_
#include <Protocol/SimplePointer.h>
#include <Protocol/SimpleTextIn.h>
#include <Protocol/SimpleTextInEx.h>
#include <Protocol/UgaDraw.h>
#include <Protocol/GraphicsOutput.h>
#define EMU_GRAPHICS_WINDOW_PROTOCOL_GUID \
{ 0x30FD316A, 0x6728, 0x2E41, { 0xA6, 0x90, 0x0D, 0x13, 0x33, 0xD8, 0xCA, 0xC1 } }
@@ -22,13 +22,13 @@ typedef struct _EMU_GRAPHICS_WINDOW_PROTOCOL EMU_GRAPHICS_WINDOW_PROTOCOL;
typedef
EFI_STATUS
(EFIAPI *EMU_GRAPHICS_WINDOWS_CLOSE)(
EMU_GRAPHICS_WINDOW_PROTOCOL *Uga
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindow
);
typedef
EFI_STATUS
(EFIAPI *EMU_GRAPHICS_WINDOWS_SIZE)(
EMU_GRAPHICS_WINDOW_PROTOCOL *Uga,
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindow,
UINT32 Width,
UINT32 Height
);
@@ -36,13 +36,13 @@ EFI_STATUS
typedef
EFI_STATUS
(EFIAPI *EMU_GRAPHICS_WINDOWS_CHECK_KEY)(
EMU_GRAPHICS_WINDOW_PROTOCOL *Uga
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindow
);
typedef
EFI_STATUS
(EFIAPI *EMU_GRAPHICS_WINDOWS_GET_KEY)(
EMU_GRAPHICS_WINDOW_PROTOCOL *Uga,
EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindow,
EFI_KEY_DATA *key
);
@@ -83,8 +83,8 @@ typedef
EFI_STATUS
(EFIAPI *EMU_GRAPHICS_WINDOWS_BLT)(
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows,
IN EFI_UGA_PIXEL *BltBuffer OPTIONAL,
IN EFI_UGA_BLT_OPERATION BltOperation,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL,
IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args
);
@@ -60,7 +60,7 @@ typedef struct {
EMU_VENDOR_DEVICE_PATH_NODE EmuBus;
EMU_VENDOR_DEVICE_PATH_NODE EmuGraphicsWindow;
EFI_DEVICE_PATH_PROTOCOL End;
} EMU_PLATFORM_UGA_DEVICE_PATH;
} EMU_PLATFORM_GRAPHICS_WINDOW_DEVICE_PATH;
//
// Platform BDS Functions
@@ -8,7 +8,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include "PlatformBm.h"
EMU_PLATFORM_UGA_DEVICE_PATH gGopDevicePath = {
EMU_PLATFORM_GRAPHICS_WINDOW_DEVICE_PATH gGopDevicePath = {
{
{
{
@@ -40,7 +40,7 @@ EMU_PLATFORM_UGA_DEVICE_PATH gGopDevicePath = {
gEndEntire
};
EMU_PLATFORM_UGA_DEVICE_PATH gGopDevicePath2 = {
EMU_PLATFORM_GRAPHICS_WINDOW_DEVICE_PATH gGopDevicePath2 = {
{
{
{
+5 -5
View File
@@ -200,7 +200,7 @@ ReverseGasketUint64Uint64 (
);
//
// Gasket functions for EFI_EMU_UGA_IO_PROTOCOL
// Gasket functions for EFI_EMU_GRAPHICS_WINDOW_PROTOCOL
//
EFI_STATUS
@@ -243,10 +243,10 @@ GasketX11RegisterKeyNotify (
EFI_STATUS
EFIAPI
GasketX11Blt (
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows,
IN EFI_UGA_PIXEL *BltBuffer OPTIONAL,
IN EFI_UGA_BLT_OPERATION BltOperation,
IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsWindows,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL,
IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args
);
EFI_STATUS
-1
View File
@@ -106,7 +106,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#include <Protocol/SimplePointer.h>
#include <Protocol/SimpleTextIn.h>
#include <Protocol/SimpleTextInEx.h>
#include <Protocol/UgaDraw.h>
#include <Protocol/SimpleFileSystem.h>
#include <Protocol/EmuThunk.h>
+1 -1
View File
@@ -371,7 +371,7 @@ ASM_PFX(GasketSecEmuThunkAddress):
ret
//
// Gasket functions for EFI_EMU_UGA_IO_PROTOCOL
// Gasket functions for EFI_EMU_GRAPHICS_WINDOW_PROTOCOL
//
ASM_GLOBAL ASM_PFX(GasketX11Size)
+41 -41
View File
@@ -700,8 +700,8 @@ HandleEvents (
unsigned long
X11PixelToColor (
IN GRAPHICS_IO_PRIVATE *Drv,
IN EFI_UGA_PIXEL pixel
IN GRAPHICS_IO_PRIVATE *Drv,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL pixel
)
{
return ((pixel.Red >> Drv->r.csize) << Drv->r.shift)
@@ -709,15 +709,15 @@ X11PixelToColor (
| ((pixel.Blue >> Drv->b.csize) << Drv->b.shift);
}
EFI_UGA_PIXEL
EFI_GRAPHICS_OUTPUT_BLT_PIXEL
X11ColorToPixel (
IN GRAPHICS_IO_PRIVATE *Drv,
IN unsigned long val
)
{
EFI_UGA_PIXEL Pixel;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel;
memset (&Pixel, 0, sizeof (EFI_UGA_PIXEL));
memset (&Pixel, 0, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
// Truncation not an issue since X11 and EFI are both using 8 bits per color
Pixel.Red = (val >> Drv->r.shift) << Drv->r.csize;
@@ -782,7 +782,7 @@ X11KeySetState (
if ((Drv->KeyState.KeyToggleState & EFI_CAPS_LOCK_ACTIVE) == 0) {
//
// We could create an XKeyEvent and send a XK_Caps_Lock to
// the UGA/GOP Window
// the GOP Window
//
}
}
@@ -812,32 +812,32 @@ X11RegisterKeyNotify (
EFI_STATUS
X11Blt (
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,
IN EFI_UGA_PIXEL *BltBuffer OPTIONAL,
IN EFI_UGA_BLT_OPERATION BltOperation,
IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL,
IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args
)
{
GRAPHICS_IO_PRIVATE *Private;
UINTN DstY;
UINTN SrcY;
UINTN DstX;
UINTN SrcX;
UINTN Index;
EFI_UGA_PIXEL *Blt;
UINT8 *Dst;
UINT8 *Src;
UINTN Nbr;
unsigned long Color;
XEvent ev;
GRAPHICS_IO_PRIVATE *Private;
UINTN DstY;
UINTN SrcY;
UINTN DstX;
UINTN SrcX;
UINTN Index;
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt;
UINT8 *Dst;
UINT8 *Src;
UINTN Nbr;
unsigned long Color;
XEvent ev;
Private = (GRAPHICS_IO_PRIVATE *)GraphicsIo;
//
// Check bounds
//
if ( (BltOperation == EfiUgaVideoToBltBuffer)
|| (BltOperation == EfiUgaVideoToVideo))
if ( (BltOperation == EfiBltVideoToBltBuffer)
|| (BltOperation == EfiBltVideoToVideo))
{
//
// Source is Video.
@@ -851,9 +851,9 @@ X11Blt (
}
}
if ( (BltOperation == EfiUgaBltBufferToVideo)
|| (BltOperation == EfiUgaVideoToVideo)
|| (BltOperation == EfiUgaVideoFill))
if ( (BltOperation == EfiBltBufferToVideo)
|| (BltOperation == EfiBltVideoToVideo)
|| (BltOperation == EfiBltVideoFill))
{
//
// Destination is Video
@@ -868,32 +868,32 @@ X11Blt (
}
switch (BltOperation) {
case EfiUgaVideoToBltBuffer:
Blt = (EFI_UGA_PIXEL *)((UINT8 *)BltBuffer + (Args->DestinationY * Args->Delta) + Args->DestinationX * sizeof (EFI_UGA_PIXEL));
Args->Delta -= Args->Width * sizeof (EFI_UGA_PIXEL);
case EfiBltVideoToBltBuffer:
Blt = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)((UINT8 *)BltBuffer + (Args->DestinationY * Args->Delta) + Args->DestinationX * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
Args->Delta -= Args->Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
for (SrcY = Args->SourceY; SrcY < (Args->Height + Args->SourceY); SrcY++) {
for (SrcX = Args->SourceX; SrcX < (Args->Width + Args->SourceX); SrcX++) {
*Blt++ = X11ColorToPixel (Private, XGetPixel (Private->image, SrcX, SrcY));
}
Blt = (EFI_UGA_PIXEL *)((UINT8 *)Blt + Args->Delta);
Blt = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)((UINT8 *)Blt + Args->Delta);
}
break;
case EfiUgaBltBufferToVideo:
Blt = (EFI_UGA_PIXEL *)((UINT8 *)BltBuffer + (Args->SourceY * Args->Delta) + Args->SourceX * sizeof (EFI_UGA_PIXEL));
Args->Delta -= Args->Width * sizeof (EFI_UGA_PIXEL);
case EfiBltBufferToVideo:
Blt = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)((UINT8 *)BltBuffer + (Args->SourceY * Args->Delta) + Args->SourceX * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
Args->Delta -= Args->Width * sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
for (DstY = Args->DestinationY; DstY < (Args->Height + Args->DestinationY); DstY++) {
for (DstX = Args->DestinationX; DstX < (Args->Width + Args->DestinationX); DstX++) {
XPutPixel (Private->image, DstX, DstY, X11PixelToColor (Private, *Blt));
Blt++;
}
Blt = (EFI_UGA_PIXEL *)((UINT8 *)Blt + Args->Delta);
Blt = (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)((UINT8 *)Blt + Args->Delta);
}
break;
case EfiUgaVideoToVideo:
case EfiBltVideoToVideo:
Dst = Private->image_data + (Args->DestinationX << Private->pixel_shift)
+ Args->DestinationY * Private->line_bytes;
Src = Private->image_data + (Args->SourceX << Private->pixel_shift)
@@ -920,7 +920,7 @@ X11Blt (
}
break;
case EfiUgaVideoFill:
case EfiBltVideoFill:
Color = X11PixelToColor (Private, *BltBuffer);
for (DstY = Args->DestinationY; DstY < (Args->Height + Args->DestinationY); DstY++) {
for (DstX = Args->DestinationX; DstX < (Args->Width + Args->DestinationX); DstX++) {
@@ -937,7 +937,7 @@ X11Blt (
// Refresh screen.
//
switch (BltOperation) {
case EfiUgaVideoToVideo:
case EfiBltVideoToVideo:
XCopyArea (
Private->display,
Private->win,
@@ -960,7 +960,7 @@ X11Blt (
}
break;
case EfiUgaVideoFill:
case EfiBltVideoFill:
Color = X11PixelToColor (Private, *BltBuffer);
XSetForeground (Private->display, Private->gc, Color);
XFillRectangle (
@@ -974,7 +974,7 @@ X11Blt (
);
XFlush (Private->display);
break;
case EfiUgaBltBufferToVideo:
case EfiBltBufferToVideo:
Redraw (Private, Args->DestinationX, Args->DestinationY, Args->Width, Args->Height);
break;
default:
@@ -1060,7 +1060,7 @@ X11GraphicsWindowOpen (
Drv->display = XOpenDisplay (display_name);
if (Drv->display == NULL) {
fprintf (stderr, "uga: cannot connect to X server %s\n", XDisplayName (display_name));
fprintf (stderr, "GOP: cannot connect to X server %s\n", XDisplayName (display_name));
free (Drv);
return EFI_DEVICE_ERROR;
}
+1 -1
View File
@@ -427,7 +427,7 @@ ASM_PFX(GasketSecEmuThunkAddress):
ret
//
// Gasket functions for EFI_EMU_UGA_IO_PROTOCOL
// Gasket functions for EFI_EMU_GRAPHICS_WINDOW_PROTOCOL
//
ASM_GLOBAL ASM_PFX(GasketX11Size)
+5 -5
View File
@@ -396,10 +396,10 @@ WinNtWndSize (
// TODO: Delta - add argument and description to function comment
EFI_STATUS
WinNtWndBlt (
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,
IN EFI_UGA_PIXEL *BltBuffer OPTIONAL,
IN EFI_UGA_BLT_OPERATION BltOperation,
IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args
IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL,
IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
IN EMU_GRAPHICS_WINDOWS__BLT_ARGS *Args
)
{
RETURN_STATUS RStatus;
@@ -423,7 +423,7 @@ WinNtWndBlt (
return (EFI_STATUS)RStatus;
}
if (BltOperation != EfiUgaVideoToBltBuffer) {
if (BltOperation != EfiBltVideoToBltBuffer) {
//
// Mark the area we just blted as Invalid so WM_PAINT will update.
//