#include <Protocol/GraphicsOutput.h>\r
#include <Guid/PrimaryConsoleInDevice.h>\r
#include <Protocol/SimplePointer.h>\r
+#include <Protocol/AbsolutePointer.h>\r
#include <Protocol/SimpleTextOut.h>\r
#include <Guid/ConsoleInDevice.h>\r
#include <Protocol/SimpleTextIn.h>\r
+#include <Protocol/SimpleTextInEx.h>\r
#include <Protocol/ConsoleControl.h>\r
#include <Guid/StandardErrorDevice.h>\r
#include <Guid/ConsoleOutDevice.h>\r
#include <Protocol/UgaDraw.h>\r
+#include <Library/PcdLib.h>\r
#include <Library/DebugLib.h>\r
#include <Library/UefiDriverEntryPoint.h>\r
#include <Library/UefiLib.h>\r
extern EFI_DRIVER_BINDING_PROTOCOL gConSplitterSimplePointerDriverBinding;\r
extern EFI_COMPONENT_NAME_PROTOCOL gConSplitterSimplePointerComponentName;\r
extern EFI_COMPONENT_NAME2_PROTOCOL gConSplitterSimplePointerComponentName2;\r
+extern EFI_COMPONENT_NAME_PROTOCOL gConSplitterAbsolutePointerComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL gConSplitterAbsolutePointerComponentName2;\r
extern EFI_DRIVER_BINDING_PROTOCOL gConSplitterConOutDriverBinding;\r
extern EFI_COMPONENT_NAME_PROTOCOL gConSplitterConOutComponentName;\r
extern EFI_COMPONENT_NAME2_PROTOCOL gConSplitterConOutComponentName2;\r
extern EFI_COMPONENT_NAME_PROTOCOL gConSplitterStdErrComponentName;\r
extern EFI_COMPONENT_NAME2_PROTOCOL gConSplitterStdErrComponentName2;\r
\r
+extern EFI_GUID gSimpleTextInExNotifyGuid;\r
+\r
// These definitions were in the old Hii protocol, but are not in the new UEFI\r
// version. So they are defined locally.\r
#define UNICODE_NARROW_CHAR 0xFFF0\r
-#define UNICODE_WIDE_CHAR 0xFFF1 \r
+#define UNICODE_WIDE_CHAR 0xFFF1\r
\r
\r
//\r
//\r
#define TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('T', 'i', 'S', 'p')\r
\r
+#define TEXT_IN_EX_SPLITTER_NOTIFY_SIGNATURE EFI_SIGNATURE_32 ('T', 'i', 'S', 'n')\r
+\r
+typedef struct _TEXT_IN_EX_SPLITTER_NOTIFY {\r
+ UINTN Signature;\r
+ EFI_HANDLE *NotifyHandleList;\r
+ EFI_HANDLE NotifyHandle;\r
+ EFI_KEY_DATA KeyData;\r
+ EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn;\r
+ LIST_ENTRY NotifyEntry;\r
+} TEXT_IN_EX_SPLITTER_NOTIFY;\r
+\r
typedef struct {\r
- UINT64 Signature;\r
- EFI_HANDLE VirtualHandle;\r
-\r
- EFI_SIMPLE_TEXT_INPUT_PROTOCOL TextIn;\r
- UINTN CurrentNumberOfConsoles;\r
- EFI_SIMPLE_TEXT_INPUT_PROTOCOL **TextInList;\r
- UINTN TextInListCount;\r
-\r
- EFI_SIMPLE_POINTER_PROTOCOL SimplePointer;\r
- EFI_SIMPLE_POINTER_MODE SimplePointerMode;\r
- UINTN CurrentNumberOfPointers;\r
- EFI_SIMPLE_POINTER_PROTOCOL **PointerList;\r
- UINTN PointerListCount;\r
-\r
- BOOLEAN PasswordEnabled;\r
- CHAR16 Password[MAX_STD_IN_PASSWORD];\r
- UINTN PwdIndex;\r
- CHAR16 PwdAttempt[MAX_STD_IN_PASSWORD];\r
- EFI_EVENT LockEvent;\r
-\r
- BOOLEAN KeyEventSignalState;\r
- BOOLEAN InputEventSignalState;\r
+ UINT64 Signature;\r
+ EFI_HANDLE VirtualHandle;\r
+\r
+ EFI_SIMPLE_TEXT_INPUT_PROTOCOL TextIn;\r
+ UINTN CurrentNumberOfConsoles;\r
+ EFI_SIMPLE_TEXT_INPUT_PROTOCOL **TextInList;\r
+ UINTN TextInListCount;\r
+\r
+ EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL TextInEx;\r
+ UINTN CurrentNumberOfExConsoles;\r
+ EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL **TextInExList;\r
+ UINTN TextInExListCount;\r
+ LIST_ENTRY NotifyList;\r
+\r
+\r
+ EFI_SIMPLE_POINTER_PROTOCOL SimplePointer;\r
+ EFI_SIMPLE_POINTER_MODE SimplePointerMode;\r
+ UINTN CurrentNumberOfPointers;\r
+ EFI_SIMPLE_POINTER_PROTOCOL **PointerList;\r
+ UINTN PointerListCount;\r
+\r
+ EFI_ABSOLUTE_POINTER_PROTOCOL AbsolutePointer;\r
+ EFI_ABSOLUTE_POINTER_MODE AbsolutePointerMode;\r
+ UINTN CurrentNumberOfAbsolutePointers;\r
+ EFI_ABSOLUTE_POINTER_PROTOCOL **AbsolutePointerList;\r
+ UINTN AbsolutePointerListCount;\r
+ BOOLEAN AbsoluteInputEventSignalState;\r
+\r
+ BOOLEAN PasswordEnabled;\r
+ CHAR16 Password[MAX_STD_IN_PASSWORD];\r
+ UINTN PwdIndex;\r
+ CHAR16 PwdAttempt[MAX_STD_IN_PASSWORD];\r
+ EFI_EVENT LockEvent;\r
+\r
+ BOOLEAN KeyEventSignalState;\r
+ BOOLEAN InputEventSignalState;\r
} TEXT_IN_SPLITTER_PRIVATE_DATA;\r
\r
#define TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \\r
SimplePointer, \\r
TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE \\r
)\r
+#define TEXT_IN_EX_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \\r
+ CR (a, \\r
+ TEXT_IN_SPLITTER_PRIVATE_DATA, \\r
+ TextInEx, \\r
+ TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE \\r
+ )\r
+\r
+#define TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_ABSOLUTE_POINTER_THIS(a) \\r
+ CR (a, \\r
+ TEXT_IN_SPLITTER_PRIVATE_DATA, \\r
+ AbsolutePointer, \\r
+ TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE \\r
+ )\r
\r
//\r
// Private data for the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL splitter\r
BOOLEAN TextOutEnabled;\r
} TEXT_OUT_AND_GOP_DATA;\r
\r
-typedef struct {\r
- UINT32 HorizontalResolution;\r
- UINT32 VerticalResolution;\r
-} TEXT_OUT_GOP_MODE;\r
-\r
typedef struct {\r
UINT64 Signature;\r
EFI_HANDLE VirtualHandle;\r
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL TextOut;\r
EFI_SIMPLE_TEXT_OUTPUT_MODE TextOutMode;\r
\r
+ EFI_UGA_DRAW_PROTOCOL UgaDraw;\r
+ UINT32 UgaHorizontalResolution;\r
+ UINT32 UgaVerticalResolution;\r
+ UINT32 UgaColorDepth;\r
+ UINT32 UgaRefreshRate;\r
+ EFI_UGA_PIXEL *UgaBlt;\r
+\r
EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput;\r
EFI_GRAPHICS_OUTPUT_BLT_PIXEL *GraphicsOutputBlt;\r
- TEXT_OUT_GOP_MODE *GraphicsOutputModeBuffer;\r
+ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *GraphicsOutputModeBuffer;\r
UINTN CurrentNumberOfGraphicsOutput;\r
+ UINTN CurrentNumberOfUgaDraw;\r
BOOLEAN HardwareNeedsStarting;\r
\r
EFI_CONSOLE_CONTROL_PROTOCOL ConsoleControl;\r
UINTN TextOutQueryDataCount;\r
INT32 *TextOutModeMap;\r
\r
- EFI_CONSOLE_CONTROL_SCREEN_MODE ConsoleOutputMode;\r
+ EFI_CONSOLE_CONTROL_SCREEN_MODE ConsoleOutputMode;\r
\r
- UINTN DevNullColumns;\r
- UINTN DevNullRows;\r
- CHAR16 *DevNullScreen;\r
- INT32 *DevNullAttributes;\r
+ UINTN DevNullColumns;\r
+ UINTN DevNullRows;\r
+ CHAR16 *DevNullScreen;\r
+ INT32 *DevNullAttributes;\r
\r
} TEXT_OUT_SPLITTER_PRIVATE_DATA;\r
\r
)\r
;\r
\r
+//\r
+// Driver binding functions\r
+//\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ConSplitterAbsolutePointerDriverBindingSupported (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ConSplitterAbsolutePointerDriverBindingStart (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ConSplitterAbsolutePointerDriverBindingStop (\r
+ IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN UINTN NumberOfChildren,\r
+ IN EFI_HANDLE *ChildHandleBuffer\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+ConSplitterAbsolutePointerAddDevice (\r
+ IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private,\r
+ IN EFI_ABSOLUTE_POINTER_PROTOCOL *AbsolutePointer\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+ConSplitterAbsolutePointerDeleteDevice (\r
+ IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private,\r
+ IN EFI_ABSOLUTE_POINTER_PROTOCOL *AbsolutePointer\r
+ )\r
+;\r
+\r
+//\r
+// Absolute Pointer protocol interfaces\r
+//\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ConSplitterAbsolutePointerReset (\r
+ IN EFI_ABSOLUTE_POINTER_PROTOCOL *This,\r
+ IN BOOLEAN ExtendedVerification\r
+ )\r
+/*++\r
+\r
+ Routine Description:\r
+ Resets the pointer device hardware.\r
+\r
+ Arguments:\r
+ This - Protocol instance pointer.\r
+ ExtendedVerification - Driver may perform diagnostics on reset.\r
+\r
+ Returns:\r
+ EFI_SUCCESS - The device was reset.\r
+ EFI_DEVICE_ERROR - The device is not functioning correctly and could\r
+ not be reset.\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ConSplitterAbsolutePointerGetState (\r
+ IN EFI_ABSOLUTE_POINTER_PROTOCOL *This,\r
+ IN OUT EFI_ABSOLUTE_POINTER_STATE *State\r
+ )\r
+/*++\r
+\r
+ Routine Description:\r
+ Retrieves the current state of a pointer device.\r
+\r
+ Arguments:\r
+ This - Protocol instance pointer.\r
+ State - A pointer to the state information on the pointer device.\r
+\r
+ Returns:\r
+ EFI_SUCCESS - The state of the pointer device was returned in State..\r
+ EFI_NOT_READY - The state of the pointer device has not changed since the last call to\r
+ GetState().\r
+ EFI_DEVICE_ERROR - A device error occurred while attempting to retrieve the pointer\r
+ device's current state.\r
+--*/\r
+;\r
+\r
+VOID\r
+EFIAPI\r
+ConSplitterAbsolutePointerWaitForInput (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ )\r
+;\r
+\r
/**\r
Retrieves a Unicode string that is the user readable name of the driver.\r
\r
OUT CHAR16 **ControllerName\r
);\r
\r
+EFI_STATUS\r
+EFIAPI\r
+ConSplitterAbsolutePointerComponentNameGetControllerName (\r
+ IN EFI_COMPONENT_NAME_PROTOCOL *This,\r
+ IN EFI_HANDLE ControllerHandle,\r
+ IN EFI_HANDLE ChildHandle OPTIONAL,\r
+ IN CHAR8 *Language,\r
+ OUT CHAR16 **ControllerName\r
+ )\r
+;\r
\r
/**\r
Retrieves a Unicode string that is the user readable name of the controller\r
OUT EFI_INPUT_KEY *Key\r
)\r
;\r
+EFI_STATUS\r
+ConSplitterTextInExAddDevice (\r
+ IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private,\r
+ IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TextInEx\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+ConSplitterTextInExDeleteDevice (\r
+ IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private,\r
+ IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TextInEx\r
+ )\r
+;\r
+\r
+//\r
+// Simple Text Input Ex protocol function prototypes\r
+//\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ConSplitterTextInResetEx (\r
+ IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
+ IN BOOLEAN ExtendedVerification\r
+ )\r
+/*++\r
+\r
+ Routine Description:\r
+ Reset the input device and optionaly run diagnostics\r
+\r
+ Arguments:\r
+ This - Protocol instance pointer.\r
+ ExtendedVerification - Driver may perform diagnostics on reset.\r
+\r
+ Returns:\r
+ EFI_SUCCESS - The device was reset.\r
+ EFI_DEVICE_ERROR - The device is not functioning properly and could\r
+ not be reset.\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ConSplitterTextInReadKeyStrokeEx (\r
+ IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
+ OUT EFI_KEY_DATA *KeyData\r
+ )\r
+/*++\r
+\r
+ Routine Description:\r
+ Reads the next keystroke from the input device. The WaitForKey Event can\r
+ be used to test for existance of a keystroke via WaitForEvent () call.\r
+\r
+ Arguments:\r
+ This - Protocol instance pointer.\r
+ KeyData - A pointer to a buffer that is filled in with the keystroke\r
+ state data for the key that was pressed.\r
+\r
+ Returns:\r
+ EFI_SUCCESS - The keystroke information was returned.\r
+ EFI_NOT_READY - There was no keystroke data availiable.\r
+ EFI_DEVICE_ERROR - The keystroke information was not returned due to\r
+ hardware errors.\r
+ EFI_INVALID_PARAMETER - KeyData is NULL.\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ConSplitterTextInSetState (\r
+ IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
+ IN EFI_KEY_TOGGLE_STATE *KeyToggleState\r
+ )\r
+/*++\r
+\r
+ Routine Description:\r
+ Set certain state for the input device.\r
+\r
+ Arguments:\r
+ This - Protocol instance pointer.\r
+ KeyToggleState - A pointer to the EFI_KEY_TOGGLE_STATE to set the\r
+ state for the input device.\r
+\r
+ Returns:\r
+ EFI_SUCCESS - The device state was set successfully.\r
+ EFI_DEVICE_ERROR - The device is not functioning correctly and could\r
+ not have the setting adjusted.\r
+ EFI_UNSUPPORTED - The device does not have the ability to set its state.\r
+ EFI_INVALID_PARAMETER - KeyToggleState is NULL.\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ConSplitterTextInRegisterKeyNotify (\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
+ )\r
+/*++\r
+\r
+ Routine Description:\r
+ Register a notification function for a particular keystroke for the input device.\r
\r
+ Arguments:\r
+ This - Protocol instance pointer.\r
+ KeyData - A pointer to a buffer that is filled in with the keystroke\r
+ information data for the key that was pressed.\r
+ KeyNotificationFunction - Points to the function to be called when the key\r
+ sequence is typed specified by KeyData.\r
+ NotifyHandle - Points to the unique handle assigned to the registered notification.\r
+\r
+ Returns:\r
+ EFI_SUCCESS - The notification function was registered successfully.\r
+ EFI_OUT_OF_RESOURCES - Unable to allocate resources for necesssary data structures.\r
+ EFI_INVALID_PARAMETER - KeyData or NotifyHandle is NULL.\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ConSplitterTextInUnregisterKeyNotify (\r
+ IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,\r
+ IN EFI_HANDLE NotificationHandle\r
+ )\r
+/*++\r
+\r
+ Routine Description:\r
+ Remove a registered notification function from a particular keystroke.\r
+\r
+ Arguments:\r
+ This - Protocol instance pointer.\r
+ NotificationHandle - The handle of the notification function being unregistered.\r
+\r
+ Returns:\r
+ EFI_SUCCESS - The notification function was unregistered successfully.\r
+ EFI_INVALID_PARAMETER - The NotificationHandle is invalid.\r
+ EFI_NOT_FOUND - Can not find the matching entry in database.\r
+\r
+--*/\r
+;\r
VOID\r
EFIAPI\r
ConSplitterTextInWaitForKey (\r
EFI_STATUS\r
EFIAPI\r
ConSpliterGraphicsOutputQueryMode (\r
- IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,\r
- IN UINT32 ModeNumber,\r
- OUT UINTN *SizeOfInfo,\r
- OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info\r
+ IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,\r
+ IN UINT32 ModeNumber,\r
+ OUT UINTN *SizeOfInfo,\r
+ OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info\r
)\r
;\r
\r
)\r
;\r
\r
+EFI_STATUS\r
+EFIAPI\r
+ConSpliterUgaDrawGetMode (\r
+ IN EFI_UGA_DRAW_PROTOCOL *This,\r
+ OUT UINT32 *HorizontalResolution,\r
+ OUT UINT32 *VerticalResolution,\r
+ OUT UINT32 *ColorDepth,\r
+ OUT UINT32 *RefreshRate\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ConSpliterUgaDrawSetMode (\r
+ IN EFI_UGA_DRAW_PROTOCOL *This,\r
+ IN UINT32 HorizontalResolution,\r
+ IN UINT32 VerticalResolution,\r
+ IN UINT32 ColorDepth,\r
+ IN UINT32 RefreshRate\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+ConSpliterUgaDrawBlt (\r
+ IN EFI_UGA_DRAW_PROTOCOL *This,\r
+ IN EFI_UGA_PIXEL *BltBuffer, OPTIONAL\r
+ IN EFI_UGA_BLT_OPERATION BltOperation,\r
+ IN UINTN SourceX,\r
+ IN UINTN SourceY,\r
+ IN UINTN DestinationX,\r
+ IN UINTN DestinationY,\r
+ IN UINTN Width,\r
+ IN UINTN Height,\r
+ IN UINTN Delta OPTIONAL\r
+ )\r
+;\r
+\r
+EFI_STATUS\r
+DevNullUgaSync (\r
+ IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private,\r
+ IN EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput,\r
+ IN EFI_UGA_DRAW_PROTOCOL *UgaDraw\r
+ )\r
+;\r
\r
EFI_STATUS\r
DevNullTextOutOutputString (\r
;\r
\r
EFI_STATUS\r
-DevNullSyncGopStdOut (\r
+DevNullSyncStdOut (\r
IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private\r
)\r
;\r