/** @file\r
Private data structures for the Console Splitter driver\r
\r
-Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
#define _CON_SPLITTER_H_\r
\r
#include <Uefi.h>\r
+#include <PiDxe.h>\r
\r
#include <Protocol/DevicePath.h>\r
#include <Protocol/ComponentName.h>\r
#include <Guid/ConsoleInDevice.h>\r
#include <Guid/StandardErrorDevice.h>\r
#include <Guid/ConsoleOutDevice.h>\r
+#include <Guid/ConnectConInEvent.h>\r
\r
#include <Library/PcdLib.h>\r
#include <Library/DebugLib.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
#include <Library/UefiRuntimeServicesTableLib.h>\r
\r
-\r
//\r
// Driver Binding Externs\r
//\r
//\r
// Private Data Structures\r
//\r
-#define CONSOLE_SPLITTER_CONSOLES_ALLOC_UNIT 32\r
-#define CONSOLE_SPLITTER_MODES_ALLOC_UNIT 32\r
+#define CONSOLE_SPLITTER_ALLOC_UNIT 32\r
\r
\r
typedef struct {\r
UINTN Rows;\r
} TEXT_OUT_SPLITTER_QUERY_DATA;\r
\r
+#define KEY_STATE_VALID_EXPOSED (EFI_TOGGLE_STATE_VALID | EFI_KEY_STATE_EXPOSED)\r
\r
#define TEXT_IN_EX_SPLITTER_NOTIFY_SIGNATURE SIGNATURE_32 ('T', 'i', 'S', 'n')\r
\r
//\r
typedef struct _TEXT_IN_EX_SPLITTER_NOTIFY {\r
UINTN Signature;\r
- EFI_HANDLE *NotifyHandleList;\r
- EFI_HANDLE NotifyHandle;\r
+ VOID **NotifyHandleList;\r
EFI_KEY_DATA KeyData;\r
EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn;\r
LIST_ENTRY NotifyEntry;\r
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL **TextInExList;\r
UINTN TextInExListCount;\r
LIST_ENTRY NotifyList;\r
+ //\r
+ // It will be initialized and synced between console input devices\r
+ // for toggle state sync.\r
+ //\r
+ EFI_KEY_TOGGLE_STATE PhysicalKeyToggleState;\r
+ //\r
+ // It will be initialized and used to record if virtual KeyState\r
+ // has been required to be exposed.\r
+ //\r
+ BOOLEAN VirtualKeyStateExported;\r
\r
\r
EFI_SIMPLE_POINTER_PROTOCOL SimplePointer;\r
\r
BOOLEAN KeyEventSignalState;\r
BOOLEAN InputEventSignalState;\r
+ EFI_EVENT ConnectConInEvent;\r
} TEXT_IN_SPLITTER_PRIVATE_DATA;\r
\r
#define TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \\r
Register a notification function for a particular keystroke for the input device.\r
\r
@param This Protocol instance pointer.\r
- @param KeyData A pointer to a buffer that is filled in with the\r
- keystroke information data for the key that was\r
- pressed.\r
+ @param KeyData A pointer to a buffer that is filled in with\r
+ the keystroke information for the key that was\r
+ pressed. If KeyData.Key, KeyData.KeyState.KeyToggleState\r
+ and KeyData.KeyState.KeyShiftState are 0, then any incomplete\r
+ keystroke will trigger a notification of the KeyNotificationFunction.\r
@param KeyNotificationFunction Points to the function to be called when the key\r
- sequence is typed specified by KeyData.\r
+ sequence is typed specified by KeyData. This notification function\r
+ should be called at <=TPL_CALLBACK.\r
@param NotifyHandle Points to the unique handle assigned to the\r
registered notification.\r
\r
IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
IN EFI_KEY_DATA *KeyData,\r
IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction,\r
- OUT EFI_HANDLE *NotifyHandle\r
+ OUT VOID **NotifyHandle\r
);\r
\r
\r
EFIAPI\r
ConSplitterTextInUnregisterKeyNotify (\r
IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
- IN EFI_HANDLE NotificationHandle\r
+ IN VOID *NotificationHandle\r
);\r
\r
/**\r
);\r
\r
/**\r
- Take the passed in Buffer of size SizeOfCount and grow the buffer\r
- by MAX (CONSOLE_SPLITTER_CONSOLES_ALLOC_UNIT, MaxGrow) * SizeOfCount\r
- bytes. Copy the current data in Buffer to the new version of Buffer\r
- and free the old version of buffer.\r
+ Take the passed in Buffer of size ElementSize and grow the buffer\r
+ by CONSOLE_SPLITTER_ALLOC_UNIT * ElementSize bytes.\r
+ Copy the current data in Buffer to the new version of Buffer and\r
+ free the old version of buffer.\r
\r
- @param SizeOfCount Size of element in array.\r
+ @param ElementSize Size of element in array.\r
@param Count Current number of elements in array.\r
@param Buffer Bigger version of passed in Buffer with all the\r
data.\r
**/\r
EFI_STATUS\r
ConSplitterGrowBuffer (\r
- IN UINTN SizeOfCount,\r
+ IN UINTN ElementSize,\r
IN OUT UINTN *Count,\r
IN OUT VOID **Buffer\r
);\r
IN UINTN ModeNumber\r
);\r
\r
-\r
#endif\r