/*++ @file Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.
Portions copyright (c) 2010,Apple Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef __UGA_H_ #define __UGA_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #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