#include "ConSplitter.h"\r
\r
//\r
-// Global Variables\r
+// Template for Text In Splitter\r
//\r
-STATIC TEXT_IN_SPLITTER_PRIVATE_DATA mConIn = {\r
+TEXT_IN_SPLITTER_PRIVATE_DATA mConIn = {\r
TEXT_IN_SPLITTER_PRIVATE_DATA_SIGNATURE,\r
(EFI_HANDLE) NULL,\r
{\r
FALSE\r
};\r
\r
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_UGA_DRAW_PROTOCOL gUgaDrawProtocolTemplate = {\r
+//\r
+// Template for Uga Draw Protocol\r
+//\r
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_UGA_DRAW_PROTOCOL mUgaDrawProtocolTemplate = {\r
ConSpliterUgaDrawGetMode,\r
ConSpliterUgaDrawSetMode,\r
ConSpliterUgaDrawBlt\r
};\r
\r
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_GRAPHICS_OUTPUT_PROTOCOL gGraphicsOutputProtocolTemplate = {\r
+//\r
+// Template for Graphics Output Protocol\r
+//\r
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_GRAPHICS_OUTPUT_PROTOCOL mGraphicsOutputProtocolTemplate = {\r
ConSpliterGraphicsOutputQueryMode,\r
ConSpliterGraphicsOutputSetMode,\r
ConSpliterGraphicsOutputBlt,\r
NULL\r
};\r
\r
-STATIC TEXT_OUT_SPLITTER_PRIVATE_DATA mConOut = {\r
+//\r
+// Template for Text Out Splitter\r
+//\r
+TEXT_OUT_SPLITTER_PRIVATE_DATA mConOut = {\r
TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE,\r
(EFI_HANDLE) NULL,\r
{\r
(INT32 *) NULL\r
};\r
\r
-STATIC TEXT_OUT_SPLITTER_PRIVATE_DATA mStdErr = {\r
+//\r
+// Template for Standard Error Text Out Splitter\r
+//\r
+TEXT_OUT_SPLITTER_PRIVATE_DATA mStdErr = {\r
TEXT_OUT_SPLITTER_PRIVATE_DATA_SIGNATURE,\r
(EFI_HANDLE) NULL,\r
{\r
(INT32 *) NULL\r
};\r
\r
+//\r
+// Driver binding instance for Console Input Device\r
+//\r
EFI_DRIVER_BINDING_PROTOCOL gConSplitterConInDriverBinding = {\r
ConSplitterConInDriverBindingSupported,\r
ConSplitterConInDriverBindingStart,\r
NULL\r
};\r
\r
+//\r
+// Driver binding instance for Simple Pointer protocol\r
+//\r
EFI_DRIVER_BINDING_PROTOCOL gConSplitterSimplePointerDriverBinding = {\r
ConSplitterSimplePointerDriverBindingSupported,\r
ConSplitterSimplePointerDriverBindingStart,\r
NULL\r
};\r
\r
+//\r
+// Driver binding instance for Console Out device\r
+//\r
EFI_DRIVER_BINDING_PROTOCOL gConSplitterConOutDriverBinding = {\r
ConSplitterConOutDriverBindingSupported,\r
ConSplitterConOutDriverBindingStart,\r
NULL\r
};\r
\r
+//\r
+// Driver binding instance for Standard Error device\r
+//\r
EFI_DRIVER_BINDING_PROTOCOL gConSplitterStdErrDriverBinding = {\r
ConSplitterStdErrDriverBindingSupported,\r
ConSplitterStdErrDriverBindingStart,\r
structure.\r
\r
@retval EFI_OUT_OF_RESOURCES Out of resources.\r
- @retval other Out of resources.\r
+ @retval EFI_SUCCESS Text Input Devcie's private data has been constructed.\r
+ @retval other Failed to construct private data.\r
\r
**/\r
EFI_STATUS\r
structure.\r
\r
@retval EFI_OUT_OF_RESOURCES Out of resources.\r
+ @retval EFI_SUCCESS Text Input Devcie's private data has been constructed.\r
\r
**/\r
EFI_STATUS\r
// Copy protocols template\r
//\r
if (FeaturePcdGet (PcdConOutUgaSupport)) {\r
- CopyMem (&ConOutPrivate->UgaDraw, &gUgaDrawProtocolTemplate, sizeof (EFI_UGA_DRAW_PROTOCOL));\r
+ CopyMem (&ConOutPrivate->UgaDraw, &mUgaDrawProtocolTemplate, sizeof (EFI_UGA_DRAW_PROTOCOL));\r
}\r
\r
if (FeaturePcdGet (PcdConOutGopSupport)) {\r
- CopyMem (&ConOutPrivate->GraphicsOutput, &gGraphicsOutputProtocolTemplate, sizeof (EFI_GRAPHICS_OUTPUT_PROTOCOL));\r
+ CopyMem (&ConOutPrivate->GraphicsOutput, &mGraphicsOutputProtocolTemplate, sizeof (EFI_GRAPHICS_OUTPUT_PROTOCOL));\r
}\r
\r
//\r
\r
ConOutPrivate->GraphicsOutput.Mode->MaxMode = 1;\r
//\r
- // Initial current mode to unknow state, and then set to mode 0\r
+ // Initial current mode to unknown state, and then set to mode 0\r
//\r
ConOutPrivate->GraphicsOutput.Mode->Mode = 0xffff;\r
ConOutPrivate->GraphicsOutput.SetMode (&ConOutPrivate->GraphicsOutput, 0);\r
}\r
\r
- return Status;\r
+ return EFI_SUCCESS;\r
}\r
\r
\r
@param RemainingDevicePath Optional parameter use to pick a specific child\r
device to start.\r
\r
- @retval EFI_SUCCESS This driver supports this device\r
- @retval other This driver does not support this device\r
+ @retval EFI_SUCCESS This driver supports this device.\r
+ @retval other This driver does not support this device.\r
\r
**/\r
EFI_STATUS\r
@param RemainingDevicePath Optional parameter use to pick a specific child\r
device to start.\r
\r
- @retval EFI_SUCCESS This driver supports this device\r
- @retval other This driver does not support this device\r
+ @retval EFI_SUCCESS This driver supports this device.\r
+ @retval other This driver does not support this device.\r
\r
**/\r
EFI_STATUS\r
@param RemainingDevicePath Optional parameter use to pick a specific child\r
device to start.\r
\r
- @retval EFI_SUCCESS This driver supports this device\r
- @retval other This driver does not support this device\r
+ @retval EFI_SUCCESS This driver supports this device.\r
+ @retval other This driver does not support this device.\r
\r
**/\r
EFI_STATUS\r
@param RemainingDevicePath Optional parameter use to pick a specific child\r
device to start.\r
\r
- @retval EFI_SUCCESS This driver supports this device\r
- @retval other This driver does not support this device\r
+ @retval EFI_SUCCESS This driver supports this device.\r
+ @retval other This driver does not support this device.\r
\r
**/\r
EFI_STATUS\r
@param RemainingDevicePath Optional parameter use to pick a specific child\r
device to start.\r
\r
- @retval EFI_SUCCESS This driver supports this device\r
- @retval other This driver does not support this device\r
+ @retval EFI_SUCCESS This driver supports this device.\r
+ @retval other This driver does not support this device.\r
\r
**/\r
EFI_STATUS\r
@param InterfaceGuid The specified protocol to be opened.\r
@param Interface Protocol interface returned.\r
\r
- @retval EFI_SUCCESS This driver supports this device\r
+ @retval EFI_SUCCESS This driver supports this device.\r
@retval other Failed to open the specified Console Device Guid\r
or specified protocol.\r
\r
return Status;\r
}\r
\r
+ //\r
+ // Add this device into Text In devices list.\r
+ //\r
Status = ConSplitterTextInAddDevice (&mConIn, TextIn);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
mConIn.VirtualHandle,\r
EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ if (!EFI_ERROR (Status)) {\r
+ //\r
+ // If Simple Text Input Ex protocol exists,\r
+ // add this device into Text In Ex devices list.\r
+ //\r
+ Status = ConSplitterTextInExAddDevice (&mConIn, TextInEx);\r
}\r
\r
- Status = ConSplitterTextInExAddDevice (&mConIn, TextInEx);\r
-\r
return Status;\r
}\r
\r
EFI_STATUS Status;\r
EFI_SIMPLE_POINTER_PROTOCOL *SimplePointer;\r
\r
+ //\r
+ // Start ConSplitter on ControllerHandle, and create the virtual\r
+ // agrogated console device on first call Start for a SimplePointer handle.\r
+ //\r
Status = ConSplitterStart (\r
This,\r
ControllerHandle,\r
return Status;\r
}\r
\r
+ //\r
+ // Add this devcie into Simple Pointer devices list.\r
+ //\r
return ConSplitterSimplePointerAddDevice (&mConIn, SimplePointer);\r
}\r
\r
EFI_STATUS Status;\r
EFI_ABSOLUTE_POINTER_PROTOCOL *AbsolutePointer;\r
\r
+ //\r
+ // Start ConSplitter on ControllerHandle, and create the virtual\r
+ // agrogated console device on first call Start for a AbsolutePointer handle.\r
+ //\r
Status = ConSplitterStart (\r
This,\r
ControllerHandle,\r
return Status;\r
}\r
\r
+ //\r
+ // Add this devcie into Absolute Pointer devices list.\r
+ //\r
return ConSplitterAbsolutePointerAddDevice (&mConIn, AbsolutePointer);\r
}\r
\r
EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;\r
EFI_UGA_DRAW_PROTOCOL *UgaDraw;\r
\r
+ //\r
+ // Start ConSplitter on ControllerHandle, and create the virtual\r
+ // agrogated console device on first call Start for a ConsoleOut handle.\r
+ //\r
Status = ConSplitterStart (\r
This,\r
ControllerHandle,\r
\r
if (EFI_ERROR (Status) && FeaturePcdGet (PcdUgaConsumeSupport)) {\r
//\r
- // Open UGA_DRAW protocol\r
+ // Open UGA DRAW protocol\r
//\r
Status = gBS->OpenProtocol (\r
ControllerHandle,\r
EFI_STATUS Status;\r
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *TextOut;\r
\r
+ //\r
+ // Start ConSplitter on ControllerHandle, and create the virtual\r
+ // agrogated console device on first call Start for a StandardError handle.\r
+ //\r
Status = ConSplitterStart (\r
This,\r
ControllerHandle,\r
\r
\r
/**\r
- Stop ConSplitter on device handle by opening Console Device Guid on device handle \r
+ Stop ConSplitter on device handle by closing Console Device Guid on device handle \r
and the console virtual handle.\r
\r
@param This Protocol instance pointer.\r
This->DriverBindingHandle,\r
ConSplitterVirtualHandle\r
);\r
+\r
gBS->CloseProtocol (\r
ControllerHandle,\r
DeviceGuid,\r
IN EFI_HANDLE *ChildHandleBuffer\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_SIMPLE_TEXT_INPUT_PROTOCOL *TextIn;\r
-\r
+ EFI_STATUS Status;\r
+ EFI_SIMPLE_TEXT_INPUT_PROTOCOL *TextIn;\r
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *TextInEx;\r
+\r
if (NumberOfChildren == 0) {\r
return EFI_SUCCESS;\r
}\r
ControllerHandle,\r
EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- Status = ConSplitterTextInExDeleteDevice (&mConIn, TextInEx);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ if (!EFI_ERROR (Status)) {\r
+ //\r
+ // If Simple Text Input Ex protocol exists,\r
+ // remove device from Text Input Ex devices list.\r
+ // \r
+ Status = ConSplitterTextInExDeleteDevice (&mConIn, TextInEx);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
}\r
\r
-\r
+ //\r
+ // Close Simple Text In protocol on controller handle and virtual handle.\r
+ //\r
Status = ConSplitterStop (\r
This,\r
ControllerHandle,\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
//\r
- // Delete this console input device's data structures.\r
- //\r
+ // Remove device from Text Input devices list.\r
+ // \r
return ConSplitterTextInDeleteDevice (&mConIn, TextIn);\r
}\r
\r
return EFI_SUCCESS;\r
}\r
\r
+ //\r
+ // Close Simple Pointer protocol on controller handle and virtual handle.\r
+ //\r
Status = ConSplitterStop (\r
This,\r
ControllerHandle,\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
//\r
- // Delete this console input device's data structures.\r
+ // Remove this device from Simple Pointer device list.\r
//\r
return ConSplitterSimplePointerDeleteDevice (&mConIn, SimplePointer);\r
}\r
return EFI_SUCCESS;\r
}\r
\r
+ //\r
+ // Close Absolute Pointer protocol on controller handle and virtual handle.\r
+ //\r
Status = ConSplitterStop (\r
This,\r
ControllerHandle,\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
//\r
- // Delete this console input device's data structures.\r
+ // Remove this device from Absolute Pointer device list.\r
//\r
return ConSplitterAbsolutePointerDeleteDevice (&mConIn, AbsolutePointer);\r
}\r
return EFI_SUCCESS;\r
}\r
\r
+ //\r
+ // Close Absolute Pointer protocol on controller handle and virtual handle.\r
+ //\r
Status = ConSplitterStop (\r
This,\r
ControllerHandle,\r
}\r
\r
//\r
- // Delete this console output device's data structures.\r
+ // Remove this device from Text Out device list.\r
//\r
return ConSplitterTextOutDeleteDevice (&mConOut, TextOut);\r
}\r
return EFI_SUCCESS;\r
}\r
\r
+ //\r
+ // Close Standard Error Device on controller handle and virtual handle.\r
+ //\r
Status = ConSplitterStop (\r
This,\r
ControllerHandle,\r
return EFI_NOT_FOUND;\r
}\r
\r
+/**\r
+ Reallocate Text Out mode map.\r
+\r
+ @param Private Consplitter Text Out pointer.\r
+\r
+ @retval EFI_SUCCESS Buffer size has grown\r
+ @retval EFI_OUT_OF_RESOURCES Could not grow the buffer size.\r
+\r
+**/\r
EFI_STATUS\r
ConSplitterGrowMapTable (\r
IN TEXT_OUT_SPLITTER_PRIVATE_DATA *Private\r
/**\r
Add the device's output mode to console splitter's mode list.\r
\r
- @param Private Text Out Splitter pointer\r
+ @param Private Text Out Splitter pointer.\r
@param TextOut Simple Text Output protocol pointer.\r
\r
- @reture None\r
+ @return None\r
\r
**/\r
VOID\r
from ConsoleOutMode variable and set it; if the variable does not exist,\r
set to user defined console mode.\r
\r
- None\r
+ @param Private Consplitter Text Out pointer.\r
\r
@return None\r
\r
\r
return Status;\r
}\r
-//\r
-// ConSplitter TextIn member functions\r
-//\r
+\r
\r
/**\r
Reset the input device and optionaly run diagnostics\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
- @param This Protocol instance pointer.\r
+ @param Private Protocol instance pointer.\r
@param Key Driver may perform diagnostics on reset.\r
\r
@retval EFI_SUCCESS The keystroke information was returned.\r
BackSpaceString[0] = CHAR_BACKSPACE;\r
BackSpaceString[1] = 0;\r
\r
- SpaceString[0] = ' ';\r
+ SpaceString[0] = L' ';\r
SpaceString[1] = 0;\r
\r
ConSplitterTextOutOutputString (&mConOut.TextOut, BackSpaceString);\r
timer. If the Password is too big return an error. If the Password is valid\r
Copy the Password and enable state variable and then arm the periodic timer\r
\r
+ @param This Console Control protocol pointer.\r
+ @param Password The password input.\r
\r
@retval EFI_SUCCESS Lock the StdIn device\r
@retval EFI_INVALID_PARAMETER Password is NULL\r
\r
\r
/**\r
+ Test if the key has been registered on input device.\r
\r
@param RegsiteredData A pointer to a buffer that is filled in with the\r
keystroke state data for the key that was\r
\r
}\r
\r
-//\r
-// Simple Text Input Ex protocol functions\r
-//\r
-\r
\r
/**\r
Reset the input device and optionaly run diagnostics\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
- @param This Protocol instance pointer. State -\r
+ @param Private Protocol instance pointer.\r
+ @param State The state information of simple pointer device.\r
\r
@retval EFI_SUCCESS The keystroke information was returned.\r
@retval EFI_NOT_READY There was no keystroke data availiable.\r
}\r
}\r
\r
-//\r
-// Absolute Pointer Protocol functions\r
-//\r
-\r
-\r
/**\r
Resets the pointer device hardware.\r
\r
Write a Unicode string to the output device.\r
\r
@param This Protocol instance pointer.\r
- @param String The NULL-terminated Unicode string to be\r
+ @param WString The NULL-terminated Unicode string to be\r
displayed on the output device(s). All output\r
devices must also support the Unicode drawing\r
defined in this file.\r
target device.\r
\r
@param This Protocol instance pointer.\r
- @param String The NULL-terminated Unicode string to be\r
+ @param WString The NULL-terminated Unicode string to be\r
examined for the output device(s).\r
\r
@retval EFI_SUCCESS The device(s) are capable of rendering the\r
\r
@param This Protocol instance pointer.\r
@param ModeNumber The mode number to return information on.\r
- @param Rows Returns the geometry of the text output device\r
+ @param Columns Returns the columns of the text output device\r
+ for the requested ModeNumber.\r
+ @param Rows Returns the rows of the text output device\r
for the requested ModeNumber.\r
\r
@retval EFI_SUCCESS The requested mode information was returned.\r
Sets the current coordinates of the cursor position\r
\r
@param This Protocol instance pointer.\r
- @param Row the position to set the cursor to. Must be\r
+ @param Column The column position to set the cursor to. Must be\r
+ greater than or equal to zero and less than the\r
+ number of columns by QueryMode ().\r
+ @param Row The row position to set the cursor to. Must be\r
greater than or equal to zero and less than the\r
- number of columns and rows by QueryMode ().\r
+ number of rows by QueryMode ().\r
\r
@retval EFI_SUCCESS The operation completed successfully.\r
@retval EFI_DEVICE_ERROR The device had an error and could not complete\r