| /*++ @file | |
| Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> | |
| Portions copyright (c) 2010,Apple Inc. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef __UGA_H_ | |
| #define __UGA_H_ | |
| #include <PiDxe.h> | |
| #include <Protocol/GraphicsOutput.h> | |
| #include <Protocol/SimpleTextIn.h> | |
| #include <Protocol/SimpleTextInEx.h> | |
| #include <Protocol/SimplePointer.h> | |
| #include <Protocol/EmuIoThunk.h> | |
| #include <Protocol/EmuGraphicsWindow.h> | |
| #include <Guid/EventGroup.h> | |
| #include <Library/DebugLib.h> | |
| #include <Library/BaseLib.h> | |
| #include <Library/UefiDriverEntryPoint.h> | |
| #include <Library/UefiLib.h> | |
| #include <Library/BaseMemoryLib.h> | |
| #include <Library/MemoryAllocationLib.h> | |
| #include <Library/UefiBootServicesTableLib.h> | |
| #include <Library/KeyMapLib.h> | |
| #define MAX_Q 256 | |
| typedef struct { | |
| UINTN Front; | |
| UINTN Rear; | |
| UINTN Count; | |
| EFI_INPUT_KEY Q[MAX_Q]; | |
| } GOP_QUEUE_FIXED; | |
| #define EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('U', 'g', 'S', 'n') | |
| typedef struct _EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY { | |
| UINTN Signature; | |
| EFI_HANDLE NotifyHandle; | |
| EFI_KEY_DATA KeyData; | |
| EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn; | |
| EFI_EVENT Event; | |
| LIST_ENTRY NotifyEntry; | |
| } EMU_GOP_SIMPLE_TEXTIN_EX_NOTIFY; | |
| #define GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER 0xffff | |
| typedef struct { | |
| UINT32 HorizontalResolution; | |
| UINT32 VerticalResolution; | |
| UINT32 ColorDepth; | |
| UINT32 RefreshRate; | |
| } GOP_MODE_DATA; | |
| 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; | |
| EFI_HANDLE Handle; | |
| EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput; | |
| EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleTextIn; | |
| EFI_SIMPLE_POINTER_PROTOCOL SimplePointer; | |
| EMU_IO_THUNK_PROTOCOL *EmuIoThunk; | |
| EMU_GRAPHICS_WINDOW_PROTOCOL *EmuGraphicsWindow; | |
| EFI_UNICODE_STRING_TABLE *ControllerNameTable; | |
| EFI_SIMPLE_POINTER_MODE PointerMode; | |
| // | |
| // GOP Private Data for QueryMode () | |
| // | |
| GOP_MODE_DATA *ModeData; | |
| // | |
| // UGA Private Data knowing when to start hardware | |
| // | |
| BOOLEAN HardwareNeedsStarting; | |
| CHAR16 *WindowName; | |
| GOP_QUEUE_FIXED Queue; | |
| EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleTextInEx; | |
| EFI_KEY_STATE KeyState; | |
| LIST_ENTRY NotifyList; | |
| } GOP_PRIVATE_DATA; | |
| #define GOP_PRIVATE_DATA_FROM_THIS(a) \ | |
| CR(a, GOP_PRIVATE_DATA, GraphicsOutput, GOP_PRIVATE_DATA_SIGNATURE) | |
| #define GOP_PRIVATE_DATA_FROM_TEXT_IN_THIS(a) \ | |
| CR(a, GOP_PRIVATE_DATA, SimpleTextIn, GOP_PRIVATE_DATA_SIGNATURE) | |
| #define GOP_PRIVATE_DATA_FROM_TEXT_IN_EX_THIS(a) \ | |
| CR(a, GOP_PRIVATE_DATA, SimpleTextInEx, GOP_PRIVATE_DATA_SIGNATURE) | |
| #define GOP_PRIVATE_DATA_FROM_POINTER_MODE_THIS(a) \ | |
| CR(a, GOP_PRIVATE_DATA, SimplePointer, GOP_PRIVATE_DATA_SIGNATURE) | |
| // | |
| // Global Protocol Variables | |
| // | |
| extern EFI_DRIVER_BINDING_PROTOCOL gEmuGopDriverBinding; | |
| extern EFI_COMPONENT_NAME_PROTOCOL gEmuGopComponentName; | |
| extern EFI_COMPONENT_NAME2_PROTOCOL gEmuGopComponentName2; | |
| // | |
| // Gop Hardware abstraction internal worker functions | |
| // | |
| EFI_STATUS | |
| EmuGopSupported ( | |
| IN EMU_IO_THUNK_PROTOCOL *EmuIoThunk | |
| ); | |
| EFI_STATUS | |
| EmuGopConstructor ( | |
| IN GOP_PRIVATE_DATA *Private | |
| ); | |
| EFI_STATUS | |
| EmuGopDestructor ( | |
| IN GOP_PRIVATE_DATA *Private | |
| ); | |
| EFI_STATUS | |
| GopPrivateAddQ ( | |
| IN GOP_PRIVATE_DATA *Private, | |
| IN EFI_INPUT_KEY Key | |
| ); | |
| EFI_STATUS | |
| EmuGopInitializeSimpleTextInForWindow ( | |
| IN GOP_PRIVATE_DATA *Private | |
| ); | |
| EFI_STATUS | |
| EmuGopInitializeSimplePointerForWindow ( | |
| IN GOP_PRIVATE_DATA *Private | |
| ); | |
| EFI_STATUS | |
| EmuGopStartWindow ( | |
| IN GOP_PRIVATE_DATA *Private, | |
| IN UINT32 HorizontalResolution, | |
| IN UINT32 VerticalResolution, | |
| IN UINT32 ColorDepth, | |
| IN UINT32 RefreshRate | |
| ); | |
| VOID | |
| EFIAPI | |
| ShutdownGopEvent ( | |
| IN EFI_EVENT Event, | |
| IN VOID *Context | |
| ); | |
| VOID | |
| EFIAPI | |
| GopPrivateMakeCallbackFunction ( | |
| IN VOID *Context, | |
| IN EFI_KEY_DATA *KeyData | |
| ); | |
| VOID | |
| EFIAPI | |
| GopPrivateBreakCallbackFunction ( | |
| IN VOID *Context, | |
| IN EFI_KEY_DATA *KeyData | |
| ); | |
| #endif |