/** @file Private data structures for the Console Splitter driver Copyright (c) 2006 - 2008 Intel Corporation.
All rights reserved. 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. **/ #ifndef _CON_SPLITTER_H_ #define _CON_SPLITTER_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // // Driver Binding Externs // extern EFI_DRIVER_BINDING_PROTOCOL gConSplitterConInDriverBinding; extern EFI_COMPONENT_NAME_PROTOCOL gConSplitterConInComponentName; extern EFI_COMPONENT_NAME2_PROTOCOL gConSplitterConInComponentName2; extern EFI_DRIVER_BINDING_PROTOCOL gConSplitterSimplePointerDriverBinding; extern EFI_COMPONENT_NAME_PROTOCOL gConSplitterSimplePointerComponentName; extern EFI_COMPONENT_NAME2_PROTOCOL gConSplitterSimplePointerComponentName2; extern EFI_DRIVER_BINDING_PROTOCOL gConSplitterAbsolutePointerDriverBinding; extern EFI_COMPONENT_NAME_PROTOCOL gConSplitterAbsolutePointerComponentName; extern EFI_COMPONENT_NAME2_PROTOCOL gConSplitterAbsolutePointerComponentName2; extern EFI_DRIVER_BINDING_PROTOCOL gConSplitterConOutDriverBinding; extern EFI_COMPONENT_NAME_PROTOCOL gConSplitterConOutComponentName; extern EFI_COMPONENT_NAME2_PROTOCOL gConSplitterConOutComponentName2; extern EFI_DRIVER_BINDING_PROTOCOL gConSplitterStdErrDriverBinding; extern EFI_COMPONENT_NAME_PROTOCOL gConSplitterStdErrComponentName; extern EFI_COMPONENT_NAME2_PROTOCOL gConSplitterStdErrComponentName2; // // These definitions were in the old Hii protocol, but are not in the new UEFI // version. So they are defined locally. // #define UNICODE_NARROW_CHAR 0xFFF0 #define UNICODE_WIDE_CHAR 0xFFF1 // // Private Data Structures // #define CONSOLE_SPLITTER_CONSOLES_ALLOC_UNIT 32 #define CONSOLE_SPLITTER_MODES_ALLOC_UNIT 32 #define MAX_STD_IN_PASSWORD 80 typedef struct { UINTN Column; UINTN Row; } CONSOLE_OUT_MODE; typedef struct { UINTN Columns; UINTN Rows; } TEXT_OUT_SPLITTER_QUERY_DATA; #define TEXT_IN_EX_SPLITTER_NOTIFY_SIGNATURE SIGNATURE_32 ('T', 'i', 'S', 'n') // // Private data for Text In Ex Splitter Notify // typedef struct _TEXT_IN_EX_SPLITTER_NOTIFY { UINTN Signature; EFI_HANDLE *NotifyHandleList; EFI_HANDLE NotifyHandle; EFI_KEY_DATA KeyData; EFI_KEY_NOTIFY_FUNCTION KeyNotificationFn; LIST_ENTRY NotifyEntry; } TEXT_IN_EX_SPLITTER_NOTIFY; #define TEXT_IN_EX_SPLITTER_NOTIFY_FROM_THIS(a) \ CR ((a), \ TEXT_IN_EX_SPLITTER_NOTIFY, \ NotifyEntry, \ TEXT_IN_EX_SPLITTER_NOTIFY_SIGNATURE \ ) #define TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('T', 'i', 'S', 'p') // // Private data for the Console In splitter // typedef struct { UINT64 Signature; EFI_HANDLE VirtualHandle; EFI_SIMPLE_TEXT_INPUT_PROTOCOL TextIn; UINTN CurrentNumberOfConsoles; EFI_SIMPLE_TEXT_INPUT_PROTOCOL **TextInList; UINTN TextInListCount; EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL TextInEx; UINTN CurrentNumberOfExConsoles; EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL **TextInExList; UINTN TextInExListCount; LIST_ENTRY NotifyList; EFI_SIMPLE_POINTER_PROTOCOL SimplePointer; EFI_SIMPLE_POINTER_MODE SimplePointerMode; UINTN CurrentNumberOfPointers; EFI_SIMPLE_POINTER_PROTOCOL **PointerList; UINTN PointerListCount; EFI_ABSOLUTE_POINTER_PROTOCOL AbsolutePointer; EFI_ABSOLUTE_POINTER_MODE AbsolutePointerMode; UINTN CurrentNumberOfAbsolutePointers; EFI_ABSOLUTE_POINTER_PROTOCOL **AbsolutePointerList; UINTN AbsolutePointerListCount; BOOLEAN AbsoluteInputEventSignalState; BOOLEAN PasswordEnabled; CHAR16 Password[MAX_STD_IN_PASSWORD]; UINTN PwdIndex; CHAR16 PwdAttempt[MAX_STD_IN_PASSWORD]; EFI_EVENT LockEvent; BOOLEAN KeyEventSignalState; BOOLEAN InputEventSignalState; } TEXT_IN_SPLITTER_PRIVATE_DATA; #define TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \ CR ((a), \ TEXT_IN_SPLITTER_PRIVATE_DATA, \ TextIn, \ TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE \ ) #define TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_SIMPLE_POINTER_THIS(a) \ CR ((a), \ TEXT_IN_SPLITTER_PRIVATE_DATA, \ SimplePointer, \ TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE \ ) #define TEXT_IN_EX_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \ CR (a, \ TEXT_IN_SPLITTER_PRIVATE_DATA, \ TextInEx, \ TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE \ ) #define TEXT_IN_SPLITTER_PRIVATE_DATA_FROM_ABSOLUTE_POINTER_THIS(a) \ CR (a, \ TEXT_IN_SPLITTER_PRIVATE_DATA, \ AbsolutePointer, \ TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE \ ) #define TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('T', 'o', 'S', 'p') typedef struct { EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput; EFI_UGA_DRAW_PROTOCOL *UgaDraw; EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut; BOOLEAN TextOutEnabled; } TEXT_OUT_AND_GOP_DATA; // // Private data for the Console Out splitter // typedef struct { UINT64 Signature; EFI_HANDLE VirtualHandle; EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL TextOut; EFI_SIMPLE_TEXT_OUTPUT_MODE TextOutMode; EFI_UGA_DRAW_PROTOCOL UgaDraw; UINT32 UgaHorizontalResolution; UINT32 UgaVerticalResolution; UINT32 UgaColorDepth; UINT32 UgaRefreshRate; EFI_UGA_PIXEL *UgaBlt; EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput; EFI_GRAPHICS_OUTPUT_BLT_PIXEL *GraphicsOutputBlt; EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *GraphicsOutputModeBuffer; UINTN CurrentNumberOfGraphicsOutput; UINTN CurrentNumberOfUgaDraw; BOOLEAN HardwareNeedsStarting; EFI_CONSOLE_CONTROL_PROTOCOL ConsoleControl; UINTN CurrentNumberOfConsoles; TEXT_OUT_AND_GOP_DATA *TextOutList; UINTN TextOutListCount; TEXT_OUT_SPLITTER_QUERY_DATA *TextOutQueryData; UINTN TextOutQueryDataCount; INT32 *TextOutModeMap; EFI_CONSOLE_CONTROL_SCREEN_MODE ConsoleOutputMode; UINTN DevNullColumns; UINTN DevNullRows; CHAR16 *DevNullScreen; INT32 *DevNullAttributes; } TEXT_OUT_SPLITTER_PRIVATE_DATA; #define TEXT_OUT_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \ CR ((a), \ TEXT_OUT_SPLITTER_PRIVATE_DATA, \ TextOut, \ TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \ ) #define GRAPHICS_OUTPUT_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \ CR ((a), \ TEXT_OUT_SPLITTER_PRIVATE_DATA, \ GraphicsOutput, \ TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \ ) #define UGA_DRAW_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \ CR ((a), \ TEXT_OUT_SPLITTER_PRIVATE_DATA, \ UgaDraw, \ TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \ ) #define CONSOLE_CONTROL_SPLITTER_PRIVATE_DATA_FROM_THIS(a) \ CR ((a), \ TEXT_OUT_SPLITTER_PRIVATE_DATA, \ ConsoleControl, \ TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE \ ) // // Function Prototypes // /** The user Entry Point for module ConSplitter. The user code starts with this function. Installs driver module protocols and. Creates virtual device handles for ConIn, ConOut, and StdErr. Installs Simple Text In protocol, Simple Text In Ex protocol, Simple Pointer protocol, Absolute Pointer protocol on those virtual handlers. Installs Graphics Output protocol and/or UGA Draw protocol if needed. @param[in] ImageHandle The firmware allocated handle for the EFI image. @param[in] SystemTable A pointer to the EFI System Table. @retval EFI_SUCCESS The entry point is executed successfully. @retval other Some error occurs when executing this entry point. **/ EFI_STATUS EFIAPI ConSplitterDriverEntry ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ); /** Construct console input devices' private data. @param ConInPrivate A pointer to the TEXT_IN_SPLITTER_PRIVATE_DATA structure. @retval EFI_OUT_OF_RESOURCES Out of resources. @retval EFI_SUCCESS Text Input Devcie's private data has been constructed. @retval other Failed to construct private data. **/ EFI_STATUS ConSplitterTextInConstructor ( TEXT_IN_SPLITTER_PRIVATE_DATA *ConInPrivate ); /** Construct console output devices' private data. @param ConOutPrivate A pointer to the TEXT_OUT_SPLITTER_PRIVATE_DATA structure. @retval EFI_OUT_OF_RESOURCES Out of resources. @retval EFI_SUCCESS Text Input Devcie's private data has been constructed. **/ EFI_STATUS ConSplitterTextOutConstructor ( TEXT_OUT_SPLITTER_PRIVATE_DATA *ConOutPrivate ); /** Test to see if Console In Device could be supported on the Controller. @param This Driver Binding protocol instance pointer. @param ControllerHandle Handle of device to test. @param RemainingDevicePath Optional parameter use to pick a specific child device to start. @retval EFI_SUCCESS This driver supports this device. @retval other This driver does not support this device. **/ EFI_STATUS EFIAPI ConSplitterConInDriverBindingSupported ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); /** Test to see if Simple Pointer protocol could be supported on the Controller. @param This Driver Binding protocol instance pointer. @param ControllerHandle Handle of device to test. @param RemainingDevicePath Optional parameter use to pick a specific child device to start. @retval EFI_SUCCESS This driver supports this device. @retval other This driver does not support this device. **/ EFI_STATUS EFIAPI ConSplitterSimplePointerDriverBindingSupported ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); /** Test to see if Console Out Device could be supported on the Controller. @param This Driver Binding protocol instance pointer. @param ControllerHandle Handle of device to test. @param RemainingDevicePath Optional parameter use to pick a specific child device to start. @retval EFI_SUCCESS This driver supports this device. @retval other This driver does not support this device. **/ EFI_STATUS EFIAPI ConSplitterConOutDriverBindingSupported ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); /** Test to see if Standard Error Device could be supported on the Controller. @param This Driver Binding protocol instance pointer. @param ControllerHandle Handle of device to test. @param RemainingDevicePath Optional parameter use to pick a specific child device to start. @retval EFI_SUCCESS This driver supports this device. @retval other This driver does not support this device. **/ EFI_STATUS EFIAPI ConSplitterStdErrDriverBindingSupported ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); /** Start Console In Consplitter on device handle. @param This Driver Binding protocol instance pointer. @param ControllerHandle Handle of device to bind driver to. @param RemainingDevicePath Optional parameter use to pick a specific child device to start. @retval EFI_SUCCESS Console In Consplitter is added to ControllerHandle. @retval other Console In Consplitter does not support this device. **/ EFI_STATUS EFIAPI ConSplitterConInDriverBindingStart ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); /** Start Simple Pointer Consplitter on device handle. @param This Driver Binding protocol instance pointer. @param ControllerHandle Handle of device to bind driver to. @param RemainingDevicePath Optional parameter use to pick a specific child device to start. @retval EFI_SUCCESS Simple Pointer Consplitter is added to ControllerHandle. @retval other Simple Pointer Consplitter does not support this device. **/ EFI_STATUS EFIAPI ConSplitterSimplePointerDriverBindingStart ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); /** Start Console Out Consplitter on device handle. @param This Driver Binding protocol instance pointer. @param ControllerHandle Handle of device to bind driver to. @param RemainingDevicePath Optional parameter use to pick a specific child device to start. @retval EFI_SUCCESS Console Out Consplitter is added to ControllerHandle. @retval other Console Out Consplitter does not support this device. **/ EFI_STATUS EFIAPI ConSplitterConOutDriverBindingStart ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); /** Start Standard Error Consplitter on device handle. @param This Driver Binding protocol instance pointer. @param ControllerHandle Handle of device to bind driver to. @param RemainingDevicePath Optional parameter use to pick a specific child device to start. @retval EFI_SUCCESS Standard Error Consplitter is added to ControllerHandle. @retval other Standard Error Consplitter does not support this device. **/ EFI_STATUS EFIAPI ConSplitterStdErrDriverBindingStart ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); /** Stop Console In ConSplitter on ControllerHandle by closing Console In Devcice GUID. @param This Driver Binding protocol instance pointer. @param ControllerHandle Handle of device to stop driver on @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of children is zero stop the entire bus driver. @param ChildHandleBuffer List of Child Handles to Stop. @retval EFI_SUCCESS This driver is removed ControllerHandle @retval other This driver was not removed from this device **/ EFI_STATUS EFIAPI ConSplitterConInDriverBindingStop ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer ); /** Stop Simple Pointer protocol ConSplitter on ControllerHandle by closing Simple Pointer protocol. @param This Driver Binding protocol instance pointer. @param ControllerHandle Handle of device to stop driver on @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of children is zero stop the entire bus driver. @param ChildHandleBuffer List of Child Handles to Stop. @retval EFI_SUCCESS This driver is removed ControllerHandle @retval other This driver was not removed from this device **/ EFI_STATUS EFIAPI ConSplitterSimplePointerDriverBindingStop ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer ); /** Stop Console Out ConSplitter on device handle by closing Console Out Devcice GUID. @param This Driver Binding protocol instance pointer. @param ControllerHandle Handle of device to stop driver on @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of children is zero stop the entire bus driver. @param ChildHandleBuffer List of Child Handles to Stop. @retval EFI_SUCCESS This driver is removed ControllerHandle @retval other This driver was not removed from this device **/ EFI_STATUS EFIAPI ConSplitterConOutDriverBindingStop ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer ); /** Stop Standard Error ConSplitter on ControllerHandle by closing Standard Error GUID. @param This Driver Binding protocol instance pointer. @param ControllerHandle Handle of device to stop driver on @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of children is zero stop the entire bus driver. @param ChildHandleBuffer List of Child Handles to Stop. @retval EFI_SUCCESS This driver is removed ControllerHandle @retval other This driver was not removed from this device **/ EFI_STATUS EFIAPI ConSplitterStdErrDriverBindingStop ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer ); /** Test to see if Absolute Pointer protocol could be supported on the Controller. @param This Driver Binding protocol instance pointer. @param ControllerHandle Handle of device to test. @param RemainingDevicePath Optional parameter use to pick a specific child device to start. @retval EFI_SUCCESS This driver supports this device. @retval other This driver does not support this device. **/ EFI_STATUS EFIAPI ConSplitterAbsolutePointerDriverBindingSupported ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); /** Start Absolute Pointer Consplitter on device handle. @param This Driver Binding protocol instance pointer. @param ControllerHandle Handle of device to bind driver to. @param RemainingDevicePath Optional parameter use to pick a specific child device to start. @retval EFI_SUCCESS Absolute Pointer Consplitter is added to ControllerHandle. @retval other Absolute Pointer Consplitter does not support this device. **/ EFI_STATUS EFIAPI ConSplitterAbsolutePointerDriverBindingStart ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath ); /** Stop Absolute Pointer protocol ConSplitter on ControllerHandle by closing Absolute Pointer protocol. @param This Driver Binding protocol instance pointer. @param ControllerHandle Handle of device to stop driver on @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of children is zero stop the entire bus driver. @param ChildHandleBuffer List of Child Handles to Stop. @retval EFI_SUCCESS This driver is removed ControllerHandle @retval other This driver was not removed from this device **/ EFI_STATUS EFIAPI ConSplitterAbsolutePointerDriverBindingStop ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer ); /** Add Absolute Pointer Device in Consplitter Absolute Pointer list. @param Private Text In Splitter pointer. @param AbsolutePointer Absolute Pointer protocol pointer. @retval EFI_SUCCESS Absolute Pointer Device added successfully. @retval EFI_OUT_OF_RESOURCES Could not grow the buffer size. **/ EFI_STATUS ConSplitterAbsolutePointerAddDevice ( IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_ABSOLUTE_POINTER_PROTOCOL *AbsolutePointer ); /** Remove Absolute Pointer Device from Consplitter Absolute Pointer list. @param Private Text In Splitter pointer. @param AbsolutePointer Absolute Pointer protocol pointer. @retval EFI_SUCCESS Absolute Pointer Device removed successfully. @retval EFI_NOT_FOUND No Absolute Pointer Device found. **/ EFI_STATUS ConSplitterAbsolutePointerDeleteDevice ( IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_ABSOLUTE_POINTER_PROTOCOL *AbsolutePointer ); // // Absolute Pointer protocol interfaces // /** Resets the pointer device hardware. @param This Protocol instance pointer. @param ExtendedVerification Driver may perform diagnostics on reset. @retval EFI_SUCCESS The device was reset. @retval EFI_DEVICE_ERROR The device is not functioning correctly and could not be reset. **/ EFI_STATUS EFIAPI ConSplitterAbsolutePointerReset ( IN EFI_ABSOLUTE_POINTER_PROTOCOL *This, IN BOOLEAN ExtendedVerification ); /** Retrieves the current state of a pointer device. @param This Protocol instance pointer. @param State A pointer to the state information on the pointer device. @retval EFI_SUCCESS The state of the pointer device was returned in State.. @retval EFI_NOT_READY The state of the pointer device has not changed since the last call to GetState(). @retval EFI_DEVICE_ERROR A device error occurred while attempting to retrieve the pointer device's current state. **/ EFI_STATUS EFIAPI ConSplitterAbsolutePointerGetState ( IN EFI_ABSOLUTE_POINTER_PROTOCOL *This, IN OUT EFI_ABSOLUTE_POINTER_STATE *State ); /** This event agregates all the events of the pointer devices in the splitter. If the ConIn is password locked then return. If any events of physical pointer devices are signaled, signal the pointer splitter event. This will cause the calling code to call ConSplitterAbsolutePointerGetState (). @param Event The Event assoicated with callback. @param Context Context registered when Event was created. **/ VOID EFIAPI ConSplitterAbsolutePointerWaitForInput ( IN EFI_EVENT Event, IN VOID *Context ); /** Retrieves a Unicode string that is the user readable name of the driver. This function retrieves the user readable name of a driver in the form of a Unicode string. If the driver specified by This has a user readable name in the language specified by Language, then a pointer to the driver name is returned in DriverName, and EFI_SUCCESS is returned. If the driver specified by This does not support the language specified by Language, then EFI_UNSUPPORTED is returned. @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or EFI_COMPONENT_NAME_PROTOCOL instance. @param Language[in] A pointer to a Null-terminated ASCII string array indicating the language. This is the language of the driver name that the caller is requesting, and it must match one of the languages specified in SupportedLanguages. The number of languages supported by a driver is up to the driver writer. Language is specified in RFC 3066 or ISO 639-2 language code format. @param DriverName[out] A pointer to the Unicode string to return. This Unicode string is the name of the driver specified by This in the language specified by Language. @retval EFI_SUCCESS The Unicode string for the Driver specified by This and the language specified by Language was returned in DriverName. @retval EFI_INVALID_PARAMETER Language is NULL. @retval EFI_INVALID_PARAMETER DriverName is NULL. @retval EFI_UNSUPPORTED The driver specified by This does not support the language specified by Language. **/ EFI_STATUS EFIAPI ConSplitterComponentNameGetDriverName ( IN EFI_COMPONENT_NAME_PROTOCOL *This, IN CHAR8 *Language, OUT CHAR16 **DriverName ); /** Retrieves a Unicode string that is the user readable name of the controller that is being managed by a driver. This function retrieves the user readable name of the controller specified by ControllerHandle and ChildHandle in the form of a Unicode string. If the driver specified by This has a user readable name in the language specified by Language, then a pointer to the controller name is returned in ControllerName, and EFI_SUCCESS is returned. If the driver specified by This is not currently managing the controller specified by ControllerHandle and ChildHandle, then EFI_UNSUPPORTED is returned. If the driver specified by This does not support the language specified by Language, then EFI_UNSUPPORTED is returned. @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or EFI_COMPONENT_NAME_PROTOCOL instance. @param ControllerHandle[in] The handle of a controller that the driver specified by This is managing. This handle specifies the controller whose name is to be returned. @param ChildHandle[in] The handle of the child controller to retrieve the name of. This is an optional parameter that may be NULL. It will be NULL for device drivers. It will also be NULL for a bus drivers that wish to retrieve the name of the bus controller. It will not be NULL for a bus driver that wishes to retrieve the name of a child controller. @param Language[in] A pointer to a Null-terminated ASCII string array indicating the language. This is the language of the driver name that the caller is requesting, and it must match one of the languages specified in SupportedLanguages. The number of languages supported by a driver is up to the driver writer. Language is specified in RFC 3066 or ISO 639-2 language code format. @param ControllerName[out] A pointer to the Unicode string to return. This Unicode string is the name of the controller specified by ControllerHandle and ChildHandle in the language specified by Language from the point of view of the driver specified by This. @retval EFI_SUCCESS The Unicode string for the user readable name in the language specified by Language for the driver specified by This was returned in DriverName. @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE. @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE. @retval EFI_INVALID_PARAMETER Language is NULL. @retval EFI_INVALID_PARAMETER ControllerName is NULL. @retval EFI_UNSUPPORTED The driver specified by This is not currently managing the controller specified by ControllerHandle and ChildHandle. @retval EFI_UNSUPPORTED The driver specified by This does not support the language specified by Language. **/ EFI_STATUS EFIAPI ConSplitterConInComponentNameGetControllerName ( IN EFI_COMPONENT_NAME_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE ChildHandle OPTIONAL, IN CHAR8 *Language, OUT CHAR16 **ControllerName ); /** Retrieves a Unicode string that is the user readable name of the controller that is being managed by a driver. This function retrieves the user readable name of the controller specified by ControllerHandle and ChildHandle in the form of a Unicode string. If the driver specified by This has a user readable name in the language specified by Language, then a pointer to the controller name is returned in ControllerName, and EFI_SUCCESS is returned. If the driver specified by This is not currently managing the controller specified by ControllerHandle and ChildHandle, then EFI_UNSUPPORTED is returned. If the driver specified by This does not support the language specified by Language, then EFI_UNSUPPORTED is returned. @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or EFI_COMPONENT_NAME_PROTOCOL instance. @param ControllerHandle[in] The handle of a controller that the driver specified by This is managing. This handle specifies the controller whose name is to be returned. @param ChildHandle[in] The handle of the child controller to retrieve the name of. This is an optional parameter that may be NULL. It will be NULL for device drivers. It will also be NULL for a bus drivers that wish to retrieve the name of the bus controller. It will not be NULL for a bus driver that wishes to retrieve the name of a child controller. @param Language[in] A pointer to a Null-terminated ASCII string array indicating the language. This is the language of the driver name that the caller is requesting, and it must match one of the languages specified in SupportedLanguages. The number of languages supported by a driver is up to the driver writer. Language is specified in RFC 3066 or ISO 639-2 language code format. @param ControllerName[out] A pointer to the Unicode string to return. This Unicode string is the name of the controller specified by ControllerHandle and ChildHandle in the language specified by Language from the point of view of the driver specified by This. @retval EFI_SUCCESS The Unicode string for the user readable name in the language specified by Language for the driver specified by This was returned in DriverName. @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE. @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE. @retval EFI_INVALID_PARAMETER Language is NULL. @retval EFI_INVALID_PARAMETER ControllerName is NULL. @retval EFI_UNSUPPORTED The driver specified by This is not currently managing the controller specified by ControllerHandle and ChildHandle. @retval EFI_UNSUPPORTED The driver specified by This does not support the language specified by Language. **/ EFI_STATUS EFIAPI ConSplitterSimplePointerComponentNameGetControllerName ( IN EFI_COMPONENT_NAME_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE ChildHandle OPTIONAL, IN CHAR8 *Language, OUT CHAR16 **ControllerName ); /** Retrieves a Unicode string that is the user readable name of the controller that is being managed by an EFI Driver. @param This A pointer to the EFI_COMPONENT_NAME_PROTOCOL instance. @param ControllerHandle The handle of a controller that the driver specified by This is managing. This handle specifies the controller whose name is to be returned. @param ChildHandle The handle of the child controller to retrieve the name of. This is an optional parameter that may be NULL. It will be NULL for device drivers. It will also be NULL for a bus drivers that wish to retrieve the name of the bus controller. It will not be NULL for a bus driver that wishes to retrieve the name of a child controller. @param Language A pointer to RFC3066 language identifier. This is the language of the controller name that that the caller is requesting, and it must match one of the languages specified in SupportedLanguages. The number of languages supported by a driver is up to the driver writer. @param ControllerName A pointer to the Unicode string to return. This Unicode string is the name of the controller specified by ControllerHandle and ChildHandle in the language specified by Language from the point of view of the driver specified by This. @retval EFI_SUCCESS The Unicode string for the user readable name in the language specified by Language for the driver specified by This was returned in DriverName. @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE. @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE. @retval EFI_INVALID_PARAMETER Language is NULL. @retval EFI_INVALID_PARAMETER ControllerName is NULL. @retval EFI_UNSUPPORTED The driver specified by This is not currently managing the controller specified by ControllerHandle and ChildHandle. @retval EFI_UNSUPPORTED The driver specified by This does not support the language specified by Language. **/ EFI_STATUS EFIAPI ConSplitterAbsolutePointerComponentNameGetControllerName ( IN EFI_COMPONENT_NAME_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE ChildHandle OPTIONAL, IN CHAR8 *Language, OUT CHAR16 **ControllerName ); /** Retrieves a Unicode string that is the user readable name of the controller that is being managed by a driver. This function retrieves the user readable name of the controller specified by ControllerHandle and ChildHandle in the form of a Unicode string. If the driver specified by This has a user readable name in the language specified by Language, then a pointer to the controller name is returned in ControllerName, and EFI_SUCCESS is returned. If the driver specified by This is not currently managing the controller specified by ControllerHandle and ChildHandle, then EFI_UNSUPPORTED is returned. If the driver specified by This does not support the language specified by Language, then EFI_UNSUPPORTED is returned. @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or EFI_COMPONENT_NAME_PROTOCOL instance. @param ControllerHandle[in] The handle of a controller that the driver specified by This is managing. This handle specifies the controller whose name is to be returned. @param ChildHandle[in] The handle of the child controller to retrieve the name of. This is an optional parameter that may be NULL. It will be NULL for device drivers. It will also be NULL for a bus drivers that wish to retrieve the name of the bus controller. It will not be NULL for a bus driver that wishes to retrieve the name of a child controller. @param Language[in] A pointer to a Null-terminated ASCII string array indicating the language. This is the language of the driver name that the caller is requesting, and it must match one of the languages specified in SupportedLanguages. The number of languages supported by a driver is up to the driver writer. Language is specified in RFC 3066 or ISO 639-2 language code format. @param ControllerName[out] A pointer to the Unicode string to return. This Unicode string is the name of the controller specified by ControllerHandle and ChildHandle in the language specified by Language from the point of view of the driver specified by This. @retval EFI_SUCCESS The Unicode string for the user readable name in the language specified by Language for the driver specified by This was returned in DriverName. @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE. @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE. @retval EFI_INVALID_PARAMETER Language is NULL. @retval EFI_INVALID_PARAMETER ControllerName is NULL. @retval EFI_UNSUPPORTED The driver specified by This is not currently managing the controller specified by ControllerHandle and ChildHandle. @retval EFI_UNSUPPORTED The driver specified by This does not support the language specified by Language. **/ EFI_STATUS EFIAPI ConSplitterConOutComponentNameGetControllerName ( IN EFI_COMPONENT_NAME_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE ChildHandle OPTIONAL, IN CHAR8 *Language, OUT CHAR16 **ControllerName ); /** Retrieves a Unicode string that is the user readable name of the controller that is being managed by a driver. This function retrieves the user readable name of the controller specified by ControllerHandle and ChildHandle in the form of a Unicode string. If the driver specified by This has a user readable name in the language specified by Language, then a pointer to the controller name is returned in ControllerName, and EFI_SUCCESS is returned. If the driver specified by This is not currently managing the controller specified by ControllerHandle and ChildHandle, then EFI_UNSUPPORTED is returned. If the driver specified by This does not support the language specified by Language, then EFI_UNSUPPORTED is returned. @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or EFI_COMPONENT_NAME_PROTOCOL instance. @param ControllerHandle[in] The handle of a controller that the driver specified by This is managing. This handle specifies the controller whose name is to be returned. @param ChildHandle[in] The handle of the child controller to retrieve the name of. This is an optional parameter that may be NULL. It will be NULL for device drivers. It will also be NULL for a bus drivers that wish to retrieve the name of the bus controller. It will not be NULL for a bus driver that wishes to retrieve the name of a child controller. @param Language[in] A pointer to a Null-terminated ASCII string array indicating the language. This is the language of the driver name that the caller is requesting, and it must match one of the languages specified in SupportedLanguages. The number of languages supported by a driver is up to the driver writer. Language is specified in RFC 3066 or ISO 639-2 language code format. @param ControllerName[out] A pointer to the Unicode string to return. This Unicode string is the name of the controller specified by ControllerHandle and ChildHandle in the language specified by Language from the point of view of the driver specified by This. @retval EFI_SUCCESS The Unicode string for the user readable name in the language specified by Language for the driver specified by This was returned in DriverName. @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE. @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE. @retval EFI_INVALID_PARAMETER Language is NULL. @retval EFI_INVALID_PARAMETER ControllerName is NULL. @retval EFI_UNSUPPORTED The driver specified by This is not currently managing the controller specified by ControllerHandle and ChildHandle. @retval EFI_UNSUPPORTED The driver specified by This does not support the language specified by Language. **/ EFI_STATUS EFIAPI ConSplitterStdErrComponentNameGetControllerName ( IN EFI_COMPONENT_NAME_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE ChildHandle OPTIONAL, IN CHAR8 *Language, OUT CHAR16 **ControllerName ); // // TextIn Constructor/Destructor functions // /** Add Text Input Device in Consplitter Text Input list. @param Private Text In Splitter pointer. @param TextIn Simple Text Input protocol pointer. @retval EFI_SUCCESS Text Input Device added successfully. @retval EFI_OUT_OF_RESOURCES Could not grow the buffer size. **/ EFI_STATUS ConSplitterTextInAddDevice ( IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *TextIn ); /** Remove Text Input Device from Consplitter Text Input list. @param Private Text In Splitter pointer. @param TextIn Simple Text protocol pointer. @retval EFI_SUCCESS Simple Text Device removed successfully. @retval EFI_NOT_FOUND No Simple Text Device found. **/ EFI_STATUS ConSplitterTextInDeleteDevice ( IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *TextIn ); // // SimplePointer Constuctor/Destructor functions // /** Add Simple Pointer Device in Consplitter Simple Pointer list. @param Private Text In Splitter pointer. @param SimplePointer Simple Pointer protocol pointer. @retval EFI_SUCCESS Simple Pointer Device added successfully. @retval EFI_OUT_OF_RESOURCES Could not grow the buffer size. **/ EFI_STATUS ConSplitterSimplePointerAddDevice ( IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_POINTER_PROTOCOL *SimplePointer ); /** Remove Simple Pointer Device from Consplitter Simple Pointer list. @param Private Text In Splitter pointer. @param SimplePointer Simple Pointer protocol pointer. @retval EFI_SUCCESS Simple Pointer Device removed successfully. @retval EFI_NOT_FOUND No Simple Pointer Device found. **/ EFI_STATUS ConSplitterSimplePointerDeleteDevice ( IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_POINTER_PROTOCOL *SimplePointer ); // // TextOut Constuctor/Destructor functions // /** Add Text Output Device in Consplitter Text Output list. @param Private Text Out Splitter pointer. @param TextOut Simple Text Output protocol pointer. @param GraphicsOutput Graphics Output protocol pointer. @param UgaDraw UGA Draw protocol pointer. @retval EFI_SUCCESS Text Output Device added successfully. @retval EFI_OUT_OF_RESOURCES Could not grow the buffer size. **/ EFI_STATUS ConSplitterTextOutAddDevice ( IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut, IN EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput, IN EFI_UGA_DRAW_PROTOCOL *UgaDraw ); /** Remove Text Out Device in Consplitter Text Out list. @param Private Text Out Splitter pointer. @param TextOut Simple Text Output Pointer protocol pointer. @retval EFI_SUCCESS Text Out Device removed successfully. @retval EFI_NOT_FOUND No Text Out Device found. **/ EFI_STATUS ConSplitterTextOutDeleteDevice ( IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut ); // // TextIn I/O Functions // /** Reset the input device and optionaly run diagnostics @param This Protocol instance pointer. @param ExtendedVerification Driver may perform diagnostics on reset. @retval EFI_SUCCESS The device was reset. @retval EFI_DEVICE_ERROR The device is not functioning properly and could not be reset. **/ EFI_STATUS EFIAPI ConSplitterTextInReset ( IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, IN BOOLEAN ExtendedVerification ); /** Reads the next keystroke from the input device. The WaitForKey Event can be used to test for existance of a keystroke via WaitForEvent () call. If the ConIn is password locked make it look like no keystroke is availible @param This Protocol instance pointer. @param Key Driver may perform diagnostics on reset. @retval EFI_SUCCESS The keystroke information was returned. @retval EFI_NOT_READY There was no keystroke data availiable. @retval EFI_DEVICE_ERROR The keydtroke information was not returned due to hardware errors. **/ EFI_STATUS EFIAPI ConSplitterTextInReadKeyStroke ( IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This, OUT EFI_INPUT_KEY *Key ); /** Add Text Input Ex Device in Consplitter Text Input Ex list. @param Private Text In Splitter pointer. @param TextInEx Simple Text Input Ex Input protocol pointer. @retval EFI_SUCCESS Text Input Ex Device added successfully. @retval EFI_OUT_OF_RESOURCES Could not grow the buffer size. **/ EFI_STATUS ConSplitterTextInExAddDevice ( IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TextInEx ); /** Remove Text Ex Device from Consplitter Text Input Ex list. @param Private Text In Splitter pointer. @param TextInEx Simple Text Ex protocol pointer. @retval EFI_SUCCESS Simple Text Input Ex Device removed successfully. @retval EFI_NOT_FOUND No Simple Text Input Ex Device found. **/ EFI_STATUS ConSplitterTextInExDeleteDevice ( IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TextInEx ); // // Simple Text Input Ex protocol function prototypes // /** Reset the input device and optionaly run diagnostics @param This Protocol instance pointer. @param ExtendedVerification Driver may perform diagnostics on reset. @retval EFI_SUCCESS The device was reset. @retval EFI_DEVICE_ERROR The device is not functioning properly and could not be reset. **/ EFI_STATUS EFIAPI ConSplitterTextInResetEx ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN BOOLEAN ExtendedVerification ); /** Reads the next keystroke from the input device. The WaitForKey Event can be used to test for existance of a keystroke via WaitForEvent () call. @param This Protocol instance pointer. @param KeyData A pointer to a buffer that is filled in with the keystroke state data for the key that was pressed. @retval EFI_SUCCESS The keystroke information was returned. @retval EFI_NOT_READY There was no keystroke data availiable. @retval EFI_DEVICE_ERROR The keystroke information was not returned due to hardware errors. @retval EFI_INVALID_PARAMETER KeyData is NULL. **/ EFI_STATUS EFIAPI ConSplitterTextInReadKeyStrokeEx ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, OUT EFI_KEY_DATA *KeyData ); /** Set certain state for the input device. @param This Protocol instance pointer. @param KeyToggleState A pointer to the EFI_KEY_TOGGLE_STATE to set the state for the input device. @retval EFI_SUCCESS The device state was set successfully. @retval EFI_DEVICE_ERROR The device is not functioning correctly and could not have the setting adjusted. @retval EFI_UNSUPPORTED The device does not have the ability to set its state. @retval EFI_INVALID_PARAMETER KeyToggleState is NULL. **/ EFI_STATUS EFIAPI ConSplitterTextInSetState ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN EFI_KEY_TOGGLE_STATE *KeyToggleState ); /** Register a notification function for a particular keystroke for the input device. @param This Protocol instance pointer. @param KeyData A pointer to a buffer that is filled in with the keystroke information data for the key that was pressed. @param KeyNotificationFunction Points to the function to be called when the key sequence is typed specified by KeyData. @param NotifyHandle Points to the unique handle assigned to the registered notification. @retval EFI_SUCCESS The notification function was registered successfully. @retval EFI_OUT_OF_RESOURCES Unable to allocate resources for necesssary data structures. @retval EFI_INVALID_PARAMETER KeyData or KeyNotificationFunction or NotifyHandle is NULL. **/ EFI_STATUS EFIAPI ConSplitterTextInRegisterKeyNotify ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN EFI_KEY_DATA *KeyData, IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction, OUT EFI_HANDLE *NotifyHandle ); /** Remove a registered notification function from a particular keystroke. @param This Protocol instance pointer. @param NotificationHandle The handle of the notification function being unregistered. @retval EFI_SUCCESS The notification function was unregistered successfully. @retval EFI_INVALID_PARAMETER The NotificationHandle is invalid. @retval EFI_NOT_FOUND Can not find the matching entry in database. **/ EFI_STATUS EFIAPI ConSplitterTextInUnregisterKeyNotify ( IN EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This, IN EFI_HANDLE NotificationHandle ); /** This event aggregates all the events of the ConIn devices in the spliter. If the ConIn is password locked then return. If any events of physical ConIn devices are signaled, signal the ConIn spliter event. This will cause the calling code to call ConSplitterTextInReadKeyStroke (). @param Event The Event assoicated with callback. @param Context Context registered when Event was created. **/ VOID EFIAPI ConSplitterTextInWaitForKey ( IN EFI_EVENT Event, IN VOID *Context ); /** Return TRUE if StdIn is locked. The ConIn device on the virtual handle is the only device locked. @retval TRUE StdIn locked @retval FALSE StdIn working normally **/ BOOLEAN ConSpliterConssoleControlStdInLocked ( VOID ); /** Record and check key sequence on StdIn. This timer event will fire when StdIn is locked. It will record the key sequence on StdIn and also check to see if it matches the password. Any error in the password will cause the check to reset. As long as a mConIn.PasswordEnabled is TRUE, the StdIn splitter will not report any input. @param Event The Event this notify function registered to. @param Context Pointer to the context data registerd to the Event. **/ VOID EFIAPI ConSpliterConsoleControlLockStdInEvent ( IN EFI_EVENT Event, IN VOID *Context ); /** If Password is NULL unlock the password state variable and set the event timer. If the Password is too big return an error. If the Password is valid Copy the Password and enable state variable and then arm the periodic timer @param This Console Control protocol pointer. @param Password The password input. @retval EFI_SUCCESS Lock the StdIn device @retval EFI_INVALID_PARAMETER Password is NULL @retval EFI_OUT_OF_RESOURCES Buffer allocation to store the password fails **/ EFI_STATUS EFIAPI ConSpliterConsoleControlLockStdIn ( IN EFI_CONSOLE_CONTROL_PROTOCOL *This, IN CHAR16 *Password ); /** Reads the next keystroke from the input device. The WaitForKey Event can be used to test for existance of a keystroke via WaitForEvent () call. @param Private Protocol instance pointer. @param Key Driver may perform diagnostics on reset. @retval EFI_SUCCESS The keystroke information was returned. @retval EFI_NOT_READY There was no keystroke data availiable. @retval EFI_DEVICE_ERROR The keydtroke information was not returned due to hardware errors. **/ EFI_STATUS EFIAPI ConSplitterTextInPrivateReadKeyStroke ( IN TEXT_IN_SPLITTER_PRIVATE_DATA *Private, OUT EFI_INPUT_KEY *Key ); /** Reset the input device and optionaly run diagnostics @param This Protocol instance pointer. @param ExtendedVerification Driver may perform diagnostics on reset. @retval EFI_SUCCESS The device was reset. @retval EFI_DEVICE_ERROR The device is not functioning properly and could not be reset. **/ EFI_STATUS EFIAPI ConSplitterSimplePointerReset ( IN EFI_SIMPLE_POINTER_PROTOCOL *This, IN BOOLEAN ExtendedVerification ); /** Reads the next keystroke from the input device. The WaitForKey Event can be used to test for existance of a keystroke via WaitForEvent () call. If the ConIn is password locked make it look like no keystroke is availible @param This A pointer to protocol instance. @param State A pointer to state information on the pointer device @retval EFI_SUCCESS The keystroke information was returned in State. @retval EFI_NOT_READY There was no keystroke data availiable. @retval EFI_DEVICE_ERROR The keydtroke information was not returned due to hardware errors. **/ EFI_STATUS EFIAPI ConSplitterSimplePointerGetState ( IN EFI_SIMPLE_POINTER_PROTOCOL *This, IN OUT EFI_SIMPLE_POINTER_STATE *State ); /** This event agregates all the events of the ConIn devices in the spliter. If the ConIn is password locked then return. If any events of physical ConIn devices are signaled, signal the ConIn spliter event. This will cause the calling code to call ConSplitterTextInReadKeyStroke (). @param Event The Event assoicated with callback. @param Context Context registered when Event was created. **/ VOID EFIAPI ConSplitterSimplePointerWaitForInput ( IN EFI_EVENT Event, IN VOID *Context ); // // TextOut I/O Functions // /** Reset the text output device hardware and optionaly run diagnostics @param This Protocol instance pointer. @param ExtendedVerification Driver may perform more exhaustive verfication operation of the device during reset. @retval EFI_SUCCESS The text output device was reset. @retval EFI_DEVICE_ERROR The text output device is not functioning correctly and could not be reset. **/ EFI_STATUS EFIAPI ConSplitterTextOutReset ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN BOOLEAN ExtendedVerification ); /** Write a Unicode string to the output device. @param This Protocol instance pointer. @param WString The NULL-terminated Unicode string to be displayed on the output device(s). All output devices must also support the Unicode drawing defined in this file. @retval EFI_SUCCESS The string was output to the device. @retval EFI_DEVICE_ERROR The device reported an error while attempting to output the text. @retval EFI_UNSUPPORTED The output device's mode is not currently in a defined text mode. @retval EFI_WARN_UNKNOWN_GLYPH This warning code indicates that some of the characters in the Unicode string could not be rendered and were skipped. **/ EFI_STATUS EFIAPI ConSplitterTextOutOutputString ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN CHAR16 *WString ); /** Verifies that all characters in a Unicode string can be output to the target device. @param This Protocol instance pointer. @param WString The NULL-terminated Unicode string to be examined for the output device(s). @retval EFI_SUCCESS The device(s) are capable of rendering the output string. @retval EFI_UNSUPPORTED Some of the characters in the Unicode string cannot be rendered by one or more of the output devices mapped by the EFI handle. **/ EFI_STATUS EFIAPI ConSplitterTextOutTestString ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN CHAR16 *WString ); /** Returns information for an available text mode that the output device(s) supports. @param This Protocol instance pointer. @param ModeNumber The mode number to return information on. @param Columns Returns the columns of the text output device for the requested ModeNumber. @param Rows Returns the rows of the text output device for the requested ModeNumber. @retval EFI_SUCCESS The requested mode information was returned. @retval EFI_DEVICE_ERROR The device had an error and could not complete the request. @retval EFI_UNSUPPORTED The mode number was not valid. **/ EFI_STATUS EFIAPI ConSplitterTextOutQueryMode ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN UINTN ModeNumber, OUT UINTN *Columns, OUT UINTN *Rows ); /** Sets the output device(s) to a specified mode. @param This Protocol instance pointer. @param ModeNumber The mode number to set. @retval EFI_SUCCESS The requested text mode was set. @retval EFI_DEVICE_ERROR The device had an error and could not complete the request. @retval EFI_UNSUPPORTED The mode number was not valid. **/ EFI_STATUS EFIAPI ConSplitterTextOutSetMode ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN UINTN ModeNumber ); /** Sets the background and foreground colors for the OutputString () and ClearScreen () functions. @param This Protocol instance pointer. @param Attribute The attribute to set. Bits 0..3 are the foreground color, and bits 4..6 are the background color. All other bits are undefined and must be zero. The valid Attributes are defined in this file. @retval EFI_SUCCESS The attribute was set. @retval EFI_DEVICE_ERROR The device had an error and could not complete the request. @retval EFI_UNSUPPORTED The attribute requested is not defined. **/ EFI_STATUS EFIAPI ConSplitterTextOutSetAttribute ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN UINTN Attribute ); /** Clears the output device(s) display to the currently selected background color. @param This Protocol instance pointer. @retval EFI_SUCCESS The operation completed successfully. @retval EFI_DEVICE_ERROR The device had an error and could not complete the request. @retval EFI_UNSUPPORTED The output device is not in a valid text mode. **/ EFI_STATUS EFIAPI ConSplitterTextOutClearScreen ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This ); /** Sets the current coordinates of the cursor position @param This Protocol instance pointer. @param Column The column position to set the cursor to. Must be greater than or equal to zero and less than the number of columns by QueryMode (). @param Row The row position to set the cursor to. Must be greater than or equal to zero and less than the number of rows by QueryMode (). @retval EFI_SUCCESS The operation completed successfully. @retval EFI_DEVICE_ERROR The device had an error and could not complete the request. @retval EFI_UNSUPPORTED The output device is not in a valid text mode, or the cursor position is invalid for the current mode. **/ EFI_STATUS EFIAPI ConSplitterTextOutSetCursorPosition ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN UINTN Column, IN UINTN Row ); /** Makes the cursor visible or invisible @param This Protocol instance pointer. @param Visible If TRUE, the cursor is set to be visible. If FALSE, the cursor is set to be invisible. @retval EFI_SUCCESS The operation completed successfully. @retval EFI_DEVICE_ERROR The device had an error and could not complete the request, or the device does not support changing the cursor mode. @retval EFI_UNSUPPORTED The output device is not in a valid text mode. **/ EFI_STATUS EFIAPI ConSplitterTextOutEnableCursor ( IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This, IN BOOLEAN Visible ); /** Take the passed in Buffer of size SizeOfCount and grow the buffer by MAX (CONSOLE_SPLITTER_CONSOLES_ALLOC_UNIT, MaxGrow) * SizeOfCount bytes. Copy the current data in Buffer to the new version of Buffer and free the old version of buffer. @param SizeOfCount Size of element in array. @param Count Current number of elements in array. @param Buffer Bigger version of passed in Buffer with all the data. @retval EFI_SUCCESS Buffer size has grown. @retval EFI_OUT_OF_RESOURCES Could not grow the buffer size. **/ EFI_STATUS ConSplitterGrowBuffer ( IN UINTN SizeOfCount, IN UINTN *Count, IN OUT VOID **Buffer ); /** Return the current video mode information. Also returns info about existence of Graphics Output devices or UGA Draw devices in system, and if the Std In device is locked. All the arguments are optional and only returned if a non NULL pointer is passed in. @param This Protocol instance pointer. @param Mode Are we in text of grahics mode. @param GopUgaExists TRUE if Console Spliter has found a GOP or UGA device @param StdInLocked TRUE if StdIn device is keyboard locked @retval EFI_SUCCESS Mode information returned. @retval EFI_INVALID_PARAMETER Invalid parameters. **/ EFI_STATUS EFIAPI ConSpliterConsoleControlGetMode ( IN EFI_CONSOLE_CONTROL_PROTOCOL *This, OUT EFI_CONSOLE_CONTROL_SCREEN_MODE *Mode, OUT BOOLEAN *GopUgaExists, OUT BOOLEAN *StdInLocked ); /** Set the current mode to either text or graphics. Graphics is for Quiet Boot. @param This Console Control Protocol instance pointer. @param Mode Mode to set. @retval EFI_SUCCESS Mode information returned. @retval EFI_INVALID_PARAMETER Invalid parameter. @retval EFI_UNSUPPORTED Operation unsupported. **/ EFI_STATUS EFIAPI ConSpliterConsoleControlSetMode ( IN EFI_CONSOLE_CONTROL_PROTOCOL *This, IN EFI_CONSOLE_CONTROL_SCREEN_MODE Mode ); /** Returns information for an available graphics mode that the graphics device and the set of active video output devices supports. @param This The EFI_GRAPHICS_OUTPUT_PROTOCOL instance. @param ModeNumber The mode number to return information on. @param SizeOfInfo A pointer to the size, in bytes, of the Info buffer. @param Info A pointer to callee allocated buffer that returns information about ModeNumber. @retval EFI_SUCCESS Mode information returned. @retval EFI_BUFFER_TOO_SMALL The Info buffer was too small. @retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the video mode. @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode () @retval EFI_INVALID_PARAMETER One of the input args was NULL. @retval EFI_OUT_OF_RESOURCES No resource available. **/ EFI_STATUS EFIAPI ConSpliterGraphicsOutputQueryMode ( IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, IN UINT32 ModeNumber, OUT UINTN *SizeOfInfo, OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info ); /** Set the video device into the specified mode and clears the visible portions of the output display to black. @param This The EFI_GRAPHICS_OUTPUT_PROTOCOL instance. @param ModeNumber Abstraction that defines the current video mode. @retval EFI_SUCCESS The graphics mode specified by ModeNumber was selected. @retval EFI_DEVICE_ERROR The device had an error and could not complete the request. @retval EFI_UNSUPPORTED ModeNumber is not supported by this device. @retval EFI_OUT_OF_RESOURCES No resource available. **/ EFI_STATUS EFIAPI ConSpliterGraphicsOutputSetMode ( IN EFI_GRAPHICS_OUTPUT_PROTOCOL * This, IN UINT32 ModeNumber ); /** The following table defines actions for BltOperations. EfiBltVideoFill - Write data from the BltBuffer pixel (SourceX, SourceY) directly to every pixel of the video display rectangle (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). Only one pixel will be used from the BltBuffer. Delta is NOT used. EfiBltVideoToBltBuffer - Read data from the video display rectangle (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in the BltBuffer rectangle (DestinationX, DestinationY ) (DestinationX + Width, DestinationY + Height). If DestinationX or DestinationY is not zero then Delta must be set to the length in bytes of a row in the BltBuffer. EfiBltBufferToVideo - Write data from the BltBuffer rectangle (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the video display rectangle (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is not zero then Delta must be set to the length in bytes of a row in the BltBuffer. EfiBltVideoToVideo - Copy from the video display rectangle (SourceX, SourceY) (SourceX + Width, SourceY + Height) . to the video display rectangle (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). The BltBuffer and Delta are not used in this mode. @param This Protocol instance pointer. @param BltBuffer Buffer containing data to blit into video buffer. This buffer has a size of Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL) @param BltOperation Operation to perform on BlitBuffer and video memory @param SourceX X coordinate of source for the BltBuffer. @param SourceY Y coordinate of source for the BltBuffer. @param DestinationX X coordinate of destination for the BltBuffer. @param DestinationY Y coordinate of destination for the BltBuffer. @param Width Width of rectangle in BltBuffer in pixels. @param Height Hight of rectangle in BltBuffer in pixels. @param Delta OPTIONAL. @retval EFI_SUCCESS The Blt operation completed. @retval EFI_INVALID_PARAMETER BltOperation is not valid. @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer. **/ EFI_STATUS EFIAPI ConSpliterGraphicsOutputBlt ( IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, OPTIONAL IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation, IN UINTN SourceX, IN UINTN SourceY, IN UINTN DestinationX, IN UINTN DestinationY, IN UINTN Width, IN UINTN Height, IN UINTN Delta OPTIONAL ); /** Write data from the buffer to video display based on Graphics Output setting. @param Private Consplitter Text Out pointer. @param GraphicsOutput Graphics Output protocol pointer. @param UgaDraw UGA Draw protocol pointer. @retval EFI_UNSUPPORTED No graphics devcie available . @retval EFI_SUCCESS The Blt operation completed. @retval EFI_INVALID_PARAMETER BltOperation is not valid. @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer. **/ EFI_STATUS DevNullGopSync ( IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private, IN EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput, IN EFI_UGA_DRAW_PROTOCOL *UgaDraw ); /** Return the current video mode information. @param This The EFI_UGA_DRAW_PROTOCOL instance. @param HorizontalResolution The size of video screen in pixels in the X dimension. @param VerticalResolution The size of video screen in pixels in the Y dimension. @param ColorDepth Number of bits per pixel, currently defined to be 32. @param RefreshRate The refresh rate of the monitor in Hertz. @retval EFI_SUCCESS Mode information returned. @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode () @retval EFI_INVALID_PARAMETER One of the input args was NULL. **/ EFI_STATUS EFIAPI ConSpliterUgaDrawGetMode ( IN EFI_UGA_DRAW_PROTOCOL *This, OUT UINT32 *HorizontalResolution, OUT UINT32 *VerticalResolution, OUT UINT32 *ColorDepth, OUT UINT32 *RefreshRate ); /** Set the current video mode information. @param This The EFI_UGA_DRAW_PROTOCOL instance. @param HorizontalResolution The size of video screen in pixels in the X dimension. @param VerticalResolution The size of video screen in pixels in the Y dimension. @param ColorDepth Number of bits per pixel, currently defined to be 32. @param RefreshRate The refresh rate of the monitor in Hertz. @retval EFI_SUCCESS Mode information returned. @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode () @retval EFI_OUT_OF_RESOURCES Out of resources. **/ EFI_STATUS EFIAPI ConSpliterUgaDrawSetMode ( IN EFI_UGA_DRAW_PROTOCOL *This, IN UINT32 HorizontalResolution, IN UINT32 VerticalResolution, IN UINT32 ColorDepth, IN UINT32 RefreshRate ); /** Blt a rectangle of pixels on the graphics screen. The following table defines actions for BltOperations. EfiUgaVideoFill: Write data from the BltBuffer pixel (SourceX, SourceY) directly to every pixel of the video display rectangle (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). Only one pixel will be used from the BltBuffer. Delta is NOT used. EfiUgaVideoToBltBuffer: Read data from the video display rectangle (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in the BltBuffer rectangle (DestinationX, DestinationY ) (DestinationX + Width, DestinationY + Height). If DestinationX or DestinationY is not zero then Delta must be set to the length in bytes of a row in the BltBuffer. EfiUgaBltBufferToVideo: Write data from the BltBuffer rectangle (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the video display rectangle (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is not zero then Delta must be set to the length in bytes of a row in the BltBuffer. EfiUgaVideoToVideo: Copy from the video display rectangle (SourceX, SourceY) (SourceX + Width, SourceY + Height) . to the video display rectangle (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height). The BltBuffer and Delta are not used in this mode. @param This Protocol instance pointer. @param BltBuffer Buffer containing data to blit into video buffer. This buffer has a size of Width*Height*sizeof(EFI_UGA_PIXEL) @param BltOperation Operation to perform on BlitBuffer and video memory @param SourceX X coordinate of source for the BltBuffer. @param SourceY Y coordinate of source for the BltBuffer. @param DestinationX X coordinate of destination for the BltBuffer. @param DestinationY Y coordinate of destination for the BltBuffer. @param Width Width of rectangle in BltBuffer in pixels. @param Height Hight of rectangle in BltBuffer in pixels. @param Delta OPTIONAL @retval EFI_SUCCESS The Blt operation completed. @retval EFI_INVALID_PARAMETER BltOperation is not valid. @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer. **/ EFI_STATUS EFIAPI ConSpliterUgaDrawBlt ( IN EFI_UGA_DRAW_PROTOCOL *This, IN EFI_UGA_PIXEL *BltBuffer, OPTIONAL IN EFI_UGA_BLT_OPERATION BltOperation, IN UINTN SourceX, IN UINTN SourceY, IN UINTN DestinationX, IN UINTN DestinationY, IN UINTN Width, IN UINTN Height, IN UINTN Delta OPTIONAL ); /** Write data from the buffer to video display based on UGA Draw setting. @param Private Consplitter Text Out pointer. @param GraphicsOutput Graphics Output protocol pointer. @param UgaDraw UGA Draw protocol pointer. @retval EFI_UNSUPPORTED No graphics devcie available . @retval EFI_SUCCESS The Blt operation completed. @retval EFI_INVALID_PARAMETER BltOperation is not valid. @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer. **/ EFI_STATUS DevNullUgaSync ( IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private, IN EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput, IN EFI_UGA_DRAW_PROTOCOL *UgaDraw ); /** Write a Unicode string to the output device. @param Private Pointer to the console output splitter's private data. It indicates the calling context. @param WString The NULL-terminated Unicode string to be displayed on the output device(s). All output devices must also support the Unicode drawing defined in this file. @retval EFI_SUCCESS The string was output to the device. @retval EFI_DEVICE_ERROR The device reported an error while attempting to output the text. @retval EFI_UNSUPPORTED The output device's mode is not currently in a defined text mode. @retval EFI_WARN_UNKNOWN_GLYPH This warning code indicates that some of the characters in the Unicode string could not be rendered and were skipped. **/ EFI_STATUS DevNullTextOutOutputString ( IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private, IN CHAR16 *WString ); /** Sets the output device(s) to a specified mode. @param Private Text Out Splitter pointer. @param ModeNumber The mode number to set. @retval EFI_SUCCESS The requested text mode was set. @retval EFI_DEVICE_ERROR The device had an error and could not complete the request. @retval EFI_UNSUPPORTED The mode number was not valid. @retval EFI_OUT_OF_RESOURCES Out of resources. **/ EFI_STATUS DevNullTextOutSetMode ( IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private, IN UINTN ModeNumber ); /** Clears the output device(s) display to the currently selected background color. @param Private Text Out Splitter pointer. @retval EFI_SUCCESS The operation completed successfully. @retval EFI_DEVICE_ERROR The device had an error and could not complete the request. @retval EFI_UNSUPPORTED The output device is not in a valid text mode. **/ EFI_STATUS DevNullTextOutClearScreen ( IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private ); /** Sets the current coordinates of the cursor position on NULL device. @param Private Text Out Splitter pointer. @param Column The column position to set the cursor to. Must be greater than or equal to zero and less than the number of columns by QueryMode (). @param Row The row position to set the cursor to. Must be greater than or equal to zero and less than the number of rows by QueryMode (). @retval EFI_SUCCESS Always returned. **/ EFI_STATUS DevNullTextOutSetCursorPosition ( IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private, IN UINTN Column, IN UINTN Row ); /** Set cursor visibility property on NULL device. @param Private Text Out Splitter pointer. @param Visible If TRUE, the cursor is set to be visible, If FALSE, the cursor is set to be invisible. @retval EFI_SUCCESS Always returned. **/ EFI_STATUS DevNullTextOutEnableCursor ( IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private, IN BOOLEAN Visible ); /** Take the DevNull TextOut device and update the Simple Text Out on every UGA device. @param Private Text Out Splitter pointer. @retval EFI_SUCCESS The request is valid. @retval other Return status of TextOut->OutputString () **/ EFI_STATUS DevNullSyncStdOut ( IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private ); #endif