/** @file\r
Private data structures for the Console Splitter driver\r
\r
-Copyright (c) 2006 - 2009, 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
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\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
+ EFI_KEY_DATA *KeyQueue;\r
+ UINTN CurrentNumberOfKeys;\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
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *GraphicsOutputModeBuffer;\r
UINTN CurrentNumberOfGraphicsOutput;\r
UINTN CurrentNumberOfUgaDraw;\r
- BOOLEAN HardwareNeedsStarting;\r
\r
UINTN CurrentNumberOfConsoles;\r
TEXT_OUT_AND_GOP_DATA *TextOutList;\r
driver specified by This was returned in\r
DriverName.\r
\r
- @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.\r
\r
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
EFI_HANDLE.\r
driver specified by This was returned in\r
DriverName.\r
\r
- @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.\r
\r
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
EFI_HANDLE.\r
@retval EFI_SUCCESS The Unicode string for the user readable name in\r
the language specified by Language for the driver\r
specified by This was returned in DriverName.\r
- @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.\r
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
EFI_HANDLE.\r
@retval EFI_INVALID_PARAMETER Language is NULL.\r
driver specified by This was returned in\r
DriverName.\r
\r
- @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.\r
\r
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
EFI_HANDLE.\r
driver specified by This was returned in\r
DriverName.\r
\r
- @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.\r
+ @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.\r
\r
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid\r
EFI_HANDLE.\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
@retval EFI_SUCCESS Mode information returned.\r
@retval EFI_BUFFER_TOO_SMALL The Info buffer was too small.\r
@retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the video mode.\r
- @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode ()\r
@retval EFI_INVALID_PARAMETER One of the input args was NULL.\r
@retval EFI_OUT_OF_RESOURCES No resource available.\r
\r
IN UINTN ModeNumber\r
);\r
\r
-\r
#endif\r