| /** @file | |
| Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials | |
| are licensed and made available under the terms and conditions of the BSD License | |
| which accompanies this distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| Module Name: | |
| WinNtGop.h | |
| Abstract: | |
| Private data for the Gop driver that is bound to the WinNt Thunk protocol | |
| **/ | |
| #ifndef _WIN_NT_GOP_H_ | |
| #define _WIN_NT_GOP_H_ | |
| #include <Uefi.h> | |
| #include <WinNtDxe.h> | |
| #include <Guid/EventGroup.h> | |
| #include <Protocol/WinNtIo.h> | |
| #include <Protocol/ComponentName.h> | |
| #include <Protocol/SimpleTextIn.h> | |
| #include <Protocol/SimpleTextInEx.h> | |
| #include <Protocol/DriverBinding.h> | |
| #include <Protocol/GraphicsOutput.h> | |
| #include <Library/DebugLib.h> | |
| #include <Library/BaseLib.h> | |
| #include <Library/UefiDriverEntryPoint.h> | |
| #include <Library/UefiLib.h> | |
| #include <Library/BaseMemoryLib.h> | |
| #include <Library/UefiBootServicesTableLib.h> | |
| #include <Library/MemoryAllocationLib.h> | |
| // | |
| // 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" | |
| #define GOP_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('S', 'g', 'o', 'N') | |
| #define WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY_SIGNATURE SIGNATURE_32 ('W', 'g', 'S', 'n') | |
| typedef struct _WIN_NT_GOP_SIMPLE_TEXTIN_EX_NOTIFY { | |
| UINTN Signature; | |
| EFI_KEY_DATA KeyData; | |
| EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn; | |
| LIST_ENTRY NotifyEntry; | |
| } WIN_NT_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; | |
| typedef struct { | |
| UINT64 Signature; | |
| EFI_HANDLE Handle; | |
| EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput; | |
| EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleTextIn; | |
| EFI_WIN_NT_THUNK_PROTOCOL *WinNtThunk; | |
| EFI_UNICODE_STRING_TABLE *ControllerNameTable; | |
| // | |
| // GOP Private Data for QueryMode () | |
| // | |
| GOP_MODE_DATA *ModeData; | |
| // | |
| // 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; | |
| // | |
| // This screen is used to redraw the scree when windows events happen. It's | |
| // updated in the main thread and displayed in the windows thread. | |
| // | |
| BITMAPV4HEADER *VirtualScreenInfo; | |
| RGBQUAD *VirtualScreen; | |
| EFI_GRAPHICS_OUTPUT_BLT_PIXEL *FillLine; | |
| // | |
| // Keyboard Queue used by Simple Text In. | |
| // QueueForRead: WinProc thread adds, and main thread removes. | |
| // QueueForNotify: WinProc thread adds, and timer thread removes. | |
| // | |
| GOP_QUEUE_FIXED QueueForRead; | |
| GOP_QUEUE_FIXED QueueForNotify; | |
| EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL SimpleTextInEx; | |
| EFI_KEY_STATE KeyState; | |
| LIST_ENTRY NotifyList; | |
| 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; | |
| EFI_EVENT TimerEvent; | |
| } 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) | |
| // | |
| // Global Protocol Variables | |
| // | |
| extern EFI_DRIVER_BINDING_PROTOCOL gWinNtGopDriverBinding; | |
| extern EFI_COMPONENT_NAME_PROTOCOL gWinNtGopComponentName; | |
| extern EFI_COMPONENT_NAME2_PROTOCOL gWinNtGopComponentName2; | |
| // | |
| // Gop Hardware abstraction internal worker functions | |
| // | |
| /** | |
| TODO: Add function description | |
| @param WinNtIo TODO: add argument description | |
| @return TODO: add return values | |
| **/ | |
| EFI_STATUS | |
| WinNtGopSupported ( | |
| IN EFI_WIN_NT_IO_PROTOCOL *WinNtIo | |
| ); | |
| /** | |
| TODO: Add function description | |
| @param Private TODO: add argument description | |
| @return TODO: add return values | |
| **/ | |
| EFI_STATUS | |
| WinNtGopConstructor ( | |
| IN GOP_PRIVATE_DATA *Private | |
| ); | |
| /** | |
| TODO: Add function description | |
| @param Private TODO: add argument description | |
| @return TODO: add return values | |
| **/ | |
| EFI_STATUS | |
| WinNtGopDestructor ( | |
| IN GOP_PRIVATE_DATA *Private | |
| ); | |
| // | |
| // UEFI 2.0 driver model prototypes for Win NT GOP | |
| // | |
| /** | |
| TODO: Add function description | |
| @param ImageHandle TODO: add argument description | |
| @param SystemTable TODO: add argument description | |
| @return TODO: add return values | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| WinNtGopInitialize ( | |
| IN EFI_HANDLE ImageHandle, | |
| IN EFI_SYSTEM_TABLE *SystemTable | |
| ); | |
| /** | |
| TODO: Add function description | |
| @param This TODO: add argument description | |
| @param Handle TODO: add argument description | |
| @param RemainingDevicePath TODO: add argument description | |
| @return TODO: add return values | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| WinNtGopDriverBindingSupported ( | |
| IN EFI_DRIVER_BINDING_PROTOCOL *This, | |
| IN EFI_HANDLE Handle, | |
| IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath | |
| ); | |
| /** | |
| TODO: Add function description | |
| @param This TODO: add argument description | |
| @param Handle TODO: add argument description | |
| @param RemainingDevicePath TODO: add argument description | |
| @return TODO: add return values | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| WinNtGopDriverBindingStart ( | |
| IN EFI_DRIVER_BINDING_PROTOCOL *This, | |
| IN EFI_HANDLE Handle, | |
| IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath | |
| ); | |
| /** | |
| TODO: Add function description | |
| @param This TODO: add argument description | |
| @param Handle TODO: add argument description | |
| @param NumberOfChildren TODO: add argument description | |
| @param ChildHandleBuffer TODO: add argument description | |
| @return TODO: add return values | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| WinNtGopDriverBindingStop ( | |
| IN EFI_DRIVER_BINDING_PROTOCOL *This, | |
| IN EFI_HANDLE Handle, | |
| IN UINTN NumberOfChildren, | |
| IN EFI_HANDLE *ChildHandleBuffer | |
| ); | |
| /** | |
| 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 GOP_PRIVATE_DATA *Private, | |
| IN EFI_INPUT_KEY Key | |
| ); | |
| /** | |
| TODO: Add function description | |
| @param Private TODO: add argument description | |
| @return TODO: add return values | |
| **/ | |
| EFI_STATUS | |
| WinNtGopInitializeSimpleTextInForWindow ( | |
| IN GOP_PRIVATE_DATA *Private | |
| ); | |
| /** | |
| TODO: Add function description | |
| @param Private TODO: add argument description | |
| @return TODO: add return values | |
| **/ | |
| EFI_STATUS | |
| WinNtGopDestroySimpleTextInForWindow ( | |
| IN GOP_PRIVATE_DATA *Private | |
| ); | |
| #endif |