/** @file Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent Module Name: WinGop.h Abstract: Private data for the Gop driver that is bound to the WinNt Thunk protocol **/ #ifndef _WIN_GOP_H_ #define _WIN_GOP_H_ #include "WinHost.h" #include #include #include #include #include #include #include // // WM_SYSKEYDOWN/WM_SYSKEYUP Notification // lParam // bit 24: Specifies whether the key is an extended key, // such as the right-hand ALT and CTRL keys that appear on // an enhanced 101- or 102-key keyboard. // The value is 1 if it is an extended key; otherwise, it is 0. // bit 29:Specifies the context code. // The value is 1 if the ALT key is down while the key is pressed/released; // it is 0 if the WM_SYSKEYDOWN message is posted to the active window // because no window has the keyboard focus. #define GOP_EXTENDED_KEY (0x1 << 24) #define GOP_ALT_KEY_PRESSED (0x1 << 29) #define KEYBOARD_TIMER_INTERVAL 200000 // 0.02s #define MAX_Q 256 typedef struct { UINTN Front; UINTN Rear; EFI_KEY_DATA Q[MAX_Q]; CRITICAL_SECTION Cs; } GOP_QUEUE_FIXED; #define WIN_NT_GOP_CLASS_NAME L"WinNtGopWindow" typedef struct { UINT64 Signature; EMU_GRAPHICS_WINDOW_PROTOCOL GraphicsWindowIo; // // GOP Private Data knowing when to start hardware // BOOLEAN HardwareNeedsStarting; CHAR16 *WindowName; CHAR16 Buffer[160]; HANDLE ThreadInited; // Semaphore HANDLE ThreadHandle; // Thread DWORD ThreadId; HWND WindowHandle; WNDCLASSEX WindowsClass; UINT32 Width; UINT32 Height; // // This screen is used to redraw the screen when windows events happen. It's // updated in the main thread and displayed in the windows thread. // BITMAPV4HEADER *VirtualScreenInfo; FRAME_BUFFER_CONFIGURE *FrameBufferConfigure; // // Keyboard Queue used by Simple Text In. // QueueForRead: WinProc thread adds, and main thread removes. // GOP_QUEUE_FIXED QueueForRead; EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeRegisterdKeyCallback; EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakRegisterdKeyCallback; VOID *RegisterdKeyCallbackContext; EFI_KEY_STATE KeyState; BOOLEAN LeftShift; BOOLEAN RightShift; BOOLEAN LeftAlt; BOOLEAN RightAlt; BOOLEAN LeftCtrl; BOOLEAN RightCtrl; BOOLEAN LeftLogo; BOOLEAN RightLogo; BOOLEAN Menu; BOOLEAN SysReq; BOOLEAN NumLock; BOOLEAN ScrollLock; BOOLEAN CapsLock; BOOLEAN IsPartialKeySupport; INT32 PointerPreviousX; INT32 PointerPreviousY; BOOLEAN PointerStateChanged; EFI_SIMPLE_POINTER_STATE PointerState; } GRAPHICS_PRIVATE_DATA; #define GRAPHICS_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('g', 'f', 'x', 'd') #define GRAPHICS_PRIVATE_DATA_FROM_THIS(a) \ CR(a, GRAPHICS_PRIVATE_DATA, GraphicsWindowIo, GRAPHICS_PRIVATE_DATA_SIGNATURE) // // Gop Hardware abstraction internal worker functions // /** TODO: Add function description @param Private TODO: add argument description @param Key TODO: add argument description @return TODO: add return values **/ EFI_STATUS GopPrivateAddKey ( IN GRAPHICS_PRIVATE_DATA *Private, IN EFI_INPUT_KEY Key ); EFI_STATUS EFIAPI WinNtWndGetKey ( IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, IN EFI_KEY_DATA *KeyData ); EFI_STATUS EFIAPI WinNtWndCheckKey ( IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo ); EFI_STATUS EFIAPI WinNtWndKeySetState ( IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, IN EFI_KEY_TOGGLE_STATE *KeyToggleState ); EFI_STATUS EFIAPI WinNtWndRegisterKeyNotify ( IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK MakeCallBack, IN EMU_GRAPHICS_WINDOW_REGISTER_KEY_NOTIFY_CALLBACK BreakCallBack, IN VOID *Context ); EFI_STATUS EFIAPI WinNtWndCheckPointer ( IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo ); EFI_STATUS EFIAPI WinNtWndGetPointerState ( IN EMU_GRAPHICS_WINDOW_PROTOCOL *GraphicsIo, IN EFI_SIMPLE_POINTER_STATE *State ); EFI_STATUS GopPrivateCreateQ ( IN GRAPHICS_PRIVATE_DATA *Private, IN GOP_QUEUE_FIXED *Queue ); /** TODO: Add function description @param Private TODO: add argument description @retval EFI_SUCCESS TODO: Add description for return value **/ EFI_STATUS GopPrivateDestroyQ ( IN GRAPHICS_PRIVATE_DATA *Private, IN GOP_QUEUE_FIXED *Queue ); #endif